@ledgerhq/revault-api 1.43.0 → 1.43.2

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/lib/fakes.mjs CHANGED
@@ -1,10 +1,11 @@
1
1
  import { __export } from './chunk-J5LGTIGS.mjs';
2
2
  import { faker } from '@faker-js/faker';
3
- import { AccountType, ChallengeType, PsdModel, UserRole, UserRegistrationState, AllowedAction, AdminPermission, RequestType, AccountGovernanceType, ActivationStatus, MessageType, WhitelistType, RequestReviewStatus, RequestState, GateAccountType } from '@prisma/client';
4
- import 'ts-pattern';
3
+ import { ChallengeType, PsdModel, UserRole, UserRegistrationState, AllowedAction, AdminPermission, RequestType, AccountGovernanceType, ActivationStatus, AccountType, MessageType, WhitelistType, UserDeviceType, RequestReviewStatus, RequestState, GateAccountType, GateUserType } from '@prisma/client';
4
+ import { match, P } from 'ts-pattern';
5
5
  import z14, { z } from 'zod';
6
- import { omit, times, get, isPlainObject } from 'lodash';
7
6
  import invariant8 from 'invariant';
7
+ import { ec } from 'elliptic';
8
+ import { omit, times, get, isPlainObject } from 'lodash-es';
8
9
  import 'axios';
9
10
 
10
11
  var zHexString = z.string().regex(/^[0-9a-fA-F]+$/);
