@aeternity/aepp-sdk 14.0.0 → 14.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +11 -19
  3. package/dist/aepp-sdk.browser-script.cjs +1 -1
  4. package/dist/aepp-sdk.browser-script.cjs.LICENSE.txt +2 -0
  5. package/dist/aepp-sdk.browser-script.cjs.map +1 -1
  6. package/dist/aepp-sdk.browser.cjs +1 -1
  7. package/dist/aepp-sdk.browser.cjs.map +1 -1
  8. package/dist/aepp-sdk.cjs +11678 -6969
  9. package/dist/aepp-sdk.cjs.map +1 -1
  10. package/es/AeSdkBase.d.ts +10 -1
  11. package/es/AeSdkBase.js +12 -2
  12. package/es/AeSdkBase.js.map +1 -1
  13. package/es/AeSdkMethods.d.ts +1 -1
  14. package/es/AeSdkMethods.js.map +1 -1
  15. package/es/AeSdkWallet.js +1 -1
  16. package/es/AeSdkWallet.js.map +1 -1
  17. package/es/Middleware.d.ts +5 -1
  18. package/es/Middleware.js +7 -2
  19. package/es/Middleware.js.map +1 -1
  20. package/es/MiddlewareSubscriber.d.ts +3 -0
  21. package/es/MiddlewareSubscriber.js +4 -0
  22. package/es/MiddlewareSubscriber.js.map +1 -1
  23. package/es/Node.d.ts +6 -1
  24. package/es/Node.js +28 -4
  25. package/es/Node.js.map +1 -1
  26. package/es/account/Base.d.ts +12 -0
  27. package/es/account/Base.js +1 -0
  28. package/es/account/Base.js.map +1 -1
  29. package/es/account/BaseFactory.d.ts +1 -0
  30. package/es/account/BaseFactory.js +1 -0
  31. package/es/account/BaseFactory.js.map +1 -1
  32. package/es/account/Generalized.d.ts +5 -0
  33. package/es/account/Generalized.js +9 -0
  34. package/es/account/Generalized.js.map +1 -1
  35. package/es/account/Ledger.d.ts +5 -0
  36. package/es/account/Ledger.js +9 -0
  37. package/es/account/Ledger.js.map +1 -1
  38. package/es/account/LedgerFactory.d.ts +2 -0
  39. package/es/account/LedgerFactory.js +10 -4
  40. package/es/account/LedgerFactory.js.map +1 -1
  41. package/es/account/Memory.d.ts +5 -0
  42. package/es/account/Memory.js +14 -5
  43. package/es/account/Memory.js.map +1 -1
  44. package/es/account/Metamask.d.ts +8 -0
  45. package/es/account/Metamask.js +13 -0
  46. package/es/account/Metamask.js.map +1 -1
  47. package/es/account/MetamaskFactory.d.ts +20 -2
  48. package/es/account/MetamaskFactory.js +93 -39
  49. package/es/account/MetamaskFactory.js.map +1 -1
  50. package/es/account/MnemonicFactory.d.ts +12 -2
  51. package/es/account/MnemonicFactory.js +48 -24
  52. package/es/account/MnemonicFactory.js.map +1 -1
  53. package/es/account/Rpc.d.ts +5 -0
  54. package/es/account/Rpc.js +8 -0
  55. package/es/account/Rpc.js.map +1 -1
  56. package/es/aens.d.ts +25 -5
  57. package/es/aens.js +52 -18
  58. package/es/aens.js.map +1 -1
  59. package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -1
  60. package/es/aepp-wallet-communication/connection/BrowserRuntime.js.map +1 -1
  61. package/es/apis/middleware/middleware.d.ts +99 -9
  62. package/es/apis/middleware/middleware.js +560 -91
  63. package/es/apis/middleware/middleware.js.map +1 -1
  64. package/es/apis/middleware/models/index.d.ts +1267 -1582
  65. package/es/apis/middleware/models/index.js +1 -1363
  66. package/es/apis/middleware/models/index.js.map +1 -1
  67. package/es/apis/middleware/models/mappers.d.ts +126 -56
  68. package/es/apis/middleware/models/mappers.js +6250 -2989
  69. package/es/apis/middleware/models/mappers.js.map +1 -1
  70. package/es/apis/middleware/models/parameters.d.ts +54 -33
  71. package/es/apis/middleware/models/parameters.js +389 -134
  72. package/es/apis/middleware/models/parameters.js.map +1 -1
  73. package/es/apis/node/models/index.d.ts +60 -15
  74. package/es/apis/node/models/index.js.map +1 -1
  75. package/es/apis/node/models/mappers.d.ts +3 -0
  76. package/es/apis/node/models/mappers.js +130 -2
  77. package/es/apis/node/models/mappers.js.map +1 -1
  78. package/es/apis/node/node.d.ts +13 -1
  79. package/es/apis/node/node.js +54 -0
  80. package/es/apis/node/node.js.map +1 -1
  81. package/es/chain.d.ts +19 -6
  82. package/es/chain.js +30 -24
  83. package/es/chain.js.map +1 -1
  84. package/es/channel/Contract.d.ts +6 -3
  85. package/es/channel/Contract.js +5 -2
  86. package/es/channel/Contract.js.map +1 -1
  87. package/es/channel/Spend.d.ts +1 -1
  88. package/es/channel/Spend.js.map +1 -1
  89. package/es/channel/handlers.js +1 -2
  90. package/es/channel/handlers.js.map +1 -1
  91. package/es/channel/internal.d.ts +1 -1
  92. package/es/channel/internal.js +2 -2
  93. package/es/channel/internal.js.map +1 -1
  94. package/es/contract/Contract.d.ts +13 -2
  95. package/es/contract/Contract.js +22 -12
  96. package/es/contract/Contract.js.map +1 -1
  97. package/es/contract/compiler/Base.d.ts +1 -0
  98. package/es/contract/compiler/Base.js +1 -0
  99. package/es/contract/compiler/Base.js.map +1 -1
  100. package/es/contract/compiler/Cli.d.ts +2 -1
  101. package/es/contract/compiler/Cli.js +11 -9
  102. package/es/contract/compiler/Cli.js.map +1 -1
  103. package/es/contract/compiler/Http.d.ts +2 -1
  104. package/es/contract/compiler/Http.js +3 -2
  105. package/es/contract/compiler/Http.js.map +1 -1
  106. package/es/contract/compiler/getFileSystem.d.ts +1 -0
  107. package/es/contract/compiler/getFileSystem.js +1 -0
  108. package/es/contract/compiler/getFileSystem.js.map +1 -1
  109. package/es/contract/ga.d.ts +3 -3
  110. package/es/contract/ga.js +3 -3
  111. package/es/contract/ga.js.map +1 -1
  112. package/es/index-browser.d.ts +32 -2
  113. package/es/index-browser.js +32 -2
  114. package/es/index-browser.js.map +1 -1
  115. package/es/oracle/Oracle.d.ts +10 -1
  116. package/es/oracle/Oracle.js +16 -6
  117. package/es/oracle/Oracle.js.map +1 -1
  118. package/es/oracle/OracleBase.d.ts +15 -2
  119. package/es/oracle/OracleBase.js +23 -1
  120. package/es/oracle/OracleBase.js.map +1 -1
  121. package/es/oracle/OracleClient.d.ts +3 -0
  122. package/es/oracle/OracleClient.js +6 -1
  123. package/es/oracle/OracleClient.js.map +1 -1
  124. package/es/spend.js +1 -1
  125. package/es/spend.js.map +1 -1
  126. package/es/tx/builder/common.js +6 -3
  127. package/es/tx/builder/common.js.map +1 -1
  128. package/es/tx/builder/constants.d.ts +53 -3
  129. package/es/tx/builder/constants.js +62 -12
  130. package/es/tx/builder/constants.js.map +1 -1
  131. package/es/tx/builder/delegation/schema.js +15 -0
  132. package/es/tx/builder/delegation/schema.js.map +1 -1
  133. package/es/tx/builder/entry/constants.d.ts +4 -1
  134. package/es/tx/builder/entry/constants.js +10 -1
  135. package/es/tx/builder/entry/constants.js.map +1 -1
  136. package/es/tx/builder/entry/index.js +1 -2
  137. package/es/tx/builder/entry/index.js.map +1 -1
  138. package/es/tx/builder/field-types/ct-version.js +1 -2
  139. package/es/tx/builder/field-types/ct-version.js.map +1 -1
  140. package/es/tx/builder/field-types/fee.d.ts +1 -1
  141. package/es/tx/builder/field-types/fee.js +4 -4
  142. package/es/tx/builder/field-types/fee.js.map +1 -1
  143. package/es/tx/builder/field-types/gas-price.d.ts +3 -0
  144. package/es/tx/builder/field-types/gas-price.js +1 -1
  145. package/es/tx/builder/field-types/gas-price.js.map +1 -1
  146. package/es/tx/builder/field-types/name-fee.js +1 -1
  147. package/es/tx/builder/field-types/name-fee.js.map +1 -1
  148. package/es/tx/builder/field-types/name-id.js +2 -2
  149. package/es/tx/builder/field-types/name-id.js.map +1 -1
  150. package/es/tx/builder/field-types/nonce.d.ts +1 -1
  151. package/es/tx/builder/field-types/nonce.js.map +1 -1
  152. package/es/tx/builder/field-types/pointers.js +3 -3
  153. package/es/tx/builder/field-types/pointers.js.map +1 -1
  154. package/es/tx/builder/field-types/ttl.js +1 -2
  155. package/es/tx/builder/field-types/ttl.js.map +1 -1
  156. package/es/tx/builder/helpers.d.ts +18 -12
  157. package/es/tx/builder/helpers.js +25 -17
  158. package/es/tx/builder/helpers.js.map +1 -1
  159. package/es/tx/builder/schema.d.ts +27 -24
  160. package/es/tx/builder/schema.generated.d.ts +12 -12
  161. package/es/tx/builder/schema.generated.js.map +1 -1
  162. package/es/tx/builder/schema.js +5 -3
  163. package/es/tx/builder/schema.js.map +1 -1
  164. package/es/tx/execution-cost.d.ts +3 -0
  165. package/es/tx/execution-cost.js +7 -4
  166. package/es/tx/execution-cost.js.map +1 -1
  167. package/es/tx/transaction-signer.d.ts +1 -0
  168. package/es/tx/transaction-signer.js +1 -0
  169. package/es/tx/transaction-signer.js.map +1 -1
  170. package/es/tx/validator.js +4 -3
  171. package/es/tx/validator.js.map +1 -1
  172. package/es/utils/MiddlewarePage.d.ts +4 -3
  173. package/es/utils/MiddlewarePage.js.map +1 -1
  174. package/es/utils/amount-formatter.d.ts +15 -1
  175. package/es/utils/amount-formatter.js +17 -1
  176. package/es/utils/amount-formatter.js.map +1 -1
  177. package/es/utils/autorest.d.ts +1 -1
  178. package/es/utils/autorest.js +10 -4
  179. package/es/utils/autorest.js.map +1 -1
  180. package/es/utils/bignumber.d.ts +1 -1
  181. package/es/utils/bignumber.js +1 -1
  182. package/es/utils/bignumber.js.map +1 -1
  183. package/es/utils/bytes.d.ts +3 -1
  184. package/es/utils/bytes.js +3 -1
  185. package/es/utils/bytes.js.map +1 -1
  186. package/es/utils/crypto.d.ts +48 -15
  187. package/es/utils/crypto.js +80 -29
  188. package/es/utils/crypto.js.map +1 -1
  189. package/es/utils/encoder-types.d.ts +1 -1
  190. package/es/utils/encoder-types.js +1 -1
  191. package/es/utils/encoder-types.js.map +1 -1
  192. package/es/utils/encoder.d.ts +2 -0
  193. package/es/utils/encoder.js +2 -0
  194. package/es/utils/encoder.js.map +1 -1
  195. package/es/utils/errors.d.ts +2 -2
  196. package/es/utils/errors.js +2 -2
  197. package/es/utils/errors.js.map +1 -1
  198. package/es/utils/json-big.js +1 -1
  199. package/es/utils/json-big.js.map +1 -1
  200. package/es/utils/jwt.js +3 -3
  201. package/es/utils/jwt.js.map +1 -1
  202. package/es/utils/typed-data.d.ts +5 -0
  203. package/es/utils/typed-data.js +6 -0
  204. package/es/utils/typed-data.js.map +1 -1
  205. package/package.json +50 -51
