@amityco/ts-sdk 7.27.1-7cc40d1b.0 → 7.27.1-8317d53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/dist/@types/core/errors.d.ts +2 -1
  2. package/dist/@types/core/errors.d.ts.map +1 -1
  3. package/dist/@types/core/transport.d.ts +1 -0
  4. package/dist/@types/core/transport.d.ts.map +1 -1
  5. package/dist/@types/domains/client.d.ts +86 -0
  6. package/dist/@types/domains/client.d.ts.map +1 -1
  7. package/dist/channelRepository/observers/getChannel.d.ts.map +1 -1
  8. package/dist/client/api/createClient.d.ts.map +1 -1
  9. package/dist/client/api/getModuleSettings.d.ts +25 -0
  10. package/dist/client/api/getModuleSettings.d.ts.map +1 -0
  11. package/dist/client/api/index.d.ts +1 -0
  12. package/dist/client/api/index.d.ts.map +1 -1
  13. package/dist/client/api/tests/integration/moduleSettings.integration.test.d.ts +2 -0
  14. package/dist/client/api/tests/integration/moduleSettings.integration.test.d.ts.map +1 -0
  15. package/dist/client/index.d.ts +1 -0
  16. package/dist/client/index.d.ts.map +1 -1
  17. package/dist/client/utils/parseModuleSettings.d.ts +9 -0
  18. package/dist/client/utils/parseModuleSettings.d.ts.map +1 -0
  19. package/dist/client/utils/resolveModuleAvailability.d.ts +39 -0
  20. package/dist/client/utils/resolveModuleAvailability.d.ts.map +1 -0
  21. package/dist/client/utils/tests/resolveModuleAvailability.test.d.ts +2 -0
  22. package/dist/client/utils/tests/resolveModuleAvailability.test.d.ts.map +1 -0
  23. package/dist/core/errors.d.ts +20 -0
  24. package/dist/core/errors.d.ts.map +1 -1
  25. package/dist/core/transports/http.d.ts.map +1 -1
  26. package/dist/core/transports/tests/moduleNotEntitled.test.d.ts +2 -0
  27. package/dist/core/transports/tests/moduleNotEntitled.test.d.ts.map +1 -0
  28. package/dist/core/transports/utils.d.ts.map +1 -1
  29. package/dist/index.cjs.js +242 -5
  30. package/dist/index.d.ts +2 -0
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.esm.js +241 -6
  33. package/dist/index.umd.js +2 -2
  34. package/package.json +1 -1
package/dist/index.cjs.js CHANGED
@@ -812,6 +812,28 @@ class ASCConnectionError extends ASCError {
812
812
  this.event = event;
813
813
  }
814
814
  }
815
+ /**
816
+ * Thrown when the network does not own a module the call needs. Raised from
817
+ * any module endpoint under `enforce` enforcement, mapped from app code
818
+ * `400325` — never from HTTP 403 alone, which already covers a role problem
819
+ * (`400300` / `400301`), a visitor (`403999`) and a bot (`403998`).
820
+ *
821
+ * `modules` carries **every** key the refusal named, as raw strings, so a
822
+ * caller can say which entitlement is absent without a second request.
823
+ *
824
+ * @category Errors
825
+ */
826
+ class AmityModuleNotEntitledError extends ASCApiError {
827
+ /**
828
+ * @param message The server's message, e.g. `Module not entitled: chat, live`
829
+ * @param modules Every module key from the rejection's `data.modules`
830
+ */
831
+ constructor(message, modules = []) {
832
+ super(message, 400325 /* Amity.ServerError.MODULE_NOT_ENTITLED */, "error" /* Amity.ErrorLevel.ERROR */);
833
+ this.modules = modules;
834
+ this.type = 'AmityModuleNotEntitledError';
835
+ }
836
+ }
815
837
 
816
838
  let activeClient = null;
