@mysten/sui 1.18.0 → 1.19.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 (158) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/cjs/bcs/bcs.d.ts +95 -95
  3. package/dist/cjs/bcs/effects.d.ts +41 -41
  4. package/dist/cjs/bcs/index.d.ts +136 -136
  5. package/dist/cjs/client/client.d.ts +1 -0
  6. package/dist/cjs/cryptography/intent.d.ts +1 -1
  7. package/dist/cjs/cryptography/publickey.d.ts +7 -0
  8. package/dist/cjs/cryptography/publickey.js +24 -1
  9. package/dist/cjs/cryptography/publickey.js.map +2 -2
  10. package/dist/cjs/cryptography/signature.d.ts +13 -15
  11. package/dist/cjs/cryptography/signature.js +4 -11
  12. package/dist/cjs/cryptography/signature.js.map +2 -2
  13. package/dist/cjs/graphql/generated/2024.1/tada-env.d.ts +11380 -0
  14. package/dist/cjs/graphql/generated/2024.1/tada-env.js +13142 -0
  15. package/dist/cjs/graphql/generated/2024.1/tada-env.js.map +7 -0
  16. package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js +1 -1
  17. package/dist/cjs/graphql/generated/2024.1/tsconfig.tada.js.map +1 -1
  18. package/dist/cjs/graphql/generated/2024.4/tada-env.d.ts +11496 -0
  19. package/dist/cjs/graphql/generated/2024.4/tada-env.js +13288 -0
  20. package/dist/cjs/graphql/generated/2024.4/tada-env.js.map +7 -0
  21. package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js +1 -1
  22. package/dist/cjs/graphql/generated/2024.4/tsconfig.tada.js.map +1 -1
  23. package/dist/cjs/graphql/generated/latest/tada-env.d.ts +12540 -0
  24. package/dist/cjs/graphql/generated/latest/tada-env.js +14498 -0
  25. package/dist/cjs/graphql/generated/latest/tada-env.js.map +7 -0
  26. package/dist/cjs/graphql/generated/latest/tsconfig.tada.js +1 -1
  27. package/dist/cjs/graphql/generated/latest/tsconfig.tada.js.map +1 -1
  28. package/dist/cjs/graphql/schemas/2024.1/index.d.ts +6 -8999
  29. package/dist/cjs/graphql/schemas/2024.1/index.js.map +1 -1
  30. package/dist/cjs/graphql/schemas/2024.4/index.d.ts +6 -9053
  31. package/dist/cjs/graphql/schemas/2024.4/index.js.map +1 -1
  32. package/dist/cjs/graphql/schemas/latest/index.d.ts +6 -9827
  33. package/dist/cjs/graphql/schemas/latest/index.js.map +1 -1
  34. package/dist/cjs/keypairs/ed25519/keypair.d.ts +1 -1
  35. package/dist/cjs/keypairs/ed25519/publickey.d.ts +1 -1
  36. package/dist/cjs/keypairs/ed25519/publickey.js +1 -2
  37. package/dist/cjs/keypairs/ed25519/publickey.js.map +2 -2
  38. package/dist/cjs/keypairs/passkey/keypair.d.ts +1 -1
  39. package/dist/cjs/keypairs/passkey/publickey.d.ts +4 -4
  40. package/dist/cjs/keypairs/secp256k1/keypair.d.ts +1 -1
  41. package/dist/cjs/keypairs/secp256k1/publickey.js +1 -2
  42. package/dist/cjs/keypairs/secp256k1/publickey.js.map +2 -2
  43. package/dist/cjs/keypairs/secp256r1/keypair.d.ts +1 -1
  44. package/dist/cjs/transactions/Arguments.d.ts +11 -980
  45. package/dist/cjs/transactions/Arguments.js +1 -3
  46. package/dist/cjs/transactions/Arguments.js.map +2 -2
  47. package/dist/cjs/transactions/Transaction.d.ts +8 -32
  48. package/dist/cjs/transactions/Transaction.js.map +2 -2
  49. package/dist/cjs/transactions/TransactionData.d.ts +1 -1
  50. package/dist/cjs/transactions/executor/caching.d.ts +1 -1
  51. package/dist/cjs/transactions/executor/serial.d.ts +1 -1
  52. package/dist/cjs/transactions/index.d.ts +1 -0
  53. package/dist/cjs/transactions/index.js +2 -0
  54. package/dist/cjs/transactions/index.js.map +3 -3
  55. package/dist/cjs/transactions/utils.d.ts +2 -0
  56. package/dist/cjs/transactions/utils.js +7 -1
  57. package/dist/cjs/transactions/utils.js.map +2 -2
  58. package/dist/cjs/version.d.ts +2 -2
  59. package/dist/cjs/version.js +2 -2
  60. package/dist/cjs/version.js.map +1 -1
  61. package/dist/cjs/zklogin/publickey.d.ts +2 -2
  62. package/dist/esm/bcs/bcs.d.ts +95 -95
  63. package/dist/esm/bcs/effects.d.ts +41 -41
  64. package/dist/esm/bcs/index.d.ts +136 -136
  65. package/dist/esm/client/client.d.ts +1 -0
  66. package/dist/esm/cryptography/intent.d.ts +1 -1
  67. package/dist/esm/cryptography/publickey.d.ts +7 -0
  68. package/dist/esm/cryptography/publickey.js +25 -2
  69. package/dist/esm/cryptography/publickey.js.map +2 -2
  70. package/dist/esm/cryptography/signature.d.ts +13 -15
  71. package/dist/esm/cryptography/signature.js +5 -16
  72. package/dist/esm/cryptography/signature.js.map +2 -2
  73. package/dist/esm/graphql/generated/2024.1/tada-env.d.ts +11380 -0
  74. package/dist/esm/graphql/generated/2024.1/tada-env.js +13122 -0
  75. package/dist/esm/graphql/generated/2024.1/tada-env.js.map +7 -0
  76. package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js +1 -1
  77. package/dist/esm/graphql/generated/2024.1/tsconfig.tada.js.map +1 -1
  78. package/dist/esm/graphql/generated/2024.4/tada-env.d.ts +11496 -0
  79. package/dist/esm/graphql/generated/2024.4/tada-env.js +13268 -0
  80. package/dist/esm/graphql/generated/2024.4/tada-env.js.map +7 -0
  81. package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js +1 -1
  82. package/dist/esm/graphql/generated/2024.4/tsconfig.tada.js.map +1 -1
  83. package/dist/esm/graphql/generated/latest/tada-env.d.ts +12540 -0
  84. package/dist/esm/graphql/generated/latest/tada-env.js +14478 -0
  85. package/dist/esm/graphql/generated/latest/tada-env.js.map +7 -0
  86. package/dist/esm/graphql/generated/latest/tsconfig.tada.js +1 -1
  87. package/dist/esm/graphql/generated/latest/tsconfig.tada.js.map +1 -1
  88. package/dist/esm/graphql/schemas/2024.1/index.d.ts +6 -8999
  89. package/dist/esm/graphql/schemas/2024.1/index.js.map +1 -1
  90. package/dist/esm/graphql/schemas/2024.4/index.d.ts +6 -9053
  91. package/dist/esm/graphql/schemas/2024.4/index.js.map +1 -1
  92. package/dist/esm/graphql/schemas/latest/index.d.ts +6 -9827
  93. package/dist/esm/graphql/schemas/latest/index.js.map +1 -1
  94. package/dist/esm/keypairs/ed25519/keypair.d.ts +1 -1
  95. package/dist/esm/keypairs/ed25519/publickey.d.ts +1 -1
  96. package/dist/esm/keypairs/ed25519/publickey.js +6 -3
  97. package/dist/esm/keypairs/ed25519/publickey.js.map +2 -2
  98. package/dist/esm/keypairs/passkey/keypair.d.ts +1 -1
  99. package/dist/esm/keypairs/passkey/publickey.d.ts +4 -4
  100. package/dist/esm/keypairs/secp256k1/keypair.d.ts +1 -1
  101. package/dist/esm/keypairs/secp256k1/publickey.js +6 -3
  102. package/dist/esm/keypairs/secp256k1/publickey.js.map +2 -2
  103. package/dist/esm/keypairs/secp256r1/keypair.d.ts +1 -1
  104. package/dist/esm/transactions/Arguments.d.ts +11 -980
  105. package/dist/esm/transactions/Arguments.js +1 -3
  106. package/dist/esm/transactions/Arguments.js.map +2 -2
  107. package/dist/esm/transactions/Transaction.d.ts +8 -32
  108. package/dist/esm/transactions/Transaction.js.map +2 -2
  109. package/dist/esm/transactions/TransactionData.d.ts +1 -1
  110. package/dist/esm/transactions/executor/caching.d.ts +1 -1
  111. package/dist/esm/transactions/executor/serial.d.ts +1 -1
  112. package/dist/esm/transactions/index.d.ts +1 -0
  113. package/dist/esm/transactions/index.js +2 -0
  114. package/dist/esm/transactions/index.js.map +2 -2
  115. package/dist/esm/transactions/utils.d.ts +2 -0
  116. package/dist/esm/transactions/utils.js +7 -1
  117. package/dist/esm/transactions/utils.js.map +2 -2
  118. package/dist/esm/version.d.ts +2 -2
  119. package/dist/esm/version.js +2 -2
  120. package/dist/esm/version.js.map +1 -1
  121. package/dist/esm/zklogin/publickey.d.ts +2 -2
  122. package/dist/tsconfig.esm.tsbuildinfo +1 -1
  123. package/dist/tsconfig.tsbuildinfo +1 -1
  124. package/package.json +11 -12
  125. package/src/cryptography/publickey.ts +29 -1
  126. package/src/cryptography/signature.ts +4 -17
  127. package/src/graphql/generated/2024.1/tada-env.ts +13144 -0
  128. package/src/graphql/generated/2024.1/tsconfig.tada.json +1 -1
  129. package/src/graphql/generated/2024.4/tada-env.ts +13290 -0
  130. package/src/graphql/generated/2024.4/tsconfig.tada.json +1 -1
  131. package/src/graphql/generated/latest/tada-env.ts +14500 -0
  132. package/src/graphql/generated/latest/tsconfig.tada.json +1 -1
  133. package/src/graphql/schemas/2024.1/index.ts +1 -1
  134. package/src/graphql/schemas/2024.4/index.ts +1 -1
  135. package/src/graphql/schemas/latest/index.ts +1 -1
  136. package/src/keypairs/ed25519/publickey.ts +6 -3
  137. package/src/keypairs/secp256k1/publickey.ts +6 -3
  138. package/src/transactions/Arguments.ts +6 -5
  139. package/src/transactions/Transaction.ts +3 -1
  140. package/src/transactions/__tests__/bcs.test.ts +1 -1
  141. package/src/transactions/index.ts +2 -0
  142. package/src/transactions/utils.ts +7 -0
  143. package/src/version.ts +2 -2
  144. package/dist/cjs/graphql/generated/2024.1/tada-env.d.js +0 -17
  145. package/dist/cjs/graphql/generated/2024.1/tada-env.d.js.map +0 -7
  146. package/dist/cjs/graphql/generated/2024.4/tada-env.d.js +0 -17
  147. package/dist/cjs/graphql/generated/2024.4/tada-env.d.js.map +0 -7
  148. package/dist/cjs/graphql/generated/latest/tada-env.d.js +0 -17
  149. package/dist/cjs/graphql/generated/latest/tada-env.d.js.map +0 -7
  150. package/dist/esm/graphql/generated/2024.1/tada-env.d.js +0 -1
  151. package/dist/esm/graphql/generated/2024.1/tada-env.d.js.map +0 -7
  152. package/dist/esm/graphql/generated/2024.4/tada-env.d.js +0 -1
  153. package/dist/esm/graphql/generated/2024.4/tada-env.d.js.map +0 -7
  154. package/dist/esm/graphql/generated/latest/tada-env.d.js +0 -1
  155. package/dist/esm/graphql/generated/latest/tada-env.d.js.map +0 -7
  156. package/src/graphql/generated/2024.1/tada-env.d.ts +0 -201
  157. package/src/graphql/generated/2024.4/tada-env.d.ts +0 -203
  158. package/src/graphql/generated/latest/tada-env.d.ts +0 -220
