@mysten/sui 1.28.2 → 1.29.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/CHANGELOG.md +8 -0
- package/README.md +5 -4
- package/dist/cjs/client/client.d.ts +2 -1
- package/dist/cjs/client/client.js +7 -0
- package/dist/cjs/client/client.js.map +2 -2
- package/dist/cjs/experimental/core.d.ts +1 -1
- package/dist/cjs/experimental/core.js +3 -2
- package/dist/cjs/experimental/core.js.map +2 -2
- package/dist/cjs/experimental/transports/graphql.d.ts +26 -0
- package/dist/cjs/experimental/transports/graphql.js +310 -0
- package/dist/cjs/experimental/transports/graphql.js.map +7 -0
- package/dist/cjs/experimental/transports/jsonRPC.d.ts +5 -3
- package/dist/cjs/experimental/transports/jsonRPC.js +53 -105
- package/dist/cjs/experimental/transports/jsonRPC.js.map +3 -3
- package/dist/cjs/experimental/transports/utils.d.ts +6 -0
- package/dist/cjs/experimental/transports/utils.js +102 -0
- package/dist/cjs/experimental/transports/utils.js.map +7 -0
- package/dist/cjs/experimental/types.d.ts +21 -6
- package/dist/cjs/experimental/types.js.map +1 -1
- package/dist/cjs/faucet/faucet.d.ts +1 -1
- package/dist/cjs/faucet/faucet.js.map +1 -1
- package/dist/cjs/graphql/client.d.ts +10 -3
- package/dist/cjs/graphql/client.js +12 -4
- package/dist/cjs/graphql/client.js.map +3 -3
- package/dist/cjs/graphql/generated/queries.d.ts +5653 -0
- package/dist/cjs/graphql/generated/queries.js +722 -0
- package/dist/cjs/graphql/generated/queries.js.map +7 -0
- package/dist/cjs/multisig/publickey.d.ts +3 -3
- package/dist/cjs/multisig/publickey.js.map +2 -2
- package/dist/cjs/transactions/Commands.d.ts +2 -2
- package/dist/cjs/transactions/Commands.js.map +2 -2
- package/dist/cjs/transactions/Transaction.d.ts +10 -2
- package/dist/cjs/transactions/Transaction.js +165 -21
- package/dist/cjs/transactions/Transaction.js.map +3 -3
- package/dist/cjs/transactions/TransactionData.d.ts +4 -2
- package/dist/cjs/transactions/TransactionData.js +72 -41
- package/dist/cjs/transactions/TransactionData.js.map +2 -2
- package/dist/cjs/transactions/intents/CoinWithBalance.js.map +1 -1
- package/dist/cjs/verify/verify.d.ts +5 -5
- package/dist/cjs/verify/verify.js.map +2 -2
- package/dist/cjs/version.d.ts +2 -2
- package/dist/cjs/version.js +2 -2
- package/dist/cjs/version.js.map +1 -1
- package/dist/cjs/zklogin/publickey.d.ts +9 -3
- package/dist/cjs/zklogin/publickey.js +8 -30
- package/dist/cjs/zklogin/publickey.js.map +2 -2
- package/dist/esm/client/client.d.ts +2 -1
- package/dist/esm/client/client.js +7 -0
- package/dist/esm/client/client.js.map +2 -2
- package/dist/esm/experimental/core.d.ts +1 -1
- package/dist/esm/experimental/core.js +3 -2
- package/dist/esm/experimental/core.js.map +2 -2
- package/dist/esm/experimental/transports/graphql.d.ts +26 -0
- package/dist/esm/experimental/transports/graphql.js +303 -0
- package/dist/esm/experimental/transports/graphql.js.map +7 -0
- package/dist/esm/experimental/transports/jsonRPC.d.ts +5 -3
- package/dist/esm/experimental/transports/jsonRPC.js +52 -104
- package/dist/esm/experimental/transports/jsonRPC.js.map +2 -2
- package/dist/esm/experimental/transports/utils.d.ts +6 -0
- package/dist/esm/experimental/transports/utils.js +82 -0
- package/dist/esm/experimental/transports/utils.js.map +7 -0
- package/dist/esm/experimental/types.d.ts +21 -6
- package/dist/esm/faucet/faucet.d.ts +1 -1
- package/dist/esm/faucet/faucet.js.map +1 -1
- package/dist/esm/graphql/client.d.ts +10 -3
- package/dist/esm/graphql/client.js +12 -4
- package/dist/esm/graphql/client.js.map +2 -2
- package/dist/esm/graphql/generated/queries.d.ts +5653 -0
- package/dist/esm/graphql/generated/queries.js +702 -0
- package/dist/esm/graphql/generated/queries.js.map +7 -0
- package/dist/esm/multisig/publickey.d.ts +3 -3
- package/dist/esm/multisig/publickey.js.map +2 -2
- package/dist/esm/transactions/Commands.d.ts +2 -2
- package/dist/esm/transactions/Commands.js.map +2 -2
- package/dist/esm/transactions/Transaction.d.ts +10 -2
- package/dist/esm/transactions/Transaction.js +165 -21
- package/dist/esm/transactions/Transaction.js.map +3 -3
- package/dist/esm/transactions/TransactionData.d.ts +4 -2
- package/dist/esm/transactions/TransactionData.js +72 -41
- package/dist/esm/transactions/TransactionData.js.map +2 -2
- package/dist/esm/transactions/intents/CoinWithBalance.js.map +1 -1
- package/dist/esm/verify/verify.d.ts +5 -5
- package/dist/esm/verify/verify.js.map +2 -2
- package/dist/esm/version.d.ts +2 -2
- package/dist/esm/version.js +2 -2
- package/dist/esm/version.js.map +1 -1
- package/dist/esm/zklogin/publickey.d.ts +9 -3
- package/dist/esm/zklogin/publickey.js +8 -30
- package/dist/esm/zklogin/publickey.js.map +2 -2
- package/dist/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -1
- package/src/client/client.ts +10 -0
- package/src/experimental/core.ts +5 -2
- package/src/experimental/transports/graphql.ts +421 -0
- package/src/experimental/transports/jsonRPC.ts +47 -132
- package/src/experimental/transports/utils.ts +117 -0
- package/src/experimental/types.ts +30 -7
- package/src/faucet/faucet.ts +1 -1
- package/src/graphql/client.ts +21 -3
- package/src/graphql/generated/queries.ts +6061 -0
- package/src/graphql/queries/getAllBalances.graphql +20 -0
- package/src/graphql/queries/getBalance.graphql +14 -0
- package/src/graphql/queries/getCoins.graphql +29 -0
- package/src/graphql/queries/getDynamicFields.graphql +36 -0
- package/src/graphql/queries/getReferenceGasPrice.graphql +8 -0
- package/src/graphql/queries/objects.graphql +89 -0
- package/src/graphql/queries/transactions.graphql +80 -0
- package/src/graphql/queries/verifyZkLoginSignature.graphql +16 -0
- package/src/multisig/publickey.ts +3 -3
- package/src/transactions/Commands.ts +3 -2
- package/src/transactions/Transaction.ts +215 -12
- package/src/transactions/TransactionData.ts +86 -46
- package/src/transactions/intents/CoinWithBalance.ts +1 -1
- package/src/verify/verify.ts +6 -6
- package/src/version.ts +2 -2
- package/src/zklogin/publickey.ts +23 -39
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
9
|
+
var _graphqlClient, _GraphQLTransport_instances, graphqlQuery_fn;
|
|
10
|
+
import { Experimental_CoreClient } from "../core.js";
|
|
11
|
+
import {
|
|
12
|
+
DryRunTransactionBlockDocument,
|
|
13
|
+
ExecuteTransactionBlockDocument,
|
|
14
|
+
GetAllBalancesDocument,
|
|
15
|
+
GetBalanceDocument,
|
|
16
|
+
GetCoinsDocument,
|
|
17
|
+
GetDynamicFieldsDocument,
|
|
18
|
+
GetOwnedObjectsDocument,
|
|
19
|
+
GetReferenceGasPriceDocument,
|
|
20
|
+
GetTransactionBlockDocument,
|
|
21
|
+
MultiGetObjectsDocument,
|
|
22
|
+
VerifyZkLoginSignatureDocument,
|
|
23
|
+
ZkLoginIntentScope
|
|
24
|
+
} from "../../graphql/generated/queries.js";
|
|
25
|
+
import { ObjectError } from "../errors.js";
|
|
26
|
+
import { fromBase64, toBase64 } from "@mysten/utils";
|
|
27
|
+
import { normalizeStructTag, normalizeSuiAddress } from "../../utils/sui-types.js";
|
|
28
|
+
import { deriveDynamicFieldID } from "../../utils/dynamic-fields.js";
|
|
29
|
+
import { parseTransactionEffects } from "./utils.js";
|
|
30
|
+
class GraphQLTransport extends Experimental_CoreClient {
|
|
31
|
+
constructor(graphqlClient) {
|
|
32
|
+
super({ network: graphqlClient.network });
|
|
33
|
+
__privateAdd(this, _GraphQLTransport_instances);
|
|
34
|
+
__privateAdd(this, _graphqlClient);
|
|
35
|
+
__privateSet(this, _graphqlClient, graphqlClient);
|
|
36
|
+
}
|
|
37
|
+
async getObjects(options) {
|
|
38
|
+
const objects = [];
|
|
39
|
+
let hasNextPage = true;
|
|
40
|
+
let cursor = null;
|
|
41
|
+
while (hasNextPage) {
|
|
42
|
+
const objectsPage = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
43
|
+
query: MultiGetObjectsDocument,
|
|
44
|
+
variables: {
|
|
45
|
+
objectIds: options.objectIds,
|
|
46
|
+
cursor
|
|
47
|
+
}
|
|
48
|
+
}, (result) => result.objects);
|
|
49
|
+
objects.push(...objectsPage.nodes);
|
|
50
|
+
hasNextPage = objectsPage.pageInfo.hasNextPage;
|
|
51
|
+
cursor = objectsPage.pageInfo.endCursor ?? null;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
objects: options.objectIds.map((id) => normalizeSuiAddress(id)).map(
|
|
55
|
+
(id) => objects.find((obj) => obj.address === id) ?? new ObjectError("notFound", `Object ${id} not found`)
|
|
56
|
+
).map((obj) => {
|
|
57
|
+
if (obj instanceof ObjectError) {
|
|
58
|
+
return obj;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
id: obj.address,
|
|
62
|
+
version: obj.version,
|
|
63
|
+
digest: obj.digest,
|
|
64
|
+
owner: mapOwner(obj.owner),
|
|
65
|
+
type: obj.asMoveObject?.contents?.type?.repr,
|
|
66
|
+
content: fromBase64(obj.asMoveObject?.contents?.bcs)
|
|
67
|
+
};
|
|
68
|
+
})
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
async getOwnedObjects(options) {
|
|
72
|
+
const objects = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
73
|
+
query: GetOwnedObjectsDocument,
|
|
74
|
+
variables: {
|
|
75
|
+
owner: options.address,
|
|
76
|
+
limit: options.limit,
|
|
77
|
+
cursor: options.cursor,
|
|
78
|
+
filter: options.type ? { type: options.type } : void 0
|
|
79
|
+
}
|
|
80
|
+
}, (result) => result.address?.objects);
|
|
81
|
+
return {
|
|
82
|
+
objects: objects.nodes.map((obj) => ({
|
|
83
|
+
id: obj.address,
|
|
84
|
+
version: obj.version,
|
|
85
|
+
digest: obj.digest,
|
|
86
|
+
owner: mapOwner(obj.owner),
|
|
87
|
+
type: obj.contents?.type?.repr,
|
|
88
|
+
content: fromBase64(obj.contents?.bcs)
|
|
89
|
+
})),
|
|
90
|
+
hasNextPage: objects.pageInfo.hasNextPage,
|
|
91
|
+
cursor: objects.pageInfo.endCursor ?? null
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
async getCoins(options) {
|
|
95
|
+
const coins = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
96
|
+
query: GetCoinsDocument,
|
|
97
|
+
variables: {
|
|
98
|
+
owner: options.address,
|
|
99
|
+
cursor: options.cursor,
|
|
100
|
+
first: options.limit,
|
|
101
|
+
type: options.coinType
|
|
102
|
+
}
|
|
103
|
+
}, (result) => result.address?.coins);
|
|
104
|
+
return {
|
|
105
|
+
cursor: coins.pageInfo.endCursor ?? null,
|
|
106
|
+
hasNextPage: coins.pageInfo.hasNextPage,
|
|
107
|
+
objects: coins.nodes.map((coin) => ({
|
|
108
|
+
id: coin.address,
|
|
109
|
+
version: coin.version,
|
|
110
|
+
digest: coin.digest,
|
|
111
|
+
owner: mapOwner(coin.owner),
|
|
112
|
+
type: coin.contents?.type?.repr,
|
|
113
|
+
balance: coin.coinBalance,
|
|
114
|
+
content: fromBase64(coin.contents?.bcs)
|
|
115
|
+
}))
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
async getBalance(options) {
|
|
119
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
120
|
+
query: GetBalanceDocument,
|
|
121
|
+
variables: { owner: options.address, type: options.coinType }
|
|
122
|
+
}, (result2) => result2.address?.balance);
|
|
123
|
+
return {
|
|
124
|
+
balance: {
|
|
125
|
+
coinType: result.coinType.repr,
|
|
126
|
+
balance: result.totalBalance
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
async getAllBalances(options) {
|
|
131
|
+
const balances = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
132
|
+
query: GetAllBalancesDocument,
|
|
133
|
+
variables: { owner: options.address }
|
|
134
|
+
}, (result) => result.address?.balances);
|
|
135
|
+
return {
|
|
136
|
+
cursor: balances.pageInfo.endCursor ?? null,
|
|
137
|
+
hasNextPage: balances.pageInfo.hasNextPage,
|
|
138
|
+
balances: balances.nodes.map((balance) => ({
|
|
139
|
+
coinType: balance.coinType.repr,
|
|
140
|
+
balance: balance.totalBalance
|
|
141
|
+
}))
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
async getTransaction(options) {
|
|
145
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
146
|
+
query: GetTransactionBlockDocument,
|
|
147
|
+
variables: { digest: options.digest }
|
|
148
|
+
}, (result2) => result2.transactionBlock);
|
|
149
|
+
return {
|
|
150
|
+
transaction: parseTransaction(result)
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
async executeTransaction(options) {
|
|
154
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
155
|
+
query: ExecuteTransactionBlockDocument,
|
|
156
|
+
variables: { txBytes: toBase64(options.transaction), signatures: options.signatures }
|
|
157
|
+
}, (result2) => result2.executeTransactionBlock);
|
|
158
|
+
if (result.errors) {
|
|
159
|
+
if (result.errors.length === 1) {
|
|
160
|
+
throw new Error(result.errors[0]);
|
|
161
|
+
}
|
|
162
|
+
throw new AggregateError(result.errors.map((error) => new Error(error)));
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
transaction: parseTransaction(result.effects.transactionBlock)
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
async dryRunTransaction(options) {
|
|
169
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
170
|
+
query: DryRunTransactionBlockDocument,
|
|
171
|
+
variables: { txBytes: toBase64(options.transaction) }
|
|
172
|
+
}, (result2) => result2.dryRunTransactionBlock);
|
|
173
|
+
if (result.error) {
|
|
174
|
+
throw new Error(result.error);
|
|
175
|
+
}
|
|
176
|
+
return {
|
|
177
|
+
transaction: parseTransaction(result.transaction)
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
async getReferenceGasPrice() {
|
|
181
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
182
|
+
query: GetReferenceGasPriceDocument
|
|
183
|
+
}, (result2) => result2.epoch?.referenceGasPrice);
|
|
184
|
+
return {
|
|
185
|
+
referenceGasPrice: result.referenceGasPrice
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
async getDynamicFields(options) {
|
|
189
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
190
|
+
query: GetDynamicFieldsDocument,
|
|
191
|
+
variables: { parentId: options.parentId }
|
|
192
|
+
}, (result2) => result2.owner?.dynamicFields);
|
|
193
|
+
return {
|
|
194
|
+
dynamicFields: result.nodes.map((dynamicField) => {
|
|
195
|
+
const valueType = dynamicField.value?.__typename === "MoveObject" ? dynamicField.value.contents?.type?.repr : dynamicField.value?.type.repr;
|
|
196
|
+
return {
|
|
197
|
+
id: deriveDynamicFieldID(
|
|
198
|
+
options.parentId,
|
|
199
|
+
dynamicField.name?.type.repr,
|
|
200
|
+
dynamicField.name?.bcs
|
|
201
|
+
),
|
|
202
|
+
type: normalizeStructTag(
|
|
203
|
+
dynamicField.value?.__typename === "MoveObject" ? `0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${dynamicField.name?.type.repr}>,0x2::object::ID>` : `0x2::dynamic_field::Field<${dynamicField.name?.type.repr},${valueType}>`
|
|
204
|
+
),
|
|
205
|
+
name: {
|
|
206
|
+
type: dynamicField.name?.type.repr,
|
|
207
|
+
bcs: fromBase64(dynamicField.name?.bcs)
|
|
208
|
+
},
|
|
209
|
+
valueType
|
|
210
|
+
};
|
|
211
|
+
}),
|
|
212
|
+
cursor: result.pageInfo.endCursor ?? null,
|
|
213
|
+
hasNextPage: result.pageInfo.hasNextPage
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
async verifyZkLoginSignature(options) {
|
|
217
|
+
const intentScope = options.intentScope === "TransactionData" ? ZkLoginIntentScope.TransactionData : ZkLoginIntentScope.PersonalMessage;
|
|
218
|
+
const result = await __privateMethod(this, _GraphQLTransport_instances, graphqlQuery_fn).call(this, {
|
|
219
|
+
query: VerifyZkLoginSignatureDocument,
|
|
220
|
+
variables: {
|
|
221
|
+
bytes: options.bytes,
|
|
222
|
+
signature: options.signature,
|
|
223
|
+
intentScope,
|
|
224
|
+
author: options.author
|
|
225
|
+
}
|
|
226
|
+
}, (result2) => result2.verifyZkloginSignature);
|
|
227
|
+
return {
|
|
228
|
+
success: result.success,
|
|
229
|
+
errors: result.errors
|
|
230
|
+
};
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
_graphqlClient = new WeakMap();
|
|
234
|
+
_GraphQLTransport_instances = new WeakSet();
|
|
235
|
+
graphqlQuery_fn = async function(options, getData) {
|
|
236
|
+
const { data, errors } = await __privateGet(this, _graphqlClient).query(options);
|
|
237
|
+
handleGraphQLErrors(errors);
|
|
238
|
+
const extractedData = data && (getData ? getData(data) : data);
|
|
239
|
+
if (extractedData == null) {
|
|
240
|
+
throw new Error("Missing response data");
|
|
241
|
+
}
|
|
242
|
+
return extractedData;
|
|
243
|
+
};
|
|
244
|
+
function handleGraphQLErrors(errors) {
|
|
245
|
+
if (!errors || errors.length === 0) return;
|
|
246
|
+
const errorInstances = errors.map((error) => new GraphQLResponseError(error));
|
|
247
|
+
if (errorInstances.length === 1) {
|
|
248
|
+
throw errorInstances[0];
|
|
249
|
+
}
|
|
250
|
+
throw new AggregateError(errorInstances);
|
|
251
|
+
}
|
|
252
|
+
class GraphQLResponseError extends Error {
|
|
253
|
+
constructor(error) {
|
|
254
|
+
super(error.message);
|
|
255
|
+
this.locations = error.locations;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
function mapOwner(owner) {
|
|
259
|
+
switch (owner.__typename) {
|
|
260
|
+
case "AddressOwner":
|
|
261
|
+
return { $kind: "AddressOwner", AddressOwner: owner.owner?.asAddress?.address };
|
|
262
|
+
case "ConsensusV2":
|
|
263
|
+
return { $kind: "ConsensusV2", ConsensusV2: owner.authenticator.address };
|
|
264
|
+
case "Immutable":
|
|
265
|
+
return { $kind: "Immutable", Immutable: true };
|
|
266
|
+
case "Parent":
|
|
267
|
+
return { $kind: "ObjectOwner", ObjectOwner: owner.parent?.address };
|
|
268
|
+
case "Shared":
|
|
269
|
+
return { $kind: "Shared", Shared: owner.initialSharedVersion };
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
function parseTransaction(transaction) {
|
|
273
|
+
const objectTypes = {};
|
|
274
|
+
transaction.effects?.unchangedSharedObjects.nodes.forEach((node) => {
|
|
275
|
+
if (node.__typename === "SharedObjectRead") {
|
|
276
|
+
const type = node.object?.asMoveObject?.contents?.type.repr;
|
|
277
|
+
const address = node.object?.asMoveObject?.address;
|
|
278
|
+
if (type && address) {
|
|
279
|
+
objectTypes[address] = type;
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
transaction.effects?.objectChanges.nodes.forEach((node) => {
|
|
284
|
+
const address = node.address;
|
|
285
|
+
const type = node.inputState?.asMoveObject?.contents?.type.repr ?? node.outputState?.asMoveObject?.contents?.type.repr;
|
|
286
|
+
if (address && type) {
|
|
287
|
+
objectTypes[address] = type;
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
return {
|
|
291
|
+
digest: transaction.digest,
|
|
292
|
+
effects: parseTransactionEffects({
|
|
293
|
+
effects: new Uint8Array(transaction.effects?.bcs),
|
|
294
|
+
objectTypes
|
|
295
|
+
}),
|
|
296
|
+
bcs: transaction.bcs,
|
|
297
|
+
signatures: transaction.signatures
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
export {
|
|
301
|
+
GraphQLTransport
|
|
302
|
+
};
|
|
303
|
+
//# sourceMappingURL=graphql.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/experimental/transports/graphql.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Experimental_CoreClient } from '../core.js';\nimport type { Experimental_SuiClientTypes } from '../types.js';\nimport type { GraphQLQueryOptions, SuiGraphQLClient } from '../../graphql/client.js';\nimport type {\n\tObject_Owner_FieldsFragment,\n\tObject_FieldsFragment,\n\tTransaction_FieldsFragment,\n} from '../../graphql/generated/queries.js';\nimport {\n\tDryRunTransactionBlockDocument,\n\tExecuteTransactionBlockDocument,\n\tGetAllBalancesDocument,\n\tGetBalanceDocument,\n\tGetCoinsDocument,\n\tGetDynamicFieldsDocument,\n\tGetOwnedObjectsDocument,\n\tGetReferenceGasPriceDocument,\n\tGetTransactionBlockDocument,\n\tMultiGetObjectsDocument,\n\tVerifyZkLoginSignatureDocument,\n\tZkLoginIntentScope,\n} from '../../graphql/generated/queries.js';\nimport { ObjectError } from '../errors.js';\nimport { fromBase64, toBase64 } from '@mysten/utils';\nimport { normalizeStructTag, normalizeSuiAddress } from '../../utils/sui-types.js';\nimport { deriveDynamicFieldID } from '../../utils/dynamic-fields.js';\nimport { parseTransactionEffects } from './utils.js';\n\nexport class GraphQLTransport extends Experimental_CoreClient {\n\t#graphqlClient: SuiGraphQLClient;\n\n\tconstructor(graphqlClient: SuiGraphQLClient) {\n\t\tsuper({ network: graphqlClient.network });\n\t\tthis.#graphqlClient = graphqlClient;\n\t}\n\n\tasync #graphqlQuery<\n\t\tResult = Record<string, unknown>,\n\t\tVariables = Record<string, unknown>,\n\t\tData = Result,\n\t>(\n\t\toptions: GraphQLQueryOptions<Result, Variables>,\n\t\tgetData?: (result: Result) => Data,\n\t): Promise<NonNullable<Data>> {\n\t\tconst { data, errors } = await this.#graphqlClient.query(options);\n\n\t\thandleGraphQLErrors(errors);\n\n\t\tconst extractedData = data && (getData ? getData(data) : data);\n\n\t\tif (extractedData == null) {\n\t\t\tthrow new Error('Missing response data');\n\t\t}\n\n\t\treturn extractedData as NonNullable<Data>;\n\t}\n\n\tasync getObjects(\n\t\toptions: Experimental_SuiClientTypes.GetObjectsOptions,\n\t): Promise<Experimental_SuiClientTypes.GetObjectsResponse> {\n\t\tconst objects: Object_FieldsFragment[] = [];\n\n\t\tlet hasNextPage = true;\n\t\tlet cursor: string | null = null;\n\n\t\twhile (hasNextPage) {\n\t\t\tconst objectsPage = await this.#graphqlQuery(\n\t\t\t\t{\n\t\t\t\t\tquery: MultiGetObjectsDocument,\n\t\t\t\t\tvariables: {\n\t\t\t\t\t\tobjectIds: options.objectIds,\n\t\t\t\t\t\tcursor,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t(result) => result.objects,\n\t\t\t);\n\n\t\t\tobjects.push(...objectsPage.nodes);\n\t\t\thasNextPage = objectsPage.pageInfo.hasNextPage;\n\t\t\tcursor = (objectsPage.pageInfo.endCursor ?? null) as string | null;\n\t\t}\n\n\t\treturn {\n\t\t\tobjects: options.objectIds\n\t\t\t\t.map((id) => normalizeSuiAddress(id))\n\t\t\t\t.map(\n\t\t\t\t\t(id) =>\n\t\t\t\t\t\tobjects.find((obj) => obj.address === id) ??\n\t\t\t\t\t\tnew ObjectError('notFound', `Object ${id} not found`),\n\t\t\t\t)\n\t\t\t\t.map((obj) => {\n\t\t\t\t\tif (obj instanceof ObjectError) {\n\t\t\t\t\t\treturn obj;\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: obj.address,\n\t\t\t\t\t\tversion: obj.version,\n\t\t\t\t\t\tdigest: obj.digest!,\n\t\t\t\t\t\towner: mapOwner(obj.owner!),\n\t\t\t\t\t\ttype: obj.asMoveObject?.contents?.type?.repr!,\n\t\t\t\t\t\tcontent: fromBase64(obj.asMoveObject?.contents?.bcs!),\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t};\n\t}\n\tasync getOwnedObjects(\n\t\toptions: Experimental_SuiClientTypes.GetOwnedObjectsOptions,\n\t): Promise<Experimental_SuiClientTypes.GetOwnedObjectsResponse> {\n\t\tconst objects = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetOwnedObjectsDocument,\n\t\t\t\tvariables: {\n\t\t\t\t\towner: options.address,\n\t\t\t\t\tlimit: options.limit,\n\t\t\t\t\tcursor: options.cursor,\n\t\t\t\t\tfilter: options.type ? { type: options.type } : undefined,\n\t\t\t\t},\n\t\t\t},\n\t\t\t(result) => result.address?.objects,\n\t\t);\n\n\t\treturn {\n\t\t\tobjects: objects.nodes.map((obj) => ({\n\t\t\t\tid: obj.address,\n\t\t\t\tversion: obj.version,\n\t\t\t\tdigest: obj.digest!,\n\t\t\t\towner: mapOwner(obj.owner!),\n\t\t\t\ttype: obj.contents?.type?.repr!,\n\t\t\t\tcontent: fromBase64(obj.contents?.bcs!),\n\t\t\t})),\n\t\t\thasNextPage: objects.pageInfo.hasNextPage,\n\t\t\tcursor: objects.pageInfo.endCursor ?? null,\n\t\t};\n\t}\n\tasync getCoins(\n\t\toptions: Experimental_SuiClientTypes.GetCoinsOptions,\n\t): Promise<Experimental_SuiClientTypes.GetCoinsResponse> {\n\t\tconst coins = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetCoinsDocument,\n\t\t\t\tvariables: {\n\t\t\t\t\towner: options.address,\n\t\t\t\t\tcursor: options.cursor,\n\t\t\t\t\tfirst: options.limit,\n\t\t\t\t\ttype: options.coinType,\n\t\t\t\t},\n\t\t\t},\n\t\t\t(result) => result.address?.coins,\n\t\t);\n\n\t\treturn {\n\t\t\tcursor: coins.pageInfo.endCursor ?? null,\n\t\t\thasNextPage: coins.pageInfo.hasNextPage,\n\t\t\tobjects: coins.nodes.map((coin) => ({\n\t\t\t\tid: coin.address,\n\t\t\t\tversion: coin.version,\n\t\t\t\tdigest: coin.digest!,\n\t\t\t\towner: mapOwner(coin.owner!),\n\t\t\t\ttype: coin.contents?.type?.repr!,\n\t\t\t\tbalance: coin.coinBalance,\n\t\t\t\tcontent: fromBase64(coin.contents?.bcs!),\n\t\t\t})),\n\t\t};\n\t}\n\n\tasync getBalance(\n\t\toptions: Experimental_SuiClientTypes.GetBalanceOptions,\n\t): Promise<Experimental_SuiClientTypes.GetBalanceResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetBalanceDocument,\n\t\t\t\tvariables: { owner: options.address, type: options.coinType },\n\t\t\t},\n\t\t\t(result) => result.address?.balance,\n\t\t);\n\n\t\treturn {\n\t\t\tbalance: {\n\t\t\t\tcoinType: result.coinType.repr,\n\t\t\t\tbalance: result.totalBalance,\n\t\t\t},\n\t\t};\n\t}\n\tasync getAllBalances(\n\t\toptions: Experimental_SuiClientTypes.GetAllBalancesOptions,\n\t): Promise<Experimental_SuiClientTypes.GetAllBalancesResponse> {\n\t\tconst balances = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetAllBalancesDocument,\n\t\t\t\tvariables: { owner: options.address },\n\t\t\t},\n\t\t\t(result) => result.address?.balances,\n\t\t);\n\n\t\treturn {\n\t\t\tcursor: balances.pageInfo.endCursor ?? null,\n\t\t\thasNextPage: balances.pageInfo.hasNextPage,\n\t\t\tbalances: balances.nodes.map((balance) => ({\n\t\t\t\tcoinType: balance.coinType.repr,\n\t\t\t\tbalance: balance.totalBalance,\n\t\t\t})),\n\t\t};\n\t}\n\tasync getTransaction(\n\t\toptions: Experimental_SuiClientTypes.GetTransactionOptions,\n\t): Promise<Experimental_SuiClientTypes.GetTransactionResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetTransactionBlockDocument,\n\t\t\t\tvariables: { digest: options.digest },\n\t\t\t},\n\t\t\t(result) => result.transactionBlock,\n\t\t);\n\n\t\treturn {\n\t\t\ttransaction: parseTransaction(result),\n\t\t};\n\t}\n\tasync executeTransaction(\n\t\toptions: Experimental_SuiClientTypes.ExecuteTransactionOptions,\n\t): Promise<Experimental_SuiClientTypes.ExecuteTransactionResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: ExecuteTransactionBlockDocument,\n\t\t\t\tvariables: { txBytes: toBase64(options.transaction), signatures: options.signatures },\n\t\t\t},\n\t\t\t(result) => result.executeTransactionBlock,\n\t\t);\n\n\t\tif (result.errors) {\n\t\t\tif (result.errors.length === 1) {\n\t\t\t\tthrow new Error(result.errors[0]);\n\t\t\t}\n\t\t\tthrow new AggregateError(result.errors.map((error) => new Error(error)));\n\t\t}\n\n\t\treturn {\n\t\t\ttransaction: parseTransaction(result.effects.transactionBlock!),\n\t\t};\n\t}\n\tasync dryRunTransaction(\n\t\toptions: Experimental_SuiClientTypes.DryRunTransactionOptions,\n\t): Promise<Experimental_SuiClientTypes.DryRunTransactionResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: DryRunTransactionBlockDocument,\n\t\t\t\tvariables: { txBytes: toBase64(options.transaction) },\n\t\t\t},\n\t\t\t(result) => result.dryRunTransactionBlock,\n\t\t);\n\n\t\tif (result.error) {\n\t\t\tthrow new Error(result.error);\n\t\t}\n\n\t\treturn {\n\t\t\ttransaction: parseTransaction(result.transaction!),\n\t\t};\n\t}\n\tasync getReferenceGasPrice(): Promise<Experimental_SuiClientTypes.GetReferenceGasPriceResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetReferenceGasPriceDocument,\n\t\t\t},\n\t\t\t(result) => result.epoch?.referenceGasPrice,\n\t\t);\n\n\t\treturn {\n\t\t\treferenceGasPrice: result.referenceGasPrice,\n\t\t};\n\t}\n\n\tasync getDynamicFields(\n\t\toptions: Experimental_SuiClientTypes.GetDynamicFieldsOptions,\n\t): Promise<Experimental_SuiClientTypes.GetDynamicFieldsResponse> {\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: GetDynamicFieldsDocument,\n\t\t\t\tvariables: { parentId: options.parentId },\n\t\t\t},\n\t\t\t(result) => result.owner?.dynamicFields,\n\t\t);\n\n\t\treturn {\n\t\t\tdynamicFields: result.nodes.map((dynamicField) => {\n\t\t\t\tconst valueType =\n\t\t\t\t\tdynamicField.value?.__typename === 'MoveObject'\n\t\t\t\t\t\t? dynamicField.value.contents?.type?.repr!\n\t\t\t\t\t\t: dynamicField.value?.type.repr!;\n\t\t\t\treturn {\n\t\t\t\t\tid: deriveDynamicFieldID(\n\t\t\t\t\t\toptions.parentId,\n\t\t\t\t\t\tdynamicField.name?.type.repr!,\n\t\t\t\t\t\tdynamicField.name?.bcs!,\n\t\t\t\t\t),\n\t\t\t\t\ttype: normalizeStructTag(\n\t\t\t\t\t\tdynamicField.value?.__typename === 'MoveObject'\n\t\t\t\t\t\t\t? `0x2::dynamic_field::Field<0x2::dynamic_object_field::Wrapper<${dynamicField.name?.type.repr}>,0x2::object::ID>`\n\t\t\t\t\t\t\t: `0x2::dynamic_field::Field<${dynamicField.name?.type.repr},${valueType}>`,\n\t\t\t\t\t),\n\t\t\t\t\tname: {\n\t\t\t\t\t\ttype: dynamicField.name?.type.repr!,\n\t\t\t\t\t\tbcs: fromBase64(dynamicField.name?.bcs!),\n\t\t\t\t\t},\n\t\t\t\t\tvalueType,\n\t\t\t\t};\n\t\t\t}),\n\t\t\tcursor: result.pageInfo.endCursor ?? null,\n\t\t\thasNextPage: result.pageInfo.hasNextPage,\n\t\t};\n\t}\n\n\tasync verifyZkLoginSignature(\n\t\toptions: Experimental_SuiClientTypes.VerifyZkLoginSignatureOptions,\n\t): Promise<Experimental_SuiClientTypes.ZkLoginVerifyResponse> {\n\t\tconst intentScope =\n\t\t\toptions.intentScope === 'TransactionData'\n\t\t\t\t? ZkLoginIntentScope.TransactionData\n\t\t\t\t: ZkLoginIntentScope.PersonalMessage;\n\n\t\tconst result = await this.#graphqlQuery(\n\t\t\t{\n\t\t\t\tquery: VerifyZkLoginSignatureDocument,\n\t\t\t\tvariables: {\n\t\t\t\t\tbytes: options.bytes,\n\t\t\t\t\tsignature: options.signature,\n\t\t\t\t\tintentScope,\n\t\t\t\t\tauthor: options.author,\n\t\t\t\t},\n\t\t\t},\n\t\t\t(result) => result.verifyZkloginSignature,\n\t\t);\n\n\t\treturn {\n\t\t\tsuccess: result.success,\n\t\t\terrors: result.errors,\n\t\t};\n\t}\n}\nexport type GraphQLResponseErrors = Array<{\n\tmessage: string;\n\tlocations?: { line: number; column: number }[];\n\tpath?: (string | number)[];\n}>;\n\nfunction handleGraphQLErrors(errors: GraphQLResponseErrors | undefined): void {\n\tif (!errors || errors.length === 0) return;\n\n\tconst errorInstances = errors.map((error) => new GraphQLResponseError(error));\n\n\tif (errorInstances.length === 1) {\n\t\tthrow errorInstances[0];\n\t}\n\n\tthrow new AggregateError(errorInstances);\n}\n\nclass GraphQLResponseError extends Error {\n\tlocations?: Array<{ line: number; column: number }>;\n\n\tconstructor(error: GraphQLResponseErrors[0]) {\n\t\tsuper(error.message);\n\t\tthis.locations = error.locations;\n\t}\n}\n\nfunction mapOwner(owner: Object_Owner_FieldsFragment): Experimental_SuiClientTypes.ObjectOwner {\n\tswitch (owner.__typename) {\n\t\tcase 'AddressOwner':\n\t\t\treturn { $kind: 'AddressOwner', AddressOwner: owner.owner?.asAddress?.address };\n\t\tcase 'ConsensusV2':\n\t\t\treturn { $kind: 'ConsensusV2', ConsensusV2: owner.authenticator!.address };\n\t\tcase 'Immutable':\n\t\t\treturn { $kind: 'Immutable', Immutable: true };\n\t\tcase 'Parent':\n\t\t\treturn { $kind: 'ObjectOwner', ObjectOwner: owner.parent?.address };\n\t\tcase 'Shared':\n\t\t\treturn { $kind: 'Shared', Shared: owner.initialSharedVersion };\n\t}\n}\n\nfunction parseTransaction(\n\ttransaction: Transaction_FieldsFragment,\n): Experimental_SuiClientTypes.TransactionResponse {\n\tconst objectTypes: Record<string, string> = {};\n\n\ttransaction.effects?.unchangedSharedObjects.nodes.forEach((node) => {\n\t\tif (node.__typename === 'SharedObjectRead') {\n\t\t\tconst type = node.object?.asMoveObject?.contents?.type.repr;\n\t\t\tconst address = node.object?.asMoveObject?.address;\n\n\t\t\tif (type && address) {\n\t\t\t\tobjectTypes[address] = type;\n\t\t\t}\n\t\t}\n\t});\n\n\ttransaction.effects?.objectChanges.nodes.forEach((node) => {\n\t\tconst address = node.address;\n\t\tconst type =\n\t\t\tnode.inputState?.asMoveObject?.contents?.type.repr ??\n\t\t\tnode.outputState?.asMoveObject?.contents?.type.repr;\n\n\t\tif (address && type) {\n\t\t\tobjectTypes[address] = type;\n\t\t}\n\t});\n\n\treturn {\n\t\tdigest: transaction.digest!,\n\t\teffects: parseTransactionEffects({\n\t\t\teffects: new Uint8Array(transaction.effects?.bcs!),\n\t\t\tobjectTypes,\n\t\t}),\n\t\tbcs: transaction.bcs!,\n\t\tsignatures: transaction.signatures!,\n\t};\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["result"]
|
|
7
|
+
}
|
|
@@ -56,14 +56,12 @@ export declare class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
56
56
|
bcs: Uint8Array<ArrayBufferLike>;
|
|
57
57
|
};
|
|
58
58
|
}>;
|
|
59
|
-
getReferenceGasPrice(): Promise<{
|
|
59
|
+
getReferenceGasPrice(options?: Experimental_SuiClientTypes.GetReferenceGasPriceOptions): Promise<{
|
|
60
60
|
referenceGasPrice: string;
|
|
61
61
|
}>;
|
|
62
62
|
getDynamicFields(options: Experimental_SuiClientTypes.GetDynamicFieldsOptions): Promise<{
|
|
63
63
|
dynamicFields: {
|
|
64
64
|
id: string;
|
|
65
|
-
version: string;
|
|
66
|
-
digest: string;
|
|
67
65
|
type: string;
|
|
68
66
|
name: {
|
|
69
67
|
type: string;
|
|
@@ -73,4 +71,8 @@ export declare class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
73
71
|
hasNextPage: boolean;
|
|
74
72
|
cursor: string | null;
|
|
75
73
|
}>;
|
|
74
|
+
verifyZkLoginSignature(options: Experimental_SuiClientTypes.VerifyZkLoginSignatureOptions): Promise<{
|
|
75
|
+
success: boolean;
|
|
76
|
+
errors: string[];
|
|
77
|
+
}>;
|
|
76
78
|
}
|
|
@@ -13,6 +13,7 @@ import { Transaction } from "../../transactions/Transaction.js";
|
|
|
13
13
|
import { normalizeStructTag } from "../../utils/sui-types.js";
|
|
14
14
|
import { Experimental_CoreClient } from "../core.js";
|
|
15
15
|
import { ObjectError } from "../errors.js";
|
|
16
|
+
import { parseTransactionEffects } from "./utils.js";
|
|
16
17
|
class JSONRpcTransport extends Experimental_CoreClient {
|
|
17
18
|
constructor(jsonRpcClient) {
|
|
18
19
|
super({ network: jsonRpcClient.network });
|
|
@@ -29,7 +30,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
29
30
|
showOwner: true,
|
|
30
31
|
showType: true,
|
|
31
32
|
showBcs: true
|
|
32
|
-
}
|
|
33
|
+
},
|
|
34
|
+
signal: options.signal
|
|
33
35
|
});
|
|
34
36
|
for (const [idx, object] of objects.entries()) {
|
|
35
37
|
if (object.error) {
|
|
@@ -52,7 +54,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
52
54
|
showOwner: true,
|
|
53
55
|
showType: true,
|
|
54
56
|
showBcs: true
|
|
55
|
-
}
|
|
57
|
+
},
|
|
58
|
+
signal: options.signal
|
|
56
59
|
});
|
|
57
60
|
return {
|
|
58
61
|
objects: objects.data.map((result) => {
|
|
@@ -68,7 +71,10 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
68
71
|
async getCoins(options) {
|
|
69
72
|
const coins = await __privateGet(this, _jsonRpcClient).getCoins({
|
|
70
73
|
owner: options.address,
|
|
71
|
-
coinType: options.coinType
|
|
74
|
+
coinType: options.coinType,
|
|
75
|
+
limit: options.limit,
|
|
76
|
+
cursor: options.cursor,
|
|
77
|
+
signal: options.signal
|
|
72
78
|
});
|
|
73
79
|
return {
|
|
74
80
|
objects: coins.data.map((coin) => {
|
|
@@ -97,7 +103,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
97
103
|
async getBalance(options) {
|
|
98
104
|
const balance = await __privateGet(this, _jsonRpcClient).getBalance({
|
|
99
105
|
owner: options.address,
|
|
100
|
-
coinType: options.coinType
|
|
106
|
+
coinType: options.coinType,
|
|
107
|
+
signal: options.signal
|
|
101
108
|
});
|
|
102
109
|
return {
|
|
103
110
|
balance: {
|
|
@@ -108,7 +115,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
108
115
|
}
|
|
109
116
|
async getAllBalances(options) {
|
|
110
117
|
const balances = await __privateGet(this, _jsonRpcClient).getAllBalances({
|
|
111
|
-
owner: options.address
|
|
118
|
+
owner: options.address,
|
|
119
|
+
signal: options.signal
|
|
112
120
|
});
|
|
113
121
|
return {
|
|
114
122
|
balances: balances.map((balance) => ({
|
|
@@ -127,7 +135,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
127
135
|
showObjectChanges: true,
|
|
128
136
|
showRawEffects: true,
|
|
129
137
|
showEvents: true
|
|
130
|
-
}
|
|
138
|
+
},
|
|
139
|
+
signal: options.signal
|
|
131
140
|
});
|
|
132
141
|
return {
|
|
133
142
|
transaction: parseTransaction(transaction)
|
|
@@ -142,7 +151,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
142
151
|
showEvents: true,
|
|
143
152
|
showObjectChanges: true,
|
|
144
153
|
showRawInput: true
|
|
145
|
-
}
|
|
154
|
+
},
|
|
155
|
+
signal: options.signal
|
|
146
156
|
});
|
|
147
157
|
return {
|
|
148
158
|
transaction: parseTransaction(transaction)
|
|
@@ -151,7 +161,8 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
151
161
|
async dryRunTransaction(options) {
|
|
152
162
|
const tx = Transaction.from(options.transaction);
|
|
153
163
|
const result = await __privateGet(this, _jsonRpcClient).dryRunTransactionBlock({
|
|
154
|
-
transactionBlock: options.transaction
|
|
164
|
+
transactionBlock: options.transaction,
|
|
165
|
+
signal: options.signal
|
|
155
166
|
});
|
|
156
167
|
return {
|
|
157
168
|
transaction: {
|
|
@@ -165,8 +176,10 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
165
176
|
}
|
|
166
177
|
};
|
|
167
178
|
}
|
|
168
|
-
async getReferenceGasPrice() {
|
|
169
|
-
const referenceGasPrice = await __privateGet(this, _jsonRpcClient).getReferenceGasPrice(
|
|
179
|
+
async getReferenceGasPrice(options) {
|
|
180
|
+
const referenceGasPrice = await __privateGet(this, _jsonRpcClient).getReferenceGasPrice({
|
|
181
|
+
signal: options?.signal
|
|
182
|
+
});
|
|
170
183
|
return {
|
|
171
184
|
referenceGasPrice: String(referenceGasPrice)
|
|
172
185
|
};
|
|
@@ -178,20 +191,32 @@ class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
178
191
|
cursor: options.cursor
|
|
179
192
|
});
|
|
180
193
|
return {
|
|
181
|
-
dynamicFields: dynamicFields.data.map((dynamicField) =>
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
}
|
|
190
|
-
})
|
|
194
|
+
dynamicFields: dynamicFields.data.map((dynamicField) => {
|
|
195
|
+
return {
|
|
196
|
+
id: dynamicField.objectId,
|
|
197
|
+
type: dynamicField.objectType,
|
|
198
|
+
name: {
|
|
199
|
+
type: dynamicField.name.type,
|
|
200
|
+
bcs: fromBase64(dynamicField.bcsName)
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
}),
|
|
191
204
|
hasNextPage: dynamicFields.hasNextPage,
|
|
192
205
|
cursor: dynamicFields.nextCursor
|
|
193
206
|
};
|
|
194
207
|
}
|
|
208
|
+
async verifyZkLoginSignature(options) {
|
|
209
|
+
const result = await __privateGet(this, _jsonRpcClient).verifyZkLoginSignature({
|
|
210
|
+
bytes: options.bytes,
|
|
211
|
+
signature: options.signature,
|
|
212
|
+
intentScope: options.intentScope,
|
|
213
|
+
author: options.author
|
|
214
|
+
});
|
|
215
|
+
return {
|
|
216
|
+
success: result.success,
|
|
217
|
+
errors: result.errors
|
|
218
|
+
};
|
|
219
|
+
}
|
|
195
220
|
}
|
|
196
221
|
_jsonRpcClient = new WeakMap();
|
|
197
222
|
function parseObject(object) {
|
|
@@ -247,99 +272,22 @@ function parseOwner(owner) {
|
|
|
247
272
|
}
|
|
248
273
|
function parseTransaction(transaction) {
|
|
249
274
|
const parsedTx = bcs.SenderSignedData.parse(fromBase64(transaction.rawTransaction))[0];
|
|
275
|
+
const objectTypes = {};
|
|
276
|
+
transaction.objectChanges?.forEach((change) => {
|
|
277
|
+
if (change.type !== "published") {
|
|
278
|
+
objectTypes[change.objectId] = change.objectType;
|
|
279
|
+
}
|
|
280
|
+
});
|
|
250
281
|
return {
|
|
251
282
|
digest: transaction.digest,
|
|
252
283
|
effects: parseTransactionEffects({
|
|
253
284
|
effects: new Uint8Array(transaction.rawEffects),
|
|
254
|
-
|
|
285
|
+
objectTypes
|
|
255
286
|
}),
|
|
256
287
|
bcs: bcs.TransactionData.serialize(parsedTx.intentMessage.value).toBytes(),
|
|
257
288
|
signatures: parsedTx.txSignatures
|
|
258
289
|
};
|
|
259
290
|
}
|
|
260
|
-
function parseTransactionEffects({
|
|
261
|
-
effects,
|
|
262
|
-
epoch,
|
|
263
|
-
objectChanges
|
|
264
|
-
}) {
|
|
265
|
-
const parsed = bcs.TransactionEffects.parse(effects);
|
|
266
|
-
const objectTypes = {};
|
|
267
|
-
objectChanges?.forEach((change) => {
|
|
268
|
-
if (change.type !== "published") {
|
|
269
|
-
objectTypes[change.objectId] = change.objectType;
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
switch (parsed.$kind) {
|
|
273
|
-
case "V1":
|
|
274
|
-
return parseTransactionEffectsV1({ bytes: effects, effects: parsed.V1, epoch, objectTypes });
|
|
275
|
-
case "V2":
|
|
276
|
-
return parseTransactionEffectsV2({ bytes: effects, effects: parsed.V2, epoch, objectTypes });
|
|
277
|
-
default:
|
|
278
|
-
throw new Error(
|
|
279
|
-
`Unknown transaction effects version: ${parsed.$kind}`
|
|
280
|
-
);
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
function parseTransactionEffectsV1(_) {
|
|
284
|
-
throw new Error("V1 effects are not supported yet");
|
|
285
|
-
}
|
|
286
|
-
function parseTransactionEffectsV2({
|
|
287
|
-
bytes,
|
|
288
|
-
effects,
|
|
289
|
-
epoch,
|
|
290
|
-
objectTypes
|
|
291
|
-
}) {
|
|
292
|
-
const changedObjects = effects.changedObjects.map(
|
|
293
|
-
([id, change]) => {
|
|
294
|
-
return {
|
|
295
|
-
id,
|
|
296
|
-
inputState: change.inputState.$kind === "Exist" ? "Exists" : "DoesNotExist",
|
|
297
|
-
inputVersion: change.inputState.Exist?.[0][0] ?? null,
|
|
298
|
-
inputDigest: change.inputState.Exist?.[0][1] ?? null,
|
|
299
|
-
inputOwner: change.inputState.Exist?.[1] ?? null,
|
|
300
|
-
outputState: change.outputState.$kind === "NotExist" ? "DoesNotExist" : change.outputState.$kind,
|
|
301
|
-
outputVersion: change.outputState.$kind === "PackageWrite" ? change.outputState.PackageWrite?.[0] : change.outputState.ObjectWrite ? effects.lamportVersion : null,
|
|
302
|
-
outputDigest: change.outputState.$kind === "PackageWrite" ? change.outputState.PackageWrite?.[1] : change.outputState.ObjectWrite?.[0] ?? null,
|
|
303
|
-
outputOwner: change.outputState.ObjectWrite ? change.outputState.ObjectWrite[1] : null,
|
|
304
|
-
idOperation: change.idOperation.$kind,
|
|
305
|
-
objectType: objectTypes[id] ?? null
|
|
306
|
-
};
|
|
307
|
-
}
|
|
308
|
-
);
|
|
309
|
-
return {
|
|
310
|
-
bcs: bytes,
|
|
311
|
-
digest: effects.transactionDigest,
|
|
312
|
-
version: 2,
|
|
313
|
-
status: effects.status.$kind === "Success" ? {
|
|
314
|
-
success: true,
|
|
315
|
-
error: null
|
|
316
|
-
} : {
|
|
317
|
-
success: false,
|
|
318
|
-
// TODO: add command
|
|
319
|
-
error: effects.status.Failed.error.$kind
|
|
320
|
-
},
|
|
321
|
-
epoch: epoch ?? null,
|
|
322
|
-
gasUsed: effects.gasUsed,
|
|
323
|
-
transactionDigest: effects.transactionDigest,
|
|
324
|
-
gasObject: effects.gasObjectIndex === null ? null : changedObjects[effects.gasObjectIndex] ?? null,
|
|
325
|
-
eventsDigest: effects.eventsDigest,
|
|
326
|
-
dependencies: effects.dependencies,
|
|
327
|
-
lamportVersion: effects.lamportVersion,
|
|
328
|
-
changedObjects,
|
|
329
|
-
unchangedSharedObjects: effects.unchangedSharedObjects.map(
|
|
330
|
-
([objectId, object]) => {
|
|
331
|
-
return {
|
|
332
|
-
kind: object.$kind,
|
|
333
|
-
objectId,
|
|
334
|
-
version: object.$kind === "ReadOnlyRoot" ? object.ReadOnlyRoot[0] : object[object.$kind],
|
|
335
|
-
digest: object.$kind === "ReadOnlyRoot" ? object.ReadOnlyRoot[1] : null,
|
|
336
|
-
objectType: objectTypes[objectId] ?? null
|
|
337
|
-
};
|
|
338
|
-
}
|
|
339
|
-
),
|
|
340
|
-
auxiliaryDataDigest: effects.auxDataDigest
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
291
|
function parseTransactionEffectsJson({
|
|
344
292
|
bytes,
|
|
345
293
|
effects,
|