tigerbeetle-node 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/README.md +3 -2
  2. package/dist/index.d.ts +66 -61
  3. package/dist/index.js +66 -61
  4. package/dist/index.js.map +1 -1
  5. package/package.json +1 -1
  6. package/src/index.ts +5 -0
  7. package/src/node.zig +17 -18
  8. package/src/tigerbeetle/scripts/benchmark.bat +4 -3
  9. package/src/tigerbeetle/scripts/benchmark.sh +25 -10
  10. package/src/tigerbeetle/scripts/install.sh +2 -1
  11. package/src/tigerbeetle/scripts/install_zig.sh +14 -18
  12. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +12 -3
  13. package/src/tigerbeetle/scripts/vopr.sh +5 -5
  14. package/src/tigerbeetle/src/benchmark.zig +17 -9
  15. package/src/tigerbeetle/src/benchmark_array_search.zig +317 -0
  16. package/src/tigerbeetle/src/benchmarks/perf.zig +299 -0
  17. package/src/tigerbeetle/src/c/tb_client/context.zig +103 -0
  18. package/src/tigerbeetle/src/c/tb_client/packet.zig +80 -0
  19. package/src/tigerbeetle/src/c/tb_client/signal.zig +288 -0
  20. package/src/tigerbeetle/src/c/tb_client/thread.zig +329 -0
  21. package/src/tigerbeetle/src/c/tb_client.h +201 -0
  22. package/src/tigerbeetle/src/c/tb_client.zig +101 -0
  23. package/src/tigerbeetle/src/c/test.zig +1 -0
  24. package/src/tigerbeetle/src/cli.zig +142 -83
  25. package/src/tigerbeetle/src/config.zig +119 -10
  26. package/src/tigerbeetle/src/demo.zig +12 -8
  27. package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +2 -2
  28. package/src/tigerbeetle/src/ewah.zig +318 -0
  29. package/src/tigerbeetle/src/ewah_benchmark.zig +121 -0
  30. package/src/tigerbeetle/src/eytzinger_benchmark.zig +317 -0
  31. package/src/tigerbeetle/src/fifo.zig +17 -1
  32. package/src/tigerbeetle/src/io/darwin.zig +12 -10
  33. package/src/tigerbeetle/src/io/linux.zig +25 -9
  34. package/src/tigerbeetle/src/io/windows.zig +13 -9
  35. package/src/tigerbeetle/src/iops.zig +101 -0
  36. package/src/tigerbeetle/src/lsm/binary_search.zig +214 -0
  37. package/src/tigerbeetle/src/lsm/bloom_filter.zig +82 -0
  38. package/src/tigerbeetle/src/lsm/compaction.zig +603 -0
  39. package/src/tigerbeetle/src/lsm/composite_key.zig +75 -0
  40. package/src/tigerbeetle/src/lsm/direction.zig +11 -0
  41. package/src/tigerbeetle/src/lsm/eytzinger.zig +587 -0
  42. package/src/tigerbeetle/src/lsm/forest.zig +630 -0
  43. package/src/tigerbeetle/src/lsm/grid.zig +473 -0
  44. package/src/tigerbeetle/src/lsm/groove.zig +939 -0
  45. package/src/tigerbeetle/src/lsm/k_way_merge.zig +452 -0
  46. package/src/tigerbeetle/src/lsm/level_iterator.zig +296 -0
  47. package/src/tigerbeetle/src/lsm/manifest.zig +680 -0
  48. package/src/tigerbeetle/src/lsm/manifest_level.zig +1169 -0
  49. package/src/tigerbeetle/src/lsm/manifest_log.zig +904 -0
  50. package/src/tigerbeetle/src/lsm/node_pool.zig +231 -0
  51. package/src/tigerbeetle/src/lsm/posted_groove.zig +399 -0
  52. package/src/tigerbeetle/src/lsm/segmented_array.zig +998 -0
  53. package/src/tigerbeetle/src/lsm/set_associative_cache.zig +844 -0
  54. package/src/tigerbeetle/src/lsm/table.zig +932 -0
  55. package/src/tigerbeetle/src/lsm/table_immutable.zig +196 -0
  56. package/src/tigerbeetle/src/lsm/table_iterator.zig +295 -0
  57. package/src/tigerbeetle/src/lsm/table_mutable.zig +123 -0
  58. package/src/tigerbeetle/src/lsm/test.zig +429 -0
  59. package/src/tigerbeetle/src/lsm/tree.zig +1085 -0
  60. package/src/tigerbeetle/src/main.zig +119 -109
  61. package/src/tigerbeetle/src/message_bus.zig +49 -48
  62. package/src/tigerbeetle/src/message_pool.zig +15 -2
  63. package/src/tigerbeetle/src/ring_buffer.zig +126 -30
  64. package/src/tigerbeetle/src/simulator.zig +76 -44
  65. package/src/tigerbeetle/src/state_machine.zig +1022 -585
  66. package/src/tigerbeetle/src/storage.zig +46 -16
  67. package/src/tigerbeetle/src/test/cluster.zig +109 -63
  68. package/src/tigerbeetle/src/test/message_bus.zig +15 -24
  69. package/src/tigerbeetle/src/test/network.zig +26 -17
  70. package/src/tigerbeetle/src/test/state_checker.zig +7 -5
  71. package/src/tigerbeetle/src/test/state_machine.zig +159 -69
  72. package/src/tigerbeetle/src/test/storage.zig +57 -28
  73. package/src/tigerbeetle/src/tigerbeetle.zig +5 -0
  74. package/src/tigerbeetle/src/unit_tests.zig +8 -0
  75. package/src/tigerbeetle/src/util.zig +51 -0
  76. package/src/tigerbeetle/src/vsr/client.zig +21 -7
  77. package/src/tigerbeetle/src/vsr/journal.zig +154 -167
  78. package/src/tigerbeetle/src/vsr/replica.zig +744 -226
  79. package/src/tigerbeetle/src/vsr/superblock.zig +1743 -0
  80. package/src/tigerbeetle/src/vsr/superblock_client_table.zig +258 -0
  81. package/src/tigerbeetle/src/vsr/superblock_free_set.zig +644 -0
  82. package/src/tigerbeetle/src/vsr/superblock_manifest.zig +546 -0
  83. package/src/tigerbeetle/src/vsr.zig +43 -115
