@quranjs/api 3.7.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +94 -0
- package/dist/app-state-state-DN5xrHqP.d.mts +528 -0
- package/dist/app-state-state-DN5xrHqP.d.ts +528 -0
- package/dist/index.d.mts +4 -4
- package/dist/index.d.ts +4 -4
- package/dist/index.min.js +2 -2
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +2 -2
- package/dist/index.min.mjs.map +1 -1
- package/dist/public.d.mts +6 -4
- package/dist/public.d.ts +6 -4
- package/dist/public.min.js +2 -2
- package/dist/public.min.js.map +1 -1
- package/dist/public.min.mjs +2 -2
- package/dist/public.min.mjs.map +1 -1
- package/dist/{runtime-utils-z2Ga9MgK.d.ts → runtime-utils-BgscSsmR.d.mts} +1 -1
- package/dist/{runtime-utils-BG7Q7TVB.d.mts → runtime-utils-CASDV4hu.d.ts} +1 -1
- package/dist/server.d.mts +7 -4
- package/dist/server.d.ts +7 -4
- package/dist/server.min.js +2 -2
- package/dist/server.min.js.map +1 -1
- package/dist/server.min.mjs +2 -2
- package/dist/server.min.mjs.map +1 -1
- package/dist/{verses-gs60vEyE.d.ts → verses-CAWZPink.d.mts} +16 -6
- package/dist/{verses-CWixKr_f.d.mts → verses-DLfdreUO.d.ts} +16 -6
- package/package.json +3 -2
- package/dist/index-BJ5hWalX.d.mts +0 -292
- package/dist/index-BJ5hWalX.d.ts +0 -292
package/dist/public.min.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/generated/specs/public-operation-catalog.json","../src/generated/public-contracts.ts","../src/lib/http-utils.ts","../src/generated/contracts.ts","../src/lib/runtime-utils.ts","../src/lib/url.ts","../src/runtime/quran-reflect-posts.ts","../src/lib/service-config.ts","../src/sdk/public-fetcher.ts","../src/runtime/create-public-client.ts","../src/public.ts"],"names":["public_operation_catalog_default","publicOperationCatalog","prepareBody","request","headers","toUserSession","token","currentSession","expiresIn","accessToken","idToken","refreshToken","tokenType","scope","expiresAt","resolveCatalogOperation","section","operationName","operation","HTTP_METHOD_TO_MUTATION_NAME","toCamelCase","value","parts","part","index","lower","toPascalCase","camel","isPathParam","segment","getResourceSegments","path","segments","pickGeneratedMethodName","resourceSegments","lastSegment","literalSegments","lastLiteral","groupLiteral","createRawClient","fetcher","rawOperations","resolvedOperation","createGeneratedGroups","groups","literals","groupName","suggestedName","currentGroup","methodName","decamelize","humps","ensureLeadingSlash","removeTrailingSlash","replacePathParams","params","_match","rawKey","normalizePathTemplate","fieldsKey","fieldsKeySet","key","preservedKeys","paramsToString","options","paramsString","rawValue","fields","fieldKey","isObject","isCreatePayload","createQuranReflectPostsFacade","generatedPosts","payloadOrRequest","idOrRequest","query","payload","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","PublicQuranFetcher","config","doFetch","storedSession","session","service","baseUrl","usesGateway","servicePath","effectiveAuth","url","body","response","json","auth","services","directBaseUrl","normalizedPath","legacyPrefix","prefix","SERVER_ONLY_MESSAGE","LEGACY_BOOKMARK_GET_MESSAGE","createUserServiceRequest","method","createAuthFacade","raw","generatedGroups","collectionId","bookmarkId","id","noteId","verseKey","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createServerOnlyGuard","fail","proxy","_target","property","createPublicRuntimeClient","authV1","quranReflectV1","oauth2V1","serverOnlyGuard","createPublicClient"],"mappings":"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","file":"public.min.mjs","sourcesContent":["{\n \"auth\": {\n \"v1\": {\n \"operations\": {\n \"getV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections\"\n },\n \"postV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections\"\n },\n \"postV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"getV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"postV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\"\n },\n \"getV1CollectionsAll\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/all\"\n },\n \"getV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks\"\n },\n \"postV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/bookmarks\"\n },\n \"deleteV1BookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/bookmarks/{bookmarkId}\"\n },\n \"getV1BookmarksAyahsRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/ayahs-range\"\n },\n \"getV1BookmarksBookmark\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/bookmark\"\n },\n \"getV1BookmarksCollections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/collections\"\n },\n \"getV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1PreferencesBulk\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences/bulk\"\n },\n \"getV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"postV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"getV1GoalsGetTodaysPlan\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/get-todays-plan\"\n },\n \"putV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"deleteV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"postV1Goals\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/goals\"\n },\n \"getV1GoalsEstimate\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/estimate\"\n },\n \"getV1Streaks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks\"\n },\n \"getV1StreaksCurrentStreakDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks/current-streak-days\"\n },\n \"getV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days\"\n },\n \"postV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/activity-days\"\n },\n \"getV1ActivityDaysEstimateReadingTime\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days/estimate-reading-time\"\n },\n \"getV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes\"\n },\n \"postV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes\"\n },\n \"getV1NotesByVerseByVerseKey\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-verse/{verseKey}\"\n },\n \"getV1NotesByAttachedEntity\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-attached-entity\"\n },\n \"getV1NotesCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/count-within-range\"\n },\n \"getV1NotesByRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-range\"\n },\n \"getV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"patchV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"deleteV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"postV1NotesByNoteIdPublish\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes/{noteId}/publish\"\n }\n },\n \"service\": \"auth\",\n \"version\": \"v1\"\n }\n },\n \"oauth2\": {\n \"v1\": {\n \"operations\": {\n \"oauth2TokenExchange\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/token\"\n },\n \"introspectOauth2Token\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/introspect\"\n },\n \"revokeOauth2Token\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/revoke\"\n },\n \"oAuth2Authorize\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/auth\"\n },\n \"getOidcUserInfo\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/userinfo\"\n },\n \"revokeOidcSession\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/sessions/logout\"\n }\n },\n \"service\": \"oauth2\",\n \"version\": \"v1\"\n }\n },\n \"quranReflect\": {\n \"v1\": {\n \"operations\": {\n \"usersControllerProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerUpdateProfile\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerEditProfile\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/my-rooms\"\n },\n \"usersControllerSearch\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/search\"\n },\n \"usersControllerToggleFollow\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followeeId}/toggle-follow\"\n },\n \"usersControllerRemoveFollower\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followerId}/remove-follower\"\n },\n \"usersControllerGetUserProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}\"\n },\n \"usersControllerGetUserProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{username}/profile\"\n },\n \"usersControllerGetUserFollowers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/followers\"\n },\n \"usersControllerGetUserFollowing\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/following\"\n },\n \"roomsControllerAdminsAccess\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/admins-access\"\n },\n \"roomsControllerCreateNewGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerUpdateGroup\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerCreateNewPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerUpdatePage\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerGetRoomMembers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/members\"\n },\n \"roomsControllerGetClosedGroupJoinRequestStatus\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerRequestToJoinClosedGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerCancelClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerGetPendingClosedGroupJoinRequests\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{groupId}/join-requests\"\n },\n \"roomsControllerApproveClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join-requests/{userId}/approve\"\n },\n \"roomsControllerRejectClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{groupId}/join-requests/{userId}\"\n },\n \"roomsControllerInviteUserToRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{id}/invite\"\n },\n \"roomsControllerAcceptInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/accept-invite\"\n },\n \"roomsControllerRejectInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/reject-invite\"\n },\n \"roomsControllerRemoveMember\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{id}/members/{userId}\"\n },\n \"roomsControllerGetRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/joined-rooms\"\n },\n \"roomsControllerGetRooms2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/managed-rooms\"\n },\n \"roomsControllerSearchRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/search\"\n },\n \"roomsControllerGetRoomProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}\"\n },\n \"roomsControllerGetRoomProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}\"\n },\n \"roomsControllerAcceptByPrivateToken\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}/accept/{token}\"\n },\n \"roomsControllerAcceptByPrivateToken2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}/accept/{token}\"\n },\n \"roomsControllerGetRoomProfileById\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}\"\n },\n \"roomsControllerGetRoomPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/posts\"\n },\n \"roomsControllerJoinRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join\"\n },\n \"roomsControllerLeaveGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/leave\"\n },\n \"roomsControllerFollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/follow\"\n },\n \"roomsControllerUnfollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/unfollow\"\n },\n \"roomsControllerUpdatePostPrivacy\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/{roomId}/posts/{postId}/privacy\"\n },\n \"postsControllerFeed\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/feed\"\n },\n \"postsControllerGetRelatedPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{postId}/related\"\n },\n \"postsControllerGetReReflections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{postId}/re-reflections\"\n },\n \"postsControllerGetLoggedinUserPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/my-posts\"\n },\n \"postsControllerGetMyPostsCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-within-range\"\n },\n \"postsControllerGetLikedState\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/liked\"\n },\n \"postsControllerFindOne\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerEdit\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerDelete\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerViewTracking\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/viewed/{id}\"\n },\n \"postsControllerReadTracking\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/read/{id}\"\n },\n \"postsControllerCreate\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts\"\n },\n \"postsControllerReportAbuse\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/report\"\n },\n \"postsControllerGetUserPost\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/user-posts/{id}\"\n },\n \"postsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-like\"\n },\n \"postsControllerToggleSave\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-save\"\n },\n \"postsControllerGetComments\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/comments\"\n },\n \"postsControllerGetAllComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/all-comments\"\n },\n \"postsControllerExportMultiplePosts\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/export/pdf\"\n },\n \"postsControllerGetPublicPostCountByVerse\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-by-verse/{verseId}\"\n },\n \"postsControllerGetMyPostsByVerse\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/by-verse/{verseKey}\"\n },\n \"tagsControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/tags\"\n },\n \"commentsControllerCreate\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/comments\"\n },\n \"commentsControllerEdit\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/comments/{id}\"\n },\n \"commentsControllerDeleteComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/delete\"\n },\n \"commentsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/comments/{id}/toggle-like\"\n },\n \"commentsControllerGet\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/replies\"\n },\n \"exploreControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/explore\"\n },\n \"trendingHashtagsControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/trending-hashtags\"\n }\n },\n \"service\": \"quranReflect\",\n \"version\": \"v1\"\n }\n }\n}\n","import type {\n CatalogOperationDefinition as BaseCatalogOperationDefinition,\n OperationDefinition as BaseOperationDefinition,\n ServiceOperationCatalog as BaseServiceOperationCatalog,\n HttpMethod,\n OperationAuthMode,\n} from \"./contracts\";\nimport publicOperationCatalogJson from \"./specs/public-operation-catalog.json\";\n\nexport type AuthService = \"auth\" | \"quranReflect\";\n\nexport type PublicApiService = AuthService | \"oauth2\";\n\nexport interface OperationDefinition\n extends Omit<BaseOperationDefinition, \"service\"> {\n service: PublicApiService;\n}\n\nexport interface CatalogOperationDefinition\n extends Omit<BaseCatalogOperationDefinition, \"service\"> {\n service?: PublicApiService;\n}\n\nexport interface ServiceOperationCatalog\n extends Omit<BaseServiceOperationCatalog, \"operations\" | \"service\"> {\n operations: Record<string, CatalogOperationDefinition>;\n service: PublicApiService;\n}\n\ninterface PublicOperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n}\n\nexport const publicOperationCatalog =\n publicOperationCatalogJson as PublicOperationCatalog;\n\nexport type { HttpMethod, OperationAuthMode };\n","import type { OperationRequest, TokenResponse, UserSession } from \"@/types\";\n\nexport const encodeBasicAuth = (username: string, password: string): string => {\n const raw = `${username}:${password}`;\n\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(raw).toString(\"base64\");\n }\n\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(raw);\n }\n\n throw new Error(\"No base64 encoder available for HTTP basic auth.\");\n};\n\nexport const prepareBody = (\n request: OperationRequest,\n headers: Headers,\n): string | URLSearchParams | undefined => {\n if (request.body === undefined || request.body === null) {\n return undefined;\n }\n\n if (\n typeof request.body === \"string\" ||\n request.body instanceof URLSearchParams\n ) {\n if (request.contentType) {\n headers.set(\"Content-Type\", request.contentType);\n }\n\n return request.body;\n }\n\n headers.set(\"Content-Type\", request.contentType ?? \"application/json\");\n return JSON.stringify(request.body);\n};\n\nexport const toUserSession = (\n token: TokenResponse & {\n accessToken?: string;\n expiresIn?: number;\n idToken?: string;\n refreshToken?: string;\n tokenType?: string;\n },\n currentSession?: Partial<UserSession> | null,\n): UserSession => {\n const expiresIn = token.expiresIn ?? token.expires_in;\n const accessToken = token.accessToken ?? token.access_token;\n const idToken = token.idToken ?? token.id_token ?? currentSession?.idToken;\n const refreshToken =\n token.refreshToken ?? token.refresh_token ?? currentSession?.refreshToken;\n const tokenType =\n token.tokenType ?? token.token_type ?? currentSession?.tokenType;\n const scope = token.scope ?? currentSession?.scope;\n const expiresAt = expiresIn\n ? Date.now() + expiresIn * 1000\n : currentSession?.expiresAt;\n\n return {\n accessToken,\n expiresAt,\n idToken,\n refreshToken,\n scope,\n tokenType,\n };\n};\n","import type { ApiService } from \"@/types\";\n\nimport operationCatalogJson from \"./specs/operation-catalog.json\";\n\nexport type HttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type OperationAuthMode = \"none\" | \"app\" | \"user\";\n\nexport interface OperationDefinition {\n auth: OperationAuthMode;\n method: HttpMethod;\n operationId?: string;\n operationName: string;\n path: string;\n serverUrl?: string;\n service: ApiService;\n tags: string[];\n version: string;\n}\n\nexport type CatalogOperationDefinition = Omit<\n OperationDefinition,\n \"operationName\" | \"service\" | \"tags\" | \"version\"\n> &\n Partial<\n Pick<OperationDefinition, \"operationName\" | \"service\" | \"tags\" | \"version\">\n >;\n\nexport interface ServiceOperationCatalog {\n operations: Record<string, CatalogOperationDefinition>;\n service: ApiService;\n version: string;\n}\n\ninterface OperationCatalog {\n analytics: { v1: ServiceOperationCatalog };\n auth: { v1: ServiceOperationCatalog };\n content: { v4: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n search: { v1: ServiceOperationCatalog };\n}\n\nexport const operationCatalog = operationCatalogJson as OperationCatalog;\n\nexport const resolveCatalogOperation = (\n section: ServiceOperationCatalog,\n operationName: string,\n operation: CatalogOperationDefinition,\n): OperationDefinition => {\n return {\n ...operation,\n operationName: operation.operationName ?? operationName,\n service: operation.service ?? section.service,\n tags: operation.tags ?? [],\n version: operation.version ?? section.version,\n };\n};\n\nexport const getOperationByName = (\n service: ApiService,\n version: string,\n operationName: string,\n): OperationDefinition | undefined => {\n const serviceCatalog = operationCatalog[service] as\n | Record<string, ServiceOperationCatalog | undefined>\n | undefined;\n if (!serviceCatalog) {\n return undefined;\n }\n\n const versionCatalog = serviceCatalog[version];\n const operation = versionCatalog?.operations[operationName];\n if (!versionCatalog || !operation) {\n return undefined;\n }\n\n return resolveCatalogOperation(versionCatalog, operationName, operation);\n};\n","import type {\n HttpMethod,\n OperationDefinition,\n ServiceOperationCatalog,\n} from \"@/generated/contracts\";\nimport { resolveCatalogOperation } from \"@/generated/contracts\";\n\nexport const HTTP_METHOD_TO_MUTATION_NAME: Record<HttpMethod, string> = {\n delete: \"remove\",\n get: \"list\",\n patch: \"update\",\n post: \"create\",\n put: \"update\",\n};\n\nexport const toCamelCase = (value: string): string => {\n const parts = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 0) {\n return \"misc\";\n }\n\n return parts\n .map((part, index) => {\n const lower = part.toLowerCase();\n if (index === 0) {\n return lower;\n }\n\n return lower.charAt(0).toUpperCase() + lower.slice(1);\n })\n .join(\"\");\n};\n\nexport const toPascalCase = (value: string): string => {\n const camel = toCamelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n};\n\nexport const isPathParam = (segment: string): boolean =>\n segment.startsWith(\"{\") && segment.endsWith(\"}\");\n\nexport const getResourceSegments = (path: string): string[] => {\n const segments = path.split(\"/\").filter(Boolean);\n if (segments[0]?.match(/^v\\d+$/)) {\n return segments.slice(1);\n }\n\n return segments;\n};\n\nexport const pickGeneratedMethodName = (\n operation: OperationDefinition,\n): string => {\n const resourceSegments = getResourceSegments(operation.path);\n const lastSegment = resourceSegments.at(-1);\n const literalSegments = resourceSegments.filter(\n (segment) => !isPathParam(segment),\n );\n const lastLiteral = literalSegments.at(-1);\n const groupLiteral = literalSegments[0];\n\n if (resourceSegments.length === 1) {\n return HTTP_METHOD_TO_MUTATION_NAME[operation.method];\n }\n\n if (\n resourceSegments.length === 2 &&\n lastSegment &&\n isPathParam(lastSegment)\n ) {\n if (operation.method === \"get\") {\n return \"get\";\n }\n\n if (operation.method === \"delete\") {\n return \"remove\";\n }\n\n return \"update\";\n }\n\n if (lastSegment && !isPathParam(lastSegment) && lastLiteral) {\n if (lastLiteral === groupLiteral) {\n return `${HTTP_METHOD_TO_MUTATION_NAME[operation.method]}ById`;\n }\n\n return toCamelCase(lastLiteral);\n }\n\n return toCamelCase(operation.operationName);\n};\n\nexport type RawOperation = (request?: unknown) => Promise<unknown>;\nexport type GeneratedGroup = Record<string, RawOperation>;\nexport type GeneratedGroups = Record<string, GeneratedGroup>;\n\nexport interface FetcherLike {\n request<T = unknown>(\n service: string,\n path: string,\n query?: unknown,\n request?: unknown,\n ): Promise<T>;\n requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: unknown,\n ): Promise<T>;\n getUserSession(): Promise<unknown>;\n setUserSession(session: unknown): Promise<void>;\n buildServiceUrl(service: string, path: string, query?: unknown): string;\n}\n\nexport const createRawClient = (\n fetcher: FetcherLike,\n section: ServiceOperationCatalog,\n): Record<string, RawOperation> => {\n const rawOperations: Record<string, RawOperation> = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n\n rawOperations[operationName] = (request?: unknown) =>\n fetcher.requestOperation(resolvedOperation, request);\n }\n\n return rawOperations;\n};\n\nexport const createGeneratedGroups = (\n section: ServiceOperationCatalog,\n rawOperations: Record<string, RawOperation>,\n): GeneratedGroups => {\n const groups: GeneratedGroups = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n const literals = getResourceSegments(resolvedOperation.path).filter(\n (segment) => !isPathParam(segment),\n );\n const groupName = toCamelCase(literals[0] ?? \"misc\");\n const suggestedName = pickGeneratedMethodName(resolvedOperation);\n const currentGroup = groups[groupName] ?? {};\n let methodName = suggestedName;\n\n if (currentGroup[methodName]) {\n methodName = `${suggestedName}${toPascalCase(operationName)}`;\n }\n\n currentGroup[methodName] = rawOperations[operationName]!;\n groups[groupName] = currentGroup;\n }\n\n return groups;\n};\n","import type { ApiParams } from \"@/types\";\nimport humps from \"humps\";\n\nconst { decamelize } = humps;\n\nexport const ensureLeadingSlash = (value: string): string =>\n value.startsWith(\"/\") ? value : `/${value}`;\n\nexport const removeTrailingSlash = (value: string): string =>\n value.endsWith(\"/\") ? value.slice(0, -1) : value;\n\nexport const removeBeginningSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport const replacePathParams = (\n path: string,\n params?: Record<string, string | number>,\n): string => {\n return path.replace(/\\{([^}]+)\\}/g, (_match: string, rawKey: string) => {\n const value = params?.[rawKey];\n if (value === undefined) {\n throw new Error(`Missing path parameter: ${rawKey}`);\n }\n\n return encodeURIComponent(String(value));\n });\n};\n\nexport const normalizePathTemplate = (path: string): string =>\n path.replace(/(^|\\/):([A-Za-z0-9_]+)/g, \"$1{$2}\");\n\ninterface ParamsToStringOptions {\n preserveCase?: boolean;\n}\n\nconst fieldsKey = [\"wordFields\", \"translationFields\", \"fields\"] as const;\nconst fieldsKeySet = new Set<string>([\n ...fieldsKey,\n ...fieldsKey.map((key) => decamelize(key)),\n]);\nconst preservedKeys = new Set([\n \"navigationalResultsNumber\",\n \"pageSize\",\n \"versesResultsNumber\",\n]);\n\nexport const paramsToString = (\n params?: ApiParams,\n options: ParamsToStringOptions = {},\n): string => {\n if (!params) return \"\";\n\n const paramsString = new URLSearchParams();\n\n for (const [rawKey, rawValue] of Object.entries(params)) {\n if (rawValue === undefined) continue;\n\n const key =\n options.preserveCase || preservedKeys.has(rawKey)\n ? rawKey\n : decamelize(rawKey);\n\n // fields is a special case, it's an object with boolean values\n if (fieldsKeySet.has(rawKey) || fieldsKeySet.has(key)) {\n const fields = Object.entries(rawValue as Record<string, boolean>)\n .filter(([, value]) => value)\n .map(([fieldKey]) => decamelize(fieldKey));\n if (fields.length > 0) {\n paramsString.set(key, fields.join(\",\"));\n }\n continue;\n }\n\n if (typeof rawValue === \"string\") {\n paramsString.set(key, rawValue);\n } else if (typeof rawValue === \"number\") {\n paramsString.set(key, rawValue.toString());\n } else if (typeof rawValue === \"boolean\") {\n paramsString.set(key, rawValue.toString());\n } else if (Array.isArray(rawValue)) {\n paramsString.set(key, rawValue.join(\",\"));\n }\n }\n\n if (paramsString.size === 0) return \"\";\n return `?${paramsString.toString()}`;\n};\n","import type {\n ApiParams,\n CreateQuranReflectPostPayload,\n OperationRequest,\n QuranReflectPost,\n QuranReflectPostMutationResponse,\n UpdateQuranReflectPostPayload,\n} from \"@/types\";\n\ntype RawOperation = (request?: OperationRequest) => Promise<unknown>;\ntype GeneratedGroup = Record<string, RawOperation>;\n\nexport type QuranReflectPostCreateOperationRequest = Omit<\n OperationRequest,\n \"body\"\n> & {\n body: {\n post: CreateQuranReflectPostPayload;\n };\n};\n\nexport type QuranReflectPostUpdateOperationRequest = Omit<\n OperationRequest,\n \"body\" | \"path\"\n> & {\n body: UpdateQuranReflectPostPayload;\n path: {\n id: string | number;\n };\n};\n\nexport type QuranReflectPostGetOperationRequest = Omit<\n OperationRequest,\n \"path\"\n> & {\n path: {\n id: string | number;\n };\n};\n\ntype CreateQuranReflectPost = {\n (\n payload: CreateQuranReflectPostPayload,\n ): Promise<QuranReflectPostMutationResponse>;\n (\n request: QuranReflectPostCreateOperationRequest,\n ): Promise<QuranReflectPostMutationResponse>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\ntype UpdateQuranReflectPost = {\n (\n id: string | number,\n payload: UpdateQuranReflectPostPayload,\n ): Promise<QuranReflectPostMutationResponse>;\n (\n request: QuranReflectPostUpdateOperationRequest,\n ): Promise<QuranReflectPostMutationResponse>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\ntype GetQuranReflectPost = {\n (id: string | number, query?: ApiParams): Promise<QuranReflectPost>;\n (request: QuranReflectPostGetOperationRequest): Promise<QuranReflectPost>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\nexport type QuranReflectPostsFacade = GeneratedGroup & {\n create: CreateQuranReflectPost;\n get: GetQuranReflectPost;\n update: UpdateQuranReflectPost;\n};\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst isCreatePayload = (value: unknown): value is CreateQuranReflectPostPayload => {\n if (!isObject(value)) {\n return false;\n }\n\n return (\n typeof value[\"body\"] === \"string\" &&\n typeof value[\"draft\"] === \"boolean\" &&\n Array.isArray(value[\"references\"]) &&\n Array.isArray(value[\"mentions\"])\n );\n};\n\nexport const createQuranReflectPostsFacade = (\n generatedPosts: GeneratedGroup,\n request: (\n method: \"GET\" | \"PATCH\" | \"POST\",\n path: string,\n operationRequest?: OperationRequest,\n ) => Promise<unknown>,\n): QuranReflectPostsFacade => {\n const create: CreateQuranReflectPost = ((\n payloadOrRequest:\n | CreateQuranReflectPostPayload\n | QuranReflectPostCreateOperationRequest,\n ) => {\n if (isCreatePayload(payloadOrRequest)) {\n return request(\"POST\", \"/v1/posts\", {\n body: {\n post: payloadOrRequest,\n },\n }) as Promise<QuranReflectPostMutationResponse>;\n }\n\n return request(\"POST\", \"/v1/posts\", payloadOrRequest) as Promise<\n QuranReflectPostMutationResponse\n >;\n }) as CreateQuranReflectPost;\n\n const update: UpdateQuranReflectPost = ((\n idOrRequest: string | number | QuranReflectPostUpdateOperationRequest,\n payload?: UpdateQuranReflectPostPayload,\n ) => {\n if (payload !== undefined) {\n return request(\"PATCH\", \"/v1/posts/{id}\", {\n body: payload,\n path: { id: idOrRequest as string | number },\n }) as Promise<QuranReflectPostMutationResponse>;\n }\n\n return request(\n \"PATCH\",\n \"/v1/posts/{id}\",\n idOrRequest as QuranReflectPostUpdateOperationRequest,\n ) as Promise<QuranReflectPostMutationResponse>;\n }) as UpdateQuranReflectPost;\n\n const get: GetQuranReflectPost = ((\n idOrRequest: string | number | QuranReflectPostGetOperationRequest,\n query?: ApiParams,\n ) => {\n if (typeof idOrRequest === \"string\" || typeof idOrRequest === \"number\") {\n return request(\"GET\", \"/v1/posts/{id}\", {\n path: { id: idOrRequest },\n query,\n }) as Promise<QuranReflectPost>;\n }\n\n return request(\"GET\", \"/v1/posts/{id}\", idOrRequest) as Promise<\n QuranReflectPost\n >;\n }) as GetQuranReflectPost;\n\n return {\n ...generatedPosts,\n create,\n get,\n update,\n };\n};\n","export const API_BASE_URL = \"https://apis.quran.foundation\";\n\nexport const DEFAULT_BASE_URLS = {\n analytics: \"https://apis.quran.foundation/analytics\",\n auth: \"https://apis.quran.foundation/auth\",\n content: \"https://apis.quran.foundation/content\",\n oauth2: \"https://oauth2.quran.foundation\",\n quranReflect: \"https://apis.quran.foundation/quran-reflect\",\n search: \"https://apis.quran.foundation/search\",\n} as const;\n\nexport const DIRECT_PATH_PREFIX = {\n analytics: \"/v1\",\n auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\n analytics: \"/analytics/v1\",\n auth: \"/auth/v1\",\n content: \"/content/api/v4\",\n oauth2: \"\",\n quranReflect: \"/quran-reflect/v1\",\n search: \"/search/v1\",\n} as const;\n\nexport const LEGACY_PREFIXES = {\n analytics: [\"/analytics/v1\", \"/v1\"] as const,\n auth: [\"/auth/v1\", \"/v1\"] as const,\n content: [\"/content/api/v4\", \"/api/v4\"] as const,\n oauth2: [] as const,\n quranReflect: [\"/quran-reflect/v1\", \"/v1\"] as const,\n search: [\"/search/v1\", \"/v1\"] as const,\n} as const;\n","import type {\n OperationDefinition,\n PublicApiService,\n} from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n CustomFetcher,\n OperationRequest,\n PublicClientConfig,\n UserSession,\n} from \"@/types\";\nimport { prepareBody } from \"@/lib/http-utils\";\nimport {\n DEFAULT_BASE_URLS,\n DIRECT_PATH_PREFIX,\n GATEWAY_PATH_PREFIX,\n LEGACY_PREFIXES,\n} from \"@/lib/service-config\";\nimport {\n ensureLeadingSlash,\n normalizePathTemplate,\n paramsToString,\n removeTrailingSlash,\n replacePathParams,\n} from \"@/lib/url\";\nimport humps from \"humps\";\n\nconst { camelizeKeys } = humps;\n\nexport class PublicQuranFetcher {\n private userSession: UserSession | null | undefined;\n\n constructor(private readonly config: PublicClientConfig) {\n this.userSession = config.userSession;\n }\n\n public clearCachedTokens(): void {\n return;\n }\n\n public getFetch(): CustomFetcher {\n const doFetch = this.config.fetch ?? globalThis.fetch;\n\n if (typeof doFetch !== \"function\") {\n throw new Error(\n \"No fetch function available. Please provide a fetch implementation or ensure global fetch is available.\",\n );\n }\n\n return doFetch;\n }\n\n public async getUserSession(): Promise<UserSession | null> {\n const storedSession = await this.config.storage?.getSession?.();\n if (storedSession !== undefined) {\n return storedSession;\n }\n\n return this.userSession ?? null;\n }\n\n public async setUserSession(session: UserSession | null): Promise<void> {\n if (!this.config.storage) {\n this.userSession = session;\n return;\n }\n\n if (!session) {\n if (this.config.storage.clearSession) {\n await this.config.storage.clearSession();\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(null);\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(session);\n this.userSession = session;\n }\n\n public buildServiceUrl(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n ): string {\n const { baseUrl, usesGateway } = this.resolveServiceBaseUrl(service);\n const servicePath = this.normalizeServicePath(service, path, usesGateway);\n const preserveQueryParamCase =\n service === \"auth\" || service === \"quranReflect\";\n\n return `${baseUrl}${servicePath}${paramsToString(query, {\n preserveCase: preserveQueryParamCase,\n })}`;\n }\n\n public async requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: OperationRequest,\n ): Promise<T> {\n return this.request<T>(\n operation.service,\n replacePathParams(operation.path, request?.path),\n request?.query,\n {\n ...request,\n auth:\n request?.auth === \"auto\" || !request?.auth\n ? operation.auth\n : request.auth,\n method:\n request?.method ??\n (operation.method.toUpperCase() as OperationRequest[\"method\"]),\n path: undefined,\n },\n );\n }\n\n public async request<T = unknown>(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n request: OperationRequest = {},\n ): Promise<T> {\n if (request.basicAuth) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n const effectiveAuth = this.resolveAuthMode(service, request.auth);\n const url = this.buildServiceUrl(service, path, query);\n const headers = new Headers(request.headers);\n const body = prepareBody(request, headers);\n\n if (service !== \"oauth2\") {\n headers.set(\"x-client-id\", this.config.clientId);\n }\n\n await this.applyAuthenticationHeaders(\n service,\n effectiveAuth,\n headers,\n request,\n );\n\n const response = await this.getFetch()(url, {\n body,\n headers,\n method: request.method ?? \"GET\",\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n return (await response.text()) as T;\n }\n\n const json = await response.json();\n return camelizeKeys(json as object) as T;\n }\n\n private resolveAuthMode(\n service: PublicApiService,\n auth: OperationRequest[\"auth\"] = \"auto\",\n ): \"none\" | \"user\" {\n if (auth !== \"auto\") {\n if (auth === \"app\") {\n throw new Error(\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\",\n );\n }\n\n return auth;\n }\n\n if (service === \"auth\" || service === \"quranReflect\") {\n return \"user\";\n }\n\n return \"none\";\n }\n\n private async applyAuthenticationHeaders(\n service: PublicApiService,\n auth: \"none\" | \"user\",\n headers: Headers,\n request: OperationRequest,\n ): Promise<void> {\n if (request.accessToken) {\n this.setTokenHeaders(service, headers, request.accessToken);\n return;\n }\n\n if (auth === \"none\") {\n return;\n }\n\n const session = await this.getUserSession();\n if (!session?.accessToken) {\n throw new Error(\n \"This operation requires a user session. Sign in first or use @quranjs/api/server.\",\n );\n }\n\n this.setTokenHeaders(service, headers, session.accessToken);\n }\n\n private setTokenHeaders(\n service: PublicApiService,\n headers: Headers,\n accessToken: string,\n ): void {\n if (service === \"oauth2\") {\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return;\n }\n\n headers.set(\"x-auth-token\", accessToken);\n }\n\n private resolveServiceBaseUrl(service: PublicApiService): {\n baseUrl: string;\n usesGateway: boolean;\n } {\n const { services } = this.config;\n const directBaseUrl =\n service === \"auth\"\n ? services?.authBaseUrl\n : service === \"quranReflect\"\n ? services?.quranReflectBaseUrl\n : (services?.oauth2BaseUrl ?? services?.tokenHost);\n\n if (directBaseUrl) {\n return {\n baseUrl: removeTrailingSlash(directBaseUrl),\n usesGateway: false,\n };\n }\n\n if (services?.gatewayUrl && service !== \"oauth2\") {\n return {\n baseUrl: removeTrailingSlash(services.gatewayUrl),\n usesGateway: true,\n };\n }\n\n return {\n baseUrl: DEFAULT_BASE_URLS[service],\n usesGateway: false,\n };\n }\n\n private normalizeServicePath(\n service: PublicApiService,\n path: string,\n usesGateway: boolean,\n ): string {\n let normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n for (const legacyPrefix of LEGACY_PREFIXES[service]) {\n if (normalizedPath.startsWith(legacyPrefix)) {\n normalizedPath = ensureLeadingSlash(\n normalizedPath.slice(legacyPrefix.length),\n );\n break;\n }\n }\n\n const prefix = usesGateway\n ? GATEWAY_PATH_PREFIX[service]\n : DIRECT_PATH_PREFIX[service];\n\n if (normalizedPath.startsWith(prefix) || prefix.length === 0) {\n return normalizedPath;\n }\n\n return `${prefix}${normalizedPath}`;\n }\n}\n","import type { AuthService } from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n HTTPMethod,\n OperationRequest,\n PublicClientConfig,\n TokenResponse,\n} from \"@/types\";\nimport { publicOperationCatalog } from \"@/generated/public-contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { createQuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport type { QuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport { PublicQuranFetcher } from \"@/sdk/public-fetcher\";\n\ntype RawOperation = (request?: OperationRequest) => Promise<unknown>;\ntype GeneratedGroup = Record<string, RawOperation>;\ntype QuranReflectFacade = {\n comments: GeneratedGroup;\n posts: QuranReflectPostsFacade;\n raw: Record<string, RawOperation>;\n rooms: GeneratedGroup;\n tags: GeneratedGroup;\n users: GeneratedGroup;\n};\n\nconst SERVER_ONLY_MESSAGE =\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\";\nconst LEGACY_BOOKMARK_GET_MESSAGE =\n \"auth.bookmarks.get(bookmarkId) is not supported because /v1/bookmarks/bookmark expects bookmark detail query parameters. Pass a query object such as { mushafId, key, type, verseNumber } or { mushafId, isReading: true }.\";\n\nconst createUserServiceRequest =\n (fetcher: PublicQuranFetcher, service: AuthService) =>\n (method: HTTPMethod, path: string, request?: OperationRequest) => {\n return fetcher.request<unknown>(\n service,\n replacePathParams(path, request?.path),\n request?.query,\n {\n ...request,\n auth: \"user\",\n method,\n path: undefined,\n query: undefined,\n },\n );\n };\n\nconst createAuthFacade = (fetcher: PublicQuranFetcher) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.auth.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.auth.v1,\n raw,\n );\n const request = createUserServiceRequest(fetcher, \"auth\");\n\n return {\n ...generatedGroups,\n collections: {\n ...generatedGroups.collections,\n addBookmark: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}/bookmarks\", {\n body,\n path: { collectionId },\n }),\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections\", { body }),\n get: (collectionId: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n query,\n }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/collections\", { query }),\n listAll: (query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/all\", { query }),\n remove: (collectionId: string) =>\n request(\"DELETE\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n }),\n removeBookmark: (collectionId: string, bookmarkId: string) =>\n request(\n \"DELETE\",\n \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\",\n {\n path: { bookmarkId, collectionId },\n },\n ),\n update: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}\", {\n body,\n path: { collectionId },\n }),\n },\n bookmarks: {\n ...generatedGroups.bookmarks,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/bookmarks\", { body }),\n get: async (query?: ApiParams | string) => {\n if (typeof query === \"string\") {\n throw new Error(LEGACY_BOOKMARK_GET_MESSAGE);\n }\n\n return request(\"GET\", \"/v1/bookmarks/bookmark\", {\n query,\n });\n },\n list: (query?: ApiParams) => request(\"GET\", \"/v1/bookmarks\", { query }),\n listCollections: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/collections\", { query }),\n listRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/ayahs-range\", { query }),\n remove: (bookmarkId: string) =>\n request(\"DELETE\", \"/v1/bookmarks/{bookmarkId}\", {\n path: { bookmarkId },\n }),\n },\n goals: {\n ...generatedGroups.goals,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/goals\", { body }),\n estimate: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/estimate\", { query }),\n getTodaysPlan: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/get-todays-plan\", { query }),\n remove: (id: string) =>\n request(\"DELETE\", \"/v1/goals/{id}\", { path: { id } }),\n update: (id: string, body: Record<string, unknown>) =>\n request(\"PUT\", \"/v1/goals/{id}\", {\n body,\n path: { id },\n }),\n },\n notes: {\n ...generatedGroups.notes,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes\", { body }),\n get: (noteId: string) =>\n request(\"GET\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/notes\", { query }),\n listByAttachedEntity: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-attached-entity\", { query }),\n listByRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-range\", { query }),\n listByVerseKey: (verseKey: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-verse/{verseKey}\", {\n path: { verseKey },\n query,\n }),\n publish: (noteId: string, body?: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes/{noteId}/publish\", {\n body,\n path: { noteId },\n }),\n remove: (noteId: string) =>\n request(\"DELETE\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n update: (noteId: string, body: Record<string, unknown>) =>\n request(\"PATCH\", \"/v1/notes/{noteId}\", {\n body,\n path: { noteId },\n }),\n },\n preferences: {\n ...generatedGroups.preferences,\n bulkUpdate: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences/bulk\", { body }),\n get: (query?: ApiParams) => request(\"GET\", \"/v1/preferences\", { query }),\n update: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences\", { body }),\n },\n raw,\n readingSessions: {\n ...generatedGroups.readingSessions,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/reading-sessions\", { body }),\n list: (query?: ApiParams) =>\n request(\"GET\", \"/v1/reading-sessions\", { query }),\n },\n };\n};\n\nconst createQuranReflectFacade = (\n fetcher: PublicQuranFetcher,\n): QuranReflectFacade => {\n const raw = createRawClient(fetcher, publicOperationCatalog.quranReflect.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.quranReflect.v1,\n raw,\n );\n\n return {\n comments: generatedGroups.comments ?? {},\n posts: createQuranReflectPostsFacade(\n generatedGroups.posts ?? {},\n createUserServiceRequest(fetcher, \"quranReflect\"),\n ),\n raw,\n rooms: generatedGroups.rooms ?? {},\n tags: generatedGroups.tags ?? {},\n users: generatedGroups.users ?? {},\n };\n};\n\nconst createOAuth2Facade = (\n fetcher: PublicQuranFetcher,\n config: PublicClientConfig,\n) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.oauth2.v1);\n\n const exchangeToken = async (\n body: URLSearchParams,\n options: { requiresRefreshToken?: boolean } = {},\n ) => {\n if (config.clientType !== \"public\") {\n throw new Error(\n \"This OAuth2 exchange requires a backend because your client is confidential.\",\n );\n }\n\n if (options.requiresRefreshToken && !body.get(\"refresh_token\")) {\n throw new Error(\"Missing refresh token.\");\n }\n\n body.set(\"client_id\", config.clientId);\n\n const requestRefreshToken = body.get(\"refresh_token\") ?? undefined;\n const storedSession = options.requiresRefreshToken\n ? await fetcher.getUserSession()\n : null;\n const currentSession =\n options.requiresRefreshToken && requestRefreshToken\n ? { ...(storedSession ?? {}), refreshToken: requestRefreshToken }\n : storedSession;\n\n const token = await fetcher.request<TokenResponse>(\n \"oauth2\",\n \"/oauth2/token\",\n undefined,\n {\n auth: \"none\",\n body,\n contentType: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n },\n );\n\n await fetcher.setUserSession(toUserSession(token, currentSession));\n return token;\n };\n\n return {\n authorizeUrl: (query: Record<string, string | number | undefined>) =>\n fetcher.buildServiceUrl(\"oauth2\", \"/oauth2/auth\", query as ApiParams),\n exchangeCode: (params: {\n code: string;\n codeVerifier?: string;\n redirectUri: string;\n scope?: string;\n }) => {\n const body = new URLSearchParams({\n code: params.code,\n grant_type: \"authorization_code\",\n redirect_uri: params.redirectUri,\n });\n\n if (params.codeVerifier) {\n body.set(\"code_verifier\", params.codeVerifier);\n }\n\n if (params.scope) {\n body.set(\"scope\", params.scope);\n }\n\n return exchangeToken(body);\n },\n getUserInfo: (accessToken?: string) =>\n fetcher.request(\"oauth2\", \"/userinfo\", undefined, {\n accessToken,\n auth: \"user\",\n method: \"GET\",\n }),\n introspect: () => {\n throw new Error(\n \"Token introspection requires @quranjs/api/server or a backend.\",\n );\n },\n logout: (query?: ApiParams) =>\n fetcher.request(\"oauth2\", \"/oauth2/sessions/logout\", query, {\n auth: \"none\",\n method: \"GET\",\n }),\n raw,\n refresh: async (refreshToken?: string) => {\n const currentSession = await fetcher.getUserSession();\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken ?? currentSession?.refreshToken ?? \"\",\n });\n\n return exchangeToken(body, { requiresRefreshToken: true });\n },\n };\n};\n\ntype ServerOnlyGuard = ((...args: unknown[]) => Promise<never>) & {\n [key: string]: ServerOnlyGuard | undefined;\n};\n\nconst createServerOnlyGuard = (): ServerOnlyGuard => {\n const fail = (() =>\n Promise.reject(new Error(SERVER_ONLY_MESSAGE))) as ServerOnlyGuard;\n const proxy = new Proxy(fail, {\n apply() {\n return Promise.reject(new Error(SERVER_ONLY_MESSAGE));\n },\n get(_target, property) {\n if (property === \"then\") {\n return undefined;\n }\n\n return proxy;\n },\n });\n\n return proxy;\n};\n\nexport const createPublicRuntimeClient = (config: PublicClientConfig) => {\n const fetcher = new PublicQuranFetcher(config);\n fetcher.getFetch();\n\n const authV1 = createAuthFacade(fetcher);\n const quranReflectV1 = createQuranReflectFacade(fetcher);\n const oauth2V1 = createOAuth2Facade(fetcher, config);\n const serverOnlyGuard = createServerOnlyGuard();\n\n const raw = {\n auth: {\n v1: authV1.raw,\n },\n content: {\n v4: serverOnlyGuard,\n },\n oauth2: {\n v1: oauth2V1.raw,\n },\n quranReflect: {\n v1: quranReflectV1.raw,\n },\n search: {\n v1: serverOnlyGuard,\n },\n };\n\n return {\n answers: serverOnlyGuard,\n audio: serverOnlyGuard,\n auth: {\n ...authV1,\n v1: authV1,\n },\n chapters: serverOnlyGuard,\n clearCachedTokens: () => fetcher.clearCachedTokens(),\n content: serverOnlyGuard,\n getUserSession: () => fetcher.getUserSession(),\n hadithReferences: serverOnlyGuard,\n juzs: serverOnlyGuard,\n oauth2: {\n ...oauth2V1,\n v1: oauth2V1,\n },\n quranReflect: {\n ...quranReflectV1,\n v1: quranReflectV1,\n },\n raw,\n resources: serverOnlyGuard,\n search: serverOnlyGuard,\n verses: serverOnlyGuard,\n };\n};\n","import type { PublicClientConfig } from \"@/types\";\n\nimport { createPublicRuntimeClient } from \"./runtime/create-public-client\";\n\nexport type { TokenStorage, UserSession } from \"@/types\";\n\nexport const createPublicClient = (config: PublicClientConfig) => {\n if ((config as PublicClientConfig & { clientSecret?: string }).clientSecret) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n return createPublicRuntimeClient(config);\n};\n\nexport type PublicClient = ReturnType<typeof createPublicClient>;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/generated/specs/public-operation-catalog.json","../src/generated/public-contracts.ts","../src/lib/http-utils.ts","../src/generated/contracts.ts","../src/lib/runtime-utils.ts","../src/lib/url.ts","../src/runtime/quran-reflect-posts.ts","../src/runtime/app-state.ts","../src/sdk/http-error.ts","../src/lib/service-config.ts","../src/sdk/public-fetcher.ts","../src/runtime/create-public-client.ts","../src/sdk/app-state-errors.ts","../src/runtime/app-state-state.ts","../src/runtime/app-state-reconciler.ts","../src/public.ts"],"names":["public_operation_catalog_default","publicOperationCatalog","prepareBody","request","headers","toUserSession","token","currentSession","expiresIn","accessToken","idToken","refreshToken","tokenType","scope","expiresAt","resolveCatalogOperation","section","operationName","operation","HTTP_METHOD_TO_MUTATION_NAME","toCamelCase","value","parts","part","index","lower","toPascalCase","camel","isPathParam","segment","getResourceSegments","path","segments","pickGeneratedMethodName","resourceSegments","lastSegment","literalSegments","lastLiteral","groupLiteral","createRawClient","fetcher","rawOperations","resolvedOperation","createGeneratedGroups","groups","literals","groupName","suggestedName","currentGroup","methodName","decamelize","humps","ensureLeadingSlash","removeTrailingSlash","replacePathParams","params","_match","rawKey","normalizePathTemplate","fieldsKey","fieldsKeySet","key","preservedKeys","paramsToString","options","paramsString","rawValue","fields","fieldKey","isObject","isCreatePayload","createQuranReflectPostsFacade","generatedPosts","payloadOrRequest","idOrRequest","query","payload","documentPath","collection","mutationHeaders","idempotencyKey","ifMatch","ifNoneMatch","snapshotPutBody","body","snapshot","freezeJson","child","createAppStateFacade","method","requestWithEtag","etag","status","metadata","since","readErrorPayload","response","QuranHttpErrorClass","QuranHttpError","QURAN_HTTP_ERROR_CONSTRUCTOR","constructorRegistry","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","PublicQuranFetcher","config","doFetch","storedSession","session","service","baseUrl","usesGateway","servicePath","effectiveAuth","url","json","auth","services","directBaseUrl","normalizedPath","legacyPrefix","prefix","SERVER_ONLY_MESSAGE","LEGACY_BOOKMARK_GET_MESSAGE","createUserServiceRequest","createAuthFacade","raw","generatedGroups","collectionId","bookmarkId","id","noteId","verseKey","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createServerOnlyGuard","fail","proxy","_target","property","createPublicRuntimeClient","authV1","quranReflectV1","oauth2V1","serverOnlyGuard","APP_STATE_ERROR_CODES","getAppStateErrorCode","error","details","serviceError","code","isAppStateHttpError","actualCode","AppStateProtocolError","cloneJson","deepFreeze","stableJson","object","appStateDocumentId","createInitialAppStateState","assertSynchronousResult","createAppStateMemoryStore","initialStates","accounts","accountId","state","transactions","reducer","current","draft","result","applyChange","documents","change","applyAppStateChangePage","changes","nextSyncToken","target","replacement","applyAppStateBootstrapPage","items","nextCursor","item","promoteAppStateBootstrap","currentPrecondition","queueAppStatePut","localRevision","mutation","queueAppStateDelete","visibleFromShadow","shadow","visible","document","deriveAppStateStateView","snapshotAppStateMutations","removeAppStateMutation","replaceAppStateMutation","pending","DEFAULT_PAGE_SIZE","DEFAULT_MAX_BOOTSTRAP_RESTART_ATTEMPTS","DEFAULT_MAX_REBASE_ATTEMPTS","defaultIdempotencyKey","runtimeCrypto","mutationOptions","bootstrapItems","isRecoveryError","positiveInteger","name","createAppStateReconciler","initialAccountId","createIdempotencyKey","maxRebaseAttempts","pageSize","store","initialTransport","activeAccountId","activeTransport","accountGeneration","reconcileQueue","isCurrent","context","commit","reconcileContext","readProgress","resetBootstrap","rebuildBootstrap","reset","restartAttempts","progress","page","syncToken","pull","initial","applySuccessfulPut","acknowledgeDelete","refreshAndRebase","rebased","replayMutation","captured","rebaseAttempts","errorCode","replay","getStateFor","mutationContext","bodySnapshot","capturedContext","transport","createPublicClient"],"mappings":"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","file":"public.min.mjs","sourcesContent":["{\n \"auth\": {\n \"v1\": {\n \"operations\": {\n \"getUserCsrfToken\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/users/csrf-token\"\n },\n \"listUserConnectedApps\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/users/connected-apps\"\n },\n \"runUserConnectedAppLifecycle\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/users/connected-apps/{appId}/lifecycle\"\n },\n \"getAppStateConfiguration\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/app-state:config\"\n },\n \"bootstrapAppState\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/app-state:bootstrap\"\n },\n \"getAppStateChanges\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/app-state:changes\"\n },\n \"listAppStateDocuments\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/app-state/{collection}\"\n },\n \"getAppStateDocument\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/app-state/{collection}/{key}\"\n },\n \"putAppStateDocument\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/app-state/{collection}/{key}\"\n },\n \"deleteAppStateDocument\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/app-state/{collection}/{key}\"\n },\n \"getV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections\"\n },\n \"postV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections\"\n },\n \"postV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"getV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"postV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\"\n },\n \"getV1CollectionsAll\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/all\"\n },\n \"getV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks\"\n },\n \"postV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/bookmarks\"\n },\n \"deleteV1BookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/bookmarks/{bookmarkId}\"\n },\n \"getV1BookmarksAyahsRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/ayahs-range\"\n },\n \"getV1BookmarksBookmark\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/bookmark\"\n },\n \"getV1BookmarksCollections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/collections\"\n },\n \"getV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1PreferencesBulk\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences/bulk\"\n },\n \"getV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"postV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"getV1GoalsGetTodaysPlan\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/get-todays-plan\"\n },\n \"putV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"deleteV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"postV1Goals\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/goals\"\n },\n \"getV1GoalsEstimate\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/estimate\"\n },\n \"getV1Streaks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks\"\n },\n \"getV1StreaksCurrentStreakDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks/current-streak-days\"\n },\n \"getV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days\"\n },\n \"postV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/activity-days\"\n },\n \"getV1ActivityDaysEstimateReadingTime\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days/estimate-reading-time\"\n },\n \"getV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes\"\n },\n \"postV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes\"\n },\n \"getV1NotesByVerseByVerseKey\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-verse/{verseKey}\"\n },\n \"getV1NotesByAttachedEntity\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-attached-entity\"\n },\n \"getV1NotesCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/count-within-range\"\n },\n \"getV1NotesByRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-range\"\n },\n \"getV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"patchV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"deleteV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"postV1NotesByNoteIdPublish\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes/{noteId}/publish\"\n }\n },\n \"service\": \"auth\",\n \"version\": \"v1\"\n }\n },\n \"oauth2\": {\n \"v1\": {\n \"operations\": {\n \"oauth2TokenExchange\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/token\"\n },\n \"introspectOauth2Token\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/introspect\"\n },\n \"revokeOauth2Token\": {\n \"auth\": \"none\",\n \"method\": \"post\",\n \"path\": \"/oauth2/revoke\"\n },\n \"oAuth2Authorize\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/auth\"\n },\n \"getOidcUserInfo\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/userinfo\"\n },\n \"revokeOidcSession\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/sessions/logout\"\n }\n },\n \"service\": \"oauth2\",\n \"version\": \"v1\"\n }\n },\n \"quranReflect\": {\n \"v1\": {\n \"operations\": {\n \"usersControllerProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerUpdateProfile\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerEditProfile\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/my-rooms\"\n },\n \"usersControllerSearch\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/search\"\n },\n \"usersControllerToggleFollow\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followeeId}/toggle-follow\"\n },\n \"usersControllerRemoveFollower\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followerId}/remove-follower\"\n },\n \"usersControllerGetUserProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}\"\n },\n \"usersControllerGetUserProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{username}/profile\"\n },\n \"usersControllerGetUserFollowers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/followers\"\n },\n \"usersControllerGetUserFollowing\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/following\"\n },\n \"roomsControllerAdminsAccess\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/admins-access\"\n },\n \"roomsControllerCreateNewGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerUpdateGroup\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerCreateNewPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerUpdatePage\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerGetRoomMembers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/members\"\n },\n \"roomsControllerGetClosedGroupJoinRequestStatus\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerRequestToJoinClosedGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerCancelClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{groupId}/join-request\"\n },\n \"roomsControllerGetPendingClosedGroupJoinRequests\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{groupId}/join-requests\"\n },\n \"roomsControllerApproveClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join-requests/{userId}/approve\"\n },\n \"roomsControllerRejectClosedGroupJoinRequest\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{groupId}/join-requests/{userId}\"\n },\n \"roomsControllerInviteUserToRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{id}/invite\"\n },\n \"roomsControllerAcceptInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/accept-invite\"\n },\n \"roomsControllerRejectInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/reject-invite\"\n },\n \"roomsControllerRemoveMember\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{id}/members/{userId}\"\n },\n \"roomsControllerGetRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/joined-rooms\"\n },\n \"roomsControllerGetRooms2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/managed-rooms\"\n },\n \"roomsControllerSearchRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/search\"\n },\n \"roomsControllerGetRoomProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}\"\n },\n \"roomsControllerGetRoomProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}\"\n },\n \"roomsControllerAcceptByPrivateToken\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}/accept/{token}\"\n },\n \"roomsControllerAcceptByPrivateToken2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}/accept/{token}\"\n },\n \"roomsControllerGetRoomProfileById\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}\"\n },\n \"roomsControllerGetRoomPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/posts\"\n },\n \"roomsControllerJoinRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join\"\n },\n \"roomsControllerLeaveGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/leave\"\n },\n \"roomsControllerFollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/follow\"\n },\n \"roomsControllerUnfollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/unfollow\"\n },\n \"roomsControllerUpdatePostPrivacy\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/{roomId}/posts/{postId}/privacy\"\n },\n \"postsControllerFeed\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/feed\"\n },\n \"postsControllerGetRelatedPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{postId}/related\"\n },\n \"postsControllerGetReReflections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{postId}/re-reflections\"\n },\n \"postsControllerGetLoggedinUserPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/my-posts\"\n },\n \"postsControllerGetMyPostsCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-within-range\"\n },\n \"postsControllerGetLikedState\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/liked\"\n },\n \"postsControllerFindOne\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerEdit\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerDelete\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerViewTracking\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/viewed/{id}\"\n },\n \"postsControllerReadTracking\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/read/{id}\"\n },\n \"postsControllerCreate\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts\"\n },\n \"postsControllerReportAbuse\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/report\"\n },\n \"postsControllerGetUserPost\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/user-posts/{id}\"\n },\n \"postsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-like\"\n },\n \"postsControllerToggleSave\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-save\"\n },\n \"postsControllerGetComments\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/comments\"\n },\n \"postsControllerGetAllComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/all-comments\"\n },\n \"postsControllerExportMultiplePosts\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/export/pdf\"\n },\n \"postsControllerGetPublicPostCountByVerse\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-by-verse/{verseId}\"\n },\n \"postsControllerGetMyPostsByVerse\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/by-verse/{verseKey}\"\n },\n \"tagsControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/tags\"\n },\n \"commentsControllerCreate\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/comments\"\n },\n \"commentsControllerEdit\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/comments/{id}\"\n },\n \"commentsControllerDeleteComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/delete\"\n },\n \"commentsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/comments/{id}/toggle-like\"\n },\n \"commentsControllerGet\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/replies\"\n },\n \"exploreControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/explore\"\n },\n \"trendingHashtagsControllerFind\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/trending-hashtags\"\n }\n },\n \"service\": \"quranReflect\",\n \"version\": \"v1\"\n }\n }\n}\n","import type {\n CatalogOperationDefinition as BaseCatalogOperationDefinition,\n OperationDefinition as BaseOperationDefinition,\n ServiceOperationCatalog as BaseServiceOperationCatalog,\n HttpMethod,\n OperationAuthMode,\n} from \"./contracts\";\nimport publicOperationCatalogJson from \"./specs/public-operation-catalog.json\";\n\nexport type AuthService = \"auth\" | \"quranReflect\";\n\nexport type PublicApiService = AuthService | \"oauth2\";\n\nexport interface OperationDefinition\n extends Omit<BaseOperationDefinition, \"service\"> {\n service: PublicApiService;\n}\n\nexport interface CatalogOperationDefinition\n extends Omit<BaseCatalogOperationDefinition, \"service\"> {\n service?: PublicApiService;\n}\n\nexport interface ServiceOperationCatalog\n extends Omit<BaseServiceOperationCatalog, \"operations\" | \"service\"> {\n operations: Record<string, CatalogOperationDefinition>;\n service: PublicApiService;\n}\n\ninterface PublicOperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n}\n\nexport const publicOperationCatalog =\n publicOperationCatalogJson as PublicOperationCatalog;\n\nexport type { HttpMethod, OperationAuthMode };\n","import type { OperationRequest, TokenResponse, UserSession } from \"@/types\";\n\nexport const encodeBasicAuth = (username: string, password: string): string => {\n const raw = `${username}:${password}`;\n\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(raw).toString(\"base64\");\n }\n\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(raw);\n }\n\n throw new Error(\"No base64 encoder available for HTTP basic auth.\");\n};\n\nexport const prepareBody = (\n request: OperationRequest,\n headers: Headers,\n): string | URLSearchParams | undefined => {\n if (request.body === undefined || request.body === null) {\n return undefined;\n }\n\n if (\n typeof request.body === \"string\" ||\n request.body instanceof URLSearchParams\n ) {\n if (request.contentType) {\n headers.set(\"Content-Type\", request.contentType);\n }\n\n return request.body;\n }\n\n headers.set(\"Content-Type\", request.contentType ?? \"application/json\");\n return JSON.stringify(request.body);\n};\n\nexport const toUserSession = (\n token: TokenResponse & {\n accessToken?: string;\n expiresIn?: number;\n idToken?: string;\n refreshToken?: string;\n tokenType?: string;\n },\n currentSession?: Partial<UserSession> | null,\n): UserSession => {\n const expiresIn = token.expiresIn ?? token.expires_in;\n const accessToken = token.accessToken ?? token.access_token;\n const idToken = token.idToken ?? token.id_token ?? currentSession?.idToken;\n const refreshToken =\n token.refreshToken ?? token.refresh_token ?? currentSession?.refreshToken;\n const tokenType =\n token.tokenType ?? token.token_type ?? currentSession?.tokenType;\n const scope = token.scope ?? currentSession?.scope;\n const expiresAt = expiresIn\n ? Date.now() + expiresIn * 1000\n : currentSession?.expiresAt;\n\n return {\n accessToken,\n expiresAt,\n idToken,\n refreshToken,\n scope,\n tokenType,\n };\n};\n","import type { ApiService } from \"@/types\";\n\nimport operationCatalogJson from \"./specs/operation-catalog.json\";\n\nexport type HttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type OperationAuthMode = \"none\" | \"app\" | \"user\";\n\nexport interface OperationDefinition {\n auth: OperationAuthMode;\n method: HttpMethod;\n operationId?: string;\n operationName: string;\n path: string;\n serverUrl?: string;\n service: ApiService;\n tags: string[];\n version: string;\n}\n\nexport type CatalogOperationDefinition = Omit<\n OperationDefinition,\n \"operationName\" | \"service\" | \"tags\" | \"version\"\n> &\n Partial<\n Pick<OperationDefinition, \"operationName\" | \"service\" | \"tags\" | \"version\">\n >;\n\nexport interface ServiceOperationCatalog {\n operations: Record<string, CatalogOperationDefinition>;\n service: ApiService;\n version: string;\n}\n\ninterface OperationCatalog {\n analytics: { v1: ServiceOperationCatalog };\n auth: { v1: ServiceOperationCatalog };\n content: { v4: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n search: { v1: ServiceOperationCatalog };\n}\n\nexport const operationCatalog = operationCatalogJson as OperationCatalog;\n\nexport const resolveCatalogOperation = (\n section: ServiceOperationCatalog,\n operationName: string,\n operation: CatalogOperationDefinition,\n): OperationDefinition => {\n return {\n ...operation,\n operationName: operation.operationName ?? operationName,\n service: operation.service ?? section.service,\n tags: operation.tags ?? [],\n version: operation.version ?? section.version,\n };\n};\n\nexport const getOperationByName = (\n service: ApiService,\n version: string,\n operationName: string,\n): OperationDefinition | undefined => {\n const serviceCatalog = operationCatalog[service] as\n | Record<string, ServiceOperationCatalog | undefined>\n | undefined;\n if (!serviceCatalog) {\n return undefined;\n }\n\n const versionCatalog = serviceCatalog[version];\n const operation = versionCatalog?.operations[operationName];\n if (!versionCatalog || !operation) {\n return undefined;\n }\n\n return resolveCatalogOperation(versionCatalog, operationName, operation);\n};\n","import type {\n HttpMethod,\n OperationDefinition,\n ServiceOperationCatalog,\n} from \"@/generated/contracts\";\nimport { resolveCatalogOperation } from \"@/generated/contracts\";\n\nexport const HTTP_METHOD_TO_MUTATION_NAME: Record<HttpMethod, string> = {\n delete: \"remove\",\n get: \"list\",\n patch: \"update\",\n post: \"create\",\n put: \"update\",\n};\n\nexport const toCamelCase = (value: string): string => {\n const parts = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 0) {\n return \"misc\";\n }\n\n return parts\n .map((part, index) => {\n const lower = part.toLowerCase();\n if (index === 0) {\n return lower;\n }\n\n return lower.charAt(0).toUpperCase() + lower.slice(1);\n })\n .join(\"\");\n};\n\nexport const toPascalCase = (value: string): string => {\n const camel = toCamelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n};\n\nexport const isPathParam = (segment: string): boolean =>\n segment.startsWith(\"{\") && segment.endsWith(\"}\");\n\nexport const getResourceSegments = (path: string): string[] => {\n const segments = path.split(\"/\").filter(Boolean);\n if (segments[0]?.match(/^v\\d+$/)) {\n return segments.slice(1);\n }\n\n return segments;\n};\n\nexport const pickGeneratedMethodName = (\n operation: OperationDefinition,\n): string => {\n const resourceSegments = getResourceSegments(operation.path);\n const lastSegment = resourceSegments.at(-1);\n const literalSegments = resourceSegments.filter(\n (segment) => !isPathParam(segment),\n );\n const lastLiteral = literalSegments.at(-1);\n const groupLiteral = literalSegments[0];\n\n if (resourceSegments.length === 1) {\n return HTTP_METHOD_TO_MUTATION_NAME[operation.method];\n }\n\n if (\n resourceSegments.length === 2 &&\n lastSegment &&\n isPathParam(lastSegment)\n ) {\n if (operation.method === \"get\") {\n return \"get\";\n }\n\n if (operation.method === \"delete\") {\n return \"remove\";\n }\n\n return \"update\";\n }\n\n if (lastSegment && !isPathParam(lastSegment) && lastLiteral) {\n if (lastLiteral === groupLiteral) {\n return `${HTTP_METHOD_TO_MUTATION_NAME[operation.method]}ById`;\n }\n\n return toCamelCase(lastLiteral);\n }\n\n return toCamelCase(operation.operationName);\n};\n\nexport type RawOperation = (request?: unknown) => Promise<unknown>;\nexport type GeneratedGroup = Record<string, RawOperation>;\nexport type GeneratedGroups = Record<string, GeneratedGroup>;\n\nexport interface FetcherLike {\n request<T = unknown>(\n service: string,\n path: string,\n query?: unknown,\n request?: unknown,\n ): Promise<T>;\n requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: unknown,\n ): Promise<T>;\n getUserSession(): Promise<unknown>;\n setUserSession(session: unknown): Promise<void>;\n buildServiceUrl(service: string, path: string, query?: unknown): string;\n}\n\nexport const createRawClient = (\n fetcher: FetcherLike,\n section: ServiceOperationCatalog,\n): Record<string, RawOperation> => {\n const rawOperations: Record<string, RawOperation> = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n\n rawOperations[operationName] = (request?: unknown) =>\n fetcher.requestOperation(resolvedOperation, request);\n }\n\n return rawOperations;\n};\n\nexport const createGeneratedGroups = (\n section: ServiceOperationCatalog,\n rawOperations: Record<string, RawOperation>,\n): GeneratedGroups => {\n const groups: GeneratedGroups = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n const literals = getResourceSegments(resolvedOperation.path).filter(\n (segment) => !isPathParam(segment),\n );\n const groupName = toCamelCase(literals[0] ?? \"misc\");\n const suggestedName = pickGeneratedMethodName(resolvedOperation);\n const currentGroup = groups[groupName] ?? {};\n let methodName = suggestedName;\n\n if (currentGroup[methodName]) {\n methodName = `${suggestedName}${toPascalCase(operationName)}`;\n }\n\n currentGroup[methodName] = rawOperations[operationName]!;\n groups[groupName] = currentGroup;\n }\n\n return groups;\n};\n","import type { ApiParams } from \"@/types\";\nimport humps from \"humps\";\n\nconst { decamelize } = humps;\n\nexport const ensureLeadingSlash = (value: string): string =>\n value.startsWith(\"/\") ? value : `/${value}`;\n\nexport const removeTrailingSlash = (value: string): string =>\n value.endsWith(\"/\") ? value.slice(0, -1) : value;\n\nexport const removeBeginningSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport const replacePathParams = (\n path: string,\n params?: Record<string, string | number>,\n): string => {\n return path.replace(/\\{([^}]+)\\}/g, (_match: string, rawKey: string) => {\n const value = params?.[rawKey];\n if (value === undefined) {\n throw new Error(`Missing path parameter: ${rawKey}`);\n }\n\n return encodeURIComponent(String(value));\n });\n};\n\nexport const normalizePathTemplate = (path: string): string =>\n path.replace(/(^|\\/):([A-Za-z0-9_]+)/g, \"$1{$2}\");\n\ninterface ParamsToStringOptions {\n preserveCase?: boolean;\n}\n\nconst fieldsKey = [\"wordFields\", \"translationFields\", \"fields\"] as const;\nconst fieldsKeySet = new Set<string>([\n ...fieldsKey,\n ...fieldsKey.map((key) => decamelize(key)),\n]);\nconst preservedKeys = new Set([\n \"navigationalResultsNumber\",\n \"pageSize\",\n \"versesResultsNumber\",\n]);\n\nexport const paramsToString = (\n params?: ApiParams,\n options: ParamsToStringOptions = {},\n): string => {\n if (!params) return \"\";\n\n const paramsString = new URLSearchParams();\n\n for (const [rawKey, rawValue] of Object.entries(params)) {\n if (rawValue === undefined) continue;\n\n const key =\n options.preserveCase || preservedKeys.has(rawKey)\n ? rawKey\n : decamelize(rawKey);\n\n // fields is a special case, it's an object with boolean values\n if (fieldsKeySet.has(rawKey) || fieldsKeySet.has(key)) {\n const fields = Object.entries(rawValue as Record<string, boolean>)\n .filter(([, value]) => value)\n .map(([fieldKey]) => decamelize(fieldKey));\n if (fields.length > 0) {\n paramsString.set(key, fields.join(\",\"));\n }\n continue;\n }\n\n if (typeof rawValue === \"string\") {\n paramsString.set(key, rawValue);\n } else if (typeof rawValue === \"number\") {\n paramsString.set(key, rawValue.toString());\n } else if (typeof rawValue === \"boolean\") {\n paramsString.set(key, rawValue.toString());\n } else if (Array.isArray(rawValue)) {\n paramsString.set(key, rawValue.join(\",\"));\n }\n }\n\n if (paramsString.size === 0) return \"\";\n return `?${paramsString.toString()}`;\n};\n","import type {\n ApiParams,\n CreateQuranReflectPostPayload,\n OperationRequest,\n QuranReflectPost,\n QuranReflectPostMutationResponse,\n UpdateQuranReflectPostPayload,\n} from \"@/types\";\n\ntype RawOperation = (request?: OperationRequest) => Promise<unknown>;\ntype GeneratedGroup = Record<string, RawOperation>;\n\nexport type QuranReflectPostCreateOperationRequest = Omit<\n OperationRequest,\n \"body\"\n> & {\n body: {\n post: CreateQuranReflectPostPayload;\n };\n};\n\nexport type QuranReflectPostUpdateOperationRequest = Omit<\n OperationRequest,\n \"body\" | \"path\"\n> & {\n body: UpdateQuranReflectPostPayload;\n path: {\n id: string | number;\n };\n};\n\nexport type QuranReflectPostGetOperationRequest = Omit<\n OperationRequest,\n \"path\"\n> & {\n path: {\n id: string | number;\n };\n};\n\ntype CreateQuranReflectPost = {\n (\n payload: CreateQuranReflectPostPayload,\n ): Promise<QuranReflectPostMutationResponse>;\n (\n request: QuranReflectPostCreateOperationRequest,\n ): Promise<QuranReflectPostMutationResponse>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\ntype UpdateQuranReflectPost = {\n (\n id: string | number,\n payload: UpdateQuranReflectPostPayload,\n ): Promise<QuranReflectPostMutationResponse>;\n (\n request: QuranReflectPostUpdateOperationRequest,\n ): Promise<QuranReflectPostMutationResponse>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\ntype GetQuranReflectPost = {\n (id: string | number, query?: ApiParams): Promise<QuranReflectPost>;\n (request: QuranReflectPostGetOperationRequest): Promise<QuranReflectPost>;\n (request?: OperationRequest): Promise<unknown>;\n};\n\nexport type QuranReflectPostsFacade = GeneratedGroup & {\n create: CreateQuranReflectPost;\n get: GetQuranReflectPost;\n update: UpdateQuranReflectPost;\n};\n\nconst isObject = (value: unknown): value is Record<string, unknown> =>\n Boolean(value) && typeof value === \"object\" && !Array.isArray(value);\n\nconst isCreatePayload = (value: unknown): value is CreateQuranReflectPostPayload => {\n if (!isObject(value)) {\n return false;\n }\n\n return (\n typeof value[\"body\"] === \"string\" &&\n typeof value[\"draft\"] === \"boolean\" &&\n Array.isArray(value[\"references\"]) &&\n Array.isArray(value[\"mentions\"])\n );\n};\n\nexport const createQuranReflectPostsFacade = (\n generatedPosts: GeneratedGroup,\n request: (\n method: \"GET\" | \"PATCH\" | \"POST\",\n path: string,\n operationRequest?: OperationRequest,\n ) => Promise<unknown>,\n): QuranReflectPostsFacade => {\n const create: CreateQuranReflectPost = ((\n payloadOrRequest:\n | CreateQuranReflectPostPayload\n | QuranReflectPostCreateOperationRequest,\n ) => {\n if (isCreatePayload(payloadOrRequest)) {\n return request(\"POST\", \"/v1/posts\", {\n body: {\n post: payloadOrRequest,\n },\n }) as Promise<QuranReflectPostMutationResponse>;\n }\n\n return request(\"POST\", \"/v1/posts\", payloadOrRequest) as Promise<\n QuranReflectPostMutationResponse\n >;\n }) as CreateQuranReflectPost;\n\n const update: UpdateQuranReflectPost = ((\n idOrRequest: string | number | QuranReflectPostUpdateOperationRequest,\n payload?: UpdateQuranReflectPostPayload,\n ) => {\n if (payload !== undefined) {\n return request(\"PATCH\", \"/v1/posts/{id}\", {\n body: payload,\n path: { id: idOrRequest as string | number },\n }) as Promise<QuranReflectPostMutationResponse>;\n }\n\n return request(\n \"PATCH\",\n \"/v1/posts/{id}\",\n idOrRequest as QuranReflectPostUpdateOperationRequest,\n ) as Promise<QuranReflectPostMutationResponse>;\n }) as UpdateQuranReflectPost;\n\n const get: GetQuranReflectPost = ((\n idOrRequest: string | number | QuranReflectPostGetOperationRequest,\n query?: ApiParams,\n ) => {\n if (typeof idOrRequest === \"string\" || typeof idOrRequest === \"number\") {\n return request(\"GET\", \"/v1/posts/{id}\", {\n path: { id: idOrRequest },\n query,\n }) as Promise<QuranReflectPost>;\n }\n\n return request(\"GET\", \"/v1/posts/{id}\", idOrRequest) as Promise<\n QuranReflectPost\n >;\n }) as GetQuranReflectPost;\n\n return {\n ...generatedPosts,\n create,\n get,\n update,\n };\n};\n","import type {\n ApiParams,\n AppStateBootstrapPage,\n AppStateChangesOptions,\n AppStateChangesPage,\n AppStateConfiguration,\n AppStateDocument,\n AppStateJsonValue,\n AppStateMutationOptions,\n AppStateMutationResult,\n AppStatePage,\n AppStatePageOptions,\n AppStatePutBody,\n AppStateResponse,\n AppStateSuccess,\n AppStateTransport,\n HTTPMethod,\n OperationRequest,\n} from \"@/types\";\nimport { replacePathParams } from \"@/lib/url\";\n\ninterface AppStateFetcher {\n request<T>(\n service: \"auth\",\n path: string,\n query?: ApiParams,\n request?: OperationRequest,\n ): Promise<T>;\n}\n\nconst documentPath = (collection: string, key: string): string =>\n replacePathParams(\"/v1/app-state/{collection}/{key}\", { collection, key });\n\nconst mutationHeaders = (\n options: AppStateMutationOptions,\n): Readonly<Record<string, string>> => {\n const { idempotencyKey, ifMatch, ifNoneMatch } = options as {\n idempotencyKey: string;\n ifMatch?: string;\n ifNoneMatch?: string;\n };\n if (ifMatch !== undefined && ifNoneMatch !== undefined) {\n throw new Error(\n \"App State mutations accept only one of ifMatch or ifNoneMatch.\",\n );\n }\n\n return Object.freeze({\n \"Idempotency-Key\": idempotencyKey,\n ...(ifMatch === undefined ? {} : { \"If-Match\": ifMatch }),\n ...(ifNoneMatch === undefined ? {} : { \"If-None-Match\": ifNoneMatch }),\n });\n};\n\nconst snapshotPutBody = (body: AppStatePutBody): AppStatePutBody => {\n const snapshot = JSON.parse(JSON.stringify(body)) as AppStatePutBody;\n\n const freezeJson = (value: AppStatePutBody | AppStateJsonValue): void => {\n if (typeof value !== \"object\" || value === null) {\n return;\n }\n\n Object.freeze(value);\n for (const child of Object.values(value)) {\n freezeJson(child as AppStateJsonValue);\n }\n };\n\n freezeJson(snapshot);\n return snapshot;\n};\n\nexport const createAppStateFacade = (\n fetcher: AppStateFetcher,\n): AppStateTransport => {\n const request = <T>(\n method: HTTPMethod,\n path: string,\n query?: ApiParams,\n options: OperationRequest = {},\n ) =>\n fetcher.request<T>(\"auth\", path, query, {\n ...options,\n auth: \"user\",\n method,\n preserveResponseKeys: true,\n });\n\n const requestWithEtag = async <T>(\n method: HTTPMethod,\n path: string,\n options: OperationRequest = {},\n ): Promise<AppStateResponse<T>> => {\n let etag: string | null = null;\n let status = 0;\n const body = await request<AppStateSuccess<T>>(method, path, undefined, {\n ...options,\n onResponse: (metadata) => {\n etag = metadata.headers.get(\"etag\");\n status = metadata.status;\n },\n });\n\n return { ...body, etag, status };\n };\n\n return {\n bootstrap: (options: AppStatePageOptions = {}) =>\n request<AppStateSuccess<AppStateBootstrapPage>>(\n \"GET\",\n \"/v1/app-state:bootstrap\",\n options,\n ),\n deleteDocument: async (\n collection: string,\n key: string,\n options: AppStateMutationOptions,\n ) => {\n await request<void>(\"DELETE\", documentPath(collection, key), undefined, {\n headers: mutationHeaders(options),\n });\n },\n getChanges: (since: string, options: AppStateChangesOptions = {}) =>\n request<AppStateSuccess<AppStateChangesPage>>(\n \"GET\",\n \"/v1/app-state:changes\",\n { ...options, since },\n ),\n getConfiguration: () =>\n request<AppStateSuccess<AppStateConfiguration>>(\n \"GET\",\n \"/v1/app-state:config\",\n ),\n getDocument: (collection: string, key: string) =>\n requestWithEtag<AppStateDocument>(\"GET\", documentPath(collection, key)),\n listDocuments: (collection: string, options: AppStatePageOptions = {}) =>\n request<AppStateSuccess<AppStatePage>>(\n \"GET\",\n replacePathParams(\"/v1/app-state/{collection}\", { collection }),\n options,\n ),\n putDocument: async (\n collection: string,\n key: string,\n body: AppStatePutBody,\n options: AppStateMutationOptions,\n ) => {\n const headers = mutationHeaders(options);\n const snapshot = snapshotPutBody(body);\n return requestWithEtag<AppStateMutationResult>(\n \"PUT\",\n documentPath(collection, key),\n {\n body: snapshot as unknown as Record<string, unknown>,\n headers,\n },\n );\n },\n };\n};\n","const readErrorPayload = async (response: Response): Promise<unknown> => {\n try {\n const body = await response.text();\n if (!body) {\n return undefined;\n }\n\n if (response.headers.get(\"content-type\")?.toLowerCase().includes(\"json\")) {\n try {\n return JSON.parse(body) as unknown;\n } catch {\n return body;\n }\n }\n\n return body;\n } catch {\n return undefined;\n }\n};\n\nexport interface QuranHttpError extends Error {\n readonly headers: Headers;\n readonly payload: unknown;\n readonly status: number;\n}\n\nconst QuranHttpErrorClass = class QuranHttpError\n extends Error\n implements QuranHttpError\n{\n public readonly headers: Headers;\n public readonly payload: unknown;\n public readonly status: number;\n\n private constructor(response: Response, payload: unknown) {\n super(`${response.status} ${response.statusText}`);\n this.name = \"QuranHttpError\";\n this.headers = new Headers(response.headers);\n this.payload = payload;\n this.status = response.status;\n }\n\n public static async fromResponse(\n response: Response,\n ): Promise<QuranHttpError> {\n return new QuranHttpError(response, await readErrorPayload(response));\n }\n};\n\ntype QuranHttpErrorConstructor = typeof QuranHttpErrorClass;\n\nObject.defineProperty(QuranHttpErrorClass, \"name\", {\n configurable: true,\n value: \"QuranHttpError\",\n});\n\nconst QURAN_HTTP_ERROR_CONSTRUCTOR = Symbol.for(\n \"@quranjs/api/QuranHttpError/v1\",\n);\nconst constructorRegistry = globalThis as typeof globalThis & {\n [QURAN_HTTP_ERROR_CONSTRUCTOR]?: QuranHttpErrorConstructor;\n};\n\nexport const QuranHttpError: QuranHttpErrorConstructor =\n constructorRegistry[QURAN_HTTP_ERROR_CONSTRUCTOR] ?? QuranHttpErrorClass;\n\nconstructorRegistry[QURAN_HTTP_ERROR_CONSTRUCTOR] = QuranHttpError;\n","export const API_BASE_URL = \"https://apis.quran.foundation\";\n\nexport const DEFAULT_BASE_URLS = {\n analytics: \"https://apis.quran.foundation/analytics\",\n auth: \"https://apis.quran.foundation/auth\",\n content: \"https://apis.quran.foundation/content\",\n oauth2: \"https://oauth2.quran.foundation\",\n quranReflect: \"https://apis.quran.foundation/quran-reflect\",\n search: \"https://apis.quran.foundation/search\",\n} as const;\n\nexport const DIRECT_PATH_PREFIX = {\n analytics: \"/v1\",\n auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\n analytics: \"/analytics/v1\",\n auth: \"/auth/v1\",\n content: \"/content/api/v4\",\n oauth2: \"\",\n quranReflect: \"/quran-reflect/v1\",\n search: \"/search/v1\",\n} as const;\n\nexport const LEGACY_PREFIXES = {\n analytics: [\"/analytics/v1\", \"/v1\"] as const,\n auth: [\"/auth/v1\", \"/v1\"] as const,\n content: [\"/content/api/v4\", \"/api/v4\"] as const,\n oauth2: [] as const,\n quranReflect: [\"/quran-reflect/v1\", \"/v1\"] as const,\n search: [\"/search/v1\", \"/v1\"] as const,\n} as const;\n","import type {\n OperationDefinition,\n PublicApiService,\n} from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n CustomFetcher,\n OperationRequest,\n PublicClientConfig,\n UserSession,\n} from \"@/types\";\nimport { prepareBody } from \"@/lib/http-utils\";\nimport { QuranHttpError } from \"@/sdk/http-error\";\nimport {\n DEFAULT_BASE_URLS,\n DIRECT_PATH_PREFIX,\n GATEWAY_PATH_PREFIX,\n LEGACY_PREFIXES,\n} from \"@/lib/service-config\";\nimport {\n ensureLeadingSlash,\n normalizePathTemplate,\n paramsToString,\n removeTrailingSlash,\n replacePathParams,\n} from \"@/lib/url\";\nimport humps from \"humps\";\n\nconst { camelizeKeys } = humps;\n\nexport class PublicQuranFetcher {\n private userSession: UserSession | null | undefined;\n\n constructor(private readonly config: PublicClientConfig) {\n this.userSession = config.userSession;\n }\n\n public clearCachedTokens(): void {\n return;\n }\n\n public getFetch(): CustomFetcher {\n const doFetch = this.config.fetch ?? globalThis.fetch;\n\n if (typeof doFetch !== \"function\") {\n throw new Error(\n \"No fetch function available. Please provide a fetch implementation or ensure global fetch is available.\",\n );\n }\n\n return doFetch;\n }\n\n public async getUserSession(): Promise<UserSession | null> {\n const storedSession = await this.config.storage?.getSession?.();\n if (storedSession !== undefined) {\n return storedSession;\n }\n\n return this.userSession ?? null;\n }\n\n public async setUserSession(session: UserSession | null): Promise<void> {\n if (!this.config.storage) {\n this.userSession = session;\n return;\n }\n\n if (!session) {\n if (this.config.storage.clearSession) {\n await this.config.storage.clearSession();\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(null);\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(session);\n this.userSession = session;\n }\n\n public buildServiceUrl(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n ): string {\n const { baseUrl, usesGateway } = this.resolveServiceBaseUrl(service);\n const servicePath = this.normalizeServicePath(service, path, usesGateway);\n const preserveQueryParamCase =\n service === \"auth\" || service === \"quranReflect\";\n\n return `${baseUrl}${servicePath}${paramsToString(query, {\n preserveCase: preserveQueryParamCase,\n })}`;\n }\n\n public async requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: OperationRequest,\n ): Promise<T> {\n return this.request<T>(\n operation.service,\n replacePathParams(operation.path, request?.path),\n request?.query,\n {\n ...request,\n auth:\n request?.auth === \"auto\" || !request?.auth\n ? operation.auth\n : request.auth,\n method:\n request?.method ??\n (operation.method.toUpperCase() as OperationRequest[\"method\"]),\n path: undefined,\n },\n );\n }\n\n public async request<T = unknown>(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n request: OperationRequest = {},\n ): Promise<T> {\n if (request.basicAuth) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n const effectiveAuth = this.resolveAuthMode(service, request.auth);\n const url = this.buildServiceUrl(service, path, query);\n const headers = new Headers(request.headers);\n const body = prepareBody(request, headers);\n\n if (service !== \"oauth2\") {\n headers.set(\"x-client-id\", this.config.clientId);\n }\n\n await this.applyAuthenticationHeaders(\n service,\n effectiveAuth,\n headers,\n request,\n );\n\n const response = await this.getFetch()(url, {\n body,\n headers,\n method: request.method ?? \"GET\",\n });\n\n if (!response.ok) {\n throw await QuranHttpError.fromResponse(response);\n }\n\n request.onResponse?.({\n headers: response.headers,\n status: response.status,\n });\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n return (await response.text()) as T;\n }\n\n const json = await response.json();\n if (request.preserveResponseKeys) {\n return json as T;\n }\n return camelizeKeys(json as object) as T;\n }\n\n private resolveAuthMode(\n service: PublicApiService,\n auth: OperationRequest[\"auth\"] = \"auto\",\n ): \"none\" | \"user\" {\n if (auth !== \"auto\") {\n if (auth === \"app\") {\n throw new Error(\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\",\n );\n }\n\n return auth;\n }\n\n if (service === \"auth\" || service === \"quranReflect\") {\n return \"user\";\n }\n\n return \"none\";\n }\n\n private async applyAuthenticationHeaders(\n service: PublicApiService,\n auth: \"none\" | \"user\",\n headers: Headers,\n request: OperationRequest,\n ): Promise<void> {\n if (request.accessToken) {\n this.setTokenHeaders(service, headers, request.accessToken);\n return;\n }\n\n if (auth === \"none\") {\n return;\n }\n\n const session = await this.getUserSession();\n if (!session?.accessToken) {\n throw new Error(\n \"This operation requires a user session. Sign in first or use @quranjs/api/server.\",\n );\n }\n\n this.setTokenHeaders(service, headers, session.accessToken);\n }\n\n private setTokenHeaders(\n service: PublicApiService,\n headers: Headers,\n accessToken: string,\n ): void {\n if (service === \"oauth2\") {\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return;\n }\n\n headers.set(\"x-auth-token\", accessToken);\n }\n\n private resolveServiceBaseUrl(service: PublicApiService): {\n baseUrl: string;\n usesGateway: boolean;\n } {\n const { services } = this.config;\n const directBaseUrl =\n service === \"auth\"\n ? services?.authBaseUrl\n : service === \"quranReflect\"\n ? services?.quranReflectBaseUrl\n : (services?.oauth2BaseUrl ?? services?.tokenHost);\n\n if (directBaseUrl) {\n return {\n baseUrl: removeTrailingSlash(directBaseUrl),\n usesGateway: false,\n };\n }\n\n if (services?.gatewayUrl && service !== \"oauth2\") {\n return {\n baseUrl: removeTrailingSlash(services.gatewayUrl),\n usesGateway: true,\n };\n }\n\n return {\n baseUrl: DEFAULT_BASE_URLS[service],\n usesGateway: false,\n };\n }\n\n private normalizeServicePath(\n service: PublicApiService,\n path: string,\n usesGateway: boolean,\n ): string {\n let normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n for (const legacyPrefix of LEGACY_PREFIXES[service]) {\n if (normalizedPath.startsWith(legacyPrefix)) {\n normalizedPath = ensureLeadingSlash(\n normalizedPath.slice(legacyPrefix.length),\n );\n break;\n }\n }\n\n const prefix = usesGateway\n ? GATEWAY_PATH_PREFIX[service]\n : DIRECT_PATH_PREFIX[service];\n\n if (normalizedPath.startsWith(prefix) || prefix.length === 0) {\n return normalizedPath;\n }\n\n return `${prefix}${normalizedPath}`;\n }\n}\n","import type { AuthService } from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n HTTPMethod,\n OperationRequest,\n PublicClientConfig,\n TokenResponse,\n} from \"@/types\";\nimport { publicOperationCatalog } from \"@/generated/public-contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { createQuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport type { QuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport { createAppStateFacade } from \"@/runtime/app-state\";\nimport { PublicQuranFetcher } from \"@/sdk/public-fetcher\";\n\ntype RawOperation = (request?: OperationRequest) => Promise<unknown>;\ntype GeneratedGroup = Record<string, RawOperation>;\ntype QuranReflectFacade = {\n comments: GeneratedGroup;\n posts: QuranReflectPostsFacade;\n raw: Record<string, RawOperation>;\n rooms: GeneratedGroup;\n tags: GeneratedGroup;\n users: GeneratedGroup;\n};\n\nconst SERVER_ONLY_MESSAGE =\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\";\nconst LEGACY_BOOKMARK_GET_MESSAGE =\n \"auth.bookmarks.get(bookmarkId) is not supported because /v1/bookmarks/bookmark expects bookmark detail query parameters. Pass a query object such as { mushafId, key, type, verseNumber } or { mushafId, isReading: true }.\";\n\nconst createUserServiceRequest =\n (fetcher: PublicQuranFetcher, service: AuthService) =>\n (method: HTTPMethod, path: string, request?: OperationRequest) => {\n return fetcher.request<unknown>(\n service,\n replacePathParams(path, request?.path),\n request?.query,\n {\n ...request,\n auth: \"user\",\n method,\n path: undefined,\n query: undefined,\n },\n );\n };\n\nconst createAuthFacade = (fetcher: PublicQuranFetcher) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.auth.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.auth.v1,\n raw,\n );\n const request = createUserServiceRequest(fetcher, \"auth\");\n\n return {\n ...generatedGroups,\n appState: createAppStateFacade(fetcher),\n collections: {\n ...generatedGroups.collections,\n addBookmark: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}/bookmarks\", {\n body,\n path: { collectionId },\n }),\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections\", { body }),\n get: (collectionId: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n query,\n }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/collections\", { query }),\n listAll: (query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/all\", { query }),\n remove: (collectionId: string) =>\n request(\"DELETE\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n }),\n removeBookmark: (collectionId: string, bookmarkId: string) =>\n request(\n \"DELETE\",\n \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\",\n {\n path: { bookmarkId, collectionId },\n },\n ),\n update: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}\", {\n body,\n path: { collectionId },\n }),\n },\n bookmarks: {\n ...generatedGroups.bookmarks,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/bookmarks\", { body }),\n get: async (query?: ApiParams | string) => {\n if (typeof query === \"string\") {\n throw new Error(LEGACY_BOOKMARK_GET_MESSAGE);\n }\n\n return request(\"GET\", \"/v1/bookmarks/bookmark\", {\n query,\n });\n },\n list: (query?: ApiParams) => request(\"GET\", \"/v1/bookmarks\", { query }),\n listCollections: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/collections\", { query }),\n listRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/ayahs-range\", { query }),\n remove: (bookmarkId: string) =>\n request(\"DELETE\", \"/v1/bookmarks/{bookmarkId}\", {\n path: { bookmarkId },\n }),\n },\n goals: {\n ...generatedGroups.goals,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/goals\", { body }),\n estimate: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/estimate\", { query }),\n getTodaysPlan: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/get-todays-plan\", { query }),\n remove: (id: string) =>\n request(\"DELETE\", \"/v1/goals/{id}\", { path: { id } }),\n update: (id: string, body: Record<string, unknown>) =>\n request(\"PUT\", \"/v1/goals/{id}\", {\n body,\n path: { id },\n }),\n },\n notes: {\n ...generatedGroups.notes,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes\", { body }),\n get: (noteId: string) =>\n request(\"GET\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/notes\", { query }),\n listByAttachedEntity: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-attached-entity\", { query }),\n listByRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-range\", { query }),\n listByVerseKey: (verseKey: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-verse/{verseKey}\", {\n path: { verseKey },\n query,\n }),\n publish: (noteId: string, body?: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes/{noteId}/publish\", {\n body,\n path: { noteId },\n }),\n remove: (noteId: string) =>\n request(\"DELETE\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n update: (noteId: string, body: Record<string, unknown>) =>\n request(\"PATCH\", \"/v1/notes/{noteId}\", {\n body,\n path: { noteId },\n }),\n },\n preferences: {\n ...generatedGroups.preferences,\n bulkUpdate: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences/bulk\", { body }),\n get: (query?: ApiParams) => request(\"GET\", \"/v1/preferences\", { query }),\n update: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences\", { body }),\n },\n raw,\n readingSessions: {\n ...generatedGroups.readingSessions,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/reading-sessions\", { body }),\n list: (query?: ApiParams) =>\n request(\"GET\", \"/v1/reading-sessions\", { query }),\n },\n };\n};\n\nconst createQuranReflectFacade = (\n fetcher: PublicQuranFetcher,\n): QuranReflectFacade => {\n const raw = createRawClient(fetcher, publicOperationCatalog.quranReflect.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.quranReflect.v1,\n raw,\n );\n\n return {\n comments: generatedGroups.comments ?? {},\n posts: createQuranReflectPostsFacade(\n generatedGroups.posts ?? {},\n createUserServiceRequest(fetcher, \"quranReflect\"),\n ),\n raw,\n rooms: generatedGroups.rooms ?? {},\n tags: generatedGroups.tags ?? {},\n users: generatedGroups.users ?? {},\n };\n};\n\nconst createOAuth2Facade = (\n fetcher: PublicQuranFetcher,\n config: PublicClientConfig,\n) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.oauth2.v1);\n\n const exchangeToken = async (\n body: URLSearchParams,\n options: { requiresRefreshToken?: boolean } = {},\n ) => {\n if (config.clientType !== \"public\") {\n throw new Error(\n \"This OAuth2 exchange requires a backend because your client is confidential.\",\n );\n }\n\n if (options.requiresRefreshToken && !body.get(\"refresh_token\")) {\n throw new Error(\"Missing refresh token.\");\n }\n\n body.set(\"client_id\", config.clientId);\n\n const requestRefreshToken = body.get(\"refresh_token\") ?? undefined;\n const storedSession = options.requiresRefreshToken\n ? await fetcher.getUserSession()\n : null;\n const currentSession =\n options.requiresRefreshToken && requestRefreshToken\n ? { ...(storedSession ?? {}), refreshToken: requestRefreshToken }\n : storedSession;\n\n const token = await fetcher.request<TokenResponse>(\n \"oauth2\",\n \"/oauth2/token\",\n undefined,\n {\n auth: \"none\",\n body,\n contentType: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n },\n );\n\n await fetcher.setUserSession(toUserSession(token, currentSession));\n return token;\n };\n\n return {\n authorizeUrl: (query: Record<string, string | number | undefined>) =>\n fetcher.buildServiceUrl(\"oauth2\", \"/oauth2/auth\", query as ApiParams),\n exchangeCode: (params: {\n code: string;\n codeVerifier?: string;\n redirectUri: string;\n scope?: string;\n }) => {\n const body = new URLSearchParams({\n code: params.code,\n grant_type: \"authorization_code\",\n redirect_uri: params.redirectUri,\n });\n\n if (params.codeVerifier) {\n body.set(\"code_verifier\", params.codeVerifier);\n }\n\n if (params.scope) {\n body.set(\"scope\", params.scope);\n }\n\n return exchangeToken(body);\n },\n getUserInfo: (accessToken?: string) =>\n fetcher.request(\"oauth2\", \"/userinfo\", undefined, {\n accessToken,\n auth: \"user\",\n method: \"GET\",\n }),\n introspect: () => {\n throw new Error(\n \"Token introspection requires @quranjs/api/server or a backend.\",\n );\n },\n logout: (query?: ApiParams) =>\n fetcher.request(\"oauth2\", \"/oauth2/sessions/logout\", query, {\n auth: \"none\",\n method: \"GET\",\n }),\n raw,\n refresh: async (refreshToken?: string) => {\n const currentSession = await fetcher.getUserSession();\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken ?? currentSession?.refreshToken ?? \"\",\n });\n\n return exchangeToken(body, { requiresRefreshToken: true });\n },\n };\n};\n\ntype ServerOnlyGuard = ((...args: unknown[]) => Promise<never>) & {\n [key: string]: ServerOnlyGuard | undefined;\n};\n\nconst createServerOnlyGuard = (): ServerOnlyGuard => {\n const fail = (() =>\n Promise.reject(new Error(SERVER_ONLY_MESSAGE))) as ServerOnlyGuard;\n const proxy = new Proxy(fail, {\n apply() {\n return Promise.reject(new Error(SERVER_ONLY_MESSAGE));\n },\n get(_target, property) {\n if (property === \"then\") {\n return undefined;\n }\n\n return proxy;\n },\n });\n\n return proxy;\n};\n\nexport const createPublicRuntimeClient = (config: PublicClientConfig) => {\n const fetcher = new PublicQuranFetcher(config);\n fetcher.getFetch();\n\n const authV1 = createAuthFacade(fetcher);\n const quranReflectV1 = createQuranReflectFacade(fetcher);\n const oauth2V1 = createOAuth2Facade(fetcher, config);\n const serverOnlyGuard = createServerOnlyGuard();\n\n const raw = {\n auth: {\n v1: authV1.raw,\n },\n content: {\n v4: serverOnlyGuard,\n },\n oauth2: {\n v1: oauth2V1.raw,\n },\n quranReflect: {\n v1: quranReflectV1.raw,\n },\n search: {\n v1: serverOnlyGuard,\n },\n };\n\n return {\n answers: serverOnlyGuard,\n audio: serverOnlyGuard,\n auth: {\n ...authV1,\n v1: authV1,\n },\n chapters: serverOnlyGuard,\n clearCachedTokens: () => fetcher.clearCachedTokens(),\n content: serverOnlyGuard,\n getUserSession: () => fetcher.getUserSession(),\n hadithReferences: serverOnlyGuard,\n juzs: serverOnlyGuard,\n oauth2: {\n ...oauth2V1,\n v1: oauth2V1,\n },\n quranReflect: {\n ...quranReflectV1,\n v1: quranReflectV1,\n },\n raw,\n resources: serverOnlyGuard,\n search: serverOnlyGuard,\n verses: serverOnlyGuard,\n };\n};\n","import { QuranHttpError } from \"./http-error\";\n\nexport type AppStateErrorCode =\n | \"app_state_data_deleted\"\n | \"app_state_disabled\"\n | \"app_state_policy_changed\"\n | \"app_state_unavailable\"\n | \"bootstrap_required\"\n | \"collection_not_allowed\"\n | \"document_not_found\"\n | \"document_too_large\"\n | \"idempotency_key_reused\"\n | \"internal_server_error\"\n | \"insufficient_scope\"\n | \"invalid_collection\"\n | \"invalid_etag\"\n | \"invalid_idempotency_key\"\n | \"invalid_json\"\n | \"invalid_key\"\n | \"invalid_precondition\"\n | \"invalid_sync_token\"\n | \"invalid_token\"\n | \"namespace_resolution_unavailable\"\n | \"payload_too_large\"\n | \"precondition_failed\"\n | \"precondition_required\"\n | \"quota_exceeded\"\n | \"rate_limit_exceeded\"\n | \"sync_token_expired\";\n\nexport interface AppStateServiceError {\n code: AppStateErrorCode;\n details?: {\n currentETag?: string | null;\n [key: string]: unknown;\n };\n message?: string;\n [key: string]: unknown;\n}\n\nexport interface AppStateErrorPayload {\n details: {\n currentETag?: string | null;\n error: AppStateErrorCode | AppStateServiceError;\n [key: string]: unknown;\n };\n message: string;\n success: false;\n type: string;\n}\n\nexport type AppStateHttpError = QuranHttpError & {\n readonly payload: AppStateErrorPayload;\n};\n\nconst APP_STATE_ERROR_CODES: ReadonlySet<string> = new Set<AppStateErrorCode>([\n \"app_state_data_deleted\",\n \"app_state_disabled\",\n \"app_state_policy_changed\",\n \"app_state_unavailable\",\n \"bootstrap_required\",\n \"collection_not_allowed\",\n \"document_not_found\",\n \"document_too_large\",\n \"idempotency_key_reused\",\n \"internal_server_error\",\n \"insufficient_scope\",\n \"invalid_collection\",\n \"invalid_etag\",\n \"invalid_idempotency_key\",\n \"invalid_json\",\n \"invalid_key\",\n \"invalid_precondition\",\n \"invalid_sync_token\",\n \"invalid_token\",\n \"namespace_resolution_unavailable\",\n \"payload_too_large\",\n \"precondition_failed\",\n \"precondition_required\",\n \"quota_exceeded\",\n \"rate_limit_exceeded\",\n \"sync_token_expired\",\n]);\n\nexport const getAppStateErrorCode = (\n error: unknown,\n): AppStateErrorCode | undefined => {\n if (!(error instanceof QuranHttpError)) {\n return undefined;\n }\n\n const payload = error.payload;\n if (typeof payload !== \"object\" || payload === null) {\n return undefined;\n }\n\n const details = (payload as { details?: unknown }).details;\n if (typeof details !== \"object\" || details === null) {\n return undefined;\n }\n\n const serviceError = (details as { error?: unknown }).error;\n const code =\n typeof serviceError === \"string\"\n ? serviceError\n : typeof serviceError === \"object\" && serviceError !== null\n ? (serviceError as { code?: unknown }).code\n : undefined;\n return typeof code === \"string\" && APP_STATE_ERROR_CODES.has(code)\n ? (code as AppStateErrorCode)\n : undefined;\n};\n\nexport function isAppStateHttpError(\n error: unknown,\n code?: AppStateErrorCode,\n): error is AppStateHttpError {\n const actualCode = getAppStateErrorCode(error);\n return (\n actualCode !== undefined && (code === undefined || code === actualCode)\n );\n}\n","import type {\n AppStateAccountState,\n AppStateChange,\n AppStatePendingMutation,\n AppStatePendingPut,\n AppStatePutBody,\n AppStateStateView,\n AppStateStore,\n AppStateStoredDocument,\n AppStateStoreReducer,\n AppStateVisibleDocument,\n} from \"@/types\";\n\nexport type AppStateProtocolErrorCode =\n | \"bootstrap_cursor_missing\"\n | \"bootstrap_sync_token_missing\"\n | \"put_response_etag_missing\"\n | \"same_version_conflict\";\n\nexport class AppStateProtocolError extends Error {\n public readonly code: AppStateProtocolErrorCode;\n\n public constructor(code: AppStateProtocolErrorCode) {\n super(`App State reconciliation protocol error: ${code}`);\n this.name = \"AppStateProtocolError\";\n this.code = code;\n }\n}\n\nconst cloneJson = <T>(value: T): T => JSON.parse(JSON.stringify(value)) as T;\n\nconst deepFreeze = <T>(value: T): Readonly<T> => {\n if (typeof value !== \"object\" || value === null || Object.isFrozen(value)) {\n return value;\n }\n\n for (const child of Object.values(value)) {\n deepFreeze(child);\n }\n return Object.freeze(value);\n};\n\nconst stableJson = (value: unknown): string => {\n if (Array.isArray(value)) {\n return `[${value.map(stableJson).join(\",\")}]`;\n }\n if (typeof value === \"object\" && value !== null) {\n const object = value as Record<string, unknown>;\n return `{${Object.keys(object)\n .sort()\n .map((key) => `${JSON.stringify(key)}:${stableJson(object[key])}`)\n .join(\",\")}}`;\n }\n return JSON.stringify(value);\n};\n\nexport const appStateDocumentId = (collection: string, key: string): string =>\n `${collection}/${encodeURIComponent(key)}`;\n\nexport const createInitialAppStateState = (): AppStateAccountState => ({\n bootstrapCursor: null,\n localRevision: 0,\n pendingMutations: [],\n shadow: {},\n stagingBootstrap: null,\n syncToken: null,\n});\n\nconst assertSynchronousResult = (value: unknown): void => {\n if (\n typeof value === \"object\" &&\n value !== null &&\n \"then\" in value &&\n typeof (value as { then?: unknown }).then === \"function\"\n ) {\n throw new TypeError(\"App State store reducers must be synchronous.\");\n }\n};\n\nexport const createAppStateMemoryStore = (\n initialStates: Readonly<Record<string, AppStateAccountState>> = {},\n): AppStateStore => {\n const accounts = new Map<string, AppStateAccountState>(\n Object.entries(initialStates).map(([accountId, state]) => [\n accountId,\n deepFreeze(cloneJson(state)) as AppStateAccountState,\n ]),\n );\n const transactions = new Map<string, Promise<void>>();\n\n return {\n transaction: <T>(\n accountId: string,\n reducer: AppStateStoreReducer<T>,\n ): Promise<T> => {\n if (!accountId) {\n return Promise.reject(\n new TypeError(\"App State transactions require an account ID.\"),\n );\n }\n\n const previous = transactions.get(accountId) ?? Promise.resolve();\n const operation = previous.then(() => {\n const current = accounts.get(accountId) ?? createInitialAppStateState();\n const draft = cloneJson(current);\n const result = reducer(draft);\n assertSynchronousResult(result);\n deepFreeze(draft);\n accounts.set(accountId, draft);\n return result;\n });\n transactions.set(\n accountId,\n operation.then(\n () => undefined,\n () => undefined,\n ),\n );\n return operation;\n },\n };\n};\n\nconst applyChange = (\n documents: Record<string, AppStateStoredDocument>,\n change: AppStateChange,\n): void => {\n const id = appStateDocumentId(change.collection, change.key);\n const current = documents[id];\n if (current && change.version < current.version) {\n return;\n }\n if (current && change.version === current.version) {\n if (stableJson(current) !== stableJson(change)) {\n throw new AppStateProtocolError(\"same_version_conflict\");\n }\n return;\n }\n documents[id] = cloneJson(change);\n};\n\nexport const applyAppStateChangePage = (\n state: AppStateAccountState,\n changes: readonly AppStateChange[],\n nextSyncToken: string,\n target: \"shadow\" | \"stagingBootstrap\" = \"shadow\",\n): void => {\n const current =\n target === \"shadow\" ? state.shadow : (state.stagingBootstrap ?? {});\n const replacement = cloneJson(current);\n for (const change of changes) {\n applyChange(replacement, change);\n }\n\n if (target === \"shadow\") {\n state.shadow = replacement;\n } else {\n state.stagingBootstrap = replacement;\n }\n state.syncToken = nextSyncToken;\n};\n\nexport const applyAppStateBootstrapPage = (\n state: AppStateAccountState,\n items: readonly AppStateStoredDocument[],\n nextCursor: string | null,\n): void => {\n const replacement = cloneJson(state.stagingBootstrap ?? {});\n for (const item of items) {\n applyChange(replacement, item);\n }\n state.stagingBootstrap = replacement;\n state.bootstrapCursor = nextCursor;\n};\n\nexport const promoteAppStateBootstrap = (state: AppStateAccountState): void => {\n state.shadow = cloneJson(state.stagingBootstrap ?? {});\n state.stagingBootstrap = null;\n state.bootstrapCursor = null;\n};\n\nconst currentPrecondition = (\n state: AppStateAccountState,\n collection: string,\n key: string,\n): Pick<AppStatePendingMutation, \"ifMatch\" | \"ifNoneMatch\"> => {\n const current = state.shadow[appStateDocumentId(collection, key)];\n return current?.operation === \"upsert\"\n ? { ifMatch: current.etag }\n : { ifNoneMatch: \"*\" };\n};\n\nexport const queueAppStatePut = (\n state: AppStateAccountState,\n collection: string,\n key: string,\n body: AppStatePutBody,\n idempotencyKey: string,\n): number => {\n const localRevision = state.localRevision + 1;\n const mutation: AppStatePendingPut = {\n ...currentPrecondition(state, collection, key),\n body: cloneJson(body),\n collection,\n idempotencyKey,\n key,\n localRevision,\n method: \"PUT\",\n };\n deepFreeze(mutation);\n state.pendingMutations = [...state.pendingMutations, mutation];\n state.localRevision = localRevision;\n return localRevision;\n};\n\nexport const queueAppStateDelete = (\n state: AppStateAccountState,\n collection: string,\n key: string,\n idempotencyKey: string,\n): number => {\n const localRevision = state.localRevision + 1;\n const mutation: AppStatePendingMutation = {\n ...currentPrecondition(state, collection, key),\n collection,\n idempotencyKey,\n key,\n localRevision,\n method: \"DELETE\",\n };\n deepFreeze(mutation);\n state.pendingMutations = [...state.pendingMutations, mutation];\n state.localRevision = localRevision;\n return localRevision;\n};\n\nconst visibleFromShadow = (\n shadow: Readonly<Record<string, AppStateStoredDocument>>,\n): Record<string, AppStateVisibleDocument> => {\n const visible: Record<string, AppStateVisibleDocument> = {};\n for (const [id, document] of Object.entries(shadow)) {\n if (document.operation === \"delete\") {\n continue;\n }\n visible[id] = {\n collection: document.collection,\n etag: document.etag,\n key: document.key,\n pending: false,\n schemaVersion: document.schemaVersion,\n updatedAt: document.updatedAt,\n value: cloneJson(document.value),\n version: document.version,\n };\n }\n return visible;\n};\n\nexport const deriveAppStateStateView = (\n state: AppStateAccountState,\n): AppStateStateView => {\n const snapshot = cloneJson(state);\n const visible = visibleFromShadow(snapshot.shadow);\n for (const mutation of snapshot.pendingMutations) {\n const id = appStateDocumentId(mutation.collection, mutation.key);\n if (mutation.method === \"DELETE\") {\n delete visible[id];\n continue;\n }\n const current = visible[id];\n visible[id] = {\n collection: mutation.collection,\n etag: current?.etag ?? null,\n key: mutation.key,\n pending: true,\n schemaVersion: mutation.body.schemaVersion,\n updatedAt: current?.updatedAt ?? null,\n value: cloneJson(mutation.body.value),\n version: current?.version ?? null,\n };\n }\n return deepFreeze({ ...snapshot, visible }) as AppStateStateView;\n};\n\nexport const snapshotAppStateMutations = (\n state: AppStateAccountState,\n): readonly AppStatePendingMutation[] =>\n deepFreeze(cloneJson(state.pendingMutations));\n\nexport const removeAppStateMutation = (\n state: AppStateAccountState,\n localRevision: number,\n): void => {\n state.pendingMutations = state.pendingMutations.filter(\n (mutation) => mutation.localRevision !== localRevision,\n );\n};\n\nexport const replaceAppStateMutation = (\n state: AppStateAccountState,\n mutation: AppStatePendingMutation,\n): void => {\n state.pendingMutations = state.pendingMutations.map((pending) =>\n pending.localRevision === mutation.localRevision\n ? (deepFreeze(cloneJson(mutation)) as AppStatePendingMutation)\n : pending,\n );\n};\n","import type {\n AppStateAccountState,\n AppStateChange,\n AppStateMutationOptions,\n AppStatePendingMutation,\n AppStatePendingPut,\n AppStatePutBody,\n AppStateReconciler,\n AppStateReconcilerOptions,\n AppStateResponse,\n AppStateStateView,\n AppStateStoredDocument,\n AppStateTransport,\n} from \"@/types\";\nimport { getAppStateErrorCode } from \"@/sdk/app-state-errors\";\n\nimport {\n applyAppStateBootstrapPage,\n applyAppStateChangePage,\n appStateDocumentId,\n AppStateProtocolError,\n deriveAppStateStateView,\n promoteAppStateBootstrap,\n queueAppStateDelete,\n queueAppStatePut,\n removeAppStateMutation,\n replaceAppStateMutation,\n snapshotAppStateMutations,\n} from \"./app-state-state\";\n\ninterface ReconcileContext {\n accountId: string;\n generation: number;\n transport: AppStateTransport;\n}\n\nconst DEFAULT_PAGE_SIZE = 100;\nconst DEFAULT_MAX_BOOTSTRAP_RESTART_ATTEMPTS = 3;\nconst DEFAULT_MAX_REBASE_ATTEMPTS = 3;\n\nconst defaultIdempotencyKey = (): string => {\n const runtimeCrypto = (\n globalThis as { crypto?: { randomUUID?: () => string } }\n ).crypto;\n if (typeof runtimeCrypto?.randomUUID !== \"function\") {\n throw new Error(\n \"App State reconciliation requires createIdempotencyKey when crypto.randomUUID is unavailable.\",\n );\n }\n return runtimeCrypto.randomUUID();\n};\n\nconst mutationOptions = (\n mutation: AppStatePendingMutation,\n): AppStateMutationOptions => {\n if (mutation.ifMatch !== undefined) {\n return {\n idempotencyKey: mutation.idempotencyKey,\n ifMatch: mutation.ifMatch,\n };\n }\n if (mutation.ifNoneMatch !== undefined) {\n return {\n idempotencyKey: mutation.idempotencyKey,\n ifNoneMatch: mutation.ifNoneMatch,\n };\n }\n return { idempotencyKey: mutation.idempotencyKey };\n};\n\nconst bootstrapItems = (\n items: readonly Omit<AppStateStoredDocument, \"operation\">[],\n): AppStateStoredDocument[] =>\n items.map((item) => ({ ...item, operation: \"upsert\" }));\n\nconst isRecoveryError = (error: unknown): boolean => {\n const code = getAppStateErrorCode(error);\n return code === \"bootstrap_required\" || code === \"sync_token_expired\";\n};\n\nconst positiveInteger = (value: number, name: string): number => {\n if (!Number.isInteger(value) || value <= 0) {\n throw new TypeError(`${name} must be a positive integer.`);\n }\n return value;\n};\n\nexport const createAppStateReconciler = ({\n accountId: initialAccountId,\n createIdempotencyKey = defaultIdempotencyKey,\n maxRebaseAttempts = DEFAULT_MAX_REBASE_ATTEMPTS,\n pageSize = DEFAULT_PAGE_SIZE,\n store,\n transport: initialTransport,\n}: AppStateReconcilerOptions): AppStateReconciler => {\n if (!initialAccountId) {\n throw new TypeError(\"App State reconciliation requires an account ID.\");\n }\n positiveInteger(pageSize, \"pageSize\");\n if (!Number.isInteger(maxRebaseAttempts) || maxRebaseAttempts < 0) {\n throw new TypeError(\"maxRebaseAttempts must be a non-negative integer.\");\n }\n\n let activeAccountId = initialAccountId;\n let activeTransport = initialTransport;\n let accountGeneration = 0;\n let reconcileQueue = Promise.resolve();\n\n const isCurrent = (context: ReconcileContext): boolean =>\n context.accountId === activeAccountId &&\n context.generation === accountGeneration;\n\n const context = (): ReconcileContext => ({\n accountId: activeAccountId,\n generation: accountGeneration,\n transport: activeTransport,\n });\n\n const commit = async (\n reconcileContext: ReconcileContext,\n reducer: (state: AppStateAccountState) => void,\n ): Promise<boolean> => {\n if (!isCurrent(reconcileContext)) return false;\n return store.transaction(reconcileContext.accountId, (state) => {\n if (!isCurrent(reconcileContext)) return false;\n reducer(state);\n return true;\n });\n };\n\n const readProgress = (reconcileContext: ReconcileContext) =>\n store.transaction(reconcileContext.accountId, (state) => ({\n bootstrapCursor: state.bootstrapCursor,\n hasStaging: state.stagingBootstrap !== null,\n syncToken: state.syncToken,\n }));\n\n const resetBootstrap = (\n reconcileContext: ReconcileContext,\n ): Promise<boolean> =>\n commit(reconcileContext, (state) => {\n state.bootstrapCursor = null;\n state.stagingBootstrap = {};\n state.syncToken = null;\n });\n\n const rebuildBootstrap = async (\n reconcileContext: ReconcileContext,\n reset: boolean,\n ): Promise<void> => {\n let restartAttempts = 0;\n if (reset && !(await resetBootstrap(reconcileContext))) return;\n\n while (isCurrent(reconcileContext)) {\n while (isCurrent(reconcileContext)) {\n const progress = await readProgress(reconcileContext);\n if (!isCurrent(reconcileContext)) return;\n if (\n progress.hasStaging &&\n progress.bootstrapCursor === null &&\n progress.syncToken !== null\n ) {\n break;\n }\n\n let response: Awaited<ReturnType<AppStateTransport[\"bootstrap\"]>>;\n try {\n response = await reconcileContext.transport.bootstrap({\n ...(progress.bootstrapCursor === null\n ? {}\n : { cursor: progress.bootstrapCursor }),\n limit: pageSize,\n });\n } catch (error) {\n if (!isCurrent(reconcileContext)) return;\n throw error;\n }\n if (!isCurrent(reconcileContext)) return;\n\n const page = response.data;\n if (page.hasMore && page.nextCursor === null) {\n throw new AppStateProtocolError(\"bootstrap_cursor_missing\");\n }\n if (!page.hasMore && page.nextSyncToken === null) {\n throw new AppStateProtocolError(\"bootstrap_sync_token_missing\");\n }\n const pageCommitted = await commit(reconcileContext, (state) => {\n applyAppStateBootstrapPage(\n state,\n bootstrapItems(page.items),\n page.hasMore ? page.nextCursor : null,\n );\n if (!page.hasMore) {\n state.syncToken = page.nextSyncToken;\n }\n });\n if (!pageCommitted) return;\n if (!page.hasMore) break;\n }\n\n while (isCurrent(reconcileContext)) {\n const { syncToken } = await readProgress(reconcileContext);\n if (!isCurrent(reconcileContext)) return;\n if (syncToken === null) {\n throw new AppStateProtocolError(\"bootstrap_sync_token_missing\");\n }\n let response: Awaited<ReturnType<AppStateTransport[\"getChanges\"]>>;\n try {\n response = await reconcileContext.transport.getChanges(syncToken, {\n limit: pageSize,\n });\n } catch (error) {\n if (!isCurrent(reconcileContext)) return;\n if (!isRecoveryError(error)) throw error;\n const resetCommitted = await resetBootstrap(reconcileContext);\n if (!resetCommitted) return;\n if (restartAttempts >= DEFAULT_MAX_BOOTSTRAP_RESTART_ATTEMPTS) {\n throw error;\n }\n restartAttempts += 1;\n break;\n }\n if (!isCurrent(reconcileContext)) return;\n\n const pageCommitted = await commit(reconcileContext, (state) => {\n applyAppStateChangePage(\n state,\n response.data.changes,\n response.data.nextSyncToken,\n \"stagingBootstrap\",\n );\n if (!response.data.hasMore) {\n promoteAppStateBootstrap(state);\n }\n });\n if (!pageCommitted || !response.data.hasMore) return;\n }\n }\n };\n\n const pull = async (reconcileContext: ReconcileContext): Promise<void> => {\n const initial = await readProgress(reconcileContext);\n if (!isCurrent(reconcileContext)) return;\n if (initial.syncToken === null || initial.hasStaging) {\n await rebuildBootstrap(reconcileContext, false);\n return;\n }\n\n while (isCurrent(reconcileContext)) {\n const { syncToken } = await readProgress(reconcileContext);\n if (!isCurrent(reconcileContext)) return;\n if (syncToken === null) {\n await rebuildBootstrap(reconcileContext, false);\n return;\n }\n\n try {\n const response = await reconcileContext.transport.getChanges(\n syncToken,\n {\n limit: pageSize,\n },\n );\n if (!isCurrent(reconcileContext)) return;\n const pageCommitted = await commit(reconcileContext, (state) => {\n applyAppStateChangePage(\n state,\n response.data.changes,\n response.data.nextSyncToken,\n );\n });\n if (!pageCommitted || !response.data.hasMore) return;\n } catch (error) {\n if (!isCurrent(reconcileContext)) return;\n if (!isRecoveryError(error)) throw error;\n await rebuildBootstrap(reconcileContext, true);\n return;\n }\n }\n };\n\n const applySuccessfulPut = async (\n reconcileContext: ReconcileContext,\n mutation: AppStatePendingPut,\n response: AppStateResponse<{\n collection: string;\n key: string;\n schemaVersion: number;\n updatedAt: string;\n version: number;\n }>,\n ): Promise<void> => {\n const etag = response.etag;\n if (etag === null) {\n throw new AppStateProtocolError(\"put_response_etag_missing\");\n }\n await commit(reconcileContext, (state) => {\n if (state.syncToken !== null) {\n const change: AppStateChange = {\n ...response.data,\n etag,\n operation: \"upsert\",\n value: mutation.body.value,\n };\n applyAppStateChangePage(state, [change], state.syncToken);\n }\n removeAppStateMutation(state, mutation.localRevision);\n });\n };\n\n const acknowledgeDelete = async (\n reconcileContext: ReconcileContext,\n mutation: AppStatePendingMutation,\n ): Promise<void> => {\n await commit(reconcileContext, (state) => {\n const id = appStateDocumentId(mutation.collection, mutation.key);\n const current = state.shadow[id];\n if (current) {\n state.shadow[id] = { ...current, operation: \"delete\", value: null };\n }\n removeAppStateMutation(state, mutation.localRevision);\n });\n };\n\n const refreshAndRebase = async (\n reconcileContext: ReconcileContext,\n mutation: AppStatePendingMutation,\n ): Promise<AppStatePendingMutation | null> => {\n let current: Awaited<ReturnType<AppStateTransport[\"getDocument\"]>> | null;\n try {\n current = await reconcileContext.transport.getDocument(\n mutation.collection,\n mutation.key,\n );\n } catch (error) {\n if (getAppStateErrorCode(error) !== \"document_not_found\") throw error;\n current = null;\n }\n if (!isCurrent(reconcileContext)) return null;\n if (current !== null && current.etag === null) {\n throw new Error(\"App State conflict refresh did not return an ETag.\");\n }\n\n if (current === null && mutation.method === \"DELETE\") {\n await acknowledgeDelete(reconcileContext, mutation);\n return null;\n }\n\n const rebased: AppStatePendingMutation =\n mutation.method === \"PUT\"\n ? {\n body: mutation.body,\n collection: mutation.collection,\n idempotencyKey: createIdempotencyKey(),\n ...(current === null\n ? { ifNoneMatch: \"*\" }\n : { ifMatch: current.etag! }),\n key: mutation.key,\n localRevision: mutation.localRevision,\n method: \"PUT\",\n }\n : {\n collection: mutation.collection,\n idempotencyKey: createIdempotencyKey(),\n ifMatch: current!.etag!,\n key: mutation.key,\n localRevision: mutation.localRevision,\n method: \"DELETE\",\n };\n\n const committed = await commit(reconcileContext, (state) => {\n if (current !== null && state.syncToken !== null) {\n applyAppStateChangePage(\n state,\n [\n {\n ...current.data,\n etag: current.etag!,\n operation: \"upsert\",\n },\n ],\n state.syncToken,\n );\n }\n replaceAppStateMutation(state, rebased);\n });\n return committed ? rebased : null;\n };\n\n const replayMutation = async (\n reconcileContext: ReconcileContext,\n captured: AppStatePendingMutation,\n ): Promise<void> => {\n let mutation = captured;\n let rebaseAttempts = 0;\n\n while (isCurrent(reconcileContext)) {\n try {\n if (mutation.method === \"PUT\") {\n const response = await reconcileContext.transport.putDocument(\n mutation.collection,\n mutation.key,\n mutation.body,\n mutationOptions(mutation),\n );\n if (!isCurrent(reconcileContext)) return;\n await applySuccessfulPut(reconcileContext, mutation, response);\n } else {\n await reconcileContext.transport.deleteDocument(\n mutation.collection,\n mutation.key,\n mutationOptions(mutation),\n );\n if (!isCurrent(reconcileContext)) return;\n await acknowledgeDelete(reconcileContext, mutation);\n }\n return;\n } catch (error) {\n if (!isCurrent(reconcileContext)) return;\n const errorCode = getAppStateErrorCode(error);\n if (\n mutation.method === \"DELETE\" &&\n errorCode === \"document_not_found\"\n ) {\n await acknowledgeDelete(reconcileContext, mutation);\n return;\n }\n if (\n errorCode !== \"precondition_failed\" ||\n rebaseAttempts >= maxRebaseAttempts\n ) {\n throw error;\n }\n rebaseAttempts += 1;\n const rebased = await refreshAndRebase(reconcileContext, mutation);\n if (rebased === null) return;\n mutation = rebased;\n }\n }\n };\n\n const replay = async (reconcileContext: ReconcileContext): Promise<void> => {\n const captured = await store.transaction(\n reconcileContext.accountId,\n snapshotAppStateMutations,\n );\n for (const mutation of captured) {\n if (!isCurrent(reconcileContext)) return;\n await replayMutation(reconcileContext, mutation);\n }\n };\n\n const reconcileContext = async (\n reconcileContext: ReconcileContext,\n ): Promise<void> => {\n await pull(reconcileContext);\n if (!isCurrent(reconcileContext)) return;\n try {\n await replay(reconcileContext);\n } catch (error) {\n if (!isRecoveryError(error)) throw error;\n await rebuildBootstrap(reconcileContext, true);\n if (!isCurrent(reconcileContext)) return;\n await replay(reconcileContext);\n }\n if (!isCurrent(reconcileContext)) return;\n await pull(reconcileContext);\n };\n\n const getStateFor = (accountId: string): Promise<AppStateStateView> =>\n store.transaction(accountId, deriveAppStateStateView);\n\n return {\n deleteDocument: async (collection, key) => {\n const mutationContext = context();\n const idempotencyKey = createIdempotencyKey();\n await store.transaction(mutationContext.accountId, (state) => {\n queueAppStateDelete(state, collection, key, idempotencyKey);\n });\n return getStateFor(activeAccountId);\n },\n getState: () => getStateFor(activeAccountId),\n putDocument: async (collection, key, body: AppStatePutBody) => {\n const mutationContext = context();\n const idempotencyKey = createIdempotencyKey();\n const bodySnapshot = JSON.parse(JSON.stringify(body)) as AppStatePutBody;\n await store.transaction(mutationContext.accountId, (state) => {\n queueAppStatePut(\n state,\n collection,\n key,\n bodySnapshot,\n idempotencyKey,\n );\n });\n return getStateFor(activeAccountId);\n },\n reconcile: () => {\n const capturedContext = context();\n const operation = reconcileQueue.then(() =>\n reconcileContext(capturedContext),\n );\n reconcileQueue = operation.then(\n () => undefined,\n () => undefined,\n );\n return operation.then(() => getStateFor(activeAccountId));\n },\n switchAccount: (accountId, transport) => {\n if (!accountId) {\n return Promise.reject(\n new TypeError(\"App State reconciliation requires an account ID.\"),\n );\n }\n accountGeneration += 1;\n activeAccountId = accountId;\n activeTransport = transport;\n return getStateFor(accountId);\n },\n };\n};\n","import type { PublicClientConfig } from \"@/types\";\n\nimport { createPublicRuntimeClient } from \"./runtime/create-public-client\";\n\nexport { createAppStateReconciler } from \"./runtime/app-state-reconciler\";\nexport {\n AppStateProtocolError,\n createAppStateMemoryStore,\n} from \"./runtime/app-state-state\";\nexport { QuranHttpError } from \"./sdk/http-error\";\nexport {\n getAppStateErrorCode,\n isAppStateHttpError,\n} from \"./sdk/app-state-errors\";\nexport type {\n AppStateErrorCode,\n AppStateErrorPayload,\n AppStateHttpError,\n} from \"./sdk/app-state-errors\";\nexport type {\n AppStateAccountState,\n AppStateBootstrapPage,\n AppStateChange,\n AppStateChangesOptions,\n AppStateChangesPage,\n AppStateCollection,\n AppStateConfiguration,\n AppStateDocument,\n AppStateDocumentWithEtag,\n AppStateJsonValue,\n AppStateLimits,\n AppStateMutationOptions,\n AppStateMutationResult,\n AppStatePage,\n AppStatePageOptions,\n AppStatePendingDelete,\n AppStatePendingMutation,\n AppStatePendingMutationBase,\n AppStatePendingPut,\n AppStatePutBody,\n AppStateReconciler,\n AppStateReconcilerOptions,\n AppStateResponse,\n AppStateStateView,\n AppStateStore,\n AppStateStoredDocument,\n AppStateStoreReducer,\n AppStateSuccess,\n AppStateTransport,\n AppStateVisibleDocument,\n} from \"@/types\";\nexport type { TokenStorage, UserSession } from \"@/types\";\n\nexport const createPublicClient = (config: PublicClientConfig) => {\n if ((config as PublicClientConfig & { clientSecret?: string }).clientSecret) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n return createPublicRuntimeClient(config);\n};\n\nexport type PublicClient = ReturnType<typeof createPublicClient>;\n"]}
|