tigerbeetle-node 0.16.67 → 0.16.68

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.
@@ -1 +1 @@
1
- {"version":3,"file":"benchmark.js","sourceRoot":"","sources":["../src/benchmark.ts"],"names":[],"mappings":";;;;;AAAA,oDAA2B;AAC3B,wBAKU;AAEV,MAAM,aAAa,GAAG,KAAK,CAAA;AAE3B,MAAM,sBAAsB,GAAG,GAAG,CAAA;AAClC,MAAM,qBAAqB,GAAG,KAAK,CAAA;AAEnC,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC;IAC1B,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;CACtD,CAAC,CAAA;AAEF,MAAM,aAAa,GAAG,GAAG,CAAA;AACzB,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,IAAI;IACR,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AAED,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,IAAI;IACR,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AAED,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;IAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,aAAa,yBAAyB,CAAC,CAAA;IACrE,MAAM,SAAS,GAAiB,EAAE,CAAA;IAClC,MAAM,KAAK,GAAiB,EAAE,CAAA;IAE9B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,OAAO,KAAK,GAAG,aAAa,EAAE;QAC5B,MAAM,YAAY,GAAe,EAAE,CAAA;QACnC,MAAM,SAAS,GAAe,EAAE,CAAA;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC,EAAE,EAAE;YAC/C,IAAI,KAAK,KAAK,aAAa;gBAAE,MAAK;YAElC,KAAK,IAAI,CAAC,CAAA;YACV,YAAY,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC;gBACjB,gBAAgB,EAAE,QAAQ,CAAC,EAAE;gBAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;gBAC9B,MAAM,EAAE,EAAE;gBACV,UAAU,EAAE,EAAE;gBACd,aAAa,EAAE,EAAE;gBACjB,YAAY,EAAE,EAAE;gBAChB,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,gBAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxD,SAAS,EAAE,EAAE;aACd,CAAC,CAAA;YAEF,IAAI,qBAAqB,EAAE;gBACzB,SAAS,CAAC,IAAI,CAAC;oBACb,EAAE,EAAE,MAAM,CAAC,aAAa,GAAG,KAAK,CAAC;oBACjC,gBAAgB,EAAE,QAAQ,CAAC,EAAE;oBAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;oBAC9B,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,MAAM,CAAC,KAAK,CAAC;oBACzB,aAAa,EAAE,EAAE;oBACjB,YAAY,EAAE,EAAE;oBAChB,YAAY,EAAE,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,IAAI,EAAE,CAAC;oBACP,MAAM,EAAE,CAAC;oBACT,KAAK,EAAE,qBAAqB,CAAC,CAAC,CAAC,gBAAa,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;oBACtE,SAAS,EAAE,EAAE;iBACd,CAAC,CAAA;aACH;SACF;QAED,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC5B,IAAI,qBAAqB;YAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;KACjD;IACD,IAAA,gBAAM,EAAC,KAAK,KAAK,aAAa,CAAC,CAAA;IAE/B,OAAO,CAAC,GAAG,CAAC,qCAAqC,aAAa,uBAAuB,sBAAsB,sBAAsB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAA;IACpJ,IAAI,yBAAyB,GAAG,CAAC,CAAA;IACjC,IAAI,yBAAyB,GAAG,CAAC,CAAA;IACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;QACjE,IAAA,gBAAM,EAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;QAEnC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QACtB,MAAM,qBAAqB,GAAG,GAAG,GAAG,GAAG,CAAA;QACvC,IAAI,qBAAqB,GAAG,yBAAyB,EAAE;YACrD,yBAAyB,GAAG,qBAAqB,CAAA;SAClD;QAED,IAAI,qBAAqB,EAAE;YACzB,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3D,IAAA,gBAAM,EAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;YAEjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YACtB,MAAM,qBAAqB,GAAG,GAAG,GAAG,GAAG,CAAA;YACvC,IAAI,qBAAqB,GAAG,yBAAyB,EAAE;gBACrD,yBAAyB,GAAG,qBAAqB,CAAA;aAClD;SACF;KACF;IAED,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAA;IAE7B,OAAO;QACL,EAAE;QACF,yBAAyB;QACzB,yBAAyB;KAC1B,CAAA;AACH,CAAC,CAAA;AAED,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;IACtB,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAA;IACvC,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACjD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC9E,IAAA,gBAAM,EAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;IACnC,IAAA,gBAAM,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;IAC9C,IAAA,gBAAM,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC,CAAA;IAE9C,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAA;IAEtC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,aAAa,CAAC,GAAC,SAAS,CAAC,EAAE,CAAC,CAAA;IAC9D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAA;IAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,yBAAyB,MAAM,EAAE,CAAC,CAAA;IAC1F,OAAO,CAAC,GAAG,CAAC,4DAA4D,SAAS,CAAC,yBAAyB,IAAI,CAAC,CAAA;IAChH,OAAO,CAAC,GAAG,CAAC,4DAA4D,SAAS,CAAC,yBAAyB,IAAI,CAAC,CAAA;IAChH,IAAA,gBAAM,EAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAA;IAC7B,IAAA,gBAAM,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3D,IAAA,gBAAM,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,KAAK,MAAM,CAAC,aAAa,CAAC,CAAC,CAAA;AAC9D,CAAC,CAAA;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;IACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;AACpB,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;IACpB,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;AACxB,CAAC,CAAC,CAAA","sourcesContent":["import assert from 'assert'\nimport {\n Account,\n createClient,\n Transfer,\n TransferFlags,\n} from '.'\n\nconst MAX_TRANSFERS = 51200\n// CI runs benchmark.ts against a \"--development\" replica.\nconst MAX_REQUEST_BATCH_SIZE = 253\nconst IS_TWO_PHASE_TRANSFER = false\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\nconst TRANSFER_SIZE = 128\nconst accountA: Account = {\n id: 137n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\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 amount: 1n,\n pending_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\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 amount: 1n,\n pending_id: BigInt(count),\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.post_pending_transfer : 0,\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 = 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\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} from '.'\n\nconst MAX_TRANSFERS = 51200\n// CI runs benchmark.ts against a \"--development\" replica.\nconst MAX_REQUEST_BATCH_SIZE = 253\nconst IS_TWO_PHASE_TRANSFER = false\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\nconst TRANSFER_SIZE = 128\nconst accountA: Account = {\n id: 137n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n}\n\nconst accountB: Account = {\n id: 138n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\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 amount: 1n,\n pending_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: IS_TWO_PHASE_TRANSFER ? 2 : 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.pending : 0,\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 amount: 1n,\n pending_id: BigInt(count),\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n code: 1,\n ledger: 1,\n flags: IS_TWO_PHASE_TRANSFER ? TransferFlags.post_pending_transfer : 0,\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 = 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\nmain().catch(error => {\n console.log(error)\n}).finally(async () => {\n await client.destroy()\n})\n"]}
Binary file
Binary file
Binary file
@@ -29,7 +29,7 @@ export declare enum QueryFilterFlags {
29
29
  none = 0,
30
30
  reversed = 1
31
31
  }
32
- export declare type Account = {
32
+ export type Account = {
33
33
  id: bigint;
34
34
  debits_pending: bigint;
35
35
  debits_posted: bigint;
@@ -44,7 +44,7 @@ export declare type Account = {
44
44
  flags: number;
45
45
  timestamp: bigint;
46
46
  };
47
- export declare type Transfer = {
47
+ export type Transfer = {
48
48
  id: bigint;
49
49
  debit_account_id: bigint;
50
50
  credit_account_id: bigint;
@@ -158,15 +158,15 @@ export declare enum CreateTransferError {
158
158
  exceeds_credits = 54,
159
159
  exceeds_debits = 55
160
160
  }
161
- export declare type CreateAccountsError = {
161
+ export type CreateAccountsError = {
162
162
  index: number;
163
163
  result: CreateAccountError;
164
164
  };
165
- export declare type CreateTransfersError = {
165
+ export type CreateTransfersError = {
166
166
  index: number;
167
167
  result: CreateTransferError;
168
168
  };
169
- export declare type AccountFilter = {
169
+ export type AccountFilter = {
170
170
  account_id: bigint;
171
171
  user_data_128: bigint;
172
172
  user_data_64: bigint;
@@ -177,7 +177,7 @@ export declare type AccountFilter = {
177
177
  limit: number;
178
178
  flags: number;
179
179
  };
180
- export declare type QueryFilter = {
180
+ export type QueryFilter = {
181
181
  user_data_128: bigint;
182
182
  user_data_64: bigint;
183
183
  user_data_32: number;
@@ -188,7 +188,7 @@ export declare type QueryFilter = {
188
188
  limit: number;
189
189
  flags: number;
190
190
  };
191
- export declare type AccountBalance = {
191
+ export type AccountBalance = {
192
192
  debits_pending: bigint;
193
193
  debits_posted: bigint;
194
194
  credits_pending: bigint;
package/dist/bindings.js CHANGED
@@ -10,7 +10,7 @@ var AccountFlags;
10
10
  AccountFlags[AccountFlags["history"] = 8] = "history";
11
11
  AccountFlags[AccountFlags["imported"] = 16] = "imported";
12
12
  AccountFlags[AccountFlags["closed"] = 32] = "closed";
13
- })(AccountFlags = exports.AccountFlags || (exports.AccountFlags = {}));
13
+ })(AccountFlags || (exports.AccountFlags = AccountFlags = {}));
14
14
  var TransferFlags;
15
15
  (function (TransferFlags) {
16
16
  TransferFlags[TransferFlags["none"] = 0] = "none";
@@ -23,19 +23,19 @@ var TransferFlags;
23
23
  TransferFlags[TransferFlags["closing_debit"] = 64] = "closing_debit";
24
24
  TransferFlags[TransferFlags["closing_credit"] = 128] = "closing_credit";
25
25
  TransferFlags[TransferFlags["imported"] = 256] = "imported";
26
- })(TransferFlags = exports.TransferFlags || (exports.TransferFlags = {}));
26
+ })(TransferFlags || (exports.TransferFlags = TransferFlags = {}));
27
27
  var AccountFilterFlags;
28
28
  (function (AccountFilterFlags) {
29
29
  AccountFilterFlags[AccountFilterFlags["none"] = 0] = "none";
30
30
  AccountFilterFlags[AccountFilterFlags["debits"] = 1] = "debits";
31
31
  AccountFilterFlags[AccountFilterFlags["credits"] = 2] = "credits";
32
32
  AccountFilterFlags[AccountFilterFlags["reversed"] = 4] = "reversed";
33
- })(AccountFilterFlags = exports.AccountFilterFlags || (exports.AccountFilterFlags = {}));
33
+ })(AccountFilterFlags || (exports.AccountFilterFlags = AccountFilterFlags = {}));
34
34
  var QueryFilterFlags;
35
35
  (function (QueryFilterFlags) {
36
36
  QueryFilterFlags[QueryFilterFlags["none"] = 0] = "none";
37
37
  QueryFilterFlags[QueryFilterFlags["reversed"] = 1] = "reversed";
38
- })(QueryFilterFlags = exports.QueryFilterFlags || (exports.QueryFilterFlags = {}));
38
+ })(QueryFilterFlags || (exports.QueryFilterFlags = QueryFilterFlags = {}));
39
39
  var CreateAccountError;
40
40
  (function (CreateAccountError) {
41
41
  CreateAccountError[CreateAccountError["ok"] = 0] = "ok";
@@ -65,7 +65,7 @@ var CreateAccountError;
65
65
  CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 13] = "ledger_must_not_be_zero";
66
66
  CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 14] = "code_must_not_be_zero";
67
67
  CreateAccountError[CreateAccountError["imported_event_timestamp_must_not_regress"] = 26] = "imported_event_timestamp_must_not_regress";
68
- })(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
68
+ })(CreateAccountError || (exports.CreateAccountError = CreateAccountError = {}));
69
69
  var CreateTransferError;
