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