@mysten/sui 1.28.1 → 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 +14 -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 +2 -1
- package/dist/cjs/experimental/core.js +12 -1
- 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 +27 -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 +2 -1
- package/dist/esm/experimental/core.js +12 -1
- 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 +27 -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 +17 -1
- 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 +38 -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
|
@@ -18,6 +18,7 @@ import { normalizeStructTag } from '../../utils/sui-types.js';
|
|
|
18
18
|
import { Experimental_CoreClient } from '../core.js';
|
|
19
19
|
import { ObjectError } from '../errors.js';
|
|
20
20
|
import type { Experimental_SuiClientTypes } from '../types.js';
|
|
21
|
+
import { parseTransactionEffects } from './utils.js';
|
|
21
22
|
|
|
22
23
|
export class JSONRpcTransport extends Experimental_CoreClient {
|
|
23
24
|
#jsonRpcClient: SuiClient;
|
|
@@ -39,6 +40,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
39
40
|
showType: true,
|
|
40
41
|
showBcs: true,
|
|
41
42
|
},
|
|
43
|
+
signal: options.signal,
|
|
42
44
|
});
|
|
43
45
|
|
|
44
46
|
for (const [idx, object] of objects.entries()) {
|
|
@@ -64,6 +66,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
64
66
|
showType: true,
|
|
65
67
|
showBcs: true,
|
|
66
68
|
},
|
|
69
|
+
signal: options.signal,
|
|
67
70
|
});
|
|
68
71
|
|
|
69
72
|
return {
|
|
@@ -83,6 +86,9 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
83
86
|
const coins = await this.#jsonRpcClient.getCoins({
|
|
84
87
|
owner: options.address,
|
|
85
88
|
coinType: options.coinType,
|
|
89
|
+
limit: options.limit,
|
|
90
|
+
cursor: options.cursor,
|
|
91
|
+
signal: options.signal,
|
|
86
92
|
});
|
|
87
93
|
|
|
88
94
|
return {
|
|
@@ -114,6 +120,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
114
120
|
const balance = await this.#jsonRpcClient.getBalance({
|
|
115
121
|
owner: options.address,
|
|
116
122
|
coinType: options.coinType,
|
|
123
|
+
signal: options.signal,
|
|
117
124
|
});
|
|
118
125
|
|
|
119
126
|
return {
|
|
@@ -126,6 +133,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
126
133
|
async getAllBalances(options: Experimental_SuiClientTypes.GetAllBalancesOptions) {
|
|
127
134
|
const balances = await this.#jsonRpcClient.getAllBalances({
|
|
128
135
|
owner: options.address,
|
|
136
|
+
signal: options.signal,
|
|
129
137
|
});
|
|
130
138
|
|
|
131
139
|
return {
|
|
@@ -146,6 +154,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
146
154
|
showRawEffects: true,
|
|
147
155
|
showEvents: true,
|
|
148
156
|
},
|
|
157
|
+
signal: options.signal,
|
|
149
158
|
});
|
|
150
159
|
|
|
151
160
|
return {
|
|
@@ -162,6 +171,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
162
171
|
showObjectChanges: true,
|
|
163
172
|
showRawInput: true,
|
|
164
173
|
},
|
|
174
|
+
signal: options.signal,
|
|
165
175
|
});
|
|
166
176
|
|
|
167
177
|
return {
|
|
@@ -172,6 +182,7 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
172
182
|
const tx = Transaction.from(options.transaction);
|
|
173
183
|
const result = await this.#jsonRpcClient.dryRunTransactionBlock({
|
|
174
184
|
transactionBlock: options.transaction,
|
|
185
|
+
signal: options.signal,
|
|
175
186
|
});
|
|
176
187
|
|
|
177
188
|
return {
|
|
@@ -186,8 +197,10 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
186
197
|
},
|
|
187
198
|
};
|
|
188
199
|
}
|
|
189
|
-
async getReferenceGasPrice() {
|
|
190
|
-
const referenceGasPrice = await this.#jsonRpcClient.getReferenceGasPrice(
|
|
200
|
+
async getReferenceGasPrice(options?: Experimental_SuiClientTypes.GetReferenceGasPriceOptions) {
|
|
201
|
+
const referenceGasPrice = await this.#jsonRpcClient.getReferenceGasPrice({
|
|
202
|
+
signal: options?.signal,
|
|
203
|
+
});
|
|
191
204
|
return {
|
|
192
205
|
referenceGasPrice: String(referenceGasPrice),
|
|
193
206
|
};
|
|
@@ -201,20 +214,34 @@ export class JSONRpcTransport extends Experimental_CoreClient {
|
|
|
201
214
|
});
|
|
202
215
|
|
|
203
216
|
return {
|
|
204
|
-
dynamicFields: dynamicFields.data.map((dynamicField) =>
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
213
|
-
})
|
|
217
|
+
dynamicFields: dynamicFields.data.map((dynamicField) => {
|
|
218
|
+
return {
|
|
219
|
+
id: dynamicField.objectId,
|
|
220
|
+
type: dynamicField.objectType,
|
|
221
|
+
name: {
|
|
222
|
+
type: dynamicField.name.type,
|
|
223
|
+
bcs: fromBase64(dynamicField.bcsName),
|
|
224
|
+
},
|
|
225
|
+
};
|
|
226
|
+
}),
|
|
214
227
|
hasNextPage: dynamicFields.hasNextPage,
|
|
215
228
|
cursor: dynamicFields.nextCursor,
|
|
216
229
|
};
|
|
217
230
|
}
|
|
231
|
+
|
|
232
|
+
async verifyZkLoginSignature(options: Experimental_SuiClientTypes.VerifyZkLoginSignatureOptions) {
|
|
233
|
+
const result = await this.#jsonRpcClient.verifyZkLoginSignature({
|
|
234
|
+
bytes: options.bytes,
|
|
235
|
+
signature: options.signature,
|
|
236
|
+
intentScope: options.intentScope,
|
|
237
|
+
author: options.author,
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
success: result.success,
|
|
242
|
+
errors: result.errors,
|
|
243
|
+
};
|
|
244
|
+
}
|
|
218
245
|
}
|
|
219
246
|
|
|
220
247
|
function parseObject(object: SuiObjectData): Experimental_SuiClientTypes.ObjectResponse {
|
|
@@ -280,134 +307,22 @@ function parseTransaction(
|
|
|
280
307
|
transaction: SuiTransactionBlockResponse,
|
|
281
308
|
): Experimental_SuiClientTypes.TransactionResponse {
|
|
282
309
|
const parsedTx = bcs.SenderSignedData.parse(fromBase64(transaction.rawTransaction!))[0];
|
|
283
|
-
|
|
284
|
-
return {
|
|
285
|
-
digest: transaction.digest,
|
|
286
|
-
effects: parseTransactionEffects({
|
|
287
|
-
effects: new Uint8Array(transaction.rawEffects!),
|
|
288
|
-
objectChanges: transaction.objectChanges ?? null,
|
|
289
|
-
}),
|
|
290
|
-
bcs: bcs.TransactionData.serialize(parsedTx.intentMessage.value).toBytes(),
|
|
291
|
-
signatures: parsedTx.txSignatures,
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
function parseTransactionEffects({
|
|
296
|
-
effects,
|
|
297
|
-
epoch,
|
|
298
|
-
objectChanges,
|
|
299
|
-
}: {
|
|
300
|
-
effects: Uint8Array;
|
|
301
|
-
objectChanges: SuiObjectChange[] | null;
|
|
302
|
-
epoch?: string | null;
|
|
303
|
-
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
304
|
-
const parsed = bcs.TransactionEffects.parse(effects);
|
|
305
310
|
const objectTypes: Record<string, string> = {};
|
|
306
311
|
|
|
307
|
-
objectChanges?.forEach((change) => {
|
|
312
|
+
transaction.objectChanges?.forEach((change) => {
|
|
308
313
|
if (change.type !== 'published') {
|
|
309
314
|
objectTypes[change.objectId] = change.objectType;
|
|
310
315
|
}
|
|
311
316
|
});
|
|
312
317
|
|
|
313
|
-
switch (parsed.$kind) {
|
|
314
|
-
case 'V1':
|
|
315
|
-
return parseTransactionEffectsV1({ bytes: effects, effects: parsed.V1, epoch, objectTypes });
|
|
316
|
-
case 'V2':
|
|
317
|
-
return parseTransactionEffectsV2({ bytes: effects, effects: parsed.V2, epoch, objectTypes });
|
|
318
|
-
default:
|
|
319
|
-
throw new Error(
|
|
320
|
-
`Unknown transaction effects version: ${(parsed as { $kind: string }).$kind}`,
|
|
321
|
-
);
|
|
322
|
-
}
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
function parseTransactionEffectsV1(_: {
|
|
326
|
-
bytes: Uint8Array;
|
|
327
|
-
effects: NonNullable<(typeof bcs.TransactionEffects.$inferType)['V1']>;
|
|
328
|
-
epoch?: string | null;
|
|
329
|
-
objectTypes: Record<string, string>;
|
|
330
|
-
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
331
|
-
throw new Error('V1 effects are not supported yet');
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
function parseTransactionEffectsV2({
|
|
335
|
-
bytes,
|
|
336
|
-
effects,
|
|
337
|
-
epoch,
|
|
338
|
-
objectTypes,
|
|
339
|
-
}: {
|
|
340
|
-
bytes: Uint8Array;
|
|
341
|
-
effects: NonNullable<(typeof bcs.TransactionEffects.$inferType)['V2']>;
|
|
342
|
-
epoch?: string | null;
|
|
343
|
-
objectTypes: Record<string, string>;
|
|
344
|
-
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
345
|
-
const changedObjects = effects.changedObjects.map(
|
|
346
|
-
([id, change]): Experimental_SuiClientTypes.ChangedObject => {
|
|
347
|
-
return {
|
|
348
|
-
id,
|
|
349
|
-
inputState: change.inputState.$kind === 'Exist' ? 'Exists' : 'DoesNotExist',
|
|
350
|
-
inputVersion: change.inputState.Exist?.[0][0] ?? null,
|
|
351
|
-
inputDigest: change.inputState.Exist?.[0][1] ?? null,
|
|
352
|
-
inputOwner: change.inputState.Exist?.[1] ?? null,
|
|
353
|
-
outputState:
|
|
354
|
-
change.outputState.$kind === 'NotExist' ? 'DoesNotExist' : change.outputState.$kind,
|
|
355
|
-
outputVersion:
|
|
356
|
-
change.outputState.$kind === 'PackageWrite'
|
|
357
|
-
? change.outputState.PackageWrite?.[0]
|
|
358
|
-
: change.outputState.ObjectWrite
|
|
359
|
-
? effects.lamportVersion
|
|
360
|
-
: null,
|
|
361
|
-
outputDigest:
|
|
362
|
-
change.outputState.$kind === 'PackageWrite'
|
|
363
|
-
? change.outputState.PackageWrite?.[1]
|
|
364
|
-
: (change.outputState.ObjectWrite?.[0] ?? null),
|
|
365
|
-
outputOwner: change.outputState.ObjectWrite ? change.outputState.ObjectWrite[1] : null,
|
|
366
|
-
idOperation: change.idOperation.$kind,
|
|
367
|
-
objectType: objectTypes[id] ?? null,
|
|
368
|
-
};
|
|
369
|
-
},
|
|
370
|
-
);
|
|
371
|
-
|
|
372
318
|
return {
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
error: null,
|
|
381
|
-
}
|
|
382
|
-
: {
|
|
383
|
-
success: false,
|
|
384
|
-
// TODO: add command
|
|
385
|
-
error: effects.status.Failed.error.$kind,
|
|
386
|
-
},
|
|
387
|
-
epoch: epoch ?? null,
|
|
388
|
-
gasUsed: effects.gasUsed,
|
|
389
|
-
transactionDigest: effects.transactionDigest,
|
|
390
|
-
gasObject:
|
|
391
|
-
effects.gasObjectIndex === null ? null : (changedObjects[effects.gasObjectIndex] ?? null),
|
|
392
|
-
eventsDigest: effects.eventsDigest,
|
|
393
|
-
dependencies: effects.dependencies,
|
|
394
|
-
lamportVersion: effects.lamportVersion,
|
|
395
|
-
changedObjects,
|
|
396
|
-
unchangedSharedObjects: effects.unchangedSharedObjects.map(
|
|
397
|
-
([objectId, object]): Experimental_SuiClientTypes.UnchangedSharedObject => {
|
|
398
|
-
return {
|
|
399
|
-
kind: object.$kind,
|
|
400
|
-
objectId: objectId,
|
|
401
|
-
version:
|
|
402
|
-
object.$kind === 'ReadOnlyRoot'
|
|
403
|
-
? object.ReadOnlyRoot[0]
|
|
404
|
-
: (object[object.$kind] as string | null),
|
|
405
|
-
digest: object.$kind === 'ReadOnlyRoot' ? object.ReadOnlyRoot[1] : null,
|
|
406
|
-
objectType: objectTypes[objectId] ?? null,
|
|
407
|
-
};
|
|
408
|
-
},
|
|
409
|
-
),
|
|
410
|
-
auxiliaryDataDigest: effects.auxDataDigest,
|
|
319
|
+
digest: transaction.digest,
|
|
320
|
+
effects: parseTransactionEffects({
|
|
321
|
+
effects: new Uint8Array(transaction.rawEffects!),
|
|
322
|
+
objectTypes,
|
|
323
|
+
}),
|
|
324
|
+
bcs: bcs.TransactionData.serialize(parsedTx.intentMessage.value).toBytes(),
|
|
325
|
+
signatures: parsedTx.txSignatures,
|
|
411
326
|
};
|
|
412
327
|
}
|
|
413
328
|
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Copyright (c) Mysten Labs, Inc.
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
|
|
4
|
+
import { bcs } from '../../bcs/index.js';
|
|
5
|
+
import type { Experimental_SuiClientTypes } from '../types.js';
|
|
6
|
+
|
|
7
|
+
export function parseTransactionEffects({
|
|
8
|
+
effects,
|
|
9
|
+
epoch,
|
|
10
|
+
objectTypes,
|
|
11
|
+
}: {
|
|
12
|
+
effects: Uint8Array;
|
|
13
|
+
objectTypes: Record<string, string>;
|
|
14
|
+
epoch?: string | null;
|
|
15
|
+
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
16
|
+
const parsed = bcs.TransactionEffects.parse(effects);
|
|
17
|
+
|
|
18
|
+
switch (parsed.$kind) {
|
|
19
|
+
case 'V1':
|
|
20
|
+
return parseTransactionEffectsV1({ bytes: effects, effects: parsed.V1, epoch, objectTypes });
|
|
21
|
+
case 'V2':
|
|
22
|
+
return parseTransactionEffectsV2({ bytes: effects, effects: parsed.V2, epoch, objectTypes });
|
|
23
|
+
default:
|
|
24
|
+
throw new Error(
|
|
25
|
+
`Unknown transaction effects version: ${(parsed as { $kind: string }).$kind}`,
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function parseTransactionEffectsV1(_: {
|
|
31
|
+
bytes: Uint8Array;
|
|
32
|
+
effects: NonNullable<(typeof bcs.TransactionEffects.$inferType)['V1']>;
|
|
33
|
+
epoch?: string | null;
|
|
34
|
+
objectTypes: Record<string, string>;
|
|
35
|
+
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
36
|
+
throw new Error('V1 effects are not supported yet');
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function parseTransactionEffectsV2({
|
|
40
|
+
bytes,
|
|
41
|
+
effects,
|
|
42
|
+
epoch,
|
|
43
|
+
objectTypes,
|
|
44
|
+
}: {
|
|
45
|
+
bytes: Uint8Array;
|
|
46
|
+
effects: NonNullable<(typeof bcs.TransactionEffects.$inferType)['V2']>;
|
|
47
|
+
epoch?: string | null;
|
|
48
|
+
objectTypes: Record<string, string>;
|
|
49
|
+
}): Experimental_SuiClientTypes.TransactionEffects {
|
|
50
|
+
const changedObjects = effects.changedObjects.map(
|
|
51
|
+
([id, change]): Experimental_SuiClientTypes.ChangedObject => {
|
|
52
|
+
return {
|
|
53
|
+
id,
|
|
54
|
+
inputState: change.inputState.$kind === 'Exist' ? 'Exists' : 'DoesNotExist',
|
|
55
|
+
inputVersion: change.inputState.Exist?.[0][0] ?? null,
|
|
56
|
+
inputDigest: change.inputState.Exist?.[0][1] ?? null,
|
|
57
|
+
inputOwner: change.inputState.Exist?.[1] ?? null,
|
|
58
|
+
outputState:
|
|
59
|
+
change.outputState.$kind === 'NotExist' ? 'DoesNotExist' : change.outputState.$kind,
|
|
60
|
+
outputVersion:
|
|
61
|
+
change.outputState.$kind === 'PackageWrite'
|
|
62
|
+
? change.outputState.PackageWrite?.[0]
|
|
63
|
+
: change.outputState.ObjectWrite
|
|
64
|
+
? effects.lamportVersion
|
|
65
|
+
: null,
|
|
66
|
+
outputDigest:
|
|
67
|
+
change.outputState.$kind === 'PackageWrite'
|
|
68
|
+
? change.outputState.PackageWrite?.[1]
|
|
69
|
+
: (change.outputState.ObjectWrite?.[0] ?? null),
|
|
70
|
+
outputOwner: change.outputState.ObjectWrite ? change.outputState.ObjectWrite[1] : null,
|
|
71
|
+
idOperation: change.idOperation.$kind,
|
|
72
|
+
objectType: objectTypes[id] ?? null,
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
bcs: bytes,
|
|
79
|
+
digest: effects.transactionDigest,
|
|
80
|
+
version: 2,
|
|
81
|
+
status:
|
|
82
|
+
effects.status.$kind === 'Success'
|
|
83
|
+
? {
|
|
84
|
+
success: true,
|
|
85
|
+
error: null,
|
|
86
|
+
}
|
|
87
|
+
: {
|
|
88
|
+
success: false,
|
|
89
|
+
// TODO: add command
|
|
90
|
+
error: effects.status.Failed.error.$kind,
|
|
91
|
+
},
|
|
92
|
+
epoch: epoch ?? null,
|
|
93
|
+
gasUsed: effects.gasUsed,
|
|
94
|
+
transactionDigest: effects.transactionDigest,
|
|
95
|
+
gasObject:
|
|
96
|
+
effects.gasObjectIndex === null ? null : (changedObjects[effects.gasObjectIndex] ?? null),
|
|
97
|
+
eventsDigest: effects.eventsDigest,
|
|
98
|
+
dependencies: effects.dependencies,
|
|
99
|
+
lamportVersion: effects.lamportVersion,
|
|
100
|
+
changedObjects,
|
|
101
|
+
unchangedSharedObjects: effects.unchangedSharedObjects.map(
|
|
102
|
+
([objectId, object]): Experimental_SuiClientTypes.UnchangedSharedObject => {
|
|
103
|
+
return {
|
|
104
|
+
kind: object.$kind,
|
|
105
|
+
objectId: objectId,
|
|
106
|
+
version:
|
|
107
|
+
object.$kind === 'ReadOnlyRoot'
|
|
108
|
+
? object.ReadOnlyRoot[0]
|
|
109
|
+
: (object[object.$kind] as string | null),
|
|
110
|
+
digest: object.$kind === 'ReadOnlyRoot' ? object.ReadOnlyRoot[1] : null,
|
|
111
|
+
objectType: objectTypes[objectId] ?? null,
|
|
112
|
+
};
|
|
113
|
+
},
|
|
114
|
+
),
|
|
115
|
+
auxiliaryDataDigest: effects.auxDataDigest,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
@@ -55,6 +55,10 @@ export namespace Experimental_SuiClientTypes {
|
|
|
55
55
|
objectIds: string[];
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
export interface GetObjectOptions extends CoreClientMethodOptions {
|
|
59
|
+
objectId: string;
|
|
60
|
+
}
|
|
61
|
+
|
|
58
62
|
export interface GetOwnedObjectsOptions extends CoreClientMethodOptions {
|
|
59
63
|
address: string;
|
|
60
64
|
limit?: number;
|
|
@@ -65,6 +69,8 @@ export namespace Experimental_SuiClientTypes {
|
|
|
65
69
|
export interface GetCoinsOptions extends CoreClientMethodOptions {
|
|
66
70
|
address: string;
|
|
67
71
|
coinType: string;
|
|
72
|
+
limit?: number;
|
|
73
|
+
cursor?: string | null;
|
|
68
74
|
}
|
|
69
75
|
|
|
70
76
|
export interface GetDynamicFieldsOptions extends CoreClientMethodOptions {
|
|
@@ -82,6 +88,10 @@ export namespace Experimental_SuiClientTypes {
|
|
|
82
88
|
objects: (ObjectResponse | Error)[];
|
|
83
89
|
}
|
|
84
90
|
|
|
91
|
+
export interface GetObjectResponse {
|
|
92
|
+
object: ObjectResponse;
|
|
93
|
+
}
|
|
94
|
+
|
|
85
95
|
export interface GetOwnedObjectsResponse {
|
|
86
96
|
objects: ObjectResponse[];
|
|
87
97
|
hasNextPage: boolean;
|
|
@@ -111,11 +121,9 @@ export namespace Experimental_SuiClientTypes {
|
|
|
111
121
|
hasNextPage: boolean;
|
|
112
122
|
cursor: string | null;
|
|
113
123
|
dynamicFields: {
|
|
114
|
-
name: DynamicFieldName;
|
|
115
124
|
id: string;
|
|
116
|
-
version: string;
|
|
117
|
-
digest: string;
|
|
118
125
|
type: string;
|
|
126
|
+
name: DynamicFieldName;
|
|
119
127
|
}[];
|
|
120
128
|
}
|
|
121
129
|
|
|
@@ -182,11 +190,11 @@ export namespace Experimental_SuiClientTypes {
|
|
|
182
190
|
export interface TransactionResponse {
|
|
183
191
|
digest: string;
|
|
184
192
|
signatures: string[];
|
|
193
|
+
effects: TransactionEffects;
|
|
185
194
|
// TODO: Return parsed data:
|
|
186
|
-
// We need structured representations
|
|
195
|
+
// We need structured representations events, and transaction data
|
|
187
196
|
bcs: Uint8Array;
|
|
188
|
-
|
|
189
|
-
events?: Uint8Array;
|
|
197
|
+
// events?: Uint8Array;
|
|
190
198
|
}
|
|
191
199
|
|
|
192
200
|
export interface GetTransactionOptions extends CoreClientMethodOptions {
|
|
@@ -214,14 +222,37 @@ export namespace Experimental_SuiClientTypes {
|
|
|
214
222
|
transaction: TransactionResponse;
|
|
215
223
|
}
|
|
216
224
|
|
|
225
|
+
export interface GetReferenceGasPriceOptions extends CoreClientMethodOptions {}
|
|
226
|
+
|
|
217
227
|
export interface TransportMethods {
|
|
218
|
-
getReferenceGasPrice?: (
|
|
228
|
+
getReferenceGasPrice?: (
|
|
229
|
+
options?: GetReferenceGasPriceOptions,
|
|
230
|
+
) => Promise<GetReferenceGasPriceResponse>;
|
|
219
231
|
}
|
|
220
232
|
|
|
221
233
|
export interface GetReferenceGasPriceResponse {
|
|
222
234
|
referenceGasPrice: string;
|
|
223
235
|
}
|
|
224
236
|
|
|
237
|
+
/** ZkLogin methods */
|
|
238
|
+
export interface VerifyZkLoginSignatureOptions extends CoreClientMethodOptions {
|
|
239
|
+
bytes: string;
|
|
240
|
+
signature: string;
|
|
241
|
+
intentScope: 'TransactionData' | 'PersonalMessage';
|
|
242
|
+
author: string;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export interface ZkLoginVerifyResponse {
|
|
246
|
+
success: boolean;
|
|
247
|
+
errors: string[];
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface TransportMethods {
|
|
251
|
+
verifyZkLoginSignature?: (
|
|
252
|
+
options: VerifyZkLoginSignatureOptions,
|
|
253
|
+
) => Promise<ZkLoginVerifyResponse>;
|
|
254
|
+
}
|
|
255
|
+
|
|
225
256
|
/** ObjectOwner types */
|
|
226
257
|
|
|
227
258
|
export interface AddressOwner {
|
package/src/faucet/faucet.ts
CHANGED
package/src/graphql/client.ts
CHANGED
|
@@ -5,6 +5,10 @@ import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
|
|
|
5
5
|
import type { TadaDocumentNode } from 'gql.tada';
|
|
6
6
|
import type { DocumentNode } from 'graphql';
|
|
7
7
|
import { print } from 'graphql';
|
|
8
|
+
import { Experimental_BaseClient } from '../experimental/index.js';
|
|
9
|
+
import type { Experimental_SuiClientTypes } from '../experimental/index.js';
|
|
10
|
+
import { GraphQLTransport } from '../experimental/transports/graphql.js';
|
|
11
|
+
import type { TypedDocumentString } from './generated/queries.js';
|
|
8
12
|
|
|
9
13
|
export type GraphQLDocument<
|
|
10
14
|
Result = Record<string, unknown>,
|
|
@@ -12,6 +16,7 @@ export type GraphQLDocument<
|
|
|
12
16
|
> =
|
|
13
17
|
| string
|
|
14
18
|
| DocumentNode
|
|
19
|
+
| TypedDocumentString<Result, Variables>
|
|
15
20
|
| TypedDocumentNode<Result, Variables>
|
|
16
21
|
| TadaDocumentNode<Result, Variables>;
|
|
17
22
|
|
|
@@ -22,6 +27,7 @@ export type GraphQLQueryOptions<
|
|
|
22
27
|
query: GraphQLDocument<Result, Variables>;
|
|
23
28
|
operationName?: string;
|
|
24
29
|
extensions?: Record<string, unknown>;
|
|
30
|
+
signal?: AbortSignal;
|
|
25
31
|
} & (Variables extends { [key: string]: never }
|
|
26
32
|
? { variables?: Variables }
|
|
27
33
|
: {
|
|
@@ -45,23 +51,31 @@ export interface SuiGraphQLClientOptions<Queries extends Record<string, GraphQLD
|
|
|
45
51
|
fetch?: typeof fetch;
|
|
46
52
|
headers?: Record<string, string>;
|
|
47
53
|
queries?: Queries;
|
|
54
|
+
network?: Experimental_SuiClientTypes.Network;
|
|
48
55
|
}
|
|
49
56
|
|
|
50
57
|
export class SuiGraphQLRequestError extends Error {}
|
|
51
58
|
|
|
52
|
-
|
|
53
|
-
|
|
59
|
+
export class SuiGraphQLClient<
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/ban-types
|
|
61
|
+
Queries extends Record<string, GraphQLDocument> = {},
|
|
62
|
+
> extends Experimental_BaseClient {
|
|
54
63
|
#url: string;
|
|
55
64
|
#queries: Queries;
|
|
56
65
|
#headers: Record<string, string>;
|
|
57
66
|
#fetch: typeof fetch;
|
|
67
|
+
core: GraphQLTransport = new GraphQLTransport(this);
|
|
58
68
|
|
|
59
69
|
constructor({
|
|
60
70
|
url,
|
|
61
71
|
fetch: fetchFn = fetch,
|
|
62
72
|
headers = {},
|
|
63
73
|
queries = {} as Queries,
|
|
74
|
+
network = 'unknown',
|
|
64
75
|
}: SuiGraphQLClientOptions<Queries>) {
|
|
76
|
+
super({
|
|
77
|
+
network,
|
|
78
|
+
});
|
|
65
79
|
this.#url = url;
|
|
66
80
|
this.#queries = queries;
|
|
67
81
|
this.#headers = headers;
|
|
@@ -78,11 +92,15 @@ export class SuiGraphQLClient<Queries extends Record<string, GraphQLDocument> =
|
|
|
78
92
|
...this.#headers,
|
|
79
93
|
},
|
|
80
94
|
body: JSON.stringify({
|
|
81
|
-
query:
|
|
95
|
+
query:
|
|
96
|
+
typeof options.query === 'string' || options.query instanceof String
|
|
97
|
+
? String(options.query)
|
|
98
|
+
: print(options.query),
|
|
82
99
|
variables: options.variables,
|
|
83
100
|
extensions: options.extensions,
|
|
84
101
|
operationName: options.operationName,
|
|
85
102
|
}),
|
|
103
|
+
signal: options.signal,
|
|
86
104
|
});
|
|
87
105
|
|
|
88
106
|
if (!res.ok) {
|