@aeternity/aepp-sdk 8.2.1 → 10.0.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/CHANGELOG.md +216 -337
- package/README.md +16 -9
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +0 -9
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/account/base.js +36 -120
- package/es/account/base.js.map +1 -1
- package/es/account/memory.js +17 -19
- package/es/account/memory.js.map +1 -1
- package/es/account/multiple.js +79 -156
- package/es/account/multiple.js.map +1 -1
- package/es/ae/aens.js +205 -626
- package/es/ae/aens.js.map +1 -1
- package/es/ae/contract.js +114 -918
- package/es/ae/contract.js.map +1 -1
- package/es/ae/index.js +90 -250
- package/es/ae/index.js.map +1 -1
- package/es/ae/oracle.js +136 -504
- package/es/ae/oracle.js.map +1 -1
- package/es/ae/universal.js.map +1 -1
- package/es/chain/index.js +12 -27
- package/es/chain/index.js.map +1 -1
- package/es/chain/node.js +289 -1020
- package/es/chain/node.js.map +1 -1
- package/es/channel/handlers.js +597 -1086
- package/es/channel/handlers.js.map +1 -1
- package/es/channel/index.js +238 -465
- package/es/channel/index.js.map +1 -1
- package/es/channel/internal.js +129 -301
- package/es/channel/internal.js.map +1 -1
- package/es/contract/aci/index.js +328 -495
- package/es/contract/aci/index.js.map +1 -1
- package/es/contract/aci/transformation.js +35 -711
- package/es/contract/aci/transformation.js.map +1 -1
- package/es/contract/compiler.js +131 -203
- package/es/contract/compiler.js.map +1 -1
- package/es/contract/ga/helpers.js +17 -122
- package/es/contract/ga/helpers.js.map +1 -1
- package/es/contract/ga/index.js +108 -249
- package/es/contract/ga/index.js.map +1 -1
- package/es/contract/index.js +7 -3
- package/es/contract/index.js.map +1 -1
- package/es/index.js +3 -3
- package/es/index.js.map +1 -1
- package/es/node-pool/index.js +57 -74
- package/es/node-pool/index.js.map +1 -1
- package/es/node.js +65 -161
- package/es/node.js.map +1 -1
- package/es/other.d.ts +1 -1
- package/es/tx/builder/helpers.js +62 -115
- package/es/tx/builder/helpers.js.map +1 -1
- package/es/tx/builder/index.js +218 -309
- package/es/tx/builder/index.js.map +1 -1
- package/es/tx/builder/schema.js +586 -573
- package/es/tx/builder/schema.js.map +1 -1
- package/es/tx/index.js +102 -13
- package/es/tx/index.js.map +1 -1
- package/es/tx/tx-object.js +114 -138
- package/es/tx/tx-object.js.map +1 -1
- package/es/tx/tx.js +810 -1586
- package/es/tx/tx.js.map +1 -1
- package/es/tx/validator.js +191 -426
- package/es/tx/validator.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +20 -23
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +53 -80
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +1 -1
- package/es/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/es/utils/aepp-wallet-communication/connection/index.js.map +1 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +24 -19
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +1 -1
- package/es/utils/aepp-wallet-communication/helpers.js +60 -105
- package/es/utils/aepp-wallet-communication/helpers.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +191 -514
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +78 -93
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +1 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +381 -613
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +1 -1
- package/es/utils/aepp-wallet-communication/schema.js +43 -39
- package/es/utils/aepp-wallet-communication/schema.js.map +1 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +32 -58
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +1 -1
- package/es/utils/amount-formatter.js +41 -61
- package/es/utils/amount-formatter.js.map +1 -1
- package/es/utils/async-init.js +28 -64
- package/es/utils/async-init.js.map +1 -1
- package/es/utils/bignumber.js +3 -11
- package/es/utils/bignumber.js.map +1 -1
- package/es/utils/bytes.js +5 -9
- package/es/utils/bytes.js.map +1 -1
- package/es/utils/crypto.js +41 -106
- package/es/utils/crypto.js.map +1 -1
- package/es/utils/hd-wallet.js +45 -81
- package/es/utils/hd-wallet.js.map +1 -1
- package/es/utils/json-big.js +16 -49
- package/es/utils/json-big.js.map +1 -1
- package/es/utils/keystore.js +81 -246
- package/es/utils/keystore.js.map +1 -1
- package/es/utils/mptree.js +88 -134
- package/es/utils/mptree.js.map +1 -1
- package/es/utils/other.js +10 -60
- package/es/utils/other.js.map +1 -1
- package/es/utils/semver-satisfies.js +9 -28
- package/es/utils/semver-satisfies.js.map +1 -1
- package/es/utils/string.js +4 -13
- package/es/utils/string.js.map +1 -1
- package/es/utils/swagger.js +87 -224
- package/es/utils/swagger.js.map +1 -1
- package/package.json +51 -44
- package/src/account/base.js +11 -10
- package/src/account/multiple.js +24 -18
- package/src/ae/aens.js +64 -61
- package/src/ae/contract.js +71 -248
- package/src/ae/index.js +34 -9
- package/src/ae/oracle.js +30 -22
- package/src/ae/universal.js +3 -1
- package/src/chain/index.js +10 -16
- package/src/chain/node.js +38 -38
- package/src/channel/handlers.js +10 -4
- package/src/channel/index.js +44 -20
- package/src/contract/aci/index.js +234 -112
- package/src/contract/aci/transformation.js +30 -422
- package/src/contract/compiler.js +50 -5
- package/src/contract/ga/helpers.js +6 -14
- package/src/contract/ga/index.js +28 -28
- package/src/contract/index.js +6 -2
- package/src/index.js +4 -4
- package/src/node-pool/index.js +24 -13
- package/src/node.js +29 -30
- package/src/tx/builder/helpers.js +31 -56
- package/src/tx/builder/index.js +67 -28
- package/src/tx/builder/schema.js +79 -121
- package/src/tx/index.js +101 -12
- package/src/tx/tx-object.js +25 -8
- package/src/tx/tx.js +229 -150
- package/src/tx/validator.js +134 -202
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +3 -2
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +25 -7
- package/src/utils/aepp-wallet-communication/connection/index.js +2 -1
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +10 -4
- package/src/utils/aepp-wallet-communication/helpers.js +4 -2
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +33 -12
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +9 -5
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +59 -29
- package/src/utils/aepp-wallet-communication/schema.js +1 -3
- package/src/utils/aepp-wallet-communication/wallet-detector.js +4 -1
- package/src/utils/amount-formatter.ts +1 -1
- package/src/utils/bignumber.ts +2 -1
- package/src/utils/crypto.js +4 -68
- package/src/utils/keystore.js +10 -2
- package/src/utils/other.ts +1 -1
- package/src/utils/semver-satisfies.ts +1 -1
- package/src/utils/swagger.js +22 -10
- package/src/contract/aci/helpers.js +0 -140
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/channel/handlers.js"],"names":["generateKeyPair","encodeContractAddress","encodeBase64Check","options","changeStatus","changeState","call","send","emit","channelId","disconnect","fsmId","unpackTx","buildTx","encodeRlpTx","rlpBinary","appendSignature","tx","signFn","signatures","encodedTx","rlpEncoded","result","signedTx","txType","handleUnexpectedMessage","channel","message","state","reject","Error","wsMessage","handler","channelOpen","awaitingConnection","method","params","data","event","channel_accept","funding_created","awaitingChannelCreateTx","awaitingOpenConfirmation","set","fsm_id","payload","channelClosed","awaitingReconnection","signed_tx","tag","initiator","responder","get","role","sign","jsonrpc","awaitingOnChainTx","info","awaitingBlockInclusion","channel_id","own_funding_locked","funding_locked","type","awaitingInitialState","awaitingTxSignRequest","enter","awaitingOffChainTx","updates","awaitingOffChainUpdate","error","i","code","resolve","accepted","errorCode","error_code","errorMessage","error_msg","match","awaitingUpdateConflict","from","publicKey","to","amount","awaitingShutdownTx","awaitingShutdownOnChainTx","awaitingLeave","awaitingWithdrawTx","awaitingWithdrawCompletion","onOnChainTx","callback","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","console","log","awaitingCallsPruned","channels","closeTx"],"mappings":"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","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, encodeBase64Check } from '../utils/crypto'\nimport {\n options,\n changeStatus,\n changeState,\n call,\n send,\n emit,\n channelId,\n disconnect,\n fsmId\n} from './internal'\nimport { unpackTx, buildTx } from '../tx/builder'\n\nfunction encodeRlpTx (rlpBinary) {\n return `tx_${encodeBase64Check(rlpBinary)}`\n}\n\nasync function appendSignature (tx, signFn) {\n const { signatures, encodedTx } = unpackTx(tx).tx\n const result = await signFn(encodeRlpTx(encodedTx.rlpEncoded))\n if (typeof result === 'string') {\n const { tx: signedTx, txType } = unpackTx(result)\n return encodeRlpTx(buildTx({\n signatures: signatures.concat(signedTx.signatures),\n encodedTx: signedTx.encodedTx.rlpEncoded\n }, txType).rlpEncoded)\n }\n return result\n}\n\nfunction handleUnexpectedMessage (channel, message, state) {\n if (state && state.reject) {\n state.reject(Object.assign(\n new Error(`Unexpected message received:\\n\\n${JSON.stringify(message)}`),\n { wsMessage: message }\n ))\n }\n return { handler: channelOpen }\n}\n\nexport function awaitingConnection (channel, message, state) {\n if (message.method === 'channels.info') {\n if (['channel_accept', 'funding_created'].includes(message.params.data.event)) {\n changeStatus(channel, {\n channel_accept: 'accepted',\n funding_created: 'halfSigned'\n }[message.params.data.event])\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 Error(message.payload.message))\n return { handler: channelClosed }\n }\n}\n\nexport async function awaitingReconnection (channel, message, state) {\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 (channel, message, state) {\n const tag = {\n initiator: 'initiator_sign',\n responder: 'responder_sign'\n }[options.get(channel).role]\n if (message.method === `channels.sign.${tag}`) {\n if (message.params.data.tx) {\n const signedTx = await options.get(channel).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(message.params.data.signed_tx, tx => options.get(channel).sign(tag, tx))\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } })\n return { handler: awaitingOnChainTx }\n }\n}\n\nexport function awaitingOnChainTx (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (\n message.params.data.info === 'funding_signed' &&\n options.get(channel).role === 'initiator'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n if (\n message.params.data.info === 'funding_created' &&\n options.get(channel).role === 'responder'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n }\n if (\n message.method === 'channels.info' &&\n message.params.data.event === 'funding_signed' &&\n options.get(channel).role === 'initiator'\n ) {\n channelId.set(channel, message.params.channel_id)\n changeStatus(channel, 'signed')\n return { handler: awaitingOnChainTx }\n }\n}\n\nexport function awaitingBlockInclusion (channel, message, state) {\n if (message.method === 'channels.info') {\n const handler = {\n funding_created: awaitingBlockInclusion,\n own_funding_locked: awaitingBlockInclusion,\n funding_locked: awaitingOpenConfirmation\n }[message.params.data.event]\n if (handler) {\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 (channel, message, state) {\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 (channel, message, state) {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n return { handler: channelOpen }\n }\n}\n\nexport async function channelOpen (channel, message, state) {\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) => {\n changeStatus(channel, 'open')\n}\n\nexport async function awaitingOffChainTx (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n const { sign } = state\n if (message.params.data.tx) {\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(message.params.data.signed_tx, tx =>\n 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 Error(message.data.message))\n return { handler: channelOpen }\n }\n if (message.error) {\n const { data = [] } = message.error\n if (data.find(i => i.code === 1001)) {\n state.reject(new Error('Insufficient balance'))\n } else if (data.find(i => i.code === 1002)) {\n state.reject(new Error('Amount cannot be negative'))\n } else {\n state.reject(new Error(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 (channel, message, state) {\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) {\n state.reject(new Error(message.error.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingTxSignRequest (channel, message, state) {\n const [, tag] = message.method.match(/^channels\\.sign\\.([^.]+)$/) || []\n if (tag) {\n if (message.params.data.tx) {\n const signedTx = await options.get(channel).sign(tag, message.params.data.tx, {\n updates: message.params.data.updates\n })\n if (signedTx) {\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, tx =>\n options.get(channel).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 (channel, message, state) {\n if (message.error) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.shutdown_sign') {\n if (message.params.data.tx) {\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, tx => 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 (channel, message, state) {\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 (channel, message, state) {\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 Error(message.data.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingWithdrawTx (channel, message, state) {\n if (message.method === 'channels.sign.withdraw_tx') {\n const { sign } = state\n if (message.params.data.tx) {\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(message.params.data.signed_tx, tx =>\n 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 (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 callback = {\n own_withdraw_locked: state.onOwnWithdrawLocked,\n withdraw_locked: state.onWithdrawLocked\n }[message.params.data.event]\n if (callback) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.deposit_tx') {\n const { sign } = state\n if (message.params.data.tx) {\n const signedTx = await sign(message.params.data.tx, { 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, tx =>\n 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 (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 callback = {\n own_deposit_locked: state.onOwnDepositLocked,\n deposit_locked: state.onDepositLocked\n }[message.params.data.event]\n if (callback) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx) {\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, tx => 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 (channel, message, state) {\n if (message.method === 'channels.update') {\n const { round } = unpackTx(message.params.data.state).tx.encodedTx.tx\n const owner = options.get(channel)[{\n initiator: 'initiatorId',\n responder: 'responderId'\n }[options.get(channel).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 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 (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx) {\n const signedTx = await state.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: awaitingCallContractCompletion, state }\n }\n const signedTx = await appendSignature(message.params.data.signed_tx, tx => state.sign(tx, { updates: message.params.data.updates }))\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 (channel, message, state) {\n if (message.method === 'channels.sign.force_progress_tx') {\n const signedTx = await appendSignature(message.params.data.signed_tx, tx =>\n 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 (channel, message, state) {\n console.log('From force progress await completion ->', message)\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 (channel, message, state) {\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 (channels, message, state) {\n if (message.method === 'channels.calls_pruned.reply') {\n state.resolve()\n return { handler: channelOpen }\n }\n state.reject(new Error('Unexpected message received'))\n return { handler: channelClosed }\n}\n\nexport function channelClosed (channel, message, state) {\n if (!state) 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"],"file":"handlers.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/channel/handlers.js"],"names":["generateKeyPair","encodeContractAddress","encodeBase64Check","options","changeStatus","changeState","call","send","emit","channelId","disconnect","fsmId","unpackTx","buildTx","encodeRlpTx","rlpBinary","appendSignature","tx","signFn","signatures","encodedTx","result","rlpEncoded","signedTx","txType","concat","handleUnexpectedMessage","channel","message","state","reject","Object","assign","Error","JSON","stringify","wsMessage","handler","channelOpen","awaitingConnection","method","includes","params","data","event","channel_accept","funding_created","awaitingChannelCreateTx","awaitingOpenConfirmation","set","fsm_id","payload","channelClosed","awaitingReconnection","signed_tx","tag","initiator","responder","get","role","sign","jsonrpc","awaitingOnChainTx","info","awaitingBlockInclusion","channel_id","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","callback","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"],"mappings":"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","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, encodeBase64Check } from '../utils/crypto'\nimport {\n options,\n changeStatus,\n changeState,\n call,\n send,\n emit,\n channelId,\n disconnect,\n fsmId\n} from './internal'\nimport { unpackTx, buildTx } from '../tx/builder'\n\nfunction encodeRlpTx (rlpBinary) {\n return `tx_${encodeBase64Check(rlpBinary)}`\n}\n\nasync function appendSignature (tx, signFn) {\n const { signatures, encodedTx } = unpackTx(tx).tx\n const result = await signFn(encodeRlpTx(encodedTx.rlpEncoded))\n if (typeof result === 'string') {\n const { tx: signedTx, txType } = unpackTx(result)\n return encodeRlpTx(buildTx({\n signatures: signatures.concat(signedTx.signatures),\n encodedTx: signedTx.encodedTx.rlpEncoded\n }, txType).rlpEncoded)\n }\n return result\n}\n\nfunction handleUnexpectedMessage (channel, message, state) {\n if (state && state.reject) {\n state.reject(Object.assign(\n new Error(`Unexpected message received:\\n\\n${JSON.stringify(message)}`),\n { wsMessage: message }\n ))\n }\n return { handler: channelOpen }\n}\n\nexport function awaitingConnection (channel, message, state) {\n if (message.method === 'channels.info') {\n if (['channel_accept', 'funding_created'].includes(message.params.data.event)) {\n changeStatus(channel, {\n channel_accept: 'accepted',\n funding_created: 'halfSigned'\n }[message.params.data.event])\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 Error(message.payload.message))\n return { handler: channelClosed }\n }\n}\n\nexport async function awaitingReconnection (channel, message, state) {\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 (channel, message, state) {\n const tag = {\n initiator: 'initiator_sign',\n responder: 'responder_sign'\n }[options.get(channel).role]\n if (message.method === `channels.sign.${tag}`) {\n if (message.params.data.tx) {\n const signedTx = await options.get(channel).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, tx => options.get(channel).sign(tag, tx)\n )\n send(channel, { jsonrpc: '2.0', method: `channels.${tag}`, params: { signed_tx: signedTx } })\n return { handler: awaitingOnChainTx }\n }\n}\n\nexport function awaitingOnChainTx (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (\n message.params.data.info === 'funding_signed' &&\n options.get(channel).role === 'initiator'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n if (\n message.params.data.info === 'funding_created' &&\n options.get(channel).role === 'responder'\n ) {\n return { handler: awaitingBlockInclusion }\n }\n }\n if (\n message.method === 'channels.info' &&\n message.params.data.event === 'funding_signed' &&\n options.get(channel).role === 'initiator'\n ) {\n channelId.set(channel, message.params.channel_id)\n changeStatus(channel, 'signed')\n return { handler: awaitingOnChainTx }\n }\n}\n\nexport function awaitingBlockInclusion (channel, message, state) {\n if (message.method === 'channels.info') {\n const handler = {\n funding_created: awaitingBlockInclusion,\n own_funding_locked: awaitingBlockInclusion,\n funding_locked: awaitingOpenConfirmation\n }[message.params.data.event]\n if (handler) {\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 (channel, message, state) {\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 (channel, message, state) {\n if (message.method === 'channels.update') {\n changeState(channel, message.params.data.state)\n return { handler: channelOpen }\n }\n}\n\nexport async function channelOpen (channel, message, state) {\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) => {\n changeStatus(channel, 'open')\n}\n\nexport async function awaitingOffChainTx (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n const { sign } = state\n if (message.params.data.tx) {\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(message.params.data.signed_tx, tx =>\n 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 Error(message.data.message))\n return { handler: channelOpen }\n }\n if (message.error) {\n const { data = [] } = message.error\n if (data.find(i => i.code === 1001)) {\n state.reject(new Error('Insufficient balance'))\n } else if (data.find(i => i.code === 1002)) {\n state.reject(new Error('Amount cannot be negative'))\n } else {\n state.reject(new Error(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 (channel, message, state) {\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) {\n state.reject(new Error(message.error.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingTxSignRequest (channel, message, state) {\n const [, tag] = message.method.match(/^channels\\.sign\\.([^.]+)$/) || []\n if (tag) {\n if (message.params.data.tx) {\n const signedTx = await options.get(channel).sign(tag, message.params.data.tx, {\n updates: message.params.data.updates\n })\n if (signedTx) {\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, tx =>\n options.get(channel).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 (channel, message, state) {\n if (message.error) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.shutdown_sign') {\n if (message.params.data.tx) {\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, tx => 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 (channel, message, state) {\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 (channel, message, state) {\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 Error(message.data.message))\n return { handler: channelOpen }\n }\n return handleUnexpectedMessage(channel, message, state)\n}\n\nexport async function awaitingWithdrawTx (channel, message, state) {\n if (message.method === 'channels.sign.withdraw_tx') {\n const { sign } = state\n if (message.params.data.tx) {\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(message.params.data.signed_tx, tx =>\n 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 (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 callback = {\n own_withdraw_locked: state.onOwnWithdrawLocked,\n withdraw_locked: state.onWithdrawLocked\n }[message.params.data.event]\n if (callback) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.deposit_tx') {\n const { sign } = state\n if (message.params.data.tx) {\n const signedTx = await sign(message.params.data.tx, { 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, tx =>\n 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 (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 callback = {\n own_deposit_locked: state.onOwnDepositLocked,\n deposit_locked: state.onDepositLocked\n }[message.params.data.event]\n if (callback) {\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 (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx) {\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, tx => 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 (channel, message, state) {\n if (message.method === 'channels.update') {\n const { round } = unpackTx(message.params.data.state).tx.encodedTx.tx\n const owner = options.get(channel)[{\n initiator: 'initiatorId',\n responder: 'responderId'\n }[options.get(channel).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 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 (channel, message, state) {\n if (message.method === 'channels.sign.update') {\n if (message.params.data.tx) {\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 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 (channel, message, state) {\n if (message.method === 'channels.sign.force_progress_tx') {\n const signedTx = await appendSignature(message.params.data.signed_tx, tx =>\n 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 (channel, message, state) {\n if (message.method === 'channels.on_chain_tx') {\n if (state.onOnChainTx) {\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 (channel, message, state) {\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 (channels, message, state) {\n if (message.method === 'channels.calls_pruned.reply') {\n state.resolve()\n return { handler: channelOpen }\n }\n state.reject(new Error('Unexpected message received'))\n return { handler: channelClosed }\n}\n\nexport function channelClosed (channel, message, state) {\n if (!state) 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"],"file":"handlers.js"}
|