@explorins/pers-sdk 1.2.6 → 1.3.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.
Files changed (87) hide show
  1. package/README.md +416 -0
  2. package/dist/campaign/api/campaign-api.d.ts +19 -65
  3. package/dist/campaign/api/campaign-api.d.ts.map +1 -1
  4. package/dist/campaign.cjs +51 -105
  5. package/dist/campaign.cjs.map +1 -1
  6. package/dist/campaign.js +49 -103
  7. package/dist/campaign.js.map +1 -1
  8. package/dist/chunks/base-token-service-BA81_Ouq.js +532 -0
  9. package/dist/chunks/base-token-service-BA81_Ouq.js.map +1 -0
  10. package/dist/chunks/base-token-service-BQ6uFoki.cjs +537 -0
  11. package/dist/chunks/base-token-service-BQ6uFoki.cjs.map +1 -0
  12. package/dist/chunks/jwt.function-BYiyl-z_.cjs +25 -0
  13. package/dist/chunks/jwt.function-BYiyl-z_.cjs.map +1 -0
  14. package/dist/chunks/jwt.function-d6jPtBqI.js +23 -0
  15. package/dist/chunks/jwt.function-d6jPtBqI.js.map +1 -0
  16. package/dist/chunks/pers-sdk-JC-hSYUd.js +1377 -0
  17. package/dist/chunks/pers-sdk-JC-hSYUd.js.map +1 -0
  18. package/dist/chunks/pers-sdk-_1sTi9x9.cjs +1384 -0
  19. package/dist/chunks/pers-sdk-_1sTi9x9.cjs.map +1 -0
  20. package/dist/core/auth/api/auth-api.d.ts +4 -2
  21. package/dist/core/auth/api/auth-api.d.ts.map +1 -1
  22. package/dist/core/auth/auth-constants.d.ts +33 -0
  23. package/dist/core/auth/auth-constants.d.ts.map +1 -0
  24. package/dist/core/auth/auth-errors.d.ts +8 -0
  25. package/dist/core/auth/auth-errors.d.ts.map +1 -0
  26. package/dist/core/auth/auth-provider.interface.d.ts +49 -3
  27. package/dist/core/auth/auth-provider.interface.d.ts.map +1 -1
  28. package/dist/core/auth/create-auth-provider.d.ts.map +1 -1
  29. package/dist/core/auth/default-auth-provider.d.ts +71 -0
  30. package/dist/core/auth/default-auth-provider.d.ts.map +1 -0
  31. package/dist/core/auth/index.d.ts +1 -22
  32. package/dist/core/auth/index.d.ts.map +1 -1
  33. package/dist/core/auth/services/auth-service.d.ts.map +1 -1
  34. package/dist/core/auth/token-refresh.d.ts +91 -0
  35. package/dist/core/auth/token-refresh.d.ts.map +1 -0
  36. package/dist/core/auth/token-storage.d.ts +74 -0
  37. package/dist/core/auth/token-storage.d.ts.map +1 -0
  38. package/dist/core/errors/index.d.ts +80 -0
  39. package/dist/core/errors/index.d.ts.map +1 -0
  40. package/dist/core/index.d.ts +1 -1
  41. package/dist/core/index.d.ts.map +1 -1
  42. package/dist/core/pers-api-client.d.ts +155 -17
  43. package/dist/core/pers-api-client.d.ts.map +1 -1
  44. package/dist/core/pers-config.d.ts +36 -1
  45. package/dist/core/pers-config.d.ts.map +1 -1
  46. package/dist/core/utils/jwt.function.d.ts.map +1 -1
  47. package/dist/core.cjs +8 -814
  48. package/dist/core.cjs.map +1 -1
  49. package/dist/core.js +2 -803
  50. package/dist/core.js.map +1 -1
  51. package/dist/index.cjs +77 -4912
  52. package/dist/index.cjs.map +1 -1
  53. package/dist/index.js +19 -4857
  54. package/dist/index.js.map +1 -1
  55. package/dist/package.json +129 -129
  56. package/dist/pers-sdk.d.ts +49 -7
  57. package/dist/pers-sdk.d.ts.map +1 -1
  58. package/dist/redemption/api/redemption-api.d.ts +12 -13
  59. package/dist/redemption/api/redemption-api.d.ts.map +1 -1
  60. package/dist/redemption.cjs +24 -24
  61. package/dist/redemption.cjs.map +1 -1
  62. package/dist/redemption.js +24 -24
  63. package/dist/redemption.js.map +1 -1
  64. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts +1 -0
  65. package/dist/shared/interfaces/pers-shared-lib.interfaces.d.ts.map +1 -1
  66. package/dist/tenant/api/tenant-api.d.ts +28 -10
  67. package/dist/tenant/api/tenant-api.d.ts.map +1 -1
  68. package/dist/tenant/index.d.ts +4 -4
  69. package/dist/tenant.cjs +40 -11
  70. package/dist/tenant.cjs.map +1 -1
  71. package/dist/tenant.js +40 -11
  72. package/dist/tenant.js.map +1 -1
  73. package/dist/token.cjs +7 -534
  74. package/dist/token.cjs.map +1 -1
  75. package/dist/token.js +1 -532
  76. package/dist/token.js.map +1 -1
  77. package/dist/web3-chain.cjs +7 -148
  78. package/dist/web3-chain.cjs.map +1 -1
  79. package/dist/web3-chain.js +6 -147
  80. package/dist/web3-chain.js.map +1 -1
  81. package/dist/web3.cjs +8 -538
  82. package/dist/web3.cjs.map +1 -1
  83. package/dist/web3.js +6 -536
  84. package/dist/web3.js.map +1 -1
  85. package/package.json +129 -129
  86. package/dist/core/auth/simple-sdk-auth-provider.d.ts +0 -27
  87. package/dist/core/auth/simple-sdk-auth-provider.d.ts.map +0 -1