@@ -14,7 +15,8 @@ var zCurrencyString = z.string().nonempty().max(40).regex(/^\w+$/).meta({ descri
14
15
  var zNetwork = z.string().nonempty().max(40).regex(/^\w+$/).meta({ description: "Network (Same as currency for now)" });
15
16
  var zCurrency = z.object({
16
17
  network: zNetwork,
17
- contractAddress: z.string().nonempty().nullable().meta({ description: "Token contract address" })
18
+ contractAddress: z.string().nonempty().nullable().meta({ description: "Token issuer" }),
19
+ tokenIdentifier: z.string().nonempty().nullable().meta({ description: "Token identifier" })
18
20
  });
19
21
  z.string().regex(/^[\w-]+$/).nonempty();
20
22
  var zHsmObjectId = z.string().regex(/^[\w-]+$/).nonempty();
@@ -26,7 +28,21 @@ z.codec(z.iso.datetime(), z.date(), {
26
28
  });
27
29
 
28
30
  // src/networks/common.ts
29
- var NetworkFamily = omit(AccountType, ["RAW_SIGNING"]);
31
+ var NetworkFamily = {
32
+ BITCOIN_LIKE: "BITCOIN_LIKE",
33
+ CANTON_LIKE: "CANTON_LIKE",
34
+ CARDANO_LIKE: "CARDANO_LIKE",
35
+ ETHEREUM_LIKE: "ETHEREUM_LIKE",
36
+ GENERIC_LIKE: "GENERIC_LIKE",
37
+ HEDERA_LIKE: "HEDERA_LIKE",
38
+ POLKADOT_LIKE: "POLKADOT_LIKE",
39
+ RIPPLE_LIKE: "RIPPLE_LIKE",
40
+ SOLANA_LIKE: "SOLANA_LIKE",
41
+ STELLAR_LIKE: "STELLAR_LIKE",
42
+ SUI_LIKE: "SUI_LIKE",
43
+ TEZOS_LIKE: "TEZOS_LIKE",
44
+ TRON_LIKE: "TRON_LIKE"
45
+ };
30
46
  var zHexDataString = z14.codec(z14.string().regex(/^(?:0x|0X)?[a-fA-F0-9]+$/), z14.string(), {
31
47
  decode: (hex) => `0x${hex.toLowerCase().replace("0x", "")}`,
32
48
  encode: (hex) => hex
@@ -88,19 +104,22 @@ var zBitcoinLikeSendData = zCommonTransactionData.extend({
88
104
  id: "BitcoinLikeSendData"
89
105
  });
90
106
  var zBitcoinLikeTransactionData = z14.discriminatedUnion("type", [zBitcoinLikeSendData]);
107
+ var zBitcoinLikeEstimatedFees = z14.object({
108
+ type: z14.literal(NetworkFamily.BITCOIN_LIKE),
109
+ fee: zIntString
110
+ }).meta({ description: "Bitcoin-like fees" });
91
111
  var zBitcoinLikeTransactionResponse = z14.discriminatedUnion("type", [
92
112
  zCommonTransactionResponse.extend({ type: zBitcoinLikeTransactionType }).meta({ description: "Bitcoin-like transaction" })
93
113
  ]);
94
114
 
95
115
  // src/networks/bitcoin/index.ts
96
116
  var BITCOIN_SPEC = {
97
- family: NetworkFamily.BITCOIN_LIKE,
98
117
  zAssetFields: zBitcoinLikeAssetFields,
99
118
  zLiveData: zBitcoinLikeLiveData,
100
119
  zTransactionType: zBitcoinLikeTransactionType,
101
120
  zTransactionData: zBitcoinLikeTransactionData,
102
121
  zSendTransactionData: zBitcoinLikeSendData,
103
- zEstimatedFees: z14.never(),
122
+ zEstimatedFees: zBitcoinLikeEstimatedFees,
104
123
  zTransactionResponse: zBitcoinLikeTransactionResponse,
105
124
  zStakingFields: z14.never()};
106
125
  var zCantonTransferProposal = z14.object({
@@ -122,13 +141,41 @@ var zCantonLikeAssetFields = z14.object({
122
141
  var zCantonLikeLiveData = zCommonLiveData.extend({
123
142
  type: z14.literal(NetworkFamily.CANTON_LIKE).meta({ description: "Account type" })
124
143
  }).meta({ description: "Canton-like" });
125
- var zCantonLikeTransactionType = z14.enum(["CANTON_LIKE_SEND", "CANTON_LIKE_RECEIVE", "CANTON_LIKE_PRE_APPROVAL", "CANTON_LIKE_TAP"]).meta({ description: "Canton-like transaction type" });
144
+ var zCantonLikeTransactionType = z14.enum([
145
+ "CANTON_LIKE_SEND",
146
+ "CANTON_LIKE_SEND_TOKEN",
147
+ "CANTON_LIKE_WITHDRAW",
148
+ "CANTON_LIKE_RECEIVE",
149
+ "CANTON_LIKE_PRE_APPROVAL",
150
+ "CANTON_LIKE_TAP"
151
+ ]).meta({ description: "Canton-like transaction type" });
152
+ var zExecuteBeforeSeconds = z14.number().int().positive().optional().meta({ description: "Execute before seconds" });
126
153
  var zCantonLikeSendData = zCommonTransactionData.omit({ maxFee: true }).extend({
154
+ executeBeforeSeconds: zExecuteBeforeSeconds,
127
155
  type: z14.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND)
128
156
  }).meta({
129
157
  description: "Canton-like send data",
130
158
  id: "CantonLikeSendData"
131
159
  });
160
+ var zCantonLikeSendTokenData = zCommonTransactionData.omit({ maxFee: true }).extend({
161
+ executeBeforeSeconds: zExecuteBeforeSeconds,
162
+ type: z14.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND_TOKEN)
163
+ }).meta({
164
+ description: "Canton-like send token data",
165
+ id: "CantonLikeSendTokenData"
166
+ });
167
+ var zCantonLikeWithdrawData = z14.object({
168
+ currency: zCurrencyString.meta({
169
+ description: "Will be deprecated soon, use Account.network. Transfer currency"
170
+ }),
171
+ // TODO: to remove, use account.network instead
172
+ transferProposal: zCantonTransferProposal,
173
+ reason: z14.string().nullable().meta({ description: "Reason of the verdict" }),
174
+ type: z14.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_WITHDRAW)
175
+ }).meta({
176
+ description: "Canton-like withdraw data",
177
+ id: "CantonLikeWithdrawData"
178
+ });
132
179
  var zCantonLikeReceiveData = z14.object({
133
180
  currency: zCurrencyString.meta({
134
181
  description: "Will be deprecated soon, use Account.network. Transfer currency"
@@ -163,6 +210,8 @@ var zCantonLikeTapData = zCommonTransactionData.extend({
163
210
  });
164
211
  var zCantonLikeTransactionData = z14.discriminatedUnion("type", [
165
212
  zCantonLikeSendData,
213
+ zCantonLikeSendTokenData,
214
+ zCantonLikeWithdrawData,
166
215
  zCantonLikeReceiveData,
167
216
  zCantonLikePreApprovalData,
168
217
  zCantonLikeTapData
@@ -173,7 +222,6 @@ var zCantonLikeTransactionResponse = z14.discriminatedUnion("type", [
173
222
 
174
223
  // src/networks/canton/index.ts
175
224
  var CANTON_SPEC = {
176
- family: NetworkFamily.CANTON_LIKE,
177
225
  zAssetFields: zCantonLikeAssetFields,
178
226
  zLiveData: zCantonLikeLiveData,
179
227
  zTransactionType: zCantonLikeTransactionType,
@@ -270,7 +318,6 @@ var zCardanoLikeTransactionResponse = z14.discriminatedUnion("type", [
270
318
 
271
319
  // src/networks/cardano/index.ts
272
320
  var CARDANO_SPEC = {
273
- family: NetworkFamily.CARDANO_LIKE,
274
321
  zAssetFields: zCardanoLikeAssetFields,
275
322
  zLiveData: zCardanoLikeLiveData,
276
323
  zTransactionType: zCardanoLikeTransactionType,
@@ -372,7 +419,6 @@ var zEthereumLikeTransactionResponse = z14.discriminatedUnion("type", [
372
419
 
373
420
  // src/networks/ethereum/index.ts
374
421
  var ETHEREUM_SPEC = {
375
- family: NetworkFamily.ETHEREUM_LIKE,
376
422
  zAssetFields: zEthereumLikeAssetFields,
377
423
  zLiveData: zEthereumLikeLiveData,
378
424
  zTransactionType: zEthereumLikeTransactionType,
@@ -402,7 +448,6 @@ var zGenericTransactionResponse = z14.discriminatedUnion("type", [
402
448
 
403
449
  // src/networks/generic/index.ts
404
450
  var GENERIC_SPEC = {
405
- family: NetworkFamily.GENERIC_LIKE,
406
451
  zAssetFields: zGenericAssetFields,
407
452
  zLiveData: zGenericLiveData,
408
453
  zTransactionType: zGenericTransactionType,
@@ -454,7 +499,6 @@ var zHederaLikeTransactionResponse = z14.discriminatedUnion("type", [
454
499
 
455
500
  // src/networks/hedera/index.ts
456
501
  var HEDERA_SPEC = {
457
- family: NetworkFamily.HEDERA_LIKE,
458
502
  zAssetFields: zHederaLikeAssetFields,
459
503
  zLiveData: zHederaLikeLiveData,
460
504
  zTransactionType: zHederaLikeTransactionType,
@@ -650,7 +694,6 @@ var zPolkadotLikeTransactionResponse = z14.discriminatedUnion("type", [
650
694
 
651
695
  // src/networks/polkadot/index.ts
652
696
  var POLKADOT_SPEC = {
653
- family: NetworkFamily.POLKADOT_LIKE,
654
697
  zAssetFields: zPolkadotLikeAssetFields,
655
698
  zLiveData: zPolkadotLikeLiveData,
656
699
  zTransactionType: zPolkadotLikeTransactionType,
@@ -690,7 +733,6 @@ var zRippleLikeTransactionResponse = z14.discriminatedUnion("type", [
690
733
 
691
734
  // src/networks/ripple/index.ts
692
735
  var RIPPLE_SPEC = {
693
- family: NetworkFamily.RIPPLE_LIKE,
694
736
  zAssetFields: zRippleLikeAssetFields,
695
737
  zLiveData: zRippleLikeLiveData,
696
738
  zTransactionType: zRippleLikeTransactionType,
@@ -886,7 +928,6 @@ var zSolanaLikeTransactionResponse = z14.discriminatedUnion("type", [
886
928
 
887
929
  // src/networks/solana/index.ts
888
930
  var SOLANA_SPEC = {
889
- family: NetworkFamily.SOLANA_LIKE,
890
931
  zAssetFields: zSolanaLikeAssetFields,
891
932
  zLiveData: zSolanaLikeLiveData,
892
933
  zTransactionType: zSolanaLikeTransactionType,
@@ -936,7 +977,6 @@ var zStellarLikeTransactionResponse = z14.discriminatedUnion("type", [
936
977
 
937
978
  // src/networks/stellar/index.ts
938
979
  var STELLAR_SPEC = {
939
- family: NetworkFamily.STELLAR_LIKE,
940
980
  zAssetFields: zStellarLikeAssetFields,
941
981
  zLiveData: zStellarLikeLiveData,
942
982
  zTransactionType: zStellarLikeTransactionType,
@@ -1026,7 +1066,6 @@ var zSuiLikeTransactionResponse = z14.discriminatedUnion("type", [
1026
1066
 
1027
1067
  // src/networks/sui/index.ts
1028
1068
  var SUI_SPEC = {
1029
- family: NetworkFamily.SUI_LIKE,
1030
1069
  zAssetFields: zSuiLikeAssetFields,
1031
1070
  zLiveData: zSuiLikeLiveData,
1032
1071
  zTransactionType: zSuiLikeTransactionType,
@@ -1103,7 +1142,6 @@ var zTezosLikeTransactionResponse = z14.discriminatedUnion("type", [
1103
1142
 
1104
1143
  // src/networks/tezos/index.ts
1105
1144
  var TEZOS_SPEC = {
1106
- family: NetworkFamily.TEZOS_LIKE,
1107
1145
  zAssetFields: zTezosLikeAssetFields,
1108
1146
  zLiveData: zTezosLikeLiveData,
1109
1147
  zTransactionType: zTezosLikeTransactionType,
@@ -1151,7 +1189,6 @@ var zTronLikeTransactionResponse = z14.discriminatedUnion("type", [
1151
1189
 
1152
1190
  // src/networks/tron/index.ts
1153
1191
  var TRON_SPEC = {
1154
- family: NetworkFamily.TRON_LIKE,
1155
1192
  zAssetFields: zTronLikeAssetFields,
1156
1193
  zLiveData: zTronLikeLiveData,
1157
1194
  zTransactionType: zTronLikeTransactionType,
@@ -1201,6 +1238,7 @@ z14.discriminatedUnion("type", [
1201
1238
  TEZOS_SPEC.zStakingFields
1202
1239
  ]);
1203
1240
  z14.discriminatedUnion("type", [
1241
+ BITCOIN_SPEC.zEstimatedFees,
1204
1242
  ETHEREUM_SPEC.zEstimatedFees,
1205
1243
  HEDERA_SPEC.zEstimatedFees,
1206
1244
  RIPPLE_SPEC.zEstimatedFees,
@@ -1239,11 +1277,6 @@ z14.union([
1239
1277
  ...TEZOS_SPEC.zTransactionType.enum,
1240
1278
  ...TRON_SPEC.zTransactionType.enum
1241
1279
  });
1242
- ({
1243
- ...NetworkFamily,
1244
- // TODO: Sometimes `NetworkFamily` is not a `TransactionType` prefix - but why?
1245
- [NetworkFamily.GENERIC_LIKE]: "GENERIC"
1246
- });
1247
1280
  var zTransactionData = z14.discriminatedUnion("type", [
1248
1281
  ...BITCOIN_SPEC.zTransactionData.options,
1249
1282
  ...CANTON_SPEC.zTransactionData.options,
@@ -1303,6 +1336,14 @@ var buildGateSyncId = (workspaceName, gateType, gateId) => {
1303
1336
 
1304
1337
  // src/utils.ts
1305
1338
  var isRecord = (value) => isPlainObject(value);
1339
+ var randomHex = (length) => {
1340
+ const hexBytes = times(length, () => {
1341
+ const randomByte = Math.floor(Math.random() * 256);
1342
+ return randomByte.toString(16).padStart(2, "0");
1343
+ });
1344
+ return hexBytes.join("").toUpperCase();
1345
+ };
1346
+ var genAuthUserId = () => randomHex(20);
1306
1347
  var ensureNonEmptyArray = (values, message) => {
1307
1348
  invariant8(
1308
1349
  values.length > 0,
@@ -1317,7 +1358,8 @@ function unreachable(value) {
1317
1358
  // src/__fakes__/faker-utils.ts
1318
1359
  var fakeUniqueName = (length = 20) => faker.string.alphanumeric({ length, casing: "lower" });
1319
1360
  var fakeHexString = (length, casing = "upper") => faker.string.hexadecimal({ prefix: "", casing, length });
1320
- var fakePubKey = () => fakeHexString(130);
1361
+ var fakePubKey = () => new ec("p256").genKeyPair().getPublic(false, "hex");
1362
+ var fakeDeviceUserId = () => faker.string.hexadecimal({ prefix: "", casing: "upper", length: 16 });
1321
1363
  var fakeIntegerId = () => faker.number.int({ min: 1, max: 2e9 });
1322
1364
  var fakeGateId = fakeIntegerId;
1323
1365
  var fakeBase64String = (length) => btoa(faker.string.sample(length));
@@ -1342,6 +1384,8 @@ var fakeWorkspaceName = () => faker.string.alphanumeric({ length: 16, casing: "l
1342
1384
  // src/__fakes__/canton.ts
1343
1385
  var fakeCantonAddress = (role) => `${role}-${faker.lorem.word()}::${fakeHexString(68, "lower")}`;
1344
1386
  var fakeCantonPartyId = () => fakeCantonAddress("party");
1387
+ var fakeCantonContractId = () => fakeHexString(138, "lower");
1388
+ var fakeCantonInstrumentId = () => fakeHexString(10, "lower");
1345
1389
  var injectSyncId = (obj) => {
1346
1390
  let { syncId } = obj;
1347
1391
  if (syncId === void 0) {
@@ -1399,6 +1443,7 @@ var genAssetFieldsForType = (type) => {
1399
1443
  derivationPath: "84'/0'/0'",
1400
1444
  address: null,
1401
1445
  contractAddress: null,
1446
+ tokenIdentifier: null,
1402
1447
  xpub: fakeHexString(120),
1403
1448
  hsmXpub,
1404
1449
  hsmChainCode
@@ -1410,6 +1455,7 @@ var genAssetFieldsForType = (type) => {
1410
1455
  derivationPath: "44'/60'/0'",
1411
1456
  address: faker.finance.ethereumAddress(),
1412
1457
  contractAddress: null,
1458
+ tokenIdentifier: null,
1413
1459
  xpub: null,
1414
1460
  hsmXpub,
1415
1461
  hsmChainCode
@@ -1421,6 +1467,7 @@ var genAssetFieldsForType = (type) => {
1421
1467
  derivationPath: "44'/6767'/0'/0'/0'",
1422
1468
  address: fakeCantonPartyId(),
1423
1469
  contractAddress: null,
1470
+ tokenIdentifier: null,
1424
1471
  xpub: null,
1425
1472
  hsmXpub,
1426
1473
  hsmChainCode: null
@@ -1432,6 +1479,7 @@ var genAssetFieldsForType = (type) => {
1432
1479
  derivationPath: "1852'/1815'/0'",
1433
1480
  address: `addr${faker.string.alphanumeric({ length: 100, casing: "lower" })}`,
1434
1481
  contractAddress: null,
1482
+ tokenIdentifier: null,
1435
1483
  xpub: null,
1436
1484
  hsmXpub,
1437
1485
  hsmChainCode
@@ -1443,6 +1491,7 @@ var genAssetFieldsForType = (type) => {
1443
1491
  derivationPath: "44'/501'/0'",
1444
1492
  address: faker.string.alphanumeric({ length: 44, casing: "lower" }),
1445
1493
  contractAddress: null,
1494
+ tokenIdentifier: null,
1446
1495
  xpub: null,
1447
1496
  hsmXpub,
1448
1497
  hsmChainCode: null
@@ -1454,6 +1503,7 @@ var genAssetFieldsForType = (type) => {
1454
1503
  derivationPath: "44'/1729'/0'",
1455
1504
  address: `tz${faker.string.alphanumeric({ length: 34, casing: "mixed" })}`,
1456
1505
  contractAddress: null,
1506
+ tokenIdentifier: null,
1457
1507
  xpub: null,
1458
1508
  hsmXpub,
1459
1509
  hsmChainCode
@@ -1465,6 +1515,7 @@ var genAssetFieldsForType = (type) => {
1465
1515
  derivationPath: "44'/148'/0'",
1466
1516
  address: faker.string.alphanumeric({ length: 56, casing: "upper" }),
1467
1517
  contractAddress: null,
1518
+ tokenIdentifier: null,
1468
1519
  xpub: null,
1469
1520
  hsmXpub,
1470
1521
  hsmChainCode
@@ -1476,6 +1527,7 @@ var genAssetFieldsForType = (type) => {
1476
1527
  derivationPath: "44'/144'/0'",
1477
1528
  address: faker.string.alphanumeric({ length: 34, casing: "mixed" }),
1478
1529
  contractAddress: null,
1530
+ tokenIdentifier: null,
1479
1531
  xpub: `xpub${faker.string.alphanumeric({ length: 107, casing: "mixed" })}`,
1480
1532
  hsmXpub,
1481
1533
  hsmChainCode
@@ -1487,6 +1539,7 @@ var genAssetFieldsForType = (type) => {
1487
1539
  derivationPath: "44'/354'/0'",
1488
1540
  address: faker.string.alphanumeric({ length: 48, casing: "mixed" }),
1489
1541
  contractAddress: null,
1542
+ tokenIdentifier: null,
1490
1543
  xpub: null,
1491
1544
  hsmXpub,
1492
1545
  hsmChainCode: null
@@ -1498,6 +1551,7 @@ var genAssetFieldsForType = (type) => {
1498
1551
  derivationPath: "44'/195'/0'",
1499
1552
  address: faker.string.alphanumeric({ length: 34, casing: "mixed" }),
1500
1553
  contractAddress: null,
1554
+ tokenIdentifier: null,
1501
1555
  xpub: null,
1502
1556
  hsmXpub,
1503
1557
  hsmChainCode
@@ -1509,6 +1563,7 @@ var genAssetFieldsForType = (type) => {
1509
1563
  derivationPath: "44'/784'/0'",
1510
1564
  address: faker.string.alphanumeric({ length: 34, casing: "mixed" }),
1511
1565
  contractAddress: null,
1566
+ tokenIdentifier: null,
1512
1567
  xpub: null,
1513
1568
  hsmXpub,
1514
1569
  hsmChainCode: null
@@ -1520,6 +1575,7 @@ var genAssetFieldsForType = (type) => {
1520
1575
  derivationPath: "44'/3030'/0'",
1521
1576
  address: faker.string.hexadecimal({ length: 34, casing: "mixed" }),
1522
1577
  contractAddress: null,
1578
+ tokenIdentifier: null,
1523
1579
  xpub: null,
1524
1580
  hsmXpub,
1525
1581
  hsmChainCode
@@ -1531,6 +1587,7 @@ var genAssetFieldsForType = (type) => {
1531
1587
  derivationPath: "44'/118'/0'",
1532
1588
  address: faker.string.alphanumeric({ length: 34, casing: "mixed" }),
1533
1589
  contractAddress: null,
1590
+ tokenIdentifier: null,
1534
1591
  xpub: null,
1535
1592
  hsmXpub,
1536
1593
  hsmChainCode
@@ -1542,6 +1599,7 @@ var genAssetFieldsForType = (type) => {
1542
1599
  derivationPath: "44'/118'/0'",
1543
1600
  address: null,
1544
1601
  contractAddress: null,
1602
+ tokenIdentifier: null,
1545
1603
  xpub: null,
1546
1604
  hsmXpub,
1547
1605
  hsmChainCode
@@ -1607,6 +1665,482 @@ var genAccount = (opts) => {
1607
1665
  ...rest
1608
1666
  });
1609
1667
  };
1668
+ var genSignMessageData = (opts) => ({
1669
+ message: {
1670
+ type: "EIP191",
1671
+ data: fakeHexString(10, "upper")
1672
+ },
1673
+ accountId: faker.string.uuid(),
1674
+ address: faker.finance.ethereumAddress(),
1675
+ derivationPath: "44'/60'/0'/0/0",
1676
+ ...opts
1677
+ });
1678
+ var genBitcoinLikeSendData = (opts) => {
1679
+ return {
1680
+ type: "BITCOIN_LIKE_SEND",
1681
+ currency: "bitcoin",
1682
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1683
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1684
+ recipient: faker.finance.bitcoinAddress(),
1685
+ feeStrategy: {
1686
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"]),
1687
+ feePerByte: faker.number.bigInt({ min: 1 }).toString()
1688
+ },
1689
+ ...opts
1690
+ };
1691
+ };
1692
+ var genCardanoLikeTxData = (txType) => {
1693
+ switch (txType) {
1694
+ case "CARDANO_LIKE_SEND":
1695
+ return {
1696
+ type: txType,
1697
+ currency: "cardano",
1698
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1699
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1700
+ recipient: faker.string.alphanumeric({ length: 30 }),
1701
+ feeStrategy: {
1702
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1703
+ }
1704
+ };
1705
+ case "CARDANO_LIKE_STAKING_DELEGATE":
1706
+ return {
1707
+ type: txType,
1708
+ currency: "cardano",
1709
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1710
+ stakePoolId: `pool${faker.string.alphanumeric({ length: 52 })}`,
1711
+ feeStrategy: {
1712
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1713
+ }
1714
+ };
1715
+ case "CARDANO_LIKE_STAKING_REGISTER":
1716
+ case "CARDANO_LIKE_STAKING_DEREGISTER":
1717
+ case "CARDANO_LIKE_STAKING_WITHDRAW":
1718
+ return {
1719
+ type: txType,
1720
+ currency: "cardano",
1721
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1722
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1723
+ feeStrategy: {
1724
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1725
+ }
1726
+ };
1727
+ }
1728
+ };
1729
+ var genEthereumLikeSendData = (opts) => {
1730
+ const gasLimit = faker.number.bigInt({ min: 1 });
1731
+ const gasPrice = faker.number.bigInt({ min: 1 });
1732
+ const maxFee = gasLimit * gasPrice;
1733
+ return {
1734
+ type: "ETHEREUM_LIKE_SEND",
1735
+ currency: "ethereum",
1736
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1737
+ maxFee: maxFee.toString(),
1738
+ recipient: faker.finance.bitcoinAddress(),
1739
+ feeStrategy: {
1740
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"]),
1741
+ gasLimit: gasLimit.toString(),
1742
+ gasPrice: gasPrice.toString()
1743
+ },
1744
+ ...opts
1745
+ };
1746
+ };
1747
+ var genEthereumLikeExecuteContractData = (opts) => {
1748
+ const sendData = genEthereumLikeSendData();
1749
+ return {
1750
+ ...omit(sendData, ["type"]),
1751
+ type: "ETHEREUM_LIKE_EXECUTE_CONTRACT",
1752
+ contractData: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 128 }),
1753
+ ...opts
1754
+ };
1755
+ };
1756
+ var genEthereumLikeDeployContractData = (opts) => {
1757
+ const sendData = genEthereumLikeSendData();
1758
+ return {
1759
+ ...omit(sendData, ["type"]),
1760
+ type: "ETHEREUM_LIKE_DEPLOY_CONTRACT",
1761
+ recipient: "0x0000000000000000000000000000000000000000",
1762
+ contractData: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 128 }),
1763
+ ...opts
1764
+ };
1765
+ };
1766
+ var genGenericTransactionData = () => {
1767
+ return {
1768
+ type: "GENERIC_TRANSACTION",
1769
+ currency: "tron",
1770
+ rawTx: faker.string.alphanumeric({ length: 100 })
1771
+ };
1772
+ };
1773
+ var genHederaLikeSendData = (txType) => {
1774
+ return {
1775
+ type: txType,
1776
+ currency: "hedera",
1777
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1778
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1779
+ recipient: `0.0.${faker.number.int({ min: 1e7, max: 99999999 }).toString()}`,
1780
+ feeStrategy: {
1781
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1782
+ }
1783
+ };
1784
+ };
1785
+ var genPolkadotLikeTxData = (txType) => {
1786
+ switch (txType) {
1787
+ case "POLKADOT_LIKE_SEND":
1788
+ return {
1789
+ type: txType,
1790
+ currency: "polkadot",
1791
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1792
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1793
+ recipient: faker.string.alphanumeric({ length: 30 })
1794
+ };
1795
+ case "POLKADOT_LIKE_ADDPROXY":
1796
+ case "POLKADOT_LIKE_REMOVEPROXY":
1797
+ return {
1798
+ type: txType,
1799
+ currency: "polkadot",
1800
+ kind: "Staking",
1801
+ proxy: faker.string.alphanumeric({ length: 30 })
1802
+ };
1803
+ case "POLKADOT_LIKE_BOND":
1804
+ return {
1805
+ type: txType,
1806
+ currency: "polkadot",
1807
+ payee: faker.helpers.arrayElement(["Staked", "Stash"]),
1808
+ amount: faker.number.bigInt({ min: 0 }).toString()
1809
+ };
1810
+ case "POLKADOT_LIKE_REBOND":
1811
+ case "POLKADOT_LIKE_UNBOND":
1812
+ return {
1813
+ type: txType,
1814
+ currency: "polkadot",
1815
+ amount: faker.number.bigInt({ min: 0 }).toString()
1816
+ };
1817
+ case "POLKADOT_LIKE_BONDEXTRA":
1818
+ return {
1819
+ type: txType,
1820
+ currency: "polkadot",
1821
+ amount: faker.number.bigInt({ min: 0 }).toString()
1822
+ };
1823
+ case "POLKADOT_LIKE_WITHDRAWUNBONDED":
1824
+ case "POLKADOT_LIKE_CHILL":
1825
+ return {
1826
+ type: txType,
1827
+ currency: "polkadot"
1828
+ };
1829
+ case "POLKADOT_LIKE_SETPAYEE":
1830
+ return {
1831
+ type: txType,
1832
+ currency: "polkadot",
1833
+ payee: faker.helpers.arrayElement(["Staked", "Stash"])
1834
+ };
1835
+ case "POLKADOT_LIKE_ANONYMOUSPROXY":
1836
+ case "POLKADOT_LIKE_KILLANONYMOUS":
1837
+ return {
1838
+ type: txType,
1839
+ currency: "polkadot"
1840
+ };
1841
+ }
1842
+ };
1843
+ var genRippleLikeSendData = (txType) => {
1844
+ return {
1845
+ type: txType,
1846
+ currency: "ripple",
1847
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1848
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1849
+ recipient: faker.string.alphanumeric({ length: 30 }),
1850
+ destinationTag: faker.helpers.arrayElement([faker.number.int().toString(), null]),
1851
+ feeStrategy: {
1852
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1853
+ }
1854
+ };
1855
+ };
1856
+ var genSolanaLikeTxData = (txType) => {
1857
+ switch (txType) {
1858
+ case "SOLANA_LIKE_SEND":
1859
+ case "SOLANA_LIKE_CREATE_DELEGATE_STAKE":
1860
+ case "SOLANA_LIKE_SEND_TOKEN":
1861
+ case "SOLANA_LIKE_FUND_AND_SEND_TOKEN":
1862
+ return {
1863
+ type: txType,
1864
+ currency: "solana",
1865
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1866
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1867
+ recipient: faker.string.alphanumeric({ length: 30 }),
1868
+ feeStrategy: {
1869
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1870
+ }
1871
+ };
1872
+ case "SOLANA_LIKE_DELEGATE_STAKE":
1873
+ return {
1874
+ type: txType,
1875
+ currency: "solana",
1876
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1877
+ recipient: faker.string.alphanumeric({ length: 30 }),
1878
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1879
+ feeStrategy: {
1880
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1881
+ }
1882
+ };
1883
+ case "SOLANA_LIKE_DEACTIVATE_STAKE":
1884
+ return {
1885
+ type: txType,
1886
+ currency: "solana",
1887
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1888
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1889
+ feeStrategy: {
1890
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1891
+ }
1892
+ };
1893
+ case "SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE":
1894
+ case "SOLANA_LIKE_SPLIT_STAKE":
1895
+ case "SOLANA_LIKE_WITHDRAW_STAKE":
1896
+ return {
1897
+ type: txType,
1898
+ currency: "solana",
1899
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1900
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1901
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1902
+ feeStrategy: {
1903
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1904
+ }
1905
+ };
1906
+ case "SOLANA_LIKE_MERGE_STAKE":
1907
+ return {
1908
+ type: txType,
1909
+ currency: "solana",
1910
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1911
+ mergeSrcAccount: faker.string.alphanumeric({ length: 30 }),
1912
+ mergeDstAccount: faker.string.alphanumeric({ length: 30 }),
1913
+ feeStrategy: {
1914
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1915
+ }
1916
+ };
1917
+ case "SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT":
1918
+ return {
1919
+ type: txType,
1920
+ currency: "solana",
1921
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1922
+ feeStrategy: {
1923
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1924
+ }
1925
+ };
1926
+ }
1927
+ };
1928
+ var genStellarLikeSendData = (txType) => {
1929
+ return {
1930
+ type: txType,
1931
+ currency: "stellar",
1932
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1933
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1934
+ recipient: faker.string.alphanumeric({ length: 30 }),
1935
+ memo: faker.helpers.arrayElement([
1936
+ { MEMO_ID: faker.number.bigInt({ min: 0 }).toString() },
1937
+ { MEMO_TEXT: faker.word.conjunction(28) },
1938
+ { MEMO_HASH: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 64 }) },
1939
+ { MEMO_RETURN: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 64 }) },
1940
+ null
1941
+ ]),
1942
+ feeStrategy: {
1943
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1944
+ }
1945
+ };
1946
+ };
1947
+ var genSuiLikeTxData = (txType) => {
1948
+ return {
1949
+ currency: "sui",
1950
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1951
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1952
+ feeStrategy: {
1953
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1954
+ },
1955
+ ...match(txType).with("SUI_LIKE_STAKE", (type) => ({
1956
+ type,
1957
+ validator: faker.string.alphanumeric({ length: 30 })
1958
+ })).with("SUI_LIKE_UNSTAKE", (type) => ({
1959
+ type,
1960
+ stakedSuiId: faker.string.alphanumeric({ length: 30 }),
1961
+ useAllAmount: faker.datatype.boolean()
1962
+ })).with(P.union("SUI_LIKE_SEND", "SUI_LIKE_SEND_TOKEN"), (type) => ({
1963
+ type,
1964
+ recipient: faker.string.alphanumeric({ length: 30 })
1965
+ })).exhaustive()
1966
+ };
1967
+ };
1968
+ var genTezosLikeTxData = (txType) => {
1969
+ return {
1970
+ type: txType,
1971
+ currency: "tezos",
1972
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1973
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1974
+ recipient: faker.string.alphanumeric({ length: 30 }),
1975
+ feeStrategy: {
1976
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"])
1977
+ }
1978
+ };
1979
+ };
1980
+ var genTronLikeTxData = (txType) => {
1981
+ return {
1982
+ type: txType,
1983
+ currency: "tron",
1984
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1985
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1986
+ recipient: faker.string.alphanumeric({ length: 30 }),
1987
+ feeStrategy: {
1988
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1989
+ }
1990
+ };
1991
+ };
1992
+ var genCantonTransferProposal = () => ({
1993
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1994
+ contractId: fakeCantonContractId(),
1995
+ instrumentId: fakeCantonInstrumentId(),
1996
+ expiresAtMicros: faker.date.future().getTime() * 1e3,
1997
+ memo: faker.lorem.sentence(),
1998
+ sender: fakeCantonPartyId(),
1999
+ recipient: fakeCantonPartyId()
2000
+ });
2001
+ var genCantonLikeTxData = (txType) => {
2002
+ switch (txType) {
2003
+ case "CANTON_LIKE_SEND":
2004
+ case "CANTON_LIKE_SEND_TOKEN":
2005
+ return {
2006
+ type: txType,
2007
+ currency: "canton_network",
2008
+ amount: faker.number.bigInt({ min: 0 }).toString(),
2009
+ recipient: fakeCantonPartyId()
2010
+ };
2011
+ case "CANTON_LIKE_WITHDRAW":
2012
+ return {
2013
+ type: txType,
2014
+ currency: "canton_network",
2015
+ transferProposal: genCantonTransferProposal(),
2016
+ reason: faker.lorem.sentence()
2017
+ };
2018
+ case "CANTON_LIKE_RECEIVE":
2019
+ return {
2020
+ type: txType,
2021
+ currency: "canton_network",
2022
+ transferProposal: genCantonTransferProposal(),
2023
+ verdict: "ACCEPT",
2024
+ reason: faker.lorem.sentence()
2025
+ };
2026
+ case "CANTON_LIKE_PRE_APPROVAL":
2027
+ return {
2028
+ type: txType,
2029
+ currency: "canton_network",
2030
+ recipient: fakeCantonPartyId()
2031
+ };
2032
+ case "CANTON_LIKE_TAP":
2033
+ return {
2034
+ type: txType,
2035
+ currency: "canton_network",
2036
+ amount: faker.number.bigInt({ min: 0 }).toString(),
2037
+ maxFee: null,
2038
+ recipient: fakeCantonPartyId()
2039
+ };
2040
+ }
2041
+ };
2042
+ var mergeTransactionData = (defaults, custom) => {
2043
+ const merged = {
2044
+ ...defaults,
2045
+ ...custom,
2046
+ type: defaults.type
2047
+ // make sure `type` comes from `defaults`
2048
+ };
2049
+ return zTransactionData.parse(merged);
2050
+ };
2051
+ var genCreateTransactionData = (opts) => {
2052
+ const { accountId, transaction } = opts ?? {};
2053
+ const transactionType = transaction?.type ?? "ETHEREUM_LIKE_SEND";
2054
+ let transactionDefaults;
2055
+ switch (transactionType) {
2056
+ case "BITCOIN_LIKE_SEND":
2057
+ transactionDefaults = genBitcoinLikeSendData();
2058
+ break;
2059
+ case "CANTON_LIKE_SEND":
2060
+ case "CANTON_LIKE_SEND_TOKEN":
2061
+ case "CANTON_LIKE_WITHDRAW":
2062
+ case "CANTON_LIKE_RECEIVE":
2063
+ case "CANTON_LIKE_PRE_APPROVAL":
2064
+ case "CANTON_LIKE_TAP":
2065
+ transactionDefaults = genCantonLikeTxData(transactionType);
2066
+ break;
2067
+ case "CARDANO_LIKE_SEND":
2068
+ case "CARDANO_LIKE_STAKING_REGISTER":
2069
+ case "CARDANO_LIKE_STAKING_DEREGISTER":
2070
+ case "CARDANO_LIKE_STAKING_DELEGATE":
2071
+ case "CARDANO_LIKE_STAKING_WITHDRAW":
2072
+ transactionDefaults = genCardanoLikeTxData(transactionType);
2073
+ break;
2074
+ case "ETHEREUM_LIKE_SEND":
2075
+ transactionDefaults = genEthereumLikeSendData();
2076
+ break;
2077
+ case "ETHEREUM_LIKE_EXECUTE_CONTRACT":
2078
+ transactionDefaults = genEthereumLikeExecuteContractData();
2079
+ break;
2080
+ case "ETHEREUM_LIKE_DEPLOY_CONTRACT":
2081
+ transactionDefaults = genEthereumLikeDeployContractData();
2082
+ break;
2083
+ case "GENERIC_TRANSACTION":
2084
+ transactionDefaults = genGenericTransactionData();
2085
+ break;
2086
+ case "HEDERA_LIKE_SEND":
2087
+ case "HEDERA_LIKE_SEND_TOKEN":
2088
+ transactionDefaults = genHederaLikeSendData(transactionType);
2089
+ break;
2090
+ case "POLKADOT_LIKE_SEND":
2091
+ case "POLKADOT_LIKE_ADDPROXY":
2092
+ case "POLKADOT_LIKE_REMOVEPROXY":
2093
+ case "POLKADOT_LIKE_BOND":
2094
+ case "POLKADOT_LIKE_REBOND":
2095
+ case "POLKADOT_LIKE_BONDEXTRA":
2096
+ case "POLKADOT_LIKE_UNBOND":
2097
+ case "POLKADOT_LIKE_WITHDRAWUNBONDED":
2098
+ case "POLKADOT_LIKE_SETPAYEE":
2099
+ case "POLKADOT_LIKE_ANONYMOUSPROXY":
2100
+ case "POLKADOT_LIKE_KILLANONYMOUS":
2101
+ case "POLKADOT_LIKE_CHILL":
2102
+ transactionDefaults = genPolkadotLikeTxData(transactionType);
2103
+ break;
2104
+ case "RIPPLE_LIKE_SEND":
2105
+ transactionDefaults = genRippleLikeSendData(transactionType);
2106
+ break;
2107
+ case "SOLANA_LIKE_SEND":
2108
+ case "SOLANA_LIKE_CREATE_DELEGATE_STAKE":
2109
+ case "SOLANA_LIKE_DELEGATE_STAKE":
2110
+ case "SOLANA_LIKE_WITHDRAW_STAKE":
2111
+ case "SOLANA_LIKE_DEACTIVATE_STAKE":
2112
+ case "SOLANA_LIKE_SPLIT_STAKE":
2113
+ case "SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE":
2114
+ case "SOLANA_LIKE_MERGE_STAKE":
2115
+ case "SOLANA_LIKE_SEND_TOKEN":
2116
+ case "SOLANA_LIKE_FUND_AND_SEND_TOKEN":
2117
+ case "SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT":
2118
+ transactionDefaults = genSolanaLikeTxData(transactionType);
2119
+ break;
2120
+ case "STELLAR_LIKE_SEND":
2121
+ transactionDefaults = genStellarLikeSendData(transactionType);
2122
+ break;
2123
+ case "TEZOS_LIKE_SEND":
2124
+ case "TEZOS_LIKE_DELEGATE":
2125
+ case "TEZOS_LIKE_UNDELEGATE":
2126
+ transactionDefaults = genTezosLikeTxData(transactionType);
2127
+ break;
2128
+ case "SUI_LIKE_SEND":
2129
+ case "SUI_LIKE_SEND_TOKEN":
2130
+ case "SUI_LIKE_STAKE":
2131
+ case "SUI_LIKE_UNSTAKE":
2132
+ transactionDefaults = genSuiLikeTxData(transactionType);
2133
+ break;
2134
+ case "TRON_LIKE_SEND":
2135
+ case "TRON_LIKE_SEND_TOKEN":
2136
+ transactionDefaults = genTronLikeTxData(transactionType);
2137
+ break;
2138
+ }
2139
+ return {
2140
+ accountId: accountId ?? faker.string.uuid(),
2141
+ transaction: mergeTransactionData(transactionDefaults, transaction)
2142
+ };
2143
+ };
1610
2144
  var shouldHaveTargetHsmId = (request) => {
1611
2145
  switch (request.type) {
1612
2146
  case RequestType.CREATE_ENTITY:
@@ -1698,8 +2232,368 @@ var shouldHaveTargetId = (request) => {
1698
2232
  return true;
1699
2233
  }
1700
2234
  };
2235
+ var genCreateAccountData = (opts) => {
2236
+ return {
2237
+ name: fakeUniqueName(),
2238
+ type: "BITCOIN_LIKE",
2239
+ currency: "bitcoin",
2240
+ contractAddress: null,
2241
+ tokenIdentifier: null,
2242
+ governance: {
2243
+ type: "CLASSIC",
2244
+ policy: { rules: [] }
2245
+ // TODO: account gov rules should not be empty
2246
+ },
2247
+ index: 0,
2248
+ derivationPath: "m/84'/0'/0'",
2249
+ ...opts
2250
+ };
2251
+ };
2252
+ var genEditAccountData = (opts) => {
2253
+ return {
2254
+ name: fakeUniqueName(),
2255
+ governance: {
2256
+ type: "CLASSIC",
2257
+ policy: { rules: [] }
2258
+ // TODO: account gov rules should not be empty
2259
+ },
2260
+ ...opts
2261
+ };
2262
+ };
2263
+ var genEditTokenRuleData = (opts) => {
2264
+ return {
2265
+ parentAccountId: faker.string.uuid(),
2266
+ contractAddress: faker.string.alphanumeric({ length: 44 }),
2267
+ rules: [
2268
+ {
2269
+ operationType: "SEND",
2270
+ reviewSteps: [
2271
+ {
2272
+ quorum: 1,
2273
+ userIds: []
2274
+ }
2275
+ ]
2276
+ }
2277
+ ],
2278
+ ...opts
2279
+ };
2280
+ };
2281
+ var genCreateApiKeyData = (opts) => {
2282
+ return {
2283
+ name: faker.company.name().slice(0, 19),
2284
+ entities: [],
2285
+ scopes: {},
2286
+ // FIXME what should we put there?
2287
+ ...opts
2288
+ };
2289
+ };
2290
+ var genEditApiKeyData = (opts) => {
2291
+ return {
2292
+ name: faker.company.name().slice(0, 19),
2293
+ entities: [],
2294
+ scopes: {},
2295
+ // FIXME what should we put there?
2296
+ ...opts
2297
+ };
2298
+ };
2299
+ var genSignDigestsData = (opts) => {
2300
+ const { accountId, digests } = opts ?? {};
2301
+ return {
2302
+ accountId: accountId ?? faker.string.uuid(),
2303
+ digests: digests ?? [
2304
+ {
2305
+ digest: faker.string.hexadecimal({ prefix: "", length: 64 }),
2306
+ derivationPath: "m/44'/60'/0'"
2307
+ }
2308
+ ]
2309
+ };
2310
+ };
2311
+ var genCreateEntityData = (opts) => {
2312
+ return {
2313
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2314
+ accountIds: [],
2315
+ memberIds: [],
2316
+ ...opts
2317
+ };
2318
+ };
2319
+ var genEditEntityData = (opts) => {
2320
+ return {
2321
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2322
+ accountIds: [],
2323
+ memberIds: [],
2324
+ ...opts
2325
+ };
2326
+ };
2327
+ var genCreateGroupData = (opts) => {
2328
+ return {
2329
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2330
+ description: faker.lorem.sentence(),
2331
+ members: [],
2332
+ ...opts
2333
+ };
2334
+ };
2335
+ var genEditGroupData = (opts) => {
2336
+ return {
2337
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2338
+ description: faker.lorem.sentence(),
2339
+ members: [],
2340
+ ...opts
2341
+ };
2342
+ };
2343
+ var genCreatePolicyData = (opts) => {
2344
+ return {
2345
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2346
+ description: faker.lorem.sentence(),
2347
+ currency: "bitcoin",
2348
+ govRules: [],
2349
+ ...opts
2350
+ };
2351
+ };
2352
+ var genEditPolicyData = (opts) => {
2353
+ return {
2354
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2355
+ description: faker.lorem.sentence(),
2356
+ govRules: [],
2357
+ ...opts
2358
+ };
2359
+ };
2360
+ var genCreateSciConfigData = (opts) => {
2361
+ return {
2362
+ account: faker.string.uuid(),
2363
+ config: {
2364
+ dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),
2365
+ customContractCallEnabled: faker.datatype.boolean()
2366
+ },
2367
+ ...opts
2368
+ };
2369
+ };
2370
+ var genEditSciConfigData = (opts) => {
2371
+ return {
2372
+ config: {
2373
+ dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),
2374
+ customContractCallEnabled: faker.datatype.boolean()
2375
+ },
2376
+ ...opts
2377
+ };
2378
+ };
2379
+ var genCreatePledgeIncrementData = (opts) => ({
2380
+ accountId: faker.string.uuid(),
2381
+ exchangeId: faker.string.uuid(),
2382
+ amount: "42",
2383
+ ...opts
2384
+ });
2385
+ var genRepledgeRequestData = (opts) => ({
2386
+ accountId: faker.string.uuid(),
2387
+ exchangeId: faker.string.uuid(),
2388
+ amount: "42",
2389
+ ...opts
2390
+ });
2391
+ var genCreateSettlementData = (opts) => ({
2392
+ accountId: faker.string.uuid(),
2393
+ exchangeId: faker.string.uuid(),
2394
+ transaction: {
2395
+ type: "BITCOIN_LIKE_SEND",
2396
+ amount: "42",
2397
+ currency: "bitcoin",
2398
+ maxFee: "999",
2399
+ recipient: faker.finance.bitcoinAddress(),
2400
+ feeStrategy: { type: "NORMAL" }
2401
+ },
2402
+ ...opts
2403
+ });
2404
+ var genForceUnpledgeData = (opts) => ({
2405
+ accountId: faker.string.uuid(),
2406
+ exchangeId: faker.string.uuid(),
2407
+ ...opts
2408
+ });
2409
+ var genTradelinkWithdrawData = (opts) => ({
2410
+ accountId: faker.string.uuid(),
2411
+ transaction: {
2412
+ type: "ETHEREUM_LIKE_SEND",
2413
+ recipient: "0x63e4195AF1509490b430F3f5bCb85A82a24F5C82",
2414
+ amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),
2415
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
2416
+ currency: "ethereum",
2417
+ feeStrategy: {
2418
+ type: "NORMAL",
2419
+ gasPrice: "2",
2420
+ gasLimit: "10"
2421
+ }
2422
+ },
2423
+ ...opts
2424
+ });
2425
+ var genTradelinkArbitrationData = (opts) => ({
2426
+ accountId: faker.string.uuid(),
2427
+ transaction: {
2428
+ type: "ETHEREUM_LIKE_SEND",
2429
+ recipient: "0xcefd70CFCd7a2FAa0fe956E3d496F9313297CB44",
2430
+ amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),
2431
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
2432
+ currency: "ethereum",
2433
+ feeStrategy: {
2434
+ type: "NORMAL",
2435
+ gasPrice: "2",
2436
+ gasLimit: "10"
2437
+ }
2438
+ },
2439
+ ...opts
2440
+ });
2441
+ var genCreatePsdUserData = (opts) => ({
2442
+ registrationId: faker.string.uuid(),
2443
+ ...opts
2444
+ });
2445
+ var genCreateApiUserData = (opts) => {
2446
+ return {
2447
+ name: faker.person.firstName(),
2448
+ pubKey: fakePubKey(),
2449
+ role: UserRole.OPERATOR,
2450
+ viewAll: false,
2451
+ ...opts
2452
+ };
2453
+ };
2454
+ var genCreateApiUserAccessData = (opts) => {
2455
+ return {
2456
+ name: faker.person.firstName(),
2457
+ ...opts
2458
+ };
2459
+ };
2460
+ var genCreateWhitelistData = (opts) => {
2461
+ return {
2462
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2463
+ description: faker.lorem.sentence(),
2464
+ type: faker.helpers.arrayElement(Object.values(WhitelistType)),
2465
+ addresses: [
2466
+ {
2467
+ name: faker.lorem.words(3),
2468
+ currency: "bitcoin",
2469
+ address: faker.finance.bitcoinAddress(),
2470
+ destinationTags: []
2471
+ },
2472
+ {
2473
+ name: faker.lorem.words(3),
2474
+ currency: "ethereum",
2475
+ address: faker.finance.ethereumAddress(),
2476
+ destinationTags: []
2477
+ }
2478
+ ],
2479
+ ...opts
2480
+ };
2481
+ };
2482
+ var genEditWhitelistData = (opts) => {
2483
+ return {
2484
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2485
+ addresses: [
2486
+ {
2487
+ name: faker.lorem.words(3),
2488
+ currency: "bitcoin",
2489
+ address: faker.finance.bitcoinAddress(),
2490
+ destinationTags: []
2491
+ },
2492
+ {
2493
+ name: faker.lorem.words(3),
2494
+ currency: "ethereum",
2495
+ address: faker.finance.ethereumAddress(),
2496
+ destinationTags: []
2497
+ }
2498
+ ],
2499
+ ...opts
2500
+ };
2501
+ };
2502
+ var genWorkspaceRuleData = (opts) => {
2503
+ return {
2504
+ permission: AdminPermission.CREATE_ACCOUNT_WITH_POLICY,
2505
+ reviewConfig: [{ userIds: [], quorum: 2 }],
2506
+ ...opts
2507
+ };
2508
+ };
1701
2509
 
1702
2510
  // src/__fakes__/models/requests/requests-and-reviews.ts
2511
+ var genRequestData = (type, opts) => {
2512
+ switch (type) {
2513
+ // Workspace...
2514
+ case RequestType.UPDATE_QUORUM:
2515
+ return { quorum: 3, ...opts };
2516
+ // User...
2517
+ case RequestType.CREATE_PSD_USER:
2518
+ return genCreatePsdUserData(opts);
2519
+ case RequestType.CREATE_API_USER:
2520
+ return genCreateApiUserData(opts);
2521
+ case RequestType.CREATE_API_USER_ACCESS:
2522
+ return genCreateApiUserAccessData(opts);
2523
+ case RequestType.REVOKE_USER:
2524
+ return {};
2525
+ // Admin gov rule...
2526
+ case RequestType.EDIT_WORKSPACE_RULE:
2527
+ return genWorkspaceRuleData(opts);
2528
+ // Group...
2529
+ case RequestType.CREATE_GROUP:
2530
+ return genCreateGroupData(opts);
2531
+ case RequestType.EDIT_GROUP:
2532
+ return genEditGroupData(opts);
2533
+ case RequestType.REVOKE_GROUP:
2534
+ return {};
2535
+ // ApiKey...
2536
+ case RequestType.CREATE_API_KEY:
2537
+ return genCreateApiKeyData(opts);
2538
+ case RequestType.EDIT_API_KEY:
2539
+ return genEditApiKeyData(opts);
2540
+ case RequestType.REVOKE_API_KEY:
2541
+ return {};
2542
+ // Whitelist...
2543
+ case RequestType.CREATE_WHITELIST:
2544
+ return genCreateWhitelistData(opts);
2545
+ case RequestType.EDIT_WHITELIST:
2546
+ return genEditWhitelistData(opts);
2547
+ // Entity...
2548
+ case RequestType.CREATE_ENTITY:
2549
+ return genCreateEntityData(opts);
2550
+ case RequestType.EDIT_ENTITY:
2551
+ return genEditEntityData(opts);
2552
+ case RequestType.REVOKE_ENTITY:
2553
+ return {};
2554
+ // Account...
2555
+ case RequestType.CREATE_ACCOUNT:
2556
+ return genCreateAccountData(opts);
2557
+ case RequestType.EDIT_ACCOUNT:
2558
+ return genEditAccountData(opts);
2559
+ case RequestType.EDIT_TOKEN_RULE:
2560
+ return genEditTokenRuleData(opts);
2561
+ // Operator requests...
2562
+ case RequestType.CREATE_TRANSACTION:
2563
+ return genCreateTransactionData(opts);
2564
+ case RequestType.SIGN_MESSAGE:
2565
+ return genSignMessageData(opts);
2566
+ case RequestType.SIGN_DIGESTS:
2567
+ return genSignDigestsData(opts);
2568
+ // SCI config...
2569
+ case RequestType.CREATE_SCICONFIG:
2570
+ return genCreateSciConfigData(opts);
2571
+ case RequestType.EDIT_SCICONFIG:
2572
+ return genEditSciConfigData(opts);
2573
+ // Policy
2574
+ case RequestType.CREATE_POLICY:
2575
+ return genCreatePolicyData(opts);
2576
+ case RequestType.EDIT_POLICY:
2577
+ return genEditPolicyData(opts);
2578
+ // Tradelink...
2579
+ case RequestType.TRADELINK_ADJUST_PLEDGE:
2580
+ return genCreatePledgeIncrementData(opts);
2581
+ case RequestType.TRADELINK_CREATE_SETTLEMENT:
2582
+ return genCreateSettlementData(opts);
2583
+ case RequestType.TRADELINK_FORCE_UNPLEDGE:
2584
+ return genForceUnpledgeData(opts);
2585
+ case RequestType.TRADELINK_WITHDRAW:
2586
+ return genTradelinkWithdrawData(opts);
2587
+ case RequestType.TRADELINK_REPLEDGE:
2588
+ return genRepledgeRequestData(opts);
2589
+ case RequestType.TRADELINK_ARBITRATE:
2590
+ return genTradelinkArbitrationData(opts);
2591
+ default: {
2592
+ const unknownType = type;
2593
+ throw new Error(`Unknown request type: ${unknownType}`);
2594
+ }
2595
+ }
2596
+ };
1703
2597
  var genRequestReviewSteps = (numSteps) => times(1, () => ({ stageName: "default", quorum: 2 }));
1704
2598
  var genVaultRequest = (opts) => {
1705
2599
  const { type, state = RequestState.PENDING_APPROVAL, data, ...custom } = opts;
@@ -1768,6 +2662,98 @@ var genVaultRequestReview = (opts) => {
1768
2662
  ...opts
1769
2663
  };
1770
2664
  };
2665
+ var genUserFieldsForDeviceType = (deviceType) => {
2666
+ switch (deviceType) {
2667
+ case UserDeviceType.PSD:
2668
+ case UserDeviceType.SOFT_PSD:
2669
+ return {
2670
+ deviceType,
2671
+ deviceUserId: fakeDeviceUserId(),
2672
+ hsmId: null
2673
+ };
2674
+ case UserDeviceType.API:
2675
+ return {
2676
+ deviceType,
2677
+ deviceUserId: null,
2678
+ hsmId: faker.string.uuid()
2679
+ };
2680
+ }
2681
+ };
2682
+ var genUser = (opts) => {
2683
+ const role = opts?.role ?? faker.helpers.arrayElement([UserRole.ADMIN, UserRole.OPERATOR]);
2684
+ const deviceType = opts?.deviceType ?? UserDeviceType.PSD;
2685
+ const userFieldsForDeviceType = genUserFieldsForDeviceType(deviceType);
2686
+ const gateType = role === UserRole.READ_ONLY_API_KEY ? GateUserType.VaultApiKey : GateUserType.Person;
2687
+ return injectSyncId({
2688
+ id: faker.string.uuid(),
2689
+ name: faker.person.fullName(),
2690
+ ...userFieldsForDeviceType,
2691
+ authUserId: genAuthUserId(),
2692
+ pubKey: fakePubKey(),
2693
+ workspaceName: fakeWorkspaceName(),
2694
+ u2fKeyHandle: fakePubKey(),
2695
+ u2fPubKey: fakePubKey(),
2696
+ legacyViewAll: false,
2697
+ role,
2698
+ status: ActivationStatus.ACTIVE,
2699
+ isSuspended: false,
2700
+ gateType,
2701
+ gateId: fakeGateId(),
2702
+ createdAt: faker.date.past(),
2703
+ updatedAt: faker.date.past(),
2704
+ ...opts
2705
+ });
2706
+ };
2707
+ var genGroup = (opts) => injectSyncId({
2708
+ id: faker.string.uuid(),
2709
+ workspaceName: fakeWorkspaceName(),
2710
+ name: faker.person.fullName(),
2711
+ description: faker.lorem.sentence(10),
2712
+ hsmId: fakeHsmObjectId(),
2713
+ status: ActivationStatus.ACTIVE,
2714
+ gateId: fakeGateId(),
2715
+ gateType: "Group",
2716
+ createdAt: faker.date.past(),
2717
+ updatedAt: faker.date.past(),
2718
+ ...opts
2719
+ });
2720
+ var genGroupWithMembers = (opts) => {
2721
+ const group = genGroup(opts);
2722
+ return {
2723
+ ...group,
2724
+ members: opts?.members ?? []
2725
+ };
2726
+ };
2727
+ var genWhitelist = (opts) => {
2728
+ return injectSyncId({
2729
+ id: faker.string.uuid(),
2730
+ workspaceName: fakeWorkspaceName(),
2731
+ name: faker.lorem.words(3),
2732
+ description: faker.lorem.sentence(10),
2733
+ addresses: [
2734
+ {
2735
+ name: faker.lorem.words(3),
2736
+ currency: "bitcoin",
2737
+ address: faker.finance.bitcoinAddress(),
2738
+ destinationTags: []
2739
+ },
2740
+ {
2741
+ name: faker.lorem.words(3),
2742
+ currency: "ethereum",
2743
+ address: faker.finance.ethereumAddress(),
2744
+ destinationTags: []
2745
+ }
2746
+ ],
2747
+ hsmId: fakeHsmObjectId(),
2748
+ type: faker.helpers.arrayElement(Object.values(WhitelistType)),
2749
+ status: faker.helpers.arrayElement(Object.values(ActivationStatus)),
2750
+ gateId: fakeGateId(),
2751
+ gateType: "Whitelist",
2752
+ createdAt: faker.date.past(),
2753
+ updatedAt: faker.date.past(),
2754
+ ...opts
2755
+ });
2756
+ };
1771
2757
  var zPubKey = zHexString.meta({ description: "Public key" });
1772
2758
  var zHsmCertificate = z.object({
1773
2759
  codeHash: z.base64().meta({ description: "Hash of the executable that generated this certificate" }),
@@ -1894,7 +2880,7 @@ var zCreatePsdUserRequestData = z14.object({
1894
2880
  });
1895
2881
  var zCreateApiUserRequestData = z14.object({
1896
2882
  name: zUserName,
1897
- pubKey: z14.string().meta({ description: "Public key" }),
2883
+ pubKey: z14.string().regex(/^04[0-9a-fA-F]{128}$/).meta({ description: "Public key, uncompressed secp256r1 format" }),
1898
2884
  role: z14.enum(["ADMIN", "OPERATOR"]).meta({ description: "User role" }),
1899
2885
  viewAll: z14.boolean().meta({ description: "View all data" }).optional()
1900
2886
  }).meta({ description: "Create API user request data" });
@@ -2285,6 +3271,7 @@ var zAccountCommonFields = z14.object({
2285
3271
  currency: zCurrencyString,
2286
3272
  network: zNetwork,
2287
3273
  contractAddress: z14.string().nullable().meta({ description: "Token contract address for Token account" }),
3274
+ tokenIdentifier: z14.string().nullable().meta({ description: "Token identifier for Token account" }),
2288
3275
  index: z14.number().gte(0).meta({ description: "BIP44 account index" }),
2289
3276
  derivationPath: z14.string().meta({ description: "Derivation path" }),
2290
3277
  status: z14.enum(ActivationStatus).meta({ description: "Status" }),
@@ -2500,7 +3487,8 @@ var zCreateAccountUserInputData = z14.object({
2500
3487
  currency: zCurrencyString,
2501
3488
  // "bitcoin"
2502
3489
  index: z14.number().nonnegative().optional().meta({ description: "Account index" }),
2503
- contractAddress: z14.string().min(1).optional().meta({ description: "Account contract address" }),
3490
+ contractAddress: z14.string().nonempty().nullable().meta({ description: "Token issuer" }),
3491
+ tokenIdentifier: z14.string().nonempty().nullable().meta({ description: "Token identifier" }),
2504
3492
  governance: zCreateAccountGovernanceData
2505
3493
  });
2506
3494
  var zCreateAccountRequestData = zCreateAccountUserInputData.omit({ index: true }).extend({
@@ -2648,6 +3636,63 @@ var serializeAccount = (account) => {
2648
3636
  };
2649
3637
  return zAccountResponse.parse(response);
2650
3638
  };
3639
+ var zUserResponse = z14.object({
3640
+ id: z14.string().meta({ description: "Internal unique identifier" }),
3641
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
3642
+ legacyViewAll: z14.boolean().meta({ description: "If true, user can read all resources on the workspace" }),
3643
+ workspaceName: z14.string().meta({ description: "User's workspace name" }),
3644
+ name: z14.string().meta({ description: "User name" }),
3645
+ deviceUserId: z14.string().nullable().meta({ description: "User's device ID (for non-API users)" }),
3646
+ deviceType: z14.enum(UserDeviceType).meta({ description: "User's device type" }),
3647
+ role: z14.enum(UserRole).meta({ description: "User role" }),
3648
+ pubKey: z14.string().meta({ description: "User public key" }),
3649
+ status: z14.enum(ActivationStatus).meta({ description: "User status" }),
3650
+ isSuspended: z14.boolean().meta({ description: "Whether the user is suspended" }),
3651
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
3652
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" })
3653
+ });
3654
+ zUserResponse.extend({
3655
+ role: z14.literal(UserRole.ADMIN).meta({ description: "Should always be ADMIN" })
3656
+ });
3657
+ z14.enum([
3658
+ "name",
3659
+ "role",
3660
+ "status",
3661
+ "createdAt",
3662
+ "updatedAt"
3663
+ ]).default("createdAt");
3664
+
3665
+ // src/users/app-utils.ts
3666
+ function serializeUser(user) {
3667
+ const serialized = {
3668
+ ...user,
3669
+ legacyId: user.gateId
3670
+ };
3671
+ return zUserResponse.parse(serialized);
3672
+ }
3673
+
3674
+ // src/groups/app-types.ts
3675
+ var zGroupResponse = z14.object({
3676
+ id: z14.string().meta({ description: "Internal unique identifier" }),
3677
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
3678
+ name: z14.string().meta({ description: "Group name" }),
3679
+ description: z14.string().nullable().meta({ description: "Group description" }),
3680
+ status: z14.enum(ActivationStatus).meta({ description: "Group status" }),
3681
+ members: z14.array(zUserResponse).meta({ description: "Group members" }),
3682
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
3683
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" })
3684
+ });
3685
+ z14.enum(["name", "status", "createdAt", "updatedAt"]).default("createdAt");
3686
+
3687
+ // src/groups/app-utils.ts
3688
+ function serializeGroup(group) {
3689
+ const serialized = {
3690
+ ...group,
3691
+ legacyId: group.gateId,
3692
+ members: group.members.map(serializeUser)
3693
+ };
3694
+ return zGroupResponse.parse(serialized);
3695
+ }
2651
3696
 
2652
3697
  // src/compat/patch-request-expired-at.ts
2653
3698
  var patchRequestExpiredAt = (data) => ({
@@ -3015,6 +4060,31 @@ function serializeVaultRequest(request) {
3015
4060
  patched = patchTezosRequestData(patched);
3016
4061
  return patched;
3017
4062
  }
4063
+ var zWhitelistAddressResponse = z14.object({
4064
+ name: z14.string().min(1).max(50).meta({ description: "Address name" }),
4065
+ currency: zCurrencyString.meta({ description: "Address currency" }),
4066
+ address: z14.string().min(1).max(200).meta({ description: "Address value" }),
4067
+ destinationTags: z14.array(z14.string().min(1).regex(/^\w+$/)).optional().meta({ description: "List of destination tags (applicable for Ripple currency)" })
4068
+ });
4069
+ var zWhitelistResponse = z14.object({
4070
+ id: z14.string().meta({ description: "Internal unique identifier" }),
4071
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
4072
+ name: z14.string().meta({ description: "Whitelist name" }),
4073
+ status: z14.enum(ActivationStatus).meta({ description: "Whitelist status" }),
4074
+ addresses: z14.array(zWhitelistAddressResponse),
4075
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
4076
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" }),
4077
+ description: z14.string().nullable().meta({ description: "Whitelist description" })
4078
+ }).meta({ description: "Whitelist", id: "WhitelistResponse" });
4079
+ z14.enum(["name", "status", "createdAt", "updatedAt"]).default("createdAt");
4080
+ var serializeWhitelist = (whitelist) => {
4081
+ const serialized = {
4082
+ ...whitelist,
4083
+ legacyId: whitelist.gateId,
4084
+ addresses: z.array(zWhitelistAddressResponse).parse(whitelist.addresses)
4085
+ };
4086
+ return zWhitelistResponse.parse(serialized);
4087
+ };
3018
4088
 
3019
4089
  // src/__fakes__/responses.ts
3020
4090
  function genVaultRequestResponse(opts, reviews = []) {
@@ -3027,8 +4097,23 @@ function genAccountResponse(overrides) {
3027
4097
  const account = serializeAccount(dbAccount);
3028
4098
  return zAccountResponse.parse(account);
3029
4099
  }
4100
+ function genUserResponse(overrides) {
4101
+ const dbUser = genUser(overrides);
4102
+ const user = serializeUser(dbUser);
4103
+ return zUserResponse.parse(user);
4104
+ }
4105
+ function genGroupResponse(overrides) {
4106
+ const dbGroup = genGroupWithMembers(overrides);
4107
+ const group = serializeGroup(dbGroup);
4108
+ return zGroupResponse.parse(group);
4109
+ }
4110
+ function genWhitelistResponse(overrides) {
4111
+ const dbWhitelist = genWhitelist(overrides);
4112
+ const whitelist = serializeWhitelist(dbWhitelist);
4113
+ return zWhitelistResponse.parse(whitelist);
4114
+ }
3030
4115
  /* v8 ignore next -- @preserve */
3031
4116
 
3032
- export { genAccountResponse, genVaultRequestResponse, genVaultRequestReview };
4117
+ export { genAccountResponse, genCreateTransactionData, genGroupResponse, genRequestData, genUserResponse, genVaultRequestResponse, genVaultRequestReview, genWhitelistResponse };
3033
4118
  //# sourceMappingURL=fakes.mjs.map
3034
4119
  //# sourceMappingURL=fakes.mjs.map