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.
- package/README.md +580 -179
- package/dist/benchmark.js +44 -36
- package/dist/benchmark.js.map +1 -1
- package/dist/bin/aarch64-linux-gnu/client.node +0 -0
- package/dist/bin/aarch64-linux-musl/client.node +0 -0
- package/dist/bin/aarch64-macos/client.node +0 -0
- package/dist/bin/x86_64-linux-gnu/client.node +0 -0
- package/dist/bin/x86_64-linux-musl/client.node +0 -0
- package/dist/bin/x86_64-macos/client.node +0 -0
- package/dist/bin/x86_64-windows/client.node +0 -0
- package/dist/bindings.d.ts +141 -0
- package/dist/bindings.js +112 -0
- package/dist/bindings.js.map +1 -0
- package/dist/index.d.ts +2 -125
- package/dist/index.js +51 -101
- package/dist/index.js.map +1 -1
- package/dist/test.js +68 -54
- package/dist/test.js.map +1 -1
- package/package-lock.json +26 -0
- package/package.json +13 -22
- package/src/benchmark.ts +58 -49
- package/src/bindings.ts +631 -0
- package/src/index.ts +71 -163
- package/src/node.zig +169 -148
- package/src/test.ts +71 -57
- package/src/translate.zig +19 -36
- package/scripts/download_node_headers.sh +0 -25
- package/src/tigerbeetle/scripts/benchmark.bat +0 -46
- package/src/tigerbeetle/scripts/benchmark.sh +0 -55
- package/src/tigerbeetle/scripts/install.sh +0 -6
- package/src/tigerbeetle/scripts/install_zig.bat +0 -109
- package/src/tigerbeetle/scripts/install_zig.sh +0 -84
- package/src/tigerbeetle/scripts/lint.zig +0 -199
- package/src/tigerbeetle/scripts/upgrade_ubuntu_kernel.sh +0 -39
- package/src/tigerbeetle/scripts/vopr.bat +0 -48
- package/src/tigerbeetle/scripts/vopr.sh +0 -33
- package/src/tigerbeetle/scripts/vr_state_enumerate +0 -46
- package/src/tigerbeetle/src/benchmark.zig +0 -290
- package/src/tigerbeetle/src/cli.zig +0 -244
- package/src/tigerbeetle/src/config.zig +0 -239
- package/src/tigerbeetle/src/demo.zig +0 -125
- package/src/tigerbeetle/src/demo_01_create_accounts.zig +0 -35
- package/src/tigerbeetle/src/demo_02_lookup_accounts.zig +0 -7
- package/src/tigerbeetle/src/demo_03_create_transfers.zig +0 -24
- package/src/tigerbeetle/src/demo_04_create_pending_transfers.zig +0 -61
- package/src/tigerbeetle/src/demo_05_post_pending_transfers.zig +0 -37
- package/src/tigerbeetle/src/demo_06_void_pending_transfers.zig +0 -24
- package/src/tigerbeetle/src/demo_07_lookup_transfers.zig +0 -7
- package/src/tigerbeetle/src/fifo.zig +0 -104
- package/src/tigerbeetle/src/io/benchmark.zig +0 -213
- package/src/tigerbeetle/src/io/darwin.zig +0 -793
- package/src/tigerbeetle/src/io/linux.zig +0 -1038
- package/src/tigerbeetle/src/io/test.zig +0 -643
- package/src/tigerbeetle/src/io/windows.zig +0 -1161
- package/src/tigerbeetle/src/io.zig +0 -34
- package/src/tigerbeetle/src/main.zig +0 -144
- package/src/tigerbeetle/src/message_bus.zig +0 -1000
- package/src/tigerbeetle/src/message_pool.zig +0 -142
- package/src/tigerbeetle/src/ring_buffer.zig +0 -289
- package/src/tigerbeetle/src/simulator.zig +0 -417
- package/src/tigerbeetle/src/state_machine.zig +0 -2470
- package/src/tigerbeetle/src/storage.zig +0 -308
- package/src/tigerbeetle/src/test/cluster.zig +0 -351
- package/src/tigerbeetle/src/test/message_bus.zig +0 -93
- package/src/tigerbeetle/src/test/network.zig +0 -179
- package/src/tigerbeetle/src/test/packet_simulator.zig +0 -387
- package/src/tigerbeetle/src/test/state_checker.zig +0 -145
- package/src/tigerbeetle/src/test/state_machine.zig +0 -76
- package/src/tigerbeetle/src/test/storage.zig +0 -438
- package/src/tigerbeetle/src/test/time.zig +0 -84
- package/src/tigerbeetle/src/tigerbeetle.zig +0 -222
- package/src/tigerbeetle/src/time.zig +0 -113
- package/src/tigerbeetle/src/unit_tests.zig +0 -14
- package/src/tigerbeetle/src/vsr/client.zig +0 -505
- package/src/tigerbeetle/src/vsr/clock.zig +0 -812
- package/src/tigerbeetle/src/vsr/journal.zig +0 -2293
- package/src/tigerbeetle/src/vsr/marzullo.zig +0 -309
- package/src/tigerbeetle/src/vsr/replica.zig +0 -5015
- package/src/tigerbeetle/src/vsr.zig +0 -1017
package/src/index.ts
CHANGED
|
@@ -1,4 +1,69 @@
|
|
|
1
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
238
|
+
binding.request(context, Operation.lookup_transfers, batch, callback)
|
|
331
239
|
} catch (error) {
|
|
332
240
|
reject(error)
|
|
333
241
|
}
|