@sereel/sdk 0.1.6 → 0.2.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.
- package/README.md +20 -29
- package/dist/index.cjs +110 -155
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -20
- package/dist/index.d.ts +6 -20
- package/dist/index.js +110 -155
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -76,8 +76,8 @@ const client = createClient({
|
|
|
76
76
|
```ts
|
|
77
77
|
const { data, count } = await client.getAssets();
|
|
78
78
|
|
|
79
|
-
for (const
|
|
80
|
-
console.log(
|
|
79
|
+
for (const asset of data) {
|
|
80
|
+
console.log(asset.token_name, asset.issuer?.legal_name);
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
@@ -86,14 +86,17 @@ for (const record of data) {
|
|
|
86
86
|
### `client.getAssetByTokenAddress(tokenAddress)`
|
|
87
87
|
|
|
88
88
|
`GET /sdk/assets/{token_address}` — returns a single asset by its on-chain
|
|
89
|
-
token address.
|
|
89
|
+
token address. The response is a single `SdkSecurityDetails` object that
|
|
90
|
+
contains the token, issuer, primary book, and network details all in one
|
|
91
|
+
place.
|
|
90
92
|
|
|
91
93
|
```ts
|
|
92
94
|
const { data } = await client.getAssetByTokenAddress("0xabc…");
|
|
93
95
|
|
|
94
|
-
console.log(data.
|
|
95
|
-
console.log(data.
|
|
96
|
-
console.log(data.
|
|
96
|
+
console.log(data.token_name);
|
|
97
|
+
console.log(data.rule_engine?.name); // present if token has compliance rules
|
|
98
|
+
console.log(data.book?.status); // present if token has a book
|
|
99
|
+
console.log(data.network.name);
|
|
97
100
|
```
|
|
98
101
|
|
|
99
102
|
---
|
|
@@ -108,28 +111,20 @@ specific issuer. The `issuerId` is the `id` field from `SdkIssuerSummary`
|
|
|
108
111
|
const { data, count } = await client.getAssetsByIssuer("64f1a2b3c4d5e6f7a8b9c0d1");
|
|
109
112
|
|
|
110
113
|
console.log(`${count} tokens from this issuer`);
|
|
111
|
-
data.forEach(
|
|
114
|
+
data.forEach(asset => console.log(asset.token_symbol));
|
|
112
115
|
```
|
|
113
116
|
|
|
114
117
|
---
|
|
115
118
|
|
|
116
119
|
## Response shape
|
|
117
120
|
|
|
118
|
-
Every API method returns one or more `
|
|
119
|
-
|
|
120
|
-
```ts
|
|
121
|
-
interface SdkAssetRecord {
|
|
122
|
-
security: SdkSecurityDetails;
|
|
123
|
-
issuer: SdkIssuerSummary;
|
|
124
|
-
books: SdkBookSummary[];
|
|
125
|
-
network: NetworkDetails;
|
|
126
|
-
}
|
|
127
|
-
```
|
|
121
|
+
Every API method returns one or more `SdkSecurityDetails` objects.
|
|
128
122
|
|
|
129
123
|
### `SdkSecurityDetails`
|
|
130
124
|
|
|
131
|
-
Full token details
|
|
132
|
-
|
|
125
|
+
Full token details with issuer, book, and network flattened into a single
|
|
126
|
+
object. Internal and sensitive fields are intentionally excluded (`id`,
|
|
127
|
+
`org_id`, `deployment_txn_hash`, `token_program_id`, `engines` (raw),
|
|
133
128
|
`extra_information_attributes`, `allowlist_manager`, `iota_*` fields,
|
|
134
129
|
`individual_token_price`, `rule_engine_id`, `updated_at`).
|
|
135
130
|
|
|
@@ -144,15 +139,20 @@ interface SdkSecurityDetails {
|
|
|
144
139
|
admin: string; // token admin wallet address
|
|
145
140
|
icon_url: string | null;
|
|
146
141
|
prospectus: SdkTokenProspectus | null;
|
|
142
|
+
issuer: SdkIssuerSummary | null;
|
|
143
|
+
book: SdkBookSummary | null;
|
|
147
144
|
partners: SdkTokenPartner[] | null;
|
|
148
145
|
rule_engine: SdkRuleEngineSummary | null; // present when token has compliance rules
|
|
146
|
+
network: NetworkDetails;
|
|
149
147
|
created_at: string | null;
|
|
148
|
+
trex_claim_topics: number[] | null;
|
|
149
|
+
trex_issuers: string[] | null;
|
|
150
150
|
}
|
|
151
151
|
```
|
|
152
152
|
|
|
153
153
|
### `SdkRuleEngineSummary`
|
|
154
154
|
|
|
155
|
-
When a token has an associated compliance rule engine, it is
|
|
155
|
+
When a token has an associated compliance rule engine, it is included in the
|
|
156
156
|
security details. Only the name, address, and a slim view of each linked rule
|
|
157
157
|
are exposed.
|
|
158
158
|
|
|
@@ -214,8 +214,6 @@ interface SdkFundConfig {
|
|
|
214
214
|
exit_fee_bps: string;
|
|
215
215
|
dealing_mode: number;
|
|
216
216
|
redemption_gate_bps: string;
|
|
217
|
-
protocol_subscription_fee_bps: string;
|
|
218
|
-
protocol_fee_recipient: string;
|
|
219
217
|
management_fee_bps_per_annum: string;
|
|
220
218
|
}
|
|
221
219
|
|
|
@@ -225,11 +223,8 @@ interface SdkBookSummary {
|
|
|
225
223
|
name: string | null;
|
|
226
224
|
book_type: string | null; // e.g. "open"
|
|
227
225
|
token_address: string;
|
|
228
|
-
fund_token: string; // alias for token_address
|
|
229
226
|
network_id: string;
|
|
230
227
|
settlement_token: string;
|
|
231
|
-
factory_address: string | null;
|
|
232
|
-
deployment_txn_hash: string | null;
|
|
233
228
|
order_book_address: string;
|
|
234
229
|
fund_address: string;
|
|
235
230
|
fund_id: string;
|
|
@@ -237,7 +232,6 @@ interface SdkBookSummary {
|
|
|
237
232
|
fund_config: SdkFundConfig;
|
|
238
233
|
status: IssuanceStatus;
|
|
239
234
|
created_at: string | null;
|
|
240
|
-
updated_at: string | null;
|
|
241
235
|
}
|
|
242
236
|
```
|
|
243
237
|
|
|
@@ -254,10 +248,7 @@ interface NetworkDetails {
|
|
|
254
248
|
native_currency: NativeCurrency;
|
|
255
249
|
rpc_endpoint: string;
|
|
256
250
|
explorer_urls: string[];
|
|
257
|
-
can_deploy_cmtat_token: boolean;
|
|
258
|
-
can_deploy_trex_token: boolean;
|
|
259
251
|
is_testnet: boolean;
|
|
260
|
-
is_supported: boolean;
|
|
261
252
|
}
|
|
262
253
|
```
|
|
263
254
|
|
package/dist/index.cjs
CHANGED
|
@@ -234,9 +234,6 @@ function isString(value) {
|
|
|
234
234
|
function isNullableString(value) {
|
|
235
235
|
return typeof value === "string" || value === null;
|
|
236
236
|
}
|
|
237
|
-
function isOptionalNullableString(value) {
|
|
238
|
-
return typeof value === "string" || value === null || value === void 0;
|
|
239
|
-
}
|
|
240
237
|
function isFiniteNumber(value) {
|
|
241
238
|
return typeof value === "number" && Number.isFinite(value);
|
|
242
239
|
}
|
|
@@ -325,79 +322,6 @@ function isRuleEngineSummary(value, ctx, path) {
|
|
|
325
322
|
}
|
|
326
323
|
return true;
|
|
327
324
|
}
|
|
328
|
-
function isSecurityDetails(value, ctx, path) {
|
|
329
|
-
const v = asRecord(value);
|
|
330
|
-
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
331
|
-
ctx.check(
|
|
332
|
-
isString(v.token_address),
|
|
333
|
-
`${path}.token_address`,
|
|
334
|
-
"string",
|
|
335
|
-
v.token_address
|
|
336
|
-
);
|
|
337
|
-
ctx.check(
|
|
338
|
-
isString(v.token_name),
|
|
339
|
-
`${path}.token_name`,
|
|
340
|
-
"string",
|
|
341
|
-
v.token_name
|
|
342
|
-
);
|
|
343
|
-
ctx.check(
|
|
344
|
-
isString(v.token_symbol),
|
|
345
|
-
`${path}.token_symbol`,
|
|
346
|
-
"string",
|
|
347
|
-
v.token_symbol
|
|
348
|
-
);
|
|
349
|
-
ctx.check(
|
|
350
|
-
isString(v.token_decimal),
|
|
351
|
-
`${path}.token_decimal`,
|
|
352
|
-
"string",
|
|
353
|
-
v.token_decimal
|
|
354
|
-
);
|
|
355
|
-
ctx.check(
|
|
356
|
-
isString(v.network_id),
|
|
357
|
-
`${path}.network_id`,
|
|
358
|
-
"string",
|
|
359
|
-
v.network_id
|
|
360
|
-
);
|
|
361
|
-
ctx.check(
|
|
362
|
-
isString(v.token_type),
|
|
363
|
-
`${path}.token_type`,
|
|
364
|
-
"string",
|
|
365
|
-
v.token_type
|
|
366
|
-
);
|
|
367
|
-
ctx.check(isString(v.admin), `${path}.admin`, "string", v.admin);
|
|
368
|
-
ctx.check(
|
|
369
|
-
isNullableString(v.icon_url),
|
|
370
|
-
`${path}.icon_url`,
|
|
371
|
-
"string | null",
|
|
372
|
-
v.icon_url
|
|
373
|
-
);
|
|
374
|
-
ctx.check(
|
|
375
|
-
isNullableString(v.created_at),
|
|
376
|
-
`${path}.created_at`,
|
|
377
|
-
"string | null",
|
|
378
|
-
v.created_at
|
|
379
|
-
);
|
|
380
|
-
if (v.prospectus !== null && v.prospectus !== void 0) {
|
|
381
|
-
isProspectus(v.prospectus, ctx, `${path}.prospectus`);
|
|
382
|
-
}
|
|
383
|
-
if (v.partners !== null && v.partners !== void 0) {
|
|
384
|
-
const partnersOk = ctx.check(
|
|
385
|
-
Array.isArray(v.partners),
|
|
386
|
-
`${path}.partners`,
|
|
387
|
-
"array",
|
|
388
|
-
v.partners
|
|
389
|
-
);
|
|
390
|
-
if (partnersOk) {
|
|
391
|
-
v.partners.forEach(
|
|
392
|
-
(partner, i) => isTokenPartner(partner, ctx, `${path}.partners[${i}]`)
|
|
393
|
-
);
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
if (v.rule_engine !== null && v.rule_engine !== void 0) {
|
|
397
|
-
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
398
|
-
}
|
|
399
|
-
return true;
|
|
400
|
-
}
|
|
401
325
|
function isIssuerSummary(value, ctx, path) {
|
|
402
326
|
const v = asRecord(value);
|
|
403
327
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
@@ -487,30 +411,12 @@ function isNetworkDetails(value, ctx, path) {
|
|
|
487
411
|
)
|
|
488
412
|
);
|
|
489
413
|
}
|
|
490
|
-
ctx.check(
|
|
491
|
-
isBoolean(v.can_deploy_cmtat_token),
|
|
492
|
-
`${path}.can_deploy_cmtat_token`,
|
|
493
|
-
"boolean",
|
|
494
|
-
v.can_deploy_cmtat_token
|
|
495
|
-
);
|
|
496
|
-
ctx.check(
|
|
497
|
-
isBoolean(v.can_deploy_trex_token),
|
|
498
|
-
`${path}.can_deploy_trex_token`,
|
|
499
|
-
"boolean",
|
|
500
|
-
v.can_deploy_trex_token
|
|
501
|
-
);
|
|
502
414
|
ctx.check(
|
|
503
415
|
isBoolean(v.is_testnet),
|
|
504
416
|
`${path}.is_testnet`,
|
|
505
417
|
"boolean",
|
|
506
418
|
v.is_testnet
|
|
507
419
|
);
|
|
508
|
-
ctx.check(
|
|
509
|
-
isBoolean(v.is_supported),
|
|
510
|
-
`${path}.is_supported`,
|
|
511
|
-
"boolean",
|
|
512
|
-
v.is_supported
|
|
513
|
-
);
|
|
514
420
|
return true;
|
|
515
421
|
}
|
|
516
422
|
function isFundConfig(value, ctx, path) {
|
|
@@ -558,18 +464,6 @@ function isFundConfig(value, ctx, path) {
|
|
|
558
464
|
"string",
|
|
559
465
|
v.redemption_gate_bps
|
|
560
466
|
);
|
|
561
|
-
ctx.check(
|
|
562
|
-
isOptionalNullableString(v.protocol_subscription_fee_bps),
|
|
563
|
-
`${path}.protocol_subscription_fee_bps`,
|
|
564
|
-
"string | null | undefined",
|
|
565
|
-
v.protocol_subscription_fee_bps
|
|
566
|
-
);
|
|
567
|
-
ctx.check(
|
|
568
|
-
isOptionalNullableString(v.protocol_fee_recipient),
|
|
569
|
-
`${path}.protocol_fee_recipient`,
|
|
570
|
-
"string | null | undefined",
|
|
571
|
-
v.protocol_fee_recipient
|
|
572
|
-
);
|
|
573
467
|
ctx.check(
|
|
574
468
|
isString(v.management_fee_bps_per_annum),
|
|
575
469
|
`${path}.management_fee_bps_per_annum`,
|
|
@@ -626,48 +520,18 @@ function isBookSummary(value, ctx, path) {
|
|
|
626
520
|
"string",
|
|
627
521
|
v.token_address
|
|
628
522
|
);
|
|
629
|
-
ctx.check(
|
|
630
|
-
isString(v.fund_token),
|
|
631
|
-
`${path}.fund_token`,
|
|
632
|
-
"string",
|
|
633
|
-
v.fund_token
|
|
634
|
-
);
|
|
635
523
|
ctx.check(
|
|
636
524
|
isString(v.network_id),
|
|
637
525
|
`${path}.network_id`,
|
|
638
526
|
"string",
|
|
639
527
|
v.network_id
|
|
640
528
|
);
|
|
641
|
-
ctx.check(
|
|
642
|
-
isOptionalNullableString(v.admin_wallet),
|
|
643
|
-
`${path}.admin_wallet`,
|
|
644
|
-
"string | null | undefined",
|
|
645
|
-
v.admin_wallet
|
|
646
|
-
);
|
|
647
|
-
ctx.check(
|
|
648
|
-
isOptionalNullableString(v.manager_wallet),
|
|
649
|
-
`${path}.manager_wallet`,
|
|
650
|
-
"string | null | undefined",
|
|
651
|
-
v.manager_wallet
|
|
652
|
-
);
|
|
653
529
|
ctx.check(
|
|
654
530
|
isString(v.settlement_token),
|
|
655
531
|
`${path}.settlement_token`,
|
|
656
532
|
"string",
|
|
657
533
|
v.settlement_token
|
|
658
534
|
);
|
|
659
|
-
ctx.check(
|
|
660
|
-
isNullableString(v.factory_address),
|
|
661
|
-
`${path}.factory_address`,
|
|
662
|
-
"string | null",
|
|
663
|
-
v.factory_address
|
|
664
|
-
);
|
|
665
|
-
ctx.check(
|
|
666
|
-
isNullableString(v.deployment_txn_hash),
|
|
667
|
-
`${path}.deployment_txn_hash`,
|
|
668
|
-
"string | null",
|
|
669
|
-
v.deployment_txn_hash
|
|
670
|
-
);
|
|
671
535
|
ctx.check(
|
|
672
536
|
isString(v.order_book_address),
|
|
673
537
|
`${path}.order_book_address`,
|
|
@@ -700,31 +564,122 @@ function isBookSummary(value, ctx, path) {
|
|
|
700
564
|
"string | null",
|
|
701
565
|
v.created_at
|
|
702
566
|
);
|
|
703
|
-
ctx.check(
|
|
704
|
-
isNullableString(v.updated_at),
|
|
705
|
-
`${path}.updated_at`,
|
|
706
|
-
"string | null",
|
|
707
|
-
v.updated_at
|
|
708
|
-
);
|
|
709
567
|
return true;
|
|
710
568
|
}
|
|
711
|
-
function
|
|
569
|
+
function isSecurityDetails(value, ctx, path) {
|
|
712
570
|
const v = asRecord(value);
|
|
713
571
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
572
|
+
ctx.check(
|
|
573
|
+
isString(v.token_address),
|
|
574
|
+
`${path}.token_address`,
|
|
575
|
+
"string",
|
|
576
|
+
v.token_address
|
|
577
|
+
);
|
|
578
|
+
ctx.check(
|
|
579
|
+
isString(v.token_name),
|
|
580
|
+
`${path}.token_name`,
|
|
581
|
+
"string",
|
|
582
|
+
v.token_name
|
|
583
|
+
);
|
|
584
|
+
ctx.check(
|
|
585
|
+
isString(v.token_symbol),
|
|
586
|
+
`${path}.token_symbol`,
|
|
587
|
+
"string",
|
|
588
|
+
v.token_symbol
|
|
589
|
+
);
|
|
590
|
+
ctx.check(
|
|
591
|
+
isString(v.token_decimal),
|
|
592
|
+
`${path}.token_decimal`,
|
|
593
|
+
"string",
|
|
594
|
+
v.token_decimal
|
|
595
|
+
);
|
|
596
|
+
ctx.check(
|
|
597
|
+
isString(v.network_id),
|
|
598
|
+
`${path}.network_id`,
|
|
599
|
+
"string",
|
|
600
|
+
v.network_id
|
|
601
|
+
);
|
|
602
|
+
ctx.check(
|
|
603
|
+
isString(v.token_type),
|
|
604
|
+
`${path}.token_type`,
|
|
605
|
+
"string",
|
|
606
|
+
v.token_type
|
|
607
|
+
);
|
|
608
|
+
ctx.check(isString(v.admin), `${path}.admin`, "string", v.admin);
|
|
609
|
+
ctx.check(
|
|
610
|
+
isNullableString(v.icon_url),
|
|
611
|
+
`${path}.icon_url`,
|
|
612
|
+
"string | null",
|
|
613
|
+
v.icon_url
|
|
721
614
|
);
|
|
722
|
-
|
|
723
|
-
v.
|
|
724
|
-
|
|
615
|
+
ctx.check(
|
|
616
|
+
isNullableString(v.created_at),
|
|
617
|
+
`${path}.created_at`,
|
|
618
|
+
"string | null",
|
|
619
|
+
v.created_at
|
|
620
|
+
);
|
|
621
|
+
if (v.prospectus !== null && v.prospectus !== void 0) {
|
|
622
|
+
isProspectus(v.prospectus, ctx, `${path}.prospectus`);
|
|
623
|
+
}
|
|
624
|
+
if (v.issuer !== null && v.issuer !== void 0) {
|
|
625
|
+
isIssuerSummary(v.issuer, ctx, `${path}.issuer`);
|
|
626
|
+
}
|
|
627
|
+
if (v.book !== null && v.book !== void 0) {
|
|
628
|
+
isBookSummary(v.book, ctx, `${path}.book`);
|
|
629
|
+
}
|
|
630
|
+
if (v.partners !== null && v.partners !== void 0) {
|
|
631
|
+
const partnersOk = ctx.check(
|
|
632
|
+
Array.isArray(v.partners),
|
|
633
|
+
`${path}.partners`,
|
|
634
|
+
"array",
|
|
635
|
+
v.partners
|
|
725
636
|
);
|
|
637
|
+
if (partnersOk) {
|
|
638
|
+
v.partners.forEach(
|
|
639
|
+
(partner, i) => isTokenPartner(partner, ctx, `${path}.partners[${i}]`)
|
|
640
|
+
);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
if (v.rule_engine !== null && v.rule_engine !== void 0) {
|
|
644
|
+
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
726
645
|
}
|
|
727
646
|
isNetworkDetails(v.network, ctx, `${path}.network`);
|
|
647
|
+
if (v.trex_claim_topics !== null && v.trex_claim_topics !== void 0) {
|
|
648
|
+
const topicsOk = ctx.check(
|
|
649
|
+
Array.isArray(v.trex_claim_topics),
|
|
650
|
+
`${path}.trex_claim_topics`,
|
|
651
|
+
"number[]",
|
|
652
|
+
v.trex_claim_topics
|
|
653
|
+
);
|
|
654
|
+
if (topicsOk) {
|
|
655
|
+
v.trex_claim_topics.forEach(
|
|
656
|
+
(topic, i) => ctx.check(
|
|
657
|
+
isFiniteNumber(topic),
|
|
658
|
+
`${path}.trex_claim_topics[${i}]`,
|
|
659
|
+
"finite number",
|
|
660
|
+
topic
|
|
661
|
+
)
|
|
662
|
+
);
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
if (v.trex_issuers !== null && v.trex_issuers !== void 0) {
|
|
666
|
+
const issuersOk = ctx.check(
|
|
667
|
+
Array.isArray(v.trex_issuers),
|
|
668
|
+
`${path}.trex_issuers`,
|
|
669
|
+
"string[]",
|
|
670
|
+
v.trex_issuers
|
|
671
|
+
);
|
|
672
|
+
if (issuersOk) {
|
|
673
|
+
v.trex_issuers.forEach(
|
|
674
|
+
(issuer, i) => ctx.check(
|
|
675
|
+
isString(issuer),
|
|
676
|
+
`${path}.trex_issuers[${i}]`,
|
|
677
|
+
"string",
|
|
678
|
+
issuer
|
|
679
|
+
)
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
}
|
|
728
683
|
return true;
|
|
729
684
|
}
|
|
730
685
|
function buildValidationError(value, failures) {
|
|
@@ -749,7 +704,7 @@ function validateSdkAssetsResponse(value) {
|
|
|
749
704
|
);
|
|
750
705
|
if (Array.isArray(value.data)) {
|
|
751
706
|
value.data.forEach(
|
|
752
|
-
(item, i) =>
|
|
707
|
+
(item, i) => isSecurityDetails(item, ctx, `<root>.data[${i}]`)
|
|
753
708
|
);
|
|
754
709
|
}
|
|
755
710
|
}
|
|
@@ -762,7 +717,7 @@ function validateSdkAssetResponse(value) {
|
|
|
762
717
|
const ctx = new ValidationContext();
|
|
763
718
|
ctx.check(isRecord(value), "<root>", "object", value);
|
|
764
719
|
if (isRecord(value)) {
|
|
765
|
-
|
|
720
|
+
isSecurityDetails(value.data, ctx, "<root>.data");
|
|
766
721
|
}
|
|
767
722
|
if (ctx.failures.length > 0) {
|
|
768
723
|
throw buildValidationError(value, ctx.failures);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/config.ts","../src/transport.ts","../src/validation.ts","../src/client.ts"],"sourcesContent":["export { createClient } from \"./client\";\nexport { ENVIRONMENT_BASE_URLS, resolveBaseUrl } from \"./config\";\nexport {\n ForbiddenError,\n HttpError,\n InvalidConfigurationError,\n MalformedResponseError,\n NetworkError,\n NotFoundError,\n RateLimitError,\n ServerError,\n SereelSdkError,\n TimeoutError,\n UnauthorizedError,\n} from \"./errors\";\nexport type {\n ClientConfig,\n IssuanceStatus,\n NativeCurrency,\n NetworkDetails,\n SdkAssetRecord,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkTokenPartner,\n SdkTokenProspectus,\n SereelEnvironment,\n SereelSdkClient,\n} from \"./types\";\n","export interface SereelSdkErrorOptions {\n status?: number;\n code?: string;\n cause?: unknown;\n details?: unknown;\n}\n\nexport class SereelSdkError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly details?: unknown;\n\n constructor(message: string, options: SereelSdkErrorOptions = {}) {\n super(message, options.cause ? { cause: options.cause } : undefined);\n this.name = new.target.name;\n this.status = options.status;\n this.code = options.code;\n this.details = options.details;\n }\n}\n\nexport class InvalidConfigurationError extends SereelSdkError {}\n\nexport class NetworkError extends SereelSdkError {}\n\nexport class HttpError extends SereelSdkError {}\n\nexport class UnauthorizedError extends HttpError {}\n\nexport class ForbiddenError extends HttpError {}\n\nexport class NotFoundError extends HttpError {}\n\nexport class RateLimitError extends HttpError {}\n\nexport class ServerError extends HttpError {}\n\nexport class TimeoutError extends SereelSdkError {}\n\nexport class MalformedResponseError extends SereelSdkError {}\n","import { InvalidConfigurationError } from \"./errors\";\nimport type { ClientConfig, SereelEnvironment } from \"./types\";\n\nexport const ENVIRONMENT_BASE_URLS: Record<SereelEnvironment, string> = {\n devnet: \"https://api-lazer.sereel.com\",\n testnet: \"https://api-lazer-v2.sereel.com\",\n mainnet: \"https://cahokia.sereel.com\",\n};\n\nexport interface ResolvedClientConfig {\n environment: SereelEnvironment;\n apiKey: string;\n timeoutMs: number;\n baseUrl: string;\n fetch: typeof fetch;\n}\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction getFetchImplementation(\n providedFetch: ClientConfig[\"fetch\"],\n): typeof fetch {\n if (providedFetch) {\n return providedFetch;\n }\n\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis);\n }\n\n throw new InvalidConfigurationError(\n \"No fetch implementation is available. Provide config.fetch in this runtime.\",\n );\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim();\n\n if (!trimmed) {\n throw new InvalidConfigurationError(\"baseUrl must not be empty when provided.\");\n }\n\n try {\n return new URL(trimmed).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new InvalidConfigurationError(\"baseUrl must be a valid absolute URL.\", {\n cause,\n });\n }\n}\n\nexport function resolveBaseUrl(\n environment: SereelEnvironment,\n baseUrl?: string,\n): string {\n if (baseUrl) {\n return normalizeBaseUrl(baseUrl);\n }\n\n return ENVIRONMENT_BASE_URLS[environment];\n}\n\nexport function resolveClientConfig(config: ClientConfig): ResolvedClientConfig {\n const apiKey = config.apiKey.trim();\n\n if (!apiKey) {\n throw new InvalidConfigurationError(\"apiKey must not be empty.\");\n }\n\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new InvalidConfigurationError(\"timeoutMs must be a positive number.\");\n }\n\n return {\n environment: config.environment,\n apiKey,\n timeoutMs,\n baseUrl: resolveBaseUrl(config.environment, config.baseUrl),\n fetch: getFetchImplementation(config.fetch),\n };\n}\n","import {\n ForbiddenError,\n HttpError,\n MalformedResponseError,\n NetworkError,\n NotFoundError,\n RateLimitError,\n ServerError,\n TimeoutError,\n UnauthorizedError,\n} from \"./errors\";\nimport type { ResolvedClientConfig } from \"./config\";\n\ninterface ApiErrorBody {\n error?: string;\n message?: string;\n}\n\nfunction createTimeoutSignal(timeoutMs: number): {\n signal: AbortSignal;\n cleanup: () => void;\n} {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n cleanup: () => clearTimeout(timeout),\n };\n}\n\nasync function parseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as unknown;\n } catch (cause) {\n throw new MalformedResponseError(\"Received a non-JSON response body.\", {\n cause,\n status: response.status,\n details: text,\n });\n }\n}\n\nfunction getErrorMessage(status: number, body: unknown): string {\n if (body && typeof body === \"object\") {\n const apiError = body as ApiErrorBody;\n if (typeof apiError.error === \"string\" && apiError.error.trim()) {\n return apiError.error;\n }\n if (typeof apiError.message === \"string\" && apiError.message.trim()) {\n return apiError.message;\n }\n }\n\n return `Request failed with status ${status}.`;\n}\n\nfunction toHttpError(status: number, body: unknown): HttpError {\n const message = getErrorMessage(status, body);\n const options = { status, details: body };\n\n if (status === 401) {\n return new UnauthorizedError(message, options);\n }\n if (status === 403) {\n return new ForbiddenError(message, options);\n }\n if (status === 404) {\n return new NotFoundError(message, options);\n }\n if (status === 429) {\n return new RateLimitError(message, options);\n }\n if (status >= 500) {\n return new ServerError(message, options);\n }\n\n return new HttpError(message, options);\n}\n\nfunction isAbortError(error: unknown): error is Error {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.constructor.name === \"AbortError\")\n );\n}\n\nfunction wrapNetworkError(error: unknown): Error {\n if (error instanceof NetworkError) {\n return error;\n }\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Network request failed.\";\n\n return new NetworkError(message, { cause: error });\n}\n\nexport async function requestJson<T>(\n config: ResolvedClientConfig,\n path: string,\n validate: (value: unknown) => T,\n): Promise<T> {\n const { signal, cleanup } = createTimeoutSignal(config.timeoutMs);\n\n try {\n const response = await config.fetch(`${config.baseUrl}${path}`, {\n method: \"GET\",\n signal,\n headers: {\n accept: \"application/json\",\n \"x-api-key\": config.apiKey,\n },\n });\n\n const body = await parseBody(response);\n if (!response.ok) {\n throw toHttpError(response.status, body);\n }\n\n return validate(body);\n } catch (error) {\n if (\n error instanceof HttpError ||\n error instanceof MalformedResponseError ||\n error instanceof NetworkError\n ) {\n throw error;\n }\n\n if (isAbortError(error)) {\n throw new TimeoutError(\n `Request timed out after ${config.timeoutMs}ms.`,\n { cause: error },\n );\n }\n\n throw wrapNetworkError(error);\n } finally {\n cleanup();\n }\n}\n","import { MalformedResponseError } from \"./errors\";\nimport type {\n NativeCurrency,\n NetworkDetails,\n SdkAssetRecord,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkTokenPartner,\n SdkTokenProspectus,\n} from \"./types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNullableString(value: unknown): value is string | null {\n return typeof value === \"string\" || value === null;\n}\n\nfunction isOptionalNullableString(\n value: unknown,\n): value is string | null | undefined {\n return typeof value === \"string\" || value === null || value === undefined;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n\ninterface ValidationFailure {\n path: string;\n expected: string;\n received: unknown;\n}\n\nclass ValidationContext {\n failures: ValidationFailure[] = [];\n\n check(\n condition: boolean,\n path: string,\n expected: string,\n received: unknown,\n ): boolean {\n if (!condition) {\n this.failures.push({ path, expected, received });\n }\n return condition;\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction isProspectus(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkTokenProspectus {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.url), `${path}.url`, \"string\", v!.url);\n return true;\n}\n\nfunction isTokenPartner(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkTokenPartner {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.partner_name),\n `${path}.partner_name`,\n \"string\",\n v!.partner_name,\n );\n ctx.check(\n isString(v!.partner_logo),\n `${path}.partner_logo`,\n \"string\",\n v!.partner_logo,\n );\n ctx.check(\n isString(v!.partner_role),\n `${path}.partner_role`,\n \"string\",\n v!.partner_role,\n );\n return true;\n}\n\nfunction isRuleSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkRuleSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.rule_address),\n `${path}.rule_address`,\n \"string\",\n v!.rule_address,\n );\n ctx.check(\n isString(v!.rule_type),\n `${path}.rule_type`,\n \"string\",\n v!.rule_type,\n );\n return true;\n}\n\nfunction isRuleEngineSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkRuleEngineSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isString(v!.rule_engine_address),\n `${path}.rule_engine_address`,\n \"string\",\n v!.rule_engine_address,\n );\n const rulesOk = ctx.check(\n Array.isArray(v!.rules),\n `${path}.rules`,\n \"array\",\n v!.rules,\n );\n if (rulesOk) {\n (v!.rules as unknown[]).forEach((rule, i) =>\n isRuleSummary(rule, ctx, `${path}.rules[${i}]`),\n );\n }\n return true;\n}\n\nfunction isSecurityDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkSecurityDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n\n ctx.check(\n isString(v!.token_address),\n `${path}.token_address`,\n \"string\",\n v!.token_address,\n );\n ctx.check(\n isString(v!.token_name),\n `${path}.token_name`,\n \"string\",\n v!.token_name,\n );\n ctx.check(\n isString(v!.token_symbol),\n `${path}.token_symbol`,\n \"string\",\n v!.token_symbol,\n );\n ctx.check(\n isString(v!.token_decimal),\n `${path}.token_decimal`,\n \"string\",\n v!.token_decimal,\n );\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(\n isString(v!.token_type),\n `${path}.token_type`,\n \"string\",\n v!.token_type,\n );\n ctx.check(isString(v!.admin), `${path}.admin`, \"string\", v!.admin);\n ctx.check(\n isNullableString(v!.icon_url),\n `${path}.icon_url`,\n \"string | null\",\n v!.icon_url,\n );\n ctx.check(\n isNullableString(v!.created_at),\n `${path}.created_at`,\n \"string | null\",\n v!.created_at,\n );\n\n if (v!.prospectus !== null && v!.prospectus !== undefined) {\n isProspectus(v!.prospectus, ctx, `${path}.prospectus`);\n }\n\n if (v!.partners !== null && v!.partners !== undefined) {\n const partnersOk = ctx.check(\n Array.isArray(v!.partners),\n `${path}.partners`,\n \"array\",\n v!.partners,\n );\n if (partnersOk) {\n (v!.partners as unknown[]).forEach((partner, i) =>\n isTokenPartner(partner, ctx, `${path}.partners[${i}]`),\n );\n }\n }\n\n if (v!.rule_engine !== null && v!.rule_engine !== undefined) {\n isRuleEngineSummary(v!.rule_engine, ctx, `${path}.rule_engine`);\n }\n\n return true;\n}\n\nfunction isIssuerSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkIssuerSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.id), `${path}.id`, \"string\", v!.id);\n ctx.check(\n isString(v!.legal_name),\n `${path}.legal_name`,\n \"string\",\n v!.legal_name,\n );\n ctx.check(\n isNullableString(v!.display_name),\n `${path}.display_name`,\n \"string | null\",\n v!.display_name,\n );\n ctx.check(\n isString(v!.jurisdiction),\n `${path}.jurisdiction`,\n \"string\",\n v!.jurisdiction,\n );\n ctx.check(\n isNullableString(v!.website),\n `${path}.website`,\n \"string | null\",\n v!.website,\n );\n ctx.check(\n isNullableString(v!.logo_url),\n `${path}.logo_url`,\n \"string | null\",\n v!.logo_url,\n );\n return true;\n}\n\nfunction isNativeCurrency(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is NativeCurrency {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.symbol), `${path}.symbol`, \"string\", v!.symbol);\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.decimals),\n `${path}.decimals`,\n \"finite number\",\n v!.decimals,\n );\n return true;\n}\n\nfunction isNetworkDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is NetworkDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.family), `${path}.family`, \"string\", v!.family);\n ctx.check(\n isFiniteNumber(v!.chain_id) || v!.chain_id === null,\n `${path}.chain_id`,\n \"number | null\",\n v!.chain_id,\n );\n isNativeCurrency(v!.native_currency, ctx, `${path}.native_currency`);\n ctx.check(\n isString(v!.rpc_endpoint),\n `${path}.rpc_endpoint`,\n \"string\",\n v!.rpc_endpoint,\n );\n const explorerOk = ctx.check(\n Array.isArray(v!.explorer_urls),\n `${path}.explorer_urls`,\n \"string[]\",\n v!.explorer_urls,\n );\n if (explorerOk) {\n (v!.explorer_urls as unknown[]).forEach((url, i) =>\n ctx.check(\n isString(url),\n `${path}.explorer_urls[${i}]`,\n \"string\",\n url,\n ),\n );\n }\n ctx.check(\n isBoolean(v!.can_deploy_cmtat_token),\n `${path}.can_deploy_cmtat_token`,\n \"boolean\",\n v!.can_deploy_cmtat_token,\n );\n ctx.check(\n isBoolean(v!.can_deploy_trex_token),\n `${path}.can_deploy_trex_token`,\n \"boolean\",\n v!.can_deploy_trex_token,\n );\n ctx.check(\n isBoolean(v!.is_testnet),\n `${path}.is_testnet`,\n \"boolean\",\n v!.is_testnet,\n );\n ctx.check(\n isBoolean(v!.is_supported),\n `${path}.is_supported`,\n \"boolean\",\n v!.is_supported,\n );\n return true;\n}\n\nfunction isFundConfig(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkFundConfig {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.nav_staleness_threshold),\n `${path}.nav_staleness_threshold`,\n \"string\",\n v!.nav_staleness_threshold,\n );\n ctx.check(\n isString(v!.min_subscription),\n `${path}.min_subscription`,\n \"string\",\n v!.min_subscription,\n );\n ctx.check(\n isString(v!.min_redemption),\n `${path}.min_redemption`,\n \"string\",\n v!.min_redemption,\n );\n ctx.check(\n isString(v!.entry_fee_bps),\n `${path}.entry_fee_bps`,\n \"string\",\n v!.entry_fee_bps,\n );\n ctx.check(\n isString(v!.exit_fee_bps),\n `${path}.exit_fee_bps`,\n \"string\",\n v!.exit_fee_bps,\n );\n ctx.check(\n isFiniteNumber(v!.dealing_mode),\n `${path}.dealing_mode`,\n \"finite number\",\n v!.dealing_mode,\n );\n ctx.check(\n isString(v!.redemption_gate_bps),\n `${path}.redemption_gate_bps`,\n \"string\",\n v!.redemption_gate_bps,\n );\n ctx.check(\n isOptionalNullableString(v!.protocol_subscription_fee_bps),\n `${path}.protocol_subscription_fee_bps`,\n \"string | null | undefined\",\n v!.protocol_subscription_fee_bps,\n );\n ctx.check(\n isOptionalNullableString(v!.protocol_fee_recipient),\n `${path}.protocol_fee_recipient`,\n \"string | null | undefined\",\n v!.protocol_fee_recipient,\n );\n ctx.check(\n isString(v!.management_fee_bps_per_annum),\n `${path}.management_fee_bps_per_annum`,\n \"string\",\n v!.management_fee_bps_per_annum,\n );\n return true;\n}\n\nconst ISSUANCE_STATUSES = new Set([\n \"OPEN\",\n \"CLOSED\",\n \"FINALIZED\",\n \"SETTLED\",\n \"CANCELLED\",\n]);\n\nfunction isIssuanceStatus(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkBookSummary[\"status\"] {\n return ctx.check(\n isString(value) && ISSUANCE_STATUSES.has(value),\n path,\n `one of ${[...ISSUANCE_STATUSES].join(\", \")}`,\n value,\n );\n}\n\nfunction isBookSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkBookSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.id) || v!.id === null,\n `${path}.id`,\n \"string | null\",\n v!.id,\n );\n ctx.check(\n isString(v!.organization_id),\n `${path}.organization_id`,\n \"string\",\n v!.organization_id,\n );\n ctx.check(\n isNullableString(v!.name),\n `${path}.name`,\n \"string | null\",\n v!.name,\n );\n ctx.check(\n isNullableString(v!.book_type),\n `${path}.book_type`,\n \"string | null\",\n v!.book_type,\n );\n ctx.check(\n isString(v!.token_address),\n `${path}.token_address`,\n \"string\",\n v!.token_address,\n );\n ctx.check(\n isString(v!.fund_token),\n `${path}.fund_token`,\n \"string\",\n v!.fund_token,\n );\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(\n isOptionalNullableString(v!.admin_wallet),\n `${path}.admin_wallet`,\n \"string | null | undefined\",\n v!.admin_wallet,\n );\n ctx.check(\n isOptionalNullableString(v!.manager_wallet),\n `${path}.manager_wallet`,\n \"string | null | undefined\",\n v!.manager_wallet,\n );\n ctx.check(\n isString(v!.settlement_token),\n `${path}.settlement_token`,\n \"string\",\n v!.settlement_token,\n );\n ctx.check(\n isNullableString(v!.factory_address),\n `${path}.factory_address`,\n \"string | null\",\n v!.factory_address,\n );\n ctx.check(\n isNullableString(v!.deployment_txn_hash),\n `${path}.deployment_txn_hash`,\n \"string | null\",\n v!.deployment_txn_hash,\n );\n ctx.check(\n isString(v!.order_book_address),\n `${path}.order_book_address`,\n \"string\",\n v!.order_book_address,\n );\n ctx.check(\n isString(v!.fund_address),\n `${path}.fund_address`,\n \"string\",\n v!.fund_address,\n );\n ctx.check(\n isString(v!.fund_id),\n `${path}.fund_id`,\n \"string\",\n v!.fund_id,\n );\n ctx.check(\n isString(v!.initial_nav),\n `${path}.initial_nav`,\n \"string\",\n v!.initial_nav,\n );\n isFundConfig(v!.fund_config, ctx, `${path}.fund_config`);\n isIssuanceStatus(v!.status, ctx, `${path}.status`);\n ctx.check(\n isNullableString(v!.created_at),\n `${path}.created_at`,\n \"string | null\",\n v!.created_at,\n );\n ctx.check(\n isNullableString(v!.updated_at),\n `${path}.updated_at`,\n \"string | null\",\n v!.updated_at,\n );\n return true;\n}\n\nfunction isAssetRecord(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkAssetRecord {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n isSecurityDetails(v!.security, ctx, `${path}.security`);\n isIssuerSummary(v!.issuer, ctx, `${path}.issuer`);\n const booksOk = ctx.check(\n Array.isArray(v!.books),\n `${path}.books`,\n \"array\",\n v!.books,\n );\n if (booksOk) {\n (v!.books as unknown[]).forEach((book, i) =>\n isBookSummary(book, ctx, `${path}.books[${i}]`),\n );\n }\n isNetworkDetails(v!.network, ctx, `${path}.network`);\n return true;\n}\n\nfunction buildValidationError(\n value: unknown,\n failures: ValidationFailure[],\n): MalformedResponseError {\n const summary = failures\n .slice(0, 5)\n .map(\n (f) =>\n `${f.path}: expected ${f.expected}, got ${JSON.stringify(f.received)}`,\n )\n .join(\"; \");\n\n const message =\n failures.length > 5\n ? `Received an invalid SDK response shape (${failures.length} issues). First 5: ${summary}`\n : `Received an invalid SDK response shape. ${summary}`;\n\n return new MalformedResponseError(message, {\n details: { failures: failures.slice(0, 20), value },\n });\n}\n\nexport function validateSdkAssetsResponse(value: unknown): SdkAssetsResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(Array.isArray(value.data), \"<root>.data\", \"array\", value.data);\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n if (Array.isArray(value.data)) {\n (value.data as unknown[]).forEach((item, i) =>\n isAssetRecord(item, ctx, `<root>.data[${i}]`),\n );\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as SdkAssetsResponse;\n}\n\nexport function validateSdkAssetResponse(value: unknown): SdkAssetResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n isAssetRecord(value.data, ctx, \"<root>.data\");\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as SdkAssetResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n} from \"./validation\";\n\nexport function createClient(config: ClientConfig): SereelSdkClient {\n const resolved = resolveClientConfig(config);\n\n return {\n getAssets(): Promise<SdkAssetsResponse> {\n return requestJson(resolved, \"/sdk/assets\", validateSdkAssetsResponse);\n },\n\n getAssetByTokenAddress(tokenAddress: string): Promise<SdkAssetResponse> {\n const trimmedTokenAddress = tokenAddress.trim();\n if (!trimmedTokenAddress) {\n throw new InvalidConfigurationError(\n \"tokenAddress must not be empty.\",\n );\n }\n\n return requestJson(\n resolved,\n `/sdk/assets/${encodeURIComponent(trimmedTokenAddress)}`,\n validateSdkAssetResponse,\n );\n },\n\n getAssetsByIssuer(issuerId: string): Promise<SdkAssetsResponse> {\n const trimmedIssuerId = issuerId.trim();\n if (!trimmedIssuerId) {\n throw new InvalidConfigurationError(\"issuerId must not be empty.\");\n }\n\n return requestJson(\n resolved,\n `/sdk/assets/issuer/${encodeURIComponent(trimmedIssuerId)}`,\n validateSdkAssetsResponse,\n );\n },\n };\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/errors.ts","../src/config.ts","../src/transport.ts","../src/validation.ts","../src/client.ts"],"sourcesContent":["export { createClient } from \"./client\";\nexport { ENVIRONMENT_BASE_URLS, resolveBaseUrl } from \"./config\";\nexport {\n ForbiddenError,\n HttpError,\n InvalidConfigurationError,\n MalformedResponseError,\n NetworkError,\n NotFoundError,\n RateLimitError,\n ServerError,\n SereelSdkError,\n TimeoutError,\n UnauthorizedError,\n} from \"./errors\";\nexport type {\n ClientConfig,\n IssuanceStatus,\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkTokenPartner,\n SdkTokenProspectus,\n SereelEnvironment,\n SereelSdkClient,\n} from \"./types\";\n","export interface SereelSdkErrorOptions {\n status?: number;\n code?: string;\n cause?: unknown;\n details?: unknown;\n}\n\nexport class SereelSdkError extends Error {\n readonly status: number | undefined;\n readonly code: string | undefined;\n readonly details?: unknown;\n\n constructor(message: string, options: SereelSdkErrorOptions = {}) {\n super(message, options.cause ? { cause: options.cause } : undefined);\n this.name = new.target.name;\n this.status = options.status;\n this.code = options.code;\n this.details = options.details;\n }\n}\n\nexport class InvalidConfigurationError extends SereelSdkError {}\n\nexport class NetworkError extends SereelSdkError {}\n\nexport class HttpError extends SereelSdkError {}\n\nexport class UnauthorizedError extends HttpError {}\n\nexport class ForbiddenError extends HttpError {}\n\nexport class NotFoundError extends HttpError {}\n\nexport class RateLimitError extends HttpError {}\n\nexport class ServerError extends HttpError {}\n\nexport class TimeoutError extends SereelSdkError {}\n\nexport class MalformedResponseError extends SereelSdkError {}\n","import { InvalidConfigurationError } from \"./errors\";\nimport type { ClientConfig, SereelEnvironment } from \"./types\";\n\nexport const ENVIRONMENT_BASE_URLS: Record<SereelEnvironment, string> = {\n devnet: \"https://api-lazer.sereel.com\",\n testnet: \"https://api-lazer-v2.sereel.com\",\n mainnet: \"https://cahokia.sereel.com\",\n};\n\nexport interface ResolvedClientConfig {\n environment: SereelEnvironment;\n apiKey: string;\n timeoutMs: number;\n baseUrl: string;\n fetch: typeof fetch;\n}\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nfunction getFetchImplementation(\n providedFetch: ClientConfig[\"fetch\"],\n): typeof fetch {\n if (providedFetch) {\n return providedFetch;\n }\n\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis);\n }\n\n throw new InvalidConfigurationError(\n \"No fetch implementation is available. Provide config.fetch in this runtime.\",\n );\n}\n\nfunction normalizeBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.trim();\n\n if (!trimmed) {\n throw new InvalidConfigurationError(\"baseUrl must not be empty when provided.\");\n }\n\n try {\n return new URL(trimmed).toString().replace(/\\/+$/, \"\");\n } catch (cause) {\n throw new InvalidConfigurationError(\"baseUrl must be a valid absolute URL.\", {\n cause,\n });\n }\n}\n\nexport function resolveBaseUrl(\n environment: SereelEnvironment,\n baseUrl?: string,\n): string {\n if (baseUrl) {\n return normalizeBaseUrl(baseUrl);\n }\n\n return ENVIRONMENT_BASE_URLS[environment];\n}\n\nexport function resolveClientConfig(config: ClientConfig): ResolvedClientConfig {\n const apiKey = config.apiKey.trim();\n\n if (!apiKey) {\n throw new InvalidConfigurationError(\"apiKey must not be empty.\");\n }\n\n const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {\n throw new InvalidConfigurationError(\"timeoutMs must be a positive number.\");\n }\n\n return {\n environment: config.environment,\n apiKey,\n timeoutMs,\n baseUrl: resolveBaseUrl(config.environment, config.baseUrl),\n fetch: getFetchImplementation(config.fetch),\n };\n}\n","import {\n ForbiddenError,\n HttpError,\n MalformedResponseError,\n NetworkError,\n NotFoundError,\n RateLimitError,\n ServerError,\n TimeoutError,\n UnauthorizedError,\n} from \"./errors\";\nimport type { ResolvedClientConfig } from \"./config\";\n\ninterface ApiErrorBody {\n error?: string;\n message?: string;\n}\n\nfunction createTimeoutSignal(timeoutMs: number): {\n signal: AbortSignal;\n cleanup: () => void;\n} {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n return {\n signal: controller.signal,\n cleanup: () => clearTimeout(timeout),\n };\n}\n\nasync function parseBody(response: Response): Promise<unknown> {\n const text = await response.text();\n if (!text) {\n return null;\n }\n\n try {\n return JSON.parse(text) as unknown;\n } catch (cause) {\n throw new MalformedResponseError(\"Received a non-JSON response body.\", {\n cause,\n status: response.status,\n details: text,\n });\n }\n}\n\nfunction getErrorMessage(status: number, body: unknown): string {\n if (body && typeof body === \"object\") {\n const apiError = body as ApiErrorBody;\n if (typeof apiError.error === \"string\" && apiError.error.trim()) {\n return apiError.error;\n }\n if (typeof apiError.message === \"string\" && apiError.message.trim()) {\n return apiError.message;\n }\n }\n\n return `Request failed with status ${status}.`;\n}\n\nfunction toHttpError(status: number, body: unknown): HttpError {\n const message = getErrorMessage(status, body);\n const options = { status, details: body };\n\n if (status === 401) {\n return new UnauthorizedError(message, options);\n }\n if (status === 403) {\n return new ForbiddenError(message, options);\n }\n if (status === 404) {\n return new NotFoundError(message, options);\n }\n if (status === 429) {\n return new RateLimitError(message, options);\n }\n if (status >= 500) {\n return new ServerError(message, options);\n }\n\n return new HttpError(message, options);\n}\n\nfunction isAbortError(error: unknown): error is Error {\n return (\n error instanceof Error &&\n (error.name === \"AbortError\" || error.constructor.name === \"AbortError\")\n );\n}\n\nfunction wrapNetworkError(error: unknown): Error {\n if (error instanceof NetworkError) {\n return error;\n }\n\n const message =\n error instanceof Error\n ? error.message\n : typeof error === \"string\"\n ? error\n : \"Network request failed.\";\n\n return new NetworkError(message, { cause: error });\n}\n\nexport async function requestJson<T>(\n config: ResolvedClientConfig,\n path: string,\n validate: (value: unknown) => T,\n): Promise<T> {\n const { signal, cleanup } = createTimeoutSignal(config.timeoutMs);\n\n try {\n const response = await config.fetch(`${config.baseUrl}${path}`, {\n method: \"GET\",\n signal,\n headers: {\n accept: \"application/json\",\n \"x-api-key\": config.apiKey,\n },\n });\n\n const body = await parseBody(response);\n if (!response.ok) {\n throw toHttpError(response.status, body);\n }\n\n return validate(body);\n } catch (error) {\n if (\n error instanceof HttpError ||\n error instanceof MalformedResponseError ||\n error instanceof NetworkError\n ) {\n throw error;\n }\n\n if (isAbortError(error)) {\n throw new TimeoutError(\n `Request timed out after ${config.timeoutMs}ms.`,\n { cause: error },\n );\n }\n\n throw wrapNetworkError(error);\n } finally {\n cleanup();\n }\n}\n","import { MalformedResponseError } from \"./errors\";\nimport type {\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkTokenPartner,\n SdkTokenProspectus,\n} from \"./types\";\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction isString(value: unknown): value is string {\n return typeof value === \"string\";\n}\n\nfunction isNullableString(value: unknown): value is string | null {\n return typeof value === \"string\" || value === null;\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction isBoolean(value: unknown): value is boolean {\n return typeof value === \"boolean\";\n}\n\ninterface ValidationFailure {\n path: string;\n expected: string;\n received: unknown;\n}\n\nclass ValidationContext {\n failures: ValidationFailure[] = [];\n\n check(\n condition: boolean,\n path: string,\n expected: string,\n received: unknown,\n ): boolean {\n if (!condition) {\n this.failures.push({ path, expected, received });\n }\n return condition;\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return isRecord(value) ? value : undefined;\n}\n\nfunction isProspectus(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkTokenProspectus {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.url), `${path}.url`, \"string\", v!.url);\n return true;\n}\n\nfunction isTokenPartner(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkTokenPartner {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.partner_name),\n `${path}.partner_name`,\n \"string\",\n v!.partner_name,\n );\n ctx.check(\n isString(v!.partner_logo),\n `${path}.partner_logo`,\n \"string\",\n v!.partner_logo,\n );\n ctx.check(\n isString(v!.partner_role),\n `${path}.partner_role`,\n \"string\",\n v!.partner_role,\n );\n return true;\n}\n\nfunction isRuleSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkRuleSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.rule_address),\n `${path}.rule_address`,\n \"string\",\n v!.rule_address,\n );\n ctx.check(\n isString(v!.rule_type),\n `${path}.rule_type`,\n \"string\",\n v!.rule_type,\n );\n return true;\n}\n\nfunction isRuleEngineSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkRuleEngineSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isString(v!.rule_engine_address),\n `${path}.rule_engine_address`,\n \"string\",\n v!.rule_engine_address,\n );\n const rulesOk = ctx.check(\n Array.isArray(v!.rules),\n `${path}.rules`,\n \"array\",\n v!.rules,\n );\n if (rulesOk) {\n (v!.rules as unknown[]).forEach((rule, i) =>\n isRuleSummary(rule, ctx, `${path}.rules[${i}]`),\n );\n }\n return true;\n}\n\nfunction isIssuerSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkIssuerSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.id), `${path}.id`, \"string\", v!.id);\n ctx.check(\n isString(v!.legal_name),\n `${path}.legal_name`,\n \"string\",\n v!.legal_name,\n );\n ctx.check(\n isNullableString(v!.display_name),\n `${path}.display_name`,\n \"string | null\",\n v!.display_name,\n );\n ctx.check(\n isString(v!.jurisdiction),\n `${path}.jurisdiction`,\n \"string\",\n v!.jurisdiction,\n );\n ctx.check(\n isNullableString(v!.website),\n `${path}.website`,\n \"string | null\",\n v!.website,\n );\n ctx.check(\n isNullableString(v!.logo_url),\n `${path}.logo_url`,\n \"string | null\",\n v!.logo_url,\n );\n return true;\n}\n\nfunction isNativeCurrency(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is NativeCurrency {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.symbol), `${path}.symbol`, \"string\", v!.symbol);\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.decimals),\n `${path}.decimals`,\n \"finite number\",\n v!.decimals,\n );\n return true;\n}\n\nfunction isNetworkDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is NetworkDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.family), `${path}.family`, \"string\", v!.family);\n ctx.check(\n isFiniteNumber(v!.chain_id) || v!.chain_id === null,\n `${path}.chain_id`,\n \"number | null\",\n v!.chain_id,\n );\n isNativeCurrency(v!.native_currency, ctx, `${path}.native_currency`);\n ctx.check(\n isString(v!.rpc_endpoint),\n `${path}.rpc_endpoint`,\n \"string\",\n v!.rpc_endpoint,\n );\n const explorerOk = ctx.check(\n Array.isArray(v!.explorer_urls),\n `${path}.explorer_urls`,\n \"string[]\",\n v!.explorer_urls,\n );\n if (explorerOk) {\n (v!.explorer_urls as unknown[]).forEach((url, i) =>\n ctx.check(\n isString(url),\n `${path}.explorer_urls[${i}]`,\n \"string\",\n url,\n ),\n );\n }\n ctx.check(\n isBoolean(v!.is_testnet),\n `${path}.is_testnet`,\n \"boolean\",\n v!.is_testnet,\n );\n return true;\n}\n\nfunction isFundConfig(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkFundConfig {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.nav_staleness_threshold),\n `${path}.nav_staleness_threshold`,\n \"string\",\n v!.nav_staleness_threshold,\n );\n ctx.check(\n isString(v!.min_subscription),\n `${path}.min_subscription`,\n \"string\",\n v!.min_subscription,\n );\n ctx.check(\n isString(v!.min_redemption),\n `${path}.min_redemption`,\n \"string\",\n v!.min_redemption,\n );\n ctx.check(\n isString(v!.entry_fee_bps),\n `${path}.entry_fee_bps`,\n \"string\",\n v!.entry_fee_bps,\n );\n ctx.check(\n isString(v!.exit_fee_bps),\n `${path}.exit_fee_bps`,\n \"string\",\n v!.exit_fee_bps,\n );\n ctx.check(\n isFiniteNumber(v!.dealing_mode),\n `${path}.dealing_mode`,\n \"finite number\",\n v!.dealing_mode,\n );\n ctx.check(\n isString(v!.redemption_gate_bps),\n `${path}.redemption_gate_bps`,\n \"string\",\n v!.redemption_gate_bps,\n );\n ctx.check(\n isString(v!.management_fee_bps_per_annum),\n `${path}.management_fee_bps_per_annum`,\n \"string\",\n v!.management_fee_bps_per_annum,\n );\n return true;\n}\n\nconst ISSUANCE_STATUSES = new Set([\n \"OPEN\",\n \"CLOSED\",\n \"FINALIZED\",\n \"SETTLED\",\n \"CANCELLED\",\n]);\n\nfunction isIssuanceStatus(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkBookSummary[\"status\"] {\n return ctx.check(\n isString(value) && ISSUANCE_STATUSES.has(value),\n path,\n `one of ${[...ISSUANCE_STATUSES].join(\", \")}`,\n value,\n );\n}\n\nfunction isBookSummary(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkBookSummary {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isString(v!.id) || v!.id === null,\n `${path}.id`,\n \"string | null\",\n v!.id,\n );\n ctx.check(\n isString(v!.organization_id),\n `${path}.organization_id`,\n \"string\",\n v!.organization_id,\n );\n ctx.check(\n isNullableString(v!.name),\n `${path}.name`,\n \"string | null\",\n v!.name,\n );\n ctx.check(\n isNullableString(v!.book_type),\n `${path}.book_type`,\n \"string | null\",\n v!.book_type,\n );\n ctx.check(\n isString(v!.token_address),\n `${path}.token_address`,\n \"string\",\n v!.token_address,\n );\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(\n isString(v!.settlement_token),\n `${path}.settlement_token`,\n \"string\",\n v!.settlement_token,\n );\n ctx.check(\n isString(v!.order_book_address),\n `${path}.order_book_address`,\n \"string\",\n v!.order_book_address,\n );\n ctx.check(\n isString(v!.fund_address),\n `${path}.fund_address`,\n \"string\",\n v!.fund_address,\n );\n ctx.check(\n isString(v!.fund_id),\n `${path}.fund_id`,\n \"string\",\n v!.fund_id,\n );\n ctx.check(\n isString(v!.initial_nav),\n `${path}.initial_nav`,\n \"string\",\n v!.initial_nav,\n );\n isFundConfig(v!.fund_config, ctx, `${path}.fund_config`);\n isIssuanceStatus(v!.status, ctx, `${path}.status`);\n ctx.check(\n isNullableString(v!.created_at),\n `${path}.created_at`,\n \"string | null\",\n v!.created_at,\n );\n return true;\n}\n\nfunction isSecurityDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkSecurityDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n\n ctx.check(\n isString(v!.token_address),\n `${path}.token_address`,\n \"string\",\n v!.token_address,\n );\n ctx.check(\n isString(v!.token_name),\n `${path}.token_name`,\n \"string\",\n v!.token_name,\n );\n ctx.check(\n isString(v!.token_symbol),\n `${path}.token_symbol`,\n \"string\",\n v!.token_symbol,\n );\n ctx.check(\n isString(v!.token_decimal),\n `${path}.token_decimal`,\n \"string\",\n v!.token_decimal,\n );\n ctx.check(\n isString(v!.network_id),\n `${path}.network_id`,\n \"string\",\n v!.network_id,\n );\n ctx.check(\n isString(v!.token_type),\n `${path}.token_type`,\n \"string\",\n v!.token_type,\n );\n ctx.check(isString(v!.admin), `${path}.admin`, \"string\", v!.admin);\n ctx.check(\n isNullableString(v!.icon_url),\n `${path}.icon_url`,\n \"string | null\",\n v!.icon_url,\n );\n ctx.check(\n isNullableString(v!.created_at),\n `${path}.created_at`,\n \"string | null\",\n v!.created_at,\n );\n\n if (v!.prospectus !== null && v!.prospectus !== undefined) {\n isProspectus(v!.prospectus, ctx, `${path}.prospectus`);\n }\n\n if (v!.issuer !== null && v!.issuer !== undefined) {\n isIssuerSummary(v!.issuer, ctx, `${path}.issuer`);\n }\n\n if (v!.book !== null && v!.book !== undefined) {\n isBookSummary(v!.book, ctx, `${path}.book`);\n }\n\n if (v!.partners !== null && v!.partners !== undefined) {\n const partnersOk = ctx.check(\n Array.isArray(v!.partners),\n `${path}.partners`,\n \"array\",\n v!.partners,\n );\n if (partnersOk) {\n (v!.partners as unknown[]).forEach((partner, i) =>\n isTokenPartner(partner, ctx, `${path}.partners[${i}]`),\n );\n }\n }\n\n if (v!.rule_engine !== null && v!.rule_engine !== undefined) {\n isRuleEngineSummary(v!.rule_engine, ctx, `${path}.rule_engine`);\n }\n\n isNetworkDetails(v!.network, ctx, `${path}.network`);\n\n if (v!.trex_claim_topics !== null && v!.trex_claim_topics !== undefined) {\n const topicsOk = ctx.check(\n Array.isArray(v!.trex_claim_topics),\n `${path}.trex_claim_topics`,\n \"number[]\",\n v!.trex_claim_topics,\n );\n if (topicsOk) {\n (v!.trex_claim_topics as unknown[]).forEach((topic, i) =>\n ctx.check(\n isFiniteNumber(topic),\n `${path}.trex_claim_topics[${i}]`,\n \"finite number\",\n topic,\n ),\n );\n }\n }\n\n if (v!.trex_issuers !== null && v!.trex_issuers !== undefined) {\n const issuersOk = ctx.check(\n Array.isArray(v!.trex_issuers),\n `${path}.trex_issuers`,\n \"string[]\",\n v!.trex_issuers,\n );\n if (issuersOk) {\n (v!.trex_issuers as unknown[]).forEach((issuer, i) =>\n ctx.check(\n isString(issuer),\n `${path}.trex_issuers[${i}]`,\n \"string\",\n issuer,\n ),\n );\n }\n }\n\n return true;\n}\n\nfunction buildValidationError(\n value: unknown,\n failures: ValidationFailure[],\n): MalformedResponseError {\n const summary = failures\n .slice(0, 5)\n .map(\n (f) =>\n `${f.path}: expected ${f.expected}, got ${JSON.stringify(f.received)}`,\n )\n .join(\"; \");\n\n const message =\n failures.length > 5\n ? `Received an invalid SDK response shape (${failures.length} issues). First 5: ${summary}`\n : `Received an invalid SDK response shape. ${summary}`;\n\n return new MalformedResponseError(message, {\n details: { failures: failures.slice(0, 20), value },\n });\n}\n\nexport function validateSdkAssetsResponse(value: unknown): SdkAssetsResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(Array.isArray(value.data), \"<root>.data\", \"array\", value.data);\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n if (Array.isArray(value.data)) {\n (value.data as unknown[]).forEach((item, i) =>\n isSecurityDetails(item, ctx, `<root>.data[${i}]`),\n );\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as SdkAssetsResponse;\n}\n\nexport function validateSdkAssetResponse(value: unknown): SdkAssetResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n isSecurityDetails(value.data, ctx, \"<root>.data\");\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as SdkAssetResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n} from \"./validation\";\n\nexport function createClient(config: ClientConfig): SereelSdkClient {\n const resolved = resolveClientConfig(config);\n\n return {\n getAssets(): Promise<SdkAssetsResponse> {\n return requestJson(resolved, \"/sdk/assets\", validateSdkAssetsResponse);\n },\n\n getAssetByTokenAddress(tokenAddress: string): Promise<SdkAssetResponse> {\n const trimmedTokenAddress = tokenAddress.trim();\n if (!trimmedTokenAddress) {\n throw new InvalidConfigurationError(\n \"tokenAddress must not be empty.\",\n );\n }\n\n return requestJson(\n resolved,\n `/sdk/assets/${encodeURIComponent(trimmedTokenAddress)}`,\n validateSdkAssetResponse,\n );\n },\n\n getAssetsByIssuer(issuerId: string): Promise<SdkAssetsResponse> {\n const trimmedIssuerId = issuerId.trim();\n if (!trimmedIssuerId) {\n throw new InvalidConfigurationError(\"issuerId must not be empty.\");\n }\n\n return requestJson(\n resolved,\n `/sdk/assets/issuer/${encodeURIComponent(trimmedIssuerId)}`,\n validateSdkAssetsResponse,\n );\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,IAAM,iBAAN,cAA6B,MAAM;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAiB,UAAiC,CAAC,GAAG;AAChE,UAAM,SAAS,QAAQ,QAAQ,EAAE,OAAO,QAAQ,MAAM,IAAI,MAAS;AACnE,SAAK,OAAO,WAAW;AACvB,SAAK,SAAS,QAAQ;AACtB,SAAK,OAAO,QAAQ;AACpB,SAAK,UAAU,QAAQ;AAAA,EACzB;AACF;AAEO,IAAM,4BAAN,cAAwC,eAAe;AAAC;AAExD,IAAM,eAAN,cAA2B,eAAe;AAAC;AAE3C,IAAM,YAAN,cAAwB,eAAe;AAAC;AAExC,IAAM,oBAAN,cAAgC,UAAU;AAAC;AAE3C,IAAM,iBAAN,cAA6B,UAAU;AAAC;AAExC,IAAM,gBAAN,cAA4B,UAAU;AAAC;AAEvC,IAAM,iBAAN,cAA6B,UAAU;AAAC;AAExC,IAAM,cAAN,cAA0B,UAAU;AAAC;AAErC,IAAM,eAAN,cAA2B,eAAe;AAAC;AAE3C,IAAM,yBAAN,cAAqC,eAAe;AAAC;;;ACpCrD,IAAM,wBAA2D;AAAA,EACtE,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,SAAS;AACX;AAUA,IAAM,qBAAqB;AAE3B,SAAS,uBACP,eACc;AACd,MAAI,eAAe;AACjB,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,WAAW,UAAU,YAAY;AAC1C,WAAO,WAAW,MAAM,KAAK,UAAU;AAAA,EACzC;AAEA,QAAM,IAAI;AAAA,IACR;AAAA,EACF;AACF;AAEA,SAAS,iBAAiB,SAAyB;AACjD,QAAM,UAAU,QAAQ,KAAK;AAE7B,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,0BAA0B,0CAA0C;AAAA,EAChF;AAEA,MAAI;AACF,WAAO,IAAI,IAAI,OAAO,EAAE,SAAS,EAAE,QAAQ,QAAQ,EAAE;AAAA,EACvD,SAAS,OAAO;AACd,UAAM,IAAI,0BAA0B,yCAAyC;AAAA,MAC3E;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEO,SAAS,eACd,aACA,SACQ;AACR,MAAI,SAAS;AACX,WAAO,iBAAiB,OAAO;AAAA,EACjC;AAEA,SAAO,sBAAsB,WAAW;AAC1C;AAEO,SAAS,oBAAoB,QAA4C;AAC9E,QAAM,SAAS,OAAO,OAAO,KAAK;AAElC,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,0BAA0B,2BAA2B;AAAA,EACjE;AAEA,QAAM,YAAY,OAAO,aAAa;AACtC,MAAI,CAAC,OAAO,SAAS,SAAS,KAAK,aAAa,GAAG;AACjD,UAAM,IAAI,0BAA0B,sCAAsC;AAAA,EAC5E;AAEA,SAAO;AAAA,IACL,aAAa,OAAO;AAAA,IACpB;AAAA,IACA;AAAA,IACA,SAAS,eAAe,OAAO,aAAa,OAAO,OAAO;AAAA,IAC1D,OAAO,uBAAuB,OAAO,KAAK;AAAA,EAC5C;AACF;;;AC/DA,SAAS,oBAAoB,WAG3B;AACA,QAAM,aAAa,IAAI,gBAAgB;AACvC,QAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,SAAS;AAE9D,SAAO;AAAA,IACL,QAAQ,WAAW;AAAA,IACnB,SAAS,MAAM,aAAa,OAAO;AAAA,EACrC;AACF;AAEA,eAAe,UAAU,UAAsC;AAC7D,QAAM,OAAO,MAAM,SAAS,KAAK;AACjC,MAAI,CAAC,MAAM;AACT,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,KAAK,MAAM,IAAI;AAAA,EACxB,SAAS,OAAO;AACd,UAAM,IAAI,uBAAuB,sCAAsC;AAAA,MACrE;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AACF;AAEA,SAAS,gBAAgB,QAAgB,MAAuB;AAC9D,MAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,UAAM,WAAW;AACjB,QAAI,OAAO,SAAS,UAAU,YAAY,SAAS,MAAM,KAAK,GAAG;AAC/D,aAAO,SAAS;AAAA,IAClB;AACA,QAAI,OAAO,SAAS,YAAY,YAAY,SAAS,QAAQ,KAAK,GAAG;AACnE,aAAO,SAAS;AAAA,IAClB;AAAA,EACF;AAEA,SAAO,8BAA8B,MAAM;AAC7C;AAEA,SAAS,YAAY,QAAgB,MAA0B;AAC7D,QAAM,UAAU,gBAAgB,QAAQ,IAAI;AAC5C,QAAM,UAAU,EAAE,QAAQ,SAAS,KAAK;AAExC,MAAI,WAAW,KAAK;AAClB,WAAO,IAAI,kBAAkB,SAAS,OAAO;AAAA,EAC/C;AACA,MAAI,WAAW,KAAK;AAClB,WAAO,IAAI,eAAe,SAAS,OAAO;AAAA,EAC5C;AACA,MAAI,WAAW,KAAK;AAClB,WAAO,IAAI,cAAc,SAAS,OAAO;AAAA,EAC3C;AACA,MAAI,WAAW,KAAK;AAClB,WAAO,IAAI,eAAe,SAAS,OAAO;AAAA,EAC5C;AACA,MAAI,UAAU,KAAK;AACjB,WAAO,IAAI,YAAY,SAAS,OAAO;AAAA,EACzC;AAEA,SAAO,IAAI,UAAU,SAAS,OAAO;AACvC;AAEA,SAAS,aAAa,OAAgC;AACpD,SACE,iBAAiB,UAChB,MAAM,SAAS,gBAAgB,MAAM,YAAY,SAAS;AAE/D;AAEA,SAAS,iBAAiB,OAAuB;AAC/C,MAAI,iBAAiB,cAAc;AACjC,WAAO;AAAA,EACT;AAEA,QAAM,UACJ,iBAAiB,QACb,MAAM,UACN,OAAO,UAAU,WACf,QACA;AAER,SAAO,IAAI,aAAa,SAAS,EAAE,OAAO,MAAM,CAAC;AACnD;AAEA,eAAsB,YACpB,QACA,MACA,UACY;AACZ,QAAM,EAAE,QAAQ,QAAQ,IAAI,oBAAoB,OAAO,SAAS;AAEhE,MAAI;AACF,UAAM,WAAW,MAAM,OAAO,MAAM,GAAG,OAAO,OAAO,GAAG,IAAI,IAAI;AAAA,MAC9D,QAAQ;AAAA,MACR;AAAA,MACA,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,aAAa,OAAO;AAAA,MACtB;AAAA,IACF,CAAC;AAED,UAAM,OAAO,MAAM,UAAU,QAAQ;AACrC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,YAAY,SAAS,QAAQ,IAAI;AAAA,IACzC;AAEA,WAAO,SAAS,IAAI;AAAA,EACtB,SAAS,OAAO;AACd,QACE,iBAAiB,aACjB,iBAAiB,0BACjB,iBAAiB,cACjB;AACA,YAAM;AAAA,IACR;AAEA,QAAI,aAAa,KAAK,GAAG;AACvB,YAAM,IAAI;AAAA,QACR,2BAA2B,OAAO,SAAS;AAAA,QAC3C,EAAE,OAAO,MAAM;AAAA,MACjB;AAAA,IACF;AAEA,UAAM,iBAAiB,KAAK;AAAA,EAC9B,UAAE;AACA,YAAQ;AAAA,EACV;AACF;;;ACtIA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,SAAS,OAAiC;AACjD,SAAO,OAAO,UAAU;AAC1B;AAEA,SAAS,iBAAiB,OAAwC;AAChE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,eAAe,OAAiC;AACvD,SAAO,OAAO,UAAU,YAAY,OAAO,SAAS,KAAK;AAC3D;AAEA,SAAS,UAAU,OAAkC;AACnD,SAAO,OAAO,UAAU;AAC1B;AAQA,IAAM,oBAAN,MAAwB;AAAA,EACtB,WAAgC,CAAC;AAAA,EAEjC,MACE,WACA,MACA,UACA,UACS;AACT,QAAI,CAAC,WAAW;AACd,WAAK,SAAS,KAAK,EAAE,MAAM,UAAU,SAAS,CAAC;AAAA,IACjD;AACA,WAAO;AAAA,EACT;AACF;AAEA,SAAS,SAAS,OAAqD;AACrE,SAAO,SAAS,KAAK,IAAI,QAAQ;AACnC;AAEA,SAAS,aACP,OACA,KACA,MAC6B;AAC7B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,EAAG,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAG,IAAI;AAC9D,MAAI,MAAM,SAAS,EAAG,GAAG,GAAG,GAAG,IAAI,QAAQ,UAAU,EAAG,GAAG;AAC3D,SAAO;AACT;AAEA,SAAS,eACP,OACA,KACA,MAC0B;AAC1B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,cACP,OACA,KACA,MACyB;AACzB,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,SAAS;AAAA,IACrB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,oBACP,OACA,KACA,MAC+B;AAC/B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,EAAG,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAG,IAAI;AAC9D,MAAI;AAAA,IACF,SAAS,EAAG,mBAAmB;AAAA,IAC/B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,QAAM,UAAU,IAAI;AAAA,IAClB,MAAM,QAAQ,EAAG,KAAK;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,SAAS;AACX,IAAC,EAAG,MAAoB;AAAA,MAAQ,CAAC,MAAM,MACrC,cAAc,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,GAAG;AAAA,IAChD;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,gBACP,OACA,KACA,MAC2B;AAC3B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,EAAG,EAAE,GAAG,GAAG,IAAI,OAAO,UAAU,EAAG,EAAE;AACxD,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,YAAY;AAAA,IAChC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,OAAO;AAAA,IAC3B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,QAAQ;AAAA,IAC5B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,iBACP,OACA,KACA,MACyB;AACzB,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,EAAG,MAAM,GAAG,GAAG,IAAI,WAAW,UAAU,EAAG,MAAM;AACpE,MAAI,MAAM,SAAS,EAAG,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAG,IAAI;AAC9D,MAAI;AAAA,IACF,eAAe,EAAG,QAAQ;AAAA,IAC1B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,iBACP,OACA,KACA,MACyB;AACzB,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,MAAM,SAAS,EAAG,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAG,IAAI;AAC9D,MAAI,MAAM,SAAS,EAAG,MAAM,GAAG,GAAG,IAAI,WAAW,UAAU,EAAG,MAAM;AACpE,MAAI;AAAA,IACF,eAAe,EAAG,QAAQ,KAAK,EAAG,aAAa;AAAA,IAC/C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,mBAAiB,EAAG,iBAAiB,KAAK,GAAG,IAAI,kBAAkB;AACnE,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,QAAM,aAAa,IAAI;AAAA,IACrB,MAAM,QAAQ,EAAG,aAAa;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,YAAY;AACd,IAAC,EAAG,cAA4B;AAAA,MAAQ,CAAC,KAAK,MAC5C,IAAI;AAAA,QACF,SAAS,GAAG;AAAA,QACZ,GAAG,IAAI,kBAAkB,CAAC;AAAA,QAC1B;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,MAAI;AAAA,IACF,UAAU,EAAG,UAAU;AAAA,IACvB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,aACP,OACA,KACA,MACwB;AACxB,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,SAAS,EAAG,uBAAuB;AAAA,IACnC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,gBAAgB;AAAA,IAC5B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,cAAc;AAAA,IAC1B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,aAAa;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,eAAe,EAAG,YAAY;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,mBAAmB;AAAA,IAC/B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,4BAA4B;AAAA,IACxC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,IAAM,oBAAoB,oBAAI,IAAI;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,SAAS,iBACP,OACA,KACA,MACmC;AACnC,SAAO,IAAI;AAAA,IACT,SAAS,KAAK,KAAK,kBAAkB,IAAI,KAAK;AAAA,IAC9C;AAAA,IACA,UAAU,CAAC,GAAG,iBAAiB,EAAE,KAAK,IAAI,CAAC;AAAA,IAC3C;AAAA,EACF;AACF;AAEA,SAAS,cACP,OACA,KACA,MACyB;AACzB,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,SAAS,EAAG,EAAE,KAAK,EAAG,OAAO;AAAA,IAC7B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,eAAe;AAAA,IAC3B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,IAAI;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,SAAS;AAAA,IAC7B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,aAAa;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,gBAAgB;AAAA,IAC5B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,kBAAkB;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,OAAO;AAAA,IACnB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,WAAW;AAAA,IACvB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,eAAa,EAAG,aAAa,KAAK,GAAG,IAAI,cAAc;AACvD,mBAAiB,EAAG,QAAQ,KAAK,GAAG,IAAI,SAAS;AACjD,MAAI;AAAA,IACF,iBAAiB,EAAG,UAAU;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,kBACP,OACA,KACA,MAC6B;AAC7B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAE/D,MAAI;AAAA,IACF,SAAS,EAAG,aAAa;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,YAAY;AAAA,IACxB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,aAAa;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,UAAU;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,MAAM,SAAS,EAAG,KAAK,GAAG,GAAG,IAAI,UAAU,UAAU,EAAG,KAAK;AACjE,MAAI;AAAA,IACF,iBAAiB,EAAG,QAAQ;AAAA,IAC5B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,UAAU;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AAEA,MAAI,EAAG,eAAe,QAAQ,EAAG,eAAe,QAAW;AACzD,iBAAa,EAAG,YAAY,KAAK,GAAG,IAAI,aAAa;AAAA,EACvD;AAEA,MAAI,EAAG,WAAW,QAAQ,EAAG,WAAW,QAAW;AACjD,oBAAgB,EAAG,QAAQ,KAAK,GAAG,IAAI,SAAS;AAAA,EAClD;AAEA,MAAI,EAAG,SAAS,QAAQ,EAAG,SAAS,QAAW;AAC7C,kBAAc,EAAG,MAAM,KAAK,GAAG,IAAI,OAAO;AAAA,EAC5C;AAEA,MAAI,EAAG,aAAa,QAAQ,EAAG,aAAa,QAAW;AACrD,UAAM,aAAa,IAAI;AAAA,MACrB,MAAM,QAAQ,EAAG,QAAQ;AAAA,MACzB,GAAG,IAAI;AAAA,MACP;AAAA,MACA,EAAG;AAAA,IACL;AACA,QAAI,YAAY;AACd,MAAC,EAAG,SAAuB;AAAA,QAAQ,CAAC,SAAS,MAC3C,eAAe,SAAS,KAAK,GAAG,IAAI,aAAa,CAAC,GAAG;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,EAAG,gBAAgB,QAAQ,EAAG,gBAAgB,QAAW;AAC3D,wBAAoB,EAAG,aAAa,KAAK,GAAG,IAAI,cAAc;AAAA,EAChE;AAEA,mBAAiB,EAAG,SAAS,KAAK,GAAG,IAAI,UAAU;AAEnD,MAAI,EAAG,sBAAsB,QAAQ,EAAG,sBAAsB,QAAW;AACvE,UAAM,WAAW,IAAI;AAAA,MACnB,MAAM,QAAQ,EAAG,iBAAiB;AAAA,MAClC,GAAG,IAAI;AAAA,MACP;AAAA,MACA,EAAG;AAAA,IACL;AACA,QAAI,UAAU;AACZ,MAAC,EAAG,kBAAgC;AAAA,QAAQ,CAAC,OAAO,MAClD,IAAI;AAAA,UACF,eAAe,KAAK;AAAA,UACpB,GAAG,IAAI,sBAAsB,CAAC;AAAA,UAC9B;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,EAAG,iBAAiB,QAAQ,EAAG,iBAAiB,QAAW;AAC7D,UAAM,YAAY,IAAI;AAAA,MACpB,MAAM,QAAQ,EAAG,YAAY;AAAA,MAC7B,GAAG,IAAI;AAAA,MACP;AAAA,MACA,EAAG;AAAA,IACL;AACA,QAAI,WAAW;AACb,MAAC,EAAG,aAA2B;AAAA,QAAQ,CAAC,QAAQ,MAC9C,IAAI;AAAA,UACF,SAAS,MAAM;AAAA,UACf,GAAG,IAAI,iBAAiB,CAAC;AAAA,UACzB;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,qBACP,OACA,UACwB;AACxB,QAAM,UAAU,SACb,MAAM,GAAG,CAAC,EACV;AAAA,IACC,CAAC,MACC,GAAG,EAAE,IAAI,cAAc,EAAE,QAAQ,SAAS,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,EACxE,EACC,KAAK,IAAI;AAEZ,QAAM,UACJ,SAAS,SAAS,IACd,2CAA2C,SAAS,MAAM,sBAAsB,OAAO,KACvF,2CAA2C,OAAO;AAExD,SAAO,IAAI,uBAAuB,SAAS;AAAA,IACzC,SAAS,EAAE,UAAU,SAAS,MAAM,GAAG,EAAE,GAAG,MAAM;AAAA,EACpD,CAAC;AACH;AAEO,SAAS,0BAA0B,OAAmC;AAC3E,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI,MAAM,MAAM,QAAQ,MAAM,IAAI,GAAG,eAAe,SAAS,MAAM,IAAI;AACvE,QAAI;AAAA,MACF,eAAe,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,MAAM,QAAQ,MAAM,IAAI,GAAG;AAC7B,MAAC,MAAM,KAAmB;AAAA,QAAQ,CAAC,MAAM,MACvC,kBAAkB,MAAM,KAAK,eAAe,CAAC,GAAG;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;AAEO,SAAS,yBAAyB,OAAkC;AACzE,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,sBAAkB,MAAM,MAAM,KAAK,aAAa;AAAA,EAClD;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;;;AC7lBO,SAAS,aAAa,QAAuC;AAClE,QAAM,WAAW,oBAAoB,MAAM;AAE3C,SAAO;AAAA,IACL,YAAwC;AACtC,aAAO,YAAY,UAAU,eAAe,yBAAyB;AAAA,IACvE;AAAA,IAEA,uBAAuB,cAAiD;AACtE,YAAM,sBAAsB,aAAa,KAAK;AAC9C,UAAI,CAAC,qBAAqB;AACxB,cAAM,IAAI;AAAA,UACR;AAAA,QACF;AAAA,MACF;AAEA,aAAO;AAAA,QACL;AAAA,QACA,eAAe,mBAAmB,mBAAmB,CAAC;AAAA,QACtD;AAAA,MACF;AAAA,IACF;AAAA,IAEA,kBAAkB,UAA8C;AAC9D,YAAM,kBAAkB,SAAS,KAAK;AACtC,UAAI,CAAC,iBAAiB;AACpB,cAAM,IAAI,0BAA0B,6BAA6B;AAAA,MACnE;AAEA,aAAO;AAAA,QACL;AAAA,QACA,sBAAsB,mBAAmB,eAAe,CAAC;AAAA,QACzD;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
|