@@ -1 +1 @@
1
- {"version":3,"file":"Memory.js","names":["nacl","AccountBase","hash","messageToHash","messagePrefixLength","ArgumentError","decode","encode","Encoding","concatBuffers","hashTypedData","buildTx","Tag","getBufferToSign","transaction","networkId","innerTx","prefixes","push","rlpBinaryTx","_Buffer","from","join","_secretKeyDecoded","WeakMap","AccountMemory","constructor","secretKey","_classPrivateFieldInitSpec","keyPair","sign","fromSeed","_classPrivateFieldSet","address","publicKey","AccountAddress","generate","randomBytes","AccountSecretKey","data","options","detached","_classPrivateFieldGet","signTransaction","txWithNetworkId","signatures","tag","SignedTx","encodedTx","signMessage","message","signTypedData","aci","name","version","contractAddress","dHash","signature","Signature","signDelegation","delegation","payload","Uint8Array"],"sources":["../../src/account/Memory.ts"],"sourcesContent":["import nacl from 'tweetnacl';\nimport AccountBase from './Base.js';\nimport { hash, messageToHash, messagePrefixLength } from '../utils/crypto.js';\nimport { ArgumentError } from '../utils/errors.js';\nimport { decode, encode, Encoded, Encoding } from '../utils/encoder.js';\nimport { concatBuffers } from '../utils/other.js';\nimport { hashTypedData, AciValue } from '../utils/typed-data.js';\nimport { buildTx } from '../tx/builder/index.js';\nimport { Tag } from '../tx/builder/constants.js';\n\nexport function getBufferToSign(\n transaction: Encoded.Transaction,\n networkId: string,\n innerTx: boolean,\n): Uint8Array {\n const prefixes = [networkId];\n if (innerTx) prefixes.push('inner_tx');\n const rlpBinaryTx = decode(transaction);\n return concatBuffers([Buffer.from(prefixes.join('-')), hash(rlpBinaryTx)]);\n}\n\n/**\n * In-memory account class\n */\nexport default class AccountMemory extends AccountBase {\n override readonly address: Encoded.AccountAddress;\n\n readonly #secretKeyDecoded: Uint8Array;\n\n /**\n * @param secretKey - Secret key\n */\n constructor(public readonly secretKey: Encoded.AccountSecretKey) {\n super();\n const keyPair = nacl.sign.keyPair.fromSeed(decode(secretKey));\n this.#secretKeyDecoded = keyPair.secretKey;\n this.address = encode(keyPair.publicKey, Encoding.AccountAddress);\n }\n\n /**\n * Generates a new AccountMemory using a random secret key\n */\n static generate(): AccountMemory {\n const secretKey = encode(nacl.randomBytes(32), Encoding.AccountSecretKey);\n return new AccountMemory(secretKey);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n override async sign(data: string | Uint8Array, options?: any): Promise<Uint8Array> {\n return nacl.sign.detached(Buffer.from(data), this.#secretKeyDecoded);\n }\n\n override async signTransaction(\n transaction: Encoded.Transaction,\n { innerTx, networkId, ...options }: { innerTx?: boolean; networkId?: string } = {},\n ): Promise<Encoded.Transaction> {\n if (networkId == null) {\n throw new ArgumentError('networkId', 'provided', networkId);\n }\n const rlpBinaryTx = decode(transaction);\n const txWithNetworkId = getBufferToSign(transaction, networkId, innerTx === true);\n\n const signatures = [await this.sign(txWithNetworkId, options)];\n return buildTx({ tag: Tag.SignedTx, encodedTx: rlpBinaryTx, signatures });\n }\n\n override async signMessage(message: string, options?: any): Promise<Uint8Array> {\n return this.sign(messageToHash(message), options);\n }\n\n override async signTypedData(\n data: Encoded.ContractBytearray,\n aci: AciValue,\n {\n name,\n version,\n networkId,\n contractAddress,\n ...options\n }: Parameters<AccountBase['signTypedData']>[2] = {},\n ): Promise<Encoded.Signature> {\n const dHash = hashTypedData(data, aci, {\n name,\n version,\n networkId,\n contractAddress,\n });\n const signature = await this.sign(dHash, options);\n return encode(signature, Encoding.Signature);\n }\n\n override async signDelegation(\n delegation: Encoded.Bytearray,\n { networkId }: { networkId?: string } = {},\n ): Promise<Encoded.Signature> {\n if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId);\n const payload = concatBuffers([\n messagePrefixLength,\n new Uint8Array([1]),\n Buffer.from(networkId),\n decode(delegation),\n ]);\n const signature = await this.sign(payload);\n return encode(signature, Encoding.Signature);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Memory.js","names":["nacl","AccountBase","hash","hashMessage","messagePrefixLength","ArgumentError","decode","encode","Encoding","concatBuffers","hashTypedData","buildTx","Tag","getBufferToSign","transaction","networkId","innerTx","prefixes","push","rlpBinaryTx","_Buffer","from","join","_secretKeyDecoded","WeakMap","AccountMemory","constructor","secretKey","_classPrivateFieldInitSpec","keyPair","sign","fromSeed","_classPrivateFieldSet","address","publicKey","AccountAddress","generate","randomBytes","AccountSecretKey","data","options","unsafeSign","detached","_classPrivateFieldGet","signTransaction","txWithNetworkId","signatures","tag","SignedTx","encodedTx","signMessage","message","signTypedData","aci","name","version","contractAddress","dHash","signature","Signature","signDelegation","delegation","payload","Uint8Array"],"sources":["../../src/account/Memory.ts"],"sourcesContent":["import nacl from 'tweetnacl';\nimport AccountBase from './Base.js';\nimport { hash, hashMessage, messagePrefixLength } from '../utils/crypto.js';\nimport { ArgumentError } from '../utils/errors.js';\nimport { decode, encode, Encoded, Encoding } from '../utils/encoder.js';\nimport { concatBuffers } from '../utils/other.js';\nimport { hashTypedData, AciValue } from '../utils/typed-data.js';\nimport { buildTx } from '../tx/builder/index.js';\nimport { Tag } from '../tx/builder/constants.js';\n\nexport function getBufferToSign(\n transaction: Encoded.Transaction,\n networkId: string,\n innerTx: boolean,\n): Uint8Array {\n const prefixes = [networkId];\n if (innerTx) prefixes.push('inner_tx');\n const rlpBinaryTx = decode(transaction);\n return concatBuffers([Buffer.from(prefixes.join('-')), hash(rlpBinaryTx)]);\n}\n\n/**\n * In-memory account class\n * @category account\n */\nexport default class AccountMemory extends AccountBase {\n override readonly address: Encoded.AccountAddress;\n\n readonly #secretKeyDecoded: Uint8Array;\n\n /**\n * @param secretKey - Secret key\n */\n constructor(public readonly secretKey: Encoded.AccountSecretKey) {\n super();\n const keyPair = nacl.sign.keyPair.fromSeed(decode(secretKey));\n this.#secretKeyDecoded = keyPair.secretKey;\n this.address = encode(keyPair.publicKey, Encoding.AccountAddress);\n }\n\n /**\n * Generates a new AccountMemory using a random secret key\n */\n static generate(): AccountMemory {\n const secretKey = encode(nacl.randomBytes(32), Encoding.AccountSecretKey);\n return new AccountMemory(secretKey);\n }\n\n /**\n * @deprecated Use `unsafeSign` method instead\n */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n override async sign(data: string | Uint8Array, options?: any): Promise<Uint8Array> {\n return this.unsafeSign(data, options);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n override async unsafeSign(data: string | Uint8Array, options?: any): Promise<Uint8Array> {\n return nacl.sign.detached(Buffer.from(data), this.#secretKeyDecoded);\n }\n\n override async signTransaction(\n transaction: Encoded.Transaction,\n { innerTx, networkId, ...options }: { innerTx?: boolean; networkId?: string } = {},\n ): Promise<Encoded.Transaction> {\n if (networkId == null) {\n throw new ArgumentError('networkId', 'provided', networkId);\n }\n const rlpBinaryTx = decode(transaction);\n const txWithNetworkId = getBufferToSign(transaction, networkId, innerTx === true);\n\n const signatures = [await this.unsafeSign(txWithNetworkId, options)];\n return buildTx({ tag: Tag.SignedTx, encodedTx: rlpBinaryTx, signatures });\n }\n\n override async signMessage(message: string, options?: any): Promise<Uint8Array> {\n return this.unsafeSign(hashMessage(message), options);\n }\n\n override async signTypedData(\n data: Encoded.ContractBytearray,\n aci: AciValue,\n {\n name,\n version,\n networkId,\n contractAddress,\n ...options\n }: Parameters<AccountBase['signTypedData']>[2] = {},\n ): Promise<Encoded.Signature> {\n const dHash = hashTypedData(data, aci, {\n name,\n version,\n networkId,\n contractAddress,\n });\n const signature = await this.unsafeSign(dHash, options);\n return encode(signature, Encoding.Signature);\n }\n\n override async signDelegation(\n delegation: Encoded.Bytearray,\n { networkId }: { networkId?: string } = {},\n ): Promise<Encoded.Signature> {\n if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId);\n const payload = concatBuffers([\n messagePrefixLength,\n new Uint8Array([1]),\n Buffer.from(networkId),\n decode(delegation),\n ]);\n const signature = await this.unsafeSign(payload);\n return encode(signature, Encoding.Signature);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -6,8 +6,12 @@ export declare function invokeSnap<R>(provider: BaseProvider, method: string, pa
6
6
  /**
7
7
  * Account connected to Aeternity Snap for MetaMask
8
8
  * https://www.npmjs.com/package/\@aeternity-snap/plugin
9
+ * @category account
9
10
  */
10
11
  export default class AccountMetamask extends AccountBase {
12
+ /**
13
+ * @deprecated this class is not intended to provide raw access to the provider
14
+ */
11
15
  readonly provider: BaseProvider;
12
16
  readonly index: number;
13
17
  readonly address: Encoded.AccountAddress;
@@ -15,7 +19,11 @@ export default class AccountMetamask extends AccountBase {
15
19
  * @param address - Address of account
16
20
  */
17
21
  constructor(provider: BaseProvider, index: number, address: Encoded.AccountAddress);
22
+ /**
23
+ * @deprecated Use `unsafeSign` method instead
24
+ */
18
25
  sign(): Promise<Uint8Array>;
26
+ unsafeSign(): Promise<Uint8Array>;
19
27
  signTypedData(): Promise<Encoded.Signature>;
20
28
  signDelegation(): Promise<Encoded.Signature>;
21
29
  signTransaction(tx: Encoded.Transaction, { innerTx, networkId }?: {
@@ -23,8 +23,13 @@ export async function invokeSnap(provider, method, params, key) {
23
23
  /**
24
24
  * Account connected to Aeternity Snap for MetaMask
25
25
  * https://www.npmjs.com/package/\@aeternity-snap/plugin
26
+ * @category account
26
27
  */
27
28
  export default class AccountMetamask extends AccountBase {
29
+ /**
30
+ * @deprecated this class is not intended to provide raw access to the provider
31
+ */
32
+
28
33
  /**
29
34
  * @param address - Address of account
30
35
  */
@@ -35,8 +40,16 @@ export default class AccountMetamask extends AccountBase {
35
40
  this.address = address;
36
41
  }
37
42
 
43
+ /**
44
+ * @deprecated Use `unsafeSign` method instead
45
+ */
38
46
  // eslint-disable-next-line class-methods-use-this
39
47
  async sign() {
48
+ return this.unsafeSign();
49
+ }
50
+
51
+ // eslint-disable-next-line class-methods-use-this
52
+ async unsafeSign() {
40
53
  throw new NotImplementedError('RAW signing using MetaMask');
41
54
  }
42
55
 
@@ -1 +1 @@
1
- {"version":3,"file":"Metamask.js","names":["AccountBase","ArgumentError","InternalError","NotImplementedError","snapId","invokeSnap","provider","method","params","key","response","request","JSON","stringify","AccountMetamask","constructor","index","address","sign","signTypedData","signDelegation","signTransaction","tx","innerTx","networkId","derivationPath","signMessage","message","signature","_Buffer","from","toString"],"sources":["../../src/account/Metamask.ts"],"sourcesContent":["import type { BaseProvider } from '@metamask/providers';\nimport AccountBase from './Base.js';\nimport { Encoded } from '../utils/encoder.js';\nimport { ArgumentError, InternalError, NotImplementedError } from '../utils/errors.js';\n\nexport const snapId = 'npm:@aeternity-snap/plugin';\n\nexport async function invokeSnap<R>(\n provider: BaseProvider,\n method: string,\n params: unknown,\n key: string,\n): Promise<R> {\n const response = await provider.request<{ [k in string]: unknown }>({\n method: 'wallet_invokeSnap',\n params: { snapId, request: { method, params } },\n });\n if (response == null) throw new InternalError('Empty MetaMask response');\n if (!(key in response)) {\n throw new InternalError(`Key ${key} missed in response ${JSON.stringify(response)}`);\n }\n return response[key] as R;\n}\n\n/**\n * Account connected to Aeternity Snap for MetaMask\n * https://www.npmjs.com/package/\\@aeternity-snap/plugin\n */\nexport default class AccountMetamask extends AccountBase {\n readonly provider: BaseProvider;\n\n readonly index: number;\n\n override readonly address: Encoded.AccountAddress;\n\n /**\n * @param address - Address of account\n */\n constructor(provider: BaseProvider, index: number, address: Encoded.AccountAddress) {\n super();\n this.provider = provider;\n this.index = index;\n this.address = address;\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async sign(): Promise<Uint8Array> {\n throw new NotImplementedError('RAW signing using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signTypedData(): Promise<Encoded.Signature> {\n throw new NotImplementedError('Typed data signing using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signDelegation(): Promise<Encoded.Signature> {\n throw new NotImplementedError('signing delegation using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signTransaction(\n tx: Encoded.Transaction,\n { innerTx, networkId }: { innerTx?: boolean; networkId?: string } = {},\n ): Promise<Encoded.Transaction> {\n if (innerTx != null) throw new NotImplementedError('innerTx option in AccountMetamask');\n if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId);\n\n return invokeSnap<Encoded.Transaction>(\n this.provider,\n 'signTransaction',\n { derivationPath: [`${this.index}'`, \"0'\", \"0'\"], tx, networkId },\n 'signedTx',\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signMessage(message: string): Promise<Uint8Array> {\n const signature = await invokeSnap<string>(\n this.provider,\n 'signMessage',\n {\n derivationPath: [`${this.index}'`, \"0'\", \"0'\"],\n message: Buffer.from(message).toString('base64'),\n },\n 'signature',\n );\n return Buffer.from(signature, 'base64');\n }\n}\n"],"mappings":";AACA,OAAOA,WAAW,MAAM,WAAW;AAEnC,SAASC,aAAa,EAAEC,aAAa,EAAEC,mBAAmB,QAAQ,oBAAoB;AAEtF,OAAO,MAAMC,MAAM,GAAG,4BAA4B;AAElD,OAAO,eAAeC,UAAUA,CAC9BC,QAAsB,EACtBC,MAAc,EACdC,MAAe,EACfC,GAAW,EACC;EACZ,MAAMC,QAAQ,GAAG,MAAMJ,QAAQ,CAACK,OAAO,CAA6B;IAClEJ,MAAM,EAAE,mBAAmB;IAC3BC,MAAM,EAAE;MAAEJ,MAAM;MAAEO,OAAO,EAAE;QAAEJ,MAAM;QAAEC;MAAO;IAAE;EAChD,CAAC,CAAC;EACF,IAAIE,QAAQ,IAAI,IAAI,EAAE,MAAM,IAAIR,aAAa,CAAC,yBAAyB,CAAC;EACxE,IAAI,EAAEO,GAAG,IAAIC,QAAQ,CAAC,EAAE;IACtB,MAAM,IAAIR,aAAa,CAAC,OAAOO,GAAG,uBAAuBG,IAAI,CAACC,SAAS,CAACH,QAAQ,CAAC,EAAE,CAAC;EACtF;EACA,OAAOA,QAAQ,CAACD,GAAG,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA,eAAe,MAAMK,eAAe,SAASd,WAAW,CAAC;EAOvD;AACF;AACA;EACEe,WAAWA,CAACT,QAAsB,EAAEU,KAAa,EAAEC,OAA+B,EAAE;IAClF,KAAK,CAAC,CAAC;IACP,IAAI,CAACX,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACU,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;;EAEA;EACA,MAAeC,IAAIA,CAAA,EAAwB;IACzC,MAAM,IAAIf,mBAAmB,CAAC,4BAA4B,CAAC;EAC7D;;EAEA;EACA,MAAegB,aAAaA,CAAA,EAA+B;IACzD,MAAM,IAAIhB,mBAAmB,CAAC,mCAAmC,CAAC;EACpE;;EAEA;EACA,MAAeiB,cAAcA,CAAA,EAA+B;IAC1D,MAAM,IAAIjB,mBAAmB,CAAC,mCAAmC,CAAC;EACpE;;EAEA;EACA,MAAekB,eAAeA,CAC5BC,EAAuB,EACvB;IAAEC,OAAO;IAAEC;EAAqD,CAAC,GAAG,CAAC,CAAC,EACxC;IAC9B,IAAID,OAAO,IAAI,IAAI,EAAE,MAAM,IAAIpB,mBAAmB,CAAC,mCAAmC,CAAC;IACvF,IAAIqB,SAAS,IAAI,IAAI,EAAE,MAAM,IAAIvB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAEuB,SAAS,CAAC;IAElF,OAAOnB,UAAU,CACf,IAAI,CAACC,QAAQ,EACb,iBAAiB,EACjB;MAAEmB,cAAc,EAAE,CAAC,GAAG,IAAI,CAACT,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;MAAEM,EAAE;MAAEE;IAAU,CAAC,EACjE,UACF,CAAC;EACH;;EAEA;EACA,MAAeE,WAAWA,CAACC,OAAe,EAAuB;IAC/D,MAAMC,SAAS,GAAG,MAAMvB,UAAU,CAChC,IAAI,CAACC,QAAQ,EACb,aAAa,EACb;MACEmB,cAAc,EAAE,CAAC,GAAG,IAAI,CAACT,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;MAC9CW,OAAO,EAAEE,OAAA,CAAOC,IAAI,CAACH,OAAO,CAAC,CAACI,QAAQ,CAAC,QAAQ;IACjD,CAAC,EACD,WACF,CAAC;IACD,OAAOF,OAAA,CAAOC,IAAI,CAACF,SAAS,EAAE,QAAQ,CAAC;EACzC;AACF","ignoreList":[]}
1
+ {"version":3,"file":"Metamask.js","names":["AccountBase","ArgumentError","InternalError","NotImplementedError","snapId","invokeSnap","provider","method","params","key","response","request","JSON","stringify","AccountMetamask","constructor","index","address","sign","unsafeSign","signTypedData","signDelegation","signTransaction","tx","innerTx","networkId","derivationPath","signMessage","message","signature","_Buffer","from","toString"],"sources":["../../src/account/Metamask.ts"],"sourcesContent":["import type { BaseProvider } from '@metamask/providers';\nimport AccountBase from './Base.js';\nimport { Encoded } from '../utils/encoder.js';\nimport { ArgumentError, InternalError, NotImplementedError } from '../utils/errors.js';\n\nexport const snapId = 'npm:@aeternity-snap/plugin';\n\nexport async function invokeSnap<R>(\n provider: BaseProvider,\n method: string,\n params: unknown,\n key: string,\n): Promise<R> {\n const response = await provider.request<{ [k in string]: unknown }>({\n method: 'wallet_invokeSnap',\n params: { snapId, request: { method, params } },\n });\n if (response == null) throw new InternalError('Empty MetaMask response');\n if (!(key in response)) {\n throw new InternalError(`Key ${key} missed in response ${JSON.stringify(response)}`);\n }\n return response[key] as R;\n}\n\n/**\n * Account connected to Aeternity Snap for MetaMask\n * https://www.npmjs.com/package/\\@aeternity-snap/plugin\n * @category account\n */\nexport default class AccountMetamask extends AccountBase {\n /**\n * @deprecated this class is not intended to provide raw access to the provider\n */\n readonly provider: BaseProvider;\n\n readonly index: number;\n\n override readonly address: Encoded.AccountAddress;\n\n /**\n * @param address - Address of account\n */\n constructor(provider: BaseProvider, index: number, address: Encoded.AccountAddress) {\n super();\n this.provider = provider;\n this.index = index;\n this.address = address;\n }\n\n /**\n * @deprecated Use `unsafeSign` method instead\n */\n // eslint-disable-next-line class-methods-use-this\n override async sign(): Promise<Uint8Array> {\n return this.unsafeSign();\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async unsafeSign(): Promise<Uint8Array> {\n throw new NotImplementedError('RAW signing using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signTypedData(): Promise<Encoded.Signature> {\n throw new NotImplementedError('Typed data signing using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signDelegation(): Promise<Encoded.Signature> {\n throw new NotImplementedError('signing delegation using MetaMask');\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signTransaction(\n tx: Encoded.Transaction,\n { innerTx, networkId }: { innerTx?: boolean; networkId?: string } = {},\n ): Promise<Encoded.Transaction> {\n if (innerTx != null) throw new NotImplementedError('innerTx option in AccountMetamask');\n if (networkId == null) throw new ArgumentError('networkId', 'provided', networkId);\n\n return invokeSnap<Encoded.Transaction>(\n this.provider,\n 'signTransaction',\n { derivationPath: [`${this.index}'`, \"0'\", \"0'\"], tx, networkId },\n 'signedTx',\n );\n }\n\n // eslint-disable-next-line class-methods-use-this\n override async signMessage(message: string): Promise<Uint8Array> {\n const signature = await invokeSnap<string>(\n this.provider,\n 'signMessage',\n {\n derivationPath: [`${this.index}'`, \"0'\", \"0'\"],\n message: Buffer.from(message).toString('base64'),\n },\n 'signature',\n );\n return Buffer.from(signature, 'base64');\n }\n}\n"],"mappings":";AACA,OAAOA,WAAW,MAAM,WAAW;AAEnC,SAASC,aAAa,EAAEC,aAAa,EAAEC,mBAAmB,QAAQ,oBAAoB;AAEtF,OAAO,MAAMC,MAAM,GAAG,4BAA4B;AAElD,OAAO,eAAeC,UAAUA,CAC9BC,QAAsB,EACtBC,MAAc,EACdC,MAAe,EACfC,GAAW,EACC;EACZ,MAAMC,QAAQ,GAAG,MAAMJ,QAAQ,CAACK,OAAO,CAA6B;IAClEJ,MAAM,EAAE,mBAAmB;IAC3BC,MAAM,EAAE;MAAEJ,MAAM;MAAEO,OAAO,EAAE;QAAEJ,MAAM;QAAEC;MAAO;IAAE;EAChD,CAAC,CAAC;EACF,IAAIE,QAAQ,IAAI,IAAI,EAAE,MAAM,IAAIR,aAAa,CAAC,yBAAyB,CAAC;EACxE,IAAI,EAAEO,GAAG,IAAIC,QAAQ,CAAC,EAAE;IACtB,MAAM,IAAIR,aAAa,CAAC,OAAOO,GAAG,uBAAuBG,IAAI,CAACC,SAAS,CAACH,QAAQ,CAAC,EAAE,CAAC;EACtF;EACA,OAAOA,QAAQ,CAACD,GAAG,CAAC;AACtB;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAMK,eAAe,SAASd,WAAW,CAAC;EACvD;AACF;AACA;;EAOE;AACF;AACA;EACEe,WAAWA,CAACT,QAAsB,EAAEU,KAAa,EAAEC,OAA+B,EAAE;IAClF,KAAK,CAAC,CAAC;IACP,IAAI,CAACX,QAAQ,GAAGA,QAAQ;IACxB,IAAI,CAACU,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACC,OAAO,GAAGA,OAAO;EACxB;;EAEA;AACF;AACA;EACE;EACA,MAAeC,IAAIA,CAAA,EAAwB;IACzC,OAAO,IAAI,CAACC,UAAU,CAAC,CAAC;EAC1B;;EAEA;EACA,MAAeA,UAAUA,CAAA,EAAwB;IAC/C,MAAM,IAAIhB,mBAAmB,CAAC,4BAA4B,CAAC;EAC7D;;EAEA;EACA,MAAeiB,aAAaA,CAAA,EAA+B;IACzD,MAAM,IAAIjB,mBAAmB,CAAC,mCAAmC,CAAC;EACpE;;EAEA;EACA,MAAekB,cAAcA,CAAA,EAA+B;IAC1D,MAAM,IAAIlB,mBAAmB,CAAC,mCAAmC,CAAC;EACpE;;EAEA;EACA,MAAemB,eAAeA,CAC5BC,EAAuB,EACvB;IAAEC,OAAO;IAAEC;EAAqD,CAAC,GAAG,CAAC,CAAC,EACxC;IAC9B,IAAID,OAAO,IAAI,IAAI,EAAE,MAAM,IAAIrB,mBAAmB,CAAC,mCAAmC,CAAC;IACvF,IAAIsB,SAAS,IAAI,IAAI,EAAE,MAAM,IAAIxB,aAAa,CAAC,WAAW,EAAE,UAAU,EAAEwB,SAAS,CAAC;IAElF,OAAOpB,UAAU,CACf,IAAI,CAACC,QAAQ,EACb,iBAAiB,EACjB;MAAEoB,cAAc,EAAE,CAAC,GAAG,IAAI,CAACV,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;MAAEO,EAAE;MAAEE;IAAU,CAAC,EACjE,UACF,CAAC;EACH;;EAEA;EACA,MAAeE,WAAWA,CAACC,OAAe,EAAuB;IAC/D,MAAMC,SAAS,GAAG,MAAMxB,UAAU,CAChC,IAAI,CAACC,QAAQ,EACb,aAAa,EACb;MACEoB,cAAc,EAAE,CAAC,GAAG,IAAI,CAACV,KAAK,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC;MAC9CY,OAAO,EAAEE,OAAA,CAAOC,IAAI,CAACH,OAAO,CAAC,CAACI,QAAQ,CAAC,QAAQ;IACjD,CAAC,EACD,WACF,CAAC;IACD,OAAOF,OAAA,CAAOC,IAAI,CAACF,SAAS,EAAE,QAAQ,CAAC;EACzC;AACF","ignoreList":[]}
@@ -10,21 +10,39 @@ interface SnapDetails {
10
10
  }
11
11
  /**
12
12
  * A factory class that generates instances of AccountMetamask.
13
+ * @see {@link https://www.npmjs.com/package/@aeternity-snap/plugin | Aeternity snap}
14
+ * @category account
13
15
  */
14
16
  export default class AccountMetamaskFactory extends AccountBaseFactory {
15
17
  #private;
16
- readonly provider: BaseProvider;
18
+ /**
19
+ * @deprecated this class is not intended to provide raw access to the provider
20
+ */
21
+ get provider(): BaseProvider;
17
22
  /**
18
23
  * @param provider - Connection to MetaMask to use
19
24
  */
20
25
  constructor(provider?: BaseProvider);
21
26
  /**
22
27
  * Request MetaMask to install Aeternity snap.
28
+ * @deprecated use `requestSnap` instead
23
29
  */
24
30
  installSnap(): Promise<SnapDetails>;
31
+ /**
32
+ * Request MetaMask to install Aeternity snap or connect it to the current aepp.
33
+ * MetaMask can have only one Aeternity snap version installed at a time.
34
+ * This method is intended to upgrade the snap to a specified version if needed by the aepp.
35
+ * If Aeternity snap is installed but wasn't used by the aepp, then the user still needs to approve the connection.
36
+ * If the currently installed version corresponds to the version range, then the snap won't be upgraded.
37
+ * To downgrade the snap, the user must manually uninstall the current version.
38
+ * @param version - Snap version range (e.g. `1`, `0.1.*`, `^0.0.9`, `~0.0.9`; `>=0.0.9 <0.1.0`)
39
+ * (default: a version range supported by sdk)
40
+ */
41
+ requestSnap(version?: string): Promise<SnapDetails>;
25
42
  /**
26
43
  * It throws an exception if MetaMask or Aeternity snap has an incompatible version or is not
27
- * installed.
44
+ * installed or is not connected to the aepp.
45
+ * @deprecated use `requestSnap` instead
28
46
  */
29
47
  ensureReady(): Promise<void>;
30
48
  /**
@@ -1,8 +1,8 @@
1
- function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
2
1
  function _classPrivateMethodInitSpec(e, a) { _checkPrivateRedeclaration(e, a), a.add(e); }
2
+ function _classPrivateFieldInitSpec(e, t, a) { _checkPrivateRedeclaration(e, t), t.set(e, a); }
3
3
  function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("Cannot initialize the same private elements twice on an object"); }
4
- function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
5
4
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
5
+ function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
6
6
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
7
7
  import { InternalError, UnsupportedPlatformError, UnsupportedVersionError } from '../utils/errors.js';
8
8
  import semverSatisfies from '../utils/semver-satisfies.js';
@@ -10,40 +10,45 @@ import AccountBaseFactory from './BaseFactory.js';
10
10
  import AccountMetamask, { invokeSnap, snapId } from './Metamask.js';
11
11
  const snapMinVersion = '0.0.9';
12
12
  const snapMaxVersion = '0.1.0';
13
+ const metamaskVersionPrefix = 'MetaMask/v';
14
+ var _provider = /*#__PURE__*/new WeakMap();
13
15
  var _AccountMetamaskFactory_brand = /*#__PURE__*/new WeakSet();
14
- var _ensureReadyPromise = /*#__PURE__*/new WeakMap();
16
+ var _providerPromise = /*#__PURE__*/new WeakMap();
15
17
  /**
16
18
  * A factory class that generates instances of AccountMetamask.
19
+ * @see {@link https://www.npmjs.com/package/@aeternity-snap/plugin | Aeternity snap}
20
+ * @category account
17
21
  */
18
22
  export default class AccountMetamaskFactory extends AccountBaseFactory {
23
+ /**
24
+ * @deprecated this class is not intended to provide raw access to the provider
25
+ */
26
+ get provider() {
27
+ if (_classPrivateFieldGet(_provider, this) == null) throw new UnsupportedPlatformError('Metamask is not detected yet');
28
+ return _classPrivateFieldGet(_provider, this);
29
+ }
19
30
  /**
20
31
  * @param provider - Connection to MetaMask to use
21
32
  */
22
- constructor(provider) {
33
+ constructor(_provider2) {
23
34
  super();
24
- /**
25
- * It throws an exception if MetaMask has an incompatible version.
26
- */
27
35
  _classPrivateMethodInitSpec(this, _AccountMetamaskFactory_brand);
28
- _classPrivateFieldInitSpec(this, _ensureReadyPromise, void 0);
29
- if (provider != null) {
30
- this.provider = provider;
31
- return;
32
- }
33
- if (window == null) {
36
+ // TODO: remove after removing `provider`
37
+ _classPrivateFieldInitSpec(this, _provider, void 0);
38
+ _classPrivateFieldInitSpec(this, _providerPromise, void 0);
39
+ _classPrivateFieldSet(_provider, this, _provider2);
40
+ if (_classPrivateFieldGet(_provider, this) == null && window == null) {
34
41
  throw new UnsupportedPlatformError('Window object not found, you can run AccountMetamaskFactory only in browser or setup a provider');
35
42
  }
36
- if (!('ethereum' in window) || window.ethereum == null) {
37
- throw new UnsupportedPlatformError('`ethereum` object not found, you can run AccountMetamaskFactory only with Metamask enabled or setup a provider');
38
- }
39
- this.provider = window.ethereum;
40
43
  }
44
+
41
45
  /**
42
46
  * Request MetaMask to install Aeternity snap.
47
+ * @deprecated use `requestSnap` instead
43
48
  */
44
49
  async installSnap() {
45
- await _assertClassBrand(_AccountMetamaskFactory_brand, this, _ensureMetamaskSupported).call(this);
46
- const details = await this.provider.request({
50
+ const provider = await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getProvider).call(this);
51
+ const details = await provider.request({
47
52
  method: 'wallet_requestSnaps',
48
53
  params: {
49
54
  [snapId]: {
@@ -51,30 +56,53 @@ export default class AccountMetamaskFactory extends AccountBaseFactory {
51
56
  }
52
57
  }
53
58
  });
54
- _classPrivateFieldSet(_ensureReadyPromise, this, Promise.resolve());
59
+ return details[snapId];
60
+ }
61
+
62
+ /**
63
+ * Request MetaMask to install Aeternity snap or connect it to the current aepp.
64
+ * MetaMask can have only one Aeternity snap version installed at a time.
65
+ * This method is intended to upgrade the snap to a specified version if needed by the aepp.
66
+ * If Aeternity snap is installed but wasn't used by the aepp, then the user still needs to approve the connection.
67
+ * If the currently installed version corresponds to the version range, then the snap won't be upgraded.
68
+ * To downgrade the snap, the user must manually uninstall the current version.
69
+ * @param version - Snap version range (e.g. `1`, `0.1.*`, `^0.0.9`, `~0.0.9`; `>=0.0.9 <0.1.0`)
70
+ * (default: a version range supported by sdk)
71
+ */
72
+ async requestSnap(version = `>=${snapMinVersion} <${snapMaxVersion}`) {
73
+ const provider = await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getProvider).call(this);
74
+ const details = await provider.request({
75
+ method: 'wallet_requestSnaps',
76
+ params: {
77
+ [snapId]: {
78
+ version
79
+ }
80
+ }
81
+ });
55
82
  return details[snapId];
56
83
  }
57
84
 
58
85
  /**
59
86
  * It throws an exception if MetaMask or Aeternity snap has an incompatible version or is not
60
- * installed.
87
+ * installed or is not connected to the aepp.
88
+ * @deprecated use `requestSnap` instead
61
89
  */
62
90
  async ensureReady() {
63
91
  const snapVersion = await this.getSnapVersion();
64
92
  const args = [snapVersion, snapMinVersion, snapMaxVersion];
65
93
  if (!semverSatisfies(...args)) throw new UnsupportedVersionError('Aeternity snap in MetaMask', ...args);
66
- _classPrivateFieldSet(_ensureReadyPromise, this, Promise.resolve());
67
94
  }
95
+
68
96
  /**
69
97
  * @returns the version of snap installed in MetaMask
70
98
  */
71
99
  async getSnapVersion() {
72
- await _assertClassBrand(_AccountMetamaskFactory_brand, this, _ensureMetamaskSupported).call(this);
73
- const snaps = await this.provider.request({
100
+ const provider = await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getProvider).call(this);
101
+ const snaps = await provider.request({
74
102
  method: 'wallet_getSnaps'
75
103
  });
76
104
  const version = snaps[snapId]?.version;
77
- if (version == null) throw new UnsupportedPlatformError('Aeternity snap is not installed to MetaMask');
105
+ if (version == null) throw new UnsupportedPlatformError('Aeternity snap is not installed to MetaMask or not connected to this aepp');
78
106
  return version;
79
107
  }
80
108
 
@@ -83,28 +111,54 @@ export default class AccountMetamaskFactory extends AccountBaseFactory {
83
111
  * @param accountIndex - Index of account
84
112
  */
85
113
  async initialize(accountIndex) {
86
- await _assertClassBrand(_AccountMetamaskFactory_brand, this, _ensureReady).call(this);
87
- const address = await invokeSnap(this.provider, 'getPublicKey', {
114
+ await this.requestSnap();
115
+ const provider = await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getProvider).call(this);
116
+ const address = await invokeSnap(provider, 'getPublicKey', {
88
117
  derivationPath: [`${accountIndex}'`, "0'", "0'"]
89
118
  }, 'publicKey');
90
- return new AccountMetamask(this.provider, accountIndex, address);
119
+ return new AccountMetamask(provider, accountIndex, address);
91
120
  }
92
121
  }
93
- async function _ensureMetamaskSupported() {
94
- const version = await this.provider.request({
122
+ async function _getMetamaskAsInjected() {
123
+ if (!('ethereum' in window) || window.ethereum == null) return;
124
+ const provider = window.ethereum;
125
+ const version = await provider.request({
95
126
  method: 'web3_clientVersion'
96
127
  });
97
128
  if (version == null) throw new InternalError("Can't get Ethereum Provider version");
98
- const metamaskPrefix = 'MetaMask/v';
99
- if (!version.startsWith(metamaskPrefix)) {
100
- throw new UnsupportedPlatformError(`Expected Metamask, got ${version} instead`);
101
- }
102
- const args = [version.slice(metamaskPrefix.length), '12.2.4'];
103
- if (!semverSatisfies(...args)) throw new UnsupportedVersionError('Metamask', ...args);
129
+ if (!version.startsWith(metamaskVersionPrefix)) return;
130
+ return provider;
131
+ }
132
+ async function _getMetamaskOverEip() {
133
+ setTimeout(() => window.dispatchEvent(new Event('eip6963:requestProvider')));
134
+ return new Promise(resolve => {
135
+ const handler = event => {
136
+ if (event.detail.info.rdns !== 'io.metamask') return;
137
+ window.removeEventListener('eip6963:announceProvider', handler);
138
+ resolve(event.detail.provider);
139
+ };
140
+ window.addEventListener('eip6963:announceProvider', handler);
141
+ setTimeout(() => {
142
+ window.removeEventListener('eip6963:announceProvider', handler);
143
+ resolve(undefined);
144
+ }, 500);
145
+ });
104
146
  }
105
- async function _ensureReady() {
147
+ async function _getProvider() {
106
148
  var _classPrivateFieldGet2;
107
- (_classPrivateFieldGet2 = _classPrivateFieldGet(_ensureReadyPromise, this)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : _classPrivateFieldSet(_ensureReadyPromise, this, this.ensureReady());
108
- return _classPrivateFieldGet(_ensureReadyPromise, this);
149
+ (_classPrivateFieldGet2 = _classPrivateFieldGet(_providerPromise, this)) !== null && _classPrivateFieldGet2 !== void 0 ? _classPrivateFieldGet2 : _classPrivateFieldSet(_providerPromise, this, (async (_classPrivateFieldGet3, _await$_assertClassBr) => {
150
+ (_classPrivateFieldGet3 = _classPrivateFieldGet(_provider, this)) !== null && _classPrivateFieldGet3 !== void 0 ? _classPrivateFieldGet3 : _classPrivateFieldSet(_provider, this, (_await$_assertClassBr = await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getMetamaskAsInjected).call(this)) !== null && _await$_assertClassBr !== void 0 ? _await$_assertClassBr : await _assertClassBrand(_AccountMetamaskFactory_brand, this, _getMetamaskOverEip).call(this));
151
+ if (_classPrivateFieldGet(_provider, this) == null) {
152
+ throw new UnsupportedPlatformError("Can't find a Metamask extension as an injected provider and over EIP-6963. Ensure that Metamask is installed or setup a provider.");
153
+ }
154
+ const version = await _classPrivateFieldGet(_provider, this).request({
155
+ method: 'web3_clientVersion'
156
+ });
157
+ if (version == null) throw new InternalError("Can't get Ethereum Provider version");
158
+ const args = [version.slice(metamaskVersionPrefix.length), '12.2.4'];
159
+ if (!semverSatisfies(...args)) throw new UnsupportedVersionError('Metamask', ...args);
160
+ return _classPrivateFieldGet(_provider, this);
161
+ })());
162
+ return _classPrivateFieldGet(_providerPromise, this);
109
163
  }
110
164
  //# sourceMappingURL=MetamaskFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MetamaskFactory.js","names":["InternalError","UnsupportedPlatformError","UnsupportedVersionError","semverSatisfies","AccountBaseFactory","AccountMetamask","invokeSnap","snapId","snapMinVersion","snapMaxVersion","_AccountMetamaskFactory_brand","WeakSet","_ensureReadyPromise","WeakMap","AccountMetamaskFactory","constructor","provider","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","window","ethereum","installSnap","_assertClassBrand","_ensureMetamaskSupported","call","details","request","method","params","version","_classPrivateFieldSet","Promise","resolve","ensureReady","snapVersion","getSnapVersion","args","snaps","initialize","accountIndex","_ensureReady","address","derivationPath","metamaskPrefix","startsWith","slice","length","_classPrivateFieldGet2","_classPrivateFieldGet"],"sources":["../../src/account/MetamaskFactory.ts"],"sourcesContent":["import type { BaseProvider } from '@metamask/providers';\nimport {\n InternalError,\n UnsupportedPlatformError,\n UnsupportedVersionError,\n} from '../utils/errors.js';\nimport { Encoded } from '../utils/encoder.js';\nimport semverSatisfies from '../utils/semver-satisfies.js';\nimport AccountBaseFactory from './BaseFactory.js';\nimport AccountMetamask, { invokeSnap, snapId } from './Metamask.js';\n\nconst snapMinVersion = '0.0.9';\nconst snapMaxVersion = '0.1.0';\n\ninterface SnapDetails {\n blocked: boolean;\n enabled: boolean;\n id: typeof snapId;\n version: string;\n initialPermissions: Record<string, unknown>;\n}\n\n/**\n * A factory class that generates instances of AccountMetamask.\n */\nexport default class AccountMetamaskFactory extends AccountBaseFactory {\n readonly provider: BaseProvider;\n\n /**\n * @param provider - Connection to MetaMask to use\n */\n constructor(provider?: BaseProvider) {\n super();\n if (provider != null) {\n this.provider = provider;\n return;\n }\n if (window == null) {\n throw new UnsupportedPlatformError(\n 'Window object not found, you can run AccountMetamaskFactory only in browser or setup a provider',\n );\n }\n if (!('ethereum' in window) || window.ethereum == null) {\n throw new UnsupportedPlatformError(\n '`ethereum` object not found, you can run AccountMetamaskFactory only with Metamask enabled or setup a provider',\n );\n }\n this.provider = window.ethereum as BaseProvider;\n }\n\n /**\n * It throws an exception if MetaMask has an incompatible version.\n */\n async #ensureMetamaskSupported(): Promise<void> {\n const version = await this.provider.request<string>({ method: 'web3_clientVersion' });\n if (version == null) throw new InternalError(\"Can't get Ethereum Provider version\");\n const metamaskPrefix = 'MetaMask/v';\n if (!version.startsWith(metamaskPrefix)) {\n throw new UnsupportedPlatformError(`Expected Metamask, got ${version} instead`);\n }\n const args = [version.slice(metamaskPrefix.length), '12.2.4'] as const;\n if (!semverSatisfies(...args)) throw new UnsupportedVersionError('Metamask', ...args);\n }\n\n #ensureReadyPromise?: Promise<void>;\n\n /**\n * Request MetaMask to install Aeternity snap.\n */\n async installSnap(): Promise<SnapDetails> {\n await this.#ensureMetamaskSupported();\n const details = (await this.provider.request({\n method: 'wallet_requestSnaps',\n params: { [snapId]: { version: snapMinVersion } },\n })) as { [key in typeof snapId]: SnapDetails };\n this.#ensureReadyPromise = Promise.resolve();\n return details[snapId];\n }\n\n /**\n * It throws an exception if MetaMask or Aeternity snap has an incompatible version or is not\n * installed.\n */\n async ensureReady(): Promise<void> {\n const snapVersion = await this.getSnapVersion();\n const args = [snapVersion, snapMinVersion, snapMaxVersion] as const;\n if (!semverSatisfies(...args))\n throw new UnsupportedVersionError('Aeternity snap in MetaMask', ...args);\n this.#ensureReadyPromise = Promise.resolve();\n }\n\n async #ensureReady(): Promise<void> {\n this.#ensureReadyPromise ??= this.ensureReady();\n return this.#ensureReadyPromise;\n }\n\n /**\n * @returns the version of snap installed in MetaMask\n */\n async getSnapVersion(): Promise<string> {\n await this.#ensureMetamaskSupported();\n const snaps = (await this.provider.request({ method: 'wallet_getSnaps' })) as Record<\n string,\n { version: string }\n >;\n const version = snaps[snapId]?.version;\n if (version == null)\n throw new UnsupportedPlatformError('Aeternity snap is not installed to MetaMask');\n return version;\n }\n\n /**\n * Get an instance of AccountMetaMask for a given account index.\n * @param accountIndex - Index of account\n */\n async initialize(accountIndex: number): Promise<AccountMetamask> {\n await this.#ensureReady();\n const address = await invokeSnap<Encoded.AccountAddress>(\n this.provider,\n 'getPublicKey',\n { derivationPath: [`${accountIndex}'`, \"0'\", \"0'\"] },\n 'publicKey',\n );\n return new AccountMetamask(this.provider, accountIndex, address);\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MetamaskFactory.js","names":["InternalError","UnsupportedPlatformError","UnsupportedVersionError","semverSatisfies","AccountBaseFactory","AccountMetamask","invokeSnap","snapId","snapMinVersion","snapMaxVersion","metamaskVersionPrefix","_provider","WeakMap","_AccountMetamaskFactory_brand","WeakSet","_providerPromise","AccountMetamaskFactory","provider","_classPrivateFieldGet","constructor","_classPrivateMethodInitSpec","_classPrivateFieldInitSpec","_classPrivateFieldSet","window","installSnap","_assertClassBrand","_getProvider","call","details","request","method","params","version","requestSnap","ensureReady","snapVersion","getSnapVersion","args","snaps","initialize","accountIndex","address","derivationPath","_getMetamaskAsInjected","ethereum","startsWith","_getMetamaskOverEip","setTimeout","dispatchEvent","Event","Promise","resolve","handler","event","detail","info","rdns","removeEventListener","addEventListener","undefined","_classPrivateFieldGet2","_classPrivateFieldGet3","_await$_assertClassBr","slice","length"],"sources":["../../src/account/MetamaskFactory.ts"],"sourcesContent":["import type { BaseProvider } from '@metamask/providers';\nimport {\n InternalError,\n UnsupportedPlatformError,\n UnsupportedVersionError,\n} from '../utils/errors.js';\nimport { Encoded } from '../utils/encoder.js';\nimport semverSatisfies from '../utils/semver-satisfies.js';\nimport AccountBaseFactory from './BaseFactory.js';\nimport AccountMetamask, { invokeSnap, snapId } from './Metamask.js';\n\nconst snapMinVersion = '0.0.9';\nconst snapMaxVersion = '0.1.0';\nconst metamaskVersionPrefix = 'MetaMask/v';\n\ninterface SnapDetails {\n blocked: boolean;\n enabled: boolean;\n id: typeof snapId;\n version: string;\n initialPermissions: Record<string, unknown>;\n}\n\n/**\n * A factory class that generates instances of AccountMetamask.\n * @see {@link https://www.npmjs.com/package/@aeternity-snap/plugin | Aeternity snap}\n * @category account\n */\nexport default class AccountMetamaskFactory extends AccountBaseFactory {\n // TODO: remove after removing `provider`\n #provider: BaseProvider | undefined;\n\n /**\n * @deprecated this class is not intended to provide raw access to the provider\n */\n get provider(): BaseProvider {\n if (this.#provider == null) throw new UnsupportedPlatformError('Metamask is not detected yet');\n return this.#provider;\n }\n\n async #getMetamaskAsInjected(): Promise<BaseProvider | undefined> {\n if (!('ethereum' in window) || window.ethereum == null) return;\n const provider = window.ethereum as BaseProvider;\n const version = await provider.request<string>({ method: 'web3_clientVersion' });\n if (version == null) throw new InternalError(\"Can't get Ethereum Provider version\");\n if (!version.startsWith(metamaskVersionPrefix)) return;\n return provider;\n }\n\n async #getMetamaskOverEip6963(): Promise<BaseProvider | undefined> {\n setTimeout(() => window.dispatchEvent(new Event('eip6963:requestProvider')));\n return new Promise<BaseProvider | undefined>((resolve) => {\n const handler = (\n event: CustomEvent<{ info: { rdns: string }; provider: BaseProvider }>,\n ): void => {\n if (event.detail.info.rdns !== 'io.metamask') return;\n window.removeEventListener('eip6963:announceProvider', handler);\n resolve(event.detail.provider);\n };\n window.addEventListener('eip6963:announceProvider', handler);\n setTimeout(() => {\n window.removeEventListener('eip6963:announceProvider', handler);\n resolve(undefined);\n }, 500);\n });\n }\n\n #providerPromise: Promise<BaseProvider> | undefined;\n\n async #getProvider(): Promise<BaseProvider> {\n this.#providerPromise ??= (async () => {\n this.#provider ??=\n (await this.#getMetamaskAsInjected()) ?? (await this.#getMetamaskOverEip6963());\n if (this.#provider == null) {\n throw new UnsupportedPlatformError(\n \"Can't find a Metamask extension as an injected provider and over EIP-6963. Ensure that Metamask is installed or setup a provider.\",\n );\n }\n const version = await this.#provider.request<string>({ method: 'web3_clientVersion' });\n if (version == null) throw new InternalError(\"Can't get Ethereum Provider version\");\n const args = [version.slice(metamaskVersionPrefix.length), '12.2.4'] as const;\n if (!semverSatisfies(...args)) throw new UnsupportedVersionError('Metamask', ...args);\n return this.#provider;\n })();\n return this.#providerPromise;\n }\n\n /**\n * @param provider - Connection to MetaMask to use\n */\n constructor(provider?: BaseProvider) {\n super();\n this.#provider = provider;\n if (this.#provider == null && window == null) {\n throw new UnsupportedPlatformError(\n 'Window object not found, you can run AccountMetamaskFactory only in browser or setup a provider',\n );\n }\n }\n\n /**\n * Request MetaMask to install Aeternity snap.\n * @deprecated use `requestSnap` instead\n */\n async installSnap(): Promise<SnapDetails> {\n const provider = await this.#getProvider();\n const details = (await provider.request({\n method: 'wallet_requestSnaps',\n params: { [snapId]: { version: snapMinVersion } },\n })) as { [key in typeof snapId]: SnapDetails };\n return details[snapId];\n }\n\n /**\n * Request MetaMask to install Aeternity snap or connect it to the current aepp.\n * MetaMask can have only one Aeternity snap version installed at a time.\n * This method is intended to upgrade the snap to a specified version if needed by the aepp.\n * If Aeternity snap is installed but wasn't used by the aepp, then the user still needs to approve the connection.\n * If the currently installed version corresponds to the version range, then the snap won't be upgraded.\n * To downgrade the snap, the user must manually uninstall the current version.\n * @param version - Snap version range (e.g. `1`, `0.1.*`, `^0.0.9`, `~0.0.9`; `>=0.0.9 <0.1.0`)\n * (default: a version range supported by sdk)\n */\n async requestSnap(version = `>=${snapMinVersion} <${snapMaxVersion}`): Promise<SnapDetails> {\n const provider = await this.#getProvider();\n const details = (await provider.request({\n method: 'wallet_requestSnaps',\n params: { [snapId]: { version } },\n })) as { [key in typeof snapId]: SnapDetails };\n return details[snapId];\n }\n\n /**\n * It throws an exception if MetaMask or Aeternity snap has an incompatible version or is not\n * installed or is not connected to the aepp.\n * @deprecated use `requestSnap` instead\n */\n async ensureReady(): Promise<void> {\n const snapVersion = await this.getSnapVersion();\n const args = [snapVersion, snapMinVersion, snapMaxVersion] as const;\n if (!semverSatisfies(...args))\n throw new UnsupportedVersionError('Aeternity snap in MetaMask', ...args);\n }\n\n /**\n * @returns the version of snap installed in MetaMask\n */\n async getSnapVersion(): Promise<string> {\n const provider = await this.#getProvider();\n const snaps = (await provider.request({ method: 'wallet_getSnaps' })) as Record<\n string,\n { version: string }\n >;\n const version = snaps[snapId]?.version;\n if (version == null)\n throw new UnsupportedPlatformError(\n 'Aeternity snap is not installed to MetaMask or not connected to this aepp',\n );\n return version;\n }\n\n /**\n * Get an instance of AccountMetaMask for a given account index.\n * @param accountIndex - Index of account\n */\n async initialize(accountIndex: number): Promise<AccountMetamask> {\n await this.requestSnap();\n const provider = await this.#getProvider();\n const address = await invokeSnap<Encoded.AccountAddress>(\n provider,\n 'getPublicKey',\n { derivationPath: [`${accountIndex}'`, \"0'\", \"0'\"] },\n 'publicKey',\n );\n return new AccountMetamask(provider, accountIndex, address);\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -14,22 +14,32 @@ interface Wallet {
14
14
  }
15
15
  /**
16
16
  * A factory class that generates instances of AccountMemory based on provided mnemonic phrase.
17
+ * @category account
17
18
  */
18
19
  export default class AccountMnemonicFactory extends AccountBaseFactory {
19
20
  #private;
20
21
  /**
21
- * @param mnemonicOrWallet - BIP39-compatible mnemonic phrase or a wallet derived from mnemonic
22
+ * @param mnemonicOrWalletOrSeed - BIP39-compatible mnemonic phrase or a wallet/seed derived from
23
+ * mnemonic
22
24
  */
23
- constructor(mnemonicOrWallet: string | Wallet);
25
+ constructor(mnemonicOrWalletOrSeed: string | Wallet | Uint8Array);
24
26
  /**
25
27
  * Get a wallet to initialize AccountMnemonicFactory instead mnemonic phrase.
26
28
  * In comparison with mnemonic, the wallet can be used to derive aeternity accounts only.
27
29
  */
28
30
  getWallet(): Promise<Wallet>;
31
+ /**
32
+ * The same as `getWallet` but synchronous.
33
+ */
34
+ getWalletSync(): Wallet;
29
35
  /**
30
36
  * Get an instance of AccountMemory for a given account index.
31
37
  * @param accountIndex - Index of account
32
38
  */
33
39
  initialize(accountIndex: number): Promise<AccountMemory>;
40
+ /**
41
+ * The same as `initialize` but synchronous.
42
+ */
43
+ initializeSync(accountIndex: number): AccountMemory;
34
44
  }
35
45
  export {};
@@ -5,13 +5,13 @@ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("C
5
5
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
6
6
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
7
7
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); }
8
- import { mnemonicToSeed } from '@scure/bip39';
8
+ import { mnemonicToSeed, mnemonicToSeedSync } from '@scure/bip39';
9
9
  import tweetnaclAuth from 'tweetnacl-auth';
10
10
  import AccountBaseFactory from './BaseFactory.js';
11
11
  import AccountMemory from './Memory.js';
12
12
  import { encode, Encoding, decode } from '../utils/encoder.js';
13
13
  import { concatBuffers } from '../utils/other.js';
14
- import { InternalError } from '../utils/errors.js';
14
+ import { ArgumentError } from '../utils/errors.js';
15
15
  export const ED25519_CURVE = _Buffer.from('ed25519 seed');
16
16
  const HARDENED_OFFSET = 0x80000000;
17
17
  export function deriveKey(message, key) {
@@ -34,55 +34,79 @@ export function derivePathFromKey(key, segments) {
34
34
  return deriveKey(data, chainCode);
35
35
  }, key);
36
36
  }
37
- var _mnemonic = /*#__PURE__*/new WeakMap();
38
- var _wallet = /*#__PURE__*/new WeakMap();
37
+ var _mnemonicOrWalletOrSeed = /*#__PURE__*/new WeakMap();
39
38
  var _AccountMnemonicFactory_brand = /*#__PURE__*/new WeakSet();
40
39
  /**
41
40
  * A factory class that generates instances of AccountMemory based on provided mnemonic phrase.
41
+ * @category account
42
42
  */
43
43
  export default class AccountMnemonicFactory extends AccountBaseFactory {
44
44
  /**
45
- * @param mnemonicOrWallet - BIP39-compatible mnemonic phrase or a wallet derived from mnemonic
45
+ * @param mnemonicOrWalletOrSeed - BIP39-compatible mnemonic phrase or a wallet/seed derived from
46
+ * mnemonic
46
47
  */
47
- constructor(mnemonicOrWallet) {
48
+ constructor(mnemonicOrWalletOrSeed) {
48
49
  super();
49
50
  _classPrivateMethodInitSpec(this, _AccountMnemonicFactory_brand);
50
- _classPrivateFieldInitSpec(this, _mnemonic, void 0);
51
- _classPrivateFieldInitSpec(this, _wallet, void 0);
52
- if (typeof mnemonicOrWallet === 'string') _classPrivateFieldSet(_mnemonic, this, mnemonicOrWallet);else _classPrivateFieldSet(_wallet, this, mnemonicOrWallet);
51
+ _classPrivateFieldInitSpec(this, _mnemonicOrWalletOrSeed, void 0);
52
+ _classPrivateFieldSet(_mnemonicOrWalletOrSeed, this, mnemonicOrWalletOrSeed);
53
53
  }
54
-
55
54
  /**
56
55
  * Get a wallet to initialize AccountMnemonicFactory instead mnemonic phrase.
57
56
  * In comparison with mnemonic, the wallet can be used to derive aeternity accounts only.
58
57
  */
59
58
  async getWallet() {
60
- if (_classPrivateFieldGet(_wallet, this) != null) return _classPrivateFieldGet(_wallet, this);
61
- if (_classPrivateFieldGet(_mnemonic, this) == null) throw new InternalError('AccountMnemonicFactory should be initialized with mnemonic or wallet');
62
- const seed = await mnemonicToSeed(_classPrivateFieldGet(_mnemonic, this));
63
- const masterKey = deriveKey(seed, ED25519_CURVE);
64
- const walletKey = derivePathFromKey(masterKey, [44, 457]);
65
- _classPrivateFieldSet(_wallet, this, {
66
- secretKey: encode(walletKey.secretKey, Encoding.Bytearray),
67
- chainCode: encode(walletKey.chainCode, Encoding.Bytearray)
68
- });
69
- return _classPrivateFieldGet(_wallet, this);
59
+ return _assertClassBrand(_AccountMnemonicFactory_brand, this, _getWallet).call(this, false);
60
+ }
61
+
62
+ /**
63
+ * The same as `getWallet` but synchronous.
64
+ */
65
+ getWalletSync() {
66
+ return _assertClassBrand(_AccountMnemonicFactory_brand, this, _getWallet).call(this, true);
70
67
  }
71
68
  /**
72
69
  * Get an instance of AccountMemory for a given account index.
73
70
  * @param accountIndex - Index of account
74
71
  */
75
72
  async initialize(accountIndex) {
76
- return new AccountMemory(await _assertClassBrand(_AccountMnemonicFactory_brand, this, _getAccountSecretKey).call(this, accountIndex));
73
+ const wallet = await this.getWallet();
74
+ return _assertClassBrand(_AccountMnemonicFactory_brand, this, _getAccountByWallet).call(this, accountIndex, wallet);
75
+ }
76
+
77
+ /**
78
+ * The same as `initialize` but synchronous.
79
+ */
80
+ initializeSync(accountIndex) {
81
+ const wallet = this.getWalletSync();
82
+ return _assertClassBrand(_AccountMnemonicFactory_brand, this, _getAccountByWallet).call(this, accountIndex, wallet);
83
+ }
84
+ }
85
+ function _getWallet(sync) {
86
+ const setWalletBySeed = seed => {
87
+ const masterKey = deriveKey(seed, ED25519_CURVE);
88
+ const walletKey = derivePathFromKey(masterKey, [44, 457]);
89
+ _classPrivateFieldSet(_mnemonicOrWalletOrSeed, this, {
90
+ secretKey: encode(walletKey.secretKey, Encoding.Bytearray),
91
+ chainCode: encode(walletKey.chainCode, Encoding.Bytearray)
92
+ });
93
+ return _classPrivateFieldGet(_mnemonicOrWalletOrSeed, this);
94
+ };
95
+ if (ArrayBuffer.isView(_classPrivateFieldGet(_mnemonicOrWalletOrSeed, this))) {
96
+ if (_classPrivateFieldGet(_mnemonicOrWalletOrSeed, this).length !== 64) {
97
+ throw new ArgumentError('seed length', 64, _classPrivateFieldGet(_mnemonicOrWalletOrSeed, this).length);
98
+ }
99
+ return setWalletBySeed(_classPrivateFieldGet(_mnemonicOrWalletOrSeed, this));
77
100
  }
101
+ if (typeof _classPrivateFieldGet(_mnemonicOrWalletOrSeed, this) === 'object') return _classPrivateFieldGet(_mnemonicOrWalletOrSeed, this);
102
+ return sync ? setWalletBySeed(mnemonicToSeedSync(_classPrivateFieldGet(_mnemonicOrWalletOrSeed, this))) : mnemonicToSeed(_classPrivateFieldGet(_mnemonicOrWalletOrSeed, this)).then(setWalletBySeed);
78
103
  }
79
- async function _getAccountSecretKey(accountIndex) {
80
- const wallet = await this.getWallet();
104
+ function _getAccountByWallet(accountIndex, wallet) {
81
105
  const walletKey = {
82
106
  secretKey: decode(wallet.secretKey),
83
107
  chainCode: decode(wallet.chainCode)
84
108
  };
85
109
  const raw = derivePathFromKey(walletKey, [accountIndex, 0, 0]).secretKey;
86
- return encode(raw, Encoding.AccountSecretKey);
110
+ return new AccountMemory(encode(raw, Encoding.AccountSecretKey));
87
111
  }
88
112
  //# sourceMappingURL=MnemonicFactory.js.map