@@ -0,0 +1,537 @@
1
+ 'use strict';
2
+
3
+ class TokenApi {
4
+ constructor(apiClient) {
5
+ this.apiClient = apiClient;
6
+ this.basePath = '/tokens';
7
+ }
8
+ // ==========================================
9
+ // PUBLIC OPERATIONS
10
+ // ==========================================
11
+ /**
12
+ * PUBLIC: Get all remote tokens
13
+ * ENHANCED: Added admin filtering capability
14
+ */
15
+ async getRemoteTokens(includeInactive = false) {
16
+ const url = includeInactive ? `${this.basePath}?active=false` : `${this.basePath}`;
17
+ return this.apiClient.get(url);
18
+ }
19
+ /**
20
+ * PUBLIC: Get all remote token types
21
+ */
22
+ async getRemoteTokenTypes() {
23
+ return this.apiClient.get(`${this.basePath}/types`);
24
+ }
25
+ /**
26
+ * PUBLIC: Get active point token (was credit token)
27
+ */
28
+ async getRemoteActiveCreditToken() {
29
+ return this.apiClient.get(`${this.basePath}/points`);
30
+ }
31
+ /**
32
+ * PUBLIC: Get reward tokens
33
+ * ENHANCED: Added admin filtering capability
34
+ */
35
+ async getRemoteRewardTokens(includeInactive = false) {
36
+ const url = includeInactive ? `${this.basePath}/rewards?active=false` : `${this.basePath}/rewards`;
37
+ return this.apiClient.get(url);
38
+ }
39
+ /**
40
+ * PUBLIC: Get stamp tokens (was status tokens)
41
+ * ENHANCED: Added admin filtering capability
42
+ */
43
+ async getRemoteStatusTokens(includeInactive = false) {
44
+ const url = includeInactive ? `${this.basePath}/stamps?active=false` : `${this.basePath}/stamps`;
45
+ return this.apiClient.get(url);
46
+ }
47
+ /**
48
+ * PUBLIC: Get token by contract address
49
+ */
50
+ async getTokenByContractAddress(contractAddress, contractTokenId) {
51
+ let url = `${this.basePath}/address/${contractAddress}`;
52
+ if (contractTokenId) {
53
+ url += `?contractTokenId=${contractTokenId}`;
54
+ }
55
+ return this.apiClient.get(url);
56
+ }
57
+ // ==========================================
58
+ // ADMIN OPERATIONS
59
+ // ==========================================
60
+ /**
61
+ * ADMIN: Create new token
62
+ */
63
+ async createToken(tokenData) {
64
+ return this.apiClient.post(`${this.basePath}`, tokenData);
65
+ }
66
+ /**
67
+ * ADMIN: Update token
68
+ */
69
+ async updateToken(tokenId, tokenData) {
70
+ return this.apiClient.put(`${this.basePath}/${tokenId}`, tokenData);
71
+ }
72
+ /**
73
+ * ADMIN: Toggle token active status
74
+ * FIXED: Now calls correct endpoint
75
+ */
76
+ async toggleTokenActive(tokenId) {
77
+ return this.apiClient.put(`${this.basePath}/${tokenId}/status`, {});
78
+ }
79
+ /**
80
+ * ADMIN: Set mainnet contract address
81
+ */
82
+ async setMainnetContract(tokenId, contractAddress, chainId) {
83
+ return this.apiClient.put(`${this.basePath}/${tokenId}/mainnet`, {
84
+ contractAddress,
85
+ chainId
86
+ });
87
+ }
88
+ /**
89
+ * ADMIN: Create token metadata
90
+ */
91
+ async createTokenMetadata(tokenId, tokenData) {
92
+ return this.apiClient.post(`${this.basePath}/${tokenId}/metadata`, tokenData);
93
+ }
94
+ /**
95
+ * ADMIN: Toggle token metadata status (separate from token status)
96
+ */
97
+ async toggleTokenMetadataStatus(metadataId) {
98
+ return this.apiClient.put(`${this.basePath}/metadata/${metadataId}/status`, {});
99
+ }
100
+ /**
101
+ * ADMIN: Create token type
102
+ */
103
+ async createTokenType(tokenType) {
104
+ return this.apiClient.post(`${this.basePath}/types`, tokenType);
105
+ }
106
+ }
107
+
108
+ /**
109
+ * Platform-Agnostic Token Service
110
+ *
111
+ * Contains token business logic and operations that work across platforms.
112
+ * No framework dependencies - pure TypeScript business logic.
113
+ * Matches framework TokenApiService capabilities exactly.
114
+ */
115
+ class TokenService {
116
+ constructor(tokenApi) {
117
+ this.tokenApi = tokenApi;
118
+ }
119
+ // ==========================================
120
+ // PUBLIC OPERATIONS
121
+ // ==========================================
122
+ /**
123
+ * PUBLIC: Get all remote tokens
124
+ */
125
+ async getRemoteTokens() {
126
+ return this.tokenApi.getRemoteTokens();
127
+ }
128
+ /**
129
+ * PUBLIC: Get all remote token types
130
+ */
131
+ async getRemoteTokenTypes() {
132
+ return this.tokenApi.getRemoteTokenTypes();
133
+ }
134
+ /**
135
+ * PUBLIC: Get active credit token
136
+ */
137
+ async getRemoteActiveCreditToken() {
138
+ return this.tokenApi.getRemoteActiveCreditToken();
139
+ }
140
+ /**
141
+ * PUBLIC: Get reward tokens
142
+ */
143
+ async getRemoteRewardTokens() {
144
+ return this.tokenApi.getRemoteRewardTokens();
145
+ }
146
+ /**
147
+ * PUBLIC: Get status tokens
148
+ */
149
+ async getRemoteStatusTokens() {
150
+ return this.tokenApi.getRemoteStatusTokens();
151
+ }
152
+ /**
153
+ * PUBLIC: Get token by contract address
154
+ * ✅ FIXED: Matches framework parameter types exactly
155
+ */
156
+ async getTokenByContractAddress(contractAddress, contractTokenId) {
157
+ return this.tokenApi.getTokenByContractAddress(contractAddress, contractTokenId);
158
+ }
159
+ // ==========================================
160
+ // ADMIN OPERATIONS
161
+ // ==========================================
162
+ /**
163
+ * ADMIN: Create token metadata
164
+ */
165
+ async createTokenMetadata(tokenId, tokenData) {
166
+ return this.tokenApi.createTokenMetadata(tokenId, tokenData);
167
+ }
168
+ /**
169
+ * ADMIN: Toggle token active status
170
+ */
171
+ async toggleTokenActive(tokenId) {
172
+ return this.tokenApi.toggleTokenActive(tokenId);
173
+ }
174
+ /**
175
+ * ADMIN: Create new token
176
+ */
177
+ async createToken(tokenData) {
178
+ return this.tokenApi.createToken(tokenData);
179
+ }
180
+ /**
181
+ * ADMIN: Update token
182
+ */
183
+ async updateToken(tokenId, tokenData) {
184
+ return this.tokenApi.updateToken(tokenId, tokenData);
185
+ }
186
+ /**
187
+ * ADMIN: Set mainnet contract address
188
+ */
189
+ async setMainnetContract(tokenId, contractAddress, chainId) {
190
+ return this.tokenApi.setMainnetContract(tokenId, contractAddress, chainId);
191
+ }
192
+ /**
193
+ * ADMIN: Toggle token metadata status
194
+ */
195
+ async toggleTokenMetadataStatus(metadataId) {
196
+ return this.tokenApi.toggleTokenMetadataStatus(metadataId);
197
+ }
198
+ /**
199
+ * ADMIN: Create token type
200
+ */
201
+ async createTokenType(tokenType) {
202
+ return this.tokenApi.createTokenType(tokenType);
203
+ }
204
+ }
205
+
206
+ /**
207
+ * Token SDK - Class-based Promise SDK for Token Operations
208
+ *
209
+ * Modern, performant SDK with direct method access and excellent TypeScript support.
210
+ * Optimized for bundle size, performance, and developer experience.
211
+ *
212
+ * Usage:
213
+ * const tokenSDK = new TokenSDK(apiClient);
214
+ * const tokens = await tokenSDK.getTokens();
215
+ * const creditToken = await tokenSDK.getActiveCreditToken();
216
+ */
217
+ class TokenSDK {
218
+ constructor(apiClient) {
219
+ this.tokenApi = new TokenApi(apiClient);
220
+ this.tokenService = new TokenService(this.tokenApi);
221
+ }
222
+ // ==========================================
223
+ // CONVENIENCE METHODS - Direct Promise API
224
+ // ==========================================
225
+ // Simplified method names for better developer experience
226
+ /**
227
+ * Get all tokens
228
+ * @returns Promise with all available tokens
229
+ */
230
+ async getTokens() {
231
+ return this.tokenService.getRemoteTokens();
232
+ }
233
+ /**
234
+ * Get all token types
235
+ * @returns Promise with all available token types
236
+ */
237
+ async getTokenTypes() {
238
+ return this.tokenService.getRemoteTokenTypes();
239
+ }
240
+ /**
241
+ * Get the active credit token
242
+ * @returns Promise with the current active credit token
243
+ */
244
+ async getActiveCreditToken() {
245
+ return this.tokenService.getRemoteActiveCreditToken();
246
+ }
247
+ /**
248
+ * Get all reward tokens
249
+ * @returns Promise with all reward tokens
250
+ */
251
+ async getRewardTokens() {
252
+ return this.tokenService.getRemoteRewardTokens();
253
+ }
254
+ /**
255
+ * Get all status tokens
256
+ * @returns Promise with all status tokens
257
+ */
258
+ async getStatusTokens() {
259
+ return this.tokenService.getRemoteStatusTokens();
260
+ }
261
+ /**
262
+ * Get token by contract address
263
+ * @param contractAddress - The contract address to search for
264
+ * @param contractTokenId - Optional contract token ID
265
+ * @returns Promise with the matching token
266
+ */
267
+ async getTokenByContract(contractAddress, contractTokenId = null) {
268
+ return this.tokenService.getTokenByContractAddress(contractAddress, contractTokenId);
269
+ }
270
+ // ==========================================
271
+ // ADMIN METHODS - Token Management
272
+ // ==========================================
273
+ /**
274
+ * Create token metadata
275
+ * @param tokenId - The token ID
276
+ * @param tokenData - The token storage data
277
+ * @returns Promise with the updated token
278
+ */
279
+ async createTokenMetadata(tokenId, tokenData) {
280
+ return this.tokenService.createTokenMetadata(tokenId, tokenData);
281
+ }
282
+ /**
283
+ * Toggle token active status
284
+ * @param tokenId - The token ID to toggle
285
+ * @returns Promise with the updated token
286
+ */
287
+ async toggleTokenActive(tokenId) {
288
+ return this.tokenService.toggleTokenActive(tokenId);
289
+ }
290
+ /**
291
+ * Create a new token
292
+ * @param tokenData - The token creation data
293
+ * @returns Promise with the created token
294
+ */
295
+ async createToken(tokenData) {
296
+ return this.tokenService.createToken(tokenData);
297
+ }
298
+ /**
299
+ * Update an existing token
300
+ * @param tokenId - The token ID to update
301
+ * @param tokenData - The token update data
302
+ * @returns Promise with the updated token
303
+ */
304
+ async updateToken(tokenId, tokenData) {
305
+ return this.tokenService.updateToken(tokenId, tokenData);
306
+ }
307
+ /**
308
+ * Set mainnet contract address for a token
309
+ * @param tokenId - The token ID
310
+ * @param contractAddress - The contract address
311
+ * @param chainId - The blockchain chain ID
312
+ * @returns Promise with the updated token
313
+ */
314
+ async setMainnetContract(tokenId, contractAddress, chainId) {
315
+ return this.tokenService.setMainnetContract(tokenId, contractAddress, chainId);
316
+ }
317
+ /**
318
+ * Toggle token metadata status
319
+ * @param metadataId - The metadata ID to toggle
320
+ * @returns Promise with the updated metadata
321
+ */
322
+ async toggleTokenMetadataStatus(metadataId) {
323
+ return this.tokenService.toggleTokenMetadataStatus(metadataId);
324
+ }
325
+ /**
326
+ * Create a new token type
327
+ * @param tokenType - The token type data
328
+ * @returns Promise with the created token type
329
+ */
330
+ async createTokenType(tokenType) {
331
+ return this.tokenService.createTokenType(tokenType);
332
+ }
333
+ // ==========================================
334
+ // ADVANCED ACCESS - For Complex Operations
335
+ // ==========================================
336
+ /**
337
+ * Get direct access to the token service for advanced operations
338
+ * @returns The underlying TokenService instance
339
+ */
340
+ getTokenService() {
341
+ return this.tokenService;
342
+ }
343
+ /**
344
+ * Get direct access to the token API for low-level operations
345
+ * @returns The underlying TokenApi instance
346
+ */
347
+ getTokenApi() {
348
+ return this.tokenApi;
349
+ }
350
+ // ==========================================
351
+ // FRAMEWORK COMPATIBILITY METHODS
352
+ // ==========================================
353
+ // These maintain compatibility with existing framework method names
354
+ /**
355
+ * @deprecated Use getTokens() instead
356
+ * Framework compatibility method
357
+ */
358
+ async getRemoteTokens() {
359
+ return this.getTokens();
360
+ }
361
+ /**
362
+ * @deprecated Use getTokenTypes() instead
363
+ * Framework compatibility method
364
+ */
365
+ async getRemoteTokenTypes() {
366
+ return this.getTokenTypes();
367
+ }
368
+ /**
369
+ * @deprecated Use getActiveCreditToken() instead
370
+ * Framework compatibility method
371
+ */
372
+ async getRemoteActiveCreditToken() {
373
+ return this.getActiveCreditToken();
374
+ }
375
+ /**
376
+ * @deprecated Use getRewardTokens() instead
377
+ * Framework compatibility method
378
+ */
379
+ async getRemoteRewardTokens() {
380
+ return this.getRewardTokens();
381
+ }
382
+ /**
383
+ * @deprecated Use getStatusTokens() instead
384
+ * Framework compatibility method
385
+ */
386
+ async getRemoteStatusTokens() {
387
+ return this.getStatusTokens();
388
+ }
389
+ /**
390
+ * @deprecated Use getTokenByContract() instead
391
+ * Framework compatibility method
392
+ */
393
+ async getTokenByContractAddress(contractAddress, contractTokenId) {
394
+ return this.getTokenByContract(contractAddress, contractTokenId);
395
+ }
396
+ }
397
+
398
+ /**
399
+ * Abstract Base Token Service - Explicit Initialization Pattern
400
+ *
401
+ * Platform-agnostic token operations with Promise-based API.
402
+ * Framework services extend this and control initialization lifecycle.
403
+ *
404
+ * Benefits:
405
+ * - Explicit initialization control
406
+ * - Better error boundaries
407
+ * - Clear lifecycle management
408
+ * - Testable initialization state
409
+ * - Zero framework dependencies
410
+ */
411
+ class BaseTokenService {
412
+ constructor() {
413
+ this._isInitialized = false;
414
+ }
415
+ // ==========================================
416
+ // INITIALIZATION LIFECYCLE
417
+ // ==========================================
418
+ /**
419
+ * LIFECYCLE: Initialize token service with API client
420
+ * Must be called before using any token operations
421
+ */
422
+ initializeTokenService(apiClient) {
423
+ if (!apiClient) {
424
+ throw new Error('Cannot initialize TokenService: apiClient is null or undefined');
425
+ }
426
+ if (!this._isInitialized) {
427
+ this._tokenApi = new TokenApi(apiClient);
428
+ this._tokenBusinessService = new TokenService(this._tokenApi);
429
+ this._isInitialized = true;
430
+ }
431
+ }
432
+ /**
433
+ * LIFECYCLE: Check if token service is initialized
434
+ */
435
+ get isTokenServiceInitialized() {
436
+ return this._isInitialized;
437
+ }
438
+ /**
439
+ * INTERNAL: Get token business service (throws if not initialized)
440
+ */
441
+ get tokenBusinessService() {
442
+ if (!this._tokenBusinessService) {
443
+ throw new Error('TokenService not initialized. Call initializeTokenService(apiClient) first.');
444
+ }
445
+ return this._tokenBusinessService;
446
+ }
447
+ // ==========================================
448
+ // PUBLIC OPERATIONS
449
+ // ==========================================
450
+ /**
451
+ * PUBLIC: Get all remote tokens
452
+ */
453
+ getRemoteTokens() {
454
+ return this.tokenBusinessService.getRemoteTokens();
455
+ }
456
+ /**
457
+ * PUBLIC: Get all remote token types
458
+ */
459
+ getRemoteTokenTypes() {
460
+ return this.tokenBusinessService.getRemoteTokenTypes();
461
+ }
462
+ /**
463
+ * PUBLIC: Get active credit token
464
+ */
465
+ getRemoteActiveCreditToken() {
466
+ return this.tokenBusinessService.getRemoteActiveCreditToken();
467
+ }
468
+ /**
469
+ * PUBLIC: Get reward tokens
470
+ */
471
+ getRemoteRewardTokens() {
472
+ return this.tokenBusinessService.getRemoteRewardTokens();
473
+ }
474
+ /**
475
+ * PUBLIC: Get status tokens
476
+ */
477
+ getRemoteStatusTokens() {
478
+ return this.tokenBusinessService.getRemoteStatusTokens();
479
+ }
480
+ /**
481
+ * PUBLIC: Get token by contract address
482
+ */
483
+ getTokenByContractAddress(contractAddress, contractTokenId) {
484
+ return this.tokenBusinessService.getTokenByContractAddress(contractAddress, contractTokenId);
485
+ }
486
+ // ==========================================
487
+ // ADMIN OPERATIONS
488
+ // ==========================================
489
+ /**
490
+ * ADMIN: Create token metadata
491
+ */
492
+ createTokenMetadata(tokenId, tokenData) {
493
+ return this.tokenBusinessService.createTokenMetadata(tokenId, tokenData);
494
+ }
495
+ /**
496
+ * ADMIN: Toggle token active status
497
+ */
498
+ toggleTokenActive(tokenId) {
499
+ return this.tokenBusinessService.toggleTokenActive(tokenId);
500
+ }
501
+ /**
502
+ * ADMIN: Create new token
503
+ */
504
+ createToken(tokenData) {
505
+ return this.tokenBusinessService.createToken(tokenData);
506
+ }
507
+ /**
508
+ * ADMIN: Update token
509
+ */
510
+ updateToken(tokenId, tokenData) {
511
+ return this.tokenBusinessService.updateToken(tokenId, tokenData);
512
+ }
513
+ /**
514
+ * ADMIN: Set mainnet contract address
515
+ */
516
+ setMainnetContract(tokenId, contractAddress, chainId) {
517
+ return this.tokenBusinessService.setMainnetContract(tokenId, contractAddress, chainId);
518
+ }
519
+ /**
520
+ * ADMIN: Toggle token metadata status
521
+ */
522
+ toggleTokenMetadataStatus(metadataId) {
523
+ return this.tokenBusinessService.toggleTokenMetadataStatus(metadataId);
524
+ }
525
+ /**
526
+ * ADMIN: Create token type
527
+ */
528
+ createTokenType(tokenType) {
529
+ return this.tokenBusinessService.createTokenType(tokenType);
530
+ }
531
+ }
532
+
533
+ exports.BaseTokenService = BaseTokenService;
534
+ exports.TokenApi = TokenApi;
535
+ exports.TokenSDK = TokenSDK;
536
+ exports.TokenService = TokenService;
537
+ //# sourceMappingURL=base-token-service-BQ6uFoki.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-token-service-BQ6uFoki.cjs","sources":["../../src/token/api/token-api.ts","../../src/token/services/token-service.ts","../../src/token/token-sdk.ts","../../src/token/base/base-token-service.ts"],"sourcesContent":[null,null,null,null],"names":["TokenBusinessService"],"mappings":";;MAWa,QAAQ,CAAA;AACnB,IAAA,WAAA,CAAoB,SAAwB,EAAA;QAAxB,IAAA,CAAA,SAAS,GAAT,SAAS;QAErB,IAAA,CAAA,QAAQ,GAAG,SAAS;IAFmB;;;;AAQ/C;;;AAGG;AACH,IAAA,MAAM,eAAe,CAAC,eAAA,GAA2B,KAAK,EAAA;AACpD,QAAA,MAAM,GAAG,GAAG,eAAe,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA,aAAA,CAAe,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,EAAE;QAClF,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAa,GAAG,CAAC;IAC5C;AAEA;;AAEG;AACH,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAiB,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,MAAA,CAAQ,CAAC;IACrE;AAEA;;AAEG;AACH,IAAA,MAAM,0BAA0B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,OAAA,CAAS,CAAC;IAChE;AAEA;;;AAGG;AACH,IAAA,MAAM,qBAAqB,CAAC,eAAA,GAA2B,KAAK,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,eAAe,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA,qBAAA,CAAuB,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,UAAU;QAClG,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAa,GAAG,CAAC;IAC5C;AAEA;;;AAGG;AACH,IAAA,MAAM,qBAAqB,CAAC,eAAA,GAA2B,KAAK,EAAA;AAC1D,QAAA,MAAM,GAAG,GAAG,eAAe,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAA,oBAAA,CAAsB,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,SAAS;QAChG,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAa,GAAG,CAAC;IAC5C;AAEA;;AAEG;AACH,IAAA,MAAM,yBAAyB,CAAC,eAAuB,EAAE,eAA8B,EAAA;QACrF,IAAI,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,SAAA,EAAY,eAAe,CAAA,CAAE;QACvD,IAAI,eAAe,EAAE;AACnB,YAAA,GAAG,IAAI,CAAA,iBAAA,EAAoB,eAAe,CAAA,CAAE;QAC9C;QACA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,GAAG,CAAC;IAC1C;;;;AAMA;;AAEG;IACH,MAAM,WAAW,CAAC,SAAgC,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAE,EAAE,SAAS,CAAC;IACrE;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,SAAgC,EAAA;AACjE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAA,CAAE,EAAE,SAAS,CAAC;IAC/E;AAEA;;;AAGG;IACH,MAAM,iBAAiB,CAAC,OAAe,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAA,OAAA,CAAS,EAAE,EAAE,CAAC;IAC/E;AAEA;;AAEG;AACH,IAAA,MAAM,kBAAkB,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,CAAA,EAAI,OAAO,UAAU,EAAE;YACzE,eAAe;YACf;AACD,SAAA,CAAC;IACJ;AAEA;;AAEG;AACH,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,SAA2B,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAW,CAAA,EAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAA,SAAA,CAAW,EAAE,SAAS,CAAC;IACzF;AAEA;;AAEG;IACH,MAAM,yBAAyB,CAAC,UAAkB,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAmB,CAAA,EAAG,IAAI,CAAC,QAAQ,aAAa,UAAU,CAAA,OAAA,CAAS,EAAE,EAAE,CAAC;IACnG;AAEA;;AAEG;IACH,MAAM,eAAe,CAAC,SAAuB,EAAA;AAC3C,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAe,CAAA,EAAG,IAAI,CAAC,QAAQ,CAAA,MAAA,CAAQ,EAAE,SAAS,CAAC;IAC/E;AACD;;ACtHD;;;;;;AAMG;MACU,YAAY,CAAA;AACvB,IAAA,WAAA,CAAoB,QAAkB,EAAA;QAAlB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAAa;;;;AAMzC;;AAEG;AACH,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE;IACxC;AAEA;;AAEG;AACH,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE;IAC5C;AAEA;;AAEG;AACH,IAAA,MAAM,0BAA0B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,0BAA0B,EAAE;IACnD;AAEA;;AAEG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;IAC9C;AAEA;;AAEG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,qBAAqB,EAAE;IAC9C;AAEA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAAC,eAAuB,EAAE,eAA8B,EAAA;QACrF,OAAO,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,eAAe,EAAE,eAAe,CAAC;IAClF;;;;AAMA;;AAEG;AACH,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,SAA2B,EAAA;QACpE,OAAO,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;IAC9D;AAEA;;AAEG;IACH,MAAM,iBAAiB,CAAC,OAAe,EAAA;QACrC,OAAO,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACjD;AAEA;;AAEG;IACH,MAAM,WAAW,CAAC,SAAgC,EAAA;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC;IAC7C;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,SAAgC,EAAA;QACjE,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;IACtD;AAEA;;AAEG;AACH,IAAA,MAAM,kBAAkB,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC;IAC5E;AAEA;;AAEG;IACH,MAAM,yBAAyB,CAAC,UAAkB,EAAA;QAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,UAAU,CAAC;IAC5D;AAEA;;AAEG;IACH,MAAM,eAAe,CAAC,SAAuB,EAAA;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC;IACjD;AAMD;;AChHD;;;;;;;;;;AAUG;MACU,QAAQ,CAAA;AAInB,IAAA,WAAA,CAAY,SAAwB,EAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC;IACrD;;;;;AAOA;;;AAGG;AACH,IAAA,MAAM,SAAS,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE;IAC5C;AAEA;;;AAGG;AACH,IAAA,MAAM,aAAa,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE;IAChD;AAEA;;;AAGG;AACH,IAAA,MAAM,oBAAoB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,0BAA0B,EAAE;IACvD;AAEA;;;AAGG;AACH,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;IAClD;AAEA;;;AAGG;AACH,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE;IAClD;AAEA;;;;;AAKG;AACH,IAAA,MAAM,kBAAkB,CAAC,eAAuB,EAAE,kBAAiC,IAAI,EAAA;QACrF,OAAO,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,eAAe,EAAE,eAAe,CAAC;IACtF;;;;AAMA;;;;;AAKG;AACH,IAAA,MAAM,mBAAmB,CAAC,OAAe,EAAE,SAA2B,EAAA;QACpE,OAAO,IAAI,CAAC,YAAY,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;IAClE;AAEA;;;;AAIG;IACH,MAAM,iBAAiB,CAAC,OAAe,EAAA;QACrC,OAAO,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACrD;AAEA;;;;AAIG;IACH,MAAM,WAAW,CAAC,SAAgC,EAAA;QAChD,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC;IACjD;AAEA;;;;;AAKG;AACH,IAAA,MAAM,WAAW,CAAC,OAAe,EAAE,SAAgC,EAAA;QACjE,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;IAC1D;AAEA;;;;;;AAMG;AACH,IAAA,MAAM,kBAAkB,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC;IAChF;AAEA;;;;AAIG;IACH,MAAM,yBAAyB,CAAC,UAAkB,EAAA;QAChD,OAAO,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,UAAU,CAAC;IAChE;AAEA;;;;AAIG;IACH,MAAM,eAAe,CAAC,SAAuB,EAAA;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,SAAS,CAAC;IACrD;;;;AAMA;;;AAGG;IACH,eAAe,GAAA;QACb,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEA;;;AAGG;IACH,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ;IACtB;;;;;AAOA;;;AAGG;AACH,IAAA,MAAM,eAAe,GAAA;AACnB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;IACzB;AAEA;;;AAGG;AACH,IAAA,MAAM,mBAAmB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,aAAa,EAAE;IAC7B;AAEA;;;AAGG;AACH,IAAA,MAAM,0BAA0B,GAAA;AAC9B,QAAA,OAAO,IAAI,CAAC,oBAAoB,EAAE;IACpC;AAEA;;;AAGG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,MAAM,qBAAqB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;AAEA;;;AAGG;AACH,IAAA,MAAM,yBAAyB,CAAC,eAAuB,EAAE,eAA8B,EAAA;QACrF,OAAO,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,eAAe,CAAC;IAClE;AACD;;AC1ND;;;;;;;;;;;;AAYG;MACmB,gBAAgB,CAAA;AAAtC,IAAA,WAAA,GAAA;QAIU,IAAA,CAAA,cAAc,GAAG,KAAK;IAyIhC;;;;AAnIE;;;AAGG;AACO,IAAA,sBAAsB,CAAC,SAAwB,EAAA;QACvD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC;QACnF;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;YACxB,IAAI,CAAC,SAAS,GAAG,IAAI,QAAQ,CAAC,SAAS,CAAC;YACxC,IAAI,CAAC,qBAAqB,GAAG,IAAIA,YAAoB,CAAC,IAAI,CAAC,SAAS,CAAC;AACrE,YAAA,IAAI,CAAC,cAAc,GAAG,IAAI;QAC5B;IACF;AAEA;;AAEG;AACH,IAAA,IAAc,yBAAyB,GAAA;QACrC,OAAO,IAAI,CAAC,cAAc;IAC5B;AAEA;;AAEG;AACH,IAAA,IAAY,oBAAoB,GAAA;AAC9B,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,6EAA6E,CAAC;QAChG;QACA,OAAO,IAAI,CAAC,qBAAqB;IACnC;;;;AAMA;;AAEG;IACI,eAAe,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,EAAE;IACpD;AAEA;;AAEG;IACI,mBAAmB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE;IACxD;AAEA;;AAEG;IACI,0BAA0B,GAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,0BAA0B,EAAE;IAC/D;AAEA;;AAEG;IACI,qBAAqB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE;IAC1D;AAEA;;AAEG;IACI,qBAAqB,GAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,qBAAqB,EAAE;IAC1D;AAEA;;AAEG;IACI,yBAAyB,CAAC,eAAuB,EAAE,eAA8B,EAAA;QACtF,OAAO,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,eAAe,EAAE,eAAe,CAAC;IAC9F;;;;AAMA;;AAEG;IACI,mBAAmB,CAAC,OAAe,EAAE,SAA2B,EAAA;QACrE,OAAO,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC;IAC1E;AAEA;;AAEG;AACI,IAAA,iBAAiB,CAAC,OAAe,EAAA;QACtC,OAAO,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC;IAC7D;AAEA;;AAEG;AACI,IAAA,WAAW,CAAC,SAAgC,EAAA;QACjD,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,SAAS,CAAC;IACzD;AAEA;;AAEG;IACI,WAAW,CAAC,OAAe,EAAE,SAAgC,EAAA;QAClE,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC;IAClE;AAEA;;AAEG;AACI,IAAA,kBAAkB,CAAC,OAAe,EAAE,eAAuB,EAAE,OAAe,EAAA;AACjF,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC;IACxF;AAEA;;AAEG;AACI,IAAA,yBAAyB,CAAC,UAAkB,EAAA;QACjD,OAAO,IAAI,CAAC,oBAAoB,CAAC,yBAAyB,CAAC,UAAU,CAAC;IACxE;AAEA;;AAEG;AACI,IAAA,eAAe,CAAC,SAAuB,EAAA;QAC5C,OAAO,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,SAAS,CAAC;IAC7D;AACD;;;;;;;"}
@@ -0,0 +1,25 @@
1
+ 'use strict';
2
+
3
+ var jwtDecode = require('jwt-decode');
4
+
5
+ const isTokenExpired = (token, margin = 60) => {
6
+ // Remove Bearer prefix if present
7
+ const cleanToken = token.split(' ')[1] || token;
8
+ // Validate JWT format
9
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
10
+ return true; // Consider invalid tokens as expired
11
+ }
12
+ try {
13
+ // Decode JWT token
14
+ const decoded = jwtDecode.jwtDecode(cleanToken);
15
+ const currentTime = Math.floor(Date.now() / 1000);
16
+ // Check expiration with margin (default 60 seconds)
17
+ return decoded.exp < (currentTime + margin);
18
+ }
19
+ catch (error) {
20
+ return true; // Consider unparseable tokens as expired
21
+ }
22
+ };
23
+
24
+ exports.isTokenExpired = isTokenExpired;
25
+ //# sourceMappingURL=jwt.function-BYiyl-z_.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.function-BYiyl-z_.cjs","sources":["../../src/core/utils/jwt.function.ts"],"sourcesContent":[null],"names":["jwtDecode"],"mappings":";;;;AAGO,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,MAAA,GAAiB,EAAE,KAAa;;AAE1E,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;;AAG/C,IAAA,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACrD,OAAO,IAAI,CAAC;IACd;AAEA,IAAA,IAAI;;AAEF,QAAA,MAAM,OAAO,GAAQA,mBAAS,CAAC,UAAU,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;;QAGjD,OAAO,OAAO,CAAC,GAAG,IAAI,WAAW,GAAG,MAAM,CAAC;IAC7C;IAAE,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAC;IACd;AACJ;;;;"}
@@ -0,0 +1,23 @@
1
+ import { jwtDecode } from 'jwt-decode';
2
+
3
+ const isTokenExpired = (token, margin = 60) => {
4
+ // Remove Bearer prefix if present
5
+ const cleanToken = token.split(' ')[1] || token;
6
+ // Validate JWT format
7
+ if (!cleanToken || cleanToken.split('.').length !== 3) {
8
+ return true; // Consider invalid tokens as expired
9
+ }
10
+ try {
11
+ // Decode JWT token
12
+ const decoded = jwtDecode(cleanToken);
13
+ const currentTime = Math.floor(Date.now() / 1000);
14
+ // Check expiration with margin (default 60 seconds)
15
+ return decoded.exp < (currentTime + margin);
16
+ }
17
+ catch (error) {
18
+ return true; // Consider unparseable tokens as expired
19
+ }
20
+ };
21
+
22
+ export { isTokenExpired };
23
+ //# sourceMappingURL=jwt.function-d6jPtBqI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwt.function-d6jPtBqI.js","sources":["../../src/core/utils/jwt.function.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGO,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,MAAA,GAAiB,EAAE,KAAa;;AAE1E,IAAA,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK;;AAG/C,IAAA,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;QACrD,OAAO,IAAI,CAAC;IACd;AAEA,IAAA,IAAI;;AAEF,QAAA,MAAM,OAAO,GAAQ,SAAS,CAAC,UAAU,CAAC;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;;QAGjD,OAAO,OAAO,CAAC,GAAG,IAAI,WAAW,GAAG,MAAM,CAAC;IAC7C;IAAE,OAAO,KAAK,EAAE;QACd,OAAO,IAAI,CAAC;IACd;AACJ;;;;"}