@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
|
@@ -35,30 +35,76 @@ export declare class Client {
|
|
|
35
35
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm hash.
|
|
36
36
|
* The wasmHash can be provided in either hex or base64 format.
|
|
37
37
|
*
|
|
38
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
39
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
40
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
41
|
+
* typed, autocompleted contract methods without code generation.
|
|
42
|
+
*
|
|
38
43
|
* @param wasmHash - The hash of the contract's wasm binary, in either hex or base64 format.
|
|
39
44
|
* @param options - The ClientOptions object containing the necessary configuration, including the rpcUrl.
|
|
40
45
|
* @param format - (optional) The format of the provided wasmHash, either "hex" or "base64". Defaults to "hex".
|
|
41
46
|
* @returns A Promise that resolves to a Client instance.
|
|
42
47
|
* @throws If the provided options object does not contain an rpcUrl.
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```ts
|
|
51
|
+
* interface MyContract {
|
|
52
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
53
|
+
* }
|
|
54
|
+
* const client = await contract.Client.fromWasmHash<MyContract>(hash, options);
|
|
55
|
+
* const tx = await client.increment(); // typed
|
|
56
|
+
* ```
|
|
43
57
|
*/
|
|
44
|
-
static fromWasmHash(wasmHash: Buffer | string, options: ClientOptions, format?: "hex" | "base64"): Promise<Client>;
|
|
58
|
+
static fromWasmHash<T = unknown>(wasmHash: Buffer | string, options: ClientOptions, format?: "hex" | "base64"): Promise<Client & T>;
|
|
45
59
|
/**
|
|
46
60
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm binary.
|
|
47
61
|
*
|
|
62
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
63
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
64
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
65
|
+
* typed, autocompleted contract methods without code generation.
|
|
66
|
+
*
|
|
48
67
|
* @param wasm - The contract's wasm binary as a Buffer.
|
|
49
68
|
* @param options - The ClientOptions object containing the necessary configuration.
|
|
50
69
|
* @returns A Promise that resolves to a Client instance.
|
|
51
70
|
* @throws If the contract spec cannot be obtained from the provided wasm binary.
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```ts
|
|
74
|
+
* interface MyContract {
|
|
75
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
76
|
+
* }
|
|
77
|
+
* const client = await contract.Client.fromWasm<MyContract>(wasm, options);
|
|
78
|
+
* const tx = await client.increment(); // typed
|
|
79
|
+
* ```
|
|
52
80
|
*/
|
|
53
|
-
static fromWasm(wasm: Buffer, options: ClientOptions): Promise<Client>;
|
|
81
|
+
static fromWasm<T = unknown>(wasm: Buffer, options: ClientOptions): Promise<Client & T>;
|
|
54
82
|
/**
|
|
55
83
|
* Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.
|
|
56
84
|
*
|
|
85
|
+
* If the contract is a built-in Stellar Asset Contract (SAC), the embedded
|
|
86
|
+
* SAC spec is used instead of downloading Wasm, since a SAC has no Wasm
|
|
87
|
+
* executable on-chain.
|
|
88
|
+
*
|
|
89
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
90
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
91
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
92
|
+
* typed, autocompleted contract methods without code generation.
|
|
93
|
+
*
|
|
57
94
|
* @param options - The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl.
|
|
58
95
|
* @returns A Promise that resolves to a Client instance.
|
|
59
96
|
* @throws If the provided options object does not contain both rpcUrl and contractId.
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```ts
|
|
100
|
+
* interface MyContract {
|
|
101
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
102
|
+
* }
|
|
103
|
+
* const client = await contract.Client.from<MyContract>(options);
|
|
104
|
+
* const tx = await client.increment(); // typed
|
|
105
|
+
* ```
|
|
60
106
|
*/
|
|
61
|
-
static from(options: ClientOptions): Promise<Client>;
|
|
107
|
+
static from<T = unknown>(options: ClientOptions): Promise<Client & T>;
|
|
62
108
|
txFromJSON: <T>(json: string) => AssembledTransaction<T>;
|
|
63
109
|
txFromXDR: <T>(xdrBase64: string) => AssembledTransaction<T>;
|
|
64
110
|
}
|
|
@@ -4,7 +4,7 @@ import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr
|
|
|
4
4
|
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-int.js';
|
|
5
5
|
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/unsigned-hyper.js';
|
|
6
6
|
import '../node_modules/.pnpm/@stellar_js-xdr@4.0.0/node_modules/@stellar/js-xdr/src/xdr-type.js';
|
|
7
|
-
import '../base/generated/curr_generated.js';
|
|
7
|
+
import types from '../base/generated/curr_generated.js';
|
|
8
8
|
import '@noble/hashes/sha2.js';
|
|
9
9
|
import '../base/signing.js';
|
|
10
10
|
import '../base/keypair.js';
|
|
@@ -105,11 +105,25 @@ class Client {
|
|
|
105
105
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm hash.
|
|
106
106
|
* The wasmHash can be provided in either hex or base64 format.
|
|
107
107
|
*
|
|
108
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
109
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
110
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
111
|
+
* typed, autocompleted contract methods without code generation.
|
|
112
|
+
*
|
|
108
113
|
* @param wasmHash - The hash of the contract's wasm binary, in either hex or base64 format.
|
|
109
114
|
* @param options - The ClientOptions object containing the necessary configuration, including the rpcUrl.
|
|
110
115
|
* @param format - (optional) The format of the provided wasmHash, either "hex" or "base64". Defaults to "hex".
|
|
111
116
|
* @returns A Promise that resolves to a Client instance.
|
|
112
117
|
* @throws If the provided options object does not contain an rpcUrl.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* interface MyContract {
|
|
122
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
123
|
+
* }
|
|
124
|
+
* const client = await contract.Client.fromWasmHash<MyContract>(hash, options);
|
|
125
|
+
* const tx = await client.increment(); // typed
|
|
126
|
+
* ```
|
|
113
127
|
*/
|
|
114
128
|
static async fromWasmHash(wasmHash, options, format = "hex") {
|
|
115
129
|
if (!options || !options.rpcUrl) {
|
|
@@ -126,10 +140,24 @@ class Client {
|
|
|
126
140
|
/**
|
|
127
141
|
* Generates a Client instance from the provided ClientOptions and the contract's wasm binary.
|
|
128
142
|
*
|
|
143
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
144
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
145
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
146
|
+
* typed, autocompleted contract methods without code generation.
|
|
147
|
+
*
|
|
129
148
|
* @param wasm - The contract's wasm binary as a Buffer.
|
|
130
149
|
* @param options - The ClientOptions object containing the necessary configuration.
|
|
131
150
|
* @returns A Promise that resolves to a Client instance.
|
|
132
151
|
* @throws If the contract spec cannot be obtained from the provided wasm binary.
|
|
152
|
+
*
|
|
153
|
+
* @example
|
|
154
|
+
* ```ts
|
|
155
|
+
* interface MyContract {
|
|
156
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
157
|
+
* }
|
|
158
|
+
* const client = await contract.Client.fromWasm<MyContract>(wasm, options);
|
|
159
|
+
* const tx = await client.increment(); // typed
|
|
160
|
+
* ```
|
|
133
161
|
*/
|
|
134
162
|
static async fromWasm(wasm, options) {
|
|
135
163
|
const spec = await Spec.fromWasm(wasm);
|
|
@@ -138,20 +166,45 @@ class Client {
|
|
|
138
166
|
/**
|
|
139
167
|
* Generates a Client instance from the provided ClientOptions, which must include the contractId and rpcUrl.
|
|
140
168
|
*
|
|
169
|
+
* If the contract is a built-in Stellar Asset Contract (SAC), the embedded
|
|
170
|
+
* SAC spec is used instead of downloading Wasm, since a SAC has no Wasm
|
|
171
|
+
* executable on-chain.
|
|
172
|
+
*
|
|
173
|
+
* @typeParam T - An interface describing the contract's methods, used to type
|
|
174
|
+
* the returned client. Defaults to `unknown`, so calling without a type
|
|
175
|
+
* argument yields a plain `Client` (backward compatible). Provide it to get
|
|
176
|
+
* typed, autocompleted contract methods without code generation.
|
|
177
|
+
*
|
|
141
178
|
* @param options - The ClientOptions object containing the necessary configuration, including the contractId and rpcUrl.
|
|
142
179
|
* @returns A Promise that resolves to a Client instance.
|
|
143
180
|
* @throws If the provided options object does not contain both rpcUrl and contractId.
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* interface MyContract {
|
|
185
|
+
* increment: (opts?: MethodOptions) => Promise<AssembledTransaction<number>>;
|
|
186
|
+
* }
|
|
187
|
+
* const client = await contract.Client.from<MyContract>(options);
|
|
188
|
+
* const tx = await client.increment(); // typed
|
|
189
|
+
* ```
|
|
144
190
|
*/
|
|
145
191
|
static async from(options) {
|
|
146
192
|
if (!options || !options.rpcUrl || !options.contractId) {
|
|
147
193
|
throw new TypeError("options must contain rpcUrl and contractId");
|
|
148
194
|
}
|
|
149
195
|
const { rpcUrl, contractId, allowHttp, headers } = options;
|
|
150
|
-
const server = new RpcServer(rpcUrl, {
|
|
196
|
+
const server = options.server ?? new RpcServer(rpcUrl, {
|
|
151
197
|
allowHttp,
|
|
152
198
|
headers
|
|
153
199
|
});
|
|
154
|
-
const
|
|
200
|
+
const instance = await server.getContractInstance(contractId);
|
|
201
|
+
if (instance.executable().switch() === types.ContractExecutableType.contractExecutableStellarAsset()) {
|
|
202
|
+
const { SAC_SPEC } = await import('../bindings/sac-spec.js');
|
|
203
|
+
return new Client(new Spec(SAC_SPEC), options);
|
|
204
|
+
}
|
|
205
|
+
const wasm = await server.getContractWasmByHash(
|
|
206
|
+
instance.executable().wasmHash()
|
|
207
|
+
);
|
|
155
208
|
return Client.fromWasm(wasm, options);
|
|
156
209
|
}
|
|
157
210
|
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"],"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","xdr"],"mappings":"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"}
|
package/lib/esm/contract/spec.js
CHANGED
|
@@ -15,7 +15,7 @@ import { Address } from '../base/address.js';
|
|
|
15
15
|
import '../base/transaction_builder.js';
|
|
16
16
|
import '../base/muxed_account.js';
|
|
17
17
|
import { Contract } from '../base/contract.js';
|
|
18
|
-
import '../base/scval.js';
|
|
18
|
+
import { nativeToScVal } from '../base/scval.js';
|
|
19
19
|
import { scValToBigInt } from '../base/numbers/index.js';
|
|
20
20
|
import { Err, Ok } from './rust_result.js';
|
|
21
21
|
import { processSpecEntryStream } from './utils.js';
|
|
@@ -614,6 +614,9 @@ class Spec {
|
|
|
614
614
|
}
|
|
615
615
|
return this.nativeToScVal(val, opt.valueType());
|
|
616
616
|
}
|
|
617
|
+
if (value === types.ScSpecType.scSpecTypeVal().value) {
|
|
618
|
+
return nativeToScVal(val);
|
|
619
|
+
}
|
|
617
620
|
switch (typeof val) {
|
|
618
621
|
case "object": {
|
|
619
622
|
if (val === null) {
|
|
@@ -704,7 +707,7 @@ class Spec {
|
|
|
704
707
|
);
|
|
705
708
|
}
|
|
706
709
|
}
|
|
707
|
-
if (val
|
|
710
|
+
if (val instanceof Map) {
|
|
708
711
|
if (value !== types.ScSpecType.scSpecTypeMap().value) {
|
|
709
712
|
throw new TypeError(`Type ${ty} was not map, but value was Map`);
|
|
710
713
|
}
|
|
@@ -722,7 +725,8 @@ class Spec {
|
|
|
722
725
|
}
|
|
723
726
|
return types.ScVal.scvMap(entries);
|
|
724
727
|
}
|
|
725
|
-
|
|
728
|
+
const proto = Object.getPrototypeOf(val);
|
|
729
|
+
if (proto !== Object.prototype && proto !== null) {
|
|
726
730
|
throw new TypeError(
|
|
727
731
|
`cannot interpret ${val.constructor?.name} value as ScVal (${JSON.stringify(val)})`
|
|
728
732
|
);
|