package/README.md CHANGED
@@ -243,7 +243,8 @@ npm run benchmark
243
243
  #### Test
244
244
 
245
245
  ```shell
246
- ./tigerbeetle init --cluster=1 --replica=0 --directory=.
247
- ./tigerbeetle start --cluster=1 --replica=0 --directory=. --addresses=3001
246
+ ./tigerbeetle format --cluster=0 --replica=0 ./cluster_0_replica_0_test.tigerbeetle
247
+ ./tigerbeetle start --addresses=3001 ./cluster_0_replica_0_test.tigerbeetle > tigerbeetle_test.log 2>&1
248
248
  npm run test
249
249
  ```
250
+ For more information, type; `./tigerbeetle -h`
package/dist/index.d.ts CHANGED
@@ -27,22 +27,23 @@ export declare enum CreateAccountError {
27
27
  reserved_flag = 2,
28
28
  reserved_field = 3,
29
29
  id_must_not_be_zero = 4,
30
- ledger_must_not_be_zero = 5,
31
- code_must_not_be_zero = 6,
32
- mutually_exclusive_flags = 7,
33
- overflows_debits = 8,
34
- overflows_credits = 9,
35
- exceeds_credits = 10,
36
- exceeds_debits = 11,
37
- exists_with_different_flags = 12,
38
- exists_with_different_user_data = 13,
39
- exists_with_different_ledger = 14,
40
- exists_with_different_code = 15,
41
- exists_with_different_debits_pending = 16,
42
- exists_with_different_debits_posted = 17,
43
- exists_with_different_credits_pending = 18,
44
- exists_with_different_credits_posted = 19,
45
- exists = 20
30
+ id_must_not_be_int_max = 5,
31
+ ledger_must_not_be_zero = 6,
32
+ code_must_not_be_zero = 7,
33
+ mutually_exclusive_flags = 8,
34
+ overflows_debits = 9,
35
+ overflows_credits = 10,
36
+ exceeds_credits = 11,
37
+ exceeds_debits = 12,
38
+ exists_with_different_flags = 13,
39
+ exists_with_different_user_data = 14,
40
+ exists_with_different_ledger = 15,
41
+ exists_with_different_code = 16,
42
+ exists_with_different_debits_pending = 17,
43
+ exists_with_different_debits_posted = 18,
44
+ exists_with_different_credits_pending = 19,
45
+ exists_with_different_credits_posted = 20,
46
+ exists = 21
46
47
  }
