@quranjs/api 3.5.0 → 3.6.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 +33 -0
- package/dist/{index-BgoJducH.d.mts → index-BJ5hWalX.d.mts} +2 -1
- package/dist/{index-BgoJducH.d.ts → index-BJ5hWalX.d.ts} +2 -1
- 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 +3 -3
- package/dist/public.d.ts +3 -3
- package/dist/public.min.js +1 -1
- package/dist/public.min.js.map +1 -1
- package/dist/public.min.mjs +1 -1
- package/dist/public.min.mjs.map +1 -1
- package/dist/{runtime-utils-CpHQzQN3.d.mts → runtime-utils-BG7Q7TVB.d.mts} +1 -1
- package/dist/{runtime-utils-XwV859WP.d.ts → runtime-utils-z2Ga9MgK.d.ts} +1 -1
- package/dist/server.d.mts +18 -3
- package/dist/server.d.ts +18 -3
- 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-BiAZ4lTB.d.mts → verses-BHef2eGb.d.ts} +39 -2
- package/dist/{verses-CMsmJnhG.d.ts → verses-DTgS2dgL.d.mts} +39 -2
- package/package.json +3 -3
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 \"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 \"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 \"postsControllerGetMyPostsCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-within-range\"\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 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 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 auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\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 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/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 \"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 \"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 \"postsControllerGetMyPostsCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-within-range\"\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,4 +1,4 @@
|
|
|
1
|
-
import { O as OperationRequest, p as CreateQuranReflectPostPayload, s as QuranReflectPostMutationResponse, A as ApiParams, r as QuranReflectPost, q as UpdateQuranReflectPostPayload } from './index-
|
|
1
|
+
import { O as OperationRequest, p as CreateQuranReflectPostPayload, s as QuranReflectPostMutationResponse, A as ApiParams, r as QuranReflectPost, q as UpdateQuranReflectPostPayload } from './index-BJ5hWalX.mjs';
|
|
2
2
|
|
|
3
3
|
type RawOperation$1 = (request?: OperationRequest) => Promise<unknown>;
|
|
4
4
|
type GeneratedGroup = Record<string, RawOperation$1>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { O as OperationRequest, p as CreateQuranReflectPostPayload, s as QuranReflectPostMutationResponse, A as ApiParams, r as QuranReflectPost, q as UpdateQuranReflectPostPayload } from './index-
|
|
1
|
+
import { O as OperationRequest, p as CreateQuranReflectPostPayload, s as QuranReflectPostMutationResponse, A as ApiParams, r as QuranReflectPost, q as UpdateQuranReflectPostPayload } from './index-BJ5hWalX.js';
|
|
2
2
|
|
|
3
3
|
type RawOperation$1 = (request?: OperationRequest) => Promise<unknown>;
|
|
4
4
|
type GeneratedGroup = Record<string, RawOperation$1>;
|
package/dist/server.d.mts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
import { a as QuranAnswers, d as QuranAudio, Q as QuranChapters, V as VerseKey, i as AnswersByAyahResponse, k as AnswerCountWithinRangeResponse, h as AnswerQuestion, C as ChapterId, l as ChapterRecitation, N as NormalizedVerseRecitation, I as Pagination, o as Chapter, p as ChapterInfo, q as ChapterInfoResponse, s as HadithReferencesByAyahResponse, x as HadithCountWithinRangeResponse, w as HadithsByAyahResponse, G as Juz, a1 as ContentSyncResourceGroup, ad as ContentResourceSnapshot, _ as ChapterInfoResource, a0 as ChapterReciterResource, Z as LanguageResource, Y as RecitationStylesResource, L as RecitationInfoResource, K as RecitationResource, X as TafsirInfoResource, U as TafsirResource, O as TranslationInfoResource, M as TranslationResource, $ as VerseMediaResource, a9 as ContentSyncOptions, ac as ContentSyncResponse, E as Verse, H as HizbNumber, J as JuzNumber, P as PageNumber, R as RubNumber, e as QuranHadithReferences, c as QuranJuzs, f as QuranResources, g as QuranSearch, S as SearchResponse, b as QuranVerses } from './verses-
|
|
2
|
-
import { R as RawOperation, Q as QuranReflectPostsFacade } from './runtime-utils-
|
|
3
|
-
import { i as ServerClientConfig,
|
|
1
|
+
import { ai as AnalyticsBatchRequest, aj as AnalyticsBatchAccepted, a as QuranAnswers, d as QuranAudio, Q as QuranChapters, V as VerseKey, i as AnswersByAyahResponse, k as AnswerCountWithinRangeResponse, h as AnswerQuestion, C as ChapterId, l as ChapterRecitation, N as NormalizedVerseRecitation, I as Pagination, o as Chapter, p as ChapterInfo, q as ChapterInfoResponse, s as HadithReferencesByAyahResponse, x as HadithCountWithinRangeResponse, w as HadithsByAyahResponse, G as Juz, a1 as ContentSyncResourceGroup, ad as ContentResourceSnapshot, _ as ChapterInfoResource, a0 as ChapterReciterResource, Z as LanguageResource, Y as RecitationStylesResource, L as RecitationInfoResource, K as RecitationResource, X as TafsirInfoResource, U as TafsirResource, O as TranslationInfoResource, M as TranslationResource, $ as VerseMediaResource, a9 as ContentSyncOptions, ac as ContentSyncResponse, E as Verse, H as HizbNumber, J as JuzNumber, P as PageNumber, R as RubNumber, e as QuranHadithReferences, c as QuranJuzs, f as QuranResources, g as QuranSearch, S as SearchResponse, b as QuranVerses } from './verses-DTgS2dgL.mjs';
|
|
2
|
+
import { R as RawOperation, Q as QuranReflectPostsFacade } from './runtime-utils-BG7Q7TVB.mjs';
|
|
3
|
+
import { i as ServerClientConfig, O as OperationRequest, A as ApiParams, U as UserSession, l as TokenResponse, d as SearchParams } from './index-BJ5hWalX.mjs';
|
|
4
4
|
|
|
5
5
|
declare const createServerClient: (config: ServerClientConfig) => {
|
|
6
|
+
analytics: {
|
|
7
|
+
v1: {
|
|
8
|
+
events: {
|
|
9
|
+
submit: (request: AnalyticsBatchRequest) => Promise<AnalyticsBatchAccepted>;
|
|
10
|
+
};
|
|
11
|
+
raw: Record<string, (request?: OperationRequest) => Promise<unknown>>;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
submit: (request: AnalyticsBatchRequest) => Promise<AnalyticsBatchAccepted>;
|
|
15
|
+
};
|
|
16
|
+
raw: Record<string, (request?: OperationRequest) => Promise<unknown>>;
|
|
17
|
+
};
|
|
6
18
|
answers: QuranAnswers;
|
|
7
19
|
audio: QuranAudio;
|
|
8
20
|
auth: {
|
|
@@ -325,6 +337,9 @@ declare const createServerClient: (config: ServerClientConfig) => {
|
|
|
325
337
|
};
|
|
326
338
|
};
|
|
327
339
|
raw: {
|
|
340
|
+
analytics: {
|
|
341
|
+
v1: Record<string, RawOperation>;
|
|
342
|
+
};
|
|
328
343
|
auth: {
|
|
329
344
|
v1: Record<string, RawOperation>;
|
|
330
345
|
};
|
package/dist/server.d.ts
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
|
-
import { a as QuranAnswers, d as QuranAudio, Q as QuranChapters, V as VerseKey, i as AnswersByAyahResponse, k as AnswerCountWithinRangeResponse, h as AnswerQuestion, C as ChapterId, l as ChapterRecitation, N as NormalizedVerseRecitation, I as Pagination, o as Chapter, p as ChapterInfo, q as ChapterInfoResponse, s as HadithReferencesByAyahResponse, x as HadithCountWithinRangeResponse, w as HadithsByAyahResponse, G as Juz, a1 as ContentSyncResourceGroup, ad as ContentResourceSnapshot, _ as ChapterInfoResource, a0 as ChapterReciterResource, Z as LanguageResource, Y as RecitationStylesResource, L as RecitationInfoResource, K as RecitationResource, X as TafsirInfoResource, U as TafsirResource, O as TranslationInfoResource, M as TranslationResource, $ as VerseMediaResource, a9 as ContentSyncOptions, ac as ContentSyncResponse, E as Verse, H as HizbNumber, J as JuzNumber, P as PageNumber, R as RubNumber, e as QuranHadithReferences, c as QuranJuzs, f as QuranResources, g as QuranSearch, S as SearchResponse, b as QuranVerses } from './verses-
|
|
2
|
-
import { R as RawOperation, Q as QuranReflectPostsFacade } from './runtime-utils-
|
|
3
|
-
import { i as ServerClientConfig,
|
|
1
|
+
import { ai as AnalyticsBatchRequest, aj as AnalyticsBatchAccepted, a as QuranAnswers, d as QuranAudio, Q as QuranChapters, V as VerseKey, i as AnswersByAyahResponse, k as AnswerCountWithinRangeResponse, h as AnswerQuestion, C as ChapterId, l as ChapterRecitation, N as NormalizedVerseRecitation, I as Pagination, o as Chapter, p as ChapterInfo, q as ChapterInfoResponse, s as HadithReferencesByAyahResponse, x as HadithCountWithinRangeResponse, w as HadithsByAyahResponse, G as Juz, a1 as ContentSyncResourceGroup, ad as ContentResourceSnapshot, _ as ChapterInfoResource, a0 as ChapterReciterResource, Z as LanguageResource, Y as RecitationStylesResource, L as RecitationInfoResource, K as RecitationResource, X as TafsirInfoResource, U as TafsirResource, O as TranslationInfoResource, M as TranslationResource, $ as VerseMediaResource, a9 as ContentSyncOptions, ac as ContentSyncResponse, E as Verse, H as HizbNumber, J as JuzNumber, P as PageNumber, R as RubNumber, e as QuranHadithReferences, c as QuranJuzs, f as QuranResources, g as QuranSearch, S as SearchResponse, b as QuranVerses } from './verses-BHef2eGb.js';
|
|
2
|
+
import { R as RawOperation, Q as QuranReflectPostsFacade } from './runtime-utils-z2Ga9MgK.js';
|
|
3
|
+
import { i as ServerClientConfig, O as OperationRequest, A as ApiParams, U as UserSession, l as TokenResponse, d as SearchParams } from './index-BJ5hWalX.js';
|
|
4
4
|
|
|
5
5
|
declare const createServerClient: (config: ServerClientConfig) => {
|
|
6
|
+
analytics: {
|
|
7
|
+
v1: {
|
|
8
|
+
events: {
|
|
9
|
+
submit: (request: AnalyticsBatchRequest) => Promise<AnalyticsBatchAccepted>;
|
|
10
|
+
};
|
|
11
|
+
raw: Record<string, (request?: OperationRequest) => Promise<unknown>>;
|
|
12
|
+
};
|
|
13
|
+
events: {
|
|
14
|
+
submit: (request: AnalyticsBatchRequest) => Promise<AnalyticsBatchAccepted>;
|
|
15
|
+
};
|
|
16
|
+
raw: Record<string, (request?: OperationRequest) => Promise<unknown>>;
|
|
17
|
+
};
|
|
6
18
|
answers: QuranAnswers;
|
|
7
19
|
audio: QuranAudio;
|
|
8
20
|
auth: {
|
|
@@ -325,6 +337,9 @@ declare const createServerClient: (config: ServerClientConfig) => {
|
|
|
325
337
|
};
|
|
326
338
|
};
|
|
327
339
|
raw: {
|
|
340
|
+
analytics: {
|
|
341
|
+
v1: Record<string, RawOperation>;
|
|
342
|
+
};
|
|
328
343
|
auth: {
|
|
329
344
|
v1: Record<string, RawOperation>;
|
|
330
345
|
};
|