@quranjs/api 3.2.0 → 3.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/public.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { R as RawOperation } from './runtime-utils-CxjOQDsB.mjs';
2
2
  import { j as PublicClientConfig, A as ApiParams, U as UserSession, l as TokenResponse, O as OperationRequest } from './index-BZgqOfA4.mjs';
3
+ export { h as TokenStorage } from './index-BZgqOfA4.mjs';
3
4
 
4
5
  declare const createPublicClient: (config: PublicClientConfig) => {
5
6
  audio: ((...args: unknown[]) => Promise<never>) & {
@@ -212,4 +213,4 @@ declare const createPublicClient: (config: PublicClientConfig) => {
212
213
  };
213
214
  type PublicClient = ReturnType<typeof createPublicClient>;
214
215
 
215
- export { type PublicClient, createPublicClient };
216
+ export { type PublicClient, UserSession, createPublicClient };
package/dist/public.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { R as RawOperation } from './runtime-utils-CxjOQDsB.js';
2
2
  import { j as PublicClientConfig, A as ApiParams, U as UserSession, l as TokenResponse, O as OperationRequest } from './index-BZgqOfA4.js';
3
+ export { h as TokenStorage } from './index-BZgqOfA4.js';
3
4
 
4
5
  declare const createPublicClient: (config: PublicClientConfig) => {
5
6
  audio: ((...args: unknown[]) => Promise<never>) & {
@@ -212,4 +213,4 @@ declare const createPublicClient: (config: PublicClientConfig) => {
212
213
  };
213
214
  type PublicClient = ReturnType<typeof createPublicClient>;
214
215
 
215
- export { type PublicClient, createPublicClient };
216
+ export { type PublicClient, UserSession, createPublicClient };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/generated/specs/public-operation-catalog.json","../src/generated/public-contracts.ts","../src/lib/http-utils.ts","../src/generated/contracts.ts","../src/lib/runtime-utils.ts","../src/lib/url.ts","../src/lib/service-config.ts","../src/sdk/public-fetcher.ts","../src/runtime/create-public-client.ts","../src/public.ts"],"names":["public_operation_catalog_default","publicOperationCatalog","prepareBody","request","headers","toUserSession","token","currentSession","expiresIn","accessToken","idToken","refreshToken","tokenType","scope","expiresAt","resolveCatalogOperation","section","operationName","operation","HTTP_METHOD_TO_MUTATION_NAME","toCamelCase","value","parts","part","index","lower","toPascalCase","camel","isPathParam","segment","getResourceSegments","path","segments","pickGeneratedMethodName","resourceSegments","lastSegment","literalSegments","lastLiteral","groupLiteral","createRawClient","fetcher","rawOperations","resolvedOperation","createGeneratedGroups","groups","literals","groupName","suggestedName","currentGroup","methodName","decamelize","humps","ensureLeadingSlash","removeTrailingSlash","replacePathParams","params","_match","rawKey","normalizePathTemplate","fieldsKey","fieldsKeySet","key","preservedKeys","paramsToString","options","paramsString","rawValue","fields","fieldKey","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","PublicQuranFetcher","config","doFetch","storedSession","session","service","query","baseUrl","usesGateway","servicePath","effectiveAuth","url","body","response","json","auth","services","directBaseUrl","normalizedPath","legacyPrefix","prefix","SERVER_ONLY_MESSAGE","LEGACY_BOOKMARK_GET_MESSAGE","createUserServiceRequest","method","createAuthFacade","raw","generatedGroups","collectionId","bookmarkId","id","noteId","verseKey","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createServerOnlyGuard","fail","proxy","_target","property","createPublicRuntimeClient","authV1","quranReflectV1","oauth2V1","serverOnlyGuard","createPublicClient"],"mappings":"oJAAA,IAAAA,CAAAA,CAAA,CACE,IAAA,CAAQ,CACN,GAAM,CACJ,UAAA,CAAc,CACZ,gBAAA,CAAoB,CAClB,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,iBACV,EACA,iBAAA,CAAqB,CACnB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MAAA,CACV,KAAQ,iBACV,CAAA,CACA,yCAA4C,CAC1C,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,KAAQ,0CACV,CAAA,CACA,2CAA8C,CAC5C,IAAA,CAAQ,OACR,MAAA,CAAU,QAAA,CACV,KAAQ,0CACV,CAAA,CACA,8BAAA,CAAkC,CAChC,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,gCACV,CAAA,CACA,+BAAA,CAAmC,CACjC,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,gCACV,CAAA,CACA,iCAAA,CAAqC,CACnC,IAAA,CAAQ,MAAA,CACR,OAAU,QAAA,CACV,IAAA,CAAQ,gCACV,CAAA,CACA,sDAAA,CAA0D,CACxD,KAAQ,MAAA,CACR,MAAA,CAAU,SACV,IAAA,CAAQ,uDACV,EACA,mBAAA,CAAuB,CACrB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,qBACV,CAAA,CACA,eAAkB,CAChB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,eACV,CAAA,CACA,eAAA,CAAmB,CACjB,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,eACV,CAAA,CACA,6BAAA,CAAiC,CAC/B,IAAA,CAAQ,MAAA,CACR,OAAU,QAAA,CACV,IAAA,CAAQ,4BACV,CAAA,CACA,wBAAA,CAA4B,CAC1B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,2BACV,EACA,sBAAA,CAA0B,CACxB,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,wBACV,CAAA,CACA,yBAAA,CAA6B,CAC3B,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,2BACV,CAAA,CACA,iBAAoB,CAClB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,iBACV,CAAA,CACA,iBAAA,CAAqB,CACnB,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,iBACV,CAAA,CACA,qBAAA,CAAyB,CACvB,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,sBACV,CAAA,CACA,oBAAA,CAAwB,CACtB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,sBACV,EACA,qBAAA,CAAyB,CACvB,KAAQ,MAAA,CACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,sBACV,CAAA,CACA,wBAA2B,CACzB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,2BACV,CAAA,CACA,cAAA,CAAkB,CAChB,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,gBACV,CAAA,CACA,iBAAA,CAAqB,CACnB,IAAA,CAAQ,MAAA,CACR,OAAU,QAAA,CACV,IAAA,CAAQ,gBACV,CAAA,CACA,WAAA,CAAe,CACb,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,WACV,CAAA,CACA,kBAAA,CAAsB,CACpB,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,oBACV,EACA,YAAA,CAAgB,CACd,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,aACV,CAAA,CACA,8BAAiC,CAC/B,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,iCACV,CAAA,CACA,iBAAA,CAAqB,CACnB,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,mBACV,CAAA,CACA,kBAAA,CAAsB,CACpB,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,mBACV,CAAA,CACA,oCAAA,CAAwC,CACtC,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,yCACV,EACA,UAAA,CAAc,CACZ,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,WACV,CAAA,CACA,WAAA,CAAe,CACb,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,KAAQ,WACV,CAAA,CACA,4BAA+B,CAC7B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,+BACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,8BACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,8BACV,CAAA,CACA,iBAAA,CAAqB,CACnB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,oBACV,EACA,kBAAA,CAAsB,CACpB,KAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,oBACV,CAAA,CACA,qBAAwB,CACtB,IAAA,CAAQ,OACR,MAAA,CAAU,OAAA,CACV,KAAQ,oBACV,CAAA,CACA,qBAAA,CAAyB,CACvB,IAAA,CAAQ,MAAA,CACR,OAAU,QAAA,CACV,IAAA,CAAQ,oBACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,4BACV,CACF,CAAA,CACA,QAAW,MAAA,CACX,OAAA,CAAW,IACb,CACF,CAAA,CACA,MAAA,CAAU,CACR,EAAA,CAAM,CACJ,WAAc,CACZ,mBAAA,CAAuB,CACrB,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,eACV,CAAA,CACA,qBAAA,CAAyB,CACvB,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,oBACV,EACA,eAAA,CAAmB,CACjB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,cACV,CAAA,CACA,gBAAmB,CACjB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,WACV,CAAA,CACA,kBAAqB,CACnB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,yBACV,CACF,CAAA,CACA,OAAA,CAAW,QAAA,CACX,OAAA,CAAW,IACb,CACF,CAAA,CACA,aAAgB,CACd,EAAA,CAAM,CACJ,UAAA,CAAc,CACZ,sBAAA,CAA0B,CACxB,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,mBACV,CAAA,CACA,4BAAA,CAAgC,CAC9B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,mBACV,EACA,0BAAA,CAA8B,CAC5B,KAAQ,MAAA,CACR,MAAA,CAAU,QACV,IAAA,CAAQ,mBACV,EACA,oBAAA,CAAwB,CACtB,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,oBACV,EACA,qBAAA,CAAyB,CACvB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,kBACV,CAAA,CACA,4BAA+B,CAC7B,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,sCACV,CAAA,CACA,6BAAA,CAAiC,CAC/B,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,wCACV,CAAA,CACA,6BAAA,CAAiC,CAC/B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,gBACV,EACA,8BAAA,CAAkC,CAChC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,8BACV,EACA,+BAAA,CAAmC,CACjC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,0BACV,CAAA,CACA,+BAAA,CAAmC,CACjC,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,0BACV,CAAA,CACA,4BAA+B,CAC7B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,yBACV,CAAA,CACA,6BAAA,CAAiC,CAC/B,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,kBACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,KAAQ,MAAA,CACR,MAAA,CAAU,QACV,IAAA,CAAQ,kBACV,EACA,4BAAA,CAAgC,CAC9B,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,iBACV,EACA,yBAAA,CAA6B,CAC3B,KAAQ,MAAA,CACR,MAAA,CAAU,OAAA,CACV,IAAA,CAAQ,iBACV,CAAA,CACA,8BAAiC,CAC/B,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,wBACV,CAAA,CACA,+BAAA,CAAmC,CACjC,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,uBACV,CAAA,CACA,2BAAA,CAA+B,CAC7B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,8BACV,EACA,2BAAA,CAA+B,CAC7B,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,8BACV,EACA,2BAAA,CAA+B,CAC7B,KAAQ,MAAA,CACR,MAAA,CAAU,SACV,IAAA,CAAQ,iCACV,EACA,uBAAA,CAA2B,CACzB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,wBACV,CAAA,CACA,yBAA4B,CAC1B,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,yBACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,kBACV,CAAA,CACA,6BAAA,CAAiC,CAC/B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,uBACV,EACA,8BAAA,CAAkC,CAChC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,4BACV,EACA,mCAAA,CAAuC,CACrC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,sCACV,CAAA,CACA,oCAAA,CAAwC,CACtC,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,2CACV,CAAA,CACA,kCAAqC,CACnC,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,gBACV,CAAA,CACA,2BAAA,CAA+B,CAC7B,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,sBACV,CAAA,CACA,uBAAA,CAA2B,CACzB,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,0BACV,EACA,yBAAA,CAA6B,CAC3B,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,2BACV,EACA,yBAAA,CAA6B,CAC3B,KAAQ,MAAA,CACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,2BACV,CAAA,CACA,4BAA+B,CAC7B,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,KAAQ,6BACV,CAAA,CACA,gCAAA,CAAoC,CAClC,IAAA,CAAQ,MAAA,CACR,OAAU,OAAA,CACV,IAAA,CAAQ,2CACV,CAAA,CACA,mBAAA,CAAuB,CACrB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,gBACV,EACA,8BAAA,CAAkC,CAChC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,4BACV,EACA,mCAAA,CAAuC,CACrC,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,oBACV,EACA,4BAAA,CAAgC,CAC9B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,KAAQ,sBACV,CAAA,CACA,uBAA0B,CACxB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,gBACV,CAAA,CACA,mBAAA,CAAuB,CACrB,IAAA,CAAQ,MAAA,CACR,OAAU,OAAA,CACV,IAAA,CAAQ,gBACV,CAAA,CACA,qBAAA,CAAyB,CACvB,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,SACV,IAAA,CAAQ,gBACV,EACA,2BAAA,CAA+B,CAC7B,KAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,uBACV,EACA,qBAAA,CAAyB,CACvB,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,WACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,KAAQ,uBACV,CAAA,CACA,2BAA8B,CAC5B,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,2BACV,CAAA,CACA,0BAA6B,CAC3B,IAAA,CAAQ,OACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,4BACV,CAAA,CACA,yBAAA,CAA6B,CAC3B,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,4BACV,CAAA,CACA,0BAAA,CAA8B,CAC5B,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,yBACV,CAAA,CACA,4BAAA,CAAgC,CAC9B,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,6BACV,EACA,kCAAA,CAAsC,CACpC,KAAQ,MAAA,CACR,MAAA,CAAU,OACV,IAAA,CAAQ,sBACV,CAAA,CACA,yCAAA,CAA6C,CAC3C,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,8BACV,CAAA,CACA,iCAAoC,CAClC,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,KAAA,CACV,IAAA,CAAQ,+BACV,CAAA,CACA,kBAAA,CAAsB,CACpB,IAAA,CAAQ,MAAA,CACR,OAAU,KAAA,CACV,IAAA,CAAQ,UACV,CAAA,CACA,wBAAA,CAA4B,CAC1B,IAAA,CAAQ,MAAA,CACR,OAAU,MAAA,CACV,IAAA,CAAQ,cACV,CAAA,CACA,+BAAA,CAAmC,CACjC,IAAA,CAAQ,MAAA,CACR,MAAA,CAAU,MACV,IAAA,CAAQ,0BACV,EACA,4BAAA,CAAgC,CAC9B,KAAQ,MAAA,CACR,MAAA,CAAU,MAAA,CACV,IAAA,CAAQ,+BACV,CAAA,CACA,sBAAyB,CACvB,IAAA,CAAQ,OACR,MAAA,CAAU,KAAA,CACV,KAAQ,2BACV,CACF,CAAA,CACA,OAAA,CAAW,cAAA,CACX,OAAA,CAAW,IACb,CACF,CACF,ECzfO,IAAMC,CAAAA,CACXD,ECpBK,IAAME,CAAAA,CAAc,CACzBC,CAAAA,CACAC,CAAAA,GACyC,CACzC,GAAI,EAAAD,EAAQ,IAAA,GAAS,MAAA,EAAaA,EAAQ,IAAA,GAAS,IAAA,CAAA,CAInD,OACE,OAAOA,CAAAA,CAAQ,IAAA,EAAS,UACxBA,CAAAA,CAAQ,IAAA,YAAgB,iBAEpBA,CAAAA,CAAQ,WAAA,EACVC,EAAQ,GAAA,CAAI,cAAA,CAAgBD,CAAAA,CAAQ,WAAW,CAAA,CAG1CA,CAAAA,CAAQ,OAGjBC,CAAAA,CAAQ,GAAA,CAAI,eAAgBD,CAAAA,CAAQ,WAAA,EAAe,kBAAkB,CAAA,CAC9D,IAAA,CAAK,SAAA,CAAUA,CAAAA,CAAQ,IAAI,CAAA,CACpC,EAEaE,CAAAA,CAAgB,CAC3BC,EAOAC,CAAAA,GACgB,CAChB,IAAMC,CAAAA,CAAYF,CAAAA,CAAM,WAAaA,CAAAA,CAAM,UAAA,CACrCG,EAAcH,CAAAA,CAAM,WAAA,EAAeA,EAAM,YAAA,CACzCI,CAAAA,CAAUJ,EAAM,OAAA,EAAWA,CAAAA,CAAM,QAAA,EAAYC,CAAAA,EAAgB,OAAA,CAC7DI,CAAAA,CACJL,EAAM,YAAA,EAAgBA,CAAAA,CAAM,eAAiBC,CAAAA,EAAgB,YAAA,CACzDK,EACJN,CAAAA,CAAM,SAAA,EAAaA,CAAAA,CAAM,UAAA,EAAcC,CAAAA,EAAgB,SAAA,CACnDM,EAAQP,CAAAA,CAAM,KAAA,EAASC,GAAgB,KAAA,CACvCO,CAAAA,CAAYN,EACd,IAAA,CAAK,GAAA,EAAI,CAAIA,CAAAA,CAAY,GAAA,CACzBD,CAAAA,EAAgB,UAEpB,OAAO,CACL,YAAAE,CAAAA,CACA,SAAA,CAAAK,EACA,OAAA,CAAAJ,CAAAA,CACA,aAAAC,CAAAA,CACA,KAAA,CAAAE,EACA,SAAA,CAAAD,CACF,CACF,CAAA,CC1BO,IAAMG,EAA0B,CACrCC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,IAEO,CACL,GAAGA,EACH,aAAA,CAAeA,CAAAA,CAAU,eAAiBD,CAAAA,CAC1C,OAAA,CAASC,EAAU,OAAA,EAAWF,CAAAA,CAAQ,OAAA,CACtC,IAAA,CAAME,CAAAA,CAAU,IAAA,EAAQ,EAAC,CACzB,OAAA,CAASA,EAAU,OAAA,EAAWF,CAAAA,CAAQ,OACxC,CAAA,CAAA,CC/CK,IAAMG,CAAAA,CAA2D,CACtE,MAAA,CAAQ,QAAA,CACR,IAAK,MAAA,CACL,KAAA,CAAO,SACP,IAAA,CAAM,QAAA,CACN,IAAK,QACP,CAAA,CAEaC,EAAeC,CAAAA,EAA0B,CACpD,IAAMC,CAAAA,CAAQD,CAAAA,CACX,QAAQ,oBAAA,CAAsB,OAAO,EACrC,OAAA,CAAQ,gBAAA,CAAkB,GAAG,CAAA,CAC7B,IAAA,EAAK,CACL,MAAM,KAAK,CAAA,CACX,OAAO,OAAO,CAAA,CAEjB,OAAIC,CAAAA,CAAM,MAAA,GAAW,CAAA,CACZ,MAAA,CAGFA,CAAAA,CACJ,GAAA,CAAI,CAACC,CAAAA,CAAMC,CAAAA,GAAU,CACpB,IAAMC,CAAAA,CAAQF,EAAK,WAAA,EAAY,CAC/B,OAAIC,CAAAA,GAAU,CAAA,CACLC,CAAAA,CAGFA,EAAM,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,CAAIA,EAAM,KAAA,CAAM,CAAC,CACtD,CAAC,CAAA,CACA,KAAK,EAAE,CACZ,EAEaC,CAAAA,CAAgBL,CAAAA,EAA0B,CACrD,IAAMM,CAAAA,CAAQP,CAAAA,CAAYC,CAAK,CAAA,CAC/B,OAAOM,EAAM,MAAA,CAAO,CAAC,EAAE,WAAA,EAAY,CAAIA,EAAM,KAAA,CAAM,CAAC,CACtD,CAAA,CAEaC,CAAAA,CAAeC,CAAAA,EAC1BA,EAAQ,UAAA,CAAW,GAAG,GAAKA,CAAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,CAEpCC,CAAAA,CAAuBC,CAAAA,EAA2B,CAC7D,IAAMC,CAAAA,CAAWD,EAAK,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,OAAO,EAC/C,OAAIC,CAAAA,CAAS,CAAC,CAAA,EAAG,KAAA,CAAM,QAAQ,CAAA,CACtBA,CAAAA,CAAS,MAAM,CAAC,CAAA,CAGlBA,CACT,CAAA,CAEaC,CAAAA,CACXf,CAAAA,EACW,CACX,IAAMgB,CAAAA,CAAmBJ,EAAoBZ,CAAAA,CAAU,IAAI,EACrDiB,CAAAA,CAAcD,CAAAA,CAAiB,GAAG,EAAE,CAAA,CACpCE,CAAAA,CAAkBF,CAAAA,CAAiB,MAAA,CACtCL,CAAAA,EAAY,CAACD,CAAAA,CAAYC,CAAO,CACnC,CAAA,CACMQ,CAAAA,CAAcD,EAAgB,EAAA,CAAG,EAAE,CAAA,CACnCE,CAAAA,CAAeF,CAAAA,CAAgB,CAAC,EAEtC,OAAIF,CAAAA,CAAiB,SAAW,CAAA,CACvBf,CAAAA,CAA6BD,EAAU,MAAM,CAAA,CAIpDgB,EAAiB,MAAA,GAAW,CAAA,EAC5BC,GACAP,CAAAA,CAAYO,CAAW,EAEnBjB,CAAAA,CAAU,MAAA,GAAW,MAChB,KAAA,CAGLA,CAAAA,CAAU,MAAA,GAAW,QAAA,CAChB,QAAA,CAGF,QAAA,CAGLiB,GAAe,CAACP,CAAAA,CAAYO,CAAW,CAAA,EAAKE,CAAAA,CAC1CA,IAAgBC,CAAAA,CACX,CAAA,EAAGnB,CAAAA,CAA6BD,CAAAA,CAAU,MAAM,CAAC,OAGnDE,CAAAA,CAAYiB,CAAW,EAGzBjB,CAAAA,CAAYF,CAAAA,CAAU,aAAa,CAC5C,CAAA,CAsBaqB,CAAAA,CAAkB,CAC7BC,CAAAA,CACAxB,CAAAA,GACiC,CACjC,IAAMyB,CAAAA,CAA8C,EAAC,CAErD,IAAA,GAAW,CAACxB,CAAAA,CAAeC,CAAS,IAAK,MAAA,CAAO,OAAA,CAAQF,EAAQ,UAAU,CAAA,CAAG,CAC3E,IAAM0B,CAAAA,CAAoB3B,EACxBC,CAAAA,CACAC,CAAAA,CACAC,CACF,CAAA,CAEAuB,CAAAA,CAAcxB,CAAa,EAAKd,CAAAA,EAC9BqC,CAAAA,CAAQ,iBAAiBE,CAAAA,CAAmBvC,CAAO,EACvD,CAEA,OAAOsC,CACT,CAAA,CAEaE,CAAAA,CAAwB,CACnC3B,EACAyB,CAAAA,GACoB,CACpB,IAAMG,CAAAA,CAA0B,GAEhC,IAAA,GAAW,CAAC3B,CAAAA,CAAeC,CAAS,CAAA,GAAK,MAAA,CAAO,QAAQF,CAAAA,CAAQ,UAAU,EAAG,CAC3E,IAAM0B,EAAoB3B,CAAAA,CACxBC,CAAAA,CACAC,EACAC,CACF,CAAA,CACM2B,EAAWf,CAAAA,CAAoBY,CAAAA,CAAkB,IAAI,CAAA,CAAE,MAAA,CAC1Db,GAAY,CAACD,CAAAA,CAAYC,CAAO,CACnC,CAAA,CACMiB,CAAAA,CAAY1B,EAAYyB,CAAAA,CAAS,CAAC,GAAK,MAAM,CAAA,CAC7CE,EAAgBd,CAAAA,CAAwBS,CAAiB,CAAA,CACzDM,CAAAA,CAAeJ,CAAAA,CAAOE,CAAS,GAAK,EAAC,CACvCG,EAAaF,CAAAA,CAEbC,CAAAA,CAAaC,CAAU,CAAA,GACzBA,CAAAA,CAAa,CAAA,EAAGF,CAAa,CAAA,EAAGrB,CAAAA,CAAaT,CAAa,CAAC,CAAA,CAAA,CAAA,CAG7D+B,EAAaC,CAAU,CAAA,CAAIR,EAAcxB,CAAa,CAAA,CACtD2B,EAAOE,CAAS,CAAA,CAAIE,EACtB,CAEA,OAAOJ,CACT,CAAA,CCpKA,GAAM,CAAE,UAAA,CAAAM,CAAW,CAAA,CAAIC,mBAEVC,CAAAA,CAAsB/B,CAAAA,EACjCA,EAAM,UAAA,CAAW,GAAG,EAAIA,CAAAA,CAAQ,CAAA,CAAA,EAAIA,CAAK,CAAA,CAAA,CAE9BgC,CAAAA,CAAuBhC,CAAAA,EAClCA,EAAM,QAAA,CAAS,GAAG,EAAIA,CAAAA,CAAM,KAAA,CAAM,EAAG,EAAE,CAAA,CAAIA,CAAAA,CAMtC,IAAMiC,CAAAA,CAAoB,CAC/BvB,EACAwB,CAAAA,GAEOxB,CAAAA,CAAK,QAAQ,cAAA,CAAgB,CAACyB,EAAgBC,CAAAA,GAAmB,CACtE,IAAMpC,CAAAA,CAAQkC,CAAAA,GAASE,CAAM,CAAA,CAC7B,GAAIpC,IAAU,MAAA,CACZ,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2BoC,CAAM,CAAA,CAAE,CAAA,CAGrD,OAAO,mBAAmB,MAAA,CAAOpC,CAAK,CAAC,CACzC,CAAC,EAGUqC,CAAAA,CAAyB3B,CAAAA,EACpCA,CAAAA,CAAK,OAAA,CAAQ,yBAAA,CAA2B,QAAQ,EAM5C4B,CAAAA,CAAY,CAAC,aAAc,mBAAA,CAAqB,QAAQ,EACxDC,CAAAA,CAAe,IAAI,GAAA,CAAY,CACnC,GAAGD,CAAAA,CACH,GAAGA,CAAAA,CAAU,GAAA,CAAKE,GAAQX,CAAAA,CAAWW,CAAG,CAAC,CAC3C,CAAC,EACKC,CAAAA,CAAgB,IAAI,IAAI,CAC5B,2BAAA,CACA,qBACF,CAAC,CAAA,CAEYC,EAAiB,CAC5BR,CAAAA,CACAS,CAAAA,CAAiC,EAAC,GACvB,CACX,GAAI,CAACT,CAAAA,CAAQ,OAAO,EAAA,CAEpB,IAAMU,EAAe,IAAI,eAAA,CAEzB,IAAA,GAAW,CAACR,CAAAA,CAAQS,CAAQ,IAAK,MAAA,CAAO,OAAA,CAAQX,CAAM,CAAA,CAAG,CACvD,GAAIW,CAAAA,GAAa,MAAA,CAAW,SAE5B,IAAML,CAAAA,CACJG,CAAAA,CAAQ,cAAgBF,CAAAA,CAAc,GAAA,CAAIL,CAAM,CAAA,CAC5CA,CAAAA,CACAP,EAAWO,CAAM,CAAA,CAGvB,GAAIG,CAAAA,CAAa,GAAA,CAAIH,CAAM,CAAA,EAAKG,CAAAA,CAAa,IAAIC,CAAG,CAAA,CAAG,CACrD,IAAMM,CAAAA,CAAS,MAAA,CAAO,OAAA,CAAQD,CAAmC,CAAA,CAC9D,OAAO,CAAC,EAAG7C,CAAK,CAAA,GAAMA,CAAK,CAAA,CAC3B,GAAA,CAAI,CAAC,CAAC+C,CAAQ,CAAA,GAAMlB,EAAWkB,CAAQ,CAAC,EACvCD,CAAAA,CAAO,MAAA,CAAS,GAClBF,CAAAA,CAAa,GAAA,CAAIJ,CAAAA,CAAKM,CAAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,CAExC,QACF,CAEI,OAAOD,CAAAA,EAAa,SACtBD,CAAAA,CAAa,GAAA,CAAIJ,EAAKK,CAAQ,CAAA,CACrB,OAAOA,CAAAA,EAAa,QAAA,EAEpB,OAAOA,CAAAA,EAAa,SAAA,CAD7BD,EAAa,GAAA,CAAIJ,CAAAA,CAAKK,CAAAA,CAAS,QAAA,EAAU,CAAA,CAGhC,MAAM,OAAA,CAAQA,CAAQ,GAC/BD,CAAAA,CAAa,GAAA,CAAIJ,EAAKK,CAAAA,CAAS,IAAA,CAAK,GAAG,CAAC,EAE5C,CAEA,OAAID,CAAAA,CAAa,OAAS,CAAA,CAAU,EAAA,CAC7B,IAAIA,CAAAA,CAAa,QAAA,EAAU,CAAA,CACpC,CAAA,CCpFO,IAAMI,EAAoB,CAC/B,IAAA,CAAM,qCACN,OAAA,CAAS,uCAAA,CACT,OAAQ,iCAAA,CACR,YAAA,CAAc,8CACd,MAAA,CAAQ,sCACV,EAEaC,CAAAA,CAAqB,CAChC,KAAM,KAAA,CACN,OAAA,CAAS,UACT,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,KAAA,CACd,MAAA,CAAQ,KACV,EAEaC,CAAAA,CAAsB,CACjC,KAAM,UAAA,CACN,OAAA,CAAS,kBACT,MAAA,CAAQ,EAAA,CACR,YAAA,CAAc,mBAAA,CACd,MAAA,CAAQ,YACV,EAEaC,CAAAA,CAAkB,CAC7B,KAAM,CAAC,UAAA,CAAY,KAAK,CAAA,CACxB,OAAA,CAAS,CAAC,iBAAA,CAAmB,SAAS,CAAA,CACtC,OAAQ,EAAC,CACT,aAAc,CAAC,mBAAA,CAAqB,KAAK,CAAA,CACzC,MAAA,CAAQ,CAAC,YAAA,CAAc,KAAK,CAC9B,CAAA,CCLA,GAAM,CAAE,YAAA,CAAAC,CAAa,CAAA,CAAItB,kBAAAA,CAEZuB,CAAAA,CAAN,KAAyB,CAG9B,WAAA,CAA6BC,CAAAA,CAA4B,CAA5B,IAAA,CAAA,MAAA,CAAAA,CAAAA,CAC3B,KAAK,WAAA,CAAcA,CAAAA,CAAO,YAC5B,CAJQ,WAAA,CAMD,iBAAA,EAA0B,CAEjC,CAEO,QAAA,EAA0B,CAC/B,IAAMC,CAAAA,CAAU,KAAK,MAAA,CAAO,KAAA,EAAS,UAAA,CAAW,KAAA,CAEhD,GAAI,OAAOA,GAAY,UAAA,CACrB,MAAM,IAAI,KAAA,CACR,yGACF,EAGF,OAAOA,CACT,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,KAAK,WAAA,CAAc,IAAA,CACnB,MACF,CAEA,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,aAAa,IAAI,CAAA,CAC3C,IAAA,CAAK,WAAA,CAAc,IAAA,CACnB,MACF,CAEA,MAAM,IAAA,CAAK,OAAO,OAAA,CAAQ,UAAA,GAAaA,CAAO,CAAA,CAC9C,IAAA,CAAK,WAAA,CAAcA,EACrB,CAEO,eAAA,CACLC,EACAhD,CAAAA,CACAiD,CAAAA,CACQ,CACR,GAAM,CAAE,QAAAC,CAAAA,CAAS,WAAA,CAAAC,CAAY,CAAA,CAAI,IAAA,CAAK,qBAAA,CAAsBH,CAAO,CAAA,CAC7DI,CAAAA,CAAc,KAAK,oBAAA,CAAqBJ,CAAAA,CAAShD,EAAMmD,CAAW,CAAA,CAIxE,OAAO,CAAA,EAAGD,CAAO,GAAGE,CAAW,CAAA,EAAGpB,EAAeiB,CAAAA,CAAO,CACtD,aAHAD,CAAAA,GAAY,MAAA,EAAUA,CAAAA,GAAY,cAIpC,CAAC,CAAC,EACJ,CAEA,MAAa,iBACX7D,CAAAA,CACAf,CAAAA,CACY,CACZ,OAAO,IAAA,CAAK,OAAA,CACVe,CAAAA,CAAU,OAAA,CACVoC,CAAAA,CAAkBpC,EAAU,IAAA,CAAMf,CAAAA,EAAS,IAAI,CAAA,CAC/CA,CAAAA,EAAS,MACT,CACE,GAAGA,CAAAA,CACH,IAAA,CACEA,CAAAA,EAAS,IAAA,GAAS,QAAU,CAACA,CAAAA,EAAS,KAClCe,CAAAA,CAAU,IAAA,CACVf,EAAQ,IAAA,CACd,MAAA,CACEA,GAAS,MAAA,EACRe,CAAAA,CAAU,OAAO,WAAA,EAAY,CAChC,KAAM,MACR,CACF,CACF,CAEA,MAAa,OAAA,CACX6D,CAAAA,CACAhD,CAAAA,CACAiD,CAAAA,CACA7E,EAA4B,EAAC,CACjB,CACZ,GAAIA,CAAAA,CAAQ,UACV,MAAM,IAAI,KAAA,CAAM,wDAAwD,CAAA,CAG1E,IAAMiF,EAAgB,IAAA,CAAK,eAAA,CAAgBL,EAAS5E,CAAAA,CAAQ,IAAI,EAC1DkF,CAAAA,CAAM,IAAA,CAAK,eAAA,CAAgBN,CAAAA,CAAShD,CAAAA,CAAMiD,CAAK,EAC/C5E,CAAAA,CAAU,IAAI,QAAQD,CAAAA,CAAQ,OAAO,EACrCmF,CAAAA,CAAOpF,CAAAA,CAAYC,EAASC,CAAO,CAAA,CAErC2E,IAAY,QAAA,EACd3E,CAAAA,CAAQ,IAAI,aAAA,CAAe,IAAA,CAAK,OAAO,QAAQ,CAAA,CAGjD,MAAM,IAAA,CAAK,0BAAA,CACT2E,CAAAA,CACAK,EACAhF,CAAAA,CACAD,CACF,EAEA,IAAMoF,CAAAA,CAAW,MAAM,IAAA,CAAK,QAAA,EAAS,CAAEF,CAAAA,CAAK,CAC1C,IAAA,CAAAC,EACA,OAAA,CAAAlF,CAAAA,CACA,OAAQD,CAAAA,CAAQ,MAAA,EAAU,KAC5B,CAAC,CAAA,CAED,GAAI,CAACoF,CAAAA,CAAS,EAAA,CACZ,MAAM,IAAI,KAAA,CAAM,GAAGA,CAAAA,CAAS,MAAM,IAAIA,CAAAA,CAAS,UAAU,EAAE,CAAA,CAG7D,GAAIA,EAAS,MAAA,GAAW,GAAA,CACtB,OAIF,GAAI,CAAA,CADgBA,EAAS,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,EAAK,EAAA,EAC3C,QAAA,CAAS,kBAAkB,CAAA,CAC1C,OAAQ,MAAMA,CAAAA,CAAS,IAAA,GAGzB,IAAMC,CAAAA,CAAO,MAAMD,CAAAA,CAAS,IAAA,EAAK,CACjC,OAAOd,CAAAA,CAAae,CAAc,CACpC,CAEQ,eAAA,CACNT,EACAU,CAAAA,CAAiC,MAAA,CAChB,CACjB,GAAIA,CAAAA,GAAS,MAAA,CAAQ,CACnB,GAAIA,CAAAA,GAAS,MACX,MAAM,IAAI,MACR,kHACF,CAAA,CAGF,OAAOA,CACT,CAEA,OAAIV,CAAAA,GAAY,MAAA,EAAUA,IAAY,cAAA,CAC7B,MAAA,CAGF,MACT,CAEA,MAAc,0BAAA,CACZA,CAAAA,CACAU,CAAAA,CACArF,CAAAA,CACAD,EACe,CACf,GAAIA,EAAQ,WAAA,CAAa,CACvB,KAAK,eAAA,CAAgB4E,CAAAA,CAAS3E,CAAAA,CAASD,CAAAA,CAAQ,WAAW,CAAA,CAC1D,MACF,CAEA,GAAIsF,IAAS,MAAA,CACX,OAGF,IAAMX,CAAAA,CAAU,MAAM,IAAA,CAAK,cAAA,EAAe,CAC1C,GAAI,CAACA,CAAAA,EAAS,WAAA,CACZ,MAAM,IAAI,KAAA,CACR,mFACF,CAAA,CAGF,IAAA,CAAK,gBAAgBC,CAAAA,CAAS3E,CAAAA,CAAS0E,EAAQ,WAAW,EAC5D,CAEQ,eAAA,CACNC,CAAAA,CACA3E,EACAK,CAAAA,CACM,CACN,GAAIsE,CAAAA,GAAY,QAAA,CAAU,CACxB3E,EAAQ,GAAA,CAAI,eAAA,CAAiB,UAAUK,CAAW,CAAA,CAAE,EACpD,MACF,CAEAL,CAAAA,CAAQ,GAAA,CAAI,cAAA,CAAgBK,CAAW,EACzC,CAEQ,qBAAA,CAAsBsE,EAG5B,CACA,GAAM,CAAE,QAAA,CAAAW,CAAS,CAAA,CAAI,IAAA,CAAK,MAAA,CACpBC,CAAAA,CACJZ,IAAY,MAAA,CACRW,CAAAA,EAAU,YACVX,CAAAA,GAAY,cAAA,CACVW,GAAU,mBAAA,CACTA,CAAAA,EAAU,eAAiBA,CAAAA,EAAU,SAAA,CAE9C,OAAIC,CAAAA,CACK,CACL,QAAStC,CAAAA,CAAoBsC,CAAa,EAC1C,WAAA,CAAa,KACf,CAAA,CAGED,CAAAA,EAAU,UAAA,EAAcX,CAAAA,GAAY,SAC/B,CACL,OAAA,CAAS1B,EAAoBqC,CAAAA,CAAS,UAAU,EAChD,WAAA,CAAa,IACf,CAAA,CAGK,CACL,OAAA,CAASrB,CAAAA,CAAkBU,CAAO,CAAA,CAClC,WAAA,CAAa,KACf,CACF,CAEQ,qBACNA,CAAAA,CACAhD,CAAAA,CACAmD,CAAAA,CACQ,CACR,IAAIU,CAAAA,CAAiBxC,EAAmBM,CAAAA,CAAsB3B,CAAI,CAAC,CAAA,CACnE,IAAA,IAAW8D,KAAgBrB,CAAAA,CAAgBO,CAAO,EAChD,GAAIa,CAAAA,CAAe,WAAWC,CAAY,CAAA,CAAG,CAC3CD,CAAAA,CAAiBxC,CAAAA,CACfwC,EAAe,KAAA,CAAMC,CAAAA,CAAa,MAAM,CAC1C,CAAA,CACA,KACF,CAGF,IAAMC,CAAAA,CAASZ,EACXX,CAAAA,CAAoBQ,CAAO,EAC3BT,CAAAA,CAAmBS,CAAO,CAAA,CAE9B,OAAIa,CAAAA,CAAe,UAAA,CAAWE,CAAM,CAAA,EAAKA,CAAAA,CAAO,SAAW,CAAA,CAClDF,CAAAA,CAGF,GAAGE,CAAM,CAAA,EAAGF,CAAc,CAAA,CACnC,CACF,CAAA,CCpQA,IAAMG,CAAAA,CACJ,kHAAA,CACIC,EACJ,6NAAA,CAEIC,CAAAA,CACJ,CAACzD,CAAAA,CAA6BuC,CAAAA,GAC9B,CAACmB,CAAAA,CAAoBnE,CAAAA,CAAc5B,IAC1BqC,CAAAA,CAAQ,OAAA,CACbuC,EACAzB,CAAAA,CAAkBvB,CAAAA,CAAM5B,GAAS,IAAI,CAAA,CACrCA,CAAAA,EAAS,KAAA,CACT,CACE,GAAGA,EACH,IAAA,CAAM,MAAA,CACN,OAAA+F,CAAAA,CACA,IAAA,CAAM,OACN,KAAA,CAAO,MACT,CACF,CAAA,CAGEC,CAAAA,CAAoB3D,CAAAA,EAAgC,CACxD,IAAM4D,CAAAA,CAAM7D,EAAgBC,CAAAA,CAASvC,CAAAA,CAAuB,KAAK,EAAE,CAAA,CAC7DoG,CAAAA,CAAkB1D,CAAAA,CACtB1C,CAAAA,CAAuB,IAAA,CAAK,GAC5BmG,CACF,CAAA,CACMjG,EAAU8F,CAAAA,CAAyBzD,CAAAA,CAAS,MAAM,CAAA,CAExD,OAAO,CACL,GAAG6D,CAAAA,CACH,YAAa,CACX,GAAGA,EAAgB,WAAA,CACnB,WAAA,CAAa,CAACC,CAAAA,CAAsBhB,CAAAA,GAClCnF,CAAAA,CAAQ,MAAA,CAAQ,0CAAA,CAA4C,CAC1D,KAAAmF,CAAAA,CACA,IAAA,CAAM,CAAE,YAAA,CAAAgB,CAAa,CACvB,CAAC,CAAA,CACH,MAAA,CAAShB,CAAAA,EACPnF,CAAAA,CAAQ,MAAA,CAAQ,kBAAmB,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CAC7C,IAAK,CAACgB,CAAAA,CAAsBtB,CAAAA,GAC1B7E,CAAAA,CAAQ,KAAA,CAAO,gCAAA,CAAkC,CAC/C,IAAA,CAAM,CAAE,aAAAmG,CAAa,CAAA,CACrB,MAAAtB,CACF,CAAC,EACH,IAAA,CAAOA,CAAAA,EAAsB7E,EAAQ,KAAA,CAAO,iBAAA,CAAmB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CACxE,OAAA,CAAUA,CAAAA,EACR7E,CAAAA,CAAQ,KAAA,CAAO,qBAAA,CAAuB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CACjD,MAAA,CAASsB,GACPnG,CAAAA,CAAQ,QAAA,CAAU,gCAAA,CAAkC,CAClD,IAAA,CAAM,CAAE,aAAAmG,CAAa,CACvB,CAAC,CAAA,CACH,cAAA,CAAgB,CAACA,CAAAA,CAAsBC,CAAAA,GACrCpG,CAAAA,CACE,QAAA,CACA,uDAAA,CACA,CACE,KAAM,CAAE,UAAA,CAAAoG,EAAY,YAAA,CAAAD,CAAa,CACnC,CACF,CAAA,CACF,OAAQ,CAACA,CAAAA,CAAsBhB,IAC7BnF,CAAAA,CAAQ,MAAA,CAAQ,iCAAkC,CAChD,IAAA,CAAAmF,EACA,IAAA,CAAM,CAAE,YAAA,CAAAgB,CAAa,CACvB,CAAC,CACL,CAAA,CACA,SAAA,CAAW,CACT,GAAGD,CAAAA,CAAgB,UACnB,MAAA,CAASf,CAAAA,EACPnF,EAAQ,MAAA,CAAQ,eAAA,CAAiB,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CAC3C,GAAA,CAAK,MAAON,CAAAA,EAA+B,CACzC,GAAI,OAAOA,CAAAA,EAAU,QAAA,CACnB,MAAM,IAAI,KAAA,CAAMgB,CAA2B,CAAA,CAG7C,OAAO7F,EAAQ,KAAA,CAAO,wBAAA,CAA0B,CAC9C,KAAA,CAAA6E,CACF,CAAC,CACH,CAAA,CACA,KAAOA,CAAAA,EAAsB7E,CAAAA,CAAQ,MAAO,eAAA,CAAiB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CACtE,gBAAkBA,CAAAA,EAChB7E,CAAAA,CAAQ,MAAO,2BAAA,CAA6B,CAAE,MAAA6E,CAAM,CAAC,CAAA,CACvD,SAAA,CAAYA,CAAAA,EACV7E,CAAAA,CAAQ,MAAO,2BAAA,CAA6B,CAAE,MAAA6E,CAAM,CAAC,EACvD,MAAA,CAASuB,CAAAA,EACPpG,CAAAA,CAAQ,QAAA,CAAU,4BAAA,CAA8B,CAC9C,KAAM,CAAE,UAAA,CAAAoG,CAAW,CACrB,CAAC,CACL,CAAA,CACA,KAAA,CAAO,CACL,GAAGF,CAAAA,CAAgB,MACnB,MAAA,CAASf,CAAAA,EACPnF,EAAQ,MAAA,CAAQ,WAAA,CAAa,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CACvC,QAAA,CAAWN,CAAAA,EACT7E,EAAQ,KAAA,CAAO,oBAAA,CAAsB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CAChD,aAAA,CAAgBA,CAAAA,EACd7E,CAAAA,CAAQ,KAAA,CAAO,2BAAA,CAA6B,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CACvD,MAAA,CAASwB,GACPrG,CAAAA,CAAQ,QAAA,CAAU,gBAAA,CAAkB,CAAE,IAAA,CAAM,CAAE,GAAAqG,CAAG,CAAE,CAAC,CAAA,CACtD,MAAA,CAAQ,CAACA,CAAAA,CAAYlB,CAAAA,GACnBnF,EAAQ,KAAA,CAAO,gBAAA,CAAkB,CAC/B,IAAA,CAAAmF,CAAAA,CACA,KAAM,CAAE,EAAA,CAAAkB,CAAG,CACb,CAAC,CACL,CAAA,CACA,KAAA,CAAO,CACL,GAAGH,CAAAA,CAAgB,KAAA,CACnB,OAASf,CAAAA,EACPnF,CAAAA,CAAQ,OAAQ,WAAA,CAAa,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CACvC,IAAMmB,CAAAA,EACJtG,CAAAA,CAAQ,MAAO,oBAAA,CAAsB,CAAE,KAAM,CAAE,MAAA,CAAAsG,CAAO,CAAE,CAAC,CAAA,CAC3D,KAAOzB,CAAAA,EAAsB7E,CAAAA,CAAQ,MAAO,WAAA,CAAa,CAAE,MAAA6E,CAAM,CAAC,EAClE,oBAAA,CAAuBA,CAAAA,EACrB7E,EAAQ,KAAA,CAAO,8BAAA,CAAgC,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CAC1D,WAAA,CAAcA,CAAAA,EACZ7E,CAAAA,CAAQ,KAAA,CAAO,oBAAA,CAAsB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CAChD,cAAA,CAAgB,CAAC0B,CAAAA,CAAkB1B,CAAAA,GACjC7E,CAAAA,CAAQ,KAAA,CAAO,+BAAA,CAAiC,CAC9C,KAAM,CAAE,QAAA,CAAAuG,CAAS,CAAA,CACjB,KAAA,CAAA1B,CACF,CAAC,CAAA,CACH,OAAA,CAAS,CAACyB,CAAAA,CAAgBnB,CAAAA,GACxBnF,EAAQ,MAAA,CAAQ,4BAAA,CAA8B,CAC5C,IAAA,CAAAmF,CAAAA,CACA,KAAM,CAAE,MAAA,CAAAmB,CAAO,CACjB,CAAC,EACH,MAAA,CAASA,CAAAA,EACPtG,EAAQ,QAAA,CAAU,oBAAA,CAAsB,CAAE,IAAA,CAAM,CAAE,MAAA,CAAAsG,CAAO,CAAE,CAAC,EAC9D,MAAA,CAAQ,CAACA,EAAgBnB,CAAAA,GACvBnF,CAAAA,CAAQ,QAAS,oBAAA,CAAsB,CACrC,IAAA,CAAAmF,CAAAA,CACA,IAAA,CAAM,CAAE,OAAAmB,CAAO,CACjB,CAAC,CACL,CAAA,CACA,YAAa,CACX,GAAGJ,CAAAA,CAAgB,WAAA,CACnB,UAAA,CAAaf,CAAAA,EACXnF,EAAQ,MAAA,CAAQ,sBAAA,CAAwB,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CAClD,GAAA,CAAMN,GAAsB7E,CAAAA,CAAQ,KAAA,CAAO,kBAAmB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CAAA,CACvE,OAASM,CAAAA,EACPnF,CAAAA,CAAQ,MAAA,CAAQ,iBAAA,CAAmB,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAC/C,EACA,GAAA,CAAAc,CAAAA,CACA,gBAAiB,CACf,GAAGC,CAAAA,CAAgB,eAAA,CACnB,MAAA,CAASf,CAAAA,EACPnF,EAAQ,MAAA,CAAQ,sBAAA,CAAwB,CAAE,IAAA,CAAAmF,CAAK,CAAC,CAAA,CAClD,IAAA,CAAON,CAAAA,EACL7E,CAAAA,CAAQ,KAAA,CAAO,sBAAA,CAAwB,CAAE,KAAA,CAAA6E,CAAM,CAAC,CACpD,CACF,CACF,CAAA,CAEM2B,CAAAA,CACJnE,GACuB,CACvB,IAAM4D,EAAM7D,CAAAA,CAAgBC,CAAAA,CAASvC,EAAuB,YAAA,CAAa,EAAE,EACrEoG,CAAAA,CAAkB1D,CAAAA,CACtB1C,CAAAA,CAAuB,YAAA,CAAa,EAAA,CACpCmG,CACF,EAEA,OAAO,CACL,SAAUC,CAAAA,CAAgB,QAAA,EAAY,EAAC,CACvC,KAAA,CAAOA,CAAAA,CAAgB,KAAA,EAAS,EAAC,CACjC,IAAAD,CAAAA,CACA,KAAA,CAAOC,EAAgB,KAAA,EAAS,GAChC,IAAA,CAAMA,CAAAA,CAAgB,IAAA,EAAQ,EAAC,CAC/B,KAAA,CAAOA,EAAgB,KAAA,EAAS,EAClC,CACF,CAAA,CAEMO,EAAqB,CACzBpE,CAAAA,CACAmC,IACG,CACH,IAAMyB,EAAM7D,CAAAA,CAAgBC,CAAAA,CAASvC,EAAuB,MAAA,CAAO,EAAE,EAE/D4G,CAAAA,CAAgB,MACpBvB,CAAAA,CACAtB,CAAAA,CAA8C,EAAC,GAC5C,CACH,GAAIW,CAAAA,CAAO,aAAe,QAAA,CACxB,MAAM,IAAI,KAAA,CACR,8EACF,CAAA,CAGF,GAAIX,CAAAA,CAAQ,oBAAA,EAAwB,CAACsB,CAAAA,CAAK,GAAA,CAAI,eAAe,CAAA,CAC3D,MAAM,IAAI,KAAA,CAAM,wBAAwB,CAAA,CAG1CA,CAAAA,CAAK,GAAA,CAAI,WAAA,CAAaX,EAAO,QAAQ,CAAA,CAErC,IAAMmC,CAAAA,CAAsBxB,CAAAA,CAAK,IAAI,eAAe,CAAA,EAAK,OACnDT,CAAAA,CAAgBb,CAAAA,CAAQ,qBAC1B,MAAMxB,CAAAA,CAAQ,gBAAe,CAC7B,IAAA,CACEjC,EACJyD,CAAAA,CAAQ,oBAAA,EAAwB8C,CAAAA,CAC5B,CAAE,GAAIjC,CAAAA,EAAiB,EAAC,CAAI,YAAA,CAAciC,CAAoB,CAAA,CAC9DjC,CAAAA,CAEAvE,EAAQ,MAAMkC,CAAAA,CAAQ,OAAA,CAC1B,QAAA,CACA,eAAA,CACA,MAAA,CACA,CACE,IAAA,CAAM,MAAA,CACN,KAAA8C,CAAAA,CACA,WAAA,CAAa,oCACb,MAAA,CAAQ,MACV,CACF,CAAA,CAEA,OAAA,MAAM9C,CAAAA,CAAQ,eAAenC,CAAAA,CAAcC,CAAAA,CAAOC,CAAc,CAAC,CAAA,CAC1DD,CACT,CAAA,CAEA,OAAO,CACL,YAAA,CAAe0E,CAAAA,EACbxC,EAAQ,eAAA,CAAgB,QAAA,CAAU,eAAgBwC,CAAkB,CAAA,CACtE,aAAezB,CAAAA,EAKT,CACJ,IAAM+B,CAAAA,CAAO,IAAI,eAAA,CAAgB,CAC/B,IAAA,CAAM/B,CAAAA,CAAO,KACb,UAAA,CAAY,oBAAA,CACZ,aAAcA,CAAAA,CAAO,WACvB,CAAC,CAAA,CAED,OAAIA,CAAAA,CAAO,cACT+B,CAAAA,CAAK,GAAA,CAAI,gBAAiB/B,CAAAA,CAAO,YAAY,EAG3CA,CAAAA,CAAO,KAAA,EACT+B,CAAAA,CAAK,GAAA,CAAI,OAAA,CAAS/B,CAAAA,CAAO,KAAK,CAAA,CAGzBsD,CAAAA,CAAcvB,CAAI,CAC3B,CAAA,CACA,YAAc7E,CAAAA,EACZ+B,CAAAA,CAAQ,QAAQ,QAAA,CAAU,WAAA,CAAa,OAAW,CAChD,WAAA,CAAA/B,EACA,IAAA,CAAM,MAAA,CACN,OAAQ,KACV,CAAC,CAAA,CACH,UAAA,CAAY,IAAM,CAChB,MAAM,IAAI,KAAA,CACR,gEACF,CACF,CAAA,CACA,OAASuE,CAAAA,EACPxC,CAAAA,CAAQ,OAAA,CAAQ,QAAA,CAAU,yBAAA,CAA2BwC,CAAAA,CAAO,CAC1D,IAAA,CAAM,MAAA,CACN,OAAQ,KACV,CAAC,EACH,GAAA,CAAAoB,CAAAA,CACA,OAAA,CAAS,MAAOzF,CAAAA,EAA0B,CACxC,IAAMJ,CAAAA,CAAiB,MAAMiC,EAAQ,cAAA,EAAe,CAC9C8C,EAAO,IAAI,eAAA,CAAgB,CAC/B,UAAA,CAAY,eAAA,CACZ,cAAe3E,CAAAA,EAAgBJ,CAAAA,EAAgB,cAAgB,EACjE,CAAC,EAED,OAAOsG,CAAAA,CAAcvB,CAAAA,CAAM,CAAE,oBAAA,CAAsB,IAAK,CAAC,CAC3D,CACF,CACF,CAAA,CAMMyB,CAAAA,CAAwB,IAAuB,CACnD,IAAMC,CAAAA,CAAQ,IACZ,OAAA,CAAQ,MAAA,CAAO,IAAI,KAAA,CAAMjB,CAAmB,CAAC,CAAA,CACzCkB,CAAAA,CAAQ,IAAI,KAAA,CAAMD,CAAAA,CAAM,CAC5B,KAAA,EAAQ,CACN,OAAO,QAAQ,MAAA,CAAO,IAAI,MAAMjB,CAAmB,CAAC,CACtD,CAAA,CACA,GAAA,CAAImB,EAASC,CAAAA,CAAU,CACrB,GAAIA,CAAAA,GAAa,MAAA,CAIjB,OAAOF,CACT,CACF,CAAC,CAAA,CAED,OAAOA,CACT,CAAA,CAEaG,CAAAA,CAA6BzC,CAAAA,EAA+B,CACvE,IAAMnC,CAAAA,CAAU,IAAIkC,CAAAA,CAAmBC,CAAM,EAC7CnC,CAAAA,CAAQ,QAAA,EAAS,CAEjB,IAAM6E,CAAAA,CAASlB,CAAAA,CAAiB3D,CAAO,CAAA,CACjC8E,CAAAA,CAAiBX,EAAyBnE,CAAO,CAAA,CACjD+E,EAAWX,CAAAA,CAAmBpE,CAAAA,CAASmC,CAAM,CAAA,CAC7C6C,CAAAA,CAAkBT,CAAAA,GAElBX,CAAAA,CAAM,CACV,KAAM,CACJ,EAAA,CAAIiB,EAAO,GACb,CAAA,CACA,QAAS,CACP,EAAA,CAAIG,CACN,CAAA,CACA,MAAA,CAAQ,CACN,EAAA,CAAID,CAAAA,CAAS,GACf,CAAA,CACA,YAAA,CAAc,CACZ,EAAA,CAAID,CAAAA,CAAe,GACrB,EACA,MAAA,CAAQ,CACN,GAAIE,CACN,CACF,EAEA,OAAO,CACL,KAAA,CAAOA,CAAAA,CACP,IAAA,CAAM,CACJ,GAAGH,CAAAA,CACH,EAAA,CAAIA,CACN,CAAA,CACA,QAAA,CAAUG,EACV,iBAAA,CAAmB,IAAMhF,CAAAA,CAAQ,iBAAA,EAAkB,CACnD,OAAA,CAASgF,EACT,cAAA,CAAgB,IAAMhF,EAAQ,cAAA,EAAe,CAC7C,iBAAkBgF,CAAAA,CAClB,IAAA,CAAMA,EACN,MAAA,CAAQ,CACN,GAAGD,CAAAA,CACH,EAAA,CAAIA,CACN,CAAA,CACA,YAAA,CAAc,CACZ,GAAGD,CAAAA,CACH,EAAA,CAAIA,CACN,CAAA,CACA,GAAA,CAAAlB,EACA,SAAA,CAAWoB,CAAAA,CACX,OAAQA,CAAAA,CACR,MAAA,CAAQA,CACV,CACF,CAAA,CClXO,IAAMC,EAAAA,CAAsB9C,CAAAA,EAA+B,CAChE,GAAKA,CAAAA,CAA0D,YAAA,CAC7D,MAAM,IAAI,KAAA,CAAM,wDAAwD,CAAA,CAG1E,OAAOyC,CAAAA,CAA0BzC,CAAM,CACzC","file":"public.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 \"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}\n","import type {\n CatalogOperationDefinition as BaseCatalogOperationDefinition,\n OperationDefinition as BaseOperationDefinition,\n ServiceOperationCatalog as BaseServiceOperationCatalog,\n HttpMethod,\n OperationAuthMode,\n} from \"./contracts\";\nimport publicOperationCatalogJson from \"./specs/public-operation-catalog.json\";\n\nexport type AuthService = \"auth\" | \"quranReflect\";\n\nexport type PublicApiService = AuthService | \"oauth2\";\n\nexport interface OperationDefinition\n extends Omit<BaseOperationDefinition, \"service\"> {\n service: PublicApiService;\n}\n\nexport interface CatalogOperationDefinition\n extends Omit<BaseCatalogOperationDefinition, \"service\"> {\n service?: PublicApiService;\n}\n\nexport interface ServiceOperationCatalog\n extends Omit<BaseServiceOperationCatalog, \"operations\" | \"service\"> {\n operations: Record<string, CatalogOperationDefinition>;\n service: PublicApiService;\n}\n\ninterface PublicOperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n}\n\nexport const publicOperationCatalog =\n publicOperationCatalogJson as PublicOperationCatalog;\n\nexport type { HttpMethod, OperationAuthMode };\n","import type { OperationRequest, TokenResponse, UserSession } from \"@/types\";\n\nexport const encodeBasicAuth = (username: string, password: string): string => {\n const raw = `${username}:${password}`;\n\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(raw).toString(\"base64\");\n }\n\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(raw);\n }\n\n throw new Error(\"No base64 encoder available for HTTP basic auth.\");\n};\n\nexport const prepareBody = (\n request: OperationRequest,\n headers: Headers,\n): string | URLSearchParams | undefined => {\n if (request.body === undefined || request.body === null) {\n return undefined;\n }\n\n if (\n typeof request.body === \"string\" ||\n request.body instanceof URLSearchParams\n ) {\n if (request.contentType) {\n headers.set(\"Content-Type\", request.contentType);\n }\n\n return request.body;\n }\n\n headers.set(\"Content-Type\", request.contentType ?? \"application/json\");\n return JSON.stringify(request.body);\n};\n\nexport const toUserSession = (\n token: TokenResponse & {\n accessToken?: string;\n expiresIn?: number;\n idToken?: string;\n refreshToken?: string;\n tokenType?: string;\n },\n currentSession?: Partial<UserSession> | null,\n): UserSession => {\n const expiresIn = token.expiresIn ?? token.expires_in;\n const accessToken = token.accessToken ?? token.access_token;\n const idToken = token.idToken ?? token.id_token ?? currentSession?.idToken;\n const refreshToken =\n token.refreshToken ?? token.refresh_token ?? currentSession?.refreshToken;\n const tokenType =\n token.tokenType ?? token.token_type ?? currentSession?.tokenType;\n const scope = token.scope ?? currentSession?.scope;\n const expiresAt = expiresIn\n ? Date.now() + expiresIn * 1000\n : currentSession?.expiresAt;\n\n return {\n accessToken,\n expiresAt,\n idToken,\n refreshToken,\n scope,\n tokenType,\n };\n};\n","import type { ApiService } from \"@/types\";\n\nimport operationCatalogJson from \"./specs/operation-catalog.json\";\n\nexport type HttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type OperationAuthMode = \"none\" | \"app\" | \"user\";\n\nexport interface OperationDefinition {\n auth: OperationAuthMode;\n method: HttpMethod;\n operationId?: string;\n operationName: string;\n path: string;\n serverUrl?: string;\n service: ApiService;\n tags: string[];\n version: string;\n}\n\nexport type CatalogOperationDefinition = Omit<\n OperationDefinition,\n \"operationName\" | \"service\" | \"tags\" | \"version\"\n> &\n Partial<\n Pick<OperationDefinition, \"operationName\" | \"service\" | \"tags\" | \"version\">\n >;\n\nexport interface ServiceOperationCatalog {\n operations: Record<string, CatalogOperationDefinition>;\n service: ApiService;\n version: string;\n}\n\ninterface OperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n content: { v4: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n search: { v1: ServiceOperationCatalog };\n}\n\nexport const operationCatalog = operationCatalogJson as OperationCatalog;\n\nexport const resolveCatalogOperation = (\n section: ServiceOperationCatalog,\n operationName: string,\n operation: CatalogOperationDefinition,\n): OperationDefinition => {\n return {\n ...operation,\n operationName: operation.operationName ?? operationName,\n service: operation.service ?? section.service,\n tags: operation.tags ?? [],\n version: operation.version ?? section.version,\n };\n};\n\nexport const getOperationByName = (\n service: ApiService,\n version: string,\n operationName: string,\n): OperationDefinition | undefined => {\n const serviceCatalog = operationCatalog[service] as\n | Record<string, ServiceOperationCatalog | undefined>\n | undefined;\n if (!serviceCatalog) {\n return undefined;\n }\n\n const versionCatalog = serviceCatalog[version];\n const operation = versionCatalog?.operations[operationName];\n if (!versionCatalog || !operation) {\n return undefined;\n }\n\n return resolveCatalogOperation(versionCatalog, operationName, operation);\n};\n","import type {\n HttpMethod,\n OperationDefinition,\n ServiceOperationCatalog,\n} from \"@/generated/contracts\";\nimport { resolveCatalogOperation } from \"@/generated/contracts\";\n\nexport const HTTP_METHOD_TO_MUTATION_NAME: Record<HttpMethod, string> = {\n delete: \"remove\",\n get: \"list\",\n patch: \"update\",\n post: \"create\",\n put: \"update\",\n};\n\nexport const toCamelCase = (value: string): string => {\n const parts = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 0) {\n return \"misc\";\n }\n\n return parts\n .map((part, index) => {\n const lower = part.toLowerCase();\n if (index === 0) {\n return lower;\n }\n\n return lower.charAt(0).toUpperCase() + lower.slice(1);\n })\n .join(\"\");\n};\n\nexport const toPascalCase = (value: string): string => {\n const camel = toCamelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n};\n\nexport const isPathParam = (segment: string): boolean =>\n segment.startsWith(\"{\") && segment.endsWith(\"}\");\n\nexport const getResourceSegments = (path: string): string[] => {\n const segments = path.split(\"/\").filter(Boolean);\n if (segments[0]?.match(/^v\\d+$/)) {\n return segments.slice(1);\n }\n\n return segments;\n};\n\nexport const pickGeneratedMethodName = (\n operation: OperationDefinition,\n): string => {\n const resourceSegments = getResourceSegments(operation.path);\n const lastSegment = resourceSegments.at(-1);\n const literalSegments = resourceSegments.filter(\n (segment) => !isPathParam(segment),\n );\n const lastLiteral = literalSegments.at(-1);\n const groupLiteral = literalSegments[0];\n\n if (resourceSegments.length === 1) {\n return HTTP_METHOD_TO_MUTATION_NAME[operation.method];\n }\n\n if (\n resourceSegments.length === 2 &&\n lastSegment &&\n isPathParam(lastSegment)\n ) {\n if (operation.method === \"get\") {\n return \"get\";\n }\n\n if (operation.method === \"delete\") {\n return \"remove\";\n }\n\n return \"update\";\n }\n\n if (lastSegment && !isPathParam(lastSegment) && lastLiteral) {\n if (lastLiteral === groupLiteral) {\n return `${HTTP_METHOD_TO_MUTATION_NAME[operation.method]}ById`;\n }\n\n return toCamelCase(lastLiteral);\n }\n\n return toCamelCase(operation.operationName);\n};\n\nexport type RawOperation = (request?: unknown) => Promise<unknown>;\nexport type GeneratedGroup = Record<string, RawOperation>;\nexport type GeneratedGroups = Record<string, GeneratedGroup>;\n\nexport interface FetcherLike {\n request<T = unknown>(\n service: string,\n path: string,\n query?: unknown,\n request?: unknown,\n ): Promise<T>;\n requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: unknown,\n ): Promise<T>;\n getUserSession(): Promise<unknown>;\n setUserSession(session: unknown): Promise<void>;\n buildServiceUrl(service: string, path: string, query?: unknown): string;\n}\n\nexport const createRawClient = (\n fetcher: FetcherLike,\n section: ServiceOperationCatalog,\n): Record<string, RawOperation> => {\n const rawOperations: Record<string, RawOperation> = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n\n rawOperations[operationName] = (request?: unknown) =>\n fetcher.requestOperation(resolvedOperation, request);\n }\n\n return rawOperations;\n};\n\nexport const createGeneratedGroups = (\n section: ServiceOperationCatalog,\n rawOperations: Record<string, RawOperation>,\n): GeneratedGroups => {\n const groups: GeneratedGroups = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n const literals = getResourceSegments(resolvedOperation.path).filter(\n (segment) => !isPathParam(segment),\n );\n const groupName = toCamelCase(literals[0] ?? \"misc\");\n const suggestedName = pickGeneratedMethodName(resolvedOperation);\n const currentGroup = groups[groupName] ?? {};\n let methodName = suggestedName;\n\n if (currentGroup[methodName]) {\n methodName = `${suggestedName}${toPascalCase(operationName)}`;\n }\n\n currentGroup[methodName] = rawOperations[operationName]!;\n groups[groupName] = currentGroup;\n }\n\n return groups;\n};\n","import type { ApiParams } from \"@/types\";\nimport humps from \"humps\";\n\nconst { decamelize } = humps;\n\nexport const ensureLeadingSlash = (value: string): string =>\n value.startsWith(\"/\") ? value : `/${value}`;\n\nexport const removeTrailingSlash = (value: string): string =>\n value.endsWith(\"/\") ? value.slice(0, -1) : value;\n\nexport const removeBeginningSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport const replacePathParams = (\n path: string,\n params?: Record<string, string | number>,\n): string => {\n return path.replace(/\\{([^}]+)\\}/g, (_match: string, rawKey: string) => {\n const value = params?.[rawKey];\n if (value === undefined) {\n throw new Error(`Missing path parameter: ${rawKey}`);\n }\n\n return encodeURIComponent(String(value));\n });\n};\n\nexport const normalizePathTemplate = (path: string): string =>\n path.replace(/(^|\\/):([A-Za-z0-9_]+)/g, \"$1{$2}\");\n\ninterface ParamsToStringOptions {\n preserveCase?: boolean;\n}\n\nconst fieldsKey = [\"wordFields\", \"translationFields\", \"fields\"] as const;\nconst fieldsKeySet = new Set<string>([\n ...fieldsKey,\n ...fieldsKey.map((key) => decamelize(key)),\n]);\nconst preservedKeys = new Set([\n \"navigationalResultsNumber\",\n \"versesResultsNumber\",\n]);\n\nexport const paramsToString = (\n params?: ApiParams,\n options: ParamsToStringOptions = {},\n): string => {\n if (!params) return \"\";\n\n const paramsString = new URLSearchParams();\n\n for (const [rawKey, rawValue] of Object.entries(params)) {\n if (rawValue === undefined) continue;\n\n const key =\n options.preserveCase || preservedKeys.has(rawKey)\n ? rawKey\n : decamelize(rawKey);\n\n // fields is a special case, it's an object with boolean values\n if (fieldsKeySet.has(rawKey) || fieldsKeySet.has(key)) {\n const fields = Object.entries(rawValue as Record<string, boolean>)\n .filter(([, value]) => value)\n .map(([fieldKey]) => decamelize(fieldKey));\n if (fields.length > 0) {\n paramsString.set(key, fields.join(\",\"));\n }\n continue;\n }\n\n if (typeof rawValue === \"string\") {\n paramsString.set(key, rawValue);\n } else if (typeof rawValue === \"number\") {\n paramsString.set(key, rawValue.toString());\n } else if (typeof rawValue === \"boolean\") {\n paramsString.set(key, rawValue.toString());\n } else if (Array.isArray(rawValue)) {\n paramsString.set(key, rawValue.join(\",\"));\n }\n }\n\n if (paramsString.size === 0) return \"\";\n return `?${paramsString.toString()}`;\n};\n","export const API_BASE_URL = \"https://apis.quran.foundation\";\n\nexport const DEFAULT_BASE_URLS = {\n auth: \"https://apis.quran.foundation/auth\",\n content: \"https://apis.quran.foundation/content\",\n oauth2: \"https://oauth2.quran.foundation\",\n quranReflect: \"https://apis.quran.foundation/quran-reflect\",\n search: \"https://apis.quran.foundation/search\",\n} as const;\n\nexport const DIRECT_PATH_PREFIX = {\n auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\n auth: \"/auth/v1\",\n content: \"/content/api/v4\",\n oauth2: \"\",\n quranReflect: \"/quran-reflect/v1\",\n search: \"/search/v1\",\n} as const;\n\nexport const LEGACY_PREFIXES = {\n auth: [\"/auth/v1\", \"/v1\"] as const,\n content: [\"/content/api/v4\", \"/api/v4\"] as const,\n oauth2: [] as const,\n quranReflect: [\"/quran-reflect/v1\", \"/v1\"] as const,\n search: [\"/search/v1\", \"/v1\"] as const,\n} as const;\n","import type {\n OperationDefinition,\n PublicApiService,\n} from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n CustomFetcher,\n OperationRequest,\n PublicClientConfig,\n UserSession,\n} from \"@/types\";\nimport { prepareBody } from \"@/lib/http-utils\";\nimport {\n DEFAULT_BASE_URLS,\n DIRECT_PATH_PREFIX,\n GATEWAY_PATH_PREFIX,\n LEGACY_PREFIXES,\n} from \"@/lib/service-config\";\nimport {\n ensureLeadingSlash,\n normalizePathTemplate,\n paramsToString,\n removeTrailingSlash,\n replacePathParams,\n} from \"@/lib/url\";\nimport humps from \"humps\";\n\nconst { camelizeKeys } = humps;\n\nexport class PublicQuranFetcher {\n private userSession: UserSession | null | undefined;\n\n constructor(private readonly config: PublicClientConfig) {\n this.userSession = config.userSession;\n }\n\n public clearCachedTokens(): void {\n return;\n }\n\n public getFetch(): CustomFetcher {\n const doFetch = this.config.fetch ?? globalThis.fetch;\n\n if (typeof doFetch !== \"function\") {\n throw new Error(\n \"No fetch function available. Please provide a fetch implementation or ensure global fetch is available.\",\n );\n }\n\n return doFetch;\n }\n\n public async getUserSession(): Promise<UserSession | null> {\n const storedSession = await this.config.storage?.getSession?.();\n if (storedSession !== undefined) {\n return storedSession;\n }\n\n return this.userSession ?? null;\n }\n\n public async setUserSession(session: UserSession | null): Promise<void> {\n if (!this.config.storage) {\n this.userSession = session;\n return;\n }\n\n if (!session) {\n if (this.config.storage.clearSession) {\n await this.config.storage.clearSession();\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(null);\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(session);\n this.userSession = session;\n }\n\n public buildServiceUrl(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n ): string {\n const { baseUrl, usesGateway } = this.resolveServiceBaseUrl(service);\n const servicePath = this.normalizeServicePath(service, path, usesGateway);\n const preserveQueryParamCase =\n service === \"auth\" || service === \"quranReflect\";\n\n return `${baseUrl}${servicePath}${paramsToString(query, {\n preserveCase: preserveQueryParamCase,\n })}`;\n }\n\n public async requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: OperationRequest,\n ): Promise<T> {\n return this.request<T>(\n operation.service,\n replacePathParams(operation.path, request?.path),\n request?.query,\n {\n ...request,\n auth:\n request?.auth === \"auto\" || !request?.auth\n ? operation.auth\n : request.auth,\n method:\n request?.method ??\n (operation.method.toUpperCase() as OperationRequest[\"method\"]),\n path: undefined,\n },\n );\n }\n\n public async request<T = unknown>(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n request: OperationRequest = {},\n ): Promise<T> {\n if (request.basicAuth) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n const effectiveAuth = this.resolveAuthMode(service, request.auth);\n const url = this.buildServiceUrl(service, path, query);\n const headers = new Headers(request.headers);\n const body = prepareBody(request, headers);\n\n if (service !== \"oauth2\") {\n headers.set(\"x-client-id\", this.config.clientId);\n }\n\n await this.applyAuthenticationHeaders(\n service,\n effectiveAuth,\n headers,\n request,\n );\n\n const response = await this.getFetch()(url, {\n body,\n headers,\n method: request.method ?? \"GET\",\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n return (await response.text()) as T;\n }\n\n const json = await response.json();\n return camelizeKeys(json as object) as T;\n }\n\n private resolveAuthMode(\n service: PublicApiService,\n auth: OperationRequest[\"auth\"] = \"auto\",\n ): \"none\" | \"user\" {\n if (auth !== \"auto\") {\n if (auth === \"app\") {\n throw new Error(\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\",\n );\n }\n\n return auth;\n }\n\n if (service === \"auth\" || service === \"quranReflect\") {\n return \"user\";\n }\n\n return \"none\";\n }\n\n private async applyAuthenticationHeaders(\n service: PublicApiService,\n auth: \"none\" | \"user\",\n headers: Headers,\n request: OperationRequest,\n ): Promise<void> {\n if (request.accessToken) {\n this.setTokenHeaders(service, headers, request.accessToken);\n return;\n }\n\n if (auth === \"none\") {\n return;\n }\n\n const session = await this.getUserSession();\n if (!session?.accessToken) {\n throw new Error(\n \"This operation requires a user session. Sign in first or use @quranjs/api/server.\",\n );\n }\n\n this.setTokenHeaders(service, headers, session.accessToken);\n }\n\n private setTokenHeaders(\n service: PublicApiService,\n headers: Headers,\n accessToken: string,\n ): void {\n if (service === \"oauth2\") {\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return;\n }\n\n headers.set(\"x-auth-token\", accessToken);\n }\n\n private resolveServiceBaseUrl(service: PublicApiService): {\n baseUrl: string;\n usesGateway: boolean;\n } {\n const { services } = this.config;\n const directBaseUrl =\n service === \"auth\"\n ? services?.authBaseUrl\n : service === \"quranReflect\"\n ? services?.quranReflectBaseUrl\n : (services?.oauth2BaseUrl ?? services?.tokenHost);\n\n if (directBaseUrl) {\n return {\n baseUrl: removeTrailingSlash(directBaseUrl),\n usesGateway: false,\n };\n }\n\n if (services?.gatewayUrl && service !== \"oauth2\") {\n return {\n baseUrl: removeTrailingSlash(services.gatewayUrl),\n usesGateway: true,\n };\n }\n\n return {\n baseUrl: DEFAULT_BASE_URLS[service],\n usesGateway: false,\n };\n }\n\n private normalizeServicePath(\n service: PublicApiService,\n path: string,\n usesGateway: boolean,\n ): string {\n let normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n for (const legacyPrefix of LEGACY_PREFIXES[service]) {\n if (normalizedPath.startsWith(legacyPrefix)) {\n normalizedPath = ensureLeadingSlash(\n normalizedPath.slice(legacyPrefix.length),\n );\n break;\n }\n }\n\n const prefix = usesGateway\n ? GATEWAY_PATH_PREFIX[service]\n : DIRECT_PATH_PREFIX[service];\n\n if (normalizedPath.startsWith(prefix) || prefix.length === 0) {\n return normalizedPath;\n }\n\n return `${prefix}${normalizedPath}`;\n }\n}\n","import type { AuthService } from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n HTTPMethod,\n OperationRequest,\n PublicClientConfig,\n TokenResponse,\n} from \"@/types\";\nimport { publicOperationCatalog } from \"@/generated/public-contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { PublicQuranFetcher } from \"@/sdk/public-fetcher\";\n\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 SERVER_ONLY_MESSAGE =\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\";\nconst LEGACY_BOOKMARK_GET_MESSAGE =\n \"auth.bookmarks.get(bookmarkId) is not supported because /v1/bookmarks/bookmark expects bookmark detail query parameters. Pass a query object such as { mushafId, key, type, verseNumber } or { mushafId, isReading: true }.\";\n\nconst createUserServiceRequest =\n (fetcher: PublicQuranFetcher, service: AuthService) =>\n (method: HTTPMethod, path: string, request?: OperationRequest) => {\n return fetcher.request<unknown>(\n service,\n replacePathParams(path, request?.path),\n request?.query,\n {\n ...request,\n auth: \"user\",\n method,\n path: undefined,\n query: undefined,\n },\n );\n };\n\nconst createAuthFacade = (fetcher: PublicQuranFetcher) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.auth.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.auth.v1,\n raw,\n );\n const request = createUserServiceRequest(fetcher, \"auth\");\n\n return {\n ...generatedGroups,\n collections: {\n ...generatedGroups.collections,\n addBookmark: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}/bookmarks\", {\n body,\n path: { collectionId },\n }),\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections\", { body }),\n get: (collectionId: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n query,\n }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/collections\", { query }),\n listAll: (query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/all\", { query }),\n remove: (collectionId: string) =>\n request(\"DELETE\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n }),\n removeBookmark: (collectionId: string, bookmarkId: string) =>\n request(\n \"DELETE\",\n \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\",\n {\n path: { bookmarkId, collectionId },\n },\n ),\n update: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}\", {\n body,\n path: { collectionId },\n }),\n },\n bookmarks: {\n ...generatedGroups.bookmarks,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/bookmarks\", { body }),\n get: async (query?: ApiParams | string) => {\n if (typeof query === \"string\") {\n throw new Error(LEGACY_BOOKMARK_GET_MESSAGE);\n }\n\n return request(\"GET\", \"/v1/bookmarks/bookmark\", {\n query,\n });\n },\n list: (query?: ApiParams) => request(\"GET\", \"/v1/bookmarks\", { query }),\n listCollections: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/collections\", { query }),\n listRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/ayahs-range\", { query }),\n remove: (bookmarkId: string) =>\n request(\"DELETE\", \"/v1/bookmarks/{bookmarkId}\", {\n path: { bookmarkId },\n }),\n },\n goals: {\n ...generatedGroups.goals,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/goals\", { body }),\n estimate: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/estimate\", { query }),\n getTodaysPlan: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/get-todays-plan\", { query }),\n remove: (id: string) =>\n request(\"DELETE\", \"/v1/goals/{id}\", { path: { id } }),\n update: (id: string, body: Record<string, unknown>) =>\n request(\"PUT\", \"/v1/goals/{id}\", {\n body,\n path: { id },\n }),\n },\n notes: {\n ...generatedGroups.notes,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes\", { body }),\n get: (noteId: string) =>\n request(\"GET\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/notes\", { query }),\n listByAttachedEntity: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-attached-entity\", { query }),\n listByRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-range\", { query }),\n listByVerseKey: (verseKey: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-verse/{verseKey}\", {\n path: { verseKey },\n query,\n }),\n publish: (noteId: string, body?: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes/{noteId}/publish\", {\n body,\n path: { noteId },\n }),\n remove: (noteId: string) =>\n request(\"DELETE\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n update: (noteId: string, body: Record<string, unknown>) =>\n request(\"PATCH\", \"/v1/notes/{noteId}\", {\n body,\n path: { noteId },\n }),\n },\n preferences: {\n ...generatedGroups.preferences,\n bulkUpdate: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences/bulk\", { body }),\n get: (query?: ApiParams) => request(\"GET\", \"/v1/preferences\", { query }),\n update: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences\", { body }),\n },\n raw,\n readingSessions: {\n ...generatedGroups.readingSessions,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/reading-sessions\", { body }),\n list: (query?: ApiParams) =>\n request(\"GET\", \"/v1/reading-sessions\", { query }),\n },\n };\n};\n\nconst createQuranReflectFacade = (\n fetcher: PublicQuranFetcher,\n): QuranReflectFacade => {\n const raw = createRawClient(fetcher, publicOperationCatalog.quranReflect.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.quranReflect.v1,\n raw,\n );\n\n return {\n comments: generatedGroups.comments ?? {},\n posts: generatedGroups.posts ?? {},\n raw,\n rooms: generatedGroups.rooms ?? {},\n tags: generatedGroups.tags ?? {},\n users: generatedGroups.users ?? {},\n };\n};\n\nconst createOAuth2Facade = (\n fetcher: PublicQuranFetcher,\n config: PublicClientConfig,\n) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.oauth2.v1);\n\n const exchangeToken = async (\n body: URLSearchParams,\n options: { requiresRefreshToken?: boolean } = {},\n ) => {\n if (config.clientType !== \"public\") {\n throw new Error(\n \"This OAuth2 exchange requires a backend because your client is confidential.\",\n );\n }\n\n if (options.requiresRefreshToken && !body.get(\"refresh_token\")) {\n throw new Error(\"Missing refresh token.\");\n }\n\n body.set(\"client_id\", config.clientId);\n\n const requestRefreshToken = body.get(\"refresh_token\") ?? undefined;\n const storedSession = options.requiresRefreshToken\n ? await fetcher.getUserSession()\n : null;\n const currentSession =\n options.requiresRefreshToken && requestRefreshToken\n ? { ...(storedSession ?? {}), refreshToken: requestRefreshToken }\n : storedSession;\n\n const token = await fetcher.request<TokenResponse>(\n \"oauth2\",\n \"/oauth2/token\",\n undefined,\n {\n auth: \"none\",\n body,\n contentType: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n },\n );\n\n await fetcher.setUserSession(toUserSession(token, currentSession));\n return token;\n };\n\n return {\n authorizeUrl: (query: Record<string, string | number | undefined>) =>\n fetcher.buildServiceUrl(\"oauth2\", \"/oauth2/auth\", query as ApiParams),\n exchangeCode: (params: {\n code: string;\n codeVerifier?: string;\n redirectUri: string;\n scope?: string;\n }) => {\n const body = new URLSearchParams({\n code: params.code,\n grant_type: \"authorization_code\",\n redirect_uri: params.redirectUri,\n });\n\n if (params.codeVerifier) {\n body.set(\"code_verifier\", params.codeVerifier);\n }\n\n if (params.scope) {\n body.set(\"scope\", params.scope);\n }\n\n return exchangeToken(body);\n },\n getUserInfo: (accessToken?: string) =>\n fetcher.request(\"oauth2\", \"/userinfo\", undefined, {\n accessToken,\n auth: \"user\",\n method: \"GET\",\n }),\n introspect: () => {\n throw new Error(\n \"Token introspection requires @quranjs/api/server or a backend.\",\n );\n },\n logout: (query?: ApiParams) =>\n fetcher.request(\"oauth2\", \"/oauth2/sessions/logout\", query, {\n auth: \"none\",\n method: \"GET\",\n }),\n raw,\n refresh: async (refreshToken?: string) => {\n const currentSession = await fetcher.getUserSession();\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken ?? currentSession?.refreshToken ?? \"\",\n });\n\n return exchangeToken(body, { requiresRefreshToken: true });\n },\n };\n};\n\ntype ServerOnlyGuard = ((...args: unknown[]) => Promise<never>) & {\n [key: string]: ServerOnlyGuard | undefined;\n};\n\nconst createServerOnlyGuard = (): ServerOnlyGuard => {\n const fail = (() =>\n Promise.reject(new Error(SERVER_ONLY_MESSAGE))) as ServerOnlyGuard;\n const proxy = new Proxy(fail, {\n apply() {\n return Promise.reject(new Error(SERVER_ONLY_MESSAGE));\n },\n get(_target, property) {\n if (property === \"then\") {\n return undefined;\n }\n\n return proxy;\n },\n });\n\n return proxy;\n};\n\nexport const createPublicRuntimeClient = (config: PublicClientConfig) => {\n const fetcher = new PublicQuranFetcher(config);\n fetcher.getFetch();\n\n const authV1 = createAuthFacade(fetcher);\n const quranReflectV1 = createQuranReflectFacade(fetcher);\n const oauth2V1 = createOAuth2Facade(fetcher, config);\n const serverOnlyGuard = createServerOnlyGuard();\n\n const raw = {\n auth: {\n v1: authV1.raw,\n },\n content: {\n v4: serverOnlyGuard,\n },\n oauth2: {\n v1: oauth2V1.raw,\n },\n quranReflect: {\n v1: quranReflectV1.raw,\n },\n search: {\n v1: serverOnlyGuard,\n },\n };\n\n return {\n audio: serverOnlyGuard,\n auth: {\n ...authV1,\n v1: authV1,\n },\n chapters: serverOnlyGuard,\n clearCachedTokens: () => fetcher.clearCachedTokens(),\n content: serverOnlyGuard,\n getUserSession: () => fetcher.getUserSession(),\n hadithReferences: serverOnlyGuard,\n juzs: serverOnlyGuard,\n oauth2: {\n ...oauth2V1,\n v1: oauth2V1,\n },\n quranReflect: {\n ...quranReflectV1,\n v1: quranReflectV1,\n },\n raw,\n resources: serverOnlyGuard,\n search: serverOnlyGuard,\n verses: serverOnlyGuard,\n };\n};\n","import type { PublicClientConfig } from \"@/types\";\n\nimport { createPublicRuntimeClient } from \"./runtime/create-public-client\";\n\nexport const createPublicClient = (config: PublicClientConfig) => {\n if ((config as PublicClientConfig & { clientSecret?: string }).clientSecret) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n return createPublicRuntimeClient(config);\n};\n\nexport type PublicClient = ReturnType<typeof createPublicClient>;\n"]}
1
+ {"version":3,"sources":["../src/generated/specs/public-operation-catalog.json","../src/generated/public-contracts.ts","../src/lib/http-utils.ts","../src/generated/contracts.ts","../src/lib/runtime-utils.ts","../src/lib/url.ts","../src/lib/service-config.ts","../src/sdk/public-fetcher.ts","../src/runtime/create-public-client.ts","../src/public.ts"],"names":["public_operation_catalog_default","publicOperationCatalog","prepareBody","request","headers","toUserSession","token","currentSession","expiresIn","accessToken","idToken","refreshToken","tokenType","scope","expiresAt","resolveCatalogOperation","section","operationName","operation","HTTP_METHOD_TO_MUTATION_NAME","toCamelCase","value","parts","part","index","lower","toPascalCase","camel","isPathParam","segment","getResourceSegments","path","segments","pickGeneratedMethodName","resourceSegments","lastSegment","literalSegments","lastLiteral","groupLiteral","createRawClient","fetcher","rawOperations","resolvedOperation","createGeneratedGroups","groups","literals","groupName","suggestedName","currentGroup","methodName","decamelize","humps","ensureLeadingSlash","removeTrailingSlash","replacePathParams","params","_match","rawKey","normalizePathTemplate","fieldsKey","fieldsKeySet","key","preservedKeys","paramsToString","options","paramsString","rawValue","fields","fieldKey","DEFAULT_BASE_URLS","DIRECT_PATH_PREFIX","GATEWAY_PATH_PREFIX","LEGACY_PREFIXES","camelizeKeys","PublicQuranFetcher","config","doFetch","storedSession","session","service","query","baseUrl","usesGateway","servicePath","effectiveAuth","url","body","response","json","auth","services","directBaseUrl","normalizedPath","legacyPrefix","prefix","SERVER_ONLY_MESSAGE","LEGACY_BOOKMARK_GET_MESSAGE","createUserServiceRequest","method","createAuthFacade","raw","generatedGroups","collectionId","bookmarkId","id","noteId","verseKey","createQuranReflectFacade","createOAuth2Facade","exchangeToken","requestRefreshToken","createServerOnlyGuard","fail","proxy","_target","property","createPublicRuntimeClient","authV1","quranReflectV1","oauth2V1","serverOnlyGuard","createPublicClient"],"mappings":"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","file":"public.min.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 \"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}\n","import type {\n CatalogOperationDefinition as BaseCatalogOperationDefinition,\n OperationDefinition as BaseOperationDefinition,\n ServiceOperationCatalog as BaseServiceOperationCatalog,\n HttpMethod,\n OperationAuthMode,\n} from \"./contracts\";\nimport publicOperationCatalogJson from \"./specs/public-operation-catalog.json\";\n\nexport type AuthService = \"auth\" | \"quranReflect\";\n\nexport type PublicApiService = AuthService | \"oauth2\";\n\nexport interface OperationDefinition\n extends Omit<BaseOperationDefinition, \"service\"> {\n service: PublicApiService;\n}\n\nexport interface CatalogOperationDefinition\n extends Omit<BaseCatalogOperationDefinition, \"service\"> {\n service?: PublicApiService;\n}\n\nexport interface ServiceOperationCatalog\n extends Omit<BaseServiceOperationCatalog, \"operations\" | \"service\"> {\n operations: Record<string, CatalogOperationDefinition>;\n service: PublicApiService;\n}\n\ninterface PublicOperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n}\n\nexport const publicOperationCatalog =\n publicOperationCatalogJson as PublicOperationCatalog;\n\nexport type { HttpMethod, OperationAuthMode };\n","import type { OperationRequest, TokenResponse, UserSession } from \"@/types\";\n\nexport const encodeBasicAuth = (username: string, password: string): string => {\n const raw = `${username}:${password}`;\n\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(raw).toString(\"base64\");\n }\n\n if (typeof globalThis.btoa === \"function\") {\n return globalThis.btoa(raw);\n }\n\n throw new Error(\"No base64 encoder available for HTTP basic auth.\");\n};\n\nexport const prepareBody = (\n request: OperationRequest,\n headers: Headers,\n): string | URLSearchParams | undefined => {\n if (request.body === undefined || request.body === null) {\n return undefined;\n }\n\n if (\n typeof request.body === \"string\" ||\n request.body instanceof URLSearchParams\n ) {\n if (request.contentType) {\n headers.set(\"Content-Type\", request.contentType);\n }\n\n return request.body;\n }\n\n headers.set(\"Content-Type\", request.contentType ?? \"application/json\");\n return JSON.stringify(request.body);\n};\n\nexport const toUserSession = (\n token: TokenResponse & {\n accessToken?: string;\n expiresIn?: number;\n idToken?: string;\n refreshToken?: string;\n tokenType?: string;\n },\n currentSession?: Partial<UserSession> | null,\n): UserSession => {\n const expiresIn = token.expiresIn ?? token.expires_in;\n const accessToken = token.accessToken ?? token.access_token;\n const idToken = token.idToken ?? token.id_token ?? currentSession?.idToken;\n const refreshToken =\n token.refreshToken ?? token.refresh_token ?? currentSession?.refreshToken;\n const tokenType =\n token.tokenType ?? token.token_type ?? currentSession?.tokenType;\n const scope = token.scope ?? currentSession?.scope;\n const expiresAt = expiresIn\n ? Date.now() + expiresIn * 1000\n : currentSession?.expiresAt;\n\n return {\n accessToken,\n expiresAt,\n idToken,\n refreshToken,\n scope,\n tokenType,\n };\n};\n","import type { ApiService } from \"@/types\";\n\nimport operationCatalogJson from \"./specs/operation-catalog.json\";\n\nexport type HttpMethod = \"get\" | \"post\" | \"put\" | \"patch\" | \"delete\";\nexport type OperationAuthMode = \"none\" | \"app\" | \"user\";\n\nexport interface OperationDefinition {\n auth: OperationAuthMode;\n method: HttpMethod;\n operationId?: string;\n operationName: string;\n path: string;\n serverUrl?: string;\n service: ApiService;\n tags: string[];\n version: string;\n}\n\nexport type CatalogOperationDefinition = Omit<\n OperationDefinition,\n \"operationName\" | \"service\" | \"tags\" | \"version\"\n> &\n Partial<\n Pick<OperationDefinition, \"operationName\" | \"service\" | \"tags\" | \"version\">\n >;\n\nexport interface ServiceOperationCatalog {\n operations: Record<string, CatalogOperationDefinition>;\n service: ApiService;\n version: string;\n}\n\ninterface OperationCatalog {\n auth: { v1: ServiceOperationCatalog };\n content: { v4: ServiceOperationCatalog };\n oauth2: { v1: ServiceOperationCatalog };\n quranReflect: { v1: ServiceOperationCatalog };\n search: { v1: ServiceOperationCatalog };\n}\n\nexport const operationCatalog = operationCatalogJson as OperationCatalog;\n\nexport const resolveCatalogOperation = (\n section: ServiceOperationCatalog,\n operationName: string,\n operation: CatalogOperationDefinition,\n): OperationDefinition => {\n return {\n ...operation,\n operationName: operation.operationName ?? operationName,\n service: operation.service ?? section.service,\n tags: operation.tags ?? [],\n version: operation.version ?? section.version,\n };\n};\n\nexport const getOperationByName = (\n service: ApiService,\n version: string,\n operationName: string,\n): OperationDefinition | undefined => {\n const serviceCatalog = operationCatalog[service] as\n | Record<string, ServiceOperationCatalog | undefined>\n | undefined;\n if (!serviceCatalog) {\n return undefined;\n }\n\n const versionCatalog = serviceCatalog[version];\n const operation = versionCatalog?.operations[operationName];\n if (!versionCatalog || !operation) {\n return undefined;\n }\n\n return resolveCatalogOperation(versionCatalog, operationName, operation);\n};\n","import type {\n HttpMethod,\n OperationDefinition,\n ServiceOperationCatalog,\n} from \"@/generated/contracts\";\nimport { resolveCatalogOperation } from \"@/generated/contracts\";\n\nexport const HTTP_METHOD_TO_MUTATION_NAME: Record<HttpMethod, string> = {\n delete: \"remove\",\n get: \"list\",\n patch: \"update\",\n post: \"create\",\n put: \"update\",\n};\n\nexport const toCamelCase = (value: string): string => {\n const parts = value\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter(Boolean);\n\n if (parts.length === 0) {\n return \"misc\";\n }\n\n return parts\n .map((part, index) => {\n const lower = part.toLowerCase();\n if (index === 0) {\n return lower;\n }\n\n return lower.charAt(0).toUpperCase() + lower.slice(1);\n })\n .join(\"\");\n};\n\nexport const toPascalCase = (value: string): string => {\n const camel = toCamelCase(value);\n return camel.charAt(0).toUpperCase() + camel.slice(1);\n};\n\nexport const isPathParam = (segment: string): boolean =>\n segment.startsWith(\"{\") && segment.endsWith(\"}\");\n\nexport const getResourceSegments = (path: string): string[] => {\n const segments = path.split(\"/\").filter(Boolean);\n if (segments[0]?.match(/^v\\d+$/)) {\n return segments.slice(1);\n }\n\n return segments;\n};\n\nexport const pickGeneratedMethodName = (\n operation: OperationDefinition,\n): string => {\n const resourceSegments = getResourceSegments(operation.path);\n const lastSegment = resourceSegments.at(-1);\n const literalSegments = resourceSegments.filter(\n (segment) => !isPathParam(segment),\n );\n const lastLiteral = literalSegments.at(-1);\n const groupLiteral = literalSegments[0];\n\n if (resourceSegments.length === 1) {\n return HTTP_METHOD_TO_MUTATION_NAME[operation.method];\n }\n\n if (\n resourceSegments.length === 2 &&\n lastSegment &&\n isPathParam(lastSegment)\n ) {\n if (operation.method === \"get\") {\n return \"get\";\n }\n\n if (operation.method === \"delete\") {\n return \"remove\";\n }\n\n return \"update\";\n }\n\n if (lastSegment && !isPathParam(lastSegment) && lastLiteral) {\n if (lastLiteral === groupLiteral) {\n return `${HTTP_METHOD_TO_MUTATION_NAME[operation.method]}ById`;\n }\n\n return toCamelCase(lastLiteral);\n }\n\n return toCamelCase(operation.operationName);\n};\n\nexport type RawOperation = (request?: unknown) => Promise<unknown>;\nexport type GeneratedGroup = Record<string, RawOperation>;\nexport type GeneratedGroups = Record<string, GeneratedGroup>;\n\nexport interface FetcherLike {\n request<T = unknown>(\n service: string,\n path: string,\n query?: unknown,\n request?: unknown,\n ): Promise<T>;\n requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: unknown,\n ): Promise<T>;\n getUserSession(): Promise<unknown>;\n setUserSession(session: unknown): Promise<void>;\n buildServiceUrl(service: string, path: string, query?: unknown): string;\n}\n\nexport const createRawClient = (\n fetcher: FetcherLike,\n section: ServiceOperationCatalog,\n): Record<string, RawOperation> => {\n const rawOperations: Record<string, RawOperation> = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n\n rawOperations[operationName] = (request?: unknown) =>\n fetcher.requestOperation(resolvedOperation, request);\n }\n\n return rawOperations;\n};\n\nexport const createGeneratedGroups = (\n section: ServiceOperationCatalog,\n rawOperations: Record<string, RawOperation>,\n): GeneratedGroups => {\n const groups: GeneratedGroups = {};\n\n for (const [operationName, operation] of Object.entries(section.operations)) {\n const resolvedOperation = resolveCatalogOperation(\n section,\n operationName,\n operation,\n );\n const literals = getResourceSegments(resolvedOperation.path).filter(\n (segment) => !isPathParam(segment),\n );\n const groupName = toCamelCase(literals[0] ?? \"misc\");\n const suggestedName = pickGeneratedMethodName(resolvedOperation);\n const currentGroup = groups[groupName] ?? {};\n let methodName = suggestedName;\n\n if (currentGroup[methodName]) {\n methodName = `${suggestedName}${toPascalCase(operationName)}`;\n }\n\n currentGroup[methodName] = rawOperations[operationName]!;\n groups[groupName] = currentGroup;\n }\n\n return groups;\n};\n","import type { ApiParams } from \"@/types\";\nimport humps from \"humps\";\n\nconst { decamelize } = humps;\n\nexport const ensureLeadingSlash = (value: string): string =>\n value.startsWith(\"/\") ? value : `/${value}`;\n\nexport const removeTrailingSlash = (value: string): string =>\n value.endsWith(\"/\") ? value.slice(0, -1) : value;\n\nexport const removeBeginningSlash = (url: string) => {\n return url.startsWith(\"/\") ? url.slice(1) : url;\n};\n\nexport const replacePathParams = (\n path: string,\n params?: Record<string, string | number>,\n): string => {\n return path.replace(/\\{([^}]+)\\}/g, (_match: string, rawKey: string) => {\n const value = params?.[rawKey];\n if (value === undefined) {\n throw new Error(`Missing path parameter: ${rawKey}`);\n }\n\n return encodeURIComponent(String(value));\n });\n};\n\nexport const normalizePathTemplate = (path: string): string =>\n path.replace(/(^|\\/):([A-Za-z0-9_]+)/g, \"$1{$2}\");\n\ninterface ParamsToStringOptions {\n preserveCase?: boolean;\n}\n\nconst fieldsKey = [\"wordFields\", \"translationFields\", \"fields\"] as const;\nconst fieldsKeySet = new Set<string>([\n ...fieldsKey,\n ...fieldsKey.map((key) => decamelize(key)),\n]);\nconst preservedKeys = new Set([\n \"navigationalResultsNumber\",\n \"versesResultsNumber\",\n]);\n\nexport const paramsToString = (\n params?: ApiParams,\n options: ParamsToStringOptions = {},\n): string => {\n if (!params) return \"\";\n\n const paramsString = new URLSearchParams();\n\n for (const [rawKey, rawValue] of Object.entries(params)) {\n if (rawValue === undefined) continue;\n\n const key =\n options.preserveCase || preservedKeys.has(rawKey)\n ? rawKey\n : decamelize(rawKey);\n\n // fields is a special case, it's an object with boolean values\n if (fieldsKeySet.has(rawKey) || fieldsKeySet.has(key)) {\n const fields = Object.entries(rawValue as Record<string, boolean>)\n .filter(([, value]) => value)\n .map(([fieldKey]) => decamelize(fieldKey));\n if (fields.length > 0) {\n paramsString.set(key, fields.join(\",\"));\n }\n continue;\n }\n\n if (typeof rawValue === \"string\") {\n paramsString.set(key, rawValue);\n } else if (typeof rawValue === \"number\") {\n paramsString.set(key, rawValue.toString());\n } else if (typeof rawValue === \"boolean\") {\n paramsString.set(key, rawValue.toString());\n } else if (Array.isArray(rawValue)) {\n paramsString.set(key, rawValue.join(\",\"));\n }\n }\n\n if (paramsString.size === 0) return \"\";\n return `?${paramsString.toString()}`;\n};\n","export const API_BASE_URL = \"https://apis.quran.foundation\";\n\nexport const DEFAULT_BASE_URLS = {\n auth: \"https://apis.quran.foundation/auth\",\n content: \"https://apis.quran.foundation/content\",\n oauth2: \"https://oauth2.quran.foundation\",\n quranReflect: \"https://apis.quran.foundation/quran-reflect\",\n search: \"https://apis.quran.foundation/search\",\n} as const;\n\nexport const DIRECT_PATH_PREFIX = {\n auth: \"/v1\",\n content: \"/api/v4\",\n oauth2: \"\",\n quranReflect: \"/v1\",\n search: \"/v1\",\n} as const;\n\nexport const GATEWAY_PATH_PREFIX = {\n auth: \"/auth/v1\",\n content: \"/content/api/v4\",\n oauth2: \"\",\n quranReflect: \"/quran-reflect/v1\",\n search: \"/search/v1\",\n} as const;\n\nexport const LEGACY_PREFIXES = {\n auth: [\"/auth/v1\", \"/v1\"] as const,\n content: [\"/content/api/v4\", \"/api/v4\"] as const,\n oauth2: [] as const,\n quranReflect: [\"/quran-reflect/v1\", \"/v1\"] as const,\n search: [\"/search/v1\", \"/v1\"] as const,\n} as const;\n","import type {\n OperationDefinition,\n PublicApiService,\n} from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n CustomFetcher,\n OperationRequest,\n PublicClientConfig,\n UserSession,\n} from \"@/types\";\nimport { prepareBody } from \"@/lib/http-utils\";\nimport {\n DEFAULT_BASE_URLS,\n DIRECT_PATH_PREFIX,\n GATEWAY_PATH_PREFIX,\n LEGACY_PREFIXES,\n} from \"@/lib/service-config\";\nimport {\n ensureLeadingSlash,\n normalizePathTemplate,\n paramsToString,\n removeTrailingSlash,\n replacePathParams,\n} from \"@/lib/url\";\nimport humps from \"humps\";\n\nconst { camelizeKeys } = humps;\n\nexport class PublicQuranFetcher {\n private userSession: UserSession | null | undefined;\n\n constructor(private readonly config: PublicClientConfig) {\n this.userSession = config.userSession;\n }\n\n public clearCachedTokens(): void {\n return;\n }\n\n public getFetch(): CustomFetcher {\n const doFetch = this.config.fetch ?? globalThis.fetch;\n\n if (typeof doFetch !== \"function\") {\n throw new Error(\n \"No fetch function available. Please provide a fetch implementation or ensure global fetch is available.\",\n );\n }\n\n return doFetch;\n }\n\n public async getUserSession(): Promise<UserSession | null> {\n const storedSession = await this.config.storage?.getSession?.();\n if (storedSession !== undefined) {\n return storedSession;\n }\n\n return this.userSession ?? null;\n }\n\n public async setUserSession(session: UserSession | null): Promise<void> {\n if (!this.config.storage) {\n this.userSession = session;\n return;\n }\n\n if (!session) {\n if (this.config.storage.clearSession) {\n await this.config.storage.clearSession();\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(null);\n this.userSession = null;\n return;\n }\n\n await this.config.storage.setSession?.(session);\n this.userSession = session;\n }\n\n public buildServiceUrl(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n ): string {\n const { baseUrl, usesGateway } = this.resolveServiceBaseUrl(service);\n const servicePath = this.normalizeServicePath(service, path, usesGateway);\n const preserveQueryParamCase =\n service === \"auth\" || service === \"quranReflect\";\n\n return `${baseUrl}${servicePath}${paramsToString(query, {\n preserveCase: preserveQueryParamCase,\n })}`;\n }\n\n public async requestOperation<T = unknown>(\n operation: OperationDefinition,\n request?: OperationRequest,\n ): Promise<T> {\n return this.request<T>(\n operation.service,\n replacePathParams(operation.path, request?.path),\n request?.query,\n {\n ...request,\n auth:\n request?.auth === \"auto\" || !request?.auth\n ? operation.auth\n : request.auth,\n method:\n request?.method ??\n (operation.method.toUpperCase() as OperationRequest[\"method\"]),\n path: undefined,\n },\n );\n }\n\n public async request<T = unknown>(\n service: PublicApiService,\n path: string,\n query?: ApiParams,\n request: OperationRequest = {},\n ): Promise<T> {\n if (request.basicAuth) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n const effectiveAuth = this.resolveAuthMode(service, request.auth);\n const url = this.buildServiceUrl(service, path, query);\n const headers = new Headers(request.headers);\n const body = prepareBody(request, headers);\n\n if (service !== \"oauth2\") {\n headers.set(\"x-client-id\", this.config.clientId);\n }\n\n await this.applyAuthenticationHeaders(\n service,\n effectiveAuth,\n headers,\n request,\n );\n\n const response = await this.getFetch()(url, {\n body,\n headers,\n method: request.method ?? \"GET\",\n });\n\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`);\n }\n\n if (response.status === 204) {\n return undefined as T;\n }\n\n const contentType = response.headers.get(\"content-type\") ?? \"\";\n if (!contentType.includes(\"application/json\")) {\n return (await response.text()) as T;\n }\n\n const json = await response.json();\n return camelizeKeys(json as object) as T;\n }\n\n private resolveAuthMode(\n service: PublicApiService,\n auth: OperationRequest[\"auth\"] = \"auto\",\n ): \"none\" | \"user\" {\n if (auth !== \"auto\") {\n if (auth === \"app\") {\n throw new Error(\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\",\n );\n }\n\n return auth;\n }\n\n if (service === \"auth\" || service === \"quranReflect\") {\n return \"user\";\n }\n\n return \"none\";\n }\n\n private async applyAuthenticationHeaders(\n service: PublicApiService,\n auth: \"none\" | \"user\",\n headers: Headers,\n request: OperationRequest,\n ): Promise<void> {\n if (request.accessToken) {\n this.setTokenHeaders(service, headers, request.accessToken);\n return;\n }\n\n if (auth === \"none\") {\n return;\n }\n\n const session = await this.getUserSession();\n if (!session?.accessToken) {\n throw new Error(\n \"This operation requires a user session. Sign in first or use @quranjs/api/server.\",\n );\n }\n\n this.setTokenHeaders(service, headers, session.accessToken);\n }\n\n private setTokenHeaders(\n service: PublicApiService,\n headers: Headers,\n accessToken: string,\n ): void {\n if (service === \"oauth2\") {\n headers.set(\"Authorization\", `Bearer ${accessToken}`);\n return;\n }\n\n headers.set(\"x-auth-token\", accessToken);\n }\n\n private resolveServiceBaseUrl(service: PublicApiService): {\n baseUrl: string;\n usesGateway: boolean;\n } {\n const { services } = this.config;\n const directBaseUrl =\n service === \"auth\"\n ? services?.authBaseUrl\n : service === \"quranReflect\"\n ? services?.quranReflectBaseUrl\n : (services?.oauth2BaseUrl ?? services?.tokenHost);\n\n if (directBaseUrl) {\n return {\n baseUrl: removeTrailingSlash(directBaseUrl),\n usesGateway: false,\n };\n }\n\n if (services?.gatewayUrl && service !== \"oauth2\") {\n return {\n baseUrl: removeTrailingSlash(services.gatewayUrl),\n usesGateway: true,\n };\n }\n\n return {\n baseUrl: DEFAULT_BASE_URLS[service],\n usesGateway: false,\n };\n }\n\n private normalizeServicePath(\n service: PublicApiService,\n path: string,\n usesGateway: boolean,\n ): string {\n let normalizedPath = ensureLeadingSlash(normalizePathTemplate(path));\n for (const legacyPrefix of LEGACY_PREFIXES[service]) {\n if (normalizedPath.startsWith(legacyPrefix)) {\n normalizedPath = ensureLeadingSlash(\n normalizedPath.slice(legacyPrefix.length),\n );\n break;\n }\n }\n\n const prefix = usesGateway\n ? GATEWAY_PATH_PREFIX[service]\n : DIRECT_PATH_PREFIX[service];\n\n if (normalizedPath.startsWith(prefix) || prefix.length === 0) {\n return normalizedPath;\n }\n\n return `${prefix}${normalizedPath}`;\n }\n}\n","import type { AuthService } from \"@/generated/public-contracts\";\nimport type {\n ApiParams,\n HTTPMethod,\n OperationRequest,\n PublicClientConfig,\n TokenResponse,\n} from \"@/types\";\nimport { publicOperationCatalog } from \"@/generated/public-contracts\";\nimport { toUserSession } from \"@/lib/http-utils\";\nimport { createGeneratedGroups, createRawClient } from \"@/lib/runtime-utils\";\nimport { replacePathParams } from \"@/lib/url\";\nimport { PublicQuranFetcher } from \"@/sdk/public-fetcher\";\n\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 SERVER_ONLY_MESSAGE =\n \"This API requires @quranjs/api/server or a backend. Content and search are server-side for confidential clients.\";\nconst LEGACY_BOOKMARK_GET_MESSAGE =\n \"auth.bookmarks.get(bookmarkId) is not supported because /v1/bookmarks/bookmark expects bookmark detail query parameters. Pass a query object such as { mushafId, key, type, verseNumber } or { mushafId, isReading: true }.\";\n\nconst createUserServiceRequest =\n (fetcher: PublicQuranFetcher, service: AuthService) =>\n (method: HTTPMethod, path: string, request?: OperationRequest) => {\n return fetcher.request<unknown>(\n service,\n replacePathParams(path, request?.path),\n request?.query,\n {\n ...request,\n auth: \"user\",\n method,\n path: undefined,\n query: undefined,\n },\n );\n };\n\nconst createAuthFacade = (fetcher: PublicQuranFetcher) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.auth.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.auth.v1,\n raw,\n );\n const request = createUserServiceRequest(fetcher, \"auth\");\n\n return {\n ...generatedGroups,\n collections: {\n ...generatedGroups.collections,\n addBookmark: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}/bookmarks\", {\n body,\n path: { collectionId },\n }),\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections\", { body }),\n get: (collectionId: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n query,\n }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/collections\", { query }),\n listAll: (query?: ApiParams) =>\n request(\"GET\", \"/v1/collections/all\", { query }),\n remove: (collectionId: string) =>\n request(\"DELETE\", \"/v1/collections/{collectionId}\", {\n path: { collectionId },\n }),\n removeBookmark: (collectionId: string, bookmarkId: string) =>\n request(\n \"DELETE\",\n \"/v1/collections/{collectionId}/bookmarks/{bookmarkId}\",\n {\n path: { bookmarkId, collectionId },\n },\n ),\n update: (collectionId: string, body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/collections/{collectionId}\", {\n body,\n path: { collectionId },\n }),\n },\n bookmarks: {\n ...generatedGroups.bookmarks,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/bookmarks\", { body }),\n get: async (query?: ApiParams | string) => {\n if (typeof query === \"string\") {\n throw new Error(LEGACY_BOOKMARK_GET_MESSAGE);\n }\n\n return request(\"GET\", \"/v1/bookmarks/bookmark\", {\n query,\n });\n },\n list: (query?: ApiParams) => request(\"GET\", \"/v1/bookmarks\", { query }),\n listCollections: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/collections\", { query }),\n listRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/bookmarks/ayahs-range\", { query }),\n remove: (bookmarkId: string) =>\n request(\"DELETE\", \"/v1/bookmarks/{bookmarkId}\", {\n path: { bookmarkId },\n }),\n },\n goals: {\n ...generatedGroups.goals,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/goals\", { body }),\n estimate: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/estimate\", { query }),\n getTodaysPlan: (query?: ApiParams) =>\n request(\"GET\", \"/v1/goals/get-todays-plan\", { query }),\n remove: (id: string) =>\n request(\"DELETE\", \"/v1/goals/{id}\", { path: { id } }),\n update: (id: string, body: Record<string, unknown>) =>\n request(\"PUT\", \"/v1/goals/{id}\", {\n body,\n path: { id },\n }),\n },\n notes: {\n ...generatedGroups.notes,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes\", { body }),\n get: (noteId: string) =>\n request(\"GET\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n list: (query?: ApiParams) => request(\"GET\", \"/v1/notes\", { query }),\n listByAttachedEntity: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-attached-entity\", { query }),\n listByRange: (query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-range\", { query }),\n listByVerseKey: (verseKey: string, query?: ApiParams) =>\n request(\"GET\", \"/v1/notes/by-verse/{verseKey}\", {\n path: { verseKey },\n query,\n }),\n publish: (noteId: string, body?: Record<string, unknown>) =>\n request(\"POST\", \"/v1/notes/{noteId}/publish\", {\n body,\n path: { noteId },\n }),\n remove: (noteId: string) =>\n request(\"DELETE\", \"/v1/notes/{noteId}\", { path: { noteId } }),\n update: (noteId: string, body: Record<string, unknown>) =>\n request(\"PATCH\", \"/v1/notes/{noteId}\", {\n body,\n path: { noteId },\n }),\n },\n preferences: {\n ...generatedGroups.preferences,\n bulkUpdate: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences/bulk\", { body }),\n get: (query?: ApiParams) => request(\"GET\", \"/v1/preferences\", { query }),\n update: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/preferences\", { body }),\n },\n raw,\n readingSessions: {\n ...generatedGroups.readingSessions,\n create: (body: Record<string, unknown>) =>\n request(\"POST\", \"/v1/reading-sessions\", { body }),\n list: (query?: ApiParams) =>\n request(\"GET\", \"/v1/reading-sessions\", { query }),\n },\n };\n};\n\nconst createQuranReflectFacade = (\n fetcher: PublicQuranFetcher,\n): QuranReflectFacade => {\n const raw = createRawClient(fetcher, publicOperationCatalog.quranReflect.v1);\n const generatedGroups = createGeneratedGroups(\n publicOperationCatalog.quranReflect.v1,\n raw,\n );\n\n return {\n comments: generatedGroups.comments ?? {},\n posts: generatedGroups.posts ?? {},\n raw,\n rooms: generatedGroups.rooms ?? {},\n tags: generatedGroups.tags ?? {},\n users: generatedGroups.users ?? {},\n };\n};\n\nconst createOAuth2Facade = (\n fetcher: PublicQuranFetcher,\n config: PublicClientConfig,\n) => {\n const raw = createRawClient(fetcher, publicOperationCatalog.oauth2.v1);\n\n const exchangeToken = async (\n body: URLSearchParams,\n options: { requiresRefreshToken?: boolean } = {},\n ) => {\n if (config.clientType !== \"public\") {\n throw new Error(\n \"This OAuth2 exchange requires a backend because your client is confidential.\",\n );\n }\n\n if (options.requiresRefreshToken && !body.get(\"refresh_token\")) {\n throw new Error(\"Missing refresh token.\");\n }\n\n body.set(\"client_id\", config.clientId);\n\n const requestRefreshToken = body.get(\"refresh_token\") ?? undefined;\n const storedSession = options.requiresRefreshToken\n ? await fetcher.getUserSession()\n : null;\n const currentSession =\n options.requiresRefreshToken && requestRefreshToken\n ? { ...(storedSession ?? {}), refreshToken: requestRefreshToken }\n : storedSession;\n\n const token = await fetcher.request<TokenResponse>(\n \"oauth2\",\n \"/oauth2/token\",\n undefined,\n {\n auth: \"none\",\n body,\n contentType: \"application/x-www-form-urlencoded\",\n method: \"POST\",\n },\n );\n\n await fetcher.setUserSession(toUserSession(token, currentSession));\n return token;\n };\n\n return {\n authorizeUrl: (query: Record<string, string | number | undefined>) =>\n fetcher.buildServiceUrl(\"oauth2\", \"/oauth2/auth\", query as ApiParams),\n exchangeCode: (params: {\n code: string;\n codeVerifier?: string;\n redirectUri: string;\n scope?: string;\n }) => {\n const body = new URLSearchParams({\n code: params.code,\n grant_type: \"authorization_code\",\n redirect_uri: params.redirectUri,\n });\n\n if (params.codeVerifier) {\n body.set(\"code_verifier\", params.codeVerifier);\n }\n\n if (params.scope) {\n body.set(\"scope\", params.scope);\n }\n\n return exchangeToken(body);\n },\n getUserInfo: (accessToken?: string) =>\n fetcher.request(\"oauth2\", \"/userinfo\", undefined, {\n accessToken,\n auth: \"user\",\n method: \"GET\",\n }),\n introspect: () => {\n throw new Error(\n \"Token introspection requires @quranjs/api/server or a backend.\",\n );\n },\n logout: (query?: ApiParams) =>\n fetcher.request(\"oauth2\", \"/oauth2/sessions/logout\", query, {\n auth: \"none\",\n method: \"GET\",\n }),\n raw,\n refresh: async (refreshToken?: string) => {\n const currentSession = await fetcher.getUserSession();\n const body = new URLSearchParams({\n grant_type: \"refresh_token\",\n refresh_token: refreshToken ?? currentSession?.refreshToken ?? \"\",\n });\n\n return exchangeToken(body, { requiresRefreshToken: true });\n },\n };\n};\n\ntype ServerOnlyGuard = ((...args: unknown[]) => Promise<never>) & {\n [key: string]: ServerOnlyGuard | undefined;\n};\n\nconst createServerOnlyGuard = (): ServerOnlyGuard => {\n const fail = (() =>\n Promise.reject(new Error(SERVER_ONLY_MESSAGE))) as ServerOnlyGuard;\n const proxy = new Proxy(fail, {\n apply() {\n return Promise.reject(new Error(SERVER_ONLY_MESSAGE));\n },\n get(_target, property) {\n if (property === \"then\") {\n return undefined;\n }\n\n return proxy;\n },\n });\n\n return proxy;\n};\n\nexport const createPublicRuntimeClient = (config: PublicClientConfig) => {\n const fetcher = new PublicQuranFetcher(config);\n fetcher.getFetch();\n\n const authV1 = createAuthFacade(fetcher);\n const quranReflectV1 = createQuranReflectFacade(fetcher);\n const oauth2V1 = createOAuth2Facade(fetcher, config);\n const serverOnlyGuard = createServerOnlyGuard();\n\n const raw = {\n auth: {\n v1: authV1.raw,\n },\n content: {\n v4: serverOnlyGuard,\n },\n oauth2: {\n v1: oauth2V1.raw,\n },\n quranReflect: {\n v1: quranReflectV1.raw,\n },\n search: {\n v1: serverOnlyGuard,\n },\n };\n\n return {\n audio: serverOnlyGuard,\n auth: {\n ...authV1,\n v1: authV1,\n },\n chapters: serverOnlyGuard,\n clearCachedTokens: () => fetcher.clearCachedTokens(),\n content: serverOnlyGuard,\n getUserSession: () => fetcher.getUserSession(),\n hadithReferences: serverOnlyGuard,\n juzs: serverOnlyGuard,\n oauth2: {\n ...oauth2V1,\n v1: oauth2V1,\n },\n quranReflect: {\n ...quranReflectV1,\n v1: quranReflectV1,\n },\n raw,\n resources: serverOnlyGuard,\n search: serverOnlyGuard,\n verses: serverOnlyGuard,\n };\n};\n","import type { PublicClientConfig } from \"@/types\";\n\nimport { createPublicRuntimeClient } from \"./runtime/create-public-client\";\n\nexport type { TokenStorage, UserSession } from \"@/types\";\n\nexport const createPublicClient = (config: PublicClientConfig) => {\n if ((config as PublicClientConfig & { clientSecret?: string }).clientSecret) {\n throw new Error(\"client_secret is server-only. Use @quranjs/api/server.\");\n }\n\n return createPublicRuntimeClient(config);\n};\n\nexport type PublicClient = ReturnType<typeof createPublicClient>;\n"]}