@aeternity/aepp-sdk 12.0.0 → 12.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -15
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +2 -1
- package/dist/aepp-sdk.browser.js.LICENSE.txt +1 -0
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +20764 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +7 -7
- package/es/AeSdk.mjs.map +1 -1
- package/es/AeSdkAepp.d.ts +4 -3
- package/es/AeSdkAepp.mjs +2 -1
- package/es/AeSdkAepp.mjs.map +1 -1
- package/es/AeSdkBase.d.ts +22 -21
- package/es/AeSdkBase.mjs +25 -21
- package/es/AeSdkBase.mjs.map +1 -1
- package/es/AeSdkWallet.d.ts +4 -3
- package/es/AeSdkWallet.mjs +5 -1
- package/es/AeSdkWallet.mjs.map +1 -1
- package/es/Node.d.ts +7 -10
- package/es/Node.mjs +63 -57
- package/es/Node.mjs.map +1 -1
- package/es/account/Base.d.ts +7 -4
- package/es/account/Base.mjs +3 -3
- package/es/account/Base.mjs.map +1 -1
- package/es/account/Memory.d.ts +5 -4
- package/es/account/Memory.mjs +24 -2
- package/es/account/Memory.mjs.map +1 -1
- package/es/account/Rpc.d.ts +6 -6
- package/es/account/Rpc.mjs +3 -2
- package/es/account/Rpc.mjs.map +1 -1
- package/es/aens.d.ts +27 -14
- package/es/aens.mjs +27 -21
- package/es/aens.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/Browser.d.ts +2 -1
- package/es/aepp-wallet-communication/connection/Browser.mjs +5 -2
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +5 -1
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -1
- package/es/aepp-wallet-communication/connection-proxy.d.ts +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs +1 -0
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +5 -5
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -1
- package/es/aepp-wallet-communication/rpc/types.d.ts +8 -8
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -1
- package/es/aepp-wallet-communication/schema.d.ts +17 -2
- package/es/aepp-wallet-communication/schema.mjs +54 -17
- package/es/aepp-wallet-communication/schema.mjs.map +1 -1
- package/es/aepp-wallet-communication/wallet-detector.d.ts +2 -1
- package/es/aepp-wallet-communication/wallet-detector.mjs +2 -3
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -1
- package/es/apis/node/models/index.d.ts +6 -2
- package/es/apis/node/models/index.mjs.map +1 -1
- package/es/apis/node/models/mappers.mjs +4 -2
- package/es/apis/node/models/mappers.mjs.map +1 -1
- package/es/chain.d.ts +92 -64
- package/es/chain.mjs +190 -154
- package/es/chain.mjs.map +1 -1
- package/es/channel/handlers.d.ts +3 -3
- package/es/channel/handlers.mjs +42 -44
- package/es/channel/handlers.mjs.map +1 -1
- package/es/channel/index.d.ts +43 -52
- package/es/channel/index.mjs +46 -49
- package/es/channel/index.mjs.map +1 -1
- package/es/channel/internal.d.ts +16 -15
- package/es/channel/internal.mjs +67 -62
- package/es/channel/internal.mjs.map +1 -1
- package/es/contract/Compiler.d.ts +1 -0
- package/es/contract/Compiler.mjs +5 -4
- package/es/contract/Compiler.mjs.map +1 -1
- package/es/contract/aci.d.ts +17 -15
- package/es/contract/aci.mjs +58 -45
- package/es/contract/aci.mjs.map +1 -1
- package/es/contract/ga.d.ts +16 -15
- package/es/contract/ga.mjs +12 -7
- package/es/contract/ga.mjs.map +1 -1
- package/es/contract/methods.d.ts +9 -6
- package/es/contract/methods.mjs +9 -6
- package/es/contract/methods.mjs.map +1 -1
- package/es/deprecated/index.d.ts +143 -0
- package/es/deprecated/index.mjs +162 -0
- package/es/deprecated/index.mjs.map +1 -0
- package/es/deprecated/methods.d.ts +18 -0
- package/es/deprecated/methods.mjs +26 -0
- package/es/deprecated/methods.mjs.map +1 -0
- package/es/index.d.ts +4 -1
- package/es/index.mjs +4 -1
- package/es/index.mjs.map +1 -1
- package/es/oracle.d.ts +69 -62
- package/es/oracle.mjs +121 -103
- package/es/oracle.mjs.map +1 -1
- package/es/spend.d.ts +16 -15
- package/es/spend.mjs +19 -30
- package/es/spend.mjs.map +1 -1
- package/es/tx/builder/address.d.ts +25 -0
- package/es/tx/builder/address.mjs +45 -0
- package/es/tx/builder/address.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +55 -26
- package/es/tx/builder/constants.mjs +60 -38
- package/es/tx/builder/constants.mjs.map +1 -1
- package/es/tx/builder/field-types/coin-amount.d.ts +13 -0
- package/es/tx/builder/field-types/coin-amount.mjs +26 -0
- package/es/tx/builder/field-types/coin-amount.mjs.map +1 -0
- package/es/tx/builder/field-types/deposit.d.ts +15 -0
- package/es/tx/builder/field-types/deposit.mjs +19 -0
- package/es/tx/builder/field-types/deposit.mjs.map +1 -0
- package/es/tx/builder/field-types/fee.d.ts +25 -0
- package/es/tx/{min-fee.mjs → builder/field-types/fee.mjs} +62 -60
- package/es/tx/builder/field-types/fee.mjs.map +1 -0
- package/es/tx/builder/field-types/field.d.ts +6 -0
- package/es/tx/builder/field-types/field.mjs +15 -0
- package/es/tx/builder/field-types/field.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-limit.d.ts +12 -0
- package/es/tx/builder/field-types/gas-limit.mjs +33 -0
- package/es/tx/builder/field-types/gas-limit.mjs.map +1 -0
- package/es/tx/builder/field-types/gas-price.d.ts +8 -0
- package/es/tx/builder/field-types/gas-price.mjs +18 -0
- package/es/tx/builder/field-types/gas-price.mjs.map +1 -0
- package/es/tx/builder/field-types/index.d.ts +70 -0
- package/es/tx/builder/field-types/index.mjs +25 -0
- package/es/tx/builder/field-types/index.mjs.map +1 -0
- package/es/tx/builder/field-types/name-fee.d.ts +20 -0
- package/es/tx/builder/field-types/name-fee.mjs +24 -0
- package/es/tx/builder/field-types/name-fee.mjs.map +1 -0
- package/es/tx/builder/field-types/name-id.d.ts +14 -0
- package/es/tx/builder/field-types/name-id.mjs +19 -0
- package/es/tx/builder/field-types/name-id.mjs.map +1 -0
- package/es/tx/builder/field-types/name.d.ts +13 -0
- package/es/tx/builder/field-types/name.mjs +18 -0
- package/es/tx/builder/field-types/name.mjs.map +1 -0
- package/es/tx/builder/field-types/short-u-int.d.ts +6 -0
- package/es/tx/builder/field-types/short-u-int.mjs +12 -0
- package/es/tx/builder/field-types/short-u-int.mjs.map +1 -0
- package/es/tx/builder/field-types/u-int.d.ts +8 -0
- package/es/tx/builder/field-types/u-int.mjs +14 -0
- package/es/tx/builder/field-types/u-int.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +27 -33
- package/es/tx/builder/helpers.mjs +41 -47
- package/es/tx/builder/helpers.mjs.map +1 -1
- package/es/tx/builder/index.d.ts +25 -12
- package/es/tx/builder/index.mjs +74 -83
- package/es/tx/builder/index.mjs.map +1 -1
- package/es/tx/builder/schema.d.ts +995 -144
- package/es/tx/builder/schema.mjs +121 -170
- package/es/tx/builder/schema.mjs.map +1 -1
- package/es/tx/index.d.ts +28 -27
- package/es/tx/index.mjs +97 -117
- package/es/tx/index.mjs.map +1 -1
- package/es/tx/validator.d.ts +4 -3
- package/es/tx/validator.mjs +79 -92
- package/es/tx/validator.mjs.map +1 -1
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -1
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -1
- package/es/typings/bip32-path/index.d.mjs.map +1 -1
- package/es/typings/blakejs/index.d.mjs.map +1 -1
- package/es/typings/sha-js/index.d.mjs +2 -0
- package/es/typings/sha-js/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -1
- package/es/utils/amount-formatter.d.ts +9 -9
- package/es/utils/amount-formatter.mjs +17 -17
- package/es/utils/amount-formatter.mjs.map +1 -1
- package/es/utils/autorest.mjs +7 -7
- package/es/utils/autorest.mjs.map +1 -1
- package/es/utils/bignumber.mjs +2 -1
- package/es/utils/bignumber.mjs.map +1 -1
- package/es/utils/bytes.mjs +1 -1
- package/es/utils/bytes.mjs.map +1 -1
- package/es/utils/crypto.d.ts +8 -23
- package/es/utils/crypto.mjs +15 -41
- package/es/utils/crypto.mjs.map +1 -1
- package/es/utils/encoder-types.d.ts +61 -0
- package/es/utils/encoder-types.mjs +36 -0
- package/es/utils/encoder-types.mjs.map +1 -0
- package/es/utils/encoder.d.ts +6 -7
- package/es/utils/encoder.mjs +42 -26
- package/es/utils/encoder.mjs.map +1 -1
- package/es/utils/errors.d.ts +1 -11
- package/es/utils/errors.mjs +4 -20
- package/es/utils/errors.mjs.map +1 -1
- package/es/utils/hd-wallet.d.ts +18 -2
- package/es/utils/hd-wallet.mjs +64 -34
- package/es/utils/hd-wallet.mjs.map +1 -1
- package/es/utils/json-big.mjs +2 -2
- package/es/utils/json-big.mjs.map +1 -1
- package/es/utils/keystore.mjs +4 -2
- package/es/utils/keystore.mjs.map +1 -1
- package/es/utils/mptree.d.ts +2 -2
- package/es/utils/mptree.mjs +11 -6
- package/es/utils/mptree.mjs.map +1 -1
- package/es/utils/other.d.ts +8 -2
- package/es/utils/other.mjs +15 -3
- package/es/utils/other.mjs.map +1 -1
- package/es/utils/semver-satisfies.d.ts +1 -1
- package/es/utils/semver-satisfies.mjs +2 -2
- package/es/utils/semver-satisfies.mjs.map +1 -1
- package/es/utils/string.mjs.map +1 -1
- package/package.json +35 -33
- package/src/AeSdk.ts +30 -27
- package/src/AeSdkAepp.ts +93 -84
- package/src/AeSdkBase.ts +148 -130
- package/src/AeSdkWallet.ts +172 -156
- package/src/Node.ts +108 -102
- package/src/account/Base.ts +42 -32
- package/src/account/Memory.ts +45 -30
- package/src/account/Rpc.ts +32 -30
- package/src/aens.ts +124 -108
- package/src/aepp-wallet-communication/connection/Browser.ts +18 -15
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +22 -21
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +63 -52
- package/src/aepp-wallet-communication/connection-proxy.ts +8 -7
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +67 -61
- package/src/aepp-wallet-communication/rpc/types.ts +32 -32
- package/src/aepp-wallet-communication/schema.ts +117 -74
- package/src/aepp-wallet-communication/wallet-detector.ts +29 -28
- package/src/apis/node/code-model-v4.yaml +54 -20
- package/src/apis/node/models/index.ts +6 -2
- package/src/apis/node/models/mappers.ts +4 -2
- package/src/chain.ts +286 -228
- package/src/channel/handlers.ts +424 -372
- package/src/channel/index.ts +285 -251
- package/src/channel/internal.ts +248 -232
- package/src/contract/Compiler.ts +22 -21
- package/src/contract/aci.ts +267 -258
- package/src/contract/ga.ts +93 -72
- package/src/contract/methods.ts +32 -27
- package/src/deprecated/index.ts +170 -0
- package/src/deprecated/methods.ts +25 -0
- package/src/index.ts +37 -32
- package/src/oracle.ts +211 -189
- package/src/spend.ts +82 -70
- package/src/tx/builder/address.ts +50 -0
- package/src/tx/builder/constants.ts +82 -52
- package/src/tx/builder/field-types/coin-amount.ts +27 -0
- package/src/tx/builder/field-types/deposit.ts +21 -0
- package/src/tx/builder/field-types/fee.ts +143 -0
- package/src/tx/builder/field-types/field.ts +9 -0
- package/src/tx/builder/field-types/gas-limit.ts +41 -0
- package/src/tx/builder/field-types/gas-price.ts +16 -0
- package/src/tx/builder/field-types/index.ts +45 -0
- package/src/tx/builder/field-types/name-fee.ts +32 -0
- package/src/tx/builder/field-types/name-id.ts +20 -0
- package/src/tx/builder/field-types/name.ts +18 -0
- package/src/tx/builder/field-types/short-u-int.ts +11 -0
- package/src/tx/builder/field-types/u-int.ts +16 -0
- package/src/tx/builder/helpers.ts +112 -117
- package/src/tx/builder/index.ts +203 -197
- package/src/tx/builder/schema.ts +421 -465
- package/src/tx/index.ts +128 -135
- package/src/tx/validator.ts +165 -161
- package/src/typings/@aeternity__argon2-browser/index.d.ts +1 -1
- package/src/typings/@aeternity__uuid/index.d.ts +3 -1
- package/src/typings/bip32-path/index.d.ts +6 -6
- package/src/typings/blakejs/index.d.ts +4 -32
- package/src/typings/sha-js/index.d.ts +5 -0
- package/src/typings/tweetnacl-auth/index.d.ts +2 -2
- package/src/utils/amount-formatter.ts +41 -41
- package/src/utils/autorest.ts +57 -54
- package/src/utils/bignumber.ts +7 -6
- package/src/utils/bytes.ts +19 -19
- package/src/utils/crypto.ts +82 -94
- package/src/utils/encoder-types.ts +63 -0
- package/src/utils/encoder.ts +104 -56
- package/src/utils/errors.ts +246 -264
- package/src/utils/hd-wallet.ts +114 -82
- package/src/utils/json-big.ts +16 -15
- package/src/utils/keystore.ts +65 -62
- package/src/utils/mptree.ts +59 -56
- package/src/utils/other.ts +26 -18
- package/src/utils/semver-satisfies.ts +15 -11
- package/src/utils/string.ts +10 -10
- package/es/tx/builder/field-types.d.ts +0 -62
- package/es/tx/builder/field-types.mjs +0 -126
- package/es/tx/builder/field-types.mjs.map +0 -1
- package/es/tx/min-fee.d.ts +0 -20
- package/es/tx/min-fee.mjs.map +0 -1
- package/src/tx/builder/field-types.ts +0 -111
- package/src/tx/min-fee.ts +0 -136
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.mjs","names":["generateKeyPair","encodeContractAddress","options","changeStatus","changeState","call","send","emit","channelId","disconnect","fsmId","unpackTx","buildTx","encode","IllegalArgumentError","InsufficientBalanceError","ChannelConnectionError","UnexpectedChannelMessageError","TX_TYPE","appendSignature","tx","signFn","signatures","encodedTx","signed","result","rlpEncoded","signedTx","concat","handleUnexpectedMessage","_channel","message","state","reject","Object","assign","JSON","stringify","wsMessage","handler","channelOpen","awaitingConnection","channel","method","channelInfoStatus","params","data","event","channel_accept","funding_created","awaitingChannelCreateTx","awaitingOpenConfirmation","set","fsm_id","payload","channelClosed","awaitingReconnection","signed_tx","channelOptions","get","tag","initiator","responder","role","sign","jsonrpc","awaitingOnChainTx","info","awaitingBlockInclusion","channel_id","handlers","own_funding_locked","funding_locked","type","awaitingInitialState","awaitingTxSignRequest","enter","awaitingOffChainTx","updates","awaitingOffChainUpdate","error","find","i","code","resolve","accepted","errorCode","error_code","errorMessage","error_msg","match","awaitingUpdateConflict","from","publicKey","to","amount","awaitingShutdownTx","awaitingShutdownOnChainTx","awaitingLeave","awaitingWithdrawTx","awaitingWithdrawCompletion","onOnChainTx","callbacks","own_withdraw_locked","onOwnWithdrawLocked","withdraw_locked","onWithdrawLocked","callback","awaitingDepositTx","awaitingDepositCompletion","own_deposit_locked","onOwnDepositLocked","deposit_locked","onDepositLocked","awaitingNewContractTx","awaitingNewContractCompletion","round","owner","address","awaitingCallContractUpdateTx","awaitingCallContractCompletion","awaitingCallContractForceProgressUpdate","awaitingForceProgressCompletion","awaitingCallsPruned","_channels","closeTx"],"sources":["../../src/channel/handlers.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n\nimport { generateKeyPair, encodeContractAddress } from '../utils/crypto'\nimport {\n ChannelState,\n options,\n changeStatus,\n changeState,\n call,\n send,\n emit,\n channelId,\n disconnect,\n fsmId,\n ChannelMessage,\n ChannelFsm,\n SignTx\n} from './internal'\nimport { unpackTx, buildTx } from '../tx/builder'\nimport { encode } from '../tx/builder/helpers'\nimport { EncodedData } from '../utils/encoder'\nimport {\n IllegalArgumentError,\n InsufficientBalanceError,\n ChannelConnectionError,\n UnexpectedChannelMessageError\n} from '../utils/errors'\nimport Channel from '.'\nimport { TX_TYPE } from '../tx/builder/schema'\n\nexport async function appendSignature (\n tx: EncodedData<'tx'>, signFn: SignTx\n): Promise<EncodedData<'tx'> | number | null> {\n const { signatures, encodedTx } = unpackTx(tx, TX_TYPE.signed).tx\n const result = await signFn(encode(encodedTx.rlpEncoded, 'tx'))\n if (typeof result === 'string') {\n const { tx: signedTx } = unpackTx(result, TX_TYPE.signed)\n return buildTx({\n signatures: signatures.concat(signedTx.signatures),\n encodedTx: signedTx.encodedTx.rlpEncoded\n }, TX_TYPE.signed).tx\n }\n return result\n}\n\nfunction handleUnexpectedMessage (\n _channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (state?.reject != null) {\n state.reject(Object.assign(\n new UnexpectedChannelMessageError(`Unexpected message received:\\n\\n${JSON.stringify(message)}`),\n { wsMessage: message }\n ))\n }\n return { handler: channelOpen }\n}\n\nexport function awaitingConnection (\n channel: Channel, message: ChannelMessage\n): ChannelFsm | undefined {\n if (message.method === 'channels.info') {\n const channelInfoStatus: string = message.params.data.event\n if (['channel_accept', 'funding_created'].includes(channelInfoStatus)) {\n changeStatus(channel, {\n channel_accept: 'accepted',\n funding_created: 'halfSigned'\n }[channelInfoStatus as 'channel_accept' | 'funding_created'])\n return { handler: awaitingChannelCreateTx }\n }\n if (message.params.data.event === 'channel_reestablished') {\n return { handler: awaitingOpenConfirmation }\n }\n if (message.params.data.event === 'fsm_up') {\n fsmId.set(channel, message.params.data.fsm_id)\n return { handler: awaitingConnection }\n }\n return { handler: awaitingConnection }\n }\n if (message.method === 'channels.error') {\n emit(channel, 'error', new ChannelConnectionError(message?.payload?.message))\n return { handler: channelClosed }\n }\n}\n\nexport async function awaitingReconnection (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm> {\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'fsm_up') {\n fsmId.set(channel, message.params.data.fsm_id)\n changeState(channel, (await call(channel, 'channels.get.offchain_state', {})).signed_tx)\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingChannelCreateTx (\n channel: Channel, message: ChannelMessage\n): Promise<ChannelFsm | undefined> {\n const channelOptions = options.get(channel)\n if (channelOptions != null) {\n const tag = {\n initiator: 'initiator_sign',\n responder: 'responder_sign'\n }[channelOptions.role]\n if (message.method === `channels.sign.${tag}`) {\n if (message.params.data.tx != null) {\n const signedTx = await channelOptions.sign(tag, message.params.data.tx)\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { tx: signedTx } })\n return { handler: awaitingOnChainTx }\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx, async tx => await channelOptions.sign(tag, tx)\n )\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } })\n return { handler: awaitingOnChainTx }\n }\n }\n}\n\nexport function awaitingOnChainTx (\n channel: Channel, message: ChannelMessage\n): ChannelFsm | undefined {\n const channelOptions = options.get(channel)\n if (channelOptions != null) {\n if (message.method === 'channels.on_chain_tx') {\n if (\n message.params.data.info === 'funding_signed' &&\n channelOptions.role === 'initiator'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n if (\n message.params.data.info === 'funding_created' &&\n channelOptions.role === 'responder'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n }\n if (\n message.method === 'channels.info' &&\n message.params.data.event === 'funding_signed' &&\n channelOptions.role === 'initiator'\n ) {\n channelId.set(channel, message.params.channel_id)\n changeStatus(channel, 'signed')\n return { handler: awaitingOnChainTx }\n }\n }\n}\n\nexport function awaitingBlockInclusion (\n channel: Channel, message: ChannelMessage\n): ChannelFsm | undefined {\n if (message.method === 'channels.info') {\n const handlers: {\n [key: string]: (channel: Channel, message: ChannelMessage) => ChannelFsm | undefined\n } = {\n funding_created: awaitingBlockInclusion,\n own_funding_locked: awaitingBlockInclusion,\n funding_locked: awaitingOpenConfirmation\n }\n const handler = handlers[message.params.data.event as string]\n if (handler != null) {\n return { handler }\n }\n }\n if (message.method === 'channels.on_chain_tx') {\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type\n })\n return { handler: awaitingBlockInclusion }\n }\n}\n\nexport function awaitingOpenConfirmation (\n channel: Channel, message: ChannelMessage\n): ChannelFsm | undefined {\n if (message.method === 'channels.info' && message.params.data.event === 'open') {\n channelId.set(channel, message.params.channel_id)\n return { handler: awaitingInitialState }\n }\n}\n\nexport function awaitingInitialState (\n channel: Channel, message: ChannelMessage\n): ChannelFsm | undefined {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n return { handler: channelOpen }\n }\n}\n\nexport async function channelOpen (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n switch (message.method) {\n case 'channels.info':\n switch (message.params.data.event) {\n case 'update':\n case 'withdraw_created':\n case 'deposit_created':\n return { handler: awaitingTxSignRequest }\n case 'own_withdraw_locked':\n case 'withdraw_locked':\n case 'own_deposit_locked':\n case 'deposit_locked':\n case 'peer_disconnected':\n case 'channel_reestablished':\n case 'open':\n // TODO: Better handling of peer_disconnected event.\n //\n // We should enter intermediate state where offchain transactions\n // are blocked until channel is reestablished.\n emit(channel, message.params.data.event)\n return { handler: channelOpen }\n case 'fsm_up':\n fsmId.set(channel, message.params.data.fsm_id)\n return { handler: channelOpen }\n case 'timeout':\n case 'close_mutual':\n return { handler: channelOpen }\n case 'closing':\n changeStatus(channel, 'closing')\n return { handler: channelOpen }\n case 'closed_confirmed':\n changeStatus(channel, 'closed')\n return { handler: channelClosed }\n case 'died':\n changeStatus(channel, 'died')\n return { handler: channelClosed }\n case 'shutdown':\n return { handler: channelOpen }\n }\n break\n case 'channels.on_chain_tx':\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type\n })\n return { handler: channelOpen }\n case 'channels.leave':\n // TODO: emit event\n return { handler: channelOpen }\n case 'channels.update':\n changeState(channel, message.params.data.state)\n return { handler: channelOpen }\n case 'channels.sign.shutdown_sign_ack':\n return await awaitingTxSignRequest(channel, message, state)\n }\n}\nchannelOpen.enter = (channel: Channel) => {\n changeStatus(channel, 'open')\n}\n\nexport async function awaitingOffChainTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm> {\n if (message.method === 'channels.sign.update') {\n const { sign } = state\n if (message.params.data.tx != null) {\n const signedTx =\n await sign(message.params.data.tx, { updates: message.params.data.updates })\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } })\n return { handler: awaitingOffChainUpdate, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await sign(tx, { updates: message.params.data.updates })\n )\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } })\n return { handler: awaitingOffChainUpdate, state }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } })\n return { handler: awaitingOffChainTx, state }\n }\n }\n if (message.method === 'channels.error') {\n state.reject(new ChannelConnectionError(message.data.message))\n return { handler: channelOpen }\n }\n if (message.error != null) {\n const { data } = message.error ?? { data: [] }\n if (data.find(i => i.code === 1001) != null) {\n state.reject(new InsufficientBalanceError('Insufficient balance'))\n } else if (data.find(i => i.code === 1002) != null) {\n state.reject(new IllegalArgumentError('Amount cannot be negative'))\n } else {\n state.reject(new ChannelConnectionError(message.error.message))\n }\n return { handler: channelOpen }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingOffChainUpdate (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm | undefined {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n state.resolve({ accepted: true, signedTx: message.params.data.state })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n if (message.error != null) {\n state.reject(new ChannelConnectionError(message.error.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingTxSignRequest (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n const [, tag] = message.method.match(/^channels\\.sign\\.([^.]+)$/) ?? []\n const channelOptions = options.get(channel)\n if (tag != null && (channelOptions != null)) {\n if (message.params.data.tx != null) {\n const signedTx = await channelOptions.sign(tag, message.params.data.tx, {\n updates: message.params.data.updates\n })\n if (signedTx != null) {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { tx: signedTx } })\n return { handler: channelOpen }\n }\n } else {\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await channelOptions.sign(tag, tx, { updates: message.params.data.updates })\n )\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } })\n return { handler: channelOpen }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { error: signedTx } })\n return { handler: awaitingUpdateConflict, state }\n }\n }\n // soft-reject via competing update\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.update.new',\n params: {\n from: generateKeyPair().publicKey,\n to: generateKeyPair().publicKey,\n amount: 1\n }\n })\n return { handler: awaitingUpdateConflict, state }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingUpdateConflict (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.error != null) {\n return { handler: awaitingUpdateConflict, state }\n }\n if (message.method === 'channels.conflict') {\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingShutdownTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.shutdown_sign') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(message.params.data.tx)\n send(channel, { jsonrpc: '2.0', method: 'channels.shutdown_sign', params: { tx: signedTx } })\n return { handler: awaitingShutdownOnChainTx, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await state.sign(tx))\n send(channel, { jsonrpc: '2.0', method: 'channels.shutdown_sign', params: { signed_tx: signedTx } })\n return { handler: awaitingShutdownOnChainTx, state }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingShutdownOnChainTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n // state.resolve(message.params.data.tx)\n return { handler: channelClosed, state }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingLeave (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.leave') {\n state.resolve({ channelId: message.params.channel_id, signedTx: message.params.data.state })\n disconnect(channel)\n return { handler: channelClosed }\n }\n if (message.method === 'channels.error') {\n state.reject(new ChannelConnectionError(message.data.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingWithdrawTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.withdraw_tx') {\n const { sign } = state\n if (message.params.data.tx != null) {\n const signedTx =\n await sign(message.params.data.tx, { updates: message.params.data.updates })\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { tx: signedTx } })\n return { handler: awaitingWithdrawCompletion, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await sign(tx, { updates: message.params.data.updates })\n )\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { signed_tx: signedTx } })\n return { handler: awaitingWithdrawCompletion, state }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { error: signedTx } })\n return { handler: awaitingWithdrawCompletion, state }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingWithdrawCompletion (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx != null) {\n state.onOnChainTx(message.params.data.tx)\n }\n return { handler: awaitingWithdrawCompletion, state }\n }\n if (message.method === 'channels.info') {\n if (['own_withdraw_locked', 'withdraw_locked'].includes(message.params.data.event)) {\n const callbacks: {\n [key: string]: Function | undefined\n } = {\n own_withdraw_locked: state.onOwnWithdrawLocked,\n withdraw_locked: state.onWithdrawLocked\n }\n const callback = callbacks[message.params.data.event]\n if (callback != null) {\n callback()\n }\n return { handler: awaitingWithdrawCompletion, state }\n }\n }\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n state.resolve({ accepted: true, signedTx: message.params.data.state })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingDepositTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.deposit_tx') {\n const { sign } = state\n if (message.params.data.tx != null) {\n const signedTx = await sign(message.params.data.tx,\n { updates: message.params.data.updates })\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { tx: signedTx } })\n return { handler: awaitingDepositCompletion, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await sign(tx, { updates: message.params.data.updates })\n )\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { signed_tx: signedTx } })\n return { handler: awaitingDepositCompletion, state }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { error: signedTx } })\n return { handler: awaitingDepositCompletion, state }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingDepositCompletion (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx != null) {\n state.onOnChainTx(message.params.data.tx)\n }\n return { handler: awaitingDepositCompletion, state }\n }\n if (message.method === 'channels.info') {\n if (['own_deposit_locked', 'deposit_locked'].includes(message.params.data.event)) {\n const callbacks: {\n [key: string]: Function | undefined\n } = {\n own_deposit_locked: state.onOwnDepositLocked,\n deposit_locked: state.onDepositLocked\n }\n const callback = callbacks[message.params.data.event]\n if (callback != null) {\n callback()\n }\n return { handler: awaitingDepositCompletion, state }\n }\n }\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n state.resolve({ accepted: true, signedTx: message.params.data.state })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingNewContractTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(message.params.data.tx)\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } })\n return { handler: awaitingNewContractCompletion, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx,\n async tx => await state.sign(tx))\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } })\n return { handler: awaitingNewContractCompletion, state }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } })\n return { handler: awaitingNewContractCompletion, state }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingNewContractCompletion (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n const channelOptions = options.get(channel)\n if (message.method === 'channels.update') {\n const { round } = unpackTx(message.params.data.state, TX_TYPE.signed).tx.encodedTx.tx\n if (channelOptions?.role != null) {\n const role = channelOptions.role === 'initiator'\n ? 'initiatorId'\n : channelOptions.role === 'responder' ? 'responderId' : null\n if (role != null) {\n const owner = channelOptions?.[role]\n changeState(channel, message.params.data.state)\n state.resolve({\n accepted: true,\n address: encodeContractAddress(owner, round),\n signedTx: message.params.data.state\n })\n return { handler: channelOpen }\n }\n }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingCallContractUpdateTx (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(\n message.params.data.tx, { updates: message.params.data.updates }\n )\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } })\n return { handler: awaitingCallContractCompletion, state }\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async tx => await state.sign(tx, { updates: message.params.data.updates })\n )\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } })\n return { handler: awaitingCallContractCompletion, state }\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } })\n return { handler: awaitingCallContractCompletion, state }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingCallContractForceProgressUpdate (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.force_progress_tx') {\n const signedTx = await appendSignature(message.params.data.signed_tx, async tx =>\n await state.sign(tx, { updates: message.params.data.updates })\n )\n send(channel, { jsonrpc: '2.0', method: 'channels.force_progress_sign', params: { signed_tx: signedTx } })\n return { handler: awaitingForceProgressCompletion, state }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingForceProgressCompletion (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx != null) {\n state.onOnChainTx(message.params.data)\n }\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type\n })\n state.resolve({ accepted: true, tx: message.params.data.tx })\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingCallContractCompletion (\n channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n state.resolve({ accepted: true, signedTx: message.params.data.state })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg\n })\n return { handler: channelOpen }\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false })\n return { handler: channelOpen }\n }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport function awaitingCallsPruned (\n _channels: Channel[], message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (message.method === 'channels.calls_pruned.reply') {\n state.resolve()\n return { handler: channelOpen }\n }\n state.reject(new UnexpectedChannelMessageError('Unexpected message received'))\n return { handler: channelClosed }\n}\n\nexport function channelClosed (\n _channel: Channel, message: ChannelMessage, state: ChannelState\n): ChannelFsm {\n if (state == null) return { handler: channelClosed }\n if (message.params.data.event === 'closing') return { handler: channelClosed, state }\n if (message.params.data.info === 'channel_closed') {\n state.closeTx = message.params.data.tx\n return { handler: channelClosed, state }\n }\n if (message.params.data.event === 'closed_confirmed') {\n state.resolve(state.closeTx)\n return { handler: channelClosed }\n }\n return { handler: channelClosed, state }\n}\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;SAESA,e,EAAiBC,qB;SAGxBC,O,EACAC,Y,EACAC,W,EACAC,I,EACAC,I,EACAC,I,EACAC,S,EACAC,U,EACAC,K;SAKOC,Q,EAAUC,O;SACVC,M;SAGPC,oB,EACAC,wB,EACAC,sB,EACAC,6B;SAGOC,O;AAET,OAAO,eAAeC,eAAf,CACLC,EADK,EACkBC,MADlB,EAEuC;EAC5C,MAAM;IAAEC,UAAF;IAAcC;EAAd,IAA4BZ,QAAQ,CAACS,EAAD,EAAKF,OAAO,CAACM,MAAb,CAAR,CAA6BJ,EAA/D;EACA,MAAMK,MAAM,GAAG,MAAMJ,MAAM,CAACR,MAAM,CAACU,SAAS,CAACG,UAAX,EAAuB,IAAvB,CAAP,CAA3B;;EACA,IAAI,OAAOD,MAAP,KAAkB,QAAtB,EAAgC;IAC9B,MAAM;MAAEL,EAAE,EAAEO;IAAN,IAAmBhB,QAAQ,CAACc,MAAD,EAASP,OAAO,CAACM,MAAjB,CAAjC;IACA,OAAOZ,OAAO,CAAC;MACbU,UAAU,EAAEA,UAAU,CAACM,MAAX,CAAkBD,QAAQ,CAACL,UAA3B,CADC;MAEbC,SAAS,EAAEI,QAAQ,CAACJ,SAAT,CAAmBG;IAFjB,CAAD,EAGXR,OAAO,CAACM,MAHG,CAAP,CAGYJ,EAHnB;EAID;;EACD,OAAOK,MAAP;AACD;;AAED,SAASI,uBAAT,CACEC,QADF,EACqBC,OADrB,EAC8CC,KAD9C,EAEc;EACZ,IAAI,CAAAA,KAAK,SAAL,IAAAA,KAAK,WAAL,YAAAA,KAAK,CAAEC,MAAP,KAAiB,IAArB,EAA2B;IACzBD,KAAK,CAACC,MAAN,CAAaC,MAAM,CAACC,MAAP,CACX,IAAIlB,6BAAJ,CAAmC,mCAAkCmB,IAAI,CAACC,SAAL,CAAeN,OAAf,CAAwB,EAA7F,CADW,EAEX;MAAEO,SAAS,EAAEP;IAAb,CAFW,CAAb;EAID;;EACD,OAAO;IAAEQ,OAAO,EAAEC;EAAX,CAAP;AACD;;AAED,OAAO,SAASC,kBAAT,CACLC,OADK,EACaX,OADb,EAEmB;EACxB,IAAIA,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IAAA;;IACtC,MAAMC,iBAAyB,GAAGb,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAAtD;;IACA,IAAI,sCAAC,gBAAD,EAAmB,iBAAnB,kBAA+CH,iBAA/C,CAAJ,EAAuE;MACrEzC,YAAY,CAACuC,OAAD,EAAU;QACpBM,cAAc,EAAE,UADI;QAEpBC,eAAe,EAAE;MAFG,EAGpBL,iBAHoB,CAAV,CAAZ;MAIA,OAAO;QAAEL,OAAO,EAAEW;MAAX,CAAP;IACD;;IACD,IAAInB,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,uBAAlC,EAA2D;MACzD,OAAO;QAAER,OAAO,EAAEY;MAAX,CAAP;IACD;;IACD,IAAIpB,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,QAAlC,EAA4C;MAC1CrC,KAAK,CAAC0C,GAAN,CAAUV,OAAV,EAAmBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBO,MAAvC;MACA,OAAO;QAAEd,OAAO,EAAEE;MAAX,CAAP;IACD;;IACD,OAAO;MAAEF,OAAO,EAAEE;IAAX,CAAP;EACD;;EACD,IAAIV,OAAO,CAACY,MAAR,KAAmB,gBAAvB,EAAyC;IAAA;;IACvCpC,IAAI,CAACmC,OAAD,EAAU,OAAV,EAAmB,IAAI1B,sBAAJ,CAA2Be,OAA3B,aAA2BA,OAA3B,2CAA2BA,OAAO,CAAEuB,OAApC,qDAA2B,iBAAkBvB,OAA7C,CAAnB,CAAJ;IACA,OAAO;MAAEQ,OAAO,EAAEgB;IAAX,CAAP;EACD;AACF;AAED,OAAO,eAAeC,oBAAf,CACLd,OADK,EACaX,OADb,EACsCC,KADtC,EAEgB;EACrB,IAAID,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,QAAlC,EAA4C;MAC1CrC,KAAK,CAAC0C,GAAN,CAAUV,OAAV,EAAmBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBO,MAAvC;MACAjD,WAAW,CAACsC,OAAD,EAAU,CAAC,MAAMrC,IAAI,CAACqC,OAAD,EAAU,6BAAV,EAAyC,EAAzC,CAAX,EAAyDe,SAAnE,CAAX;MACA,OAAO;QAAElB,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAekB,uBAAf,CACLR,OADK,EACaX,OADb,EAE4B;EACjC,MAAM2B,cAAc,GAAGxD,OAAO,CAACyD,GAAR,CAAYjB,OAAZ,CAAvB;;EACA,IAAIgB,cAAc,IAAI,IAAtB,EAA4B;IAC1B,MAAME,GAAG,GAAG;MACVC,SAAS,EAAE,gBADD;MAEVC,SAAS,EAAE;IAFD,EAGVJ,cAAc,CAACK,IAHL,CAAZ;;IAIA,IAAIhC,OAAO,CAACY,MAAR,KAAoB,iBAAgBiB,GAAI,EAA5C,EAA+C;MAC7C,IAAI7B,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;QAClC,MAAMO,QAAQ,GAAG,MAAM+B,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyB7B,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA7C,CAAvB;QACAd,IAAI,CAACoC,OAAD,EAAU;UAAEuB,OAAO,EAAE,KAAX;UAAkBtB,MAAM,EAAG,YAAWiB,GAAI,EAA1C;UAA6Cf,MAAM,EAAE;YAAEzB,EAAE,EAAEO;UAAN;QAArD,CAAV,CAAJ;QACA,OAAO;UAAEY,OAAO,EAAE2B;QAAX,CAAP;MACD;;MACD,MAAMvC,QAAQ,GAAG,MAAMR,eAAe,CACpCY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SADgB,EACL,MAAMrC,EAAN,IAAY,MAAMsC,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBxC,EAAzB,CADb,CAAtC;MAGAd,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAG,YAAWiB,GAAI,EAA1C;QAA6Cf,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE2B;MAAX,CAAP;IACD;EACF;AACF;AAED,OAAO,SAASA,iBAAT,CACLxB,OADK,EACaX,OADb,EAEmB;EACxB,MAAM2B,cAAc,GAAGxD,OAAO,CAACyD,GAAR,CAAYjB,OAAZ,CAAvB;;EACA,IAAIgB,cAAc,IAAI,IAAtB,EAA4B;IAC1B,IAAI3B,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;MAC7C,IACEZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IAApB,KAA6B,gBAA7B,IACAT,cAAc,CAACK,IAAf,KAAwB,WAF1B,EAGE;QACA,OAAO;UAAExB,OAAO,EAAE6B;QAAX,CAAP;MACD;;MACD,IACErC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IAApB,KAA6B,iBAA7B,IACAT,cAAc,CAACK,IAAf,KAAwB,WAF1B,EAGE;QACA,OAAO;UAAExB,OAAO,EAAE6B;QAAX,CAAP;MACD;IACF;;IACD,IACErC,OAAO,CAACY,MAAR,KAAmB,eAAnB,IACFZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAD5B,IAEFW,cAAc,CAACK,IAAf,KAAwB,WAHxB,EAIE;MACAvD,SAAS,CAAC4C,GAAV,CAAcV,OAAd,EAAuBX,OAAO,CAACc,MAAR,CAAewB,UAAtC;MACAlE,YAAY,CAACuC,OAAD,EAAU,QAAV,CAAZ;MACA,OAAO;QAAEH,OAAO,EAAE2B;MAAX,CAAP;IACD;EACF;AACF;AAED,OAAO,SAASE,sBAAT,CACL1B,OADK,EACaX,OADb,EAEmB;EACxB,IAAIA,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,MAAM2B,QAEL,GAAG;MACFrB,eAAe,EAAEmB,sBADf;MAEFG,kBAAkB,EAAEH,sBAFlB;MAGFI,cAAc,EAAErB;IAHd,CAFJ;IAOA,MAAMZ,OAAO,GAAG+B,QAAQ,CAACvC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAArB,CAAxB;;IACA,IAAIR,OAAO,IAAI,IAAf,EAAqB;MACnB,OAAO;QAAEA;MAAF,CAAP;IACD;EACF;;EACD,IAAIR,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7CpC,IAAI,CAACmC,OAAD,EAAU,WAAV,EAAuBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA3C,EAA+C;MACjD+C,IAAI,EAAEpC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IADuB;MAEjDM,IAAI,EAAE1C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2B;IAFuB,CAA/C,CAAJ;IAIA,OAAO;MAAElC,OAAO,EAAE6B;IAAX,CAAP;EACD;AACF;AAED,OAAO,SAASjB,wBAAT,CACLT,OADK,EACaX,OADb,EAEmB;EACxB,IAAIA,OAAO,CAACY,MAAR,KAAmB,eAAnB,IAAsCZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,MAAxE,EAAgF;IAC9EvC,SAAS,CAAC4C,GAAV,CAAcV,OAAd,EAAuBX,OAAO,CAACc,MAAR,CAAewB,UAAtC;IACA,OAAO;MAAE9B,OAAO,EAAEmC;IAAX,CAAP;EACD;AACF;AAED,OAAO,SAASA,oBAAT,CACLhC,OADK,EACaX,OADb,EAEmB;EACxB,IAAIA,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxCvC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;IACA,OAAO;MAAEO,OAAO,EAAEC;IAAX,CAAP;EACD;AACF;AAED,OAAO,eAAeA,WAAf,CACLE,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,QAAQD,OAAO,CAACY,MAAhB;IACE,KAAK,eAAL;MACE,QAAQZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAA5B;QACE,KAAK,QAAL;QACA,KAAK,kBAAL;QACA,KAAK,iBAAL;UACE,OAAO;YAAER,OAAO,EAAEoC;UAAX,CAAP;;QACF,KAAK,qBAAL;QACA,KAAK,iBAAL;QACA,KAAK,oBAAL;QACA,KAAK,gBAAL;QACA,KAAK,mBAAL;QACA,KAAK,uBAAL;QACA,KAAK,MAAL;UACE;UACA;UACA;UACA;UACApE,IAAI,CAACmC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAA9B,CAAJ;UACA,OAAO;YAAER,OAAO,EAAEC;UAAX,CAAP;;QACF,KAAK,QAAL;UACE9B,KAAK,CAAC0C,GAAN,CAAUV,OAAV,EAAmBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBO,MAAvC;UACA,OAAO;YAAEd,OAAO,EAAEC;UAAX,CAAP;;QACF,KAAK,SAAL;QACA,KAAK,cAAL;UACE,OAAO;YAAED,OAAO,EAAEC;UAAX,CAAP;;QACF,KAAK,SAAL;UACErC,YAAY,CAACuC,OAAD,EAAU,SAAV,CAAZ;UACA,OAAO;YAAEH,OAAO,EAAEC;UAAX,CAAP;;QACF,KAAK,kBAAL;UACErC,YAAY,CAACuC,OAAD,EAAU,QAAV,CAAZ;UACA,OAAO;YAAEH,OAAO,EAAEgB;UAAX,CAAP;;QACF,KAAK,MAAL;UACEpD,YAAY,CAACuC,OAAD,EAAU,MAAV,CAAZ;UACA,OAAO;YAAEH,OAAO,EAAEgB;UAAX,CAAP;;QACF,KAAK,UAAL;UACE,OAAO;YAAEhB,OAAO,EAAEC;UAAX,CAAP;MAlCJ;;MAoCA;;IACF,KAAK,sBAAL;MACEjC,IAAI,CAACmC,OAAD,EAAU,WAAV,EAAuBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA3C,EAA+C;QACjD+C,IAAI,EAAEpC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IADuB;QAEjDM,IAAI,EAAE1C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2B;MAFuB,CAA/C,CAAJ;MAIA,OAAO;QAAElC,OAAO,EAAEC;MAAX,CAAP;;IACF,KAAK,gBAAL;MACE;MACA,OAAO;QAAED,OAAO,EAAEC;MAAX,CAAP;;IACF,KAAK,iBAAL;MACEpC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;MACA,OAAO;QAAEO,OAAO,EAAEC;MAAX,CAAP;;IACF,KAAK,iCAAL;MACE,OAAO,MAAMmC,qBAAqB,CAACjC,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAAlC;EApDJ;AAsDD;;AACDQ,WAAW,CAACoC,KAAZ,GAAqBlC,OAAD,IAAsB;EACxCvC,YAAY,CAACuC,OAAD,EAAU,MAAV,CAAZ;AACD,CAFD;;AAIA,OAAO,eAAemC,kBAAf,CACLnC,OADK,EACaX,OADb,EACsCC,KADtC,EAEgB;EACrB,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,MAAM;MAAEqB;IAAF,IAAWhC,KAAjB;;IACA,IAAID,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GACZ,MAAMqC,IAAI,CAACjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAArB,EAAyB;QAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MAA/B,CAAzB,CADZ;MAEAxE,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEwC,sBAAX;QAAmC/C;MAAnC,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAM4C,IAAI,CAAC5C,EAAD,EAAK;MAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;IAA/B,CAAL,CAD0B,CAAtC;;IAGA,IAAI,OAAOnD,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEwC,sBAAX;QAAmC/C;MAAnC,CAAP;IACD;;IACD,IAAI,OAAOL,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEmC,KAAK,EAAErD;QAAT;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEsC,kBAAX;QAA+B7C;MAA/B,CAAP;IACD;EACF;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,gBAAvB,EAAyC;IACvCX,KAAK,CAACC,MAAN,CAAa,IAAIjB,sBAAJ,CAA2Be,OAAO,CAACe,IAAR,CAAaf,OAAxC,CAAb;IACA,OAAO;MAAEQ,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACiD,KAAR,IAAiB,IAArB,EAA2B;IAAA;;IACzB,MAAM;MAAElC;IAAF,sBAAWf,OAAO,CAACiD,KAAnB,2DAA4B;MAAElC,IAAI,EAAE;IAAR,CAAlC;;IACA,IAAIA,IAAI,CAACmC,IAAL,CAAUC,CAAC,IAAIA,CAAC,CAACC,IAAF,KAAW,IAA1B,KAAmC,IAAvC,EAA6C;MAC3CnD,KAAK,CAACC,MAAN,CAAa,IAAIlB,wBAAJ,CAA6B,sBAA7B,CAAb;IACD,CAFD,MAEO,IAAI+B,IAAI,CAACmC,IAAL,CAAUC,CAAC,IAAIA,CAAC,CAACC,IAAF,KAAW,IAA1B,KAAmC,IAAvC,EAA6C;MAClDnD,KAAK,CAACC,MAAN,CAAa,IAAInB,oBAAJ,CAAyB,2BAAzB,CAAb;IACD,CAFM,MAEA;MACLkB,KAAK,CAACC,MAAN,CAAa,IAAIjB,sBAAJ,CAA2Be,OAAO,CAACiD,KAAR,CAAcjD,OAAzC,CAAb;IACD;;IACD,OAAO;MAAEQ,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAAS+C,sBAAT,CACLrC,OADK,EACaX,OADb,EACsCC,KADtC,EAEmB;EACxB,IAAID,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxCvC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;IACAA,KAAK,CAACoD,OAAN,CAAc;MAAEC,QAAQ,EAAE,IAAZ;MAAkB1D,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;IAAhD,CAAd;IACA,OAAO;MAAEO,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,IAAIT,OAAO,CAACiD,KAAR,IAAiB,IAArB,EAA2B;IACzBhD,KAAK,CAACC,MAAN,CAAa,IAAIjB,sBAAJ,CAA2Be,OAAO,CAACiD,KAAR,CAAcjD,OAAzC,CAAb;IACA,OAAO;MAAEQ,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAe2C,qBAAf,CACLjC,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EAAA;;EACjC,MAAM,GAAG4B,GAAH,6BAAU7B,OAAO,CAACY,MAAR,CAAe+C,KAAf,CAAqB,2BAArB,CAAV,yEAA+D,EAArE;EACA,MAAMhC,cAAc,GAAGxD,OAAO,CAACyD,GAAR,CAAYjB,OAAZ,CAAvB;;EACA,IAAIkB,GAAG,IAAI,IAAP,IAAgBF,cAAc,IAAI,IAAtC,EAA6C;IAC3C,IAAI3B,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GAAG,MAAM+B,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyB7B,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA7C,EAAiD;QACtE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MADyC,CAAjD,CAAvB;;MAGA,IAAInD,QAAQ,IAAI,IAAhB,EAAsB;QACpBrB,IAAI,CAACoC,OAAD,EAAU;UAAEuB,OAAO,EAAE,KAAX;UAAkBtB,MAAM,EAAG,YAAWiB,GAAI,EAA1C;UAA6Cf,MAAM,EAAE;YAAEzB,EAAE,EAAEO;UAAN;QAArD,CAAV,CAAJ;QACA,OAAO;UAAEY,OAAO,EAAEC;QAAX,CAAP;MACD;IACF,CARD,MAQO;MACL,MAAMb,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAMsC,cAAc,CAACM,IAAf,CAAoBJ,GAApB,EAAyBxC,EAAzB,EAA6B;QAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MAA/B,CAA7B,CAD8B,CAAtC;;MAGA,IAAI,OAAOnD,QAAP,KAAoB,QAAxB,EAAkC;QAChCrB,IAAI,CAACoC,OAAD,EAAU;UAAEuB,OAAO,EAAE,KAAX;UAAkBtB,MAAM,EAAG,YAAWiB,GAAI,EAA1C;UAA6Cf,MAAM,EAAE;YAAEY,SAAS,EAAE9B;UAAb;QAArD,CAAV,CAAJ;QACA,OAAO;UAAEY,OAAO,EAAEC;QAAX,CAAP;MACD;;MACD,IAAI,OAAOb,QAAP,KAAoB,QAAxB,EAAkC;QAChCrB,IAAI,CAACoC,OAAD,EAAU;UAAEuB,OAAO,EAAE,KAAX;UAAkBtB,MAAM,EAAG,YAAWiB,GAAI,EAA1C;UAA6Cf,MAAM,EAAE;YAAEmC,KAAK,EAAErD;UAAT;QAArD,CAAV,CAAJ;QACA,OAAO;UAAEY,OAAO,EAAEoD,sBAAX;UAAmC3D;QAAnC,CAAP;MACD;IACF,CArB0C,CAsB3C;;;IACA1B,IAAI,CAACoC,OAAD,EAAU;MACZuB,OAAO,EAAE,KADG;MAEZtB,MAAM,EAAE,qBAFI;MAGZE,MAAM,EAAE;QACN+C,IAAI,EAAE5F,eAAe,GAAG6F,SADlB;QAENC,EAAE,EAAE9F,eAAe,GAAG6F,SAFhB;QAGNE,MAAM,EAAE;MAHF;IAHI,CAAV,CAAJ;IASA,OAAO;MAAExD,OAAO,EAAEoD,sBAAX;MAAmC3D;IAAnC,CAAP;EACD;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAAS2D,sBAAT,CACLjD,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACiD,KAAR,IAAiB,IAArB,EAA2B;IACzB,OAAO;MAAEzC,OAAO,EAAEoD,sBAAX;MAAmC3D;IAAnC,CAAP;EACD;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1C,OAAO;MAAEJ,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAegE,kBAAf,CACLtD,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,6BAAvB,EAAsD;IACpD,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GAAG,MAAMK,KAAK,CAACgC,IAAN,CAAWjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA/B,CAAvB;MACAd,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,wBAA1B;QAAoDE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAA5D,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE0D,yBAAX;QAAsCjE;MAAtC,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAMY,KAAK,CAACgC,IAAN,CAAW5C,EAAX,CAD8B,CAAtC;IAEAd,IAAI,CAACoC,OAAD,EAAU;MAAEuB,OAAO,EAAE,KAAX;MAAkBtB,MAAM,EAAE,wBAA1B;MAAoDE,MAAM,EAAE;QAAEY,SAAS,EAAE9B;MAAb;IAA5D,CAAV,CAAJ;IACA,OAAO;MAAEY,OAAO,EAAE0D,yBAAX;MAAsCjE;IAAtC,CAAP;EACD;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAASiE,yBAAT,CACLvD,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C;IACA,OAAO;MAAEJ,OAAO,EAAEgB,aAAX;MAA0BvB;IAA1B,CAAP;EACD;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAASkE,aAAT,CACLxD,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,gBAAvB,EAAyC;IACvCX,KAAK,CAACoD,OAAN,CAAc;MAAE5E,SAAS,EAAEuB,OAAO,CAACc,MAAR,CAAewB,UAA5B;MAAwC1C,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;IAAtE,CAAd;IACAvB,UAAU,CAACiC,OAAD,CAAV;IACA,OAAO;MAAEH,OAAO,EAAEgB;IAAX,CAAP;EACD;;EACD,IAAIxB,OAAO,CAACY,MAAR,KAAmB,gBAAvB,EAAyC;IACvCX,KAAK,CAACC,MAAN,CAAa,IAAIjB,sBAAJ,CAA2Be,OAAO,CAACe,IAAR,CAAaf,OAAxC,CAAb;IACA,OAAO;MAAEQ,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAemE,kBAAf,CACLzD,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,2BAAvB,EAAoD;IAClD,MAAM;MAAEqB;IAAF,IAAWhC,KAAjB;;IACA,IAAID,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GACZ,MAAMqC,IAAI,CAACjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAArB,EAAyB;QAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MAA/B,CAAzB,CADZ;MAEAxE,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,sBAA1B;QAAkDE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAA1D,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE6D,0BAAX;QAAuCpE;MAAvC,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAM4C,IAAI,CAAC5C,EAAD,EAAK;MAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;IAA/B,CAAL,CAD0B,CAAtC;;IAGA,IAAI,OAAOnD,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,sBAA1B;QAAkDE,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAA1D,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE6D,0BAAX;QAAuCpE;MAAvC,CAAP;IACD;;IACD,IAAI,OAAOL,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,sBAA1B;QAAkDE,MAAM,EAAE;UAAEmC,KAAK,EAAErD;QAAT;MAA1D,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE6D,0BAAX;QAAuCpE;MAAvC,CAAP;IACD;EACF;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAASoE,0BAAT,CACL1D,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,IAAIX,KAAK,CAACqE,WAAN,IAAqB,IAAzB,EAA+B;MAC7BrE,KAAK,CAACqE,WAAN,CAAkBtE,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAAtC;IACD;;IACD,OAAO;MAAEmB,OAAO,EAAE6D,0BAAX;MAAuCpE;IAAvC,CAAP;EACD;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IAAA;;IACtC,IAAI,uCAAC,qBAAD,EAAwB,iBAAxB,mBAAoDZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAAxE,CAAJ,EAAoF;MAClF,MAAMuD,SAEL,GAAG;QACFC,mBAAmB,EAAEvE,KAAK,CAACwE,mBADzB;QAEFC,eAAe,EAAEzE,KAAK,CAAC0E;MAFrB,CAFJ;MAMA,MAAMC,QAAQ,GAAGL,SAAS,CAACvE,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAArB,CAA1B;;MACA,IAAI4D,QAAQ,IAAI,IAAhB,EAAsB;QACpBA,QAAQ;MACT;;MACD,OAAO;QAAEpE,OAAO,EAAE6D,0BAAX;QAAuCpE;MAAvC,CAAP;IACD;EACF;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxCvC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;IACAA,KAAK,CAACoD,OAAN,CAAc;MAAEC,QAAQ,EAAE,IAAZ;MAAkB1D,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;IAAhD,CAAd;IACA,OAAO;MAAEO,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAe4E,iBAAf,CACLlE,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,0BAAvB,EAAmD;IACjD,MAAM;MAAEqB;IAAF,IAAWhC,KAAjB;;IACA,IAAID,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GAAG,MAAMqC,IAAI,CAACjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAArB,EACzB;QAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MAA/B,CADyB,CAA3B;MAEAxE,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,qBAA1B;QAAiDE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAAzD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEsE,yBAAX;QAAsC7E;MAAtC,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAM4C,IAAI,CAAC5C,EAAD,EAAK;MAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;IAA/B,CAAL,CAD0B,CAAtC;;IAGA,IAAI,OAAOnD,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,qBAA1B;QAAiDE,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAAzD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEsE,yBAAX;QAAsC7E;MAAtC,CAAP;IACD;;IACD,IAAI,OAAOL,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,qBAA1B;QAAiDE,MAAM,EAAE;UAAEmC,KAAK,EAAErD;QAAT;MAAzD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEsE,yBAAX;QAAsC7E;MAAtC,CAAP;IACD;EACF;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAAS6E,yBAAT,CACLnE,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,IAAIX,KAAK,CAACqE,WAAN,IAAqB,IAAzB,EAA+B;MAC7BrE,KAAK,CAACqE,WAAN,CAAkBtE,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAAtC;IACD;;IACD,OAAO;MAAEmB,OAAO,EAAEsE,yBAAX;MAAsC7E;IAAtC,CAAP;EACD;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IAAA;;IACtC,IAAI,uCAAC,oBAAD,EAAuB,gBAAvB,mBAAkDZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAAtE,CAAJ,EAAkF;MAChF,MAAMuD,SAEL,GAAG;QACFQ,kBAAkB,EAAE9E,KAAK,CAAC+E,kBADxB;QAEFC,cAAc,EAAEhF,KAAK,CAACiF;MAFpB,CAFJ;MAMA,MAAMN,QAAQ,GAAGL,SAAS,CAACvE,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAArB,CAA1B;;MACA,IAAI4D,QAAQ,IAAI,IAAhB,EAAsB;QACpBA,QAAQ;MACT;;MACD,OAAO;QAAEpE,OAAO,EAAEsE,yBAAX;QAAsC7E;MAAtC,CAAP;IACD;EACF;;EACD,IAAID,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxCvC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;IACAA,KAAK,CAACoD,OAAN,CAAc;MAAEC,QAAQ,EAAE,IAAZ;MAAkB1D,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;IAAhD,CAAd;IACA,OAAO;MAAEO,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAekF,qBAAf,CACLxE,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GAAG,MAAMK,KAAK,CAACgC,IAAN,CAAWjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA/B,CAAvB;MACAd,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE4E,6BAAX;QAA0CnF;MAA1C,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EACpC,MAAMrC,EAAN,IAAY,MAAMY,KAAK,CAACgC,IAAN,CAAW5C,EAAX,CADkB,CAAtC;;IAEA,IAAI,OAAOO,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE4E,6BAAX;QAA0CnF;MAA1C,CAAP;IACD;;IACD,IAAI,OAAOL,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEmC,KAAK,EAAErD;QAAT;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAE4E,6BAAX;QAA0CnF;MAA1C,CAAP;IACD;EACF;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAASmF,6BAAT,CACLzE,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,MAAM0B,cAAc,GAAGxD,OAAO,CAACyD,GAAR,CAAYjB,OAAZ,CAAvB;;EACA,IAAIX,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxC,MAAM;MAAEyE;IAAF,IAAYzG,QAAQ,CAACoB,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAArB,EAA4Bd,OAAO,CAACM,MAApC,CAAR,CAAoDJ,EAApD,CAAuDG,SAAvD,CAAiEH,EAAnF;;IACA,IAAI,CAAAsC,cAAc,SAAd,IAAAA,cAAc,WAAd,YAAAA,cAAc,CAAEK,IAAhB,KAAwB,IAA5B,EAAkC;MAChC,MAAMA,IAAI,GAAGL,cAAc,CAACK,IAAf,KAAwB,WAAxB,GACT,aADS,GAETL,cAAc,CAACK,IAAf,KAAwB,WAAxB,GAAsC,aAAtC,GAAsD,IAF1D;;MAGA,IAAIA,IAAI,IAAI,IAAZ,EAAkB;QAChB,MAAMsD,KAAK,GAAG3D,cAAH,aAAGA,cAAH,uBAAGA,cAAc,CAAGK,IAAH,CAA5B;QACA3D,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;QACAA,KAAK,CAACoD,OAAN,CAAc;UACZC,QAAQ,EAAE,IADE;UAEZiC,OAAO,EAAErH,qBAAqB,CAACoH,KAAD,EAAQD,KAAR,CAFlB;UAGZzF,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;QAHlB,CAAd;QAKA,OAAO;UAAEO,OAAO,EAAEC;QAAX,CAAP;MACD;IACF;EACF;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAeuF,4BAAf,CACL7E,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApB,IAA0B,IAA9B,EAAoC;MAClC,MAAMO,QAAQ,GAAG,MAAMK,KAAK,CAACgC,IAAN,CACrBjC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EADC,EACG;QAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;MAA/B,CADH,CAAvB;MAGAxE,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEzB,EAAE,EAAEO;QAAN;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEiF,8BAAX;QAA2CxF;MAA3C,CAAP;IACD;;IACD,MAAML,QAAQ,GAAG,MAAMR,eAAe,CACpCY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SADgB,EAEpC,MAAMrC,EAAN,IAAY,MAAMY,KAAK,CAACgC,IAAN,CAAW5C,EAAX,EAAe;MAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;IAA/B,CAAf,CAFkB,CAAtC;;IAIA,IAAI,OAAOnD,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEY,SAAS,EAAE9B;QAAb;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEiF,8BAAX;QAA2CxF;MAA3C,CAAP;IACD;;IACD,IAAI,OAAOL,QAAP,KAAoB,QAAxB,EAAkC;MAChCrB,IAAI,CAACoC,OAAD,EAAU;QAAEuB,OAAO,EAAE,KAAX;QAAkBtB,MAAM,EAAE,iBAA1B;QAA6CE,MAAM,EAAE;UAAEmC,KAAK,EAAErD;QAAT;MAArD,CAAV,CAAJ;MACA,OAAO;QAAEY,OAAO,EAAEiF,8BAAX;QAA2CxF;MAA3C,CAAP;IACD;EACF;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,eAAeyF,uCAAf,CACL/E,OADK,EACaX,OADb,EACsCC,KADtC,EAE4B;EACjC,IAAID,OAAO,CAACY,MAAR,KAAmB,iCAAvB,EAA0D;IACxD,MAAMhB,QAAQ,GAAG,MAAMR,eAAe,CAACY,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBW,SAArB,EAAgC,MAAMrC,EAAN,IACpE,MAAMY,KAAK,CAACgC,IAAN,CAAW5C,EAAX,EAAe;MAAE0D,OAAO,EAAE/C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBgC;IAA/B,CAAf,CAD8B,CAAtC;IAGAxE,IAAI,CAACoC,OAAD,EAAU;MAAEuB,OAAO,EAAE,KAAX;MAAkBtB,MAAM,EAAE,8BAA1B;MAA0DE,MAAM,EAAE;QAAEY,SAAS,EAAE9B;MAAb;IAAlE,CAAV,CAAJ;IACA,OAAO;MAAEY,OAAO,EAAEmF,+BAAX;MAA4C1F;IAA5C,CAAP;EACD;;EACD,OAAOH,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAAS0F,+BAAT,CACLhF,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,sBAAvB,EAA+C;IAC7C,IAAIX,KAAK,CAACqE,WAAN,IAAqB,IAAzB,EAA+B;MAC7BrE,KAAK,CAACqE,WAAN,CAAkBtE,OAAO,CAACc,MAAR,CAAeC,IAAjC;IACD;;IACDvC,IAAI,CAACmC,OAAD,EAAU,WAAV,EAAuBX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAA3C,EAA+C;MACjD+C,IAAI,EAAEpC,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IADuB;MAEjDM,IAAI,EAAE1C,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2B;IAFuB,CAA/C,CAAJ;IAIAzC,KAAK,CAACoD,OAAN,CAAc;MAAEC,QAAQ,EAAE,IAAZ;MAAkBjE,EAAE,EAAEW,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B;IAA1C,CAAd;EACD;;EACD,OAAOS,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAASwF,8BAAT,CACL9E,OADK,EACaX,OADb,EACsCC,KADtC,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,iBAAvB,EAA0C;IACxCvC,WAAW,CAACsC,OAAD,EAAUX,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd,KAA9B,CAAX;IACAA,KAAK,CAACoD,OAAN,CAAc;MAAEC,QAAQ,EAAE,IAAZ;MAAkB1D,QAAQ,EAAEI,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBd;IAAhD,CAAd;IACA,OAAO;MAAEO,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,mBAAvB,EAA4C;IAC1CX,KAAK,CAACoD,OAAN,CAAc;MACZC,QAAQ,EAAE,KADE;MAEZC,SAAS,EAAEvD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoByC,UAFnB;MAGZC,YAAY,EAAEzD,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB2C;IAHtB,CAAd;IAKA,OAAO;MAAElD,OAAO,EAAEC;IAAX,CAAP;EACD;;EACD,IAAIT,OAAO,CAACY,MAAR,KAAmB,eAAvB,EAAwC;IACtC,IAAIZ,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,gBAAlC,EAAoD;MAClDf,KAAK,CAACoD,OAAN,CAAc;QAAEC,QAAQ,EAAE;MAAZ,CAAd;MACA,OAAO;QAAE9C,OAAO,EAAEC;MAAX,CAAP;IACD;EACF;;EACD,OAAOX,uBAAuB,CAACa,OAAD,EAAUX,OAAV,EAAmBC,KAAnB,CAA9B;AACD;AAED,OAAO,SAAS2F,mBAAT,CACLC,SADK,EACiB7F,OADjB,EAC0CC,KAD1C,EAEO;EACZ,IAAID,OAAO,CAACY,MAAR,KAAmB,6BAAvB,EAAsD;IACpDX,KAAK,CAACoD,OAAN;IACA,OAAO;MAAE7C,OAAO,EAAEC;IAAX,CAAP;EACD;;EACDR,KAAK,CAACC,MAAN,CAAa,IAAIhB,6BAAJ,CAAkC,6BAAlC,CAAb;EACA,OAAO;IAAEsB,OAAO,EAAEgB;EAAX,CAAP;AACD;AAED,OAAO,SAASA,aAAT,CACLzB,QADK,EACcC,OADd,EACuCC,KADvC,EAEO;EACZ,IAAIA,KAAK,IAAI,IAAb,EAAmB,OAAO;IAAEO,OAAO,EAAEgB;EAAX,CAAP;EACnB,IAAIxB,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,SAAlC,EAA6C,OAAO;IAAER,OAAO,EAAEgB,aAAX;IAA0BvB;EAA1B,CAAP;;EAC7C,IAAID,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBqB,IAApB,KAA6B,gBAAjC,EAAmD;IACjDnC,KAAK,CAAC6F,OAAN,GAAgB9F,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoB1B,EAApC;IACA,OAAO;MAAEmB,OAAO,EAAEgB,aAAX;MAA0BvB;IAA1B,CAAP;EACD;;EACD,IAAID,OAAO,CAACc,MAAR,CAAeC,IAAf,CAAoBC,KAApB,KAA8B,kBAAlC,EAAsD;IACpDf,KAAK,CAACoD,OAAN,CAAcpD,KAAK,CAAC6F,OAApB;IACA,OAAO;MAAEtF,OAAO,EAAEgB;IAAX,CAAP;EACD;;EACD,OAAO;IAAEhB,OAAO,EAAEgB,aAAX;IAA0BvB;EAA1B,CAAP;AACD"}
|
|
1
|
+
{"version":3,"file":"handlers.mjs","names":["generateKeyPair","encodeContractAddress","options","changeStatus","changeState","call","send","emit","channelId","disconnect","fsmId","unpackTx","buildTx","encode","Encoding","IllegalArgumentError","InsufficientBalanceError","ChannelConnectionError","UnexpectedChannelMessageError","Tag","appendSignature","tx","signFn","signatures","encodedTx","SignedTx","result","rlpEncoded","Transaction","signedTx","concat","handleUnexpectedMessage","_channel","message","state","reject","Object","assign","JSON","stringify","wsMessage","handler","channelOpen","awaitingConnection","channel","method","channelInfoStatus","params","data","event","channel_accept","funding_created","awaitingChannelCreateTx","awaitingOpenConfirmation","set","fsm_id","payload","channelClosed","awaitingReconnection","signed_tx","channelOptions","get","tag","initiator","responder","role","sign","jsonrpc","awaitingOnChainTx","info","awaitingBlockInclusion","channel_id","handlers","own_funding_locked","funding_locked","type","awaitingInitialState","awaitingTxSignRequest","enter","awaitingOffChainTx","updates","awaitingOffChainUpdate","error","find","i","code","resolve","accepted","errorCode","error_code","errorMessage","error_msg","match","awaitingUpdateConflict","from","publicKey","to","amount","awaitingShutdownTx","awaitingShutdownOnChainTx","awaitingLeave","awaitingWithdrawTx","awaitingWithdrawCompletion","onOnChainTx","callbacks","own_withdraw_locked","onOwnWithdrawLocked","withdraw_locked","onWithdrawLocked","awaitingDepositTx","awaitingDepositCompletion","own_deposit_locked","onOwnDepositLocked","deposit_locked","onDepositLocked","awaitingNewContractTx","awaitingNewContractCompletion","round","owner","address","awaitingCallContractUpdateTx","awaitingCallContractCompletion","awaitingCallContractForceProgressUpdate","awaitingForceProgressCompletion","awaitingCallsPruned","_channels","closeTx"],"sources":["../../src/channel/handlers.ts"],"sourcesContent":["/*\n * ISC License (ISC)\n * Copyright (c) 2018 aeternity developers\n *\n * Permission to use, copy, modify, and/or distribute this software for any\n * purpose with or without fee is hereby granted, provided that the above\n * copyright notice and this permission notice appear in all copies.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n * OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n * PERFORMANCE OF THIS SOFTWARE.\n */\n/* eslint-disable consistent-return */\n/* eslint-disable default-case */\n/* eslint-disable @typescript-eslint/no-use-before-define */\nimport { generateKeyPair, encodeContractAddress } from '../utils/crypto';\nimport {\n ChannelState,\n options,\n changeStatus,\n changeState,\n call,\n send,\n emit,\n channelId,\n disconnect,\n fsmId,\n ChannelMessage,\n ChannelFsm,\n SignTx,\n} from './internal';\nimport { unpackTx, buildTx } from '../tx/builder';\nimport { encode, Encoded, Encoding } from '../utils/encoder';\nimport {\n IllegalArgumentError,\n InsufficientBalanceError,\n ChannelConnectionError,\n UnexpectedChannelMessageError,\n} from '../utils/errors';\nimport type Channel from '.';\nimport { Tag } from '../tx/builder/constants';\n\nexport async function appendSignature(\n tx: Encoded.Transaction,\n signFn: SignTx,\n): Promise<Encoded.Transaction | number | null> {\n const { signatures, encodedTx } = unpackTx(tx, Tag.SignedTx).tx;\n const result = await signFn(encode(encodedTx.rlpEncoded, Encoding.Transaction));\n if (typeof result === 'string') {\n const { tx: signedTx } = unpackTx(result, Tag.SignedTx);\n return buildTx({\n signatures: signatures.concat(signedTx.signatures),\n encodedTx: signedTx.encodedTx.rlpEncoded,\n }, Tag.SignedTx).tx;\n }\n return result;\n}\n\nfunction handleUnexpectedMessage(\n _channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n state?.reject?.(Object.assign(\n new UnexpectedChannelMessageError(`Unexpected message received:\\n\\n${JSON.stringify(message)}`),\n { wsMessage: message },\n ));\n return { handler: channelOpen };\n}\n\nexport function awaitingConnection(\n channel: Channel,\n message: ChannelMessage,\n): ChannelFsm | undefined {\n if (message.method === 'channels.info') {\n const channelInfoStatus: string = message.params.data.event;\n if (['channel_accept', 'funding_created'].includes(channelInfoStatus)) {\n changeStatus(channel, {\n channel_accept: 'accepted',\n funding_created: 'halfSigned',\n }[channelInfoStatus as 'channel_accept' | 'funding_created']);\n return { handler: awaitingChannelCreateTx };\n }\n if (message.params.data.event === 'channel_reestablished') {\n return { handler: awaitingOpenConfirmation };\n }\n if (message.params.data.event === 'fsm_up') {\n fsmId.set(channel, message.params.data.fsm_id);\n return { handler: awaitingConnection };\n }\n return { handler: awaitingConnection };\n }\n if (message.method === 'channels.error') {\n emit(channel, 'error', new ChannelConnectionError(message?.payload?.message));\n return { handler: channelClosed };\n }\n}\n\nexport async function awaitingReconnection(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm> {\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'fsm_up') {\n fsmId.set(channel, message.params.data.fsm_id);\n changeState(channel, (await call(channel, 'channels.get.offchain_state', {})).signed_tx);\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingChannelCreateTx(\n channel: Channel,\n message: ChannelMessage,\n): Promise<ChannelFsm | undefined> {\n const channelOptions = options.get(channel);\n if (channelOptions != null) {\n const tag = {\n initiator: 'initiator_sign',\n responder: 'responder_sign',\n }[channelOptions.role];\n if (message.method === `channels.sign.${tag}`) {\n if (message.params.data.tx != null) {\n const signedTx = await channelOptions.sign(tag, message.params.data.tx);\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { tx: signedTx } });\n return { handler: awaitingOnChainTx };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => channelOptions.sign(tag, tx),\n );\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } });\n return { handler: awaitingOnChainTx };\n }\n }\n}\n\nexport function awaitingOnChainTx(\n channel: Channel,\n message: ChannelMessage,\n): ChannelFsm | undefined {\n const channelOptions = options.get(channel);\n if (channelOptions != null) {\n if (message.method === 'channels.on_chain_tx') {\n if (\n message.params.data.info === 'funding_signed'\n && channelOptions.role === 'initiator'\n ) {\n return { handler: awaitingBlockInclusion };\n }\n if (\n message.params.data.info === 'funding_created'\n && channelOptions.role === 'responder'\n ) {\n return { handler: awaitingBlockInclusion };\n }\n }\n if (\n message.method === 'channels.info'\n && message.params.data.event === 'funding_signed'\n && channelOptions.role === 'initiator'\n ) {\n channelId.set(channel, message.params.channel_id);\n changeStatus(channel, 'signed');\n return { handler: awaitingOnChainTx };\n }\n }\n}\n\nexport function awaitingBlockInclusion(\n channel: Channel,\n message: ChannelMessage,\n): ChannelFsm | undefined {\n if (message.method === 'channels.info') {\n const handlers: {\n [key: string]: (channel: Channel, message: ChannelMessage) => ChannelFsm | undefined;\n } = {\n funding_created: awaitingBlockInclusion,\n own_funding_locked: awaitingBlockInclusion,\n funding_locked: awaitingOpenConfirmation,\n };\n const handler = handlers[message.params.data.event as string];\n if (handler != null) {\n return { handler };\n }\n }\n if (message.method === 'channels.on_chain_tx') {\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type,\n });\n return { handler: awaitingBlockInclusion };\n }\n}\n\nexport function awaitingOpenConfirmation(\n channel: Channel,\n message: ChannelMessage,\n): ChannelFsm | undefined {\n if (message.method === 'channels.info' && message.params.data.event === 'open') {\n channelId.set(channel, message.params.channel_id);\n return { handler: awaitingInitialState };\n }\n}\n\nexport function awaitingInitialState(\n channel: Channel,\n message: ChannelMessage,\n): ChannelFsm | undefined {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state);\n return { handler: channelOpen };\n }\n}\n\nexport async function channelOpen(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n switch (message.method) {\n case 'channels.info':\n switch (message.params.data.event) {\n case 'update':\n case 'withdraw_created':\n case 'deposit_created':\n return { handler: awaitingTxSignRequest };\n case 'own_withdraw_locked':\n case 'withdraw_locked':\n case 'own_deposit_locked':\n case 'deposit_locked':\n case 'peer_disconnected':\n case 'channel_reestablished':\n case 'open':\n // TODO: Better handling of peer_disconnected event.\n //\n // We should enter intermediate state where offchain transactions\n // are blocked until channel is reestablished.\n emit(channel, message.params.data.event);\n return { handler: channelOpen };\n case 'fsm_up':\n fsmId.set(channel, message.params.data.fsm_id);\n return { handler: channelOpen };\n case 'timeout':\n case 'close_mutual':\n return { handler: channelOpen };\n case 'closing':\n changeStatus(channel, 'closing');\n return { handler: channelOpen };\n case 'closed_confirmed':\n changeStatus(channel, 'closed');\n return { handler: channelClosed };\n case 'died':\n changeStatus(channel, 'died');\n return { handler: channelClosed };\n case 'shutdown':\n return { handler: channelOpen };\n }\n break;\n case 'channels.on_chain_tx':\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type,\n });\n return { handler: channelOpen };\n case 'channels.leave':\n // TODO: emit event\n return { handler: channelOpen };\n case 'channels.update':\n changeState(channel, message.params.data.state);\n return { handler: channelOpen };\n case 'channels.sign.shutdown_sign_ack':\n return awaitingTxSignRequest(channel, message, state);\n }\n}\nchannelOpen.enter = (channel: Channel) => {\n changeStatus(channel, 'open');\n};\n\nexport async function awaitingOffChainTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm> {\n if (message.method === 'channels.sign.update') {\n const { sign } = state;\n if (message.params.data.tx != null) {\n const signedTx = await sign(message.params.data.tx, { updates: message.params.data.updates });\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } });\n return { handler: awaitingOffChainUpdate, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => sign(tx, { updates: message.params.data.updates }),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } });\n return { handler: awaitingOffChainUpdate, state };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } });\n return { handler: awaitingOffChainTx, state };\n }\n }\n if (message.method === 'channels.error') {\n state.reject(new ChannelConnectionError(message.data.message));\n return { handler: channelOpen };\n }\n if (message.error != null) {\n const { data } = message.error ?? { data: [] };\n if (data.find((i) => i.code === 1001) != null) {\n state.reject(new InsufficientBalanceError('Insufficient balance'));\n } else if (data.find((i) => i.code === 1002) != null) {\n state.reject(new IllegalArgumentError('Amount cannot be negative'));\n } else {\n state.reject(new ChannelConnectionError(message.error.message));\n }\n return { handler: channelOpen };\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingOffChainUpdate(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm | undefined {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state);\n state.resolve({ accepted: true, signedTx: message.params.data.state });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n if (message.error != null) {\n state.reject(new ChannelConnectionError(message.error.message));\n return { handler: channelOpen };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingTxSignRequest(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n const [, tag] = message.method.match(/^channels\\.sign\\.([^.]+)$/) ?? [];\n const channelOptions = options.get(channel);\n if (tag != null && (channelOptions != null)) {\n if (message.params.data.tx != null) {\n const signedTx = await channelOptions.sign(tag, message.params.data.tx, {\n updates: message.params.data.updates,\n });\n if (signedTx != null) {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { tx: signedTx } });\n return { handler: channelOpen };\n }\n } else {\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => channelOptions.sign(tag, tx, { updates: message.params.data.updates }),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } });\n return { handler: channelOpen };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { error: signedTx } });\n return { handler: awaitingUpdateConflict, state };\n }\n }\n // soft-reject via competing update\n send(channel, {\n jsonrpc: '2.0',\n method: 'channels.update.new',\n params: {\n from: generateKeyPair().publicKey,\n to: generateKeyPair().publicKey,\n amount: 1,\n },\n });\n return { handler: awaitingUpdateConflict, state };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingUpdateConflict(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.error != null) {\n return { handler: awaitingUpdateConflict, state };\n }\n if (message.method === 'channels.conflict') {\n return { handler: channelOpen };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingShutdownTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.shutdown_sign') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(message.params.data.tx);\n send(channel, { jsonrpc: '2.0', method: 'channels.shutdown_sign', params: { tx: signedTx } });\n return { handler: awaitingShutdownOnChainTx, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => state.sign(tx),\n );\n send(channel, { jsonrpc: '2.0', method: 'channels.shutdown_sign', params: { signed_tx: signedTx } });\n return { handler: awaitingShutdownOnChainTx, state };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingShutdownOnChainTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n // state.resolve(message.params.data.tx)\n return { handler: channelClosed, state };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingLeave(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.leave') {\n state.resolve({ channelId: message.params.channel_id, signedTx: message.params.data.state });\n disconnect(channel);\n return { handler: channelClosed };\n }\n if (message.method === 'channels.error') {\n state.reject(new ChannelConnectionError(message.data.message));\n return { handler: channelOpen };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingWithdrawTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.withdraw_tx') {\n const { sign } = state;\n if (message.params.data.tx != null) {\n const signedTx = await sign(message.params.data.tx, { updates: message.params.data.updates });\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { tx: signedTx } });\n return { handler: awaitingWithdrawCompletion, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => sign(tx, { updates: message.params.data.updates }),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { signed_tx: signedTx } });\n return { handler: awaitingWithdrawCompletion, state };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.withdraw_tx', params: { error: signedTx } });\n return { handler: awaitingWithdrawCompletion, state };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingWithdrawCompletion(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n state.onOnChainTx?.(message.params.data.tx);\n return { handler: awaitingWithdrawCompletion, state };\n }\n if (message.method === 'channels.info') {\n if (['own_withdraw_locked', 'withdraw_locked'].includes(message.params.data.event)) {\n const callbacks: {\n [key: string]: Function | undefined;\n } = {\n own_withdraw_locked: state.onOwnWithdrawLocked,\n withdraw_locked: state.onWithdrawLocked,\n };\n callbacks[message.params.data.event]?.();\n return { handler: awaitingWithdrawCompletion, state };\n }\n }\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state);\n state.resolve({ accepted: true, signedTx: message.params.data.state });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingDepositTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.deposit_tx') {\n const { sign } = state;\n if (message.params.data.tx != null) {\n const signedTx = await sign(\n message.params.data.tx,\n { updates: message.params.data.updates },\n );\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { tx: signedTx } });\n return { handler: awaitingDepositCompletion, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => sign(tx, { updates: message.params.data.updates }),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { signed_tx: signedTx } });\n return { handler: awaitingDepositCompletion, state };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.deposit_tx', params: { error: signedTx } });\n return { handler: awaitingDepositCompletion, state };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingDepositCompletion(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n state.onOnChainTx?.(message.params.data.tx);\n return { handler: awaitingDepositCompletion, state };\n }\n if (message.method === 'channels.info') {\n if (['own_deposit_locked', 'deposit_locked'].includes(message.params.data.event)) {\n const callbacks: {\n [key: string]: Function | undefined;\n } = {\n own_deposit_locked: state.onOwnDepositLocked,\n deposit_locked: state.onDepositLocked,\n };\n callbacks[message.params.data.event]?.();\n return { handler: awaitingDepositCompletion, state };\n }\n }\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state);\n state.resolve({ accepted: true, signedTx: message.params.data.state });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingNewContractTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(message.params.data.tx);\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } });\n return { handler: awaitingNewContractCompletion, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => state.sign(tx),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } });\n return { handler: awaitingNewContractCompletion, state };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } });\n return { handler: awaitingNewContractCompletion, state };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingNewContractCompletion(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n const channelOptions = options.get(channel);\n if (message.method === 'channels.update') {\n const { round } = unpackTx(message.params.data.state, Tag.SignedTx).tx.encodedTx.tx;\n if (channelOptions?.role != null) {\n let role: null | 'initiatorId' | 'responderId' = null;\n if (channelOptions.role === 'initiator') role = 'initiatorId';\n if (channelOptions.role === 'responder') role = 'responderId';\n if (role != null) {\n const owner = channelOptions?.[role];\n changeState(channel, message.params.data.state);\n state.resolve({\n accepted: true,\n address: encodeContractAddress(owner, round),\n signedTx: message.params.data.state,\n });\n return { handler: channelOpen };\n }\n }\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingCallContractUpdateTx(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx != null) {\n const signedTx = await state.sign(\n message.params.data.tx,\n { updates: message.params.data.updates },\n );\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { tx: signedTx } });\n return { handler: awaitingCallContractCompletion, state };\n }\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => state.sign(tx, { updates: message.params.data.updates }),\n );\n if (typeof signedTx === 'string') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { signed_tx: signedTx } });\n return { handler: awaitingCallContractCompletion, state };\n }\n if (typeof signedTx === 'number') {\n send(channel, { jsonrpc: '2.0', method: 'channels.update', params: { error: signedTx } });\n return { handler: awaitingCallContractCompletion, state };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport async function awaitingCallContractForceProgressUpdate(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): Promise<ChannelFsm | undefined> {\n if (message.method === 'channels.sign.force_progress_tx') {\n const signedTx = await appendSignature(\n message.params.data.signed_tx,\n async (tx) => state.sign(tx, { updates: message.params.data.updates }),\n );\n send(\n channel,\n { jsonrpc: '2.0', method: 'channels.force_progress_sign', params: { signed_tx: signedTx } },\n );\n return { handler: awaitingForceProgressCompletion, state };\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingForceProgressCompletion(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.on_chain_tx') {\n state.onOnChainTx?.(message.params.data.tx);\n emit(channel, 'onChainTx', message.params.data.tx, {\n info: message.params.data.info,\n type: message.params.data.type,\n });\n state.resolve({ accepted: true, tx: message.params.data.tx });\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingCallContractCompletion(\n channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state);\n state.resolve({ accepted: true, signedTx: message.params.data.state });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.conflict') {\n state.resolve({\n accepted: false,\n errorCode: message.params.data.error_code,\n errorMessage: message.params.data.error_msg,\n });\n return { handler: channelOpen };\n }\n if (message.method === 'channels.info') {\n if (message.params.data.event === 'aborted_update') {\n state.resolve({ accepted: false });\n return { handler: channelOpen };\n }\n }\n return handleUnexpectedMessage(channel, message, state);\n}\n\nexport function awaitingCallsPruned(\n _channels: Channel[],\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (message.method === 'channels.calls_pruned.reply') {\n state.resolve();\n return { handler: channelOpen };\n }\n state.reject(new UnexpectedChannelMessageError('Unexpected message received'));\n return { handler: channelClosed };\n}\n\nexport function channelClosed(\n _channel: Channel,\n message: ChannelMessage,\n state: ChannelState,\n): ChannelFsm {\n if (state == null) return { handler: channelClosed };\n if (message.params.data.event === 'closing') return { handler: channelClosed, state };\n if (message.params.data.info === 'channel_closed') {\n state.closeTx = message.params.data.tx;\n return { handler: channelClosed, state };\n }\n if (message.params.data.event === 'closed_confirmed') {\n state.resolve(state.closeTx);\n return { handler: channelClosed };\n }\n return { handler: channelClosed, state };\n}\n"],"mappings":"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"}
|
package/es/channel/index.d.ts
CHANGED
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import BigNumber from 'bignumber.js';
|
|
2
|
-
import { SignTx, ChannelOptions, ChannelState
|
|
3
|
-
import {
|
|
2
|
+
import { SignTx, ChannelOptions, ChannelState } from './internal';
|
|
3
|
+
import { Encoded } from '../utils/encoder';
|
|
4
|
+
import { ContractCallReturnType } from '../apis/node';
|
|
4
5
|
declare type EventCallback = (...args: any[]) => void;
|
|
5
6
|
interface CallContractOptions {
|
|
6
7
|
amount?: number | BigNumber;
|
|
7
|
-
callData?:
|
|
8
|
+
callData?: Encoded.ContractBytearray;
|
|
8
9
|
abiVersion?: number;
|
|
9
|
-
contract?:
|
|
10
|
+
contract?: Encoded.ContractAddress;
|
|
10
11
|
returnValue?: any;
|
|
11
12
|
gasUsed?: number | BigNumber;
|
|
12
13
|
gasPrice?: number | BigNumber;
|
|
13
14
|
height?: number;
|
|
14
15
|
callerNonce?: number;
|
|
15
16
|
log?: any;
|
|
16
|
-
returnType?:
|
|
17
|
+
returnType?: ContractCallReturnType;
|
|
17
18
|
}
|
|
18
19
|
interface Contract {
|
|
19
20
|
abiVersion: number;
|
|
@@ -155,7 +156,7 @@ export default class Channel {
|
|
|
155
156
|
* The update is a change to be applied on top of the latest state.
|
|
156
157
|
*
|
|
157
158
|
* Sender and receiver are the channel parties. Both the initiator and responder
|
|
158
|
-
* can take those roles. Any public key outside
|
|
159
|
+
* can take those roles. Any public key outside the channel is considered invalid.
|
|
159
160
|
*
|
|
160
161
|
* @param from - Sender's public address
|
|
161
162
|
* @param to - Receiver's public address
|
|
@@ -177,9 +178,9 @@ export default class Channel {
|
|
|
177
178
|
* )
|
|
178
179
|
* ```
|
|
179
180
|
*/
|
|
180
|
-
update(from:
|
|
181
|
+
update(from: Encoded.AccountAddress, to: Encoded.AccountAddress, amount: number | BigNumber, sign: SignTx, metadata?: string[]): Promise<{
|
|
181
182
|
accepted: boolean;
|
|
182
|
-
signedTx?:
|
|
183
|
+
signedTx?: Encoded.Transaction;
|
|
183
184
|
errorCode?: number;
|
|
184
185
|
errorMessage?: string;
|
|
185
186
|
}>;
|
|
@@ -204,13 +205,13 @@ export default class Channel {
|
|
|
204
205
|
* ```
|
|
205
206
|
*/
|
|
206
207
|
poi({ accounts, contracts }: {
|
|
207
|
-
accounts:
|
|
208
|
-
contracts?:
|
|
209
|
-
}): Promise<
|
|
208
|
+
accounts: Encoded.AccountAddress[];
|
|
209
|
+
contracts?: Encoded.ContractAddress[];
|
|
210
|
+
}): Promise<Encoded.Poi>;
|
|
210
211
|
/**
|
|
211
212
|
* Get balances
|
|
212
213
|
*
|
|
213
|
-
* The accounts
|
|
214
|
+
* The accounts param contains a list of addresses to fetch balances of.
|
|
214
215
|
* Those can be either account balances or a contract ones, encoded as an account addresses.
|
|
215
216
|
*
|
|
216
217
|
* If a certain account address had not being found in the state tree - it is simply
|
|
@@ -228,8 +229,8 @@ export default class Channel {
|
|
|
228
229
|
* )
|
|
229
230
|
* ```
|
|
230
231
|
*/
|
|
231
|
-
balances(accounts:
|
|
232
|
-
[key:
|
|
232
|
+
balances(accounts: Encoded.AccountAddress[]): Promise<{
|
|
233
|
+
[key: Encoded.AccountAddress]: string;
|
|
233
234
|
}>;
|
|
234
235
|
/**
|
|
235
236
|
* Leave channel
|
|
@@ -253,7 +254,7 @@ export default class Channel {
|
|
|
253
254
|
*/
|
|
254
255
|
leave(): Promise<{
|
|
255
256
|
channelId: string;
|
|
256
|
-
signedTx:
|
|
257
|
+
signedTx: Encoded.Transaction;
|
|
257
258
|
}>;
|
|
258
259
|
/**
|
|
259
260
|
* Trigger mutual close
|
|
@@ -269,7 +270,7 @@ export default class Channel {
|
|
|
269
270
|
* ).then(tx => console.log('on_chain_tx', tx))
|
|
270
271
|
* ```
|
|
271
272
|
*/
|
|
272
|
-
shutdown(sign: Function): Promise<
|
|
273
|
+
shutdown(sign: Function): Promise<Encoded.Transaction>;
|
|
273
274
|
/**
|
|
274
275
|
* Withdraw coins from the channel
|
|
275
276
|
*
|
|
@@ -319,13 +320,9 @@ export default class Channel {
|
|
|
319
320
|
* })
|
|
320
321
|
* ```
|
|
321
322
|
*/
|
|
322
|
-
withdraw(amount: number | BigNumber, sign: SignTx, { onOnChainTx, onOwnWithdrawLocked, onWithdrawLocked }?: {
|
|
323
|
-
onOnChainTx?: Function;
|
|
324
|
-
onOwnWithdrawLocked?: Function;
|
|
325
|
-
onWithdrawLocked?: Function;
|
|
326
|
-
}): Promise<{
|
|
323
|
+
withdraw(amount: number | BigNumber, sign: SignTx, { onOnChainTx, onOwnWithdrawLocked, onWithdrawLocked }?: Pick<ChannelState, 'onOnChainTx' | 'onOwnWithdrawLocked' | 'onWithdrawLocked'>): Promise<{
|
|
327
324
|
accepted: boolean;
|
|
328
|
-
signedTx:
|
|
325
|
+
signedTx: Encoded.Transaction;
|
|
329
326
|
}>;
|
|
330
327
|
/**
|
|
331
328
|
* Deposit coins into the channel
|
|
@@ -377,11 +374,7 @@ export default class Channel {
|
|
|
377
374
|
* })
|
|
378
375
|
* ```
|
|
379
376
|
*/
|
|
380
|
-
deposit(amount: number | BigNumber, sign: SignTx, { onOnChainTx, onOwnDepositLocked, onDepositLocked }?: {
|
|
381
|
-
onOnChainTx?: Function;
|
|
382
|
-
onOwnDepositLocked?: Function;
|
|
383
|
-
onDepositLocked?: Function;
|
|
384
|
-
}): Promise<{
|
|
377
|
+
deposit(amount: number | BigNumber, sign: SignTx, { onOnChainTx, onOwnDepositLocked, onDepositLocked }?: Pick<ChannelState, 'onOnChainTx' | 'onOwnDepositLocked' | 'onDepositLocked'>): Promise<{
|
|
385
378
|
accepted: boolean;
|
|
386
379
|
state: ChannelState;
|
|
387
380
|
}>;
|
|
@@ -419,16 +412,16 @@ export default class Channel {
|
|
|
419
412
|
* })
|
|
420
413
|
* ```
|
|
421
414
|
*/
|
|
422
|
-
createContract({ code, callData, deposit, vmVersion, abiVersion }: {
|
|
423
|
-
code:
|
|
424
|
-
callData:
|
|
415
|
+
createContract({ code, callData, deposit, vmVersion, abiVersion, }: {
|
|
416
|
+
code: Encoded.ContractBytearray;
|
|
417
|
+
callData: Encoded.ContractBytearray;
|
|
425
418
|
deposit: number | BigNumber;
|
|
426
419
|
vmVersion: number;
|
|
427
420
|
abiVersion: number;
|
|
428
421
|
}, sign: SignTx): Promise<{
|
|
429
422
|
accepted: boolean;
|
|
430
|
-
signedTx:
|
|
431
|
-
address:
|
|
423
|
+
signedTx: Encoded.Transaction;
|
|
424
|
+
address: Encoded.ContractAddress;
|
|
432
425
|
}>;
|
|
433
426
|
/**
|
|
434
427
|
* Trigger call a contract update
|
|
@@ -468,9 +461,9 @@ export default class Channel {
|
|
|
468
461
|
* })
|
|
469
462
|
* ```
|
|
470
463
|
*/
|
|
471
|
-
callContract({ amount, callData, contract, abiVersion }: CallContractOptions, sign: SignTx): Promise<{
|
|
464
|
+
callContract({ amount, callData, contract, abiVersion, }: CallContractOptions, sign: SignTx): Promise<{
|
|
472
465
|
accepted: boolean;
|
|
473
|
-
signedTx:
|
|
466
|
+
signedTx: Encoded.Transaction;
|
|
474
467
|
}>;
|
|
475
468
|
/**
|
|
476
469
|
* Trigger a force progress contract call
|
|
@@ -501,19 +494,17 @@ export default class Channel {
|
|
|
501
494
|
* })
|
|
502
495
|
* ```
|
|
503
496
|
*/
|
|
504
|
-
forceProgress({ amount, callData, contract, abiVersion, gasLimit, gasPrice }: {
|
|
497
|
+
forceProgress({ amount, callData, contract, abiVersion, gasLimit, gasPrice, }: {
|
|
505
498
|
amount: number;
|
|
506
|
-
callData:
|
|
507
|
-
contract:
|
|
499
|
+
callData: Encoded.ContractBytearray;
|
|
500
|
+
contract: Encoded.ContractAddress;
|
|
508
501
|
abiVersion: number;
|
|
509
502
|
gasLimit?: number;
|
|
510
503
|
gasPrice?: number;
|
|
511
|
-
}, sign: SignTx, { onOnChainTx }?: {
|
|
512
|
-
onOnChainTx?: Function;
|
|
513
|
-
}): Promise<{
|
|
504
|
+
}, sign: SignTx, { onOnChainTx }?: Pick<ChannelState, 'onOnChainTx'>): Promise<{
|
|
514
505
|
accepted: boolean;
|
|
515
|
-
signedTx:
|
|
516
|
-
tx:
|
|
506
|
+
signedTx: Encoded.Transaction;
|
|
507
|
+
tx: Encoded.Transaction | Uint8Array;
|
|
517
508
|
}>;
|
|
518
509
|
/**
|
|
519
510
|
* Call contract using dry-run
|
|
@@ -522,7 +513,7 @@ export default class Channel {
|
|
|
522
513
|
* dry-run a contract call. It takes the exact same arguments as a call would
|
|
523
514
|
* and returns the call object.
|
|
524
515
|
*
|
|
525
|
-
* The call is executed in the channel's state but it does not impact the state
|
|
516
|
+
* The call is executed in the channel's state, but it does not impact the state
|
|
526
517
|
* whatsoever. It uses as an environment the latest channel's state and the current
|
|
527
518
|
* top of the blockchain as seen by the node.
|
|
528
519
|
*
|
|
@@ -544,10 +535,10 @@ export default class Channel {
|
|
|
544
535
|
* })
|
|
545
536
|
* ```
|
|
546
537
|
*/
|
|
547
|
-
callContractStatic({ amount, callData, contract, abiVersion }: {
|
|
538
|
+
callContractStatic({ amount, callData, contract, abiVersion, }: {
|
|
548
539
|
amount: number;
|
|
549
|
-
callData:
|
|
550
|
-
contract:
|
|
540
|
+
callData: Encoded.ContractBytearray;
|
|
541
|
+
contract: Encoded.ContractAddress;
|
|
551
542
|
abiVersion: number;
|
|
552
543
|
}): Promise<CallContractOptions>;
|
|
553
544
|
/**
|
|
@@ -572,11 +563,11 @@ export default class Channel {
|
|
|
572
563
|
* ```
|
|
573
564
|
*/
|
|
574
565
|
getContractCall({ caller, contract, round }: {
|
|
575
|
-
caller:
|
|
576
|
-
contract:
|
|
566
|
+
caller: Encoded.AccountAddress;
|
|
567
|
+
contract: Encoded.ContractAddress;
|
|
577
568
|
round: number;
|
|
578
569
|
}): Promise<{
|
|
579
|
-
returnType:
|
|
570
|
+
returnType: ContractCallReturnType;
|
|
580
571
|
returnValue: string;
|
|
581
572
|
gasPrice: number | BigNumber;
|
|
582
573
|
gasUsed: number | BigNumber;
|
|
@@ -584,7 +575,7 @@ export default class Channel {
|
|
|
584
575
|
log: string;
|
|
585
576
|
}>;
|
|
586
577
|
/**
|
|
587
|
-
* Get
|
|
578
|
+
* Get the latest contract state
|
|
588
579
|
*
|
|
589
580
|
* @param contract - Address of the contract
|
|
590
581
|
* @example
|
|
@@ -596,7 +587,7 @@ export default class Channel {
|
|
|
596
587
|
* })
|
|
597
588
|
* ```
|
|
598
589
|
*/
|
|
599
|
-
getContractState(contract:
|
|
590
|
+
getContractState(contract: Encoded.ContractAddress): Promise<{
|
|
600
591
|
contract: Contract;
|
|
601
592
|
contractState: object;
|
|
602
593
|
}>;
|
|
@@ -628,7 +619,7 @@ export default class Channel {
|
|
|
628
619
|
* )
|
|
629
620
|
* ```
|
|
630
621
|
*/
|
|
631
|
-
sendMessage(message: string |
|
|
622
|
+
sendMessage(message: string | object, recipient: Encoded.AccountAddress): Promise<void>;
|
|
632
623
|
static reconnect(options: ChannelOptions, txParams: any): Promise<Channel>;
|
|
633
624
|
}
|
|
634
625
|
export {};
|