817
839
  /**
@@ -1961,6 +1983,22 @@ function computeUrl(type, region) {
1961
1983
 
1962
1984
  const uuid = () => uuid__default["default"].v4().toString();
1963
1985
 
1986
+ /**
1987
+ * Reads the module keys a `MODULE_NOT_ENTITLED` rejection named.
1988
+ *
1989
+ * Every entry is kept, as a raw string: one call can need more than one
1990
+ * module, and a key this build predates is still the only part of the
1991
+ * payload a customer can act on.
1992
+ *
1993
+ * @category Transport
1994
+ * @hidden
1995
+ */
1996
+ const extractNotEntitledModules = (data) => {
1997
+ const { modules } = data !== null && data !== void 0 ? data : {};
1998
+ if (!Array.isArray(modules))
1999
+ return [];
2000
+ return modules.filter((module) => typeof module === 'string');
2001
+ };
1964
2002
  /**
1965
2003
  * Unwraps v3 server payload (for error handling and type extraction)
1966
2004
  *
@@ -1980,6 +2018,15 @@ const unwrapPayload = (response) => {
1980
2018
  throw new ASCUnknownError(response.code);
1981
2019
  }
1982
2020
  else if (response.status === 'error') {
2021
+ /*
2022
+ * An entitlement refusal must not arrive as a generic failure: a customer
2023
+ * cannot then tell a module they have not bought from an outage. Keyed on
2024
+ * the app code, never on the HTTP status, so a role or membership problem
2025
+ * still maps to the generic error.
2026
+ */
2027
+ if (response.code === 400325 /* Amity.ServerError.MODULE_NOT_ENTITLED */) {
2028
+ throw new AmityModuleNotEntitledError(response.message, extractNotEntitledModules(response.data));
2029
+ }
1983
2030
  throw new ASCApiError(response.message, response.code, "error" /* Amity.ErrorLevel.ERROR */);
1984
2031
  }
1985
2032
  // unjust, but helps force uncast "T | undefined" to allow deconstruction without warnings
@@ -2174,20 +2221,28 @@ const createHttpTransport = (endpoint) => {
2174
2221
  });
2175
2222
  return response;
