{"version":3,"sources":["../src/generated/specs/operation-catalog.json","../src/generated/contracts.ts","../src/lib/http-utils.ts","../src/lib/runtime-utils.ts","../src/lib/url.ts","../src/runtime/analytics.ts","../src/runtime/app-state.ts","../src/runtime/quran-reflect-posts.ts","../src/utils/is-valid-chapter-id.ts","../src/utils/is-valid-juz.ts","../src/utils/is-valid-rub.ts","../src/utils/is-valid-hizb.ts","../src/utils/is-valid-quran-page.ts","../src/utils/verses-mapping.ts","../src/utils/is-valid-verse-key.ts","../src/sdk/answers.ts","../src/sdk/audio.ts","../src/sdk/chapters.ts","../src/lib/retry.ts","../src/sdk/http-error.ts","../src/lib/service-config.ts","../src/sdk/fetcher.ts","../src/sdk/hadith-references.ts","../src/sdk/juzs.ts","../src/sdk/qiraat.ts","../src/sdk/resources.ts","../src/sdk/search.ts","../src/sdk/verses.ts","../src/runtime/create-client.ts","../src/sdk/app-state-errors.ts","../src/runtime/app-state-state.ts","../src/runtime/app-state-reconciler.ts","../src/server.ts"],"names":["operation_catalog_default","operationCatalog","resolveCatalogOperation","section","operationName","operation","encodeBasicAuth","username","password","raw","prepareBody","request","headers","toUserSession","token","currentSession","expiresIn","accessToken","idToken","refreshToken","tokenType","scope","expiresAt","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","optionalField","toAnalyticsEventBody","event","createAnalyticsFacade","documentPath","collection","mutationHeaders","idempotencyKey","ifMatch","ifNoneMatch","snapshotPutBody","body","snapshot","freezeJson","child","createAppStateFacade","method","query","requestWithEtag","etag","status","metadata","since","isObject","isCreatePayload","createQuranReflectPostsFacade","generatedPosts","payloadOrRequest","idOrRequest","payload","isValidChapterId","id","parsedId","isValidJuz","juz","parsedJuz","isValidRub","rub","parsedRub","isValidHizb","hizb","parsedHizb","isValidQuranPage","page","parsedPage","versesMapping","isValidVerseKey","chapterId","verseId","parsedVerse","verseCount","normalizeAnswerCountWithinRangeResponse","response","verseKey","count","type","QuranAnswers","questionId","from","to","AUDIO_BASE_URL","normalizeVerseRecitations","audioFiles","file","absoluteUrl","QuranAudio","reciterId","audioFile","recitationId","data","QuranChapters","chapters","chapter","chapterInfo","retry","fn","lastError","i","error","resolve","readErrorPayload","QuranHttpErrorClass","QuranHttpError","QURAN_HTTP_ERROR_CONSTRUCTOR","constructorRegistry","API_BASE_URL","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","APP_SERVICE_SCOPES","QIRAAT_PATH_SEGMENT","QIRAAT_APP_SCOPE","QURAN_REFLECT_POSTS_PATH_PREFIX","QURAN_REFLECT_COMMENT_PATH_SUFFIXES","GATEWAY_SERVICES","USER_SESSION_EXPIRED_MESSAGE","REFRESH_TOKEN_REJECTION_ERROR","USER_SESSION_REFRESH_WINDOW_MS","readResponseBody","isRefreshTokenRejection","responseBody","formatRefreshFailureMessage","details","QuranFetcher","mode","config","doFetch","storedSession","session","service","crossServiceGatewayPath","baseUrl","usesGateway","servicePath","effectiveAuth","url","userSession","refreshedSession","json","route","auth","normalizedPath","resourceUrl","refreshPromise","clientSecret","tokenUrl","cacheKey","cachedToken","cached","pathname","suffix","services","directBaseUrl","prefix","pathService","gatewayService","QuranHadithReferences","QuranJuzs","juzs","QIRAAT_BASE_PATH","QuranQiraat","QuranResources","recitations","translations","tafsirs","languages","recitationInfo","translationInfo","tafsirInfo","chapterInfos","reciters","recitationStyles","verseMedia","resourceGroup","QuranSearch","QuranVerses","verse","verses","LEGACY_BOOKMARK_GET_MESSAGE","createUserServiceRequest","createAuthFacade","generatedGroups","collectionId","bookmarkId","noteId","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createContentFacade","answers","audio","hadithReferences","qiraat","resources","createRuntimeClient","searchClient","contentV4","analyticsV1","authV1","quranReflectV1","oauth2V1","searchQuery","search","APP_STATE_ERROR_CODES","getAppStateErrorCode","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","syncToken","pull","initial","applySuccessfulPut","acknowledgeDelete","refreshAndRebase","rebased","replayMutation","captured","rebaseAttempts","errorCode","replay","getStateFor","mutationContext","bodySnapshot","capturedContext","transport","createServerClient"],"mappings":"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ACJ,EAAA,CAAI,IACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,IACJ,EAAA,CAAI,GAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,IACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,E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","file":"server.min.mjs","sourcesContent":["{\n  \"analytics\": {\n    \"v1\": {\n      \"operations\": {\n        \"submitAnalyticsEvents\": {\n          \"auth\": \"app\",\n          \"method\": \"post\",\n          \"path\": \"/v1/events:batch\"\n        }\n      },\n      \"service\": \"analytics\",\n      \"version\": \"v1\"\n    }\n  },\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  \"content\": {\n    \"v4\": {\n      \"operations\": {\n        \"audioReciterTimestamp\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/audio/reciters/{reciter_id}/timestamp\"\n        },\n        \"audioReciterLookup\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/audio/reciters/{reciter_id}/lookup\"\n        },\n        \"listChapters\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/chapters\"\n        },\n        \"getChapter\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/chapters/{id}\"\n        },\n        \"getChapterInfo\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/chapters/{id}/info\"\n        },\n        \"hadithReferencesByAyah\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/hadith_references/by_ayah/{ayah_key}\"\n        },\n        \"hadithsByAyah\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/hadith_references/by_ayah/{ayah_key}/hadiths\"\n        },\n        \"hadithCountWithinRange\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/hadith_references/count_within_range\"\n        },\n        \"listPages\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/pages\"\n        },\n        \"getPagesLookup\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/pages/lookup\"\n        },\n        \"getPagesPageNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/pages/{page_number}\"\n        },\n        \"versesByChapterNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_chapter/{chapter_number}\"\n        },\n        \"versesByPageNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_page/{page_number}\"\n        },\n        \"versesByJuzNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_juz/{juz_number}\"\n        },\n        \"versesByHizbNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_hizb/{hizb_number}\"\n        },\n        \"versesByRubElHizbNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_rub/{rub_el_hizb_number}\"\n        },\n        \"versesByManzilNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_manzil/{manzil_number}\"\n        },\n        \"versesByRukuNumber\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_ruku/{ruku_number}\"\n        },\n        \"versesByRange\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_range\"\n        },\n        \"versesByVerseKey\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_key/{verse_key}\"\n        },\n        \"randomVerse\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/random\"\n        },\n        \"listJuzs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/juzs\"\n        },\n        \"quranVersesByScript\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/{script}\"\n        },\n        \"quranVersesIndopak\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/indopak\"\n        },\n        \"quranVersesIndopakNastaleeq\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/indopak_nastaleeq\"\n        },\n        \"quranVersesUthmaniTajweed\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/uthmani_tajweed\"\n        },\n        \"quranVersesUthmani\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/uthmani\"\n        },\n        \"quranVersesUthmaniSimple\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/uthmani_simple\"\n        },\n        \"quranVersesImlaei\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/imlaei\"\n        },\n        \"recitations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/recitations\"\n        },\n        \"recitationAudioFiles\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/recitations/{recitation_id}\"\n        },\n        \"translation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/translations/{translation_id}\"\n        },\n        \"chapterReciters\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/chapter_reciters\"\n        },\n        \"tafsir\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/tafsirs/{tafsir_id}\"\n        },\n        \"quranVersesCodeV1\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/code_v1\"\n        },\n        \"quranVersesCodeV2\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran/verses/code_v2\"\n        },\n        \"listSurahRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_chapter/{chapter_number}\"\n        },\n        \"listJuzRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_juz/{juz_number}\"\n        },\n        \"listPageRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_page/{page_number}\"\n        },\n        \"listRubElHizbRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_rub/{rub_el_hizb_number}\"\n        },\n        \"listHizbRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_hizb/{hizb_number}\"\n        },\n        \"listAyahRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_ayah/{ayah_key}\"\n        },\n        \"recitationInfo\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/recitations/{recitation_id}/info\"\n        },\n        \"translationInfo\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/translations/{translation_id}/info\"\n        },\n        \"translations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/translations\"\n        },\n        \"tafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/tafsirs\"\n        },\n        \"tafsirInfo\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/tafsirs/{tafsir_id}/info\"\n        },\n        \"recitationStyles\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/recitation_styles\"\n        },\n        \"languages\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/languages\"\n        },\n        \"chapterInfo\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/chapter_infos\"\n        },\n        \"verseMedia\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/verse_media\"\n        },\n        \"listManzilRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_manzil/{manzil_number}\"\n        },\n        \"listRukuRecitation\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_ruku/{ruku_number}\"\n        },\n        \"listSurahTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_chapter/{chapter_number}\"\n        },\n        \"listPageTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_page/{page_number}\"\n        },\n        \"listJuzTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_juz/{juz_number}\"\n        },\n        \"listRubElHizbTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_rub_el_hizb/{rub_el_hizb_number}\"\n        },\n        \"listHizbTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_hizb/{hizb_number}\"\n        },\n        \"listManzilTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_manzil/{manzil_number}\"\n        },\n        \"listRukuTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_ruku/{ruku_number}\"\n        },\n        \"listAyahTranslations\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_ayah/{ayah_key}\"\n        },\n        \"listSurahTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_chapter/{chapter_number}\"\n        },\n        \"listPageTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_page/{page_number}\"\n        },\n        \"listJuzTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_juz/{juz_number}\"\n        },\n        \"listRubElHizbTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_rub_el_hizb/{rub_el_hizb_number}\"\n        },\n        \"listHizbTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_hizb/{hizb_number}\"\n        },\n        \"listManzilTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_manzil/{manzil_number}\"\n        },\n        \"listRukuTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_ruku/{ruku_number}\"\n        },\n        \"listAyahTafsirs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_ayah/{ayah_key}\"\n        },\n        \"getJuz\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/juzs/{id}\"\n        },\n        \"listHizbs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/hizbs\"\n        },\n        \"getHizb\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/hizbs/{id}\"\n        },\n        \"listRubElHizbs\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/rub_el_hizbs\"\n        },\n        \"getRubElHizb\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/rub_el_hizbs/{id}\"\n        },\n        \"listRukus\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/rukus\"\n        },\n        \"getRuku\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/rukus/{id}\"\n        },\n        \"listManzils\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/manzils\"\n        },\n        \"getManzil\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/manzils/{id}\"\n        },\n        \"getFootNote\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/foot_notes/{id}\"\n        },\n        \"postsControllerFeed\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran-reflect/v1/posts/feed\"\n        },\n        \"postsControllerFindOne\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran-reflect/v1/posts/{id}\"\n        },\n        \"postsControllerGetUserPost\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran-reflect/v1/posts/user-posts/{id}\"\n        },\n        \"postsControllerGetComments\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran-reflect/v1/posts/{id}/comments\"\n        },\n        \"postsControllerGetAllComment\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/quran-reflect/v1/posts/{id}/all-comments\"\n        },\n        \"chapterReciterAudioFiles\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/chapter_recitations/{reciter_id}\"\n        },\n        \"chapterReciterAudioFile\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/chapter_recitations/{reciter_id}/{chapter_number}\"\n        },\n        \"versesByRubElHizbNumberRubElHizb\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/verses/by_rub_el_hizb/{rub_el_hizb_number}\"\n        },\n        \"listRubElHizbTranslationsRub\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/translations/{resource_id}/by_rub/{rub_el_hizb_number}\"\n        },\n        \"listRubElHizbTafsirsRub\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/tafsirs/{resource_id}/by_rub/{rub_el_hizb_number}\"\n        },\n        \"listRubElHizbRecitationRubElHizb\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/recitations/{recitation_id}/by_rub_el_hizb/{rub_el_hizb_number}\"\n        },\n        \"listAyahAnswers\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/answers/by_ayah/{ayah_key}\"\n        },\n        \"getAnswerById\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/answers/{question_id}\"\n        },\n        \"countAnswersWithinRange\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/answers/count_within_range\"\n        },\n        \"resourcesSync\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/sync\"\n        },\n        \"resourcesSnapshot\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/resources/snapshots/{resource_group}/{id}\"\n        }\n      },\n      \"service\": \"content\",\n      \"version\": \"v4\"\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  \"search\": {\n    \"v1\": {\n      \"operations\": {\n        \"searchControllerSearch\": {\n          \"auth\": \"app\",\n          \"method\": \"get\",\n          \"path\": \"/v1/search\"\n        }\n      },\n      \"service\": \"search\",\n      \"version\": \"v1\"\n    }\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 { 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 {\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  AnalyticsBatchAccepted,\n  AnalyticsBatchRequest,\n  AnalyticsEvent,\n  OperationRequest,\n} from \"@/types\";\n\ntype RawOperation = (request?: OperationRequest) => Promise<unknown>;\n\nconst optionalField = <T>(value: T | undefined, key: string) =>\n  value === undefined ? {} : { [key]: value };\n\nconst toAnalyticsEventBody = (event: AnalyticsEvent) => ({\n  event_id: event.eventId,\n  name: event.name,\n  occurred_at:\n    event.occurredAt instanceof Date\n      ? event.occurredAt.toISOString()\n      : event.occurredAt,\n  version: event.version,\n  ...optionalField(event.actionId, \"action_id\"),\n  ...optionalField(event.anonymousId, \"anonymous_id\"),\n  ...optionalField(event.properties, \"properties\"),\n  ...optionalField(event.sessionId, \"session_id\"),\n  ...optionalField(event.userId, \"user_id\"),\n});\n\nexport const createAnalyticsFacade = (raw: Record<string, RawOperation>) => ({\n  events: {\n    submit: (request: AnalyticsBatchRequest) =>\n      raw.submitAnalyticsEvents!({\n        body: {\n          events: request.events.map(toAnalyticsEventBody),\n        },\n      }) as Promise<AnalyticsBatchAccepted>,\n  },\n  raw,\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","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 { ChapterId } from \"../types\";\n\n/**\n * Validates chapter id\n * @param id chapter id\n * @example\n * isValidChapterId('1') // true\n * isValidChapterId('114') // true\n * isValidChapterId('0') // false\n * isValidChapterId('-1') // false\n * isValidChapterId('200') // false\n */\nexport const isValidChapterId = (id: string | number): id is ChapterId => {\n  const parsedId = typeof id === \"number\" ? id : Number(id);\n  if (!parsedId || parsedId <= 0 || parsedId > 114) return false;\n  return true;\n};\n","import type { JuzNumber } from \"../types\";\n\n/**\n * Validates juz number\n * @param juz juz number\n * @example\n * isValidJuz('1') // true\n * isValidJuz('30') // true\n * isValidJuz('0') // false\n * isValidJuz('-1') // false\n * isValidJuz('200') // false\n */\nexport const isValidJuz = (juz: string | number): juz is JuzNumber => {\n  const parsedJuz = typeof juz === \"number\" ? juz : Number(juz);\n  if (!parsedJuz || parsedJuz <= 0 || parsedJuz > 30) return false;\n  return true;\n};\n","import type { RubNumber } from \"../types\";\n\n/**\n * Validates rub number\n * @param rub rub number\n * @example\n * isValidRub('1') // true\n * isValidRub('240') // true\n * isValidRub('0') // false\n * isValidRub('-1') // false\n * isValidRub('300') // false\n */\nexport const isValidRub = (rub: string | number): rub is RubNumber => {\n  const parsedRub = typeof rub === \"number\" ? rub : Number(rub);\n  if (!parsedRub || parsedRub <= 0 || parsedRub > 240) return false;\n  return true;\n};\n","import type { HizbNumber } from \"../types\";\n\n/**\n * Validates hizb number\n * @param hizb hizb number\n * @example\n * isValidHizb('1') // true\n * isValidHizb('60') // true\n * isValidHizb('0') // false\n * isValidHizb('-1') // false\n * isValidHizb('200') // false\n */\nexport const isValidHizb = (hizb: string | number): hizb is HizbNumber => {\n  const parsedHizb = typeof hizb === \"number\" ? hizb : Number(hizb);\n  if (!parsedHizb || parsedHizb <= 0 || parsedHizb > 60) return false;\n  return true;\n};\n","import type { PageNumber } from \"../types\";\n\n/**\n * Validates mushaf page number\n * @param page mushaf page number\n * @example\n * isValidQuranPage('1') // true\n * isValidQuranPage('604') // true\n * isValidQuranPage('0') // false\n * isValidQuranPage('-1') // false\n * isValidQuranPage('1000') // false\n */\nexport const isValidQuranPage = (page: string | number): page is PageNumber => {\n  const parsedPage = typeof page === \"number\" ? page : Number(page);\n  if (!parsedPage || parsedPage <= 0 || parsedPage > 604) return false;\n  return true;\n};\n","/**\n * Maps chapter number to verse count\n */\nexport const versesMapping = {\n  1: 7,\n  2: 286,\n  3: 200,\n  4: 176,\n  5: 120,\n  6: 165,\n  7: 206,\n  8: 75,\n  9: 129,\n  10: 109,\n  11: 123,\n  12: 111,\n  13: 43,\n  14: 52,\n  15: 99,\n  16: 128,\n  17: 111,\n  18: 110,\n  19: 98,\n  20: 135,\n  21: 112,\n  22: 78,\n  23: 118,\n  24: 64,\n  25: 77,\n  26: 227,\n  27: 93,\n  28: 88,\n  29: 69,\n  30: 60,\n  31: 34,\n  32: 30,\n  33: 73,\n  34: 54,\n  35: 45,\n  36: 83,\n  37: 182,\n  38: 88,\n  39: 75,\n  40: 85,\n  41: 54,\n  42: 53,\n  43: 89,\n  44: 59,\n  45: 37,\n  46: 35,\n  47: 38,\n  48: 29,\n  49: 18,\n  50: 45,\n  51: 60,\n  52: 49,\n  53: 62,\n  54: 55,\n  55: 78,\n  56: 96,\n  57: 29,\n  58: 22,\n  59: 24,\n  60: 13,\n  61: 14,\n  62: 11,\n  63: 11,\n  64: 18,\n  65: 12,\n  66: 12,\n  67: 30,\n  68: 52,\n  69: 52,\n  70: 44,\n  71: 28,\n  72: 28,\n  73: 20,\n  74: 56,\n  75: 40,\n  76: 31,\n  77: 50,\n  78: 40,\n  79: 46,\n  80: 42,\n  81: 29,\n  82: 19,\n  83: 36,\n  84: 25,\n  85: 22,\n  86: 17,\n  87: 19,\n  88: 26,\n  89: 30,\n  90: 20,\n  91: 15,\n  92: 21,\n  93: 11,\n  94: 8,\n  95: 8,\n  96: 19,\n  97: 5,\n  98: 8,\n  99: 8,\n  100: 11,\n  101: 11,\n  102: 8,\n  103: 3,\n  104: 9,\n  105: 5,\n  106: 4,\n  107: 7,\n  108: 3,\n  109: 6,\n  110: 3,\n  111: 5,\n  112: 4,\n  113: 5,\n  114: 6,\n} as const satisfies Record<number, number>;\n","import type { ChapterId, VerseKey } from \"../types\";\nimport { isValidChapterId } from \"./is-valid-chapter-id\";\nimport { versesMapping } from \"./verses-mapping\";\n\n/**\n * Validates verse key\n * @param key colon separated verse key (chapter:verse)\n * @example\n * isValidVerseKey('1:1') // true\n * isValidVerseKey('30:1') // true\n * isValidVerseKey('0') // false\n * isValidVerseKey('1:-') // false\n * isValidVerseKey('1_1') // false\n */\nexport const isValidVerseKey = (key: string): key is VerseKey => {\n  const [chapterId, verseId] = key.trim().split(\":\");\n  if (!chapterId || !verseId || !isValidChapterId(chapterId)) return false;\n\n  const parsedVerse = Number(verseId);\n  const verseCount = versesMapping[chapterId as ChapterId];\n  if (!parsedVerse || parsedVerse <= 0 || parsedVerse > verseCount)\n    return false;\n\n  return true;\n};\n","import type {\n  AnswerCountWithinRangeResponse,\n  AnswerQuestion,\n  AnswersByAyahResponse,\n  BaseApiParams,\n  QuranFetchClient,\n  VerseKey,\n} from \"@/types\";\nimport { isValidVerseKey } from \"@/utils\";\n\ntype GetAnswersByAyahOptions = BaseApiParams & {\n  page?: number;\n  pageSize?: number;\n};\n\ntype CountAnswersWithinRangeOptions = BaseApiParams;\n\nconst normalizeAnswerCountWithinRangeResponse = (\n  response: AnswerCountWithinRangeResponse,\n): AnswerCountWithinRangeResponse => {\n  return Object.fromEntries(\n    Object.entries(response).map(([verseKey, count]) => {\n      if (!count.types) return [verseKey, count];\n\n      return [\n        verseKey,\n        {\n          ...count,\n          types: Object.fromEntries(\n            Object.entries(count.types).map(([type, value]) => [\n              type.toUpperCase(),\n              value,\n            ]),\n          ),\n        },\n      ];\n    }),\n  );\n};\n\n/**\n * Quran answers API methods.\n */\nexport class QuranAnswers {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get published answer questions linked to a specific ayah.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"2:255\")\n   * @param {GetAnswersByAyahOptions} options\n   * @example\n   * client.answers.findByAyah(\"2:255\", { page: 1, pageSize: 2 })\n   */\n  async findByAyah(\n    key: VerseKey,\n    options?: GetAnswersByAyahOptions,\n  ): Promise<AnswersByAyahResponse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    return this.fetcher.fetch<AnswersByAyahResponse>(\n      `/content/api/v4/answers/by_ayah/${key}`,\n      options,\n    );\n  }\n\n  /**\n   * Get a published answer question by id.\n   * @param {string | number} questionId question id\n   * @example\n   * client.answers.findByQuestionId(\"988\")\n   */\n  async findByQuestionId(\n    questionId: string | number,\n  ): Promise<AnswerQuestion> {\n    return this.fetcher.fetch<AnswerQuestion>(\n      `/content/api/v4/answers/${questionId}`,\n    );\n  }\n\n  /**\n   * Get a verse-key to answer-count map within an inclusive ayah range.\n   * @param {VerseKey} from start verse key in format \"chapter:verse\"\n   * @param {VerseKey} to end verse key in format \"chapter:verse\"\n   * @param {CountAnswersWithinRangeOptions} options\n   * @example\n   * client.answers.countWithinRange(\"2:255\", \"2:256\")\n   */\n  async countWithinRange(\n    from: VerseKey,\n    to: VerseKey,\n    options?: CountAnswersWithinRangeOptions,\n  ): Promise<AnswerCountWithinRangeResponse> {\n    if (!isValidVerseKey(from) || !isValidVerseKey(to)) {\n      throw new Error(\"Invalid verse key\");\n    }\n\n    const response = await this.fetcher.fetch<AnswerCountWithinRangeResponse>(\n      \"/content/api/v4/answers/count_within_range\",\n      {\n        ...options,\n        from,\n        to,\n      },\n    );\n\n    return normalizeAnswerCountWithinRangeResponse(response);\n  }\n}\n","import type {\n  BaseApiParams,\n  ChapterId,\n  ChapterRecitation,\n  NormalizedVerseRecitation,\n  Pagination,\n  QuranFetchClient,\n  VerseKey,\n  VerseRecitation,\n  VerseRecitationField,\n} from \"@/types\";\nimport { isValidChapterId, isValidVerseKey } from \"@/utils\";\n\ntype GetChapterRecitationOptions = BaseApiParams;\n\ntype GetVerseRecitationOptions = BaseApiParams & {\n  fields?: Partial<Record<VerseRecitationField, boolean>>;\n};\n\ntype RawVerseRecitation = Omit<VerseRecitation, \"audioUrl\">;\n\n/**\n * Base URL for verse audio files from Quran.com\n * Used to convert relative paths to absolute URLs\n */\nconst AUDIO_BASE_URL = \"https://verses.quran.com\";\n\n/**\n * Normalize verse recitation data by adding absolute audioUrl\n * The API returns relative paths in the 'url' field, but we want\n * to provide absolute URLs for consistency with chapter recitations\n */\nfunction normalizeVerseRecitations(\n  audioFiles: RawVerseRecitation[],\n): NormalizedVerseRecitation[] {\n  return audioFiles.map((file) => {\n    // If url is already absolute, use it; otherwise prepend the base URL\n    const absoluteUrl =\n      file.url.startsWith(\"http://\") || file.url.startsWith(\"https://\")\n        ? file.url\n        : `${AUDIO_BASE_URL}/${file.url.replace(/^\\/+/, \"\")}`;\n\n    return {\n      ...file,\n      audioUrl: absoluteUrl,\n    };\n  });\n}\n\n/**\n * Audio API methods\n */\nexport class QuranAudio {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get all chapter recitations for specific reciter\n   * @param {string} reciterId\n   * @param {GetChapterRecitationOptions} options\n   * @example\n   * client.audio.findAllChapterRecitations('2')\n   */\n  async findAllChapterRecitations(\n    reciterId: string,\n    options?: GetChapterRecitationOptions,\n  ): Promise<ChapterRecitation[]> {\n    const { audioFiles } = await this.fetcher.fetch<{\n      audioFiles: ChapterRecitation[];\n    }>(`/content/api/v4/chapter_recitations/${reciterId}`, options);\n\n    return audioFiles;\n  }\n\n  /**\n   * Get a specific chapter recitation by reciter and chapter\n   * @param {string} reciterId\n   * @param {ChapterId} chapterId\n   * @param {GetChapterRecitationOptions} options\n   * @example\n   * client.audio.findChapterRecitationById('2', '1')\n   */\n  async findChapterRecitationById(\n    reciterId: string,\n    chapterId: ChapterId,\n    options?: GetChapterRecitationOptions,\n  ): Promise<ChapterRecitation> {\n    if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n    const { audioFile } = await this.fetcher.fetch<{\n      audioFile: ChapterRecitation;\n    }>(\n      `/content/api/v4/chapter_recitations/${reciterId}/${chapterId}`,\n      options,\n    );\n\n    return audioFile;\n  }\n\n  /**\n   * Get verse recitations by chapter\n   * @param {ChapterId} chapterId\n   * @param {string} recitationId\n   * @param {GetVerseRecitationOptions} options\n   * @example\n   * client.audio.findVerseRecitationsByChapter('1', '2')\n   */\n  async findVerseRecitationsByChapter(\n    chapterId: ChapterId,\n    recitationId: string,\n    options?: GetVerseRecitationOptions,\n  ): Promise<{\n    audioFiles: NormalizedVerseRecitation[];\n    pagination: Pagination;\n  }> {\n    if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n    const data = await this.fetcher.fetch<{\n      audioFiles: RawVerseRecitation[];\n      pagination: Pagination;\n    }>(\n      `/content/api/v4/recitations/${recitationId}/by_chapter/${chapterId}`,\n      options,\n    );\n\n    return {\n      ...data,\n      audioFiles: normalizeVerseRecitations(data.audioFiles),\n    };\n  }\n\n  /**\n   * Get verse recitations by verse key\n   * @param {VerseKey} key\n   * @param {string} recitationId\n   * @param {GetVerseRecitationOptions} options\n   * @example\n   * client.audio.findVerseRecitationsByKey('1:1', '2')\n   */\n  async findVerseRecitationsByKey(\n    key: VerseKey,\n    recitationId: string,\n    options?: GetVerseRecitationOptions,\n  ): Promise<{\n    audioFiles: NormalizedVerseRecitation[];\n    pagination: Pagination;\n  }> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    const data = await this.fetcher.fetch<{\n      audioFiles: RawVerseRecitation[];\n      pagination: Pagination;\n    }>(`/content/api/v4/recitations/${recitationId}/by_ayah/${key}`, options);\n\n    return {\n      ...data,\n      audioFiles: normalizeVerseRecitations(data.audioFiles),\n    };\n  }\n}\n","import type {\n  BaseApiParams,\n  Chapter,\n  ChapterId,\n  ChapterInfo,\n  ChapterInfoResponse,\n  QuranFetchClient,\n} from \"@/types\";\nimport { isValidChapterId } from \"@/utils\";\n\ntype GetChapterOptions = BaseApiParams;\ntype GetChapterInfoOptions = BaseApiParams & {\n  resourceId?: string | number;\n  includeResources?: boolean;\n};\n\n/**\n * Chapters API methods\n */\nexport class QuranChapters {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get all chapters.\n   * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/list-chapters\n   * @param {GetChapterOptions} options\n   * @example\n   * client.chapters.findAll()\n   */\n  async findAll(options?: GetChapterOptions): Promise<Chapter[]> {\n    const { chapters } = await this.fetcher.fetch<{ chapters: Chapter[] }>(\n      \"/content/api/v4/chapters\",\n      options,\n    );\n\n    return chapters;\n  }\n\n  /**\n   * Get chapter by id.\n   * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter\n   * @param {ChapterId} id chapter id, minimum 1, maximum 114\n   * @param {GetChapterOptions} options\n   * @example\n   * client.chapters.findById('1')\n   * client.chapters.findById('114')\n   */\n  async findById(id: ChapterId, options?: GetChapterOptions): Promise<Chapter> {\n    if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n    const { chapter } = await this.fetcher.fetch<{ chapter: Chapter }>(\n      `/content/api/v4/chapters/${id}`,\n      options,\n    );\n\n    return chapter;\n  }\n\n  /**\n   * Get chapter info by id.\n   * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter-info\n   * @param {ChapterId} id chapter id, minimum 1, maximum 114\n   * @param {GetChapterInfoOptions} options\n   * @example\n   * client.chapters.findInfoById('1')\n   * client.chapters.findInfoById('114')\n   */\n  async findInfoById(\n    id: ChapterId,\n    options?: GetChapterInfoOptions,\n  ): Promise<ChapterInfo | null> {\n    const { chapterInfo } = await this.findInfoResponseById(id, options);\n\n    return chapterInfo;\n  }\n\n  /**\n   * Get the full chapter info response, including available resources when requested.\n   * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/get-chapter-info\n   * @param {ChapterId} id chapter id, minimum 1, maximum 114\n   * @param {GetChapterInfoOptions} options\n   * @example\n   * client.chapters.findInfoResponseById('1', { includeResources: true })\n   * client.chapters.findInfoResponseById('1', { resourceId: 'en-tafsir-ibn-ashur' })\n   */\n  async findInfoResponseById(\n    id: ChapterId,\n    options?: GetChapterInfoOptions,\n  ): Promise<ChapterInfoResponse> {\n    if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n    return this.fetcher.fetch<ChapterInfoResponse>(\n      `/content/api/v4/chapters/${id}/info`,\n      options,\n    );\n  }\n}\n","export const retry = async <T>(\n  fn: () => Promise<T>,\n  options: { retries: number } = { retries: 3 },\n): Promise<T> => {\n  let lastError: Error;\n\n  for (let i = 0; i <= options.retries; i++) {\n    try {\n      return await fn();\n    } catch (error) {\n      lastError = error as Error;\n      if (i === options.retries) {\n        throw lastError;\n      }\n\n      // Simple exponential backoff\n      await new Promise((resolve) =>\n        setTimeout(resolve, Math.pow(2, i) * 1000),\n      );\n    }\n  }\n\n  throw lastError!;\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 { OperationDefinition } from \"@/generated/contracts\";\nimport type {\n  ApiParams,\n  ApiService,\n  CachedToken,\n  CustomFetcher,\n  OperationRequest,\n  PublicClientConfig,\n  RuntimeMode,\n  ServerClientConfig,\n  TokenResponse,\n  UserSession,\n} from \"@/types\";\nimport { encodeBasicAuth, prepareBody, toUserSession } from \"@/lib/http-utils\";\nimport { retry } from \"@/lib/retry\";\nimport { QuranHttpError } from \"@/sdk/http-error\";\nimport {\n  API_BASE_URL,\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\ntype RuntimeClientConfig = PublicClientConfig | ServerClientConfig;\n\nconst APP_SERVICE_SCOPES: Partial<Record<ApiService, string>> = {\n  analytics: \"analytics.events.write\",\n  content: \"content\",\n  search: \"search\",\n};\nconst QIRAAT_PATH_SEGMENT = \"/api/v4/qiraat/\";\nconst QIRAAT_APP_SCOPE = \"qiraat.read\";\nconst QURAN_REFLECT_POSTS_PATH_PREFIX = \"/quran-reflect/v1/posts/\";\nconst QURAN_REFLECT_COMMENT_PATH_SUFFIXES = [\n  \"/comments\",\n  \"/all-comments\",\n] as const;\nconst GATEWAY_SERVICES = [\n  \"analytics\",\n  \"auth\",\n  \"content\",\n  \"quranReflect\",\n  \"search\",\n] as const satisfies readonly ApiService[];\n\nconst USER_SESSION_EXPIRED_MESSAGE = \"User session expired. Sign in again.\";\nconst REFRESH_TOKEN_REJECTION_ERROR = \"invalid_grant\";\nconst USER_SESSION_REFRESH_WINDOW_MS = 60_000;\n\nconst readResponseBody = async (response: Response): Promise<string> => {\n  try {\n    return await response.text();\n  } catch {\n    return \"\";\n  }\n};\n\nconst isRefreshTokenRejection = (\n  response: Response,\n  responseBody: string,\n): boolean => {\n  if (\n    response.status < 400 ||\n    response.status >= 500 ||\n    response.status === 429\n  ) {\n    return false;\n  }\n\n  return responseBody.toLowerCase().includes(REFRESH_TOKEN_REJECTION_ERROR);\n};\n\nconst formatRefreshFailureMessage = (\n  response: Response,\n  responseBody: string,\n): string => {\n  const body = responseBody.trim();\n  const details = body ? `: ${body}` : \"\";\n\n  return `Token refresh failed: ${response.status} ${response.statusText}${details}`;\n};\n\nexport class QuranFetcher {\n  private appTokens = new Map<string, CachedToken>();\n  private userSession: UserSession | null | undefined;\n  private userSessionRefreshPromise: Promise<UserSession> | null = null;\n\n  constructor(\n    private readonly mode: RuntimeMode,\n    private readonly config: RuntimeClientConfig,\n  ) {\n    this.userSession = config.userSession;\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 clearCachedTokens(): void {\n    this.appTokens.clear();\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: ApiService,\n    path: string,\n    query?: ApiParams,\n  ): string {\n    const crossServiceGatewayPath = this.isCrossServiceGatewayPath(\n      service,\n      path,\n    );\n    const { baseUrl, usesGateway } = this.resolveServiceBaseUrl(\n      service,\n      crossServiceGatewayPath,\n    );\n    const servicePath = this.normalizeServicePath(\n      service,\n      path,\n      usesGateway,\n      crossServiceGatewayPath,\n    );\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: ApiService,\n    path: string,\n    query?: ApiParams,\n    request: OperationRequest = {},\n  ): Promise<T> {\n    const effectiveAuth = this.resolveAuthMode(service, request.auth);\n\n    if (this.mode === \"public\" && effectiveAuth === \"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    const url = this.buildServiceUrl(service, path, query);\n    const userSession = await this.getRequestUserSession(\n      effectiveAuth,\n      request,\n    );\n    let response = await this.performRequest(\n      service,\n      url,\n      request,\n      effectiveAuth,\n      userSession?.accessToken,\n    );\n\n    if (\n      this.shouldRetryUserRequest(response, effectiveAuth, request, userSession)\n    ) {\n      const refreshedSession = await this.refreshStoredUserSession();\n      response = await this.performRequest(\n        service,\n        url,\n        request,\n        effectiveAuth,\n        refreshedSession.accessToken,\n      );\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  public async fetch<T = unknown>(url: string, params?: ApiParams): Promise<T> {\n    const route = this.resolveLegacyRoute(url);\n    return this.request<T>(route.service, route.path, {\n      ...this.config.defaults,\n      ...params,\n    });\n  }\n\n  private async performRequest(\n    service: ApiService,\n    url: string,\n    request: OperationRequest,\n    auth: \"app\" | \"none\" | \"user\",\n    accessToken?: string,\n  ): Promise<Response> {\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      auth,\n      headers,\n      {\n        ...request,\n        accessToken: accessToken ?? request.accessToken,\n      },\n      url,\n    );\n\n    return this.getFetch()(url, {\n      body,\n      headers,\n      method: request.method ?? \"GET\",\n    });\n  }\n\n  private resolveLegacyRoute(url: string): {\n    path: string;\n    service: ApiService;\n  } {\n    const normalizedPath = ensureLeadingSlash(normalizePathTemplate(url));\n\n    if (\n      normalizedPath.startsWith(\"/content/api/v4\") ||\n      normalizedPath.startsWith(\"/api/v4\")\n    ) {\n      return {\n        path: normalizedPath,\n        service: \"content\",\n      };\n    }\n\n    if (\n      normalizedPath === \"/v1/search\" ||\n      normalizedPath.startsWith(\"/search/v1\")\n    ) {\n      return {\n        path: normalizedPath,\n        service: \"search\",\n      };\n    }\n\n    if (normalizedPath.startsWith(\"/auth/v1\")) {\n      return {\n        path: normalizedPath,\n        service: \"auth\",\n      };\n    }\n\n    if (normalizedPath.startsWith(\"/quran-reflect/v1\")) {\n      return {\n        path: normalizedPath,\n        service: \"quranReflect\",\n      };\n    }\n\n    if (\n      normalizedPath.startsWith(\"/oauth2\") ||\n      normalizedPath.startsWith(\"/userinfo\")\n    ) {\n      return {\n        path: normalizedPath,\n        service: \"oauth2\",\n      };\n    }\n\n    throw new Error(`Unsupported SDK route: ${url}`);\n  }\n\n  private resolveAuthMode(\n    service: ApiService,\n    auth: OperationRequest[\"auth\"] = \"auto\",\n  ): \"app\" | \"none\" | \"user\" {\n    if (auth !== \"auto\") {\n      return auth;\n    }\n\n    if (service === \"content\" || service === \"search\") {\n      return \"app\";\n    }\n\n    if (service === \"auth\" || service === \"quranReflect\") {\n      return \"user\";\n    }\n\n    return \"none\";\n  }\n\n  private async getRequestUserSession(\n    auth: \"app\" | \"none\" | \"user\",\n    request: OperationRequest,\n  ): Promise<UserSession | null> {\n    if (auth !== \"user\" || request.accessToken || this.mode !== \"server\") {\n      return null;\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    if (!this.shouldRefreshUserSession(session)) {\n      return session;\n    }\n\n    return this.refreshStoredUserSession(session);\n  }\n\n  private shouldRefreshUserSession(session: UserSession): boolean {\n    if (!session.refreshToken || !session.expiresAt) {\n      return false;\n    }\n\n    return session.expiresAt <= Date.now() + USER_SESSION_REFRESH_WINDOW_MS;\n  }\n\n  private shouldRetryUserRequest(\n    response: Response,\n    auth: \"app\" | \"none\" | \"user\",\n    request: OperationRequest,\n    session: UserSession | null,\n  ): boolean {\n    if (response.status !== 401) {\n      return false;\n    }\n\n    if (auth !== \"user\" || request.accessToken || this.mode !== \"server\") {\n      return false;\n    }\n\n    return Boolean(session?.refreshToken);\n  }\n\n  private async applyAuthenticationHeaders(\n    service: ApiService,\n    auth: \"app\" | \"none\" | \"user\",\n    headers: Headers,\n    request: OperationRequest,\n    resourceUrl?: string,\n  ): Promise<void> {\n    if (request.basicAuth) {\n      headers.set(\n        \"Authorization\",\n        `Basic ${encodeBasicAuth(\n          request.basicAuth.username,\n          request.basicAuth.password,\n        )}`,\n      );\n    }\n\n    if (request.accessToken) {\n      this.setTokenHeaders(service, headers, request.accessToken);\n      return;\n    }\n\n    if (auth === \"none\") {\n      return;\n    }\n\n    if (auth === \"app\") {\n      const token = await this.getAppAccessToken(service, resourceUrl);\n      this.setTokenHeaders(service, headers, token);\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 async refreshStoredUserSession(\n    currentSession?: UserSession | null,\n  ): Promise<UserSession> {\n    if (this.userSessionRefreshPromise) {\n      return this.userSessionRefreshPromise;\n    }\n\n    const refreshPromise = this.executeUserSessionRefresh(currentSession);\n    this.userSessionRefreshPromise = refreshPromise;\n\n    try {\n      return await refreshPromise;\n    } finally {\n      if (this.userSessionRefreshPromise === refreshPromise) {\n        this.userSessionRefreshPromise = null;\n      }\n    }\n  }\n\n  private async executeUserSessionRefresh(\n    currentSession?: UserSession | null,\n  ): Promise<UserSession> {\n    if (this.mode !== \"server\" || !(\"clientSecret\" in this.config)) {\n      throw new Error(\n        \"Automatic session refresh requires @quranjs/api/server or a backend.\",\n      );\n    }\n\n    const clientSecret = this.config.clientSecret;\n\n    const session = currentSession ?? (await this.getUserSession());\n    if (!session?.refreshToken) {\n      throw new Error(USER_SESSION_EXPIRED_MESSAGE);\n    }\n\n    const tokenUrl = `${removeTrailingSlash(\n      this.config.services?.tokenHost ??\n        this.config.services?.oauth2BaseUrl ??\n        DEFAULT_BASE_URLS.oauth2,\n    )}/oauth2/token`;\n\n    const body = new URLSearchParams({\n      grant_type: \"refresh_token\",\n      refresh_token: session.refreshToken,\n    });\n\n    const response = await retry(\n      () =>\n        this.getFetch()(tokenUrl, {\n          body,\n          headers: {\n            Accept: \"application/json\",\n            Authorization: `Basic ${encodeBasicAuth(\n              this.config.clientId,\n              clientSecret,\n            )}`,\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n          },\n          method: \"POST\",\n        }),\n      { retries: 3 },\n    );\n\n    if (!response.ok) {\n      const responseBody = await readResponseBody(response);\n      if (isRefreshTokenRejection(response, responseBody)) {\n        await this.setUserSession(null);\n        throw new Error(USER_SESSION_EXPIRED_MESSAGE);\n      }\n\n      throw new Error(formatRefreshFailureMessage(response, responseBody));\n    }\n\n    const token = (await response.json()) as TokenResponse;\n    const refreshedSession = toUserSession(token, session);\n    await this.setUserSession(refreshedSession);\n\n    return refreshedSession;\n  }\n\n  private setTokenHeaders(\n    service: ApiService,\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 async getAppAccessToken(\n    service: ApiService,\n    resourceUrl?: string,\n  ): Promise<string> {\n    if (this.mode !== \"server\") {\n      throw new Error(\n        \"App-authenticated APIs require @quranjs/api/server or a backend.\",\n      );\n    }\n\n    const scope = this.resolveAppScope(service, resourceUrl);\n    if (!scope) {\n      throw new Error(\n        `No client-credentials scope is configured for ${service}.`,\n      );\n    }\n\n    const cacheKey = `${service}:${scope}`;\n    const cachedToken = this.appTokens.get(cacheKey);\n\n    if (cachedToken && cachedToken.expiresAt > Date.now() + 30_000) {\n      return cachedToken.value;\n    }\n\n    if (!(\"clientSecret\" in this.config)) {\n      throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n    }\n\n    const clientSecret = this.config.clientSecret;\n\n    const tokenUrl = `${removeTrailingSlash(\n      this.config.services?.tokenHost ??\n        this.config.services?.oauth2BaseUrl ??\n        DEFAULT_BASE_URLS.oauth2,\n    )}/oauth2/token`;\n\n    const body = new URLSearchParams({\n      grant_type: \"client_credentials\",\n      scope,\n    });\n\n    const response = await retry(\n      () =>\n        this.getFetch()(tokenUrl, {\n          body,\n          headers: {\n            Accept: \"application/json\",\n            Authorization: `Basic ${encodeBasicAuth(\n              this.config.clientId,\n              clientSecret,\n            )}`,\n            \"Content-Type\": \"application/x-www-form-urlencoded\",\n          },\n          method: \"POST\",\n        }),\n      { retries: 3 },\n    );\n\n    if (!response.ok) {\n      throw new Error(\n        `Token request failed: ${response.status} ${response.statusText}`,\n      );\n    }\n\n    const json = (await response.json()) as TokenResponse;\n    const cached = {\n      expiresAt: Date.now() + json.expires_in * 1000,\n      value: json.access_token,\n    };\n\n    this.appTokens.set(cacheKey, cached);\n    return cached.value;\n  }\n\n  private resolveAppScope(\n    service: ApiService,\n    resourceUrl?: string,\n  ): string | undefined {\n    if (service !== \"content\" || !resourceUrl) {\n      return APP_SERVICE_SCOPES[service];\n    }\n\n    const pathname = new URL(resourceUrl).pathname;\n    if (pathname.includes(QIRAAT_PATH_SEGMENT)) {\n      return QIRAAT_APP_SCOPE;\n    }\n\n    if (!pathname.startsWith(QURAN_REFLECT_POSTS_PATH_PREFIX)) {\n      return APP_SERVICE_SCOPES.content;\n    }\n\n    if (\n      QURAN_REFLECT_COMMENT_PATH_SUFFIXES.some((suffix) =>\n        pathname.endsWith(suffix),\n      )\n    ) {\n      return \"comment.read\";\n    }\n\n    return \"post.read\";\n  }\n\n  private resolveServiceBaseUrl(\n    service: ApiService,\n    crossServiceGatewayPath = false,\n  ): {\n    baseUrl: string;\n    usesGateway: boolean;\n  } {\n    const { services } = this.config;\n    if (crossServiceGatewayPath) {\n      return {\n        baseUrl: removeTrailingSlash(services?.gatewayUrl ?? API_BASE_URL),\n        usesGateway: true,\n      };\n    }\n\n    const directBaseUrl =\n      service === \"analytics\"\n        ? services?.analyticsBaseUrl\n        : service === \"content\"\n          ? services?.contentBaseUrl\n          : service === \"search\"\n            ? services?.searchBaseUrl\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: ApiService,\n    path: string,\n    usesGateway: boolean,\n    crossServiceGatewayPath = false,\n  ): string {\n    const normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n    if (service === \"oauth2\") {\n      return normalizedPath;\n    }\n\n    if (crossServiceGatewayPath) {\n      return normalizedPath;\n    }\n\n    let servicePath = normalizedPath;\n    for (const prefix of LEGACY_PREFIXES[service]) {\n      if (servicePath.startsWith(prefix)) {\n        servicePath = ensureLeadingSlash(servicePath.slice(prefix.length));\n        break;\n      }\n    }\n\n    const prefix = usesGateway\n      ? GATEWAY_PATH_PREFIX[service]\n      : DIRECT_PATH_PREFIX[service];\n\n    if (servicePath.startsWith(prefix)) {\n      return servicePath;\n    }\n\n    return `${prefix}${servicePath}`;\n  }\n\n  private isCrossServiceGatewayPath(\n    service: ApiService,\n    path: string,\n  ): boolean {\n    const normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n    const pathService = GATEWAY_SERVICES.find((gatewayService) =>\n      this.pathMatchesPrefix(\n        normalizedPath,\n        GATEWAY_PATH_PREFIX[gatewayService],\n      ),\n    );\n\n    return Boolean(pathService && pathService !== service);\n  }\n\n  private pathMatchesPrefix(path: string, prefix: string): boolean {\n    return (\n      prefix.length > 0 && (path === prefix || path.startsWith(`${prefix}/`))\n    );\n  }\n}\n","import type {\n  BaseApiParams,\n  HadithCountWithinRangeResponse,\n  HadithReferencesByAyahResponse,\n  HadithsByAyahResponse,\n  QuranFetchClient,\n  VerseKey,\n} from \"@/types\";\nimport { isValidVerseKey } from \"@/utils\";\n\ntype GetHadithReferenceOptions = BaseApiParams;\n\ntype GetHadithsByAyahOptions = BaseApiParams & {\n  page?: number;\n  limit?: number;\n};\n\ntype CountHadithsWithinRangeOptions = BaseApiParams;\n\n/**\n * Hadith reference API methods.\n */\nexport class QuranHadithReferences {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get ordered hadith reference records linked to a specific ayah.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"12:12\")\n   * @param {GetHadithReferenceOptions} options\n   * @example\n   * client.hadithReferences.findByAyah(\"12:12\")\n   */\n  async findByAyah(\n    key: VerseKey,\n    options?: GetHadithReferenceOptions,\n  ): Promise<HadithReferencesByAyahResponse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    return this.fetcher.fetch<HadithReferencesByAyahResponse>(\n      `/content/api/v4/hadith_references/by_ayah/${key}`,\n      options,\n    );\n  }\n\n  /**\n   * Get paginated hadith payloads linked to a specific ayah.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"12:12\")\n   * @param {GetHadithsByAyahOptions} options\n   * @example\n   * client.hadithReferences.findHadithsByAyah(\"12:12\", { limit: 4 })\n   */\n  async findHadithsByAyah(\n    key: VerseKey,\n    options?: GetHadithsByAyahOptions,\n  ): Promise<HadithsByAyahResponse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    return this.fetcher.fetch<HadithsByAyahResponse>(\n      `/content/api/v4/hadith_references/by_ayah/${key}/hadiths`,\n      options,\n    );\n  }\n\n  /**\n   * Get a verse-key to hadith-count map within an inclusive ayah range.\n   * @param {VerseKey} from start verse key in format \"chapter:verse\"\n   * @param {VerseKey} to end verse key in format \"chapter:verse\"\n   * @param {CountHadithsWithinRangeOptions} options\n   * @example\n   * client.hadithReferences.countWithinRange(\"12:12\", \"12:13\")\n   */\n  async countWithinRange(\n    from: VerseKey,\n    to: VerseKey,\n    options?: CountHadithsWithinRangeOptions,\n  ): Promise<HadithCountWithinRangeResponse> {\n    if (!isValidVerseKey(from) || !isValidVerseKey(to)) {\n      throw new Error(\"Invalid verse key\");\n    }\n\n    return this.fetcher.fetch<HadithCountWithinRangeResponse>(\n      \"/content/api/v4/hadith_references/count_within_range\",\n      {\n        ...options,\n        from,\n        to,\n      },\n    );\n  }\n}\n","import type { Juz, QuranFetchClient } from \"@/types\";\n\n/**\n * Juzs API methods\n */\nexport class QuranJuzs {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get All Juzs\n   * @description https://api-docs.quran.com/docs/quran.com_versioned/4.0.0/juzs\n   * @example\n   * client.juzs.findAll()\n   */\n  async findAll(): Promise<Juz[]> {\n    const { juzs } = await this.fetcher.fetch<{ juzs: Juz[] }>(\n      \"/content/api/v4/juzs\",\n    );\n    return juzs;\n  }\n}\n","import type {\n  BaseApiParams,\n  ChapterId,\n  QiraatJunctureInclude,\n  QiraatJunctureResponse,\n  QiraatJuncturesByChapterResponse,\n  QiraatJuncturesByVerseResponse,\n  QiraatMatrixByChapterResponse,\n  QiraatMatrixByVerseResponse,\n  QiraatMatrixCountWithinRangeResponse,\n  QiraatMatrixTextField,\n  QiraatReaderInclude,\n  QiraatReaderResponse,\n  QiraatReadersResponse,\n  QiraatReadingResponse,\n  QiraatTransmitterResponse,\n  QiraatTransmittersResponse,\n  QuranFetchClient,\n  VerseKey,\n} from \"@/types\";\nimport { isValidChapterId, isValidVerseKey } from \"@/utils\";\n\ntype GetQiraatReadersOptions = BaseApiParams & {\n  include?: QiraatReaderInclude | QiraatReaderInclude[];\n};\n\ntype GetQiraatReaderOptions = BaseApiParams;\n\ntype GetQiraatTransmittersOptions = BaseApiParams & {\n  readerId?: number | string;\n};\n\ntype GetQiraatTransmitterOptions = BaseApiParams;\n\ntype GetQiraatJuncturesByVerseOptions = BaseApiParams & {\n  category?: string;\n  include?: QiraatJunctureInclude | QiraatJunctureInclude[];\n};\n\ntype GetQiraatJuncturesByChapterOptions = BaseApiParams & {\n  category?: string;\n  page?: number;\n  perPage?: number;\n};\n\ntype GetQiraatJunctureOptions = BaseApiParams;\n\ntype GetQiraatReadingOptions = BaseApiParams;\n\ntype GetQiraatMatrixByVerseOptions = BaseApiParams & {\n  textField?: QiraatMatrixTextField | \"uthmani\" | \"imlaei\" | \"qpc_hafs\";\n};\n\ntype GetQiraatMatrixByChapterOptions = GetQiraatMatrixByVerseOptions & {\n  page?: number;\n  perPage?: number;\n};\n\ntype CountQiraatMatrixWithinRangeOptions = BaseApiParams;\n\nconst QIRAAT_BASE_PATH = \"/content/api/v4/qiraat\";\n\n/**\n * Qira'at (variant recitations) API methods.\n *\n * These endpoints require the `qiraat.read` (or `qiraat`) OAuth scope.\n */\nexport class QuranQiraat {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get all Qira'at readers.\n   * @param {GetQiraatReadersOptions} options\n   * @example\n   * client.qiraat.findAllReaders({ include: [\"transmitters\"] })\n   */\n  async findAllReaders(\n    options?: GetQiraatReadersOptions,\n  ): Promise<QiraatReadersResponse> {\n    return this.fetcher.fetch<QiraatReadersResponse>(\n      `${QIRAAT_BASE_PATH}/readers`,\n      options,\n    );\n  }\n\n  /**\n   * Get a Qira'at reader by id.\n   * @param {string | number} id reader id\n   * @param {GetQiraatReaderOptions} options\n   * @example\n   * client.qiraat.findReaderById(1)\n   */\n  async findReaderById(\n    id: string | number,\n    options?: GetQiraatReaderOptions,\n  ): Promise<QiraatReaderResponse> {\n    return this.fetcher.fetch<QiraatReaderResponse>(\n      `${QIRAAT_BASE_PATH}/readers/${id}`,\n      options,\n    );\n  }\n\n  /**\n   * Get all Qira'at transmitters, optionally filtered by reader.\n   * @param {GetQiraatTransmittersOptions} options\n   * @example\n   * client.qiraat.findAllTransmitters({ readerId: 1 })\n   */\n  async findAllTransmitters(\n    options?: GetQiraatTransmittersOptions,\n  ): Promise<QiraatTransmittersResponse> {\n    return this.fetcher.fetch<QiraatTransmittersResponse>(\n      `${QIRAAT_BASE_PATH}/transmitters`,\n      options,\n    );\n  }\n\n  /**\n   * Get a Qira'at transmitter by id.\n   * @param {string | number} id transmitter id\n   * @param {GetQiraatTransmitterOptions} options\n   * @example\n   * client.qiraat.findTransmitterById(1)\n   */\n  async findTransmitterById(\n    id: string | number,\n    options?: GetQiraatTransmitterOptions,\n  ): Promise<QiraatTransmitterResponse> {\n    return this.fetcher.fetch<QiraatTransmitterResponse>(\n      `${QIRAAT_BASE_PATH}/transmitters/${id}`,\n      options,\n    );\n  }\n\n  /**\n   * Get the approved junctures (points of variation) in a specific ayah.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"1:4\")\n   * @param {GetQiraatJuncturesByVerseOptions} options\n   * @example\n   * client.qiraat.findJuncturesByVerse(\"1:4\", { include: [\"readings\"] })\n   */\n  async findJuncturesByVerse(\n    key: VerseKey,\n    options?: GetQiraatJuncturesByVerseOptions,\n  ): Promise<QiraatJuncturesByVerseResponse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    return this.fetcher.fetch<QiraatJuncturesByVerseResponse>(\n      `${QIRAAT_BASE_PATH}/junctures/by_verse/${key}`,\n      options,\n    );\n  }\n\n  /**\n   * Get the approved junctures in a chapter (paginated).\n   * @param {ChapterId} chapterId chapter number (1-114)\n   * @param {GetQiraatJuncturesByChapterOptions} options\n   * @example\n   * client.qiraat.findJuncturesByChapter(1, { page: 1, perPage: 20 })\n   */\n  async findJuncturesByChapter(\n    chapterId: ChapterId,\n    options?: GetQiraatJuncturesByChapterOptions,\n  ): Promise<QiraatJuncturesByChapterResponse> {\n    if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n    return this.fetcher.fetch<QiraatJuncturesByChapterResponse>(\n      `${QIRAAT_BASE_PATH}/junctures/by_chapter/${chapterId}`,\n      options,\n    );\n  }\n\n  /**\n   * Get a juncture with its readings by id.\n   * @param {string | number} id juncture id\n   * @param {GetQiraatJunctureOptions} options\n   * @example\n   * client.qiraat.findJunctureById(1)\n   */\n  async findJunctureById(\n    id: string | number,\n    options?: GetQiraatJunctureOptions,\n  ): Promise<QiraatJunctureResponse> {\n    return this.fetcher.fetch<QiraatJunctureResponse>(\n      `${QIRAAT_BASE_PATH}/junctures/${id}`,\n      options,\n    );\n  }\n\n  /**\n   * Get a reading and its reader/transmitter attributions by id.\n   * @param {string | number} id reading id\n   * @param {GetQiraatReadingOptions} options\n   * @example\n   * client.qiraat.findReadingById(1)\n   */\n  async findReadingById(\n    id: string | number,\n    options?: GetQiraatReadingOptions,\n  ): Promise<QiraatReadingResponse> {\n    return this.fetcher.fetch<QiraatReadingResponse>(\n      `${QIRAAT_BASE_PATH}/readings/${id}`,\n      options,\n    );\n  }\n\n  /**\n   * Get the Qira'at matrix for an ayah. The API responds with 404 when the\n   * ayah has no recorded variations.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"1:4\")\n   * @param {GetQiraatMatrixByVerseOptions} options\n   * @example\n   * client.qiraat.findMatrixByVerse(\"1:4\", { textField: \"text_imlaei\" })\n   */\n  async findMatrixByVerse(\n    key: VerseKey,\n    options?: GetQiraatMatrixByVerseOptions,\n  ): Promise<QiraatMatrixByVerseResponse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    return this.fetcher.fetch<QiraatMatrixByVerseResponse>(\n      `${QIRAAT_BASE_PATH}/matrix/by_verse/${key}`,\n      options,\n    );\n  }\n\n  /**\n   * Get the Qira'at matrix for a chapter (paginated).\n   * @param {ChapterId} chapterId chapter number (1-114)\n   * @param {GetQiraatMatrixByChapterOptions} options\n   * @example\n   * client.qiraat.findMatrixByChapter(1, { page: 1, perPage: 20 })\n   */\n  async findMatrixByChapter(\n    chapterId: ChapterId,\n    options?: GetQiraatMatrixByChapterOptions,\n  ): Promise<QiraatMatrixByChapterResponse> {\n    if (!isValidChapterId(chapterId)) throw new Error(\"Invalid chapter id\");\n\n    return this.fetcher.fetch<QiraatMatrixByChapterResponse>(\n      `${QIRAAT_BASE_PATH}/matrix/by_chapter/${chapterId}`,\n      options,\n    );\n  }\n\n  /**\n   * Get a verse-key to juncture-count map within an inclusive ayah range.\n   * @param {VerseKey} from start verse key in format \"chapter:verse\"\n   * @param {VerseKey} to end verse key in format \"chapter:verse\"\n   * @param {CountQiraatMatrixWithinRangeOptions} options\n   * @example\n   * client.qiraat.countMatrixWithinRange(\"1:1\", \"2:10\")\n   */\n  async countMatrixWithinRange(\n    from: VerseKey,\n    to: VerseKey,\n    options?: CountQiraatMatrixWithinRangeOptions,\n  ): Promise<QiraatMatrixCountWithinRangeResponse> {\n    if (!isValidVerseKey(from) || !isValidVerseKey(to)) {\n      throw new Error(\"Invalid verse key\");\n    }\n\n    return this.fetcher.fetch<QiraatMatrixCountWithinRangeResponse>(\n      `${QIRAAT_BASE_PATH}/matrix/count_within_range`,\n      {\n        ...options,\n        from,\n        to,\n      },\n    );\n  }\n}\n","import type {\n  BaseApiParams,\n  ChapterInfoResource,\n  ChapterReciterResource,\n  ContentResourceSnapshot,\n  ContentResourceSnapshotOptions,\n  ContentSyncOptions,\n  ContentSyncResourceGroup,\n  ContentSyncResponse,\n  LanguageResource,\n  QuranFetchClient,\n  RecitationInfoResource,\n  RecitationResource,\n  RecitationStylesResource,\n  TafsirInfoResource,\n  TafsirResource,\n  TranslationInfoResource,\n  TranslationResource,\n  VerseMediaResource,\n} from \"@/types\";\n\ntype GetResourceOptions = BaseApiParams;\n\n/**\n * Resources API methods\n */\nexport class QuranResources {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get all recitations.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllRecitations()\n   */\n  async findAllRecitations(\n    options?: GetResourceOptions,\n  ): Promise<RecitationResource[]> {\n    const { recitations } = await this.fetcher.fetch<{\n      recitations: RecitationResource[];\n    }>(\"/content/api/v4/resources/recitations\", options);\n\n    return recitations;\n  }\n\n  /**\n   * Get all translations.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllTranslations()\n   */\n  async findAllTranslations(\n    options?: GetResourceOptions,\n  ): Promise<TranslationResource[]> {\n    const { translations } = await this.fetcher.fetch<{\n      translations: TranslationResource[];\n    }>(\"/content/api/v4/resources/translations\", options);\n\n    return translations;\n  }\n\n  /**\n   * Get all tafsirs.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllTafsirs()\n   */\n  async findAllTafsirs(\n    options?: GetResourceOptions,\n  ): Promise<TafsirResource[]> {\n    const { tafsirs } = await this.fetcher.fetch<{\n      tafsirs: TafsirResource[];\n    }>(\"/content/api/v4/resources/tafsirs\", options);\n\n    return tafsirs;\n  }\n\n  /**\n   * Get all languages.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllLanguages()\n   */\n  async findAllLanguages(\n    options?: GetResourceOptions,\n  ): Promise<LanguageResource[]> {\n    const { languages } = await this.fetcher.fetch<{\n      languages: LanguageResource[];\n    }>(\"/content/api/v4/resources/languages\", options);\n\n    return languages;\n  }\n\n  /**\n   * Get recitation info by id.\n   * @param {string} id recitation id\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findRecitationInfo('1')\n   */\n  async findRecitationInfo(\n    id: string,\n    options?: GetResourceOptions,\n  ): Promise<RecitationInfoResource> {\n    const { recitationInfo } = await this.fetcher.fetch<{\n      recitationInfo: RecitationInfoResource;\n    }>(`/content/api/v4/resources/recitations/${id}/info`, options);\n\n    return recitationInfo;\n  }\n\n  /**\n   * Get translation info by id.\n   * @param {string} id translation id\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findTranslationInfo('131')\n   */\n  async findTranslationInfo(\n    id: string,\n    options?: GetResourceOptions,\n  ): Promise<TranslationInfoResource> {\n    const { translationInfo } = await this.fetcher.fetch<{\n      translationInfo: TranslationInfoResource;\n    }>(`/content/api/v4/resources/translations/${id}/info`, options);\n\n    return translationInfo;\n  }\n\n  /**\n   * Get tafsir info by id.\n   * @param {string} id tafsir id\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findTafsirInfo('171')\n   */\n  async findTafsirInfo(\n    id: string,\n    options?: GetResourceOptions,\n  ): Promise<TafsirInfoResource> {\n    const { tafsirInfo } = await this.fetcher.fetch<{\n      tafsirInfo: TafsirInfoResource;\n    }>(`/content/api/v4/resources/tafsirs/${id}/info`, options);\n\n    return tafsirInfo;\n  }\n\n  /**\n   * Get all chapter infos.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllChapterInfos()\n   */\n  async findAllChapterInfos(\n    options?: GetResourceOptions,\n  ): Promise<ChapterInfoResource[]> {\n    const { chapterInfos } = await this.fetcher.fetch<{\n      chapterInfos: ChapterInfoResource[];\n    }>(\"/content/api/v4/resources/chapter_infos\", options);\n\n    return chapterInfos;\n  }\n\n  /**\n   * Get all chapter reciters.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllChapterReciters()\n   */\n  async findAllChapterReciters(\n    options?: GetResourceOptions,\n  ): Promise<ChapterReciterResource[]> {\n    const { reciters } = await this.fetcher.fetch<{\n      reciters: ChapterReciterResource[];\n    }>(\"/content/api/v4/resources/chapter_reciters\", options);\n\n    return reciters;\n  }\n\n  /**\n   * Get all recitation styles.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findAllRecitationStyles()\n   */\n  async findAllRecitationStyles(\n    options?: GetResourceOptions,\n  ): Promise<RecitationStylesResource> {\n    const { recitationStyles } = await this.fetcher.fetch<{\n      recitationStyles: RecitationStylesResource;\n    }>(\"/content/api/v4/resources/recitation_styles\", options);\n\n    return recitationStyles;\n  }\n\n  /**\n   * Get verse media.\n   * @param {GetResourceOptions} options\n   * @example\n   * client.resources.findVerseMedia()\n   */\n  async findVerseMedia(\n    options?: GetResourceOptions,\n  ): Promise<VerseMediaResource> {\n    const { verseMedia } = await this.fetcher.fetch<{\n      verseMedia: VerseMediaResource;\n    }>(\"/content/api/v4/resources/verse_media\", options);\n\n    return verseMedia;\n  }\n\n  /**\n   * Bootstrap or incrementally sync public content resources.\n   * @param {ContentSyncOptions} options\n   * @example\n   * client.resources.sync({\n   *   bootstrap: true,\n   *   resources: \"mushafs:1;translations:19;word_by_word_transliterations:60\"\n   * })\n   */\n  async sync<TData extends Record<string, unknown> = Record<string, unknown>>(\n    options?: ContentSyncOptions,\n  ): Promise<ContentSyncResponse<TData>> {\n    return this.fetcher.fetch<ContentSyncResponse<TData>>(\n      \"/content/api/v4/resources/sync\",\n      options,\n    );\n  }\n\n  /**\n   * Fetch the current full snapshot for a syncable public content resource.\n   * @param {ContentSyncResourceGroup} resourceGroup\n   * @param {string | number} id\n   * @param {ContentResourceSnapshotOptions} options\n   * @example\n   * client.resources.findSnapshot(\"word_by_word_transliterations\", 60)\n   */\n  async findSnapshot<\n    TRecord extends Record<string, unknown> = Record<string, unknown>,\n  >(\n    resourceGroup: ContentSyncResourceGroup,\n    id: string | number,\n    options?: ContentResourceSnapshotOptions,\n  ): Promise<ContentResourceSnapshot<TRecord>> {\n    return this.fetcher.fetch<ContentResourceSnapshot<TRecord>>(\n      `/content/api/v4/resources/snapshots/${resourceGroup}/${id}`,\n      options,\n    );\n  }\n}\n","import type { QuranFetchClient, SearchParams, SearchResponse } from \"@/types\";\n\ntype SearchOptions = Omit<SearchParams, \"query\">;\n\n/**\n * Search API methods\n */\nexport class QuranSearch {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Search\n   * @description /v1/search\n   * @param {string} query search query\n   * @param {SearchOptions} options\n   * @example\n   * client.search.search('نور', { mode: SearchMode.Quick })\n   * client.search.search('نور', { mode: SearchMode.Advanced, exactMatchesOnly: '1' })\n   * client.search.search('نور', { mode: SearchMode.Quick, size: 10 })\n   * client.search.search('نور', { mode: SearchMode.Quick, page: 2 })\n   */\n  async search(query: string, options: SearchOptions): Promise<SearchResponse> {\n    return this.fetcher.fetch<SearchResponse>(\"/v1/search\", {\n      query,\n      size: 30, // search-specific default\n      ...options,\n    });\n  }\n}\n","import type {\n  BaseApiParams,\n  ChapterId,\n  HizbNumber,\n  JuzNumber,\n  PageNumber,\n  PaginationParams,\n  QuranFetchClient,\n  RubNumber,\n  TranslationField,\n  Verse,\n  VerseField,\n  VerseKey,\n  WordField,\n} from \"@/types\";\nimport {\n  isValidChapterId,\n  isValidHizb,\n  isValidJuz,\n  isValidQuranPage,\n  isValidRub,\n  isValidVerseKey,\n} from \"@/utils\";\n\ntype GetVerseOptions = BaseApiParams &\n  PaginationParams & {\n    reciter?: string | number;\n    words?: boolean;\n    translations?: string[] | number[];\n    tafsirs?: string[] | number[];\n    wordFields?: Partial<Record<WordField, boolean>>;\n    translationFields?: Partial<Record<TranslationField, boolean>>;\n    fields?: Partial<Record<VerseField, boolean>>;\n  };\n\n/**\n * Verses API methods\n */\nexport class QuranVerses {\n  constructor(private fetcher: QuranFetchClient) {}\n\n  /**\n   * Get a specific verse by its key.\n   * @param {VerseKey} key verse key in format \"chapter:verse\" (e.g., \"1:1\")\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByKey('1:1')\n   * client.verses.findByKey('2:255')\n   */\n  async findByKey(key: VerseKey, options?: GetVerseOptions): Promise<Verse> {\n    if (!isValidVerseKey(key)) throw new Error(\"Invalid verse key\");\n\n    const { verse } = await this.fetcher.fetch<{ verse: Verse }>(\n      `/content/api/v4/verses/by_key/${key}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verse;\n  }\n\n  /**\n   * Get verses by range.\n   * @param {VerseKey} from start verse key (e.g., \"1:1\")\n   * @param {VerseKey} to end verse key (e.g., \"1:7\")\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByRange('1:1', '1:7')\n   */\n  async findByRange(\n    from: VerseKey,\n    to: VerseKey,\n    options?: GetVerseOptions,\n  ): Promise<Verse[]> {\n    // We could validate keys here, but the API will also valid it.\n    // simpler to just pass through for now, or use isValidVerseKey if desired.\n    if (!isValidVerseKey(from) || !isValidVerseKey(to)) {\n      throw new Error(\"Invalid verse key\");\n    }\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      \"/content/api/v4/verses/by_range\",\n      {\n        words: false, // verses-specific default\n        ...options,\n        from,\n        to,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get verses by chapter.\n   * @param {ChapterId} id chapter id, minimum 1, maximum 114\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByChapter('1')\n   */\n  async findByChapter(\n    id: ChapterId,\n    options?: GetVerseOptions,\n  ): Promise<Verse[]> {\n    if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      `/content/api/v4/verses/by_chapter/${id}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get verses by page number.\n   * @param {PageNumber} page page number\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByPage('1')\n   */\n  async findByPage(\n    page: PageNumber,\n    options?: GetVerseOptions,\n  ): Promise<Verse[]> {\n    if (!isValidQuranPage(page)) throw new Error(\"Invalid page number\");\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      `/content/api/v4/verses/by_page/${page}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get verses by juz number.\n   * @param {JuzNumber} juz juz number\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByJuz('1')\n   */\n  async findByJuz(juz: JuzNumber, options?: GetVerseOptions): Promise<Verse[]> {\n    if (!isValidJuz(juz)) throw new Error(\"Invalid juz\");\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      `/content/api/v4/verses/by_juz/${juz}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get verses by hizb number.\n   * @param {HizbNumber} hizb hizb number\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByHizb('1')\n   */\n  async findByHizb(\n    hizb: HizbNumber,\n    options?: GetVerseOptions,\n  ): Promise<Verse[]> {\n    if (!isValidHizb(hizb)) throw new Error(\"Invalid hizb\");\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      `/content/api/v4/verses/by_hizb/${hizb}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get verses by rub number.\n   * @param {RubNumber} rub rub number\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findByRub('1')\n   */\n  async findByRub(rub: RubNumber, options?: GetVerseOptions): Promise<Verse[]> {\n    if (!isValidRub(rub)) throw new Error(\"Invalid rub\");\n\n    const { verses } = await this.fetcher.fetch<{ verses: Verse[] }>(\n      `/content/api/v4/verses/by_rub/${rub}`,\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verses;\n  }\n\n  /**\n   * Get a random verse.\n   * @param {GetVerseOptions} options\n   * @example\n   * client.verses.findRandom()\n   */\n  async findRandom(options?: GetVerseOptions): Promise<Verse> {\n    const { verse } = await this.fetcher.fetch<{ verse: Verse }>(\n      \"/content/api/v4/verses/random\",\n      {\n        words: false, // verses-specific default\n        ...options,\n      },\n    );\n\n    return verse;\n  }\n}\n","import type { AuthService } from \"@/generated/public-contracts\";\nimport type { QuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport type {\n  ApiParams,\n  ChapterId,\n  ContentSyncOptions,\n  ContentSyncResourceGroup,\n  HizbNumber,\n  HTTPMethod,\n  JuzNumber,\n  OperationRequest,\n  PageNumber,\n  PublicClientConfig,\n  RubNumber,\n  SearchParams,\n  ServerClientConfig,\n  TokenResponse,\n  VerseKey,\n} from \"@/types\";\nimport { operationCatalog } from \"@/generated/contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { createAnalyticsFacade } from \"@/runtime/analytics\";\nimport { createAppStateFacade } from \"@/runtime/app-state\";\nimport { createQuranReflectPostsFacade } from \"@/runtime/quran-reflect-posts\";\nimport { QuranAnswers } from \"@/sdk/answers\";\nimport { QuranAudio } from \"@/sdk/audio\";\nimport { QuranChapters } from \"@/sdk/chapters\";\nimport { QuranFetcher } from \"@/sdk/fetcher\";\nimport { QuranHadithReferences } from \"@/sdk/hadith-references\";\nimport { QuranJuzs } from \"@/sdk/juzs\";\nimport { QuranQiraat } from \"@/sdk/qiraat\";\nimport { QuranResources } from \"@/sdk/resources\";\nimport { QuranSearch } from \"@/sdk/search\";\nimport { QuranVerses } from \"@/sdk/verses\";\n\ntype RuntimeClientConfig = PublicClientConfig | ServerClientConfig;\ntype RuntimeMode = \"public\" | \"server\";\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 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: QuranFetcher, 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: QuranFetcher) => {\n  const raw = createRawClient(fetcher, operationCatalog.auth.v1);\n  const generatedGroups = createGeneratedGroups(operationCatalog.auth.v1, raw);\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: QuranFetcher,\n): QuranReflectFacade => {\n  const raw = createRawClient(fetcher, operationCatalog.quranReflect.v1);\n  const generatedGroups = createGeneratedGroups(\n    operationCatalog.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: QuranFetcher,\n  mode: RuntimeMode,\n  config: RuntimeClientConfig,\n) => {\n  const raw = createRawClient(fetcher, operationCatalog.oauth2.v1);\n\n  const exchangeToken = async (\n    body: URLSearchParams,\n    options: {\n      allowPublicExchange?: boolean;\n      requiresRefreshToken?: boolean;\n    } = {},\n  ) => {\n    if (mode === \"public\") {\n      if ((config as PublicClientConfig).clientType !== \"public\") {\n        throw new Error(\n          \"This OAuth2 exchange requires a backend because your client is confidential.\",\n        );\n      }\n\n      if (!options.allowPublicExchange) {\n        throw new Error(\n          \"This OAuth2 flow requires @quranjs/api/server or a backend.\",\n        );\n      }\n\n      body.set(\"client_id\", config.clientId);\n    }\n\n    if (options.requiresRefreshToken && !body.get(\"refresh_token\")) {\n      throw new Error(\"Missing refresh token.\");\n    }\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        basicAuth:\n          mode === \"server\" && \"clientSecret\" in config\n            ? {\n                password: config.clientSecret,\n                username: config.clientId,\n              }\n            : undefined,\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, { allowPublicExchange: true });\n    },\n    getUserInfo: (accessToken?: string) =>\n      fetcher.request(\"oauth2\", \"/userinfo\", undefined, {\n        accessToken,\n        auth: \"user\",\n        method: \"GET\",\n      }),\n    introspect: (token: string) => {\n      if (mode !== \"server\" || !(\"clientSecret\" in config)) {\n        throw new Error(\n          \"Token introspection requires @quranjs/api/server or a backend.\",\n        );\n      }\n\n      return fetcher.request(\"oauth2\", \"/oauth2/introspect\", undefined, {\n        auth: \"none\",\n        basicAuth: {\n          password: config.clientSecret,\n          username: config.clientId,\n        },\n        body: new URLSearchParams({ token }),\n        contentType: \"application/x-www-form-urlencoded\",\n        method: \"POST\",\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, {\n        allowPublicExchange: true,\n        requiresRefreshToken: true,\n      });\n    },\n  };\n};\n\nconst createContentFacade = (\n  answers: QuranAnswers,\n  chapters: QuranChapters,\n  verses: QuranVerses,\n  juzs: QuranJuzs,\n  audio: QuranAudio,\n  hadithReferences: QuranHadithReferences,\n  qiraat: QuranQiraat,\n  resources: QuranResources,\n  raw: Record<string, RawOperation>,\n) => {\n  return {\n    answers: {\n      byAyah: (key: VerseKey, query?: ApiParams) =>\n        answers.findByAyah(key, query),\n      countWithinRange: (from: VerseKey, to: VerseKey, query?: ApiParams) =>\n        answers.countWithinRange(from, to, query),\n      get: (questionId: string | number) =>\n        answers.findByQuestionId(questionId),\n    },\n    audio: {\n      chapterRecitation: {\n        get: (reciterId: string, chapterId: ChapterId, query?: ApiParams) =>\n          audio.findChapterRecitationById(reciterId, chapterId, query),\n        list: (reciterId: string, query?: ApiParams) =>\n          audio.findAllChapterRecitations(reciterId, query),\n      },\n      verseRecitation: {\n        byChapter: (\n          chapterId: ChapterId,\n          recitationId: string,\n          query?: ApiParams,\n        ) =>\n          audio.findVerseRecitationsByChapter(chapterId, recitationId, query),\n        byKey: (verseKey: VerseKey, recitationId: string, query?: ApiParams) =>\n          audio.findVerseRecitationsByKey(verseKey, recitationId, query),\n      },\n    },\n    chapters: {\n      get: (id: ChapterId, query?: ApiParams) => chapters.findById(id, query),\n      getInfo: (id: ChapterId, query?: ApiParams) =>\n        chapters.findInfoById(id, query),\n      getInfoResponse: (id: ChapterId, query?: ApiParams) =>\n        chapters.findInfoResponseById(id, query),\n      list: (query?: ApiParams) => chapters.findAll(query),\n    },\n    hadithReferences: {\n      byAyah: (key: VerseKey, query?: ApiParams) =>\n        hadithReferences.findByAyah(key, query),\n      countWithinRange: (from: VerseKey, to: VerseKey, query?: ApiParams) =>\n        hadithReferences.countWithinRange(from, to, query),\n      hadithsByAyah: (key: VerseKey, query?: ApiParams) =>\n        hadithReferences.findHadithsByAyah(key, query),\n    },\n    juzs: {\n      list: () => juzs.findAll(),\n    },\n    qiraat: {\n      junctures: {\n        byChapter: (id: ChapterId, query?: ApiParams) =>\n          qiraat.findJuncturesByChapter(id, query),\n        byVerse: (key: VerseKey, query?: ApiParams) =>\n          qiraat.findJuncturesByVerse(key, query),\n        get: (id: string | number, query?: ApiParams) =>\n          qiraat.findJunctureById(id, query),\n      },\n      matrix: {\n        byChapter: (id: ChapterId, query?: ApiParams) =>\n          qiraat.findMatrixByChapter(id, query),\n        byVerse: (key: VerseKey, query?: ApiParams) =>\n          qiraat.findMatrixByVerse(key, query),\n        countWithinRange: (from: VerseKey, to: VerseKey, query?: ApiParams) =>\n          qiraat.countMatrixWithinRange(from, to, query),\n      },\n      readers: {\n        get: (id: string | number, query?: ApiParams) =>\n          qiraat.findReaderById(id, query),\n        list: (query?: ApiParams) => qiraat.findAllReaders(query),\n      },\n      readings: {\n        get: (id: string | number, query?: ApiParams) =>\n          qiraat.findReadingById(id, query),\n      },\n      transmitters: {\n        get: (id: string | number, query?: ApiParams) =>\n          qiraat.findTransmitterById(id, query),\n        list: (query?: ApiParams) => qiraat.findAllTransmitters(query),\n      },\n    },\n    raw,\n    resources: {\n      findSnapshot: (\n        resourceGroup: ContentSyncResourceGroup,\n        id: string | number,\n        query?: ApiParams,\n      ) => resources.findSnapshot(resourceGroup, id, query),\n      chapterInfos: {\n        list: (query?: ApiParams) => resources.findAllChapterInfos(query),\n      },\n      chapterReciters: {\n        list: (query?: ApiParams) => resources.findAllChapterReciters(query),\n      },\n      languages: {\n        list: (query?: ApiParams) => resources.findAllLanguages(query),\n      },\n      recitationStyles: {\n        list: (query?: ApiParams) => resources.findAllRecitationStyles(query),\n      },\n      recitations: {\n        getInfo: (id: string, query?: ApiParams) =>\n          resources.findRecitationInfo(id, query),\n        list: (query?: ApiParams) => resources.findAllRecitations(query),\n      },\n      tafsirs: {\n        getInfo: (id: string, query?: ApiParams) =>\n          resources.findTafsirInfo(id, query),\n        list: (query?: ApiParams) => resources.findAllTafsirs(query),\n      },\n      translations: {\n        getInfo: (id: string, query?: ApiParams) =>\n          resources.findTranslationInfo(id, query),\n        list: (query?: ApiParams) => resources.findAllTranslations(query),\n      },\n      verseMedia: {\n        list: (query?: ApiParams) => resources.findVerseMedia(query),\n      },\n      sync: (query?: ContentSyncOptions) => resources.sync(query),\n    },\n    verses: {\n      byChapter: (id: ChapterId, query?: ApiParams) =>\n        verses.findByChapter(id, query),\n      byHizb: (id: HizbNumber, query?: ApiParams) =>\n        verses.findByHizb(id, query),\n      byJuz: (id: JuzNumber, query?: ApiParams) => verses.findByJuz(id, query),\n      byKey: (key: VerseKey, query?: ApiParams) => verses.findByKey(key, query),\n      byPage: (page: PageNumber, query?: ApiParams) =>\n        verses.findByPage(page, query),\n      byRange: (from: VerseKey, to: VerseKey, query?: ApiParams) =>\n        verses.findByRange(from, to, query),\n      byRub: (id: RubNumber, query?: ApiParams) => verses.findByRub(id, query),\n      random: (query?: ApiParams) => verses.findRandom(query),\n    },\n  };\n};\n\nexport const createRuntimeClient = (\n  mode: RuntimeMode,\n  config: RuntimeClientConfig,\n) => {\n  const fetcher = new QuranFetcher(mode, config);\n  fetcher.getFetch();\n  const answers = new QuranAnswers(fetcher);\n  const chapters = new QuranChapters(fetcher);\n  const verses = new QuranVerses(fetcher);\n  const juzs = new QuranJuzs(fetcher);\n  const audio = new QuranAudio(fetcher);\n  const hadithReferences = new QuranHadithReferences(fetcher);\n  const qiraat = new QuranQiraat(fetcher);\n  const resources = new QuranResources(fetcher);\n  const searchClient = new QuranSearch(fetcher);\n\n  const raw = {\n    analytics: {\n      v1: createRawClient(fetcher, operationCatalog.analytics.v1),\n    },\n    auth: {\n      v1: createRawClient(fetcher, operationCatalog.auth.v1),\n    },\n    content: {\n      v4: createRawClient(fetcher, operationCatalog.content.v4),\n    },\n    oauth2: {\n      v1: createRawClient(fetcher, operationCatalog.oauth2.v1),\n    },\n    quranReflect: {\n      v1: createRawClient(fetcher, operationCatalog.quranReflect.v1),\n    },\n    search: {\n      v1: createRawClient(fetcher, operationCatalog.search.v1),\n    },\n  };\n\n  const contentV4 = createContentFacade(\n    answers,\n    chapters,\n    verses,\n    juzs,\n    audio,\n    hadithReferences,\n    qiraat,\n    resources,\n    raw.content.v4,\n  );\n  const analyticsV1 = createAnalyticsFacade(raw.analytics.v1);\n  const authV1 = createAuthFacade(fetcher);\n  const quranReflectV1 = createQuranReflectFacade(fetcher);\n  const oauth2V1 = createOAuth2Facade(fetcher, mode, config);\n\n  const query = ({\n    query: searchQuery,\n    ...options\n  }: {\n    query: string;\n  } & Omit<SearchParams, \"query\">) => searchClient.search(searchQuery, options);\n\n  const search = Object.assign(searchClient, {\n    query,\n    raw: raw.search.v1,\n    v1: {\n      query,\n      raw: raw.search.v1,\n    },\n  });\n\n  return {\n    analytics: {\n      ...analyticsV1,\n      v1: analyticsV1,\n    },\n    answers,\n    audio,\n    auth: {\n      ...authV1,\n      v1: authV1,\n    },\n    chapters,\n    clearCachedTokens: () => fetcher.clearCachedTokens(),\n    content: {\n      ...contentV4,\n      v4: contentV4,\n    },\n    getUserSession: () => fetcher.getUserSession(),\n    hadithReferences,\n    juzs,\n    oauth2: {\n      ...oauth2V1,\n      v1: oauth2V1,\n    },\n    qiraat,\n    quranReflect: {\n      ...quranReflectV1,\n      v1: quranReflectV1,\n    },\n    raw,\n    resources,\n    search,\n    verses,\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 { ServerClientConfig } from \"@/types\";\nimport { Language } from \"@/types\";\n\nimport { createRuntimeClient } from \"./runtime/create-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\";\n\nexport const createServerClient = (config: ServerClientConfig) => {\n  return createRuntimeClient(\"server\", {\n    ...config,\n    defaults: {\n      language: Language.ARABIC,\n      ...config.defaults,\n    },\n  });\n};\n\nexport type ServerClient = ReturnType<typeof createServerClient>;\n"]}