@stellar/stellar-sdk 16.0.1 → 16.1.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 +2 -2
- package/dist/stellar-sdk-axios.js +5608 -4598
- package/dist/stellar-sdk-axios.js.map +1 -1
- package/dist/stellar-sdk-axios.min.js +12 -11
- package/dist/stellar-sdk-axios.min.js.map +1 -1
- package/dist/stellar-sdk.js +3902 -3434
- package/dist/stellar-sdk.js.map +1 -1
- package/dist/stellar-sdk.min.js +17 -17
- package/dist/stellar-sdk.min.js.map +1 -1
- package/lib/axios/cjs/base/auth.js +107 -0
- package/lib/axios/cjs/base/auth.js.map +1 -1
- package/lib/axios/cjs/base/keypair.js +39 -0
- package/lib/axios/cjs/base/keypair.js.map +1 -1
- package/lib/axios/cjs/base/scval.js +34 -0
- package/lib/axios/cjs/base/scval.js.map +1 -1
- package/lib/axios/cjs/bindings/config.js +1 -1
- package/lib/axios/cjs/cli/index.js +1 -1
- package/lib/axios/cjs/cli/index.js.map +1 -1
- package/lib/axios/cjs/contract/assembled_transaction.js +8 -7
- package/lib/axios/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/cjs/contract/client.js +56 -3
- package/lib/axios/cjs/contract/client.js.map +1 -1
- package/lib/axios/cjs/contract/spec.js +7 -3
- package/lib/axios/cjs/contract/spec.js.map +1 -1
- package/lib/axios/cjs/errors/transaction_failed.js +62 -0
- package/lib/axios/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/axios/cjs/errors/wrap_http_error.js +20 -0
- package/lib/axios/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/cjs/federation/server.js +14 -15
- package/lib/axios/cjs/federation/server.js.map +1 -1
- package/lib/axios/cjs/horizon/call_builder.js +20 -0
- package/lib/axios/cjs/horizon/call_builder.js.map +1 -1
- package/lib/axios/cjs/horizon/horizon_api.js +5 -0
- 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/server.js +20 -26
- package/lib/axios/cjs/horizon/server.js.map +1 -1
- package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/axios/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/axios/cjs/index.js +4 -0
- package/lib/axios/cjs/index.js.map +1 -1
- package/lib/axios/cjs/rpc/api.js.map +1 -1
- package/lib/axios/cjs/rpc/axios.js +1 -1
- package/lib/axios/cjs/rpc/server.js +163 -8
- package/lib/axios/cjs/rpc/server.js.map +1 -1
- package/lib/axios/esm/base/auth.d.ts +141 -0
- package/lib/axios/esm/base/auth.js +106 -1
- package/lib/axios/esm/base/auth.js.map +1 -1
- package/lib/axios/esm/base/index.d.ts +2 -2
- package/lib/axios/esm/base/keypair.d.ts +27 -0
- package/lib/axios/esm/base/keypair.js +39 -0
- package/lib/axios/esm/base/keypair.js.map +1 -1
- package/lib/axios/esm/base/scval.d.ts +4 -0
- package/lib/axios/esm/base/scval.js +34 -0
- package/lib/axios/esm/base/scval.js.map +1 -1
- package/lib/axios/esm/bindings/config.js +1 -1
- package/lib/axios/esm/cli/index.js +1 -1
- package/lib/axios/esm/cli/index.js.map +1 -1
- package/lib/axios/esm/contract/assembled_transaction.d.ts +1 -1
- package/lib/axios/esm/contract/assembled_transaction.js +9 -8
- package/lib/axios/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/axios/esm/contract/client.d.ts +49 -3
- package/lib/axios/esm/contract/client.js +56 -3
- package/lib/axios/esm/contract/client.js.map +1 -1
- package/lib/axios/esm/contract/spec.js +7 -3
- package/lib/axios/esm/contract/spec.js.map +1 -1
- package/lib/axios/esm/errors/index.d.ts +1 -0
- package/lib/axios/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/axios/esm/errors/transaction_failed.js +60 -0
- package/lib/axios/esm/errors/transaction_failed.js.map +1 -0
- package/lib/axios/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/axios/esm/errors/wrap_http_error.js +18 -0
- package/lib/axios/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/axios/esm/federation/server.js +14 -15
- package/lib/axios/esm/federation/server.js.map +1 -1
- package/lib/axios/esm/horizon/call_builder.js +20 -0
- package/lib/axios/esm/horizon/call_builder.js.map +1 -1
- package/lib/axios/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/axios/esm/horizon/horizon_api.js +5 -0
- 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/server.d.ts +10 -4
- package/lib/axios/esm/horizon/server.js +20 -26
- package/lib/axios/esm/horizon/server.js.map +1 -1
- package/lib/axios/esm/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/axios/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/axios/esm/index.js +2 -1
- package/lib/axios/esm/index.js.map +1 -1
- package/lib/axios/esm/rpc/api.d.ts +21 -0
- package/lib/axios/esm/rpc/api.js.map +1 -1
- package/lib/axios/esm/rpc/axios.js +1 -1
- package/lib/axios/esm/rpc/server.d.ts +104 -1
- package/lib/axios/esm/rpc/server.js +163 -8
- package/lib/axios/esm/rpc/server.js.map +1 -1
- package/lib/cjs/base/auth.js +107 -0
- package/lib/cjs/base/auth.js.map +1 -1
- package/lib/cjs/base/keypair.js +39 -0
- package/lib/cjs/base/keypair.js.map +1 -1
- package/lib/cjs/base/scval.js +34 -0
- package/lib/cjs/base/scval.js.map +1 -1
- package/lib/cjs/bindings/config.js +1 -1
- package/lib/cjs/cli/index.js +1 -1
- package/lib/cjs/cli/index.js.map +1 -1
- package/lib/cjs/contract/assembled_transaction.js +8 -7
- package/lib/cjs/contract/assembled_transaction.js.map +1 -1
- package/lib/cjs/contract/client.js +56 -3
- package/lib/cjs/contract/client.js.map +1 -1
- package/lib/cjs/contract/spec.js +7 -3
- package/lib/cjs/contract/spec.js.map +1 -1
- package/lib/cjs/errors/transaction_failed.js +62 -0
- package/lib/cjs/errors/transaction_failed.js.map +1 -0
- package/lib/cjs/errors/wrap_http_error.js +20 -0
- package/lib/cjs/errors/wrap_http_error.js.map +1 -0
- package/lib/cjs/federation/server.js +14 -15
- package/lib/cjs/federation/server.js.map +1 -1
- package/lib/cjs/horizon/call_builder.js +20 -0
- package/lib/cjs/horizon/call_builder.js.map +1 -1
- package/lib/cjs/horizon/horizon_api.js +5 -0
- package/lib/cjs/horizon/horizon_api.js.map +1 -1
- package/lib/cjs/horizon/horizon_axios_client.js +1 -1
- package/lib/cjs/horizon/server.js +20 -26
- package/lib/cjs/horizon/server.js.map +1 -1
- package/lib/cjs/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/cjs/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/cjs/index.js +4 -0
- package/lib/cjs/index.js.map +1 -1
- package/lib/cjs/rpc/api.js.map +1 -1
- package/lib/cjs/rpc/axios.js +1 -1
- package/lib/cjs/rpc/server.js +163 -8
- package/lib/cjs/rpc/server.js.map +1 -1
- package/lib/esm/base/auth.d.ts +141 -0
- package/lib/esm/base/auth.js +106 -1
- package/lib/esm/base/auth.js.map +1 -1
- package/lib/esm/base/index.d.ts +2 -2
- package/lib/esm/base/keypair.d.ts +27 -0
- package/lib/esm/base/keypair.js +39 -0
- package/lib/esm/base/keypair.js.map +1 -1
- package/lib/esm/base/scval.d.ts +4 -0
- package/lib/esm/base/scval.js +34 -0
- package/lib/esm/base/scval.js.map +1 -1
- package/lib/esm/bindings/config.js +1 -1
- package/lib/esm/cli/index.js +1 -1
- package/lib/esm/cli/index.js.map +1 -1
- package/lib/esm/contract/assembled_transaction.d.ts +1 -1
- package/lib/esm/contract/assembled_transaction.js +9 -8
- package/lib/esm/contract/assembled_transaction.js.map +1 -1
- package/lib/esm/contract/client.d.ts +49 -3
- package/lib/esm/contract/client.js +56 -3
- package/lib/esm/contract/client.js.map +1 -1
- package/lib/esm/contract/spec.js +7 -3
- package/lib/esm/contract/spec.js.map +1 -1
- package/lib/esm/errors/index.d.ts +1 -0
- package/lib/esm/errors/transaction_failed.d.ts +55 -0
- package/lib/esm/errors/transaction_failed.js +60 -0
- package/lib/esm/errors/transaction_failed.js.map +1 -0
- package/lib/esm/errors/wrap_http_error.d.ts +20 -0
- package/lib/esm/errors/wrap_http_error.js +18 -0
- package/lib/esm/errors/wrap_http_error.js.map +1 -0
- package/lib/esm/federation/server.js +14 -15
- package/lib/esm/federation/server.js.map +1 -1
- package/lib/esm/horizon/call_builder.js +20 -0
- package/lib/esm/horizon/call_builder.js.map +1 -1
- package/lib/esm/horizon/horizon_api.d.ts +12 -1
- package/lib/esm/horizon/horizon_api.js +5 -0
- package/lib/esm/horizon/horizon_api.js.map +1 -1
- package/lib/esm/horizon/horizon_axios_client.js +1 -1
- package/lib/esm/horizon/server.d.ts +10 -4
- package/lib/esm/horizon/server.js +20 -26
- package/lib/esm/horizon/server.js.map +1 -1
- package/lib/esm/horizon/trade_aggregation_call_builder.js +20 -0
- package/lib/esm/horizon/trade_aggregation_call_builder.js.map +1 -1
- package/lib/esm/index.js +2 -1
- package/lib/esm/index.js.map +1 -1
- package/lib/esm/rpc/api.d.ts +21 -0
- package/lib/esm/rpc/api.js.map +1 -1
- package/lib/esm/rpc/axios.js +1 -1
- package/lib/esm/rpc/server.d.ts +104 -1
- package/lib/esm/rpc/server.js +163 -8
- package/lib/esm/rpc/server.js.map +1 -1
- package/package.json +27 -30
|
@@ -6,7 +6,7 @@ require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xd
|
|
|
6
6
|
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js');
|
|
7
7
|
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js');
|
|
8
8
|
require('../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js');
|
|
9
|
-
require('../base/generated/curr_generated.js');
|
|
9
|
+
var curr_generated = require('../base/generated/curr_generated.js');
|
|
10
10
|
require('@noble/hashes/sha2.js');
|
|
11
11
|
require('../base/signing.js');
|
|
12
12
|
require('../base/keypair.js');
|
|
@@ -107,11 +107,25 @@ class Client {
|
|
|
107
107
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm hash.
|
|
108
108
|
* The wasmHash can be provided in either hex or base64 format.
|
|
109
109
|
*
|
|
110
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
111
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
112
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
113
|
+
* typed, autocompleted contract methods without code generation.
|
|
114
|
+
*
|
|
110
115
|
* @param wasmHash - The hash of the contract's wasm binary, in either hex or base64 format.
|
|
111
116
|
* @param options - The ClientOptions object containing the necessary configuration, including the rpcUrl.
|
|
112
117
|
* @param format - (optional) The format of the provided wasmHash, either "hex" or "base64". Defaults to "hex".
|
|
113
118
|
* @returns A Promise that resolves to a Client instance.
|
|
114
119
|
* @throws If the provided options object does not contain an rpcUrl.
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* ```ts
|
|
123
|
+
* interface MyContract {
|
|
124
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
125
|
+
* }
|
|
126
|
+
* const client = await contract.Client.fromWasmHash<MyContract>(hash, options);
|
|
127
|
+
* const tx = await client.increment(); // typed
|
|
128
|
+
* ```
|
|
115
129
|
*/
|
|
116
130
|
static async fromWasmHash(wasmHash, options, format = "hex") {
|
|
117
131
|
if (!options || !options.rpcUrl) {
|
|
@@ -128,10 +142,24 @@ class Client {
|
|
|
128
142
|
/**
|
|
129
143
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm binary.
|
|
130
144
|
*
|
|
145
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
146
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
147
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
148
|
+
* typed, autocompleted contract methods without code generation.
|
|
149
|
+
*
|
|
131
150
|
* @param wasm - The contract's wasm binary as a Buffer.
|
|
132
151
|
* @param options - The ClientOptions object containing the necessary configuration.
|
|
133
152
|
* @returns A Promise that resolves to a Client instance.
|
|
134
153
|
* @throws If the contract spec cannot be obtained from the provided wasm binary.
|
|
154
|
+
*
|
|
155
|
+
* @example
|
|
156
|
+
* ```ts
|
|
157
|
+
* interface MyContract {
|
|
158
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
159
|
+
* }
|
|
160
|
+
* const client = await contract.Client.fromWasm<MyContract>(wasm, options);
|
|
161
|
+
* const tx = await client.increment(); // typed
|
|
162
|
+
* ```
|
|
135
163
|
*/
|
|
136
164
|
static async fromWasm(wasm, options) {
|
|
137
165
|
const spec$1 = await spec.Spec.fromWasm(wasm);
|
|
@@ -140,20 +168,45 @@ class Client {
|
|
|
140
168
|
/**
|
|
141
169
|
* Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.
|
|
142
170
|
*
|
|
171
|
+
* If the contract is a built-in Stellar Asset Contract (SAC), the embedded
|
|
172
|
+
* SAC spec is used instead of downloading Wasm, since a SAC has no Wasm
|
|
173
|
+
* executable on-chain.
|
|
174
|
+
*
|
|
175
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
176
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
177
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
178
|
+
* typed, autocompleted contract methods without code generation.
|
|
179
|
+
*
|
|
143
180
|
* @param options - The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl.
|
|
144
181
|
* @returns A Promise that resolves to a Client instance.
|
|
145
182
|
* @throws If the provided options object does not contain both rpcUrl and contractId.
|
|
183
|
+
*
|
|
184
|
+
* @example
|
|
185
|
+
* ```ts
|
|
186
|
+
* interface MyContract {
|
|
187
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
188
|
+
* }
|
|
189
|
+
* const client = await contract.Client.from<MyContract>(options);
|
|
190
|
+
* const tx = await client.increment(); // typed
|
|
191
|
+
* ```
|
|
146
192
|
*/
|
|
147
193
|
static async from(options) {
|
|
148
194
|
if (!options || !options.rpcUrl || !options.contractId) {
|
|
149
195
|
throw new TypeError("options must contain rpcUrl and contractId");
|
|
150
196
|
}
|
|
151
197
|
const { rpcUrl, contractId, allowHttp, headers } = options;
|
|
152
|
-
const server$1 = new server.RpcServer(rpcUrl, {
|
|
198
|
+
const server$1 = options.server ?? new server.RpcServer(rpcUrl, {
|
|
153
199
|
allowHttp,
|
|
154
200
|
headers
|
|
155
201
|
});
|
|
156
|
-
const
|
|
202
|
+
const instance = await server$1.getContractInstance(contractId);
|
|
203
|
+
if (instance.executable().switch() === curr_generated.default.ContractExecutableType.contractExecutableStellarAsset()) {
|
|
204
|
+
const { SAC_SPEC } = await Promise.resolve().then(function () { return require('../bindings/sac-spec.js'); });
|
|
205
|
+
return new Client(new spec.Spec(SAC_SPEC), options);
|
|
206
|
+
}
|
|
207
|
+
const wasm = await server$1.getContractWasmByHash(
|
|
208
|
+
instance.executable().wasmHash()
|
|
209
|
+
);
|
|
157
210
|
return Client.fromWasm(wasm, options);
|
|
158
211
|
}
|
|
159
212
|
txFromJSON = (json) => {
|
|
@@ -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-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
|
+
{"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 * @typeParam T - An interface describing the contract's methods, used to type\n * the returned client. Defaults to `unknown`, so calling without a type\n * argument yields a plain `Client` (backward compatible). Provide it to get\n * typed, autocompleted contract methods without code generation.\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 * @example\n * ```ts\n * interface MyContract {\n * increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;\n * }\n * const client = await contract.Client.fromWasmHash<MyContract>(hash, options);\n * const tx = await client.increment(); // typed\n * ```\n */\n static async fromWasmHash<T = unknown>(\n wasmHash: Buffer | string,\n options: ClientOptions,\n format: \"hex\" | \"base64\" = \"hex\",\n ): Promise<Client & T> {\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<T>(wasm, options);\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions and the contract's wasm binary.\n *\n * @typeParam T - An interface describing the contract's methods, used to type\n * the returned client. Defaults to `unknown`, so calling without a type\n * argument yields a plain `Client` (backward compatible). Provide it to get\n * typed, autocompleted contract methods without code generation.\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 * @example\n * ```ts\n * interface MyContract {\n * increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;\n * }\n * const client = await contract.Client.fromWasm<MyContract>(wasm, options);\n * const tx = await client.increment(); // typed\n * ```\n */\n static async fromWasm<T = unknown>(\n wasm: Buffer,\n options: ClientOptions,\n ): Promise<Client & T> {\n const spec = await Spec.fromWasm(wasm);\n return new Client(spec, options) as unknown as Client & T;\n }\n\n /**\n * Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.\n *\n * If the contract is a built-in Stellar Asset Contract (SAC), the embedded\n * SAC spec is used instead of downloading Wasm, since a SAC has no Wasm\n * executable on-chain.\n *\n * @typeParam T - An interface describing the contract's methods, used to type\n * the returned client. Defaults to `unknown`, so calling without a type\n * argument yields a plain `Client` (backward compatible). Provide it to get\n * typed, autocompleted contract methods without code generation.\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 * @example\n * ```ts\n * interface MyContract {\n * increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;\n * }\n * const client = await contract.Client.from<MyContract>(options);\n * const tx = await client.increment(); // typed\n * ```\n */\n static async from<T = unknown>(options: ClientOptions): Promise<Client & T> {\n if (!options || !options.rpcUrl || !options.contractId) {\n throw new TypeError(\"options must contain rpcUrl and contractId\");\n }\n\n const { rpcUrl, contractId, allowHttp, headers } = options;\n const server =\n options.server ??\n new Server(rpcUrl, {\n allowHttp,\n headers,\n });\n\n const instance = await server.getContractInstance(contractId);\n\n if (\n instance.executable().switch() ===\n xdr.ContractExecutableType.contractExecutableStellarAsset()\n ) {\n // Lazily load the (large) embedded SAC spec so bundlers can code-split\n // it out of the common path; it's only needed for built-in SACs.\n const { SAC_SPEC } = await import(\"../bindings/sac-spec.js\");\n return new Client(new Spec(SAC_SPEC), options) as unknown as Client & T;\n }\n\n const wasm = await server.getContractWasmByHash(\n instance.executable().wasmHash(),\n );\n\n return Client.fromWasm<T>(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","xdr"],"mappings":"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"}
|
package/lib/cjs/contract/spec.js
CHANGED
|
@@ -17,7 +17,7 @@ var address = require('../base/address.js');
|
|
|
17
17
|
require('../base/transaction_builder.js');
|
|
18
18
|
require('../base/muxed_account.js');
|
|
19
19
|
var contract = require('../base/contract.js');
|
|
20
|
-
require('../base/scval.js');
|
|
20
|
+
var scval = require('../base/scval.js');
|
|
21
21
|
var index = require('../base/numbers/index.js');
|
|
22
22
|
var rust_result = require('./rust_result.js');
|
|
23
23
|
var utils = require('./utils.js');
|
|
@@ -616,6 +616,9 @@ class Spec {
|
|
|
616
616
|
}
|
|
617
617
|
return this.nativeToScVal(val, opt.valueType());
|
|
618
618
|
}
|
|
619
|
+
if (value === curr_generated.default.ScSpecType.scSpecTypeVal().value) {
|
|
620
|
+
return scval.nativeToScVal(val);
|
|
621
|
+
}
|
|
619
622
|
switch (typeof val) {
|
|
620
623
|
case "object": {
|
|
621
624
|
if (val === null) {
|
|
@@ -706,7 +709,7 @@ class Spec {
|
|
|
706
709
|
);
|
|
707
710
|
}
|
|
708
711
|
}
|
|
709
|
-
if (val
|
|
712
|
+
if (val instanceof Map) {
|
|
710
713
|
if (value !== curr_generated.default.ScSpecType.scSpecTypeMap().value) {
|
|
711
714
|
throw new TypeError(`Type ${ty} was not map, but value was Map`);
|
|
712
715
|
}
|
|
@@ -724,7 +727,8 @@ class Spec {
|
|
|
724
727
|
}
|
|
725
728
|
return curr_generated.default.ScVal.scvMap(entries);
|
|
726
729
|
}
|
|
727
|
-
|
|
730
|
+
const proto = Object.getPrototypeOf(val);
|
|
731
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
728
732
|
throw new TypeError(
|
|
729
733
|
`cannot interpret ${val.constructor?.name} value as ScVal (${JSON.stringify(val)})`
|
|
730
734
|
);
|
|
@@ -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-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":"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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 nativeToScVal,\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\n // Delegate scSpecTypeVal to the base nativeToScVal helper, which handles\n // strings, numbers/bigints (via ScInt), booleans, null/undefined, arrays,\n // plain objects (sorted), Map, Address, Contract, Uint8Array, and xdr.ScVal\n // passthroughs — keeping this in one place so the two code paths can't\n // drift apart over time.\n if (value === xdr.ScSpecType.scSpecTypeVal().value) {\n return nativeToScVal(val);\n }\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 instanceof 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 const proto = Object.getPrototypeOf(val);\n if (proto !== Object.prototype && proto !== null) {\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","nativeToScVal","Contract","scValToBigInt"],"mappings":"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"}
|