@sereel/sdk 0.1.6 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -30
- package/dist/index.cjs +110 -161
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -21
- package/dist/index.d.ts +6 -21
- package/dist/index.js +110 -161
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -195,9 +195,6 @@ function isString(value) {
|
|
|
195
195
|
function isNullableString(value) {
|
|
196
196
|
return typeof value === "string" || value === null;
|
|
197
197
|
}
|
|
198
|
-
function isOptionalNullableString(value) {
|
|
199
|
-
return typeof value === "string" || value === null || value === void 0;
|
|
200
|
-
}
|
|
201
198
|
function isFiniteNumber(value) {
|
|
202
199
|
return typeof value === "number" && Number.isFinite(value);
|
|
203
200
|
}
|
|
@@ -286,79 +283,6 @@ function isRuleEngineSummary(value, ctx, path) {
|
|
|
286
283
|
}
|
|
287
284
|
return true;
|
|
288
285
|
}
|
|
289
|
-
function isSecurityDetails(value, ctx, path) {
|
|
290
|
-
const v = asRecord(value);
|
|
291
|
-
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
292
|
-
ctx.check(
|
|
293
|
-
isString(v.token_address),
|
|
294
|
-
`${path}.token_address`,
|
|
295
|
-
"string",
|
|
296
|
-
v.token_address
|
|
297
|
-
);
|
|
298
|
-
ctx.check(
|
|
299
|
-
isString(v.token_name),
|
|
300
|
-
`${path}.token_name`,
|
|
301
|
-
"string",
|
|
302
|
-
v.token_name
|
|
303
|
-
);
|
|
304
|
-
ctx.check(
|
|
305
|
-
isString(v.token_symbol),
|
|
306
|
-
`${path}.token_symbol`,
|
|
307
|
-
"string",
|
|
308
|
-
v.token_symbol
|
|
309
|
-
);
|
|
310
|
-
ctx.check(
|
|
311
|
-
isString(v.token_decimal),
|
|
312
|
-
`${path}.token_decimal`,
|
|
313
|
-
"string",
|
|
314
|
-
v.token_decimal
|
|
315
|
-
);
|
|
316
|
-
ctx.check(
|
|
317
|
-
isString(v.network_id),
|
|
318
|
-
`${path}.network_id`,
|
|
319
|
-
"string",
|
|
320
|
-
v.network_id
|
|
321
|
-
);
|
|
322
|
-
ctx.check(
|
|
323
|
-
isString(v.token_type),
|
|
324
|
-
`${path}.token_type`,
|
|
325
|
-
"string",
|
|
326
|
-
v.token_type
|
|
327
|
-
);
|
|
328
|
-
ctx.check(isString(v.admin), `${path}.admin`, "string", v.admin);
|
|
329
|
-
ctx.check(
|
|
330
|
-
isNullableString(v.icon_url),
|
|
331
|
-
`${path}.icon_url`,
|
|
332
|
-
"string | null",
|
|
333
|
-
v.icon_url
|
|
334
|
-
);
|
|
335
|
-
ctx.check(
|
|
336
|
-
isNullableString(v.created_at),
|
|
337
|
-
`${path}.created_at`,
|
|
338
|
-
"string | null",
|
|
339
|
-
v.created_at
|
|
340
|
-
);
|
|
341
|
-
if (v.prospectus !== null && v.prospectus !== void 0) {
|
|
342
|
-
isProspectus(v.prospectus, ctx, `${path}.prospectus`);
|
|
343
|
-
}
|
|
344
|
-
if (v.partners !== null && v.partners !== void 0) {
|
|
345
|
-
const partnersOk = ctx.check(
|
|
346
|
-
Array.isArray(v.partners),
|
|
347
|
-
`${path}.partners`,
|
|
348
|
-
"array",
|
|
349
|
-
v.partners
|
|
350
|
-
);
|
|
351
|
-
if (partnersOk) {
|
|
352
|
-
v.partners.forEach(
|
|
353
|
-
(partner, i) => isTokenPartner(partner, ctx, `${path}.partners[${i}]`)
|
|
354
|
-
);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
-
if (v.rule_engine !== null && v.rule_engine !== void 0) {
|
|
358
|
-
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
359
|
-
}
|
|
360
|
-
return true;
|
|
361
|
-
}
|
|
362
286
|
function isIssuerSummary(value, ctx, path) {
|
|
363
287
|
const v = asRecord(value);
|
|
364
288
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
@@ -448,30 +372,12 @@ function isNetworkDetails(value, ctx, path) {
|
|
|
448
372
|
)
|
|
449
373
|
);
|
|
450
374
|
}
|
|
451
|
-
ctx.check(
|
|
452
|
-
isBoolean(v.can_deploy_cmtat_token),
|
|
453
|
-
`${path}.can_deploy_cmtat_token`,
|
|
454
|
-
"boolean",
|
|
455
|
-
v.can_deploy_cmtat_token
|
|
456
|
-
);
|
|
457
|
-
ctx.check(
|
|
458
|
-
isBoolean(v.can_deploy_trex_token),
|
|
459
|
-
`${path}.can_deploy_trex_token`,
|
|
460
|
-
"boolean",
|
|
461
|
-
v.can_deploy_trex_token
|
|
462
|
-
);
|
|
463
375
|
ctx.check(
|
|
464
376
|
isBoolean(v.is_testnet),
|
|
465
377
|
`${path}.is_testnet`,
|
|
466
378
|
"boolean",
|
|
467
379
|
v.is_testnet
|
|
468
380
|
);
|
|
469
|
-
ctx.check(
|
|
470
|
-
isBoolean(v.is_supported),
|
|
471
|
-
`${path}.is_supported`,
|
|
472
|
-
"boolean",
|
|
473
|
-
v.is_supported
|
|
474
|
-
);
|
|
475
381
|
return true;
|
|
476
382
|
}
|
|
477
383
|
function isFundConfig(value, ctx, path) {
|
|
@@ -507,30 +413,12 @@ function isFundConfig(value, ctx, path) {
|
|
|
507
413
|
"string",
|
|
508
414
|
v.exit_fee_bps
|
|
509
415
|
);
|
|
510
|
-
ctx.check(
|
|
511
|
-
isFiniteNumber(v.dealing_mode),
|
|
512
|
-
`${path}.dealing_mode`,
|
|
513
|
-
"finite number",
|
|
514
|
-
v.dealing_mode
|
|
515
|
-
);
|
|
516
416
|
ctx.check(
|
|
517
417
|
isString(v.redemption_gate_bps),
|
|
518
418
|
`${path}.redemption_gate_bps`,
|
|
519
419
|
"string",
|
|
520
420
|
v.redemption_gate_bps
|
|
521
421
|
);
|
|
522
|
-
ctx.check(
|
|
523
|
-
isOptionalNullableString(v.protocol_subscription_fee_bps),
|
|
524
|
-
`${path}.protocol_subscription_fee_bps`,
|
|
525
|
-
"string | null | undefined",
|
|
526
|
-
v.protocol_subscription_fee_bps
|
|
527
|
-
);
|
|
528
|
-
ctx.check(
|
|
529
|
-
isOptionalNullableString(v.protocol_fee_recipient),
|
|
530
|
-
`${path}.protocol_fee_recipient`,
|
|
531
|
-
"string | null | undefined",
|
|
532
|
-
v.protocol_fee_recipient
|
|
533
|
-
);
|
|
534
422
|
ctx.check(
|
|
535
423
|
isString(v.management_fee_bps_per_annum),
|
|
536
424
|
`${path}.management_fee_bps_per_annum`,
|
|
@@ -587,48 +475,18 @@ function isBookSummary(value, ctx, path) {
|
|
|
587
475
|
"string",
|
|
588
476
|
v.token_address
|
|
589
477
|
);
|
|
590
|
-
ctx.check(
|
|
591
|
-
isString(v.fund_token),
|
|
592
|
-
`${path}.fund_token`,
|
|
593
|
-
"string",
|
|
594
|
-
v.fund_token
|
|
595
|
-
);
|
|
596
478
|
ctx.check(
|
|
597
479
|
isString(v.network_id),
|
|
598
480
|
`${path}.network_id`,
|
|
599
481
|
"string",
|
|
600
482
|
v.network_id
|
|
601
483
|
);
|
|
602
|
-
ctx.check(
|
|
603
|
-
isOptionalNullableString(v.admin_wallet),
|
|
604
|
-
`${path}.admin_wallet`,
|
|
605
|
-
"string | null | undefined",
|
|
606
|
-
v.admin_wallet
|
|
607
|
-
);
|
|
608
|
-
ctx.check(
|
|
609
|
-
isOptionalNullableString(v.manager_wallet),
|
|
610
|
-
`${path}.manager_wallet`,
|
|
611
|
-
"string | null | undefined",
|
|
612
|
-
v.manager_wallet
|
|
613
|
-
);
|
|
614
484
|
ctx.check(
|
|
615
485
|
isString(v.settlement_token),
|
|
616
486
|
`${path}.settlement_token`,
|
|
617
487
|
"string",
|
|
618
488
|
v.settlement_token
|
|
619
489
|
);
|
|
620
|
-
ctx.check(
|
|
621
|
-
isNullableString(v.factory_address),
|
|
622
|
-
`${path}.factory_address`,
|
|
623
|
-
"string | null",
|
|
624
|
-
v.factory_address
|
|
625
|
-
);
|
|
626
|
-
ctx.check(
|
|
627
|
-
isNullableString(v.deployment_txn_hash),
|
|
628
|
-
`${path}.deployment_txn_hash`,
|
|
629
|
-
"string | null",
|
|
630
|
-
v.deployment_txn_hash
|
|
631
|
-
);
|
|
632
490
|
ctx.check(
|
|
633
491
|
isString(v.order_book_address),
|
|
634
492
|
`${path}.order_book_address`,
|
|
@@ -661,31 +519,122 @@ function isBookSummary(value, ctx, path) {
|
|
|
661
519
|
"string | null",
|
|
662
520
|
v.created_at
|
|
663
521
|
);
|
|
664
|
-
ctx.check(
|
|
665
|
-
isNullableString(v.updated_at),
|
|
666
|
-
`${path}.updated_at`,
|
|
667
|
-
"string | null",
|
|
668
|
-
v.updated_at
|
|
669
|
-
);
|
|
670
522
|
return true;
|
|
671
523
|
}
|
|
672
|
-
function
|
|
524
|
+
function isSecurityDetails(value, ctx, path) {
|
|
673
525
|
const v = asRecord(value);
|
|
674
526
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
527
|
+
ctx.check(
|
|
528
|
+
isString(v.token_address),
|
|
529
|
+
`${path}.token_address`,
|
|
530
|
+
"string",
|
|
531
|
+
v.token_address
|
|
532
|
+
);
|
|
533
|
+
ctx.check(
|
|
534
|
+
isString(v.token_name),
|
|
535
|
+
`${path}.token_name`,
|
|
536
|
+
"string",
|
|
537
|
+
v.token_name
|
|
538
|
+
);
|
|
539
|
+
ctx.check(
|
|
540
|
+
isString(v.token_symbol),
|
|
541
|
+
`${path}.token_symbol`,
|
|
542
|
+
"string",
|
|
543
|
+
v.token_symbol
|
|
682
544
|
);
|
|
683
|
-
|
|
684
|
-
v.
|
|
685
|
-
|
|
545
|
+
ctx.check(
|
|
546
|
+
isString(v.token_decimal),
|
|
547
|
+
`${path}.token_decimal`,
|
|
548
|
+
"string",
|
|
549
|
+
v.token_decimal
|
|
550
|
+
);
|
|
551
|
+
ctx.check(
|
|
552
|
+
isString(v.network_id),
|
|
553
|
+
`${path}.network_id`,
|
|
554
|
+
"string",
|
|
555
|
+
v.network_id
|
|
556
|
+
);
|
|
557
|
+
ctx.check(
|
|
558
|
+
isString(v.token_type),
|
|
559
|
+
`${path}.token_type`,
|
|
560
|
+
"string",
|
|
561
|
+
v.token_type
|
|
562
|
+
);
|
|
563
|
+
ctx.check(isString(v.admin), `${path}.admin`, "string", v.admin);
|
|
564
|
+
ctx.check(
|
|
565
|
+
isNullableString(v.icon_url),
|
|
566
|
+
`${path}.icon_url`,
|
|
567
|
+
"string | null",
|
|
568
|
+
v.icon_url
|
|
569
|
+
);
|
|
570
|
+
ctx.check(
|
|
571
|
+
isNullableString(v.created_at),
|
|
572
|
+
`${path}.created_at`,
|
|
573
|
+
"string | null",
|
|
574
|
+
v.created_at
|
|
575
|
+
);
|
|
576
|
+
if (v.prospectus !== null && v.prospectus !== void 0) {
|
|
577
|
+
isProspectus(v.prospectus, ctx, `${path}.prospectus`);
|
|
578
|
+
}
|
|
579
|
+
if (v.issuer !== null && v.issuer !== void 0) {
|
|
580
|
+
isIssuerSummary(v.issuer, ctx, `${path}.issuer`);
|
|
581
|
+
}
|
|
582
|
+
if (v.book !== null && v.book !== void 0) {
|
|
583
|
+
isBookSummary(v.book, ctx, `${path}.book`);
|
|
584
|
+
}
|
|
585
|
+
if (v.partners !== null && v.partners !== void 0) {
|
|
586
|
+
const partnersOk = ctx.check(
|
|
587
|
+
Array.isArray(v.partners),
|
|
588
|
+
`${path}.partners`,
|
|
589
|
+
"array",
|
|
590
|
+
v.partners
|
|
686
591
|
);
|
|
592
|
+
if (partnersOk) {
|
|
593
|
+
v.partners.forEach(
|
|
594
|
+
(partner, i) => isTokenPartner(partner, ctx, `${path}.partners[${i}]`)
|
|
595
|
+
);
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
if (v.rule_engine !== null && v.rule_engine !== void 0) {
|
|
599
|
+
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
687
600
|
}
|
|
688
601
|
isNetworkDetails(v.network, ctx, `${path}.network`);
|
|
602
|
+
if (v.trex_claim_topics !== null && v.trex_claim_topics !== void 0) {
|
|
603
|
+
const topicsOk = ctx.check(
|
|
604
|
+
Array.isArray(v.trex_claim_topics),
|
|
605
|
+
`${path}.trex_claim_topics`,
|
|
606
|
+
"number[]",
|
|
607
|
+
v.trex_claim_topics
|
|
608
|
+
);
|
|
609
|
+
if (topicsOk) {
|
|
610
|
+
v.trex_claim_topics.forEach(
|
|
611
|
+
(topic, i) => ctx.check(
|
|
612
|
+
isFiniteNumber(topic),
|
|
613
|
+
`${path}.trex_claim_topics[${i}]`,
|
|
614
|
+
"finite number",
|
|
615
|
+
topic
|
|
616
|
+
)
|
|
617
|
+
);
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
if (v.trex_issuers !== null && v.trex_issuers !== void 0) {
|
|
621
|
+
const issuersOk = ctx.check(
|
|
622
|
+
Array.isArray(v.trex_issuers),
|
|
623
|
+
`${path}.trex_issuers`,
|
|
624
|
+
"string[]",
|
|
625
|
+
v.trex_issuers
|
|
626
|
+
);
|
|
627
|
+
if (issuersOk) {
|
|
628
|
+
v.trex_issuers.forEach(
|
|
629
|
+
(issuer, i) => ctx.check(
|
|
630
|
+
isString(issuer),
|
|
631
|
+
`${path}.trex_issuers[${i}]`,
|
|
632
|
+
"string",
|
|
633
|
+
issuer
|
|
634
|
+
)
|
|
635
|
+
);
|
|
636
|
+
}
|
|
637
|
+
}
|
|
689
638
|
return true;
|
|
690
639
|
}
|
|
691
640
|
function buildValidationError(value, failures) {
|
|
@@ -710,7 +659,7 @@ function validateSdkAssetsResponse(value) {
|
|
|
710
659
|
);
|
|
711
660
|
if (Array.isArray(value.data)) {
|
|
712
661
|
value.data.forEach(
|
|
713
|
-
(item, i) =>
|
|
662
|
+
(item, i) => isSecurityDetails(item, ctx, `<root>.data[${i}]`)
|
|
714
663
|
);
|
|
715
664
|
}
|
|
716
665
|
}
|
|
@@ -723,7 +672,7 @@ function validateSdkAssetResponse(value) {
|
|
|
723
672
|
const ctx = new ValidationContext();
|
|
724
673
|
ctx.check(isRecord(value), "<root>", "object", value);
|
|
725
674
|
if (isRecord(value)) {
|
|
726
|
-
|
|
675
|
+
isSecurityDetails(value.data, ctx, "<root>.data");
|
|
727
676
|
}
|
|
728
677
|
if (ctx.failures.length > 0) {
|
|
729
678
|
throw buildValidationError(value, ctx.failures);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/config.ts","../src/transport.ts","../src/validation.ts","../src/client.ts"],"sourcesContent":["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/errors.ts","../src/config.ts","../src/transport.ts","../src/validation.ts","../src/client.ts"],"sourcesContent":["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 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":"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","names":[]}
|