tigerbeetle-node 0.5.2 → 0.8.1
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/README.md +97 -78
- package/dist/benchmark.js +96 -94
- package/dist/benchmark.js.map +1 -1
- package/dist/index.d.ts +82 -82
- package/dist/index.js +74 -93
- package/dist/index.js.map +1 -1
- package/dist/test.js +134 -111
- package/dist/test.js.map +1 -1
- package/package.json +3 -2
- package/scripts/download_node_headers.sh +3 -1
- package/src/benchmark.ts +114 -118
- package/src/index.ts +102 -111
- package/src/node.zig +55 -63
- package/src/test.ts +146 -125
- package/src/tigerbeetle/scripts/benchmark.bat +46 -0
- package/src/tigerbeetle/scripts/benchmark.sh +5 -0
- package/src/tigerbeetle/scripts/install_zig.bat +109 -109
- package/src/tigerbeetle/scripts/install_zig.sh +8 -4
- package/src/tigerbeetle/scripts/vopr.bat +47 -47
- package/src/tigerbeetle/scripts/vopr.sh +2 -2
- package/src/tigerbeetle/src/benchmark.zig +65 -102
- package/src/tigerbeetle/src/cli.zig +39 -18
- package/src/tigerbeetle/src/config.zig +44 -25
- package/src/tigerbeetle/src/demo.zig +2 -15
- package/src/tigerbeetle/src/demo_01_create_accounts.zig +10 -10
- package/src/tigerbeetle/src/demo_03_create_transfers.zig +5 -3
- package/src/tigerbeetle/src/{demo_04_create_transfers_two_phase_commit.zig → demo_04_create_pending_transfers.zig} +18 -12
- package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +37 -0
- package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +24 -0
- package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +1 -1
- package/src/tigerbeetle/src/io/benchmark.zig +24 -49
- package/src/tigerbeetle/src/io/darwin.zig +175 -44
- package/src/tigerbeetle/src/io/linux.zig +177 -72
- package/src/tigerbeetle/src/io/test.zig +61 -39
- package/src/tigerbeetle/src/io/windows.zig +1161 -0
- package/src/tigerbeetle/src/io.zig +2 -0
- package/src/tigerbeetle/src/main.zig +31 -10
- package/src/tigerbeetle/src/message_bus.zig +49 -61
- package/src/tigerbeetle/src/message_pool.zig +66 -57
- package/src/tigerbeetle/src/ring_buffer.zig +55 -3
- package/src/tigerbeetle/src/simulator.zig +108 -12
- package/src/tigerbeetle/src/state_machine.zig +1813 -816
- package/src/tigerbeetle/src/storage.zig +0 -230
- package/src/tigerbeetle/src/test/cluster.zig +168 -38
- package/src/tigerbeetle/src/test/message_bus.zig +4 -3
- package/src/tigerbeetle/src/test/network.zig +13 -16
- package/src/tigerbeetle/src/test/packet_simulator.zig +14 -1
- package/src/tigerbeetle/src/test/state_checker.zig +6 -3
- package/src/tigerbeetle/src/test/state_machine.zig +8 -7
- package/src/tigerbeetle/src/test/storage.zig +99 -40
- package/src/tigerbeetle/src/tigerbeetle.zig +108 -101
- package/src/tigerbeetle/src/time.zig +58 -11
- package/src/tigerbeetle/src/vsr/client.zig +18 -32
- package/src/tigerbeetle/src/vsr/clock.zig +1 -1
- package/src/tigerbeetle/src/vsr/journal.zig +1388 -464
- package/src/tigerbeetle/src/vsr/replica.zig +1340 -576
- package/src/tigerbeetle/src/vsr.zig +452 -40
- package/src/translate.zig +10 -0
- package/src/tigerbeetle/src/demo_05_accept_transfers.zig +0 -23
- package/src/tigerbeetle/src/demo_06_reject_transfers.zig +0 -17
- package/src/tigerbeetle/src/format_test.zig +0 -69
package/dist/benchmark.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert'\nimport {\n Commit,\n Account,\n createClient,\n Transfer,\n TransferFlags,\n CreateTransfersError,\n CommitTransfersError,\n Operation\n} from '.'\n\nconst MAX_TRANSFERS = 1000000\nconst MAX_REQUEST_BATCH_SIZE = 10000\nconst IS_TWO_PHASE_COMMIT = false\nconst IS_RAW_REQUEST = false\nconst PREVIOUS_RAW_REQUEST_RESULT = IS_TWO_PHASE_COMMIT ? 300000 : 620000\nconst PREVIOUS_RESULT = IS_TWO_PHASE_COMMIT ? 150000 : 310000\nconst PREVIOUS_BENCHMARK = IS_RAW_REQUEST ? PREVIOUS_RAW_REQUEST_RESULT : PREVIOUS_RESULT\nconst TOLERANCE = 10 // percent that the benchmark is allowed to deviate from the previous benchmark\n\nconst client = createClient({\n cluster_id: 1,\n replica_addresses: ['3001']\n})\n\nconst TRANSFER_SIZE = 128\nconst COMMIT_SIZE = 64\nconst Zeroed48Bytes = Buffer.alloc(48, 0)\nconst Zeroed32Bytes = Buffer.alloc(32, 0)\nconst accountA: Account = {\n id: 137n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n code: 0,\n flags: 0,\n unit: 1,\n debits_accepted: 0n,\n debits_reserved: 0n,\n credits_accepted: 0n,\n credits_reserved: 0n,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n code: 0,\n flags: 0,\n unit: 1,\n debits_accepted: 0n,\n debits_reserved: 0n,\n credits_accepted: 0n,\n credits_reserved: 0n,\n timestamp: 0n,\n}\n\n// helper function to promisify the raw_request\nconst rawCreateTransfers = async (batch: Buffer): Promise<CreateTransfersError[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n }\n resolve(results)\n }\n\n try {\n client.rawRequest(Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n}\n\n// helper function to promisify the raw_request\nconst rawCommitTransfers = async (batch: Buffer): Promise<CommitTransfersError[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CommitTransfersError[]) => {\n if (error) {\n reject(error)\n }\n resolve(results)\n }\n\n try {\n client.rawRequest(Operation.COMMIT_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n}\n\n/**\n * This encoding function is only for this benchmark script.\n * \n * ID_OFFSET = 0\n * DEBIT_ACCOUNT_ID_OFFSET = 0 + 16 = 16\n * CREDIT_ACCOUNT_ID_OFFSET = 16 + 16 = 32\n * USER_DATA_OFFSET = 32 + 16 = 48\n * RESERVED_OFFSET = 48 + 16 = 64\n * TIMEOUT_OFFSET = 64 + 32 = 96\n * CODE_OFFSET = 96 + 8 = 104\n * FLAGS_OFFSET = 104 + 4 = 108\n * AMOUNT_OFFSET = 108 + 4 = 112\n * TIMESTAMP_OFFSET = 112 + 8 = 120\n */ \nconst encodeTransfer = (transfer: Transfer, offset: number, output: Buffer): void => {\n assert(offset + TRANSFER_SIZE <= output.length)\n\n output.writeBigUInt64LE(transfer.id, offset)\n output.writeBigUInt64LE(transfer.debit_account_id, offset + 16)\n output.writeBigUInt64LE(transfer.credit_account_id, offset + 32)\n output.writeBigUInt64LE(transfer.timeout, offset + 96)\n output.writeUInt32LE(transfer.code, offset + 104)\n output.writeUInt32LE(transfer.flags, offset + 108)\n output.writeBigUInt64LE(transfer.amount, offset + 112)\n output.writeBigUInt64LE(transfer.timestamp, offset + 120)\n}\n\n// This encoding function is only for this benchmark script.\nconst encodeCommit = (commit: Commit, offset: number, output: Buffer): void => {\n assert(offset + COMMIT_SIZE <= output.length)\n\n output.writeBigUInt64LE(commit.id, offset)\n}\n\nconst runBenchmarkRawReqeust = async () => {\n assert(\n MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0,\n \"The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE\"\n )\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and commits...`)\n const transfers: Buffer[] = []\n const commits: Buffer[] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const transferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n const commitBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * COMMIT_SIZE, 0)\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n encodeTransfer(\n {\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n code: 0,\n reserved: Zeroed32Bytes,\n user_data: 0n,\n flags: IS_TWO_PHASE_COMMIT ? TransferFlags.two_phase_commit : 0,\n amount: 1n,\n timeout: IS_TWO_PHASE_COMMIT ? BigInt(2e9) : 0n,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n transferBatch\n )\n \n if (IS_TWO_PHASE_COMMIT) {\n encodeCommit(\n {\n id: BigInt(count),\n reserved: Buffer.alloc(32, 0),\n code: 0,\n flags: 0,\n timestamp: 0n,\n },\n i * COMMIT_SIZE,\n commitBatch \n )\n }\n }\n\n transfers.push(transferBatch)\n if (IS_TWO_PHASE_COMMIT) commits.push(commitBatch)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferResults = await rawCreateTransfers(transfers[i])\n assert(transferResults.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_COMMIT) {\n const commitResults = await rawCommitTransfers(commits[i])\n assert(commitResults.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst runBenchmark = async () => {\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and commits...`)\n const transfers: Transfer[][] = []\n const commits: Commit[][] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const transferBatch: Transfer[] = []\n const commitBatch: Commit[] = []\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n transferBatch.push({\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n code: 0,\n reserved: Zeroed32Bytes,\n user_data: 0n,\n flags: IS_TWO_PHASE_COMMIT ? TransferFlags.two_phase_commit : 0,\n amount: 1n,\n timeout: IS_TWO_PHASE_COMMIT ? BigInt(2e9) : 0n,\n timestamp: 0n,\n })\n \n if (IS_TWO_PHASE_COMMIT) {\n commitBatch.push({\n id: BigInt(count),\n reserved: Buffer.alloc(32, 0),\n code: 0,\n flags: 0,\n timestamp: 0n,\n })\n }\n }\n\n transfers.push(transferBatch)\n if (IS_TWO_PHASE_COMMIT) commits.push(commitBatch)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferResults = await client.createTransfers(transfers[i])\n assert(transferResults.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_COMMIT) {\n const commitResults = await client.commitTransfers(commits[i])\n assert(commitResults.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst main = async () => { \n console.log(\"creating the accounts...\")\n await client.createAccounts([accountA, accountB])\n const accountResults = await client.lookupAccounts([accountA.id, accountB.id])\n assert(accountResults.length === 2)\n assert(accountResults[0].debits_accepted === 0n)\n assert(accountResults[1].debits_accepted === 0n)\n\n const benchmark = IS_RAW_REQUEST ? await runBenchmarkRawReqeust() : await runBenchmark() \n \n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n const result = Math.floor((1000 * MAX_TRANSFERS)/benchmark.ms)\n console.log(\"=============================\")\n console.log(`${IS_TWO_PHASE_COMMIT ? 'two-phase ' : ''}transfers per second: ${result}`)\n console.log(`create transfers max p100 latency per 10 000 transfers = ${benchmark.maxCreateTransfersLatency}ms`)\n console.log(`commit transfers max p100 latency per 10 000 transfers = ${benchmark.maxCommitTransfersLatency}ms`)\n assert(accounts.length === 2)\n assert(accounts[0].debits_accepted === BigInt(MAX_TRANSFERS))\n assert(accounts[1].credits_accepted === BigInt(MAX_TRANSFERS))\n\n if (result < PREVIOUS_BENCHMARK * (100 - TOLERANCE)/100) {\n console.warn(`There has been a performance regression. Previous benchmark=${PREVIOUS_BENCHMARK}`)\n }\n}\n\nmain().catch(error => { \n console.log(error)\n}).finally(async () => {\n await client.destroy()\n})\n"]}
|
|
1
|
+
{"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'assert'\nimport {\n Account,\n createClient,\n Transfer,\n TransferFlags,\n CreateTransfersError,\n Operation\n} from '.'\n\nconst MAX_TRANSFERS = 51200\nconst MAX_REQUEST_BATCH_SIZE = 5120\nconst IS_TWO_PHASE_TRANSFER = false\nconst IS_RAW_REQUEST = false\nconst PREVIOUS_RAW_REQUEST_RESULT = IS_TWO_PHASE_TRANSFER ? 300000 : 620000\nconst PREVIOUS_RESULT = IS_TWO_PHASE_TRANSFER ? 150000 : 310000\nconst PREVIOUS_BENCHMARK = IS_RAW_REQUEST ? PREVIOUS_RAW_REQUEST_RESULT : PREVIOUS_RESULT\nconst TOLERANCE = 10 // percent that the benchmark is allowed to deviate from the previous benchmark\n\nconst client = createClient({\n cluster_id: 0,\n replica_addresses: ['3001']\n})\n\nconst TRANSFER_SIZE = 128\nconst Zeroed48Bytes = Buffer.alloc(48, 0)\nconst accountA: Account = {\n id: 137n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n ledger: 1,\n code: 1,\n flags: 0,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n user_data: 0n,\n reserved: Zeroed48Bytes,\n ledger: 1,\n code: 1,\n flags: 0,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n timestamp: 0n,\n}\n\n// Helper function to promisify the raw_request:\nconst rawCreateTransfers = async (batch: Buffer): Promise<CreateTransfersError[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n }\n resolve(results)\n }\n\n try {\n client.rawRequest(Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n}\n\n/**\n * This encoding function is only for this benchmark script.\n * \n * ID_OFFSET = 0 (0 -> 16)\n * DEBIT_ACCOUNT_ID_OFFSET = 0 + 16 = 16 (16 -> 32)\n * CREDIT_ACCOUNT_ID_OFFSET = 16 + 16 = 32 (32 -> 48)\n * USER_DATA_OFFSET = 32 + 16 = 48 (48 -> 64)\n * RESERVED_OFFSET = 48 + 16 = 64 (64 -> 80)\n * PENDING_ID_OFFSET = 64 + 16 = 80 (80 -> 96)\n * TIMEOUT_OFFSET = 96 + 8 = 104 (96 -> 104)\n * LEDGER_OFFSET = 104 + 4 = 108 (104 -> 108)\n * CODE_OFFSET = 108 + 2 = 110 (108 -> 110)\n * FLAGS_OFFSET = 110 + 2 = 112 (110 -> 112)\n * AMOUNT_OFFSET = 112 + 8 = 120 (112 -> 120)\n * TIMESTAMP = 120 + 8 = 128 (120 -> 128)\n */ \nconst encodeTransfer = (transfer: Transfer, offset: number, output: Buffer): void => {\n assert(BigInt((offset + TRANSFER_SIZE)) <= BigInt(output.length), `Transfer ${transfer} exceeds buffer of ${output}!`)\n\n output.writeBigUInt64LE(transfer.id, offset)\n output.writeBigUInt64LE(transfer.debit_account_id, offset + 16)\n output.writeBigUInt64LE(transfer.credit_account_id, offset + 32)\n output.writeBigUInt64LE(transfer.user_data, offset + 48)\n output.writeBigUInt64LE(transfer.reserved, offset + 64)\n output.writeBigUInt64LE(transfer.pending_id, offset + 80)\n output.writeBigUInt64LE(transfer.timeout, offset + 96)\n output.writeUInt32LE(transfer.ledger, offset + 104)\n output.writeUInt32LE(transfer.code, offset + 108)\n output.writeUInt32LE(transfer.flags, offset + 110)\n output.writeBigUInt64LE(transfer.amount, offset + 112)\n output.writeBigUInt64LE(transfer.timestamp, offset + 120)\n}\n\nconst runBenchmarkRawRequest = async () => {\n assert(\n MAX_TRANSFERS % MAX_REQUEST_BATCH_SIZE === 0,\n \"The raw request benchmark requires MAX_TRANSFERS to be a multiple of MAX_REQUEST_BATCH_SIZE\"\n )\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Buffer[] = []\n const posts: Buffer[] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const transferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n const postTransferBatch = Buffer.alloc(MAX_REQUEST_BATCH_SIZE * TRANSFER_SIZE, 0)\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n encodeTransfer(\n {\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n user_data: 0n,\n reserved: 0n,\n pending_id: 0n,\n timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,\n ledger: 1,\n code: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n amount: 1n,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n transferBatch\n )\n \n if (IS_TWO_PHASE_TRANSFER) {\n encodeTransfer(\n {\n id: BigInt((MAX_TRANSFERS + count)),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n user_data: 0n,\n reserved: 0n,\n pending_id: BigInt(count),\n timeout: 0n,\n ledger: 1,\n code: 1,\n flags: TransferFlags.post_pending_transfer,\n amount: 1n,\n timestamp: 0n,\n },\n i * TRANSFER_SIZE,\n postTransferBatch\n )\n }\n }\n\n transfers.push(transferBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postTransferBatch)\n if (count % 100) console.log(`${Number((count / MAX_TRANSFERS) * 100).toFixed(1)}%`)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await rawCreateTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await rawCreateTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst runBenchmark = async () => {\n console.log(`pre-allocating ${MAX_TRANSFERS} transfers and posts...`)\n const transfers: Transfer[][] = []\n const posts: Transfer[][] = []\n\n let count = 0\n while (count < MAX_TRANSFERS) {\n const pendingBatch: Transfer[] = []\n const postBatch: Transfer[] = []\n for (let i = 0; i < MAX_REQUEST_BATCH_SIZE; i++) {\n if (count === MAX_TRANSFERS) break\n\n count += 1\n pendingBatch.push({\n id: BigInt(count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n pending_id: 0n,\n code: 1,\n ledger: 1,\n reserved: 0n,\n user_data: 0n,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\n amount: 1n,\n timeout: IS_TWO_PHASE_TRANSFER ? BigInt(2e9) : 0n,\n timestamp: 0n,\n })\n \n if (IS_TWO_PHASE_TRANSFER) {\n postBatch.push({\n id: BigInt(MAX_TRANSFERS + count),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n pending_id: BigInt(count),\n code: 1,\n ledger: 1,\n reserved: 0n,\n user_data: 0n,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.post_pending_transfer : 0,\n amount: 1n,\n timeout: 0n,\n timestamp: 0n,\n })\n }\n }\n\n transfers.push(pendingBatch)\n if (IS_TWO_PHASE_TRANSFER) posts.push(postBatch)\n }\n assert(count === MAX_TRANSFERS)\n\n console.log(`starting benchmark. MAX_TRANSFERS=${MAX_TRANSFERS} REQUEST_BATCH_SIZE=${MAX_REQUEST_BATCH_SIZE} NUMBER_OF_BATCHES=${transfers.length}`)\n let maxCreateTransfersLatency = 0\n let maxCommitTransfersLatency = 0\n const start = Date.now()\n\n for (let i = 0; i < transfers.length; i++) {\n const ms1 = Date.now()\n\n const transferErrors = await client.createTransfers(transfers[i])\n assert(transferErrors.length === 0)\n\n const ms2 = Date.now()\n const createTransferLatency = ms2 - ms1\n if (createTransferLatency > maxCreateTransfersLatency) {\n maxCreateTransfersLatency = createTransferLatency\n }\n\n if (IS_TWO_PHASE_TRANSFER) {\n const commitErrors = await client.createTransfers(posts[i])\n assert(commitErrors.length === 0)\n\n const ms3 = Date.now()\n const commitTransferLatency = ms3 - ms2\n if (commitTransferLatency > maxCommitTransfersLatency) {\n maxCommitTransfersLatency = commitTransferLatency\n }\n }\n }\n\n const ms = Date.now() - start\n\n return {\n ms,\n maxCommitTransfersLatency,\n maxCreateTransfersLatency\n }\n}\n\nconst main = async () => { \n console.log(\"creating the accounts...\")\n await client.createAccounts([accountA, accountB])\n const accountResults = await client.lookupAccounts([accountA.id, accountB.id])\n assert(accountResults.length === 2)\n assert(accountResults[0].debits_posted === 0n)\n assert(accountResults[1].debits_posted === 0n)\n\n const benchmark = IS_RAW_REQUEST ? await runBenchmarkRawRequest() : await runBenchmark()\n \n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n const result = Math.floor((1000 * MAX_TRANSFERS)/benchmark.ms)\n console.log(\"=============================\")\n console.log(`${IS_TWO_PHASE_TRANSFER ? 'two-phase ' : ''}transfers per second: ${result}`)\n console.log(`create transfers max p100 latency per 10 000 transfers = ${benchmark.maxCreateTransfersLatency}ms`)\n console.log(`commit transfers max p100 latency per 10 000 transfers = ${benchmark.maxCommitTransfersLatency}ms`)\n assert(accounts.length === 2)\n assert(accounts[0].debits_posted === BigInt(MAX_TRANSFERS))\n assert(accounts[1].credits_posted === BigInt(MAX_TRANSFERS))\n\n if (result < PREVIOUS_BENCHMARK * (100 - TOLERANCE)/100) {\n console.warn(`There has been a performance regression. Previous benchmark=${PREVIOUS_BENCHMARK}`)\n }\n}\n\nmain().catch(error => { \n console.log(error)\n}).finally(async () => {\n await client.destroy()\n})\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,13 +8,13 @@ export declare type Account = {
|
|
|
8
8
|
id: bigint;
|
|
9
9
|
user_data: bigint;
|
|
10
10
|
reserved: Buffer;
|
|
11
|
-
|
|
11
|
+
ledger: number;
|
|
12
12
|
code: number;
|
|
13
13
|
flags: number;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
debits_pending: bigint;
|
|
15
|
+
debits_posted: bigint;
|
|
16
|
+
credits_pending: bigint;
|
|
17
|
+
credits_posted: bigint;
|
|
18
18
|
timestamp: bigint;
|
|
19
19
|
};
|
|
20
20
|
export declare enum AccountFlags {
|
|
@@ -24,16 +24,25 @@ export declare enum AccountFlags {
|
|
|
24
24
|
}
|
|
25
25
|
export declare enum CreateAccountError {
|
|
26
26
|
linked_event_failed = 1,
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
reserved_flag = 2,
|
|
28
|
+
reserved_field = 3,
|
|
29
|
+
id_must_not_be_zero = 4,
|
|
30
|
+
ledger_must_not_be_zero = 5,
|
|
31
|
+
code_must_not_be_zero = 6,
|
|
32
|
+
mutually_exclusive_flags = 7,
|
|
33
|
+
overflows_debits = 8,
|
|
34
|
+
overflows_credits = 9,
|
|
35
|
+
exceeds_credits = 10,
|
|
36
|
+
exceeds_debits = 11,
|
|
37
|
+
exists_with_different_flags = 12,
|
|
38
|
+
exists_with_different_user_data = 13,
|
|
39
|
+
exists_with_different_ledger = 14,
|
|
40
|
+
exists_with_different_code = 15,
|
|
41
|
+
exists_with_different_debits_pending = 16,
|
|
42
|
+
exists_with_different_debits_posted = 17,
|
|
43
|
+
exists_with_different_credits_pending = 18,
|
|
44
|
+
exists_with_different_credits_posted = 19,
|
|
45
|
+
exists = 20
|
|
37
46
|
}
|
|
38
47
|
export declare type CreateAccountsError = {
|
|
39
48
|
index: number;
|
|
@@ -44,8 +53,10 @@ export declare type Transfer = {
|
|
|
44
53
|
debit_account_id: bigint;
|
|
45
54
|
credit_account_id: bigint;
|
|
46
55
|
user_data: bigint;
|
|
47
|
-
reserved:
|
|
56
|
+
reserved: bigint;
|
|
57
|
+
pending_id: bigint;
|
|
48
58
|
timeout: bigint;
|
|
59
|
+
ledger: number;
|
|
49
60
|
code: number;
|
|
50
61
|
flags: number;
|
|
51
62
|
amount: bigint;
|
|
@@ -53,90 +64,79 @@ export declare type Transfer = {
|
|
|
53
64
|
};
|
|
54
65
|
export declare enum TransferFlags {
|
|
55
66
|
linked = 1,
|
|
56
|
-
|
|
57
|
-
|
|
67
|
+
pending = 2,
|
|
68
|
+
post_pending_transfer = 4,
|
|
69
|
+
void_pending_transfer = 8
|
|
58
70
|
}
|
|
59
71
|
export declare enum CreateTransferError {
|
|
60
72
|
linked_event_failed = 1,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
73
|
+
reserved_flag = 2,
|
|
74
|
+
reserved_field = 3,
|
|
75
|
+
id_must_not_be_zero = 4,
|
|
76
|
+
debit_account_id_must_not_be_zero = 5,
|
|
77
|
+
credit_account_id_must_not_be_zero = 6,
|
|
78
|
+
accounts_must_be_different = 7,
|
|
79
|
+
pending_id_must_be_zero = 8,
|
|
80
|
+
pending_transfer_must_timeout = 9,
|
|
81
|
+
ledger_must_not_be_zero = 10,
|
|
82
|
+
code_must_not_be_zero = 11,
|
|
83
|
+
amount_must_not_be_zero = 12,
|
|
84
|
+
debit_account_not_found = 13,
|
|
85
|
+
credit_account_not_found = 14,
|
|
86
|
+
accounts_must_have_the_same_ledger = 15,
|
|
87
|
+
transfer_must_have_the_same_ledger_as_accounts = 16,
|
|
88
|
+
exists_with_different_flags = 17,
|
|
89
|
+
exists_with_different_debit_account_id = 18,
|
|
90
|
+
exists_with_different_credit_account_id = 19,
|
|
91
|
+
exists_with_different_user_data = 20,
|
|
92
|
+
exists_with_different_pending_id = 21,
|
|
93
|
+
exists_with_different_timeout = 22,
|
|
94
|
+
exists_with_different_code = 23,
|
|
95
|
+
exists_with_different_amount = 24,
|
|
96
|
+
exists = 25,
|
|
97
|
+
overflows_debits_pending = 26,
|
|
98
|
+
overflows_credits_pending = 27,
|
|
99
|
+
overflows_debits_posted = 28,
|
|
100
|
+
overflows_credits_posted = 29,
|
|
101
|
+
overflows_debits = 30,
|
|
102
|
+
overflows_credits = 31,
|
|
103
|
+
exceeds_credits = 32,
|
|
104
|
+
exceeds_debits = 33,
|
|
105
|
+
cannot_post_and_void_pending_transfer = 34,
|
|
106
|
+
pending_transfer_cannot_post_or_void_another = 35,
|
|
107
|
+
timeout_reserved_for_pending_transfer = 36,
|
|
108
|
+
pending_id_must_not_be_zero = 37,
|
|
109
|
+
pending_id_must_be_different = 38,
|
|
110
|
+
pending_transfer_not_found = 39,
|
|
111
|
+
pending_transfer_not_pending = 40,
|
|
112
|
+
pending_transfer_has_different_debit_account_id = 41,
|
|
113
|
+
pending_transfer_has_different_credit_account_id = 42,
|
|
114
|
+
pending_transfer_has_different_ledger = 43,
|
|
115
|
+
pending_transfer_has_different_code = 44,
|
|
116
|
+
exceeds_pending_transfer_amount = 45,
|
|
117
|
+
pending_transfer_has_different_amount = 46,
|
|
118
|
+
pending_transfer_already_posted = 47,
|
|
119
|
+
pending_transfer_already_voided = 48,
|
|
120
|
+
pending_transfer_expired = 49
|
|
83
121
|
}
|
|
84
122
|
export declare type CreateTransfersError = {
|
|
85
123
|
index: number;
|
|
86
124
|
code: CreateTransferError;
|
|
87
125
|
};
|
|
88
|
-
export declare type Commit = {
|
|
89
|
-
id: bigint;
|
|
90
|
-
reserved: Buffer;
|
|
91
|
-
code: number;
|
|
92
|
-
flags: number;
|
|
93
|
-
timestamp: bigint;
|
|
94
|
-
};
|
|
95
|
-
export declare enum CommitFlags {
|
|
96
|
-
linked = 1,
|
|
97
|
-
reject = 2,
|
|
98
|
-
preimage = 4
|
|
99
|
-
}
|
|
100
|
-
export declare enum CommitTransferError {
|
|
101
|
-
linked_event_failed = 1,
|
|
102
|
-
reserved_field = 2,
|
|
103
|
-
reserved_flag_padding = 3,
|
|
104
|
-
transfer_not_found = 4,
|
|
105
|
-
transfer_not_two_phase_commit = 5,
|
|
106
|
-
transfer_expired = 6,
|
|
107
|
-
already_committed = 7,
|
|
108
|
-
already_committed_but_accepted = 8,
|
|
109
|
-
already_committed_but_rejected = 9,
|
|
110
|
-
debit_account_not_found = 10,
|
|
111
|
-
credit_account_not_found = 11,
|
|
112
|
-
debit_amount_was_not_reserved = 12,
|
|
113
|
-
credit_amount_was_not_reserved = 13,
|
|
114
|
-
exceeds_credits = 14,
|
|
115
|
-
exceeds_debits = 15,
|
|
116
|
-
condition_requires_preimage = 16,
|
|
117
|
-
preimage_requires_condition = 17,
|
|
118
|
-
preimage_invalid = 18
|
|
119
|
-
}
|
|
120
|
-
export declare type CommitTransfersError = {
|
|
121
|
-
index: number;
|
|
122
|
-
code: CommitTransferError;
|
|
123
|
-
};
|
|
124
126
|
export declare type AccountID = bigint;
|
|
125
127
|
export declare type TransferID = bigint;
|
|
126
|
-
export declare type Event = Account | Transfer |
|
|
127
|
-
export declare type Result = CreateAccountsError | CreateTransfersError |
|
|
128
|
+
export declare type Event = Account | Transfer | AccountID | TransferID;
|
|
129
|
+
export declare type Result = CreateAccountsError | CreateTransfersError | Account | Transfer;
|
|
128
130
|
export declare type ResultCallback = (error: undefined | Error, results: Result[]) => void;
|
|
129
131
|
export declare enum Operation {
|
|
130
132
|
CREATE_ACCOUNT = 3,
|
|
131
133
|
CREATE_TRANSFER = 4,
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
TRANSFER_LOOKUP = 7
|
|
134
|
+
ACCOUNT_LOOKUP = 5,
|
|
135
|
+
TRANSFER_LOOKUP = 6
|
|
135
136
|
}
|
|
136
137
|
export interface Client {
|
|
137
138
|
createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>;
|
|
138
139
|
createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>;
|
|
139
|
-
commitTransfers: (batch: Commit[]) => Promise<CommitTransfersError[]>;
|
|
140
140
|
lookupAccounts: (batch: AccountID[]) => Promise<Account[]>;
|
|
141
141
|
lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>;
|
|
142
142
|
request: (operation: Operation, batch: Event[], callback: ResultCallback) => void;
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createClient = exports.Operation = exports.
|
|
3
|
+
exports.createClient = exports.Operation = exports.CreateTransferError = exports.TransferFlags = exports.CreateAccountError = exports.AccountFlags = void 0;
|
|
4
4
|
const binding = require('./client.node');
|
|
5
5
|
var AccountFlags;
|
|
6
6
|
(function (AccountFlags) {
|
|
@@ -11,83 +11,91 @@ var AccountFlags;
|
|
|
11
11
|
var CreateAccountError;
|
|
12
12
|
(function (CreateAccountError) {
|
|
13
13
|
CreateAccountError[CreateAccountError["linked_event_failed"] = 1] = "linked_event_failed";
|
|
14
|
-
CreateAccountError[CreateAccountError["
|
|
15
|
-
CreateAccountError[CreateAccountError["
|
|
16
|
-
CreateAccountError[CreateAccountError["
|
|
17
|
-
CreateAccountError[CreateAccountError["
|
|
18
|
-
CreateAccountError[CreateAccountError["
|
|
19
|
-
CreateAccountError[CreateAccountError["
|
|
20
|
-
CreateAccountError[CreateAccountError["
|
|
21
|
-
CreateAccountError[CreateAccountError["
|
|
22
|
-
CreateAccountError[CreateAccountError["
|
|
23
|
-
CreateAccountError[CreateAccountError["
|
|
14
|
+
CreateAccountError[CreateAccountError["reserved_flag"] = 2] = "reserved_flag";
|
|
15
|
+
CreateAccountError[CreateAccountError["reserved_field"] = 3] = "reserved_field";
|
|
16
|
+
CreateAccountError[CreateAccountError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
|
|
17
|
+
CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 5] = "ledger_must_not_be_zero";
|
|
18
|
+
CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 6] = "code_must_not_be_zero";
|
|
19
|
+
CreateAccountError[CreateAccountError["mutually_exclusive_flags"] = 7] = "mutually_exclusive_flags";
|
|
20
|
+
CreateAccountError[CreateAccountError["overflows_debits"] = 8] = "overflows_debits";
|
|
21
|
+
CreateAccountError[CreateAccountError["overflows_credits"] = 9] = "overflows_credits";
|
|
22
|
+
CreateAccountError[CreateAccountError["exceeds_credits"] = 10] = "exceeds_credits";
|
|
23
|
+
CreateAccountError[CreateAccountError["exceeds_debits"] = 11] = "exceeds_debits";
|
|
24
|
+
CreateAccountError[CreateAccountError["exists_with_different_flags"] = 12] = "exists_with_different_flags";
|
|
25
|
+
CreateAccountError[CreateAccountError["exists_with_different_user_data"] = 13] = "exists_with_different_user_data";
|
|
26
|
+
CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 14] = "exists_with_different_ledger";
|
|
27
|
+
CreateAccountError[CreateAccountError["exists_with_different_code"] = 15] = "exists_with_different_code";
|
|
28
|
+
CreateAccountError[CreateAccountError["exists_with_different_debits_pending"] = 16] = "exists_with_different_debits_pending";
|
|
29
|
+
CreateAccountError[CreateAccountError["exists_with_different_debits_posted"] = 17] = "exists_with_different_debits_posted";
|
|
30
|
+
CreateAccountError[CreateAccountError["exists_with_different_credits_pending"] = 18] = "exists_with_different_credits_pending";
|
|
31
|
+
CreateAccountError[CreateAccountError["exists_with_different_credits_posted"] = 19] = "exists_with_different_credits_posted";
|
|
32
|
+
CreateAccountError[CreateAccountError["exists"] = 20] = "exists";
|
|
24
33
|
})(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
|
|
25
34
|
var TransferFlags;
|
|
26
35
|
(function (TransferFlags) {
|
|
27
36
|
TransferFlags[TransferFlags["linked"] = 1] = "linked";
|
|
28
|
-
TransferFlags[TransferFlags["
|
|
29
|
-
TransferFlags[TransferFlags["
|
|
37
|
+
TransferFlags[TransferFlags["pending"] = 2] = "pending";
|
|
38
|
+
TransferFlags[TransferFlags["post_pending_transfer"] = 4] = "post_pending_transfer";
|
|
39
|
+
TransferFlags[TransferFlags["void_pending_transfer"] = 8] = "void_pending_transfer";
|
|
30
40
|
})(TransferFlags = exports.TransferFlags || (exports.TransferFlags = {}));
|
|
31
41
|
var CreateTransferError;
|
|
32
42
|
(function (CreateTransferError) {
|
|
33
43
|
CreateTransferError[CreateTransferError["linked_event_failed"] = 1] = "linked_event_failed";
|
|
34
|
-
CreateTransferError[CreateTransferError["
|
|
35
|
-
CreateTransferError[CreateTransferError["
|
|
36
|
-
CreateTransferError[CreateTransferError["
|
|
37
|
-
CreateTransferError[CreateTransferError["
|
|
38
|
-
CreateTransferError[CreateTransferError["
|
|
39
|
-
CreateTransferError[CreateTransferError["
|
|
40
|
-
CreateTransferError[CreateTransferError["
|
|
41
|
-
CreateTransferError[CreateTransferError["
|
|
42
|
-
CreateTransferError[CreateTransferError["
|
|
43
|
-
CreateTransferError[CreateTransferError["
|
|
44
|
-
CreateTransferError[CreateTransferError["
|
|
45
|
-
CreateTransferError[CreateTransferError["
|
|
46
|
-
CreateTransferError[CreateTransferError["
|
|
47
|
-
CreateTransferError[CreateTransferError["
|
|
48
|
-
CreateTransferError[CreateTransferError["
|
|
49
|
-
CreateTransferError[CreateTransferError["
|
|
50
|
-
CreateTransferError[CreateTransferError["
|
|
51
|
-
CreateTransferError[CreateTransferError["
|
|
52
|
-
CreateTransferError[CreateTransferError["
|
|
53
|
-
CreateTransferError[CreateTransferError["
|
|
54
|
-
CreateTransferError[CreateTransferError["
|
|
55
|
-
CreateTransferError[CreateTransferError["
|
|
44
|
+
CreateTransferError[CreateTransferError["reserved_flag"] = 2] = "reserved_flag";
|
|
45
|
+
CreateTransferError[CreateTransferError["reserved_field"] = 3] = "reserved_field";
|
|
46
|
+
CreateTransferError[CreateTransferError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
|
|
47
|
+
CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 5] = "debit_account_id_must_not_be_zero";
|
|
48
|
+
CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 6] = "credit_account_id_must_not_be_zero";
|
|
49
|
+
CreateTransferError[CreateTransferError["accounts_must_be_different"] = 7] = "accounts_must_be_different";
|
|
50
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 8] = "pending_id_must_be_zero";
|
|
51
|
+
CreateTransferError[CreateTransferError["pending_transfer_must_timeout"] = 9] = "pending_transfer_must_timeout";
|
|
52
|
+
CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 10] = "ledger_must_not_be_zero";
|
|
53
|
+
CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 11] = "code_must_not_be_zero";
|
|
54
|
+
CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 12] = "amount_must_not_be_zero";
|
|
55
|
+
CreateTransferError[CreateTransferError["debit_account_not_found"] = 13] = "debit_account_not_found";
|
|
56
|
+
CreateTransferError[CreateTransferError["credit_account_not_found"] = 14] = "credit_account_not_found";
|
|
57
|
+
CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 15] = "accounts_must_have_the_same_ledger";
|
|
58
|
+
CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 16] = "transfer_must_have_the_same_ledger_as_accounts";
|
|
59
|
+
CreateTransferError[CreateTransferError["exists_with_different_flags"] = 17] = "exists_with_different_flags";
|
|
60
|
+
CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 18] = "exists_with_different_debit_account_id";
|
|
61
|
+
CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 19] = "exists_with_different_credit_account_id";
|
|
62
|
+
CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 20] = "exists_with_different_user_data";
|
|
63
|
+
CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 21] = "exists_with_different_pending_id";
|
|
64
|
+
CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 22] = "exists_with_different_timeout";
|
|
65
|
+
CreateTransferError[CreateTransferError["exists_with_different_code"] = 23] = "exists_with_different_code";
|
|
66
|
+
CreateTransferError[CreateTransferError["exists_with_different_amount"] = 24] = "exists_with_different_amount";
|
|
67
|
+
CreateTransferError[CreateTransferError["exists"] = 25] = "exists";
|
|
68
|
+
CreateTransferError[CreateTransferError["overflows_debits_pending"] = 26] = "overflows_debits_pending";
|
|
69
|
+
CreateTransferError[CreateTransferError["overflows_credits_pending"] = 27] = "overflows_credits_pending";
|
|
70
|
+
CreateTransferError[CreateTransferError["overflows_debits_posted"] = 28] = "overflows_debits_posted";
|
|
71
|
+
CreateTransferError[CreateTransferError["overflows_credits_posted"] = 29] = "overflows_credits_posted";
|
|
72
|
+
CreateTransferError[CreateTransferError["overflows_debits"] = 30] = "overflows_debits";
|
|
73
|
+
CreateTransferError[CreateTransferError["overflows_credits"] = 31] = "overflows_credits";
|
|
74
|
+
CreateTransferError[CreateTransferError["exceeds_credits"] = 32] = "exceeds_credits";
|
|
75
|
+
CreateTransferError[CreateTransferError["exceeds_debits"] = 33] = "exceeds_debits";
|
|
76
|
+
CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 34] = "cannot_post_and_void_pending_transfer";
|
|
77
|
+
CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 35] = "pending_transfer_cannot_post_or_void_another";
|
|
78
|
+
CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 36] = "timeout_reserved_for_pending_transfer";
|
|
79
|
+
CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 37] = "pending_id_must_not_be_zero";
|
|
80
|
+
CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 38] = "pending_id_must_be_different";
|
|
81
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 39] = "pending_transfer_not_found";
|
|
82
|
+
CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 40] = "pending_transfer_not_pending";
|
|
83
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 41] = "pending_transfer_has_different_debit_account_id";
|
|
84
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 42] = "pending_transfer_has_different_credit_account_id";
|
|
85
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 43] = "pending_transfer_has_different_ledger";
|
|
86
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 44] = "pending_transfer_has_different_code";
|
|
87
|
+
CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 45] = "exceeds_pending_transfer_amount";
|
|
88
|
+
CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 46] = "pending_transfer_has_different_amount";
|
|
89
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 47] = "pending_transfer_already_posted";
|
|
90
|
+
CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 48] = "pending_transfer_already_voided";
|
|
91
|
+
CreateTransferError[CreateTransferError["pending_transfer_expired"] = 49] = "pending_transfer_expired";
|
|
56
92
|
})(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
|
|
57
|
-
var CommitFlags;
|
|
58
|
-
(function (CommitFlags) {
|
|
59
|
-
CommitFlags[CommitFlags["linked"] = 1] = "linked";
|
|
60
|
-
CommitFlags[CommitFlags["reject"] = 2] = "reject";
|
|
61
|
-
CommitFlags[CommitFlags["preimage"] = 4] = "preimage";
|
|
62
|
-
})(CommitFlags = exports.CommitFlags || (exports.CommitFlags = {}));
|
|
63
|
-
var CommitTransferError;
|
|
64
|
-
(function (CommitTransferError) {
|
|
65
|
-
CommitTransferError[CommitTransferError["linked_event_failed"] = 1] = "linked_event_failed";
|
|
66
|
-
CommitTransferError[CommitTransferError["reserved_field"] = 2] = "reserved_field";
|
|
67
|
-
CommitTransferError[CommitTransferError["reserved_flag_padding"] = 3] = "reserved_flag_padding";
|
|
68
|
-
CommitTransferError[CommitTransferError["transfer_not_found"] = 4] = "transfer_not_found";
|
|
69
|
-
CommitTransferError[CommitTransferError["transfer_not_two_phase_commit"] = 5] = "transfer_not_two_phase_commit";
|
|
70
|
-
CommitTransferError[CommitTransferError["transfer_expired"] = 6] = "transfer_expired";
|
|
71
|
-
CommitTransferError[CommitTransferError["already_committed"] = 7] = "already_committed";
|
|
72
|
-
CommitTransferError[CommitTransferError["already_committed_but_accepted"] = 8] = "already_committed_but_accepted";
|
|
73
|
-
CommitTransferError[CommitTransferError["already_committed_but_rejected"] = 9] = "already_committed_but_rejected";
|
|
74
|
-
CommitTransferError[CommitTransferError["debit_account_not_found"] = 10] = "debit_account_not_found";
|
|
75
|
-
CommitTransferError[CommitTransferError["credit_account_not_found"] = 11] = "credit_account_not_found";
|
|
76
|
-
CommitTransferError[CommitTransferError["debit_amount_was_not_reserved"] = 12] = "debit_amount_was_not_reserved";
|
|
77
|
-
CommitTransferError[CommitTransferError["credit_amount_was_not_reserved"] = 13] = "credit_amount_was_not_reserved";
|
|
78
|
-
CommitTransferError[CommitTransferError["exceeds_credits"] = 14] = "exceeds_credits";
|
|
79
|
-
CommitTransferError[CommitTransferError["exceeds_debits"] = 15] = "exceeds_debits";
|
|
80
|
-
CommitTransferError[CommitTransferError["condition_requires_preimage"] = 16] = "condition_requires_preimage";
|
|
81
|
-
CommitTransferError[CommitTransferError["preimage_requires_condition"] = 17] = "preimage_requires_condition";
|
|
82
|
-
CommitTransferError[CommitTransferError["preimage_invalid"] = 18] = "preimage_invalid";
|
|
83
|
-
})(CommitTransferError = exports.CommitTransferError || (exports.CommitTransferError = {}));
|
|
84
93
|
var Operation;
|
|
85
94
|
(function (Operation) {
|
|
86
95
|
Operation[Operation["CREATE_ACCOUNT"] = 3] = "CREATE_ACCOUNT";
|
|
87
96
|
Operation[Operation["CREATE_TRANSFER"] = 4] = "CREATE_TRANSFER";
|
|
88
|
-
Operation[Operation["
|
|
89
|
-
Operation[Operation["
|
|
90
|
-
Operation[Operation["TRANSFER_LOOKUP"] = 7] = "TRANSFER_LOOKUP";
|
|
97
|
+
Operation[Operation["ACCOUNT_LOOKUP"] = 5] = "ACCOUNT_LOOKUP";
|
|
98
|
+
Operation[Operation["TRANSFER_LOOKUP"] = 6] = "TRANSFER_LOOKUP";
|
|
91
99
|
})(Operation = exports.Operation || (exports.Operation = {}));
|
|
92
100
|
let _args = undefined;
|
|
93
101
|
const isSameArgs = (args) => {
|
|
@@ -103,8 +111,7 @@ const isSameArgs = (args) => {
|
|
|
103
111
|
isSameReplicas = false;
|
|
104
112
|
}
|
|
105
113
|
});
|
|
106
|
-
return args.cluster_id === _args.cluster_id &&
|
|
107
|
-
isSameReplicas;
|
|
114
|
+
return args.cluster_id === _args.cluster_id && isSameReplicas;
|
|
108
115
|
};
|
|
109
116
|
let _client = undefined;
|
|
110
117
|
let _interval = undefined;
|
|
@@ -178,31 +185,6 @@ function createClient(args) {
|
|
|
178
185
|
}
|
|
179
186
|
});
|
|
180
187
|
};
|
|
181
|
-
const commitTransfers = async (batch) => {
|
|
182
|
-
if (!_pinged) {
|
|
183
|
-
await new Promise(resolve => {
|
|
184
|
-
setTimeout(() => {
|
|
185
|
-
_pinged = true;
|
|
186
|
-
resolve();
|
|
187
|
-
}, 600);
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
return new Promise((resolve, reject) => {
|
|
191
|
-
const callback = (error, results) => {
|
|
192
|
-
if (error) {
|
|
193
|
-
reject(error);
|
|
194
|
-
return;
|
|
195
|
-
}
|
|
196
|
-
resolve(results);
|
|
197
|
-
};
|
|
198
|
-
try {
|
|
199
|
-
binding.request(context, Operation.COMMIT_TRANSFER, batch, callback);
|
|
200
|
-
}
|
|
201
|
-
catch (error) {
|
|
202
|
-
reject(error);
|
|
203
|
-
}
|
|
204
|
-
});
|
|
205
|
-
};
|
|
206
188
|
const lookupAccounts = async (batch) => {
|
|
207
189
|
return new Promise((resolve, reject) => {
|
|
208
190
|
const callback = (error, results) => {
|
|
@@ -247,7 +229,6 @@ function createClient(args) {
|
|
|
247
229
|
_client = {
|
|
248
230
|
createAccounts,
|
|
249
231
|
createTransfers,
|
|
250
|
-
commitTransfers,
|
|
251
232
|
lookupAccounts,
|
|
252
233
|
lookupTransfers,
|
|
253
234
|
request,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n unit: number // u16, unit of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u32\n debits_reserved: bigint // u64\n debits_accepted: bigint // u64\n credits_reserved: bigint // u64\n credits_accepted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n linked_event_failed = 1,\n exists,\n exists_with_different_user_data,\n exists_with_different_reserved_field,\n exists_with_different_unit,\n exists_with_different_code,\n exists_with_different_flags,\n exceeds_credits,\n exceeds_debits,\n reserved_field,\n reserved_flag_padding,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: Buffer, // [32]u8\n timeout: bigint, // u64, in nano-seconds\n code: number, // u32 accounting system code to describe the type of transfer (e.g. settlement)\n flags: number, // u32\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n two_phase_commit = (1 << 1),\n condition = (1 << 2) // whether or not a condition will be supplied\n}\n\nexport enum CreateTransferError {\n linked_event_failed = 1,\n exists,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_reserved_field,\n exists_with_different_code,\n exists_with_different_amount,\n exists_with_different_timeout,\n exists_with_different_flags,\n exists_and_already_committed_and_accepted,\n exists_and_already_committed_and_rejected,\n reserved_field,\n reserved_flag_padding,\n debit_account_not_found,\n credit_account_not_found,\n accounts_are_the_same,\n accounts_have_different_units,\n amount_is_zero,\n exceeds_credits,\n exceeds_debits,\n two_phase_commit_must_timeout,\n timeout_reserved_for_two_phase_commit,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type Commit = {\n id: bigint, // u128\n reserved: Buffer, // [32]u8\n code: number, // u32 accounting system code describing the reason for accept/reject\n flags: number, // u32\n timestamp: bigint, // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum CommitFlags {\n linked = (1 << 0),\n reject = (1 << 1),\n preimage = (1 << 2) // whether or not a pre-image will be supplied\n}\n\nexport enum CommitTransferError {\n linked_event_failed = 1,\n reserved_field,\n reserved_flag_padding,\n transfer_not_found,\n transfer_not_two_phase_commit,\n transfer_expired,\n already_committed,\n already_committed_but_accepted,\n already_committed_but_rejected,\n debit_account_not_found,\n credit_account_not_found,\n debit_amount_was_not_reserved,\n credit_amount_was_not_reserved,\n exceeds_credits,\n exceeds_debits,\n condition_requires_preimage,\n preimage_requires_condition,\n preimage_invalid,\n}\n\nexport type CommitTransfersError = {\n index: number,\n code: CommitTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | Commit | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | CommitTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n COMMIT_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n commitTransfers: (batch: Commit[]) => Promise<CommitTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id &&\n isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const commitTransfers = async (batch: Commit[]): Promise<CommitTransfersError[]> => {\n // here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CommitTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.COMMIT_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n commitTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n ledger: number // u32, ledger of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u16\n debits_pending: bigint // u64\n debits_posted: bigint // u64\n credits_pending: bigint // u64\n credits_posted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n\n mutually_exclusive_flags,\n\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n exists_with_different_flags,\n exists_with_different_user_data,\n exists_with_different_ledger,\n exists_with_different_code,\n exists_with_different_debits_pending,\n exists_with_different_debits_posted,\n exists_with_different_credits_pending,\n exists_with_different_credits_posted,\n exists,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: bigint, // u128\n pending_id: bigint, // u128\n timeout: bigint, // u64, In nanoseconds.\n ledger: number // u32, The ledger of value.\n code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).\n flags: number, // u16\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n pending = (1 << 1),\n post_pending_transfer = (1 << 2),\n void_pending_transfer = (1 << 3)\n}\n\nexport enum CreateTransferError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n debit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_zero,\n accounts_must_be_different,\n\n pending_id_must_be_zero,\n pending_transfer_must_timeout,\n\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n amount_must_not_be_zero,\n\n debit_account_not_found,\n credit_account_not_found,\n\n accounts_must_have_the_same_ledger,\n transfer_must_have_the_same_ledger_as_accounts,\n\n exists_with_different_flags,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_pending_id,\n exists_with_different_timeout,\n exists_with_different_code,\n exists_with_different_amount,\n exists,\n\n overflows_debits_pending,\n overflows_credits_pending,\n overflows_debits_posted,\n overflows_credits_posted,\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n cannot_post_and_void_pending_transfer,\n pending_transfer_cannot_post_or_void_another,\n timeout_reserved_for_pending_transfer,\n\n pending_id_must_not_be_zero,\n pending_id_must_be_different,\n\n pending_transfer_not_found,\n pending_transfer_not_pending,\n\n pending_transfer_has_different_debit_account_id,\n pending_transfer_has_different_credit_account_id,\n pending_transfer_has_different_ledger,\n pending_transfer_has_different_code,\n\n exceeds_pending_transfer_amount,\n pending_transfer_has_different_amount,\n\n pending_transfer_already_posted,\n pending_transfer_already_voided,\n\n pending_transfer_expired,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id && isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
|