70
70
  (function (CreateTransferError) {
71
71
  CreateTransferError[CreateTransferError["ok"] = 0] = "ok";
@@ -136,7 +136,7 @@ var CreateTransferError;
136
136
  CreateTransferError[CreateTransferError["overflows_timeout"] = 53] = "overflows_timeout";
137
137
  CreateTransferError[CreateTransferError["exceeds_credits"] = 54] = "exceeds_credits";
138
138
  CreateTransferError[CreateTransferError["exceeds_debits"] = 55] = "exceeds_debits";
139
- })(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
139
+ })(CreateTransferError || (exports.CreateTransferError = CreateTransferError = {}));
140
140
  var Operation;
141
141
  (function (Operation) {
142
142
  Operation[Operation["pulse"] = 128] = "pulse";
@@ -149,5 +149,5 @@ var Operation;
149
149
  Operation[Operation["get_account_balances"] = 143] = "get_account_balances";
150
150
  Operation[Operation["query_accounts"] = 144] = "query_accounts";
151
151
  Operation[Operation["query_transfers"] = 145] = "query_transfers";
152
- })(Operation = exports.Operation || (exports.Operation = {}));
152
+ })(Operation || (exports.Operation = Operation = {}));
153
153
  //# sourceMappingURL=bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["///////////////////////////////////////////////////////\n// This file was auto-generated by node_bindings.zig //\n// Do not manually modify. //\n///////////////////////////////////////////////////////\n\n\n/**\n* See [AccountFlags](https://docs.tigerbeetle.com/reference/account#flags)\n*/\nexport enum AccountFlags {\n none = 0,\n\n /**\n * See [linked](https://docs.tigerbeetle.com/reference/account#flagslinked)\n */\n linked = (1 << 0),\n\n /**\n * See [debits_must_not_exceed_credits](https://docs.tigerbeetle.com/reference/account#flagsdebits_must_not_exceed_credits)\n */\n debits_must_not_exceed_credits = (1 << 1),\n\n /**\n * See [credits_must_not_exceed_debits](https://docs.tigerbeetle.com/reference/account#flagscredits_must_not_exceed_debits)\n */\n credits_must_not_exceed_debits = (1 << 2),\n\n /**\n * See [history](https://docs.tigerbeetle.com/reference/account#flagshistory)\n */\n history = (1 << 3),\n\n /**\n * See [imported](https://docs.tigerbeetle.com/reference/account#flagsimported)\n */\n imported = (1 << 4),\n\n /**\n * See [closed](https://docs.tigerbeetle.com/reference/account#flagsclosed)\n */\n closed = (1 << 5),\n}\n\n\n/**\n* See [TransferFlags](https://docs.tigerbeetle.com/reference/transfer#flags)\n*/\nexport enum TransferFlags {\n none = 0,\n\n /**\n * See [linked](https://docs.tigerbeetle.com/reference/transfer#flagslinked)\n */\n linked = (1 << 0),\n\n /**\n * See [pending](https://docs.tigerbeetle.com/reference/transfer#flagspending)\n */\n pending = (1 << 1),\n\n /**\n * See [post_pending_transfer](https://docs.tigerbeetle.com/reference/transfer#flagspost_pending_transfer)\n */\n post_pending_transfer = (1 << 2),\n\n /**\n * See [void_pending_transfer](https://docs.tigerbeetle.com/reference/transfer#flagsvoid_pending_transfer)\n */\n void_pending_transfer = (1 << 3),\n\n /**\n * See [balancing_debit](https://docs.tigerbeetle.com/reference/transfer#flagsbalancing_debit)\n */\n balancing_debit = (1 << 4),\n\n /**\n * See [balancing_credit](https://docs.tigerbeetle.com/reference/transfer#flagsbalancing_credit)\n */\n balancing_credit = (1 << 5),\n\n /**\n * See [closing_debit](https://docs.tigerbeetle.com/reference/transfer#flagsclosing_debit)\n */\n closing_debit = (1 << 6),\n\n /**\n * See [closing_credit](https://docs.tigerbeetle.com/reference/transfer#flagsclosing_credit)\n */\n closing_credit = (1 << 7),\n\n /**\n * See [imported](https://docs.tigerbeetle.com/reference/transfer#flagsimported)\n */\n imported = (1 << 8),\n}\n\n\n/**\n* See [AccountFilterFlags](https://docs.tigerbeetle.com/reference/account-filter#flags)\n*/\nexport enum AccountFilterFlags {\n none = 0,\n\n /**\n * See [debits](https://docs.tigerbeetle.com/reference/account-filter#flagsdebits)\n */\n debits = (1 << 0),\n\n /**\n * See [credits](https://docs.tigerbeetle.com/reference/account-filter#flagscredits)\n */\n credits = (1 << 1),\n\n /**\n * See [reversed](https://docs.tigerbeetle.com/reference/account-filter#flagsreversed)\n */\n reversed = (1 << 2),\n}\n\n\n/**\n* See [QueryFilterFlags](https://docs.tigerbeetle.com/reference/query-filter#flags)\n*/\nexport enum QueryFilterFlags {\n none = 0,\n\n /**\n * See [reversed](https://docs.tigerbeetle.com/reference/query-filter#flagsreversed)\n */\n reversed = (1 << 0),\n}\n\n\n/**\n* See [Account](https://docs.tigerbeetle.com/reference/account/#)\n*/\nexport type Account = {\n\n /**\n * See [id](https://docs.tigerbeetle.com/reference/account/#id)\n */\n id: bigint\n\n /**\n * See [debits_pending](https://docs.tigerbeetle.com/reference/account/#debits_pending)\n */\n debits_pending: bigint\n\n /**\n * See [debits_posted](https://docs.tigerbeetle.com/reference/account/#debits_posted)\n */\n debits_posted: bigint\n\n /**\n * See [credits_pending](https://docs.tigerbeetle.com/reference/account/#credits_pending)\n */\n credits_pending: bigint\n\n /**\n * See [credits_posted](https://docs.tigerbeetle.com/reference/account/#credits_posted)\n */\n credits_posted: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/account/#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/account/#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/account/#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [reserved](https://docs.tigerbeetle.com/reference/account/#reserved)\n */\n reserved: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/account/#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/account/#code)\n */\n code: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/account/#flags)\n */\n flags: number\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/account/#timestamp)\n */\n timestamp: bigint\n}\n\n\n/**\n* See [Transfer](https://docs.tigerbeetle.com/reference/transfer/#)\n*/\nexport type Transfer = {\n\n /**\n * See [id](https://docs.tigerbeetle.com/reference/transfer/#id)\n */\n id: bigint\n\n /**\n * See [debit_account_id](https://docs.tigerbeetle.com/reference/transfer/#debit_account_id)\n */\n debit_account_id: bigint\n\n /**\n * See [credit_account_id](https://docs.tigerbeetle.com/reference/transfer/#credit_account_id)\n */\n credit_account_id: bigint\n\n /**\n * See [amount](https://docs.tigerbeetle.com/reference/transfer/#amount)\n */\n amount: bigint\n\n /**\n * See [pending_id](https://docs.tigerbeetle.com/reference/transfer/#pending_id)\n */\n pending_id: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/transfer/#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/transfer/#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/transfer/#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [timeout](https://docs.tigerbeetle.com/reference/transfer/#timeout)\n */\n timeout: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/transfer/#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/transfer/#code)\n */\n code: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/transfer/#flags)\n */\n flags: number\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/transfer/#timestamp)\n */\n timestamp: bigint\n}\n\n\n/**\n* See [CreateAccountError](https://docs.tigerbeetle.com/reference/requests/create_accounts#)\n*/\nexport enum CreateAccountError {\n\n /**\n * See [ok](https://docs.tigerbeetle.com/reference/requests/create_accounts#ok)\n */\n ok = 0,\n\n /**\n * See [linked_event_failed](https://docs.tigerbeetle.com/reference/requests/create_accounts#linked_event_failed)\n */\n linked_event_failed = 1,\n\n /**\n * See [linked_event_chain_open](https://docs.tigerbeetle.com/reference/requests/create_accounts#linked_event_chain_open)\n */\n linked_event_chain_open = 2,\n\n /**\n * See [imported_event_expected](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_expected)\n */\n imported_event_expected = 22,\n\n /**\n * See [imported_event_not_expected](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_not_expected)\n */\n imported_event_not_expected = 23,\n\n /**\n * See [timestamp_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#timestamp_must_be_zero)\n */\n timestamp_must_be_zero = 3,\n\n /**\n * See [imported_event_timestamp_out_of_range](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_out_of_range)\n */\n imported_event_timestamp_out_of_range = 24,\n\n /**\n * See [imported_event_timestamp_must_not_advance](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_must_not_advance)\n */\n imported_event_timestamp_must_not_advance = 25,\n\n /**\n * See [reserved_field](https://docs.tigerbeetle.com/reference/requests/create_accounts#reserved_field)\n */\n reserved_field = 4,\n\n /**\n * See [reserved_flag](https://docs.tigerbeetle.com/reference/requests/create_accounts#reserved_flag)\n */\n reserved_flag = 5,\n\n /**\n * See [id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#id_must_not_be_zero)\n */\n id_must_not_be_zero = 6,\n\n /**\n * See [id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_accounts#id_must_not_be_int_max)\n */\n id_must_not_be_int_max = 7,\n\n /**\n * See [exists_with_different_flags](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_flags)\n */\n exists_with_different_flags = 15,\n\n /**\n * See [exists_with_different_user_data_128](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_128)\n */\n exists_with_different_user_data_128 = 16,\n\n /**\n * See [exists_with_different_user_data_64](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_64)\n */\n exists_with_different_user_data_64 = 17,\n\n /**\n * See [exists_with_different_user_data_32](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_32)\n */\n exists_with_different_user_data_32 = 18,\n\n /**\n * See [exists_with_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_ledger)\n */\n exists_with_different_ledger = 19,\n\n /**\n * See [exists_with_different_code](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_code)\n */\n exists_with_different_code = 20,\n\n /**\n * See [exists](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists)\n */\n exists = 21,\n\n /**\n * See [flags_are_mutually_exclusive](https://docs.tigerbeetle.com/reference/requests/create_accounts#flags_are_mutually_exclusive)\n */\n flags_are_mutually_exclusive = 8,\n\n /**\n * See [debits_pending_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#debits_pending_must_be_zero)\n */\n debits_pending_must_be_zero = 9,\n\n /**\n * See [debits_posted_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#debits_posted_must_be_zero)\n */\n debits_posted_must_be_zero = 10,\n\n /**\n * See [credits_pending_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#credits_pending_must_be_zero)\n */\n credits_pending_must_be_zero = 11,\n\n /**\n * See [credits_posted_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#credits_posted_must_be_zero)\n */\n credits_posted_must_be_zero = 12,\n\n /**\n * See [ledger_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#ledger_must_not_be_zero)\n */\n ledger_must_not_be_zero = 13,\n\n /**\n * See [code_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#code_must_not_be_zero)\n */\n code_must_not_be_zero = 14,\n\n /**\n * See [imported_event_timestamp_must_not_regress](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_must_not_regress)\n */\n imported_event_timestamp_must_not_regress = 26,\n}\n\n\n/**\n* See [CreateTransferError](https://docs.tigerbeetle.com/reference/requests/create_transfers#)\n*/\nexport enum CreateTransferError {\n\n /**\n * See [ok](https://docs.tigerbeetle.com/reference/requests/create_transfers#ok)\n */\n ok = 0,\n\n /**\n * See [linked_event_failed](https://docs.tigerbeetle.com/reference/requests/create_transfers#linked_event_failed)\n */\n linked_event_failed = 1,\n\n /**\n * See [linked_event_chain_open](https://docs.tigerbeetle.com/reference/requests/create_transfers#linked_event_chain_open)\n */\n linked_event_chain_open = 2,\n\n /**\n * See [imported_event_expected](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_expected)\n */\n imported_event_expected = 56,\n\n /**\n * See [imported_event_not_expected](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_not_expected)\n */\n imported_event_not_expected = 57,\n\n /**\n * See [timestamp_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#timestamp_must_be_zero)\n */\n timestamp_must_be_zero = 3,\n\n /**\n * See [imported_event_timestamp_out_of_range](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_out_of_range)\n */\n imported_event_timestamp_out_of_range = 58,\n\n /**\n * See [imported_event_timestamp_must_not_advance](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_not_advance)\n */\n imported_event_timestamp_must_not_advance = 59,\n\n /**\n * See [reserved_flag](https://docs.tigerbeetle.com/reference/requests/create_transfers#reserved_flag)\n */\n reserved_flag = 4,\n\n /**\n * See [id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_must_not_be_zero)\n */\n id_must_not_be_zero = 5,\n\n /**\n * See [id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_must_not_be_int_max)\n */\n id_must_not_be_int_max = 6,\n\n /**\n * See [exists_with_different_flags](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_flags)\n */\n exists_with_different_flags = 36,\n\n /**\n * See [exists_with_different_pending_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_pending_id)\n */\n exists_with_different_pending_id = 40,\n\n /**\n * See [exists_with_different_timeout](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_timeout)\n */\n exists_with_different_timeout = 44,\n\n /**\n * See [exists_with_different_debit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_debit_account_id)\n */\n exists_with_different_debit_account_id = 37,\n\n /**\n * See [exists_with_different_credit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_credit_account_id)\n */\n exists_with_different_credit_account_id = 38,\n\n /**\n * See [exists_with_different_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_amount)\n */\n exists_with_different_amount = 39,\n\n /**\n * See [exists_with_different_user_data_128](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_128)\n */\n exists_with_different_user_data_128 = 41,\n\n /**\n * See [exists_with_different_user_data_64](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_64)\n */\n exists_with_different_user_data_64 = 42,\n\n /**\n * See [exists_with_different_user_data_32](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_32)\n */\n exists_with_different_user_data_32 = 43,\n\n /**\n * See [exists_with_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_ledger)\n */\n exists_with_different_ledger = 67,\n\n /**\n * See [exists_with_different_code](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_code)\n */\n exists_with_different_code = 45,\n\n /**\n * See [exists](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists)\n */\n exists = 46,\n\n /**\n * See [id_already_failed](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_already_failed)\n */\n id_already_failed = 68,\n\n /**\n * See [flags_are_mutually_exclusive](https://docs.tigerbeetle.com/reference/requests/create_transfers#flags_are_mutually_exclusive)\n */\n flags_are_mutually_exclusive = 7,\n\n /**\n * See [debit_account_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_id_must_not_be_zero)\n */\n debit_account_id_must_not_be_zero = 8,\n\n /**\n * See [debit_account_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_id_must_not_be_int_max)\n */\n debit_account_id_must_not_be_int_max = 9,\n\n /**\n * See [credit_account_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_id_must_not_be_zero)\n */\n credit_account_id_must_not_be_zero = 10,\n\n /**\n * See [credit_account_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_id_must_not_be_int_max)\n */\n credit_account_id_must_not_be_int_max = 11,\n\n /**\n * See [accounts_must_be_different](https://docs.tigerbeetle.com/reference/requests/create_transfers#accounts_must_be_different)\n */\n accounts_must_be_different = 12,\n\n /**\n * See [pending_id_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_be_zero)\n */\n pending_id_must_be_zero = 13,\n\n /**\n * See [pending_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_not_be_zero)\n */\n pending_id_must_not_be_zero = 14,\n\n /**\n * See [pending_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_not_be_int_max)\n */\n pending_id_must_not_be_int_max = 15,\n\n /**\n * See [pending_id_must_be_different](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_be_different)\n */\n pending_id_must_be_different = 16,\n\n /**\n * See [timeout_reserved_for_pending_transfer](https://docs.tigerbeetle.com/reference/requests/create_transfers#timeout_reserved_for_pending_transfer)\n */\n timeout_reserved_for_pending_transfer = 17,\n\n /**\n * See [closing_transfer_must_be_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#closing_transfer_must_be_pending)\n */\n closing_transfer_must_be_pending = 64,\n\n /**\n * See [ledger_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#ledger_must_not_be_zero)\n */\n ledger_must_not_be_zero = 19,\n\n /**\n * See [code_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#code_must_not_be_zero)\n */\n code_must_not_be_zero = 20,\n\n /**\n * See [debit_account_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_not_found)\n */\n debit_account_not_found = 21,\n\n /**\n * See [credit_account_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_not_found)\n */\n credit_account_not_found = 22,\n\n /**\n * See [accounts_must_have_the_same_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#accounts_must_have_the_same_ledger)\n */\n accounts_must_have_the_same_ledger = 23,\n\n /**\n * See [transfer_must_have_the_same_ledger_as_accounts](https://docs.tigerbeetle.com/reference/requests/create_transfers#transfer_must_have_the_same_ledger_as_accounts)\n */\n transfer_must_have_the_same_ledger_as_accounts = 24,\n\n /**\n * See [pending_transfer_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_not_found)\n */\n pending_transfer_not_found = 25,\n\n /**\n * See [pending_transfer_not_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_not_pending)\n */\n pending_transfer_not_pending = 26,\n\n /**\n * See [pending_transfer_has_different_debit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_debit_account_id)\n */\n pending_transfer_has_different_debit_account_id = 27,\n\n /**\n * See [pending_transfer_has_different_credit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_credit_account_id)\n */\n pending_transfer_has_different_credit_account_id = 28,\n\n /**\n * See [pending_transfer_has_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_ledger)\n */\n pending_transfer_has_different_ledger = 29,\n\n /**\n * See [pending_transfer_has_different_code](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_code)\n */\n pending_transfer_has_different_code = 30,\n\n /**\n * See [exceeds_pending_transfer_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_pending_transfer_amount)\n */\n exceeds_pending_transfer_amount = 31,\n\n /**\n * See [pending_transfer_has_different_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_amount)\n */\n pending_transfer_has_different_amount = 32,\n\n /**\n * See [pending_transfer_already_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_already_posted)\n */\n pending_transfer_already_posted = 33,\n\n /**\n * See [pending_transfer_already_voided](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_already_voided)\n */\n pending_transfer_already_voided = 34,\n\n /**\n * See [pending_transfer_expired](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_expired)\n */\n pending_transfer_expired = 35,\n\n /**\n * See [imported_event_timestamp_must_not_regress](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_not_regress)\n */\n imported_event_timestamp_must_not_regress = 60,\n\n /**\n * See [imported_event_timestamp_must_postdate_debit_account](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_postdate_debit_account)\n */\n imported_event_timestamp_must_postdate_debit_account = 61,\n\n /**\n * See [imported_event_timestamp_must_postdate_credit_account](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_postdate_credit_account)\n */\n imported_event_timestamp_must_postdate_credit_account = 62,\n\n /**\n * See [imported_event_timeout_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timeout_must_be_zero)\n */\n imported_event_timeout_must_be_zero = 63,\n\n /**\n * See [debit_account_already_closed](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_already_closed)\n */\n debit_account_already_closed = 65,\n\n /**\n * See [credit_account_already_closed](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_already_closed)\n */\n credit_account_already_closed = 66,\n\n /**\n * See [overflows_debits_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits_pending)\n */\n overflows_debits_pending = 47,\n\n /**\n * See [overflows_credits_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits_pending)\n */\n overflows_credits_pending = 48,\n\n /**\n * See [overflows_debits_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits_posted)\n */\n overflows_debits_posted = 49,\n\n /**\n * See [overflows_credits_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits_posted)\n */\n overflows_credits_posted = 50,\n\n /**\n * See [overflows_debits](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits)\n */\n overflows_debits = 51,\n\n /**\n * See [overflows_credits](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits)\n */\n overflows_credits = 52,\n\n /**\n * See [overflows_timeout](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_timeout)\n */\n overflows_timeout = 53,\n\n /**\n * See [exceeds_credits](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_credits)\n */\n exceeds_credits = 54,\n\n /**\n * See [exceeds_debits](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_debits)\n */\n exceeds_debits = 55,\n}\n\nexport type CreateAccountsError = {\n index: number\n result: CreateAccountError\n}\n\nexport type CreateTransfersError = {\n index: number\n result: CreateTransferError\n}\n\n\n/**\n* See [AccountFilter](https://docs.tigerbeetle.com/reference/account-filter#)\n*/\nexport type AccountFilter = {\n\n /**\n * See [account_id](https://docs.tigerbeetle.com/reference/account-filter#account_id)\n */\n account_id: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/account-filter#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/account-filter#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/account-filter#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/account-filter#code)\n */\n code: number\n\n /**\n * See [timestamp_min](https://docs.tigerbeetle.com/reference/account-filter#timestamp_min)\n */\n timestamp_min: bigint\n\n /**\n * See [timestamp_max](https://docs.tigerbeetle.com/reference/account-filter#timestamp_max)\n */\n timestamp_max: bigint\n\n /**\n * See [limit](https://docs.tigerbeetle.com/reference/account-filter#limit)\n */\n limit: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/account-filter#flags)\n */\n flags: number\n}\n\n\n/**\n* See [QueryFilter](https://docs.tigerbeetle.com/reference/query-filter#)\n*/\nexport type QueryFilter = {\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/query-filter#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/query-filter#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/query-filter#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/query-filter#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/query-filter#code)\n */\n code: number\n\n /**\n * See [timestamp_min](https://docs.tigerbeetle.com/reference/query-filter#timestamp_min)\n */\n timestamp_min: bigint\n\n /**\n * See [timestamp_max](https://docs.tigerbeetle.com/reference/query-filter#timestamp_max)\n */\n timestamp_max: bigint\n\n /**\n * See [limit](https://docs.tigerbeetle.com/reference/query-filter#limit)\n */\n limit: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/query-filter#flags)\n */\n flags: number\n}\n\n\n/**\n* See [AccountBalance](https://docs.tigerbeetle.com/reference/account-balances#)\n*/\nexport type AccountBalance = {\n\n /**\n * See [debits_pending](https://docs.tigerbeetle.com/reference/account-balances#debits_pending)\n */\n debits_pending: bigint\n\n /**\n * See [debits_posted](https://docs.tigerbeetle.com/reference/account-balances#debits_posted)\n */\n debits_posted: bigint\n\n /**\n * See [credits_pending](https://docs.tigerbeetle.com/reference/account-balances#credits_pending)\n */\n credits_pending: bigint\n\n /**\n * See [credits_posted](https://docs.tigerbeetle.com/reference/account-balances#credits_posted)\n */\n credits_posted: bigint\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/account-balances#timestamp)\n */\n timestamp: bigint\n}\n\nexport enum Operation {\n pulse = 128,\n get_change_events = 137,\n create_accounts = 138,\n create_transfers = 139,\n lookup_accounts = 140,\n lookup_transfers = 141,\n get_account_transfers = 142,\n get_account_balances = 143,\n query_accounts = 144,\n query_transfers = 145,\n}\n\n"]}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../src/bindings.ts"],"names":[],"mappings":"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","sourcesContent":["///////////////////////////////////////////////////////\n// This file was auto-generated by node_bindings.zig //\n// Do not manually modify. //\n///////////////////////////////////////////////////////\n\n\n/**\n* See [AccountFlags](https://docs.tigerbeetle.com/reference/account#flags)\n*/\nexport enum AccountFlags {\n none = 0,\n\n /**\n * See [linked](https://docs.tigerbeetle.com/reference/account#flagslinked)\n */\n linked = (1 << 0),\n\n /**\n * See [debits_must_not_exceed_credits](https://docs.tigerbeetle.com/reference/account#flagsdebits_must_not_exceed_credits)\n */\n debits_must_not_exceed_credits = (1 << 1),\n\n /**\n * See [credits_must_not_exceed_debits](https://docs.tigerbeetle.com/reference/account#flagscredits_must_not_exceed_debits)\n */\n credits_must_not_exceed_debits = (1 << 2),\n\n /**\n * See [history](https://docs.tigerbeetle.com/reference/account#flagshistory)\n */\n history = (1 << 3),\n\n /**\n * See [imported](https://docs.tigerbeetle.com/reference/account#flagsimported)\n */\n imported = (1 << 4),\n\n /**\n * See [closed](https://docs.tigerbeetle.com/reference/account#flagsclosed)\n */\n closed = (1 << 5),\n}\n\n\n/**\n* See [TransferFlags](https://docs.tigerbeetle.com/reference/transfer#flags)\n*/\nexport enum TransferFlags {\n none = 0,\n\n /**\n * See [linked](https://docs.tigerbeetle.com/reference/transfer#flagslinked)\n */\n linked = (1 << 0),\n\n /**\n * See [pending](https://docs.tigerbeetle.com/reference/transfer#flagspending)\n */\n pending = (1 << 1),\n\n /**\n * See [post_pending_transfer](https://docs.tigerbeetle.com/reference/transfer#flagspost_pending_transfer)\n */\n post_pending_transfer = (1 << 2),\n\n /**\n * See [void_pending_transfer](https://docs.tigerbeetle.com/reference/transfer#flagsvoid_pending_transfer)\n */\n void_pending_transfer = (1 << 3),\n\n /**\n * See [balancing_debit](https://docs.tigerbeetle.com/reference/transfer#flagsbalancing_debit)\n */\n balancing_debit = (1 << 4),\n\n /**\n * See [balancing_credit](https://docs.tigerbeetle.com/reference/transfer#flagsbalancing_credit)\n */\n balancing_credit = (1 << 5),\n\n /**\n * See [closing_debit](https://docs.tigerbeetle.com/reference/transfer#flagsclosing_debit)\n */\n closing_debit = (1 << 6),\n\n /**\n * See [closing_credit](https://docs.tigerbeetle.com/reference/transfer#flagsclosing_credit)\n */\n closing_credit = (1 << 7),\n\n /**\n * See [imported](https://docs.tigerbeetle.com/reference/transfer#flagsimported)\n */\n imported = (1 << 8),\n}\n\n\n/**\n* See [AccountFilterFlags](https://docs.tigerbeetle.com/reference/account-filter#flags)\n*/\nexport enum AccountFilterFlags {\n none = 0,\n\n /**\n * See [debits](https://docs.tigerbeetle.com/reference/account-filter#flagsdebits)\n */\n debits = (1 << 0),\n\n /**\n * See [credits](https://docs.tigerbeetle.com/reference/account-filter#flagscredits)\n */\n credits = (1 << 1),\n\n /**\n * See [reversed](https://docs.tigerbeetle.com/reference/account-filter#flagsreversed)\n */\n reversed = (1 << 2),\n}\n\n\n/**\n* See [QueryFilterFlags](https://docs.tigerbeetle.com/reference/query-filter#flags)\n*/\nexport enum QueryFilterFlags {\n none = 0,\n\n /**\n * See [reversed](https://docs.tigerbeetle.com/reference/query-filter#flagsreversed)\n */\n reversed = (1 << 0),\n}\n\n\n/**\n* See [Account](https://docs.tigerbeetle.com/reference/account/#)\n*/\nexport type Account = {\n\n /**\n * See [id](https://docs.tigerbeetle.com/reference/account/#id)\n */\n id: bigint\n\n /**\n * See [debits_pending](https://docs.tigerbeetle.com/reference/account/#debits_pending)\n */\n debits_pending: bigint\n\n /**\n * See [debits_posted](https://docs.tigerbeetle.com/reference/account/#debits_posted)\n */\n debits_posted: bigint\n\n /**\n * See [credits_pending](https://docs.tigerbeetle.com/reference/account/#credits_pending)\n */\n credits_pending: bigint\n\n /**\n * See [credits_posted](https://docs.tigerbeetle.com/reference/account/#credits_posted)\n */\n credits_posted: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/account/#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/account/#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/account/#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [reserved](https://docs.tigerbeetle.com/reference/account/#reserved)\n */\n reserved: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/account/#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/account/#code)\n */\n code: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/account/#flags)\n */\n flags: number\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/account/#timestamp)\n */\n timestamp: bigint\n}\n\n\n/**\n* See [Transfer](https://docs.tigerbeetle.com/reference/transfer/#)\n*/\nexport type Transfer = {\n\n /**\n * See [id](https://docs.tigerbeetle.com/reference/transfer/#id)\n */\n id: bigint\n\n /**\n * See [debit_account_id](https://docs.tigerbeetle.com/reference/transfer/#debit_account_id)\n */\n debit_account_id: bigint\n\n /**\n * See [credit_account_id](https://docs.tigerbeetle.com/reference/transfer/#credit_account_id)\n */\n credit_account_id: bigint\n\n /**\n * See [amount](https://docs.tigerbeetle.com/reference/transfer/#amount)\n */\n amount: bigint\n\n /**\n * See [pending_id](https://docs.tigerbeetle.com/reference/transfer/#pending_id)\n */\n pending_id: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/transfer/#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/transfer/#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/transfer/#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [timeout](https://docs.tigerbeetle.com/reference/transfer/#timeout)\n */\n timeout: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/transfer/#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/transfer/#code)\n */\n code: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/transfer/#flags)\n */\n flags: number\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/transfer/#timestamp)\n */\n timestamp: bigint\n}\n\n\n/**\n* See [CreateAccountError](https://docs.tigerbeetle.com/reference/requests/create_accounts#)\n*/\nexport enum CreateAccountError {\n\n /**\n * See [ok](https://docs.tigerbeetle.com/reference/requests/create_accounts#ok)\n */\n ok = 0,\n\n /**\n * See [linked_event_failed](https://docs.tigerbeetle.com/reference/requests/create_accounts#linked_event_failed)\n */\n linked_event_failed = 1,\n\n /**\n * See [linked_event_chain_open](https://docs.tigerbeetle.com/reference/requests/create_accounts#linked_event_chain_open)\n */\n linked_event_chain_open = 2,\n\n /**\n * See [imported_event_expected](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_expected)\n */\n imported_event_expected = 22,\n\n /**\n * See [imported_event_not_expected](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_not_expected)\n */\n imported_event_not_expected = 23,\n\n /**\n * See [timestamp_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#timestamp_must_be_zero)\n */\n timestamp_must_be_zero = 3,\n\n /**\n * See [imported_event_timestamp_out_of_range](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_out_of_range)\n */\n imported_event_timestamp_out_of_range = 24,\n\n /**\n * See [imported_event_timestamp_must_not_advance](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_must_not_advance)\n */\n imported_event_timestamp_must_not_advance = 25,\n\n /**\n * See [reserved_field](https://docs.tigerbeetle.com/reference/requests/create_accounts#reserved_field)\n */\n reserved_field = 4,\n\n /**\n * See [reserved_flag](https://docs.tigerbeetle.com/reference/requests/create_accounts#reserved_flag)\n */\n reserved_flag = 5,\n\n /**\n * See [id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#id_must_not_be_zero)\n */\n id_must_not_be_zero = 6,\n\n /**\n * See [id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_accounts#id_must_not_be_int_max)\n */\n id_must_not_be_int_max = 7,\n\n /**\n * See [exists_with_different_flags](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_flags)\n */\n exists_with_different_flags = 15,\n\n /**\n * See [exists_with_different_user_data_128](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_128)\n */\n exists_with_different_user_data_128 = 16,\n\n /**\n * See [exists_with_different_user_data_64](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_64)\n */\n exists_with_different_user_data_64 = 17,\n\n /**\n * See [exists_with_different_user_data_32](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_user_data_32)\n */\n exists_with_different_user_data_32 = 18,\n\n /**\n * See [exists_with_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_ledger)\n */\n exists_with_different_ledger = 19,\n\n /**\n * See [exists_with_different_code](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists_with_different_code)\n */\n exists_with_different_code = 20,\n\n /**\n * See [exists](https://docs.tigerbeetle.com/reference/requests/create_accounts#exists)\n */\n exists = 21,\n\n /**\n * See [flags_are_mutually_exclusive](https://docs.tigerbeetle.com/reference/requests/create_accounts#flags_are_mutually_exclusive)\n */\n flags_are_mutually_exclusive = 8,\n\n /**\n * See [debits_pending_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#debits_pending_must_be_zero)\n */\n debits_pending_must_be_zero = 9,\n\n /**\n * See [debits_posted_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#debits_posted_must_be_zero)\n */\n debits_posted_must_be_zero = 10,\n\n /**\n * See [credits_pending_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#credits_pending_must_be_zero)\n */\n credits_pending_must_be_zero = 11,\n\n /**\n * See [credits_posted_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#credits_posted_must_be_zero)\n */\n credits_posted_must_be_zero = 12,\n\n /**\n * See [ledger_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#ledger_must_not_be_zero)\n */\n ledger_must_not_be_zero = 13,\n\n /**\n * See [code_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_accounts#code_must_not_be_zero)\n */\n code_must_not_be_zero = 14,\n\n /**\n * See [imported_event_timestamp_must_not_regress](https://docs.tigerbeetle.com/reference/requests/create_accounts#imported_event_timestamp_must_not_regress)\n */\n imported_event_timestamp_must_not_regress = 26,\n}\n\n\n/**\n* See [CreateTransferError](https://docs.tigerbeetle.com/reference/requests/create_transfers#)\n*/\nexport enum CreateTransferError {\n\n /**\n * See [ok](https://docs.tigerbeetle.com/reference/requests/create_transfers#ok)\n */\n ok = 0,\n\n /**\n * See [linked_event_failed](https://docs.tigerbeetle.com/reference/requests/create_transfers#linked_event_failed)\n */\n linked_event_failed = 1,\n\n /**\n * See [linked_event_chain_open](https://docs.tigerbeetle.com/reference/requests/create_transfers#linked_event_chain_open)\n */\n linked_event_chain_open = 2,\n\n /**\n * See [imported_event_expected](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_expected)\n */\n imported_event_expected = 56,\n\n /**\n * See [imported_event_not_expected](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_not_expected)\n */\n imported_event_not_expected = 57,\n\n /**\n * See [timestamp_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#timestamp_must_be_zero)\n */\n timestamp_must_be_zero = 3,\n\n /**\n * See [imported_event_timestamp_out_of_range](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_out_of_range)\n */\n imported_event_timestamp_out_of_range = 58,\n\n /**\n * See [imported_event_timestamp_must_not_advance](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_not_advance)\n */\n imported_event_timestamp_must_not_advance = 59,\n\n /**\n * See [reserved_flag](https://docs.tigerbeetle.com/reference/requests/create_transfers#reserved_flag)\n */\n reserved_flag = 4,\n\n /**\n * See [id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_must_not_be_zero)\n */\n id_must_not_be_zero = 5,\n\n /**\n * See [id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_must_not_be_int_max)\n */\n id_must_not_be_int_max = 6,\n\n /**\n * See [exists_with_different_flags](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_flags)\n */\n exists_with_different_flags = 36,\n\n /**\n * See [exists_with_different_pending_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_pending_id)\n */\n exists_with_different_pending_id = 40,\n\n /**\n * See [exists_with_different_timeout](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_timeout)\n */\n exists_with_different_timeout = 44,\n\n /**\n * See [exists_with_different_debit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_debit_account_id)\n */\n exists_with_different_debit_account_id = 37,\n\n /**\n * See [exists_with_different_credit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_credit_account_id)\n */\n exists_with_different_credit_account_id = 38,\n\n /**\n * See [exists_with_different_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_amount)\n */\n exists_with_different_amount = 39,\n\n /**\n * See [exists_with_different_user_data_128](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_128)\n */\n exists_with_different_user_data_128 = 41,\n\n /**\n * See [exists_with_different_user_data_64](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_64)\n */\n exists_with_different_user_data_64 = 42,\n\n /**\n * See [exists_with_different_user_data_32](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_user_data_32)\n */\n exists_with_different_user_data_32 = 43,\n\n /**\n * See [exists_with_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_ledger)\n */\n exists_with_different_ledger = 67,\n\n /**\n * See [exists_with_different_code](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists_with_different_code)\n */\n exists_with_different_code = 45,\n\n /**\n * See [exists](https://docs.tigerbeetle.com/reference/requests/create_transfers#exists)\n */\n exists = 46,\n\n /**\n * See [id_already_failed](https://docs.tigerbeetle.com/reference/requests/create_transfers#id_already_failed)\n */\n id_already_failed = 68,\n\n /**\n * See [flags_are_mutually_exclusive](https://docs.tigerbeetle.com/reference/requests/create_transfers#flags_are_mutually_exclusive)\n */\n flags_are_mutually_exclusive = 7,\n\n /**\n * See [debit_account_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_id_must_not_be_zero)\n */\n debit_account_id_must_not_be_zero = 8,\n\n /**\n * See [debit_account_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_id_must_not_be_int_max)\n */\n debit_account_id_must_not_be_int_max = 9,\n\n /**\n * See [credit_account_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_id_must_not_be_zero)\n */\n credit_account_id_must_not_be_zero = 10,\n\n /**\n * See [credit_account_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_id_must_not_be_int_max)\n */\n credit_account_id_must_not_be_int_max = 11,\n\n /**\n * See [accounts_must_be_different](https://docs.tigerbeetle.com/reference/requests/create_transfers#accounts_must_be_different)\n */\n accounts_must_be_different = 12,\n\n /**\n * See [pending_id_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_be_zero)\n */\n pending_id_must_be_zero = 13,\n\n /**\n * See [pending_id_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_not_be_zero)\n */\n pending_id_must_not_be_zero = 14,\n\n /**\n * See [pending_id_must_not_be_int_max](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_not_be_int_max)\n */\n pending_id_must_not_be_int_max = 15,\n\n /**\n * See [pending_id_must_be_different](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_id_must_be_different)\n */\n pending_id_must_be_different = 16,\n\n /**\n * See [timeout_reserved_for_pending_transfer](https://docs.tigerbeetle.com/reference/requests/create_transfers#timeout_reserved_for_pending_transfer)\n */\n timeout_reserved_for_pending_transfer = 17,\n\n /**\n * See [closing_transfer_must_be_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#closing_transfer_must_be_pending)\n */\n closing_transfer_must_be_pending = 64,\n\n /**\n * See [ledger_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#ledger_must_not_be_zero)\n */\n ledger_must_not_be_zero = 19,\n\n /**\n * See [code_must_not_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#code_must_not_be_zero)\n */\n code_must_not_be_zero = 20,\n\n /**\n * See [debit_account_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_not_found)\n */\n debit_account_not_found = 21,\n\n /**\n * See [credit_account_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_not_found)\n */\n credit_account_not_found = 22,\n\n /**\n * See [accounts_must_have_the_same_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#accounts_must_have_the_same_ledger)\n */\n accounts_must_have_the_same_ledger = 23,\n\n /**\n * See [transfer_must_have_the_same_ledger_as_accounts](https://docs.tigerbeetle.com/reference/requests/create_transfers#transfer_must_have_the_same_ledger_as_accounts)\n */\n transfer_must_have_the_same_ledger_as_accounts = 24,\n\n /**\n * See [pending_transfer_not_found](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_not_found)\n */\n pending_transfer_not_found = 25,\n\n /**\n * See [pending_transfer_not_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_not_pending)\n */\n pending_transfer_not_pending = 26,\n\n /**\n * See [pending_transfer_has_different_debit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_debit_account_id)\n */\n pending_transfer_has_different_debit_account_id = 27,\n\n /**\n * See [pending_transfer_has_different_credit_account_id](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_credit_account_id)\n */\n pending_transfer_has_different_credit_account_id = 28,\n\n /**\n * See [pending_transfer_has_different_ledger](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_ledger)\n */\n pending_transfer_has_different_ledger = 29,\n\n /**\n * See [pending_transfer_has_different_code](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_code)\n */\n pending_transfer_has_different_code = 30,\n\n /**\n * See [exceeds_pending_transfer_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_pending_transfer_amount)\n */\n exceeds_pending_transfer_amount = 31,\n\n /**\n * See [pending_transfer_has_different_amount](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_has_different_amount)\n */\n pending_transfer_has_different_amount = 32,\n\n /**\n * See [pending_transfer_already_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_already_posted)\n */\n pending_transfer_already_posted = 33,\n\n /**\n * See [pending_transfer_already_voided](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_already_voided)\n */\n pending_transfer_already_voided = 34,\n\n /**\n * See [pending_transfer_expired](https://docs.tigerbeetle.com/reference/requests/create_transfers#pending_transfer_expired)\n */\n pending_transfer_expired = 35,\n\n /**\n * See [imported_event_timestamp_must_not_regress](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_not_regress)\n */\n imported_event_timestamp_must_not_regress = 60,\n\n /**\n * See [imported_event_timestamp_must_postdate_debit_account](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_postdate_debit_account)\n */\n imported_event_timestamp_must_postdate_debit_account = 61,\n\n /**\n * See [imported_event_timestamp_must_postdate_credit_account](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timestamp_must_postdate_credit_account)\n */\n imported_event_timestamp_must_postdate_credit_account = 62,\n\n /**\n * See [imported_event_timeout_must_be_zero](https://docs.tigerbeetle.com/reference/requests/create_transfers#imported_event_timeout_must_be_zero)\n */\n imported_event_timeout_must_be_zero = 63,\n\n /**\n * See [debit_account_already_closed](https://docs.tigerbeetle.com/reference/requests/create_transfers#debit_account_already_closed)\n */\n debit_account_already_closed = 65,\n\n /**\n * See [credit_account_already_closed](https://docs.tigerbeetle.com/reference/requests/create_transfers#credit_account_already_closed)\n */\n credit_account_already_closed = 66,\n\n /**\n * See [overflows_debits_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits_pending)\n */\n overflows_debits_pending = 47,\n\n /**\n * See [overflows_credits_pending](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits_pending)\n */\n overflows_credits_pending = 48,\n\n /**\n * See [overflows_debits_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits_posted)\n */\n overflows_debits_posted = 49,\n\n /**\n * See [overflows_credits_posted](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits_posted)\n */\n overflows_credits_posted = 50,\n\n /**\n * See [overflows_debits](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_debits)\n */\n overflows_debits = 51,\n\n /**\n * See [overflows_credits](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_credits)\n */\n overflows_credits = 52,\n\n /**\n * See [overflows_timeout](https://docs.tigerbeetle.com/reference/requests/create_transfers#overflows_timeout)\n */\n overflows_timeout = 53,\n\n /**\n * See [exceeds_credits](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_credits)\n */\n exceeds_credits = 54,\n\n /**\n * See [exceeds_debits](https://docs.tigerbeetle.com/reference/requests/create_transfers#exceeds_debits)\n */\n exceeds_debits = 55,\n}\n\nexport type CreateAccountsError = {\n index: number\n result: CreateAccountError\n}\n\nexport type CreateTransfersError = {\n index: number\n result: CreateTransferError\n}\n\n\n/**\n* See [AccountFilter](https://docs.tigerbeetle.com/reference/account-filter#)\n*/\nexport type AccountFilter = {\n\n /**\n * See [account_id](https://docs.tigerbeetle.com/reference/account-filter#account_id)\n */\n account_id: bigint\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/account-filter#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/account-filter#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/account-filter#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/account-filter#code)\n */\n code: number\n\n /**\n * See [timestamp_min](https://docs.tigerbeetle.com/reference/account-filter#timestamp_min)\n */\n timestamp_min: bigint\n\n /**\n * See [timestamp_max](https://docs.tigerbeetle.com/reference/account-filter#timestamp_max)\n */\n timestamp_max: bigint\n\n /**\n * See [limit](https://docs.tigerbeetle.com/reference/account-filter#limit)\n */\n limit: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/account-filter#flags)\n */\n flags: number\n}\n\n\n/**\n* See [QueryFilter](https://docs.tigerbeetle.com/reference/query-filter#)\n*/\nexport type QueryFilter = {\n\n /**\n * See [user_data_128](https://docs.tigerbeetle.com/reference/query-filter#user_data_128)\n */\n user_data_128: bigint\n\n /**\n * See [user_data_64](https://docs.tigerbeetle.com/reference/query-filter#user_data_64)\n */\n user_data_64: bigint\n\n /**\n * See [user_data_32](https://docs.tigerbeetle.com/reference/query-filter#user_data_32)\n */\n user_data_32: number\n\n /**\n * See [ledger](https://docs.tigerbeetle.com/reference/query-filter#ledger)\n */\n ledger: number\n\n /**\n * See [code](https://docs.tigerbeetle.com/reference/query-filter#code)\n */\n code: number\n\n /**\n * See [timestamp_min](https://docs.tigerbeetle.com/reference/query-filter#timestamp_min)\n */\n timestamp_min: bigint\n\n /**\n * See [timestamp_max](https://docs.tigerbeetle.com/reference/query-filter#timestamp_max)\n */\n timestamp_max: bigint\n\n /**\n * See [limit](https://docs.tigerbeetle.com/reference/query-filter#limit)\n */\n limit: number\n\n /**\n * See [flags](https://docs.tigerbeetle.com/reference/query-filter#flags)\n */\n flags: number\n}\n\n\n/**\n* See [AccountBalance](https://docs.tigerbeetle.com/reference/account-balances#)\n*/\nexport type AccountBalance = {\n\n /**\n * See [debits_pending](https://docs.tigerbeetle.com/reference/account-balances#debits_pending)\n */\n debits_pending: bigint\n\n /**\n * See [debits_posted](https://docs.tigerbeetle.com/reference/account-balances#debits_posted)\n */\n debits_posted: bigint\n\n /**\n * See [credits_pending](https://docs.tigerbeetle.com/reference/account-balances#credits_pending)\n */\n credits_pending: bigint\n\n /**\n * See [credits_posted](https://docs.tigerbeetle.com/reference/account-balances#credits_posted)\n */\n credits_posted: bigint\n\n /**\n * See [timestamp](https://docs.tigerbeetle.com/reference/account-balances#timestamp)\n */\n timestamp: bigint\n}\n\nexport enum Operation {\n pulse = 128,\n get_change_events = 137,\n create_accounts = 138,\n create_transfers = 139,\n lookup_accounts = 140,\n lookup_transfers = 141,\n get_account_transfers = 142,\n get_account_balances = 143,\n query_accounts = 144,\n query_transfers = 145,\n}\n\n"]}
