{"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        \"getV1ReadingBookmarks\": {\n          \"auth\": \"user\",\n          \"method\": \"get\",\n          \"path\": \"/v1/reading-bookmarks\"\n        },\n        \"postV1ReadingBookmarks\": {\n          \"auth\": \"user\",\n          \"method\": \"post\",\n          \"path\": \"/v1/reading-bookmarks\"\n        },\n        \"patchV1ReadingBookmarksBySlot\": {\n          \"auth\": \"user\",\n          \"method\": \"patch\",\n          \"path\": \"/v1/reading-bookmarks/{slot}\"\n        },\n        \"deleteV1ReadingBookmarksBySlot\": {\n          \"auth\": \"user\",\n          \"method\": \"delete\",\n          \"path\": \"/v1/reading-bookmarks/{slot}\"\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        \"generateShareVerseImage\": {\n          \"auth\": \"user\",\n          \"method\": \"post\",\n          \"path\": \"/media/share-verse\"\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        \"postsControllerSetReaction\": {\n          \"auth\": \"user\",\n          \"method\": \"post\",\n          \"path\": \"/v1/posts/{id}/reactions\"\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        \"commentsControllerHideComment\": {\n          \"auth\": \"user\",\n          \"method\": \"post\",\n          \"path\": \"/v1/comments/{id}/hide\"\n        },\n        \"commentsControllerUnhideComment\": {\n          \"auth\": \"user\",\n          \"method\": \"post\",\n          \"path\": \"/v1/comments/{id}/unhide\"\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    qiraat: serverOnlyGuard,\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"]}