47
48
  export declare type CreateAccountsError = {
48
49
  index: number;
@@ -73,51 +74,55 @@ export declare enum CreateTransferError {
73
74
  reserved_flag = 2,
74
75
  reserved_field = 3,
75
76
  id_must_not_be_zero = 4,
76
- debit_account_id_must_not_be_zero = 5,
77
- credit_account_id_must_not_be_zero = 6,
78
- accounts_must_be_different = 7,
79
- pending_id_must_be_zero = 8,
80
- pending_transfer_must_timeout = 9,
81
- ledger_must_not_be_zero = 10,
82
- code_must_not_be_zero = 11,
83
- amount_must_not_be_zero = 12,
84
- debit_account_not_found = 13,
85
- credit_account_not_found = 14,
86
- accounts_must_have_the_same_ledger = 15,
87
- transfer_must_have_the_same_ledger_as_accounts = 16,
88
- exists_with_different_flags = 17,
89
- exists_with_different_debit_account_id = 18,
90
- exists_with_different_credit_account_id = 19,
91
- exists_with_different_user_data = 20,
92
- exists_with_different_pending_id = 21,
93
- exists_with_different_timeout = 22,
94
- exists_with_different_code = 23,
95
- exists_with_different_amount = 24,
96
- exists = 25,
97
- overflows_debits_pending = 26,
98
- overflows_credits_pending = 27,
99
- overflows_debits_posted = 28,
100
- overflows_credits_posted = 29,
101
- overflows_debits = 30,
102
- overflows_credits = 31,
103
- exceeds_credits = 32,
104
- exceeds_debits = 33,
105
- cannot_post_and_void_pending_transfer = 34,
106
- pending_transfer_cannot_post_or_void_another = 35,
107
- timeout_reserved_for_pending_transfer = 36,
108
- pending_id_must_not_be_zero = 37,
109
- pending_id_must_be_different = 38,
110
- pending_transfer_not_found = 39,
111
- pending_transfer_not_pending = 40,
112
- pending_transfer_has_different_debit_account_id = 41,
113
- pending_transfer_has_different_credit_account_id = 42,
114
- pending_transfer_has_different_ledger = 43,
115
- pending_transfer_has_different_code = 44,
116
- exceeds_pending_transfer_amount = 45,
117
- pending_transfer_has_different_amount = 46,
118
- pending_transfer_already_posted = 47,
119
- pending_transfer_already_voided = 48,
120
- pending_transfer_expired = 49
77
+ id_must_not_be_int_max = 5,
78
+ debit_account_id_must_not_be_zero = 6,
79
+ debit_account_id_must_not_be_int_max = 7,
80
+ credit_account_id_must_not_be_zero = 8,
81
+ credit_account_id_must_not_be_int_max = 9,
82
+ accounts_must_be_different = 10,
83
+ pending_id_must_be_zero = 11,
84
+ pending_transfer_must_timeout = 12,
85
+ ledger_must_not_be_zero = 13,
86
+ code_must_not_be_zero = 14,
87
+ amount_must_not_be_zero = 15,
88
+ debit_account_not_found = 16,
89
+ credit_account_not_found = 17,
90
+ accounts_must_have_the_same_ledger = 18,
91
+ transfer_must_have_the_same_ledger_as_accounts = 19,
92
+ exists_with_different_flags = 20,
93
+ exists_with_different_debit_account_id = 21,
94
+ exists_with_different_credit_account_id = 22,
95
+ exists_with_different_user_data = 23,
96
+ exists_with_different_pending_id = 24,
97
+ exists_with_different_timeout = 25,
98
+ exists_with_different_code = 26,
99
+ exists_with_different_amount = 27,
100
+ exists = 28,
101
+ overflows_debits_pending = 29,
102
+ overflows_credits_pending = 30,
103
+ overflows_debits_posted = 31,
104
+ overflows_credits_posted = 32,
105
+ overflows_debits = 33,
106
+ overflows_credits = 34,
107
+ exceeds_credits = 35,
108
+ exceeds_debits = 36,
109
+ cannot_post_and_void_pending_transfer = 37,
110
+ pending_transfer_cannot_post_or_void_another = 38,
111
+ timeout_reserved_for_pending_transfer = 39,
112
+ pending_id_must_not_be_zero = 40,
113
+ pending_id_must_not_be_int_max = 41,
114
+ pending_id_must_be_different = 42,
115
+ pending_transfer_not_found = 43,
116
+ pending_transfer_not_pending = 44,
117
+ pending_transfer_has_different_debit_account_id = 45,
118
+ pending_transfer_has_different_credit_account_id = 46,
119
+ pending_transfer_has_different_ledger = 47,
120
+ pending_transfer_has_different_code = 48,
121
+ exceeds_pending_transfer_amount = 49,
122
+ pending_transfer_has_different_amount = 50,
123
+ pending_transfer_already_posted = 51,
124
+ pending_transfer_already_voided = 52,
125
+ pending_transfer_expired = 53
121
126
  }
122
127
  export declare type CreateTransfersError = {
123
128
  index: number;
package/dist/index.js CHANGED
@@ -14,22 +14,23 @@ var CreateAccountError;
14
14
  CreateAccountError[CreateAccountError["reserved_flag"] = 2] = "reserved_flag";
15
15
  CreateAccountError[CreateAccountError["reserved_field"] = 3] = "reserved_field";
16
16
  CreateAccountError[CreateAccountError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
17
- CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 5] = "ledger_must_not_be_zero";
18
- CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 6] = "code_must_not_be_zero";
19
- CreateAccountError[CreateAccountError["mutually_exclusive_flags"] = 7] = "mutually_exclusive_flags";
20
- CreateAccountError[CreateAccountError["overflows_debits"] = 8] = "overflows_debits";
21
- CreateAccountError[CreateAccountError["overflows_credits"] = 9] = "overflows_credits";
22
- CreateAccountError[CreateAccountError["exceeds_credits"] = 10] = "exceeds_credits";
23
- CreateAccountError[CreateAccountError["exceeds_debits"] = 11] = "exceeds_debits";
24
- CreateAccountError[CreateAccountError["exists_with_different_flags"] = 12] = "exists_with_different_flags";
25
- CreateAccountError[CreateAccountError["exists_with_different_user_data"] = 13] = "exists_with_different_user_data";
26
- CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 14] = "exists_with_different_ledger";
27
- CreateAccountError[CreateAccountError["exists_with_different_code"] = 15] = "exists_with_different_code";
28
- CreateAccountError[CreateAccountError["exists_with_different_debits_pending"] = 16] = "exists_with_different_debits_pending";
29
- CreateAccountError[CreateAccountError["exists_with_different_debits_posted"] = 17] = "exists_with_different_debits_posted";
30
- CreateAccountError[CreateAccountError["exists_with_different_credits_pending"] = 18] = "exists_with_different_credits_pending";
31
- CreateAccountError[CreateAccountError["exists_with_different_credits_posted"] = 19] = "exists_with_different_credits_posted";
32
- CreateAccountError[CreateAccountError["exists"] = 20] = "exists";
17
+ CreateAccountError[CreateAccountError["id_must_not_be_int_max"] = 5] = "id_must_not_be_int_max";
18
+ CreateAccountError[CreateAccountError["ledger_must_not_be_zero"] = 6] = "ledger_must_not_be_zero";
19
+ CreateAccountError[CreateAccountError["code_must_not_be_zero"] = 7] = "code_must_not_be_zero";
20
+ CreateAccountError[CreateAccountError["mutually_exclusive_flags"] = 8] = "mutually_exclusive_flags";
21
+ CreateAccountError[CreateAccountError["overflows_debits"] = 9] = "overflows_debits";
22
+ CreateAccountError[CreateAccountError["overflows_credits"] = 10] = "overflows_credits";
23
+ CreateAccountError[CreateAccountError["exceeds_credits"] = 11] = "exceeds_credits";
24
+ CreateAccountError[CreateAccountError["exceeds_debits"] = 12] = "exceeds_debits";
25
+ CreateAccountError[CreateAccountError["exists_with_different_flags"] = 13] = "exists_with_different_flags";
26
+ CreateAccountError[CreateAccountError["exists_with_different_user_data"] = 14] = "exists_with_different_user_data";
27
+ CreateAccountError[CreateAccountError["exists_with_different_ledger"] = 15] = "exists_with_different_ledger";
28
+ CreateAccountError[CreateAccountError["exists_with_different_code"] = 16] = "exists_with_different_code";
29
+ CreateAccountError[CreateAccountError["exists_with_different_debits_pending"] = 17] = "exists_with_different_debits_pending";
30
+ CreateAccountError[CreateAccountError["exists_with_different_debits_posted"] = 18] = "exists_with_different_debits_posted";
31
+ CreateAccountError[CreateAccountError["exists_with_different_credits_pending"] = 19] = "exists_with_different_credits_pending";
32
+ CreateAccountError[CreateAccountError["exists_with_different_credits_posted"] = 20] = "exists_with_different_credits_posted";
33
+ CreateAccountError[CreateAccountError["exists"] = 21] = "exists";
33
34
  })(CreateAccountError = exports.CreateAccountError || (exports.CreateAccountError = {}));
