@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.
Files changed (117) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +5 -4
  3. package/dist/cjs/client/client.d.ts +2 -1
  4. package/dist/cjs/client/client.js +7 -0
  5. package/dist/cjs/client/client.js.map +2 -2
  6. package/dist/cjs/experimental/core.d.ts +2 -1
  7. package/dist/cjs/experimental/core.js +12 -1
  8. package/dist/cjs/experimental/core.js.map +2 -2
  9. package/dist/cjs/experimental/transports/graphql.d.ts +26 -0
  10. package/dist/cjs/experimental/transports/graphql.js +310 -0
  11. package/dist/cjs/experimental/transports/graphql.js.map +7 -0
  12. package/dist/cjs/experimental/transports/jsonRPC.d.ts +5 -3
  13. package/dist/cjs/experimental/transports/jsonRPC.js +53 -105
  14. package/dist/cjs/experimental/transports/jsonRPC.js.map +3 -3
  15. package/dist/cjs/experimental/transports/utils.d.ts +6 -0
  16. package/dist/cjs/experimental/transports/utils.js +102 -0
  17. package/dist/cjs/experimental/transports/utils.js.map +7 -0
  18. package/dist/cjs/experimental/types.d.ts +27 -6
  19. package/dist/cjs/experimental/types.js.map +1 -1
  20. package/dist/cjs/faucet/faucet.d.ts +1 -1
  21. package/dist/cjs/faucet/faucet.js.map +1 -1
  22. package/dist/cjs/graphql/client.d.ts +10 -3
  23. package/dist/cjs/graphql/client.js +12 -4
  24. package/dist/cjs/graphql/client.js.map +3 -3
  25. package/dist/cjs/graphql/generated/queries.d.ts +5653 -0
  26. package/dist/cjs/graphql/generated/queries.js +722 -0
  27. package/dist/cjs/graphql/generated/queries.js.map +7 -0
  28. package/dist/cjs/multisig/publickey.d.ts +3 -3
  29. package/dist/cjs/multisig/publickey.js.map +2 -2
  30. package/dist/cjs/transactions/Commands.d.ts +2 -2
  31. package/dist/cjs/transactions/Commands.js.map +2 -2
  32. package/dist/cjs/transactions/Transaction.d.ts +10 -2
  33. package/dist/cjs/transactions/Transaction.js +165 -21
  34. package/dist/cjs/transactions/Transaction.js.map +3 -3
  35. package/dist/cjs/transactions/TransactionData.d.ts +4 -2
  36. package/dist/cjs/transactions/TransactionData.js +72 -41
  37. package/dist/cjs/transactions/TransactionData.js.map +2 -2
  38. package/dist/cjs/transactions/intents/CoinWithBalance.js.map +1 -1
  39. package/dist/cjs/verify/verify.d.ts +5 -5
  40. package/dist/cjs/verify/verify.js.map +2 -2
  41. package/dist/cjs/version.d.ts +2 -2
  42. package/dist/cjs/version.js +2 -2
  43. package/dist/cjs/version.js.map +1 -1
  44. package/dist/cjs/zklogin/publickey.d.ts +9 -3
  45. package/dist/cjs/zklogin/publickey.js +8 -30
  46. package/dist/cjs/zklogin/publickey.js.map +2 -2
  47. package/dist/esm/client/client.d.ts +2 -1
  48. package/dist/esm/client/client.js +7 -0
  49. package/dist/esm/client/client.js.map +2 -2
  50. package/dist/esm/experimental/core.d.ts +2 -1
  51. package/dist/esm/experimental/core.js +12 -1
  52. package/dist/esm/experimental/core.js.map +2 -2
  53. package/dist/esm/experimental/transports/graphql.d.ts +26 -0
  54. package/dist/esm/experimental/transports/graphql.js +303 -0
  55. package/dist/esm/experimental/transports/graphql.js.map +7 -0
  56. package/dist/esm/experimental/transports/jsonRPC.d.ts +5 -3
  57. package/dist/esm/experimental/transports/jsonRPC.js +52 -104
  58. package/dist/esm/experimental/transports/jsonRPC.js.map +2 -2
  59. package/dist/esm/experimental/transports/utils.d.ts +6 -0
  60. package/dist/esm/experimental/transports/utils.js +82 -0
  61. package/dist/esm/experimental/transports/utils.js.map +7 -0
  62. package/dist/esm/experimental/types.d.ts +27 -6
  63. package/dist/esm/faucet/faucet.d.ts +1 -1
  64. package/dist/esm/faucet/faucet.js.map +1 -1
  65. package/dist/esm/graphql/client.d.ts +10 -3
  66. package/dist/esm/graphql/client.js +12 -4
  67. package/dist/esm/graphql/client.js.map +2 -2
  68. package/dist/esm/graphql/generated/queries.d.ts +5653 -0
  69. package/dist/esm/graphql/generated/queries.js +702 -0
  70. package/dist/esm/graphql/generated/queries.js.map +7 -0
  71. package/dist/esm/multisig/publickey.d.ts +3 -3
  72. package/dist/esm/multisig/publickey.js.map +2 -2
  73. package/dist/esm/transactions/Commands.d.ts +2 -2
  74. package/dist/esm/transactions/Commands.js.map +2 -2
  75. package/dist/esm/transactions/Transaction.d.ts +10 -2
  76. package/dist/esm/transactions/Transaction.js +165 -21
  77. package/dist/esm/transactions/Transaction.js.map +3 -3
  78. package/dist/esm/transactions/TransactionData.d.ts +4 -2
  79. package/dist/esm/transactions/TransactionData.js +72 -41
  80. package/dist/esm/transactions/TransactionData.js.map +2 -2
  81. package/dist/esm/transactions/intents/CoinWithBalance.js.map +1 -1
  82. package/dist/esm/verify/verify.d.ts +5 -5
  83. package/dist/esm/verify/verify.js.map +2 -2
  84. package/dist/esm/version.d.ts +2 -2
  85. package/dist/esm/version.js +2 -2
  86. package/dist/esm/version.js.map +1 -1
  87. package/dist/esm/zklogin/publickey.d.ts +9 -3
  88. package/dist/esm/zklogin/publickey.js +8 -30
  89. package/dist/esm/zklogin/publickey.js.map +2 -2
  90. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  91. package/dist/tsconfig.tsbuildinfo +1 -1
  92. package/package.json +4 -1
  93. package/src/client/client.ts +10 -0
  94. package/src/experimental/core.ts +17 -1
  95. package/src/experimental/transports/graphql.ts +421 -0
  96. package/src/experimental/transports/jsonRPC.ts +47 -132
  97. package/src/experimental/transports/utils.ts +117 -0
  98. package/src/experimental/types.ts +38 -7
  99. package/src/faucet/faucet.ts +1 -1
  100. package/src/graphql/client.ts +21 -3
  101. package/src/graphql/generated/queries.ts +6061 -0
  102. package/src/graphql/queries/getAllBalances.graphql +20 -0
  103. package/src/graphql/queries/getBalance.graphql +14 -0
  104. package/src/graphql/queries/getCoins.graphql +29 -0
  105. package/src/graphql/queries/getDynamicFields.graphql +36 -0
  106. package/src/graphql/queries/getReferenceGasPrice.graphql +8 -0
  107. package/src/graphql/queries/objects.graphql +89 -0
  108. package/src/graphql/queries/transactions.graphql +80 -0
  109. package/src/graphql/queries/verifyZkLoginSignature.graphql +16 -0
  110. package/src/multisig/publickey.ts +3 -3
  111. package/src/transactions/Commands.ts +3 -2
  112. package/src/transactions/Transaction.ts +215 -12
  113. package/src/transactions/TransactionData.ts +86 -46
  114. package/src/transactions/intents/CoinWithBalance.ts +1 -1
  115. package/src/verify/verify.ts +6 -6
  116. package/src/version.ts +2 -2
  117. package/src/zklogin/publickey.ts +23 -39
