tigerbeetle-node 0.14.178 → 0.14.179
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 +33 -4
- 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 +13 -4
- package/dist/bindings.js +10 -8
- package/dist/bindings.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +31 -1
- package/dist/index.js.map +1 -1
- package/dist/test.js +94 -30
- package/dist/test.js.map +1 -1
- package/package.json +1 -1
- package/src/bindings.ts +50 -12
- package/src/index.ts +50 -4
- package/src/node.zig +17 -12
- package/src/test.ts +125 -34
package/dist/test.js
CHANGED
|
@@ -48,6 +48,17 @@ function test(name, fn) {
|
|
|
48
48
|
test.skip = (name, fn) => {
|
|
49
49
|
console.log(name + ': SKIPPED');
|
|
50
50
|
};
|
|
51
|
+
test('id() monotonically increasing', async () => {
|
|
52
|
+
let idA = (0, _1.id)();
|
|
53
|
+
for (let i = 0; i < 10000000; i++) {
|
|
54
|
+
if (i % 10000 == 0) {
|
|
55
|
+
await new Promise(resolve => setTimeout(resolve, 1));
|
|
56
|
+
}
|
|
57
|
+
const idB = (0, _1.id)();
|
|
58
|
+
assert_1.default.ok(idB > idA, 'id() returned an id that did not monotonically increase');
|
|
59
|
+
idA = idB;
|
|
60
|
+
}
|
|
61
|
+
});
|
|
51
62
|
test('range check `code` on Account to be u16', async () => {
|
|
52
63
|
const account = { ...accountA, id: 0n };
|
|
53
64
|
account.code = 65535 + 1;
|
|
@@ -348,7 +359,7 @@ test('can get account transfers', async () => {
|
|
|
348
359
|
reserved: 0,
|
|
349
360
|
ledger: 1,
|
|
350
361
|
code: 718,
|
|
351
|
-
flags:
|
|
362
|
+
flags: _1.AccountFlags.history,
|
|
352
363
|
timestamp: 0n
|
|
353
364
|
};
|
|
354
365
|
const account_errors = await client.createAccounts([accountC]);
|
|
@@ -378,164 +389,217 @@ test('can get account transfers', async () => {
|
|
|
378
389
|
timestamp_min: 0n,
|
|
379
390
|
timestamp_max: 0n,
|
|
380
391
|
limit: 8190,
|
|
381
|
-
flags: _1.
|
|
392
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
382
393
|
};
|
|
383
394
|
var transfers = await client.getAccountTransfers(filter);
|
|
395
|
+
var history = await client.getAccountHistory(filter);
|
|
384
396
|
assert_1.default.strictEqual(transfers.length, transfers_created.length);
|
|
397
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
385
398
|
var timestamp = 0n;
|
|
399
|
+
var i = 0;
|
|
386
400
|
for (var transfer of transfers) {
|
|
387
401
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
388
402
|
timestamp = transfer.timestamp;
|
|
403
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
404
|
+
i++;
|
|
389
405
|
}
|
|
390
406
|
filter = {
|
|
391
407
|
account_id: accountC.id,
|
|
392
408
|
timestamp_min: 0n,
|
|
393
409
|
timestamp_max: 0n,
|
|
394
410
|
limit: 8190,
|
|
395
|
-
flags: _1.
|
|
411
|
+
flags: _1.AccountFilterFlags.debits | _1.AccountFilterFlags.reversed,
|
|
396
412
|
};
|
|
397
413
|
transfers = await client.getAccountTransfers(filter);
|
|
414
|
+
history = await client.getAccountHistory(filter);
|
|
398
415
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
416
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
399
417
|
timestamp = 1n << 64n;
|
|
418
|
+
i = 0;
|
|
400
419
|
for (var transfer of transfers) {
|
|
401
420
|
assert_1.default.ok(transfer.timestamp < timestamp);
|
|
402
421
|
timestamp = transfer.timestamp;
|
|
422
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
423
|
+
i++;
|
|
403
424
|
}
|
|
404
425
|
filter = {
|
|
405
426
|
account_id: accountC.id,
|
|
406
427
|
timestamp_min: 0n,
|
|
407
428
|
timestamp_max: 0n,
|
|
408
429
|
limit: 8190,
|
|
409
|
-
flags: _1.
|
|
430
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.reversed,
|
|
410
431
|
};
|
|
411
432
|
transfers = await client.getAccountTransfers(filter);
|
|
433
|
+
history = await client.getAccountHistory(filter);
|
|
412
434
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
435
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
413
436
|
timestamp = 1n << 64n;
|
|
437
|
+
i = 0;
|
|
414
438
|
for (var transfer of transfers) {
|
|
415
439
|
assert_1.default.ok(transfer.timestamp < timestamp);
|
|
416
440
|
timestamp = transfer.timestamp;
|
|
441
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
442
|
+
i++;
|
|
417
443
|
}
|
|
418
444
|
filter = {
|
|
419
445
|
account_id: accountC.id,
|
|
420
446
|
timestamp_min: 0n,
|
|
421
447
|
timestamp_max: 0n,
|
|
422
448
|
limit: transfers_created.length / 2,
|
|
423
|
-
flags: _1.
|
|
449
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
424
450
|
};
|
|
425
451
|
transfers = await client.getAccountTransfers(filter);
|
|
452
|
+
history = await client.getAccountHistory(filter);
|
|
426
453
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
454
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
427
455
|
timestamp = 0n;
|
|
456
|
+
i = 0;
|
|
428
457
|
for (var transfer of transfers) {
|
|
429
458
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
430
459
|
timestamp = transfer.timestamp;
|
|
460
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
461
|
+
i++;
|
|
431
462
|
}
|
|
432
463
|
filter = {
|
|
433
464
|
account_id: accountC.id,
|
|
434
465
|
timestamp_min: timestamp + 1n,
|
|
435
466
|
timestamp_max: 0n,
|
|
436
467
|
limit: transfers_created.length / 2,
|
|
437
|
-
flags: _1.
|
|
468
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
438
469
|
};
|
|
439
470
|
transfers = await client.getAccountTransfers(filter);
|
|
471
|
+
history = await client.getAccountHistory(filter);
|
|
440
472
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
473
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
474
|
+
i = 0;
|
|
441
475
|
for (var transfer of transfers) {
|
|
442
476
|
assert_1.default.ok(timestamp < transfer.timestamp);
|
|
443
477
|
timestamp = transfer.timestamp;
|
|
478
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
479
|
+
i++;
|
|
444
480
|
}
|
|
445
481
|
filter = {
|
|
446
482
|
account_id: accountC.id,
|
|
447
483
|
timestamp_min: timestamp + 1n,
|
|
448
484
|
timestamp_max: 0n,
|
|
449
485
|
limit: transfers_created.length / 2,
|
|
450
|
-
flags: _1.
|
|
486
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
451
487
|
};
|
|
452
488
|
transfers = await client.getAccountTransfers(filter);
|
|
489
|
+
history = await client.getAccountHistory(filter);
|
|
453
490
|
assert_1.default.strictEqual(transfers.length, 0);
|
|
491
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
454
492
|
filter = {
|
|
455
493
|
account_id: accountC.id,
|
|
456
494
|
timestamp_min: 0n,
|
|
457
495
|
timestamp_max: 0n,
|
|
458
496
|
limit: transfers_created.length / 2,
|
|
459
|
-
flags: _1.
|
|
497
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits | _1.AccountFilterFlags.reversed,
|
|
460
498
|
};
|
|
461
499
|
transfers = await client.getAccountTransfers(filter);
|
|
500
|
+
history = await client.getAccountHistory(filter);
|
|
462
501
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
502
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
463
503
|
timestamp = 1n << 64n;
|
|
504
|
+
i = 0;
|
|
464
505
|
for (var transfer of transfers) {
|
|
465
506
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
466
507
|
timestamp = transfer.timestamp;
|
|
508
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
509
|
+
i++;
|
|
467
510
|
}
|
|
468
511
|
filter = {
|
|
469
512
|
account_id: accountC.id,
|
|
470
513
|
timestamp_min: 0n,
|
|
471
514
|
timestamp_max: timestamp - 1n,
|
|
472
515
|
limit: transfers_created.length / 2,
|
|
473
|
-
flags: _1.
|
|
516
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits | _1.AccountFilterFlags.reversed,
|
|
474
517
|
};
|
|
475
518
|
transfers = await client.getAccountTransfers(filter);
|
|
519
|
+
history = await client.getAccountHistory(filter);
|
|
476
520
|
assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
|
|
521
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
522
|
+
i = 0;
|
|
477
523
|
for (var transfer of transfers) {
|
|
478
524
|
assert_1.default.ok(timestamp > transfer.timestamp);
|
|
479
525
|
timestamp = transfer.timestamp;
|
|
526
|
+
assert_1.default.ok(history[i].timestamp == transfer.timestamp);
|
|
527
|
+
i++;
|
|
480
528
|
}
|
|
481
529
|
filter = {
|
|
482
530
|
account_id: accountC.id,
|
|
483
531
|
timestamp_min: 0n,
|
|
484
532
|
timestamp_max: timestamp - 1n,
|
|
485
533
|
limit: transfers_created.length / 2,
|
|
486
|
-
flags: _1.
|
|
534
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits | _1.AccountFilterFlags.reversed,
|
|
487
535
|
};
|
|
488
536
|
transfers = await client.getAccountTransfers(filter);
|
|
537
|
+
history = await client.getAccountHistory(filter);
|
|
489
538
|
assert_1.default.strictEqual(transfers.length, 0);
|
|
490
|
-
assert_1.default.strictEqual(
|
|
539
|
+
assert_1.default.strictEqual(history.length, transfers.length);
|
|
540
|
+
filter = {
|
|
491
541
|
account_id: 0n,
|
|
492
542
|
timestamp_min: 0n,
|
|
493
543
|
timestamp_max: 0n,
|
|
494
544
|
limit: 8190,
|
|
495
|
-
flags: _1.
|
|
496
|
-
}
|
|
497
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
545
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
546
|
+
};
|
|
547
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
548
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
549
|
+
filter = {
|
|
498
550
|
account_id: accountC.id,
|
|
499
551
|
timestamp_min: (1n << 64n) - 1n,
|
|
500
552
|
timestamp_max: 0n,
|
|
501
553
|
limit: 8190,
|
|
502
|
-
flags: _1.
|
|
503
|
-
}
|
|
504
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
554
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
555
|
+
};
|
|
556
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
557
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
558
|
+
filter = {
|
|
505
559
|
account_id: accountC.id,
|
|
506
560
|
timestamp_min: 0n,
|
|
507
561
|
timestamp_max: (1n << 64n) - 1n,
|
|
508
562
|
limit: 8190,
|
|
509
|
-
flags: _1.
|
|
510
|
-
}
|
|
511
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
563
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
564
|
+
};
|
|
565
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
566
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
567
|
+
filter = {
|
|
512
568
|
account_id: accountC.id,
|
|
513
569
|
timestamp_min: (1n << 64n) - 2n,
|
|
514
570
|
timestamp_max: 1n,
|
|
515
571
|
limit: 8190,
|
|
516
|
-
flags: _1.
|
|
517
|
-
}
|
|
518
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
572
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
573
|
+
};
|
|
574
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
575
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
576
|
+
filter = {
|
|
519
577
|
account_id: accountC.id,
|
|
520
578
|
timestamp_min: 0n,
|
|
521
579
|
timestamp_max: 0n,
|
|
522
580
|
limit: 0,
|
|
523
|
-
flags: _1.
|
|
524
|
-
}
|
|
525
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
581
|
+
flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
|
|
582
|
+
};
|
|
583
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
584
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
585
|
+
filter = {
|
|
526
586
|
account_id: accountC.id,
|
|
527
587
|
timestamp_min: 0n,
|
|
528
588
|
timestamp_max: 0n,
|
|
529
589
|
limit: 8190,
|
|
530
|
-
flags: _1.
|
|
531
|
-
}
|
|
532
|
-
assert_1.default.strictEqual((await client.getAccountTransfers(
|
|
590
|
+
flags: _1.AccountFilterFlags.none,
|
|
591
|
+
};
|
|
592
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
593
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
594
|
+
filter = {
|
|
533
595
|
account_id: accountC.id,
|
|
534
596
|
timestamp_min: 0n,
|
|
535
597
|
timestamp_max: 0n,
|
|
536
598
|
limit: 8190,
|
|
537
599
|
flags: 0xFFFF,
|
|
538
|
-
}
|
|
600
|
+
};
|
|
601
|
+
assert_1.default.strictEqual((await client.getAccountTransfers(filter)).length, 0);
|
|
602
|
+
assert_1.default.strictEqual((await client.getAccountHistory(filter)).length, 0);
|
|
539
603
|
});
|
|
540
604
|
async function main() {
|
|
541
605
|
const start = new Date().getTime();
|
package/dist/test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":"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","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n GetAccountTransfers,\n GetAccountTransfersFlags,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst Zeroed32Bytes = Buffer.alloc(32, 0)\nconst Zeroed48Bytes = Buffer.alloc(48, 0)\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.strictEqual(accounts.length, 0)\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.strictEqual(errors.length, 0)\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero }) \n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.strictEqual(transferErrors.length, 0)\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.strictEqual(transferErrors.length, 0)\n\n // Wait for the transfer to expire.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node > 15.\n await new Promise(_ => setTimeout(_, 1000));\n \n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired }) \n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.strictEqual(account_errors.length, 0)\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.strictEqual(transfers_created_result.length, 0)\n\n // Query all transfers for accountC:\n var filter: GetAccountTransfers = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n var timestamp = 0n;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.debits | GetAccountTransfersFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n timestamp = 1n << 64n;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n timestamp = 1n << 64n;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n timestamp = 0n;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, 0)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits | GetAccountTransfersFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n timestamp = 1n << 64n;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits | GetAccountTransfersFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits | GetAccountTransfersFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n assert.strictEqual(transfers.length, 0) \n\n // Invalid account:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: 0n,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n })).length, 0)\n\n // Invalid timestamp min:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n })).length, 0)\n\n // Invalid timestamp max:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n })).length, 0)\n\n // Invalid timestamp range:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: 8190,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n })).length, 0)\n\n // Zero limit:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: GetAccountTransfersFlags.credits | GetAccountTransfersFlags.debits,\n })).length, 0)\n\n // Empty flags:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: GetAccountTransfersFlags.none,\n })).length, 0)\n\n // Invalid flags:\n assert.strictEqual((await client.getAccountTransfers({\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: 0xFFFF,\n })).length, 0)\n\n})\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;AAAA,oDAA+C;AAC/C,wBAWU;AAEV,MAAM,MAAM,GAAG,IAAA,eAAY,EAAC;IAC1B,UAAU,EAAE,EAAE;IACd,iBAAiB,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,CAAC;CACtD,CAAC,CAAA;AAGF,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AACzC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AACzC,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AACD,MAAM,QAAQ,GAAY;IACxB,EAAE,EAAE,GAAG;IACP,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,EAAE;IAClB,aAAa,EAAE,EAAE;IACjB,YAAY,EAAE,EAAE;IAChB,YAAY,EAAE,CAAC;IACf,QAAQ,EAAE,CAAC;IACX,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,GAAG;IACT,KAAK,EAAE,CAAC;IACR,SAAS,EAAE,EAAE;CACd,CAAA;AAED,MAAM,KAAK,GAAqD,EAAE,CAAA;AAClE,SAAS,IAAI,CAAC,IAAY,EAAE,EAAuB;IACjD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;AAC1B,CAAC;AACD,IAAI,CAAC,IAAI,GAAG,CAAC,IAAY,EAAE,EAAuB,EAAE,EAAE;IACpD,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,WAAW,CAAC,CAAA;AACjC,CAAC,CAAA;AAED,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAU,EAAE,CAAC,EAAE,EAAE;QAEnC,IAAI,CAAC,GAAG,KAAM,IAAI,CAAC,EAAE;YACnB,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;SACrD;QAED,MAAM,GAAG,GAAG,IAAA,KAAE,GAAE,CAAC;QACjB,gBAAM,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,EAAE,yDAAyD,CAAC,CAAC;QAChF,GAAG,GAAG,GAAG,CAAC;KACX;AACH,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAmB,EAAE;IACxE,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IAEvC,OAAO,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,CAAA;IACxB,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAA;IAC9E,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IAE5D,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC1D,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAmB,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEhE,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAkB,CAAC,MAAM,EAAE,CAAC,CAAA;AACpF,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,gDAAgD,EAAE,KAAK,IAAmB,EAAE;IAC/E,MAAM,OAAO,GAAG,EAAE,GAAG,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAA;IACtD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAErD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,qBAAkB,CAAC,sBAAsB,EAAE,CAAC,CAAA;AACpG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,qBAAqB,EAAE,KAAK,IAAmB,EAAE;IACpD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAExE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;IAElC,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAA;IAC5B,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACpC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAC/C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAC9C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IAC7C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACrC,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,EAAE,CAAC,CAAA;AACpC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAmB,EAAE;IACtD,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAChE,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,OAAO,CAAA;IAC9B,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK;QACL,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAGnD,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC/D,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC5C,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;IAChD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACxC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;IACzC,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAmB,EAAE;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,gBAAa,CAAC,qBAAqB,CAAA;IAE5C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,GAAG;QACZ,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAG5C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAEpC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,oBAAoB,EAAE,KAAK,IAAmB,EAAE;IACnD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,MAAM;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,SAAS,GAAa;QAC1B,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,IAAI;QACZ,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QAGP,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAA;IACnE,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,mBAAmB,EAAE,CAAC,CAAA;IAChG,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,2BAA2B,EAAE,CAAC,CAAA;IAExG,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtC,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAA;IACjD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAElD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;IAClD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACnD,gBAAM,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAA;AACpD,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAmB,EAAE;IAEhE,MAAM,QAAQ,GAAa;QACzB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,QAAQ,CAAC,EAAE;QAC7B,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QAC9B,MAAM,EAAE,GAAG;QACX,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,OAAO;QAC5B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC/D,gBAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAI5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAG5C,MAAM,MAAM,GAAa;QACvB,EAAE,EAAE,EAAE;QACN,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,EAAE;QACV,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,CAAC;QACV,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,gBAAa,CAAC,qBAAqB;QAC1C,SAAS,EAAE,EAAE;KACd,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;IACrD,gBAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACpC,gBAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,sBAAmB,CAAC,wBAAwB,EAAE,CAAC,CAAA;AACvG,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAmB,EAAE;IAC1D,MAAM,QAAQ,GAAY;QACxB,EAAE,EAAE,GAAG;QACP,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;QACnB,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,YAAY,EAAE,EAAE;QAChB,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,CAAC;QACT,IAAI,EAAE,GAAG;QACT,KAAK,EAAE,eAAY,CAAC,OAAO;QAC3B,SAAS,EAAE,EAAE;KACd,CAAA;IACD,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAE5C,IAAI,iBAAiB,GAAgB,EAAE,CAAC;IAExC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,EAAE,EAAC,CAAC,EAAE,EAAE;QACtB,iBAAiB,CAAC,IAAI,CAAC;YACrB,EAAE,EAAE,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC;YACrB,gBAAgB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACxD,iBAAiB,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE;YACzD,MAAM,EAAE,IAAI;YACZ,aAAa,EAAE,EAAE;YACjB,YAAY,EAAE,EAAE;YAChB,YAAY,EAAE,CAAC;YACf,UAAU,EAAE,EAAE;YACd,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;YACP,KAAK,EAAE,CAAC;YACR,SAAS,EAAE,EAAE;SACd,CAAC,CAAC;KACJ;IAED,MAAM,wBAAwB,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAA;IAChF,gBAAM,CAAC,WAAW,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtD,IAAI,MAAM,GAAkB;QAC1B,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,IAAI,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACxD,IAAI,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IACpD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAC9D,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,MAAM,GAAI,qBAAkB,CAAC,QAAQ;KAChE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAI,qBAAkB,CAAC,QAAQ;KACjE,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,SAAS,GAAG,EAAE,CAAC;IACf,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAGpD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,SAAS,GAAG,EAAE,IAAI,GAAG,CAAC;IACtB,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAClE,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAEpD,CAAC,GAAG,CAAC,CAAC;IACN,KAAK,IAAI,QAAQ,IAAI,SAAS,EAAE;QAC9B,gBAAM,CAAC,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC1C,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAE/B,gBAAM,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC,EAAE,CAAC;KACL;IAGD,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,SAAS,GAAG,EAAE;QAC7B,KAAK,EAAE,iBAAiB,CAAC,MAAM,GAAG,CAAC;QACnC,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM,GAAG,qBAAkB,CAAC,QAAQ;KAC5F,CAAA;IACD,SAAS,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;IACpD,OAAO,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;IAEhD,gBAAM,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,gBAAM,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IAGpD,MAAM,GAAG;QACP,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,EAAE;QAC/B,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,qBAAkB,CAAC,OAAO,GAAG,qBAAkB,CAAC,MAAM;KAC9D,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,qBAAkB,CAAC,IAAI;KAC/B,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAGtE,MAAM,GAAG;QACP,UAAU,EAAE,QAAQ,CAAC,EAAE;QACvB,aAAa,EAAE,EAAE;QACjB,aAAa,EAAE,EAAE;QACjB,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,MAAM;KACd,CAAA;IACD,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACxE,gBAAM,CAAC,WAAW,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAExE,CAAC,CAAC,CAAA;AAEF,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI;QACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;gBAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;YACzC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,CAAA;gBACvC,MAAM,KAAK,CAAA;YACb,CAAC,CAAC,CAAA;SACH;QACD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAC,IAAI,CAAC,CAAA;KACnD;YAAS;QACR,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;KACvB;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAqB,EAAE,EAAE;IACrC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;IACxC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC,CAAC,CAAA","sourcesContent":["import assert, { AssertionError } from 'assert'\nimport {\n createClient,\n Account,\n Transfer,\n TransferFlags,\n CreateAccountError,\n CreateTransferError,\n AccountFilter,\n AccountFilterFlags,\n AccountFlags,\n id,\n} from '.'\n\nconst client = createClient({\n cluster_id: 0n,\n replica_addresses: [process.env.TB_ADDRESS || '3000']\n})\n\n// Test data\nconst Zeroed32Bytes = Buffer.alloc(32, 0)\nconst Zeroed48Bytes = Buffer.alloc(48, 0)\nconst accountA: Account = {\n id: 17n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\nconst accountB: Account = {\n id: 19n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 719,\n flags: 0,\n timestamp: 0n // this will be set correctly by the TigerBeetle server\n}\n\nconst tests: Array<{ name: string, fn: () => Promise<void> }> = []\nfunction test(name: string, fn: () => Promise<void>) {\n tests.push({ name, fn })\n}\ntest.skip = (name: string, fn: () => Promise<void>) => {\n console.log(name + ': SKIPPED')\n}\n\ntest('id() monotonically increasing', async (): Promise<void> => {\n let idA = id();\n for (let i = 0; i < 10_000_000; i++) {\n // Ensure ID is monotonic between milliseconds if the loop executes too fast.\n if (i % 10_000 == 0) {\n await new Promise(resolve => setTimeout(resolve, 1))\n }\n\n const idB = id();\n assert.ok(idB > idA, 'id() returned an id that did not monotonically increase');\n idA = idB;\n }\n})\n\ntest('range check `code` on Account to be u16', async (): Promise<void> => {\n const account = { ...accountA, id: 0n }\n\n account.code = 65535 + 1\n const codeError = await client.createAccounts([account]).catch(error => error)\n assert.strictEqual(codeError.message, 'code must be a u16.')\n\n const accounts = await client.lookupAccounts([account.id])\n assert.strictEqual(accounts.length, 0)\n})\n\ntest('can create accounts', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA])\n assert.strictEqual(errors.length, 0)\n})\n\ntest('can return error on account', async (): Promise<void> => {\n const errors = await client.createAccounts([accountA, accountB])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.exists })\n})\n\ntest('error if timestamp is not set to 0n on account', async (): Promise<void> => {\n const account = { ...accountA, timestamp: 2n, id: 3n }\n const errors = await client.createAccounts([account])\n\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateAccountError.timestamp_must_be_zero }) \n})\n\ntest('can lookup accounts', async (): Promise<void> => {\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n\n assert.strictEqual(accounts.length, 2)\n const account1 = accounts[0]\n assert.strictEqual(account1.id, 17n)\n assert.strictEqual(account1.credits_posted, 0n)\n assert.strictEqual(account1.credits_pending, 0n)\n assert.strictEqual(account1.debits_posted, 0n)\n assert.strictEqual(account1.debits_pending, 0n)\n assert.strictEqual(account1.user_data_128, 0n)\n assert.strictEqual(account1.user_data_64, 0n)\n assert.strictEqual(account1.user_data_32, 0)\n assert.strictEqual(account1.code, 718)\n assert.strictEqual(account1.ledger, 1)\n assert.strictEqual(account1.flags, 0)\n assert.ok(account1.timestamp > 0n)\n\n const account2 = accounts[1]\n assert.strictEqual(account2.id, 19n)\n assert.strictEqual(account2.credits_posted, 0n)\n assert.strictEqual(account2.credits_pending, 0n)\n assert.strictEqual(account2.debits_posted, 0n)\n assert.strictEqual(account2.debits_pending, 0n)\n assert.strictEqual(account2.user_data_128, 0n)\n assert.strictEqual(account2.user_data_64, 0n)\n assert.strictEqual(account2.user_data_32, 0)\n assert.strictEqual(account2.code, 719)\n assert.strictEqual(account2.ledger, 1)\n assert.strictEqual(account2.flags, 0)\n assert.ok(account2.timestamp > 0n)\n})\n\ntest('can create a transfer', async (): Promise<void> => {\n const transfer: Transfer = {\n id: 1n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can create a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.pending\n const transfer: Transfer = {\n id: 2n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 2e9,\n ledger: 1,\n code: 1,\n flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 100n)\n assert.strictEqual(accounts[0].credits_pending, 50n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 100n)\n assert.strictEqual(accounts[1].debits_pending, 50n)\n\n // Lookup the transfer:\n const transfers = await client.lookupTransfers([transfer.id])\n assert.strictEqual(transfers.length, 1)\n assert.strictEqual(transfers[0].id, 2n)\n assert.strictEqual(transfers[0].debit_account_id, accountB.id)\n assert.strictEqual(transfers[0].credit_account_id, accountA.id)\n assert.strictEqual(transfers[0].amount, 50n)\n assert.strictEqual(transfers[0].user_data_128, 0n)\n assert.strictEqual(transfers[0].user_data_64, 0n)\n assert.strictEqual(transfers[0].user_data_32, 0)\n assert.strictEqual(transfers[0].timeout > 0, true)\n assert.strictEqual(transfers[0].code, 1)\n assert.strictEqual(transfers[0].flags, 2)\n assert.strictEqual(transfers[0].timestamp > 0, true)\n})\n\ntest('can post a two-phase transfer', async (): Promise<void> => {\n let flags = 0\n flags |= TransferFlags.post_pending_transfer\n\n const commit: Transfer = {\n id: 3n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 2n,// must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: flags,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([commit])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can reject a two-phase transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 4n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1e9,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.strictEqual(transferErrors.length, 0)\n\n // send in the reject\n const reject: Transfer = {\n id: 5n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 4n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 0)\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('can link transfers', async (): Promise<void> => {\n const transfer1: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.linked, // points to transfer2\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n const transfer2: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n // Does not have linked flag as it is the end of the chain.\n // This will also cause it to fail as this is now a duplicate with different flags\n flags: 0,\n timestamp: 0n, // will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([transfer1, transfer2])\n assert.strictEqual(errors.length, 2)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.linked_event_failed })\n assert.deepStrictEqual(errors[1], { index: 1, result: CreateTransferError.exists_with_different_flags })\n\n const accounts = await client.lookupAccounts([accountA.id, accountB.id])\n assert.strictEqual(accounts.length, 2)\n assert.strictEqual(accounts[0].credits_posted, 150n)\n assert.strictEqual(accounts[0].credits_pending, 0n)\n assert.strictEqual(accounts[0].debits_posted, 0n)\n assert.strictEqual(accounts[0].debits_pending, 0n)\n\n assert.strictEqual(accounts[1].credits_posted, 0n)\n assert.strictEqual(accounts[1].credits_pending, 0n)\n assert.strictEqual(accounts[1].debits_posted, 150n)\n assert.strictEqual(accounts[1].debits_pending, 0n)\n})\n\ntest('cannot void an expired transfer', async (): Promise<void> => {\n // Create a two-phase transfer:\n const transfer: Transfer = {\n id: 6n,\n debit_account_id: accountB.id,\n credit_account_id: accountA.id,\n amount: 50n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 1,\n ledger: 1,\n code: 1,\n flags: TransferFlags.pending,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n const transferErrors = await client.createTransfers([transfer])\n assert.strictEqual(transferErrors.length, 0)\n\n // Wait for the transfer to expire.\n // TODO: Use `await setTimeout(1000)` when upgrade to Node > 15.\n await new Promise(_ => setTimeout(_, 1000));\n \n // send in the reject\n const reject: Transfer = {\n id: 7n,\n debit_account_id: BigInt(0),\n credit_account_id: BigInt(0),\n amount: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 6n, // must match the id of the pending transfer\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: TransferFlags.void_pending_transfer,\n timestamp: 0n, // this will be set correctly by the TigerBeetle server\n }\n\n const errors = await client.createTransfers([reject])\n assert.strictEqual(errors.length, 1)\n assert.deepStrictEqual(errors[0], { index: 0, result: CreateTransferError.pending_transfer_expired }) \n})\n\ntest('can get account transfers', async (): Promise<void> => {\n const accountC: Account = {\n id: 21n,\n debits_pending: 0n,\n debits_posted: 0n,\n credits_pending: 0n,\n credits_posted: 0n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n reserved: 0,\n ledger: 1,\n code: 718,\n flags: AccountFlags.history,\n timestamp: 0n\n }\n const account_errors = await client.createAccounts([accountC])\n assert.strictEqual(account_errors.length, 0)\n\n var transfers_created : Transfer[] = [];\n // Create transfers where the new account is either the debit or credit account:\n for (var i=0; i<10;i++) {\n transfers_created.push({\n id: BigInt(i + 10000),\n debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,\n credit_account_id: i % 2 == 0 ? accountB.id : accountC.id,\n amount: 100n,\n user_data_128: 0n,\n user_data_64: 0n,\n user_data_32: 0,\n pending_id: 0n,\n timeout: 0,\n ledger: 1,\n code: 1,\n flags: 0,\n timestamp: 0n,\n });\n }\n\n const transfers_created_result = await client.createTransfers(transfers_created)\n assert.strictEqual(transfers_created_result.length, 0)\n\n // Query all transfers for accountC:\n var filter: AccountFilter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n var transfers = await client.getAccountTransfers(filter)\n var history = await client.getAccountHistory(filter)\n assert.strictEqual(transfers.length, transfers_created.length)\n assert.strictEqual(history.length, transfers.length)\n\n var timestamp = 0n;\n var i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++;\n }\n\n // Query only the debit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query only the credit transfers for accountC, descending:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(transfer.timestamp < timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query the first 5 transfers for accountC:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n timestamp = 0n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp < transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n timestamp_min: timestamp + 1n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, 0)\n assert.strictEqual(history.length, transfers.length)\n\n // Query the first 5 transfers for accountC ORDER BY DESC:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n timestamp = 1n << 64n;\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query the next 5 transfers for accountC, with pagination:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, transfers_created.length / 2)\n assert.strictEqual(history.length, transfers.length)\n\n i = 0;\n for (var transfer of transfers) {\n assert.ok(timestamp > transfer.timestamp);\n timestamp = transfer.timestamp;\n\n assert.ok(history[i].timestamp == transfer.timestamp);\n i++; \n }\n\n // Query again, no more transfers should be found:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: timestamp - 1n,\n limit: transfers_created.length / 2,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits | AccountFilterFlags.reversed,\n }\n transfers = await client.getAccountTransfers(filter)\n history = await client.getAccountHistory(filter)\n\n assert.strictEqual(transfers.length, 0)\n assert.strictEqual(history.length, transfers.length)\n\n // Invalid account:\n filter = {\n account_id: 0n,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Invalid timestamp min:\n filter = {\n account_id: accountC.id,\n timestamp_min: (1n << 64n) - 1n, // ulong max value\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Invalid timestamp max:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: (1n << 64n) - 1n, // ulong max value\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Invalid timestamp range:\n filter = {\n account_id: accountC.id,\n timestamp_min: (1n << 64n) - 2n, // ulong max - 1\n timestamp_max: 1n,\n limit: 8190,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Zero limit:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 0,\n flags: AccountFilterFlags.credits | AccountFilterFlags.debits,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Empty flags:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: AccountFilterFlags.none,\n } \n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n // Invalid flags:\n filter = {\n account_id: accountC.id,\n timestamp_min: 0n,\n timestamp_max: 0n,\n limit: 8190,\n flags: 0xFFFF,\n }\n assert.strictEqual((await client.getAccountTransfers(filter)).length, 0)\n assert.strictEqual((await client.getAccountHistory(filter)).length, 0)\n\n})\n\nasync function main () {\n const start = new Date().getTime()\n try {\n for (let i = 0; i < tests.length; i++) {\n await tests[i].fn().then(() => {\n console.log(tests[i].name + \": PASSED\")\n }).catch(error => {\n console.log(tests[i].name + \": FAILED\")\n throw error\n })\n }\n const end = new Date().getTime()\n console.log('Time taken (s):', (end - start)/1000)\n } finally {\n await client.destroy()\n }\n}\n\nmain().catch((error: AssertionError) => {\n console.log('operator:', error.operator)\n console.log('stack:', error.stack)\n process.exit(-1);\n})\n"]}
|
package/package.json
CHANGED
package/src/bindings.ts
CHANGED
|
@@ -24,6 +24,11 @@ export enum AccountFlags {
|
|
|
24
24
|
* See [credits_must_not_exceed_debits](https://docs.tigerbeetle.com/reference/accounts#flagscredits_must_not_exceed_debits)
|
|
25
25
|
*/
|
|
26
26
|
credits_must_not_exceed_debits = (1 << 2),
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* See [history](https://docs.tigerbeetle.com/reference/accounts#flagshistory)
|
|
30
|
+
*/
|
|
31
|
+
history = (1 << 3),
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
|
|
@@ -66,23 +71,23 @@ export enum TransferFlags {
|
|
|
66
71
|
|
|
67
72
|
|
|
68
73
|
/**
|
|
69
|
-
* See [
|
|
74
|
+
* See [AccountFilterFlags](https://docs.tigerbeetle.com/reference/account_filter#flags)
|
|
70
75
|
*/
|
|
71
|
-
export enum
|
|
76
|
+
export enum AccountFilterFlags {
|
|
72
77
|
none = 0,
|
|
73
78
|
|
|
74
79
|
/**
|
|
75
|
-
* See [debits](https://docs.tigerbeetle.com/reference/
|
|
80
|
+
* See [debits](https://docs.tigerbeetle.com/reference/account_filter#flagsdebits)
|
|
76
81
|
*/
|
|
77
82
|
debits = (1 << 0),
|
|
78
83
|
|
|
79
84
|
/**
|
|
80
|
-
* See [credits](https://docs.tigerbeetle.com/reference/
|
|
85
|
+
* See [credits](https://docs.tigerbeetle.com/reference/account_filter#flagscredits)
|
|
81
86
|
*/
|
|
82
87
|
credits = (1 << 1),
|
|
83
88
|
|
|
84
89
|
/**
|
|
85
|
-
* See [reversed](https://docs.tigerbeetle.com/reference/
|
|
90
|
+
* See [reversed](https://docs.tigerbeetle.com/reference/account_filter#flagsreversed)
|
|
86
91
|
*/
|
|
87
92
|
reversed = (1 << 2),
|
|
88
93
|
}
|
|
@@ -647,41 +652,74 @@ export type CreateTransfersError = {
|
|
|
647
652
|
|
|
648
653
|
|
|
649
654
|
/**
|
|
650
|
-
* See [
|
|
655
|
+
* See [AccountFilter](https://docs.tigerbeetle.com/reference/account_filter#)
|
|
651
656
|
*/
|
|
652
|
-
export type
|
|
657
|
+
export type AccountFilter = {
|
|
653
658
|
|
|
654
659
|
/**
|
|
655
|
-
* See [account_id](https://docs.tigerbeetle.com/reference/
|
|
660
|
+
* See [account_id](https://docs.tigerbeetle.com/reference/account_filter#account_id)
|
|
656
661
|
*/
|
|
657
662
|
account_id: bigint
|
|
658
663
|
|
|
659
664
|
/**
|
|
660
|
-
* See [timestamp_min](https://docs.tigerbeetle.com/reference/
|
|
665
|
+
* See [timestamp_min](https://docs.tigerbeetle.com/reference/account_filter#timestamp_min)
|
|
661
666
|
*/
|
|
662
667
|
timestamp_min: bigint
|
|
663
668
|
|
|
664
669
|
/**
|
|
665
|
-
* See [timestamp_max](https://docs.tigerbeetle.com/reference/
|
|
670
|
+
* See [timestamp_max](https://docs.tigerbeetle.com/reference/account_filter#timestamp_max)
|
|
666
671
|
*/
|
|
667
672
|
timestamp_max: bigint
|
|
668
673
|
|
|
669
674
|
/**
|
|
670
|
-
* See [limit](https://docs.tigerbeetle.com/reference/
|
|
675
|
+
* See [limit](https://docs.tigerbeetle.com/reference/account_filter#limit)
|
|
671
676
|
*/
|
|
672
677
|
limit: number
|
|
673
678
|
|
|
674
679
|
/**
|
|
675
|
-
* See [flags](https://docs.tigerbeetle.com/reference/
|
|
680
|
+
* See [flags](https://docs.tigerbeetle.com/reference/account_filter#flags)
|
|
676
681
|
*/
|
|
677
682
|
flags: number
|
|
678
683
|
}
|
|
679
684
|
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* See [AccountBalance](https://docs.tigerbeetle.com/reference/account_balances#)
|
|
688
|
+
*/
|
|
689
|
+
export type AccountBalance = {
|
|
690
|
+
|
|
691
|
+
/**
|
|
692
|
+
* See [debits_pending](https://docs.tigerbeetle.com/reference/account_balances#debits_pending)
|
|
693
|
+
*/
|
|
694
|
+
debits_pending: bigint
|
|
695
|
+
|
|
696
|
+
/**
|
|
697
|
+
* See [debits_posted](https://docs.tigerbeetle.com/reference/account_balances#debits_posted)
|
|
698
|
+
*/
|
|
699
|
+
debits_posted: bigint
|
|
700
|
+
|
|
701
|
+
/**
|
|
702
|
+
* See [credits_pending](https://docs.tigerbeetle.com/reference/account_balances#credits_pending)
|
|
703
|
+
*/
|
|
704
|
+
credits_pending: bigint
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* See [credits_posted](https://docs.tigerbeetle.com/reference/account_balances#credits_posted)
|
|
708
|
+
*/
|
|
709
|
+
credits_posted: bigint
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* See [timestamp](https://docs.tigerbeetle.com/reference/account_balances#timestamp)
|
|
713
|
+
*/
|
|
714
|
+
timestamp: bigint
|
|
715
|
+
}
|
|
716
|
+
|
|
680
717
|
export enum Operation {
|
|
681
718
|
create_accounts = 128,
|
|
682
719
|
create_transfers = 129,
|
|
683
720
|
lookup_accounts = 130,
|
|
684
721
|
lookup_transfers = 131,
|
|
685
722
|
get_account_transfers = 132,
|
|
723
|
+
get_account_history = 133,
|
|
686
724
|
}
|
|
687
725
|
|