@@ -25,6 +25,7 @@ type NetworkOrTransport = {
25
25
  };
26
26
  export declare function isSuiClient(client: unknown): client is SuiClient;
27
27
  export declare class SuiClient {
28
+ [x: number]: boolean;
28
29
  protected transport: SuiTransport;
29
30
  /**
30
31
  * Establish a connection to a Sui RPC endpoint
@@ -3,4 +3,4 @@ export type IntentScope = Exclude<keyof typeof bcs.IntentScope.$inferType, '$kin
3
3
  /**
4
4
  * Inserts a domain separator for a message that is being signed
5
5
  */
6
- export declare function messageWithIntent(scope: IntentScope, message: Uint8Array): Uint8Array;
6
+ export declare function messageWithIntent(scope: IntentScope, message: Uint8Array): Uint8Array<ArrayBufferLike>;
@@ -58,3 +58,10 @@ export declare abstract class PublicKey {
58
58
  */
59
59
  abstract verify(data: Uint8Array, signature: Uint8Array | string): Promise<boolean>;
60
60
  }
61
+ export declare function parseSerializedKeypairSignature(serializedSignature: string): {
62
+ serializedSignature: string;
63
+ signatureScheme: "ED25519" | "Secp256k1" | "Secp256r1";
64
+ signature: Uint8Array<ArrayBuffer>;
65
+ publicKey: Uint8Array<ArrayBuffer>;
66
+ bytes: Uint8Array<ArrayBufferLike>;
67
+ };
@@ -1,9 +1,10 @@
1
- import { toBase64 } from "@mysten/bcs";
1
+ import { fromBase64, toBase64 } from "@mysten/bcs";
2
2
  import { blake2b } from "@noble/hashes/blake2b";
3
3
  import { bytesToHex } from "@noble/hashes/utils";
4
4
  import { bcs } from "../bcs/index.js";
5
5
  import { normalizeSuiAddress, SUI_ADDRESS_LENGTH } from "../utils/sui-types.js";
6
6
  import { messageWithIntent } from "./intent.js";
7
+ import { SIGNATURE_FLAG_TO_SCHEME, SIGNATURE_SCHEME_TO_SIZE } from "./signature-scheme.js";
7
8
  function bytesEqual(a, b) {
8
9
  if (a === b) return true;
9
10
  if (a.length !== b.length) {
@@ -90,8 +91,30 @@ class PublicKey {
90
91
  );
91
92
  }
92
93
  }
94
+ function parseSerializedKeypairSignature(serializedSignature) {
95
+ const bytes = fromBase64(serializedSignature);
96
+ const signatureScheme = SIGNATURE_FLAG_TO_SCHEME[bytes[0]];
97
+ switch (signatureScheme) {
98
+ case "ED25519":
99
+ case "Secp256k1":
100
+ case "Secp256r1":
101
+ const size = SIGNATURE_SCHEME_TO_SIZE[signatureScheme];
102
+ const signature = bytes.slice(1, bytes.length - size);
103
+ const publicKey = bytes.slice(1 + signature.length);
104
+ return {
105
+ serializedSignature,
106
+ signatureScheme,
107
+ signature,
108
+ publicKey,
109
+ bytes
110
+ };
111
+ default:
112
+ throw new Error("Unsupported signature scheme");
113
+ }
114
+ }
93
115
  export {
94
116
  PublicKey,
95
- bytesEqual
117
+ bytesEqual,
118
+ parseSerializedKeypairSignature
96
119
  };
97
120
  //# sourceMappingURL=publickey.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cryptography/publickey.ts"],
4
- "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { toBase64 } from '@mysten/bcs';\nimport { blake2b } from '@noble/hashes/blake2b';\nimport { bytesToHex } from '@noble/hashes/utils';\n\nimport { bcs } from '../bcs/index.js';\nimport { normalizeSuiAddress, SUI_ADDRESS_LENGTH } from '../utils/sui-types.js';\nimport type { IntentScope } from './intent.js';\nimport { messageWithIntent } from './intent.js';\n\n/**\n * Value to be converted into public key.\n */\nexport type PublicKeyInitData = string | Uint8Array | Iterable<number>;\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array) {\n\tif (a === b) return true;\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * A public key\n */\nexport abstract class PublicKey {\n\t/**\n\t * Checks if two public keys are equal\n\t */\n\tequals(publicKey: PublicKey) {\n\t\treturn bytesEqual(this.toRawBytes(), publicKey.toRawBytes());\n\t}\n\n\t/**\n\t * Return the base-64 representation of the public key\n\t */\n\ttoBase64() {\n\t\treturn toBase64(this.toRawBytes());\n\t}\n\n\ttoString(): never {\n\t\tthrow new Error(\n\t\t\t'`toString` is not implemented on public keys. Use `toBase64()` or `toRawBytes()` instead.',\n\t\t);\n\t}\n\n\t/**\n\t * Return the Sui representation of the public key encoded in\n\t * base-64. A Sui public key is formed by the concatenation\n\t * of the scheme flag with the raw bytes of the public key\n\t */\n\ttoSuiPublicKey(): string {\n\t\tconst bytes = this.toSuiBytes();\n\t\treturn toBase64(bytes);\n\t}\n\n\tverifyWithIntent(\n\t\tbytes: Uint8Array,\n\t\tsignature: Uint8Array | string,\n\t\tintent: IntentScope,\n\t): Promise<boolean> {\n\t\tconst intentMessage = messageWithIntent(intent, bytes);\n\t\tconst digest = blake2b(intentMessage, { dkLen: 32 });\n\n\t\treturn this.verify(digest, signature);\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for for the provided PersonalMessage\n\t */\n\tverifyPersonalMessage(message: Uint8Array, signature: Uint8Array | string): Promise<boolean> {\n\t\treturn this.verifyWithIntent(\n\t\t\tbcs.vector(bcs.u8()).serialize(message).toBytes(),\n\t\t\tsignature,\n\t\t\t'PersonalMessage',\n\t\t);\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for for the provided Transaction\n\t */\n\tverifyTransaction(transaction: Uint8Array, signature: Uint8Array | string): Promise<boolean> {\n\t\treturn this.verifyWithIntent(transaction, signature, 'TransactionData');\n\t}\n\n\t/**\n\t * Verifies that the public key is associated with the provided address\n\t */\n\tverifyAddress(address: string): boolean {\n\t\treturn this.toSuiAddress() === address;\n\t}\n\n\t/**\n\t * Returns the bytes representation of the public key\n\t * prefixed with the signature scheme flag\n\t */\n\ttoSuiBytes(): Uint8Array {\n\t\tconst rawBytes = this.toRawBytes();\n\t\tconst suiBytes = new Uint8Array(rawBytes.length + 1);\n\t\tsuiBytes.set([this.flag()]);\n\t\tsuiBytes.set(rawBytes, 1);\n\n\t\treturn suiBytes;\n\t}\n\n\t/**\n\t * Return the Sui address associated with this Ed25519 public key\n\t */\n\ttoSuiAddress(): string {\n\t\t// Each hex char represents half a byte, hence hex address doubles the length\n\t\treturn normalizeSuiAddress(\n\t\t\tbytesToHex(blake2b(this.toSuiBytes(), { dkLen: 32 })).slice(0, SUI_ADDRESS_LENGTH * 2),\n\t\t);\n\t}\n\n\t/**\n\t * Return the byte array representation of the public key\n\t */\n\tabstract toRawBytes(): Uint8Array;\n\n\t/**\n\t * Return signature scheme flag of the public key\n\t */\n\tabstract flag(): number;\n\n\t/**\n\t * Verifies that the signature is valid for for the provided message\n\t */\n\tabstract verify(data: Uint8Array, signature: Uint8Array | string): Promise<boolean>;\n}\n"],
5
- "mappings": "AAGA,SAAS,gBAAgB;AACzB,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAE3B,SAAS,WAAW;AACpB,SAAS,qBAAqB,0BAA0B;AAExD,SAAS,yBAAyB;AAO3B,SAAS,WAAW,GAAe,GAAe;AACxD,MAAI,MAAM,EAAG,QAAO;AAEpB,MAAI,EAAE,WAAW,EAAE,QAAQ;AAC1B,WAAO;AAAA,EACR;AAEA,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAClC,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,aAAO;AAAA,IACR;AAAA,EACD;AACA,SAAO;AACR;AAKO,MAAe,UAAU;AAAA;AAAA;AAAA;AAAA,EAI/B,OAAO,WAAsB;AAC5B,WAAO,WAAW,KAAK,WAAW,GAAG,UAAU,WAAW,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACV,WAAO,SAAS,KAAK,WAAW,CAAC;AAAA,EAClC;AAAA,EAEA,WAAkB;AACjB,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAyB;AACxB,UAAM,QAAQ,KAAK,WAAW;AAC9B,WAAO,SAAS,KAAK;AAAA,EACtB;AAAA,EAEA,iBACC,OACA,WACA,QACmB;AACnB,UAAM,gBAAgB,kBAAkB,QAAQ,KAAK;AACrD,UAAM,SAAS,QAAQ,eAAe,EAAE,OAAO,GAAG,CAAC;AAEnD,WAAO,KAAK,OAAO,QAAQ,SAAS;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,SAAqB,WAAkD;AAC5F,WAAO,KAAK;AAAA,MACX,IAAI,OAAO,IAAI,GAAG,CAAC,EAAE,UAAU,OAAO,EAAE,QAAQ;AAAA,MAChD;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,aAAyB,WAAkD;AAC5F,WAAO,KAAK,iBAAiB,aAAa,WAAW,iBAAiB;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAA0B;AACvC,WAAO,KAAK,aAAa,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAyB;AACxB,UAAM,WAAW,KAAK,WAAW;AACjC,UAAM,WAAW,IAAI,WAAW,SAAS,SAAS,CAAC;AACnD,aAAS,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAC1B,aAAS,IAAI,UAAU,CAAC;AAExB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AAEtB,WAAO;AAAA,MACN,WAAW,QAAQ,KAAK,WAAW,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC;AAAA,IACtF;AAAA,EACD;AAgBD;",
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@mysten/bcs';\nimport { blake2b } from '@noble/hashes/blake2b';\nimport { bytesToHex } from '@noble/hashes/utils';\n\nimport { bcs } from '../bcs/index.js';\nimport { normalizeSuiAddress, SUI_ADDRESS_LENGTH } from '../utils/sui-types.js';\nimport type { IntentScope } from './intent.js';\nimport { messageWithIntent } from './intent.js';\nimport { SIGNATURE_FLAG_TO_SCHEME, SIGNATURE_SCHEME_TO_SIZE } from './signature-scheme.js';\n\n/**\n * Value to be converted into public key.\n */\nexport type PublicKeyInitData = string | Uint8Array | Iterable<number>;\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array) {\n\tif (a === b) return true;\n\n\tif (a.length !== b.length) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 0; i < a.length; i++) {\n\t\tif (a[i] !== b[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n/**\n * A public key\n */\nexport abstract class PublicKey {\n\t/**\n\t * Checks if two public keys are equal\n\t */\n\tequals(publicKey: PublicKey) {\n\t\treturn bytesEqual(this.toRawBytes(), publicKey.toRawBytes());\n\t}\n\n\t/**\n\t * Return the base-64 representation of the public key\n\t */\n\ttoBase64() {\n\t\treturn toBase64(this.toRawBytes());\n\t}\n\n\ttoString(): never {\n\t\tthrow new Error(\n\t\t\t'`toString` is not implemented on public keys. Use `toBase64()` or `toRawBytes()` instead.',\n\t\t);\n\t}\n\n\t/**\n\t * Return the Sui representation of the public key encoded in\n\t * base-64. A Sui public key is formed by the concatenation\n\t * of the scheme flag with the raw bytes of the public key\n\t */\n\ttoSuiPublicKey(): string {\n\t\tconst bytes = this.toSuiBytes();\n\t\treturn toBase64(bytes);\n\t}\n\n\tverifyWithIntent(\n\t\tbytes: Uint8Array,\n\t\tsignature: Uint8Array | string,\n\t\tintent: IntentScope,\n\t): Promise<boolean> {\n\t\tconst intentMessage = messageWithIntent(intent, bytes);\n\t\tconst digest = blake2b(intentMessage, { dkLen: 32 });\n\n\t\treturn this.verify(digest, signature);\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for for the provided PersonalMessage\n\t */\n\tverifyPersonalMessage(message: Uint8Array, signature: Uint8Array | string): Promise<boolean> {\n\t\treturn this.verifyWithIntent(\n\t\t\tbcs.vector(bcs.u8()).serialize(message).toBytes(),\n\t\t\tsignature,\n\t\t\t'PersonalMessage',\n\t\t);\n\t}\n\n\t/**\n\t * Verifies that the signature is valid for for the provided Transaction\n\t */\n\tverifyTransaction(transaction: Uint8Array, signature: Uint8Array | string): Promise<boolean> {\n\t\treturn this.verifyWithIntent(transaction, signature, 'TransactionData');\n\t}\n\n\t/**\n\t * Verifies that the public key is associated with the provided address\n\t */\n\tverifyAddress(address: string): boolean {\n\t\treturn this.toSuiAddress() === address;\n\t}\n\n\t/**\n\t * Returns the bytes representation of the public key\n\t * prefixed with the signature scheme flag\n\t */\n\ttoSuiBytes(): Uint8Array {\n\t\tconst rawBytes = this.toRawBytes();\n\t\tconst suiBytes = new Uint8Array(rawBytes.length + 1);\n\t\tsuiBytes.set([this.flag()]);\n\t\tsuiBytes.set(rawBytes, 1);\n\n\t\treturn suiBytes;\n\t}\n\n\t/**\n\t * Return the Sui address associated with this Ed25519 public key\n\t */\n\ttoSuiAddress(): string {\n\t\t// Each hex char represents half a byte, hence hex address doubles the length\n\t\treturn normalizeSuiAddress(\n\t\t\tbytesToHex(blake2b(this.toSuiBytes(), { dkLen: 32 })).slice(0, SUI_ADDRESS_LENGTH * 2),\n\t\t);\n\t}\n\n\t/**\n\t * Return the byte array representation of the public key\n\t */\n\tabstract toRawBytes(): Uint8Array;\n\n\t/**\n\t * Return signature scheme flag of the public key\n\t */\n\tabstract flag(): number;\n\n\t/**\n\t * Verifies that the signature is valid for for the provided message\n\t */\n\tabstract verify(data: Uint8Array, signature: Uint8Array | string): Promise<boolean>;\n}\n\nexport function parseSerializedKeypairSignature(serializedSignature: string) {\n\tconst bytes = fromBase64(serializedSignature);\n\n\tconst signatureScheme =\n\t\tSIGNATURE_FLAG_TO_SCHEME[bytes[0] as keyof typeof SIGNATURE_FLAG_TO_SCHEME];\n\n\tswitch (signatureScheme) {\n\t\tcase 'ED25519':\n\t\tcase 'Secp256k1':\n\t\tcase 'Secp256r1':\n\t\t\tconst size =\n\t\t\t\tSIGNATURE_SCHEME_TO_SIZE[signatureScheme as keyof typeof SIGNATURE_SCHEME_TO_SIZE];\n\t\t\tconst signature = bytes.slice(1, bytes.length - size);\n\t\t\tconst publicKey = bytes.slice(1 + signature.length);\n\n\t\t\treturn {\n\t\t\t\tserializedSignature,\n\t\t\t\tsignatureScheme,\n\t\t\t\tsignature,\n\t\t\t\tpublicKey,\n\t\t\t\tbytes,\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error('Unsupported signature scheme');\n\t}\n}\n"],
5
+ "mappings": "AAGA,SAAS,YAAY,gBAAgB;AACrC,SAAS,eAAe;AACxB,SAAS,kBAAkB;AAE3B,SAAS,WAAW;AACpB,SAAS,qBAAqB,0BAA0B;AAExD,SAAS,yBAAyB;AAClC,SAAS,0BAA0B,gCAAgC;AAO5D,SAAS,WAAW,GAAe,GAAe;AACxD,MAAI,MAAM,EAAG,QAAO;AAEpB,MAAI,EAAE,WAAW,EAAE,QAAQ;AAC1B,WAAO;AAAA,EACR;AAEA,WAAS,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK;AAClC,QAAI,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,aAAO;AAAA,IACR;AAAA,EACD;AACA,SAAO;AACR;AAKO,MAAe,UAAU;AAAA;AAAA;AAAA;AAAA,EAI/B,OAAO,WAAsB;AAC5B,WAAO,WAAW,KAAK,WAAW,GAAG,UAAU,WAAW,CAAC;AAAA,EAC5D;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW;AACV,WAAO,SAAS,KAAK,WAAW,CAAC;AAAA,EAClC;AAAA,EAEA,WAAkB;AACjB,UAAM,IAAI;AAAA,MACT;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,iBAAyB;AACxB,UAAM,QAAQ,KAAK,WAAW;AAC9B,WAAO,SAAS,KAAK;AAAA,EACtB;AAAA,EAEA,iBACC,OACA,WACA,QACmB;AACnB,UAAM,gBAAgB,kBAAkB,QAAQ,KAAK;AACrD,UAAM,SAAS,QAAQ,eAAe,EAAE,OAAO,GAAG,CAAC;AAEnD,WAAO,KAAK,OAAO,QAAQ,SAAS;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,sBAAsB,SAAqB,WAAkD;AAC5F,WAAO,KAAK;AAAA,MACX,IAAI,OAAO,IAAI,GAAG,CAAC,EAAE,UAAU,OAAO,EAAE,QAAQ;AAAA,MAChD;AAAA,MACA;AAAA,IACD;AAAA,EACD;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAkB,aAAyB,WAAkD;AAC5F,WAAO,KAAK,iBAAiB,aAAa,WAAW,iBAAiB;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,SAA0B;AACvC,WAAO,KAAK,aAAa,MAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAyB;AACxB,UAAM,WAAW,KAAK,WAAW;AACjC,UAAM,WAAW,IAAI,WAAW,SAAS,SAAS,CAAC;AACnD,aAAS,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;AAC1B,aAAS,IAAI,UAAU,CAAC;AAExB,WAAO;AAAA,EACR;AAAA;AAAA;AAAA;AAAA,EAKA,eAAuB;AAEtB,WAAO;AAAA,MACN,WAAW,QAAQ,KAAK,WAAW,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,qBAAqB,CAAC;AAAA,IACtF;AAAA,EACD;AAgBD;AAEO,SAAS,gCAAgC,qBAA6B;AAC5E,QAAM,QAAQ,WAAW,mBAAmB;AAE5C,QAAM,kBACL,yBAAyB,MAAM,CAAC,CAA0C;AAE3E,UAAQ,iBAAiB;AAAA,IACxB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACJ,YAAM,OACL,yBAAyB,eAAwD;AAClF,YAAM,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,IAAI;AACpD,YAAM,YAAY,MAAM,MAAM,IAAI,UAAU,MAAM;AAElD,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AACC,YAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AACD;",
6
6
  "names": []
