tigerbeetle-node 0.9.0 → 0.9.143

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 (79) hide show
  1. package/README.md +580 -179
  2. package/dist/benchmark.js +44 -36
  3. package/dist/benchmark.js.map +1 -1
  4. package/dist/bin/aarch64-linux-gnu/client.node +0 -0
  5. package/dist/bin/aarch64-linux-musl/client.node +0 -0
  6. package/dist/bin/aarch64-macos/client.node +0 -0
  7. package/dist/bin/x86_64-linux-gnu/client.node +0 -0
  8. package/dist/bin/x86_64-linux-musl/client.node +0 -0
  9. package/dist/bin/x86_64-macos/client.node +0 -0
  10. package/dist/bin/x86_64-windows/client.node +0 -0
  11. package/dist/bindings.d.ts +141 -0
  12. package/dist/bindings.js +112 -0
  13. package/dist/bindings.js.map +1 -0
  14. package/dist/index.d.ts +2 -125
  15. package/dist/index.js +51 -101
  16. package/dist/index.js.map +1 -1
  17. package/dist/test.js +68 -54
  18. package/dist/test.js.map +1 -1
  19. package/package-lock.json +26 -0
  20. package/package.json +13 -22
  21. package/src/benchmark.ts +58 -49
  22. package/src/bindings.ts +631 -0
  23. package/src/index.ts +71 -163
  24. package/src/node.zig +169 -148
  25. package/src/test.ts +71 -57
  26. package/src/translate.zig +19 -36
  27. package/scripts/download_node_headers.sh +0 -25
  28. package/src/tigerbeetle/scripts/benchmark.bat +0 -46
  29. package/src/tigerbeetle/scripts/benchmark.sh +0 -55
  30. package/src/tigerbeetle/scripts/install.sh +0 -6
  31. package/src/tigerbeetle/scripts/install_zig.bat +0 -109
  32. package/src/tigerbeetle/scripts/install_zig.sh +0 -84
  33. package/src/tigerbeetle/scripts/lint.zig +0 -199
  34. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -39
  35. package/src/tigerbeetle/scripts/vopr.bat +0 -48
  36. package/src/tigerbeetle/scripts/vopr.sh +0 -33
  37. package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
  38. package/src/tigerbeetle/src/benchmark.zig +0 -290
  39. package/src/tigerbeetle/src/cli.zig +0 -244
  40. package/src/tigerbeetle/src/config.zig +0 -239
  41. package/src/tigerbeetle/src/demo.zig +0 -125
  42. package/src/tigerbeetle/src/demo_01_create_accounts.zig +0 -35
  43. package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +0 -7
  44. package/src/tigerbeetle/src/demo_03_create_transfers.zig +0 -24
  45. package/src/tigerbeetle/src/demo_04_create_pending_transfers.zig +0 -61
  46. package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +0 -37
  47. package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +0 -24
  48. package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +0 -7
  49. package/src/tigerbeetle/src/fifo.zig +0 -104
  50. package/src/tigerbeetle/src/io/benchmark.zig +0 -213
  51. package/src/tigerbeetle/src/io/darwin.zig +0 -793
  52. package/src/tigerbeetle/src/io/linux.zig +0 -1038
  53. package/src/tigerbeetle/src/io/test.zig +0 -643
  54. package/src/tigerbeetle/src/io/windows.zig +0 -1161
  55. package/src/tigerbeetle/src/io.zig +0 -34
  56. package/src/tigerbeetle/src/main.zig +0 -144
  57. package/src/tigerbeetle/src/message_bus.zig +0 -1000
  58. package/src/tigerbeetle/src/message_pool.zig +0 -142
  59. package/src/tigerbeetle/src/ring_buffer.zig +0 -289
  60. package/src/tigerbeetle/src/simulator.zig +0 -417
  61. package/src/tigerbeetle/src/state_machine.zig +0 -2470
  62. package/src/tigerbeetle/src/storage.zig +0 -308
  63. package/src/tigerbeetle/src/test/cluster.zig +0 -351
  64. package/src/tigerbeetle/src/test/message_bus.zig +0 -93
  65. package/src/tigerbeetle/src/test/network.zig +0 -179
  66. package/src/tigerbeetle/src/test/packet_simulator.zig +0 -387
  67. package/src/tigerbeetle/src/test/state_checker.zig +0 -145
  68. package/src/tigerbeetle/src/test/state_machine.zig +0 -76
  69. package/src/tigerbeetle/src/test/storage.zig +0 -438
  70. package/src/tigerbeetle/src/test/time.zig +0 -84
  71. package/src/tigerbeetle/src/tigerbeetle.zig +0 -222
  72. package/src/tigerbeetle/src/time.zig +0 -113
  73. package/src/tigerbeetle/src/unit_tests.zig +0 -14
  74. package/src/tigerbeetle/src/vsr/client.zig +0 -505
  75. package/src/tigerbeetle/src/vsr/clock.zig +0 -812
  76. package/src/tigerbeetle/src/vsr/journal.zig +0 -2293
  77. package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
  78. package/src/tigerbeetle/src/vsr/replica.zig +0 -5015
  79. package/src/tigerbeetle/src/vsr.zig +0 -1017