34
35
  var TransferFlags;
35
36
  (function (TransferFlags) {
@@ -44,51 +45,55 @@ var CreateTransferError;
44
45
  CreateTransferError[CreateTransferError["reserved_flag"] = 2] = "reserved_flag";
45
46
  CreateTransferError[CreateTransferError["reserved_field"] = 3] = "reserved_field";
46
47
  CreateTransferError[CreateTransferError["id_must_not_be_zero"] = 4] = "id_must_not_be_zero";
47
- CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 5] = "debit_account_id_must_not_be_zero";
48
- CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 6] = "credit_account_id_must_not_be_zero";
49
- CreateTransferError[CreateTransferError["accounts_must_be_different"] = 7] = "accounts_must_be_different";
50
- CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 8] = "pending_id_must_be_zero";
51
- CreateTransferError[CreateTransferError["pending_transfer_must_timeout"] = 9] = "pending_transfer_must_timeout";
52
- CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 10] = "ledger_must_not_be_zero";
53
- CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 11] = "code_must_not_be_zero";
54
- CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 12] = "amount_must_not_be_zero";
55
- CreateTransferError[CreateTransferError["debit_account_not_found"] = 13] = "debit_account_not_found";
56
- CreateTransferError[CreateTransferError["credit_account_not_found"] = 14] = "credit_account_not_found";
57
- CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 15] = "accounts_must_have_the_same_ledger";
58
- CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 16] = "transfer_must_have_the_same_ledger_as_accounts";
59
- CreateTransferError[CreateTransferError["exists_with_different_flags"] = 17] = "exists_with_different_flags";
60
- CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 18] = "exists_with_different_debit_account_id";
61
- CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 19] = "exists_with_different_credit_account_id";
62
- CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 20] = "exists_with_different_user_data";
63
- CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 21] = "exists_with_different_pending_id";
64
- CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 22] = "exists_with_different_timeout";
65
- CreateTransferError[CreateTransferError["exists_with_different_code"] = 23] = "exists_with_different_code";
66
- CreateTransferError[CreateTransferError["exists_with_different_amount"] = 24] = "exists_with_different_amount";
67
- CreateTransferError[CreateTransferError["exists"] = 25] = "exists";
68
- CreateTransferError[CreateTransferError["overflows_debits_pending"] = 26] = "overflows_debits_pending";
69
- CreateTransferError[CreateTransferError["overflows_credits_pending"] = 27] = "overflows_credits_pending";
70
- CreateTransferError[CreateTransferError["overflows_debits_posted"] = 28] = "overflows_debits_posted";
71
- CreateTransferError[CreateTransferError["overflows_credits_posted"] = 29] = "overflows_credits_posted";
72
- CreateTransferError[CreateTransferError["overflows_debits"] = 30] = "overflows_debits";
73
- CreateTransferError[CreateTransferError["overflows_credits"] = 31] = "overflows_credits";
74
- CreateTransferError[CreateTransferError["exceeds_credits"] = 32] = "exceeds_credits";
75
- CreateTransferError[CreateTransferError["exceeds_debits"] = 33] = "exceeds_debits";
76
- CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 34] = "cannot_post_and_void_pending_transfer";
77
- CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 35] = "pending_transfer_cannot_post_or_void_another";
78
- CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 36] = "timeout_reserved_for_pending_transfer";
79
- CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 37] = "pending_id_must_not_be_zero";
80
- CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 38] = "pending_id_must_be_different";
81
- CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 39] = "pending_transfer_not_found";
82
- CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 40] = "pending_transfer_not_pending";
83
- CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 41] = "pending_transfer_has_different_debit_account_id";
84
- CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 42] = "pending_transfer_has_different_credit_account_id";
85
- CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 43] = "pending_transfer_has_different_ledger";
86
- CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 44] = "pending_transfer_has_different_code";
87
- CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 45] = "exceeds_pending_transfer_amount";
88
- CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 46] = "pending_transfer_has_different_amount";
89
- CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 47] = "pending_transfer_already_posted";
90
- CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 48] = "pending_transfer_already_voided";
91
- CreateTransferError[CreateTransferError["pending_transfer_expired"] = 49] = "pending_transfer_expired";
48
+ CreateTransferError[CreateTransferError["id_must_not_be_int_max"] = 5] = "id_must_not_be_int_max";
49
+ CreateTransferError[CreateTransferError["debit_account_id_must_not_be_zero"] = 6] = "debit_account_id_must_not_be_zero";
50
+ CreateTransferError[CreateTransferError["debit_account_id_must_not_be_int_max"] = 7] = "debit_account_id_must_not_be_int_max";
51
+ CreateTransferError[CreateTransferError["credit_account_id_must_not_be_zero"] = 8] = "credit_account_id_must_not_be_zero";
52
+ CreateTransferError[CreateTransferError["credit_account_id_must_not_be_int_max"] = 9] = "credit_account_id_must_not_be_int_max";
53
+ CreateTransferError[CreateTransferError["accounts_must_be_different"] = 10] = "accounts_must_be_different";
54
+ CreateTransferError[CreateTransferError["pending_id_must_be_zero"] = 11] = "pending_id_must_be_zero";
55
+ CreateTransferError[CreateTransferError["pending_transfer_must_timeout"] = 12] = "pending_transfer_must_timeout";
56
+ CreateTransferError[CreateTransferError["ledger_must_not_be_zero"] = 13] = "ledger_must_not_be_zero";
57
+ CreateTransferError[CreateTransferError["code_must_not_be_zero"] = 14] = "code_must_not_be_zero";
58
+ CreateTransferError[CreateTransferError["amount_must_not_be_zero"] = 15] = "amount_must_not_be_zero";
59
+ CreateTransferError[CreateTransferError["debit_account_not_found"] = 16] = "debit_account_not_found";
60
+ CreateTransferError[CreateTransferError["credit_account_not_found"] = 17] = "credit_account_not_found";
61
+ CreateTransferError[CreateTransferError["accounts_must_have_the_same_ledger"] = 18] = "accounts_must_have_the_same_ledger";
62
+ CreateTransferError[CreateTransferError["transfer_must_have_the_same_ledger_as_accounts"] = 19] = "transfer_must_have_the_same_ledger_as_accounts";
63
+ CreateTransferError[CreateTransferError["exists_with_different_flags"] = 20] = "exists_with_different_flags";
64
+ CreateTransferError[CreateTransferError["exists_with_different_debit_account_id"] = 21] = "exists_with_different_debit_account_id";
65
+ CreateTransferError[CreateTransferError["exists_with_different_credit_account_id"] = 22] = "exists_with_different_credit_account_id";
66
+ CreateTransferError[CreateTransferError["exists_with_different_user_data"] = 23] = "exists_with_different_user_data";
67
+ CreateTransferError[CreateTransferError["exists_with_different_pending_id"] = 24] = "exists_with_different_pending_id";
68
+ CreateTransferError[CreateTransferError["exists_with_different_timeout"] = 25] = "exists_with_different_timeout";
69
+ CreateTransferError[CreateTransferError["exists_with_different_code"] = 26] = "exists_with_different_code";
70
+ CreateTransferError[CreateTransferError["exists_with_different_amount"] = 27] = "exists_with_different_amount";
71
+ CreateTransferError[CreateTransferError["exists"] = 28] = "exists";
72
+ CreateTransferError[CreateTransferError["overflows_debits_pending"] = 29] = "overflows_debits_pending";
73
+ CreateTransferError[CreateTransferError["overflows_credits_pending"] = 30] = "overflows_credits_pending";
74
+ CreateTransferError[CreateTransferError["overflows_debits_posted"] = 31] = "overflows_debits_posted";
75
+ CreateTransferError[CreateTransferError["overflows_credits_posted"] = 32] = "overflows_credits_posted";
76
+ CreateTransferError[CreateTransferError["overflows_debits"] = 33] = "overflows_debits";
77
+ CreateTransferError[CreateTransferError["overflows_credits"] = 34] = "overflows_credits";
78
+ CreateTransferError[CreateTransferError["exceeds_credits"] = 35] = "exceeds_credits";
79
+ CreateTransferError[CreateTransferError["exceeds_debits"] = 36] = "exceeds_debits";
80
+ CreateTransferError[CreateTransferError["cannot_post_and_void_pending_transfer"] = 37] = "cannot_post_and_void_pending_transfer";
81
+ CreateTransferError[CreateTransferError["pending_transfer_cannot_post_or_void_another"] = 38] = "pending_transfer_cannot_post_or_void_another";
82
+ CreateTransferError[CreateTransferError["timeout_reserved_for_pending_transfer"] = 39] = "timeout_reserved_for_pending_transfer";
83
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_zero"] = 40] = "pending_id_must_not_be_zero";
84
+ CreateTransferError[CreateTransferError["pending_id_must_not_be_int_max"] = 41] = "pending_id_must_not_be_int_max";
85
+ CreateTransferError[CreateTransferError["pending_id_must_be_different"] = 42] = "pending_id_must_be_different";
86
+ CreateTransferError[CreateTransferError["pending_transfer_not_found"] = 43] = "pending_transfer_not_found";
87
+ CreateTransferError[CreateTransferError["pending_transfer_not_pending"] = 44] = "pending_transfer_not_pending";
88
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_debit_account_id"] = 45] = "pending_transfer_has_different_debit_account_id";
89
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_credit_account_id"] = 46] = "pending_transfer_has_different_credit_account_id";
90
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_ledger"] = 47] = "pending_transfer_has_different_ledger";
91
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_code"] = 48] = "pending_transfer_has_different_code";
92
+ CreateTransferError[CreateTransferError["exceeds_pending_transfer_amount"] = 49] = "exceeds_pending_transfer_amount";
93
+ CreateTransferError[CreateTransferError["pending_transfer_has_different_amount"] = 50] = "pending_transfer_has_different_amount";
94
+ CreateTransferError[CreateTransferError["pending_transfer_already_posted"] = 51] = "pending_transfer_already_posted";
95
+ CreateTransferError[CreateTransferError["pending_transfer_already_voided"] = 52] = "pending_transfer_already_voided";
96
+ CreateTransferError[CreateTransferError["pending_transfer_expired"] = 53] = "pending_transfer_expired";
92
97
  })(CreateTransferError = exports.CreateTransferError || (exports.CreateTransferError = {}));
