@aeternity/aepp-sdk 13.3.1 → 13.3.3
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/bin/aesophia_cli_8 +0 -0
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +50 -45
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdkAepp.mjs +1 -1
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkWallet.mjs +4 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/chain.d.ts +5 -5
- package/es/chain.mjs +18 -20
- package/es/chain.mjs.map +1 -1
- package/es/channel/Base.d.ts +1 -1
- package/es/channel/Base.mjs.map +1 -1
- package/es/channel/internal.d.ts +23 -17
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Contract.mjs +3 -0
- package/es/contract/Contract.mjs.map +1 -1
- package/es/oracle.d.ts +2 -2
- package/es/oracle.mjs +6 -10
- package/es/oracle.mjs.map +1 -1
- package/es/tx/builder/field-types/gas-price.mjs +1 -4
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -1
- package/es/tx/builder/field-types/ttl.d.ts +3 -2
- package/es/tx/builder/field-types/ttl.mjs.map +1 -1
- package/es/tx/builder/helpers.mjs +9 -0
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +69 -46
- package/es/utils/hd-wallet.d.ts +2 -1
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +8 -9
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/package.json +5 -4
- package/src/AeSdkAepp.ts +1 -1
- package/src/AeSdkWallet.ts +2 -1
- package/src/chain.ts +28 -18
- package/src/channel/Base.ts +1 -1
- package/src/channel/internal.ts +24 -17
- package/src/contract/Contract.ts +3 -0
- package/src/oracle.ts +7 -7
- package/src/tx/builder/field-types/gas-price.ts +67 -70
- package/src/tx/builder/field-types/ttl.ts +1 -1
- package/src/tx/builder/helpers.ts +9 -0
- package/src/utils/hd-wallet.ts +5 -3
- package/src/utils/semver-satisfies.ts +14 -13
- package/types-legacy/ts4.2/chain.d.ts +5 -5
- package/types-legacy/ts4.2/channel/Base.d.ts +1 -1
- package/types-legacy/ts4.2/channel/internal.d.ts +23 -17
- package/types-legacy/ts4.2/oracle.d.ts +2 -2
- package/types-legacy/ts4.2/tx/builder/field-types/ttl.d.ts +3 -2
- package/types-legacy/ts4.2/tx/builder/schema.d.ts +69 -46
- package/types-legacy/ts4.2/utils/hd-wallet.d.ts +2 -1
- package/types-legacy/ts4.2/utils/semver-satisfies.d.ts +1 -1
- package/types-legacy/ts4.5/chain.d.ts +5 -5
- package/types-legacy/ts4.5/channel/Base.d.ts +1 -1
- package/types-legacy/ts4.5/channel/internal.d.ts +23 -17
- package/types-legacy/ts4.5/oracle.d.ts +2 -2
- package/types-legacy/ts4.5/tx/builder/field-types/ttl.d.ts +3 -2
- package/types-legacy/ts4.5/tx/builder/schema.d.ts +69 -46
- package/types-legacy/ts4.5/utils/hd-wallet.d.ts +2 -1
- package/types-legacy/ts4.5/utils/semver-satisfies.d.ts +1 -1
package/es/AeSdkAepp.mjs
CHANGED
|
@@ -113,7 +113,7 @@ export default class AeSdkAepp extends AeSdkBase {
|
|
|
113
113
|
* @returns Addresses from wallet
|
|
114
114
|
*/
|
|
115
115
|
async askAddresses() {
|
|
116
|
-
this.
|
|
116
|
+
this._ensureConnected();
|
|
117
117
|
return this.rpcClient.request(METHODS.address, undefined);
|
|
118
118
|
}
|
|
119
119
|
|
package/es/AeSdkAepp.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AeSdkAepp.mjs","names":["AeSdkBase","AccountRpc","decode","RPC_VERSION","RpcClient","METHODS","AlreadyConnectedError","NoWalletConnectedError","UnsubscribedAccountError","UnAuthorizedAccountError","RpcConnectionError","Node","AeSdkAepp","constructor","name","onAddressChange","onDisconnect","onNetworkChange","other","_resolveAccount","account","addresses","address","includes","_ensureConnected","rpcClient","_ensureAccountAccess","_accounts","current","Object","keys","connected","connectToWallet","connection","connectNode","disconnectParams","updateNetwork","params","_params$node","node","url","pool","delete","addNode","client","updateAddress","closeConnection","disconnect","readyToConnect","walletInfo","request","connect","version","disconnectWallet","notify","reason","askAddresses","undefined","subscribeAddress","type","value","result","length"],"sources":["../src/AeSdkAepp.ts"],"sourcesContent":["import AeSdkBase from './AeSdkBase';\nimport { OnAccount } from './AeSdkMethods';\nimport AccountBase from './account/Base';\nimport AccountRpc from './account/Rpc';\nimport { decode, Encoded } from './utils/encoder';\nimport {\n Accounts, RPC_VERSION, WalletInfo, Network, WalletApi, AeppApi, Node as NodeRpc,\n} from './aepp-wallet-communication/rpc/types';\nimport RpcClient from './aepp-wallet-communication/rpc/RpcClient';\nimport { METHODS, SUBSCRIPTION_TYPES } from './aepp-wallet-communication/schema';\nimport {\n AlreadyConnectedError,\n NoWalletConnectedError,\n UnsubscribedAccountError,\n UnAuthorizedAccountError,\n RpcConnectionError,\n} from './utils/errors';\nimport Node from './Node';\nimport BrowserConnection from './aepp-wallet-communication/connection/Browser';\n\n/**\n * RPC handler for AEPP side\n * Contain functionality for wallet interaction and connect it to sdk\n * @category aepp wallet communication\n */\nexport default class AeSdkAepp extends AeSdkBase {\n name: string;\n\n onAddressChange: (a: Accounts) => void;\n\n onDisconnect: (p: any) => void;\n\n onNetworkChange: (a: Network) => void;\n\n rpcClient?: RpcClient<WalletApi, AeppApi>;\n\n _accounts?: Accounts;\n\n /**\n * @param options - Options\n * @param options.name - Aepp name\n * @param options.onAddressChange - Call-back function for update address event\n * @param options.onDisconnect - Call-back function for disconnect event\n * @param options.onNetworkChange - Call-back function for update network event\n */\n constructor({\n name,\n onAddressChange = () => {},\n onDisconnect = () => {},\n onNetworkChange = () => {},\n ...other\n }: {\n name: string;\n onAddressChange?: (a: Accounts) => void;\n onDisconnect?: (p: any) => void;\n onNetworkChange?: (a: Network) => void;\n } & ConstructorParameters<typeof AeSdkBase>[0]) {\n super(other);\n this.onAddressChange = onAddressChange;\n this.onDisconnect = onDisconnect;\n this.onNetworkChange = onNetworkChange;\n this.name = name;\n }\n\n override _resolveAccount(account: OnAccount = this.addresses()[0]): AccountBase {\n if (typeof account === 'string') {\n const address = account as Encoded.AccountAddress;\n decode(address);\n if (!this.addresses().includes(address)) throw new UnAuthorizedAccountError(address);\n this._ensureConnected();\n account = new AccountRpc(this.rpcClient, address);\n }\n if (account == null) this._ensureAccountAccess();\n return super._resolveAccount(account);\n }\n\n override addresses(): Encoded.AccountAddress[] {\n if (this._accounts == null) return [];\n const current = Object.keys(this._accounts.current)[0];\n return [\n ...current != null ? [current] : [], ...Object.keys(this._accounts.connected),\n ] as Encoded.AccountAddress[];\n }\n\n /**\n * Connect to wallet\n * @param connection - Wallet connection object\n * @param options - Options\n * @param options.connectNode - Request wallet to bind node\n * @param options.name - Node name\n */\n async connectToWallet(\n connection: BrowserConnection,\n { connectNode = false, name = 'wallet-node' }: { connectNode?: boolean; name?: string } = {},\n ): Promise<WalletInfo & { node?: NodeRpc }> {\n if (this.rpcClient != null) throw new AlreadyConnectedError('You are already connected to wallet');\n let disconnectParams: any;\n\n const updateNetwork = (params: Network): void => {\n if (connectNode) {\n if (params.node?.url == null) throw new RpcConnectionError('Missing URLs of the Node');\n this.pool.delete(name);\n this.addNode(name, new Node(params.node.url), true);\n }\n this.onNetworkChange(params);\n };\n\n const client = new RpcClient<WalletApi, AeppApi>(\n connection,\n () => {\n delete this.rpcClient;\n delete this._accounts;\n this.onDisconnect(disconnectParams);\n },\n {\n [METHODS.updateAddress]: (params) => {\n this._accounts = params;\n this.onAddressChange(params);\n },\n [METHODS.updateNetwork]: updateNetwork,\n [METHODS.closeConnection]: (params) => {\n disconnectParams = params;\n client.connection.disconnect();\n },\n [METHODS.readyToConnect]: () => {},\n },\n );\n const walletInfo = await client\n .request(METHODS.connect, { name: this.name, version: RPC_VERSION, connectNode });\n updateNetwork(walletInfo);\n this.rpcClient = client;\n return walletInfo;\n }\n\n /**\n * Disconnect from wallet\n */\n disconnectWallet(): void {\n this._ensureConnected();\n this.rpcClient.notify(METHODS.closeConnection, { reason: 'bye' });\n this.rpcClient.connection.disconnect();\n }\n\n /**\n * Ask addresses from wallet\n * @returns Addresses from wallet\n */\n async askAddresses(): Promise<Encoded.AccountAddress[]> {\n this._ensureAccountAccess();\n return this.rpcClient.request(METHODS.address, undefined);\n }\n\n /**\n * Subscribe for addresses from wallet\n * @param type - Subscription type\n * @param value - Should be one of 'current' (the selected account), 'connected' (all)\n * @returns Accounts from wallet\n */\n async subscribeAddress(\n type: SUBSCRIPTION_TYPES,\n value: 'current' | 'connected',\n ): Promise<ReturnType<WalletApi[METHODS.subscribeAddress]>> {\n this._ensureConnected();\n const result = await this.rpcClient.request(METHODS.subscribeAddress, { type, value });\n this._accounts = result.address;\n return result;\n }\n\n _ensureConnected(): asserts this is AeSdkAepp & { rpcClient: NonNullable<AeSdkAepp['rpcClient']> } {\n if (this.rpcClient != null) return;\n throw new NoWalletConnectedError('You are not connected to Wallet');\n }\n\n _ensureAccountAccess(): asserts this is AeSdkAepp & { rpcClient: NonNullable<AeSdkAepp['rpcClient']> } {\n this._ensureConnected();\n if (this.addresses().length !== 0) return;\n throw new UnsubscribedAccountError();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AeSdkAepp.mjs","names":["AeSdkBase","AccountRpc","decode","RPC_VERSION","RpcClient","METHODS","AlreadyConnectedError","NoWalletConnectedError","UnsubscribedAccountError","UnAuthorizedAccountError","RpcConnectionError","Node","AeSdkAepp","constructor","name","onAddressChange","onDisconnect","onNetworkChange","other","_resolveAccount","account","addresses","address","includes","_ensureConnected","rpcClient","_ensureAccountAccess","_accounts","current","Object","keys","connected","connectToWallet","connection","connectNode","disconnectParams","updateNetwork","params","_params$node","node","url","pool","delete","addNode","client","updateAddress","closeConnection","disconnect","readyToConnect","walletInfo","request","connect","version","disconnectWallet","notify","reason","askAddresses","undefined","subscribeAddress","type","value","result","length"],"sources":["../src/AeSdkAepp.ts"],"sourcesContent":["import AeSdkBase from './AeSdkBase';\nimport { OnAccount } from './AeSdkMethods';\nimport AccountBase from './account/Base';\nimport AccountRpc from './account/Rpc';\nimport { decode, Encoded } from './utils/encoder';\nimport {\n Accounts, RPC_VERSION, WalletInfo, Network, WalletApi, AeppApi, Node as NodeRpc,\n} from './aepp-wallet-communication/rpc/types';\nimport RpcClient from './aepp-wallet-communication/rpc/RpcClient';\nimport { METHODS, SUBSCRIPTION_TYPES } from './aepp-wallet-communication/schema';\nimport {\n AlreadyConnectedError,\n NoWalletConnectedError,\n UnsubscribedAccountError,\n UnAuthorizedAccountError,\n RpcConnectionError,\n} from './utils/errors';\nimport Node from './Node';\nimport BrowserConnection from './aepp-wallet-communication/connection/Browser';\n\n/**\n * RPC handler for AEPP side\n * Contain functionality for wallet interaction and connect it to sdk\n * @category aepp wallet communication\n */\nexport default class AeSdkAepp extends AeSdkBase {\n name: string;\n\n onAddressChange: (a: Accounts) => void;\n\n onDisconnect: (p: any) => void;\n\n onNetworkChange: (a: Network) => void;\n\n rpcClient?: RpcClient<WalletApi, AeppApi>;\n\n _accounts?: Accounts;\n\n /**\n * @param options - Options\n * @param options.name - Aepp name\n * @param options.onAddressChange - Call-back function for update address event\n * @param options.onDisconnect - Call-back function for disconnect event\n * @param options.onNetworkChange - Call-back function for update network event\n */\n constructor({\n name,\n onAddressChange = () => {},\n onDisconnect = () => {},\n onNetworkChange = () => {},\n ...other\n }: {\n name: string;\n onAddressChange?: (a: Accounts) => void;\n onDisconnect?: (p: any) => void;\n onNetworkChange?: (a: Network) => void;\n } & ConstructorParameters<typeof AeSdkBase>[0]) {\n super(other);\n this.onAddressChange = onAddressChange;\n this.onDisconnect = onDisconnect;\n this.onNetworkChange = onNetworkChange;\n this.name = name;\n }\n\n override _resolveAccount(account: OnAccount = this.addresses()[0]): AccountBase {\n if (typeof account === 'string') {\n const address = account as Encoded.AccountAddress;\n decode(address);\n if (!this.addresses().includes(address)) throw new UnAuthorizedAccountError(address);\n this._ensureConnected();\n account = new AccountRpc(this.rpcClient, address);\n }\n if (account == null) this._ensureAccountAccess();\n return super._resolveAccount(account);\n }\n\n override addresses(): Encoded.AccountAddress[] {\n if (this._accounts == null) return [];\n const current = Object.keys(this._accounts.current)[0];\n return [\n ...current != null ? [current] : [], ...Object.keys(this._accounts.connected),\n ] as Encoded.AccountAddress[];\n }\n\n /**\n * Connect to wallet\n * @param connection - Wallet connection object\n * @param options - Options\n * @param options.connectNode - Request wallet to bind node\n * @param options.name - Node name\n */\n async connectToWallet(\n connection: BrowserConnection,\n { connectNode = false, name = 'wallet-node' }: { connectNode?: boolean; name?: string } = {},\n ): Promise<WalletInfo & { node?: NodeRpc }> {\n if (this.rpcClient != null) throw new AlreadyConnectedError('You are already connected to wallet');\n let disconnectParams: any;\n\n const updateNetwork = (params: Network): void => {\n if (connectNode) {\n if (params.node?.url == null) throw new RpcConnectionError('Missing URLs of the Node');\n this.pool.delete(name);\n this.addNode(name, new Node(params.node.url), true);\n }\n this.onNetworkChange(params);\n };\n\n const client = new RpcClient<WalletApi, AeppApi>(\n connection,\n () => {\n delete this.rpcClient;\n delete this._accounts;\n this.onDisconnect(disconnectParams);\n },\n {\n [METHODS.updateAddress]: (params) => {\n this._accounts = params;\n this.onAddressChange(params);\n },\n [METHODS.updateNetwork]: updateNetwork,\n [METHODS.closeConnection]: (params) => {\n disconnectParams = params;\n client.connection.disconnect();\n },\n [METHODS.readyToConnect]: () => {},\n },\n );\n const walletInfo = await client\n .request(METHODS.connect, { name: this.name, version: RPC_VERSION, connectNode });\n updateNetwork(walletInfo);\n this.rpcClient = client;\n return walletInfo;\n }\n\n /**\n * Disconnect from wallet\n */\n disconnectWallet(): void {\n this._ensureConnected();\n this.rpcClient.notify(METHODS.closeConnection, { reason: 'bye' });\n this.rpcClient.connection.disconnect();\n }\n\n /**\n * Ask addresses from wallet\n * @returns Addresses from wallet\n */\n async askAddresses(): Promise<Encoded.AccountAddress[]> {\n this._ensureConnected();\n return this.rpcClient.request(METHODS.address, undefined);\n }\n\n /**\n * Subscribe for addresses from wallet\n * @param type - Subscription type\n * @param value - Should be one of 'current' (the selected account), 'connected' (all)\n * @returns Accounts from wallet\n */\n async subscribeAddress(\n type: SUBSCRIPTION_TYPES,\n value: 'current' | 'connected',\n ): Promise<ReturnType<WalletApi[METHODS.subscribeAddress]>> {\n this._ensureConnected();\n const result = await this.rpcClient.request(METHODS.subscribeAddress, { type, value });\n this._accounts = result.address;\n return result;\n }\n\n _ensureConnected(): asserts this is AeSdkAepp & { rpcClient: NonNullable<AeSdkAepp['rpcClient']> } {\n if (this.rpcClient != null) return;\n throw new NoWalletConnectedError('You are not connected to Wallet');\n }\n\n _ensureAccountAccess(): asserts this is AeSdkAepp & { rpcClient: NonNullable<AeSdkAepp['rpcClient']> } {\n this._ensureConnected();\n if (this.addresses().length !== 0) return;\n throw new UnsubscribedAccountError();\n }\n}\n"],"mappings":"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"}
|
package/es/AeSdkWallet.mjs
CHANGED
|
@@ -337,11 +337,14 @@ export default class AeSdkWallet extends AeSdk {
|
|
|
337
337
|
* @returns Object with wallet information
|
|
338
338
|
*/
|
|
339
339
|
async getWalletInfo() {
|
|
340
|
+
const {
|
|
341
|
+
origin
|
|
342
|
+
} = window.location;
|
|
340
343
|
return {
|
|
341
344
|
id: this.id,
|
|
342
345
|
name: this.name,
|
|
343
346
|
networkId: await this.api.getNetworkId(),
|
|
344
|
-
origin:
|
|
347
|
+
origin: origin === 'file://' ? '*' : origin,
|
|
345
348
|
type: this._type
|
|
346
349
|
};
|
|
347
350
|
}
|
package/es/AeSdkWallet.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AeSdkWallet.mjs","names":["v4","uuid","AeSdk","verifyTransaction","RpcClient","METHODS","RPC_STATUS","SUBSCRIPTION_TYPES","RpcInvalidTransactionError","RpcNotAuthorizeError","RpcPermissionDenyError","RpcUnsupportedProtocolError","InternalError","UnknownRpcClientError","RPC_VERSION","Encoding","encode","decode","jsonBig","AeSdkWallet","constructor","name","id","type","onConnection","onSubscription","onDisconnect","onAskAccounts","options","_defineProperty","Map","_type","_getAccountsForClient","addressSubscription","current","connected","getAccounts","has","_pushAccountsToApps","_clients","Array","from","keys","filter","clientId","_isRpcClientConnected","map","_getClient","client","size","forEach","rpc","notify","updateAddress","selectAccount","address","addAccount","account","_getNode","ensureNodeConnected","node","url","api","$host","selectedNodeName","selectNode","networkId","getNetworkId","updateNetwork","connectNode","get","CONNECTED","status","connection","isConnected","_disconnectRpcClient","disconnect","DISCONNECTED","Set","removeRpcClient","delete","addRpcClient","clientConnection","disconnectParams","WAITING_FOR_CONNECTION_REQUEST","closeConnection","params","connect","version","icons","origin","getWalletInfo","subscribeAddress","value","subscribe","add","unsubscribe","subscription","addresses","sign","tx","onAccount","returnSigned","innerTx","includes","parameters","aeppOrigin","aeppRpcClientId","signedTransaction","signTransaction","parse","stringify","transactionHash","sendTransaction","verify","error","validation","length","signMessage","message","signature","_Buffer","toString","signTypedData","domain","aci","data","signDelegationToContract","contractAddress","oracleQueryId","allNames","isOracle","_isOracle","_ref","_ref2","_ref3","signNameDelegationToContract","signOracleQueryDelegationToContract","signAllNamesDelegationToContract","unsafeSign","Signature","signDelegation","delegation","set","shareWalletInfo","readyToConnect","window","location","selectedAddress","a","reduce","acc"],"sources":["../src/AeSdkWallet.ts"],"sourcesContent":["import { v4 as uuid } from '@aeternity/uuid';\nimport AeSdk from './AeSdk';\nimport verifyTransaction from './tx/validator';\nimport RpcClient from './aepp-wallet-communication/rpc/RpcClient';\nimport {\n METHODS, RPC_STATUS, SUBSCRIPTION_TYPES, WALLET_TYPE,\n RpcInvalidTransactionError,\n RpcNotAuthorizeError, RpcPermissionDenyError, RpcUnsupportedProtocolError,\n} from './aepp-wallet-communication/schema';\nimport { InternalError, UnknownRpcClientError } from './utils/errors';\nimport AccountBase from './account/Base';\nimport BrowserConnection from './aepp-wallet-communication/connection/Browser';\nimport {\n Accounts,\n AeppApi,\n Network,\n RPC_VERSION,\n WalletApi,\n WalletInfo,\n} from './aepp-wallet-communication/rpc/types';\nimport {\n Encoded, Encoding, encode, decode,\n} from './utils/encoder';\nimport jsonBig from './utils/json-big';\n\ntype RpcClientWallet = RpcClient<AeppApi, WalletApi>;\n\ntype OnConnection = (\n clientId: string, params: Omit<Parameters<WalletApi[METHODS.connect]>[0], 'version'>, origin: string\n) => void;\n\ntype OnSubscription = (\n clientId: string, params: Parameters<WalletApi[METHODS.subscribeAddress]>[0], origin: string\n) => void;\n\ntype OnDisconnect = (\n clientId: string, params: Parameters<WalletApi[METHODS.closeConnection]>[0]\n) => void;\n\ntype OnAskAccounts = (\n clientId: string, params: undefined, origin: string\n) => void;\n\ninterface RpcClientsInfo {\n id: string;\n status: RPC_STATUS;\n connectNode: boolean;\n addressSubscription: Set<'connected' | 'current'>;\n rpc: RpcClientWallet;\n}\n\n/**\n * Contain functionality for aepp interaction and managing multiple aepps\n * @category aepp wallet communication\n */\nexport default class AeSdkWallet extends AeSdk {\n id: string;\n\n _type: WALLET_TYPE;\n\n name: string;\n\n _clients = new Map<string, RpcClientsInfo>();\n\n onConnection: OnConnection;\n\n onSubscription: OnSubscription;\n\n onDisconnect: OnDisconnect;\n\n onAskAccounts: OnAskAccounts;\n\n /**\n * @param options - Options\n * @param options.name - Wallet name\n * @param options.id - Wallet id\n * @param options.type - Wallet type\n * @param options.onConnection - Call-back function for incoming AEPP connection\n * @param options.onSubscription - Call-back function for incoming AEPP account subscription\n * @param options.onAskAccounts - Call-back function for incoming AEPP get address request\n * @param options.onDisconnect - Call-back function for disconnect event\n */\n constructor({\n name,\n id,\n type,\n onConnection,\n onSubscription,\n onDisconnect,\n onAskAccounts,\n ...options\n }: {\n id: string;\n type: WALLET_TYPE;\n name: string;\n onConnection: OnConnection;\n onSubscription: OnSubscription;\n onDisconnect: OnDisconnect;\n onAskAccounts: OnAskAccounts;\n } & ConstructorParameters<typeof AeSdk>[0]) {\n super(options);\n this.onConnection = onConnection;\n this.onSubscription = onSubscription;\n this.onDisconnect = onDisconnect;\n this.onAskAccounts = onAskAccounts;\n this.name = name;\n this.id = id;\n this._type = type;\n }\n\n _getAccountsForClient({ addressSubscription }: RpcClientsInfo): Accounts {\n const { current, connected } = this.getAccounts();\n return {\n current: addressSubscription.has('current') || addressSubscription.has('connected')\n ? current : {},\n connected: addressSubscription.has('connected') ? connected : {},\n };\n }\n\n _pushAccountsToApps(): void {\n if (this._clients == null) return;\n Array.from(this._clients.keys())\n .filter((clientId) => this._isRpcClientConnected(clientId))\n .map((clientId) => this._getClient(clientId))\n .filter((client) => client.addressSubscription.size !== 0)\n .forEach((client) => client.rpc\n .notify(METHODS.updateAddress, this._getAccountsForClient(client)));\n }\n\n override selectAccount(address: Encoded.AccountAddress): void {\n super.selectAccount(address);\n this._pushAccountsToApps();\n }\n\n override addAccount(account: AccountBase, options?: Parameters<AeSdk['addAccount']>[1]): void {\n super.addAccount(account, options);\n this._pushAccountsToApps();\n }\n\n _getNode(): { node: Network['node'] } {\n this.ensureNodeConnected();\n return { node: { url: this.api.$host, name: this.selectedNodeName } };\n }\n\n override async selectNode(name: string): Promise<void> {\n super.selectNode(name);\n const networkId = await this.api.getNetworkId();\n Array.from(this._clients.keys())\n .filter((clientId) => this._isRpcClientConnected(clientId))\n .map((clientId) => this._getClient(clientId))\n .forEach((client) => {\n client.rpc.notify(METHODS.updateNetwork, {\n networkId,\n ...client.connectNode && this._getNode(),\n });\n });\n }\n\n _getClient(clientId: string): RpcClientsInfo {\n const client = this._clients.get(clientId);\n if (client == null) throw new UnknownRpcClientError(clientId);\n return client;\n }\n\n _isRpcClientConnected(clientId: string): boolean {\n return RPC_STATUS.CONNECTED === this._getClient(clientId).status\n && this._getClient(clientId).rpc.connection.isConnected();\n }\n\n _disconnectRpcClient(clientId: string): void {\n const client = this._getClient(clientId);\n client.rpc.connection.disconnect();\n client.status = RPC_STATUS.DISCONNECTED;\n client.addressSubscription = new Set();\n }\n\n /**\n * Remove specific RpcClient by ID\n * @param id - Client ID\n */\n removeRpcClient(id: string): void {\n this._disconnectRpcClient(id);\n this._clients.delete(id);\n }\n\n /**\n * Add new client by AEPP connection\n * @param clientConnection - AEPP connection object\n * @returns Client ID\n */\n addRpcClient(clientConnection: BrowserConnection): string {\n // @TODO detect if aepp has some history based on origin????\n // if yes use this instance for connection\n const id = uuid();\n let disconnectParams: any;\n const client: RpcClientsInfo = {\n id,\n status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST,\n addressSubscription: new Set(),\n connectNode: false,\n rpc: new RpcClient<AeppApi, WalletApi>(\n clientConnection,\n () => {\n this._clients.delete(id);\n this.onDisconnect(id, disconnectParams); // also related info\n },\n {\n [METHODS.closeConnection]: (params) => {\n disconnectParams = params;\n this._disconnectRpcClient(id);\n },\n // Store client info and prepare two fn for each client `connect` and `denyConnection`\n // which automatically prepare and send response for that client\n [METHODS.connect]: async ({\n name, version, icons, connectNode,\n }, origin) => {\n if (version !== RPC_VERSION) throw new RpcUnsupportedProtocolError();\n\n await this.onConnection(id, { name, icons, connectNode }, origin);\n client.status = RPC_STATUS.CONNECTED;\n client.connectNode = connectNode;\n return {\n ...await this.getWalletInfo(),\n ...connectNode && this._getNode(),\n };\n },\n [METHODS.subscribeAddress]: async ({ type, value }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n\n switch (type) {\n case SUBSCRIPTION_TYPES.subscribe:\n // TODO: remove `type` as it always subscribe\n await this.onSubscription(id, { type, value }, origin);\n client.addressSubscription.add(value);\n break;\n case SUBSCRIPTION_TYPES.unsubscribe:\n client.addressSubscription.delete(value);\n break;\n default:\n throw new InternalError(`Unknown subscription type: ${type}`);\n }\n\n return {\n subscription: Array.from(client.addressSubscription),\n address: this._getAccountsForClient(client),\n };\n },\n [METHODS.address]: async (params, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n await this.onAskAccounts(id, params, origin);\n return this.addresses();\n },\n [METHODS.sign]: async (\n {\n tx, onAccount = this.address, returnSigned, innerTx,\n },\n origin,\n ) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = {\n onAccount, aeppOrigin: origin, aeppRpcClientId: id, innerTx,\n };\n if (returnSigned || innerTx === true) {\n return { signedTransaction: await this.signTransaction(tx, parameters) };\n }\n try {\n return jsonBig.parse(jsonBig.stringify({\n transactionHash: await this.sendTransaction(tx, { ...parameters, verify: false }),\n }));\n } catch (error) {\n const validation = await verifyTransaction(tx, this.api);\n if (validation.length > 0) throw new RpcInvalidTransactionError(validation);\n throw error;\n }\n },\n [METHODS.signMessage]: async ({ message, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n return {\n signature: Buffer.from(await this.signMessage(message, parameters)).toString('hex'),\n };\n },\n [METHODS.signTypedData]: async ({\n domain, aci, data, onAccount = this.address,\n }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = {\n ...domain, onAccount, aeppOrigin: origin, aeppRpcClientId: id,\n };\n return {\n signature: await this.signTypedData(data, aci, parameters),\n };\n },\n [METHODS.signDelegationToContract]: async ({\n contractAddress, name, oracleQueryId, allNames, onAccount = this.address, isOracle,\n }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n isOracle ??= false;\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = await (\n (name == null ? null : this\n .signNameDelegationToContract(contractAddress, name, parameters))\n ?? (oracleQueryId == null ? null : this\n .signOracleQueryDelegationToContract(contractAddress, oracleQueryId, parameters))\n ?? (allNames !== true ? null : this\n .signAllNamesDelegationToContract(contractAddress, parameters))\n ?? this.signDelegationToContract(contractAddress, { ...parameters, isOracle })\n );\n return { signature };\n },\n [METHODS.unsafeSign]: async ({ data, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) throw new RpcPermissionDenyError(onAccount);\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = encode(await this.sign(decode(data), parameters), Encoding.Signature);\n return { signature };\n },\n [METHODS.signDelegation]: async ({ delegation, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) throw new RpcPermissionDenyError(onAccount);\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = await this.signDelegation(delegation, parameters);\n return { signature };\n },\n },\n ),\n };\n this._clients.set(id, client);\n return id;\n }\n\n /**\n * Send shareWalletInfo message to notify AEPP about wallet\n * @param clientId - ID of RPC client send message to\n */\n async shareWalletInfo(clientId: string): Promise<void> {\n this._getClient(clientId).rpc.notify(METHODS.readyToConnect, await this.getWalletInfo());\n }\n\n /**\n * Get Wallet info object\n * @returns Object with wallet information\n */\n async getWalletInfo(): Promise<WalletInfo> {\n return {\n id: this.id,\n name: this.name,\n networkId: await this.api.getNetworkId(),\n origin: window.location.origin,\n type: this._type,\n };\n }\n\n /**\n * Get Wallet accounts\n * @returns Object with accounts information (\\{ connected: Object, current: Object \\})\n */\n getAccounts(): Accounts {\n return {\n current: this.selectedAddress != null ? { [this.selectedAddress]: {} } : {},\n connected: this.addresses()\n .filter((a) => a !== this.selectedAddress)\n .reduce((acc, a) => ({ ...acc, [a]: {} }), {}),\n };\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AeSdkWallet.mjs","names":["v4","uuid","AeSdk","verifyTransaction","RpcClient","METHODS","RPC_STATUS","SUBSCRIPTION_TYPES","RpcInvalidTransactionError","RpcNotAuthorizeError","RpcPermissionDenyError","RpcUnsupportedProtocolError","InternalError","UnknownRpcClientError","RPC_VERSION","Encoding","encode","decode","jsonBig","AeSdkWallet","constructor","name","id","type","onConnection","onSubscription","onDisconnect","onAskAccounts","options","_defineProperty","Map","_type","_getAccountsForClient","addressSubscription","current","connected","getAccounts","has","_pushAccountsToApps","_clients","Array","from","keys","filter","clientId","_isRpcClientConnected","map","_getClient","client","size","forEach","rpc","notify","updateAddress","selectAccount","address","addAccount","account","_getNode","ensureNodeConnected","node","url","api","$host","selectedNodeName","selectNode","networkId","getNetworkId","updateNetwork","connectNode","get","CONNECTED","status","connection","isConnected","_disconnectRpcClient","disconnect","DISCONNECTED","Set","removeRpcClient","delete","addRpcClient","clientConnection","disconnectParams","WAITING_FOR_CONNECTION_REQUEST","closeConnection","params","connect","version","icons","origin","getWalletInfo","subscribeAddress","value","subscribe","add","unsubscribe","subscription","addresses","sign","tx","onAccount","returnSigned","innerTx","includes","parameters","aeppOrigin","aeppRpcClientId","signedTransaction","signTransaction","parse","stringify","transactionHash","sendTransaction","verify","error","validation","length","signMessage","message","signature","_Buffer","toString","signTypedData","domain","aci","data","signDelegationToContract","contractAddress","oracleQueryId","allNames","isOracle","_isOracle","_ref","_ref2","_ref3","signNameDelegationToContract","signOracleQueryDelegationToContract","signAllNamesDelegationToContract","unsafeSign","Signature","signDelegation","delegation","set","shareWalletInfo","readyToConnect","window","location","selectedAddress","a","reduce","acc"],"sources":["../src/AeSdkWallet.ts"],"sourcesContent":["import { v4 as uuid } from '@aeternity/uuid';\nimport AeSdk from './AeSdk';\nimport verifyTransaction from './tx/validator';\nimport RpcClient from './aepp-wallet-communication/rpc/RpcClient';\nimport {\n METHODS, RPC_STATUS, SUBSCRIPTION_TYPES, WALLET_TYPE,\n RpcInvalidTransactionError,\n RpcNotAuthorizeError, RpcPermissionDenyError, RpcUnsupportedProtocolError,\n} from './aepp-wallet-communication/schema';\nimport { InternalError, UnknownRpcClientError } from './utils/errors';\nimport AccountBase from './account/Base';\nimport BrowserConnection from './aepp-wallet-communication/connection/Browser';\nimport {\n Accounts,\n AeppApi,\n Network,\n RPC_VERSION,\n WalletApi,\n WalletInfo,\n} from './aepp-wallet-communication/rpc/types';\nimport {\n Encoded, Encoding, encode, decode,\n} from './utils/encoder';\nimport jsonBig from './utils/json-big';\n\ntype RpcClientWallet = RpcClient<AeppApi, WalletApi>;\n\ntype OnConnection = (\n clientId: string, params: Omit<Parameters<WalletApi[METHODS.connect]>[0], 'version'>, origin: string\n) => void;\n\ntype OnSubscription = (\n clientId: string, params: Parameters<WalletApi[METHODS.subscribeAddress]>[0], origin: string\n) => void;\n\ntype OnDisconnect = (\n clientId: string, params: Parameters<WalletApi[METHODS.closeConnection]>[0]\n) => void;\n\ntype OnAskAccounts = (\n clientId: string, params: undefined, origin: string\n) => void;\n\ninterface RpcClientsInfo {\n id: string;\n status: RPC_STATUS;\n connectNode: boolean;\n addressSubscription: Set<'connected' | 'current'>;\n rpc: RpcClientWallet;\n}\n\n/**\n * Contain functionality for aepp interaction and managing multiple aepps\n * @category aepp wallet communication\n */\nexport default class AeSdkWallet extends AeSdk {\n id: string;\n\n _type: WALLET_TYPE;\n\n name: string;\n\n _clients = new Map<string, RpcClientsInfo>();\n\n onConnection: OnConnection;\n\n onSubscription: OnSubscription;\n\n onDisconnect: OnDisconnect;\n\n onAskAccounts: OnAskAccounts;\n\n /**\n * @param options - Options\n * @param options.name - Wallet name\n * @param options.id - Wallet id\n * @param options.type - Wallet type\n * @param options.onConnection - Call-back function for incoming AEPP connection\n * @param options.onSubscription - Call-back function for incoming AEPP account subscription\n * @param options.onAskAccounts - Call-back function for incoming AEPP get address request\n * @param options.onDisconnect - Call-back function for disconnect event\n */\n constructor({\n name,\n id,\n type,\n onConnection,\n onSubscription,\n onDisconnect,\n onAskAccounts,\n ...options\n }: {\n id: string;\n type: WALLET_TYPE;\n name: string;\n onConnection: OnConnection;\n onSubscription: OnSubscription;\n onDisconnect: OnDisconnect;\n onAskAccounts: OnAskAccounts;\n } & ConstructorParameters<typeof AeSdk>[0]) {\n super(options);\n this.onConnection = onConnection;\n this.onSubscription = onSubscription;\n this.onDisconnect = onDisconnect;\n this.onAskAccounts = onAskAccounts;\n this.name = name;\n this.id = id;\n this._type = type;\n }\n\n _getAccountsForClient({ addressSubscription }: RpcClientsInfo): Accounts {\n const { current, connected } = this.getAccounts();\n return {\n current: addressSubscription.has('current') || addressSubscription.has('connected')\n ? current : {},\n connected: addressSubscription.has('connected') ? connected : {},\n };\n }\n\n _pushAccountsToApps(): void {\n if (this._clients == null) return;\n Array.from(this._clients.keys())\n .filter((clientId) => this._isRpcClientConnected(clientId))\n .map((clientId) => this._getClient(clientId))\n .filter((client) => client.addressSubscription.size !== 0)\n .forEach((client) => client.rpc\n .notify(METHODS.updateAddress, this._getAccountsForClient(client)));\n }\n\n override selectAccount(address: Encoded.AccountAddress): void {\n super.selectAccount(address);\n this._pushAccountsToApps();\n }\n\n override addAccount(account: AccountBase, options?: Parameters<AeSdk['addAccount']>[1]): void {\n super.addAccount(account, options);\n this._pushAccountsToApps();\n }\n\n _getNode(): { node: Network['node'] } {\n this.ensureNodeConnected();\n return { node: { url: this.api.$host, name: this.selectedNodeName } };\n }\n\n override async selectNode(name: string): Promise<void> {\n super.selectNode(name);\n const networkId = await this.api.getNetworkId();\n Array.from(this._clients.keys())\n .filter((clientId) => this._isRpcClientConnected(clientId))\n .map((clientId) => this._getClient(clientId))\n .forEach((client) => {\n client.rpc.notify(METHODS.updateNetwork, {\n networkId,\n ...client.connectNode && this._getNode(),\n });\n });\n }\n\n _getClient(clientId: string): RpcClientsInfo {\n const client = this._clients.get(clientId);\n if (client == null) throw new UnknownRpcClientError(clientId);\n return client;\n }\n\n _isRpcClientConnected(clientId: string): boolean {\n return RPC_STATUS.CONNECTED === this._getClient(clientId).status\n && this._getClient(clientId).rpc.connection.isConnected();\n }\n\n _disconnectRpcClient(clientId: string): void {\n const client = this._getClient(clientId);\n client.rpc.connection.disconnect();\n client.status = RPC_STATUS.DISCONNECTED;\n client.addressSubscription = new Set();\n }\n\n /**\n * Remove specific RpcClient by ID\n * @param id - Client ID\n */\n removeRpcClient(id: string): void {\n this._disconnectRpcClient(id);\n this._clients.delete(id);\n }\n\n /**\n * Add new client by AEPP connection\n * @param clientConnection - AEPP connection object\n * @returns Client ID\n */\n addRpcClient(clientConnection: BrowserConnection): string {\n // @TODO detect if aepp has some history based on origin????\n // if yes use this instance for connection\n const id = uuid();\n let disconnectParams: any;\n const client: RpcClientsInfo = {\n id,\n status: RPC_STATUS.WAITING_FOR_CONNECTION_REQUEST,\n addressSubscription: new Set(),\n connectNode: false,\n rpc: new RpcClient<AeppApi, WalletApi>(\n clientConnection,\n () => {\n this._clients.delete(id);\n this.onDisconnect(id, disconnectParams); // also related info\n },\n {\n [METHODS.closeConnection]: (params) => {\n disconnectParams = params;\n this._disconnectRpcClient(id);\n },\n // Store client info and prepare two fn for each client `connect` and `denyConnection`\n // which automatically prepare and send response for that client\n [METHODS.connect]: async ({\n name, version, icons, connectNode,\n }, origin) => {\n if (version !== RPC_VERSION) throw new RpcUnsupportedProtocolError();\n\n await this.onConnection(id, { name, icons, connectNode }, origin);\n client.status = RPC_STATUS.CONNECTED;\n client.connectNode = connectNode;\n return {\n ...await this.getWalletInfo(),\n ...connectNode && this._getNode(),\n };\n },\n [METHODS.subscribeAddress]: async ({ type, value }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n\n switch (type) {\n case SUBSCRIPTION_TYPES.subscribe:\n // TODO: remove `type` as it always subscribe\n await this.onSubscription(id, { type, value }, origin);\n client.addressSubscription.add(value);\n break;\n case SUBSCRIPTION_TYPES.unsubscribe:\n client.addressSubscription.delete(value);\n break;\n default:\n throw new InternalError(`Unknown subscription type: ${type}`);\n }\n\n return {\n subscription: Array.from(client.addressSubscription),\n address: this._getAccountsForClient(client),\n };\n },\n [METHODS.address]: async (params, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n await this.onAskAccounts(id, params, origin);\n return this.addresses();\n },\n [METHODS.sign]: async (\n {\n tx, onAccount = this.address, returnSigned, innerTx,\n },\n origin,\n ) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = {\n onAccount, aeppOrigin: origin, aeppRpcClientId: id, innerTx,\n };\n if (returnSigned || innerTx === true) {\n return { signedTransaction: await this.signTransaction(tx, parameters) };\n }\n try {\n return jsonBig.parse(jsonBig.stringify({\n transactionHash: await this.sendTransaction(tx, { ...parameters, verify: false }),\n }));\n } catch (error) {\n const validation = await verifyTransaction(tx, this.api);\n if (validation.length > 0) throw new RpcInvalidTransactionError(validation);\n throw error;\n }\n },\n [METHODS.signMessage]: async ({ message, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n return {\n signature: Buffer.from(await this.signMessage(message, parameters)).toString('hex'),\n };\n },\n [METHODS.signTypedData]: async ({\n domain, aci, data, onAccount = this.address,\n }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n const parameters = {\n ...domain, onAccount, aeppOrigin: origin, aeppRpcClientId: id,\n };\n return {\n signature: await this.signTypedData(data, aci, parameters),\n };\n },\n [METHODS.signDelegationToContract]: async ({\n contractAddress, name, oracleQueryId, allNames, onAccount = this.address, isOracle,\n }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) {\n throw new RpcPermissionDenyError(onAccount);\n }\n\n isOracle ??= false;\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = await (\n (name == null ? null : this\n .signNameDelegationToContract(contractAddress, name, parameters))\n ?? (oracleQueryId == null ? null : this\n .signOracleQueryDelegationToContract(contractAddress, oracleQueryId, parameters))\n ?? (allNames !== true ? null : this\n .signAllNamesDelegationToContract(contractAddress, parameters))\n ?? this.signDelegationToContract(contractAddress, { ...parameters, isOracle })\n );\n return { signature };\n },\n [METHODS.unsafeSign]: async ({ data, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) throw new RpcPermissionDenyError(onAccount);\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = encode(await this.sign(decode(data), parameters), Encoding.Signature);\n return { signature };\n },\n [METHODS.signDelegation]: async ({ delegation, onAccount = this.address }, origin) => {\n if (!this._isRpcClientConnected(id)) throw new RpcNotAuthorizeError();\n if (!this.addresses().includes(onAccount)) throw new RpcPermissionDenyError(onAccount);\n const parameters = { onAccount, aeppOrigin: origin, aeppRpcClientId: id };\n const signature = await this.signDelegation(delegation, parameters);\n return { signature };\n },\n },\n ),\n };\n this._clients.set(id, client);\n return id;\n }\n\n /**\n * Send shareWalletInfo message to notify AEPP about wallet\n * @param clientId - ID of RPC client send message to\n */\n async shareWalletInfo(clientId: string): Promise<void> {\n this._getClient(clientId).rpc.notify(METHODS.readyToConnect, await this.getWalletInfo());\n }\n\n /**\n * Get Wallet info object\n * @returns Object with wallet information\n */\n async getWalletInfo(): Promise<WalletInfo> {\n const { origin } = window.location;\n return {\n id: this.id,\n name: this.name,\n networkId: await this.api.getNetworkId(),\n origin: origin === 'file://' ? '*' : origin,\n type: this._type,\n };\n }\n\n /**\n * Get Wallet accounts\n * @returns Object with accounts information (\\{ connected: Object, current: Object \\})\n */\n getAccounts(): Accounts {\n return {\n current: this.selectedAddress != null ? { [this.selectedAddress]: {} } : {},\n connected: this.addresses()\n .filter((a) => a !== this.selectedAddress)\n .reduce((acc, a) => ({ ...acc, [a]: {} }), {}),\n };\n }\n}\n"],"mappings":"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"}
|
package/es/chain.d.ts
CHANGED
|
@@ -8,11 +8,11 @@ import { Encoded, Encoding } from './utils/encoder';
|
|
|
8
8
|
* @param type - Type
|
|
9
9
|
* @param options - Options
|
|
10
10
|
*/
|
|
11
|
-
export declare function _getPollInterval(type: 'block' | '
|
|
12
|
-
{ _expectedMineRate, _microBlockCycle }: {
|
|
11
|
+
export declare function _getPollInterval(type: 'key-block' | 'micro-block', { _expectedMineRate, _microBlockCycle, onNode }: {
|
|
13
12
|
_expectedMineRate?: number;
|
|
14
13
|
_microBlockCycle?: number;
|
|
15
|
-
|
|
14
|
+
onNode: Node;
|
|
15
|
+
}): Promise<number>;
|
|
16
16
|
/**
|
|
17
17
|
* Obtain current height of the chain
|
|
18
18
|
* @category chain
|
|
@@ -38,7 +38,7 @@ export declare function getHeight({ cached, ...options }: {
|
|
|
38
38
|
* @param options.onNode - Node to use
|
|
39
39
|
* @returns The transaction as it was mined
|
|
40
40
|
*/
|
|
41
|
-
export declare function poll(th: Encoded.TxHash, { blocks, interval,
|
|
41
|
+
export declare function poll(th: Encoded.TxHash, { blocks, interval, ...options }: {
|
|
42
42
|
blocks?: number;
|
|
43
43
|
interval?: number;
|
|
44
44
|
onNode: Node;
|
|
@@ -52,7 +52,7 @@ export declare function poll(th: Encoded.TxHash, { blocks, interval, onNode, ...
|
|
|
52
52
|
* @param options.onNode - Node to use
|
|
53
53
|
* @returns Current chain height
|
|
54
54
|
*/
|
|
55
|
-
export declare function awaitHeight(height: number, { interval,
|
|
55
|
+
export declare function awaitHeight(height: number, { interval, ...options }: {
|
|
56
56
|
interval?: number;
|
|
57
57
|
onNode: Node;
|
|
58
58
|
} & Parameters<typeof _getPollInterval>[1]): Promise<number>;
|
package/es/chain.mjs
CHANGED
|
@@ -10,16 +10,20 @@ import { decode, encode, Encoding } from "./utils/encoder.mjs";
|
|
|
10
10
|
* @param type - Type
|
|
11
11
|
* @param options - Options
|
|
12
12
|
*/
|
|
13
|
-
export function _getPollInterval(type,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
_microBlockCycle = 3000
|
|
13
|
+
export async function _getPollInterval(type, {
|
|
14
|
+
_expectedMineRate,
|
|
15
|
+
_microBlockCycle,
|
|
16
|
+
onNode
|
|
18
17
|
}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
var _ref, _await$getVal;
|
|
19
|
+
const getVal = async (t, val, devModeDef, def) => {
|
|
20
|
+
if (t !== type) return null;
|
|
21
|
+
if (val != null) return val;
|
|
22
|
+
return (await (onNode === null || onNode === void 0 ? void 0 : onNode.getNetworkId())) === 'ae_dev' ? devModeDef : def;
|
|
23
|
+
};
|
|
24
|
+
const base = (_ref = (_await$getVal = await getVal('key-block', _expectedMineRate, 0, 180000)) !== null && _await$getVal !== void 0 ? _await$getVal : await getVal('micro-block', _microBlockCycle, 0, 3000)) !== null && _ref !== void 0 ? _ref : (() => {
|
|
25
|
+
throw new InternalError(`Unknown type: ${type}`);
|
|
26
|
+
})();
|
|
23
27
|
return Math.floor(base / 3);
|
|
24
28
|
}
|
|
25
29
|
const heightCache = new WeakMap();
|
|
@@ -40,7 +44,7 @@ export async function getHeight({
|
|
|
40
44
|
const onNode = unwrapProxy(options.onNode);
|
|
41
45
|
if (cached) {
|
|
42
46
|
const cache = heightCache.get(onNode);
|
|
43
|
-
if (cache != null && cache.time > Date.now() - _getPollInterval('block', options)) {
|
|
47
|
+
if (cache != null && cache.time > Date.now() - (await _getPollInterval('key-block', options))) {
|
|
44
48
|
return cache.height;
|
|
45
49
|
}
|
|
46
50
|
}
|
|
@@ -69,26 +73,23 @@ export async function getHeight({
|
|
|
69
73
|
export async function poll(th, {
|
|
70
74
|
blocks = 5,
|
|
71
75
|
interval,
|
|
72
|
-
onNode,
|
|
73
76
|
...options
|
|
74
77
|
}) {
|
|
75
78
|
var _interval;
|
|
76
|
-
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = _getPollInterval('
|
|
79
|
+
(_interval = interval) !== null && _interval !== void 0 ? _interval : interval = await _getPollInterval('micro-block', options);
|
|
77
80
|
let max;
|
|
78
81
|
do {
|
|
79
|
-
const tx = await onNode.getTransactionByHash(th);
|
|
82
|
+
const tx = await options.onNode.getTransactionByHash(th);
|
|
80
83
|
if (tx.blockHeight !== -1) return tx;
|
|
81
84
|
if (max == null) {
|
|
82
85
|
max = tx.tx.ttl !== 0 ? -1 : (await getHeight({
|
|
83
86
|
...options,
|
|
84
|
-
onNode,
|
|
85
87
|
cached: true
|
|
86
88
|
})) + blocks;
|
|
87
89
|
}
|
|
88
90
|
await pause(interval);
|
|
89
91
|
} while (max === -1 ? true : (await getHeight({
|
|
90
92
|
...options,
|
|
91
|
-
onNode,
|
|
92
93
|
cached: true
|
|
93
94
|
})) < max);
|
|
94
95
|
throw new TxTimedOutError(blocks, th);
|
|
@@ -105,17 +106,14 @@ export async function poll(th, {
|
|
|
105
106
|
*/
|
|
106
107
|
export async function awaitHeight(height, {
|
|
107
108
|
interval,
|
|
108
|
-
onNode,
|
|
109
109
|
...options
|
|
110
110
|
}) {
|
|
111
111
|
var _interval2;
|
|
112
|
-
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = Math.min(_getPollInterval('block', options), 5000);
|
|
112
|
+
(_interval2 = interval) !== null && _interval2 !== void 0 ? _interval2 : interval = Math.min(await _getPollInterval('key-block', options), 5000);
|
|
113
113
|
let currentHeight;
|
|
114
114
|
do {
|
|
115
115
|
if (currentHeight != null) await pause(interval);
|
|
116
|
-
currentHeight = await getHeight(
|
|
117
|
-
onNode
|
|
118
|
-
});
|
|
116
|
+
currentHeight = await getHeight(options);
|
|
119
117
|
} while (currentHeight < height);
|
|
120
118
|
return currentHeight;
|
|
121
119
|
}
|
package/es/chain.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chain.mjs","names":["AE_AMOUNT_FORMATS","formatAmount","isAccountNotFoundError","pause","unwrapProxy","isNameValid","produceNameId","DRY_RUN_ACCOUNT","AensPointerContextError","DryRunError","InvalidAensNameError","TxTimedOutError","TxNotInChainError","InternalError","decode","encode","Encoding","_getPollInterval","type","_expectedMineRate","_microBlockCycle","base","block","microblock","Math","floor","heightCache","WeakMap","getHeight","cached","options","onNode","cache","get","time","Date","now","height","getCurrentKeyBlockHeight","set","poll","th","blocks","interval","_interval","max","tx","getTransactionByHash","blockHeight","ttl","awaitHeight","_interval2","min","currentHeight","waitForTxConfirm","txHash","confirm","newBlockHeight","getAccount","address","hash","getAccountByPubkeyAndHeight","getAccountByPubkeyAndHash","getAccountByPubkey","getBalance","format","AETTOS","addr","startsWith","AccountAddress","balance","catch","error","targetDenomination","getCurrentGeneration","getGeneration","hashOrHeight","getGenerationByHeight","getGenerationByHash","getMicroBlockTransactions","getMicroBlockTransactionsByHash","transactions","getKeyBlock","getKeyBlockByHeight","getKeyBlockByHash","getMicroBlockHeader","getMicroBlockHeaderByHash","txDryRunRequests","Map","txDryRunHandler","key","rs","delete","dryRunRes","top","protectedDryRunTxs","txEvents","txs","map","req","accounts","Array","from","Set","accountAddress","pubKey","amount","forEach","reject","results","result","reason","resultPayload","idx","resolve","Object","assign","txDryRun","combine","_txDryRunRequests$get","join","requests","Promise","_requests$timeout","push","timeout","setTimeout","getContractByteCode","contractId","getContractCode","getContract","getName","name","getNameEntryByName","resolveName","nameOrId","verify","resolveByNode","pointer","pointers","find","p","id"],"sources":["../src/chain.ts"],"sourcesContent":["import { AE_AMOUNT_FORMATS, formatAmount } from './utils/amount-formatter';\nimport { isAccountNotFoundError, pause } from './utils/other';\nimport { unwrapProxy } from './utils/wrap-proxy';\nimport { isNameValid, produceNameId } from './tx/builder/helpers';\nimport { AensName, DRY_RUN_ACCOUNT } from './tx/builder/constants';\nimport {\n AensPointerContextError, DryRunError, InvalidAensNameError,\n TxTimedOutError, TxNotInChainError, InternalError,\n} from './utils/errors';\nimport Node, { TransformNodeType } from './Node';\nimport {\n Account as AccountNode, ByteCode, ContractObject, DryRunResult, DryRunResults,\n Generation, KeyBlock, MicroBlockHeader, NameEntry, SignedTx,\n} from './apis/node';\nimport {\n decode, encode, Encoded, Encoding,\n} from './utils/encoder';\n\n/**\n * @category chain\n * @param type - Type\n * @param options - Options\n */\nexport function _getPollInterval(\n type: 'block' | 'microblock', // TODO: rename to 'key-block' | 'micro-block'\n { _expectedMineRate = 180000, _microBlockCycle = 3000 }:\n { _expectedMineRate?: number; _microBlockCycle?: number },\n): number {\n const base = {\n block: _expectedMineRate,\n microblock: _microBlockCycle,\n }[type];\n return Math.floor(base / 3);\n}\n\nconst heightCache: WeakMap<Node, { time: number; height: number }> = new WeakMap();\n\n/**\n * Obtain current height of the chain\n * @category chain\n * @param options - Options\n * @param options.cached - Get height from the cache. The lag behind the actual height shouldn't\n * be more than 1 block. Use if needed to reduce requests count, and approximate value can be used.\n * For example, for timeout check in transaction status polling.\n * @returns Current chain height\n */\nexport async function getHeight(\n { cached = false, ...options }: {\n onNode: Node;\n cached?: boolean;\n } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n const onNode = unwrapProxy(options.onNode);\n if (cached) {\n const cache = heightCache.get(onNode);\n if (cache != null && cache.time > Date.now() - _getPollInterval('block', options)) {\n return cache.height;\n }\n }\n const { height } = await onNode.getCurrentKeyBlockHeight();\n heightCache.set(onNode, { height, time: Date.now() });\n return height;\n}\n\n/**\n * Return transaction details if it is mined, fail otherwise.\n * If the transaction has ttl specified then would wait till it leaves the mempool.\n * Otherwise would fail if a specified amount of blocks were mined.\n * @category chain\n * @param th - The hash of transaction to poll\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.blocks - Number of blocks mined after which to fail if transaction ttl is not set\n * @param options.onNode - Node to use\n * @returns The transaction as it was mined\n */\nexport async function poll(\n th: Encoded.TxHash,\n {\n blocks = 5, interval, onNode, ...options\n }:\n { blocks?: number; interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<TransformNodeType<SignedTx>> {\n interval ??= _getPollInterval('microblock', options);\n let max;\n do {\n const tx = await onNode.getTransactionByHash(th);\n if (tx.blockHeight !== -1) return tx;\n if (max == null) {\n max = tx.tx.ttl !== 0 ? -1\n : await getHeight({ ...options, onNode, cached: true }) + blocks;\n }\n await pause(interval);\n } while (max === -1 ? true : await getHeight({ ...options, onNode, cached: true }) < max);\n throw new TxTimedOutError(blocks, th);\n}\n\n/**\n * Wait for the chain to reach a specific height\n * @category chain\n * @param height - Height to wait for\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.onNode - Node to use\n * @returns Current chain height\n */\nexport async function awaitHeight(\n height: number,\n { interval, onNode, ...options }:\n { interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n interval ??= Math.min(_getPollInterval('block', options), 5000);\n let currentHeight;\n do {\n if (currentHeight != null) await pause(interval);\n currentHeight = await getHeight({ onNode });\n } while (currentHeight < height);\n return currentHeight;\n}\n\n/**\n * Wait for transaction confirmation\n * @category chain\n * @param txHash - Transaction hash\n * @param options - Options\n * @param options.confirm - Number of micro blocks to wait for transaction confirmation\n * @param options.onNode - Node to use\n * @returns Current Height\n */\nexport async function waitForTxConfirm(\n txHash: Encoded.TxHash,\n { confirm = 3, onNode, ...options }:\n { confirm?: number; onNode: Node } & Parameters<typeof awaitHeight>[1],\n): Promise<number> {\n const { blockHeight } = await onNode.getTransactionByHash(txHash);\n const height = await awaitHeight(blockHeight + confirm, { onNode, ...options });\n const { blockHeight: newBlockHeight } = await onNode.getTransactionByHash(txHash);\n switch (newBlockHeight) {\n case -1:\n throw new TxNotInChainError(txHash);\n case blockHeight:\n return height;\n default:\n return waitForTxConfirm(txHash, { onNode, confirm, ...options });\n }\n}\n\n/**\n * Get account by account public key\n * @category chain\n * @param address - Account address (public key)\n * @param options - Options\n * @param options.height - Get account on specific block by block height\n * @param options.hash - Get account on specific block by micro block hash or key block hash\n * @param options.onNode - Node to use\n */\nexport async function getAccount(\n address: Encoded.AccountAddress | Encoded.ContractAddress,\n { height, hash, onNode }:\n { height?: number; hash?: Encoded.KeyBlockHash | Encoded.MicroBlockHash; onNode: Node },\n): Promise<TransformNodeType<AccountNode>> {\n if (height != null) return onNode.getAccountByPubkeyAndHeight(address, height);\n if (hash != null) return onNode.getAccountByPubkeyAndHash(address, hash);\n return onNode.getAccountByPubkey(address);\n}\n\n/**\n * Request the balance of specified account\n * @category chain\n * @param address - The public account address to obtain the balance for\n * @param options - Options\n * @param options.format\n * @param options.height - The chain height at which to obtain the balance for\n * (default: top of chain)\n * @param options.hash - The block hash on which to obtain the balance for (default: top of chain)\n */\nexport async function getBalance(\n address: Encoded.AccountAddress | Encoded.ContractAddress | Encoded.OracleAddress,\n { format = AE_AMOUNT_FORMATS.AETTOS, ...options }:\n { format?: AE_AMOUNT_FORMATS } & Parameters<typeof getAccount>[1],\n): Promise<string> {\n const addr = address.startsWith('ok_')\n ? encode(decode(address), Encoding.AccountAddress)\n : address as Encoded.AccountAddress | Encoded.ContractAddress;\n\n const { balance } = await getAccount(addr, options).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { balance: 0n };\n });\n\n return formatAmount(balance, { targetDenomination: format });\n}\n\n/**\n * Obtain current generation\n * @category chain\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Current Generation\n */\nexport async function getCurrentGeneration(\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n return onNode.getCurrentGeneration();\n}\n\n/**\n * Get generation by hash or height\n * @category chain\n * @param hashOrHeight - Generation hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Generation\n */\nexport async function getGeneration(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n if (typeof hashOrHeight === 'number') return onNode.getGenerationByHeight(hashOrHeight);\n return onNode.getGenerationByHash(hashOrHeight);\n}\n\n/**\n * Get micro block transactions\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transactions\n */\nexport async function getMicroBlockTransactions(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<SignedTx[]>> {\n return (await onNode.getMicroBlockTransactionsByHash(hash)).transactions;\n}\n\n/**\n * Get key block\n * @category chain\n * @param hashOrHeight - Key block hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Key Block\n */\nexport async function getKeyBlock(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<KeyBlock>> {\n if (typeof hashOrHeight === 'number') return onNode.getKeyBlockByHeight(hashOrHeight);\n return onNode.getKeyBlockByHash(hashOrHeight);\n}\n\n/**\n * Get micro block header\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Micro block header\n */\nexport async function getMicroBlockHeader(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<MicroBlockHeader>> {\n return onNode.getMicroBlockHeaderByHash(hash);\n}\n\ninterface TxDryRunArguments {\n tx: Encoded.Transaction;\n accountAddress: Encoded.AccountAddress;\n top?: number | Encoded.KeyBlockHash | Encoded.MicroBlockHash;\n txEvents?: any;\n resolve: Function;\n reject: Function;\n}\nconst txDryRunRequests: Map<string, TxDryRunArguments[] & { timeout?: NodeJS.Timeout }> = new Map();\n\nasync function txDryRunHandler(key: string, onNode: Node): Promise<void> {\n const rs = txDryRunRequests.get(key);\n txDryRunRequests.delete(key);\n if (rs == null) throw new InternalError('Can\\'t get dry-run request');\n\n let dryRunRes;\n try {\n const top = typeof rs[0].top === 'number'\n ? (await getKeyBlock(rs[0].top, { onNode })).hash : rs[0].top;\n dryRunRes = await onNode.protectedDryRunTxs({\n top,\n txEvents: rs[0].txEvents,\n txs: rs.map((req) => ({ tx: req.tx })),\n accounts: Array.from(new Set(rs.map((req) => req.accountAddress)))\n .map((pubKey) => ({ pubKey, amount: DRY_RUN_ACCOUNT.amount })),\n });\n } catch (error) {\n rs.forEach(({ reject }) => reject(error));\n return;\n }\n\n const { results, txEvents } = dryRunRes;\n results.forEach(({ result, reason, ...resultPayload }, idx) => {\n const {\n resolve, reject, tx, accountAddress,\n } = rs[idx];\n if (result === 'ok') resolve({ ...resultPayload, txEvents });\n else reject(Object.assign(new DryRunError(reason as string), { tx, accountAddress }));\n });\n}\n\n/**\n * Transaction dry-run\n * @category chain\n * @param tx - transaction to execute\n * @param accountAddress - address that will be used to execute transaction\n * @param options - Options\n * @param options.top - hash of block on which to make dry-run\n * @param options.txEvents - collect and return on-chain tx events that would result from the call\n * @param options.combine - Enables combining of similar requests to a single dry-run call\n * @param options.onNode - Node to use\n */\nexport async function txDryRun(\n tx: Encoded.Transaction,\n accountAddress: Encoded.AccountAddress,\n {\n top, txEvents, combine, onNode,\n }:\n { top?: TxDryRunArguments['top']; txEvents?: boolean; combine?: boolean; onNode: Node },\n): Promise<{\n txEvents?: TransformNodeType<DryRunResults['txEvents']>;\n } & TransformNodeType<DryRunResult>> {\n const key = combine === true ? [top, txEvents].join() : 'immediate';\n const requests = txDryRunRequests.get(key) ?? [];\n txDryRunRequests.set(key, requests);\n return new Promise((resolve, reject) => {\n requests.push({\n tx, accountAddress, top, txEvents, resolve, reject,\n });\n if (combine !== true) {\n void txDryRunHandler(key, onNode);\n return;\n }\n requests.timeout ??= setTimeout(() => { void txDryRunHandler(key, onNode); });\n });\n}\n\n/**\n * Get contract byte code\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContractByteCode(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ByteCode>> {\n return onNode.getContractCode(contractId);\n}\n\n/**\n * Get contract entry\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContract(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ContractObject>> {\n return onNode.getContract(contractId);\n}\n\n/**\n * Get name entry\n * @category AENS\n * @param name - AENS name\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getName(\n name: AensName,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<NameEntry>> {\n return onNode.getNameEntryByName(name);\n}\n\n/**\n * Resolve AENS name and return name hash\n * @category AENS\n * @param nameOrId - AENS name or address\n * @param key - in AENS pointers record\n * @param options - Options\n * @param options.verify - To ensure that name exist and have a corresponding pointer\n * // TODO: avoid that to don't trust to current api gateway\n * @param options.resolveByNode - Enables pointer resolving using node\n * @param options.onNode - Node to use\n * @returns Address or AENS name hash\n */\nexport async function resolveName <\n Type extends Encoding.AccountAddress | Encoding.ContractAddress,\n>(\n nameOrId: AensName | Encoded.Generic<Type>,\n key: string,\n { verify = true, resolveByNode = false, onNode }:\n { verify?: boolean; resolveByNode?: boolean; onNode: Node },\n): Promise<Encoded.Generic<Type | Encoding.Name>> {\n if (isNameValid(nameOrId)) {\n if (verify || resolveByNode) {\n const name = await onNode.getNameEntryByName(nameOrId);\n const pointer = name.pointers.find((p) => p.key === key);\n if (pointer == null) throw new AensPointerContextError(nameOrId, key);\n if (resolveByNode) return pointer.id as Encoded.Generic<Type>;\n }\n return produceNameId(nameOrId);\n }\n try {\n decode(nameOrId);\n return nameOrId;\n } catch (error) {\n throw new InvalidAensNameError(`Invalid name or address: ${nameOrId}`);\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"chain.mjs","names":["AE_AMOUNT_FORMATS","formatAmount","isAccountNotFoundError","pause","unwrapProxy","isNameValid","produceNameId","DRY_RUN_ACCOUNT","AensPointerContextError","DryRunError","InvalidAensNameError","TxTimedOutError","TxNotInChainError","InternalError","decode","encode","Encoding","_getPollInterval","type","_expectedMineRate","_microBlockCycle","onNode","_ref","_await$getVal","getVal","t","val","devModeDef","def","getNetworkId","base","Math","floor","heightCache","WeakMap","getHeight","cached","options","cache","get","time","Date","now","height","getCurrentKeyBlockHeight","set","poll","th","blocks","interval","_interval","max","tx","getTransactionByHash","blockHeight","ttl","awaitHeight","_interval2","min","currentHeight","waitForTxConfirm","txHash","confirm","newBlockHeight","getAccount","address","hash","getAccountByPubkeyAndHeight","getAccountByPubkeyAndHash","getAccountByPubkey","getBalance","format","AETTOS","addr","startsWith","AccountAddress","balance","catch","error","targetDenomination","getCurrentGeneration","getGeneration","hashOrHeight","getGenerationByHeight","getGenerationByHash","getMicroBlockTransactions","getMicroBlockTransactionsByHash","transactions","getKeyBlock","getKeyBlockByHeight","getKeyBlockByHash","getMicroBlockHeader","getMicroBlockHeaderByHash","txDryRunRequests","Map","txDryRunHandler","key","rs","delete","dryRunRes","top","protectedDryRunTxs","txEvents","txs","map","req","accounts","Array","from","Set","accountAddress","pubKey","amount","forEach","reject","results","result","reason","resultPayload","idx","resolve","Object","assign","txDryRun","combine","_txDryRunRequests$get","join","requests","Promise","_requests$timeout","push","timeout","setTimeout","getContractByteCode","contractId","getContractCode","getContract","getName","name","getNameEntryByName","resolveName","nameOrId","verify","resolveByNode","pointer","pointers","find","p","id"],"sources":["../src/chain.ts"],"sourcesContent":["import { AE_AMOUNT_FORMATS, formatAmount } from './utils/amount-formatter';\nimport { isAccountNotFoundError, pause } from './utils/other';\nimport { unwrapProxy } from './utils/wrap-proxy';\nimport { isNameValid, produceNameId } from './tx/builder/helpers';\nimport { AensName, DRY_RUN_ACCOUNT } from './tx/builder/constants';\nimport {\n AensPointerContextError, DryRunError, InvalidAensNameError,\n TxTimedOutError, TxNotInChainError, InternalError,\n} from './utils/errors';\nimport Node, { TransformNodeType } from './Node';\nimport {\n Account as AccountNode, ByteCode, ContractObject, DryRunResult, DryRunResults,\n Generation, KeyBlock, MicroBlockHeader, NameEntry, SignedTx,\n} from './apis/node';\nimport {\n decode, encode, Encoded, Encoding,\n} from './utils/encoder';\n\n/**\n * @category chain\n * @param type - Type\n * @param options - Options\n */\nexport async function _getPollInterval(\n type: 'key-block' | 'micro-block',\n { _expectedMineRate, _microBlockCycle, onNode }:\n { _expectedMineRate?: number; _microBlockCycle?: number; onNode: Node },\n): Promise<number> {\n const getVal = async (\n t: string,\n val: number | undefined,\n devModeDef: number,\n def: number,\n ): Promise<number | null> => {\n if (t !== type) return null;\n if (val != null) return val;\n return await onNode?.getNetworkId() === 'ae_dev' ? devModeDef : def;\n };\n\n const base = await getVal('key-block', _expectedMineRate, 0, 180000)\n ?? await getVal('micro-block', _microBlockCycle, 0, 3000)\n ?? (() => { throw new InternalError(`Unknown type: ${type}`); })();\n return Math.floor(base / 3);\n}\n\nconst heightCache: WeakMap<Node, { time: number; height: number }> = new WeakMap();\n\n/**\n * Obtain current height of the chain\n * @category chain\n * @param options - Options\n * @param options.cached - Get height from the cache. The lag behind the actual height shouldn't\n * be more than 1 block. Use if needed to reduce requests count, and approximate value can be used.\n * For example, for timeout check in transaction status polling.\n * @returns Current chain height\n */\nexport async function getHeight(\n { cached = false, ...options }: {\n onNode: Node;\n cached?: boolean;\n } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n const onNode = unwrapProxy(options.onNode);\n if (cached) {\n const cache = heightCache.get(onNode);\n if (cache != null && cache.time > Date.now() - await _getPollInterval('key-block', options)) {\n return cache.height;\n }\n }\n const { height } = await onNode.getCurrentKeyBlockHeight();\n heightCache.set(onNode, { height, time: Date.now() });\n return height;\n}\n\n/**\n * Return transaction details if it is mined, fail otherwise.\n * If the transaction has ttl specified then would wait till it leaves the mempool.\n * Otherwise would fail if a specified amount of blocks were mined.\n * @category chain\n * @param th - The hash of transaction to poll\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.blocks - Number of blocks mined after which to fail if transaction ttl is not set\n * @param options.onNode - Node to use\n * @returns The transaction as it was mined\n */\nexport async function poll(\n th: Encoded.TxHash,\n {\n blocks = 5, interval, ...options\n }:\n { blocks?: number; interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<TransformNodeType<SignedTx>> {\n interval ??= await _getPollInterval('micro-block', options);\n let max;\n do {\n const tx = await options.onNode.getTransactionByHash(th);\n if (tx.blockHeight !== -1) return tx;\n if (max == null) {\n max = tx.tx.ttl !== 0 ? -1\n : await getHeight({ ...options, cached: true }) + blocks;\n }\n await pause(interval);\n } while (max === -1 ? true : await getHeight({ ...options, cached: true }) < max);\n throw new TxTimedOutError(blocks, th);\n}\n\n/**\n * Wait for the chain to reach a specific height\n * @category chain\n * @param height - Height to wait for\n * @param options - Options\n * @param options.interval - Interval (in ms) at which to poll the chain\n * @param options.onNode - Node to use\n * @returns Current chain height\n */\nexport async function awaitHeight(\n height: number,\n { interval, ...options }:\n { interval?: number; onNode: Node } & Parameters<typeof _getPollInterval>[1],\n): Promise<number> {\n interval ??= Math.min(await _getPollInterval('key-block', options), 5000);\n let currentHeight;\n do {\n if (currentHeight != null) await pause(interval);\n currentHeight = await getHeight(options);\n } while (currentHeight < height);\n return currentHeight;\n}\n\n/**\n * Wait for transaction confirmation\n * @category chain\n * @param txHash - Transaction hash\n * @param options - Options\n * @param options.confirm - Number of micro blocks to wait for transaction confirmation\n * @param options.onNode - Node to use\n * @returns Current Height\n */\nexport async function waitForTxConfirm(\n txHash: Encoded.TxHash,\n { confirm = 3, onNode, ...options }:\n { confirm?: number; onNode: Node } & Parameters<typeof awaitHeight>[1],\n): Promise<number> {\n const { blockHeight } = await onNode.getTransactionByHash(txHash);\n const height = await awaitHeight(blockHeight + confirm, { onNode, ...options });\n const { blockHeight: newBlockHeight } = await onNode.getTransactionByHash(txHash);\n switch (newBlockHeight) {\n case -1:\n throw new TxNotInChainError(txHash);\n case blockHeight:\n return height;\n default:\n return waitForTxConfirm(txHash, { onNode, confirm, ...options });\n }\n}\n\n/**\n * Get account by account public key\n * @category chain\n * @param address - Account address (public key)\n * @param options - Options\n * @param options.height - Get account on specific block by block height\n * @param options.hash - Get account on specific block by micro block hash or key block hash\n * @param options.onNode - Node to use\n */\nexport async function getAccount(\n address: Encoded.AccountAddress | Encoded.ContractAddress,\n { height, hash, onNode }:\n { height?: number; hash?: Encoded.KeyBlockHash | Encoded.MicroBlockHash; onNode: Node },\n): Promise<TransformNodeType<AccountNode>> {\n if (height != null) return onNode.getAccountByPubkeyAndHeight(address, height);\n if (hash != null) return onNode.getAccountByPubkeyAndHash(address, hash);\n return onNode.getAccountByPubkey(address);\n}\n\n/**\n * Request the balance of specified account\n * @category chain\n * @param address - The public account address to obtain the balance for\n * @param options - Options\n * @param options.format\n * @param options.height - The chain height at which to obtain the balance for\n * (default: top of chain)\n * @param options.hash - The block hash on which to obtain the balance for (default: top of chain)\n */\nexport async function getBalance(\n address: Encoded.AccountAddress | Encoded.ContractAddress | Encoded.OracleAddress,\n { format = AE_AMOUNT_FORMATS.AETTOS, ...options }:\n { format?: AE_AMOUNT_FORMATS } & Parameters<typeof getAccount>[1],\n): Promise<string> {\n const addr = address.startsWith('ok_')\n ? encode(decode(address), Encoding.AccountAddress)\n : address as Encoded.AccountAddress | Encoded.ContractAddress;\n\n const { balance } = await getAccount(addr, options).catch((error) => {\n if (!isAccountNotFoundError(error)) throw error;\n return { balance: 0n };\n });\n\n return formatAmount(balance, { targetDenomination: format });\n}\n\n/**\n * Obtain current generation\n * @category chain\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Current Generation\n */\nexport async function getCurrentGeneration(\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n return onNode.getCurrentGeneration();\n}\n\n/**\n * Get generation by hash or height\n * @category chain\n * @param hashOrHeight - Generation hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Generation\n */\nexport async function getGeneration(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<Generation>> {\n if (typeof hashOrHeight === 'number') return onNode.getGenerationByHeight(hashOrHeight);\n return onNode.getGenerationByHash(hashOrHeight);\n}\n\n/**\n * Get micro block transactions\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Transactions\n */\nexport async function getMicroBlockTransactions(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<SignedTx[]>> {\n return (await onNode.getMicroBlockTransactionsByHash(hash)).transactions;\n}\n\n/**\n * Get key block\n * @category chain\n * @param hashOrHeight - Key block hash or height\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Key Block\n */\nexport async function getKeyBlock(\n hashOrHeight: Encoded.KeyBlockHash | number,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<KeyBlock>> {\n if (typeof hashOrHeight === 'number') return onNode.getKeyBlockByHeight(hashOrHeight);\n return onNode.getKeyBlockByHash(hashOrHeight);\n}\n\n/**\n * Get micro block header\n * @category chain\n * @param hash - Micro block hash\n * @param options - Options\n * @param options.onNode - Node to use\n * @returns Micro block header\n */\nexport async function getMicroBlockHeader(\n hash: Encoded.MicroBlockHash,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<MicroBlockHeader>> {\n return onNode.getMicroBlockHeaderByHash(hash);\n}\n\ninterface TxDryRunArguments {\n tx: Encoded.Transaction;\n accountAddress: Encoded.AccountAddress;\n top?: number | Encoded.KeyBlockHash | Encoded.MicroBlockHash;\n txEvents?: any;\n resolve: Function;\n reject: Function;\n}\nconst txDryRunRequests: Map<string, TxDryRunArguments[] & { timeout?: NodeJS.Timeout }> = new Map();\n\nasync function txDryRunHandler(key: string, onNode: Node): Promise<void> {\n const rs = txDryRunRequests.get(key);\n txDryRunRequests.delete(key);\n if (rs == null) throw new InternalError('Can\\'t get dry-run request');\n\n let dryRunRes;\n try {\n const top = typeof rs[0].top === 'number'\n ? (await getKeyBlock(rs[0].top, { onNode })).hash : rs[0].top;\n dryRunRes = await onNode.protectedDryRunTxs({\n top,\n txEvents: rs[0].txEvents,\n txs: rs.map((req) => ({ tx: req.tx })),\n accounts: Array.from(new Set(rs.map((req) => req.accountAddress)))\n .map((pubKey) => ({ pubKey, amount: DRY_RUN_ACCOUNT.amount })),\n });\n } catch (error) {\n rs.forEach(({ reject }) => reject(error));\n return;\n }\n\n const { results, txEvents } = dryRunRes;\n results.forEach(({ result, reason, ...resultPayload }, idx) => {\n const {\n resolve, reject, tx, accountAddress,\n } = rs[idx];\n if (result === 'ok') resolve({ ...resultPayload, txEvents });\n else reject(Object.assign(new DryRunError(reason as string), { tx, accountAddress }));\n });\n}\n\n/**\n * Transaction dry-run\n * @category chain\n * @param tx - transaction to execute\n * @param accountAddress - address that will be used to execute transaction\n * @param options - Options\n * @param options.top - hash of block on which to make dry-run\n * @param options.txEvents - collect and return on-chain tx events that would result from the call\n * @param options.combine - Enables combining of similar requests to a single dry-run call\n * @param options.onNode - Node to use\n */\nexport async function txDryRun(\n tx: Encoded.Transaction,\n accountAddress: Encoded.AccountAddress,\n {\n top, txEvents, combine, onNode,\n }:\n { top?: TxDryRunArguments['top']; txEvents?: boolean; combine?: boolean; onNode: Node },\n): Promise<{\n txEvents?: TransformNodeType<DryRunResults['txEvents']>;\n } & TransformNodeType<DryRunResult>> {\n const key = combine === true ? [top, txEvents].join() : 'immediate';\n const requests = txDryRunRequests.get(key) ?? [];\n txDryRunRequests.set(key, requests);\n return new Promise((resolve, reject) => {\n requests.push({\n tx, accountAddress, top, txEvents, resolve, reject,\n });\n if (combine !== true) {\n void txDryRunHandler(key, onNode);\n return;\n }\n requests.timeout ??= setTimeout(() => { void txDryRunHandler(key, onNode); });\n });\n}\n\n/**\n * Get contract byte code\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContractByteCode(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ByteCode>> {\n return onNode.getContractCode(contractId);\n}\n\n/**\n * Get contract entry\n * @category contract\n * @param contractId - Contract address\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getContract(\n contractId: Encoded.ContractAddress,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<ContractObject>> {\n return onNode.getContract(contractId);\n}\n\n/**\n * Get name entry\n * @category AENS\n * @param name - AENS name\n * @param options - Options\n * @param options.onNode - Node to use\n */\nexport async function getName(\n name: AensName,\n { onNode }: { onNode: Node },\n): Promise<TransformNodeType<NameEntry>> {\n return onNode.getNameEntryByName(name);\n}\n\n/**\n * Resolve AENS name and return name hash\n * @category AENS\n * @param nameOrId - AENS name or address\n * @param key - in AENS pointers record\n * @param options - Options\n * @param options.verify - To ensure that name exist and have a corresponding pointer\n * // TODO: avoid that to don't trust to current api gateway\n * @param options.resolveByNode - Enables pointer resolving using node\n * @param options.onNode - Node to use\n * @returns Address or AENS name hash\n */\nexport async function resolveName <\n Type extends Encoding.AccountAddress | Encoding.ContractAddress,\n>(\n nameOrId: AensName | Encoded.Generic<Type>,\n key: string,\n { verify = true, resolveByNode = false, onNode }:\n { verify?: boolean; resolveByNode?: boolean; onNode: Node },\n): Promise<Encoded.Generic<Type | Encoding.Name>> {\n if (isNameValid(nameOrId)) {\n if (verify || resolveByNode) {\n const name = await onNode.getNameEntryByName(nameOrId);\n const pointer = name.pointers.find((p) => p.key === key);\n if (pointer == null) throw new AensPointerContextError(nameOrId, key);\n if (resolveByNode) return pointer.id as Encoded.Generic<Type>;\n }\n return produceNameId(nameOrId);\n }\n try {\n decode(nameOrId);\n return nameOrId;\n } catch (error) {\n throw new InvalidAensNameError(`Invalid name or address: ${nameOrId}`);\n }\n}\n"],"mappings":"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"}
|
package/es/channel/Base.d.ts
CHANGED
package/es/channel/Base.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Base.mjs","names":["EventEmitter","snakeToPascal","buildTx","unpackTx","Tag","handlers","initialize","enqueueAction","notify","call","disconnect","channelDisconnect","ChannelError","snakeToPascalObjKeys","obj","Object","entries","reduce","result","key","val","channelCounter","_debugId","WeakMap","Channel","constructor","_defineProperty","Map","_classPrivateFieldInitSpec","writable","value","_classPrivateFieldSet","_debug","args","_options","debug","console","_classPrivateFieldGet","options","_initialize","channel","existingFsmId","awaitingReconnection","awaitingConnection","channelOpen","on","eventName","callback","_eventEmitter","off","removeListener","status","_status","state","res","calls","CallsMtree","halfSignedTx","SignedTx","signedTx","trees","StateTrees","round","_state","params","encodedTx","tag","ChannelCreateTx","ChannelOffChainTx","ChannelWithdrawTx","ChannelDepositTx","id","_channelId","fsmId","_fsmId","action","handler","leave","awaitingLeave","shutdown","sign","awaitingShutdownTx","reconnect","txParams","reconnectTx","ChannelClientReconnectTx"],"sources":["../../src/channel/Base.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport { w3cwebsocket as W3CWebSocket } from 'websocket';\nimport { snakeToPascal } from '../utils/string';\nimport { buildTx, unpackTx } from '../tx/builder';\nimport { Tag } from '../tx/builder/constants';\nimport * as handlers from './handlers';\nimport {\n initialize,\n enqueueAction,\n notify,\n call,\n disconnect as channelDisconnect,\n SignTx,\n ChannelOptions,\n ChannelState,\n ChannelHandler,\n ChannelAction,\n ChannelStatus,\n ChannelFsm,\n ChannelMessage,\n ChannelEvents,\n} from './internal';\nimport { ChannelError } from '../utils/errors';\nimport { Encoded } from '../utils/encoder';\nimport { TxUnpacked } from '../tx/builder/schema.generated';\n\nfunction snakeToPascalObjKeys<Type>(obj: object): Type {\n return Object.entries(obj).reduce((result, [key, val]) => ({\n ...result,\n [snakeToPascal(key)]: val,\n }), {}) as Type;\n}\n\nlet channelCounter = 0;\n\n/**\n * Channel\n * @example\n * ```js\n * await Channel.initialize({\n * url: 'ws://localhost:3001',\n * role: 'initiator'\n * initiatorId: 'ak_Y1NRjHuoc3CGMYMvCmdHSBpJsMDR6Ra2t5zjhRcbtMeXXLpLH',\n * responderId: 'ak_V6an1xhec1xVaAhLuak7QoEbi6t7w5hEtYWp9bMKaJ19i6A9E',\n * initiatorAmount: 1e18,\n * responderAmount: 1e18,\n * pushAmount: 0,\n * channelReserve: 0,\n * ttl: 1000,\n * host: 'localhost',\n * port: 3002,\n * lockPeriod: 10,\n * async sign (tag, tx) => await account.signTransaction(tx)\n * })\n * ```\n */\nexport default class Channel {\n _eventEmitter = new EventEmitter();\n\n _pingTimeoutId!: NodeJS.Timeout;\n\n _nextRpcMessageId = 0;\n\n _rpcCallbacks = new Map<number, (message: object) => void>();\n\n _fsmId?: Encoded.Bytearray;\n\n _messageQueue: ChannelMessage[] = [];\n\n _isMessageQueueLocked = false;\n\n _actionQueue: ChannelAction[] = [];\n\n _isActionQueueLocked = false;\n\n _status: ChannelStatus = 'disconnected';\n\n _fsm!: ChannelFsm;\n\n _websocket!: W3CWebSocket;\n\n _state: Encoded.Transaction | '' = '';\n\n _options!: ChannelOptions;\n\n readonly #debugId: number;\n\n _channelId?: Encoded.Channel;\n\n protected constructor() {\n channelCounter += 1;\n this.#debugId = channelCounter;\n }\n\n _debug(...args: any[]): void {\n if (this._options.debug !== true) return;\n console.debug(`Channel #${this.#debugId}`, ...args);\n }\n\n /**\n * @param options - Channel params\n */\n static async initialize(options: ChannelOptions): Promise<Channel> {\n return Channel._initialize(new Channel(), options);\n }\n\n static async _initialize<T extends Channel>(channel: T, options: ChannelOptions): Promise<T> {\n await initialize(\n channel,\n options.existingFsmId != null ? handlers.awaitingReconnection : handlers.awaitingConnection,\n handlers.channelOpen,\n options,\n );\n return channel;\n }\n\n /**\n * Register event listener function\n *\n * Possible events:\n *\n * - \"error\"\n * - \"stateChanged\"\n * - \"statusChanged\"\n * - \"message\"\n * - \"peerDisconnected\"\n * - \"onChainTx\"\n * - \"ownWithdrawLocked\"\n * - \"withdrawLocked\"\n * - \"ownDepositLocked\"\n * - \"depositLocked\"\n * - \"channelReestablished\"\n * - \"newContract\"\n *\n *\n * @param eventName - Event name\n * @param callback - Callback function\n */\n on<E extends keyof ChannelEvents>(eventName: E, callback: ChannelEvents[E]): void {\n this._eventEmitter.on(eventName, callback);\n }\n\n /**\n * Remove event listener function\n * @param eventName - Event name\n * @param callback - Callback function\n */\n off<E extends keyof ChannelEvents>(eventName: E, callback: ChannelEvents[E]): void {\n this._eventEmitter.removeListener(eventName, callback);\n }\n\n /**\n * Close the connection\n */\n disconnect(): void {\n return channelDisconnect(this);\n }\n\n /**\n * Get current status\n */\n status(): ChannelStatus {\n return this._status;\n }\n\n /**\n * Get current state\n */\n async state(): Promise<{\n calls: TxUnpacked & { tag: Tag.CallsMtree };\n halfSignedTx?: TxUnpacked & { tag: Tag.SignedTx };\n signedTx?: TxUnpacked & { tag: Tag.SignedTx };\n trees: TxUnpacked & { tag: Tag.StateTrees };\n }> {\n const res = snakeToPascalObjKeys<{\n calls: Encoded.CallStateTree;\n halfSignedTx: Encoded.Transaction | '';\n signedTx: Encoded.Transaction | '';\n trees: Encoded.StateTrees;\n }>(await call(this, 'channels.get.offchain_state', {}));\n return {\n calls: unpackTx(res.calls, Tag.CallsMtree),\n ...res.halfSignedTx !== '' && { halfSignedTx: unpackTx(res.halfSignedTx, Tag.SignedTx) },\n ...res.signedTx !== '' && { signedTx: unpackTx(res.signedTx, Tag.SignedTx) },\n trees: unpackTx(res.trees, Tag.StateTrees),\n };\n }\n\n /**\n * Get current round\n *\n * If round cannot be determined (for example when channel has not been opened)\n * it will return `null`.\n */\n round(): number | null {\n if (this._state === '') {\n return null;\n }\n const params = unpackTx(this._state, Tag.SignedTx).encodedTx;\n switch (params.tag) {\n case Tag.ChannelCreateTx:\n return 1;\n case Tag.ChannelOffChainTx:\n case Tag.ChannelWithdrawTx:\n case Tag.ChannelDepositTx:\n return params.round;\n default:\n return null;\n }\n }\n\n /**\n * Get channel id\n *\n */\n id(): Encoded.Channel {\n if (this._channelId == null) throw new ChannelError('Channel is not initialized');\n return this._channelId;\n }\n\n /**\n * Get channel's fsm id\n *\n */\n fsmId(): Encoded.Bytearray {\n if (this._fsmId == null) throw new ChannelError('Channel is not initialized');\n return this._fsmId;\n }\n\n protected async enqueueAction(\n action: () => { handler: ChannelHandler; state?: Partial<ChannelState> },\n ): Promise<any> {\n return enqueueAction(\n this,\n (channel, state) => state?.handler === handlers.channelOpen,\n action,\n );\n }\n\n /**\n * Leave channel\n *\n * It is possible to leave a channel and then later reestablish the channel\n * off-chain state and continue operation. When a leave method is called,\n * the channel fsm passes it on to the peer fsm, reports the current mutually\n * signed state and then terminates.\n *\n * The channel can be reestablished by instantiating another Channel instance\n * with two extra params: existingChannelId and offchainTx (returned from leave\n * method as channelId and signedTx respectively).\n *\n * @example\n * ```js\n * channel.leave().then(({ channelId, signedTx }) => {\n * console.log(channelId)\n * console.log(signedTx)\n * })\n * ```\n */\n async leave(): Promise<{ channelId: Encoded.Bytearray; signedTx: Encoded.Transaction }> {\n return this.enqueueAction(() => {\n notify(this, 'channels.leave');\n return { handler: handlers.awaitingLeave };\n });\n }\n\n /**\n * Trigger mutual close\n *\n * At any moment after the channel is opened, a closing procedure can be triggered.\n * This can be done by either of the parties. The process is similar to the off-chain updates.\n *\n * @param sign - Function which verifies and signs mutual close transaction\n * @example\n * ```js\n * channel.shutdown(\n * async (tx) => await account.signTransaction(tx)\n * ).then(tx => console.log('on_chain_tx', tx))\n * ```\n */\n async shutdown(sign: SignTx): Promise<Encoded.Transaction> {\n return this.enqueueAction(() => {\n notify(this, 'channels.shutdown');\n return {\n handler: handlers.awaitingShutdownTx,\n state: { sign },\n };\n });\n }\n\n static async reconnect(options: ChannelOptions, txParams: any): Promise<Channel> {\n const { sign } = options;\n\n return Channel.initialize({\n ...options,\n reconnectTx: await sign(\n 'reconnect',\n buildTx({ ...txParams, tag: Tag.ChannelClientReconnectTx }),\n ),\n });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Base.mjs","names":["EventEmitter","snakeToPascal","buildTx","unpackTx","Tag","handlers","initialize","enqueueAction","notify","call","disconnect","channelDisconnect","ChannelError","snakeToPascalObjKeys","obj","Object","entries","reduce","result","key","val","channelCounter","_debugId","WeakMap","Channel","constructor","_defineProperty","Map","_classPrivateFieldInitSpec","writable","value","_classPrivateFieldSet","_debug","args","_options","debug","console","_classPrivateFieldGet","options","_initialize","channel","existingFsmId","awaitingReconnection","awaitingConnection","channelOpen","on","eventName","callback","_eventEmitter","off","removeListener","status","_status","state","res","calls","CallsMtree","halfSignedTx","SignedTx","signedTx","trees","StateTrees","round","_state","params","encodedTx","tag","ChannelCreateTx","ChannelOffChainTx","ChannelWithdrawTx","ChannelDepositTx","id","_channelId","fsmId","_fsmId","action","handler","leave","awaitingLeave","shutdown","sign","awaitingShutdownTx","reconnect","txParams","reconnectTx","ChannelClientReconnectTx"],"sources":["../../src/channel/Base.ts"],"sourcesContent":["import EventEmitter from 'events';\nimport { w3cwebsocket as W3CWebSocket } from 'websocket';\nimport { snakeToPascal } from '../utils/string';\nimport { buildTx, unpackTx } from '../tx/builder';\nimport { Tag } from '../tx/builder/constants';\nimport * as handlers from './handlers';\nimport {\n initialize,\n enqueueAction,\n notify,\n call,\n disconnect as channelDisconnect,\n SignTx,\n ChannelOptions,\n ChannelState,\n ChannelHandler,\n ChannelAction,\n ChannelStatus,\n ChannelFsm,\n ChannelMessage,\n ChannelEvents,\n} from './internal';\nimport { ChannelError } from '../utils/errors';\nimport { Encoded } from '../utils/encoder';\nimport { TxUnpacked } from '../tx/builder/schema.generated';\n\nfunction snakeToPascalObjKeys<Type>(obj: object): Type {\n return Object.entries(obj).reduce((result, [key, val]) => ({\n ...result,\n [snakeToPascal(key)]: val,\n }), {}) as Type;\n}\n\nlet channelCounter = 0;\n\n/**\n * Channel\n * @example\n * ```js\n * await Channel.initialize({\n * url: 'ws://localhost:3001',\n * role: 'initiator'\n * initiatorId: 'ak_Y1NRjHuoc3CGMYMvCmdHSBpJsMDR6Ra2t5zjhRcbtMeXXLpLH',\n * responderId: 'ak_V6an1xhec1xVaAhLuak7QoEbi6t7w5hEtYWp9bMKaJ19i6A9E',\n * initiatorAmount: 1e18,\n * responderAmount: 1e18,\n * pushAmount: 0,\n * channelReserve: 0,\n * ttl: 1000,\n * host: 'localhost',\n * port: 3002,\n * lockPeriod: 10,\n * async sign (tag, tx) => await account.signTransaction(tx)\n * })\n * ```\n */\nexport default class Channel {\n _eventEmitter = new EventEmitter();\n\n _pingTimeoutId!: NodeJS.Timeout;\n\n _nextRpcMessageId = 0;\n\n _rpcCallbacks = new Map<number, (message: object) => void>();\n\n _fsmId?: Encoded.Bytearray;\n\n _messageQueue: ChannelMessage[] = [];\n\n _isMessageQueueLocked = false;\n\n _actionQueue: ChannelAction[] = [];\n\n _isActionQueueLocked = false;\n\n _status: ChannelStatus = 'disconnected';\n\n _fsm!: ChannelFsm;\n\n _websocket!: W3CWebSocket;\n\n _state: Encoded.Transaction | '' = '';\n\n _options!: ChannelOptions;\n\n readonly #debugId: number;\n\n _channelId?: Encoded.Channel;\n\n protected constructor() {\n channelCounter += 1;\n this.#debugId = channelCounter;\n }\n\n _debug(...args: any[]): void {\n if (this._options.debug !== true) return;\n console.debug(`Channel #${this.#debugId}`, ...args);\n }\n\n /**\n * @param options - Channel params\n */\n static async initialize(options: ChannelOptions): Promise<Channel> {\n return Channel._initialize(new Channel(), options);\n }\n\n static async _initialize<T extends Channel>(channel: T, options: ChannelOptions): Promise<T> {\n await initialize(\n channel,\n options.existingFsmId != null ? handlers.awaitingReconnection : handlers.awaitingConnection,\n handlers.channelOpen,\n options,\n );\n return channel;\n }\n\n /**\n * Register event listener function\n *\n * Possible events:\n *\n * - \"error\"\n * - \"stateChanged\"\n * - \"statusChanged\"\n * - \"message\"\n * - \"peerDisconnected\"\n * - \"onChainTx\"\n * - \"ownWithdrawLocked\"\n * - \"withdrawLocked\"\n * - \"ownDepositLocked\"\n * - \"depositLocked\"\n * - \"channelReestablished\"\n * - \"newContract\"\n *\n *\n * @param eventName - Event name\n * @param callback - Callback function\n */\n on<E extends keyof ChannelEvents>(eventName: E, callback: ChannelEvents[E]): void {\n this._eventEmitter.on(eventName, callback);\n }\n\n /**\n * Remove event listener function\n * @param eventName - Event name\n * @param callback - Callback function\n */\n off<E extends keyof ChannelEvents>(eventName: E, callback: ChannelEvents[E]): void {\n this._eventEmitter.removeListener(eventName, callback);\n }\n\n /**\n * Close the connection\n */\n disconnect(): void {\n return channelDisconnect(this);\n }\n\n /**\n * Get current status\n */\n status(): ChannelStatus {\n return this._status;\n }\n\n /**\n * Get current state\n */\n async state(): Promise<{\n calls: TxUnpacked & { tag: Tag.CallsMtree };\n halfSignedTx?: TxUnpacked & { tag: Tag.SignedTx };\n signedTx?: TxUnpacked & { tag: Tag.SignedTx };\n trees: TxUnpacked & { tag: Tag.StateTrees };\n }> {\n const res = snakeToPascalObjKeys<{\n calls: Encoded.CallStateTree;\n halfSignedTx: Encoded.Transaction | '';\n signedTx: Encoded.Transaction | '';\n trees: Encoded.StateTrees;\n }>(await call(this, 'channels.get.offchain_state', {}));\n return {\n calls: unpackTx(res.calls, Tag.CallsMtree),\n ...res.halfSignedTx !== '' && { halfSignedTx: unpackTx(res.halfSignedTx, Tag.SignedTx) },\n ...res.signedTx !== '' && { signedTx: unpackTx(res.signedTx, Tag.SignedTx) },\n trees: unpackTx(res.trees, Tag.StateTrees),\n };\n }\n\n /**\n * Get current round\n *\n * If round cannot be determined (for example when channel has not been opened)\n * it will return `null`.\n */\n round(): number | null {\n if (this._state === '') {\n return null;\n }\n const params = unpackTx(this._state, Tag.SignedTx).encodedTx;\n switch (params.tag) {\n case Tag.ChannelCreateTx:\n return 1;\n case Tag.ChannelOffChainTx:\n case Tag.ChannelWithdrawTx:\n case Tag.ChannelDepositTx:\n return params.round;\n default:\n return null;\n }\n }\n\n /**\n * Get channel id\n *\n */\n id(): Encoded.Channel {\n if (this._channelId == null) throw new ChannelError('Channel is not initialized');\n return this._channelId;\n }\n\n /**\n * Get channel's fsm id\n *\n */\n fsmId(): Encoded.Bytearray {\n if (this._fsmId == null) throw new ChannelError('Channel is not initialized');\n return this._fsmId;\n }\n\n protected async enqueueAction(\n action: () => { handler: ChannelHandler; state?: Partial<ChannelState> },\n ): Promise<any> {\n return enqueueAction(\n this,\n (channel, state) => state?.handler === handlers.channelOpen,\n action,\n );\n }\n\n /**\n * Leave channel\n *\n * It is possible to leave a channel and then later reestablish the channel\n * off-chain state and continue operation. When a leave method is called,\n * the channel fsm passes it on to the peer fsm, reports the current mutually\n * signed state and then terminates.\n *\n * The channel can be reestablished by instantiating another Channel instance\n * with two extra params: existingChannelId and offchainTx (returned from leave\n * method as channelId and signedTx respectively).\n *\n * @example\n * ```js\n * channel.leave().then(({ channelId, signedTx }) => {\n * console.log(channelId)\n * console.log(signedTx)\n * })\n * ```\n */\n async leave(): Promise<{ channelId: Encoded.Channel; signedTx: Encoded.Transaction }> {\n return this.enqueueAction(() => {\n notify(this, 'channels.leave');\n return { handler: handlers.awaitingLeave };\n });\n }\n\n /**\n * Trigger mutual close\n *\n * At any moment after the channel is opened, a closing procedure can be triggered.\n * This can be done by either of the parties. The process is similar to the off-chain updates.\n *\n * @param sign - Function which verifies and signs mutual close transaction\n * @example\n * ```js\n * channel.shutdown(\n * async (tx) => await account.signTransaction(tx)\n * ).then(tx => console.log('on_chain_tx', tx))\n * ```\n */\n async shutdown(sign: SignTx): Promise<Encoded.Transaction> {\n return this.enqueueAction(() => {\n notify(this, 'channels.shutdown');\n return {\n handler: handlers.awaitingShutdownTx,\n state: { sign },\n };\n });\n }\n\n static async reconnect(options: ChannelOptions, txParams: any): Promise<Channel> {\n const { sign } = options;\n\n return Channel.initialize({\n ...options,\n reconnectTx: await sign(\n 'reconnect',\n buildTx({ ...txParams, tag: Tag.ChannelClientReconnectTx }),\n ),\n });\n }\n}\n"],"mappings":"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"}
|