@sereel/sdk 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +211 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +46 -1
- package/dist/index.d.ts +46 -1
- package/dist/index.js +211 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -517,6 +517,103 @@ function isNetworkDetails(value, ctx, path) {
|
|
|
517
517
|
);
|
|
518
518
|
return true;
|
|
519
519
|
}
|
|
520
|
+
function isComplianceFactoryDetails(value, ctx, path) {
|
|
521
|
+
const v = asRecord(value);
|
|
522
|
+
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
523
|
+
ctx.check(isString(v.deployer), `${path}.deployer`, "string", v.deployer);
|
|
524
|
+
ctx.check(isString(v.salt), `${path}.salt`, "string", v.salt);
|
|
525
|
+
ctx.check(isString(v.timestamp), `${path}.timestamp`, "string", v.timestamp);
|
|
526
|
+
ctx.check(
|
|
527
|
+
isString(v.identity_implementation),
|
|
528
|
+
`${path}.identity_implementation`,
|
|
529
|
+
"string",
|
|
530
|
+
v.identity_implementation
|
|
531
|
+
);
|
|
532
|
+
ctx.check(
|
|
533
|
+
isString(v.implementation_authority),
|
|
534
|
+
`${path}.implementation_authority`,
|
|
535
|
+
"string",
|
|
536
|
+
v.implementation_authority
|
|
537
|
+
);
|
|
538
|
+
ctx.check(isString(v.id_factory), `${path}.id_factory`, "string", v.id_factory);
|
|
539
|
+
ctx.check(isString(v.gateway), `${path}.gateway`, "string", v.gateway);
|
|
540
|
+
ctx.check(
|
|
541
|
+
isString(v.trex_implementation_authority),
|
|
542
|
+
`${path}.trex_implementation_authority`,
|
|
543
|
+
"string",
|
|
544
|
+
v.trex_implementation_authority
|
|
545
|
+
);
|
|
546
|
+
ctx.check(
|
|
547
|
+
isString(v.erc3643_token_impl),
|
|
548
|
+
`${path}.erc3643_token_impl`,
|
|
549
|
+
"string",
|
|
550
|
+
v.erc3643_token_impl
|
|
551
|
+
);
|
|
552
|
+
ctx.check(
|
|
553
|
+
isString(v.erc3643_modular_compliance_impl),
|
|
554
|
+
`${path}.erc3643_modular_compliance_impl`,
|
|
555
|
+
"string",
|
|
556
|
+
v.erc3643_modular_compliance_impl
|
|
557
|
+
);
|
|
558
|
+
ctx.check(
|
|
559
|
+
isString(v.erc3643_identity_registry_storage),
|
|
560
|
+
`${path}.erc3643_identity_registry_storage`,
|
|
561
|
+
"string",
|
|
562
|
+
v.erc3643_identity_registry_storage
|
|
563
|
+
);
|
|
564
|
+
ctx.check(
|
|
565
|
+
isString(v.erc3643_claim_topics_registry),
|
|
566
|
+
`${path}.erc3643_claim_topics_registry`,
|
|
567
|
+
"string",
|
|
568
|
+
v.erc3643_claim_topics_registry
|
|
569
|
+
);
|
|
570
|
+
ctx.check(
|
|
571
|
+
isString(v.erc3643_trusted_issuers_registry),
|
|
572
|
+
`${path}.erc3643_trusted_issuers_registry`,
|
|
573
|
+
"string",
|
|
574
|
+
v.erc3643_trusted_issuers_registry
|
|
575
|
+
);
|
|
576
|
+
ctx.check(
|
|
577
|
+
isString(v.erc3643_identity_registry),
|
|
578
|
+
`${path}.erc3643_identity_registry`,
|
|
579
|
+
"string",
|
|
580
|
+
v.erc3643_identity_registry
|
|
581
|
+
);
|
|
582
|
+
ctx.check(isString(v.claim_issuer), `${path}.claim_issuer`, "string", v.claim_issuer);
|
|
583
|
+
ctx.check(
|
|
584
|
+
isString(v.claim_issuer_management_key),
|
|
585
|
+
`${path}.claim_issuer_management_key`,
|
|
586
|
+
"string",
|
|
587
|
+
v.claim_issuer_management_key
|
|
588
|
+
);
|
|
589
|
+
ctx.check(
|
|
590
|
+
isString(v.claim_signer_address),
|
|
591
|
+
`${path}.claim_signer_address`,
|
|
592
|
+
"string",
|
|
593
|
+
v.claim_signer_address
|
|
594
|
+
);
|
|
595
|
+
ctx.check(
|
|
596
|
+
isString(v.token_implementation),
|
|
597
|
+
`${path}.token_implementation`,
|
|
598
|
+
"string",
|
|
599
|
+
v.token_implementation
|
|
600
|
+
);
|
|
601
|
+
ctx.check(
|
|
602
|
+
isString(v.modular_compliance_implementation),
|
|
603
|
+
`${path}.modular_compliance_implementation`,
|
|
604
|
+
"string",
|
|
605
|
+
v.modular_compliance_implementation
|
|
606
|
+
);
|
|
607
|
+
ctx.check(
|
|
608
|
+
isString(v.trex_factory_implementation_authority),
|
|
609
|
+
`${path}.trex_factory_implementation_authority`,
|
|
610
|
+
"string",
|
|
611
|
+
v.trex_factory_implementation_authority
|
|
612
|
+
);
|
|
613
|
+
ctx.check(isString(v.trex_factory), `${path}.trex_factory`, "string", v.trex_factory);
|
|
614
|
+
ctx.check(isString(v.trex_gateway), `${path}.trex_gateway`, "string", v.trex_gateway);
|
|
615
|
+
return true;
|
|
616
|
+
}
|
|
520
617
|
function isFundConfig(value, ctx, path) {
|
|
521
618
|
const v = asRecord(value);
|
|
522
619
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
@@ -650,6 +747,12 @@ function isBookSummary(value, ctx, path) {
|
|
|
650
747
|
);
|
|
651
748
|
isFundConfig(v.fund_config, ctx, `${path}.fund_config`);
|
|
652
749
|
isIssuanceStatus(v.status, ctx, `${path}.status`);
|
|
750
|
+
ctx.check(
|
|
751
|
+
isNullableString(v.visibility),
|
|
752
|
+
`${path}.visibility`,
|
|
753
|
+
"string | null",
|
|
754
|
+
v.visibility
|
|
755
|
+
);
|
|
653
756
|
ctx.check(
|
|
654
757
|
isNullableString(v.created_at),
|
|
655
758
|
`${path}.created_at`,
|
|
@@ -661,6 +764,7 @@ function isBookSummary(value, ctx, path) {
|
|
|
661
764
|
function isSecurityDetails(value, ctx, path) {
|
|
662
765
|
const v = asRecord(value);
|
|
663
766
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
767
|
+
ctx.check(isString(v.org_id), `${path}.org_id`, "string", v.org_id);
|
|
664
768
|
ctx.check(
|
|
665
769
|
isString(v.token_address),
|
|
666
770
|
`${path}.token_address`,
|
|
@@ -736,6 +840,9 @@ function isSecurityDetails(value, ctx, path) {
|
|
|
736
840
|
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
737
841
|
}
|
|
738
842
|
isNetworkDetails(v.network, ctx, `${path}.network`);
|
|
843
|
+
if (v.compliance_factory !== null && v.compliance_factory !== void 0) {
|
|
844
|
+
isComplianceFactoryDetails(v.compliance_factory, ctx, `${path}.compliance_factory`);
|
|
845
|
+
}
|
|
739
846
|
if (v.claim_topics !== null && v.claim_topics !== void 0) {
|
|
740
847
|
const topicsOk = ctx.check(
|
|
741
848
|
Array.isArray(v.claim_topics),
|
|
@@ -785,6 +892,18 @@ function isSecurityDetails(value, ctx, path) {
|
|
|
785
892
|
"string | null",
|
|
786
893
|
v.trex_trusted_issuers_registry_address
|
|
787
894
|
);
|
|
895
|
+
ctx.check(
|
|
896
|
+
isNullableString(v.asset_category),
|
|
897
|
+
`${path}.asset_category`,
|
|
898
|
+
"string | null",
|
|
899
|
+
v.asset_category
|
|
900
|
+
);
|
|
901
|
+
ctx.check(
|
|
902
|
+
typeof v.apy === "number" || v.apy === null,
|
|
903
|
+
`${path}.apy`,
|
|
904
|
+
"number | null",
|
|
905
|
+
v.apy
|
|
906
|
+
);
|
|
788
907
|
return true;
|
|
789
908
|
}
|
|
790
909
|
function buildValidationError(value, failures) {
|
|
@@ -856,6 +975,84 @@ function validateSdkNetworksResponse(value) {
|
|
|
856
975
|
}
|
|
857
976
|
return value;
|
|
858
977
|
}
|
|
978
|
+
function validateSdkComplianceFactoriesResponse(value) {
|
|
979
|
+
const ctx = new ValidationContext();
|
|
980
|
+
ctx.check(isRecord(value), "<root>", "object", value);
|
|
981
|
+
if (isRecord(value)) {
|
|
982
|
+
ctx.check(
|
|
983
|
+
isFiniteNumber(value.count),
|
|
984
|
+
"<root>.count",
|
|
985
|
+
"finite number",
|
|
986
|
+
value.count
|
|
987
|
+
);
|
|
988
|
+
const dataOk = ctx.check(
|
|
989
|
+
isRecord(value.data),
|
|
990
|
+
"<root>.data",
|
|
991
|
+
"object",
|
|
992
|
+
value.data
|
|
993
|
+
);
|
|
994
|
+
if (dataOk) {
|
|
995
|
+
for (const [key, factory] of Object.entries(value.data)) {
|
|
996
|
+
isComplianceFactoryDetails(factory, ctx, `<root>.data["${key}"]`);
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
}
|
|
1000
|
+
if (ctx.failures.length > 0) {
|
|
1001
|
+
throw buildValidationError(value, ctx.failures);
|
|
1002
|
+
}
|
|
1003
|
+
return value;
|
|
1004
|
+
}
|
|
1005
|
+
function isStablecoin(value, ctx, path) {
|
|
1006
|
+
const v = asRecord(value);
|
|
1007
|
+
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
1008
|
+
ctx.check(isString(v.symbol), `${path}.symbol`, "string", v.symbol);
|
|
1009
|
+
ctx.check(isString(v.name), `${path}.name`, "string", v.name);
|
|
1010
|
+
ctx.check(
|
|
1011
|
+
isFiniteNumber(v.decimals),
|
|
1012
|
+
`${path}.decimals`,
|
|
1013
|
+
"finite number",
|
|
1014
|
+
v.decimals
|
|
1015
|
+
);
|
|
1016
|
+
const addressesOk = ctx.check(
|
|
1017
|
+
isRecord(v.addresses),
|
|
1018
|
+
`${path}.addresses`,
|
|
1019
|
+
"object",
|
|
1020
|
+
v.addresses
|
|
1021
|
+
);
|
|
1022
|
+
if (addressesOk) {
|
|
1023
|
+
for (const [key, addr] of Object.entries(v.addresses)) {
|
|
1024
|
+
ctx.check(isString(addr), `${path}.addresses["${key}"]`, "string", addr);
|
|
1025
|
+
}
|
|
1026
|
+
}
|
|
1027
|
+
return true;
|
|
1028
|
+
}
|
|
1029
|
+
function validateSdkStablecoinsResponse(value) {
|
|
1030
|
+
const ctx = new ValidationContext();
|
|
1031
|
+
ctx.check(isRecord(value), "<root>", "object", value);
|
|
1032
|
+
if (isRecord(value)) {
|
|
1033
|
+
ctx.check(
|
|
1034
|
+
isFiniteNumber(value.count),
|
|
1035
|
+
"<root>.count",
|
|
1036
|
+
"finite number",
|
|
1037
|
+
value.count
|
|
1038
|
+
);
|
|
1039
|
+
const dataOk = ctx.check(
|
|
1040
|
+
isRecord(value.data),
|
|
1041
|
+
"<root>.data",
|
|
1042
|
+
"object",
|
|
1043
|
+
value.data
|
|
1044
|
+
);
|
|
1045
|
+
if (dataOk) {
|
|
1046
|
+
for (const [key, stablecoin] of Object.entries(value.data)) {
|
|
1047
|
+
isStablecoin(stablecoin, ctx, `<root>.data["${key}"]`);
|
|
1048
|
+
}
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
if (ctx.failures.length > 0) {
|
|
1052
|
+
throw buildValidationError(value, ctx.failures);
|
|
1053
|
+
}
|
|
1054
|
+
return value;
|
|
1055
|
+
}
|
|
859
1056
|
function validateSdkKycTiersResponse(value) {
|
|
860
1057
|
const ctx = new ValidationContext();
|
|
861
1058
|
ctx.check(isRecord(value), "<root>", "object", value);
|
|
@@ -918,6 +1115,20 @@ function createClient(config) {
|
|
|
918
1115
|
getNetworks() {
|
|
919
1116
|
return requestJson(resolved, "/sdk/networks", validateSdkNetworksResponse);
|
|
920
1117
|
},
|
|
1118
|
+
getComplianceFactories() {
|
|
1119
|
+
return requestJson(
|
|
1120
|
+
resolved,
|
|
1121
|
+
"/sdk/compliance-factories",
|
|
1122
|
+
validateSdkComplianceFactoriesResponse
|
|
1123
|
+
);
|
|
1124
|
+
},
|
|
1125
|
+
getStablecoins() {
|
|
1126
|
+
return requestJson(
|
|
1127
|
+
resolved,
|
|
1128
|
+
"/sdk/stablecoins",
|
|
1129
|
+
validateSdkStablecoinsResponse
|
|
1130
|
+
);
|
|
1131
|
+
},
|
|
921
1132
|
getKycTiers() {
|
|
922
1133
|
return requestJson(resolved, "/sdk/kyc_tiers", validateSdkKycTiersResponse);
|
|
923
1134
|
}
|
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 KycTier,\n KycTierLimits,\n KycTierVerification,\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkClaimTopic,\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 KycTier,\n KycTierLimits,\n KycTierVerification,\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 isClaimTopic(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is import(\"./types\").SdkClaimTopic {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.value),\n `${path}.value`,\n \"finite number\",\n v!.value,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.label), `${path}.label`, \"string\", v!.label);\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 isKycTierLimits(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierLimits {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.daily_investment_limit_usd),\n `${path}.daily_investment_limit_usd`,\n \"finite number\",\n v!.daily_investment_limit_usd,\n );\n ctx.check(\n isFiniteNumber(v!.monthly_investment_limit_usd),\n `${path}.monthly_investment_limit_usd`,\n \"finite number\",\n v!.monthly_investment_limit_usd,\n );\n return true;\n}\n\nfunction isKycTierVerification(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierVerification {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isBoolean(v!.identity_verified),\n `${path}.identity_verified`,\n \"boolean\",\n v!.identity_verified,\n );\n ctx.check(\n isBoolean(v!.liveness_verified),\n `${path}.liveness_verified`,\n \"boolean\",\n v!.liveness_verified,\n );\n ctx.check(\n isBoolean(v!.aml_verified),\n `${path}.aml_verified`,\n \"boolean\",\n v!.aml_verified,\n );\n ctx.check(\n isBoolean(v!.pep_check),\n `${path}.pep_check`,\n \"boolean\",\n v!.pep_check,\n );\n ctx.check(\n isBoolean(v!.address_verified),\n `${path}.address_verified`,\n \"boolean\",\n v!.address_verified,\n );\n ctx.check(\n isBoolean(v!.tax_verified),\n `${path}.tax_verified`,\n \"boolean\",\n v!.tax_verified,\n );\n ctx.check(\n isBoolean(v!.source_of_funds_verified),\n `${path}.source_of_funds_verified`,\n \"boolean\",\n v!.source_of_funds_verified,\n );\n ctx.check(\n isBoolean(v!.business_verification),\n `${path}.business_verification`,\n \"boolean\",\n v!.business_verification,\n );\n return true;\n}\n\nfunction isKycTier(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTier {\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(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.claim_id),\n `${path}.claim_id`,\n \"finite number\",\n v!.claim_id,\n );\n isKycTierLimits(v!.limits, ctx, `${path}.limits`);\n isKycTierVerification(v!.verification, ctx, `${path}.verification`);\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!.claim_topics !== null && v!.claim_topics !== undefined) {\n const topicsOk = ctx.check(\n Array.isArray(v!.claim_topics),\n `${path}.claim_topics`,\n \"array\",\n v!.claim_topics,\n );\n if (topicsOk) {\n (v!.claim_topics as unknown[]).forEach((topic, i) =>\n isClaimTopic(topic, ctx, `${path}.claim_topics[${i}]`),\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 ctx.check(\n isNullableString(v!.trex_identity_registry_address),\n `${path}.trex_identity_registry_address`,\n \"string | null\",\n v!.trex_identity_registry_address,\n );\n ctx.check(\n isNullableString(v!.claim_topics_registry_address),\n `${path}.claim_topics_registry_address`,\n \"string | null\",\n v!.claim_topics_registry_address,\n );\n ctx.check(\n isNullableString(v!.trex_trusted_issuers_registry_address),\n `${path}.trex_trusted_issuers_registry_address`,\n \"string | null\",\n v!.trex_trusted_issuers_registry_address,\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\nexport function validateSdkNetworksResponse(value: unknown): import(\"./types\").SdkNetworksResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, network] of Object.entries(value.data as Record<string, unknown>)) {\n isNetworkDetails(network, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkNetworksResponse;\n}\n\nexport function validateSdkKycTiersResponse(value: unknown): import(\"./types\").SdkKycTiersResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, tier] of Object.entries(value.data as Record<string, unknown>)) {\n isKycTier(tier, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkKycTiersResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n validateSdkKycTiersResponse,\n validateSdkNetworksResponse,\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 getNetworks(): Promise<SdkNetworksResponse> {\n return requestJson(resolved, \"/sdk/networks\", validateSdkNetworksResponse);\n },\n\n getKycTiers(): Promise<SdkKycTiersResponse> {\n return requestJson(resolved, \"/sdk/kyc_tiers\", validateSdkKycTiersResponse);\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 ComplianceFactoryDetails,\n IssuanceStatus,\n KycTier,\n KycTierLimits,\n KycTierVerification,\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkComplianceFactoriesResponse,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkStablecoin,\n SdkStablecoinsResponse,\n SdkClaimTopic,\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 ComplianceFactoryDetails,\n KycTier,\n KycTierLimits,\n KycTierVerification,\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkStablecoin,\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 isClaimTopic(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is import(\"./types\").SdkClaimTopic {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.value),\n `${path}.value`,\n \"finite number\",\n v!.value,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.label), `${path}.label`, \"string\", v!.label);\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 isKycTierLimits(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierLimits {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.daily_investment_limit_usd),\n `${path}.daily_investment_limit_usd`,\n \"finite number\",\n v!.daily_investment_limit_usd,\n );\n ctx.check(\n isFiniteNumber(v!.monthly_investment_limit_usd),\n `${path}.monthly_investment_limit_usd`,\n \"finite number\",\n v!.monthly_investment_limit_usd,\n );\n return true;\n}\n\nfunction isKycTierVerification(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierVerification {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isBoolean(v!.identity_verified),\n `${path}.identity_verified`,\n \"boolean\",\n v!.identity_verified,\n );\n ctx.check(\n isBoolean(v!.liveness_verified),\n `${path}.liveness_verified`,\n \"boolean\",\n v!.liveness_verified,\n );\n ctx.check(\n isBoolean(v!.aml_verified),\n `${path}.aml_verified`,\n \"boolean\",\n v!.aml_verified,\n );\n ctx.check(\n isBoolean(v!.pep_check),\n `${path}.pep_check`,\n \"boolean\",\n v!.pep_check,\n );\n ctx.check(\n isBoolean(v!.address_verified),\n `${path}.address_verified`,\n \"boolean\",\n v!.address_verified,\n );\n ctx.check(\n isBoolean(v!.tax_verified),\n `${path}.tax_verified`,\n \"boolean\",\n v!.tax_verified,\n );\n ctx.check(\n isBoolean(v!.source_of_funds_verified),\n `${path}.source_of_funds_verified`,\n \"boolean\",\n v!.source_of_funds_verified,\n );\n ctx.check(\n isBoolean(v!.business_verification),\n `${path}.business_verification`,\n \"boolean\",\n v!.business_verification,\n );\n return true;\n}\n\nfunction isKycTier(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTier {\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(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.claim_id),\n `${path}.claim_id`,\n \"finite number\",\n v!.claim_id,\n );\n isKycTierLimits(v!.limits, ctx, `${path}.limits`);\n isKycTierVerification(v!.verification, ctx, `${path}.verification`);\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 isComplianceFactoryDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is ComplianceFactoryDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.deployer), `${path}.deployer`, \"string\", v!.deployer);\n ctx.check(isString(v!.salt), `${path}.salt`, \"string\", v!.salt);\n ctx.check(isString(v!.timestamp), `${path}.timestamp`, \"string\", v!.timestamp);\n ctx.check(\n isString(v!.identity_implementation),\n `${path}.identity_implementation`,\n \"string\",\n v!.identity_implementation,\n );\n ctx.check(\n isString(v!.implementation_authority),\n `${path}.implementation_authority`,\n \"string\",\n v!.implementation_authority,\n );\n ctx.check(isString(v!.id_factory), `${path}.id_factory`, \"string\", v!.id_factory);\n ctx.check(isString(v!.gateway), `${path}.gateway`, \"string\", v!.gateway);\n ctx.check(\n isString(v!.trex_implementation_authority),\n `${path}.trex_implementation_authority`,\n \"string\",\n v!.trex_implementation_authority,\n );\n ctx.check(\n isString(v!.erc3643_token_impl),\n `${path}.erc3643_token_impl`,\n \"string\",\n v!.erc3643_token_impl,\n );\n ctx.check(\n isString(v!.erc3643_modular_compliance_impl),\n `${path}.erc3643_modular_compliance_impl`,\n \"string\",\n v!.erc3643_modular_compliance_impl,\n );\n ctx.check(\n isString(v!.erc3643_identity_registry_storage),\n `${path}.erc3643_identity_registry_storage`,\n \"string\",\n v!.erc3643_identity_registry_storage,\n );\n ctx.check(\n isString(v!.erc3643_claim_topics_registry),\n `${path}.erc3643_claim_topics_registry`,\n \"string\",\n v!.erc3643_claim_topics_registry,\n );\n ctx.check(\n isString(v!.erc3643_trusted_issuers_registry),\n `${path}.erc3643_trusted_issuers_registry`,\n \"string\",\n v!.erc3643_trusted_issuers_registry,\n );\n ctx.check(\n isString(v!.erc3643_identity_registry),\n `${path}.erc3643_identity_registry`,\n \"string\",\n v!.erc3643_identity_registry,\n );\n ctx.check(isString(v!.claim_issuer), `${path}.claim_issuer`, \"string\", v!.claim_issuer);\n ctx.check(\n isString(v!.claim_issuer_management_key),\n `${path}.claim_issuer_management_key`,\n \"string\",\n v!.claim_issuer_management_key,\n );\n ctx.check(\n isString(v!.claim_signer_address),\n `${path}.claim_signer_address`,\n \"string\",\n v!.claim_signer_address,\n );\n ctx.check(\n isString(v!.token_implementation),\n `${path}.token_implementation`,\n \"string\",\n v!.token_implementation,\n );\n ctx.check(\n isString(v!.modular_compliance_implementation),\n `${path}.modular_compliance_implementation`,\n \"string\",\n v!.modular_compliance_implementation,\n );\n ctx.check(\n isString(v!.trex_factory_implementation_authority),\n `${path}.trex_factory_implementation_authority`,\n \"string\",\n v!.trex_factory_implementation_authority,\n );\n ctx.check(isString(v!.trex_factory), `${path}.trex_factory`, \"string\", v!.trex_factory);\n ctx.check(isString(v!.trex_gateway), `${path}.trex_gateway`, \"string\", v!.trex_gateway);\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!.visibility),\n `${path}.visibility`,\n \"string | null\",\n v!.visibility,\n );\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(isString(v!.org_id), `${path}.org_id`, \"string\", v!.org_id);\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!.compliance_factory !== null && v!.compliance_factory !== undefined) {\n isComplianceFactoryDetails(v!.compliance_factory, ctx, `${path}.compliance_factory`);\n }\n\n if (v!.claim_topics !== null && v!.claim_topics !== undefined) {\n const topicsOk = ctx.check(\n Array.isArray(v!.claim_topics),\n `${path}.claim_topics`,\n \"array\",\n v!.claim_topics,\n );\n if (topicsOk) {\n (v!.claim_topics as unknown[]).forEach((topic, i) =>\n isClaimTopic(topic, ctx, `${path}.claim_topics[${i}]`),\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 ctx.check(\n isNullableString(v!.trex_identity_registry_address),\n `${path}.trex_identity_registry_address`,\n \"string | null\",\n v!.trex_identity_registry_address,\n );\n ctx.check(\n isNullableString(v!.claim_topics_registry_address),\n `${path}.claim_topics_registry_address`,\n \"string | null\",\n v!.claim_topics_registry_address,\n );\n ctx.check(\n isNullableString(v!.trex_trusted_issuers_registry_address),\n `${path}.trex_trusted_issuers_registry_address`,\n \"string | null\",\n v!.trex_trusted_issuers_registry_address,\n );\n\n ctx.check(\n isNullableString(v!.asset_category),\n `${path}.asset_category`,\n \"string | null\",\n v!.asset_category,\n );\n ctx.check(\n typeof v!.apy === \"number\" || v!.apy === null,\n `${path}.apy`,\n \"number | null\",\n v!.apy,\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\nexport function validateSdkNetworksResponse(value: unknown): import(\"./types\").SdkNetworksResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, network] of Object.entries(value.data as Record<string, unknown>)) {\n isNetworkDetails(network, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkNetworksResponse;\n}\n\nexport function validateSdkComplianceFactoriesResponse(\n value: unknown,\n): import(\"./types\").SdkComplianceFactoriesResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, factory] of Object.entries(value.data as Record<string, unknown>)) {\n isComplianceFactoryDetails(factory, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkComplianceFactoriesResponse;\n}\n\nfunction isStablecoin(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkStablecoin {\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 const addressesOk = ctx.check(\n isRecord(v!.addresses),\n `${path}.addresses`,\n \"object\",\n v!.addresses,\n );\n if (addressesOk) {\n for (const [key, addr] of Object.entries(v!.addresses as Record<string, unknown>)) {\n ctx.check(isString(addr), `${path}.addresses[\"${key}\"]`, \"string\", addr);\n }\n }\n return true;\n}\n\nexport function validateSdkStablecoinsResponse(\n value: unknown,\n): import(\"./types\").SdkStablecoinsResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, stablecoin] of Object.entries(value.data as Record<string, unknown>)) {\n isStablecoin(stablecoin, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkStablecoinsResponse;\n}\n\nexport function validateSdkKycTiersResponse(value: unknown): import(\"./types\").SdkKycTiersResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, tier] of Object.entries(value.data as Record<string, unknown>)) {\n isKycTier(tier, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkKycTiersResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkComplianceFactoriesResponse,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SdkStablecoinsResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n validateSdkComplianceFactoriesResponse,\n validateSdkKycTiersResponse,\n validateSdkNetworksResponse,\n validateSdkStablecoinsResponse,\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 getNetworks(): Promise<SdkNetworksResponse> {\n return requestJson(resolved, \"/sdk/networks\", validateSdkNetworksResponse);\n },\n\n getComplianceFactories(): Promise<SdkComplianceFactoriesResponse> {\n return requestJson(\n resolved,\n \"/sdk/compliance-factories\",\n validateSdkComplianceFactoriesResponse,\n );\n },\n\n getStablecoins(): Promise<SdkStablecoinsResponse> {\n return requestJson(\n resolved,\n \"/sdk/stablecoins\",\n validateSdkStablecoinsResponse,\n );\n },\n\n getKycTiers(): Promise<SdkKycTiersResponse> {\n return requestJson(resolved, \"/sdk/kyc_tiers\", validateSdkKycTiersResponse);\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;;;ACjIA,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,aACP,OACA,KACA,MAC0C;AAC1C,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,eAAe,EAAG,KAAK;AAAA,IACvB,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,KAAK,GAAG,GAAG,IAAI,UAAU,UAAU,EAAG,KAAK;AACjE,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,gBACP,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,eAAe,EAAG,0BAA0B;AAAA,IAC5C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,eAAe,EAAG,4BAA4B;AAAA,IAC9C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,sBACP,OACA,KACA,MAC8B;AAC9B,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI;AAAA,IACF,UAAU,EAAG,iBAAiB;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,iBAAiB;AAAA,IAC9B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,YAAY;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,SAAS;AAAA,IACtB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,gBAAgB;AAAA,IAC7B,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,YAAY;AAAA,IACzB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,wBAAwB;AAAA,IACrC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,UAAU,EAAG,qBAAqB;AAAA,IAClC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,SAAO;AACT;AAEA,SAAS,UACP,OACA,KACA,MACkB;AAClB,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,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,kBAAgB,EAAG,QAAQ,KAAK,GAAG,IAAI,SAAS;AAChD,wBAAsB,EAAG,cAAc,KAAK,GAAG,IAAI,eAAe;AAClE,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,2BACP,OACA,KACA,MACmC;AACnC,QAAM,IAAI,SAAS,KAAK;AACxB,MAAI,CAAC,IAAI,MAAM,MAAM,QAAW,MAAM,UAAU,KAAK,EAAG,QAAO;AAC/D,MAAI,MAAM,SAAS,EAAG,QAAQ,GAAG,GAAG,IAAI,aAAa,UAAU,EAAG,QAAQ;AAC1E,MAAI,MAAM,SAAS,EAAG,IAAI,GAAG,GAAG,IAAI,SAAS,UAAU,EAAG,IAAI;AAC9D,MAAI,MAAM,SAAS,EAAG,SAAS,GAAG,GAAG,IAAI,cAAc,UAAU,EAAG,SAAS;AAC7E,MAAI;AAAA,IACF,SAAS,EAAG,uBAAuB;AAAA,IACnC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,wBAAwB;AAAA,IACpC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,MAAM,SAAS,EAAG,UAAU,GAAG,GAAG,IAAI,eAAe,UAAU,EAAG,UAAU;AAChF,MAAI,MAAM,SAAS,EAAG,OAAO,GAAG,GAAG,IAAI,YAAY,UAAU,EAAG,OAAO;AACvE,MAAI;AAAA,IACF,SAAS,EAAG,6BAA6B;AAAA,IACzC,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,+BAA+B;AAAA,IAC3C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,iCAAiC;AAAA,IAC7C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,6BAA6B;AAAA,IACzC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,gCAAgC;AAAA,IAC5C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,yBAAyB;AAAA,IACrC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,MAAM,SAAS,EAAG,YAAY,GAAG,GAAG,IAAI,iBAAiB,UAAU,EAAG,YAAY;AACtF,MAAI;AAAA,IACF,SAAS,EAAG,2BAA2B;AAAA,IACvC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,oBAAoB;AAAA,IAChC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,oBAAoB;AAAA,IAChC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,iCAAiC;AAAA,IAC7C,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,SAAS,EAAG,qCAAqC;AAAA,IACjD,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,MAAM,SAAS,EAAG,YAAY,GAAG,GAAG,IAAI,iBAAiB,UAAU,EAAG,YAAY;AACtF,MAAI,MAAM,SAAS,EAAG,YAAY,GAAG,GAAG,IAAI,iBAAiB,UAAU,EAAG,YAAY;AACtF,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,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,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,MAAM,SAAS,EAAG,MAAM,GAAG,GAAG,IAAI,WAAW,UAAU,EAAG,MAAM;AACpE,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,uBAAuB,QAAQ,EAAG,uBAAuB,QAAW;AACzE,+BAA2B,EAAG,oBAAoB,KAAK,GAAG,IAAI,qBAAqB;AAAA,EACrF;AAEA,MAAI,EAAG,iBAAiB,QAAQ,EAAG,iBAAiB,QAAW;AAC7D,UAAM,WAAW,IAAI;AAAA,MACnB,MAAM,QAAQ,EAAG,YAAY;AAAA,MAC7B,GAAG,IAAI;AAAA,MACP;AAAA,MACA,EAAG;AAAA,IACL;AACA,QAAI,UAAU;AACZ,MAAC,EAAG,aAA2B;AAAA,QAAQ,CAAC,OAAO,MAC7C,aAAa,OAAO,KAAK,GAAG,IAAI,iBAAiB,CAAC,GAAG;AAAA,MACvD;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,MAAI;AAAA,IACF,iBAAiB,EAAG,8BAA8B;AAAA,IAClD,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,6BAA6B;AAAA,IACjD,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,iBAAiB,EAAG,qCAAqC;AAAA,IACzD,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AAEA,MAAI;AAAA,IACF,iBAAiB,EAAG,cAAc;AAAA,IAClC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI;AAAA,IACF,OAAO,EAAG,QAAQ,YAAY,EAAG,QAAQ;AAAA,IACzC,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;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;AAEO,SAAS,4BAA4B,OAAuD;AACjG,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI;AAAA,MACF,eAAe,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,SAAS,MAAM,IAAI;AAAA,MACnB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,QAAQ;AACV,iBAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,MAAM,IAA+B,GAAG;AAClF,yBAAiB,SAAS,KAAK,gBAAgB,GAAG,IAAI;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;AAEO,SAAS,uCACd,OACkD;AAClD,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI;AAAA,MACF,eAAe,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,SAAS,MAAM,IAAI;AAAA,MACnB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,QAAQ;AACV,iBAAW,CAAC,KAAK,OAAO,KAAK,OAAO,QAAQ,MAAM,IAA+B,GAAG;AAClF,mCAA2B,SAAS,KAAK,gBAAgB,GAAG,IAAI;AAAA,MAClE;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,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,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,QAAM,cAAc,IAAI;AAAA,IACtB,SAAS,EAAG,SAAS;AAAA,IACrB,GAAG,IAAI;AAAA,IACP;AAAA,IACA,EAAG;AAAA,EACL;AACA,MAAI,aAAa;AACf,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,EAAG,SAAoC,GAAG;AACjF,UAAI,MAAM,SAAS,IAAI,GAAG,GAAG,IAAI,eAAe,GAAG,MAAM,UAAU,IAAI;AAAA,IACzE;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,+BACd,OAC0C;AAC1C,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI;AAAA,MACF,eAAe,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,SAAS,MAAM,IAAI;AAAA,MACnB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,QAAQ;AACV,iBAAW,CAAC,KAAK,UAAU,KAAK,OAAO,QAAQ,MAAM,IAA+B,GAAG;AACrF,qBAAa,YAAY,KAAK,gBAAgB,GAAG,IAAI;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;AAEO,SAAS,4BAA4B,OAAuD;AACjG,QAAM,MAAM,IAAI,kBAAkB;AAElC,MAAI,MAAM,SAAS,KAAK,GAAG,UAAU,UAAU,KAAK;AACpD,MAAI,SAAS,KAAK,GAAG;AACnB,QAAI;AAAA,MACF,eAAe,MAAM,KAAK;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,SAAS,MAAM,IAAI;AAAA,MACnB;AAAA,MACA;AAAA,MACA,MAAM;AAAA,IACR;AACA,QAAI,QAAQ;AACV,iBAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,MAAM,IAA+B,GAAG;AAC/E,kBAAU,MAAM,KAAK,gBAAgB,GAAG,IAAI;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AAEA,MAAI,IAAI,SAAS,SAAS,GAAG;AAC3B,UAAM,qBAAqB,OAAO,IAAI,QAAQ;AAAA,EAChD;AAEA,SAAO;AACT;;;ACn/BO,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,IAEA,cAA4C;AAC1C,aAAO,YAAY,UAAU,iBAAiB,2BAA2B;AAAA,IAC3E;AAAA,IAEA,yBAAkE;AAChE,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,iBAAkD;AAChD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEA,cAA4C;AAC1C,aAAO,YAAY,UAAU,kBAAkB,2BAA2B;AAAA,IAC5E;AAAA,EACF;AACF;","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -44,8 +44,33 @@ interface SdkClaimTopic {
|
|
|
44
44
|
name: string;
|
|
45
45
|
label: string;
|
|
46
46
|
}
|
|
47
|
+
interface ComplianceFactoryDetails {
|
|
48
|
+
deployer: string;
|
|
49
|
+
salt: string;
|
|
50
|
+
timestamp: string;
|
|
51
|
+
identity_implementation: string;
|
|
52
|
+
implementation_authority: string;
|
|
53
|
+
id_factory: string;
|
|
54
|
+
gateway: string;
|
|
55
|
+
trex_implementation_authority: string;
|
|
56
|
+
erc3643_token_impl: string;
|
|
57
|
+
erc3643_modular_compliance_impl: string;
|
|
58
|
+
erc3643_identity_registry_storage: string;
|
|
59
|
+
erc3643_claim_topics_registry: string;
|
|
60
|
+
erc3643_trusted_issuers_registry: string;
|
|
61
|
+
erc3643_identity_registry: string;
|
|
62
|
+
claim_issuer: string;
|
|
63
|
+
claim_issuer_management_key: string;
|
|
64
|
+
claim_signer_address: string;
|
|
65
|
+
token_implementation: string;
|
|
66
|
+
modular_compliance_implementation: string;
|
|
67
|
+
trex_factory_implementation_authority: string;
|
|
68
|
+
trex_factory: string;
|
|
69
|
+
trex_gateway: string;
|
|
70
|
+
}
|
|
47
71
|
/** Full security token details. Sensitive/internal fields are excluded. */
|
|
48
72
|
interface SdkSecurityDetails {
|
|
73
|
+
org_id: string;
|
|
49
74
|
token_address: string;
|
|
50
75
|
token_name: string;
|
|
51
76
|
token_symbol: string;
|
|
@@ -60,12 +85,15 @@ interface SdkSecurityDetails {
|
|
|
60
85
|
partners: SdkTokenPartner[] | null;
|
|
61
86
|
rule_engine: SdkRuleEngineSummary | null;
|
|
62
87
|
network: NetworkDetails;
|
|
88
|
+
compliance_factory: ComplianceFactoryDetails | null;
|
|
63
89
|
created_at: string | null;
|
|
64
90
|
claim_topics: SdkClaimTopic[] | null;
|
|
65
91
|
trex_issuers: string[] | null;
|
|
66
92
|
trex_identity_registry_address: string | null;
|
|
67
93
|
claim_topics_registry_address: string | null;
|
|
68
94
|
trex_trusted_issuers_registry_address: string | null;
|
|
95
|
+
asset_category: string | null;
|
|
96
|
+
apy: number | null;
|
|
69
97
|
}
|
|
70
98
|
interface SdkIssuerSummary {
|
|
71
99
|
id: string;
|
|
@@ -99,6 +127,7 @@ interface SdkBookSummary {
|
|
|
99
127
|
initial_nav: string;
|
|
100
128
|
fund_config: SdkFundConfig;
|
|
101
129
|
status: IssuanceStatus;
|
|
130
|
+
visibility: string | null;
|
|
102
131
|
created_at: string | null;
|
|
103
132
|
}
|
|
104
133
|
interface SdkAssetsResponse {
|
|
@@ -112,6 +141,20 @@ interface SdkNetworksResponse {
|
|
|
112
141
|
data: Record<string, NetworkDetails>;
|
|
113
142
|
count: number;
|
|
114
143
|
}
|
|
144
|
+
interface SdkComplianceFactoriesResponse {
|
|
145
|
+
data: Record<string, ComplianceFactoryDetails>;
|
|
146
|
+
count: number;
|
|
147
|
+
}
|
|
148
|
+
interface SdkStablecoin {
|
|
149
|
+
symbol: string;
|
|
150
|
+
name: string;
|
|
151
|
+
decimals: number;
|
|
152
|
+
addresses: Record<string, string>;
|
|
153
|
+
}
|
|
154
|
+
interface SdkStablecoinsResponse {
|
|
155
|
+
data: Record<string, SdkStablecoin>;
|
|
156
|
+
count: number;
|
|
157
|
+
}
|
|
115
158
|
interface KycTierLimits {
|
|
116
159
|
daily_investment_limit_usd: number;
|
|
117
160
|
monthly_investment_limit_usd: number;
|
|
@@ -142,6 +185,8 @@ interface SereelSdkClient {
|
|
|
142
185
|
getAssetByTokenAddress(tokenAddress: string): Promise<SdkAssetResponse>;
|
|
143
186
|
getAssetsByIssuer(issuerId: string): Promise<SdkAssetsResponse>;
|
|
144
187
|
getNetworks(): Promise<SdkNetworksResponse>;
|
|
188
|
+
getComplianceFactories(): Promise<SdkComplianceFactoriesResponse>;
|
|
189
|
+
getStablecoins(): Promise<SdkStablecoinsResponse>;
|
|
145
190
|
getKycTiers(): Promise<SdkKycTiersResponse>;
|
|
146
191
|
}
|
|
147
192
|
|
|
@@ -183,4 +228,4 @@ declare class TimeoutError extends SereelSdkError {
|
|
|
183
228
|
declare class MalformedResponseError extends SereelSdkError {
|
|
184
229
|
}
|
|
185
230
|
|
|
186
|
-
export { type ClientConfig, ENVIRONMENT_BASE_URLS, ForbiddenError, HttpError, InvalidConfigurationError, type IssuanceStatus, type KycTier, type KycTierLimits, type KycTierVerification, MalformedResponseError, type NativeCurrency, type NetworkDetails, NetworkError, NotFoundError, RateLimitError, type SdkAssetResponse, type SdkAssetsResponse, type SdkBookSummary, type SdkClaimTopic, type SdkFundConfig, type SdkIssuerSummary, type SdkKycTiersResponse, type SdkNetworksResponse, type SdkRuleEngineSummary, type SdkRuleSummary, type SdkSecurityDetails, type SdkTokenPartner, type SdkTokenProspectus, type SereelEnvironment, type SereelSdkClient, SereelSdkError, ServerError, TimeoutError, UnauthorizedError, createClient, resolveBaseUrl };
|
|
231
|
+
export { type ClientConfig, type ComplianceFactoryDetails, ENVIRONMENT_BASE_URLS, ForbiddenError, HttpError, InvalidConfigurationError, type IssuanceStatus, type KycTier, type KycTierLimits, type KycTierVerification, MalformedResponseError, type NativeCurrency, type NetworkDetails, NetworkError, NotFoundError, RateLimitError, type SdkAssetResponse, type SdkAssetsResponse, type SdkBookSummary, type SdkClaimTopic, type SdkComplianceFactoriesResponse, type SdkFundConfig, type SdkIssuerSummary, type SdkKycTiersResponse, type SdkNetworksResponse, type SdkRuleEngineSummary, type SdkRuleSummary, type SdkSecurityDetails, type SdkStablecoin, type SdkStablecoinsResponse, type SdkTokenPartner, type SdkTokenProspectus, type SereelEnvironment, type SereelSdkClient, SereelSdkError, ServerError, TimeoutError, UnauthorizedError, createClient, resolveBaseUrl };
|
package/dist/index.d.ts
CHANGED
|
@@ -44,8 +44,33 @@ interface SdkClaimTopic {
|
|
|
44
44
|
name: string;
|
|
45
45
|
label: string;
|
|
46
46
|
}
|
|
47
|
+
interface ComplianceFactoryDetails {
|
|
48
|
+
deployer: string;
|
|
49
|
+
salt: string;
|
|
50
|
+
timestamp: string;
|
|
51
|
+
identity_implementation: string;
|
|
52
|
+
implementation_authority: string;
|
|
53
|
+
id_factory: string;
|
|
54
|
+
gateway: string;
|
|
55
|
+
trex_implementation_authority: string;
|
|
56
|
+
erc3643_token_impl: string;
|
|
57
|
+
erc3643_modular_compliance_impl: string;
|
|
58
|
+
erc3643_identity_registry_storage: string;
|
|
59
|
+
erc3643_claim_topics_registry: string;
|
|
60
|
+
erc3643_trusted_issuers_registry: string;
|
|
61
|
+
erc3643_identity_registry: string;
|
|
62
|
+
claim_issuer: string;
|
|
63
|
+
claim_issuer_management_key: string;
|
|
64
|
+
claim_signer_address: string;
|
|
65
|
+
token_implementation: string;
|
|
66
|
+
modular_compliance_implementation: string;
|
|
67
|
+
trex_factory_implementation_authority: string;
|
|
68
|
+
trex_factory: string;
|
|
69
|
+
trex_gateway: string;
|
|
70
|
+
}
|
|
47
71
|
/** Full security token details. Sensitive/internal fields are excluded. */
|
|
48
72
|
interface SdkSecurityDetails {
|
|
73
|
+
org_id: string;
|
|
49
74
|
token_address: string;
|
|
50
75
|
token_name: string;
|
|
51
76
|
token_symbol: string;
|
|
@@ -60,12 +85,15 @@ interface SdkSecurityDetails {
|
|
|
60
85
|
partners: SdkTokenPartner[] | null;
|
|
61
86
|
rule_engine: SdkRuleEngineSummary | null;
|
|
62
87
|
network: NetworkDetails;
|
|
88
|
+
compliance_factory: ComplianceFactoryDetails | null;
|
|
63
89
|
created_at: string | null;
|
|
64
90
|
claim_topics: SdkClaimTopic[] | null;
|
|
65
91
|
trex_issuers: string[] | null;
|
|
66
92
|
trex_identity_registry_address: string | null;
|
|
67
93
|
claim_topics_registry_address: string | null;
|
|
68
94
|
trex_trusted_issuers_registry_address: string | null;
|
|
95
|
+
asset_category: string | null;
|
|
96
|
+
apy: number | null;
|
|
69
97
|
}
|
|
70
98
|
interface SdkIssuerSummary {
|
|
71
99
|
id: string;
|
|
@@ -99,6 +127,7 @@ interface SdkBookSummary {
|
|
|
99
127
|
initial_nav: string;
|
|
100
128
|
fund_config: SdkFundConfig;
|
|
101
129
|
status: IssuanceStatus;
|
|
130
|
+
visibility: string | null;
|
|
102
131
|
created_at: string | null;
|
|
103
132
|
}
|
|
104
133
|
interface SdkAssetsResponse {
|
|
@@ -112,6 +141,20 @@ interface SdkNetworksResponse {
|
|
|
112
141
|
data: Record<string, NetworkDetails>;
|
|
113
142
|
count: number;
|
|
114
143
|
}
|
|
144
|
+
interface SdkComplianceFactoriesResponse {
|
|
145
|
+
data: Record<string, ComplianceFactoryDetails>;
|
|
146
|
+
count: number;
|
|
147
|
+
}
|
|
148
|
+
interface SdkStablecoin {
|
|
149
|
+
symbol: string;
|
|
150
|
+
name: string;
|
|
151
|
+
decimals: number;
|
|
152
|
+
addresses: Record<string, string>;
|
|
153
|
+
}
|
|
154
|
+
interface SdkStablecoinsResponse {
|
|
155
|
+
data: Record<string, SdkStablecoin>;
|
|
156
|
+
count: number;
|
|
157
|
+
}
|
|
115
158
|
interface KycTierLimits {
|
|
116
159
|
daily_investment_limit_usd: number;
|
|
117
160
|
monthly_investment_limit_usd: number;
|
|
@@ -142,6 +185,8 @@ interface SereelSdkClient {
|
|
|
142
185
|
getAssetByTokenAddress(tokenAddress: string): Promise<SdkAssetResponse>;
|
|
143
186
|
getAssetsByIssuer(issuerId: string): Promise<SdkAssetsResponse>;
|
|
144
187
|
getNetworks(): Promise<SdkNetworksResponse>;
|
|
188
|
+
getComplianceFactories(): Promise<SdkComplianceFactoriesResponse>;
|
|
189
|
+
getStablecoins(): Promise<SdkStablecoinsResponse>;
|
|
145
190
|
getKycTiers(): Promise<SdkKycTiersResponse>;
|
|
146
191
|
}
|
|
147
192
|
|
|
@@ -183,4 +228,4 @@ declare class TimeoutError extends SereelSdkError {
|
|
|
183
228
|
declare class MalformedResponseError extends SereelSdkError {
|
|
184
229
|
}
|
|
185
230
|
|
|
186
|
-
export { type ClientConfig, ENVIRONMENT_BASE_URLS, ForbiddenError, HttpError, InvalidConfigurationError, type IssuanceStatus, type KycTier, type KycTierLimits, type KycTierVerification, MalformedResponseError, type NativeCurrency, type NetworkDetails, NetworkError, NotFoundError, RateLimitError, type SdkAssetResponse, type SdkAssetsResponse, type SdkBookSummary, type SdkClaimTopic, type SdkFundConfig, type SdkIssuerSummary, type SdkKycTiersResponse, type SdkNetworksResponse, type SdkRuleEngineSummary, type SdkRuleSummary, type SdkSecurityDetails, type SdkTokenPartner, type SdkTokenProspectus, type SereelEnvironment, type SereelSdkClient, SereelSdkError, ServerError, TimeoutError, UnauthorizedError, createClient, resolveBaseUrl };
|
|
231
|
+
export { type ClientConfig, type ComplianceFactoryDetails, ENVIRONMENT_BASE_URLS, ForbiddenError, HttpError, InvalidConfigurationError, type IssuanceStatus, type KycTier, type KycTierLimits, type KycTierVerification, MalformedResponseError, type NativeCurrency, type NetworkDetails, NetworkError, NotFoundError, RateLimitError, type SdkAssetResponse, type SdkAssetsResponse, type SdkBookSummary, type SdkClaimTopic, type SdkComplianceFactoriesResponse, type SdkFundConfig, type SdkIssuerSummary, type SdkKycTiersResponse, type SdkNetworksResponse, type SdkRuleEngineSummary, type SdkRuleSummary, type SdkSecurityDetails, type SdkStablecoin, type SdkStablecoinsResponse, type SdkTokenPartner, type SdkTokenProspectus, type SereelEnvironment, type SereelSdkClient, SereelSdkError, ServerError, TimeoutError, UnauthorizedError, createClient, resolveBaseUrl };
|
package/dist/index.js
CHANGED
|
@@ -478,6 +478,103 @@ function isNetworkDetails(value, ctx, path) {
|
|
|
478
478
|
);
|
|
479
479
|
return true;
|
|
480
480
|
}
|
|
481
|
+
function isComplianceFactoryDetails(value, ctx, path) {
|
|
482
|
+
const v = asRecord(value);
|
|
483
|
+
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
484
|
+
ctx.check(isString(v.deployer), `${path}.deployer`, "string", v.deployer);
|
|
485
|
+
ctx.check(isString(v.salt), `${path}.salt`, "string", v.salt);
|
|
486
|
+
ctx.check(isString(v.timestamp), `${path}.timestamp`, "string", v.timestamp);
|
|
487
|
+
ctx.check(
|
|
488
|
+
isString(v.identity_implementation),
|
|
489
|
+
`${path}.identity_implementation`,
|
|
490
|
+
"string",
|
|
491
|
+
v.identity_implementation
|
|
492
|
+
);
|
|
493
|
+
ctx.check(
|
|
494
|
+
isString(v.implementation_authority),
|
|
495
|
+
`${path}.implementation_authority`,
|
|
496
|
+
"string",
|
|
497
|
+
v.implementation_authority
|
|
498
|
+
);
|
|
499
|
+
ctx.check(isString(v.id_factory), `${path}.id_factory`, "string", v.id_factory);
|
|
500
|
+
ctx.check(isString(v.gateway), `${path}.gateway`, "string", v.gateway);
|
|
501
|
+
ctx.check(
|
|
502
|
+
isString(v.trex_implementation_authority),
|
|
503
|
+
`${path}.trex_implementation_authority`,
|
|
504
|
+
"string",
|
|
505
|
+
v.trex_implementation_authority
|
|
506
|
+
);
|
|
507
|
+
ctx.check(
|
|
508
|
+
isString(v.erc3643_token_impl),
|
|
509
|
+
`${path}.erc3643_token_impl`,
|
|
510
|
+
"string",
|
|
511
|
+
v.erc3643_token_impl
|
|
512
|
+
);
|
|
513
|
+
ctx.check(
|
|
514
|
+
isString(v.erc3643_modular_compliance_impl),
|
|
515
|
+
`${path}.erc3643_modular_compliance_impl`,
|
|
516
|
+
"string",
|
|
517
|
+
v.erc3643_modular_compliance_impl
|
|
518
|
+
);
|
|
519
|
+
ctx.check(
|
|
520
|
+
isString(v.erc3643_identity_registry_storage),
|
|
521
|
+
`${path}.erc3643_identity_registry_storage`,
|
|
522
|
+
"string",
|
|
523
|
+
v.erc3643_identity_registry_storage
|
|
524
|
+
);
|
|
525
|
+
ctx.check(
|
|
526
|
+
isString(v.erc3643_claim_topics_registry),
|
|
527
|
+
`${path}.erc3643_claim_topics_registry`,
|
|
528
|
+
"string",
|
|
529
|
+
v.erc3643_claim_topics_registry
|
|
530
|
+
);
|
|
531
|
+
ctx.check(
|
|
532
|
+
isString(v.erc3643_trusted_issuers_registry),
|
|
533
|
+
`${path}.erc3643_trusted_issuers_registry`,
|
|
534
|
+
"string",
|
|
535
|
+
v.erc3643_trusted_issuers_registry
|
|
536
|
+
);
|
|
537
|
+
ctx.check(
|
|
538
|
+
isString(v.erc3643_identity_registry),
|
|
539
|
+
`${path}.erc3643_identity_registry`,
|
|
540
|
+
"string",
|
|
541
|
+
v.erc3643_identity_registry
|
|
542
|
+
);
|
|
543
|
+
ctx.check(isString(v.claim_issuer), `${path}.claim_issuer`, "string", v.claim_issuer);
|
|
544
|
+
ctx.check(
|
|
545
|
+
isString(v.claim_issuer_management_key),
|
|
546
|
+
`${path}.claim_issuer_management_key`,
|
|
547
|
+
"string",
|
|
548
|
+
v.claim_issuer_management_key
|
|
549
|
+
);
|
|
550
|
+
ctx.check(
|
|
551
|
+
isString(v.claim_signer_address),
|
|
552
|
+
`${path}.claim_signer_address`,
|
|
553
|
+
"string",
|
|
554
|
+
v.claim_signer_address
|
|
555
|
+
);
|
|
556
|
+
ctx.check(
|
|
557
|
+
isString(v.token_implementation),
|
|
558
|
+
`${path}.token_implementation`,
|
|
559
|
+
"string",
|
|
560
|
+
v.token_implementation
|
|
561
|
+
);
|
|
562
|
+
ctx.check(
|
|
563
|
+
isString(v.modular_compliance_implementation),
|
|
564
|
+
`${path}.modular_compliance_implementation`,
|
|
565
|
+
"string",
|
|
566
|
+
v.modular_compliance_implementation
|
|
567
|
+
);
|
|
568
|
+
ctx.check(
|
|
569
|
+
isString(v.trex_factory_implementation_authority),
|
|
570
|
+
`${path}.trex_factory_implementation_authority`,
|
|
571
|
+
"string",
|
|
572
|
+
v.trex_factory_implementation_authority
|
|
573
|
+
);
|
|
574
|
+
ctx.check(isString(v.trex_factory), `${path}.trex_factory`, "string", v.trex_factory);
|
|
575
|
+
ctx.check(isString(v.trex_gateway), `${path}.trex_gateway`, "string", v.trex_gateway);
|
|
576
|
+
return true;
|
|
577
|
+
}
|
|
481
578
|
function isFundConfig(value, ctx, path) {
|
|
482
579
|
const v = asRecord(value);
|
|
483
580
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
@@ -611,6 +708,12 @@ function isBookSummary(value, ctx, path) {
|
|
|
611
708
|
);
|
|
612
709
|
isFundConfig(v.fund_config, ctx, `${path}.fund_config`);
|
|
613
710
|
isIssuanceStatus(v.status, ctx, `${path}.status`);
|
|
711
|
+
ctx.check(
|
|
712
|
+
isNullableString(v.visibility),
|
|
713
|
+
`${path}.visibility`,
|
|
714
|
+
"string | null",
|
|
715
|
+
v.visibility
|
|
716
|
+
);
|
|
614
717
|
ctx.check(
|
|
615
718
|
isNullableString(v.created_at),
|
|
616
719
|
`${path}.created_at`,
|
|
@@ -622,6 +725,7 @@ function isBookSummary(value, ctx, path) {
|
|
|
622
725
|
function isSecurityDetails(value, ctx, path) {
|
|
623
726
|
const v = asRecord(value);
|
|
624
727
|
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
728
|
+
ctx.check(isString(v.org_id), `${path}.org_id`, "string", v.org_id);
|
|
625
729
|
ctx.check(
|
|
626
730
|
isString(v.token_address),
|
|
627
731
|
`${path}.token_address`,
|
|
@@ -697,6 +801,9 @@ function isSecurityDetails(value, ctx, path) {
|
|
|
697
801
|
isRuleEngineSummary(v.rule_engine, ctx, `${path}.rule_engine`);
|
|
698
802
|
}
|
|
699
803
|
isNetworkDetails(v.network, ctx, `${path}.network`);
|
|
804
|
+
if (v.compliance_factory !== null && v.compliance_factory !== void 0) {
|
|
805
|
+
isComplianceFactoryDetails(v.compliance_factory, ctx, `${path}.compliance_factory`);
|
|
806
|
+
}
|
|
700
807
|
if (v.claim_topics !== null && v.claim_topics !== void 0) {
|
|
701
808
|
const topicsOk = ctx.check(
|
|
702
809
|
Array.isArray(v.claim_topics),
|
|
@@ -746,6 +853,18 @@ function isSecurityDetails(value, ctx, path) {
|
|
|
746
853
|
"string | null",
|
|
747
854
|
v.trex_trusted_issuers_registry_address
|
|
748
855
|
);
|
|
856
|
+
ctx.check(
|
|
857
|
+
isNullableString(v.asset_category),
|
|
858
|
+
`${path}.asset_category`,
|
|
859
|
+
"string | null",
|
|
860
|
+
v.asset_category
|
|
861
|
+
);
|
|
862
|
+
ctx.check(
|
|
863
|
+
typeof v.apy === "number" || v.apy === null,
|
|
864
|
+
`${path}.apy`,
|
|
865
|
+
"number | null",
|
|
866
|
+
v.apy
|
|
867
|
+
);
|
|
749
868
|
return true;
|
|
750
869
|
}
|
|
751
870
|
function buildValidationError(value, failures) {
|
|
@@ -817,6 +936,84 @@ function validateSdkNetworksResponse(value) {
|
|
|
817
936
|
}
|
|
818
937
|
return value;
|
|
819
938
|
}
|
|
939
|
+
function validateSdkComplianceFactoriesResponse(value) {
|
|
940
|
+
const ctx = new ValidationContext();
|
|
941
|
+
ctx.check(isRecord(value), "<root>", "object", value);
|
|
942
|
+
if (isRecord(value)) {
|
|
943
|
+
ctx.check(
|
|
944
|
+
isFiniteNumber(value.count),
|
|
945
|
+
"<root>.count",
|
|
946
|
+
"finite number",
|
|
947
|
+
value.count
|
|
948
|
+
);
|
|
949
|
+
const dataOk = ctx.check(
|
|
950
|
+
isRecord(value.data),
|
|
951
|
+
"<root>.data",
|
|
952
|
+
"object",
|
|
953
|
+
value.data
|
|
954
|
+
);
|
|
955
|
+
if (dataOk) {
|
|
956
|
+
for (const [key, factory] of Object.entries(value.data)) {
|
|
957
|
+
isComplianceFactoryDetails(factory, ctx, `<root>.data["${key}"]`);
|
|
958
|
+
}
|
|
959
|
+
}
|
|
960
|
+
}
|
|
961
|
+
if (ctx.failures.length > 0) {
|
|
962
|
+
throw buildValidationError(value, ctx.failures);
|
|
963
|
+
}
|
|
964
|
+
return value;
|
|
965
|
+
}
|
|
966
|
+
function isStablecoin(value, ctx, path) {
|
|
967
|
+
const v = asRecord(value);
|
|
968
|
+
if (!ctx.check(v !== void 0, path, "object", value)) return false;
|
|
969
|
+
ctx.check(isString(v.symbol), `${path}.symbol`, "string", v.symbol);
|
|
970
|
+
ctx.check(isString(v.name), `${path}.name`, "string", v.name);
|
|
971
|
+
ctx.check(
|
|
972
|
+
isFiniteNumber(v.decimals),
|
|
973
|
+
`${path}.decimals`,
|
|
974
|
+
"finite number",
|
|
975
|
+
v.decimals
|
|
976
|
+
);
|
|
977
|
+
const addressesOk = ctx.check(
|
|
978
|
+
isRecord(v.addresses),
|
|
979
|
+
`${path}.addresses`,
|
|
980
|
+
"object",
|
|
981
|
+
v.addresses
|
|
982
|
+
);
|
|
983
|
+
if (addressesOk) {
|
|
984
|
+
for (const [key, addr] of Object.entries(v.addresses)) {
|
|
985
|
+
ctx.check(isString(addr), `${path}.addresses["${key}"]`, "string", addr);
|
|
986
|
+
}
|
|
987
|
+
}
|
|
988
|
+
return true;
|
|
989
|
+
}
|
|
990
|
+
function validateSdkStablecoinsResponse(value) {
|
|
991
|
+
const ctx = new ValidationContext();
|
|
992
|
+
ctx.check(isRecord(value), "<root>", "object", value);
|
|
993
|
+
if (isRecord(value)) {
|
|
994
|
+
ctx.check(
|
|
995
|
+
isFiniteNumber(value.count),
|
|
996
|
+
"<root>.count",
|
|
997
|
+
"finite number",
|
|
998
|
+
value.count
|
|
999
|
+
);
|
|
1000
|
+
const dataOk = ctx.check(
|
|
1001
|
+
isRecord(value.data),
|
|
1002
|
+
"<root>.data",
|
|
1003
|
+
"object",
|
|
1004
|
+
value.data
|
|
1005
|
+
);
|
|
1006
|
+
if (dataOk) {
|
|
1007
|
+
for (const [key, stablecoin] of Object.entries(value.data)) {
|
|
1008
|
+
isStablecoin(stablecoin, ctx, `<root>.data["${key}"]`);
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
}
|
|
1012
|
+
if (ctx.failures.length > 0) {
|
|
1013
|
+
throw buildValidationError(value, ctx.failures);
|
|
1014
|
+
}
|
|
1015
|
+
return value;
|
|
1016
|
+
}
|
|
820
1017
|
function validateSdkKycTiersResponse(value) {
|
|
821
1018
|
const ctx = new ValidationContext();
|
|
822
1019
|
ctx.check(isRecord(value), "<root>", "object", value);
|
|
@@ -879,6 +1076,20 @@ function createClient(config) {
|
|
|
879
1076
|
getNetworks() {
|
|
880
1077
|
return requestJson(resolved, "/sdk/networks", validateSdkNetworksResponse);
|
|
881
1078
|
},
|
|
1079
|
+
getComplianceFactories() {
|
|
1080
|
+
return requestJson(
|
|
1081
|
+
resolved,
|
|
1082
|
+
"/sdk/compliance-factories",
|
|
1083
|
+
validateSdkComplianceFactoriesResponse
|
|
1084
|
+
);
|
|
1085
|
+
},
|
|
1086
|
+
getStablecoins() {
|
|
1087
|
+
return requestJson(
|
|
1088
|
+
resolved,
|
|
1089
|
+
"/sdk/stablecoins",
|
|
1090
|
+
validateSdkStablecoinsResponse
|
|
1091
|
+
);
|
|
1092
|
+
},
|
|
882
1093
|
getKycTiers() {
|
|
883
1094
|
return requestJson(resolved, "/sdk/kyc_tiers", validateSdkKycTiersResponse);
|
|
884
1095
|
}
|
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 KycTier,\n KycTierLimits,\n KycTierVerification,\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 isClaimTopic(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is import(\"./types\").SdkClaimTopic {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.value),\n `${path}.value`,\n \"finite number\",\n v!.value,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.label), `${path}.label`, \"string\", v!.label);\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 isKycTierLimits(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierLimits {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.daily_investment_limit_usd),\n `${path}.daily_investment_limit_usd`,\n \"finite number\",\n v!.daily_investment_limit_usd,\n );\n ctx.check(\n isFiniteNumber(v!.monthly_investment_limit_usd),\n `${path}.monthly_investment_limit_usd`,\n \"finite number\",\n v!.monthly_investment_limit_usd,\n );\n return true;\n}\n\nfunction isKycTierVerification(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierVerification {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isBoolean(v!.identity_verified),\n `${path}.identity_verified`,\n \"boolean\",\n v!.identity_verified,\n );\n ctx.check(\n isBoolean(v!.liveness_verified),\n `${path}.liveness_verified`,\n \"boolean\",\n v!.liveness_verified,\n );\n ctx.check(\n isBoolean(v!.aml_verified),\n `${path}.aml_verified`,\n \"boolean\",\n v!.aml_verified,\n );\n ctx.check(\n isBoolean(v!.pep_check),\n `${path}.pep_check`,\n \"boolean\",\n v!.pep_check,\n );\n ctx.check(\n isBoolean(v!.address_verified),\n `${path}.address_verified`,\n \"boolean\",\n v!.address_verified,\n );\n ctx.check(\n isBoolean(v!.tax_verified),\n `${path}.tax_verified`,\n \"boolean\",\n v!.tax_verified,\n );\n ctx.check(\n isBoolean(v!.source_of_funds_verified),\n `${path}.source_of_funds_verified`,\n \"boolean\",\n v!.source_of_funds_verified,\n );\n ctx.check(\n isBoolean(v!.business_verification),\n `${path}.business_verification`,\n \"boolean\",\n v!.business_verification,\n );\n return true;\n}\n\nfunction isKycTier(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTier {\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(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.claim_id),\n `${path}.claim_id`,\n \"finite number\",\n v!.claim_id,\n );\n isKycTierLimits(v!.limits, ctx, `${path}.limits`);\n isKycTierVerification(v!.verification, ctx, `${path}.verification`);\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!.claim_topics !== null && v!.claim_topics !== undefined) {\n const topicsOk = ctx.check(\n Array.isArray(v!.claim_topics),\n `${path}.claim_topics`,\n \"array\",\n v!.claim_topics,\n );\n if (topicsOk) {\n (v!.claim_topics as unknown[]).forEach((topic, i) =>\n isClaimTopic(topic, ctx, `${path}.claim_topics[${i}]`),\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 ctx.check(\n isNullableString(v!.trex_identity_registry_address),\n `${path}.trex_identity_registry_address`,\n \"string | null\",\n v!.trex_identity_registry_address,\n );\n ctx.check(\n isNullableString(v!.claim_topics_registry_address),\n `${path}.claim_topics_registry_address`,\n \"string | null\",\n v!.claim_topics_registry_address,\n );\n ctx.check(\n isNullableString(v!.trex_trusted_issuers_registry_address),\n `${path}.trex_trusted_issuers_registry_address`,\n \"string | null\",\n v!.trex_trusted_issuers_registry_address,\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\nexport function validateSdkNetworksResponse(value: unknown): import(\"./types\").SdkNetworksResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, network] of Object.entries(value.data as Record<string, unknown>)) {\n isNetworkDetails(network, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkNetworksResponse;\n}\n\nexport function validateSdkKycTiersResponse(value: unknown): import(\"./types\").SdkKycTiersResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, tier] of Object.entries(value.data as Record<string, unknown>)) {\n isKycTier(tier, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkKycTiersResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n validateSdkKycTiersResponse,\n validateSdkNetworksResponse,\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 getNetworks(): Promise<SdkNetworksResponse> {\n return requestJson(resolved, \"/sdk/networks\", validateSdkNetworksResponse);\n },\n\n getKycTiers(): Promise<SdkKycTiersResponse> {\n return requestJson(resolved, \"/sdk/kyc_tiers\", validateSdkKycTiersResponse);\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 ComplianceFactoryDetails,\n KycTier,\n KycTierLimits,\n KycTierVerification,\n NativeCurrency,\n NetworkDetails,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkBookSummary,\n SdkFundConfig,\n SdkIssuerSummary,\n SdkRuleEngineSummary,\n SdkRuleSummary,\n SdkSecurityDetails,\n SdkStablecoin,\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 isClaimTopic(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is import(\"./types\").SdkClaimTopic {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.value),\n `${path}.value`,\n \"finite number\",\n v!.value,\n );\n ctx.check(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(isString(v!.label), `${path}.label`, \"string\", v!.label);\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 isKycTierLimits(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierLimits {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isFiniteNumber(v!.daily_investment_limit_usd),\n `${path}.daily_investment_limit_usd`,\n \"finite number\",\n v!.daily_investment_limit_usd,\n );\n ctx.check(\n isFiniteNumber(v!.monthly_investment_limit_usd),\n `${path}.monthly_investment_limit_usd`,\n \"finite number\",\n v!.monthly_investment_limit_usd,\n );\n return true;\n}\n\nfunction isKycTierVerification(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTierVerification {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(\n isBoolean(v!.identity_verified),\n `${path}.identity_verified`,\n \"boolean\",\n v!.identity_verified,\n );\n ctx.check(\n isBoolean(v!.liveness_verified),\n `${path}.liveness_verified`,\n \"boolean\",\n v!.liveness_verified,\n );\n ctx.check(\n isBoolean(v!.aml_verified),\n `${path}.aml_verified`,\n \"boolean\",\n v!.aml_verified,\n );\n ctx.check(\n isBoolean(v!.pep_check),\n `${path}.pep_check`,\n \"boolean\",\n v!.pep_check,\n );\n ctx.check(\n isBoolean(v!.address_verified),\n `${path}.address_verified`,\n \"boolean\",\n v!.address_verified,\n );\n ctx.check(\n isBoolean(v!.tax_verified),\n `${path}.tax_verified`,\n \"boolean\",\n v!.tax_verified,\n );\n ctx.check(\n isBoolean(v!.source_of_funds_verified),\n `${path}.source_of_funds_verified`,\n \"boolean\",\n v!.source_of_funds_verified,\n );\n ctx.check(\n isBoolean(v!.business_verification),\n `${path}.business_verification`,\n \"boolean\",\n v!.business_verification,\n );\n return true;\n}\n\nfunction isKycTier(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is KycTier {\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(isString(v!.name), `${path}.name`, \"string\", v!.name);\n ctx.check(\n isFiniteNumber(v!.claim_id),\n `${path}.claim_id`,\n \"finite number\",\n v!.claim_id,\n );\n isKycTierLimits(v!.limits, ctx, `${path}.limits`);\n isKycTierVerification(v!.verification, ctx, `${path}.verification`);\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 isComplianceFactoryDetails(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is ComplianceFactoryDetails {\n const v = asRecord(value);\n if (!ctx.check(v !== undefined, path, \"object\", value)) return false;\n ctx.check(isString(v!.deployer), `${path}.deployer`, \"string\", v!.deployer);\n ctx.check(isString(v!.salt), `${path}.salt`, \"string\", v!.salt);\n ctx.check(isString(v!.timestamp), `${path}.timestamp`, \"string\", v!.timestamp);\n ctx.check(\n isString(v!.identity_implementation),\n `${path}.identity_implementation`,\n \"string\",\n v!.identity_implementation,\n );\n ctx.check(\n isString(v!.implementation_authority),\n `${path}.implementation_authority`,\n \"string\",\n v!.implementation_authority,\n );\n ctx.check(isString(v!.id_factory), `${path}.id_factory`, \"string\", v!.id_factory);\n ctx.check(isString(v!.gateway), `${path}.gateway`, \"string\", v!.gateway);\n ctx.check(\n isString(v!.trex_implementation_authority),\n `${path}.trex_implementation_authority`,\n \"string\",\n v!.trex_implementation_authority,\n );\n ctx.check(\n isString(v!.erc3643_token_impl),\n `${path}.erc3643_token_impl`,\n \"string\",\n v!.erc3643_token_impl,\n );\n ctx.check(\n isString(v!.erc3643_modular_compliance_impl),\n `${path}.erc3643_modular_compliance_impl`,\n \"string\",\n v!.erc3643_modular_compliance_impl,\n );\n ctx.check(\n isString(v!.erc3643_identity_registry_storage),\n `${path}.erc3643_identity_registry_storage`,\n \"string\",\n v!.erc3643_identity_registry_storage,\n );\n ctx.check(\n isString(v!.erc3643_claim_topics_registry),\n `${path}.erc3643_claim_topics_registry`,\n \"string\",\n v!.erc3643_claim_topics_registry,\n );\n ctx.check(\n isString(v!.erc3643_trusted_issuers_registry),\n `${path}.erc3643_trusted_issuers_registry`,\n \"string\",\n v!.erc3643_trusted_issuers_registry,\n );\n ctx.check(\n isString(v!.erc3643_identity_registry),\n `${path}.erc3643_identity_registry`,\n \"string\",\n v!.erc3643_identity_registry,\n );\n ctx.check(isString(v!.claim_issuer), `${path}.claim_issuer`, \"string\", v!.claim_issuer);\n ctx.check(\n isString(v!.claim_issuer_management_key),\n `${path}.claim_issuer_management_key`,\n \"string\",\n v!.claim_issuer_management_key,\n );\n ctx.check(\n isString(v!.claim_signer_address),\n `${path}.claim_signer_address`,\n \"string\",\n v!.claim_signer_address,\n );\n ctx.check(\n isString(v!.token_implementation),\n `${path}.token_implementation`,\n \"string\",\n v!.token_implementation,\n );\n ctx.check(\n isString(v!.modular_compliance_implementation),\n `${path}.modular_compliance_implementation`,\n \"string\",\n v!.modular_compliance_implementation,\n );\n ctx.check(\n isString(v!.trex_factory_implementation_authority),\n `${path}.trex_factory_implementation_authority`,\n \"string\",\n v!.trex_factory_implementation_authority,\n );\n ctx.check(isString(v!.trex_factory), `${path}.trex_factory`, \"string\", v!.trex_factory);\n ctx.check(isString(v!.trex_gateway), `${path}.trex_gateway`, \"string\", v!.trex_gateway);\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!.visibility),\n `${path}.visibility`,\n \"string | null\",\n v!.visibility,\n );\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(isString(v!.org_id), `${path}.org_id`, \"string\", v!.org_id);\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!.compliance_factory !== null && v!.compliance_factory !== undefined) {\n isComplianceFactoryDetails(v!.compliance_factory, ctx, `${path}.compliance_factory`);\n }\n\n if (v!.claim_topics !== null && v!.claim_topics !== undefined) {\n const topicsOk = ctx.check(\n Array.isArray(v!.claim_topics),\n `${path}.claim_topics`,\n \"array\",\n v!.claim_topics,\n );\n if (topicsOk) {\n (v!.claim_topics as unknown[]).forEach((topic, i) =>\n isClaimTopic(topic, ctx, `${path}.claim_topics[${i}]`),\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 ctx.check(\n isNullableString(v!.trex_identity_registry_address),\n `${path}.trex_identity_registry_address`,\n \"string | null\",\n v!.trex_identity_registry_address,\n );\n ctx.check(\n isNullableString(v!.claim_topics_registry_address),\n `${path}.claim_topics_registry_address`,\n \"string | null\",\n v!.claim_topics_registry_address,\n );\n ctx.check(\n isNullableString(v!.trex_trusted_issuers_registry_address),\n `${path}.trex_trusted_issuers_registry_address`,\n \"string | null\",\n v!.trex_trusted_issuers_registry_address,\n );\n\n ctx.check(\n isNullableString(v!.asset_category),\n `${path}.asset_category`,\n \"string | null\",\n v!.asset_category,\n );\n ctx.check(\n typeof v!.apy === \"number\" || v!.apy === null,\n `${path}.apy`,\n \"number | null\",\n v!.apy,\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\nexport function validateSdkNetworksResponse(value: unknown): import(\"./types\").SdkNetworksResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, network] of Object.entries(value.data as Record<string, unknown>)) {\n isNetworkDetails(network, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkNetworksResponse;\n}\n\nexport function validateSdkComplianceFactoriesResponse(\n value: unknown,\n): import(\"./types\").SdkComplianceFactoriesResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, factory] of Object.entries(value.data as Record<string, unknown>)) {\n isComplianceFactoryDetails(factory, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkComplianceFactoriesResponse;\n}\n\nfunction isStablecoin(\n value: unknown,\n ctx: ValidationContext,\n path: string,\n): value is SdkStablecoin {\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 const addressesOk = ctx.check(\n isRecord(v!.addresses),\n `${path}.addresses`,\n \"object\",\n v!.addresses,\n );\n if (addressesOk) {\n for (const [key, addr] of Object.entries(v!.addresses as Record<string, unknown>)) {\n ctx.check(isString(addr), `${path}.addresses[\"${key}\"]`, \"string\", addr);\n }\n }\n return true;\n}\n\nexport function validateSdkStablecoinsResponse(\n value: unknown,\n): import(\"./types\").SdkStablecoinsResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, stablecoin] of Object.entries(value.data as Record<string, unknown>)) {\n isStablecoin(stablecoin, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkStablecoinsResponse;\n}\n\nexport function validateSdkKycTiersResponse(value: unknown): import(\"./types\").SdkKycTiersResponse {\n const ctx = new ValidationContext();\n\n ctx.check(isRecord(value), \"<root>\", \"object\", value);\n if (isRecord(value)) {\n ctx.check(\n isFiniteNumber(value.count),\n \"<root>.count\",\n \"finite number\",\n value.count,\n );\n const dataOk = ctx.check(\n isRecord(value.data),\n \"<root>.data\",\n \"object\",\n value.data,\n );\n if (dataOk) {\n for (const [key, tier] of Object.entries(value.data as Record<string, unknown>)) {\n isKycTier(tier, ctx, `<root>.data[\"${key}\"]`);\n }\n }\n }\n\n if (ctx.failures.length > 0) {\n throw buildValidationError(value, ctx.failures);\n }\n\n return value as unknown as import(\"./types\").SdkKycTiersResponse;\n}\n","import { resolveClientConfig } from \"./config\";\nimport { InvalidConfigurationError } from \"./errors\";\nimport { requestJson } from \"./transport\";\nimport type {\n ClientConfig,\n SdkAssetResponse,\n SdkAssetsResponse,\n SdkComplianceFactoriesResponse,\n SdkKycTiersResponse,\n SdkNetworksResponse,\n SdkStablecoinsResponse,\n SereelSdkClient,\n} from \"./types\";\nimport {\n validateSdkAssetResponse,\n validateSdkAssetsResponse,\n validateSdkComplianceFactoriesResponse,\n validateSdkKycTiersResponse,\n validateSdkNetworksResponse,\n validateSdkStablecoinsResponse,\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 getNetworks(): Promise<SdkNetworksResponse> {\n return requestJson(resolved, \"/sdk/networks\", validateSdkNetworksResponse);\n },\n\n getComplianceFactories(): Promise<SdkComplianceFactoriesResponse> {\n return requestJson(\n resolved,\n \"/sdk/compliance-factories\",\n validateSdkComplianceFactoriesResponse,\n );\n },\n\n getStablecoins(): Promise<SdkStablecoinsResponse> {\n return requestJson(\n resolved,\n \"/sdk/stablecoins\",\n validateSdkStablecoinsResponse,\n );\n },\n\n getKycTiers(): Promise<SdkKycTiersResponse> {\n return requestJson(resolved, \"/sdk/kyc_tiers\", validateSdkKycTiersResponse);\n },\n };\n}\n"],"mappings":"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","names":[]}
|