package/src/index.ts CHANGED
@@ -1,4 +1,69 @@
1
- const binding: Binding = require('./client.node')
1
+ export * from './bindings'
2
+ import {
3
+ Account,
4
+ Transfer,
5
+ CreateAccountsError,
6
+ CreateTransfersError,
7
+ Operation,
8
+ } from './bindings'
9
+
10
+ function getBinding (): Binding {
11
+ const { arch, platform } = process
12
+
13
+ const archMap = {
14
+ "arm64": "aarch64",
15
+ "x64": "x86_64"
16
+ }
17
+
18
+ const platformMap = {
19
+ "linux": "linux",
20
+ "darwin": "macos",
21
+ "win32" : "windows",
22
+ }
23
+
24
+ if (! (arch in archMap)) {
25
+ throw new Error(`Unsupported arch: ${arch}`)
26
+ }
27
+
28
+ if (! (platform in platformMap)) {
29
+ throw new Error(`Unsupported platform: ${platform}`)
30
+ }
31
+
32
+ let extra = ''
33
+
34
+ /**
35
+ * We need to detect during runtime which libc we're running on to load the correct NAPI.
36
+ * binary.
37
+ *
38
+ * Rationale: The /proc/self/map_files/ subdirectory contains entries corresponding to
39
+ * memory-mapped files loaded by Node.
40
+ * https://man7.org/linux/man-pages/man5/proc.5.html: We detect a musl-based distro by
41
+ * checking if any library contains the name "musl".
42
+ *
43
+ * Prior art: https://github.com/xerial/sqlite-jdbc/issues/623
44
+ */
45
+
46
+ const fs = require('fs')
47
+ const path = require('path')
48
+
49
+ if (platform === 'linux') {
50
+ extra = '-gnu'
51
+
52
+ for (const file of fs.readdirSync("/proc/self/map_files/")) {
53
+ const realPath = fs.readlinkSync(path.join("/proc/self/map_files/", file))
54
+ if (realPath.includes('musl')) {
55
+ extra = '-musl'
56
+ break
57
+ }
58
+ }
59
+ }
60
+
61
+ const filename = `./bin/${archMap[arch]}-${platformMap[platform]}${extra}/client.node`
62
+ return require(filename)
63
+ }
64
+
65
+ const binding = getBinding()
66
+
2
67
  interface Binding {
3
68
  init: (args: BindingInitArgs) => Context
4
69
  request: (context: Context, operation: Operation, batch: Event[], result: ResultCallback) => void
@@ -20,171 +85,14 @@ export interface InitArgs {
20
85
 
21
86
  export type Context = object
22
87
 
23
- export type Account = {
24
- id: bigint // u128
25
- user_data: bigint // u128
26
- reserved: Buffer // [48]u8
27
- ledger: number // u32, ledger of value
28
- code: number // u16, A chart of accounts code describing the type of account (e.g. clearing, settlement)
29
- flags: number // u16
30
- debits_pending: bigint // u64
31
- debits_posted: bigint // u64
32
- credits_pending: bigint // u64
33
- credits_posted: bigint // u64
34
- timestamp: bigint // u64, Set this to 0n - the actual value will be set by TigerBeetle server
35
- }
36
-
37
- export enum AccountFlags {
38
- linked = (1 << 0),
39
- debits_must_not_exceed_credits = (1 << 1),
40
- credits_must_not_exceed_debits = (1 << 2)
41
- }
42
-
43
- export enum CreateAccountError {
44
- // ok = 0 (No Error)
45
- linked_event_failed = 1,
46
-
47
- reserved_flag,
48
- reserved_field,
49
-
50
- id_must_not_be_zero,
51
- ledger_must_not_be_zero,
52
- code_must_not_be_zero,
53
-
54
- mutually_exclusive_flags,
55
-
56
- overflows_debits,
57
- overflows_credits,
58
-
59
- exceeds_credits,
60
- exceeds_debits,
61
-
62
- exists_with_different_flags,
63
- exists_with_different_user_data,
64
- exists_with_different_ledger,
65
- exists_with_different_code,
66
- exists_with_different_debits_pending,
67
- exists_with_different_debits_posted,
68
- exists_with_different_credits_pending,
69
- exists_with_different_credits_posted,
70
- exists,
71
- }
72
-
73
- export type CreateAccountsError = {
74
- index: number,
75
- code: CreateAccountError,
76
- }
77
-
78
- export type Transfer = {
79
- id: bigint, // u128
80
- debit_account_id: bigint, // u128
81
- credit_account_id: bigint, // u128
82
- user_data: bigint, // u128
83
- reserved: bigint, // u128
84
- pending_id: bigint, // u128
85
- timeout: bigint, // u64, In nanoseconds.
86
- ledger: number // u32, The ledger of value.
87
- code: number, // u16, A user-defined accounting code to describe the type of transfer (e.g. settlement).
88
- flags: number, // u16
89
- amount: bigint, // u64,
90
- timestamp: bigint, // u64, Set this to 0n - the timestamp will be set by TigerBeetle.
91
- }
92
-
93
- export enum TransferFlags {
94
- linked = (1 << 0),
95
- pending = (1 << 1),
96
- post_pending_transfer = (1 << 2),
97
- void_pending_transfer = (1 << 3)
98
- }
99
-
100
- export enum CreateTransferError {
101
- // ok = 0 (No Error)
102
- linked_event_failed = 1,
103
-
104
- reserved_flag,
105
- reserved_field,
106
-
107
- id_must_not_be_zero,
108
- debit_account_id_must_not_be_zero,
109
- credit_account_id_must_not_be_zero,
110
- accounts_must_be_different,
111
-
112
- pending_id_must_be_zero,
113
- pending_transfer_must_timeout,
114
-
115
- ledger_must_not_be_zero,
116
- code_must_not_be_zero,
117
- amount_must_not_be_zero,
118
-
119
- debit_account_not_found,
120
- credit_account_not_found,
121
-
122
- accounts_must_have_the_same_ledger,
123
- transfer_must_have_the_same_ledger_as_accounts,
124
-
125
- exists_with_different_flags,
126
- exists_with_different_debit_account_id,
127
- exists_with_different_credit_account_id,
128
- exists_with_different_user_data,
129
- exists_with_different_pending_id,
130
- exists_with_different_timeout,
131
- exists_with_different_code,
132
- exists_with_different_amount,
133
- exists,
134
-
135
- overflows_debits_pending,
136
- overflows_credits_pending,
137
- overflows_debits_posted,
138
- overflows_credits_posted,
139
- overflows_debits,
140
- overflows_credits,
141
-
142
- exceeds_credits,
143
- exceeds_debits,
144
-
145
- cannot_post_and_void_pending_transfer,
146
- pending_transfer_cannot_post_or_void_another,
147
- timeout_reserved_for_pending_transfer,
148
-
149
- pending_id_must_not_be_zero,
150
- pending_id_must_be_different,
151
-
152
- pending_transfer_not_found,
153
- pending_transfer_not_pending,
154
-
155
- pending_transfer_has_different_debit_account_id,
156
- pending_transfer_has_different_credit_account_id,
157
- pending_transfer_has_different_ledger,
158
- pending_transfer_has_different_code,
159
-
160
- exceeds_pending_transfer_amount,
161
- pending_transfer_has_different_amount,
162
-
163
- pending_transfer_already_posted,
164
- pending_transfer_already_voided,
165
-
166
- pending_transfer_expired,
167
- }
168
-
169
- export type CreateTransfersError = {
170
- index: number,
171
- code: CreateTransferError,
172
- }
173
-
174
88
  export type AccountID = bigint // u128
175
89
  export type TransferID = bigint // u128
176
90
 
177
91
  export type Event = Account | Transfer | AccountID | TransferID
178
92
  export type Result = CreateAccountsError | CreateTransfersError | Account | Transfer
93
+ // Note: as of #990, the error is always `undefined` here.
179
94
  export type ResultCallback = (error: undefined | Error, results: Result[]) => void
180
95
 
181
- export enum Operation {
182
- CREATE_ACCOUNT = 3,
183
- CREATE_TRANSFER,
184
- ACCOUNT_LOOKUP,
185
- TRANSFER_LOOKUP
186
- }
187
-
188
96
  export interface Client {
189
97
  createAccounts: (batch: Account[]) => Promise<CreateAccountsError[]>
190
98
  createTransfers: (batch: Transfer[]) => Promise<CreateTransfersError[]>
@@ -264,7 +172,7 @@ export function createClient (args: InitArgs): Client {
264
172
  }
265
173
 
266
174
  try {
267
- binding.request(context, Operation.CREATE_ACCOUNT, batch, callback)
175
+ binding.request(context, Operation.create_accounts, batch, callback)
268
176
  } catch (error) {
269
177
  reject(error)
270
178
  }
@@ -291,7 +199,7 @@ export function createClient (args: InitArgs): Client {
291
199
  }
292
200
 
293
201
  try {
294
- binding.request(context, Operation.CREATE_TRANSFER, batch, callback)
202
+ binding.request(context, Operation.create_transfers, batch, callback)
295
203
  } catch (error) {
296
204
  reject(error)
297
205
  }
@@ -309,7 +217,7 @@ export function createClient (args: InitArgs): Client {
309
217
  }
310
218
 
311
219
  try {
312
- binding.request(context, Operation.ACCOUNT_LOOKUP, batch, callback)
220
+ binding.request(context, Operation.lookup_accounts, batch, callback)
313
221
  } catch (error) {
314
222
  reject(error)
315
223
  }
@@ -327,7 +235,7 @@ export function createClient (args: InitArgs): Client {
327
235
  }
328
236
 
329
237
  try {
330
- binding.request(context, Operation.TRANSFER_LOOKUP, batch, callback)
238
+ binding.request(context, Operation.lookup_transfers, batch, callback)
331
239
  } catch (error) {
332
240
  reject(error)
333
241
  }