@@ -211,54 +211,69 @@ export class TransactionDataBuilder implements TransactionData {
211
211
  });
212
212
  }
213
213
 
214
- mapArguments(fn: (arg: Argument, command: Command) => Argument) {
215
- for (const command of this.commands) {
216
- switch (command.$kind) {
217
- case 'MoveCall':
218
- command.MoveCall.arguments = command.MoveCall.arguments.map((arg) => fn(arg, command));
219
- break;
220
- case 'TransferObjects':
221
- command.TransferObjects.objects = command.TransferObjects.objects.map((arg) =>
222
- fn(arg, command),
223
- );
224
- command.TransferObjects.address = fn(command.TransferObjects.address, command);
225
- break;
226
- case 'SplitCoins':
227
- command.SplitCoins.coin = fn(command.SplitCoins.coin, command);
228
- command.SplitCoins.amounts = command.SplitCoins.amounts.map((arg) => fn(arg, command));
229
- break;
230
- case 'MergeCoins':
231
- command.MergeCoins.destination = fn(command.MergeCoins.destination, command);
232
- command.MergeCoins.sources = command.MergeCoins.sources.map((arg) => fn(arg, command));
233
- break;
234
- case 'MakeMoveVec':
235
- command.MakeMoveVec.elements = command.MakeMoveVec.elements.map((arg) =>
236
- fn(arg, command),
237
- );
238
- break;
239
- case 'Upgrade':
240
- command.Upgrade.ticket = fn(command.Upgrade.ticket, command);
241
- break;
242
- case '$Intent':
243
- const inputs = command.$Intent.inputs;
244
- command.$Intent.inputs = {};
245
-
246
- for (const [key, value] of Object.entries(inputs)) {
247
- command.$Intent.inputs[key] = Array.isArray(value)
248
- ? value.map((arg) => fn(arg, command))
249
- : fn(value, command);
250
- }
251
-
252
- break;
253
- case 'Publish':
254
- break;
255
- default:
256
- throw new Error(`Unexpected transaction kind: ${(command as { $kind: unknown }).$kind}`);
257
- }
214
+ mapCommandArguments(
215
+ index: number,
216
+ fn: (arg: Argument, command: Command, commandIndex: number) => Argument,
217
+ ) {
218
+ const command = this.commands[index];
219
+
220
+ switch (command.$kind) {
221
+ case 'MoveCall':
222
+ command.MoveCall.arguments = command.MoveCall.arguments.map((arg) =>
223
+ fn(arg, command, index),
224
+ );
225
+ break;
226
+ case 'TransferObjects':
227
+ command.TransferObjects.objects = command.TransferObjects.objects.map((arg) =>
228
+ fn(arg, command, index),
229
+ );
230
+ command.TransferObjects.address = fn(command.TransferObjects.address, command, index);
231
+ break;
232
+ case 'SplitCoins':
233
+ command.SplitCoins.coin = fn(command.SplitCoins.coin, command, index);
234
+ command.SplitCoins.amounts = command.SplitCoins.amounts.map((arg) =>
235
+ fn(arg, command, index),
236
+ );
237
+ break;
238
+ case 'MergeCoins':
239
+ command.MergeCoins.destination = fn(command.MergeCoins.destination, command, index);
240
+ command.MergeCoins.sources = command.MergeCoins.sources.map((arg) =>
241
+ fn(arg, command, index),
242
+ );
243
+ break;
244
+ case 'MakeMoveVec':
245
+ command.MakeMoveVec.elements = command.MakeMoveVec.elements.map((arg) =>
246
+ fn(arg, command, index),
247
+ );
248
+ break;
249
+ case 'Upgrade':
250
+ command.Upgrade.ticket = fn(command.Upgrade.ticket, command, index);
251
+ break;
252
+ case '$Intent':
253
+ const inputs = command.$Intent.inputs;
254
+ command.$Intent.inputs = {};
255
+
256
+ for (const [key, value] of Object.entries(inputs)) {
257
+ command.$Intent.inputs[key] = Array.isArray(value)
258
+ ? value.map((arg) => fn(arg, command, index))
259
+ : fn(value, command, index);
260
+ }
261
+
262
+ break;
263
+ case 'Publish':
264
+ break;
265
+ default:
266
+ throw new Error(`Unexpected transaction kind: ${(command as { $kind: unknown }).$kind}`);
258
267
  }
259
268
  }
260
269
 
261
- replaceCommand(index: number, replacement: Command | Command[]) {
270
+ mapArguments(fn: (arg: Argument, command: Command, commandIndex: number) => Argument) {
271
+ for (const commandIndex of this.commands.keys()) {
272
+ this.mapCommandArguments(commandIndex, fn);
273
+ }
274
+ }
275
+
276
+ replaceCommand(index: number, replacement: Command | Command[], resultIndex = index) {
262
277
  if (!Array.isArray(replacement)) {
263
278
  this.commands[index] = replacement;
264
279
  return;
@@ -268,15 +283,27 @@ export class TransactionDataBuilder implements TransactionData {
268
283
  this.commands.splice(index, 1, ...replacement);
269
284
 
270
285
  if (sizeDiff !== 0) {
271
- this.mapArguments((arg) => {
286
+ this.mapArguments((arg, _command, commandIndex) => {
287
+ if (commandIndex < index + replacement.length) {
288
+ return arg;
289
+ }
290
+
272
291
  switch (arg.$kind) {
273
292
  case 'Result':
293
+ if (arg.Result === index) {
294
+ arg.Result = resultIndex;
295
+ }
296
+
274
297
  if (arg.Result > index) {
275
298
  arg.Result += sizeDiff;
276
299
  }
277
300
  break;
278
301
 
279
302
  case 'NestedResult':
303
+ if (arg.NestedResult[0] === index) {
304
+ arg.NestedResult[0] = resultIndex;
305
+ }
306
+
280
307
  if (arg.NestedResult[0] > index) {
281
308
  arg.NestedResult[0] += sizeDiff;
282
309
  }
@@ -295,4 +322,17 @@ export class TransactionDataBuilder implements TransactionData {
295
322
  snapshot(): TransactionData {
296
323
  return parse(TransactionData, this);
297
324
  }
325
+
326
+ shallowClone() {
327
+ return new TransactionDataBuilder({
328
+ version: this.version,
329
+ sender: this.sender,
330
+ expiration: this.expiration,
331
+ gasData: {
332
+ ...this.gasData,
333
+ },
334
+ inputs: [...this.inputs],
335
+ commands: [...this.commands],
336
+ });
337
+ }
298
338
  }
@@ -37,7 +37,7 @@ export function coinWithBalance({
37
37
  tx.addIntentResolver(COIN_WITH_BALANCE, resolveCoinBalance);
38
38
  const coinType = type === 'gas' ? type : normalizeStructTag(type);
39
39
 
40
- coinResult = tx.add<TransactionResult>(
40
+ coinResult = tx.add(
41
41
  Commands.Intent({
42
42
  name: COIN_WITH_BALANCE,
43
43
  inputs: {},
@@ -5,13 +5,13 @@ import { fromBase64 } from '@mysten/bcs';
5
5
 
6
6
  import type { PublicKey, SignatureFlag, SignatureScheme } from '../cryptography/index.js';
7
7
  import { parseSerializedSignature, SIGNATURE_FLAG_TO_SCHEME } from '../cryptography/index.js';
8
- import type { SuiGraphQLClient } from '../graphql/client.js';
9
8
  import { Ed25519PublicKey } from '../keypairs/ed25519/publickey.js';
10
9
  import { PasskeyPublicKey } from '../keypairs/passkey/publickey.js';
11
10
  import { Secp256k1PublicKey } from '../keypairs/secp256k1/publickey.js';
12
11
  import { Secp256r1PublicKey } from '../keypairs/secp256r1/publickey.js';
13
12
  // eslint-disable-next-line import/no-cycle
14
13
  import { MultiSigPublicKey } from '../multisig/publickey.js';
14
+ import type { ZkLoginCompatibleClient } from '../zklogin/publickey.js';
15
15
  import { ZkLoginPublicIdentifier } from '../zklogin/publickey.js';
16
16
 
17
17
  export async function verifySignature(
@@ -37,7 +37,7 @@ export async function verifySignature(
37
37
  export async function verifyPersonalMessageSignature(
38
38
  message: Uint8Array,
39
39
  signature: string,
40
- options: { client?: SuiGraphQLClient; address?: string } = {},
40
+ options: { client?: ZkLoginCompatibleClient; address?: string } = {},
41
41
  ): Promise<PublicKey> {
42
42
  const parsedSignature = parseSignature(signature, options);
43
43
 
@@ -60,7 +60,7 @@ export async function verifyPersonalMessageSignature(
60
60
  export async function verifyTransactionSignature(
61
61
  transaction: Uint8Array,
62
62
  signature: string,
63
- options: { client?: SuiGraphQLClient; address?: string } = {},
63
+ options: { client?: ZkLoginCompatibleClient; address?: string } = {},
64
64
  ): Promise<PublicKey> {
65
65
  const parsedSignature = parseSignature(signature, options);
66
66
 
@@ -80,7 +80,7 @@ export async function verifyTransactionSignature(
80
80
  return parsedSignature.publicKey;
81
81
  }
82
82
 
83
- function parseSignature(signature: string, options: { client?: SuiGraphQLClient } = {}) {
83
+ function parseSignature(signature: string, options: { client?: ZkLoginCompatibleClient } = {}) {
84
84
  const parsedSignature = parseSerializedSignature(signature);
85
85
 
86
86
  if (parsedSignature.signatureScheme === 'MultiSig') {
@@ -104,7 +104,7 @@ function parseSignature(signature: string, options: { client?: SuiGraphQLClient
104
104
  export function publicKeyFromRawBytes(
105
105
  signatureScheme: SignatureScheme,
106
106
  bytes: Uint8Array,
107
- options: { client?: SuiGraphQLClient } = {},
107
+ options: { client?: ZkLoginCompatibleClient } = {},
108
108
  ): PublicKey {
109
109
  switch (signatureScheme) {
110
110
  case 'ED25519':
@@ -126,7 +126,7 @@ export function publicKeyFromRawBytes(
126
126
 
127
127
  export function publicKeyFromSuiBytes(
128
128
  publicKey: string | Uint8Array,
129
- options: { client?: SuiGraphQLClient } = {},
129
+ options: { client?: ZkLoginCompatibleClient } = {},
130
130
  ) {
131
131
  const bytes = typeof publicKey === 'string' ? fromBase64(publicKey) : publicKey;
132
132
 
package/src/version.ts CHANGED
@@ -3,5 +3,5 @@
3
3
 
4
4
  // This file is generated by genversion.mjs. Do not edit it directly.
5
5
 
6
- export const PACKAGE_VERSION = '1.28.1';
7
- export const TARGETED_RPC_VERSION = '1.48.0';
6
+ export const PACKAGE_VERSION = '1.29.0';
7
+ export const TARGETED_RPC_VERSION = '1.49.0';
@@ -9,26 +9,35 @@ import { PublicKey } from '../cryptography/publickey.js';
9
9
  import type { PublicKeyInitData } from '../cryptography/publickey.js';
10
10
  import { SIGNATURE_SCHEME_TO_FLAG } from '../cryptography/signature-scheme.js';
11
11
  import { SuiGraphQLClient } from '../graphql/client.js';
12
- import { graphql } from '../graphql/schemas/latest/index.js';
13
12
  import { normalizeSuiAddress, SUI_ADDRESS_LENGTH } from '../utils/sui-types.js';
14
13
  import type { ZkLoginSignatureInputs } from './bcs.js';
15
14
  import { extractClaimValue } from './jwt-utils.js';
16
15
  import { parseZkLoginSignature } from './signature.js';
17
16
  import { normalizeZkLoginIssuer, toBigEndianBytes, toPaddedBigEndianBytes } from './utils.js';
17
+ import type { ClientWithExtensions, Experimental_SuiClientTypes } from '../experimental/types.js';
18
+
19
+ export interface ZkLoginCompatibleClient
20
+ extends ClientWithExtensions<{
21
+ core: {
22
+ verifyZkLoginSignature: NonNullable<
23
+ Experimental_SuiClientTypes.TransportMethods['verifyZkLoginSignature']
24
+ >;
25
+ };
26
+ }> {}
18
27
 
19
28
  /**
20
29
  * A zkLogin public identifier
21
30
  */
22
31
  export class ZkLoginPublicIdentifier extends PublicKey {
23
32
  #data: Uint8Array;
24
- #client?: SuiGraphQLClient;
33
+ #client?: ZkLoginCompatibleClient;
25
34
  #legacyAddress: boolean;
26
35
 
27
36
  /**
28
37
  * Create a new ZkLoginPublicIdentifier object
29
38
  * @param value zkLogin public identifier as buffer or base-64 encoded string
30
39
  */
31
- constructor(value: PublicKeyInitData, { client }: { client?: SuiGraphQLClient } = {}) {
40
+ constructor(value: PublicKeyInitData, { client }: { client?: ZkLoginCompatibleClient } = {}) {
32
41
  super();
33
42
 
34
43
  this.#client = client;
@@ -127,7 +136,7 @@ export class ZkLoginPublicIdentifier extends PublicKey {
127
136
  address: address,
128
137
  bytes: toBase64(message),
129
138
  signature: parsedSignature.serializedSignature,
130
- intentScope: 'PERSONAL_MESSAGE',
139
+ intentScope: 'PersonalMessage',
131
140
  client: this.#client,
132
141
  });
133
142
  }
@@ -142,7 +151,7 @@ export class ZkLoginPublicIdentifier extends PublicKey {
142
151
  address: address,
143
152
  bytes: toBase64(transaction),
144
153
  signature: parsedSignature.serializedSignature,
145
- intentScope: 'TRANSACTION_DATA',
154
+ intentScope: 'TransactionData',
146
155
  client: this.#client,
147
156
  });
148
157
  }
@@ -159,7 +168,7 @@ export class ZkLoginPublicIdentifier extends PublicKey {
159
168
  export function toZkLoginPublicIdentifier(
160
169
  addressSeed: bigint,
161
170
  iss: string,
162
- options?: { client?: SuiGraphQLClient; legacyAddress?: boolean },
171
+ options?: { client?: ZkLoginCompatibleClient; legacyAddress?: boolean },
163
172
  ): ZkLoginPublicIdentifier {
164
173
  // Consists of iss_bytes_len || iss_bytes || padded_32_byte_address_seed.
165
174
  const addressSeedBytesBigEndian = options?.legacyAddress
@@ -174,25 +183,6 @@ export function toZkLoginPublicIdentifier(
174
183
  return new ZkLoginPublicIdentifier(tmp, options);
175
184
  }
176
185
 
177
- const VerifyZkLoginSignatureQuery = graphql(`
178
- query Zklogin(
179
- $bytes: Base64!
180
- $signature: Base64!
181
- $intentScope: ZkLoginIntentScope!
182
- $author: SuiAddress!
183
- ) {
184
- verifyZkloginSignature(
185
- bytes: $bytes
186
- signature: $signature
187
- intentScope: $intentScope
188
- author: $author
189
- ) {
190
- success
191
- errors
192
- }
193
- }
194
- `);
195
-
196
186
  function normalizeZkLoginPublicKeyBytes(bytes: Uint8Array, legacyAddress = false) {
197
187
  const issByteLength = bytes[0] + 1;
198
188
  const addressSeed = BigInt(`0x${toHex(bytes.slice(issByteLength))}`);
@@ -217,23 +207,17 @@ async function graphqlVerifyZkLoginSignature({
217
207
  address: string;
218
208
  bytes: string;
219
209
  signature: string;
220
- intentScope: 'PERSONAL_MESSAGE' | 'TRANSACTION_DATA';
221
- client?: SuiGraphQLClient;
210
+ intentScope: 'PersonalMessage' | 'TransactionData';
211
+ client?: ZkLoginCompatibleClient;
222
212
  }) {
223
- const resp = await client.query({
224
- query: VerifyZkLoginSignatureQuery,
225
- variables: {
226
- bytes,
227
- signature,
228
- intentScope,
229
- author: address,
230
- },
213
+ const resp = await client.core.verifyZkLoginSignature({
214
+ bytes,
215
+ signature,
216
+ intentScope,
217
+ author: address,
231
218
  });
232
219
 
233
- return (
234
- resp.data?.verifyZkloginSignature.success === true &&
235
- resp.data?.verifyZkloginSignature.errors.length === 0
236
- );
220
+ return resp.success === true && resp.errors.length === 0;
237
221
  }
238
222
 
239
223
  export function parseSerializedZkLoginSignature(signature: Uint8Array | string) {