93
98
  var Operation;
94
99
  (function (Operation) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n ledger: number // u32, ledger of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u16\n debits_pending: bigint // u64\n debits_posted: bigint // u64\n credits_pending: bigint // u64\n credits_posted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n\n mutually_exclusive_flags,\n\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n exists_with_different_flags,\n exists_with_different_user_data,\n exists_with_different_ledger,\n exists_with_different_code,\n exists_with_different_debits_pending,\n exists_with_different_debits_posted,\n exists_with_different_credits_pending,\n exists_with_different_credits_posted,\n exists,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: bigint, // u128\n pending_id: bigint, // u128\n timeout: bigint, // u64, In nanoseconds.\n ledger: number // u32, The ledger of value.\n code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).\n flags: number, // u16\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n pending = (1 << 1),\n post_pending_transfer = (1 << 2),\n void_pending_transfer = (1 << 3)\n}\n\nexport enum CreateTransferError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n debit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_zero,\n accounts_must_be_different,\n\n pending_id_must_be_zero,\n pending_transfer_must_timeout,\n\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n amount_must_not_be_zero,\n\n debit_account_not_found,\n credit_account_not_found,\n\n accounts_must_have_the_same_ledger,\n transfer_must_have_the_same_ledger_as_accounts,\n\n exists_with_different_flags,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_pending_id,\n exists_with_different_timeout,\n exists_with_different_code,\n exists_with_different_amount,\n exists,\n\n overflows_debits_pending,\n overflows_credits_pending,\n overflows_debits_posted,\n overflows_credits_posted,\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n cannot_post_and_void_pending_transfer,\n pending_transfer_cannot_post_or_void_another,\n timeout_reserved_for_pending_transfer,\n\n pending_id_must_not_be_zero,\n pending_id_must_be_different,\n\n pending_transfer_not_found,\n pending_transfer_not_pending,\n\n pending_transfer_has_different_debit_account_id,\n pending_transfer_has_different_credit_account_id,\n pending_transfer_has_different_ledger,\n pending_transfer_has_different_code,\n\n exceeds_pending_transfer_amount,\n pending_transfer_has_different_amount,\n\n pending_transfer_already_posted,\n pending_transfer_already_voided,\n\n pending_transfer_expired,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id && isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["const binding: Binding = require('./client.node')\ninterface Binding {\n init: (args: BindingInitArgs) => Context\n request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void\n raw_request: (context: Context, operation: Operation, raw_batch: Buffer, result: ResultCallback) => void\n tick: (context: Context) => void,\n deinit: (context: Context) => void,\n tick_ms: number\n}\n\ninterface BindingInitArgs {\n cluster_id: number, // u32\n replica_addresses: Buffer,\n}\n\nexport interface InitArgs {\n cluster_id: number, // u32\n replica_addresses: Array<string | number>,\n}\n\nexport type Context = object\n\nexport type Account = {\n id: bigint // u128\n user_data: bigint // u128\n reserved: Buffer // [48]u8\n ledger: number // u32, ledger of value\n code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)\n flags: number // u16\n debits_pending: bigint // u64\n debits_posted: bigint // u64\n credits_pending: bigint // u64\n credits_posted: bigint // u64\n timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server\n}\n\nexport enum AccountFlags {\n linked = (1 << 0),\n debits_must_not_exceed_credits = (1 << 1),\n credits_must_not_exceed_debits = (1 << 2)\n}\n\nexport enum CreateAccountError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n\n mutually_exclusive_flags,\n\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n exists_with_different_flags,\n exists_with_different_user_data,\n exists_with_different_ledger,\n exists_with_different_code,\n exists_with_different_debits_pending,\n exists_with_different_debits_posted,\n exists_with_different_credits_pending,\n exists_with_different_credits_posted,\n exists,\n}\n\nexport type CreateAccountsError = {\n index: number,\n code: CreateAccountError,\n}\n\nexport type Transfer = {\n id: bigint, // u128\n debit_account_id: bigint, // u128\n credit_account_id: bigint, // u128\n user_data: bigint, // u128\n reserved: bigint, // u128\n pending_id: bigint, // u128\n timeout: bigint, // u64, In nanoseconds.\n ledger: number // u32, The ledger of value.\n code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).\n flags: number, // u16\n amount: bigint, // u64,\n timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.\n}\n\nexport enum TransferFlags {\n linked = (1 << 0),\n pending = (1 << 1),\n post_pending_transfer = (1 << 2),\n void_pending_transfer = (1 << 3)\n}\n\nexport enum CreateTransferError {\n // ok = 0 (No Error)\n linked_event_failed = 1,\n\n reserved_flag,\n reserved_field,\n\n id_must_not_be_zero,\n id_must_not_be_int_max,\n debit_account_id_must_not_be_zero,\n debit_account_id_must_not_be_int_max,\n credit_account_id_must_not_be_zero,\n credit_account_id_must_not_be_int_max,\n accounts_must_be_different,\n\n pending_id_must_be_zero,\n pending_transfer_must_timeout,\n\n ledger_must_not_be_zero,\n code_must_not_be_zero,\n amount_must_not_be_zero,\n\n debit_account_not_found,\n credit_account_not_found,\n\n accounts_must_have_the_same_ledger,\n transfer_must_have_the_same_ledger_as_accounts,\n\n exists_with_different_flags,\n exists_with_different_debit_account_id,\n exists_with_different_credit_account_id,\n exists_with_different_user_data,\n exists_with_different_pending_id,\n exists_with_different_timeout,\n exists_with_different_code,\n exists_with_different_amount,\n exists,\n\n overflows_debits_pending,\n overflows_credits_pending,\n overflows_debits_posted,\n overflows_credits_posted,\n overflows_debits,\n overflows_credits,\n\n exceeds_credits,\n exceeds_debits,\n\n cannot_post_and_void_pending_transfer,\n pending_transfer_cannot_post_or_void_another,\n timeout_reserved_for_pending_transfer,\n\n pending_id_must_not_be_zero,\n pending_id_must_not_be_int_max,\n pending_id_must_be_different,\n\n pending_transfer_not_found,\n pending_transfer_not_pending,\n\n pending_transfer_has_different_debit_account_id,\n pending_transfer_has_different_credit_account_id,\n pending_transfer_has_different_ledger,\n pending_transfer_has_different_code,\n\n exceeds_pending_transfer_amount,\n pending_transfer_has_different_amount,\n\n pending_transfer_already_posted,\n pending_transfer_already_voided,\n\n pending_transfer_expired,\n}\n\nexport type CreateTransfersError = {\n index: number,\n code: CreateTransferError,\n}\n\nexport type AccountID = bigint // u128\nexport type TransferID = bigint // u128\n\nexport type Event = Account | Transfer | AccountID | TransferID\nexport type Result = CreateAccountsError | CreateTransfersError | Account | Transfer\nexport type ResultCallback = (error: undefined | Error, results: Result[]) => void\n\nexport enum Operation {\n CREATE_ACCOUNT = 3,\n CREATE_TRANSFER,\n ACCOUNT_LOOKUP,\n TRANSFER_LOOKUP\n}\n\nexport interface Client {\n createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>\n createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>\n lookupAccounts: (batch: AccountID[]) => Promise<Account[]>\n lookupTransfers: (batch: TransferID[]) => Promise<Transfer[]>\n request: (operation: Operation, batch: Event[], callback: ResultCallback) => void\n rawRequest: (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => void\n destroy: () => void\n}\n\nlet _args: InitArgs | undefined = undefined\nconst isSameArgs = (args: InitArgs): boolean => {\n if (typeof _args === 'undefined') {\n return false\n }\n\n if (_args.replica_addresses.length !== args.replica_addresses.length) {\n return false\n }\n\n let isSameReplicas = true\n args.replica_addresses.forEach((entry, index) => {\n if (_args?.replica_addresses[index] !== entry) {\n isSameReplicas = false\n }\n })\n\n return args.cluster_id === _args.cluster_id && isSameReplicas\n}\n\nlet _client: Client | undefined = undefined\nlet _interval: NodeJS.Timeout | undefined = undefined\n// Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\nlet _pinged = false\n// TODO: allow creation of clients if the arguments are different. Will require changes in node.zig as well.\nexport function createClient (args: InitArgs): Client {\n const duplicateArgs = isSameArgs(args)\n if (!duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with different arguments.')\n }\n\n if (duplicateArgs && typeof _client !== 'undefined'){\n throw new Error('Client has already been initialized with the same arguments.')\n }\n\n _args = Object.assign({}, { ...args })\n const context = binding.init({\n ...args,\n replica_addresses: Buffer.from(args.replica_addresses.join(','))\n })\n\n const request = (operation: Operation, batch: Event[], callback: ResultCallback) => {\n binding.request(context, operation, batch, callback)\n }\n\n const rawRequest = (operation: Operation, rawBatch: Buffer, callback: ResultCallback) => {\n binding.raw_request(context, operation, rawBatch, callback)\n }\n\n const createAccounts = async (batch: Account[]): Promise<CreateAccountsError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateAccountsError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const createTransfers = async (batch: Transfer[]): Promise<CreateTransfersError[]> => {\n // Here to wait until `ping` is sent to server so that connection is registered - temporary till client table and sessions are implemented.\n if (!_pinged) {\n await new Promise<void>(resolve => {\n setTimeout(() => {\n _pinged = true\n resolve()\n }, 600)\n })\n }\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: CreateTransfersError[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.CREATE_TRANSFER, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupAccounts = async (batch: AccountID[]): Promise<Account[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Account[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const lookupTransfers = async (batch: TransferID[]): Promise<Transfer[]> => {\n return new Promise((resolve, reject) => {\n const callback = (error: undefined | Error, results: Transfer[]) => {\n if (error) {\n reject(error)\n return\n }\n resolve(results)\n }\n\n try {\n binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)\n } catch (error) {\n reject(error)\n }\n })\n }\n\n const destroy = (): void => {\n binding.deinit(context)\n if (_interval){\n clearInterval(_interval)\n }\n _client = undefined\n }\n\n _client = {\n createAccounts,\n createTransfers,\n lookupAccounts,\n lookupTransfers,\n request,\n rawRequest,\n destroy\n }\n\n _interval = setInterval(() => {\n binding.tick(context)\n }, binding.tick_ms)\n\n return _client\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tigerbeetle-node",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "TigerBeetle Node.js client",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
package/src/index.ts CHANGED
@@ -48,6 +48,7 @@ export enum CreateAccountError {
48
48
  reserved_field,
49
49
 
50
50
  id_must_not_be_zero,
51
+ id_must_not_be_int_max,
51
52
  ledger_must_not_be_zero,
52
53
  code_must_not_be_zero,
53
54
 
@@ -105,8 +106,11 @@ export enum CreateTransferError {
105
106
  reserved_field,
106
107
 
107
108
  id_must_not_be_zero,
109
+ id_must_not_be_int_max,
108
110
  debit_account_id_must_not_be_zero,
111
+ debit_account_id_must_not_be_int_max,
109
112
  credit_account_id_must_not_be_zero,
113
+ credit_account_id_must_not_be_int_max,
110
114
  accounts_must_be_different,
111
115
 
112
116
  pending_id_must_be_zero,
@@ -147,6 +151,7 @@ export enum CreateTransferError {
147
151
  timeout_reserved_for_pending_transfer,
148
152
 
149
153
  pending_id_must_not_be_zero,
154
+ pending_id_must_not_be_int_max,
150
155
  pending_id_must_be_different,
151
156
 
152
157
  pending_transfer_not_found,
package/src/node.zig CHANGED
@@ -12,9 +12,11 @@ const TransferFlags = tb.TransferFlags;
12
12
  const CreateAccountsResult = tb.CreateAccountsResult;
13
13
  const CreateTransfersResult = tb.CreateTransfersResult;
14
14
 
15
- const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachine;
15
+ const Storage = @import("tigerbeetle/src/storage.zig").Storage;
16
+ const StateMachine = @import("tigerbeetle/src/state_machine.zig").StateMachineType(Storage);
16
17
  const Operation = StateMachine.Operation;
17
18
  const MessageBus = @import("tigerbeetle/src/message_bus.zig").MessageBusClient;
19
+ const MessagePool = @import("tigerbeetle/src/message_pool.zig").MessagePool;
18
20
  const IO = @import("tigerbeetle/src/io.zig").IO;
19
21
  const config = @import("tigerbeetle/src/config.zig");
20
22
 
@@ -118,8 +120,8 @@ fn globalsCast(globals_raw: *anyopaque) *Globals {
118
120
  const Context = struct {
119
121
  io: *IO,
120
122
  addresses: []std.net.Address,
121
- message_bus: MessageBus,
122
123
  client: Client,
124
+ message_pool: MessagePool,
123
125
 
124
126
  fn create(
125
127
  env: c.napi_env,
@@ -132,32 +134,26 @@ const Context = struct {
132
134
  errdefer allocator.destroy(context);
133
135
 
134
136
  context.io = io;
137
+ context.message_pool = try MessagePool.init(allocator, .client);
138
+ errdefer context.message_pool.deinit(allocator);
135
139
 
136
140
  context.addresses = try vsr.parse_addresses(allocator, addresses_raw);
137
141
  errdefer allocator.free(context.addresses);
138
142
  assert(context.addresses.len > 0);
139
143
 
140
144
  const client_id = std.crypto.random.int(u128);
141
-
142
- context.message_bus = try MessageBus.init(
143
- allocator,
144
- cluster,
145
- context.addresses,
146
- client_id,
147
- context.io,
148
- );
149
- errdefer context.message_bus.deinit();
150
-
151
145
  context.client = try Client.init(
152
146
  allocator,
153
147
  client_id,
154
148
  cluster,
155
149
  @intCast(u8, context.addresses.len),
156
- &context.message_bus,
150
+ &context.message_pool,
151
+ .{
152
+ .configuration = context.addresses,
153
+ .io = context.io,
154
+ },
157
155
  );
158
- errdefer context.client.deinit();
159
-
160
- context.message_bus.set_on_message(*Client, &context.client, Client.on_message);
156
+ defer context.client.deinit(allocator);
161
157
 
162
158
  return try translate.create_external(env, context);
163
159
  }
@@ -769,8 +765,11 @@ fn deinit(env: c.napi_env, info: c.napi_callback_info) callconv(.C) c.napi_value
769
765
  "Failed to get Client Context pointer.",
770
766
  ) catch return null;
771
767
  const context = contextCast(context_raw.?) catch return null;
772
- context.client.deinit();
773
- context.message_bus.deinit();
768
+
769
+ const allocator = std.heap.c_allocator;
770
+ context.client.deinit(allocator);
771
+ context.message_pool.deinit(allocator);
772
+ allocator.free(context.addresses);
774
773
 
775
774
  return null;
776
775
  }
@@ -27,14 +27,15 @@ move zig-out\bin\tigerbeetle.exe . >nul
27
27
 
28
28
  for /l %%i in (0, 1, 0) do (
29
29
  echo Initializing replica %%i
30
- set ZIG_FILE=.\cluster_0000000000_replica_00%%i.tigerbeetle
30
+ set ZIG_FILE=.\0_%%i.tigerbeetle.benchmark
31
31
  if exist "!ZIG_FILE!" DEL /F "!ZIG_FILE!"
32
- .\tigerbeetle.exe init --directory=. --cluster=0 --replica=%%i > benchmark.log 2>&1
32
+ .\tigerbeetle.exe format --cluster=0 --replica=%%i !ZIG_FILE! > benchmark.log 2>&1
33
33
  )
34
34
 
35
35
  for /l %%i in (0, 1, 0) do (
36
36
  echo Starting replica %%i
37
- start /B "tigerbeetle_%%i" .\tigerbeetle.exe start --directory=. --cluster=0 --addresses=3001 --replica=%%i > benchmark.log 2>&1
37
+ set ZIG_FILE=.\0_%%i.tigerbeetle.benchmark
38
+ start /B "tigerbeetle_%%i" .\tigerbeetle.exe start --addresses=3001 !ZIG_FILE! > benchmark.log 2>&1
38
39
  )
39
40
 
40
41
  rem Wait for replicas to start, listen and connect:
@@ -1,5 +1,8 @@
1
1
  #!/usr/bin/env bash
2
- set -e
2
+ set -eEuo pipefail
3
+
4
+ # Number of replicas to benchmark
5
+ REPLICAS=${REPLICAS:-0}
3
6
 
4
7
  # Install Zig if it does not already exist:
5
8
  if [ ! -d "zig" ]; then
@@ -22,7 +25,7 @@ function onerror {
22
25
  cat benchmark.log
23
26
  fi
24
27
 
25
- for I in 0
28
+ for I in $REPLICAS
26
29
  do
27
30
  echo "Stopping replica $I..."
28
31
  done
@@ -30,20 +33,24 @@ function onerror {
30
33
  }
31
34
  trap onerror EXIT
32
35
 
33
- for I in 0
36
+ for I in $REPLICAS
34
37
  do
35
- echo "Initializing replica $I..."
36
- FILE="./cluster_0000000000_replica_00${I}.tigerbeetle"
37
- if [ -f $FILE ]; then
38
- rm $FILE
38
+ echo "Formatting replica $I..."
39
+
40
+ # Be careful to use a benchmark-specific filename so that we don't erase a real data file:
41
+ FILE="./0_${I}.tigerbeetle.benchmark"
42
+ if [ -f "$FILE" ]; then
43
+ rm "$FILE"
39
44
  fi
40
- ./tigerbeetle init --directory=. --cluster=0 --replica=$I > benchmark.log 2>&1
45
+
46
+ ./tigerbeetle format --cluster=0 --replica="$I" "$FILE" > benchmark.log 2>&1
41
47
  done
42
48
 
43
- for I in 0
49
+ for I in $REPLICAS
44
50
  do
45
51
  echo "Starting replica $I..."
46
- ./tigerbeetle start --directory=. --cluster=0 --addresses=3001 --replica=$I > benchmark.log 2>&1 &
52
+ FILE="./0_${I}.tigerbeetle.benchmark"
53
+ ./tigerbeetle start --addresses=3001 "$FILE" > benchmark.log 2>&1 &
47
54
  done
48
55
 
49
56
  # Wait for replicas to start, listen and connect:
@@ -53,3 +60,11 @@ echo ""
53
60
  echo "Benchmarking..."
54
61
  zig/zig run -OReleaseSafe src/benchmark.zig
55
62
  echo ""
63
+
64
+ for I in 0
65
+ do
66
+ FILE="./0_${I}.tigerbeetle.benchmark"
67
+ if [ -f $FILE ]; then
68
+ rm $FILE
69
+ fi
70
+ done
@@ -1,5 +1,6 @@
1
1
  #!/bin/bash
2
- set -e
2
+ set -eEuo pipefail
3
+
3
4
  scripts/install_zig.sh
4
5
  echo "Building TigerBeetle..."
5
6
  zig/zig build -Dcpu=baseline -Drelease-safe