tigerbeetle-node 0.8.1 → 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 (83) hide show
  1. package/README.md +584 -184
  2. package/dist/benchmark.js +59 -51
  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 +69 -55
  18. package/dist/test.js.map +1 -1
  19. package/package-lock.json +26 -0
  20. package/package.json +17 -28
  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/.yarn/releases/yarn-berry.cjs +0 -55
  28. package/.yarnrc.yml +0 -1
  29. package/scripts/download_node_headers.sh +0 -25
  30. package/scripts/postinstall.sh +0 -6
  31. package/src/tigerbeetle/scripts/benchmark.bat +0 -46
  32. package/src/tigerbeetle/scripts/benchmark.sh +0 -55
  33. package/src/tigerbeetle/scripts/install.sh +0 -6
  34. package/src/tigerbeetle/scripts/install_zig.bat +0 -109
  35. package/src/tigerbeetle/scripts/install_zig.sh +0 -84
  36. package/src/tigerbeetle/scripts/lint.zig +0 -199
  37. package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -39
  38. package/src/tigerbeetle/scripts/vopr.bat +0 -48
  39. package/src/tigerbeetle/scripts/vopr.sh +0 -33
  40. package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
  41. package/src/tigerbeetle/src/benchmark.zig +0 -290
  42. package/src/tigerbeetle/src/cli.zig +0 -244
  43. package/src/tigerbeetle/src/config.zig +0 -239
  44. package/src/tigerbeetle/src/demo.zig +0 -125
  45. package/src/tigerbeetle/src/demo_01_create_accounts.zig +0 -35
  46. package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +0 -7
  47. package/src/tigerbeetle/src/demo_03_create_transfers.zig +0 -24
  48. package/src/tigerbeetle/src/demo_04_create_pending_transfers.zig +0 -61
  49. package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +0 -37
  50. package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +0 -24
  51. package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +0 -7
  52. package/src/tigerbeetle/src/fifo.zig +0 -104
  53. package/src/tigerbeetle/src/io/benchmark.zig +0 -213
  54. package/src/tigerbeetle/src/io/darwin.zig +0 -793
  55. package/src/tigerbeetle/src/io/linux.zig +0 -1038
  56. package/src/tigerbeetle/src/io/test.zig +0 -643
  57. package/src/tigerbeetle/src/io/windows.zig +0 -1161
  58. package/src/tigerbeetle/src/io.zig +0 -34
  59. package/src/tigerbeetle/src/main.zig +0 -144
  60. package/src/tigerbeetle/src/message_bus.zig +0 -1000
  61. package/src/tigerbeetle/src/message_pool.zig +0 -142
  62. package/src/tigerbeetle/src/ring_buffer.zig +0 -289
  63. package/src/tigerbeetle/src/simulator.zig +0 -417
  64. package/src/tigerbeetle/src/state_machine.zig +0 -2470
  65. package/src/tigerbeetle/src/storage.zig +0 -308
  66. package/src/tigerbeetle/src/test/cluster.zig +0 -351
  67. package/src/tigerbeetle/src/test/message_bus.zig +0 -93
  68. package/src/tigerbeetle/src/test/network.zig +0 -179
  69. package/src/tigerbeetle/src/test/packet_simulator.zig +0 -387
  70. package/src/tigerbeetle/src/test/state_checker.zig +0 -145
  71. package/src/tigerbeetle/src/test/state_machine.zig +0 -76
  72. package/src/tigerbeetle/src/test/storage.zig +0 -438
  73. package/src/tigerbeetle/src/test/time.zig +0 -84
  74. package/src/tigerbeetle/src/tigerbeetle.zig +0 -222
  75. package/src/tigerbeetle/src/time.zig +0 -113
  76. package/src/tigerbeetle/src/unit_tests.zig +0 -14
  77. package/src/tigerbeetle/src/vsr/client.zig +0 -505
  78. package/src/tigerbeetle/src/vsr/clock.zig +0 -812
  79. package/src/tigerbeetle/src/vsr/journal.zig +0 -2293
  80. package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
  81. package/src/tigerbeetle/src/vsr/replica.zig +0 -5015
  82. package/src/tigerbeetle/src/vsr.zig +0 -1017
  83. package/yarn.lock +0 -42
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
  }