tigerbeetle-node 0.17.4 → 0.17.6

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/dist/test.js CHANGED
@@ -5,9 +5,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const assert_1 = __importDefault(require("assert"));
7
7
  const _1 = require(".");
8
+ async function sleep_ms(ms) {
9
+ await new Promise(resolve => setTimeout(resolve, ms));
10
+ }
11
+ function range(n) {
12
+ return Array.from({ length: n }, (_, i) => i);
13
+ }
14
+ function random_index(array) {
15
+ return Math.floor(Math.random() * array.length);
16
+ }
17
+ const REPLICA_ADDRESSES = [process.env.TB_ADDRESS || '3000'];
8
18
  const client = (0, _1.createClient)({
9
19
  cluster_id: 0n,
10
- replica_addresses: [process.env.TB_ADDRESS || '3000']
20
+ replica_addresses: REPLICA_ADDRESSES
11
21
  });
12
22
  const accountA = {
13
23
  id: 17n,
@@ -47,11 +57,55 @@ function test(name, fn) {
47
57
  test.skip = (name, fn) => {
48
58
  console.log(name + ': SKIPPED');
49
59
  };
60
+ test('Serialization: BigInt exceeds U128', async () => {
61
+ const transfer = {
62
+ id: 9999999999999999999999999999999999999999n,
63
+ debit_account_id: 0n,
64
+ credit_account_id: 0n,
65
+ amount: 0n,
66
+ user_data_128: 0n,
67
+ user_data_64: 0n,
68
+ user_data_32: 0,
69
+ pending_id: 0n,
70
+ timeout: 0,
71
+ ledger: 0,
72
+ code: 0,
73
+ flags: 0,
74
+ timestamp: 0n,
75
+ };
76
+ assert_1.default.rejects(async () => await client.createTransfers([transfer]), (err) => {
77
+ assert_1.default.ok(err instanceof Error);
78
+ assert_1.default.strictEqual(err.message, "id must fit in 128 bits");
79
+ return true;
80
+ });
81
+ });
82
+ test('Serialization: BigInt negative', async () => {
83
+ const transfer = {
84
+ id: -1n,
85
+ debit_account_id: 0n,
86
+ credit_account_id: 0n,
87
+ amount: 0n,
88
+ user_data_128: 0n,
89
+ user_data_64: 0n,
90
+ user_data_32: 0,
91
+ pending_id: 0n,
92
+ timeout: 0,
93
+ ledger: 0,
94
+ code: 0,
95
+ flags: 0,
96
+ timestamp: 0n,
97
+ };
98
+ assert_1.default.rejects(async () => await client.createTransfers([transfer]), (err) => {
99
+ assert_1.default.ok(err instanceof Error);
100
+ assert_1.default.strictEqual(err.message, "id must be positive");
101
+ return true;
102
+ });
103
+ });
50
104
  test('id() monotonically increasing', async () => {
51
105
  let idA = (0, _1.id)();
52
106
  for (let i = 0; i < 10000000; i++) {
53
107
  if (i % 10000 == 0) {
54
- await new Promise(resolve => setTimeout(resolve, 1));
108
+ await sleep_ms(1);
55
109
  }
56
110
  const idB = (0, _1.id)();
57
111
  assert_1.default.ok(idB > idA, 'id() returned an id that did not monotonically increase');
@@ -89,8 +143,8 @@ test('error if timestamp is not set to 0n on account', async () => {
89
143
  });
90
144
  test('batch max size', async () => {
91
145
  const BATCH_SIZE = 10000;
92
- var transfers = [];
93
- for (var i = 0; i < BATCH_SIZE; i++) {
146
+ const transfers = [];
147
+ for (let i = 0; i < BATCH_SIZE; i++) {
94
148
  transfers.push({
95
149
  id: 0n,
96
150
  debit_account_id: 0n,
@@ -113,6 +167,15 @@ test('batch max size', async () => {
113
167
  return true;
114
168
  });
115
169
  });
170
+ test('batch invalid size', async () => {
171
+ const transfers = [];
172
+ transfers.length = 0xffffffff;
173
+ assert_1.default.rejects(async () => await client.createTransfers(transfers), (err) => {
174
+ assert_1.default.ok(err instanceof _1.RequestError);
175
+ assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_TOO_MUCH_DATA);
176
+ return true;
177
+ });
178
+ });
116
179
  test('can lookup accounts', async () => {
117
180
  const accounts = await client.lookupAccounts([accountA.id, accountB.id]);
118
181
  assert_1.default.strictEqual(accounts.length, 2);
@@ -371,7 +434,7 @@ test('cannot void an expired transfer', async () => {
371
434
  assert_1.default.deepStrictEqual(transfers_results.length, 1);
372
435
  assert_1.default.ok(transfers_results[0].timestamp > 0);
373
436
  assert_1.default.deepStrictEqual(transfers_results[0].status, _1.CreateTransferStatus.created);
374
- var accounts = await client.lookupAccounts([accountA.id, accountB.id]);
437
+ let accounts = await client.lookupAccounts([accountA.id, accountB.id]);
375
438
  assert_1.default.strictEqual(accounts.length, 2);
376
439
  assert_1.default.strictEqual(accounts[0].credits_posted, 150n);
377
440
  assert_1.default.strictEqual(accounts[0].credits_pending, 50n);
@@ -382,7 +445,7 @@ test('cannot void an expired transfer', async () => {
382
445
  assert_1.default.strictEqual(accounts[1].debits_posted, 150n);
383
446
  assert_1.default.strictEqual(accounts[1].debits_pending, 50n);
384
447
  const extra_wait_time = 500;
385
- await new Promise(_ => setTimeout(_, (transfer.timeout * 1000) + extra_wait_time));
448
+ await sleep_ms((transfer.timeout * 1000) + extra_wait_time);
386
449
  accounts = await client.lookupAccounts([accountA.id, accountB.id]);
387
450
  assert_1.default.strictEqual(accounts.length, 2);
388
451
  assert_1.default.strictEqual(accounts[0].credits_posted, 150n);
@@ -485,8 +548,8 @@ test('can get account transfers', async () => {
485
548
  assert_1.default.deepStrictEqual(account_results.length, 1);
486
549
  assert_1.default.ok(account_results[0].timestamp > 0);
487
550
  assert_1.default.deepStrictEqual(account_results[0].status, _1.CreateAccountStatus.created);
488
- var transfers_created = [];
489
- for (var i = 0; i < 10; i++) {
551
+ const transfers_created = [];
552
+ for (let i = 0; i < 10; i++) {
490
553
  transfers_created.push({
491
554
  id: BigInt(i + 10000),
492
555
  debit_account_id: i % 2 == 0 ? accountC.id : accountA.id,
@@ -509,7 +572,7 @@ test('can get account transfers', async () => {
509
572
  assert_1.default.ok(result.timestamp > 0);
510
573
  assert_1.default.deepStrictEqual(result.status, _1.CreateTransferStatus.created);
511
574
  }
512
- var filter = {
575
+ let filter = {
513
576
  account_id: accountC.id,
514
577
  user_data_128: 0n,
515
578
  user_data_64: 0n,
@@ -520,13 +583,13 @@ test('can get account transfers', async () => {
520
583
  limit: BATCH_MAX,
521
584
  flags: _1.AccountFilterFlags.credits | _1.AccountFilterFlags.debits,
522
585
  };
523
- var transfers = await client.getAccountTransfers(filter);
524
- var account_balances = await client.getAccountBalances(filter);
586
+ let transfers = await client.getAccountTransfers(filter);
587
+ let account_balances = await client.getAccountBalances(filter);
525
588
  assert_1.default.strictEqual(transfers.length, transfers_created.length);
526
589
  assert_1.default.strictEqual(account_balances.length, transfers.length);
527
- var timestamp = 0n;
528
- var i = 0;
529
- for (var transfer of transfers) {
590
+ let timestamp = 0n;
591
+ let i = 0;
592
+ for (const transfer of transfers) {
530
593
  assert_1.default.ok(timestamp < transfer.timestamp);
531
594
  timestamp = transfer.timestamp;
532
595
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -549,7 +612,7 @@ test('can get account transfers', async () => {
549
612
  assert_1.default.strictEqual(account_balances.length, transfers.length);
550
613
  timestamp = 1n << 64n;
551
614
  i = 0;
552
- for (var transfer of transfers) {
615
+ for (const transfer of transfers) {
553
616
  assert_1.default.ok(transfer.timestamp < timestamp);
554
617
  timestamp = transfer.timestamp;
555
618
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -572,7 +635,7 @@ test('can get account transfers', async () => {
572
635
  assert_1.default.strictEqual(account_balances.length, transfers.length);
573
636
  timestamp = 1n << 64n;
574
637
  i = 0;
575
- for (var transfer of transfers) {
638
+ for (const transfer of transfers) {
576
639
  assert_1.default.ok(transfer.timestamp < timestamp);
577
640
  timestamp = transfer.timestamp;
578
641
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -595,7 +658,7 @@ test('can get account transfers', async () => {
595
658
  assert_1.default.strictEqual(account_balances.length, transfers.length);
596
659
  timestamp = 0n;
597
660
  i = 0;
598
- for (var transfer of transfers) {
661
+ for (const transfer of transfers) {
599
662
  assert_1.default.ok(timestamp < transfer.timestamp);
600
663
  timestamp = transfer.timestamp;
601
664
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -617,7 +680,7 @@ test('can get account transfers', async () => {
617
680
  assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
618
681
  assert_1.default.strictEqual(account_balances.length, transfers.length);
619
682
  i = 0;
620
- for (var transfer of transfers) {
683
+ for (const transfer of transfers) {
621
684
  assert_1.default.ok(timestamp < transfer.timestamp);
622
685
  timestamp = transfer.timestamp;
623
686
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -655,7 +718,7 @@ test('can get account transfers', async () => {
655
718
  assert_1.default.strictEqual(account_balances.length, transfers.length);
656
719
  timestamp = 1n << 64n;
657
720
  i = 0;
658
- for (var transfer of transfers) {
721
+ for (const transfer of transfers) {
659
722
  assert_1.default.ok(timestamp > transfer.timestamp);
660
723
  timestamp = transfer.timestamp;
661
724
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -677,7 +740,7 @@ test('can get account transfers', async () => {
677
740
  assert_1.default.strictEqual(transfers.length, transfers_created.length / 2);
678
741
  assert_1.default.strictEqual(account_balances.length, transfers.length);
679
742
  i = 0;
680
- for (var transfer of transfers) {
743
+ for (const transfer of transfers) {
681
744
  assert_1.default.ok(timestamp > transfer.timestamp);
682
745
  timestamp = transfer.timestamp;
683
746
  assert_1.default.ok(account_balances[i].timestamp == transfer.timestamp);
@@ -813,8 +876,8 @@ test('can get account transfers', async () => {
813
876
  });
814
877
  test('can query accounts', async () => {
815
878
  {
816
- var accounts = [];
817
- for (var i = 0; i < 10; i++) {
879
+ const accounts = [];
880
+ for (let i = 0; i < 10; i++) {
818
881
  accounts.push({
819
882
  id: (0, _1.id)(),
820
883
  debits_pending: 0n,
@@ -839,7 +902,7 @@ test('can query accounts', async () => {
839
902
  }
840
903
  }
841
904
  {
842
- var filter = {
905
+ const filter = {
843
906
  user_data_128: 1000n,
844
907
  user_data_64: 100n,
845
908
  user_data_32: 10,
@@ -850,10 +913,10 @@ test('can query accounts', async () => {
850
913
  limit: BATCH_MAX,
851
914
  flags: _1.QueryFilterFlags.none,
852
915
  };
853
- var query = await client.queryAccounts(filter);
916
+ const query = await client.queryAccounts(filter);
854
917
  assert_1.default.strictEqual(query.length, 5);
855
- var timestamp = 0n;
856
- for (var account of query) {
918
+ let timestamp = 0n;
919
+ for (const account of query) {
857
920
  assert_1.default.ok(timestamp < account.timestamp);
858
921
  timestamp = account.timestamp;
859
922
  assert_1.default.strictEqual(account.user_data_128, filter.user_data_128);
@@ -864,7 +927,7 @@ test('can query accounts', async () => {
864
927
  }
865
928
  }
866
929
  {
867
- var filter = {
930
+ const filter = {
868
931
  user_data_128: 2000n,
869
932
  user_data_64: 200n,
870
933
  user_data_32: 20,
@@ -875,10 +938,10 @@ test('can query accounts', async () => {
875
938
  limit: BATCH_MAX,
876
939
  flags: _1.QueryFilterFlags.reversed,
877
940
  };
878
- var query = await client.queryAccounts(filter);
941
+ const query = await client.queryAccounts(filter);
879
942
  assert_1.default.strictEqual(query.length, 5);
880
- var timestamp = 1n << 64n;
881
- for (var account of query) {
943
+ let timestamp = 1n << 64n;
944
+ for (const account of query) {
882
945
  assert_1.default.ok(timestamp > account.timestamp);
883
946
  timestamp = account.timestamp;
884
947
  assert_1.default.strictEqual(account.user_data_128, filter.user_data_128);
@@ -889,7 +952,7 @@ test('can query accounts', async () => {
889
952
  }
890
953
  }
891
954
  {
892
- var filter = {
955
+ const filter = {
893
956
  user_data_128: 0n,
894
957
  user_data_64: 0n,
895
958
  user_data_32: 0,
@@ -900,17 +963,17 @@ test('can query accounts', async () => {
900
963
  limit: BATCH_MAX,
901
964
  flags: _1.QueryFilterFlags.none,
902
965
  };
903
- var query = await client.queryAccounts(filter);
966
+ const query = await client.queryAccounts(filter);
904
967
  assert_1.default.strictEqual(query.length, 10);
905
- var timestamp = 0n;
906
- for (var account of query) {
968
+ let timestamp = 0n;
969
+ for (const account of query) {
907
970
  assert_1.default.ok(timestamp < account.timestamp);
908
971
  timestamp = account.timestamp;
909
972
  assert_1.default.strictEqual(account.code, filter.code);
910
973
  }
911
974
  }
912
975
  {
913
- var filter = {
976
+ const filter = {
914
977
  user_data_128: 0n,
915
978
  user_data_64: 0n,
916
979
  user_data_32: 0,
@@ -921,10 +984,10 @@ test('can query accounts', async () => {
921
984
  limit: 5,
922
985
  flags: _1.QueryFilterFlags.reversed,
923
986
  };
924
- var query = await client.queryAccounts(filter);
987
+ let query = await client.queryAccounts(filter);
925
988
  assert_1.default.strictEqual(query.length, 5);
926
- var timestamp = 1n << 64n;
927
- for (var account of query) {
989
+ let timestamp = 1n << 64n;
990
+ for (const account of query) {
928
991
  assert_1.default.ok(timestamp > account.timestamp);
929
992
  timestamp = account.timestamp;
930
993
  assert_1.default.strictEqual(account.code, filter.code);
@@ -932,7 +995,7 @@ test('can query accounts', async () => {
932
995
  filter.timestamp_max = timestamp - 1n;
933
996
  query = await client.queryAccounts(filter);
934
997
  assert_1.default.strictEqual(query.length, 5);
935
- for (var account of query) {
998
+ for (const account of query) {
936
999
  assert_1.default.ok(timestamp > account.timestamp);
937
1000
  timestamp = account.timestamp;
938
1001
  assert_1.default.strictEqual(account.code, filter.code);
@@ -942,7 +1005,7 @@ test('can query accounts', async () => {
942
1005
  assert_1.default.strictEqual(query.length, 0);
943
1006
  }
944
1007
  {
945
- var filter = {
1008
+ const filter = {
946
1009
  user_data_128: 0n,
947
1010
  user_data_64: 200n,
948
1011
  user_data_32: 10,
@@ -953,7 +1016,7 @@ test('can query accounts', async () => {
953
1016
  limit: BATCH_MAX,
954
1017
  flags: _1.QueryFilterFlags.none,
955
1018
  };
956
- var query = await client.queryAccounts(filter);
1019
+ const query = await client.queryAccounts(filter);
957
1020
  assert_1.default.strictEqual(query.length, 0);
958
1021
  }
959
1022
  });
@@ -978,8 +1041,8 @@ test('can query transfers', async () => {
978
1041
  assert_1.default.deepStrictEqual(account_results.length, 1);
979
1042
  assert_1.default.ok(account_results[0].timestamp > 0);
980
1043
  assert_1.default.deepStrictEqual(account_results[0].status, _1.CreateAccountStatus.created);
981
- var transfers_created = [];
982
- for (var i = 0; i < 10; i++) {
1044
+ const transfers_created = [];
1045
+ for (let i = 0; i < 10; i++) {
983
1046
  transfers_created.push({
984
1047
  id: (0, _1.id)(),
985
1048
  debit_account_id: i % 2 == 0 ? account.id : accountA.id,
@@ -1004,7 +1067,7 @@ test('can query transfers', async () => {
1004
1067
  }
1005
1068
  }
1006
1069
  {
1007
- var filter = {
1070
+ const filter = {
1008
1071
  user_data_128: 1000n,
1009
1072
  user_data_64: 100n,
1010
1073
  user_data_32: 10,
@@ -1015,10 +1078,10 @@ test('can query transfers', async () => {
1015
1078
  limit: BATCH_MAX,
1016
1079
  flags: _1.QueryFilterFlags.none,
1017
1080
  };
1018
- var query = await client.queryTransfers(filter);
1081
+ const query = await client.queryTransfers(filter);
1019
1082
  assert_1.default.strictEqual(query.length, 5);
1020
- var timestamp = 0n;
1021
- for (var transfer of query) {
1083
+ let timestamp = 0n;
1084
+ for (const transfer of query) {
1022
1085
  assert_1.default.ok(timestamp < transfer.timestamp);
1023
1086
  timestamp = transfer.timestamp;
1024
1087
  assert_1.default.strictEqual(transfer.user_data_128, filter.user_data_128);
@@ -1029,7 +1092,7 @@ test('can query transfers', async () => {
1029
1092
  }
1030
1093
  }
1031
1094
  {
1032
- var filter = {
1095
+ const filter = {
1033
1096
  user_data_128: 2000n,
1034
1097
  user_data_64: 200n,
1035
1098
  user_data_32: 20,
@@ -1040,10 +1103,10 @@ test('can query transfers', async () => {
1040
1103
  limit: BATCH_MAX,
1041
1104
  flags: _1.QueryFilterFlags.reversed,
1042
1105
  };
1043
- var query = await client.queryTransfers(filter);
1106
+ const query = await client.queryTransfers(filter);
1044
1107
  assert_1.default.strictEqual(query.length, 5);
1045
- var timestamp = 1n << 64n;
1046
- for (var transfer of query) {
1108
+ let timestamp = 1n << 64n;
1109
+ for (const transfer of query) {
1047
1110
  assert_1.default.ok(timestamp > transfer.timestamp);
1048
1111
  timestamp = transfer.timestamp;
1049
1112
  assert_1.default.strictEqual(transfer.user_data_128, filter.user_data_128);
@@ -1054,7 +1117,7 @@ test('can query transfers', async () => {
1054
1117
  }
1055
1118
  }
1056
1119
  {
1057
- var filter = {
1120
+ const filter = {
1058
1121
  user_data_128: 0n,
1059
1122
  user_data_64: 0n,
1060
1123
  user_data_32: 0,
@@ -1065,17 +1128,17 @@ test('can query transfers', async () => {
1065
1128
  limit: BATCH_MAX,
1066
1129
  flags: _1.QueryFilterFlags.none,
1067
1130
  };
1068
- var query = await client.queryTransfers(filter);
1131
+ const query = await client.queryTransfers(filter);
1069
1132
  assert_1.default.strictEqual(query.length, 10);
1070
- var timestamp = 0n;
1071
- for (var transfer of query) {
1133
+ let timestamp = 0n;
1134
+ for (const transfer of query) {
1072
1135
  assert_1.default.ok(timestamp < transfer.timestamp);
1073
1136
  timestamp = transfer.timestamp;
1074
1137
  assert_1.default.strictEqual(transfer.code, filter.code);
1075
1138
  }
1076
1139
  }
1077
1140
  {
1078
- var filter = {
1141
+ const filter = {
1079
1142
  user_data_128: 0n,
1080
1143
  user_data_64: 0n,
1081
1144
  user_data_32: 0,
@@ -1086,10 +1149,10 @@ test('can query transfers', async () => {
1086
1149
  limit: 5,
1087
1150
  flags: _1.QueryFilterFlags.reversed,
1088
1151
  };
1089
- var query = await client.queryTransfers(filter);
1152
+ let query = await client.queryTransfers(filter);
1090
1153
  assert_1.default.strictEqual(query.length, 5);
1091
- var timestamp = 1n << 64n;
1092
- for (var transfer of query) {
1154
+ let timestamp = 1n << 64n;
1155
+ for (const transfer of query) {
1093
1156
  assert_1.default.ok(timestamp > transfer.timestamp);
1094
1157
  timestamp = transfer.timestamp;
1095
1158
  assert_1.default.strictEqual(transfer.code, filter.code);
@@ -1097,7 +1160,7 @@ test('can query transfers', async () => {
1097
1160
  filter.timestamp_max = timestamp - 1n;
1098
1161
  query = await client.queryTransfers(filter);
1099
1162
  assert_1.default.strictEqual(query.length, 5);
1100
- for (var transfer of query) {
1163
+ for (const transfer of query) {
1101
1164
  assert_1.default.ok(timestamp > transfer.timestamp);
1102
1165
  timestamp = transfer.timestamp;
1103
1166
  assert_1.default.strictEqual(transfer.code, filter.code);
@@ -1107,7 +1170,7 @@ test('can query transfers', async () => {
1107
1170
  assert_1.default.strictEqual(query.length, 0);
1108
1171
  }
1109
1172
  {
1110
- var filter = {
1173
+ const filter = {
1111
1174
  user_data_128: 0n,
1112
1175
  user_data_64: 200n,
1113
1176
  user_data_32: 10,
@@ -1118,7 +1181,7 @@ test('can query transfers', async () => {
1118
1181
  limit: BATCH_MAX,
1119
1182
  flags: _1.QueryFilterFlags.none,
1120
1183
  };
1121
- var query = await client.queryTransfers(filter);
1184
+ const query = await client.queryTransfers(filter);
1122
1185
  assert_1.default.strictEqual(query.length, 0);
1123
1186
  }
1124
1187
  });
@@ -1233,7 +1296,7 @@ test('can import accounts and transfers', async () => {
1233
1296
  let accountLookup = await client.lookupAccounts([accountTmp.id]);
1234
1297
  assert_1.default.strictEqual(accountLookup.length, 1);
1235
1298
  const timestampMax = accountLookup[0].timestamp;
1236
- await new Promise(_ => setTimeout(_, 10));
1299
+ await sleep_ms(10);
1237
1300
  const accountA = {
1238
1301
  id: (0, _1.id)(),
1239
1302
  debits_pending: 0n,
@@ -1314,13 +1377,46 @@ test('accept zero-length lookup_transfers', async () => {
1314
1377
  assert_1.default.deepStrictEqual(transfers, []);
1315
1378
  });
1316
1379
  test("destroy client in-flight", async () => {
1317
- const client = (0, _1.createClient)({ cluster_id: 92n, replica_addresses: ["99"] });
1318
- setTimeout(() => client.destroy(), 30);
1319
- assert_1.default.rejects(async () => await client.lookupAccounts([0n]), (err) => {
1320
- assert_1.default.ok(err instanceof _1.RequestError);
1321
- assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_CLIENT_CLOSED);
1322
- return true;
1380
+ const client_count = 5;
1381
+ const action_count = 50;
1382
+ const clients = range(client_count).map(() => (0, _1.createClient)({
1383
+ cluster_id: 0n,
1384
+ replica_addresses: REPLICA_ADDRESSES,
1385
+ }));
1386
+ const ids = [];
1387
+ const actions = range(action_count).map(() => async () => {
1388
+ await sleep_ms(Math.random() < 0.2 ? 0 : Math.random());
1389
+ const client = clients[random_index(clients)];
1390
+ if (Math.random() < 0.1) {
1391
+ client.destroy();
1392
+ return;
1393
+ }
1394
+ if (Math.random() < 0.7) {
1395
+ const id_new = (0, _1.id)();
1396
+ ids.push(id_new);
1397
+ try {
1398
+ await client.createAccounts([{ ...accountA, id: id_new }]);
1399
+ }
1400
+ catch (err) {
1401
+ assert_1.default.ok(err instanceof _1.RequestError);
1402
+ assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_CLIENT_CLOSED);
1403
+ }
1404
+ return;
1405
+ }
1406
+ try {
1407
+ const id_lookup = (Math.random() < 0.2 || ids.length == 0)
1408
+ ? BigInt(Math.floor(Math.random() * 10000))
1409
+ : ids[random_index(ids)];
1410
+ await client.lookupAccounts([id_lookup]);
1411
+ }
1412
+ catch (err) {
1413
+ assert_1.default.ok(err instanceof _1.RequestError);
1414
+ assert_1.default.strictEqual(err.code, _1.ErrorCodes.ERR_CLIENT_CLOSED);
1415
+ }
1323
1416
  });
1417
+ await Promise.all(actions.map((f) => f()));
1418
+ for (const client of clients)
1419
+ client.destroy();
1324
1420
  });
1325
1421
  async function main() {
1326
1422
  const start = new Date().getTime();