package/dist/index.d.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  export * from './bindings';
2
2
  import { Account, Transfer, CreateAccountsError, CreateTransfersError, AccountFilter, AccountBalance, QueryFilter } from './bindings';
3
- export declare type Context = object;
4
- export declare type AccountID = bigint;
5
- export declare type TransferID = bigint;
6
- export declare type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter;
7
- export declare type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance;
8
- export declare type ResultCallback = (error: Error | null, results: Result[] | null) => void;
3
+ export type Context = object;
4
+ export type AccountID = bigint;
5
+ export type TransferID = bigint;
6
+ export type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter;
7
+ export type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance;
8
+ export type ResultCallback = (error: Error | null, results: Result[] | null) => void;
9
9
  export declare const amount_max: bigint;
10
10
  export interface ClientInitArgs {
11
11
  cluster_id: bigint;
package/dist/index.js CHANGED
@@ -1,7 +1,11 @@
1
1
  "use strict";
2
2
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
3
  if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
5
9
  }) : (function(o, m, k, k2) {
6
10
  if (k2 === undefined) k2 = k;
7
11
  o[k2] = m[k];
@@ -10,7 +14,9 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
15
  };
12
16
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.id = exports.createClient = exports.amount_max = void 0;
17
+ exports.amount_max = void 0;
18
+ exports.createClient = createClient;
19
+ exports.id = id;
14
20
  __exportStar(require("./bindings"), exports);
15
21
  const bindings_1 = require("./bindings");
16
22
  const node_crypto_1 = require("node:crypto");
@@ -31,20 +37,18 @@ const binding = (() => {
31
37
  if (!(platform in platformMap)) {
32
38
  throw new Error(`Unsupported platform: ${platform}`);
33
39
  }
34
- let extra = '';
35
- const fs = require('fs');
36
- const path = require('path');
40
+ let linuxABI = '';
37
41
  if (platform === 'linux') {
38
- extra = '-gnu';
39
- for (const file of fs.readdirSync("/proc/self/map_files/")) {
40
- const realPath = fs.readlinkSync(path.join("/proc/self/map_files/", file));
41
- if (realPath.includes('musl')) {
42
- extra = '-musl';
43
- break;
44
- }
42
+ const glibcVersionRuntime = process.report.getReport().header.glibcVersionRuntime;
43
+ if (glibcVersionRuntime) {
44
+ linuxABI = '-gnu';
45
+ }
46
+ else {
47
+ linuxABI = '-musl';
45
48
  }
46
49
  }
47
- const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`;
50
+ const filename = `./bin/${archMap[arch]}-` +
51
+ `${platformMap[platform]}${linuxABI}/client.node`;
48
52
  return require(filename);
49
53
  })();
50
54
  exports.amount_max = (2n ** 128n) - 1n;
@@ -92,7 +96,6 @@ function createClient(args) {
92
96
  destroy,
93
97
  };
94
98
  }
95
- exports.createClient = createClient;
96
99
  let idLastTimestamp = 0;
97
100
  const idLastBuffer = new DataView(new ArrayBuffer(16));
98
101
  const idLastBufferArray = new Uint8Array(idLastBuffer.buffer, idLastBuffer.byteOffset, idLastBuffer.byteLength);
@@ -121,5 +124,4 @@ function id() {
121
124
  const hi = idLastBuffer.getBigUint64(8, littleEndian);
122
125
  return (hi << 64n) | lo;
123
126
  }
124
- exports.id = id;
125
127
  //# sourceMappingURL=index.js.map
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":["export * from './bindings'\nimport {\n Account,\n Transfer,\n CreateAccountsError,\n CreateTransfersError,\n Operation,\n AccountFilter,\n AccountBalance,\n QueryFilter,\n} from './bindings'\nimport { randomFillSync } from 'node:crypto'\n\nconst binding: Binding = (() => {\n const { arch, platform } = process\n\n const archMap = {\n \"arm64\": \"aarch64\",\n \"x64\": \"x86_64\"\n }\n\n const platformMap = {\n \"linux\": \"linux\",\n \"darwin\": \"macos\",\n \"win32\" : \"windows\",\n }\n\n if (! (arch in archMap)) {\n throw new Error(`Unsupported arch: ${arch}`)\n }\n\n if (! (platform in platformMap)) {\n throw new Error(`Unsupported platform: ${platform}`)\n }\n\n let extra = ''\n\n /**\n * We need to detect during runtime which libc we're running on to load the correct NAPI.\n * binary.\n *\n * Rationale: The /proc/self/map_files/ subdirectory contains entries corresponding to\n * memory-mapped files loaded by Node.\n * https://man7.org/linux/man-pages/man5/proc.5.html: We detect a musl-based distro by\n * checking if any library contains the name \"musl\".\n *\n * Prior art: https://github.com/xerial/sqlite-jdbc/issues/623\n */\n\n const fs = require('fs')\n const path = require('path')\n\n if (platform === 'linux') {\n extra = '-gnu'\n\n for (const file of fs.readdirSync(\"/proc/self/map_files/\")) {\n const realPath = fs.readlinkSync(path.join(\"/proc/self/map_files/\", file))\n if (realPath.includes('musl')) {\n extra = '-musl'\n break\n }\n }\n }\n\n const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`\n return require(filename)\n})()\n\nexport type Context = object // tb_client\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\nexport type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance\nexport type ResultCallback = (error: Error | null, results: Result[] | null) => void\n\nexport const amount_max: bigint = (2n ** 128n) - 1n\n\ninterface BindingInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Buffer,\n}\n\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n submit: (context: Context, operation: Operation, batch: Event[], callback: ResultCallback) => void\n deinit: (context: Context) => void,\n}\n\nexport interface ClientInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Array<string | number>,\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 getAccountTransfers: (filter: AccountFilter) => Promise<Transfer[]>\n getAccountBalances: (filter: AccountFilter) => Promise<AccountBalance[]>\n queryAccounts: (filter: QueryFilter) => Promise<Account[]>\n queryTransfers: (filter: QueryFilter) => Promise<Transfer[]>\n destroy: () => void\n}\n\nexport function createClient (args: ClientInitArgs): Client {\n // Context becomes null when `destroy` is called. After that point, further `request` Promises\n // throw a shutdown Error. This prevents tb_client calls from happening after tb_client_deinit().\n let context: Context | null = binding.init({\n cluster_id: args.cluster_id,\n replica_addresses: Buffer.from(args.replica_addresses.join(',')),\n })\n\n const destroy = () => {\n if (context) binding.deinit(context)\n context = null;\n }\n\n const request = <T extends Result>(operation: Operation, batch: Event[]): Promise<T[]> => {\n return new Promise((resolve, reject) => {\n try {\n if (!context) throw new Error('Client was shutdown.');\n binding.submit(context, operation, batch, (error, result) => {\n if (error) {\n reject(error)\n } else if (result) {\n resolve(result as T[])\n } else {\n throw new Error(\"UB: Binding invoked callback without error or result\")\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n }\n\n return {\n createAccounts(batch) { return request(Operation.create_accounts, batch) },\n createTransfers(batch) { return request(Operation.create_transfers, batch) },\n lookupAccounts(batch) { return request(Operation.lookup_accounts, batch) },\n lookupTransfers(batch) { return request(Operation.lookup_transfers, batch) },\n getAccountTransfers(filter) { return request(Operation.get_account_transfers, [filter]) },\n getAccountBalances(filter) { return request(Operation.get_account_balances, [filter]) },\n queryAccounts(filter) { return request(Operation.query_accounts, [filter]) },\n queryTransfers(filter) { return request(Operation.query_transfers, [filter]) },\n destroy,\n }\n}\n\nlet idLastTimestamp = 0;\n\n// These are two references to the same buffer.\n// We only need the `Uint8Array` because in Node.js 24, but not earlier, `crypto.randomFillSync`\n// rejects `DataView` typed arguments.\nconst idLastBuffer = new DataView(new ArrayBuffer(16));\nconst idLastBufferArray = new Uint8Array(\n idLastBuffer.buffer, idLastBuffer.byteOffset, idLastBuffer.byteLength\n);\n\n/**\n * Generates a Universally Unique and Sortable Identifier as a u128 bigint.\n *\n * @remarks\n * Based on {@link https://github.com/ulid/spec}, IDs returned are guaranteed to be monotonically\n * increasing.\n */\nexport function id(): bigint {\n // Ensure timestamp monotonically increases and generate a new random on each new timestamp.\n let timestamp = Date.now()\n if (timestamp <= idLastTimestamp) {\n timestamp = idLastTimestamp\n } else {\n idLastTimestamp = timestamp\n randomFillSync(idLastBufferArray)\n }\n\n // Increment the u80 in idLastBuffer using carry arithmetic on u32s (as JS doesn't have fast u64).\n const littleEndian = true\n const randomLo32 = idLastBuffer.getUint32(0, littleEndian) + 1\n const randomHi32 = idLastBuffer.getUint32(4, littleEndian) + (randomLo32 > 0xFFFFFFFF ? 1 : 0)\n const randomHi16 = idLastBuffer.getUint16(8, littleEndian) + (randomHi32 > 0xFFFFFFFF ? 1 : 0)\n if (randomHi16 > 0xFFFF) {\n throw new Error('random bits overflow on monotonic increment')\n }\n\n // Store the incremented random monotonic and the timestamp into the buffer.\n idLastBuffer.setUint32(0, randomLo32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint32(4, randomHi32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint16(8, randomHi16, littleEndian) // No need to mask since checked above.\n idLastBuffer.setUint16(10, timestamp & 0xFFFF, littleEndian) // timestamp lo.\n idLastBuffer.setUint32(12, (timestamp / 0x10000) | 0, littleEndian) // timestamp hi.\n\n // Then return the buffer's contents as a little-endian u128 bigint.\n const lo = idLastBuffer.getBigUint64(0, littleEndian)\n const hi = idLastBuffer.getBigUint64(8, littleEndian)\n return (hi << 64n) | lo\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["export * from './bindings'\nimport {\n Account,\n Transfer,\n CreateAccountsError,\n CreateTransfersError,\n Operation,\n AccountFilter,\n AccountBalance,\n QueryFilter,\n} from './bindings'\nimport { randomFillSync } from 'node:crypto'\n\nconst binding: Binding = (() => {\n const { arch, platform } = process\n\n const archMap = {\n \"arm64\": \"aarch64\",\n \"x64\": \"x86_64\"\n }\n\n const platformMap = {\n \"linux\": \"linux\",\n \"darwin\": \"macos\",\n \"win32\" : \"windows\",\n }\n\n if (! (arch in archMap)) {\n throw new Error(`Unsupported arch: ${arch}`)\n }\n\n if (! (platform in platformMap)) {\n throw new Error(`Unsupported platform: ${platform}`)\n }\n\n let linuxABI = ''\n\n /**\n * We need to detect during runtime which libc we're running on to load the correct NAPI.\n * binary.\n */\n if (platform === 'linux') {\n const glibcVersionRuntime = (process.report.getReport() as any).header.glibcVersionRuntime\n if (glibcVersionRuntime) {\n linuxABI = '-gnu'\n } else {\n linuxABI = '-musl'\n }\n }\n\n const filename = `./bin/${archMap[arch as keyof typeof archMap]}-` +\n `${platformMap[platform as keyof typeof platformMap]}${linuxABI}/client.node`\n return require(filename)\n})()\n\nexport type Context = object // tb_client\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\nexport type Event = Account | Transfer | AccountID | TransferID | AccountFilter | QueryFilter\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer | AccountBalance\nexport type ResultCallback = (error: Error | null, results: Result[] | null) => void\n\nexport const amount_max: bigint = (2n ** 128n) - 1n\n\ninterface BindingInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Buffer,\n}\n\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n submit: (context: Context, operation: Operation, batch: Event[], callback: ResultCallback) => void\n deinit: (context: Context) => void,\n}\n\nexport interface ClientInitArgs {\n cluster_id: bigint, // u128\n replica_addresses: Array<string | number>,\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 getAccountTransfers: (filter: AccountFilter) => Promise<Transfer[]>\n getAccountBalances: (filter: AccountFilter) => Promise<AccountBalance[]>\n queryAccounts: (filter: QueryFilter) => Promise<Account[]>\n queryTransfers: (filter: QueryFilter) => Promise<Transfer[]>\n destroy: () => void\n}\n\nexport function createClient (args: ClientInitArgs): Client {\n // Context becomes null when `destroy` is called. After that point, further `request` Promises\n // throw a shutdown Error. This prevents tb_client calls from happening after tb_client_deinit().\n let context: Context | null = binding.init({\n cluster_id: args.cluster_id,\n replica_addresses: Buffer.from(args.replica_addresses.join(',')),\n })\n\n const destroy = () => {\n if (context) binding.deinit(context)\n context = null;\n }\n\n const request = <T extends Result>(operation: Operation, batch: Event[]): Promise<T[]> => {\n return new Promise((resolve, reject) => {\n try {\n if (!context) throw new Error('Client was shutdown.');\n binding.submit(context, operation, batch, (error, result) => {\n if (error) {\n reject(error)\n } else if (result) {\n resolve(result as T[])\n } else {\n throw new Error(\"UB: Binding invoked callback without error or result\")\n }\n })\n } catch (err) {\n reject(err)\n }\n })\n }\n\n return {\n createAccounts(batch) { return request(Operation.create_accounts, batch) },\n createTransfers(batch) { return request(Operation.create_transfers, batch) },\n lookupAccounts(batch) { return request(Operation.lookup_accounts, batch) },\n lookupTransfers(batch) { return request(Operation.lookup_transfers, batch) },\n getAccountTransfers(filter) { return request(Operation.get_account_transfers, [filter]) },\n getAccountBalances(filter) { return request(Operation.get_account_balances, [filter]) },\n queryAccounts(filter) { return request(Operation.query_accounts, [filter]) },\n queryTransfers(filter) { return request(Operation.query_transfers, [filter]) },\n destroy,\n }\n}\n\nlet idLastTimestamp = 0;\n\n// These are two references to the same buffer.\n// We only need the `Uint8Array` because in Node.js 24, but not earlier, `crypto.randomFillSync`\n// rejects `DataView` typed arguments.\nconst idLastBuffer = new DataView(new ArrayBuffer(16));\nconst idLastBufferArray = new Uint8Array(\n idLastBuffer.buffer, idLastBuffer.byteOffset, idLastBuffer.byteLength\n);\n\n/**\n * Generates a Universally Unique and Sortable Identifier as a u128 bigint.\n *\n * @remarks\n * Based on {@link https://github.com/ulid/spec}, IDs returned are guaranteed to be monotonically\n * increasing.\n */\nexport function id(): bigint {\n // Ensure timestamp monotonically increases and generate a new random on each new timestamp.\n let timestamp = Date.now()\n if (timestamp <= idLastTimestamp) {\n timestamp = idLastTimestamp\n } else {\n idLastTimestamp = timestamp\n randomFillSync(idLastBufferArray)\n }\n\n // Increment the u80 in idLastBuffer using carry arithmetic on u32s (as JS doesn't have fast u64).\n const littleEndian = true\n const randomLo32 = idLastBuffer.getUint32(0, littleEndian) + 1\n const randomHi32 = idLastBuffer.getUint32(4, littleEndian) + (randomLo32 > 0xFFFFFFFF ? 1 : 0)\n const randomHi16 = idLastBuffer.getUint16(8, littleEndian) + (randomHi32 > 0xFFFFFFFF ? 1 : 0)\n if (randomHi16 > 0xFFFF) {\n throw new Error('random bits overflow on monotonic increment')\n }\n\n // Store the incremented random monotonic and the timestamp into the buffer.\n idLastBuffer.setUint32(0, randomLo32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint32(4, randomHi32 & 0xFFFFFFFF, littleEndian)\n idLastBuffer.setUint16(8, randomHi16, littleEndian) // No need to mask since checked above.\n idLastBuffer.setUint16(10, timestamp & 0xFFFF, littleEndian) // timestamp lo.\n idLastBuffer.setUint32(12, (timestamp / 0x10000) | 0, littleEndian) // timestamp hi.\n\n // Then return the buffer's contents as a little-endian u128 bigint.\n const lo = idLastBuffer.getBigUint64(0, littleEndian)\n const hi = idLastBuffer.getBigUint64(8, littleEndian)\n return (hi << 64n) | lo\n}\n"]}
package/dist/test.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await new Promise(resolve => setTimeout(resolve, 1))\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero })\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n var transfers: Transfer[] = [];\n for (var i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n try {\n const results = await client.createTransfers(transfers);\n assert.fail();\n } catch (error) {\n assert.strictEqual(error.message, \"Too much data provided on this batch.\");\n }\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n var accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node.js > 15.\n const extra_wait_time = 250;\n await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired })\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let errors = await client.createTransfers([closing_transfer])\n assert.strictEqual(errors.length, 0)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n errors = await client.createTransfers([voiding_transfer])\n assert.strictEqual(errors.length, 0)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_errors, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_created_result, [])\n\n // Query all transfers for accountC:\n var filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n var account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n var timestamp = 0n;\n var i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n var accounts : Account[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const create_accounts_result = await client.createAccounts(accounts)\n assert.deepStrictEqual(create_accounts_result, [])\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const create_accounts_result = await client.createAccounts([account])\n assert.deepStrictEqual(create_accounts_result, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const create_transfers_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(create_transfers_result, [])\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let accountsErrors = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(accountsErrors, [])\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await new Promise(_ => setTimeout(_, 10));\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n accountsErrors = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(accountsErrors, [])\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const errors = await client.createTransfers([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n // Non-existing cluster.\n const client = createClient({ cluster_id: 92n, replica_addresses: [\"99\"] });\n setTimeout(() => client.destroy(), 30);\n try {\n await client.lookupAccounts([0n]);\n } catch (error) {\n assert.strictEqual(error.message, \"Client was shutdown.\");\n return;\n }\n throw \"expected an error\";\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n amount_max,\n id,\n QueryFilter,\n QueryFilterFlags,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst BATCH_MAX = 8189;\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await new Promise(resolve => setTimeout(resolve, 1))\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero })\n})\n\ntest('batch max size', async (): Promise<void> => {\n const BATCH_SIZE = 10_000;\n var transfers: Transfer[] = [];\n for (var i=0; i<BATCH_SIZE;i++) {\n transfers.push({\n id: 0n,\n debit_account_id: 0n,\n credit_account_id: 0n,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 0,\n code: 0,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n try {\n const results = await client.createTransfers(transfers);\n assert.fail();\n } catch (error) {\n assert.strictEqual(error.message, \"Too much data provided on this batch.\");\n }\n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: amount_max,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.deepStrictEqual(errors, [])\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.deepStrictEqual(transferErrors, [])\n\n var accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // We need to wait 1s for the server to expire the transfer, however the\n // server can pulse the expiry operation anytime after the timeout,\n // so adding an extra delay to avoid flaky tests.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node.js > 15.\n const extra_wait_time = 250;\n await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));\n\n // Looking up the accounts again for the updated balance.\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n\n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired })\n})\n\ntest('can close accounts', async (): Promise<void> => {\n const closing_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.closing_debit | TransferFlags.closing_credit | TransferFlags.pending,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n let errors = await client.createTransfers([closing_transfer])\n assert.strictEqual(errors.length, 0)\n\n let accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.ok(accountA.flags != accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) != 0)\n\n assert.ok(accountB.flags != accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) != 0)\n\n const voiding_transfer: Transfer = {\n id: id(),\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n pending_id: closing_transfer.id,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n errors = await client.createTransfers([voiding_transfer])\n assert.strictEqual(errors.length, 0)\n\n accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accountA.flags, accounts[0].flags)\n assert.ok((accounts[0].flags & AccountFlags.closed) == 0)\n\n assert.strictEqual(accountB.flags, accounts[1].flags)\n assert.ok((accounts[1].flags & AccountFlags.closed) == 0)\n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.deepStrictEqual(account_errors, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(transfers_created_result, [])\n\n // Query all transfers for accountC:\n var filter: AccountFilter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n var account_balances = await client.getAccountBalances(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(account_balances.length, transfers.length)\n\n var timestamp = 0n;\n var i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(account_balances.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(account_balances[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n account_balances = await client.getAccountBalances(filter)\n\n assert.deepStrictEqual(transfers, [])\n assert.strictEqual(account_balances.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: AccountFilterFlags.none,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.getAccountTransfers(filter)), [])\n assert.deepStrictEqual((await client.getAccountBalances(filter)), [])\n\n})\n\ntest('can query accounts', async (): Promise<void> => {\n {\n var accounts : Account[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n accounts.push({\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n ledger: 1,\n code: 999,\n flags: AccountFlags.none,\n reserved: 0,\n timestamp: 0n,\n })\n }\n\n const create_accounts_result = await client.createAccounts(accounts)\n assert.deepStrictEqual(create_accounts_result, [])\n }\n\n {\n // Querying accounts where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.user_data_128, filter.user_data_128);\n assert.strictEqual(account.user_data_64, filter.user_data_64);\n assert.strictEqual(account.user_data_32, filter.user_data_32);\n assert.strictEqual(account.ledger, filter.ledger);\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var account of query) {\n assert.ok(timestamp < account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n }\n\n {\n // Querying accounts where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 5)\n\n for (var account of query) {\n assert.ok(timestamp > account.timestamp);\n timestamp = account.timestamp;\n\n assert.strictEqual(account.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Account[] = await client.queryAccounts(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('can query transfers', async (): Promise<void> => {\n {\n const account: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.none,\n timestamp: 0n\n }\n const create_accounts_result = await client.createAccounts([account])\n assert.deepStrictEqual(create_accounts_result, [])\n\n var transfers_created : Transfer[] = [];\n // Create transfers:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: id(),\n debit_account_id: i % 2 == 0 ? account.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : account.id,\n amount: 100n,\n user_data_128: i % 2 == 0 ? 1000n : 2000n,\n user_data_64: i % 2 == 0 ? 100n : 200n,\n user_data_32: i % 2 == 0 ? 10 : 20,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 999,\n flags: 0,\n timestamp: 0n,\n })\n }\n\n const create_transfers_result = await client.createTransfers(transfers_created)\n assert.deepStrictEqual(create_transfers_result, [])\n }\n\n {\n // Querying transfers where:\n // `user_data_128=1000 AND user_data_64=100 AND user_data_32=10\n // AND code=999 AND ledger=1 ORDER BY timestamp ASC`.\n var filter: QueryFilter = {\n user_data_128: 1000n,\n user_data_64: 100n,\n user_data_32: 10,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `user_data_128=2000 AND user_data_64=200 AND user_data_32=20\n // AND code=999 AND ledger=1 ORDER BY timestamp DESC`.\n var filter: QueryFilter = {\n user_data_128: 2000n,\n user_data_64: 200n,\n user_data_32: 20,\n ledger: 1,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.reversed,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.user_data_128, filter.user_data_128);\n assert.strictEqual(transfer.user_data_64, filter.user_data_64);\n assert.strictEqual(transfer.user_data_32, filter.user_data_32);\n assert.strictEqual(transfer.ledger, filter.ledger);\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp ASC`\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 10)\n\n var timestamp = 0n;\n for (var transfer of query) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n }\n\n {\n // Querying transfers where:\n // `code=999 ORDER BY timestamp DESC LIMIT 5`.\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 999,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 5,\n flags: QueryFilterFlags.reversed,\n }\n\n // First 5 items:\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n var timestamp = 1n << 64n;\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // Next 5 items:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 5)\n\n for (var transfer of query) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.strictEqual(transfer.code, filter.code);\n }\n\n // No more results:\n filter.timestamp_max = timestamp - 1n\n query = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n\n {\n // Not found:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 200n,\n user_data_32: 10,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n var query: Transfer[] = await client.queryTransfers(filter)\n assert.strictEqual(query.length, 0)\n }\n})\n\ntest('query with invalid filter', async (): Promise<void> => {\n // Invalid timestamp min:\n var filter: QueryFilter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp max:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid timestamp range:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: BATCH_MAX,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Zero limit:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: QueryFilterFlags.none,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n\n // Invalid flags:\n filter = {\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n ledger: 0,\n code: 0,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: 0xFFFF,\n }\n assert.deepStrictEqual((await client.queryAccounts(filter)), [])\n assert.deepStrictEqual((await client.queryTransfers(filter)), [])\n})\n\ntest('can import accounts and transfers', async (): Promise<void> => {\n const accountTmp: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n }\n let accountsErrors = await client.createAccounts([accountTmp])\n assert.deepStrictEqual(accountsErrors, [])\n\n let accountLookup = await client.lookupAccounts([accountTmp.id])\n assert.strictEqual(accountLookup.length, 1)\n const timestampMax = accountLookup[0].timestamp\n\n // Wait 10 ms so we can use the account's timestamp as the reference for past time\n // after the last object inserted.\n await new Promise(_ => setTimeout(_, 10));\n\n const accountA: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 1n // user-defined timestamp\n }\n const accountB: Account = {\n id: id(),\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.imported,\n timestamp: timestampMax + 2n // user-defined timestamp\n }\n accountsErrors = await client.createAccounts([accountA, accountB])\n assert.deepStrictEqual(accountsErrors, [])\n\n accountLookup = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accountLookup.length, 2)\n assert.strictEqual(accountLookup[0].timestamp, accountA.timestamp)\n assert.strictEqual(accountLookup[1].timestamp, accountB.timestamp)\n\n const transfer: Transfer = {\n id: id(),\n debit_account_id: accountA.id,\n credit_account_id: accountB.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.imported,\n timestamp: timestampMax + 3n, // user-defined timestamp.\n }\n\n const errors = await client.createTransfers([transfer])\n assert.deepStrictEqual(errors, [])\n\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].timestamp, timestampMax + 3n)\n})\n\ntest('accept zero-length create_accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length create_transfers', async (): Promise<void> => {\n const errors = await client.createTransfers([])\n assert.deepStrictEqual(errors, [])\n})\n\ntest('accept zero-length lookup_accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([])\n assert.deepStrictEqual(accounts, [])\n})\n\ntest('accept zero-length lookup_transfers', async (): Promise<void> => {\n const transfers = await client.lookupTransfers([])\n assert.deepStrictEqual(transfers, [])\n})\n\ntest(\"destroy client in-flight\", async (): Promise<void> => {\n // Non-existing cluster.\n const client = createClient({ cluster_id: 92n, replica_addresses: [\"99\"] });\n setTimeout(() => client.destroy(), 30);\n try {\n await client.lookupAccounts([0n]);\n } catch (error) {\n assert.strictEqual(error.message, \"Client was shutdown.\");\n return;\n }\n throw \"expected an error\";\n});\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tigerbeetle-node",
3
- "version": "0.16.67",
3
+ "version": "0.16.68",
4
4
  "description": "TigerBeetle Node.js client",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -21,7 +21,7 @@
21
21
  "tsconfig.json"
22
22
  ],
23
23
  "engines": {
24
- "node": ">=14.0.0"
24
+ "node": ">=18.0.0"
25
25
  },
26
26
  "scripts": {
27
27
  "prepare": "tsc"
@@ -35,8 +35,8 @@
35
35
  "Joran Dirk Greef <joran@tigerbeetle.com>"
36
36
  ],
37
37
  "devDependencies": {
38
- "@types/node": "^14.14.41",
38
+ "@types/node": "^18.0.0",
39
39
  "node-api-headers": "^0.0.2",
40
- "typescript": "^4.0.2"
40
+ "typescript": "^5.9.3"
41
41
  }
42
42
  }
package/src/index.ts CHANGED
@@ -33,36 +33,23 @@ const binding: Binding = (() => {
33
33
  throw new Error(`Unsupported platform: ${platform}`)
34
34
  }
35
35
 
36
- let extra = ''
36
+ let linuxABI = ''
37
37
 
38
38
  /**
39
39
  * We need to detect during runtime which libc we're running on to load the correct NAPI.
40
40
  * binary.
41
- *
42
- * Rationale: The /proc/self/map_files/ subdirectory contains entries corresponding to
43
- * memory-mapped files loaded by Node.
44
- * https://man7.org/linux/man-pages/man5/proc.5.html: We detect a musl-based distro by
45
- * checking if any library contains the name "musl".
46
- *
47
- * Prior art: https://github.com/xerial/sqlite-jdbc/issues/623
48
41
  */
49
-
50
- const fs = require('fs')
51
- const path = require('path')
52
-
53
42
  if (platform === 'linux') {
54
- extra = '-gnu'
55
-
56
- for (const file of fs.readdirSync("/proc/self/map_files/")) {
57
- const realPath = fs.readlinkSync(path.join("/proc/self/map_files/", file))
58
- if (realPath.includes('musl')) {
59
- extra = '-musl'
60
- break
61
- }
43
+ const glibcVersionRuntime = (process.report.getReport() as any).header.glibcVersionRuntime
44
+ if (glibcVersionRuntime) {
45
+ linuxABI = '-gnu'
46
+ } else {
47
+ linuxABI = '-musl'
62
48
  }
63
49
  }
64
50
 
65
- const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`
51
+ const filename = `./bin/${archMap[arch as keyof typeof archMap]}-` +
52
+ `${platformMap[platform as keyof typeof platformMap]}${linuxABI}/client.node`
66
53
  return require(filename)
67
54
  })()
68
55
 
package/tsconfig.json CHANGED
@@ -13,7 +13,6 @@
13
13
  "inlineSources": true,
14
14
  "skipLibCheck": true,
15
15
  "strictNullChecks": true,
16
- "suppressImplicitAnyIndexErrors": true,
17
16
  "outDir": "./dist"
18
17
  },
19
18
  "files": ["src/index.ts", "src/test.ts", "src/benchmark.ts"]