2176
2223
  }, error => {
2177
- var _a, _b, _c;
2224
+ var _a, _b, _c, _d;
2178
2225
  const { response } = error;
2179
2226
  // handle unauthorized request
2180
2227
  if ((response === null || response === void 0 ? void 0 : response.data.code) === 400100 /* Amity.ServerError.UNAUTHORIZED */) {
2181
2228
  fireEvent('tokenTerminated', "terminated" /* Amity.SessionStates.TERMINATED */);
2182
2229
  }
2230
+ // handle globally banned user. The realtime `user.didGlobalBan` event can be missed
2231
+ // (e.g. MQTT dropped before delivery), so mirror the 400100 handling above and fire
2232
+ // the same virtual event the login subscriptions already listen to. That terminates
2233
+ // the session with `TokenTerminationReason.GLOBAL_BAN` and notifies `onClientBanned`
2234
+ // consumers, instead of leaving the session `established` with a revoked token.
2235
+ if (((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.code) === 400312 /* Amity.ServerError.GLOBAL_BAN */) {
2236
+ fireEvent('user.didGlobalBan', { users: [], files: [] });
2237
+ }
2183
2238
  // handle visitor daily usage limit exceeded
2184
- if (((_a = response === null || response === void 0 ? void 0 : response.data) === null || _a === void 0 ? void 0 : _a.code) === 400323 /* Amity.ServerError.VISITOR_USAGE_LIMIT_EXCEEDED */) {
2239
+ if (((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.code) === 400323 /* Amity.ServerError.VISITOR_USAGE_LIMIT_EXCEEDED */) {
2185
2240
  throttledFireVisitorUsageLimit();
2186
2241
  throw new ASCError('Visitor usage limit exceeded', 400323 /* Amity.ServerError.VISITOR_USAGE_LIMIT_EXCEEDED */, "error" /* Amity.ErrorLevel.ERROR */);
2187
2242
  }
2188
2243
  // if it's an error with status in the response payload,
2189
2244
  // then it's an expected error.
2190
- if ((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.status) {
2245
+ if ((_c = response === null || response === void 0 ? void 0 : response.data) === null || _c === void 0 ? void 0 : _c.status) {
2191
2246
  unwrapPayload(response === null || response === void 0 ? void 0 : response.data);
2192
2247
  }
2193
2248
  // as on request cancellation error is returned
@@ -2195,7 +2250,7 @@ const createHttpTransport = (endpoint) => {
2195
2250
  throw error;
2196
2251
  }
2197
2252
  // unexpected error.
2198
- throw new Error((_c = response === null || response === void 0 ? void 0 : response.data) !== null && _c !== void 0 ? _c : error);
2253
+ throw new Error((_d = response === null || response === void 0 ? void 0 : response.data) !== null && _d !== void 0 ? _d : error);
2199
2254
  });
2200
2255
  instance.defaults.paramsSerializer = {
2201
2256
  encode: params => encodeURIComponent(params),
@@ -5465,6 +5520,95 @@ const getForYouFeedSetting = async () => {
5465
5520
  };
5466
5521
  /* end_public_function */
5467
5522
 
5523
+ const ENFORCEMENT_MODES = ['off', 'shadow', 'enforce'];
5524
+ /**
5525
+ * An unrecognised mode decodes to `off`, and so does an absent one. A mode
5526
+ * this build does not know must not withhold anything — defaulting to
5527
+ * `enforce` would let a server-side rename black out a customer's app.
5528
+ *
5529
+ * @category private
5530
+ */
5531
+ const parseEnforcement = (mode) => {
5532
+ const match = ENFORCEMENT_MODES.find(value => value === mode);
5533
+ return match !== null && match !== void 0 ? match : 'off';
5534
+ };
5535
+ const parseGrants = (modules) => {
5536
+ const grants = {};
5537
+ Object.entries(modules !== null && modules !== void 0 ? modules : {}).forEach(([key, granted]) => {
5538
+ grants[key] = granted === true;
5539
+ });
5540
+ return grants;
5541
+ };
5542
+ /**
5543
+ * Every catalog entry survives, including one whose key this build has never
5544
+ * heard of, so a module added server-side is still listable.
5545
+ *
5546
+ * @category private
5547
+ */
5548
+ const parseCatalog = (catalog) => {
5549
+ const parsed = {};
5550
+ Object.entries(catalog !== null && catalog !== void 0 ? catalog : {}).forEach(([key, definition]) => {
5551
+ const rawRequires = definition === null || definition === void 0 ? void 0 : definition.requires;
5552
+ const requires = Array.isArray(rawRequires)
5553
+ ? rawRequires.filter((entry) => typeof entry === 'string')
5554
+ : [];
5555
+ parsed[key] = {
5556
+ label: typeof (definition === null || definition === void 0 ? void 0 : definition.label) === 'string' ? definition.label : key,
5557
+ kind: (definition === null || definition === void 0 ? void 0 : definition.kind) === 'setting' ? 'setting' : 'api',
5558
+ requires,
5559
+ };
5560
+ });
5561
+ return parsed;
5562
+ };
5563
+ /**
5564
+ * Decodes `GET /api/v3/network-settings/modules`. Nothing is trimmed: the
5565
+ * catalog is the dependency table callers resolve against, and a client that
5566
+ * cannot see it has to hardcode one.
5567
+ *
5568
+ * @category private
5569
+ */
5570
+ const parseModuleSettings = (raw) => {
5571
+ var _a;
5572
+ return ({
5573
+ enforcement: parseEnforcement((_a = raw === null || raw === void 0 ? void 0 : raw.enforcement) !== null && _a !== void 0 ? _a : raw === null || raw === void 0 ? void 0 : raw.mode),
5574
+ modules: parseGrants(raw === null || raw === void 0 ? void 0 : raw.modules),
5575
+ catalog: parseCatalog(raw === null || raw === void 0 ? void 0 : raw.catalog),
5576
+ });
5577
+ };
5578
+
5579
+ /* begin_public_function
5580
+ id: client.getModuleSettings
5581
+ */
5582
+ /**
5583
+ * ```js
5584
+ * import { Client } from '@amityco/ts-sdk'
5585
+ * const moduleSettings = await Client.getModuleSettings()
5586
+ * ```
5587
+ *
5588
+ * Fetches the network's module entitlements: which modules the network was
5589
+ * granted, whether core is enforcing those grants, and the catalog of all
5590
+ * modules with their dependency chains.
5591
+ *
5592
+ * The payload is returned whole — `catalog` is the dependency table
5593
+ * {@link resolveModuleAvailability} reads, and a client that cannot see it has
5594
+ * to hardcode one.
5595
+ *
5596
+ * The read is **advisory**. It tells a host what to offer; under `enforce` the
5597
+ * backend refuses a call to an unowned module regardless of what was resolved
5598
+ * here, and that refusal arrives as `AmityModuleNotEntitledError`.
5599
+ *
5600
+ * @returns A Promise of {@link Amity.ModuleSettings} object
5601
+ *
5602
+ * @category Client API
5603
+ * @async
5604
+ */
5605
+ const getModuleSettings = async () => {
5606
+ const client = getActiveClient();
5607
+ const { data } = await client.http.get(`/api/v3/network-settings/modules`);
5608
+ return parseModuleSettings(data);
5609
+ };
5610
+ /* end_public_function */
5611
+
5468
5612
  const checkUserPermission = (userId, permission) => {
5469
5613
  var _a;
5470
5614
  const user = (_a = pullFromCache(['user', 'get', userId])) === null || _a === void 0 ? void 0 : _a.data;
@@ -9189,6 +9333,7 @@ const createClient = (apiKey, apiRegion = API_REGIONS.SG, { debugSession = DEFAU
9189
9333
  getMarkerSyncConsistentMode,
9190
9334
  getProductCatalogueSetting,
9191
9335
  getForYouFeedSetting,
9336
+ getModuleSettings,
9192
9337
  /**
9193
9338
  * Prefix for the deviceId key in the local storage or async storage.
9194
9339
  * This is allow user to have multiple SDK client and Mqtt client within the same app.
@@ -10234,6 +10379,92 @@ const getUserUnread = (callback) => {
10234
10379
  };
10235
10380
  };
10236
10381
 
10382
+ /**
10383
+ * ```js
10384
+ * import { Client, resolveModuleAvailability } from '@amityco/ts-sdk'
10385
+ *
10386
+ * const moduleSettings = await Client.getModuleSettings()
10387
+ *
10388
+ * if (resolveModuleAvailability(moduleSettings, 'live').isAvailable) {
10389
+ * // offer the Live entry point
10390
+ * }
10391
+ * ```
10392
+ *
10393
+ * Resolves whether one module is usable on this network.
10394
+ *
10395
+ * Availability is a function of all three fields of
10396
+ * {@link Amity.ModuleSettings} — the enforcement mode, the module's own grant,
10397
+ * and its prerequisite chain — combined in that order. Reading `modules`
10398
+ * directly contradicts the mode: staging answers `mode: 'off'` with
10399
+ * `modules: {}`, and every module still works.
10400
+ *
10401
+ * The dependency table comes from the payload's `catalog`, never from a
10402
+ * hardcoded copy, so a chain the backend changes takes effect without an SDK
10403
+ * release.
10404
+ *
10405
+ * The SDK does not hold the settings — the caller keeps what it fetched and
10406
+ * resolves against it. With no settings at all (a fetch that never succeeded)
10407
+ * the caller reads that as every module available: under `enforce` the backend
10408
+ * refuses the calls anyway, so the exposure is a screen that offers too much,
10409
+ * not one that withholds what a customer paid for.
10410
+ *
10411
+ * @param moduleSettings The network's module settings
10412
+ * @param moduleKey The module to resolve — an {@link Amity.ModuleKey}, so the
10413
+ * 15 keys this build knows complete and type-check while a catalog entry it
10414
+ * does not know still resolves.
10415
+ * @returns An {@link Amity.ModuleAvailability} answer
10416
+ *
10417
+ * @category Client API
10418
+ */
10419
+ const resolveModuleAvailability = (moduleSettings, moduleKey, seen = new Set()) => {
10420
+ var _a, _b, _c, _d, _e;
10421
+ const isGranted = (_a = moduleSettings.modules[moduleKey]) !== null && _a !== void 0 ? _a : false;
10422
+ /*
10423
+ * Not enforcing: nothing is withheld, and no graph walk is needed. This has
10424
+ * to come first — `off` and `shadow` resolve available whatever the grant
10425
+ * says, and a cycle would otherwise return unavailable under `off` too.
10426
+ */
10427
+ if (moduleSettings.enforcement !== 'enforce') {
10428
+ return { moduleKey, isAvailable: true, isGranted };
10429
+ }
10430
+ // A cycle in `requires` resolves unavailable rather than recursing.
10431
+ if (seen.has(moduleKey)) {
10432
+ return {
10433
+ moduleKey,
10434
+ isAvailable: false,
10435
+ isGranted,
10436
+ reason: 'prerequisiteUnavailable',
10437
+ unsatisfied: (_c = (_b = moduleSettings.catalog[moduleKey]) === null || _b === void 0 ? void 0 : _b.requires) !== null && _c !== void 0 ? _c : [],
10438
+ };
10439
+ }
10440
+ // The module's own grant is evaluated before its prerequisites, so
10441
+ // `notGranted` is reported in preference when both hold.
10442
+ if (!isGranted) {
10443
+ return { moduleKey, isAvailable: false, isGranted, reason: 'notGranted' };
10444
+ }
10445
+ const requires = (_e = (_d = moduleSettings.catalog[moduleKey]) === null || _d === void 0 ? void 0 : _d.requires) !== null && _e !== void 0 ? _e : [];
10446
+ if (requires.length === 0)
10447
+ return { moduleKey, isAvailable: true, isGranted };
10448
+ // `requires` is satisfied by any one entry, transitively.
10449
+ const isSatisfied = requires.some(dependency => resolveModuleAvailability(moduleSettings, dependency, new Set([...seen, moduleKey]))
10450
+ .isAvailable);
10451
+ if (isSatisfied)
10452
+ return { moduleKey, isAvailable: true, isGranted };
10453
+ /*
10454
+ * `unsatisfied` carries the whole `requires` list rather than one entry. Any
10455
+ * one of them would have satisfied the requirement, so naming a single
10456
+ * module misdirects: telling a Community-only customer "Comment needs post"
10457
+ * hides that Story would also have done.
10458
+ */
10459
+ return {
10460
+ moduleKey,
10461
+ isAvailable: false,
10462
+ isGranted,
10463
+ reason: 'prerequisiteUnavailable',
10464
+ unsatisfied: requires,
10465
+ };
10466
+ };
10467
+
10237
10468
  var index$t = /*#__PURE__*/Object.freeze({
10238
10469
  __proto__: null,
10239
10470
  getActiveClient: getActiveClient,
@@ -10257,6 +10488,7 @@ var index$t = /*#__PURE__*/Object.freeze({
10257
10488
  getShareableLinkConfiguration: getShareableLinkConfiguration,
10258
10489
  getProductCatalogueSetting: getProductCatalogueSetting,
10259
10490
  getForYouFeedSetting: getForYouFeedSetting,
10491
+ getModuleSettings: getModuleSettings,
10260
10492
  loginAsVisitor: loginAsVisitor,
10261
10493
  loginAsBot: loginAsBot,
10262
10494
  getCurrentUser: getCurrentUser,
@@ -10284,7 +10516,8 @@ var index$t = /*#__PURE__*/Object.freeze({
10284
10516
  startMarkerSync: startMarkerSync,
10285
10517
  startUnreadSync: startUnreadSync,
10286
10518
  stopUnreadSync: stopUnreadSync,
10287
- getMarkerSyncConsistentMode: getMarkerSyncConsistentMode
10519
+ getMarkerSyncConsistentMode: getMarkerSyncConsistentMode,
10520
+ resolveModuleAvailability: resolveModuleAvailability
10288
10521
  });
10289
10522
 
10290
10523
  /* begin_public_function
@@ -21277,6 +21510,8 @@ const getChannel = (channelId, callback) => {
21277
21510
  onChannelMemberRemoved,
21278
21511
  onChannelMemberBanned,
21279
21512
  onChannelMemberUnbanned,
21513
+ onChannelMemberRoleAdded,
21514
+ onChannelMemberRoleRemoved,
21280
21515
  onChannelSetMuted,
21281
21516
  onChannelMessagePinned,
21282
21517
  onChannelMessageUnpinned,
@@ -36900,6 +37135,7 @@ class AmityAttachmentProductTags {
36900
37135
  exports.API_REGIONS = API_REGIONS;
36901
37136
  exports.AdRepository = index$6;
36902
37137
  exports.AmityAttachmentProductTags = AmityAttachmentProductTags;
37138
+ exports.AmityModuleNotEntitledError = AmityModuleNotEntitledError;
36903
37139
  exports.CategoryRepository = index$g;
36904
37140
  exports.ChannelRepository = index$k;
36905
37141
  exports.Client = index$t;
@@ -37008,6 +37244,7 @@ exports.pushToCache = pushToCache;
37008
37244
  exports.queryCache = queryCache;
37009
37245
  exports.queryOptions = queryOptions;
37010
37246
  exports.queryRoles = queryRoles;
37247
+ exports.resolveModuleAvailability = resolveModuleAvailability;
37011
37248
  exports.restoreCache = restoreCache;
37012
37249
  exports.runQuery = runQuery;
37013
37250
  exports.sortByChannelSegment = sortByChannelSegment;
package/dist/index.d.ts CHANGED
@@ -35,4 +35,6 @@ export * as EventRepository from './eventRepository';
35
35
  export * as ProductRepository from './productRepository';
36
36
  export * as CuratedContentRepository from './curatedContentRepository';
37
37
  export { AmityAttachmentProductTags } from './productRepository/helpers';
38
+ export { AmityModuleNotEntitledError } from './core/errors';
39
+ export { resolveModuleAvailability } from './client/utils/resolveModuleAvailability';
38
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAEzB,cAAc,WAAW,CAAC;AAG1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAE5B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,cAAc,YAAY,CAAC;AAG3B,OAAO,KAAK,kBAAkB,MAAM,sBAAsB,CAAC;AAE3D,cAAc,cAAc,CAAC;AAG7B,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,kBAAkB,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,wBAAwB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,UAAU,CAAC;AAEzB,cAAc,WAAW,CAAC;AAG1B,cAAc,cAAc,CAAC;AAC7B,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAE5B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,cAAc,YAAY,CAAC;AAG3B,OAAO,KAAK,kBAAkB,MAAM,sBAAsB,CAAC;AAE3D,cAAc,cAAc,CAAC;AAG7B,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,cAAc,iBAAiB,CAAC;AAGhC,OAAO,KAAK,mBAAmB,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,kBAAkB,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AAEnE,OAAO,KAAK,cAAc,MAAM,kBAAkB,CAAC;AAEnD,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAGrD,OAAO,KAAK,YAAY,MAAM,gBAAgB,CAAC;AAG/C,cAAc,gBAAgB,CAAC;AAE/B,OAAO,KAAK,gBAAgB,MAAM,oBAAoB,CAAC;AAEvD,OAAO,KAAK,oBAAoB,MAAM,wBAAwB,CAAC;AAE/D,OAAO,KAAK,sBAAsB,MAAM,0BAA0B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAE3E,OAAO,KAAK,eAAe,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,iBAAiB,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,wBAAwB,MAAM,4BAA4B,CAAC;AAEvE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAEzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0CAA0C,CAAC"}