@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.
- package/LICENSE +1 -1
- package/README.md +11 -19
- package/dist/aepp-sdk.browser-script.cjs +1 -1
- package/dist/aepp-sdk.browser-script.cjs.LICENSE.txt +2 -0
- package/dist/aepp-sdk.browser-script.cjs.map +1 -1
- package/dist/aepp-sdk.browser.cjs +1 -1
- package/dist/aepp-sdk.browser.cjs.map +1 -1
- package/dist/aepp-sdk.cjs +11678 -6969
- package/dist/aepp-sdk.cjs.map +1 -1
- package/es/AeSdkBase.d.ts +10 -1
- package/es/AeSdkBase.js +12 -2
- package/es/AeSdkBase.js.map +1 -1
- package/es/AeSdkMethods.d.ts +1 -1
- package/es/AeSdkMethods.js.map +1 -1
- package/es/AeSdkWallet.js +1 -1
- package/es/AeSdkWallet.js.map +1 -1
- package/es/Middleware.d.ts +5 -1
- package/es/Middleware.js +7 -2
- package/es/Middleware.js.map +1 -1
- package/es/MiddlewareSubscriber.d.ts +3 -0
- package/es/MiddlewareSubscriber.js +4 -0
- package/es/MiddlewareSubscriber.js.map +1 -1
- package/es/Node.d.ts +6 -1
- package/es/Node.js +28 -4
- package/es/Node.js.map +1 -1
- package/es/account/Base.d.ts +12 -0
- package/es/account/Base.js +1 -0
- package/es/account/Base.js.map +1 -1
- package/es/account/BaseFactory.d.ts +1 -0
- package/es/account/BaseFactory.js +1 -0
- package/es/account/BaseFactory.js.map +1 -1
- package/es/account/Generalized.d.ts +5 -0
- package/es/account/Generalized.js +9 -0
- package/es/account/Generalized.js.map +1 -1
- package/es/account/Ledger.d.ts +5 -0
- package/es/account/Ledger.js +9 -0
- package/es/account/Ledger.js.map +1 -1
- package/es/account/LedgerFactory.d.ts +2 -0
- package/es/account/LedgerFactory.js +10 -4
- package/es/account/LedgerFactory.js.map +1 -1
- package/es/account/Memory.d.ts +5 -0
- package/es/account/Memory.js +14 -5
- package/es/account/Memory.js.map +1 -1
- package/es/account/Metamask.d.ts +8 -0
- package/es/account/Metamask.js +13 -0
- package/es/account/Metamask.js.map +1 -1
- package/es/account/MetamaskFactory.d.ts +20 -2
- package/es/account/MetamaskFactory.js +93 -39
- package/es/account/MetamaskFactory.js.map +1 -1
- package/es/account/MnemonicFactory.d.ts +12 -2
- package/es/account/MnemonicFactory.js +48 -24
- package/es/account/MnemonicFactory.js.map +1 -1
- package/es/account/Rpc.d.ts +5 -0
- package/es/account/Rpc.js +8 -0
- package/es/account/Rpc.js.map +1 -1
- package/es/aens.d.ts +25 -5
- package/es/aens.js +52 -18
- package/es/aens.js.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.js.map +1 -1
- package/es/apis/middleware/middleware.d.ts +99 -9
- package/es/apis/middleware/middleware.js +560 -91
- package/es/apis/middleware/middleware.js.map +1 -1
- package/es/apis/middleware/models/index.d.ts +1267 -1582
- package/es/apis/middleware/models/index.js +1 -1363
- package/es/apis/middleware/models/index.js.map +1 -1
- package/es/apis/middleware/models/mappers.d.ts +126 -56
- package/es/apis/middleware/models/mappers.js +6250 -2989
- package/es/apis/middleware/models/mappers.js.map +1 -1
- package/es/apis/middleware/models/parameters.d.ts +54 -33
- package/es/apis/middleware/models/parameters.js +389 -134
- package/es/apis/middleware/models/parameters.js.map +1 -1
- package/es/apis/node/models/index.d.ts +60 -15
- package/es/apis/node/models/index.js.map +1 -1
- package/es/apis/node/models/mappers.d.ts +3 -0
- package/es/apis/node/models/mappers.js +130 -2
- package/es/apis/node/models/mappers.js.map +1 -1
- package/es/apis/node/node.d.ts +13 -1
- package/es/apis/node/node.js +54 -0
- package/es/apis/node/node.js.map +1 -1
- package/es/chain.d.ts +19 -6
- package/es/chain.js +30 -24
- package/es/chain.js.map +1 -1
- package/es/channel/Contract.d.ts +6 -3
- package/es/channel/Contract.js +5 -2
- package/es/channel/Contract.js.map +1 -1
- package/es/channel/Spend.d.ts +1 -1
- package/es/channel/Spend.js.map +1 -1
- package/es/channel/handlers.js +1 -2
- package/es/channel/handlers.js.map +1 -1
- package/es/channel/internal.d.ts +1 -1
- package/es/channel/internal.js +2 -2
- package/es/channel/internal.js.map +1 -1
- package/es/contract/Contract.d.ts +13 -2
- package/es/contract/Contract.js +22 -12
- package/es/contract/Contract.js.map +1 -1
- package/es/contract/compiler/Base.d.ts +1 -0
- package/es/contract/compiler/Base.js +1 -0
- package/es/contract/compiler/Base.js.map +1 -1
- package/es/contract/compiler/Cli.d.ts +2 -1
- package/es/contract/compiler/Cli.js +11 -9
- package/es/contract/compiler/Cli.js.map +1 -1
- package/es/contract/compiler/Http.d.ts +2 -1
- package/es/contract/compiler/Http.js +3 -2
- package/es/contract/compiler/Http.js.map +1 -1
- package/es/contract/compiler/getFileSystem.d.ts +1 -0
- package/es/contract/compiler/getFileSystem.js +1 -0
- package/es/contract/compiler/getFileSystem.js.map +1 -1
- package/es/contract/ga.d.ts +3 -3
- package/es/contract/ga.js +3 -3
- package/es/contract/ga.js.map +1 -1
- package/es/index-browser.d.ts +32 -2
- package/es/index-browser.js +32 -2
- package/es/index-browser.js.map +1 -1
- package/es/oracle/Oracle.d.ts +10 -1
- package/es/oracle/Oracle.js +16 -6
- package/es/oracle/Oracle.js.map +1 -1
- package/es/oracle/OracleBase.d.ts +15 -2
- package/es/oracle/OracleBase.js +23 -1
- package/es/oracle/OracleBase.js.map +1 -1
- package/es/oracle/OracleClient.d.ts +3 -0
- package/es/oracle/OracleClient.js +6 -1
- package/es/oracle/OracleClient.js.map +1 -1
- package/es/spend.js +1 -1
- package/es/spend.js.map +1 -1
- package/es/tx/builder/common.js +6 -3
- package/es/tx/builder/common.js.map +1 -1
- package/es/tx/builder/constants.d.ts +53 -3
- package/es/tx/builder/constants.js +62 -12
- package/es/tx/builder/constants.js.map +1 -1
- package/es/tx/builder/delegation/schema.js +15 -0
- package/es/tx/builder/delegation/schema.js.map +1 -1
- package/es/tx/builder/entry/constants.d.ts +4 -1
- package/es/tx/builder/entry/constants.js +10 -1
- package/es/tx/builder/entry/constants.js.map +1 -1
- package/es/tx/builder/entry/index.js +1 -2
- package/es/tx/builder/entry/index.js.map +1 -1
- package/es/tx/builder/field-types/ct-version.js +1 -2
- package/es/tx/builder/field-types/ct-version.js.map +1 -1
- package/es/tx/builder/field-types/fee.d.ts +1 -1
- package/es/tx/builder/field-types/fee.js +4 -4
- package/es/tx/builder/field-types/fee.js.map +1 -1
- package/es/tx/builder/field-types/gas-price.d.ts +3 -0
- package/es/tx/builder/field-types/gas-price.js +1 -1
- package/es/tx/builder/field-types/gas-price.js.map +1 -1
- package/es/tx/builder/field-types/name-fee.js +1 -1
- package/es/tx/builder/field-types/name-fee.js.map +1 -1
- package/es/tx/builder/field-types/name-id.js +2 -2
- package/es/tx/builder/field-types/name-id.js.map +1 -1
- package/es/tx/builder/field-types/nonce.d.ts +1 -1
- package/es/tx/builder/field-types/nonce.js.map +1 -1
- package/es/tx/builder/field-types/pointers.js +3 -3
- package/es/tx/builder/field-types/pointers.js.map +1 -1
- package/es/tx/builder/field-types/ttl.js +1 -2
- package/es/tx/builder/field-types/ttl.js.map +1 -1
- package/es/tx/builder/helpers.d.ts +18 -12
- package/es/tx/builder/helpers.js +25 -17
- package/es/tx/builder/helpers.js.map +1 -1
- package/es/tx/builder/schema.d.ts +27 -24
- package/es/tx/builder/schema.generated.d.ts +12 -12
- package/es/tx/builder/schema.generated.js.map +1 -1
- package/es/tx/builder/schema.js +5 -3
- package/es/tx/builder/schema.js.map +1 -1
- package/es/tx/execution-cost.d.ts +3 -0
- package/es/tx/execution-cost.js +7 -4
- package/es/tx/execution-cost.js.map +1 -1
- package/es/tx/transaction-signer.d.ts +1 -0
- package/es/tx/transaction-signer.js +1 -0
- package/es/tx/transaction-signer.js.map +1 -1
- package/es/tx/validator.js +4 -3
- package/es/tx/validator.js.map +1 -1
- package/es/utils/MiddlewarePage.d.ts +4 -3
- package/es/utils/MiddlewarePage.js.map +1 -1
- package/es/utils/amount-formatter.d.ts +15 -1
- package/es/utils/amount-formatter.js +17 -1
- package/es/utils/amount-formatter.js.map +1 -1
- package/es/utils/autorest.d.ts +1 -1
- package/es/utils/autorest.js +10 -4
- package/es/utils/autorest.js.map +1 -1
- package/es/utils/bignumber.d.ts +1 -1
- package/es/utils/bignumber.js +1 -1
- package/es/utils/bignumber.js.map +1 -1
- package/es/utils/bytes.d.ts +3 -1
- package/es/utils/bytes.js +3 -1
- package/es/utils/bytes.js.map +1 -1
- package/es/utils/crypto.d.ts +48 -15
- package/es/utils/crypto.js +80 -29
- package/es/utils/crypto.js.map +1 -1
- package/es/utils/encoder-types.d.ts +1 -1
- package/es/utils/encoder-types.js +1 -1
- package/es/utils/encoder-types.js.map +1 -1
- package/es/utils/encoder.d.ts +2 -0
- package/es/utils/encoder.js +2 -0
- package/es/utils/encoder.js.map +1 -1
- package/es/utils/errors.d.ts +2 -2
- package/es/utils/errors.js +2 -2
- package/es/utils/errors.js.map +1 -1
- package/es/utils/json-big.js +1 -1
- package/es/utils/json-big.js.map +1 -1
- package/es/utils/jwt.js +3 -3
- package/es/utils/jwt.js.map +1 -1
- package/es/utils/typed-data.d.ts +5 -0
- package/es/utils/typed-data.js +6 -0
- package/es/utils/typed-data.js.map +1 -1
- package/package.json +50 -51
package/es/account/Memory.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Memory.js","names":["nacl","AccountBase","hash","
|
|
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":[]}
|
package/es/account/Metamask.d.ts
CHANGED
|
@@ -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 }?: {
|
package/es/account/Metamask.js
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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,
|
|
46
|
-
const details = await
|
|
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
|
-
|
|
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,
|
|
73
|
-
const snaps = await
|
|
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
|
|
87
|
-
const
|
|
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(
|
|
119
|
+
return new AccountMetamask(provider, accountIndex, address);
|
|
91
120
|
}
|
|
92
121
|
}
|
|
93
|
-
async function
|
|
94
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
147
|
+
async function _getProvider() {
|
|
106
148
|
var _classPrivateFieldGet2;
|
|
107
|
-
(_classPrivateFieldGet2 = _classPrivateFieldGet(
|
|
108
|
-
|
|
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":";;;;;;AACA,SACEA,aAAa,EACbC,wBAAwB,EACxBC,uBAAuB,QAClB,oBAAoB;AAE3B,OAAOC,eAAe,MAAM,8BAA8B;AAC1D,OAAOC,kBAAkB,MAAM,kBAAkB;AACjD,OAAOC,eAAe,IAAIC,UAAU,EAAEC,MAAM,QAAQ,eAAe;AAEnE,MAAMC,cAAc,GAAG,OAAO;AAC9B,MAAMC,cAAc,GAAG,OAAO;AAAC,IAAAC,6BAAA,oBAAAC,OAAA;AAAA,IAAAC,mBAAA,oBAAAC,OAAA;AAU/B;AACA;AACA;AACA,eAAe,MAAMC,sBAAsB,SAASV,kBAAkB,CAAC;EAGrE;AACF;AACA;EACEW,WAAWA,CAACC,QAAuB,EAAE;IACnC,KAAK,CAAC,CAAC;IAkBT;AACF;AACA;IAFEC,2BAAA,OAAAP,6BAAA;IAcAQ,0BAAA,OAAAN,mBAAmB;IA/BjB,IAAII,QAAQ,IAAI,IAAI,EAAE;MACpB,IAAI,CAACA,QAAQ,GAAGA,QAAQ;MACxB;IACF;IACA,IAAIG,MAAM,IAAI,IAAI,EAAE;MAClB,MAAM,IAAIlB,wBAAwB,CAChC,iGACF,CAAC;IACH;IACA,IAAI,EAAE,UAAU,IAAIkB,MAAM,CAAC,IAAIA,MAAM,CAACC,QAAQ,IAAI,IAAI,EAAE;MACtD,MAAM,IAAInB,wBAAwB,CAChC,gHACF,CAAC;IACH;IACA,IAAI,CAACe,QAAQ,GAAGG,MAAM,CAACC,QAAwB;EACjD;EAkBA;AACF;AACA;EACE,MAAMC,WAAWA,CAAA,EAAyB;IACxC,MAAMC,iBAAA,CAAAZ,6BAAA,MAAI,EAACa,wBAAuB,CAAC,CAAAC,IAAA,CAA7B,IAAI,CAA2B;IACrC,MAAMC,OAAO,GAAI,MAAM,IAAI,CAACT,QAAQ,CAACU,OAAO,CAAC;MAC3CC,MAAM,EAAE,qBAAqB;MAC7BC,MAAM,EAAE;QAAE,CAACrB,MAAM,GAAG;UAAEsB,OAAO,EAAErB;QAAe;MAAE;IAClD,CAAC,CAA6C;IAC9CsB,qBAAA,CAAKlB,mBAAmB,EAAxB,IAAI,EAAuBmB,OAAO,CAACC,OAAO,CAAC,CAApB,CAAC;IACxB,OAAOP,OAAO,CAAClB,MAAM,CAAC;EACxB;;EAEA;AACF;AACA;AACA;EACE,MAAM0B,WAAWA,CAAA,EAAkB;IACjC,MAAMC,WAAW,GAAG,MAAM,IAAI,CAACC,cAAc,CAAC,CAAC;IAC/C,MAAMC,IAAI,GAAG,CAACF,WAAW,EAAE1B,cAAc,EAAEC,cAAc,CAAU;IACnE,IAAI,CAACN,eAAe,CAAC,GAAGiC,IAAI,CAAC,EAC3B,MAAM,IAAIlC,uBAAuB,CAAC,4BAA4B,EAAE,GAAGkC,IAAI,CAAC;IAC1EN,qBAAA,CAAKlB,mBAAmB,EAAxB,IAAI,EAAuBmB,OAAO,CAACC,OAAO,CAAC,CAApB,CAAC;EAC1B;EAOA;AACF;AACA;EACE,MAAMG,cAAcA,CAAA,EAAoB;IACtC,MAAMb,iBAAA,CAAAZ,6BAAA,MAAI,EAACa,wBAAuB,CAAC,CAAAC,IAAA,CAA7B,IAAI,CAA2B;IACrC,MAAMa,KAAK,GAAI,MAAM,IAAI,CAACrB,QAAQ,CAACU,OAAO,CAAC;MAAEC,MAAM,EAAE;IAAkB,CAAC,CAGvE;IACD,MAAME,OAAO,GAAGQ,KAAK,CAAC9B,MAAM,CAAC,EAAEsB,OAAO;IACtC,IAAIA,OAAO,IAAI,IAAI,EACjB,MAAM,IAAI5B,wBAAwB,CAAC,6CAA6C,CAAC;IACnF,OAAO4B,OAAO;EAChB;;EAEA;AACF;AACA;AACA;EACE,MAAMS,UAAUA,CAACC,YAAoB,EAA4B;IAC/D,MAAMjB,iBAAA,CAAAZ,6BAAA,MAAI,EAAC8B,YAAW,CAAC,CAAAhB,IAAA,CAAjB,IAAI,CAAe;IACzB,MAAMiB,OAAO,GAAG,MAAMnC,UAAU,CAC9B,IAAI,CAACU,QAAQ,EACb,cAAc,EACd;MAAE0B,cAAc,EAAE,CAAC,GAAGH,YAAY,GAAG,EAAE,IAAI,EAAE,IAAI;IAAE,CAAC,EACpD,WACF,CAAC;IACD,OAAO,IAAIlC,eAAe,CAAC,IAAI,CAACW,QAAQ,EAAEuB,YAAY,EAAEE,OAAO,CAAC;EAClE;AACF;AAAC,eAAAlB,yBAAA,EAxEiD;EAC9C,MAAMM,OAAO,GAAG,MAAM,IAAI,CAACb,QAAQ,CAACU,OAAO,CAAS;IAAEC,MAAM,EAAE;EAAqB,CAAC,CAAC;EACrF,IAAIE,OAAO,IAAI,IAAI,EAAE,MAAM,IAAI7B,aAAa,CAAC,qCAAqC,CAAC;EACnF,MAAM2C,cAAc,GAAG,YAAY;EACnC,IAAI,CAACd,OAAO,CAACe,UAAU,CAACD,cAAc,CAAC,EAAE;IACvC,MAAM,IAAI1C,wBAAwB,CAAC,0BAA0B4B,OAAO,UAAU,CAAC;EACjF;EACA,MAAMO,IAAI,GAAG,CAACP,OAAO,CAACgB,KAAK,CAACF,cAAc,CAACG,MAAM,CAAC,EAAE,QAAQ,CAAU;EACtE,IAAI,CAAC3C,eAAe,CAAC,GAAGiC,IAAI,CAAC,EAAE,MAAM,IAAIlC,uBAAuB,CAAC,UAAU,EAAE,GAAGkC,IAAI,CAAC;AACvF;AAAC,eAAAI,aAAA,EA6BmC;EAAA,IAAAO,sBAAA;EAClC,CAAAA,sBAAA,GAAAC,qBAAA,CAAKpC,mBAAmB,EAAxB,IAAuB,CAAC,cAAAmC,sBAAA,cAAAA,sBAAA,GAAxBjB,qBAAA,CAAKlB,mBAAmB,EAAxB,IAAI,EAAyB,IAAI,CAACqB,WAAW,CAAC,CAAvB,CAAC;EACxB,OAAOe,qBAAA,CAAKpC,mBAAmB,EAAxB,IAAuB,CAAC;AACjC","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
|
|
22
|
+
* @param mnemonicOrWalletOrSeed - BIP39-compatible mnemonic phrase or a wallet/seed derived from
|
|
23
|
+
* mnemonic
|
|
22
24
|
*/
|
|
23
|
-
constructor(
|
|
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 {
|
|
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
|
|
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
|
|
45
|
+
* @param mnemonicOrWalletOrSeed - BIP39-compatible mnemonic phrase or a wallet/seed derived from
|
|
46
|
+
* mnemonic
|
|
46
47
|
*/
|
|
47
|
-
constructor(
|
|
48
|
+
constructor(mnemonicOrWalletOrSeed) {
|
|
48
49
|
super();
|
|
49
50
|
_classPrivateMethodInitSpec(this, _AccountMnemonicFactory_brand);
|
|
50
|
-
_classPrivateFieldInitSpec(this,
|
|
51
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|