@quranjs/api 2.2.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"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/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/audio.ts","../src/sdk/chapters.ts","../src/lib/retry.ts","../src/lib/service-config.ts","../src/sdk/fetcher.ts","../src/sdk/juzs.ts","../src/sdk/resources.ts","../src/sdk/search.ts","../src/sdk/verses.ts","../src/runtime/create-client.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","paramsString","rawValue","fields","fieldKey","isValidChapterId","id","parsedId","isValidJuz","juz","parsedJuz","isValidRub","rub","parsedRub","isValidHizb","hizb","parsedHizb","isValidQuranPage","page","parsedPage","versesMapping","isValidVerseKey","chapterId","verseId","parsedVerse","verseCount","AUDIO_BASE_URL","normalizeVerseRecitations","audioFiles","file","absoluteUrl","QuranAudio","reciterId","options","audioFile","recitationId","data","QuranChapters","chapters","chapter","chapterInfo","retry","fn","lastError","i","error","resolve","API_BASE_URL","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","APP_SERVICE_SCOPES","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","response","isRefreshTokenRejection","responseBody","formatRefreshFailureMessage","body","details","QuranFetcher","mode","config","doFetch","storedSession","session","service","query","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","QuranJuzs","juzs","QuranResources","recitations","translations","tafsirs","languages","recitationInfo","translationInfo","tafsirInfo","chapterInfos","reciters","recitationStyles","verseMedia","QuranSearch","QuranVerses","verse","from","to","verses","createUserServiceRequest","method","createAuthFacade","generatedGroups","collectionId","bookmarkId","noteId","verseKey","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createContentFacade","audio","resources","createRuntimeClient","searchClient","contentV4","authV1","quranReflectV1","oauth2V1","searchQuery","search","createServerClient"],"mappings":"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GAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,GAAA,CACJ,GAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,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,EAAA,CAAI,GAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,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,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,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,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,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,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,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,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,EAAA,CACJ,GAAI,EAAA,CACJ,EAAA,CAAI,GACJ,EAAA,CAAI,CAAA,CACJ,EAAA,CAAI,CAAA,CACJ,EAAA,CAAI,EAAA,CACJ,GAAI,CAAA,CACJ,EAAA,CAAI,EACJ,EAAA,CAAI,CAAA,CACJ,IAAK,EAAA,CACL,GAAA,CAAK,EAAA,CACL,GAAA,CAAK,CAAA,CACL,GAAA,CAAK,EACL,GAAA,CAAK,CAAA,CACL,IAAK,CAAA,CACL,GAAA,CAAK,EACL,GAAA,CAAK,CAAA,CACL,GAAA,CAAK,CAAA,CACL,GAAA,CAAK,CAAA,CACL,IAAK,CAAA,CACL,GAAA,CAAK,EACL,GAAA,CAAK,CAAA,CACL,IAAK,CAAA,CACL,GAAA,CAAK,CACP,CAAA,CCxGO,IAAMC,CAAAA,CAAmBvB,GAAiC,CAC/D,GAAM,CAACwB,CAAAA,CAAWC,CAAO,EAAIzB,CAAAA,CAAI,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA,CACjD,GAAI,CAACwB,CAAAA,EAAa,CAACC,CAAAA,EAAW,CAAClB,EAAiBiB,CAAS,CAAA,CAAG,OAAO,MAAA,CAEnE,IAAME,CAAAA,CAAc,OAAOD,CAAO,CAAA,CAC5BE,CAAAA,CAAaL,CAAAA,CAAcE,CAAsB,CAAA,CACvD,OAAI,EAAA,CAACE,CAAAA,EAAeA,CAAAA,EAAe,CAAA,EAAKA,CAAAA,CAAcC,CAAAA,CAIxD,ECCA,IAAMC,EAAAA,CAAiB,2BAOvB,SAASC,CAAAA,CACPC,EAC6B,CAC7B,OAAOA,CAAAA,CAAW,GAAA,CAAKC,CAAAA,EAAS,CAE9B,IAAMC,CAAAA,CACJD,CAAAA,CAAK,IAAI,UAAA,CAAW,SAAS,GAAKA,CAAAA,CAAK,GAAA,CAAI,UAAA,CAAW,UAAU,CAAA,CAC5DA,CAAAA,CAAK,IACL,CAAA,EAAGH,EAAc,IAAIG,CAAAA,CAAK,GAAA,CAAI,QAAQ,MAAA,CAAQ,EAAE,CAAC,CAAA,CAAA,CAEvD,OAAO,CACL,GAAGA,CAAAA,CACH,QAAA,CAAUC,CACZ,CACF,CAAC,CACH,CAKO,IAAMC,CAAAA,CAAN,KAAiB,CACtB,WAAA,CAAoBtD,EAA2B,CAA3B,IAAA,CAAA,OAAA,CAAAA,EAA4B,CAShD,MAAM,0BACJuD,CAAAA,CACAC,CAAAA,CAC8B,CAC9B,GAAM,CAAE,UAAA,CAAAL,CAAW,CAAA,CAAI,MAAM,KAAK,OAAA,CAAQ,KAAA,CAEvC,uCAAuCI,CAAS,CAAA,CAAA,CAAIC,CAAO,CAAA,CAE9D,OAAOL,CACT,CAUA,MAAM,yBAAA,CACJI,EACAV,CAAAA,CACAW,CAAAA,CAC4B,CAC5B,GAAI,CAAC5B,CAAAA,CAAiBiB,CAAS,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,oBAAoB,CAAA,CAEtE,GAAM,CAAE,SAAA,CAAAY,CAAU,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAGvC,CAAA,oCAAA,EAAuCF,CAAS,CAAA,CAAA,EAAIV,CAAS,GAC7DW,CACF,CAAA,CAEA,OAAOC,CACT,CAUA,MAAM,6BAAA,CACJZ,CAAAA,CACAa,CAAAA,CACAF,EAIC,CACD,GAAI,CAAC5B,CAAAA,CAAiBiB,CAAS,EAAG,MAAM,IAAI,KAAA,CAAM,oBAAoB,CAAA,CAEtE,IAAMc,EAAO,MAAM,IAAA,CAAK,QAAQ,KAAA,CAI9B,CAAA,4BAAA,EAA+BD,CAAY,CAAA,YAAA,EAAeb,CAAS,CAAA,CAAA,CACnEW,CACF,CAAA,CAEA,OAAO,CACL,GAAGG,CAAAA,CACH,WAAYT,CAAAA,CAA0BS,CAAAA,CAAK,UAAU,CACvD,CACF,CAUA,MAAM,yBAAA,CACJtC,CAAAA,CACAqC,EACAF,CAAAA,CAIC,CACD,GAAI,CAACZ,CAAAA,CAAgBvB,CAAG,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA,CAE9D,IAAMsC,CAAAA,CAAO,MAAM,KAAK,OAAA,CAAQ,KAAA,CAG7B,+BAA+BD,CAAY,CAAA,SAAA,EAAYrC,CAAG,CAAA,CAAA,CAAImC,CAAO,CAAA,CAExE,OAAO,CACL,GAAGG,EACH,UAAA,CAAYT,CAAAA,CAA0BS,EAAK,UAAU,CACvD,CACF,CACF,CAAA,CChJO,IAAMC,EAAN,KAAoB,CACzB,WAAA,CAAoB5D,CAAAA,CAA2B,CAA3B,IAAA,CAAA,OAAA,CAAAA,EAA4B,CAShD,MAAM,OAAA,CAAQwD,CAAAA,CAAiD,CAC7D,GAAM,CAAE,QAAA,CAAAK,CAAS,EAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CACtC,0BAAA,CACAL,CACF,CAAA,CAEA,OAAOK,CACT,CAWA,MAAM,QAAA,CAAShC,EAAe2B,CAAAA,CAA+C,CAC3E,GAAI,CAAC5B,CAAAA,CAAiBC,CAAE,CAAA,CAAG,MAAM,IAAI,MAAM,oBAAoB,CAAA,CAE/D,GAAM,CAAE,OAAA,CAAAiC,CAAQ,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CACrC,CAAA,yBAAA,EAA4BjC,CAAE,CAAA,CAAA,CAC9B2B,CACF,EAEA,OAAOM,CACT,CAWA,MAAM,YAAA,CACJjC,CAAAA,CACA2B,CAAAA,CACsB,CACtB,GAAI,CAAC5B,CAAAA,CAAiBC,CAAE,EAAG,MAAM,IAAI,MAAM,oBAAoB,CAAA,CAE/D,GAAM,CAAE,WAAA,CAAAkC,CAAY,EAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CAExC,CAAA,yBAAA,EAA4BlC,CAAE,CAAA,KAAA,CAAA,CAAS2B,CAAO,CAAA,CAEjD,OAAOO,CACT,CACF,EC1EO,IAAMC,CAAAA,CAAQ,MACnBC,CAAAA,CACAT,CAAAA,CAA+B,CAAE,OAAA,CAAS,CAAE,CAAA,GAC7B,CACf,IAAIU,CAAAA,CAEJ,QAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,EAAKX,CAAAA,CAAQ,OAAA,CAASW,CAAAA,EAAAA,CACpC,GAAI,CACF,OAAO,MAAMF,CAAAA,EACf,CAAA,MAASG,EAAO,CAEd,GADAF,EAAYE,CAAAA,CACRD,CAAAA,GAAMX,EAAQ,OAAA,CAChB,MAAMU,CAAAA,CAIR,MAAM,IAAI,OAAA,CAASG,GACjB,UAAA,CAAWA,CAAAA,CAAS,KAAK,GAAA,CAAI,CAAA,CAAGF,CAAC,CAAA,CAAI,GAAI,CAC3C,EACF,CAGF,MAAMD,CACR,CAAA,CCvBO,IAAMI,EAAe,+BAAA,CAEfC,CAAAA,CAAoB,CAC/B,IAAA,CAAM,oCAAA,CACN,OAAA,CAAS,uCAAA,CACT,MAAA,CAAQ,iCAAA,CACR,aAAc,6CAAA,CACd,MAAA,CAAQ,sCACV,CAAA,CAEaC,EAAAA,CAAqB,CAChC,IAAA,CAAM,KAAA,CACN,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,EAAA,CACR,aAAc,KAAA,CACd,MAAA,CAAQ,KACV,CAAA,CAEaC,CAAAA,CAAsB,CACjC,IAAA,CAAM,UAAA,CACN,OAAA,CAAS,iBAAA,CACT,MAAA,CAAQ,EAAA,CACR,aAAc,mBAAA,CACd,MAAA,CAAQ,YACV,CAAA,CAEaC,EAAAA,CAAkB,CAC7B,IAAA,CAAM,CAAC,UAAA,CAAY,KAAK,CAAA,CACxB,OAAA,CAAS,CAAC,iBAAA,CAAmB,SAAS,EACtC,MAAA,CAAQ,GACR,YAAA,CAAc,CAAC,mBAAA,CAAqB,KAAK,CAAA,CACzC,MAAA,CAAQ,CAAC,YAAA,CAAc,KAAK,CAC9B,CAAA,CCDA,GAAM,CAAE,YAAA,CAAAC,EAAa,CAAA,CAAIhE,mBAAAA,CAInBiE,GAA0D,CAC9D,OAAA,CAAS,UACT,MAAA,CAAQ,QACV,EACMC,EAAAA,CAAkC,0BAAA,CAClCC,EAAAA,CAAsC,CAC1C,WAAA,CACA,eACF,EACMC,EAAAA,CAAmB,CACvB,OACA,SAAA,CACA,cAAA,CACA,QACF,CAAA,CAEMC,EAAAA,CAA+B,sCAAA,CAC/BC,EAAAA,CAAgC,eAAA,CAChCC,EAAAA,CAAiC,IAEjCC,EAAAA,CAAmB,MAAOC,GAAwC,CACtE,GAAI,CACF,OAAO,MAAMA,CAAAA,CAAS,IAAA,EACxB,CAAA,KAAQ,CACN,OAAO,EACT,CACF,CAAA,CAEMC,EAAAA,CAA0B,CAC9BD,CAAAA,CACAE,CAAAA,GAGEF,CAAAA,CAAS,MAAA,CAAS,GAAA,EAClBA,CAAAA,CAAS,QAAU,GAAA,EACnBA,CAAAA,CAAS,SAAW,GAAA,CAEb,KAAA,CAGFE,EAAa,WAAA,EAAY,CAAE,QAAA,CAASL,EAA6B,CAAA,CAGpEM,EAAAA,CAA8B,CAClCH,CAAAA,CACAE,CAAAA,GACW,CACX,IAAME,CAAAA,CAAOF,EAAa,IAAA,EAAK,CACzBG,CAAAA,CAAUD,CAAAA,CAAO,CAAA,EAAA,EAAKA,CAAI,GAAK,EAAA,CAErC,OAAO,yBAAyBJ,CAAAA,CAAS,MAAM,IAAIA,CAAAA,CAAS,UAAU,CAAA,EAAGK,CAAO,CAAA,CAClF,CAAA,CAEaC,EAAN,KAAmB,CAKxB,YACmBC,CAAAA,CACAC,CAAAA,CACjB,CAFiB,IAAA,CAAA,IAAA,CAAAD,CAAAA,CACA,IAAA,CAAA,MAAA,CAAAC,CAAAA,CAEjB,IAAA,CAAK,WAAA,CAAcA,EAAO,YAC5B,CATQ,UAAY,IAAI,GAAA,CAChB,YACA,yBAAA,CAAyD,IAAA,CAS1D,QAAA,EAA0B,CAC/B,IAAMC,CAAAA,CAAU,KAAK,MAAA,CAAO,KAAA,EAAS,WAAW,KAAA,CAEhD,GAAI,OAAOA,CAAAA,EAAY,UAAA,CACrB,MAAM,IAAI,KAAA,CACR,yGACF,EAGF,OAAOA,CACT,CAEO,iBAAA,EAA0B,CAC/B,KAAK,SAAA,CAAU,KAAA,GACjB,CAEA,MAAa,cAAA,EAA8C,CACzD,IAAMC,CAAAA,CAAgB,MAAM,IAAA,CAAK,MAAA,CAAO,SAAS,UAAA,IAAa,CAC9D,OAAIA,CAAAA,GAAkB,MAAA,CACbA,CAAAA,CAGF,KAAK,WAAA,EAAe,IAC7B,CAEA,MAAa,cAAA,CAAeC,EAA4C,CACtE,GAAI,CAAC,IAAA,CAAK,MAAA,CAAO,OAAA,CAAS,CACxB,IAAA,CAAK,WAAA,CAAcA,EACnB,MACF,CAEA,GAAI,CAACA,CAAAA,CAAS,CACZ,GAAI,IAAA,CAAK,MAAA,CAAO,QAAQ,YAAA,CAAc,CACpC,MAAM,IAAA,CAAK,MAAA,CAAO,QAAQ,YAAA,EAAa,CACvC,IAAA,CAAK,WAAA,CAAc,IAAA,CACnB,MACF,CAEA,MAAM,IAAA,CAAK,MAAA,CAAO,OAAA,CAAQ,UAAA,GAAa,IAAI,EAC3C,IAAA,CAAK,WAAA,CAAc,IAAA,CACnB,MACF,CAEA,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAaA,CAAO,CAAA,CAC9C,KAAK,WAAA,CAAcA,EACrB,CAEO,eAAA,CACLC,CAAAA,CACAzG,CAAAA,CACA0G,EACQ,CACR,IAAMC,EAA0B,IAAA,CAAK,yBAAA,CACnCF,EACAzG,CACF,CAAA,CACM,CAAE,OAAA,CAAA4G,CAAAA,CAAS,WAAA,CAAAC,CAAY,CAAA,CAAI,IAAA,CAAK,sBACpCJ,CAAAA,CACAE,CACF,EACMG,CAAAA,CAAc,IAAA,CAAK,oBAAA,CACvBL,CAAAA,CACAzG,CAAAA,CACA6G,CAAAA,CACAF,CACF,CAAA,CAEA,OAAO,GAAGC,CAAO,CAAA,EAAGE,CAAW,CAAA,EAAG9E,CAAAA,CAAe0E,CAAK,CAAC,CAAA,CACzD,CAEA,MAAa,gBAAA,CACXxI,CAAAA,CACAM,EACY,CACZ,OAAO,KAAK,OAAA,CACVN,CAAAA,CAAU,OAAA,CACVqD,CAAAA,CAAkBrD,CAAAA,CAAU,IAAA,CAAMM,GAAS,IAAI,CAAA,CAC/CA,GAAS,KAAA,CACT,CACE,GAAGA,CAAAA,CACH,IAAA,CACEA,CAAAA,EAAS,IAAA,GAAS,MAAA,EAAU,CAACA,GAAS,IAAA,CAClCN,CAAAA,CAAU,KACVM,CAAAA,CAAQ,IAAA,CACd,OACEA,CAAAA,EAAS,MAAA,EACRN,CAAAA,CAAU,MAAA,CAAO,WAAA,EAAY,CAChC,KAAM,MACR,CACF,CACF,CAEA,MAAa,OAAA,CACXuI,EACAzG,CAAAA,CACA0G,CAAAA,CACAlI,CAAAA,CAA4B,EAAC,CACjB,CACZ,IAAMuI,CAAAA,CAAgB,IAAA,CAAK,gBAAgBN,CAAAA,CAASjI,CAAAA,CAAQ,IAAI,CAAA,CAEhE,GAAI,IAAA,CAAK,IAAA,GAAS,QAAA,EAAYuI,CAAAA,GAAkB,MAC9C,MAAM,IAAI,MACR,kHACF,CAAA,CAGF,IAAMC,CAAAA,CAAM,IAAA,CAAK,eAAA,CAAgBP,CAAAA,CAASzG,CAAAA,CAAM0G,CAAK,EAC/CO,CAAAA,CAAc,MAAM,KAAK,qBAAA,CAC7BF,CAAAA,CACAvI,CACF,CAAA,CACIqH,CAAAA,CAAW,MAAM,IAAA,CAAK,cAAA,CACxBY,CAAAA,CACAO,EACAxI,CAAAA,CACAuI,CAAAA,CACAE,GAAa,WACf,CAAA,CAEA,GACE,IAAA,CAAK,sBAAA,CAAuBpB,CAAAA,CAAUkB,CAAAA,CAAevI,CAAAA,CAASyI,CAAW,EACzE,CACA,IAAMC,EAAmB,MAAM,IAAA,CAAK,0BAAyB,CAC7DrB,CAAAA,CAAW,MAAM,IAAA,CAAK,cAAA,CACpBY,CAAAA,CACAO,EACAxI,CAAAA,CACAuI,CAAAA,CACAG,EAAiB,WACnB,EACF,CAEA,GAAI,CAACrB,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,MAAM,CAAA,EAAGA,CAAAA,CAAS,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAS,UAAU,CAAA,CAAE,CAAA,CAG7D,GAAIA,CAAAA,CAAS,MAAA,GAAW,GAAA,CACtB,OAIF,GAAI,CAAA,CADgBA,CAAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,GAAK,EAAA,EAC3C,QAAA,CAAS,kBAAkB,CAAA,CAC1C,OAAQ,MAAMA,EAAS,IAAA,EAAK,CAG9B,IAAMsB,CAAAA,CAAO,MAAMtB,EAAS,IAAA,EAAK,CACjC,OAAOT,EAAAA,CAAa+B,CAAc,CACpC,CAEA,MAAa,KAAA,CAAmBH,EAAaxF,CAAAA,CAAgC,CAC3E,IAAM4F,CAAAA,CAAQ,IAAA,CAAK,kBAAA,CAAmBJ,CAAG,CAAA,CACzC,OAAO,KAAK,OAAA,CAAWI,CAAAA,CAAM,QAASA,CAAAA,CAAM,IAAA,CAAM,CAChD,GAAG,IAAA,CAAK,MAAA,CAAO,QAAA,CACf,GAAG5F,CACL,CAAC,CACH,CAEA,MAAc,cAAA,CACZiF,CAAAA,CACAO,EACAxI,CAAAA,CACA6I,CAAAA,CACAvI,CAAAA,CACmB,CACnB,IAAML,CAAAA,CAAU,IAAI,OAAA,CAAQD,CAAAA,CAAQ,OAAO,CAAA,CACrCyH,CAAAA,CAAO1H,EAAYC,CAAAA,CAASC,CAAO,CAAA,CAEzC,OAAIgI,CAAAA,GAAY,QAAA,EACdhI,EAAQ,GAAA,CAAI,aAAA,CAAe,KAAK,MAAA,CAAO,QAAQ,EAGjD,MAAM,IAAA,CAAK,0BAAA,CACTgI,CAAAA,CACAY,CAAAA,CACA5I,CAAAA,CACA,CACE,GAAGD,CAAAA,CACH,YAAaM,CAAAA,EAAeN,CAAAA,CAAQ,WACtC,CAAA,CACAwI,CACF,CAAA,CAEO,IAAA,CAAK,QAAA,EAAS,CAAEA,EAAK,CAC1B,IAAA,CAAAf,CAAAA,CACA,OAAA,CAAAxH,CAAAA,CACA,MAAA,CAAQD,EAAQ,MAAA,EAAU,KAC5B,CAAC,CACH,CAEQ,kBAAA,CAAmBwI,EAGzB,CACA,IAAMM,EAAiBjG,CAAAA,CAAmBM,CAAAA,CAAsBqF,CAAG,CAAC,CAAA,CAEpE,GACEM,CAAAA,CAAe,UAAA,CAAW,iBAAiB,GAC3CA,CAAAA,CAAe,UAAA,CAAW,SAAS,CAAA,CAEnC,OAAO,CACL,IAAA,CAAMA,CAAAA,CACN,OAAA,CAAS,SACX,CAAA,CAGF,GACEA,IAAmB,YAAA,EACnBA,CAAAA,CAAe,WAAW,YAAY,CAAA,CAEtC,OAAO,CACL,IAAA,CAAMA,CAAAA,CACN,OAAA,CAAS,QACX,CAAA,CAGF,GAAIA,CAAAA,CAAe,UAAA,CAAW,UAAU,CAAA,CACtC,OAAO,CACL,IAAA,CAAMA,CAAAA,CACN,OAAA,CAAS,MACX,CAAA,CAGF,GAAIA,EAAe,UAAA,CAAW,mBAAmB,EAC/C,OAAO,CACL,KAAMA,CAAAA,CACN,OAAA,CAAS,cACX,CAAA,CAGF,GACEA,CAAAA,CAAe,WAAW,SAAS,CAAA,EACnCA,EAAe,UAAA,CAAW,WAAW,EAErC,OAAO,CACL,IAAA,CAAMA,CAAAA,CACN,OAAA,CAAS,QACX,EAGF,MAAM,IAAI,MAAM,CAAA,uBAAA,EAA0BN,CAAG,EAAE,CACjD,CAEQ,eAAA,CACNP,CAAAA,CACAY,CAAAA,CAAiC,MAAA,CACR,CACzB,OAAIA,CAAAA,GAAS,MAAA,CACJA,CAAAA,CAGLZ,CAAAA,GAAY,SAAA,EAAaA,IAAY,QAAA,CAChC,KAAA,CAGLA,CAAAA,GAAY,MAAA,EAAUA,CAAAA,GAAY,cAAA,CAC7B,OAGF,MACT,CAEA,MAAc,qBAAA,CACZY,CAAAA,CACA7I,EAC6B,CAC7B,GAAI6I,CAAAA,GAAS,MAAA,EAAU7I,CAAAA,CAAQ,WAAA,EAAe,KAAK,IAAA,GAAS,QAAA,CAC1D,OAAO,IAAA,CAGT,IAAMgI,EAAU,MAAM,IAAA,CAAK,cAAA,EAAe,CAC1C,GAAI,CAACA,GAAS,WAAA,CACZ,MAAM,IAAI,KAAA,CACR,mFACF,EAGF,OAAK,IAAA,CAAK,wBAAA,CAAyBA,CAAO,CAAA,CAInC,IAAA,CAAK,yBAAyBA,CAAO,CAAA,CAHnCA,CAIX,CAEQ,wBAAA,CAAyBA,EAA+B,CAC9D,OAAI,CAACA,CAAAA,CAAQ,YAAA,EAAgB,CAACA,EAAQ,SAAA,CAC7B,KAAA,CAGFA,EAAQ,SAAA,EAAa,IAAA,CAAK,KAAI,CAAIb,EAC3C,CAEQ,sBAAA,CACNE,CAAAA,CACAwB,CAAAA,CACA7I,EACAgI,CAAAA,CACS,CAKT,OAJIX,CAAAA,CAAS,MAAA,GAAW,KAIpBwB,CAAAA,GAAS,MAAA,EAAU7I,CAAAA,CAAQ,WAAA,EAAe,IAAA,CAAK,IAAA,GAAS,SACnD,KAAA,CAGF,CAAA,CAAQgI,GAAS,YAC1B,CAEA,MAAc,0BAAA,CACZC,CAAAA,CACAY,CAAAA,CACA5I,CAAAA,CACAD,CAAAA,CACA+I,CAAAA,CACe,CAWf,GAVI/I,CAAAA,CAAQ,SAAA,EACVC,CAAAA,CAAQ,GAAA,CACN,eAAA,CACA,SAASN,CAAAA,CACPK,CAAAA,CAAQ,SAAA,CAAU,QAAA,CAClBA,CAAAA,CAAQ,SAAA,CAAU,QACpB,CAAC,CAAA,CACH,EAGEA,CAAAA,CAAQ,WAAA,CAAa,CACvB,IAAA,CAAK,eAAA,CAAgBiI,CAAAA,CAAShI,CAAAA,CAASD,CAAAA,CAAQ,WAAW,EAC1D,MACF,CAEA,GAAI6I,CAAAA,GAAS,MAAA,CACX,OAGF,GAAIA,CAAAA,GAAS,KAAA,CAAO,CAClB,IAAM1I,CAAAA,CAAQ,MAAM,IAAA,CAAK,iBAAA,CAAkB8H,EAASc,CAAW,CAAA,CAC/D,KAAK,eAAA,CAAgBd,CAAAA,CAAShI,CAAAA,CAASE,CAAK,CAAA,CAC5C,MACF,CAEA,IAAM6H,CAAAA,CAAU,MAAM,IAAA,CAAK,cAAA,GAC3B,GAAI,CAACA,CAAAA,EAAS,WAAA,CACZ,MAAM,IAAI,MACR,mFACF,CAAA,CAGF,KAAK,eAAA,CAAgBC,CAAAA,CAAShI,EAAS+H,CAAAA,CAAQ,WAAW,EAC5D,CAEA,MAAc,wBAAA,CACZ5H,EACsB,CACtB,GAAI,KAAK,yBAAA,CACP,OAAO,KAAK,yBAAA,CAGd,IAAM4I,CAAAA,CAAiB,IAAA,CAAK,yBAAA,CAA0B5I,CAAc,EACpE,IAAA,CAAK,yBAAA,CAA4B4I,EAEjC,GAAI,CACF,OAAO,MAAMA,CACf,CAAA,OAAE,CACI,IAAA,CAAK,yBAAA,GAA8BA,IACrC,IAAA,CAAK,yBAAA,CAA4B,IAAA,EAErC,CACF,CAEA,MAAc,0BACZ5I,CAAAA,CACsB,CACtB,GAAI,IAAA,CAAK,IAAA,GAAS,QAAA,EAAY,EAAE,cAAA,GAAkB,IAAA,CAAK,QACrD,MAAM,IAAI,MACR,sEACF,CAAA,CAGF,IAAM6I,CAAAA,CAAe,IAAA,CAAK,MAAA,CAAO,aAE3BjB,CAAAA,CAAU5H,CAAAA,EAAmB,MAAM,IAAA,CAAK,cAAA,GAC9C,GAAI,CAAC4H,CAAAA,EAAS,YAAA,CACZ,MAAM,IAAI,MAAMf,EAA4B,CAAA,CAG9C,IAAMiC,CAAAA,CAAW,CAAA,EAAGpG,EAClB,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,SAAA,EACpB,IAAA,CAAK,MAAA,CAAO,UAAU,aAAA,EACtB0D,CAAAA,CAAkB,MACtB,CAAC,CAAA,aAAA,CAAA,CAEKiB,EAAO,IAAI,eAAA,CAAgB,CAC/B,UAAA,CAAY,eAAA,CACZ,aAAA,CAAeO,EAAQ,YACzB,CAAC,EAEKX,CAAAA,CAAW,MAAMpB,EACrB,IACE,IAAA,CAAK,QAAA,EAAS,CAAEiD,CAAAA,CAAU,CACxB,KAAAzB,CAAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,kBAAA,CACR,cAAe,CAAA,MAAA,EAAS9H,CAAAA,CACtB,IAAA,CAAK,MAAA,CAAO,QAAA,CACZsJ,CACF,CAAC,CAAA,CAAA,CACD,cAAA,CAAgB,mCAClB,CAAA,CACA,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,CAAE,OAAA,CAAS,CAAE,CACf,EAEA,GAAI,CAAC5B,EAAS,EAAA,CAAI,CAChB,IAAME,CAAAA,CAAe,MAAMH,EAAAA,CAAiBC,CAAQ,CAAA,CACpD,MAAIC,GAAwBD,CAAAA,CAAUE,CAAY,GAChD,MAAM,IAAA,CAAK,eAAe,IAAI,CAAA,CACxB,IAAI,KAAA,CAAMN,EAA4B,CAAA,EAGxC,IAAI,KAAA,CAAMO,EAAAA,CAA4BH,EAAUE,CAAY,CAAC,CACrE,CAEA,IAAMpH,CAAAA,CAAS,MAAMkH,CAAAA,CAAS,IAAA,GACxBqB,CAAAA,CAAmBxI,CAAAA,CAAcC,EAAO6H,CAAO,CAAA,CACrD,aAAM,IAAA,CAAK,cAAA,CAAeU,CAAgB,CAAA,CAEnCA,CACT,CAEQ,gBACNT,CAAAA,CACAhI,CAAAA,CACAK,EACM,CACN,GAAI2H,IAAY,QAAA,CAAU,CACxBhI,CAAAA,CAAQ,GAAA,CAAI,eAAA,CAAiB,CAAA,OAAA,EAAUK,CAAW,CAAA,CAAE,CAAA,CACpD,MACF,CAEAL,CAAAA,CAAQ,IAAI,cAAA,CAAgBK,CAAW,EACzC,CAEA,MAAc,iBAAA,CACZ2H,EACAc,CAAAA,CACiB,CACjB,GAAI,IAAA,CAAK,IAAA,GAAS,SAChB,MAAM,IAAI,KAAA,CACR,kEACF,CAAA,CAGF,IAAMrI,EAAQ,IAAA,CAAK,eAAA,CAAgBuH,EAASc,CAAW,CAAA,CACvD,GAAI,CAACrI,CAAAA,CACH,MAAM,IAAI,KAAA,CACR,CAAA,8CAAA,EAAiDuH,CAAO,CAAA,CAAA,CAC1D,CAAA,CAGF,IAAMkB,CAAAA,CAAW,CAAA,EAAGlB,CAAO,IAAIvH,CAAK,CAAA,CAAA,CAC9B0I,CAAAA,CAAc,IAAA,CAAK,SAAA,CAAU,GAAA,CAAID,CAAQ,CAAA,CAE/C,GAAIC,GAAeA,CAAAA,CAAY,SAAA,CAAY,KAAK,GAAA,EAAI,CAAI,GAAA,CACtD,OAAOA,CAAAA,CAAY,KAAA,CAGrB,GAAI,EAAE,cAAA,GAAkB,KAAK,MAAA,CAAA,CAC3B,MAAM,IAAI,KAAA,CAAM,wDAAwD,CAAA,CAG1E,IAAMH,CAAAA,CAAe,IAAA,CAAK,OAAO,YAAA,CAE3BC,CAAAA,CAAW,GAAGpG,CAAAA,CAClB,IAAA,CAAK,OAAO,QAAA,EAAU,SAAA,EACpB,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,aAAA,EACtB0D,EAAkB,MACtB,CAAC,gBAEKiB,CAAAA,CAAO,IAAI,gBAAgB,CAC/B,UAAA,CAAY,oBAAA,CACZ,KAAA,CAAA/G,CACF,CAAC,EAEK2G,CAAAA,CAAW,MAAMpB,EACrB,IACE,IAAA,CAAK,UAAS,CAAEiD,CAAAA,CAAU,CACxB,IAAA,CAAAzB,CAAAA,CACA,OAAA,CAAS,CACP,MAAA,CAAQ,kBAAA,CACR,cAAe,CAAA,MAAA,EAAS9H,CAAAA,CACtB,KAAK,MAAA,CAAO,QAAA,CACZsJ,CACF,CAAC,CAAA,CAAA,CACD,cAAA,CAAgB,mCAClB,CAAA,CACA,MAAA,CAAQ,MACV,CAAC,CAAA,CACH,CAAE,OAAA,CAAS,CAAE,CACf,CAAA,CAEA,GAAI,CAAC5B,EAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CACR,CAAA,sBAAA,EAAyBA,CAAAA,CAAS,MAAM,CAAA,CAAA,EAAIA,CAAAA,CAAS,UAAU,CAAA,CACjE,CAAA,CAGF,IAAMsB,EAAQ,MAAMtB,CAAAA,CAAS,MAAK,CAC5BgC,CAAAA,CAAS,CACb,SAAA,CAAW,IAAA,CAAK,GAAA,EAAI,CAAIV,CAAAA,CAAK,UAAA,CAAa,IAC1C,KAAA,CAAOA,CAAAA,CAAK,YACd,CAAA,CAEA,OAAA,IAAA,CAAK,UAAU,GAAA,CAAIQ,CAAAA,CAAUE,CAAM,CAAA,CAC5BA,CAAAA,CAAO,KAChB,CAEQ,eAAA,CACNpB,CAAAA,CACAc,EACoB,CACpB,GAAId,IAAY,SAAA,EAAa,CAACc,CAAAA,CAC5B,OAAOlC,EAAAA,CAAmBoB,CAAO,EAGnC,IAAMqB,CAAAA,CAAW,IAAI,GAAA,CAAIP,CAAW,EAAE,QAAA,CACtC,OAAKO,CAAAA,CAAS,UAAA,CAAWxC,EAA+B,CAAA,CAKtDC,GAAoC,IAAA,CAAMwC,CAAAA,EACxCD,EAAS,QAAA,CAASC,CAAM,CAC1B,CAAA,CAEO,cAAA,CAGF,WAAA,CAXE1C,EAAAA,CAAmB,OAY9B,CAEQ,sBACNoB,CAAAA,CACAE,CAAAA,CAA0B,MAI1B,CACA,GAAM,CAAE,QAAA,CAAAqB,CAAS,CAAA,CAAI,IAAA,CAAK,MAAA,CAC1B,GAAIrB,EACF,OAAO,CACL,QAASrF,CAAAA,CAAoB0G,CAAAA,EAAU,YAAcjD,CAAY,CAAA,CACjE,WAAA,CAAa,IACf,CAAA,CAGF,IAAMkD,EACJxB,CAAAA,GAAY,SAAA,CACRuB,CAAAA,EAAU,cAAA,CACVvB,CAAAA,GAAY,QAAA,CACVuB,GAAU,aAAA,CACVvB,CAAAA,GAAY,MAAA,CACVuB,CAAAA,EAAU,WAAA,CACVvB,CAAAA,GAAY,eACVuB,CAAAA,EAAU,mBAAA,CACTA,GAAU,aAAA,EAAiBA,CAAAA,EAAU,UAElD,OAAIC,CAAAA,CACK,CACL,OAAA,CAAS3G,CAAAA,CAAoB2G,CAAa,EAC1C,WAAA,CAAa,KACf,EAGED,CAAAA,EAAU,UAAA,EAAcvB,IAAY,QAAA,CAC/B,CACL,OAAA,CAASnF,CAAAA,CAAoB0G,CAAAA,CAAS,UAAU,EAChD,WAAA,CAAa,IACf,EAGK,CACL,OAAA,CAAShD,EAAkByB,CAAO,CAAA,CAClC,WAAA,CAAa,KACf,CACF,CAEQ,qBACNA,CAAAA,CACAzG,CAAAA,CACA6G,EACAF,CAAAA,CAA0B,KAAA,CAClB,CACR,IAAMW,CAAAA,CAAiBjG,CAAAA,CAAmBM,CAAAA,CAAsB3B,CAAI,CAAC,EAKrE,GAJIyG,CAAAA,GAAY,UAIZE,CAAAA,CACF,OAAOW,EAGT,IAAIR,CAAAA,CAAcQ,CAAAA,CAClB,IAAA,IAAWY,CAAAA,IAAU/C,EAAAA,CAAgBsB,CAAO,CAAA,CAC1C,GAAIK,EAAY,UAAA,CAAWoB,CAAM,EAAG,CAClCpB,CAAAA,CAAczF,CAAAA,CAAmByF,CAAAA,CAAY,KAAA,CAAMoB,CAAAA,CAAO,MAAM,CAAC,CAAA,CACjE,KACF,CAGF,IAAMA,EAASrB,CAAAA,CACX3B,CAAAA,CAAoBuB,CAAO,CAAA,CAC3BxB,EAAAA,CAAmBwB,CAAO,EAE9B,OAAIK,CAAAA,CAAY,UAAA,CAAWoB,CAAM,CAAA,CACxBpB,CAAAA,CAGF,GAAGoB,CAAM,CAAA,EAAGpB,CAAW,CAAA,CAChC,CAEQ,yBAAA,CACNL,EACAzG,CAAAA,CACS,CACT,IAAMsH,CAAAA,CAAiBjG,CAAAA,CAAmBM,EAAsB3B,CAAI,CAAC,CAAA,CAC/DmI,CAAAA,CAAc3C,EAAAA,CAAiB,IAAA,CAAM4C,GACzC,IAAA,CAAK,iBAAA,CACHd,EACApC,CAAAA,CAAoBkD,CAAc,CACpC,CACF,CAAA,CAEA,OAAO,CAAA,EAAQD,CAAAA,EAAeA,CAAAA,GAAgB1B,EAChD,CAEQ,iBAAA,CAAkBzG,EAAckI,CAAAA,CAAyB,CAC/D,OACEA,CAAAA,CAAO,MAAA,CAAS,CAAA,GAAMlI,CAAAA,GAASkI,CAAAA,EAAUlI,CAAAA,CAAK,WAAW,CAAA,EAAGkI,CAAM,GAAG,CAAA,CAEzE,CACF,EChuBO,IAAMG,CAAAA,CAAN,KAAgB,CACrB,WAAA,CAAoB5H,CAAAA,CAA2B,CAA3B,IAAA,CAAA,OAAA,CAAAA,EAA4B,CAQhD,MAAM,OAAA,EAA0B,CAC9B,GAAM,CAAE,IAAA,CAAA6H,CAAK,CAAA,CAAI,MAAM,KAAK,OAAA,CAAQ,KAAA,CAClC,sBACF,CAAA,CACA,OAAOA,CACT,CACF,CAAA,CCCO,IAAMC,CAAAA,CAAN,KAAqB,CAC1B,YAAoB9H,CAAAA,CAA2B,CAA3B,aAAAA,EAA4B,CAQhD,MAAM,kBAAA,CACJwD,CAAAA,CAC+B,CAC/B,GAAM,CAAE,WAAA,CAAAuE,CAAY,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAExC,uCAAA,CAAyCvE,CAAO,CAAA,CAEnD,OAAOuE,CACT,CAQA,MAAM,mBAAA,CACJvE,EACgC,CAChC,GAAM,CAAE,YAAA,CAAAwE,CAAa,EAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAEzC,wCAAA,CAA0CxE,CAAO,EAEpD,OAAOwE,CACT,CAQA,MAAM,cAAA,CACJxE,EAC2B,CAC3B,GAAM,CAAE,OAAA,CAAAyE,CAAQ,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MAEpC,mCAAA,CAAqCzE,CAAO,EAE/C,OAAOyE,CACT,CAQA,MAAM,gBAAA,CACJzE,CAAAA,CAC6B,CAC7B,GAAM,CAAE,UAAA0E,CAAU,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAEtC,qCAAA,CAAuC1E,CAAO,CAAA,CAEjD,OAAO0E,CACT,CASA,MAAM,kBAAA,CACJrG,CAAAA,CACA2B,EACiC,CACjC,GAAM,CAAE,cAAA,CAAA2E,CAAe,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MAE3C,CAAA,sCAAA,EAAyCtG,CAAE,QAAS2B,CAAO,CAAA,CAE9D,OAAO2E,CACT,CASA,MAAM,oBACJtG,CAAAA,CACA2B,CAAAA,CACkC,CAClC,GAAM,CAAE,gBAAA4E,CAAgB,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAE5C,0CAA0CvG,CAAE,CAAA,KAAA,CAAA,CAAS2B,CAAO,CAAA,CAE/D,OAAO4E,CACT,CASA,MAAM,cAAA,CACJvG,CAAAA,CACA2B,CAAAA,CAC6B,CAC7B,GAAM,CAAE,UAAA,CAAA6E,CAAW,EAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CAEvC,CAAA,kCAAA,EAAqCxG,CAAE,CAAA,KAAA,CAAA,CAAS2B,CAAO,CAAA,CAE1D,OAAO6E,CACT,CAQA,MAAM,mBAAA,CACJ7E,CAAAA,CACgC,CAChC,GAAM,CAAE,YAAA,CAAA8E,CAAa,CAAA,CAAI,MAAM,KAAK,OAAA,CAAQ,KAAA,CAEzC,0CAA2C9E,CAAO,CAAA,CAErD,OAAO8E,CACT,CAQA,MAAM,sBAAA,CACJ9E,CAAAA,CACmC,CACnC,GAAM,CAAE,QAAA,CAAA+E,CAAS,CAAA,CAAI,MAAM,KAAK,OAAA,CAAQ,KAAA,CAErC,4CAAA,CAA8C/E,CAAO,CAAA,CAExD,OAAO+E,CACT,CAQA,MAAM,wBACJ/E,CAAAA,CACmC,CACnC,GAAM,CAAE,gBAAA,CAAAgF,CAAiB,CAAA,CAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CAE7C,6CAAA,CAA+ChF,CAAO,CAAA,CAEzD,OAAOgF,CACT,CAQA,MAAM,cAAA,CACJhF,CAAAA,CAC6B,CAC7B,GAAM,CAAE,UAAA,CAAAiF,CAAW,EAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CAEvC,uCAAA,CAAyCjF,CAAO,CAAA,CAEnD,OAAOiF,CACT,CACF,CAAA,CCtMO,IAAMC,CAAAA,CAAN,KAAkB,CACvB,WAAA,CAAoB1I,EAA2B,CAA3B,IAAA,CAAA,OAAA,CAAAA,EAA4B,CAahD,MAAM,MAAA,CAAOiG,EAAezC,CAAAA,CAAiD,CAC3E,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAsB,YAAA,CAAc,CACtD,KAAA,CAAAyC,CAAAA,CACA,IAAA,CAAM,EAAA,CACN,GAAGzC,CACL,CAAC,CACH,CACF,CAAA,CCUO,IAAMmF,CAAAA,CAAN,KAAkB,CACvB,WAAA,CAAoB3I,CAAAA,CAA2B,CAA3B,aAAAA,EAA4B,CAUhD,MAAM,SAAA,CAAUqB,CAAAA,CAAemC,EAA2C,CACxE,GAAI,CAACZ,CAAAA,CAAgBvB,CAAG,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA,CAE9D,GAAM,CAAE,KAAA,CAAAuH,CAAM,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MACnC,CAAA,8BAAA,EAAiCvH,CAAG,GACpC,CACE,KAAA,CAAO,MACP,GAAGmC,CACL,CACF,CAAA,CAEA,OAAOoF,CACT,CAUA,MAAM,WAAA,CACJC,EACAC,CAAAA,CACAtF,CAAAA,CACkB,CAGlB,GAAI,CAACZ,CAAAA,CAAgBiG,CAAI,CAAA,EAAK,CAACjG,EAAgBkG,CAAE,CAAA,CAC/C,MAAM,IAAI,KAAA,CAAM,mBAAmB,CAAA,CAGrC,GAAM,CAAE,MAAA,CAAAC,CAAO,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MACpC,iCAAA,CACA,CACE,MAAO,KAAA,CACP,GAAGvF,CAAAA,CACH,IAAA,CAAAqF,CAAAA,CACA,EAAA,CAAAC,CACF,CACF,CAAA,CAEA,OAAOC,CACT,CASA,MAAM,aAAA,CACJlH,CAAAA,CACA2B,CAAAA,CACkB,CAClB,GAAI,CAAC5B,EAAiBC,CAAE,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,oBAAoB,CAAA,CAE/D,GAAM,CAAE,MAAA,CAAAkH,CAAO,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MACpC,CAAA,kCAAA,EAAqClH,CAAE,GACvC,CACE,KAAA,CAAO,KAAA,CACP,GAAG2B,CACL,CACF,EAEA,OAAOuF,CACT,CASA,MAAM,UAAA,CACJtG,EACAe,CAAAA,CACkB,CAClB,GAAI,CAAChB,CAAAA,CAAiBC,CAAI,EAAG,MAAM,IAAI,MAAM,qBAAqB,CAAA,CAElE,GAAM,CAAE,MAAA,CAAAsG,CAAO,CAAA,CAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CACpC,CAAA,+BAAA,EAAkCtG,CAAI,CAAA,CAAA,CACtC,CACE,MAAO,KAAA,CACP,GAAGe,CACL,CACF,CAAA,CAEA,OAAOuF,CACT,CASA,MAAM,UAAU/G,CAAAA,CAAgBwB,CAAAA,CAA6C,CAC3E,GAAI,CAACzB,CAAAA,CAAWC,CAAG,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,aAAa,CAAA,CAEnD,GAAM,CAAE,MAAA,CAAA+G,CAAO,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CACpC,CAAA,8BAAA,EAAiC/G,CAAG,CAAA,CAAA,CACpC,CACE,MAAO,KAAA,CACP,GAAGwB,CACL,CACF,CAAA,CAEA,OAAOuF,CACT,CASA,MAAM,WACJzG,CAAAA,CACAkB,CAAAA,CACkB,CAClB,GAAI,CAACnB,EAAYC,CAAI,CAAA,CAAG,MAAM,IAAI,KAAA,CAAM,cAAc,EAEtD,GAAM,CAAE,OAAAyG,CAAO,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CACpC,CAAA,+BAAA,EAAkCzG,CAAI,CAAA,CAAA,CACtC,CACE,KAAA,CAAO,KAAA,CACP,GAAGkB,CACL,CACF,EAEA,OAAOuF,CACT,CASA,MAAM,SAAA,CAAU5G,CAAAA,CAAgBqB,EAA6C,CAC3E,GAAI,CAACtB,CAAAA,CAAWC,CAAG,EAAG,MAAM,IAAI,KAAA,CAAM,aAAa,CAAA,CAEnD,GAAM,CAAE,MAAA,CAAA4G,CAAO,EAAI,MAAM,IAAA,CAAK,QAAQ,KAAA,CACpC,CAAA,8BAAA,EAAiC5G,CAAG,CAAA,CAAA,CACpC,CACE,KAAA,CAAO,MACP,GAAGqB,CACL,CACF,CAAA,CAEA,OAAOuF,CACT,CAQA,MAAM,UAAA,CAAWvF,CAAAA,CAA2C,CAC1D,GAAM,CAAE,KAAA,CAAAoF,CAAM,CAAA,CAAI,MAAM,IAAA,CAAK,OAAA,CAAQ,MACnC,+BAAA,CACA,CACE,KAAA,CAAO,KAAA,CACP,GAAGpF,CACL,CACF,CAAA,CAEA,OAAOoF,CACT,CACF,CAAA,CCzLA,IAAMI,EAAAA,CACJ,CAAChJ,CAAAA,CAAuBgG,CAAAA,GACxB,CAACiD,CAAAA,CAAoB1J,EAAcxB,CAAAA,GAC1BiC,CAAAA,CAAQ,QACbgG,CAAAA,CACAlF,CAAAA,CAAkBvB,EAAMxB,CAAAA,EAAS,IAAI,CAAA,CACrCA,CAAAA,EAAS,KAAA,CACT,CACE,GAAGA,CAAAA,CACH,IAAA,CAAM,OACN,MAAA,CAAAkL,CAAAA,CACA,KAAM,MAAA,CACN,KAAA,CAAO,MACT,CACF,CAAA,CAGEC,EAAAA,CAAoBlJ,GAA0B,CAClD,IAAMnC,EAAMkC,CAAAA,CAAgBC,CAAAA,CAAS3C,EAAiB,IAAA,CAAK,EAAE,CAAA,CACvD8L,CAAAA,CAAkBhJ,CAAAA,CAAsB9C,CAAAA,CAAiB,KAAK,EAAA,CAAIQ,CAAG,EACrEE,CAAAA,CAAUiL,EAAAA,CAAyBhJ,EAAS,MAAM,CAAA,CAExD,OAAO,CACL,GAAGmJ,CAAAA,CACH,YAAa,CACX,GAAGA,EAAgB,WAAA,CACnB,WAAA,CAAa,CAACC,CAAAA,CAAsB5D,CAAAA,GAClCzH,CAAAA,CAAQ,MAAA,CAAQ,0CAAA,CAA4C,CAC1D,KAAAyH,CAAAA,CACA,IAAA,CAAM,CAAE,YAAA,CAAA4D,CAAa,CACvB,CAAC,CAAA,CACH,MAAA,CAAS5D,CAAAA,EACPzH,CAAAA,CAAQ,MAAA,CAAQ,kBAAmB,CAAE,IAAA,CAAAyH,CAAK,CAAC,CAAA,CAC7C,GAAA,CAAK,CAAC4D,CAAAA,CAAsBnD,CAAAA,GAC1BlI,CAAAA,CAAQ,KAAA,CAAO,gCAAA,CAAkC,CAC/C,KAAM,CAAE,YAAA,CAAAqL,CAAa,CAAA,CACrB,KAAA,CAAAnD,CACF,CAAC,CAAA,CACH,IAAA,CAAOA,CAAAA,EAAsBlI,CAAAA,CAAQ,KAAA,CAAO,kBAAmB,CAAE,KAAA,CAAAkI,CAAM,CAAC,CAAA,CACxE,QAAUA,CAAAA,EACRlI,CAAAA,CAAQ,KAAA,CAAO,qBAAA,CAAuB,CAAE,KAAA,CAAAkI,CAAM,CAAC,CAAA,CACjD,OAASmD,CAAAA,EACPrL,CAAAA,CAAQ,SAAU,gCAAA,CAAkC,CAClD,IAAA,CAAM,CAAE,YAAA,CAAAqL,CAAa,CACvB,CAAC,CAAA,CACH,eAAgB,CAACA,CAAAA,CAAsBC,IACrCtL,CAAAA,CACE,QAAA,CACA,uDAAA,CACA,CACE,IAAA,CAAM,CAAE,WAAAsL,CAAAA,CAAY,YAAA,CAAAD,CAAa,CACnC,CACF,EACF,MAAA,CAAQ,CAACA,CAAAA,CAAsB5D,CAAAA,GAC7BzH,CAAAA,CAAQ,MAAA,CAAQ,iCAAkC,CAChD,IAAA,CAAAyH,EACA,IAAA,CAAM,CAAE,aAAA4D,CAAa,CACvB,CAAC,CACL,CAAA,CACA,SAAA,CAAW,CACT,GAAGD,CAAAA,CAAgB,UACnB,MAAA,CAAS3D,CAAAA,EACPzH,EAAQ,MAAA,CAAQ,eAAA,CAAiB,CAAE,IAAA,CAAAyH,CAAK,CAAC,EAC3C,GAAA,CAAM6D,CAAAA,EACJtL,CAAAA,CAAQ,KAAA,CAAO,wBAAA,CAA0B,CACvC,MAAO,CAAE,UAAA,CAAAsL,CAAW,CACtB,CAAC,CAAA,CACH,KAAOpD,CAAAA,EAAsBlI,CAAAA,CAAQ,MAAO,eAAA,CAAiB,CAAE,MAAAkI,CAAM,CAAC,CAAA,CACtE,eAAA,CAAkBA,CAAAA,EAChBlI,CAAAA,CAAQ,MAAO,2BAAA,CAA6B,CAAE,MAAAkI,CAAM,CAAC,EACvD,SAAA,CAAYA,CAAAA,EACVlI,CAAAA,CAAQ,KAAA,CAAO,2BAAA,CAA6B,CAAE,MAAAkI,CAAM,CAAC,EACvD,MAAA,CAASoD,CAAAA,EACPtL,EAAQ,QAAA,CAAU,4BAAA,CAA8B,CAC9C,IAAA,CAAM,CAAE,UAAA,CAAAsL,CAAW,CACrB,CAAC,CACL,CAAA,CACA,KAAA,CAAO,CACL,GAAGF,CAAAA,CAAgB,KAAA,CACnB,MAAA,CAAS3D,CAAAA,EACPzH,CAAAA,CAAQ,OAAQ,WAAA,CAAa,CAAE,KAAAyH,CAAK,CAAC,EACvC,QAAA,CAAWS,CAAAA,EACTlI,CAAAA,CAAQ,KAAA,CAAO,oBAAA,CAAsB,CAAE,MAAAkI,CAAM,CAAC,EAChD,aAAA,CAAgBA,CAAAA,EACdlI,EAAQ,KAAA,CAAO,2BAAA,CAA6B,CAAE,KAAA,CAAAkI,CAAM,CAAC,EACvD,MAAA,CAASpE,CAAAA,EACP9D,EAAQ,QAAA,CAAU,gBAAA,CAAkB,CAAE,IAAA,CAAM,CAAE,EAAA,CAAA8D,CAAG,CAAE,CAAC,EACtD,MAAA,CAAQ,CAACA,CAAAA,CAAY2D,CAAAA,GACnBzH,CAAAA,CAAQ,KAAA,CAAO,iBAAkB,CAC/B,IAAA,CAAAyH,CAAAA,CACA,IAAA,CAAM,CAAE,EAAA,CAAA3D,CAAG,CACb,CAAC,CACL,CAAA,CACA,KAAA,CAAO,CACL,GAAGsH,CAAAA,CAAgB,KAAA,CACnB,MAAA,CAAS3D,CAAAA,EACPzH,CAAAA,CAAQ,OAAQ,WAAA,CAAa,CAAE,KAAAyH,CAAK,CAAC,EACvC,GAAA,CAAM8D,CAAAA,EACJvL,CAAAA,CAAQ,KAAA,CAAO,oBAAA,CAAsB,CAAE,KAAM,CAAE,MAAA,CAAAuL,CAAO,CAAE,CAAC,EAC3D,IAAA,CAAOrD,CAAAA,EAAsBlI,CAAAA,CAAQ,KAAA,CAAO,WAAA,CAAa,CAAE,MAAAkI,CAAM,CAAC,EAClE,oBAAA,CAAuBA,CAAAA,EACrBlI,EAAQ,KAAA,CAAO,8BAAA,CAAgC,CAAE,KAAA,CAAAkI,CAAM,CAAC,EAC1D,WAAA,CAAcA,CAAAA,EACZlI,EAAQ,KAAA,CAAO,oBAAA,CAAsB,CAAE,KAAA,CAAAkI,CAAM,CAAC,CAAA,CAChD,cAAA,CAAgB,CAACsD,EAAkBtD,CAAAA,GACjClI,CAAAA,CAAQ,MAAO,+BAAA,CAAiC,CAC9C,KAAM,CAAE,QAAA,CAAAwL,CAAS,CAAA,CACjB,KAAA,CAAAtD,CACF,CAAC,CAAA,CACH,OAAA,CAAS,CAACqD,CAAAA,CAAgB9D,CAAAA,GACxBzH,EAAQ,MAAA,CAAQ,4BAAA,CAA8B,CAC5C,IAAA,CAAAyH,CAAAA,CACA,IAAA,CAAM,CAAE,MAAA,CAAA8D,CAAO,CACjB,CAAC,CAAA,CACH,MAAA,CAASA,GACPvL,CAAAA,CAAQ,QAAA,CAAU,oBAAA,CAAsB,CAAE,IAAA,CAAM,CAAE,OAAAuL,CAAO,CAAE,CAAC,CAAA,CAC9D,MAAA,CAAQ,CAACA,CAAAA,CAAgB9D,CAAAA,GACvBzH,CAAAA,CAAQ,OAAA,CAAS,oBAAA,CAAsB,CACrC,KAAAyH,CAAAA,CACA,IAAA,CAAM,CAAE,MAAA,CAAA8D,CAAO,CACjB,CAAC,CACL,CAAA,CACA,WAAA,CAAa,CACX,GAAGH,EAAgB,WAAA,CACnB,UAAA,CAAa3D,GACXzH,CAAAA,CAAQ,MAAA,CAAQ,uBAAwB,CAAE,IAAA,CAAAyH,CAAK,CAAC,CAAA,CAClD,GAAA,CAAMS,GAAsBlI,CAAAA,CAAQ,KAAA,CAAO,kBAAmB,CAAE,KAAA,CAAAkI,CAAM,CAAC,CAAA,CACvE,MAAA,CAAST,CAAAA,EACPzH,CAAAA,CAAQ,MAAA,CAAQ,kBAAmB,CAAE,IAAA,CAAAyH,CAAK,CAAC,CAC/C,EACA,GAAA,CAAA3H,CAAAA,CACA,eAAA,CAAiB,CACf,GAAGsL,CAAAA,CAAgB,gBACnB,MAAA,CAAS3D,CAAAA,EACPzH,EAAQ,MAAA,CAAQ,sBAAA,CAAwB,CAAE,IAAA,CAAAyH,CAAK,CAAC,CAAA,CAClD,IAAA,CAAOS,CAAAA,EACLlI,EAAQ,KAAA,CAAO,sBAAA,CAAwB,CAAE,KAAA,CAAAkI,CAAM,CAAC,CACpD,CACF,CACF,CAAA,CAEMuD,EAAAA,CACJxJ,CAAAA,EACuB,CACvB,IAAMnC,CAAAA,CAAMkC,CAAAA,CAAgBC,CAAAA,CAAS3C,CAAAA,CAAiB,YAAA,CAAa,EAAE,CAAA,CAC/D8L,CAAAA,CAAkBhJ,CAAAA,CACtB9C,CAAAA,CAAiB,YAAA,CAAa,EAAA,CAC9BQ,CACF,CAAA,CAEA,OAAO,CACL,QAAA,CAAUsL,CAAAA,CAAgB,UAAY,EAAC,CACvC,KAAA,CAAOA,CAAAA,CAAgB,KAAA,EAAS,GAChC,GAAA,CAAAtL,CAAAA,CACA,MAAOsL,CAAAA,CAAgB,KAAA,EAAS,EAAC,CACjC,IAAA,CAAMA,CAAAA,CAAgB,IAAA,EAAQ,EAAC,CAC/B,MAAOA,CAAAA,CAAgB,KAAA,EAAS,EAClC,CACF,EAEMM,EAAAA,CAAqB,CACzBzJ,CAAAA,CACA2F,CAAAA,CACAC,CAAAA,GACG,CACH,IAAM/H,CAAAA,CAAMkC,CAAAA,CAAgBC,EAAS3C,CAAAA,CAAiB,MAAA,CAAO,EAAE,CAAA,CAEzDqM,CAAAA,CAAgB,MACpBlE,CAAAA,CACAhC,CAAAA,CAGI,KACD,CAiBH,GAAIA,EAAQ,oBAAA,EAAwB,CAACgC,CAAAA,CAAK,GAAA,CAAI,eAAe,CAAA,CAC3D,MAAM,IAAI,KAAA,CAAM,wBAAwB,CAAA,CAG1C,IAAMmE,CAAAA,CAAsBnE,EAAK,GAAA,CAAI,eAAe,CAAA,EAAK,MAAA,CACnDM,CAAAA,CAAgBtC,CAAAA,CAAQ,qBAC1B,MAAMxD,CAAAA,CAAQ,gBAAe,CAC7B,IAAA,CACE7B,EACJqF,CAAAA,CAAQ,oBAAA,EAAwBmG,CAAAA,CAC5B,CAAE,GAAI7D,CAAAA,EAAiB,EAAC,CAAI,YAAA,CAAc6D,CAAoB,CAAA,CAC9D7D,CAAAA,CAEA5H,EAAQ,MAAM8B,CAAAA,CAAQ,OAAA,CAC1B,QAAA,CACA,eAAA,CACA,MAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,UACuB,iBAAkB4F,CAAAA,CACnC,CACE,QAAA,CAAUA,CAAAA,CAAO,YAAA,CACjB,QAAA,CAAUA,EAAO,QACnB,CAAA,CACA,OACN,IAAA,CAAAJ,CAAAA,CACA,YAAa,mCAAA,CACb,MAAA,CAAQ,MACV,CACF,CAAA,CAEA,OAAA,MAAMxF,EAAQ,cAAA,CAAe/B,CAAAA,CAAcC,EAAOC,CAAc,CAAC,EAC1DD,CACT,CAAA,CAEA,OAAO,CACL,YAAA,CAAe+H,CAAAA,EACbjG,EAAQ,eAAA,CAAgB,QAAA,CAAU,eAAgBiG,CAAkB,CAAA,CACtE,aAAelF,CAAAA,EAKT,CACJ,IAAMyE,CAAAA,CAAO,IAAI,eAAA,CAAgB,CAC/B,IAAA,CAAMzE,CAAAA,CAAO,KACb,UAAA,CAAY,oBAAA,CACZ,aAAcA,CAAAA,CAAO,WACvB,CAAC,CAAA,CAED,OAAIA,CAAAA,CAAO,cACTyE,CAAAA,CAAK,GAAA,CAAI,eAAA,CAAiBzE,CAAAA,CAAO,YAAY,CAAA,CAG3CA,EAAO,KAAA,EACTyE,CAAAA,CAAK,GAAA,CAAI,OAAA,CAASzE,CAAAA,CAAO,KAAK,EAGzB2I,CAAAA,CAAclE,CAAAA,CAAM,CAA4B,CAAC,CAC1D,CAAA,CACA,WAAA,CAAcnH,CAAAA,EACZ2B,CAAAA,CAAQ,OAAA,CAAQ,SAAU,WAAA,CAAa,MAAA,CAAW,CAChD,WAAA,CAAA3B,CAAAA,CACA,KAAM,MAAA,CACN,MAAA,CAAQ,KACV,CAAC,CAAA,CACH,UAAA,CAAaH,GAAkB,CAC7B,GAAyB,EAAE,iBAAkB0H,CAAAA,CAAAA,CAC3C,MAAM,IAAI,KAAA,CACR,gEACF,CAAA,CAGF,OAAO5F,CAAAA,CAAQ,OAAA,CAAQ,SAAU,oBAAA,CAAsB,MAAA,CAAW,CAChE,IAAA,CAAM,MAAA,CACN,SAAA,CAAW,CACT,QAAA,CAAU4F,CAAAA,CAAO,aACjB,QAAA,CAAUA,CAAAA,CAAO,QACnB,CAAA,CACA,IAAA,CAAM,IAAI,eAAA,CAAgB,CAAE,KAAA,CAAA1H,CAAM,CAAC,CAAA,CACnC,YAAa,mCAAA,CACb,MAAA,CAAQ,MACV,CAAC,CACH,EACA,MAAA,CAAS+H,CAAAA,EACPjG,CAAAA,CAAQ,OAAA,CAAQ,QAAA,CAAU,yBAAA,CAA2BiG,EAAO,CAC1D,IAAA,CAAM,OACN,MAAA,CAAQ,KACV,CAAC,CAAA,CACH,GAAA,CAAApI,CAAAA,CACA,OAAA,CAAS,MAAOU,CAAAA,EAA0B,CACxC,IAAMJ,CAAAA,CAAiB,MAAM6B,CAAAA,CAAQ,cAAA,EAAe,CAC9CwF,EAAO,IAAI,eAAA,CAAgB,CAC/B,UAAA,CAAY,eAAA,CACZ,aAAA,CAAejH,GAAgBJ,CAAAA,EAAgB,YAAA,EAAgB,EACjE,CAAC,CAAA,CAED,OAAOuL,CAAAA,CAAclE,CAAAA,CAAM,CAEzB,oBAAA,CAAsB,IACxB,CAAC,CACH,CACF,CACF,CAAA,CAEMoE,GAAsB,CAC1B/F,CAAAA,CACAkF,CAAAA,CACAlB,CAAAA,CACAgC,CAAAA,CACAC,CAAAA,CACAjM,KAEO,CACL,KAAA,CAAO,CACL,iBAAA,CAAmB,CACjB,IAAK,CAAC0F,CAAAA,CAAmBV,CAAAA,CAAsBoD,CAAAA,GAC7C4D,CAAAA,CAAM,yBAAA,CAA0BtG,EAAWV,CAAAA,CAAWoD,CAAK,EAC7D,IAAA,CAAM,CAAC1C,EAAmB0C,CAAAA,GACxB4D,CAAAA,CAAM,yBAAA,CAA0BtG,CAAAA,CAAW0C,CAAK,CACpD,EACA,eAAA,CAAiB,CACf,UAAW,CACTpD,CAAAA,CACAa,EACAuC,CAAAA,GAEA4D,CAAAA,CAAM,6BAAA,CAA8BhH,CAAAA,CAAWa,CAAAA,CAAcuC,CAAK,EACpE,KAAA,CAAO,CAACsD,EAAoB7F,CAAAA,CAAsBuC,CAAAA,GAChD4D,EAAM,yBAAA,CAA0BN,CAAAA,CAAU7F,CAAAA,CAAcuC,CAAK,CACjE,CACF,EACA,QAAA,CAAU,CACR,IAAK,CAACpE,CAAAA,CAAeoE,IAAsBpC,CAAAA,CAAS,QAAA,CAAShC,CAAAA,CAAIoE,CAAK,CAAA,CACtE,OAAA,CAAS,CAACpE,CAAAA,CAAeoE,CAAAA,GACvBpC,CAAAA,CAAS,YAAA,CAAahC,CAAAA,CAAIoE,CAAK,EACjC,IAAA,CAAOA,CAAAA,EAAsBpC,CAAAA,CAAS,OAAA,CAAQoC,CAAK,CACrD,EACA,IAAA,CAAM,CACJ,KAAM,IAAM4B,CAAAA,CAAK,SACnB,CAAA,CACA,GAAA,CAAAhK,CAAAA,CACA,SAAA,CAAW,CACT,aAAc,CACZ,IAAA,CAAOoI,GAAsB6D,CAAAA,CAAU,mBAAA,CAAoB7D,CAAK,CAClE,CAAA,CACA,eAAA,CAAiB,CACf,IAAA,CAAOA,CAAAA,EAAsB6D,EAAU,sBAAA,CAAuB7D,CAAK,CACrE,CAAA,CACA,SAAA,CAAW,CACT,IAAA,CAAOA,CAAAA,EAAsB6D,CAAAA,CAAU,gBAAA,CAAiB7D,CAAK,CAC/D,EACA,gBAAA,CAAkB,CAChB,KAAOA,CAAAA,EAAsB6D,CAAAA,CAAU,wBAAwB7D,CAAK,CACtE,CAAA,CACA,WAAA,CAAa,CACX,OAAA,CAAS,CAACpE,CAAAA,CAAYoE,CAAAA,GACpB6D,EAAU,kBAAA,CAAmBjI,CAAAA,CAAIoE,CAAK,CAAA,CACxC,IAAA,CAAOA,CAAAA,EAAsB6D,CAAAA,CAAU,kBAAA,CAAmB7D,CAAK,CACjE,CAAA,CACA,OAAA,CAAS,CACP,OAAA,CAAS,CAACpE,EAAYoE,CAAAA,GACpB6D,CAAAA,CAAU,cAAA,CAAejI,CAAAA,CAAIoE,CAAK,CAAA,CACpC,KAAOA,CAAAA,EAAsB6D,CAAAA,CAAU,eAAe7D,CAAK,CAC7D,EACA,YAAA,CAAc,CACZ,OAAA,CAAS,CAACpE,CAAAA,CAAYoE,CAAAA,GACpB6D,EAAU,mBAAA,CAAoBjI,CAAAA,CAAIoE,CAAK,CAAA,CACzC,IAAA,CAAOA,CAAAA,EAAsB6D,EAAU,mBAAA,CAAoB7D,CAAK,CAClE,CAAA,CACA,UAAA,CAAY,CACV,KAAOA,CAAAA,EAAsB6D,CAAAA,CAAU,eAAe7D,CAAK,CAC7D,CACF,CAAA,CACA,MAAA,CAAQ,CACN,SAAA,CAAW,CAACpE,CAAAA,CAAeoE,IACzB8C,CAAAA,CAAO,aAAA,CAAclH,EAAIoE,CAAK,CAAA,CAChC,OAAQ,CAACpE,CAAAA,CAAgBoE,CAAAA,GACvB8C,CAAAA,CAAO,UAAA,CAAWlH,CAAAA,CAAIoE,CAAK,CAAA,CAC7B,KAAA,CAAO,CAACpE,CAAAA,CAAeoE,CAAAA,GAAsB8C,EAAO,SAAA,CAAUlH,CAAAA,CAAIoE,CAAK,CAAA,CACvE,KAAA,CAAO,CAAC5E,EAAe4E,CAAAA,GAAsB8C,CAAAA,CAAO,UAAU1H,CAAAA,CAAK4E,CAAK,EACxE,MAAA,CAAQ,CAACxD,CAAAA,CAAkBwD,CAAAA,GACzB8C,CAAAA,CAAO,UAAA,CAAWtG,EAAMwD,CAAK,CAAA,CAC/B,QAAS,CAAC4C,CAAAA,CAAgBC,EAAc7C,CAAAA,GACtC8C,CAAAA,CAAO,WAAA,CAAYF,CAAAA,CAAMC,CAAAA,CAAI7C,CAAK,EACpC,KAAA,CAAO,CAACpE,EAAeoE,CAAAA,GAAsB8C,CAAAA,CAAO,UAAUlH,CAAAA,CAAIoE,CAAK,CAAA,CACvE,MAAA,CAASA,CAAAA,EAAsB8C,CAAAA,CAAO,WAAW9C,CAAK,CACxD,CACF,CAAA,CAAA,CAGW8D,EAAAA,CAAsB,CACjCpE,CAAAA,CACAC,CAAAA,GACG,CACH,IAAM5F,CAAAA,CAAU,IAAI0F,EAAaC,CAAAA,CAAMC,CAAM,CAAA,CAC7C5F,CAAAA,CAAQ,QAAA,EAAS,CACjB,IAAM6D,CAAAA,CAAW,IAAID,CAAAA,CAAc5D,CAAO,CAAA,CACpC+I,CAAAA,CAAS,IAAIJ,CAAAA,CAAY3I,CAAO,EAChC6H,CAAAA,CAAO,IAAID,EAAU5H,CAAO,CAAA,CAC5B6J,CAAAA,CAAQ,IAAIvG,CAAAA,CAAWtD,CAAO,EAC9B8J,CAAAA,CAAY,IAAIhC,EAAe9H,CAAO,CAAA,CACtCgK,EAAe,IAAItB,CAAAA,CAAY1I,CAAO,CAAA,CAEtCnC,CAAAA,CAAM,CACV,KAAM,CACJ,EAAA,CAAIkC,EAAgBC,CAAAA,CAAS3C,CAAAA,CAAiB,KAAK,EAAE,CACvD,CAAA,CACA,OAAA,CAAS,CACP,EAAA,CAAI0C,EAAgBC,CAAAA,CAAS3C,CAAAA,CAAiB,QAAQ,EAAE,CAC1D,EACA,MAAA,CAAQ,CACN,EAAA,CAAI0C,CAAAA,CAAgBC,CAAAA,CAAS3C,CAAAA,CAAiB,OAAO,EAAE,CACzD,EACA,YAAA,CAAc,CACZ,GAAI0C,CAAAA,CAAgBC,CAAAA,CAAS3C,CAAAA,CAAiB,YAAA,CAAa,EAAE,CAC/D,EACA,MAAA,CAAQ,CACN,GAAI0C,CAAAA,CAAgBC,CAAAA,CAAS3C,EAAiB,MAAA,CAAO,EAAE,CACzD,CACF,CAAA,CAEM4M,CAAAA,CAAYL,GAChB/F,CAAAA,CACAkF,CAAAA,CACAlB,EACAgC,CAAAA,CACAC,CAAAA,CACAjM,EAAI,OAAA,CAAQ,EACd,CAAA,CACMqM,CAAAA,CAAShB,EAAAA,CAAiBlJ,CAAO,EACjCmK,CAAAA,CAAiBX,EAAAA,CAAyBxJ,CAAO,CAAA,CACjDoK,CAAAA,CAAWX,EAAAA,CAAmBzJ,EAAS2F,CAAAA,CAAMC,CAAM,CAAA,CAEnDK,CAAAA,CAAQ,CAAC,CACb,MAAOoE,EAAAA,CACP,GAAG7G,EACL,CAAA,GAEoCwG,CAAAA,CAAa,OAAOK,EAAAA,CAAa7G,EAAO,CAAA,CAEtE8G,EAAAA,CAAS,MAAA,CAAO,MAAA,CAAON,EAAc,CACzC,KAAA,CAAA/D,EACA,GAAA,CAAKpI,CAAAA,CAAI,OAAO,EAAA,CAChB,EAAA,CAAI,CACF,KAAA,CAAAoI,CAAAA,CACA,GAAA,CAAKpI,EAAI,MAAA,CAAO,EAClB,CACF,CAAC,CAAA,CAED,OAAO,CACL,KAAA,CAAAgM,CAAAA,CACA,IAAA,CAAM,CACJ,GAAGK,EACH,EAAA,CAAIA,CACN,EACA,QAAA,CAAArG,CAAAA,CACA,kBAAmB,IAAM7D,CAAAA,CAAQ,iBAAA,EAAkB,CACnD,OAAA,CAAS,CACP,GAAGiK,CAAAA,CACH,EAAA,CAAIA,CACN,CAAA,CACA,cAAA,CAAgB,IAAMjK,CAAAA,CAAQ,cAAA,EAAe,CAC7C,IAAA,CAAA6H,CAAAA,CACA,MAAA,CAAQ,CACN,GAAGuC,CAAAA,CACH,GAAIA,CACN,CAAA,CACA,aAAc,CACZ,GAAGD,CAAAA,CACH,EAAA,CAAIA,CACN,CAAA,CACA,IAAAtM,CAAAA,CACA,SAAA,CAAAiM,EACA,MAAA,CAAAQ,EAAAA,CACA,OAAAvB,CACF,CACF,CAAA,CCxfO,IAAMwB,EAAAA,CAAsB3E,CAAAA,EAC1BmE,GAAoB,QAAA,CAAU,CACnC,GAAGnE,CAAAA,CACH,QAAA,CAAU,CACR,cACA,GAAGA,CAAAA,CAAO,QACZ,CACF,CAAC","file":"server.min.js","sourcesContent":["{\n \"auth\": {\n \"v1\": {\n \"operations\": {\n \"getV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections\"\n },\n \"postV1Collections\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections\"\n },\n \"postV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarks\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks\"\n },\n \"getV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"postV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}\"\n },\n \"deleteV1CollectionsByCollectionIdBookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\"\n },\n \"getV1CollectionsAll\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/collections/all\"\n },\n \"getV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks\"\n },\n \"postV1Bookmarks\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/bookmarks\"\n },\n \"deleteV1BookmarksByBookmarkId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/bookmarks/{bookmarkId}\"\n },\n \"getV1BookmarksAyahsRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/ayahs-range\"\n },\n \"getV1BookmarksBookmark\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/bookmark\"\n },\n \"getV1BookmarksCollections\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/bookmarks/collections\"\n },\n \"getV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1Preferences\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences\"\n },\n \"postV1PreferencesBulk\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/preferences/bulk\"\n },\n \"getV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"postV1ReadingSessions\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/reading-sessions\"\n },\n \"getV1GoalsGetTodaysPlan\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/get-todays-plan\"\n },\n \"putV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"deleteV1GoalsById\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/goals/{id}\"\n },\n \"postV1Goals\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/goals\"\n },\n \"getV1GoalsEstimate\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/goals/estimate\"\n },\n \"getV1Streaks\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks\"\n },\n \"getV1StreaksCurrentStreakDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/streaks/current-streak-days\"\n },\n \"getV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days\"\n },\n \"postV1ActivityDays\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/activity-days\"\n },\n \"getV1ActivityDaysEstimateReadingTime\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/activity-days/estimate-reading-time\"\n },\n \"getV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes\"\n },\n \"postV1Notes\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes\"\n },\n \"getV1NotesByVerseByVerseKey\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-verse/{verseKey}\"\n },\n \"getV1NotesByAttachedEntity\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-attached-entity\"\n },\n \"getV1NotesCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/count-within-range\"\n },\n \"getV1NotesByRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/by-range\"\n },\n \"getV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"patchV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"deleteV1NotesByNoteId\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/notes/{noteId}\"\n },\n \"postV1NotesByNoteIdPublish\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/notes/{noteId}/publish\"\n }\n },\n \"service\": \"auth\",\n \"version\": \"v1\"\n }\n },\n \"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 \"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 },\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 \"oAuth2Authorize\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/auth\"\n },\n \"getOidcUserInfo\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/userinfo\"\n },\n \"revokeOidcSession\": {\n \"auth\": \"none\",\n \"method\": \"get\",\n \"path\": \"/oauth2/sessions/logout\"\n }\n },\n \"service\": \"oauth2\",\n \"version\": \"v1\"\n }\n },\n \"quranReflect\": {\n \"v1\": {\n \"operations\": {\n \"usersControllerProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerUpdateProfile\": {\n \"auth\": \"user\",\n \"method\": \"put\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerEditProfile\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/users/profile\"\n },\n \"usersControllerRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/my-rooms\"\n },\n \"usersControllerSearch\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/search\"\n },\n \"usersControllerToggleFollow\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followeeId}/toggle-follow\"\n },\n \"usersControllerRemoveFollower\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/users/{followerId}/remove-follower\"\n },\n \"usersControllerGetUserProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}\"\n },\n \"usersControllerGetUserProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{username}/profile\"\n },\n \"usersControllerGetUserFollowers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/followers\"\n },\n \"usersControllerGetUserFollowing\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/users/{id}/following\"\n },\n \"roomsControllerAdminsAccess\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/admins-access\"\n },\n \"roomsControllerCreateNewGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerUpdateGroup\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/groups\"\n },\n \"roomsControllerCreateNewPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerUpdatePage\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/pages\"\n },\n \"roomsControllerGetRoomMembers\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/members\"\n },\n \"roomsControllerInviteUserToRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{id}/invite\"\n },\n \"roomsControllerAcceptInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/accept-invite\"\n },\n \"roomsControllerRejectInvite\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/reject-invite\"\n },\n \"roomsControllerRemoveMember\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/rooms/{id}/members/{userId}\"\n },\n \"roomsControllerGetRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/joined-rooms\"\n },\n \"roomsControllerGetRooms2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/managed-rooms\"\n },\n \"roomsControllerSearchRooms\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/search\"\n },\n \"roomsControllerGetRoomProfile\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}\"\n },\n \"roomsControllerGetRoomProfile2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}\"\n },\n \"roomsControllerAcceptByPrivateToken\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/group/{url}/accept/{token}\"\n },\n \"roomsControllerAcceptByPrivateToken2\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/page/{subdomain}/accept/{token}\"\n },\n \"roomsControllerGetRoomProfileById\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}\"\n },\n \"roomsControllerGetRoomPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/rooms/{id}/posts\"\n },\n \"roomsControllerJoinRoom\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/join\"\n },\n \"roomsControllerLeaveGroup\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{groupId}/leave\"\n },\n \"roomsControllerFollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/follow\"\n },\n \"roomsControllerUnfollowPage\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/rooms/{pageId}/unfollow\"\n },\n \"roomsControllerUpdatePostPrivacy\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/rooms/{roomId}/posts/{postId}/privacy\"\n },\n \"postsControllerFeed\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/feed\"\n },\n \"postsControllerGetRelatedPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{postId}/related\"\n },\n \"postsControllerGetLoggedinUserPosts\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/my-posts\"\n },\n \"postsControllerGetLikedState\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/liked\"\n },\n \"postsControllerFindOne\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerEdit\": {\n \"auth\": \"user\",\n \"method\": \"patch\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerDelete\": {\n \"auth\": \"user\",\n \"method\": \"delete\",\n \"path\": \"/v1/posts/{id}\"\n },\n \"postsControllerViewTracking\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/viewed/{id}\"\n },\n \"postsControllerCreate\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts\"\n },\n \"postsControllerReportAbuse\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/report\"\n },\n \"postsControllerGetUserPost\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/user-posts/{id}\"\n },\n \"postsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-like\"\n },\n \"postsControllerToggleSave\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/{id}/toggle-save\"\n },\n \"postsControllerGetComments\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/comments\"\n },\n \"postsControllerGetAllComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/{id}/all-comments\"\n },\n \"postsControllerExportMultiplePosts\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/posts/export/pdf\"\n },\n \"postsControllerGetMyPostsCountWithinRange\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/posts/count-within-range\"\n },\n \"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 \"commentsControllerDeleteComment\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/delete\"\n },\n \"commentsControllerToggleLike\": {\n \"auth\": \"user\",\n \"method\": \"post\",\n \"path\": \"/v1/comments/{id}/toggle-like\"\n },\n \"commentsControllerGet\": {\n \"auth\": \"user\",\n \"method\": \"get\",\n \"path\": \"/v1/comments/{id}/replies\"\n }\n },\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 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\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 \"versesResultsNumber\",\n]);\n\nexport const paramsToString = (params?: ApiParams): 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 = preservedKeys.has(rawKey) ? rawKey : 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 { 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 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 QuranFetchClient,\n} from \"@/types\";\nimport { isValidChapterId } from \"@/utils\";\n\ntype GetChapterOptions = BaseApiParams;\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 {GetChapterOptions} options\n * @example\n * client.chapters.findInfoById('1')\n * client.chapters.findInfoById('114')\n */\n async findInfoById(\n id: ChapterId,\n options?: GetChapterOptions,\n ): Promise<ChapterInfo> {\n if (!isValidChapterId(id)) throw new Error(\"Invalid chapter id\");\n\n const { chapterInfo } = await this.fetcher.fetch<{\n chapterInfo: ChapterInfo;\n }>(`/content/api/v4/chapters/${id}/info`, options);\n\n return chapterInfo;\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","export const API_BASE_URL = \"https://apis.quran.foundation\";\n\nexport const DEFAULT_BASE_URLS = {\n auth: \"https://apis.quran.foundation/auth\",\n content: \"https://apis.quran.foundation/content\",\n oauth2: \"https://oauth2.quran.foundation\",\n quranReflect: \"https://apis.quran.foundation/quran-reflect\",\n search: \"https://apis.quran.foundation/search\",\n} as const;\n\nexport const DIRECT_PATH_PREFIX = {\n auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\n auth: \"/auth/v1\",\n content: \"/content/api/v4\",\n oauth2: \"\",\n quranReflect: \"/quran-reflect/v1\",\n search: \"/search/v1\",\n} as const;\n\nexport const LEGACY_PREFIXES = {\n auth: [\"/auth/v1\", \"/v1\"] as const,\n content: [\"/content/api/v4\", \"/api/v4\"] as const,\n oauth2: [] as const,\n quranReflect: [\"/quran-reflect/v1\", \"/v1\"] as const,\n search: [\"/search/v1\", \"/v1\"] as const,\n} as const;\n","import type { 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 {\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 content: \"content\",\n search: \"search\",\n};\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 \"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\n return `${baseUrl}${servicePath}${paramsToString(query)}`;\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 new Error(`${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n return (await response.text()) as T;\n }\n\n const json = await response.json();\n return camelizeKeys(json as object) as T;\n }\n\n 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.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 === \"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 { 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 ChapterInfoResource,\n ChapterReciterResource,\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","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 {\n ApiParams,\n ChapterId,\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 { AuthService } from \"@/generated/public-contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { QuranAudio } from \"@/sdk/audio\";\nimport { QuranChapters } from \"@/sdk/chapters\";\nimport { QuranFetcher } from \"@/sdk/fetcher\";\nimport { QuranJuzs } from \"@/sdk/juzs\";\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: GeneratedGroup;\n raw: Record<string, RawOperation>;\n rooms: GeneratedGroup;\n tags: GeneratedGroup;\n users: GeneratedGroup;\n};\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 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: (bookmarkId: string) =>\n request(\"GET\", \"/v1/bookmarks/bookmark\", {\n query: { bookmarkId },\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: generatedGroups.posts ?? {},\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 chapters: QuranChapters,\n verses: QuranVerses,\n juzs: QuranJuzs,\n audio: QuranAudio,\n resources: QuranResources,\n raw: Record<string, RawOperation>,\n) => {\n return {\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 list: (query?: ApiParams) => chapters.findAll(query),\n },\n juzs: {\n list: () => juzs.findAll(),\n },\n raw,\n resources: {\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 },\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 chapters = new QuranChapters(fetcher);\n const verses = new QuranVerses(fetcher);\n const juzs = new QuranJuzs(fetcher);\n const audio = new QuranAudio(fetcher);\n const resources = new QuranResources(fetcher);\n const searchClient = new QuranSearch(fetcher);\n\n const raw = {\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 chapters,\n verses,\n juzs,\n audio,\n resources,\n raw.content.v4,\n );\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 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 juzs,\n oauth2: {\n ...oauth2V1,\n v1: oauth2V1,\n },\n quranReflect: {\n ...quranReflectV1,\n v1: quranReflectV1,\n },\n raw,\n resources,\n search,\n verses,\n };\n};\n","import { Language } from \"@/types\";\nimport type { ServerClientConfig } from \"@/types\";\n\nimport { createRuntimeClient } from \"./runtime/create-client\";\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"]}
@@ -0,0 +1,3 @@
1
+ import ce from'humps';var j={auth:{v1:{operations:{getV1Collections:{auth:"user",method:"get",path:"/v1/collections"},postV1Collections:{auth:"user",method:"post",path:"/v1/collections"},postV1CollectionsByCollectionIdBookmarks:{auth:"user",method:"post",path:"/v1/collections/{collectionId}/bookmarks"},deleteV1CollectionsByCollectionIdBookmarks:{auth:"user",method:"delete",path:"/v1/collections/{collectionId}/bookmarks"},getV1CollectionsByCollectionId:{auth:"user",method:"get",path:"/v1/collections/{collectionId}"},postV1CollectionsByCollectionId:{auth:"user",method:"post",path:"/v1/collections/{collectionId}"},deleteV1CollectionsByCollectionId:{auth:"user",method:"delete",path:"/v1/collections/{collectionId}"},deleteV1CollectionsByCollectionIdBookmarksByBookmarkId:{auth:"user",method:"delete",path:"/v1/collections/{collectionId}/bookmarks/{bookmarkId}"},getV1CollectionsAll:{auth:"user",method:"get",path:"/v1/collections/all"},getV1Bookmarks:{auth:"user",method:"get",path:"/v1/bookmarks"},postV1Bookmarks:{auth:"user",method:"post",path:"/v1/bookmarks"},deleteV1BookmarksByBookmarkId:{auth:"user",method:"delete",path:"/v1/bookmarks/{bookmarkId}"},getV1BookmarksAyahsRange:{auth:"user",method:"get",path:"/v1/bookmarks/ayahs-range"},getV1BookmarksBookmark:{auth:"user",method:"get",path:"/v1/bookmarks/bookmark"},getV1BookmarksCollections:{auth:"user",method:"get",path:"/v1/bookmarks/collections"},getV1Preferences:{auth:"user",method:"get",path:"/v1/preferences"},postV1Preferences:{auth:"user",method:"post",path:"/v1/preferences"},postV1PreferencesBulk:{auth:"user",method:"post",path:"/v1/preferences/bulk"},getV1ReadingSessions:{auth:"user",method:"get",path:"/v1/reading-sessions"},postV1ReadingSessions:{auth:"user",method:"post",path:"/v1/reading-sessions"},getV1GoalsGetTodaysPlan:{auth:"user",method:"get",path:"/v1/goals/get-todays-plan"},putV1GoalsById:{auth:"user",method:"put",path:"/v1/goals/{id}"},deleteV1GoalsById:{auth:"user",method:"delete",path:"/v1/goals/{id}"},postV1Goals:{auth:"user",method:"post",path:"/v1/goals"},getV1GoalsEstimate:{auth:"user",method:"get",path:"/v1/goals/estimate"},getV1Streaks:{auth:"user",method:"get",path:"/v1/streaks"},getV1StreaksCurrentStreakDays:{auth:"user",method:"get",path:"/v1/streaks/current-streak-days"},getV1ActivityDays:{auth:"user",method:"get",path:"/v1/activity-days"},postV1ActivityDays:{auth:"user",method:"post",path:"/v1/activity-days"},getV1ActivityDaysEstimateReadingTime:{auth:"user",method:"get",path:"/v1/activity-days/estimate-reading-time"},getV1Notes:{auth:"user",method:"get",path:"/v1/notes"},postV1Notes:{auth:"user",method:"post",path:"/v1/notes"},getV1NotesByVerseByVerseKey:{auth:"user",method:"get",path:"/v1/notes/by-verse/{verseKey}"},getV1NotesByAttachedEntity:{auth:"user",method:"get",path:"/v1/notes/by-attached-entity"},getV1NotesCountWithinRange:{auth:"user",method:"get",path:"/v1/notes/count-within-range"},getV1NotesByRange:{auth:"user",method:"get",path:"/v1/notes/by-range"},getV1NotesByNoteId:{auth:"user",method:"get",path:"/v1/notes/{noteId}"},patchV1NotesByNoteId:{auth:"user",method:"patch",path:"/v1/notes/{noteId}"},deleteV1NotesByNoteId:{auth:"user",method:"delete",path:"/v1/notes/{noteId}"},postV1NotesByNoteIdPublish:{auth:"user",method:"post",path:"/v1/notes/{noteId}/publish"}},service:"auth",version:"v1"}},content:{v4:{operations:{audioReciterTimestamp:{auth:"app",method:"get",path:"/audio/reciters/{reciter_id}/timestamp"},audioReciterLookup:{auth:"app",method:"get",path:"/audio/reciters/{reciter_id}/lookup"},listChapters:{auth:"app",method:"get",path:"/chapters"},getChapter:{auth:"app",method:"get",path:"/chapters/{id}"},getChapterInfo:{auth:"app",method:"get",path:"/chapters/{id}/info"},hadithReferencesByAyah:{auth:"app",method:"get",path:"/hadith_references/by_ayah/{ayah_key}"},hadithsByAyah:{auth:"app",method:"get",path:"/hadith_references/by_ayah/{ayah_key}/hadiths"},hadithCountWithinRange:{auth:"app",method:"get",path:"/hadith_references/count_within_range"},versesByChapterNumber:{auth:"app",method:"get",path:"/verses/by_chapter/{chapter_number}"},versesByPageNumber:{auth:"app",method:"get",path:"/verses/by_page/{page_number}"},versesByJuzNumber:{auth:"app",method:"get",path:"/verses/by_juz/{juz_number}"},versesByHizbNumber:{auth:"app",method:"get",path:"/verses/by_hizb/{hizb_number}"},versesByRubElHizbNumber:{auth:"app",method:"get",path:"/verses/by_rub/{rub_el_hizb_number}"},versesByManzilNumber:{auth:"app",method:"get",path:"/verses/by_manzil/{manzil_number}"},versesByRukuNumber:{auth:"app",method:"get",path:"/verses/by_ruku/{ruku_number}"},versesByRange:{auth:"app",method:"get",path:"/verses/by_range"},versesByVerseKey:{auth:"app",method:"get",path:"/verses/by_key/{verse_key}"},randomVerse:{auth:"app",method:"get",path:"/verses/random"},listJuzs:{auth:"app",method:"get",path:"/juzs"},quranVersesByScript:{auth:"app",method:"get",path:"/quran/verses/{script}"},quranVersesIndopak:{auth:"app",method:"get",path:"/quran/verses/indopak"},quranVersesIndopakNastaleeq:{auth:"app",method:"get",path:"/quran/verses/indopak_nastaleeq"},quranVersesUthmaniTajweed:{auth:"app",method:"get",path:"/quran/verses/uthmani_tajweed"},quranVersesUthmani:{auth:"app",method:"get",path:"/quran/verses/uthmani"},quranVersesUthmaniSimple:{auth:"app",method:"get",path:"/quran/verses/uthmani_simple"},quranVersesImlaei:{auth:"app",method:"get",path:"/quran/verses/imlaei"},recitations:{auth:"app",method:"get",path:"/resources/recitations"},recitationAudioFiles:{auth:"app",method:"get",path:"/quran/recitations/{recitation_id}"},translation:{auth:"app",method:"get",path:"/quran/translations/{translation_id}"},chapterReciters:{auth:"app",method:"get",path:"/resources/chapter_reciters"},tafsir:{auth:"app",method:"get",path:"/quran/tafsirs/{tafsir_id}"},quranVersesCodeV1:{auth:"app",method:"get",path:"/quran/verses/code_v1"},quranVersesCodeV2:{auth:"app",method:"get",path:"/quran/verses/code_v2"},listSurahRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_chapter/{chapter_number}"},listJuzRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_juz/{juz_number}"},listPageRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_page/{page_number}"},listRubElHizbRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_rub/{rub_el_hizb_number}"},listHizbRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_hizb/{hizb_number}"},listAyahRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_ayah/{ayah_key}"},recitationInfo:{auth:"app",method:"get",path:"/resources/recitations/{recitation_id}/info"},translationInfo:{auth:"app",method:"get",path:"/resources/translations/{translation_id}/info"},translations:{auth:"app",method:"get",path:"/resources/translations"},tafsirs:{auth:"app",method:"get",path:"/resources/tafsirs"},tafsirInfo:{auth:"app",method:"get",path:"/resources/tafsirs/{tafsir_id}/info"},recitationStyles:{auth:"app",method:"get",path:"/resources/recitation_styles"},languages:{auth:"app",method:"get",path:"/resources/languages"},chapterInfo:{auth:"app",method:"get",path:"/resources/chapter_infos"},verseMedia:{auth:"app",method:"get",path:"/resources/verse_media"},listManzilRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_manzil/{manzil_number}"},listRukuRecitation:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_ruku/{ruku_number}"},listSurahTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_chapter/{chapter_number}"},listPageTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_page/{page_number}"},listJuzTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_juz/{juz_number}"},listRubElHizbTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_rub_el_hizb/{rub_el_hizb_number}"},listHizbTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_hizb/{hizb_number}"},listManzilTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_manzil/{manzil_number}"},listRukuTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_ruku/{ruku_number}"},listAyahTranslations:{auth:"app",method:"get",path:"/translations/{resource_id}/by_ayah/{ayah_key}"},listSurahTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_chapter/{chapter_number}"},listPageTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_page/{page_number}"},listJuzTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_juz/{juz_number}"},listRubElHizbTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_rub_el_hizb/{rub_el_hizb_number}"},listHizbTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_hizb/{hizb_number}"},listManzilTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_manzil/{manzil_number}"},listRukuTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_ruku/{ruku_number}"},listAyahTafsirs:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_ayah/{ayah_key}"},getJuz:{auth:"app",method:"get",path:"/juzs/{id}"},listHizbs:{auth:"app",method:"get",path:"/hizbs"},getHizb:{auth:"app",method:"get",path:"/hizbs/{id}"},listRubElHizbs:{auth:"app",method:"get",path:"/rub_el_hizbs"},getRubElHizb:{auth:"app",method:"get",path:"/rub_el_hizbs/{id}"},listRukus:{auth:"app",method:"get",path:"/rukus"},getRuku:{auth:"app",method:"get",path:"/rukus/{id}"},listManzils:{auth:"app",method:"get",path:"/manzils"},getManzil:{auth:"app",method:"get",path:"/manzils/{id}"},getFootNote:{auth:"app",method:"get",path:"/foot_notes/{id}"},postsControllerFeed:{auth:"app",method:"get",path:"/quran-reflect/v1/posts/feed"},postsControllerFindOne:{auth:"app",method:"get",path:"/quran-reflect/v1/posts/{id}"},postsControllerGetUserPost:{auth:"app",method:"get",path:"/quran-reflect/v1/posts/user-posts/{id}"},postsControllerGetComments:{auth:"app",method:"get",path:"/quran-reflect/v1/posts/{id}/comments"},postsControllerGetAllComment:{auth:"app",method:"get",path:"/quran-reflect/v1/posts/{id}/all-comments"},chapterReciterAudioFiles:{auth:"app",method:"get",path:"/chapter_recitations/{reciter_id}"},chapterReciterAudioFile:{auth:"app",method:"get",path:"/chapter_recitations/{reciter_id}/{chapter_number}"},versesByRubElHizbNumberRubElHizb:{auth:"app",method:"get",path:"/verses/by_rub_el_hizb/{rub_el_hizb_number}"},listRubElHizbTranslationsRub:{auth:"app",method:"get",path:"/translations/{resource_id}/by_rub/{rub_el_hizb_number}"},listRubElHizbTafsirsRub:{auth:"app",method:"get",path:"/tafsirs/{resource_id}/by_rub/{rub_el_hizb_number}"},listRubElHizbRecitationRubElHizb:{auth:"app",method:"get",path:"/recitations/{recitation_id}/by_rub_el_hizb/{rub_el_hizb_number}"},listAyahAnswers:{auth:"app",method:"get",path:"/answers/by_ayah/{ayah_key}"},getAnswerById:{auth:"app",method:"get",path:"/answers/{question_id}"},countAnswersWithinRange:{auth:"app",method:"get",path:"/answers/count_within_range"}},service:"content",version:"v4"}},oauth2:{v1:{operations:{oauth2TokenExchange:{auth:"none",method:"post",path:"/oauth2/token"},introspectOauth2Token:{auth:"none",method:"post",path:"/oauth2/introspect"},oAuth2Authorize:{auth:"none",method:"get",path:"/oauth2/auth"},getOidcUserInfo:{auth:"user",method:"get",path:"/userinfo"},revokeOidcSession:{auth:"none",method:"get",path:"/oauth2/sessions/logout"}},service:"oauth2",version:"v1"}},quranReflect:{v1:{operations:{usersControllerProfile:{auth:"user",method:"get",path:"/v1/users/profile"},usersControllerUpdateProfile:{auth:"user",method:"put",path:"/v1/users/profile"},usersControllerEditProfile:{auth:"user",method:"patch",path:"/v1/users/profile"},usersControllerRooms:{auth:"user",method:"get",path:"/v1/users/my-rooms"},usersControllerSearch:{auth:"user",method:"get",path:"/v1/users/search"},usersControllerToggleFollow:{auth:"user",method:"post",path:"/v1/users/{followeeId}/toggle-follow"},usersControllerRemoveFollower:{auth:"user",method:"post",path:"/v1/users/{followerId}/remove-follower"},usersControllerGetUserProfile:{auth:"user",method:"get",path:"/v1/users/{id}"},usersControllerGetUserProfile2:{auth:"user",method:"get",path:"/v1/users/{username}/profile"},usersControllerGetUserFollowers:{auth:"user",method:"get",path:"/v1/users/{id}/followers"},usersControllerGetUserFollowing:{auth:"user",method:"get",path:"/v1/users/{id}/following"},roomsControllerAdminsAccess:{auth:"user",method:"post",path:"/v1/rooms/admins-access"},roomsControllerCreateNewGroup:{auth:"user",method:"post",path:"/v1/rooms/groups"},roomsControllerUpdateGroup:{auth:"user",method:"patch",path:"/v1/rooms/groups"},roomsControllerCreateNewPage:{auth:"user",method:"post",path:"/v1/rooms/pages"},roomsControllerUpdatePage:{auth:"user",method:"patch",path:"/v1/rooms/pages"},roomsControllerGetRoomMembers:{auth:"user",method:"get",path:"/v1/rooms/{id}/members"},roomsControllerInviteUserToRoom:{auth:"user",method:"post",path:"/v1/rooms/{id}/invite"},roomsControllerAcceptInvite:{auth:"user",method:"get",path:"/v1/rooms/{id}/accept-invite"},roomsControllerRejectInvite:{auth:"user",method:"get",path:"/v1/rooms/{id}/reject-invite"},roomsControllerRemoveMember:{auth:"user",method:"delete",path:"/v1/rooms/{id}/members/{userId}"},roomsControllerGetRooms:{auth:"user",method:"get",path:"/v1/rooms/joined-rooms"},roomsControllerGetRooms2:{auth:"user",method:"get",path:"/v1/rooms/managed-rooms"},roomsControllerSearchRooms:{auth:"user",method:"get",path:"/v1/rooms/search"},roomsControllerGetRoomProfile:{auth:"user",method:"get",path:"/v1/rooms/group/{url}"},roomsControllerGetRoomProfile2:{auth:"user",method:"get",path:"/v1/rooms/page/{subdomain}"},roomsControllerAcceptByPrivateToken:{auth:"user",method:"get",path:"/v1/rooms/group/{url}/accept/{token}"},roomsControllerAcceptByPrivateToken2:{auth:"user",method:"get",path:"/v1/rooms/page/{subdomain}/accept/{token}"},roomsControllerGetRoomProfileById:{auth:"user",method:"get",path:"/v1/rooms/{id}"},roomsControllerGetRoomPosts:{auth:"user",method:"get",path:"/v1/rooms/{id}/posts"},roomsControllerJoinRoom:{auth:"user",method:"post",path:"/v1/rooms/{groupId}/join"},roomsControllerLeaveGroup:{auth:"user",method:"post",path:"/v1/rooms/{groupId}/leave"},roomsControllerFollowPage:{auth:"user",method:"post",path:"/v1/rooms/{pageId}/follow"},roomsControllerUnfollowPage:{auth:"user",method:"post",path:"/v1/rooms/{pageId}/unfollow"},roomsControllerUpdatePostPrivacy:{auth:"user",method:"patch",path:"/v1/rooms/{roomId}/posts/{postId}/privacy"},postsControllerFeed:{auth:"user",method:"get",path:"/v1/posts/feed"},postsControllerGetRelatedPosts:{auth:"user",method:"get",path:"/v1/posts/{postId}/related"},postsControllerGetLoggedinUserPosts:{auth:"user",method:"get",path:"/v1/posts/my-posts"},postsControllerGetLikedState:{auth:"user",method:"get",path:"/v1/posts/{id}/liked"},postsControllerFindOne:{auth:"user",method:"get",path:"/v1/posts/{id}"},postsControllerEdit:{auth:"user",method:"patch",path:"/v1/posts/{id}"},postsControllerDelete:{auth:"user",method:"delete",path:"/v1/posts/{id}"},postsControllerViewTracking:{auth:"user",method:"get",path:"/v1/posts/viewed/{id}"},postsControllerCreate:{auth:"user",method:"post",path:"/v1/posts"},postsControllerReportAbuse:{auth:"user",method:"post",path:"/v1/posts/{id}/report"},postsControllerGetUserPost:{auth:"user",method:"get",path:"/v1/posts/user-posts/{id}"},postsControllerToggleLike:{auth:"user",method:"post",path:"/v1/posts/{id}/toggle-like"},postsControllerToggleSave:{auth:"user",method:"post",path:"/v1/posts/{id}/toggle-save"},postsControllerGetComments:{auth:"user",method:"get",path:"/v1/posts/{id}/comments"},postsControllerGetAllComment:{auth:"user",method:"get",path:"/v1/posts/{id}/all-comments"},postsControllerExportMultiplePosts:{auth:"user",method:"post",path:"/v1/posts/export/pdf"},postsControllerGetMyPostsCountWithinRange:{auth:"user",method:"get",path:"/v1/posts/count-within-range"},postsControllerGetMyPostsByVerse:{auth:"user",method:"get",path:"/v1/posts/by-verse/{verseKey}"},tagsControllerFind:{auth:"user",method:"get",path:"/v1/tags"},commentsControllerCreate:{auth:"user",method:"post",path:"/v1/comments"},commentsControllerDeleteComment:{auth:"user",method:"get",path:"/v1/comments/{id}/delete"},commentsControllerToggleLike:{auth:"user",method:"post",path:"/v1/comments/{id}/toggle-like"},commentsControllerGet:{auth:"user",method:"get",path:"/v1/comments/{id}/replies"}},service:"quranReflect",version:"v1"}},search:{v1:{operations:{searchControllerSearch:{auth:"app",method:"get",path:"/v1/search"}},service:"search",version:"v1"}}};var c=j,x=(o,e,t)=>({...t,operationName:t.operationName??e,service:t.service??o.service,tags:t.tags??[],version:t.version??o.version});var y=(o,e)=>{let t=`${o}:${e}`;if(typeof Buffer<"u")return Buffer.from(t).toString("base64");if(typeof globalThis.btoa=="function")return globalThis.btoa(t);throw new Error("No base64 encoder available for HTTP basic auth.")},K=(o,e)=>{if(!(o.body===void 0||o.body===null))return typeof o.body=="string"||o.body instanceof URLSearchParams?(o.contentType&&e.set("Content-Type",o.contentType),o.body):(e.set("Content-Type",o.contentType??"application/json"),JSON.stringify(o.body))},b=(o,e)=>{let t=o.expiresIn??o.expires_in,r=o.accessToken??o.access_token,s=o.idToken??o.id_token??e?.idToken,n=o.refreshToken??o.refresh_token??e?.refreshToken,a=o.tokenType??o.token_type??e?.tokenType,i=o.scope??e?.scope,p=t?Date.now()+t*1e3:e?.expiresAt;return {accessToken:r,expiresAt:p,idToken:s,refreshToken:n,scope:i,tokenType:a}};var D={delete:"remove",get:"list",patch:"update",post:"create",put:"update"},A=o=>{let e=o.replace(/([a-z0-9])([A-Z])/g,"$1 $2").replace(/[^A-Za-z0-9]+/g," ").trim().split(/\s+/).filter(Boolean);return e.length===0?"misc":e.map((t,r)=>{let s=t.toLowerCase();return r===0?s:s.charAt(0).toUpperCase()+s.slice(1)}).join("")},he=o=>{let e=A(o);return e.charAt(0).toUpperCase()+e.slice(1)},R=o=>o.startsWith("{")&&o.endsWith("}"),W=o=>{let e=o.split("/").filter(Boolean);return e[0]?.match(/^v\d+$/)?e.slice(1):e},ue=o=>{let e=W(o.path),t=e.at(-1),r=e.filter(a=>!R(a)),s=r.at(-1),n=r[0];return e.length===1?D[o.method]:e.length===2&&t&&R(t)?o.method==="get"?"get":o.method==="delete"?"remove":"update":t&&!R(t)&&s?s===n?`${D[o.method]}ById`:A(s):A(o.operationName)},m=(o,e)=>{let t={};for(let[r,s]of Object.entries(e.operations)){let n=x(e,r,s);t[r]=a=>o.requestOperation(n,a);}return t},O=(o,e)=>{let t={};for(let[r,s]of Object.entries(o.operations)){let n=x(o,r,s),a=W(n.path).filter(d=>!R(d)),i=A(a[0]??"misc"),p=ue(n),h=t[i]??{},u=p;h[u]&&(u=`${p}${he(r)}`),h[u]=e[r],t[i]=h;}return t};var{decamelize:U}=ce,v=o=>o.startsWith("/")?o:`/${o}`,g=o=>o.endsWith("/")?o.slice(0,-1):o;var P=(o,e)=>o.replace(/\{([^}]+)\}/g,(t,r)=>{let s=e?.[r];if(s===void 0)throw new Error(`Missing path parameter: ${r}`);return encodeURIComponent(String(s))}),C=o=>o.replace(/(^|\/):([A-Za-z0-9_]+)/g,"$1{$2}"),J=["wordFields","translationFields","fields"],Q=new Set([...J,...J.map(o=>U(o))]),le=new Set(["navigationalResultsNumber","versesResultsNumber"]),Z=o=>{if(!o)return "";let e=new URLSearchParams;for(let[t,r]of Object.entries(o)){if(r===void 0)continue;let s=le.has(t)?t:U(t);if(Q.has(t)||Q.has(s)){let n=Object.entries(r).filter(([,a])=>a).map(([a])=>U(a));n.length>0&&e.set(s,n.join(","));continue}typeof r=="string"?e.set(s,r):typeof r=="number"||typeof r=="boolean"?e.set(s,r.toString()):Array.isArray(r)&&e.set(s,r.join(","));}return e.size===0?"":`?${e.toString()}`};var l=o=>{let e=typeof o=="number"?o:Number(o);return !(!e||e<=0||e>114)};var z=o=>{let e=typeof o=="number"?o:Number(o);return !(!e||e<=0||e>30)};var G=o=>{let e=typeof o=="number"?o:Number(o);return !(!e||e<=0||e>240)};var B=o=>{let e=typeof o=="number"?o:Number(o);return !(!e||e<=0||e>60)};var N=o=>{let e=typeof o=="number"?o:Number(o);return !(!e||e<=0||e>604)};var Y={1:7,2:286,3:200,4:176,5:120,6:165,7:206,8:75,9:129,10:109,11:123,12:111,13:43,14:52,15:99,16:128,17:111,18:110,19:98,20:135,21:112,22:78,23:118,24:64,25:77,26:227,27:93,28:88,29:69,30:60,31:34,32:30,33:73,34:54,35:45,36:83,37:182,38:88,39:75,40:85,41:54,42:53,43:89,44:59,45:37,46:35,47:38,48:29,49:18,50:45,51:60,52:49,53:62,54:55,55:78,56:96,57:29,58:22,59:24,60:13,61:14,62:11,63:11,64:18,65:12,66:12,67:30,68:52,69:52,70:44,71:28,72:28,73:20,74:56,75:40,76:31,77:50,78:40,79:46,80:42,81:29,82:19,83:36,84:25,85:22,86:17,87:19,88:26,89:30,90:20,91:15,92:21,93:11,94:8,95:8,96:19,97:5,98:8,99:8,100:11,101:11,102:8,103:3,104:9,105:5,106:4,107:7,108:3,109:6,110:3,111:5,112:4,113:5,114:6};var f=o=>{let[e,t]=o.trim().split(":");if(!e||!t||!l(e))return false;let r=Number(t),s=Y[e];return !(!r||r<=0||r>s)};var de="https://verses.quran.com";function X(o){return o.map(e=>{let t=e.url.startsWith("http://")||e.url.startsWith("https://")?e.url:`${de}/${e.url.replace(/^\/+/,"")}`;return {...e,audioUrl:t}})}var w=class{constructor(e){this.fetcher=e;}async findAllChapterRecitations(e,t){let{audioFiles:r}=await this.fetcher.fetch(`/content/api/v4/chapter_recitations/${e}`,t);return r}async findChapterRecitationById(e,t,r){if(!l(t))throw new Error("Invalid chapter id");let{audioFile:s}=await this.fetcher.fetch(`/content/api/v4/chapter_recitations/${e}/${t}`,r);return s}async findVerseRecitationsByChapter(e,t,r){if(!l(e))throw new Error("Invalid chapter id");let s=await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_chapter/${e}`,r);return {...s,audioFiles:X(s.audioFiles)}}async findVerseRecitationsByKey(e,t,r){if(!f(e))throw new Error("Invalid verse key");let s=await this.fetcher.fetch(`/content/api/v4/recitations/${t}/by_ayah/${e}`,r);return {...s,audioFiles:X(s.audioFiles)}}};var S=class{constructor(e){this.fetcher=e;}async findAll(e){let{chapters:t}=await this.fetcher.fetch("/content/api/v4/chapters",e);return t}async findById(e,t){if(!l(e))throw new Error("Invalid chapter id");let{chapter:r}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}`,t);return r}async findInfoById(e,t){if(!l(e))throw new Error("Invalid chapter id");let{chapterInfo:r}=await this.fetcher.fetch(`/content/api/v4/chapters/${e}/info`,t);return r}};var q=async(o,e={retries:3})=>{let t;for(let r=0;r<=e.retries;r++)try{return await o()}catch(s){if(t=s,r===e.retries)throw t;await new Promise(n=>setTimeout(n,Math.pow(2,r)*1e3));}throw t};var L="https://apis.quran.foundation",k={auth:"https://apis.quran.foundation/auth",content:"https://apis.quran.foundation/content",oauth2:"https://oauth2.quran.foundation",quranReflect:"https://apis.quran.foundation/quran-reflect",search:"https://apis.quran.foundation/search"},ee={auth:"/v1",content:"/api/v4",oauth2:"",quranReflect:"/v1",search:"/v1"},F={auth:"/auth/v1",content:"/content/api/v4",oauth2:"",quranReflect:"/quran-reflect/v1",search:"/search/v1"},te={auth:["/auth/v1","/v1"],content:["/content/api/v4","/api/v4"],oauth2:[],quranReflect:["/quran-reflect/v1","/v1"],search:["/search/v1","/v1"]};var{camelizeKeys:fe}=ce,re={content:"content",search:"search"},ge="/quran-reflect/v1/posts/",ve=["/comments","/all-comments"],ye=["auth","content","quranReflect","search"],se="User session expired. Sign in again.",be="invalid_grant",Re=6e4,Ae=async o=>{try{return await o.text()}catch{return ""}},Pe=(o,e)=>o.status<400||o.status>=500||o.status===429?false:e.toLowerCase().includes(be),Ce=(o,e)=>{let t=e.trim(),r=t?`: ${t}`:"";return `Token refresh failed: ${o.status} ${o.statusText}${r}`},_=class{constructor(e,t){this.mode=e;this.config=t;this.userSession=t.userSession;}appTokens=new Map;userSession;userSessionRefreshPromise=null;getFetch(){let e=this.config.fetch??globalThis.fetch;if(typeof e!="function")throw new Error("No fetch function available. Please provide a fetch implementation or ensure global fetch is available.");return e}clearCachedTokens(){this.appTokens.clear();}async getUserSession(){let e=await this.config.storage?.getSession?.();return e!==void 0?e:this.userSession??null}async setUserSession(e){if(!this.config.storage){this.userSession=e;return}if(!e){if(this.config.storage.clearSession){await this.config.storage.clearSession(),this.userSession=null;return}await this.config.storage.setSession?.(null),this.userSession=null;return}await this.config.storage.setSession?.(e),this.userSession=e;}buildServiceUrl(e,t,r){let s=this.isCrossServiceGatewayPath(e,t),{baseUrl:n,usesGateway:a}=this.resolveServiceBaseUrl(e,s),i=this.normalizeServicePath(e,t,a,s);return `${n}${i}${Z(r)}`}async requestOperation(e,t){return this.request(e.service,P(e.path,t?.path),t?.query,{...t,auth:t?.auth==="auto"||!t?.auth?e.auth:t.auth,method:t?.method??e.method.toUpperCase(),path:void 0})}async request(e,t,r,s={}){let n=this.resolveAuthMode(e,s.auth);if(this.mode==="public"&&n==="app")throw new Error("This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.");let a=this.buildServiceUrl(e,t,r),i=await this.getRequestUserSession(n,s),p=await this.performRequest(e,a,s,n,i?.accessToken);if(this.shouldRetryUserRequest(p,n,s,i)){let d=await this.refreshStoredUserSession();p=await this.performRequest(e,a,s,n,d.accessToken);}if(!p.ok)throw new Error(`${p.status} ${p.statusText}`);if(p.status===204)return;if(!(p.headers.get("content-type")??"").includes("application/json"))return await p.text();let u=await p.json();return fe(u)}async fetch(e,t){let r=this.resolveLegacyRoute(e);return this.request(r.service,r.path,{...this.config.defaults,...t})}async performRequest(e,t,r,s,n){let a=new Headers(r.headers),i=K(r,a);return e!=="oauth2"&&a.set("x-client-id",this.config.clientId),await this.applyAuthenticationHeaders(e,s,a,{...r,accessToken:n??r.accessToken},t),this.getFetch()(t,{body:i,headers:a,method:r.method??"GET"})}resolveLegacyRoute(e){let t=v(C(e));if(t.startsWith("/content/api/v4")||t.startsWith("/api/v4"))return {path:t,service:"content"};if(t==="/v1/search"||t.startsWith("/search/v1"))return {path:t,service:"search"};if(t.startsWith("/auth/v1"))return {path:t,service:"auth"};if(t.startsWith("/quran-reflect/v1"))return {path:t,service:"quranReflect"};if(t.startsWith("/oauth2")||t.startsWith("/userinfo"))return {path:t,service:"oauth2"};throw new Error(`Unsupported SDK route: ${e}`)}resolveAuthMode(e,t="auto"){return t!=="auto"?t:e==="content"||e==="search"?"app":e==="auth"||e==="quranReflect"?"user":"none"}async getRequestUserSession(e,t){if(e!=="user"||t.accessToken||this.mode!=="server")return null;let r=await this.getUserSession();if(!r?.accessToken)throw new Error("This operation requires a user session. Sign in first or use @quranjs/api/server.");return this.shouldRefreshUserSession(r)?this.refreshStoredUserSession(r):r}shouldRefreshUserSession(e){return !e.refreshToken||!e.expiresAt?false:e.expiresAt<=Date.now()+Re}shouldRetryUserRequest(e,t,r,s){return e.status!==401||t!=="user"||r.accessToken||this.mode!=="server"?false:!!s?.refreshToken}async applyAuthenticationHeaders(e,t,r,s,n){if(s.basicAuth&&r.set("Authorization",`Basic ${y(s.basicAuth.username,s.basicAuth.password)}`),s.accessToken){this.setTokenHeaders(e,r,s.accessToken);return}if(t==="none")return;if(t==="app"){let i=await this.getAppAccessToken(e,n);this.setTokenHeaders(e,r,i);return}let a=await this.getUserSession();if(!a?.accessToken)throw new Error("This operation requires a user session. Sign in first or use @quranjs/api/server.");this.setTokenHeaders(e,r,a.accessToken);}async refreshStoredUserSession(e){if(this.userSessionRefreshPromise)return this.userSessionRefreshPromise;let t=this.executeUserSessionRefresh(e);this.userSessionRefreshPromise=t;try{return await t}finally{this.userSessionRefreshPromise===t&&(this.userSessionRefreshPromise=null);}}async executeUserSessionRefresh(e){if(this.mode!=="server"||!("clientSecret"in this.config))throw new Error("Automatic session refresh requires @quranjs/api/server or a backend.");let t=this.config.clientSecret,r=e??await this.getUserSession();if(!r?.refreshToken)throw new Error(se);let s=`${g(this.config.services?.tokenHost??this.config.services?.oauth2BaseUrl??k.oauth2)}/oauth2/token`,n=new URLSearchParams({grant_type:"refresh_token",refresh_token:r.refreshToken}),a=await q(()=>this.getFetch()(s,{body:n,headers:{Accept:"application/json",Authorization:`Basic ${y(this.config.clientId,t)}`,"Content-Type":"application/x-www-form-urlencoded"},method:"POST"}),{retries:3});if(!a.ok){let h=await Ae(a);throw Pe(a,h)?(await this.setUserSession(null),new Error(se)):new Error(Ce(a,h))}let i=await a.json(),p=b(i,r);return await this.setUserSession(p),p}setTokenHeaders(e,t,r){if(e==="oauth2"){t.set("Authorization",`Bearer ${r}`);return}t.set("x-auth-token",r);}async getAppAccessToken(e,t){if(this.mode!=="server")throw new Error("App-authenticated APIs require @quranjs/api/server or a backend.");let r=this.resolveAppScope(e,t);if(!r)throw new Error(`No client-credentials scope is configured for ${e}.`);let s=`${e}:${r}`,n=this.appTokens.get(s);if(n&&n.expiresAt>Date.now()+3e4)return n.value;if(!("clientSecret"in this.config))throw new Error("client_secret is server-only. Use @quranjs/api/server.");let a=this.config.clientSecret,i=`${g(this.config.services?.tokenHost??this.config.services?.oauth2BaseUrl??k.oauth2)}/oauth2/token`,p=new URLSearchParams({grant_type:"client_credentials",scope:r}),h=await q(()=>this.getFetch()(i,{body:p,headers:{Accept:"application/json",Authorization:`Basic ${y(this.config.clientId,a)}`,"Content-Type":"application/x-www-form-urlencoded"},method:"POST"}),{retries:3});if(!h.ok)throw new Error(`Token request failed: ${h.status} ${h.statusText}`);let u=await h.json(),d={expiresAt:Date.now()+u.expires_in*1e3,value:u.access_token};return this.appTokens.set(s,d),d.value}resolveAppScope(e,t){if(e!=="content"||!t)return re[e];let r=new URL(t).pathname;return r.startsWith(ge)?ve.some(s=>r.endsWith(s))?"comment.read":"post.read":re.content}resolveServiceBaseUrl(e,t=false){let{services:r}=this.config;if(t)return {baseUrl:g(r?.gatewayUrl??L),usesGateway:true};let s=e==="content"?r?.contentBaseUrl:e==="search"?r?.searchBaseUrl:e==="auth"?r?.authBaseUrl:e==="quranReflect"?r?.quranReflectBaseUrl:r?.oauth2BaseUrl??r?.tokenHost;return s?{baseUrl:g(s),usesGateway:false}:r?.gatewayUrl&&e!=="oauth2"?{baseUrl:g(r.gatewayUrl),usesGateway:true}:{baseUrl:k[e],usesGateway:false}}normalizeServicePath(e,t,r,s=false){let n=v(C(t));if(e==="oauth2"||s)return n;let a=n;for(let p of te[e])if(a.startsWith(p)){a=v(a.slice(p.length));break}let i=r?F[e]:ee[e];return a.startsWith(i)?a:`${i}${a}`}isCrossServiceGatewayPath(e,t){let r=v(C(t)),s=ye.find(n=>this.pathMatchesPrefix(r,F[n]));return !!(s&&s!==e)}pathMatchesPrefix(e,t){return t.length>0&&(e===t||e.startsWith(`${t}/`))}};var T=class{constructor(e){this.fetcher=e;}async findAll(){let{juzs:e}=await this.fetcher.fetch("/content/api/v4/juzs");return e}};var I=class{constructor(e){this.fetcher=e;}async findAllRecitations(e){let{recitations:t}=await this.fetcher.fetch("/content/api/v4/resources/recitations",e);return t}async findAllTranslations(e){let{translations:t}=await this.fetcher.fetch("/content/api/v4/resources/translations",e);return t}async findAllTafsirs(e){let{tafsirs:t}=await this.fetcher.fetch("/content/api/v4/resources/tafsirs",e);return t}async findAllLanguages(e){let{languages:t}=await this.fetcher.fetch("/content/api/v4/resources/languages",e);return t}async findRecitationInfo(e,t){let{recitationInfo:r}=await this.fetcher.fetch(`/content/api/v4/resources/recitations/${e}/info`,t);return r}async findTranslationInfo(e,t){let{translationInfo:r}=await this.fetcher.fetch(`/content/api/v4/resources/translations/${e}/info`,t);return r}async findTafsirInfo(e,t){let{tafsirInfo:r}=await this.fetcher.fetch(`/content/api/v4/resources/tafsirs/${e}/info`,t);return r}async findAllChapterInfos(e){let{chapterInfos:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_infos",e);return t}async findAllChapterReciters(e){let{reciters:t}=await this.fetcher.fetch("/content/api/v4/resources/chapter_reciters",e);return t}async findAllRecitationStyles(e){let{recitationStyles:t}=await this.fetcher.fetch("/content/api/v4/resources/recitation_styles",e);return t}async findVerseMedia(e){let{verseMedia:t}=await this.fetcher.fetch("/content/api/v4/resources/verse_media",e);return t}};var E=class{constructor(e){this.fetcher=e;}async search(e,t){return this.fetcher.fetch("/v1/search",{query:e,size:30,...t})}};var V=class{constructor(e){this.fetcher=e;}async findByKey(e,t){if(!f(e))throw new Error("Invalid verse key");let{verse:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_key/${e}`,{words:false,...t});return r}async findByRange(e,t,r){if(!f(e)||!f(t))throw new Error("Invalid verse key");let{verses:s}=await this.fetcher.fetch("/content/api/v4/verses/by_range",{words:false,...r,from:e,to:t});return s}async findByChapter(e,t){if(!l(e))throw new Error("Invalid chapter id");let{verses:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_chapter/${e}`,{words:false,...t});return r}async findByPage(e,t){if(!N(e))throw new Error("Invalid page number");let{verses:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_page/${e}`,{words:false,...t});return r}async findByJuz(e,t){if(!z(e))throw new Error("Invalid juz");let{verses:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_juz/${e}`,{words:false,...t});return r}async findByHizb(e,t){if(!B(e))throw new Error("Invalid hizb");let{verses:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_hizb/${e}`,{words:false,...t});return r}async findByRub(e,t){if(!G(e))throw new Error("Invalid rub");let{verses:r}=await this.fetcher.fetch(`/content/api/v4/verses/by_rub/${e}`,{words:false,...t});return r}async findRandom(e){let{verse:t}=await this.fetcher.fetch("/content/api/v4/verses/random",{words:false,...e});return t}};var we=(o,e)=>(t,r,s)=>o.request(e,P(r,s?.path),s?.query,{...s,auth:"user",method:t,path:void 0,query:void 0}),Se=o=>{let e=m(o,c.auth.v1),t=O(c.auth.v1,e),r=we(o,"auth");return {...t,collections:{...t.collections,addBookmark:(s,n)=>r("POST","/v1/collections/{collectionId}/bookmarks",{body:n,path:{collectionId:s}}),create:s=>r("POST","/v1/collections",{body:s}),get:(s,n)=>r("GET","/v1/collections/{collectionId}",{path:{collectionId:s},query:n}),list:s=>r("GET","/v1/collections",{query:s}),listAll:s=>r("GET","/v1/collections/all",{query:s}),remove:s=>r("DELETE","/v1/collections/{collectionId}",{path:{collectionId:s}}),removeBookmark:(s,n)=>r("DELETE","/v1/collections/{collectionId}/bookmarks/{bookmarkId}",{path:{bookmarkId:n,collectionId:s}}),update:(s,n)=>r("POST","/v1/collections/{collectionId}",{body:n,path:{collectionId:s}})},bookmarks:{...t.bookmarks,create:s=>r("POST","/v1/bookmarks",{body:s}),get:s=>r("GET","/v1/bookmarks/bookmark",{query:{bookmarkId:s}}),list:s=>r("GET","/v1/bookmarks",{query:s}),listCollections:s=>r("GET","/v1/bookmarks/collections",{query:s}),listRange:s=>r("GET","/v1/bookmarks/ayahs-range",{query:s}),remove:s=>r("DELETE","/v1/bookmarks/{bookmarkId}",{path:{bookmarkId:s}})},goals:{...t.goals,create:s=>r("POST","/v1/goals",{body:s}),estimate:s=>r("GET","/v1/goals/estimate",{query:s}),getTodaysPlan:s=>r("GET","/v1/goals/get-todays-plan",{query:s}),remove:s=>r("DELETE","/v1/goals/{id}",{path:{id:s}}),update:(s,n)=>r("PUT","/v1/goals/{id}",{body:n,path:{id:s}})},notes:{...t.notes,create:s=>r("POST","/v1/notes",{body:s}),get:s=>r("GET","/v1/notes/{noteId}",{path:{noteId:s}}),list:s=>r("GET","/v1/notes",{query:s}),listByAttachedEntity:s=>r("GET","/v1/notes/by-attached-entity",{query:s}),listByRange:s=>r("GET","/v1/notes/by-range",{query:s}),listByVerseKey:(s,n)=>r("GET","/v1/notes/by-verse/{verseKey}",{path:{verseKey:s},query:n}),publish:(s,n)=>r("POST","/v1/notes/{noteId}/publish",{body:n,path:{noteId:s}}),remove:s=>r("DELETE","/v1/notes/{noteId}",{path:{noteId:s}}),update:(s,n)=>r("PATCH","/v1/notes/{noteId}",{body:n,path:{noteId:s}})},preferences:{...t.preferences,bulkUpdate:s=>r("POST","/v1/preferences/bulk",{body:s}),get:s=>r("GET","/v1/preferences",{query:s}),update:s=>r("POST","/v1/preferences",{body:s})},raw:e,readingSessions:{...t.readingSessions,create:s=>r("POST","/v1/reading-sessions",{body:s}),list:s=>r("GET","/v1/reading-sessions",{query:s})}}},ke=o=>{let e=m(o,c.quranReflect.v1),t=O(c.quranReflect.v1,e);return {comments:t.comments??{},posts:t.posts??{},raw:e,rooms:t.rooms??{},tags:t.tags??{},users:t.users??{}}},_e=(o,e,t)=>{let r=m(o,c.oauth2.v1),s=async(n,a={})=>{if(a.requiresRefreshToken&&!n.get("refresh_token"))throw new Error("Missing refresh token.");let i=n.get("refresh_token")??void 0,p=a.requiresRefreshToken?await o.getUserSession():null,h=a.requiresRefreshToken&&i?{...p??{},refreshToken:i}:p,u=await o.request("oauth2","/oauth2/token",void 0,{auth:"none",basicAuth:"clientSecret"in t?{password:t.clientSecret,username:t.clientId}:void 0,body:n,contentType:"application/x-www-form-urlencoded",method:"POST"});return await o.setUserSession(b(u,h)),u};return {authorizeUrl:n=>o.buildServiceUrl("oauth2","/oauth2/auth",n),exchangeCode:n=>{let a=new URLSearchParams({code:n.code,grant_type:"authorization_code",redirect_uri:n.redirectUri});return n.codeVerifier&&a.set("code_verifier",n.codeVerifier),n.scope&&a.set("scope",n.scope),s(a,{})},getUserInfo:n=>o.request("oauth2","/userinfo",void 0,{accessToken:n,auth:"user",method:"GET"}),introspect:n=>{if(!("clientSecret"in t))throw new Error("Token introspection requires @quranjs/api/server or a backend.");return o.request("oauth2","/oauth2/introspect",void 0,{auth:"none",basicAuth:{password:t.clientSecret,username:t.clientId},body:new URLSearchParams({token:n}),contentType:"application/x-www-form-urlencoded",method:"POST"})},logout:n=>o.request("oauth2","/oauth2/sessions/logout",n,{auth:"none",method:"GET"}),raw:r,refresh:async n=>{let a=await o.getUserSession(),i=new URLSearchParams({grant_type:"refresh_token",refresh_token:n??a?.refreshToken??""});return s(i,{requiresRefreshToken:true})}}},Te=(o,e,t,r,s,n)=>({audio:{chapterRecitation:{get:(a,i,p)=>r.findChapterRecitationById(a,i,p),list:(a,i)=>r.findAllChapterRecitations(a,i)},verseRecitation:{byChapter:(a,i,p)=>r.findVerseRecitationsByChapter(a,i,p),byKey:(a,i,p)=>r.findVerseRecitationsByKey(a,i,p)}},chapters:{get:(a,i)=>o.findById(a,i),getInfo:(a,i)=>o.findInfoById(a,i),list:a=>o.findAll(a)},juzs:{list:()=>t.findAll()},raw:n,resources:{chapterInfos:{list:a=>s.findAllChapterInfos(a)},chapterReciters:{list:a=>s.findAllChapterReciters(a)},languages:{list:a=>s.findAllLanguages(a)},recitationStyles:{list:a=>s.findAllRecitationStyles(a)},recitations:{getInfo:(a,i)=>s.findRecitationInfo(a,i),list:a=>s.findAllRecitations(a)},tafsirs:{getInfo:(a,i)=>s.findTafsirInfo(a,i),list:a=>s.findAllTafsirs(a)},translations:{getInfo:(a,i)=>s.findTranslationInfo(a,i),list:a=>s.findAllTranslations(a)},verseMedia:{list:a=>s.findVerseMedia(a)}},verses:{byChapter:(a,i)=>e.findByChapter(a,i),byHizb:(a,i)=>e.findByHizb(a,i),byJuz:(a,i)=>e.findByJuz(a,i),byKey:(a,i)=>e.findByKey(a,i),byPage:(a,i)=>e.findByPage(a,i),byRange:(a,i,p)=>e.findByRange(a,i,p),byRub:(a,i)=>e.findByRub(a,i),random:a=>e.findRandom(a)}}),oe=(o,e)=>{let t=new _(o,e);t.getFetch();let r=new S(t),s=new V(t),n=new T(t),a=new w(t),i=new I(t),p=new E(t),h={auth:{v1:m(t,c.auth.v1)},content:{v4:m(t,c.content.v4)},oauth2:{v1:m(t,c.oauth2.v1)},quranReflect:{v1:m(t,c.quranReflect.v1)},search:{v1:m(t,c.search.v1)}},u=Te(r,s,n,a,i,h.content.v4),d=Se(t),H=ke(t),M=_e(t,o,e),$=({query:ne,...ie})=>p.search(ne,ie),ae=Object.assign(p,{query:$,raw:h.search.v1,v1:{query:$,raw:h.search.v1}});return {audio:a,auth:{...d,v1:d},chapters:r,clearCachedTokens:()=>t.clearCachedTokens(),content:{...u,v4:u},getUserSession:()=>t.getUserSession(),juzs:n,oauth2:{...M,v1:M},quranReflect:{...H,v1:H},raw:h,resources:i,search:ae,verses:s}};var ur=o=>oe("server",{...o,defaults:{language:"ar",...o.defaults}});
2
+ export{ur as createServerClient};//# sourceMappingURL=server.min.mjs.map
3
+ //# sourceMappingURL=server.min.mjs.map