7
7
  }
@@ -19,13 +19,19 @@ export declare function toSerializedSignature({ signature, signatureScheme, publ
19
19
  * Decodes a serialized signature into its constituent components: the signature scheme, the actual signature, and the public key
20
20
  */
21
21
  export declare function parseSerializedSignature(serializedSignature: string): {
22
+ serializedSignature: string;
23
+ signatureScheme: "ED25519" | "Secp256k1" | "Secp256r1";
24
+ signature: Uint8Array<ArrayBuffer>;
25
+ publicKey: Uint8Array<ArrayBuffer>;
26
+ bytes: Uint8Array<ArrayBufferLike>;
27
+ } | {
22
28
  signatureScheme: "Passkey";
23
29
  serializedSignature: string;
24
- signature: Uint8Array;
30
+ signature: Uint8Array<ArrayBufferLike>;
25
31
  authenticatorData: number[];
26
32
  clientDataJson: string;
27
- userSignature: Uint8Array;
28
- publicKey: Uint8Array;
33
+ userSignature: Uint8Array<ArrayBuffer>;
34
+ publicKey: Uint8Array<ArrayBuffer>;
29
35
  } | {
30
36
  serializedSignature: string;
31
37
  signatureScheme: "ZkLogin";
@@ -48,20 +54,12 @@ export declare function parseSerializedSignature(serializedSignature: string): {
48
54
  iss: string;
49
55
  addressSeed: bigint;
50
56
  };
51
- signature: Uint8Array;
52
- publicKey: Uint8Array;
57
+ signature: Uint8Array<ArrayBufferLike>;
58
+ publicKey: Uint8Array<ArrayBufferLike>;
53
59
  } | {
54
60
  serializedSignature: string;
55
61
  signatureScheme: "MultiSig";
56
62
  multisig: MultiSigStruct;
57
- bytes: Uint8Array;
58
- signature?: undefined;
59
- publicKey?: undefined;
60
- } | {
61
- serializedSignature: string;
62
- signatureScheme: "ED25519" | "Secp256k1" | "Secp256r1";
63
- signature: Uint8Array;
64
- publicKey: Uint8Array;
65
- bytes: Uint8Array;
66
- multisig?: undefined;
63
+ bytes: Uint8Array<ArrayBufferLike>;
64
+ signature: undefined;
67
65
  };
@@ -2,11 +2,8 @@ import { fromBase64, toBase64 } from "@mysten/bcs";
2
2
  import { bcs } from "../bcs/index.js";
3
3
  import { parseSerializedPasskeySignature } from "../keypairs/passkey/publickey.js";
4
4
  import { parseSerializedZkLoginSignature } from "../zklogin/publickey.js";
5
- import {
6
- SIGNATURE_FLAG_TO_SCHEME,
7
- SIGNATURE_SCHEME_TO_FLAG,
8
- SIGNATURE_SCHEME_TO_SIZE
9
- } from "./signature-scheme.js";
5
+ import { parseSerializedKeypairSignature } from "./publickey.js";
6
+ import { SIGNATURE_FLAG_TO_SCHEME, SIGNATURE_SCHEME_TO_FLAG } from "./signature-scheme.js";
10
7
  function toSerializedSignature({
11
8
  signature,
12
9
  signatureScheme,
@@ -34,23 +31,15 @@ function parseSerializedSignature(serializedSignature) {
34
31
  serializedSignature,
35
32
  signatureScheme,
36
33
  multisig,
37
- bytes
34
+ bytes,
35
+ signature: void 0
38
36
  };
39
37
  case "ZkLogin":
40
38
  return parseSerializedZkLoginSignature(serializedSignature);
41
39
  case "ED25519":
42
40
  case "Secp256k1":
43
41
  case "Secp256r1":
44
- const size = SIGNATURE_SCHEME_TO_SIZE[signatureScheme];
45
- const signature = bytes.slice(1, bytes.length - size);
46
- const publicKey = bytes.slice(1 + signature.length);
47
- return {
48
- serializedSignature,
49
- signatureScheme,
50
- signature,
51
- publicKey,
52
- bytes
53
- };
42
+ return parseSerializedKeypairSignature(serializedSignature);
54
43
  default:
55
44
  throw new Error("Unsupported signature scheme");
56
45
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cryptography/signature.ts"],
4
- "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@mysten/bcs';\n\nimport { bcs } from '../bcs/index.js';\nimport { parseSerializedPasskeySignature } from '../keypairs/passkey/publickey.js';\nimport type { MultiSigStruct } from '../multisig/publickey.js';\nimport { parseSerializedZkLoginSignature } from '../zklogin/publickey.js';\nimport type { PublicKey } from './publickey.js';\nimport type { SignatureScheme } from './signature-scheme.js';\nimport {\n\tSIGNATURE_FLAG_TO_SCHEME,\n\tSIGNATURE_SCHEME_TO_FLAG,\n\tSIGNATURE_SCHEME_TO_SIZE,\n} from './signature-scheme.js';\n\n/**\n * Pair of signature and corresponding public key\n */\nexport type SerializeSignatureInput = {\n\tsignatureScheme: SignatureScheme;\n\t/** Base64-encoded signature */\n\tsignature: Uint8Array;\n\t/** Base64-encoded public key */\n\tpublicKey?: PublicKey;\n};\n\n/**\n * Takes in a signature, its associated signing scheme and a public key, then serializes this data\n */\nexport function toSerializedSignature({\n\tsignature,\n\tsignatureScheme,\n\tpublicKey,\n}: SerializeSignatureInput): string {\n\tif (!publicKey) {\n\t\tthrow new Error('`publicKey` is required');\n\t}\n\n\tconst pubKeyBytes = publicKey.toRawBytes();\n\tconst serializedSignature = new Uint8Array(1 + signature.length + pubKeyBytes.length);\n\tserializedSignature.set([SIGNATURE_SCHEME_TO_FLAG[signatureScheme]]);\n\tserializedSignature.set(signature, 1);\n\tserializedSignature.set(pubKeyBytes, 1 + signature.length);\n\treturn toBase64(serializedSignature);\n}\n\n/**\n * Decodes a serialized signature into its constituent components: the signature scheme, the actual signature, and the public key\n */\nexport function parseSerializedSignature(serializedSignature: string) {\n\tconst bytes = fromBase64(serializedSignature);\n\n\tconst signatureScheme =\n\t\tSIGNATURE_FLAG_TO_SCHEME[bytes[0] as keyof typeof SIGNATURE_FLAG_TO_SCHEME];\n\n\tswitch (signatureScheme) {\n\t\tcase 'Passkey':\n\t\t\treturn parseSerializedPasskeySignature(serializedSignature);\n\t\tcase 'MultiSig':\n\t\t\tconst multisig: MultiSigStruct = bcs.MultiSig.parse(bytes.slice(1));\n\t\t\treturn {\n\t\t\t\tserializedSignature,\n\t\t\t\tsignatureScheme,\n\t\t\t\tmultisig,\n\t\t\t\tbytes,\n\t\t\t};\n\t\tcase 'ZkLogin':\n\t\t\treturn parseSerializedZkLoginSignature(serializedSignature);\n\t\tcase 'ED25519':\n\t\tcase 'Secp256k1':\n\t\tcase 'Secp256r1':\n\t\t\tconst size =\n\t\t\t\tSIGNATURE_SCHEME_TO_SIZE[signatureScheme as keyof typeof SIGNATURE_SCHEME_TO_SIZE];\n\t\t\tconst signature = bytes.slice(1, bytes.length - size);\n\t\t\tconst publicKey = bytes.slice(1 + signature.length);\n\n\t\t\treturn {\n\t\t\t\tserializedSignature,\n\t\t\t\tsignatureScheme,\n\t\t\t\tsignature,\n\t\t\t\tpublicKey,\n\t\t\t\tbytes,\n\t\t\t};\n\t\tdefault:\n\t\t\tthrow new Error('Unsupported signature scheme');\n\t}\n}\n"],
5
- "mappings": "AAGA,SAAS,YAAY,gBAAgB;AAErC,SAAS,WAAW;AACpB,SAAS,uCAAuC;AAEhD,SAAS,uCAAuC;AAGhD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAgBA,SAAS,sBAAsB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACD,GAAoC;AACnC,MAAI,CAAC,WAAW;AACf,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AAEA,QAAM,cAAc,UAAU,WAAW;AACzC,QAAM,sBAAsB,IAAI,WAAW,IAAI,UAAU,SAAS,YAAY,MAAM;AACpF,sBAAoB,IAAI,CAAC,yBAAyB,eAAe,CAAC,CAAC;AACnE,sBAAoB,IAAI,WAAW,CAAC;AACpC,sBAAoB,IAAI,aAAa,IAAI,UAAU,MAAM;AACzD,SAAO,SAAS,mBAAmB;AACpC;AAKO,SAAS,yBAAyB,qBAA6B;AACrE,QAAM,QAAQ,WAAW,mBAAmB;AAE5C,QAAM,kBACL,yBAAyB,MAAM,CAAC,CAA0C;AAE3E,UAAQ,iBAAiB;AAAA,IACxB,KAAK;AACJ,aAAO,gCAAgC,mBAAmB;AAAA,IAC3D,KAAK;AACJ,YAAM,WAA2B,IAAI,SAAS,MAAM,MAAM,MAAM,CAAC,CAAC;AAClE,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD,KAAK;AACJ,aAAO,gCAAgC,mBAAmB;AAAA,IAC3D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACJ,YAAM,OACL,yBAAyB,eAAwD;AAClF,YAAM,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,IAAI;AACpD,YAAM,YAAY,MAAM,MAAM,IAAI,UAAU,MAAM;AAElD,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACD;AACC,YAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AACD;",
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@mysten/bcs';\n\nimport { bcs } from '../bcs/index.js';\nimport { parseSerializedPasskeySignature } from '../keypairs/passkey/publickey.js';\nimport type { MultiSigStruct } from '../multisig/publickey.js';\nimport { parseSerializedZkLoginSignature } from '../zklogin/publickey.js';\nimport { parseSerializedKeypairSignature } from './publickey.js';\nimport type { PublicKey } from './publickey.js';\nimport type { SignatureScheme } from './signature-scheme.js';\nimport { SIGNATURE_FLAG_TO_SCHEME, SIGNATURE_SCHEME_TO_FLAG } from './signature-scheme.js';\n\n/**\n * Pair of signature and corresponding public key\n */\nexport type SerializeSignatureInput = {\n\tsignatureScheme: SignatureScheme;\n\t/** Base64-encoded signature */\n\tsignature: Uint8Array;\n\t/** Base64-encoded public key */\n\tpublicKey?: PublicKey;\n};\n\n/**\n * Takes in a signature, its associated signing scheme and a public key, then serializes this data\n */\nexport function toSerializedSignature({\n\tsignature,\n\tsignatureScheme,\n\tpublicKey,\n}: SerializeSignatureInput): string {\n\tif (!publicKey) {\n\t\tthrow new Error('`publicKey` is required');\n\t}\n\n\tconst pubKeyBytes = publicKey.toRawBytes();\n\tconst serializedSignature = new Uint8Array(1 + signature.length + pubKeyBytes.length);\n\tserializedSignature.set([SIGNATURE_SCHEME_TO_FLAG[signatureScheme]]);\n\tserializedSignature.set(signature, 1);\n\tserializedSignature.set(pubKeyBytes, 1 + signature.length);\n\treturn toBase64(serializedSignature);\n}\n\n/**\n * Decodes a serialized signature into its constituent components: the signature scheme, the actual signature, and the public key\n */\nexport function parseSerializedSignature(serializedSignature: string) {\n\tconst bytes = fromBase64(serializedSignature);\n\n\tconst signatureScheme =\n\t\tSIGNATURE_FLAG_TO_SCHEME[bytes[0] as keyof typeof SIGNATURE_FLAG_TO_SCHEME];\n\n\tswitch (signatureScheme) {\n\t\tcase 'Passkey':\n\t\t\treturn parseSerializedPasskeySignature(serializedSignature);\n\t\tcase 'MultiSig':\n\t\t\tconst multisig: MultiSigStruct = bcs.MultiSig.parse(bytes.slice(1));\n\t\t\treturn {\n\t\t\t\tserializedSignature,\n\t\t\t\tsignatureScheme,\n\t\t\t\tmultisig,\n\t\t\t\tbytes,\n\t\t\t\tsignature: undefined,\n\t\t\t};\n\t\tcase 'ZkLogin':\n\t\t\treturn parseSerializedZkLoginSignature(serializedSignature);\n\t\tcase 'ED25519':\n\t\tcase 'Secp256k1':\n\t\tcase 'Secp256r1':\n\t\t\treturn parseSerializedKeypairSignature(serializedSignature);\n\t\tdefault:\n\t\t\tthrow new Error('Unsupported signature scheme');\n\t}\n}\n"],
5
+ "mappings": "AAGA,SAAS,YAAY,gBAAgB;AAErC,SAAS,WAAW;AACpB,SAAS,uCAAuC;AAEhD,SAAS,uCAAuC;AAChD,SAAS,uCAAuC;AAGhD,SAAS,0BAA0B,gCAAgC;AAgB5D,SAAS,sBAAsB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACD,GAAoC;AACnC,MAAI,CAAC,WAAW;AACf,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC1C;AAEA,QAAM,cAAc,UAAU,WAAW;AACzC,QAAM,sBAAsB,IAAI,WAAW,IAAI,UAAU,SAAS,YAAY,MAAM;AACpF,sBAAoB,IAAI,CAAC,yBAAyB,eAAe,CAAC,CAAC;AACnE,sBAAoB,IAAI,WAAW,CAAC;AACpC,sBAAoB,IAAI,aAAa,IAAI,UAAU,MAAM;AACzD,SAAO,SAAS,mBAAmB;AACpC;AAKO,SAAS,yBAAyB,qBAA6B;AACrE,QAAM,QAAQ,WAAW,mBAAmB;AAE5C,QAAM,kBACL,yBAAyB,MAAM,CAAC,CAA0C;AAE3E,UAAQ,iBAAiB;AAAA,IACxB,KAAK;AACJ,aAAO,gCAAgC,mBAAmB;AAAA,IAC3D,KAAK;AACJ,YAAM,WAA2B,IAAI,SAAS,MAAM,MAAM,MAAM,CAAC,CAAC;AAClE,aAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW;AAAA,MACZ;AAAA,IACD,KAAK;AACJ,aAAO,gCAAgC,mBAAmB;AAAA,IAC3D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACJ,aAAO,gCAAgC,mBAAmB;AAAA,IAC3D;AACC,YAAM,IAAI,MAAM,8BAA8B;AAAA,EAChD;AACD;",
6
6
  "names": []
7
7
  }