@stellar/stellar-sdk 16.0.0-rc.1 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -28
- package/dist/stellar-sdk-axios.js +245 -232
- package/dist/stellar-sdk-axios.js.map +1 -1
- package/dist/stellar-sdk-axios.min.js +1 -1
- package/dist/stellar-sdk-axios.min.js.map +1 -1
- package/dist/stellar-sdk.js +49 -36
- package/dist/stellar-sdk.js.map +1 -1
- package/dist/stellar-sdk.min.js +2 -2
- package/dist/stellar-sdk.min.js.map +1 -1
- package/lib/axios/cjs/base/auth.js +11 -11
- package/lib/axios/cjs/base/auth.js.map +1 -1
- package/lib/axios/cjs/base/keypair.js +1 -1
- package/lib/axios/cjs/base/keypair.js.map +1 -1
- package/lib/axios/cjs/base/transaction_builder.js +13 -1
- package/lib/axios/cjs/base/transaction_builder.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/bindings/config.js.map +1 -1
- package/lib/axios/cjs/bindings/wasm_fetcher.js +1 -1
- package/lib/axios/cjs/bindings/wasm_fetcher.js.map +1 -1
- package/lib/axios/cjs/contract/client.js.map +1 -1
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/contract/types.js.map +1 -1
- package/lib/axios/cjs/contract/utils.js.map +1 -1
- package/lib/axios/cjs/contract/wasm_spec_parser.js +1 -1
- package/lib/axios/cjs/contract/wasm_spec_parser.js.map +1 -1
- package/lib/axios/cjs/horizon/call_builder.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/cjs/horizon/horizon_axios_client.js.map +1 -1
- package/lib/axios/cjs/http-client/fetch-client.js +1 -1
- package/lib/axios/cjs/http-client/fetch-client.js.map +1 -1
- package/lib/axios/cjs/http-client/types.js.map +1 -1
- package/lib/axios/cjs/rpc/axios.js +1 -1
- package/lib/axios/cjs/rpc/axios.js.map +1 -1
- package/lib/axios/cjs/rpc/jsonrpc.js.map +1 -1
- package/lib/axios/cjs/rpc/server.js +2 -2
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/axios/esm/base/auth.d.ts +19 -7
- package/lib/axios/esm/base/auth.js +11 -11
- package/lib/axios/esm/base/auth.js.map +1 -1
- package/lib/axios/esm/base/keypair.js +1 -1
- package/lib/axios/esm/base/keypair.js.map +1 -1
- package/lib/axios/esm/base/transaction_builder.js +13 -1
- package/lib/axios/esm/base/transaction_builder.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/bindings/config.js.map +1 -1
- package/lib/axios/esm/bindings/wasm_fetcher.js +1 -1
- package/lib/axios/esm/bindings/wasm_fetcher.js.map +1 -1
- package/lib/axios/esm/contract/client.js.map +1 -1
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/contract/types.js.map +1 -1
- package/lib/axios/esm/contract/utils.js.map +1 -1
- package/lib/axios/esm/contract/wasm_spec_parser.js +1 -1
- package/lib/axios/esm/contract/wasm_spec_parser.js.map +1 -1
- package/lib/axios/esm/horizon/call_builder.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_api.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/axios/esm/horizon/horizon_axios_client.js.map +1 -1
- package/lib/axios/esm/http-client/fetch-client.js +1 -1
- package/lib/axios/esm/http-client/fetch-client.js.map +1 -1
- package/lib/axios/esm/http-client/types.js.map +1 -1
- package/lib/axios/esm/rpc/axios.js +1 -1
- package/lib/axios/esm/rpc/axios.js.map +1 -1
- package/lib/axios/esm/rpc/jsonrpc.js.map +1 -1
- package/lib/axios/esm/rpc/server.js +2 -2
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/axios/esm/webauth/challenge_transaction.js.map +1 -1
- package/lib/cjs/base/auth.js +11 -11
- package/lib/cjs/base/auth.js.map +1 -1
- package/lib/cjs/base/keypair.js +1 -1
- package/lib/cjs/base/keypair.js.map +1 -1
- package/lib/cjs/base/transaction_builder.js +13 -1
- package/lib/cjs/base/transaction_builder.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/bindings/config.js.map +1 -1
- package/lib/cjs/bindings/wasm_fetcher.js +1 -1
- package/lib/cjs/bindings/wasm_fetcher.js.map +1 -1
- package/lib/cjs/contract/client.js.map +1 -1
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/contract/types.js.map +1 -1
- package/lib/cjs/contract/utils.js.map +1 -1
- package/lib/cjs/contract/wasm_spec_parser.js +1 -1
- package/lib/cjs/contract/wasm_spec_parser.js.map +1 -1
- package/lib/cjs/horizon/call_builder.js.map +1 -1
- package/lib/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js.map +1 -1
- package/lib/cjs/http-client/fetch-client.js +1 -1
- package/lib/cjs/http-client/fetch-client.js.map +1 -1
- package/lib/cjs/http-client/types.js.map +1 -1
- package/lib/cjs/rpc/axios.js +1 -1
- package/lib/cjs/rpc/axios.js.map +1 -1
- package/lib/cjs/rpc/jsonrpc.js.map +1 -1
- package/lib/cjs/rpc/server.js +2 -2
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/cjs/webauth/challenge_transaction.js.map +1 -1
- package/lib/esm/base/auth.d.ts +19 -7
- package/lib/esm/base/auth.js +11 -11
- package/lib/esm/base/auth.js.map +1 -1
- package/lib/esm/base/keypair.js +1 -1
- package/lib/esm/base/keypair.js.map +1 -1
- package/lib/esm/base/transaction_builder.js +13 -1
- package/lib/esm/base/transaction_builder.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/bindings/config.js.map +1 -1
- package/lib/esm/bindings/wasm_fetcher.js +1 -1
- package/lib/esm/bindings/wasm_fetcher.js.map +1 -1
- package/lib/esm/contract/client.js.map +1 -1
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/contract/types.js.map +1 -1
- package/lib/esm/contract/utils.js.map +1 -1
- package/lib/esm/contract/wasm_spec_parser.js +1 -1
- package/lib/esm/contract/wasm_spec_parser.js.map +1 -1
- package/lib/esm/horizon/call_builder.js.map +1 -1
- package/lib/esm/horizon/horizon_api.js.map +1 -1
- package/lib/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/esm/horizon/horizon_axios_client.js.map +1 -1
- package/lib/esm/http-client/fetch-client.js +1 -1
- package/lib/esm/http-client/fetch-client.js.map +1 -1
- package/lib/esm/http-client/types.js.map +1 -1
- package/lib/esm/rpc/axios.js +1 -1
- package/lib/esm/rpc/axios.js.map +1 -1
- package/lib/esm/rpc/jsonrpc.js.map +1 -1
- package/lib/esm/rpc/server.js +2 -2
- package/lib/esm/rpc/server.js.map +1 -1
- package/lib/esm/webauth/challenge_transaction.js.map +1 -1
- package/package.json +2 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sources":["../../../src/bindings/config.ts"],"sourcesContent":["// The SDK version is baked in at build time via babel-plugin-transform-define.\n// Previously this was `import packageJson from \"../../package.json\"`, which\n// failed at runtime in deeper build outputs (e.g. lib/axios) because the\n// relative path `../../package.json` resolved into the output tree rather\n// than the project root.\n
|
|
1
|
+
{"version":3,"file":"config.js","sources":["../../../src/bindings/config.ts"],"sourcesContent":["// The SDK version is baked in at build time via babel-plugin-transform-define.\n// Previously this was `import packageJson from \"../../package.json\"`, which\n// failed at runtime in deeper build outputs (e.g. lib/axios) because the\n// relative path `../../package.json` resolved into the output tree rather\n// than the project root.\n\ndeclare const __PACKAGE_VERSION__: string;\n\nexport interface ConfigGenerateOptions {\n contractName: string;\n}\n\nexport interface Configs {\n packageJson: string;\n tsConfig: string;\n gitignore: string;\n readme: string;\n}\n\n/**\n * Generates a complete TypeScript project structure with contract bindings\n */\nexport class ConfigGenerator {\n /**\n * Generate the complete TypeScript project\n */\n generate(options: ConfigGenerateOptions): Configs {\n const { contractName } = options;\n\n // Generate all project files\n return {\n packageJson: this.generatePackageJson(contractName),\n tsConfig: this.generateTsConfig(),\n gitignore: this.generateGitignore(),\n readme: this.generateReadme(contractName),\n };\n }\n\n /**\n * Generate package.json\n */\n private generatePackageJson(contractName: string): string {\n const generatedPackageJson = {\n name: contractName.toLowerCase().replace(/[^a-z0-9-]/g, \"-\"),\n version: \"0.0.1\",\n description: `Generated TypeScript bindings for ${contractName} Stellar contract`,\n type: \"module\",\n main: \"dist/index.js\",\n types: \"dist/index.d.ts\",\n scripts: {\n build: \"tsc\",\n },\n dependencies: {\n \"@stellar/stellar-sdk\": `^${__PACKAGE_VERSION__}`,\n buffer: \"6.0.3\",\n },\n devDependencies: {\n typescript: \"^5.6.3\",\n },\n };\n\n return JSON.stringify(generatedPackageJson, null, 2);\n }\n\n /**\n * Generate tsconfig.json\n */\n private generateTsConfig(): string {\n const tsConfig = {\n compilerOptions: {\n target: \"ESNext\",\n module: \"NodeNext\",\n moduleResolution: \"nodenext\",\n declaration: true,\n outDir: \"./dist\",\n strictNullChecks: true,\n skipLibCheck: true,\n },\n include: [\"src/*\"],\n };\n\n return JSON.stringify(tsConfig, null, 2);\n }\n\n /**\n * Generate .gitignore\n */\n private generateGitignore(): string {\n const gitignore = [\n \"# Dependencies\",\n \"node_modules/\",\n \"\",\n \"# Build outputs\",\n \"dist/\",\n \"*.tgz\",\n \"\",\n \"# IDE\",\n \".vscode/\",\n \".idea/\",\n \"\",\n \"# OS\",\n \".DS_Store\",\n \"Thumbs.db\",\n \"\",\n \"# Logs\",\n \"*.log\",\n \"npm-debug.log*\",\n \"\",\n \"# Runtime data\",\n \"*.pid\",\n \"*.seed\",\n ].join(\"\\n\");\n\n return gitignore;\n }\n\n /**\n * Generate README.md\n */\n private generateReadme(contractName: string): string {\n const readme = [\n `# ${contractName} Contract Bindings`,\n \"\",\n `TypeScript bindings for the ${contractName} Stellar smart contract.`,\n \"\",\n \"## Installation\",\n \"\",\n \"```bash\",\n \"npm install\",\n \"```\",\n \"\",\n \"## Build\",\n \"\",\n \"```bash\",\n \"npm run build\",\n \"```\",\n \"\",\n \"## Usage\",\n \"\",\n \"```typescript\",\n 'import { Client } from \"./src\";',\n \"\",\n \"const client = new Client({\",\n ' contractId: \"YOUR_CONTRACT_ID\",',\n ' rpcUrl: \"https://soroban-testnet.stellar.org:443\",',\n ' networkPassphrase: \"Test SDF Network ; September 2015\",',\n \"});\",\n \"\",\n \"// Call contract methods\",\n \"// const result = await client.methodName();\",\n \"```\",\n \"\",\n \"## Generated Files\",\n \"\",\n \"- `src/index.ts` - Entry point exporting the Client\",\n \"- `src/types.ts` - Type definitions for contract structs, enums, and unions\",\n \"- `src/contract.ts` - Client implementation\",\n \"- `tsconfig.json` - TypeScript configuration\",\n \"- `package.json` - NPM package configuration\",\n \"\",\n \"This package was generated using the Js-Stellar-SDK contract binding generator.\",\n ].join(\"\\n\");\n\n return readme;\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -75,7 +75,7 @@ async function fetchWasmFromContract(server, contractAddress) {
|
|
|
75
75
|
return { type: "stellar-asset-contract" };
|
|
76
76
|
}
|
|
77
77
|
const wasmHash = instance.executable().wasmHash();
|
|
78
|
-
|
|
78
|
+
const wasmBytes = await getRemoteWasmFromHash(server, wasmHash);
|
|
79
79
|
return { type: "wasm", wasmBytes };
|
|
80
80
|
} catch (error) {
|
|
81
81
|
if (error instanceof WasmFetchError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm_fetcher.js","sources":["../../../src/bindings/wasm_fetcher.ts"],"sourcesContent":["import { Address, Contract, StrKey, xdr } from \"../base/index.js\";\nimport { Server } from \"../rpc/index.js\";\n\nimport { RpcServer } from \"../rpc/server.js\";\n\n/**\n * Types of contract data that can be fetched\n */\nexport type ContractData =\n | { type: \"wasm\"; wasmBytes: Buffer }\n | { type: \"stellar-asset-contract\" };\n\n/**\n * Errors that can occur during WASM fetching\n */\nexport class WasmFetchError extends Error {\n constructor(\n message: string,\n public readonly cause?: Error,\n ) {\n super(message);\n this.name = \"WasmFetchError\";\n }\n}\n\n/**\n * Get WASM bytes from a WASM hash on the network\n */\nasync function getRemoteWasmFromHash(\n server: RpcServer,\n hashBuffer: Buffer,\n): Promise<Buffer> {\n try {\n // Create the ledger key for the contract code\n const contractCodeKey = xdr.LedgerKey.contractCode(\n new xdr.LedgerKeyContractCode({\n hash: xdr.Hash.fromXDR(hashBuffer, \"raw\"),\n }),\n );\n\n // Get the ledger entries\n const response = await server.getLedgerEntries(contractCodeKey);\n\n if (!response.entries || response.entries.length === 0) {\n throw new WasmFetchError(\"WASM not found for the given hash\");\n }\n\n const entry = response.entries[0];\n if (entry.key.switch() !== xdr.LedgerEntryType.contractCode()) {\n throw new WasmFetchError(\"Invalid ledger entry type returned\");\n }\n\n const contractCode = entry.val.contractCode();\n return Buffer.from(contractCode.code());\n } catch (error) {\n if (error instanceof WasmFetchError) {\n throw error;\n }\n throw new WasmFetchError(\"Failed to fetch WASM from hash\", error as Error);\n }\n}\n\n/**\n * Check if a contract is a Stellar Asset Contract\n */\nfunction isStellarAssetContract(instance: xdr.ScContractInstance): boolean {\n // Check if it's a Stellar Asset Contract (has no WASM hash)\n return (\n instance.executable().switch() ===\n xdr.ContractExecutableType.contractExecutableStellarAsset()\n );\n}\n\n/**\n * Fetch WASM bytes from a deployed contract\n */\nasync function fetchWasmFromContract(\n server: RpcServer,\n contractAddress: Address,\n): Promise<ContractData> {\n try {\n const contract = new Contract(contractAddress.toString());\n\n const response = await server.getLedgerEntries(contract.getFootprint());\n if (!response.entries || response.entries.length === 0) {\n throw new WasmFetchError(\"Contract instance not found\");\n }\n\n const entry = response.entries[0];\n if (entry.key.switch() !== xdr.LedgerEntryType.contractData()) {\n throw new WasmFetchError(\"Invalid ledger entry type returned\");\n }\n\n const contractData = entry.val.contractData();\n const instance = contractData.val().instance();\n\n if (isStellarAssetContract(instance)) {\n return { type: \"stellar-asset-contract\" };\n }\n\n const wasmHash = instance.executable().wasmHash();\n
|
|
1
|
+
{"version":3,"file":"wasm_fetcher.js","sources":["../../../src/bindings/wasm_fetcher.ts"],"sourcesContent":["import { Address, Contract, StrKey, xdr } from \"../base/index.js\";\nimport { Server } from \"../rpc/index.js\";\n\nimport { RpcServer } from \"../rpc/server.js\";\n\n/**\n * Types of contract data that can be fetched\n */\nexport type ContractData =\n | { type: \"wasm\"; wasmBytes: Buffer }\n | { type: \"stellar-asset-contract\" };\n\n/**\n * Errors that can occur during WASM fetching\n */\nexport class WasmFetchError extends Error {\n constructor(\n message: string,\n public readonly cause?: Error,\n ) {\n super(message);\n this.name = \"WasmFetchError\";\n }\n}\n\n/**\n * Get WASM bytes from a WASM hash on the network\n */\nasync function getRemoteWasmFromHash(\n server: RpcServer,\n hashBuffer: Buffer,\n): Promise<Buffer> {\n try {\n // Create the ledger key for the contract code\n const contractCodeKey = xdr.LedgerKey.contractCode(\n new xdr.LedgerKeyContractCode({\n hash: xdr.Hash.fromXDR(hashBuffer, \"raw\"),\n }),\n );\n\n // Get the ledger entries\n const response = await server.getLedgerEntries(contractCodeKey);\n\n if (!response.entries || response.entries.length === 0) {\n throw new WasmFetchError(\"WASM not found for the given hash\");\n }\n\n const entry = response.entries[0];\n if (entry.key.switch() !== xdr.LedgerEntryType.contractCode()) {\n throw new WasmFetchError(\"Invalid ledger entry type returned\");\n }\n\n const contractCode = entry.val.contractCode();\n return Buffer.from(contractCode.code());\n } catch (error) {\n if (error instanceof WasmFetchError) {\n throw error;\n }\n throw new WasmFetchError(\"Failed to fetch WASM from hash\", error as Error);\n }\n}\n\n/**\n * Check if a contract is a Stellar Asset Contract\n */\nfunction isStellarAssetContract(instance: xdr.ScContractInstance): boolean {\n // Check if it's a Stellar Asset Contract (has no WASM hash)\n return (\n instance.executable().switch() ===\n xdr.ContractExecutableType.contractExecutableStellarAsset()\n );\n}\n\n/**\n * Fetch WASM bytes from a deployed contract\n */\nasync function fetchWasmFromContract(\n server: RpcServer,\n contractAddress: Address,\n): Promise<ContractData> {\n try {\n const contract = new Contract(contractAddress.toString());\n\n const response = await server.getLedgerEntries(contract.getFootprint());\n if (!response.entries || response.entries.length === 0) {\n throw new WasmFetchError(\"Contract instance not found\");\n }\n\n const entry = response.entries[0];\n if (entry.key.switch() !== xdr.LedgerEntryType.contractData()) {\n throw new WasmFetchError(\"Invalid ledger entry type returned\");\n }\n\n const contractData = entry.val.contractData();\n const instance = contractData.val().instance();\n\n if (isStellarAssetContract(instance)) {\n return { type: \"stellar-asset-contract\" };\n }\n\n const wasmHash = instance.executable().wasmHash();\n const wasmBytes = await getRemoteWasmFromHash(server, wasmHash);\n return { type: \"wasm\", wasmBytes };\n } catch (error) {\n if (error instanceof WasmFetchError) {\n throw error;\n }\n throw new WasmFetchError(\n \"Failed to fetch WASM from contract\",\n error as Error,\n );\n }\n}\n\n/**\n * Fetch WASM from network using WASM hash\n */\nexport async function fetchFromWasmHash(\n wasmHash: string,\n rpcServer: Server,\n): Promise<ContractData> {\n try {\n // Validate and decode the hash\n const hashBuffer = Buffer.from(wasmHash, \"hex\");\n if (hashBuffer.length !== 32) {\n throw new WasmFetchError(\n `Invalid WASM hash length: expected 32 bytes, got ${hashBuffer.length}`,\n );\n }\n\n // Get WASM from hash\n const wasmBytes = await getRemoteWasmFromHash(rpcServer, hashBuffer);\n\n return { type: \"wasm\", wasmBytes };\n } catch (error) {\n throw new WasmFetchError(\n `Failed to fetch WASM from hash ${wasmHash}`,\n error as Error,\n );\n }\n}\n\n/**\n * Fetch WASM from network using contract ID\n */\nexport async function fetchFromContractId(\n contractId: string,\n rpcServer: Server,\n): Promise<ContractData> {\n try {\n if (!StrKey.isValidContract(contractId)) {\n throw new WasmFetchError(`Invalid contract ID: ${contractId}`);\n }\n // Parse contract address\n const contractAddress = Address.fromString(contractId);\n\n // Try to get WASM from contract\n return await fetchWasmFromContract(rpcServer, contractAddress);\n } catch (error) {\n throw new WasmFetchError(\n `Failed to fetch WASM from contract ${contractId}`,\n error as Error,\n );\n }\n}\n"],"names":["xdr","Buffer","contract","Contract","StrKey","Address"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sources":["../../../src/contract/client.ts"],"sourcesContent":["import { Operation, xdr, Address } from \"../base/index.js\";\nimport { Spec } from \"./spec.js\";\nimport { Server } from \"../rpc/index.js\";\nimport { AssembledTransaction } from \"./assembled_transaction.js\";\nimport type { ClientOptions, MethodOptions } from \"./types.js\";\nimport { sanitizeIdentifier } from \"../bindings/utils.js\";\n\nconst CONSTRUCTOR_FUNC = \"__constructor\";\n\nasync function specFromWasmHash(\n wasmHash: Buffer | string,\n options: Server.Options & { rpcUrl: string },\n format: \"hex\" | \"base64\" = \"hex\",\n): Promise<Spec> {\n if (!options || !options.rpcUrl) {\n throw new TypeError(\"options must contain rpcUrl\");\n }\n const { rpcUrl, allowHttp, headers } = options;\n const serverOpts: Server.Options = { allowHttp, headers };\n const server = new Server(rpcUrl, serverOpts);\n const wasm = await server.getContractWasmByHash(wasmHash, format);\n return Spec.fromWasm(wasm);\n}\n\n/**\n * Generate a class from the contract spec that where each contract method\n * gets included with an identical name.\n *\n * Each method returns an {@link contract.AssembledTransaction | AssembledTransaction} that can\n * be used to modify, simulate, decode results, and possibly sign, & submit the\n * transaction.\n *\n *\n * @param spec - {@link Spec} to construct a Client for\n * @param options - see {@link ClientOptions}\n */\nexport class Client {\n static async deploy<T = Client>(\n /** Constructor/Initialization Args for the contract's `__constructor` method */\n args: Record<string, any> | null,\n /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */\n options: MethodOptions &\n Omit<ClientOptions, \"contractId\"> & {\n /** The hash of the Wasm blob, which must already be installed on-chain. */\n wasmHash: Buffer | string;\n /** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */\n salt?: Buffer | Uint8Array;\n /** The format used to decode `wasmHash`, if it's provided as a string. */\n format?: \"hex\" | \"base64\";\n /** The address to use to deploy the custom contract */\n address?: string;\n },\n ): Promise<AssembledTransaction<T>> {\n const {\n wasmHash,\n salt,\n format,\n fee,\n timeoutInSeconds,\n simulate,\n ...clientOptions\n } = options;\n const spec = await specFromWasmHash(wasmHash, clientOptions, format);\n\n const operation = Operation.createCustomContract({\n address: new Address(options.address || options.publicKey!),\n wasmHash:\n typeof wasmHash === \"string\"\n ? Buffer.from(wasmHash, format ?? \"hex\")\n : (wasmHash as Buffer),\n salt,\n constructorArgs: args\n ? spec.funcArgsToScVals(CONSTRUCTOR_FUNC, args)\n : [],\n });\n\n return AssembledTransaction.buildWithOp(operation, {\n fee,\n timeoutInSeconds,\n simulate,\n ...clientOptions,\n contractId: \"ignored\",\n method: CONSTRUCTOR_FUNC,\n parseResultXdr: (result) =>\n new Client(spec, {\n ...clientOptions,\n contractId: Address.fromScVal(result).toString(),\n }),\n }) as unknown as AssembledTransaction<T>;\n }\n\n constructor(\n public readonly spec: Spec,\n public readonly options: ClientOptions,\n ) {\n // Ensure we have a server to reuse for all AssembledTransactions\n if (options.server === undefined) {\n const { allowHttp, headers } = options;\n options.server = new Server(options.rpcUrl, {\n allowHttp,\n headers,\n });\n }\n\n this.spec.funcs().forEach((xdrFn) => {\n const method = xdrFn.name().toString();\n if (method === CONSTRUCTOR_FUNC) {\n return;\n }\n const assembleTransaction = (\n args?: Record<string, any>,\n methodOptions?: MethodOptions,\n ) =>\n AssembledTransaction.build({\n method,\n args: args && spec.funcArgsToScVals(method, args),\n ...options,\n ...methodOptions,\n errorTypes: spec.errorCases().reduce(\n (acc, curr) => ({\n ...acc,\n [curr.value()]: { message: curr.doc().toString() },\n }),\n {} as Pick<ClientOptions, \"errorTypes\">,\n ),\n parseResultXdr: (result: xdr.ScVal) =>\n spec.funcResToNative(method, result),\n });\n\n // @ts-ignore error TS7053: Element implicitly has an 'any' type\n this[sanitizeIdentifier(method)] =\n spec.getFunc(method).inputs().length === 0\n ? (opts?: MethodOptions) => assembleTransaction(undefined, opts)\n : assembleTransaction;\n });\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions and the contract's wasm hash.\n * The wasmHash can be provided in either hex or base64 format.\n *\n * @param wasmHash - The hash of the contract's wasm binary, in either hex or base64 format.\n * @param options - The ClientOptions object containing the necessary configuration, including the rpcUrl.\n * @param format - (optional) The format of the provided wasmHash, either \"hex\" or \"base64\". Defaults to \"hex\".\n * @returns A Promise that resolves to a Client instance.\n * @throws If the provided options object does not contain an rpcUrl.\n */\n static async fromWasmHash(\n wasmHash: Buffer | string,\n options: ClientOptions,\n format: \"hex\" | \"base64\" = \"hex\",\n ): Promise<Client> {\n if (!options || !options.rpcUrl) {\n throw new TypeError(\"options must contain rpcUrl\");\n }\n const { rpcUrl, allowHttp, headers } = options;\n const server =\n options.server ??\n new Server(rpcUrl, {\n allowHttp,\n headers,\n });\n const wasm = await server.getContractWasmByHash(wasmHash, format);\n\n return Client.fromWasm(wasm, options);\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions and the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @param options - The ClientOptions object containing the necessary configuration.\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static async fromWasm(wasm: Buffer, options: ClientOptions): Promise<Client> {\n const spec = await Spec.fromWasm(wasm);\n return new Client(spec, options);\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.\n *\n * @param options - The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl.\n * @returns A Promise that resolves to a Client instance.\n * @throws If the provided options object does not contain both rpcUrl and contractId.\n */\n static async from(options: ClientOptions): Promise<Client> {\n if (!options || !options.rpcUrl || !options.contractId) {\n throw new TypeError(\"options must contain rpcUrl and contractId\");\n }\n const { rpcUrl, contractId, allowHttp, headers } = options;\n const server = new Server(rpcUrl, {\n allowHttp,\n headers,\n });\n const wasm = await server.getContractWasmByContractId(contractId);\n return Client.fromWasm(wasm, options);\n }\n\n txFromJSON = <T>(json: string): AssembledTransaction<T> => {\n const { method, ...tx } = JSON.parse(json);\n return AssembledTransaction.fromJSON(\n {\n ...this.options,\n method,\n parseResultXdr: (result: xdr.ScVal) =>\n this.spec.funcResToNative(method, result),\n },\n tx,\n );\n };\n\n txFromXDR = <T>(xdrBase64: string): AssembledTransaction<T> =>\n AssembledTransaction.fromXDR(this.options, xdrBase64, this.spec);\n}\n"],"names":["server","Server","Spec","AssembledTransaction","sanitizeIdentifier","operation","Operation","Address","Buffer","spec"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sources":["../../../src/contract/client.ts"],"sourcesContent":["import { Operation, xdr, Address } from \"../base/index.js\";\nimport { Spec } from \"./spec.js\";\nimport { Server } from \"../rpc/index.js\";\nimport { AssembledTransaction } from \"./assembled_transaction.js\";\nimport type { ClientOptions, MethodOptions } from \"./types.js\";\nimport { sanitizeIdentifier } from \"../bindings/utils.js\";\n\nconst CONSTRUCTOR_FUNC = \"__constructor\";\n\nasync function specFromWasmHash(\n wasmHash: Buffer | string,\n options: Server.Options & { rpcUrl: string },\n format: \"hex\" | \"base64\" = \"hex\",\n): Promise<Spec> {\n if (!options || !options.rpcUrl) {\n throw new TypeError(\"options must contain rpcUrl\");\n }\n const { rpcUrl, allowHttp, headers } = options;\n const serverOpts: Server.Options = { allowHttp, headers };\n const server = new Server(rpcUrl, serverOpts);\n const wasm = await server.getContractWasmByHash(wasmHash, format);\n return Spec.fromWasm(wasm);\n}\n\n/**\n * Generate a class from the contract spec that where each contract method\n * gets included with an identical name.\n *\n * Each method returns an {@link contract.AssembledTransaction | AssembledTransaction} that can\n * be used to modify, simulate, decode results, and possibly sign, & submit the\n * transaction.\n *\n *\n * @param spec - {@link Spec} to construct a Client for\n * @param options - see {@link ClientOptions}\n */\nexport class Client {\n static async deploy<T = Client>(\n /** Constructor/Initialization Args for the contract's `__constructor` method */\n args: Record<string, any> | null,\n /** Options for initializing a Client as well as for calling a method, with extras specific to deploying. */\n options: MethodOptions &\n Omit<ClientOptions, \"contractId\"> & {\n /** The hash of the Wasm blob, which must already be installed on-chain. */\n wasmHash: Buffer | string;\n /** Salt used to generate the contract's ID. Passed through to {@link Operation.createCustomContract}. Default: random. */\n salt?: Buffer | Uint8Array;\n /** The format used to decode `wasmHash`, if it's provided as a string. */\n format?: \"hex\" | \"base64\";\n /** The address to use to deploy the custom contract */\n address?: string;\n },\n ): Promise<AssembledTransaction<T>> {\n const {\n wasmHash,\n salt,\n format,\n fee,\n timeoutInSeconds,\n simulate,\n ...clientOptions\n } = options;\n const spec = await specFromWasmHash(wasmHash, clientOptions, format);\n\n const operation = Operation.createCustomContract({\n address: new Address(options.address || options.publicKey!),\n wasmHash:\n typeof wasmHash === \"string\"\n ? Buffer.from(wasmHash, format ?? \"hex\")\n : (wasmHash as Buffer),\n salt,\n constructorArgs: args\n ? spec.funcArgsToScVals(CONSTRUCTOR_FUNC, args)\n : [],\n });\n\n return AssembledTransaction.buildWithOp(operation, {\n fee,\n timeoutInSeconds,\n simulate,\n ...clientOptions,\n contractId: \"ignored\",\n method: CONSTRUCTOR_FUNC,\n parseResultXdr: (result) =>\n new Client(spec, {\n ...clientOptions,\n contractId: Address.fromScVal(result).toString(),\n }),\n }) as unknown as AssembledTransaction<T>;\n }\n\n constructor(\n public readonly spec: Spec,\n public readonly options: ClientOptions,\n ) {\n // Ensure we have a server to reuse for all AssembledTransactions\n if (options.server === undefined) {\n const { allowHttp, headers } = options;\n options.server = new Server(options.rpcUrl, {\n allowHttp,\n headers,\n });\n }\n\n this.spec.funcs().forEach((xdrFn) => {\n const method = xdrFn.name().toString();\n if (method === CONSTRUCTOR_FUNC) {\n return;\n }\n const assembleTransaction = (\n args?: Record<string, any>,\n methodOptions?: MethodOptions,\n ) =>\n AssembledTransaction.build({\n method,\n args: args && spec.funcArgsToScVals(method, args),\n ...options,\n ...methodOptions,\n errorTypes: spec.errorCases().reduce(\n (acc, curr) => ({\n ...acc,\n [curr.value()]: { message: curr.doc().toString() },\n }),\n {} as Pick<ClientOptions, \"errorTypes\">,\n ),\n parseResultXdr: (result: xdr.ScVal) =>\n spec.funcResToNative(method, result),\n });\n\n // @ts-expect-error error TS7053: Element implicitly has an 'any' type\n this[sanitizeIdentifier(method)] =\n spec.getFunc(method).inputs().length === 0\n ? (opts?: MethodOptions) => assembleTransaction(undefined, opts)\n : assembleTransaction;\n });\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions and the contract's wasm hash.\n * The wasmHash can be provided in either hex or base64 format.\n *\n * @param wasmHash - The hash of the contract's wasm binary, in either hex or base64 format.\n * @param options - The ClientOptions object containing the necessary configuration, including the rpcUrl.\n * @param format - (optional) The format of the provided wasmHash, either \"hex\" or \"base64\". Defaults to \"hex\".\n * @returns A Promise that resolves to a Client instance.\n * @throws If the provided options object does not contain an rpcUrl.\n */\n static async fromWasmHash(\n wasmHash: Buffer | string,\n options: ClientOptions,\n format: \"hex\" | \"base64\" = \"hex\",\n ): Promise<Client> {\n if (!options || !options.rpcUrl) {\n throw new TypeError(\"options must contain rpcUrl\");\n }\n const { rpcUrl, allowHttp, headers } = options;\n const server =\n options.server ??\n new Server(rpcUrl, {\n allowHttp,\n headers,\n });\n const wasm = await server.getContractWasmByHash(wasmHash, format);\n\n return Client.fromWasm(wasm, options);\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions and the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @param options - The ClientOptions object containing the necessary configuration.\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static async fromWasm(wasm: Buffer, options: ClientOptions): Promise<Client> {\n const spec = await Spec.fromWasm(wasm);\n return new Client(spec, options);\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.\n *\n * @param options - The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl.\n * @returns A Promise that resolves to a Client instance.\n * @throws If the provided options object does not contain both rpcUrl and contractId.\n */\n static async from(options: ClientOptions): Promise<Client> {\n if (!options || !options.rpcUrl || !options.contractId) {\n throw new TypeError(\"options must contain rpcUrl and contractId\");\n }\n const { rpcUrl, contractId, allowHttp, headers } = options;\n const server = new Server(rpcUrl, {\n allowHttp,\n headers,\n });\n const wasm = await server.getContractWasmByContractId(contractId);\n return Client.fromWasm(wasm, options);\n }\n\n txFromJSON = <T>(json: string): AssembledTransaction<T> => {\n const { method, ...tx } = JSON.parse(json);\n return AssembledTransaction.fromJSON(\n {\n ...this.options,\n method,\n parseResultXdr: (result: xdr.ScVal) =>\n this.spec.funcResToNative(method, result),\n },\n tx,\n );\n };\n\n txFromXDR = <T>(xdrBase64: string): AssembledTransaction<T> =>\n AssembledTransaction.fromXDR(this.options, xdrBase64, this.spec);\n}\n"],"names":["server","Server","Spec","AssembledTransaction","sanitizeIdentifier","operation","Operation","Address","Buffer","spec"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","sources":["../../../src/contract/spec.ts"],"sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport {\n type ScIntType,\n XdrLargeInt,\n xdr,\n Address,\n Contract,\n scValToBigInt,\n} from \"../base/index.js\";\nimport { Ok, Err } from \"./rust_result.js\";\nimport { processSpecEntryStream } from \"./utils.js\";\nimport { specFromWasm } from \"./wasm_spec_parser.js\";\n\nexport interface Union<T> {\n tag: string;\n values?: T;\n}\n\nfunction enumToJsonSchema(udt: xdr.ScSpecUdtEnumV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n const title = aCase.name().toString();\n const desc = aCase.doc().toString();\n oneOf.push({\n description: desc,\n title,\n enum: [aCase.value()],\n type: \"number\",\n });\n });\n const res: any = { oneOf };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\nfunction isNumeric(field: xdr.ScSpecUdtStructFieldV0) {\n return /^\\d+$/.test(field.name().toString());\n}\n\nfunction readObj(args: object, input: xdr.ScSpecFunctionInputV0): any {\n const inputName = input.name().toString();\n const entry = Object.entries(args).find(([name]) => name === inputName);\n if (!entry) {\n throw new Error(`Missing field ${inputName}`);\n }\n return entry[1];\n}\n\nfunction findCase(name: string) {\n return function matches(entry: xdr.ScSpecUdtUnionCaseV0) {\n switch (entry.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const tuple = entry.tupleCase();\n return tuple.name().toString() === name;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const voidCase = entry.voidCase();\n return voidCase.name().toString() === name;\n }\n default:\n return false;\n }\n };\n}\n\nfunction stringToScVal(str: string, ty: xdr.ScSpecType): xdr.ScVal {\n switch (ty.value) {\n case xdr.ScSpecType.scSpecTypeString().value:\n return xdr.ScVal.scvString(str);\n case xdr.ScSpecType.scSpecTypeSymbol().value:\n return xdr.ScVal.scvSymbol(str);\n case xdr.ScSpecType.scSpecTypeAddress().value:\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value:\n return Address.fromString(str).toScVal();\n case xdr.ScSpecType.scSpecTypeU64().value:\n return new XdrLargeInt(\"u64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI64().value:\n return new XdrLargeInt(\"i64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU128().value:\n return new XdrLargeInt(\"u128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI128().value:\n return new XdrLargeInt(\"i128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU256().value:\n return new XdrLargeInt(\"u256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI256().value:\n return new XdrLargeInt(\"i256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeBytes().value:\n case xdr.ScSpecType.scSpecTypeBytesN().value:\n return xdr.ScVal.scvBytes(Buffer.from(str, \"base64\"));\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n return xdr.ScVal.scvTimepoint(new xdr.Uint64(str));\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n return xdr.ScVal.scvDuration(new xdr.Uint64(str));\n }\n default:\n throw new TypeError(`invalid type ${ty.name} specified for string value`);\n }\n}\n\nconst PRIMITIVE_DEFINITONS: { [key: string]: JSONSchema7Definition } = {\n U32: {\n type: \"integer\",\n minimum: 0,\n maximum: 4294967295,\n },\n I32: {\n type: \"integer\",\n minimum: -2147483648,\n maximum: 2147483647,\n },\n U64: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Timepoint: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Duration: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n I64: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 21, // Includes additional digit for the potential '-'\n },\n U128: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 39, // 128-bit max value has 39 digits\n },\n I128: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 40, // Includes additional digit for the potential '-'\n },\n U256: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 78, // 256-bit max value has 78 digits\n },\n I256: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 79, // Includes additional digit for the potential '-'\n },\n Address: {\n type: \"string\",\n format: \"address\",\n description: \"Address can be a public key or contract id\",\n },\n MuxedAddress: {\n type: \"string\",\n format: \"address\",\n description:\n \"Stellar public key with M prefix combining a G address and unique ID\",\n },\n ScString: {\n type: \"string\",\n description: \"ScString is a string\",\n },\n ScSymbol: {\n type: \"string\",\n description: \"ScSymbol is a string\",\n },\n DataUrl: {\n type: \"string\",\n pattern:\n \"^(?:[A-Za-z0-9+\\\\/]{4})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$\",\n },\n};\n\n/**\n * Converts an XDR type definition to a JSON schema reference.\n * @param typeDef - type to convert to json schema reference\n * @returns a schema describing the type\n * @hidden\n */\nfunction typeRef(typeDef: xdr.ScSpecTypeDef): JSONSchema7 {\n const t = typeDef.switch();\n const value = t.value;\n let ref;\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVal().value: {\n ref = \"Val\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBool().value: {\n return { type: \"boolean\" };\n }\n case xdr.ScSpecType.scSpecTypeVoid().value: {\n return { type: \"null\" };\n }\n case xdr.ScSpecType.scSpecTypeError().value: {\n ref = \"Error\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU32().value: {\n ref = \"U32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI32().value: {\n ref = \"I32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU64().value: {\n ref = \"U64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI64().value: {\n ref = \"I64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n ref = \"Timepoint\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n ref = \"Duration\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU128().value: {\n ref = \"U128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI128().value: {\n ref = \"I128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU256().value: {\n ref = \"U256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI256().value: {\n ref = \"I256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBytes().value: {\n ref = \"DataUrl\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeString().value: {\n ref = \"ScString\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeSymbol().value: {\n ref = \"ScSymbol\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeAddress().value: {\n ref = \"Address\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value: {\n ref = \"MuxedAddress\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeOption().value: {\n const opt = typeDef.option();\n return typeRef(opt.valueType());\n }\n case xdr.ScSpecType.scSpecTypeResult().value: {\n const result = typeDef.result();\n return typeRef(result.okType());\n }\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const arr = typeDef.vec();\n const reference = typeRef(arr.elementType());\n return {\n type: \"array\",\n items: reference,\n };\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = typeDef.map();\n const items = [typeRef(map.keyType()), typeRef(map.valueType())];\n return {\n type: \"array\",\n items: {\n type: \"array\",\n items,\n minItems: 2,\n maxItems: 2,\n },\n };\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tuple = typeDef.tuple();\n const minItems = tuple.valueTypes().length;\n const maxItems = minItems;\n const items = tuple.valueTypes().map(typeRef);\n return { type: \"array\", items, minItems, maxItems };\n }\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const arr = typeDef.bytesN();\n return {\n $ref: \"#/definitions/DataUrl\",\n maxLength: arr.n(),\n };\n }\n case xdr.ScSpecType.scSpecTypeUdt().value: {\n const udt = typeDef.udt();\n ref = udt.name().toString();\n break;\n }\n }\n return { $ref: `#/definitions/${ref}` };\n}\n\ntype Func = { input: JSONSchema7; output: JSONSchema7 };\n\nfunction isRequired(typeDef: xdr.ScSpecTypeDef): boolean {\n return typeDef.switch().value !== xdr.ScSpecType.scSpecTypeOption().value;\n}\n\nfunction argsAndRequired(\n input: { type: () => xdr.ScSpecTypeDef; name: () => string | Buffer }[],\n): { properties: object; required?: string[] } {\n const properties: any = {};\n const required: string[] = [];\n input.forEach((arg) => {\n const aType = arg.type();\n const name = arg.name().toString();\n properties[name] = typeRef(aType);\n if (isRequired(aType)) {\n required.push(name);\n }\n });\n const res: { properties: object; required?: string[] } = { properties };\n if (required.length > 0) {\n res.required = required;\n }\n return res;\n}\n\nfunction structToJsonSchema(udt: xdr.ScSpecUdtStructV0): object {\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n const items = fields.map((_, i) => typeRef(fields[i].type()));\n return {\n type: \"array\",\n items,\n minItems: fields.length,\n maxItems: fields.length,\n };\n }\n const description = udt.doc().toString();\n const { properties, required }: any = argsAndRequired(fields);\n return {\n description,\n properties,\n required,\n additionalProperties: false,\n type: \"object\",\n };\n}\n\nfunction functionToJsonSchema(func: xdr.ScSpecFunctionV0): Func {\n const { properties, required }: any = argsAndRequired(func.inputs());\n const args: any = {\n additionalProperties: false,\n properties,\n type: \"object\",\n };\n if (required?.length > 0) {\n args.required = required;\n }\n const input: Partial<JSONSchema7> = {\n properties: {\n args,\n },\n };\n const outputs = func.outputs();\n const output: Partial<JSONSchema7> =\n outputs.length > 0\n ? typeRef(outputs[0])\n : typeRef(xdr.ScSpecTypeDef.scSpecTypeVoid());\n const description = func.doc().toString();\n if (description.length > 0) {\n input.description = description;\n }\n input.additionalProperties = false;\n output.additionalProperties = false;\n return {\n input,\n output,\n };\n}\n\nfunction unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n switch (aCase.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const c = aCase.voidCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n },\n additionalProperties: false,\n required: [\"tag\"],\n });\n break;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const c = aCase.tupleCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n values: {\n type: \"array\",\n items: c.type().map(typeRef),\n },\n },\n required: [\"tag\", \"values\"],\n additionalProperties: false,\n });\n }\n }\n });\n\n const res: any = {\n oneOf,\n };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\n/**\n * Provides a ContractSpec class which can contains the XDR types defined by the contract.\n * This allows the class to be used to convert between native and raw `xdr.ScVal`s.\n *\n * Constructs a new ContractSpec from an array of XDR spec entries.\n *\n * @param entries - the XDR spec entries\n * @throws if entries is invalid\n *\n * @example\n * ```ts\n * const specEntries = [...]; // XDR spec entries of a smart contract\n * const contractSpec = new ContractSpec(specEntries);\n *\n * // Convert native value to ScVal\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n *\n * // Call contract\n * const resultScv = await callContract(contractId, 'funcName', scArgs);\n *\n * // Convert result ScVal back to native value\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n *\n * console.log(result); // {success: true}\n * ```\n */\nexport class Spec {\n /**\n * The XDR spec entries.\n */\n public entries: xdr.ScSpecEntry[] = [];\n\n /**\n * Generates a Spec instance from the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns A Promise that resolves to a Spec instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static fromWasm(wasm: Buffer): Spec {\n const spec = specFromWasm(wasm);\n return new Spec(spec);\n }\n\n /**\n * Generates a Spec instance from contract specs in any of the following forms:\n * - An XDR encoded stream of xdr.ScSpecEntry entries, the format of the spec\n * stored inside Wasm files.\n * - A base64 XDR encoded stream of xdr.ScSpecEntry entries.\n * - An array of xdr.ScSpecEntry.\n * - An array of base64 XDR encoded xdr.ScSpecEntry.\n *\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n constructor(entries: Buffer | string | xdr.ScSpecEntry[] | string[]) {\n if (Buffer.isBuffer(entries)) {\n this.entries = processSpecEntryStream(entries as Buffer);\n } else if (typeof entries === \"string\") {\n this.entries = processSpecEntryStream(Buffer.from(entries, \"base64\"));\n } else {\n if (entries.length === 0) {\n throw new Error(\"Contract spec must have at least one entry\");\n }\n const entry = entries[0];\n if (typeof entry === \"string\") {\n this.entries = (entries as string[]).map((s) =>\n xdr.ScSpecEntry.fromXDR(s, \"base64\"),\n );\n } else {\n this.entries = entries as xdr.ScSpecEntry[];\n }\n }\n }\n\n /**\n * Gets the XDR functions from the spec.\n * @returns all contract functions\n */\n funcs(): xdr.ScSpecFunctionV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value,\n )\n .map((entry) => entry.functionV0());\n }\n\n /**\n * Gets the XDR function spec for the given function name.\n *\n * @param name - the name of the function\n * @returns the function spec\n *\n * @throws if no function with the given name exists\n */\n getFunc(name: string): xdr.ScSpecFunctionV0 {\n const entry = this.findEntry(name);\n if (\n entry.switch().value !== xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value\n ) {\n throw new Error(`${name} is not a function`);\n }\n return entry.functionV0();\n }\n\n /**\n * Converts native JS arguments to ScVals for calling a contract function.\n *\n * @param name - the name of the function\n * @param args - the arguments object\n * @returns the converted arguments\n *\n * @throws if argument is missing or incorrect type\n *\n * @example\n * ```ts\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n * ```\n */\n funcArgsToScVals(name: string, args: object): xdr.ScVal[] {\n const fn = this.getFunc(name);\n return fn\n .inputs()\n .map((input) => this.nativeToScVal(readObj(args, input), input.type()));\n }\n\n /**\n * Converts the result ScVal of a function call to a native JS value.\n *\n * @param name - the name of the function\n * @param val_or_base64 - the result ScVal or base64 encoded string\n * @returns the converted native value\n *\n * @throws if return type mismatch or invalid input\n *\n * @example\n * ```ts\n * const resultScv = 'AAA=='; // Base64 encoded ScVal\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n * ```\n */\n funcResToNative(name: string, val_or_base64: xdr.ScVal | string): any {\n const val =\n typeof val_or_base64 === \"string\"\n ? xdr.ScVal.fromXDR(val_or_base64, \"base64\")\n : val_or_base64;\n const func = this.getFunc(name);\n const outputs = func.outputs();\n if (outputs.length === 0) {\n const type = val.switch();\n if (type.value !== xdr.ScValType.scvVoid().value) {\n throw new Error(`Expected void, got ${type.name}`);\n }\n return null;\n }\n if (outputs.length > 1) {\n throw new Error(`Multiple outputs not supported`);\n }\n const output = outputs[0];\n if (output.switch().value === xdr.ScSpecType.scSpecTypeResult().value) {\n if (val.switch().value === xdr.ScValType.scvError().value) {\n return new Err({ message: val.error().toXDR(\"base64\") });\n }\n return new Ok(this.scValToNative(val, output.result().okType()));\n }\n return this.scValToNative(val, output);\n }\n\n /**\n * Finds the XDR spec entry for the given name.\n *\n * @param name - the name to find\n * @returns the entry\n *\n * @throws if no entry with the given name exists\n */\n findEntry(name: string): xdr.ScSpecEntry {\n const entry = this.entries.find(\n (e) => e.value().name().toString() === name,\n );\n if (!entry) {\n throw new Error(`no such entry: ${name}`);\n }\n return entry;\n }\n\n /**\n * Converts a native JS value to an ScVal based on the given type.\n *\n * @param val - the native JS value\n * @param ty - (optional) the expected type\n * @returns the converted ScVal\n *\n * @throws if value cannot be converted to the given type\n */\n nativeToScVal(val: any, ty: xdr.ScSpecTypeDef): xdr.ScVal {\n const t: xdr.ScSpecType = ty.switch();\n const value = t.value;\n if (t.value === xdr.ScSpecType.scSpecTypeUdt().value) {\n const udt = ty.udt();\n return this.nativeToUdt(val, udt.name().toString());\n }\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n const opt = ty.option();\n if (val === null || val === undefined) {\n return xdr.ScVal.scvVoid();\n }\n return this.nativeToScVal(val, opt.valueType());\n }\n switch (typeof val) {\n case \"object\": {\n if (val === null) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was null`,\n );\n }\n }\n\n if (val instanceof xdr.ScVal) {\n return val; // should we copy?\n }\n\n if (val instanceof Address) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.toScVal();\n }\n\n if (val instanceof Contract) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.address().toScVal();\n }\n\n if (val instanceof Uint8Array || Buffer.isBuffer(val)) {\n const copy = Uint8Array.from(val);\n switch (value) {\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const bytesN = ty.bytesN();\n if (copy.length !== bytesN.n()) {\n throw new TypeError(\n `expected ${bytesN.n()} bytes, but got ${copy.length}`,\n );\n }\n //@ts-ignore\n return xdr.ScVal.scvBytes(copy);\n }\n case xdr.ScSpecType.scSpecTypeBytes().value:\n //@ts-ignore\n return xdr.ScVal.scvBytes(copy);\n default:\n throw new TypeError(\n `invalid type (${ty}) specified for Bytes and BytesN`,\n );\n }\n }\n if (Array.isArray(val)) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const vec = ty.vec();\n const elementType = vec.elementType();\n return xdr.ScVal.scvVec(\n val.map((v) => this.nativeToScVal(v, elementType)),\n );\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tup = ty.tuple();\n const valTypes = tup.valueTypes();\n if (val.length !== valTypes.length) {\n throw new TypeError(\n `Tuple expects ${valTypes.length} values, but ${val.length} were provided`,\n );\n }\n return xdr.ScVal.scvVec(\n val.map((v, i) => this.nativeToScVal(v, valTypes[i])),\n );\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = ty.map();\n const keyType = map.keyType();\n const valueType = map.valueType();\n return xdr.ScVal.scvMap(\n val.map((entry) => {\n const key = this.nativeToScVal(entry[0], keyType);\n const mapVal = this.nativeToScVal(entry[1], valueType);\n return new xdr.ScMapEntry({ key, val: mapVal });\n }),\n );\n }\n\n default:\n throw new TypeError(\n `Type ${ty} was not vec, but value was Array`,\n );\n }\n }\n if (val.constructor === Map) {\n if (value !== xdr.ScSpecType.scSpecTypeMap().value) {\n throw new TypeError(`Type ${ty} was not map, but value was Map`);\n }\n const scMap = ty.map();\n const map = val as Map<any, any>;\n const entries: xdr.ScMapEntry[] = [];\n const values = map.entries();\n let res = values.next();\n while (!res.done) {\n const [k, v] = res.value;\n const key = this.nativeToScVal(k, scMap.keyType());\n const mapval = this.nativeToScVal(v, scMap.valueType());\n entries.push(new xdr.ScMapEntry({ key, val: mapval }));\n res = values.next();\n }\n return xdr.ScVal.scvMap(entries);\n }\n\n if ((val.constructor?.name ?? \"\") !== \"Object\") {\n throw new TypeError(\n `cannot interpret ${\n val.constructor?.name\n } value as ScVal (${JSON.stringify(val)})`,\n );\n }\n\n throw new TypeError(\n `Received object ${val} did not match the provided type ${ty}`,\n );\n }\n\n case \"number\":\n case \"bigint\": {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeU32().value:\n if (\n BigInt(val) < BigInt(xdr.Uint32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Uint32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for U32`);\n }\n return xdr.ScVal.scvU32(Number(val));\n case xdr.ScSpecType.scSpecTypeI32().value:\n if (\n // TODO: remove the `-` cast on the min value once js-xdr fixes the issue where it treats the min value as unsigned\n BigInt(val) < -BigInt(xdr.Int32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Int32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for I32`);\n }\n return xdr.ScVal.scvI32(Number(val));\n case xdr.ScSpecType.scSpecTypeU64().value:\n case xdr.ScSpecType.scSpecTypeI64().value:\n case xdr.ScSpecType.scSpecTypeU128().value:\n case xdr.ScSpecType.scSpecTypeI128().value:\n case xdr.ScSpecType.scSpecTypeU256().value:\n case xdr.ScSpecType.scSpecTypeI256().value:\n case xdr.ScSpecType.scSpecTypeTimepoint().value:\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n const intType = t.name.substring(10).toLowerCase() as ScIntType;\n return new XdrLargeInt(intType, val as bigint).toScVal();\n }\n default:\n throw new TypeError(`invalid type (${ty}) specified for integer`);\n }\n }\n case \"string\":\n return stringToScVal(val, t);\n\n case \"boolean\": {\n if (value !== xdr.ScSpecType.scSpecTypeBool().value) {\n throw TypeError(`Type ${ty} was not bool, but value was bool`);\n }\n return xdr.ScVal.scvBool(val);\n }\n case \"undefined\": {\n if (!ty) {\n return xdr.ScVal.scvVoid();\n }\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n case xdr.ScSpecType.scSpecTypeOption().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was undefined`,\n );\n }\n }\n\n case \"function\": // FIXME: Is this too helpful?\n return this.nativeToScVal(val(), ty);\n\n default:\n throw new TypeError(`failed to convert typeof ${typeof val} (${val})`);\n }\n }\n\n private nativeToUdt(val: any, name: string): xdr.ScVal {\n const entry = this.findEntry(name);\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n if (typeof val !== \"number\") {\n throw new TypeError(\n `expected number for enum ${name}, but got ${typeof val}`,\n );\n }\n return this.nativeToEnum(val as number, entry.udtEnumV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.nativeToStruct(val, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.nativeToUnion(val, entry.udtUnionV0());\n default:\n throw new Error(`failed to parse udt ${name}`);\n }\n }\n\n private nativeToUnion(\n val: Union<any>,\n union_: xdr.ScSpecUdtUnionV0,\n ): xdr.ScVal {\n const entryName = val.tag;\n const caseFound = union_.cases().find((entry) => {\n const caseN = entry.value().name().toString();\n return caseN === entryName;\n });\n if (!caseFound) {\n throw new TypeError(`no such enum entry: ${entryName} in ${union_}`);\n }\n const key = xdr.ScVal.scvSymbol(entryName);\n switch (caseFound.switch()) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0(): {\n return xdr.ScVal.scvVec([key]);\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0(): {\n const types = caseFound.tupleCase().type();\n if (Array.isArray(val.values)) {\n if (val.values.length !== types.length) {\n throw new TypeError(\n `union ${union_} expects ${types.length} values, but got ${val.values.length}`,\n );\n }\n const scvals = val.values.map((v, i) =>\n this.nativeToScVal(v, types[i]),\n );\n scvals.unshift(key);\n return xdr.ScVal.scvVec(scvals);\n }\n throw new Error(`failed to parse union case ${caseFound} with ${val}`);\n }\n default:\n throw new Error(`failed to parse union ${union_} with ${val}`);\n }\n }\n\n private nativeToStruct(val: any, struct: xdr.ScSpecUdtStructV0): xdr.ScVal {\n const fields = struct.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n return xdr.ScVal.scvVec(\n fields.map((_, i) => this.nativeToScVal(val[i], fields[i].type())),\n );\n }\n return xdr.ScVal.scvMap(\n fields.map((field) => {\n const name = field.name().toString();\n return new xdr.ScMapEntry({\n key: this.nativeToScVal(name, xdr.ScSpecTypeDef.scSpecTypeSymbol()),\n val: this.nativeToScVal(val[name], field.type()),\n });\n }),\n );\n }\n\n private nativeToEnum(val: number, enum_: xdr.ScSpecUdtEnumV0): xdr.ScVal {\n if (enum_.cases().some((entry) => entry.value() === val)) {\n return xdr.ScVal.scvU32(val);\n }\n throw new TypeError(`no such enum entry: ${val} in ${enum_}`);\n }\n\n /**\n * Converts an base64 encoded ScVal back to a native JS value based on the given type.\n *\n * @param scv - the base64 encoded ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValStrToNative<T>(scv: string, typeDef: xdr.ScSpecTypeDef): T {\n return this.scValToNative<T>(xdr.ScVal.fromXDR(scv, \"base64\"), typeDef);\n }\n\n /**\n * Converts an ScVal back to a native JS value based on the given type.\n *\n * @param scv - the ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValToNative<T>(scv: xdr.ScVal, typeDef: xdr.ScSpecTypeDef): T {\n const t = typeDef.switch();\n const value = t.value;\n\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n default:\n return this.scValToNative(scv, typeDef.option().valueType());\n }\n }\n\n if (value === xdr.ScSpecType.scSpecTypeUdt().value) {\n return this.scValUdtToNative(scv, typeDef.udt());\n }\n\n // we use the verbose xdr.ScValType.<type>.value form here because it's faster\n // than string comparisons and the underlying constants never need to be\n // updated\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n\n // these can be converted to bigints directly\n case xdr.ScValType.scvU64().value:\n case xdr.ScValType.scvI64().value:\n case xdr.ScValType.scvTimepoint().value:\n case xdr.ScValType.scvDuration().value:\n // these can be parsed by internal abstractions note that this can also\n // handle the above two cases, but it's not as efficient (another\n // type-check, parsing, etc.)\n case xdr.ScValType.scvU128().value:\n case xdr.ScValType.scvI128().value:\n case xdr.ScValType.scvU256().value:\n case xdr.ScValType.scvI256().value:\n return scValToBigInt(scv) as T;\n\n case xdr.ScValType.scvVec().value: {\n if (value === xdr.ScSpecType.scSpecTypeVec().value) {\n const vec = typeDef.vec();\n return (scv.vec() ?? []).map((elm) =>\n this.scValToNative(elm, vec.elementType()),\n ) as T;\n }\n if (value === xdr.ScSpecType.scSpecTypeTuple().value) {\n const tuple = typeDef.tuple();\n const valTypes = tuple.valueTypes();\n return (scv.vec() ?? []).map((elm, i) =>\n this.scValToNative(elm, valTypes[i]),\n ) as T;\n }\n throw new TypeError(`Type ${typeDef} was not vec, but ${scv} is`);\n }\n\n case xdr.ScValType.scvAddress().value:\n return Address.fromScVal(scv).toString() as T;\n\n case xdr.ScValType.scvMap().value: {\n const map = scv.map() ?? [];\n if (value === xdr.ScSpecType.scSpecTypeMap().value) {\n const typed = typeDef.map();\n const keyType = typed.keyType();\n const valueType = typed.valueType();\n const res = map.map((entry) => [\n this.scValToNative(entry.key(), keyType),\n this.scValToNative(entry.val(), valueType),\n ]) as T;\n return res;\n }\n throw new TypeError(\n `ScSpecType ${t.name} was not map, but ${JSON.stringify(\n scv,\n null,\n 2,\n )} is`,\n );\n }\n\n // these return the primitive type directly\n case xdr.ScValType.scvBool().value:\n case xdr.ScValType.scvU32().value:\n case xdr.ScValType.scvI32().value:\n case xdr.ScValType.scvBytes().value:\n return scv.value() as T;\n\n case xdr.ScValType.scvString().value:\n case xdr.ScValType.scvSymbol().value: {\n if (\n value !== xdr.ScSpecType.scSpecTypeString().value &&\n value !== xdr.ScSpecType.scSpecTypeSymbol().value\n ) {\n throw new Error(\n `ScSpecType ${\n t.name\n } was not string or symbol, but ${JSON.stringify(scv, null, 2)} is`,\n );\n }\n return scv.value()?.toString() as T;\n }\n\n // in the fallthrough case, just return the underlying value directly\n default:\n throw new TypeError(\n `failed to convert ${JSON.stringify(\n scv,\n null,\n 2,\n )} to native type from type ${t.name}`,\n );\n }\n }\n\n private scValUdtToNative(scv: xdr.ScVal, udt: xdr.ScSpecTypeUdt): any {\n const entry = this.findEntry(udt.name().toString());\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n return this.enumToNative(scv);\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.structToNative(scv, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.unionToNative(scv, entry.udtUnionV0());\n default:\n throw new Error(\n `failed to parse udt ${udt.name().toString()}: ${entry}`,\n );\n }\n }\n\n private unionToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtUnionV0): any {\n const vec = val.vec();\n if (!vec) {\n throw new Error(`${JSON.stringify(val, null, 2)} is not a vec`);\n }\n if (vec.length === 0 && udt.cases.length !== 0) {\n throw new Error(\n `${val} has length 0, but the there are at least one case in the union`,\n );\n }\n const name = vec[0].sym().toString();\n if (vec[0].switch().value !== xdr.ScValType.scvSymbol().value) {\n throw new Error(`${vec[0]} is not a symbol`);\n }\n const entry = udt.cases().find(findCase(name));\n if (!entry) {\n throw new Error(\n `failed to find entry ${name} in union ${udt.name().toString()}`,\n );\n }\n const res: Union<any> = { tag: name };\n if (\n entry.switch().value ===\n xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value\n ) {\n const tuple = entry.tupleCase();\n const ty = tuple.type();\n const values = ty.map((e, i) => this.scValToNative(vec![i + 1], e));\n res.values = values;\n }\n return res;\n }\n\n private structToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtStructV0): any {\n const res: any = {};\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n const r = val\n .vec()\n ?.map((entry, i) => this.scValToNative(entry, fields[i].type()));\n return r;\n }\n val.map()?.forEach((entry, i) => {\n const field = fields[i];\n res[field.name().toString()] = this.scValToNative(\n entry.val(),\n field.type(),\n );\n });\n return res;\n }\n\n private enumToNative(scv: xdr.ScVal): number {\n if (scv.switch().value !== xdr.ScValType.scvU32().value) {\n throw new Error(`Enum must have a u32 value`);\n }\n const num = scv.u32();\n return num;\n }\n\n /**\n * Gets the XDR error cases from the spec.\n *\n * @returns all contract functions\n *\n */\n errorCases(): xdr.ScSpecUdtErrorEnumCaseV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value,\n )\n .flatMap((entry) => (entry.value() as xdr.ScSpecUdtErrorEnumV0).cases());\n }\n\n /**\n * Converts the contract spec to a JSON schema.\n *\n * If `funcName` is provided, the schema will be a reference to the function schema.\n *\n * @param funcName - (optional) the name of the function to convert\n * @returns the converted JSON schema\n *\n * @throws if the contract spec is invalid\n */\n jsonSchema(funcName?: string): JSONSchema7 {\n const definitions: { [key: string]: JSONSchema7Definition } = {};\n\n this.entries.forEach((entry) => {\n switch (entry.switch().value) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value: {\n const udt = entry.udtEnumV0();\n definitions[udt.name().toString()] = enumToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value: {\n const udt = entry.udtStructV0();\n definitions[udt.name().toString()] = structToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value: {\n const udt = entry.udtUnionV0();\n definitions[udt.name().toString()] = unionToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value: {\n const fn = entry.functionV0();\n const fnName = fn.name().toString();\n const { input } = functionToJsonSchema(fn);\n // @ts-ignore\n definitions[fnName] = input;\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value: {\n // console.debug(\"Error enums not supported yet\");\n }\n }\n });\n\n const res: JSONSchema7 = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: { ...PRIMITIVE_DEFINITONS, ...definitions },\n };\n if (funcName) {\n res.$ref = `#/definitions/${funcName}`;\n }\n return res;\n }\n}\n"],"names":["xdr","Address","XdrLargeInt","Buffer","specFromWasm","processSpecEntryStream","Err","Ok","Contract","scValToBigInt"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spec.js","sources":["../../../src/contract/spec.ts"],"sourcesContent":["import type { JSONSchema7, JSONSchema7Definition } from \"json-schema\";\nimport {\n type ScIntType,\n XdrLargeInt,\n xdr,\n Address,\n Contract,\n scValToBigInt,\n} from \"../base/index.js\";\nimport { Ok, Err } from \"./rust_result.js\";\nimport { processSpecEntryStream } from \"./utils.js\";\nimport { specFromWasm } from \"./wasm_spec_parser.js\";\n\nexport interface Union<T> {\n tag: string;\n values?: T;\n}\n\nfunction enumToJsonSchema(udt: xdr.ScSpecUdtEnumV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n const title = aCase.name().toString();\n const desc = aCase.doc().toString();\n oneOf.push({\n description: desc,\n title,\n enum: [aCase.value()],\n type: \"number\",\n });\n });\n const res: any = { oneOf };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\nfunction isNumeric(field: xdr.ScSpecUdtStructFieldV0) {\n return /^\\d+$/.test(field.name().toString());\n}\n\nfunction readObj(args: object, input: xdr.ScSpecFunctionInputV0): any {\n const inputName = input.name().toString();\n const entry = Object.entries(args).find(([name]) => name === inputName);\n if (!entry) {\n throw new Error(`Missing field ${inputName}`);\n }\n return entry[1];\n}\n\nfunction findCase(name: string) {\n return function matches(entry: xdr.ScSpecUdtUnionCaseV0) {\n switch (entry.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const tuple = entry.tupleCase();\n return tuple.name().toString() === name;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const voidCase = entry.voidCase();\n return voidCase.name().toString() === name;\n }\n default:\n return false;\n }\n };\n}\n\nfunction stringToScVal(str: string, ty: xdr.ScSpecType): xdr.ScVal {\n switch (ty.value) {\n case xdr.ScSpecType.scSpecTypeString().value:\n return xdr.ScVal.scvString(str);\n case xdr.ScSpecType.scSpecTypeSymbol().value:\n return xdr.ScVal.scvSymbol(str);\n case xdr.ScSpecType.scSpecTypeAddress().value:\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value:\n return Address.fromString(str).toScVal();\n case xdr.ScSpecType.scSpecTypeU64().value:\n return new XdrLargeInt(\"u64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI64().value:\n return new XdrLargeInt(\"i64\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU128().value:\n return new XdrLargeInt(\"u128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI128().value:\n return new XdrLargeInt(\"i128\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeU256().value:\n return new XdrLargeInt(\"u256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeI256().value:\n return new XdrLargeInt(\"i256\", str).toScVal();\n case xdr.ScSpecType.scSpecTypeBytes().value:\n case xdr.ScSpecType.scSpecTypeBytesN().value:\n return xdr.ScVal.scvBytes(Buffer.from(str, \"base64\"));\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n return xdr.ScVal.scvTimepoint(new xdr.Uint64(str));\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n return xdr.ScVal.scvDuration(new xdr.Uint64(str));\n }\n default:\n throw new TypeError(`invalid type ${ty.name} specified for string value`);\n }\n}\n\nconst PRIMITIVE_DEFINITONS: { [key: string]: JSONSchema7Definition } = {\n U32: {\n type: \"integer\",\n minimum: 0,\n maximum: 4294967295,\n },\n I32: {\n type: \"integer\",\n minimum: -2147483648,\n maximum: 2147483647,\n },\n U64: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Timepoint: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n Duration: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 20, // 64-bit max value has 20 digits\n },\n I64: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 21, // Includes additional digit for the potential '-'\n },\n U128: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 39, // 128-bit max value has 39 digits\n },\n I128: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 40, // Includes additional digit for the potential '-'\n },\n U256: {\n type: \"string\",\n pattern: \"^([1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 78, // 256-bit max value has 78 digits\n },\n I256: {\n type: \"string\",\n pattern: \"^(-?[1-9][0-9]*|0)$\",\n minLength: 1,\n maxLength: 79, // Includes additional digit for the potential '-'\n },\n Address: {\n type: \"string\",\n format: \"address\",\n description: \"Address can be a public key or contract id\",\n },\n MuxedAddress: {\n type: \"string\",\n format: \"address\",\n description:\n \"Stellar public key with M prefix combining a G address and unique ID\",\n },\n ScString: {\n type: \"string\",\n description: \"ScString is a string\",\n },\n ScSymbol: {\n type: \"string\",\n description: \"ScSymbol is a string\",\n },\n DataUrl: {\n type: \"string\",\n pattern:\n \"^(?:[A-Za-z0-9+\\\\/]{4})*(?:[A-Za-z0-9+\\\\/]{2}==|[A-Za-z0-9+\\\\/]{3}=)?$\",\n },\n};\n\n/**\n * Converts an XDR type definition to a JSON schema reference.\n * @param typeDef - type to convert to json schema reference\n * @returns a schema describing the type\n * @hidden\n */\nfunction typeRef(typeDef: xdr.ScSpecTypeDef): JSONSchema7 {\n const t = typeDef.switch();\n const value = t.value;\n let ref;\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVal().value: {\n ref = \"Val\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBool().value: {\n return { type: \"boolean\" };\n }\n case xdr.ScSpecType.scSpecTypeVoid().value: {\n return { type: \"null\" };\n }\n case xdr.ScSpecType.scSpecTypeError().value: {\n ref = \"Error\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU32().value: {\n ref = \"U32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI32().value: {\n ref = \"I32\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU64().value: {\n ref = \"U64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI64().value: {\n ref = \"I64\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeTimepoint().value: {\n ref = \"Timepoint\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n ref = \"Duration\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU128().value: {\n ref = \"U128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI128().value: {\n ref = \"I128\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeU256().value: {\n ref = \"U256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeI256().value: {\n ref = \"I256\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeBytes().value: {\n ref = \"DataUrl\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeString().value: {\n ref = \"ScString\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeSymbol().value: {\n ref = \"ScSymbol\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeAddress().value: {\n ref = \"Address\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeMuxedAddress().value: {\n ref = \"MuxedAddress\";\n break;\n }\n case xdr.ScSpecType.scSpecTypeOption().value: {\n const opt = typeDef.option();\n return typeRef(opt.valueType());\n }\n case xdr.ScSpecType.scSpecTypeResult().value: {\n const result = typeDef.result();\n return typeRef(result.okType());\n }\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const arr = typeDef.vec();\n const reference = typeRef(arr.elementType());\n return {\n type: \"array\",\n items: reference,\n };\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = typeDef.map();\n const items = [typeRef(map.keyType()), typeRef(map.valueType())];\n return {\n type: \"array\",\n items: {\n type: \"array\",\n items,\n minItems: 2,\n maxItems: 2,\n },\n };\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tuple = typeDef.tuple();\n const minItems = tuple.valueTypes().length;\n const maxItems = minItems;\n const items = tuple.valueTypes().map(typeRef);\n return { type: \"array\", items, minItems, maxItems };\n }\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const arr = typeDef.bytesN();\n return {\n $ref: \"#/definitions/DataUrl\",\n maxLength: arr.n(),\n };\n }\n case xdr.ScSpecType.scSpecTypeUdt().value: {\n const udt = typeDef.udt();\n ref = udt.name().toString();\n break;\n }\n }\n return { $ref: `#/definitions/${ref}` };\n}\n\ntype Func = { input: JSONSchema7; output: JSONSchema7 };\n\nfunction isRequired(typeDef: xdr.ScSpecTypeDef): boolean {\n return typeDef.switch().value !== xdr.ScSpecType.scSpecTypeOption().value;\n}\n\nfunction argsAndRequired(\n input: { type: () => xdr.ScSpecTypeDef; name: () => string | Buffer }[],\n): { properties: object; required?: string[] } {\n const properties: any = {};\n const required: string[] = [];\n input.forEach((arg) => {\n const aType = arg.type();\n const name = arg.name().toString();\n properties[name] = typeRef(aType);\n if (isRequired(aType)) {\n required.push(name);\n }\n });\n const res: { properties: object; required?: string[] } = { properties };\n if (required.length > 0) {\n res.required = required;\n }\n return res;\n}\n\nfunction structToJsonSchema(udt: xdr.ScSpecUdtStructV0): object {\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n const items = fields.map((_, i) => typeRef(fields[i].type()));\n return {\n type: \"array\",\n items,\n minItems: fields.length,\n maxItems: fields.length,\n };\n }\n const description = udt.doc().toString();\n const { properties, required }: any = argsAndRequired(fields);\n return {\n description,\n properties,\n required,\n additionalProperties: false,\n type: \"object\",\n };\n}\n\nfunction functionToJsonSchema(func: xdr.ScSpecFunctionV0): Func {\n const { properties, required }: any = argsAndRequired(func.inputs());\n const args: any = {\n additionalProperties: false,\n properties,\n type: \"object\",\n };\n if (required?.length > 0) {\n args.required = required;\n }\n const input: Partial<JSONSchema7> = {\n properties: {\n args,\n },\n };\n const outputs = func.outputs();\n const output: Partial<JSONSchema7> =\n outputs.length > 0\n ? typeRef(outputs[0])\n : typeRef(xdr.ScSpecTypeDef.scSpecTypeVoid());\n const description = func.doc().toString();\n if (description.length > 0) {\n input.description = description;\n }\n input.additionalProperties = false;\n output.additionalProperties = false;\n return {\n input,\n output,\n };\n}\n\nfunction unionToJsonSchema(udt: xdr.ScSpecUdtUnionV0): any {\n const description = udt.doc().toString();\n const cases = udt.cases();\n const oneOf: any[] = [];\n cases.forEach((aCase) => {\n switch (aCase.switch().value) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0().value: {\n const c = aCase.voidCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n },\n additionalProperties: false,\n required: [\"tag\"],\n });\n break;\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value: {\n const c = aCase.tupleCase();\n const title = c.name().toString();\n oneOf.push({\n type: \"object\",\n title,\n properties: {\n tag: title,\n values: {\n type: \"array\",\n items: c.type().map(typeRef),\n },\n },\n required: [\"tag\", \"values\"],\n additionalProperties: false,\n });\n }\n }\n });\n\n const res: any = {\n oneOf,\n };\n if (description.length > 0) {\n res.description = description;\n }\n return res;\n}\n\n/**\n * Provides a ContractSpec class which can contains the XDR types defined by the contract.\n * This allows the class to be used to convert between native and raw `xdr.ScVal`s.\n *\n * Constructs a new ContractSpec from an array of XDR spec entries.\n *\n * @param entries - the XDR spec entries\n * @throws if entries is invalid\n *\n * @example\n * ```ts\n * const specEntries = [...]; // XDR spec entries of a smart contract\n * const contractSpec = new ContractSpec(specEntries);\n *\n * // Convert native value to ScVal\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n *\n * // Call contract\n * const resultScv = await callContract(contractId, 'funcName', scArgs);\n *\n * // Convert result ScVal back to native value\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n *\n * console.log(result); // {success: true}\n * ```\n */\nexport class Spec {\n /**\n * The XDR spec entries.\n */\n public entries: xdr.ScSpecEntry[] = [];\n\n /**\n * Generates a Spec instance from the contract's wasm binary.\n *\n * @param wasm - The contract's wasm binary as a Buffer.\n * @returns A Promise that resolves to a Spec instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n static fromWasm(wasm: Buffer): Spec {\n const spec = specFromWasm(wasm);\n return new Spec(spec);\n }\n\n /**\n * Generates a Spec instance from contract specs in any of the following forms:\n * - An XDR encoded stream of xdr.ScSpecEntry entries, the format of the spec\n * stored inside Wasm files.\n * - A base64 XDR encoded stream of xdr.ScSpecEntry entries.\n * - An array of xdr.ScSpecEntry.\n * - An array of base64 XDR encoded xdr.ScSpecEntry.\n *\n * @returns A Promise that resolves to a Client instance.\n * @throws If the contract spec cannot be obtained from the provided wasm binary.\n */\n constructor(entries: Buffer | string | xdr.ScSpecEntry[] | string[]) {\n if (Buffer.isBuffer(entries)) {\n this.entries = processSpecEntryStream(entries as Buffer);\n } else if (typeof entries === \"string\") {\n this.entries = processSpecEntryStream(Buffer.from(entries, \"base64\"));\n } else {\n if (entries.length === 0) {\n throw new Error(\"Contract spec must have at least one entry\");\n }\n const entry = entries[0];\n if (typeof entry === \"string\") {\n this.entries = (entries as string[]).map((s) =>\n xdr.ScSpecEntry.fromXDR(s, \"base64\"),\n );\n } else {\n this.entries = entries as xdr.ScSpecEntry[];\n }\n }\n }\n\n /**\n * Gets the XDR functions from the spec.\n * @returns all contract functions\n */\n funcs(): xdr.ScSpecFunctionV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value,\n )\n .map((entry) => entry.functionV0());\n }\n\n /**\n * Gets the XDR function spec for the given function name.\n *\n * @param name - the name of the function\n * @returns the function spec\n *\n * @throws if no function with the given name exists\n */\n getFunc(name: string): xdr.ScSpecFunctionV0 {\n const entry = this.findEntry(name);\n if (\n entry.switch().value !== xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value\n ) {\n throw new Error(`${name} is not a function`);\n }\n return entry.functionV0();\n }\n\n /**\n * Converts native JS arguments to ScVals for calling a contract function.\n *\n * @param name - the name of the function\n * @param args - the arguments object\n * @returns the converted arguments\n *\n * @throws if argument is missing or incorrect type\n *\n * @example\n * ```ts\n * const args = {\n * arg1: 'value1',\n * arg2: 1234\n * };\n * const scArgs = contractSpec.funcArgsToScVals('funcName', args);\n * ```\n */\n funcArgsToScVals(name: string, args: object): xdr.ScVal[] {\n const fn = this.getFunc(name);\n return fn\n .inputs()\n .map((input) => this.nativeToScVal(readObj(args, input), input.type()));\n }\n\n /**\n * Converts the result ScVal of a function call to a native JS value.\n *\n * @param name - the name of the function\n * @param val_or_base64 - the result ScVal or base64 encoded string\n * @returns the converted native value\n *\n * @throws if return type mismatch or invalid input\n *\n * @example\n * ```ts\n * const resultScv = 'AAA=='; // Base64 encoded ScVal\n * const result = contractSpec.funcResToNative('funcName', resultScv);\n * ```\n */\n funcResToNative(name: string, val_or_base64: xdr.ScVal | string): any {\n const val =\n typeof val_or_base64 === \"string\"\n ? xdr.ScVal.fromXDR(val_or_base64, \"base64\")\n : val_or_base64;\n const func = this.getFunc(name);\n const outputs = func.outputs();\n if (outputs.length === 0) {\n const type = val.switch();\n if (type.value !== xdr.ScValType.scvVoid().value) {\n throw new Error(`Expected void, got ${type.name}`);\n }\n return null;\n }\n if (outputs.length > 1) {\n throw new Error(`Multiple outputs not supported`);\n }\n const output = outputs[0];\n if (output.switch().value === xdr.ScSpecType.scSpecTypeResult().value) {\n if (val.switch().value === xdr.ScValType.scvError().value) {\n return new Err({ message: val.error().toXDR(\"base64\") });\n }\n return new Ok(this.scValToNative(val, output.result().okType()));\n }\n return this.scValToNative(val, output);\n }\n\n /**\n * Finds the XDR spec entry for the given name.\n *\n * @param name - the name to find\n * @returns the entry\n *\n * @throws if no entry with the given name exists\n */\n findEntry(name: string): xdr.ScSpecEntry {\n const entry = this.entries.find(\n (e) => e.value().name().toString() === name,\n );\n if (!entry) {\n throw new Error(`no such entry: ${name}`);\n }\n return entry;\n }\n\n /**\n * Converts a native JS value to an ScVal based on the given type.\n *\n * @param val - the native JS value\n * @param ty - (optional) the expected type\n * @returns the converted ScVal\n *\n * @throws if value cannot be converted to the given type\n */\n nativeToScVal(val: any, ty: xdr.ScSpecTypeDef): xdr.ScVal {\n const t: xdr.ScSpecType = ty.switch();\n const value = t.value;\n if (t.value === xdr.ScSpecType.scSpecTypeUdt().value) {\n const udt = ty.udt();\n return this.nativeToUdt(val, udt.name().toString());\n }\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n const opt = ty.option();\n if (val === null || val === undefined) {\n return xdr.ScVal.scvVoid();\n }\n return this.nativeToScVal(val, opt.valueType());\n }\n switch (typeof val) {\n case \"object\": {\n if (val === null) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was null`,\n );\n }\n }\n\n if (val instanceof xdr.ScVal) {\n return val; // should we copy?\n }\n\n if (val instanceof Address) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.toScVal();\n }\n\n if (val instanceof Contract) {\n if (ty.switch().value !== xdr.ScSpecType.scSpecTypeAddress().value) {\n throw new TypeError(\n `Type ${ty} was not address, but value was Address`,\n );\n }\n return val.address().toScVal();\n }\n\n if (val instanceof Uint8Array || Buffer.isBuffer(val)) {\n const copy = Uint8Array.from(val);\n switch (value) {\n case xdr.ScSpecType.scSpecTypeBytesN().value: {\n const bytesN = ty.bytesN();\n if (copy.length !== bytesN.n()) {\n throw new TypeError(\n `expected ${bytesN.n()} bytes, but got ${copy.length}`,\n );\n }\n //@ts-expect-error scvBytes' generated type expects Buffer; copy is a Uint8Array accepted at runtime\n return xdr.ScVal.scvBytes(copy);\n }\n case xdr.ScSpecType.scSpecTypeBytes().value:\n //@ts-expect-error scvBytes' generated type expects Buffer; copy is a Uint8Array accepted at runtime\n return xdr.ScVal.scvBytes(copy);\n default:\n throw new TypeError(\n `invalid type (${ty}) specified for Bytes and BytesN`,\n );\n }\n }\n if (Array.isArray(val)) {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVec().value: {\n const vec = ty.vec();\n const elementType = vec.elementType();\n return xdr.ScVal.scvVec(\n val.map((v) => this.nativeToScVal(v, elementType)),\n );\n }\n case xdr.ScSpecType.scSpecTypeTuple().value: {\n const tup = ty.tuple();\n const valTypes = tup.valueTypes();\n if (val.length !== valTypes.length) {\n throw new TypeError(\n `Tuple expects ${valTypes.length} values, but ${val.length} were provided`,\n );\n }\n return xdr.ScVal.scvVec(\n val.map((v, i) => this.nativeToScVal(v, valTypes[i])),\n );\n }\n case xdr.ScSpecType.scSpecTypeMap().value: {\n const map = ty.map();\n const keyType = map.keyType();\n const valueType = map.valueType();\n return xdr.ScVal.scvMap(\n val.map((entry) => {\n const key = this.nativeToScVal(entry[0], keyType);\n const mapVal = this.nativeToScVal(entry[1], valueType);\n return new xdr.ScMapEntry({ key, val: mapVal });\n }),\n );\n }\n\n default:\n throw new TypeError(\n `Type ${ty} was not vec, but value was Array`,\n );\n }\n }\n if (val.constructor === Map) {\n if (value !== xdr.ScSpecType.scSpecTypeMap().value) {\n throw new TypeError(`Type ${ty} was not map, but value was Map`);\n }\n const scMap = ty.map();\n const map = val as Map<any, any>;\n const entries: xdr.ScMapEntry[] = [];\n const values = map.entries();\n let res = values.next();\n while (!res.done) {\n const [k, v] = res.value;\n const key = this.nativeToScVal(k, scMap.keyType());\n const mapval = this.nativeToScVal(v, scMap.valueType());\n entries.push(new xdr.ScMapEntry({ key, val: mapval }));\n res = values.next();\n }\n return xdr.ScVal.scvMap(entries);\n }\n\n if ((val.constructor?.name ?? \"\") !== \"Object\") {\n throw new TypeError(\n `cannot interpret ${\n val.constructor?.name\n } value as ScVal (${JSON.stringify(val)})`,\n );\n }\n\n throw new TypeError(\n `Received object ${val} did not match the provided type ${ty}`,\n );\n }\n\n case \"number\":\n case \"bigint\": {\n switch (value) {\n case xdr.ScSpecType.scSpecTypeU32().value:\n if (\n BigInt(val) < BigInt(xdr.Uint32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Uint32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for U32`);\n }\n return xdr.ScVal.scvU32(Number(val));\n case xdr.ScSpecType.scSpecTypeI32().value:\n if (\n // TODO: remove the `-` cast on the min value once js-xdr fixes the issue where it treats the min value as unsigned\n BigInt(val) < -BigInt(xdr.Int32.MIN_VALUE) ||\n BigInt(val) > BigInt(xdr.Int32.MAX_VALUE)\n ) {\n throw new RangeError(`Value ${val} is out of range for I32`);\n }\n return xdr.ScVal.scvI32(Number(val));\n case xdr.ScSpecType.scSpecTypeU64().value:\n case xdr.ScSpecType.scSpecTypeI64().value:\n case xdr.ScSpecType.scSpecTypeU128().value:\n case xdr.ScSpecType.scSpecTypeI128().value:\n case xdr.ScSpecType.scSpecTypeU256().value:\n case xdr.ScSpecType.scSpecTypeI256().value:\n case xdr.ScSpecType.scSpecTypeTimepoint().value:\n case xdr.ScSpecType.scSpecTypeDuration().value: {\n const intType = t.name.substring(10).toLowerCase() as ScIntType;\n return new XdrLargeInt(intType, val as bigint).toScVal();\n }\n default:\n throw new TypeError(`invalid type (${ty}) specified for integer`);\n }\n }\n case \"string\":\n return stringToScVal(val, t);\n\n case \"boolean\": {\n if (value !== xdr.ScSpecType.scSpecTypeBool().value) {\n throw TypeError(`Type ${ty} was not bool, but value was bool`);\n }\n return xdr.ScVal.scvBool(val);\n }\n case \"undefined\": {\n if (!ty) {\n return xdr.ScVal.scvVoid();\n }\n switch (value) {\n case xdr.ScSpecType.scSpecTypeVoid().value:\n case xdr.ScSpecType.scSpecTypeOption().value:\n return xdr.ScVal.scvVoid();\n default:\n throw new TypeError(\n `Type ${ty} was not void, but value was undefined`,\n );\n }\n }\n\n case \"function\": // FIXME: Is this too helpful?\n return this.nativeToScVal(val(), ty);\n\n default:\n throw new TypeError(`failed to convert typeof ${typeof val} (${val})`);\n }\n }\n\n private nativeToUdt(val: any, name: string): xdr.ScVal {\n const entry = this.findEntry(name);\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n if (typeof val !== \"number\") {\n throw new TypeError(\n `expected number for enum ${name}, but got ${typeof val}`,\n );\n }\n return this.nativeToEnum(val as number, entry.udtEnumV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.nativeToStruct(val, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.nativeToUnion(val, entry.udtUnionV0());\n default:\n throw new Error(`failed to parse udt ${name}`);\n }\n }\n\n private nativeToUnion(\n val: Union<any>,\n union_: xdr.ScSpecUdtUnionV0,\n ): xdr.ScVal {\n const entryName = val.tag;\n const caseFound = union_.cases().find((entry) => {\n const caseN = entry.value().name().toString();\n return caseN === entryName;\n });\n if (!caseFound) {\n throw new TypeError(`no such enum entry: ${entryName} in ${union_}`);\n }\n const key = xdr.ScVal.scvSymbol(entryName);\n switch (caseFound.switch()) {\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseVoidV0(): {\n return xdr.ScVal.scvVec([key]);\n }\n case xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0(): {\n const types = caseFound.tupleCase().type();\n if (Array.isArray(val.values)) {\n if (val.values.length !== types.length) {\n throw new TypeError(\n `union ${union_} expects ${types.length} values, but got ${val.values.length}`,\n );\n }\n const scvals = val.values.map((v, i) =>\n this.nativeToScVal(v, types[i]),\n );\n scvals.unshift(key);\n return xdr.ScVal.scvVec(scvals);\n }\n throw new Error(`failed to parse union case ${caseFound} with ${val}`);\n }\n default:\n throw new Error(`failed to parse union ${union_} with ${val}`);\n }\n }\n\n private nativeToStruct(val: any, struct: xdr.ScSpecUdtStructV0): xdr.ScVal {\n const fields = struct.fields();\n if (fields.some(isNumeric)) {\n if (!fields.every(isNumeric)) {\n throw new Error(\n \"mixed numeric and non-numeric field names are not allowed\",\n );\n }\n return xdr.ScVal.scvVec(\n fields.map((_, i) => this.nativeToScVal(val[i], fields[i].type())),\n );\n }\n return xdr.ScVal.scvMap(\n fields.map((field) => {\n const name = field.name().toString();\n return new xdr.ScMapEntry({\n key: this.nativeToScVal(name, xdr.ScSpecTypeDef.scSpecTypeSymbol()),\n val: this.nativeToScVal(val[name], field.type()),\n });\n }),\n );\n }\n\n private nativeToEnum(val: number, enum_: xdr.ScSpecUdtEnumV0): xdr.ScVal {\n if (enum_.cases().some((entry) => entry.value() === val)) {\n return xdr.ScVal.scvU32(val);\n }\n throw new TypeError(`no such enum entry: ${val} in ${enum_}`);\n }\n\n /**\n * Converts an base64 encoded ScVal back to a native JS value based on the given type.\n *\n * @param scv - the base64 encoded ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValStrToNative<T>(scv: string, typeDef: xdr.ScSpecTypeDef): T {\n return this.scValToNative<T>(xdr.ScVal.fromXDR(scv, \"base64\"), typeDef);\n }\n\n /**\n * Converts an ScVal back to a native JS value based on the given type.\n *\n * @param scv - the ScVal\n * @param typeDef - the expected type\n * @returns the converted native JS value\n *\n * @throws if ScVal cannot be converted to the given type\n */\n scValToNative<T>(scv: xdr.ScVal, typeDef: xdr.ScSpecTypeDef): T {\n const t = typeDef.switch();\n const value = t.value;\n\n if (value === xdr.ScSpecType.scSpecTypeOption().value) {\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n default:\n return this.scValToNative(scv, typeDef.option().valueType());\n }\n }\n\n if (value === xdr.ScSpecType.scSpecTypeUdt().value) {\n return this.scValUdtToNative(scv, typeDef.udt());\n }\n\n // we use the verbose xdr.ScValType.<type>.value form here because it's faster\n // than string comparisons and the underlying constants never need to be\n // updated\n switch (scv.switch().value) {\n case xdr.ScValType.scvVoid().value:\n return null as T;\n\n // these can be converted to bigints directly\n case xdr.ScValType.scvU64().value:\n case xdr.ScValType.scvI64().value:\n case xdr.ScValType.scvTimepoint().value:\n case xdr.ScValType.scvDuration().value:\n // these can be parsed by internal abstractions note that this can also\n // handle the above two cases, but it's not as efficient (another\n // type-check, parsing, etc.)\n case xdr.ScValType.scvU128().value:\n case xdr.ScValType.scvI128().value:\n case xdr.ScValType.scvU256().value:\n case xdr.ScValType.scvI256().value:\n return scValToBigInt(scv) as T;\n\n case xdr.ScValType.scvVec().value: {\n if (value === xdr.ScSpecType.scSpecTypeVec().value) {\n const vec = typeDef.vec();\n return (scv.vec() ?? []).map((elm) =>\n this.scValToNative(elm, vec.elementType()),\n ) as T;\n }\n if (value === xdr.ScSpecType.scSpecTypeTuple().value) {\n const tuple = typeDef.tuple();\n const valTypes = tuple.valueTypes();\n return (scv.vec() ?? []).map((elm, i) =>\n this.scValToNative(elm, valTypes[i]),\n ) as T;\n }\n throw new TypeError(`Type ${typeDef} was not vec, but ${scv} is`);\n }\n\n case xdr.ScValType.scvAddress().value:\n return Address.fromScVal(scv).toString() as T;\n\n case xdr.ScValType.scvMap().value: {\n const map = scv.map() ?? [];\n if (value === xdr.ScSpecType.scSpecTypeMap().value) {\n const typed = typeDef.map();\n const keyType = typed.keyType();\n const valueType = typed.valueType();\n const res = map.map((entry) => [\n this.scValToNative(entry.key(), keyType),\n this.scValToNative(entry.val(), valueType),\n ]) as T;\n return res;\n }\n throw new TypeError(\n `ScSpecType ${t.name} was not map, but ${JSON.stringify(\n scv,\n null,\n 2,\n )} is`,\n );\n }\n\n // these return the primitive type directly\n case xdr.ScValType.scvBool().value:\n case xdr.ScValType.scvU32().value:\n case xdr.ScValType.scvI32().value:\n case xdr.ScValType.scvBytes().value:\n return scv.value() as T;\n\n case xdr.ScValType.scvString().value:\n case xdr.ScValType.scvSymbol().value: {\n if (\n value !== xdr.ScSpecType.scSpecTypeString().value &&\n value !== xdr.ScSpecType.scSpecTypeSymbol().value\n ) {\n throw new Error(\n `ScSpecType ${\n t.name\n } was not string or symbol, but ${JSON.stringify(scv, null, 2)} is`,\n );\n }\n return scv.value()?.toString() as T;\n }\n\n // in the fallthrough case, just return the underlying value directly\n default:\n throw new TypeError(\n `failed to convert ${JSON.stringify(\n scv,\n null,\n 2,\n )} to native type from type ${t.name}`,\n );\n }\n }\n\n private scValUdtToNative(scv: xdr.ScVal, udt: xdr.ScSpecTypeUdt): any {\n const entry = this.findEntry(udt.name().toString());\n switch (entry.switch()) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0():\n return this.enumToNative(scv);\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0():\n return this.structToNative(scv, entry.udtStructV0());\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0():\n return this.unionToNative(scv, entry.udtUnionV0());\n default:\n throw new Error(\n `failed to parse udt ${udt.name().toString()}: ${entry}`,\n );\n }\n }\n\n private unionToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtUnionV0): any {\n const vec = val.vec();\n if (!vec) {\n throw new Error(`${JSON.stringify(val, null, 2)} is not a vec`);\n }\n if (vec.length === 0 && udt.cases.length !== 0) {\n throw new Error(\n `${val} has length 0, but the there are at least one case in the union`,\n );\n }\n const name = vec[0].sym().toString();\n if (vec[0].switch().value !== xdr.ScValType.scvSymbol().value) {\n throw new Error(`${vec[0]} is not a symbol`);\n }\n const entry = udt.cases().find(findCase(name));\n if (!entry) {\n throw new Error(\n `failed to find entry ${name} in union ${udt.name().toString()}`,\n );\n }\n const res: Union<any> = { tag: name };\n if (\n entry.switch().value ===\n xdr.ScSpecUdtUnionCaseV0Kind.scSpecUdtUnionCaseTupleV0().value\n ) {\n const tuple = entry.tupleCase();\n const ty = tuple.type();\n const values = ty.map((e, i) => this.scValToNative(vec![i + 1], e));\n res.values = values;\n }\n return res;\n }\n\n private structToNative(val: xdr.ScVal, udt: xdr.ScSpecUdtStructV0): any {\n const res: any = {};\n const fields = udt.fields();\n if (fields.some(isNumeric)) {\n const r = val\n .vec()\n ?.map((entry, i) => this.scValToNative(entry, fields[i].type()));\n return r;\n }\n val.map()?.forEach((entry, i) => {\n const field = fields[i];\n res[field.name().toString()] = this.scValToNative(\n entry.val(),\n field.type(),\n );\n });\n return res;\n }\n\n private enumToNative(scv: xdr.ScVal): number {\n if (scv.switch().value !== xdr.ScValType.scvU32().value) {\n throw new Error(`Enum must have a u32 value`);\n }\n const num = scv.u32();\n return num;\n }\n\n /**\n * Gets the XDR error cases from the spec.\n *\n * @returns all contract functions\n *\n */\n errorCases(): xdr.ScSpecUdtErrorEnumCaseV0[] {\n return this.entries\n .filter(\n (entry) =>\n entry.switch().value ===\n xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value,\n )\n .flatMap((entry) => (entry.value() as xdr.ScSpecUdtErrorEnumV0).cases());\n }\n\n /**\n * Converts the contract spec to a JSON schema.\n *\n * If `funcName` is provided, the schema will be a reference to the function schema.\n *\n * @param funcName - (optional) the name of the function to convert\n * @returns the converted JSON schema\n *\n * @throws if the contract spec is invalid\n */\n jsonSchema(funcName?: string): JSONSchema7 {\n const definitions: { [key: string]: JSONSchema7Definition } = {};\n\n this.entries.forEach((entry) => {\n switch (entry.switch().value) {\n case xdr.ScSpecEntryKind.scSpecEntryUdtEnumV0().value: {\n const udt = entry.udtEnumV0();\n definitions[udt.name().toString()] = enumToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtStructV0().value: {\n const udt = entry.udtStructV0();\n definitions[udt.name().toString()] = structToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtUnionV0().value: {\n const udt = entry.udtUnionV0();\n definitions[udt.name().toString()] = unionToJsonSchema(udt);\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryFunctionV0().value: {\n const fn = entry.functionV0();\n const fnName = fn.name().toString();\n const { input } = functionToJsonSchema(fn);\n definitions[fnName] = input;\n break;\n }\n case xdr.ScSpecEntryKind.scSpecEntryUdtErrorEnumV0().value: {\n // console.debug(\"Error enums not supported yet\");\n }\n }\n });\n\n const res: JSONSchema7 = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n definitions: { ...PRIMITIVE_DEFINITONS, ...definitions },\n };\n if (funcName) {\n res.$ref = `#/definitions/${funcName}`;\n }\n return res;\n }\n}\n"],"names":["xdr","Address","XdrLargeInt","Buffer","specFromWasm","processSpecEntryStream","Err","Ok","Contract","scValToBigInt"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,SAAS,iBAAiB,GAAA,EAA+B;AACvD,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,GAAA,EAAI,CAAE,QAAA,EAAS;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,EAAA,MAAM,QAAe,EAAC;AACtB,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,KAAU;AACvB,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,EAAK,CAAE,QAAA,EAAS;AACpC,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,GAAA,EAAI,CAAE,QAAA,EAAS;AAClC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,WAAA,EAAa,IAAA;AAAA,MACb,KAAA;AAAA,MACA,IAAA,EAAM,CAAC,KAAA,CAAM,KAAA,EAAO,CAAA;AAAA,MACpB,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAW,EAAE,KAAA,EAAM;AACzB,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,GAAA,CAAI,WAAA,GAAc,WAAA;AAAA,EACpB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,UAAU,KAAA,EAAmC;AACpD,EAAA,OAAO,QAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,CAAE,UAAU,CAAA;AAC7C;AAEA,SAAS,OAAA,CAAQ,MAAc,KAAA,EAAuC;AACpE,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,EAAK,CAAE,QAAA,EAAS;AACxC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA,CAAE,IAAA,CAAK,CAAC,CAAC,IAAI,CAAA,KAAM,IAAA,KAAS,SAAS,CAAA;AACtE,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,SAAS,CAAA,CAAE,CAAA;AAAA,EAC9C;AACA,EAAA,OAAO,MAAM,CAAC,CAAA;AAChB;AAEA,SAAS,SAAS,IAAA,EAAc;AAC9B,EAAA,OAAO,SAAS,QAAQ,KAAA,EAAiC;AACvD,IAAA,QAAQ,KAAA,CAAM,MAAA,EAAO,CAAE,KAAA;AAAO,MAC5B,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,yBAAA,GAA4B,KAAA,EAAO;AACnE,QAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,EAAU;AAC9B,QAAA,OAAO,KAAA,CAAM,IAAA,EAAK,CAAE,QAAA,EAAS,KAAM,IAAA;AAAA,MACrC;AAAA,MACA,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,wBAAA,GAA2B,KAAA,EAAO;AAClE,QAAA,MAAM,QAAA,GAAW,MAAM,QAAA,EAAS;AAChC,QAAA,OAAO,QAAA,CAAS,IAAA,EAAK,CAAE,QAAA,EAAS,KAAM,IAAA;AAAA,MACxC;AAAA,MACA;AACE,QAAA,OAAO,KAAA;AAAA;AACX,EACF,CAAA;AACF;AAEA,SAAS,aAAA,CAAc,KAAa,EAAA,EAA+B;AACjE,EAAA,QAAQ,GAAG,KAAA;AAAO,IAChB,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA;AACrC,MAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AAAA,IAChC,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA;AACrC,MAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,SAAA,CAAU,GAAG,CAAA;AAAA,IAChC,KAAKA,sBAAA,CAAI,UAAA,CAAW,iBAAA,EAAkB,CAAE,KAAA;AAAA,IACxC,KAAKA,sBAAA,CAAI,UAAA,CAAW,sBAAA,EAAuB,CAAE,KAAA;AAC3C,MAAA,OAAOC,eAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,CAAE,OAAA,EAAQ;AAAA,IACzC,KAAKD,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAClC,MAAA,OAAO,IAAIE,yBAAA,CAAY,KAAA,EAAO,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC7C,KAAKF,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAClC,MAAA,OAAO,IAAIE,yBAAA,CAAY,KAAA,EAAO,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC7C,KAAKF,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AACnC,MAAA,OAAO,IAAIE,yBAAA,CAAY,MAAA,EAAQ,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC9C,KAAKF,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AACnC,MAAA,OAAO,IAAIE,yBAAA,CAAY,MAAA,EAAQ,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC9C,KAAKF,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AACnC,MAAA,OAAO,IAAIE,yBAAA,CAAY,MAAA,EAAQ,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC9C,KAAKF,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AACnC,MAAA,OAAO,IAAIE,yBAAA,CAAY,MAAA,EAAQ,GAAG,EAAE,OAAA,EAAQ;AAAA,IAC9C,KAAKF,sBAAA,CAAI,UAAA,CAAW,eAAA,EAAgB,CAAE,KAAA;AAAA,IACtC,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA;AACrC,MAAA,OAAOA,uBAAI,KAAA,CAAM,QAAA,CAASG,cAAO,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAC,CAAA;AAAA,IACtD,KAAKH,sBAAA,CAAI,UAAA,CAAW,mBAAA,GAAsB,KAAA,EAAO;AAC/C,MAAA,OAAOA,uBAAI,KAAA,CAAM,YAAA,CAAa,IAAIA,sBAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IACnD;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,kBAAA,GAAqB,KAAA,EAAO;AAC9C,MAAA,OAAOA,uBAAI,KAAA,CAAM,WAAA,CAAY,IAAIA,sBAAA,CAAI,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,IAClD;AAAA,IACA;AACE,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,aAAA,EAAgB,EAAA,CAAG,IAAI,CAAA,2BAAA,CAA6B,CAAA;AAAA;AAE9E;AAEA,MAAM,oBAAA,GAAiE;AAAA,EACrE,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,CAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,SAAA;AAAA,IACN,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS;AAAA,GACX;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,GAAA,EAAK;AAAA,IACH,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,qBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,qBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,mBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EAAS,qBAAA;AAAA,IACT,SAAA,EAAW,CAAA;AAAA,IACX,SAAA,EAAW;AAAA;AAAA,GACb;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,WAAA,EAAa;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ,SAAA;AAAA,IACR,WAAA,EACE;AAAA,GACJ;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,QAAA,EAAU;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,QAAA;AAAA,IACN,OAAA,EACE;AAAA;AAEN,CAAA;AAQA,SAAS,QAAQ,OAAA,EAAyC;AACxD,EAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,EAAO;AACzB,EAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAChB,EAAA,IAAI,GAAA;AACJ,EAAA,QAAQ,KAAA;AAAO,IACb,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,OAAO,EAAE,MAAM,SAAA,EAAU;AAAA,IAC3B;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IACxB;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,eAAA,GAAkB,KAAA,EAAO;AAC3C,MAAA,GAAA,GAAM,OAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,mBAAA,GAAsB,KAAA,EAAO;AAC/C,MAAA,GAAA,GAAM,WAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,kBAAA,GAAqB,KAAA,EAAO;AAC9C,MAAA,GAAA,GAAM,UAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,GAAA,GAAM,MAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,GAAA,GAAM,MAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,GAAA,GAAM,MAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AAC1C,MAAA,GAAA,GAAM,MAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,eAAA,GAAkB,KAAA,EAAO;AAC3C,MAAA,GAAA,GAAM,SAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,MAAA,GAAA,GAAM,UAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,MAAA,GAAA,GAAM,UAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,iBAAA,GAAoB,KAAA,EAAO;AAC7C,MAAA,GAAA,GAAM,SAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,sBAAA,GAAyB,KAAA,EAAO;AAClD,MAAA,GAAA,GAAM,cAAA;AACN,MAAA;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,MAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAO;AAC3B,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,CAAA;AAAA,IAChC;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,EAAO;AAC9B,MAAA,OAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,EAAQ,CAAA;AAAA,IAChC;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,GAAA,CAAI,WAAA,EAAa,CAAA;AAC3C,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACT;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,MAAA,MAAM,KAAA,GAAQ,CAAC,OAAA,CAAQ,GAAA,CAAI,OAAA,EAAS,CAAA,EAAG,OAAA,CAAQ,GAAA,CAAI,SAAA,EAAW,CAAC,CAAA;AAC/D,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,OAAA;AAAA,UACN,KAAA;AAAA,UACA,QAAA,EAAU,CAAA;AAAA,UACV,QAAA,EAAU;AAAA;AACZ,OACF;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,eAAA,GAAkB,KAAA,EAAO;AAC3C,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAM;AAC5B,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,UAAA,EAAW,CAAE,MAAA;AACpC,MAAA,MAAM,QAAA,GAAW,QAAA;AACjB,MAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,UAAA,EAAW,CAAE,IAAI,OAAO,CAAA;AAC5C,MAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,KAAA,EAAO,UAAU,QAAA,EAAS;AAAA,IACpD;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,MAAA,MAAM,GAAA,GAAM,QAAQ,MAAA,EAAO;AAC3B,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,uBAAA;AAAA,QACN,SAAA,EAAW,IAAI,CAAA;AAAE,OACnB;AAAA,IACF;AAAA,IACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,MAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,MAAA,GAAA,GAAM,GAAA,CAAI,IAAA,EAAK,CAAE,QAAA,EAAS;AAC1B,MAAA;AAAA,IACF;AAAA;AAEF,EAAA,OAAO,EAAE,IAAA,EAAM,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAA,EAAG;AACxC;AAIA,SAAS,WAAW,OAAA,EAAqC;AACvD,EAAA,OAAO,QAAQ,MAAA,EAAO,CAAE,UAAUA,sBAAA,CAAI,UAAA,CAAW,kBAAiB,CAAE,KAAA;AACtE;AAEA,SAAS,gBACP,KAAA,EAC6C;AAC7C,EAAA,MAAM,aAAkB,EAAC;AACzB,EAAA,MAAM,WAAqB,EAAC;AAC5B,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACrB,IAAA,MAAM,KAAA,GAAQ,IAAI,IAAA,EAAK;AACvB,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,IAAA,EAAK,CAAE,QAAA,EAAS;AACjC,IAAA,UAAA,CAAW,IAAI,CAAA,GAAI,OAAA,CAAQ,KAAK,CAAA;AAChC,IAAA,IAAI,UAAA,CAAW,KAAK,CAAA,EAAG;AACrB,MAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,IACpB;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,GAAA,GAAmD,EAAE,UAAA,EAAW;AACtE,EAAA,IAAI,QAAA,CAAS,SAAS,CAAA,EAAG;AACvB,IAAA,GAAA,CAAI,QAAA,GAAW,QAAA;AAAA,EACjB;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,mBAAmB,GAAA,EAAoC;AAC9D,EAAA,MAAM,MAAA,GAAS,IAAI,MAAA,EAAO;AAC1B,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1B,IAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AAC5D,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,OAAA;AAAA,MACN,KAAA;AAAA,MACA,UAAU,MAAA,CAAO,MAAA;AAAA,MACjB,UAAU,MAAA,CAAO;AAAA,KACnB;AAAA,EACF;AACA,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,GAAA,EAAI,CAAE,QAAA,EAAS;AACvC,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,EAAS,GAAS,gBAAgB,MAAM,CAAA;AAC5D,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,oBAAA,EAAsB,KAAA;AAAA,IACtB,IAAA,EAAM;AAAA,GACR;AACF;AAEA,SAAS,qBAAqB,IAAA,EAAkC;AAC9D,EAAA,MAAM,EAAE,UAAA,EAAY,QAAA,KAAkB,eAAA,CAAgB,IAAA,CAAK,QAAQ,CAAA;AACnE,EAAA,MAAM,IAAA,GAAY;AAAA,IAChB,oBAAA,EAAsB,KAAA;AAAA,IACtB,UAAA;AAAA,IACA,IAAA,EAAM;AAAA,GACR;AACA,EAAA,IAAI,QAAA,EAAU,SAAS,CAAA,EAAG;AACxB,IAAA,IAAA,CAAK,QAAA,GAAW,QAAA;AAAA,EAClB;AACA,EAAA,MAAM,KAAA,GAA8B;AAAA,IAClC,UAAA,EAAY;AAAA,MACV;AAAA;AACF,GACF;AACA,EAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,EAAA,MAAM,MAAA,GACJ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACb,OAAA,CAAQ,OAAA,CAAQ,CAAC,CAAC,CAAA,GAClB,OAAA,CAAQA,sBAAA,CAAI,aAAA,CAAc,gBAAgB,CAAA;AAChD,EAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,EAAS;AACxC,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,KAAA,CAAM,WAAA,GAAc,WAAA;AAAA,EACtB;AACA,EAAA,KAAA,CAAM,oBAAA,GAAuB,KAAA;AAC7B,EAAA,MAAA,CAAO,oBAAA,GAAuB,KAAA;AAC9B,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,kBAAkB,GAAA,EAAgC;AACzD,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,GAAA,EAAI,CAAE,QAAA,EAAS;AACvC,EAAA,MAAM,KAAA,GAAQ,IAAI,KAAA,EAAM;AACxB,EAAA,MAAM,QAAe,EAAC;AACtB,EAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,KAAA,KAAU;AACvB,IAAA,QAAQ,KAAA,CAAM,MAAA,EAAO,CAAE,KAAA;AAAO,MAC5B,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,wBAAA,GAA2B,KAAA,EAAO;AAClE,QAAA,MAAM,CAAA,GAAI,MAAM,QAAA,EAAS;AACzB,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,EAAK,CAAE,QAAA,EAAS;AAChC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,KAAA;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAA,EAAK;AAAA,WACP;AAAA,UACA,oBAAA,EAAsB,KAAA;AAAA,UACtB,QAAA,EAAU,CAAC,KAAK;AAAA,SACjB,CAAA;AACD,QAAA;AAAA,MACF;AAAA,MACA,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,yBAAA,GAA4B,KAAA,EAAO;AACnE,QAAA,MAAM,CAAA,GAAI,MAAM,SAAA,EAAU;AAC1B,QAAA,MAAM,KAAA,GAAQ,CAAA,CAAE,IAAA,EAAK,CAAE,QAAA,EAAS;AAChC,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,QAAA;AAAA,UACN,KAAA;AAAA,UACA,UAAA,EAAY;AAAA,YACV,GAAA,EAAK,KAAA;AAAA,YACL,MAAA,EAAQ;AAAA,cACN,IAAA,EAAM,OAAA;AAAA,cACN,KAAA,EAAO,CAAA,CAAE,IAAA,EAAK,CAAE,IAAI,OAAO;AAAA;AAC7B,WACF;AAAA,UACA,QAAA,EAAU,CAAC,KAAA,EAAO,QAAQ,CAAA;AAAA,UAC1B,oBAAA,EAAsB;AAAA,SACvB,CAAA;AAAA,MACH;AAAA;AACF,EACF,CAAC,CAAA;AAED,EAAA,MAAM,GAAA,GAAW;AAAA,IACf;AAAA,GACF;AACA,EAAA,IAAI,WAAA,CAAY,SAAS,CAAA,EAAG;AAC1B,IAAA,GAAA,CAAI,WAAA,GAAc,WAAA;AAAA,EACpB;AACA,EAAA,OAAO,GAAA;AACT;AAgCO,MAAM,IAAA,CAAK;AAAA;AAAA;AAAA;AAAA,EAIT,UAA6B,EAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASrC,OAAO,SAAS,IAAA,EAAoB;AAClC,IAAA,MAAM,IAAA,GAAOI,8BAAa,IAAI,CAAA;AAC9B,IAAA,OAAO,IAAI,KAAK,IAAI,CAAA;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,YAAY,OAAA,EAAyD;AACnE,IAAA,IAAID,aAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AAC5B,MAAA,IAAA,CAAK,OAAA,GAAUE,6BAAuB,OAAiB,CAAA;AAAA,IACzD,CAAA,MAAA,IAAW,OAAO,OAAA,KAAY,QAAA,EAAU;AACtC,MAAA,IAAA,CAAK,UAAUA,4BAAA,CAAuBF,aAAA,CAAO,IAAA,CAAK,OAAA,EAAS,QAAQ,CAAC,CAAA;AAAA,IACtE,CAAA,MAAO;AACL,MAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,QAAA,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAAA,MAC9D;AACA,MAAA,MAAM,KAAA,GAAQ,QAAQ,CAAC,CAAA;AACvB,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,IAAA,CAAK,UAAW,OAAA,CAAqB,GAAA;AAAA,UAAI,CAAC,CAAA,KACxCH,sBAAA,CAAI,WAAA,CAAY,OAAA,CAAQ,GAAG,QAAQ;AAAA,SACrC;AAAA,MACF,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAA,GAAgC;AAC9B,IAAA,OAAO,KAAK,OAAA,CACT,MAAA;AAAA,MACC,CAAC,UACC,KAAA,CAAM,MAAA,GAAS,KAAA,KACfA,sBAAA,CAAI,eAAA,CAAgB,qBAAA,EAAsB,CAAE;AAAA,MAE/C,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,YAAY,CAAA;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,QAAQ,IAAA,EAAoC;AAC1C,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACjC,IAAA,IACE,KAAA,CAAM,QAAO,CAAE,KAAA,KAAUA,uBAAI,eAAA,CAAgB,qBAAA,GAAwB,KAAA,EACrE;AACA,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA,kBAAA,CAAoB,CAAA;AAAA,IAC7C;AACA,IAAA,OAAO,MAAM,UAAA,EAAW;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAoBA,gBAAA,CAAiB,MAAc,IAAA,EAA2B;AACxD,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC5B,IAAA,OAAO,EAAA,CACJ,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,KAAA,KAAU,IAAA,CAAK,aAAA,CAAc,OAAA,CAAQ,MAAM,KAAK,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,CAAC,CAAA;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAiBA,eAAA,CAAgB,MAAc,aAAA,EAAwC;AACpE,IAAA,MAAM,GAAA,GACJ,OAAO,aAAA,KAAkB,QAAA,GACrBA,uBAAI,KAAA,CAAM,OAAA,CAAQ,aAAA,EAAe,QAAQ,CAAA,GACzC,aAAA;AACN,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,KAAK,OAAA,EAAQ;AAC7B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AACxB,MAAA,MAAM,IAAA,GAAO,IAAI,MAAA,EAAO;AACxB,MAAA,IAAI,KAAK,KAAA,KAAUA,sBAAA,CAAI,SAAA,CAAU,OAAA,GAAU,KAAA,EAAO;AAChD,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,IAAA,CAAK,IAAI,CAAA,CAAE,CAAA;AAAA,MACnD;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,MAAM,CAAA,8BAAA,CAAgC,CAAA;AAAA,IAClD;AACA,IAAA,MAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AACxB,IAAA,IAAI,MAAA,CAAO,QAAO,CAAE,KAAA,KAAUA,uBAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AACrE,MAAA,IAAI,GAAA,CAAI,QAAO,CAAE,KAAA,KAAUA,uBAAI,SAAA,CAAU,QAAA,GAAW,KAAA,EAAO;AACzD,QAAA,OAAO,IAAIM,eAAA,CAAI,EAAE,OAAA,EAAS,GAAA,CAAI,OAAM,CAAE,KAAA,CAAM,QAAQ,CAAA,EAAG,CAAA;AAAA,MACzD;AACA,MAAA,OAAO,IAAIC,cAAA,CAAG,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,OAAO,MAAA,EAAO,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,IACjE;AACA,IAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,MAAM,CAAA;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,UAAU,IAAA,EAA+B;AACvC,IAAA,MAAM,KAAA,GAAQ,KAAK,OAAA,CAAQ,IAAA;AAAA,MACzB,CAAC,MAAM,CAAA,CAAE,KAAA,GAAQ,IAAA,EAAK,CAAE,UAAS,KAAM;AAAA,KACzC;AACA,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,eAAA,EAAkB,IAAI,CAAA,CAAE,CAAA;AAAA,IAC1C;AACA,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAA,CAAc,KAAU,EAAA,EAAkC;AACxD,IAAA,MAAM,CAAA,GAAoB,GAAG,MAAA,EAAO;AACpC,IAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAChB,IAAA,IAAI,EAAE,KAAA,KAAUP,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACpD,MAAA,MAAM,GAAA,GAAM,GAAG,GAAA,EAAI;AACnB,MAAA,OAAO,KAAK,WAAA,CAAY,GAAA,EAAK,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA;AAAA,IACpD;AACA,IAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AACrD,MAAA,MAAM,GAAA,GAAM,GAAG,MAAA,EAAO;AACtB,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,MAAA,EAAW;AACrC,QAAA,OAAOA,sBAAA,CAAI,MAAM,OAAA,EAAQ;AAAA,MAC3B;AACA,MAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,GAAA,CAAI,WAAW,CAAA;AAAA,IAChD;AACA,IAAA,QAAQ,OAAO,GAAA;AAAK,MAClB,KAAK,QAAA,EAAU;AACb,QAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,UAAA,QAAQ,KAAA;AAAO,YACb,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AACnC,cAAA,OAAOA,sBAAA,CAAI,MAAM,OAAA,EAAQ;AAAA,YAC3B;AACE,cAAA,MAAM,IAAI,SAAA;AAAA,gBACR,QAAQ,EAAE,CAAA,iCAAA;AAAA,eACZ;AAAA;AACJ,QACF;AAEA,QAAA,IAAI,GAAA,YAAeA,uBAAI,KAAA,EAAO;AAC5B,UAAA,OAAO,GAAA;AAAA,QACT;AAEA,QAAA,IAAI,eAAeC,eAAA,EAAS;AAC1B,UAAA,IAAI,EAAA,CAAG,QAAO,CAAE,KAAA,KAAUD,uBAAI,UAAA,CAAW,iBAAA,GAAoB,KAAA,EAAO;AAClE,YAAA,MAAM,IAAI,SAAA;AAAA,cACR,QAAQ,EAAE,CAAA,uCAAA;AAAA,aACZ;AAAA,UACF;AACA,UAAA,OAAO,IAAI,OAAA,EAAQ;AAAA,QACrB;AAEA,QAAA,IAAI,eAAeQ,iBAAA,EAAU;AAC3B,UAAA,IAAI,EAAA,CAAG,QAAO,CAAE,KAAA,KAAUR,uBAAI,UAAA,CAAW,iBAAA,GAAoB,KAAA,EAAO;AAClE,YAAA,MAAM,IAAI,SAAA;AAAA,cACR,QAAQ,EAAE,CAAA,uCAAA;AAAA,aACZ;AAAA,UACF;AACA,UAAA,OAAO,GAAA,CAAI,OAAA,EAAQ,CAAE,OAAA,EAAQ;AAAA,QAC/B;AAEA,QAAA,IAAI,GAAA,YAAe,UAAA,IAAcG,aAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AACrD,UAAA,MAAM,IAAA,GAAO,UAAA,CAAW,IAAA,CAAK,GAAG,CAAA;AAChC,UAAA,QAAQ,KAAA;AAAO,YACb,KAAKH,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AAC5C,cAAA,MAAM,MAAA,GAAS,GAAG,MAAA,EAAO;AACzB,cAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,CAAO,CAAA,EAAE,EAAG;AAC9B,gBAAA,MAAM,IAAI,SAAA;AAAA,kBACR,YAAY,MAAA,CAAO,CAAA,EAAG,CAAA,gBAAA,EAAmB,KAAK,MAAM,CAAA;AAAA,iBACtD;AAAA,cACF;AAEA,cAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAAA,YAChC;AAAA,YACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,eAAA,EAAgB,CAAE,KAAA;AAEpC,cAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,QAAA,CAAS,IAAI,CAAA;AAAA,YAChC;AACE,cAAA,MAAM,IAAI,SAAA;AAAA,gBACR,iBAAiB,EAAE,CAAA,gCAAA;AAAA,eACrB;AAAA;AACJ,QACF;AACA,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,UAAA,QAAQ,KAAA;AAAO,YACb,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,cAAA,MAAM,GAAA,GAAM,GAAG,GAAA,EAAI;AACnB,cAAA,MAAM,WAAA,GAAc,IAAI,WAAA,EAAY;AACpC,cAAA,OAAOA,uBAAI,KAAA,CAAM,MAAA;AAAA,gBACf,GAAA,CAAI,IAAI,CAAC,CAAA,KAAM,KAAK,aAAA,CAAc,CAAA,EAAG,WAAW,CAAC;AAAA,eACnD;AAAA,YACF;AAAA,YACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,eAAA,GAAkB,KAAA,EAAO;AAC3C,cAAA,MAAM,GAAA,GAAM,GAAG,KAAA,EAAM;AACrB,cAAA,MAAM,QAAA,GAAW,IAAI,UAAA,EAAW;AAChC,cAAA,IAAI,GAAA,CAAI,MAAA,KAAW,QAAA,CAAS,MAAA,EAAQ;AAClC,gBAAA,MAAM,IAAI,SAAA;AAAA,kBACR,CAAA,cAAA,EAAiB,QAAA,CAAS,MAAM,CAAA,aAAA,EAAgB,IAAI,MAAM,CAAA,cAAA;AAAA,iBAC5D;AAAA,cACF;AACA,cAAA,OAAOA,uBAAI,KAAA,CAAM,MAAA;AAAA,gBACf,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG,QAAA,CAAS,CAAC,CAAC,CAAC;AAAA,eACtD;AAAA,YACF;AAAA,YACA,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AACzC,cAAA,MAAM,GAAA,GAAM,GAAG,GAAA,EAAI;AACnB,cAAA,MAAM,OAAA,GAAU,IAAI,OAAA,EAAQ;AAC5B,cAAA,MAAM,SAAA,GAAY,IAAI,SAAA,EAAU;AAChC,cAAA,OAAOA,uBAAI,KAAA,CAAM,MAAA;AAAA,gBACf,GAAA,CAAI,GAAA,CAAI,CAAC,KAAA,KAAU;AACjB,kBAAA,MAAM,MAAM,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,CAAC,GAAG,OAAO,CAAA;AAChD,kBAAA,MAAM,SAAS,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,CAAC,GAAG,SAAS,CAAA;AACrD,kBAAA,OAAO,IAAIA,sBAAA,CAAI,UAAA,CAAW,EAAE,GAAA,EAAK,GAAA,EAAK,QAAQ,CAAA;AAAA,gBAChD,CAAC;AAAA,eACH;AAAA,YACF;AAAA,YAEA;AACE,cAAA,MAAM,IAAI,SAAA;AAAA,gBACR,QAAQ,EAAE,CAAA,iCAAA;AAAA,eACZ;AAAA;AACJ,QACF;AACA,QAAA,IAAI,GAAA,CAAI,gBAAgB,GAAA,EAAK;AAC3B,UAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AAClD,YAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,EAAE,CAAA,+BAAA,CAAiC,CAAA;AAAA,UACjE;AACA,UAAA,MAAM,KAAA,GAAQ,GAAG,GAAA,EAAI;AACrB,UAAA,MAAM,GAAA,GAAM,GAAA;AACZ,UAAA,MAAM,UAA4B,EAAC;AACnC,UAAA,MAAM,MAAA,GAAS,IAAI,OAAA,EAAQ;AAC3B,UAAA,IAAI,GAAA,GAAM,OAAO,IAAA,EAAK;AACtB,UAAA,OAAO,CAAC,IAAI,IAAA,EAAM;AAChB,YAAA,MAAM,CAAC,CAAA,EAAG,CAAC,CAAA,GAAI,GAAA,CAAI,KAAA;AACnB,YAAA,MAAM,MAAM,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG,KAAA,CAAM,SAAS,CAAA;AACjD,YAAA,MAAM,SAAS,IAAA,CAAK,aAAA,CAAc,CAAA,EAAG,KAAA,CAAM,WAAW,CAAA;AACtD,YAAA,OAAA,CAAQ,IAAA,CAAK,IAAIA,sBAAA,CAAI,UAAA,CAAW,EAAE,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,CAAC,CAAA;AACrD,YAAA,GAAA,GAAM,OAAO,IAAA,EAAK;AAAA,UACpB;AACA,UAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAAA,QACjC;AAEA,QAAA,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,IAAA,IAAQ,EAAA,MAAQ,QAAA,EAAU;AAC9C,UAAA,MAAM,IAAI,SAAA;AAAA,YACR,CAAA,iBAAA,EACE,IAAI,WAAA,EAAa,IACnB,oBAAoB,IAAA,CAAK,SAAA,CAAU,GAAG,CAAC,CAAA,CAAA;AAAA,WACzC;AAAA,QACF;AAEA,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,CAAA,gBAAA,EAAmB,GAAG,CAAA,kCAAA,EAAqC,EAAE,CAAA;AAAA,SAC/D;AAAA,MACF;AAAA,MAEA,KAAK,QAAA;AAAA,MACL,KAAK,QAAA,EAAU;AACb,QAAA,QAAQ,KAAA;AAAO,UACb,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAClC,YAAA,IACE,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAOA,uBAAI,MAAA,CAAO,SAAS,CAAA,IACzC,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAOA,sBAAA,CAAI,MAAA,CAAO,SAAS,CAAA,EACzC;AACA,cAAA,MAAM,IAAI,UAAA,CAAW,CAAA,MAAA,EAAS,GAAG,CAAA,wBAAA,CAA0B,CAAA;AAAA,YAC7D;AACA,YAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAClC,YAAA;AAAA;AAAA,cAEE,MAAA,CAAO,GAAG,CAAA,GAAI,CAAC,OAAOA,sBAAA,CAAI,KAAA,CAAM,SAAS,CAAA,IACzC,OAAO,GAAG,CAAA,GAAI,MAAA,CAAOA,sBAAA,CAAI,MAAM,SAAS;AAAA,cACxC;AACA,cAAA,MAAM,IAAI,UAAA,CAAW,CAAA,MAAA,EAAS,GAAG,CAAA,wBAAA,CAA0B,CAAA;AAAA,YAC7D;AACA,YAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAA,CAAO,GAAG,CAAC,CAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAAA,UACpC,KAAKA,sBAAA,CAAI,UAAA,CAAW,aAAA,EAAc,CAAE,KAAA;AAAA,UACpC,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,mBAAA,EAAoB,CAAE,KAAA;AAAA,UAC1C,KAAKA,sBAAA,CAAI,UAAA,CAAW,kBAAA,GAAqB,KAAA,EAAO;AAC9C,YAAA,MAAM,UAAU,CAAA,CAAE,IAAA,CAAK,SAAA,CAAU,EAAE,EAAE,WAAA,EAAY;AACjD,YAAA,OAAO,IAAIE,yBAAA,CAAY,OAAA,EAAS,GAAa,EAAE,OAAA,EAAQ;AAAA,UACzD;AAAA,UACA;AACE,YAAA,MAAM,IAAI,SAAA,CAAU,CAAA,cAAA,EAAiB,EAAE,CAAA,uBAAA,CAAyB,CAAA;AAAA;AACpE,MACF;AAAA,MACA,KAAK,QAAA;AACH,QAAA,OAAO,aAAA,CAAc,KAAK,CAAC,CAAA;AAAA,MAE7B,KAAK,SAAA,EAAW;AACd,QAAA,IAAI,KAAA,KAAUF,sBAAA,CAAI,UAAA,CAAW,cAAA,GAAiB,KAAA,EAAO;AACnD,UAAA,MAAM,SAAA,CAAU,CAAA,KAAA,EAAQ,EAAE,CAAA,iCAAA,CAAmC,CAAA;AAAA,QAC/D;AACA,QAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,MAC9B;AAAA,MACA,KAAK,WAAA,EAAa;AAChB,QAAA,IAAI,CAAC,EAAA,EAAI;AACP,UAAA,OAAOA,sBAAA,CAAI,MAAM,OAAA,EAAQ;AAAA,QAC3B;AACA,QAAA,QAAQ,KAAA;AAAO,UACb,KAAKA,sBAAA,CAAI,UAAA,CAAW,cAAA,EAAe,CAAE,KAAA;AAAA,UACrC,KAAKA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA;AACrC,YAAA,OAAOA,sBAAA,CAAI,MAAM,OAAA,EAAQ;AAAA,UAC3B;AACE,YAAA,MAAM,IAAI,SAAA;AAAA,cACR,QAAQ,EAAE,CAAA,sCAAA;AAAA,aACZ;AAAA;AACJ,MACF;AAAA,MAEA,KAAK,UAAA;AACH,QAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,EAAI,EAAG,EAAE,CAAA;AAAA,MAErC;AACE,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,yBAAA,EAA4B,OAAO,GAAG,CAAA,EAAA,EAAK,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA;AACzE,EACF;AAAA,EAEQ,WAAA,CAAY,KAAU,IAAA,EAAyB;AACrD,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA;AACjC,IAAA,QAAQ,KAAA,CAAM,QAAO;AAAG,MACtB,KAAKA,sBAAA,CAAI,eAAA,CAAgB,oBAAA,EAAqB;AAC5C,QAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,UAAA,MAAM,IAAI,SAAA;AAAA,YACR,CAAA,yBAAA,EAA4B,IAAI,CAAA,UAAA,EAAa,OAAO,GAAG,CAAA;AAAA,WACzD;AAAA,QACF;AACA,QAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,EAAe,KAAA,CAAM,WAAW,CAAA;AAAA,MAC3D,KAAKA,sBAAA,CAAI,eAAA,CAAgB,sBAAA,EAAuB;AAC9C,QAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,KAAA,CAAM,aAAa,CAAA;AAAA,MACrD,KAAKA,sBAAA,CAAI,eAAA,CAAgB,qBAAA,EAAsB;AAC7C,QAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,YAAY,CAAA;AAAA,MACnD;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AAAA;AACjD,EACF;AAAA,EAEQ,aAAA,CACN,KACA,MAAA,EACW;AACX,IAAA,MAAM,YAAY,GAAA,CAAI,GAAA;AACtB,IAAA,MAAM,YAAY,MAAA,CAAO,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,KAAA,KAAU;AAC/C,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA,EAAM,CAAE,IAAA,GAAO,QAAA,EAAS;AAC5C,MAAA,OAAO,KAAA,KAAU,SAAA;AAAA,IACnB,CAAC,CAAA;AACD,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,MAAM,IAAI,SAAA,CAAU,CAAA,oBAAA,EAAuB,SAAS,CAAA,IAAA,EAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IACrE;AACA,IAAA,MAAM,GAAA,GAAMA,sBAAA,CAAI,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA;AACzC,IAAA,QAAQ,SAAA,CAAU,QAAO;AAAG,MAC1B,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,wBAAA,EAAyB,EAAG;AAC5D,QAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,CAAC,GAAG,CAAC,CAAA;AAAA,MAC/B;AAAA,MACA,KAAKA,sBAAA,CAAI,wBAAA,CAAyB,yBAAA,EAA0B,EAAG;AAC7D,QAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,SAAA,EAAU,CAAE,IAAA,EAAK;AACzC,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AAC7B,UAAA,IAAI,GAAA,CAAI,MAAA,CAAO,MAAA,KAAW,KAAA,CAAM,MAAA,EAAQ;AACtC,YAAA,MAAM,IAAI,SAAA;AAAA,cACR,CAAA,MAAA,EAAS,MAAM,CAAA,SAAA,EAAY,KAAA,CAAM,MAAM,CAAA,iBAAA,EAAoB,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,aAC9E;AAAA,UACF;AACA,UAAA,MAAM,MAAA,GAAS,IAAI,MAAA,CAAO,GAAA;AAAA,YAAI,CAAC,GAAG,CAAA,KAChC,IAAA,CAAK,cAAc,CAAA,EAAG,KAAA,CAAM,CAAC,CAAC;AAAA,WAChC;AACA,UAAA,MAAA,CAAO,QAAQ,GAAG,CAAA;AAClB,UAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAAA,QAChC;AACA,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA,MACvE;AAAA,MACA;AACE,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,MAAM,CAAA,MAAA,EAAS,GAAG,CAAA,CAAE,CAAA;AAAA;AACjE,EACF;AAAA,EAEQ,cAAA,CAAe,KAAU,MAAA,EAA0C;AACzE,IAAA,MAAM,MAAA,GAAS,OAAO,MAAA,EAAO;AAC7B,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1B,MAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AAC5B,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAOA,uBAAI,KAAA,CAAM,MAAA;AAAA,QACf,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,IAAA,CAAK,aAAA,CAAc,GAAA,CAAI,CAAC,GAAG,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC;AAAA,OACnE;AAAA,IACF;AACA,IAAA,OAAOA,uBAAI,KAAA,CAAM,MAAA;AAAA,MACf,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,KAAU;AACpB,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAK,CAAE,QAAA,EAAS;AACnC,QAAA,OAAO,IAAIA,uBAAI,UAAA,CAAW;AAAA,UACxB,KAAK,IAAA,CAAK,aAAA,CAAc,MAAMA,sBAAA,CAAI,aAAA,CAAc,kBAAkB,CAAA;AAAA,UAClE,GAAA,EAAK,KAAK,aAAA,CAAc,GAAA,CAAI,IAAI,CAAA,EAAG,KAAA,CAAM,MAAM;AAAA,SAChD,CAAA;AAAA,MACH,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEQ,YAAA,CAAa,KAAa,KAAA,EAAuC;AACvE,IAAA,IAAI,KAAA,CAAM,KAAA,EAAM,CAAE,IAAA,CAAK,CAAC,UAAU,KAAA,CAAM,KAAA,EAAM,KAAM,GAAG,CAAA,EAAG;AACxD,MAAA,OAAOA,sBAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAA;AAAA,IAC7B;AACA,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,oBAAA,EAAuB,GAAG,CAAA,IAAA,EAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EAC9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,gBAAA,CAAoB,KAAa,OAAA,EAA+B;AAC9D,IAAA,OAAO,IAAA,CAAK,cAAiBA,sBAAA,CAAI,KAAA,CAAM,QAAQ,GAAA,EAAK,QAAQ,GAAG,OAAO,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,aAAA,CAAiB,KAAgB,OAAA,EAA+B;AAC9D,IAAA,MAAM,CAAA,GAAI,QAAQ,MAAA,EAAO;AACzB,IAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAEhB,IAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,gBAAA,GAAmB,KAAA,EAAO;AACrD,MAAA,QAAQ,GAAA,CAAI,MAAA,EAAO,CAAE,KAAA;AAAO,QAC1B,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAC3B,UAAA,OAAO,IAAA;AAAA,QACT;AACE,UAAA,OAAO,KAAK,aAAA,CAAc,GAAA,EAAK,QAAQ,MAAA,EAAO,CAAE,WAAW,CAAA;AAAA;AAC/D,IACF;AAEA,IAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AAClD,MAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,GAAA,EAAK,OAAA,CAAQ,KAAK,CAAA;AAAA,IACjD;AAKA,IAAA,QAAQ,GAAA,CAAI,MAAA,EAAO,CAAE,KAAA;AAAO,MAC1B,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAC3B,QAAA,OAAO,IAAA;AAAA;AAAA,MAGT,KAAKA,sBAAA,CAAI,SAAA,CAAU,MAAA,EAAO,CAAE,KAAA;AAAA,MAC5B,KAAKA,sBAAA,CAAI,SAAA,CAAU,MAAA,EAAO,CAAE,KAAA;AAAA,MAC5B,KAAKA,sBAAA,CAAI,SAAA,CAAU,YAAA,EAAa,CAAE,KAAA;AAAA,MAClC,KAAKA,sBAAA,CAAI,SAAA,CAAU,WAAA,EAAY,CAAE,KAAA;AAAA;AAAA;AAAA;AAAA,MAIjC,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAAA,MAC7B,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAAA,MAC7B,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAAA,MAC7B,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAC3B,QAAA,OAAOS,oBAAc,GAAG,CAAA;AAAA,MAE1B,KAAKT,sBAAA,CAAI,SAAA,CAAU,MAAA,GAAS,KAAA,EAAO;AACjC,QAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AAClD,UAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,UAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAI,IAAK,EAAC,EAAG,GAAA;AAAA,YAAI,CAAC,GAAA,KAC5B,IAAA,CAAK,cAAc,GAAA,EAAK,GAAA,CAAI,aAAa;AAAA,WAC3C;AAAA,QACF;AACA,QAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,eAAA,GAAkB,KAAA,EAAO;AACpD,UAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,EAAM;AAC5B,UAAA,MAAM,QAAA,GAAW,MAAM,UAAA,EAAW;AAClC,UAAA,OAAA,CAAQ,GAAA,CAAI,GAAA,EAAI,IAAK,EAAC,EAAG,GAAA;AAAA,YAAI,CAAC,KAAK,CAAA,KACjC,IAAA,CAAK,cAAc,GAAA,EAAK,QAAA,CAAS,CAAC,CAAC;AAAA,WACrC;AAAA,QACF;AACA,QAAA,MAAM,IAAI,SAAA,CAAU,CAAA,KAAA,EAAQ,OAAO,CAAA,kBAAA,EAAqB,GAAG,CAAA,GAAA,CAAK,CAAA;AAAA,MAClE;AAAA,MAEA,KAAKA,sBAAA,CAAI,SAAA,CAAU,UAAA,EAAW,CAAE,KAAA;AAC9B,QAAA,OAAOC,eAAA,CAAQ,SAAA,CAAU,GAAG,CAAA,CAAE,QAAA,EAAS;AAAA,MAEzC,KAAKD,sBAAA,CAAI,SAAA,CAAU,MAAA,GAAS,KAAA,EAAO;AACjC,QAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,EAAI,IAAK,EAAC;AAC1B,QAAA,IAAI,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,aAAA,GAAgB,KAAA,EAAO;AAClD,UAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,EAAI;AAC1B,UAAA,MAAM,OAAA,GAAU,MAAM,OAAA,EAAQ;AAC9B,UAAA,MAAM,SAAA,GAAY,MAAM,SAAA,EAAU;AAClC,UAAA,MAAM,GAAA,GAAM,GAAA,CAAI,GAAA,CAAI,CAAC,KAAA,KAAU;AAAA,YAC7B,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,GAAA,IAAO,OAAO,CAAA;AAAA,YACvC,IAAA,CAAK,aAAA,CAAc,KAAA,CAAM,GAAA,IAAO,SAAS;AAAA,WAC1C,CAAA;AACD,UAAA,OAAO,GAAA;AAAA,QACT;AACA,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,CAAA,WAAA,EAAc,CAAA,CAAE,IAAI,CAAA,kBAAA,EAAqB,IAAA,CAAK,SAAA;AAAA,YAC5C,GAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACD,CAAA,GAAA;AAAA,SACH;AAAA,MACF;AAAA;AAAA,MAGA,KAAKA,sBAAA,CAAI,SAAA,CAAU,OAAA,EAAQ,CAAE,KAAA;AAAA,MAC7B,KAAKA,sBAAA,CAAI,SAAA,CAAU,MAAA,EAAO,CAAE,KAAA;AAAA,MAC5B,KAAKA,sBAAA,CAAI,SAAA,CAAU,MAAA,EAAO,CAAE,KAAA;AAAA,MAC5B,KAAKA,sBAAA,CAAI,SAAA,CAAU,QAAA,EAAS,CAAE,KAAA;AAC5B,QAAA,OAAO,IAAI,KAAA,EAAM;AAAA,MAEnB,KAAKA,sBAAA,CAAI,SAAA,CAAU,SAAA,EAAU,CAAE,KAAA;AAAA,MAC/B,KAAKA,sBAAA,CAAI,SAAA,CAAU,SAAA,GAAY,KAAA,EAAO;AACpC,QAAA,IACE,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA,IAC5C,KAAA,KAAUA,sBAAA,CAAI,UAAA,CAAW,gBAAA,EAAiB,CAAE,KAAA,EAC5C;AACA,UAAA,MAAM,IAAI,KAAA;AAAA,YACR,CAAA,WAAA,EACE,EAAE,IACJ,CAAA,+BAAA,EAAkC,KAAK,SAAA,CAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA,GAAA;AAAA,WAChE;AAAA,QACF;AACA,QAAA,OAAO,GAAA,CAAI,KAAA,EAAM,EAAG,QAAA,EAAS;AAAA,MAC/B;AAAA;AAAA,MAGA;AACE,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,qBAAqB,IAAA,CAAK,SAAA;AAAA,YACxB,GAAA;AAAA,YACA,IAAA;AAAA,YACA;AAAA,WACD,CAAA,0BAAA,EAA6B,CAAA,CAAE,IAAI,CAAA;AAAA,SACtC;AAAA;AACJ,EACF;AAAA,EAEQ,gBAAA,CAAiB,KAAgB,GAAA,EAA6B;AACpE,IAAA,MAAM,QAAQ,IAAA,CAAK,SAAA,CAAU,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA;AAClD,IAAA,QAAQ,KAAA,CAAM,QAAO;AAAG,MACtB,KAAKA,sBAAA,CAAI,eAAA,CAAgB,oBAAA,EAAqB;AAC5C,QAAA,OAAO,IAAA,CAAK,aAAa,GAAG,CAAA;AAAA,MAC9B,KAAKA,sBAAA,CAAI,eAAA,CAAgB,sBAAA,EAAuB;AAC9C,QAAA,OAAO,IAAA,CAAK,cAAA,CAAe,GAAA,EAAK,KAAA,CAAM,aAAa,CAAA;AAAA,MACrD,KAAKA,sBAAA,CAAI,eAAA,CAAgB,qBAAA,EAAsB;AAC7C,QAAA,OAAO,IAAA,CAAK,aAAA,CAAc,GAAA,EAAK,KAAA,CAAM,YAAY,CAAA;AAAA,MACnD;AACE,QAAA,MAAM,IAAI,KAAA;AAAA,UACR,uBAAuB,GAAA,CAAI,IAAA,GAAO,QAAA,EAAU,KAAK,KAAK,CAAA;AAAA,SACxD;AAAA;AACJ,EACF;AAAA,EAEQ,aAAA,CAAc,KAAgB,GAAA,EAAgC;AACpE,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,MAAM,CAAA,EAAG,IAAA,CAAK,UAAU,GAAA,EAAK,IAAA,EAAM,CAAC,CAAC,CAAA,aAAA,CAAe,CAAA;AAAA,IAChE;AACA,IAAA,IAAI,IAAI,MAAA,KAAW,CAAA,IAAK,GAAA,CAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAC9C,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,GAAG,GAAG,CAAA,+DAAA;AAAA,OACR;AAAA,IACF;AACA,IAAA,MAAM,OAAO,GAAA,CAAI,CAAC,CAAA,CAAE,GAAA,GAAM,QAAA,EAAS;AACnC,IAAA,IAAI,GAAA,CAAI,CAAC,CAAA,CAAE,MAAA,EAAO,CAAE,UAAUA,sBAAA,CAAI,SAAA,CAAU,SAAA,EAAU,CAAE,KAAA,EAAO;AAC7D,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,GAAA,CAAI,CAAC,CAAC,CAAA,gBAAA,CAAkB,CAAA;AAAA,IAC7C;AACA,IAAA,MAAM,QAAQ,GAAA,CAAI,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA;AAC7C,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,wBAAwB,IAAI,CAAA,UAAA,EAAa,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA;AAAA,OAChE;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAkB,EAAE,GAAA,EAAK,IAAA,EAAK;AACpC,IAAA,IACE,KAAA,CAAM,QAAO,CAAE,KAAA,KACfA,uBAAI,wBAAA,CAAyB,yBAAA,GAA4B,KAAA,EACzD;AACA,MAAA,MAAM,KAAA,GAAQ,MAAM,SAAA,EAAU;AAC9B,MAAA,MAAM,EAAA,GAAK,MAAM,IAAA,EAAK;AACtB,MAAA,MAAM,MAAA,GAAS,EAAA,CAAG,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,IAAA,CAAK,aAAA,CAAc,GAAA,CAAK,CAAA,GAAI,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAClE,MAAA,GAAA,CAAI,MAAA,GAAS,MAAA;AAAA,IACf;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,cAAA,CAAe,KAAgB,GAAA,EAAiC;AACtE,IAAA,MAAM,MAAW,EAAC;AAClB,IAAA,MAAM,MAAA,GAAS,IAAI,MAAA,EAAO;AAC1B,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,EAAG;AAC1B,MAAA,MAAM,IAAI,GAAA,CACP,GAAA,EAAI,EACH,GAAA,CAAI,CAAC,KAAA,EAAO,CAAA,KAAM,IAAA,CAAK,aAAA,CAAc,OAAO,MAAA,CAAO,CAAC,CAAA,CAAE,IAAA,EAAM,CAAC,CAAA;AACjE,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,GAAA,CAAI,GAAA,EAAI,EAAG,OAAA,CAAQ,CAAC,OAAO,CAAA,KAAM;AAC/B,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,GAAA,CAAI,MAAM,IAAA,EAAK,CAAE,QAAA,EAAU,IAAI,IAAA,CAAK,aAAA;AAAA,QAClC,MAAM,GAAA,EAAI;AAAA,QACV,MAAM,IAAA;AAAK,OACb;AAAA,IACF,CAAC,CAAA;AACD,IAAA,OAAO,GAAA;AAAA,EACT;AAAA,EAEQ,aAAa,GAAA,EAAwB;AAC3C,IAAA,IAAI,GAAA,CAAI,QAAO,CAAE,KAAA,KAAUA,uBAAI,SAAA,CAAU,MAAA,GAAS,KAAA,EAAO;AACvD,MAAA,MAAM,IAAI,MAAM,CAAA,0BAAA,CAA4B,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,EAAI;AACpB,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAA,GAA6C;AAC3C,IAAA,OAAO,KAAK,OAAA,CACT,MAAA;AAAA,MACC,CAAC,UACC,KAAA,CAAM,MAAA,GAAS,KAAA,KACfA,sBAAA,CAAI,eAAA,CAAgB,yBAAA,EAA0B,CAAE;AAAA,KACpD,CACC,QAAQ,CAAC,KAAA,KAAW,MAAM,KAAA,EAAM,CAA+B,OAAO,CAAA;AAAA,EAC3E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,WAAW,QAAA,EAAgC;AACzC,IAAA,MAAM,cAAwD,EAAC;AAE/D,IAAA,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC9B,MAAA,QAAQ,KAAA,CAAM,MAAA,EAAO,CAAE,KAAA;AAAO,QAC5B,KAAKA,sBAAA,CAAI,eAAA,CAAgB,oBAAA,GAAuB,KAAA,EAAO;AACrD,UAAA,MAAM,GAAA,GAAM,MAAM,SAAA,EAAU;AAC5B,UAAA,WAAA,CAAY,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA,GAAI,iBAAiB,GAAG,CAAA;AACzD,UAAA;AAAA,QACF;AAAA,QACA,KAAKA,sBAAA,CAAI,eAAA,CAAgB,sBAAA,GAAyB,KAAA,EAAO;AACvD,UAAA,MAAM,GAAA,GAAM,MAAM,WAAA,EAAY;AAC9B,UAAA,WAAA,CAAY,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA,GAAI,mBAAmB,GAAG,CAAA;AAC3D,UAAA;AAAA,QACF;AAAA,QACA,KAAKA,sBAAA,CAAI,eAAA,CAAgB,qBAAA,GAAwB,KAAA,EAAO;AACtD,UAAA,MAAM,GAAA,GAAM,MAAM,UAAA,EAAW;AAC7B,UAAA,WAAA,CAAY,IAAI,IAAA,EAAK,CAAE,UAAU,CAAA,GAAI,kBAAkB,GAAG,CAAA;AAC1D,UAAA;AAAA,QACF;AAAA,QACA,KAAKA,sBAAA,CAAI,eAAA,CAAgB,qBAAA,GAAwB,KAAA,EAAO;AACtD,UAAA,MAAM,EAAA,GAAK,MAAM,UAAA,EAAW;AAC5B,UAAA,MAAM,MAAA,GAAS,EAAA,CAAG,IAAA,EAAK,CAAE,QAAA,EAAS;AAClC,UAAA,MAAM,EAAE,KAAA,EAAM,GAAI,oBAAA,CAAqB,EAAE,CAAA;AACzC,UAAA,WAAA,CAAY,MAAM,CAAA,GAAI,KAAA;AACtB,UAAA;AAAA,QACF;AAAA,QACA,KAAKA,sBAAA,CAAI,eAAA,CAAgB,yBAAA,GAA4B,KAAA,CAErD;AACF,IACF,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAmB;AAAA,MACvB,OAAA,EAAS,yCAAA;AAAA,MACT,WAAA,EAAa,EAAE,GAAG,oBAAA,EAAsB,GAAG,WAAA;AAAY,KACzD;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,GAAA,CAAI,IAAA,GAAO,iBAAiB,QAAQ,CAAA,CAAA;AAAA,IACtC;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../../src/contract/types.ts"],"sourcesContent":["/* disable PascalCase naming convention, to avoid breaking change */\n/* eslint-disable @typescript-eslint/naming-convention */\nimport { Transaction, xdr } from \"../base/index.js\";\nimport type { SentTransaction } from \"./sent_transaction.js\";\nimport type { Client } from \"./client.js\";\nimport { Server } from \"../rpc/index.js\";\n\nexport type XDR_BASE64 = string;\n/**\n * An unsigned 32-bit integer.\n */\nexport type u32 = number;\n/**\n * A signed 32-bit integer.\n */\nexport type i32 = number;\n/**\n * An unsigned 64-bit integer.\n */\nexport type u64 = bigint;\n/**\n * A signed 64-bit integer.\n */\nexport type i64 = bigint;\n/**\n * An unsigned 128-bit integer.\n */\nexport type u128 = bigint;\n/**\n * A signed 128-bit integer.\n */\nexport type i128 = bigint;\n/**\n * An unsigned 256-bit integer.\n */\nexport type u256 = bigint;\n/**\n * A signed 256-bit integer.\n */\nexport type i256 = bigint;\nexport type Option<T> = T | undefined;\n/**\n * @deprecated Use {@link Timepoint} instead.\n */\nexport type Typepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Timepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Duration = bigint;\n\n/**\n * A \"regular\" transaction, as opposed to a FeeBumpTransaction.\n */\nexport type Tx = Transaction;\n\nexport interface WalletError {\n message: string; // general description message returned to the client app\n code: number; // unique error code\n ext?: Array<string>; // optional extended details\n}\n\n/**\n * A function to request a wallet to sign a built transaction\n *\n * This function takes an XDR provided by the requester and applies a signature to it.\n * It returns a base64-encoded string XDR-encoded Transaction Envelope with Decorated Signatures\n * and the signer address back to the requester.\n *\n * @param xdr - The XDR string representing the transaction to be signed.\n * @param opts - Options for signing the transaction.\n * - `networkPassphrase`: The network's passphrase on which the transaction is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n * - `submit`: If set to true, submits the transaction immediately after signing.\n * - `submitUrl`: The URL of the network to which the transaction should be submitted, if applicable.\n *\n * @returns A promise resolving to an object with the signed transaction XDR and optional signer address and error.\n */\nexport type SignTransaction = (\n xdr: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n submit?: boolean;\n submitUrl?: string;\n },\n) => Promise<\n {\n signedTxXdr: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * A function to request a wallet to sign an authorization entry preimage.\n *\n * Similar to signing a transaction, this function takes an authorization entry preimage provided by the\n * requester and applies a signature to it.\n * It returns a signed hash of the same authorization entry and the signer address back to the requester.\n *\n * @param authEntry - The authorization entry preimage to be signed.\n * @param opts - Options for signing the authorization entry.\n * - `networkPassphrase`: The network's passphrase on which the authorization entry is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n *\n * @returns A promise resolving to an object with the signed authorization entry and optional signer address and error.\n */\nexport type SignAuthEntry = (\n authEntry: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<\n {\n signedAuthEntry: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * Options for a smart contract client.\n */\nexport type ClientOptions = {\n /**\n * The public key of the source account for this transaction. You can\n * override this for specific methods later; see {@link MethodOptions}.\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated. If you do not provide it during\n * initialization, you can provide it later, either when you initialize a\n * method (see {@link MethodOptions}) or when you call\n * {@link contract.AssembledTransaction.signAndSend | signAndSend}.\n *\n * Matches signature of `signTransaction` from Freighter.\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties. If you do not provide it during initialization, you can\n * provide it later either when you initialize a method (see {@link MethodOptions})\n * or when you call {@link contract.AssembledTransaction.signAuthEntries | signAuthEntries}.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n */\n signAuthEntry?: SignAuthEntry;\n /** The address of the contract the client will interact with. */\n contractId: string;\n /**\n * The network passphrase for the Stellar network this contract is deployed\n * to.\n */\n networkPassphrase: string;\n /**\n * The URL of the RPC instance that will be used to interact with this\n * contract.\n */\n rpcUrl: string;\n /**\n * If true, will allow HTTP requests to the RPC. If false, will\n * only allow HTTPS requests.\n * @defaultValue false\n */\n allowHttp?: boolean;\n /** Optional headers to include in requests to the RPC. */\n headers?: Record<string, string>;\n /**\n * This gets filled in automatically from the ContractSpec when you\n * instantiate a {@link Client}.\n *\n * Background: If the contract you're calling uses the `#[contracterror]`\n * macro to create an `Error` enum, then those errors get included in the\n * on-chain XDR that also describes your contract's methods. Each error will\n * have a specific number.\n *\n * A Client makes method calls with an {@link contract.AssembledTransaction | AssembledTransaction}.\n * When one of these method calls encounters an error, `AssembledTransaction`\n * will first attempt to parse the error as an \"official\" `contracterror`\n * error, by using this passed-in `errorTypes` object. See `parseError`\n * on {@link contract.AssembledTransaction}. If `errorTypes` is blank or no\n * matching error is found, then it will throw the raw error.\n * @defaultValue `{}`\n */\n errorTypes?: Record<number, { message: string }>;\n /**\n * The Server instance to use for RPC calls. If not provided, one will be\n * created automatically from `rpcUrl` and `serverOptions`.\n */\n server?: Server;\n};\n\n/**\n * Options for a smart contract method invocation.\n */\nexport type MethodOptions = {\n /**\n * The fee to pay for the transaction.\n * @defaultValue 100\n */\n fee?: string;\n\n /**\n * The timebounds which should be set for transactions generated by this\n * contract client. {@link contract.DEFAULT_TIMEOUT}\n * @defaultValue 300\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the\n * AssembledTransaction.\n * @defaultValue true\n */\n simulate?: boolean;\n\n /**\n * If true, will automatically attempt to restore the transaction if there\n * are archived entries that need renewal.\n * @defaultValue false\n */\n restore?: boolean;\n\n /**\n * The public key of the source account for this transaction.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated.\n *\n * Matches signature of `signTransaction` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signAuthEntry?: SignAuthEntry;\n};\n\nexport type AssembledTransactionOptions<T = string> = MethodOptions &\n ClientOptions & {\n method: string;\n args?: any[];\n parseResultXdr: (xdr: xdr.ScVal) => T;\n\n /**\n * The address of the account that should sign the transaction. Useful when\n * a wallet holds multiple addresses to ensure signing with the intended one.\n */\n address?: string;\n\n /**\n * This option will be passed through to the SEP43-compatible wallet extension. If true, and if the wallet supports it, the transaction will be signed and immediately submitted to the network by the wallet, bypassing the submit logic in {@link SentTransaction}.\n * @defaultValue false\n */\n submit?: boolean;\n\n /**\n * The URL of the network to which the transaction should be submitted.\n * Only applicable when 'submit' is set to true.\n */\n submitUrl?: string;\n };\n\n/**\n * The default timebounds, in seconds, during which a transaction will be valid.\n * This is attached to the transaction _before_ transaction simulation (it is\n * needed for simulation to succeed). It is also re-calculated and re-added\n * _before_ transaction signing.\n * @defaultValue 300\n */\nexport const DEFAULT_TIMEOUT = 5 * 60;\n\n/**\n * An impossible account on the Stellar network\n * @defaultValue GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\n */\nexport const NULL_ACCOUNT =\n \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n"],"names":[],"mappings":";;AAmSO,MAAM,kBAAkB,CAAA,GAAI;AAM5B,MAAM,YAAA,GACX;;;;;"}
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../src/contract/types.ts"],"sourcesContent":["/* Type aliases below intentionally use non-PascalCase names (e.g. `XDR_BASE64`,\n `u32`) to preserve the public API — renaming them would be a breaking change. */\n\nimport { Transaction, xdr } from \"../base/index.js\";\nimport type { SentTransaction } from \"./sent_transaction.js\";\nimport type { Client } from \"./client.js\";\nimport { Server } from \"../rpc/index.js\";\n\nexport type XDR_BASE64 = string;\n/**\n * An unsigned 32-bit integer.\n */\nexport type u32 = number;\n/**\n * A signed 32-bit integer.\n */\nexport type i32 = number;\n/**\n * An unsigned 64-bit integer.\n */\nexport type u64 = bigint;\n/**\n * A signed 64-bit integer.\n */\nexport type i64 = bigint;\n/**\n * An unsigned 128-bit integer.\n */\nexport type u128 = bigint;\n/**\n * A signed 128-bit integer.\n */\nexport type i128 = bigint;\n/**\n * An unsigned 256-bit integer.\n */\nexport type u256 = bigint;\n/**\n * A signed 256-bit integer.\n */\nexport type i256 = bigint;\nexport type Option<T> = T | undefined;\n/**\n * @deprecated Use {@link Timepoint} instead.\n */\nexport type Typepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Timepoint = bigint;\n/**\n * An unsigned 64-bit integer.\n */\nexport type Duration = bigint;\n\n/**\n * A \"regular\" transaction, as opposed to a FeeBumpTransaction.\n */\nexport type Tx = Transaction;\n\nexport interface WalletError {\n message: string; // general description message returned to the client app\n code: number; // unique error code\n ext?: Array<string>; // optional extended details\n}\n\n/**\n * A function to request a wallet to sign a built transaction\n *\n * This function takes an XDR provided by the requester and applies a signature to it.\n * It returns a base64-encoded string XDR-encoded Transaction Envelope with Decorated Signatures\n * and the signer address back to the requester.\n *\n * @param xdr - The XDR string representing the transaction to be signed.\n * @param opts - Options for signing the transaction.\n * - `networkPassphrase`: The network's passphrase on which the transaction is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n * - `submit`: If set to true, submits the transaction immediately after signing.\n * - `submitUrl`: The URL of the network to which the transaction should be submitted, if applicable.\n *\n * @returns A promise resolving to an object with the signed transaction XDR and optional signer address and error.\n */\nexport type SignTransaction = (\n xdr: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n submit?: boolean;\n submitUrl?: string;\n },\n) => Promise<\n {\n signedTxXdr: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * A function to request a wallet to sign an authorization entry preimage.\n *\n * Similar to signing a transaction, this function takes an authorization entry preimage provided by the\n * requester and applies a signature to it.\n * It returns a signed hash of the same authorization entry and the signer address back to the requester.\n *\n * @param authEntry - The authorization entry preimage to be signed.\n * @param opts - Options for signing the authorization entry.\n * - `networkPassphrase`: The network's passphrase on which the authorization entry is intended to be signed.\n * - `address`: The public key of the account that should be used to sign.\n *\n * @returns A promise resolving to an object with the signed authorization entry and optional signer address and error.\n */\nexport type SignAuthEntry = (\n authEntry: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n },\n) => Promise<\n {\n signedAuthEntry: string;\n signerAddress?: string;\n } & { error?: WalletError }\n>;\n\n/**\n * Options for a smart contract client.\n */\nexport type ClientOptions = {\n /**\n * The public key of the source account for this transaction. You can\n * override this for specific methods later; see {@link MethodOptions}.\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated. If you do not provide it during\n * initialization, you can provide it later, either when you initialize a\n * method (see {@link MethodOptions}) or when you call\n * {@link contract.AssembledTransaction.signAndSend | signAndSend}.\n *\n * Matches signature of `signTransaction` from Freighter.\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties. If you do not provide it during initialization, you can\n * provide it later either when you initialize a method (see {@link MethodOptions})\n * or when you call {@link contract.AssembledTransaction.signAuthEntries | signAuthEntries}.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n */\n signAuthEntry?: SignAuthEntry;\n /** The address of the contract the client will interact with. */\n contractId: string;\n /**\n * The network passphrase for the Stellar network this contract is deployed\n * to.\n */\n networkPassphrase: string;\n /**\n * The URL of the RPC instance that will be used to interact with this\n * contract.\n */\n rpcUrl: string;\n /**\n * If true, will allow HTTP requests to the RPC. If false, will\n * only allow HTTPS requests.\n * @defaultValue false\n */\n allowHttp?: boolean;\n /** Optional headers to include in requests to the RPC. */\n headers?: Record<string, string>;\n /**\n * This gets filled in automatically from the ContractSpec when you\n * instantiate a {@link Client}.\n *\n * Background: If the contract you're calling uses the `#[contracterror]`\n * macro to create an `Error` enum, then those errors get included in the\n * on-chain XDR that also describes your contract's methods. Each error will\n * have a specific number.\n *\n * A Client makes method calls with an {@link contract.AssembledTransaction | AssembledTransaction}.\n * When one of these method calls encounters an error, `AssembledTransaction`\n * will first attempt to parse the error as an \"official\" `contracterror`\n * error, by using this passed-in `errorTypes` object. See `parseError`\n * on {@link contract.AssembledTransaction}. If `errorTypes` is blank or no\n * matching error is found, then it will throw the raw error.\n * @defaultValue `{}`\n */\n errorTypes?: Record<number, { message: string }>;\n /**\n * The Server instance to use for RPC calls. If not provided, one will be\n * created automatically from `rpcUrl` and `serverOptions`.\n */\n server?: Server;\n};\n\n/**\n * Options for a smart contract method invocation.\n */\nexport type MethodOptions = {\n /**\n * The fee to pay for the transaction.\n * @defaultValue 100\n */\n fee?: string;\n\n /**\n * The timebounds which should be set for transactions generated by this\n * contract client. {@link contract.DEFAULT_TIMEOUT}\n * @defaultValue 300\n */\n timeoutInSeconds?: number;\n\n /**\n * Whether to automatically simulate the transaction when constructing the\n * AssembledTransaction.\n * @defaultValue true\n */\n simulate?: boolean;\n\n /**\n * If true, will automatically attempt to restore the transaction if there\n * are archived entries that need renewal.\n * @defaultValue false\n */\n restore?: boolean;\n\n /**\n * The public key of the source account for this transaction.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n publicKey?: string;\n /**\n * A function to sign the transaction using the private key corresponding to\n * the given `publicKey`. You do not need to provide this, for read-only\n * calls, which only need to be simulated.\n *\n * Matches signature of `signTransaction` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signTransaction?: SignTransaction;\n /**\n * A function to sign a specific auth entry for a transaction, using the\n * private key corresponding to the provided `publicKey`. This is only needed\n * for multi-auth transactions, in which one transaction is signed by\n * multiple parties.\n *\n * Matches signature of `signAuthEntry` from Freighter.\n *\n * Default: the one provided to the {@link Client} in {@link ClientOptions}\n */\n signAuthEntry?: SignAuthEntry;\n};\n\nexport type AssembledTransactionOptions<T = string> = MethodOptions &\n ClientOptions & {\n method: string;\n args?: any[];\n parseResultXdr: (xdr: xdr.ScVal) => T;\n\n /**\n * The address of the account that should sign the transaction. Useful when\n * a wallet holds multiple addresses to ensure signing with the intended one.\n */\n address?: string;\n\n /**\n * This option will be passed through to the SEP43-compatible wallet extension. If true, and if the wallet supports it, the transaction will be signed and immediately submitted to the network by the wallet, bypassing the submit logic in {@link SentTransaction}.\n * @defaultValue false\n */\n submit?: boolean;\n\n /**\n * The URL of the network to which the transaction should be submitted.\n * Only applicable when 'submit' is set to true.\n */\n submitUrl?: string;\n };\n\n/**\n * The default timebounds, in seconds, during which a transaction will be valid.\n * This is attached to the transaction _before_ transaction simulation (it is\n * needed for simulation to succeed). It is also re-calculated and re-added\n * _before_ transaction signing.\n * @defaultValue 300\n */\nexport const DEFAULT_TIMEOUT = 5 * 60;\n\n/**\n * An impossible account on the Stellar network\n * @defaultValue GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\n */\nexport const NULL_ACCOUNT =\n \"GAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWHF\";\n"],"names":[],"mappings":";;AAoSO,MAAM,kBAAkB,CAAA,GAAI;AAM5B,MAAM,YAAA,GACX;;;;;"}
|