@ledgerhq/revault-api 1.43.1 → 1.44.0

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 elliptic 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]+$/);
@@ -27,7 +28,21 @@ z.codec(z.iso.datetime(), z.date(), {
27
28
  });
28
29
 
29
30
  // src/networks/common.ts
30
- 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
+ };
31
46
  var zHexDataString = z14.codec(z14.string().regex(/^(?:0x|0X)?[a-fA-F0-9]+$/), z14.string(), {
32
47
  decode: (hex) => `0x${hex.toLowerCase().replace("0x", "")}`,
33
48
  encode: (hex) => hex
@@ -89,19 +104,22 @@ var zBitcoinLikeSendData = zCommonTransactionData.extend({
89
104
  id: "BitcoinLikeSendData"
90
105
  });
91
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" });
92
111
  var zBitcoinLikeTransactionResponse = z14.discriminatedUnion("type", [
93
112
  zCommonTransactionResponse.extend({ type: zBitcoinLikeTransactionType }).meta({ description: "Bitcoin-like transaction" })
94
113
  ]);
95
114
 
96
115
  // src/networks/bitcoin/index.ts
97
116
  var BITCOIN_SPEC = {
98
- family: NetworkFamily.BITCOIN_LIKE,
99
117
  zAssetFields: zBitcoinLikeAssetFields,
100
118
  zLiveData: zBitcoinLikeLiveData,
101
119
  zTransactionType: zBitcoinLikeTransactionType,
102
120
  zTransactionData: zBitcoinLikeTransactionData,
103
121
  zSendTransactionData: zBitcoinLikeSendData,
104
- zEstimatedFees: z14.never(),
122
+ zEstimatedFees: zBitcoinLikeEstimatedFees,
105
123
  zTransactionResponse: zBitcoinLikeTransactionResponse,
106
124
  zStakingFields: z14.never()};
107
125
  var zCantonTransferProposal = z14.object({
@@ -204,7 +222,6 @@ var zCantonLikeTransactionResponse = z14.discriminatedUnion("type", [
204
222
 
205
223
  // src/networks/canton/index.ts
206
224
  var CANTON_SPEC = {
207
- family: NetworkFamily.CANTON_LIKE,
208
225
  zAssetFields: zCantonLikeAssetFields,
209
226
  zLiveData: zCantonLikeLiveData,
210
227
  zTransactionType: zCantonLikeTransactionType,
@@ -301,7 +318,6 @@ var zCardanoLikeTransactionResponse = z14.discriminatedUnion("type", [
301
318
 
302
319
  // src/networks/cardano/index.ts
303
320
  var CARDANO_SPEC = {
304
- family: NetworkFamily.CARDANO_LIKE,
305
321
  zAssetFields: zCardanoLikeAssetFields,
306
322
  zLiveData: zCardanoLikeLiveData,
307
323
  zTransactionType: zCardanoLikeTransactionType,
@@ -403,7 +419,6 @@ var zEthereumLikeTransactionResponse = z14.discriminatedUnion("type", [
403
419
 
404
420
  // src/networks/ethereum/index.ts
405
421
  var ETHEREUM_SPEC = {
406
- family: NetworkFamily.ETHEREUM_LIKE,
407
422
  zAssetFields: zEthereumLikeAssetFields,
408
423
  zLiveData: zEthereumLikeLiveData,
409
424
  zTransactionType: zEthereumLikeTransactionType,
@@ -433,7 +448,6 @@ var zGenericTransactionResponse = z14.discriminatedUnion("type", [
433
448
 
434
449
  // src/networks/generic/index.ts
435
450
  var GENERIC_SPEC = {
436
- family: NetworkFamily.GENERIC_LIKE,
437
451
  zAssetFields: zGenericAssetFields,
438
452
  zLiveData: zGenericLiveData,
439
453
  zTransactionType: zGenericTransactionType,
@@ -444,7 +458,8 @@ var GENERIC_SPEC = {
444
458
  zStakingFields: z14.never()};
445
459
  var zHederaLikeAssetFields = z14.object({
446
460
  type: z14.literal(NetworkFamily.HEDERA_LIKE).meta({ description: "Account type" }),
447
- address: z14.string().nullable().meta({ description: "Account address" })
461
+ address: z14.string().nullable().meta({ description: "Account address" }),
462
+ isActivated: z14.boolean().meta({ description: "Indicates if the account is activated" })
448
463
  }).meta({ description: "Hedera-like" });
449
464
  var zHederaLikeEstimatedFees = z14.object({
450
465
  type: z14.literal(NetworkFamily.HEDERA_LIKE),
@@ -485,7 +500,6 @@ var zHederaLikeTransactionResponse = z14.discriminatedUnion("type", [
485
500
 
486
501
  // src/networks/hedera/index.ts
487
502
  var HEDERA_SPEC = {
488
- family: NetworkFamily.HEDERA_LIKE,
489
503
  zAssetFields: zHederaLikeAssetFields,
490
504
  zLiveData: zHederaLikeLiveData,
491
505
  zTransactionType: zHederaLikeTransactionType,
@@ -681,7 +695,6 @@ var zPolkadotLikeTransactionResponse = z14.discriminatedUnion("type", [
681
695
 
682
696
  // src/networks/polkadot/index.ts
683
697
  var POLKADOT_SPEC = {
684
- family: NetworkFamily.POLKADOT_LIKE,
685
698
  zAssetFields: zPolkadotLikeAssetFields,
686
699
  zLiveData: zPolkadotLikeLiveData,
687
700
  zTransactionType: zPolkadotLikeTransactionType,
@@ -721,7 +734,6 @@ var zRippleLikeTransactionResponse = z14.discriminatedUnion("type", [
721
734
 
722
735
  // src/networks/ripple/index.ts
723
736
  var RIPPLE_SPEC = {
724
- family: NetworkFamily.RIPPLE_LIKE,
725
737
  zAssetFields: zRippleLikeAssetFields,
726
738
  zLiveData: zRippleLikeLiveData,
727
739
  zTransactionType: zRippleLikeTransactionType,
@@ -917,7 +929,6 @@ var zSolanaLikeTransactionResponse = z14.discriminatedUnion("type", [
917
929
 
918
930
  // src/networks/solana/index.ts
919
931
  var SOLANA_SPEC = {
920
- family: NetworkFamily.SOLANA_LIKE,
921
932
  zAssetFields: zSolanaLikeAssetFields,
922
933
  zLiveData: zSolanaLikeLiveData,
923
934
  zTransactionType: zSolanaLikeTransactionType,
@@ -938,16 +949,22 @@ var zStellarLikeEstimatedFees = z14.object({
938
949
  fee: zIntString
939
950
  }).meta({ description: "Stellar-like fees" });
940
951
  var zStellarLikeTransactionType = z14.enum(["STELLAR_LIKE_SEND", "STELLAR_LIKE_RECEIVE"]).meta({ description: "Stellar-like transaction type" });
941
- var zStellarMemo = z14.union([
952
+ var zStellarMemo = z14.discriminatedUnion("type", [
942
953
  z14.object({
943
- MEMO_TEXT: z14.string().max(28).meta({ description: "Text memo (at most a 28 bytes string)" })
954
+ type: z14.literal("MEMO_TEXT"),
955
+ value: z14.string().max(28).meta({ description: "Text memo (at most a 28 bytes string)" })
944
956
  }).meta({ description: "Text memo" }),
945
- z14.object({ MEMO_ID: zIntString.meta({ description: "Id memo (unsigned 64 bits integer)" }) }).meta({ description: "Id memo" }),
946
957
  z14.object({
947
- MEMO_HASH: z14.string().max(128).regex(/^[a-fA-F0-9]+$/).meta({ description: "Transaction hash memo (64 bytes hexadecimal string)" })
958
+ type: z14.literal("MEMO_ID"),
959
+ value: zIntString.meta({ description: "Id memo (unsigned 64 bits integer)" })
960
+ }).meta({ description: "Id memo" }),
961
+ z14.object({
962
+ type: z14.literal("MEMO_HASH"),
963
+ value: z14.string().max(128).regex(/^[a-fA-F0-9]+$/).meta({ description: "Transaction hash memo (64 bytes hexadecimal string)" })
948
964
  }).meta({ description: "Hash memo" }),
949
965
  z14.object({
950
- MEMO_RETURN: z14.string().max(128).regex(/^[a-fA-F0-9]+$/).meta({
966
+ type: z14.literal("MEMO_RETURN"),
967
+ value: z14.string().max(128).regex(/^[a-fA-F0-9]+$/).meta({
951
968
  description: "A 64 bytes hexadecimal string intended to be interpreted as the hash of the transaction the sender is refunding."
952
969
  })
953
970
  }).meta({ description: "Return memo" })
@@ -967,7 +984,6 @@ var zStellarLikeTransactionResponse = z14.discriminatedUnion("type", [
967
984
 
968
985
  // src/networks/stellar/index.ts
969
986
  var STELLAR_SPEC = {
970
- family: NetworkFamily.STELLAR_LIKE,
971
987
  zAssetFields: zStellarLikeAssetFields,
972
988
  zLiveData: zStellarLikeLiveData,
973
989
  zTransactionType: zStellarLikeTransactionType,
@@ -1057,7 +1073,6 @@ var zSuiLikeTransactionResponse = z14.discriminatedUnion("type", [
1057
1073
 
1058
1074
  // src/networks/sui/index.ts
1059
1075
  var SUI_SPEC = {
1060
- family: NetworkFamily.SUI_LIKE,
1061
1076
  zAssetFields: zSuiLikeAssetFields,
1062
1077
  zLiveData: zSuiLikeLiveData,
1063
1078
  zTransactionType: zSuiLikeTransactionType,
@@ -1134,7 +1149,6 @@ var zTezosLikeTransactionResponse = z14.discriminatedUnion("type", [
1134
1149
 
1135
1150
  // src/networks/tezos/index.ts
1136
1151
  var TEZOS_SPEC = {
1137
- family: NetworkFamily.TEZOS_LIKE,
1138
1152
  zAssetFields: zTezosLikeAssetFields,
1139
1153
  zLiveData: zTezosLikeLiveData,
1140
1154
  zTransactionType: zTezosLikeTransactionType,
@@ -1182,7 +1196,6 @@ var zTronLikeTransactionResponse = z14.discriminatedUnion("type", [
1182
1196
 
1183
1197
  // src/networks/tron/index.ts
1184
1198
  var TRON_SPEC = {
1185
- family: NetworkFamily.TRON_LIKE,
1186
1199
  zAssetFields: zTronLikeAssetFields,
1187
1200
  zLiveData: zTronLikeLiveData,
1188
1201
  zTransactionType: zTronLikeTransactionType,
@@ -1232,6 +1245,7 @@ z14.discriminatedUnion("type", [
1232
1245
  TEZOS_SPEC.zStakingFields
1233
1246
  ]);
1234
1247
  z14.discriminatedUnion("type", [
1248
+ BITCOIN_SPEC.zEstimatedFees,
1235
1249
  ETHEREUM_SPEC.zEstimatedFees,
1236
1250
  HEDERA_SPEC.zEstimatedFees,
1237
1251
  RIPPLE_SPEC.zEstimatedFees,
@@ -1270,11 +1284,6 @@ z14.union([
1270
1284
  ...TEZOS_SPEC.zTransactionType.enum,
1271
1285
  ...TRON_SPEC.zTransactionType.enum
1272
1286
  });
1273
- ({
1274
- ...NetworkFamily,
1275
- // TODO: Sometimes `NetworkFamily` is not a `TransactionType` prefix - but why?
1276
- [NetworkFamily.GENERIC_LIKE]: "GENERIC"
1277
- });
1278
1287
  var zTransactionData = z14.discriminatedUnion("type", [
1279
1288
  ...BITCOIN_SPEC.zTransactionData.options,
1280
1289
  ...CANTON_SPEC.zTransactionData.options,
@@ -1334,6 +1343,14 @@ var buildGateSyncId = (workspaceName, gateType, gateId) => {
1334
1343
 
1335
1344
  // src/utils.ts
1336
1345
  var isRecord = (value) => isPlainObject(value);
1346
+ var randomHex = (length) => {
1347
+ const hexBytes = times(length, () => {
1348
+ const randomByte = Math.floor(Math.random() * 256);
1349
+ return randomByte.toString(16).padStart(2, "0");
1350
+ });
1351
+ return hexBytes.join("").toUpperCase();
1352
+ };
1353
+ var genAuthUserId = () => randomHex(20);
1337
1354
  var ensureNonEmptyArray = (values, message) => {
1338
1355
  invariant8(
1339
1356
  values.length > 0,
@@ -1346,9 +1363,11 @@ function unreachable(value) {
1346
1363
  }
1347
1364
 
1348
1365
  // src/__fakes__/faker-utils.ts
1366
+ var { ec: EC } = elliptic;
1349
1367
  var fakeUniqueName = (length = 20) => faker.string.alphanumeric({ length, casing: "lower" });
1350
1368
  var fakeHexString = (length, casing = "upper") => faker.string.hexadecimal({ prefix: "", casing, length });
1351
- var fakePubKey = () => fakeHexString(130);
1369
+ var fakePubKey = () => new EC("p256").genKeyPair().getPublic(false, "hex");
1370
+ var fakeDeviceUserId = () => faker.string.hexadecimal({ prefix: "", casing: "upper", length: 16 });
1352
1371
  var fakeIntegerId = () => faker.number.int({ min: 1, max: 2e9 });
1353
1372
  var fakeGateId = fakeIntegerId;
1354
1373
  var fakeBase64String = (length) => btoa(faker.string.sample(length));
@@ -1373,6 +1392,8 @@ var fakeWorkspaceName = () => faker.string.alphanumeric({ length: 16, casing: "l
1373
1392
  // src/__fakes__/canton.ts
1374
1393
  var fakeCantonAddress = (role) => `${role}-${faker.lorem.word()}::${fakeHexString(68, "lower")}`;
1375
1394
  var fakeCantonPartyId = () => fakeCantonAddress("party");
1395
+ var fakeCantonContractId = () => fakeHexString(138, "lower");
1396
+ var fakeCantonInstrumentId = () => fakeHexString(10, "lower");
1376
1397
  var injectSyncId = (obj) => {
1377
1398
  let { syncId } = obj;
1378
1399
  if (syncId === void 0) {
@@ -1652,6 +1673,488 @@ var genAccount = (opts) => {
1652
1673
  ...rest
1653
1674
  });
1654
1675
  };
1676
+ var genSignMessageData = (opts) => ({
1677
+ message: {
1678
+ type: "EIP191",
1679
+ data: fakeHexString(10, "upper")
1680
+ },
1681
+ accountId: faker.string.uuid(),
1682
+ address: faker.finance.ethereumAddress(),
1683
+ derivationPath: "44'/60'/0'/0/0",
1684
+ ...opts
1685
+ });
1686
+ var genBitcoinLikeSendData = (opts) => {
1687
+ return {
1688
+ type: "BITCOIN_LIKE_SEND",
1689
+ currency: "bitcoin",
1690
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1691
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1692
+ recipient: faker.finance.bitcoinAddress(),
1693
+ feeStrategy: {
1694
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"]),
1695
+ feePerByte: faker.number.bigInt({ min: 1 }).toString()
1696
+ },
1697
+ ...opts
1698
+ };
1699
+ };
1700
+ var genCardanoLikeTxData = (txType) => {
1701
+ switch (txType) {
1702
+ case "CARDANO_LIKE_SEND":
1703
+ return {
1704
+ type: txType,
1705
+ currency: "cardano",
1706
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1707
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1708
+ recipient: faker.string.alphanumeric({ length: 30 }),
1709
+ feeStrategy: {
1710
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1711
+ }
1712
+ };
1713
+ case "CARDANO_LIKE_STAKING_DELEGATE":
1714
+ return {
1715
+ type: txType,
1716
+ currency: "cardano",
1717
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1718
+ stakePoolId: `pool${faker.string.alphanumeric({ length: 52 })}`,
1719
+ feeStrategy: {
1720
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1721
+ }
1722
+ };
1723
+ case "CARDANO_LIKE_STAKING_REGISTER":
1724
+ case "CARDANO_LIKE_STAKING_DEREGISTER":
1725
+ case "CARDANO_LIKE_STAKING_WITHDRAW":
1726
+ return {
1727
+ type: txType,
1728
+ currency: "cardano",
1729
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1730
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1731
+ feeStrategy: {
1732
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1733
+ }
1734
+ };
1735
+ }
1736
+ };
1737
+ var genEthereumLikeSendData = (opts) => {
1738
+ const gasLimit = faker.number.bigInt({ min: 1 });
1739
+ const gasPrice = faker.number.bigInt({ min: 1 });
1740
+ const maxFee = gasLimit * gasPrice;
1741
+ return {
1742
+ type: "ETHEREUM_LIKE_SEND",
1743
+ currency: "ethereum",
1744
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1745
+ maxFee: maxFee.toString(),
1746
+ recipient: faker.finance.bitcoinAddress(),
1747
+ feeStrategy: {
1748
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"]),
1749
+ gasLimit: gasLimit.toString(),
1750
+ gasPrice: gasPrice.toString()
1751
+ },
1752
+ ...opts
1753
+ };
1754
+ };
1755
+ var genEthereumLikeExecuteContractData = (opts) => {
1756
+ const sendData = genEthereumLikeSendData();
1757
+ return {
1758
+ ...omit(sendData, ["type"]),
1759
+ type: "ETHEREUM_LIKE_EXECUTE_CONTRACT",
1760
+ contractData: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 128 }),
1761
+ ...opts
1762
+ };
1763
+ };
1764
+ var genEthereumLikeDeployContractData = (opts) => {
1765
+ const sendData = genEthereumLikeSendData();
1766
+ return {
1767
+ ...omit(sendData, ["type"]),
1768
+ type: "ETHEREUM_LIKE_DEPLOY_CONTRACT",
1769
+ recipient: "0x0000000000000000000000000000000000000000",
1770
+ contractData: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 128 }),
1771
+ ...opts
1772
+ };
1773
+ };
1774
+ var genGenericTransactionData = () => {
1775
+ return {
1776
+ type: "GENERIC_TRANSACTION",
1777
+ currency: "tron",
1778
+ rawTx: faker.string.alphanumeric({ length: 100 })
1779
+ };
1780
+ };
1781
+ var genHederaLikeSendData = (txType) => {
1782
+ return {
1783
+ type: txType,
1784
+ currency: "hedera",
1785
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1786
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1787
+ recipient: `0.0.${faker.number.int({ min: 1e7, max: 99999999 }).toString()}`,
1788
+ feeStrategy: {
1789
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1790
+ }
1791
+ };
1792
+ };
1793
+ var genPolkadotLikeTxData = (txType) => {
1794
+ switch (txType) {
1795
+ case "POLKADOT_LIKE_SEND":
1796
+ return {
1797
+ type: txType,
1798
+ currency: "polkadot",
1799
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1800
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1801
+ recipient: faker.string.alphanumeric({ length: 30 })
1802
+ };
1803
+ case "POLKADOT_LIKE_ADDPROXY":
1804
+ case "POLKADOT_LIKE_REMOVEPROXY":
1805
+ return {
1806
+ type: txType,
1807
+ currency: "polkadot",
1808
+ kind: "Staking",
1809
+ proxy: faker.string.alphanumeric({ length: 30 })
1810
+ };
1811
+ case "POLKADOT_LIKE_BOND":
1812
+ return {
1813
+ type: txType,
1814
+ currency: "polkadot",
1815
+ payee: faker.helpers.arrayElement(["Staked", "Stash"]),
1816
+ amount: faker.number.bigInt({ min: 0 }).toString()
1817
+ };
1818
+ case "POLKADOT_LIKE_REBOND":
1819
+ case "POLKADOT_LIKE_UNBOND":
1820
+ return {
1821
+ type: txType,
1822
+ currency: "polkadot",
1823
+ amount: faker.number.bigInt({ min: 0 }).toString()
1824
+ };
1825
+ case "POLKADOT_LIKE_BONDEXTRA":
1826
+ return {
1827
+ type: txType,
1828
+ currency: "polkadot",
1829
+ amount: faker.number.bigInt({ min: 0 }).toString()
1830
+ };
1831
+ case "POLKADOT_LIKE_WITHDRAWUNBONDED":
1832
+ case "POLKADOT_LIKE_CHILL":
1833
+ return {
1834
+ type: txType,
1835
+ currency: "polkadot"
1836
+ };
1837
+ case "POLKADOT_LIKE_SETPAYEE":
1838
+ return {
1839
+ type: txType,
1840
+ currency: "polkadot",
1841
+ payee: faker.helpers.arrayElement(["Staked", "Stash"])
1842
+ };
1843
+ case "POLKADOT_LIKE_ANONYMOUSPROXY":
1844
+ case "POLKADOT_LIKE_KILLANONYMOUS":
1845
+ return {
1846
+ type: txType,
1847
+ currency: "polkadot"
1848
+ };
1849
+ }
1850
+ };
1851
+ var genRippleLikeSendData = (txType) => {
1852
+ return {
1853
+ type: txType,
1854
+ currency: "ripple",
1855
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1856
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1857
+ recipient: faker.string.alphanumeric({ length: 30 }),
1858
+ destinationTag: faker.helpers.arrayElement([faker.number.int().toString(), null]),
1859
+ feeStrategy: {
1860
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1861
+ }
1862
+ };
1863
+ };
1864
+ var genSolanaLikeTxData = (txType) => {
1865
+ switch (txType) {
1866
+ case "SOLANA_LIKE_SEND":
1867
+ case "SOLANA_LIKE_CREATE_DELEGATE_STAKE":
1868
+ case "SOLANA_LIKE_SEND_TOKEN":
1869
+ case "SOLANA_LIKE_FUND_AND_SEND_TOKEN":
1870
+ return {
1871
+ type: txType,
1872
+ currency: "solana",
1873
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1874
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1875
+ recipient: faker.string.alphanumeric({ length: 30 }),
1876
+ feeStrategy: {
1877
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1878
+ }
1879
+ };
1880
+ case "SOLANA_LIKE_DELEGATE_STAKE":
1881
+ return {
1882
+ type: txType,
1883
+ currency: "solana",
1884
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1885
+ recipient: faker.string.alphanumeric({ length: 30 }),
1886
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1887
+ feeStrategy: {
1888
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1889
+ }
1890
+ };
1891
+ case "SOLANA_LIKE_DEACTIVATE_STAKE":
1892
+ return {
1893
+ type: txType,
1894
+ currency: "solana",
1895
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1896
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1897
+ feeStrategy: {
1898
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1899
+ }
1900
+ };
1901
+ case "SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE":
1902
+ case "SOLANA_LIKE_SPLIT_STAKE":
1903
+ case "SOLANA_LIKE_WITHDRAW_STAKE":
1904
+ return {
1905
+ type: txType,
1906
+ currency: "solana",
1907
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1908
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1909
+ stakeAccount: faker.string.alphanumeric({ length: 30 }),
1910
+ feeStrategy: {
1911
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1912
+ }
1913
+ };
1914
+ case "SOLANA_LIKE_MERGE_STAKE":
1915
+ return {
1916
+ type: txType,
1917
+ currency: "solana",
1918
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1919
+ mergeSrcAccount: faker.string.alphanumeric({ length: 30 }),
1920
+ mergeDstAccount: faker.string.alphanumeric({ length: 30 }),
1921
+ feeStrategy: {
1922
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1923
+ }
1924
+ };
1925
+ case "SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT":
1926
+ return {
1927
+ type: txType,
1928
+ currency: "solana",
1929
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1930
+ feeStrategy: {
1931
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1932
+ }
1933
+ };
1934
+ }
1935
+ };
1936
+ var genStellarLikeSendData = (txType) => {
1937
+ return {
1938
+ type: txType,
1939
+ currency: "stellar",
1940
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1941
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1942
+ recipient: faker.string.alphanumeric({ length: 30 }),
1943
+ memo: faker.helpers.arrayElement([
1944
+ { type: "MEMO_ID", value: faker.number.bigInt({ min: 0 }).toString() },
1945
+ { type: "MEMO_TEXT", value: faker.word.conjunction(28) },
1946
+ {
1947
+ type: "MEMO_HASH",
1948
+ value: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 64 })
1949
+ },
1950
+ {
1951
+ type: "MEMO_RETURN",
1952
+ value: faker.string.hexadecimal({ prefix: "", casing: "lower", length: 64 })
1953
+ },
1954
+ null
1955
+ ]),
1956
+ feeStrategy: {
1957
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1958
+ }
1959
+ };
1960
+ };
1961
+ var genSuiLikeTxData = (txType) => {
1962
+ return {
1963
+ currency: "sui",
1964
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1965
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1966
+ feeStrategy: {
1967
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
1968
+ },
1969
+ ...match(txType).with("SUI_LIKE_STAKE", (type) => ({
1970
+ type,
1971
+ validator: faker.string.alphanumeric({ length: 30 })
1972
+ })).with("SUI_LIKE_UNSTAKE", (type) => ({
1973
+ type,
1974
+ stakedSuiId: faker.string.alphanumeric({ length: 30 }),
1975
+ useAllAmount: faker.datatype.boolean()
1976
+ })).with(P.union("SUI_LIKE_SEND", "SUI_LIKE_SEND_TOKEN"), (type) => ({
1977
+ type,
1978
+ recipient: faker.string.alphanumeric({ length: 30 })
1979
+ })).exhaustive()
1980
+ };
1981
+ };
1982
+ var genTezosLikeTxData = (txType) => {
1983
+ return {
1984
+ type: txType,
1985
+ currency: "tezos",
1986
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1987
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
1988
+ recipient: faker.string.alphanumeric({ length: 30 }),
1989
+ feeStrategy: {
1990
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST", "CUSTOM"])
1991
+ }
1992
+ };
1993
+ };
1994
+ var genTronLikeTxData = (txType) => {
1995
+ return {
1996
+ type: txType,
1997
+ currency: "tron",
1998
+ amount: faker.number.bigInt({ min: 0 }).toString(),
1999
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
2000
+ recipient: faker.string.alphanumeric({ length: 30 }),
2001
+ feeStrategy: {
2002
+ type: faker.helpers.arrayElement(["SLOW", "NORMAL", "FAST"])
2003
+ }
2004
+ };
2005
+ };
2006
+ var genCantonTransferProposal = () => ({
2007
+ amount: faker.number.bigInt({ min: 0 }).toString(),
2008
+ contractId: fakeCantonContractId(),
2009
+ instrumentId: fakeCantonInstrumentId(),
2010
+ expiresAtMicros: faker.date.future().getTime() * 1e3,
2011
+ memo: faker.lorem.sentence(),
2012
+ sender: fakeCantonPartyId(),
2013
+ recipient: fakeCantonPartyId()
2014
+ });
2015
+ var genCantonLikeTxData = (txType) => {
2016
+ switch (txType) {
2017
+ case "CANTON_LIKE_SEND":
2018
+ case "CANTON_LIKE_SEND_TOKEN":
2019
+ return {
2020
+ type: txType,
2021
+ currency: "canton_network",
2022
+ amount: faker.number.bigInt({ min: 0 }).toString(),
2023
+ recipient: fakeCantonPartyId()
2024
+ };
2025
+ case "CANTON_LIKE_WITHDRAW":
2026
+ return {
2027
+ type: txType,
2028
+ currency: "canton_network",
2029
+ transferProposal: genCantonTransferProposal(),
2030
+ reason: faker.lorem.sentence()
2031
+ };
2032
+ case "CANTON_LIKE_RECEIVE":
2033
+ return {
2034
+ type: txType,
2035
+ currency: "canton_network",
2036
+ transferProposal: genCantonTransferProposal(),
2037
+ verdict: "ACCEPT",
2038
+ reason: faker.lorem.sentence()
2039
+ };
2040
+ case "CANTON_LIKE_PRE_APPROVAL":
2041
+ return {
2042
+ type: txType,
2043
+ currency: "canton_network",
2044
+ recipient: fakeCantonPartyId()
2045
+ };
2046
+ case "CANTON_LIKE_TAP":
2047
+ return {
2048
+ type: txType,
2049
+ currency: "canton_network",
2050
+ amount: faker.number.bigInt({ min: 0 }).toString(),
2051
+ maxFee: null,
2052
+ recipient: fakeCantonPartyId()
2053
+ };
2054
+ }
2055
+ };
2056
+ var mergeTransactionData = (defaults, custom) => {
2057
+ const merged = {
2058
+ ...defaults,
2059
+ ...custom,
2060
+ type: defaults.type
2061
+ // make sure `type` comes from `defaults`
2062
+ };
2063
+ return zTransactionData.parse(merged);
2064
+ };
2065
+ var genCreateTransactionData = (opts) => {
2066
+ const { accountId, transaction } = opts ?? {};
2067
+ const transactionType = transaction?.type ?? "ETHEREUM_LIKE_SEND";
2068
+ let transactionDefaults;
2069
+ switch (transactionType) {
2070
+ case "BITCOIN_LIKE_SEND":
2071
+ transactionDefaults = genBitcoinLikeSendData();
2072
+ break;
2073
+ case "CANTON_LIKE_SEND":
2074
+ case "CANTON_LIKE_SEND_TOKEN":
2075
+ case "CANTON_LIKE_WITHDRAW":
2076
+ case "CANTON_LIKE_RECEIVE":
2077
+ case "CANTON_LIKE_PRE_APPROVAL":
2078
+ case "CANTON_LIKE_TAP":
2079
+ transactionDefaults = genCantonLikeTxData(transactionType);
2080
+ break;
2081
+ case "CARDANO_LIKE_SEND":
2082
+ case "CARDANO_LIKE_STAKING_REGISTER":
2083
+ case "CARDANO_LIKE_STAKING_DEREGISTER":
2084
+ case "CARDANO_LIKE_STAKING_DELEGATE":
2085
+ case "CARDANO_LIKE_STAKING_WITHDRAW":
2086
+ transactionDefaults = genCardanoLikeTxData(transactionType);
2087
+ break;
2088
+ case "ETHEREUM_LIKE_SEND":
2089
+ transactionDefaults = genEthereumLikeSendData();
2090
+ break;
2091
+ case "ETHEREUM_LIKE_EXECUTE_CONTRACT":
2092
+ transactionDefaults = genEthereumLikeExecuteContractData();
2093
+ break;
2094
+ case "ETHEREUM_LIKE_DEPLOY_CONTRACT":
2095
+ transactionDefaults = genEthereumLikeDeployContractData();
2096
+ break;
2097
+ case "GENERIC_TRANSACTION":
2098
+ transactionDefaults = genGenericTransactionData();
2099
+ break;
2100
+ case "HEDERA_LIKE_SEND":
2101
+ case "HEDERA_LIKE_SEND_TOKEN":
2102
+ transactionDefaults = genHederaLikeSendData(transactionType);
2103
+ break;
2104
+ case "POLKADOT_LIKE_SEND":
2105
+ case "POLKADOT_LIKE_ADDPROXY":
2106
+ case "POLKADOT_LIKE_REMOVEPROXY":
2107
+ case "POLKADOT_LIKE_BOND":
2108
+ case "POLKADOT_LIKE_REBOND":
2109
+ case "POLKADOT_LIKE_BONDEXTRA":
2110
+ case "POLKADOT_LIKE_UNBOND":
2111
+ case "POLKADOT_LIKE_WITHDRAWUNBONDED":
2112
+ case "POLKADOT_LIKE_SETPAYEE":
2113
+ case "POLKADOT_LIKE_ANONYMOUSPROXY":
2114
+ case "POLKADOT_LIKE_KILLANONYMOUS":
2115
+ case "POLKADOT_LIKE_CHILL":
2116
+ transactionDefaults = genPolkadotLikeTxData(transactionType);
2117
+ break;
2118
+ case "RIPPLE_LIKE_SEND":
2119
+ transactionDefaults = genRippleLikeSendData(transactionType);
2120
+ break;
2121
+ case "SOLANA_LIKE_SEND":
2122
+ case "SOLANA_LIKE_CREATE_DELEGATE_STAKE":
2123
+ case "SOLANA_LIKE_DELEGATE_STAKE":
2124
+ case "SOLANA_LIKE_WITHDRAW_STAKE":
2125
+ case "SOLANA_LIKE_DEACTIVATE_STAKE":
2126
+ case "SOLANA_LIKE_SPLIT_STAKE":
2127
+ case "SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE":
2128
+ case "SOLANA_LIKE_MERGE_STAKE":
2129
+ case "SOLANA_LIKE_SEND_TOKEN":
2130
+ case "SOLANA_LIKE_FUND_AND_SEND_TOKEN":
2131
+ case "SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT":
2132
+ transactionDefaults = genSolanaLikeTxData(transactionType);
2133
+ break;
2134
+ case "STELLAR_LIKE_SEND":
2135
+ transactionDefaults = genStellarLikeSendData(transactionType);
2136
+ break;
2137
+ case "TEZOS_LIKE_SEND":
2138
+ case "TEZOS_LIKE_DELEGATE":
2139
+ case "TEZOS_LIKE_UNDELEGATE":
2140
+ transactionDefaults = genTezosLikeTxData(transactionType);
2141
+ break;
2142
+ case "SUI_LIKE_SEND":
2143
+ case "SUI_LIKE_SEND_TOKEN":
2144
+ case "SUI_LIKE_STAKE":
2145
+ case "SUI_LIKE_UNSTAKE":
2146
+ transactionDefaults = genSuiLikeTxData(transactionType);
2147
+ break;
2148
+ case "TRON_LIKE_SEND":
2149
+ case "TRON_LIKE_SEND_TOKEN":
2150
+ transactionDefaults = genTronLikeTxData(transactionType);
2151
+ break;
2152
+ }
2153
+ return {
2154
+ accountId: accountId ?? faker.string.uuid(),
2155
+ transaction: mergeTransactionData(transactionDefaults, transaction)
2156
+ };
2157
+ };
1655
2158
  var shouldHaveTargetHsmId = (request) => {
1656
2159
  switch (request.type) {
1657
2160
  case RequestType.CREATE_ENTITY:
@@ -1694,43 +2197,43 @@ var shouldHaveTargetHsmId = (request) => {
1694
2197
  return true;
1695
2198
  }
1696
2199
  };
1697
- var shouldHaveTargetId = (request) => {
1698
- switch (request.type) {
2200
+ var shouldHaveTargetId = (type) => {
2201
+ switch (type) {
1699
2202
  case RequestType.CREATE_API_KEY:
1700
2203
  case RequestType.EDIT_API_KEY:
1701
2204
  case RequestType.REVOKE_API_KEY:
1702
2205
  return false;
1703
2206
  case RequestType.CREATE_TRANSACTION:
2207
+ // TODO: move to True when we resolved the MetaTransaction id being an int
1704
2208
  case RequestType.SIGN_DIGESTS:
1705
2209
  return false;
1706
2210
  case RequestType.UPDATE_QUORUM:
1707
2211
  case RequestType.CREATE_PSD_USER:
1708
2212
  case RequestType.CREATE_API_USER:
2213
+ case RequestType.CREATE_SCICONFIG:
1709
2214
  case RequestType.CREATE_ACCOUNT:
1710
- case RequestType.CREATE_GROUP:
1711
- case RequestType.CREATE_WHITELIST:
2215
+ case RequestType.CREATE_API_USER_ACCESS:
1712
2216
  case RequestType.CREATE_ENTITY:
1713
- case RequestType.CREATE_SCICONFIG:
2217
+ case RequestType.CREATE_GROUP:
1714
2218
  case RequestType.CREATE_POLICY:
1715
- case RequestType.SIGN_MESSAGE:
1716
- case RequestType.TRADELINK_CREATE_CUSTODIAN:
1717
- case RequestType.TRADELINK_CREATE_EXCHANGE:
1718
- case RequestType.TRADELINK_CREATE_ASSET_MANAGER:
1719
- return request.state === RequestState.EXECUTED;
2219
+ case RequestType.CREATE_WHITELIST:
1720
2220
  case RequestType.EDIT_WORKSPACE_RULE:
1721
2221
  case RequestType.EDIT_ACCOUNT:
1722
- case RequestType.TRADELINK_ACTIVATE_ACCOUNT:
1723
2222
  case RequestType.EDIT_TOKEN_RULE:
1724
2223
  // EDIT_TOKEN_RULE targetId is the parent account which must always exist, even when creating new token rule.
1725
2224
  case RequestType.EDIT_GROUP:
1726
- case RequestType.REVOKE_GROUP:
1727
- case RequestType.EDIT_WHITELIST:
1728
2225
  case RequestType.EDIT_ENTITY:
1729
- case RequestType.REVOKE_ENTITY:
1730
- case RequestType.CREATE_API_USER_ACCESS:
1731
- case RequestType.REVOKE_USER:
1732
2226
  case RequestType.EDIT_SCICONFIG:
1733
2227
  case RequestType.EDIT_POLICY:
2228
+ case RequestType.EDIT_WHITELIST:
2229
+ case RequestType.REVOKE_ENTITY:
2230
+ case RequestType.REVOKE_GROUP:
2231
+ case RequestType.REVOKE_USER:
2232
+ case RequestType.SIGN_MESSAGE:
2233
+ case RequestType.TRADELINK_ACTIVATE_ACCOUNT:
2234
+ case RequestType.TRADELINK_CREATE_ASSET_MANAGER:
2235
+ case RequestType.TRADELINK_CREATE_CUSTODIAN:
2236
+ case RequestType.TRADELINK_CREATE_EXCHANGE:
1734
2237
  case RequestType.TRADELINK_EDIT_CUSTODIAN:
1735
2238
  case RequestType.TRADELINK_EDIT_EXCHANGE:
1736
2239
  case RequestType.TRADELINK_EDIT_ASSET_MANAGER:
@@ -1743,13 +2246,373 @@ var shouldHaveTargetId = (request) => {
1743
2246
  return true;
1744
2247
  }
1745
2248
  };
2249
+ var genCreateAccountData = (opts) => {
2250
+ return {
2251
+ name: fakeUniqueName(),
2252
+ type: "BITCOIN_LIKE",
2253
+ currency: "bitcoin",
2254
+ contractAddress: null,
2255
+ tokenIdentifier: null,
2256
+ governance: {
2257
+ type: "CLASSIC",
2258
+ policy: { rules: [] }
2259
+ // TODO: account gov rules should not be empty
2260
+ },
2261
+ index: 0,
2262
+ derivationPath: "m/84'/0'/0'",
2263
+ ...opts
2264
+ };
2265
+ };
2266
+ var genEditAccountData = (opts) => {
2267
+ return {
2268
+ name: fakeUniqueName(),
2269
+ governance: {
2270
+ type: "CLASSIC",
2271
+ policy: { rules: [] }
2272
+ // TODO: account gov rules should not be empty
2273
+ },
2274
+ ...opts
2275
+ };
2276
+ };
2277
+ var genEditTokenRuleData = (opts) => {
2278
+ return {
2279
+ parentAccountId: faker.string.uuid(),
2280
+ contractAddress: faker.string.alphanumeric({ length: 44 }),
2281
+ rules: [
2282
+ {
2283
+ operationType: "SEND",
2284
+ reviewSteps: [
2285
+ {
2286
+ quorum: 1,
2287
+ userIds: []
2288
+ }
2289
+ ]
2290
+ }
2291
+ ],
2292
+ ...opts
2293
+ };
2294
+ };
2295
+ var genCreateApiKeyData = (opts) => {
2296
+ return {
2297
+ name: faker.company.name().slice(0, 19),
2298
+ entities: [],
2299
+ scopes: {},
2300
+ // FIXME what should we put there?
2301
+ ...opts
2302
+ };
2303
+ };
2304
+ var genEditApiKeyData = (opts) => {
2305
+ return {
2306
+ name: faker.company.name().slice(0, 19),
2307
+ entities: [],
2308
+ scopes: {},
2309
+ // FIXME what should we put there?
2310
+ ...opts
2311
+ };
2312
+ };
2313
+ var genSignDigestsData = (opts) => {
2314
+ const { accountId, digests } = opts ?? {};
2315
+ return {
2316
+ accountId: accountId ?? faker.string.uuid(),
2317
+ digests: digests ?? [
2318
+ {
2319
+ digest: faker.string.hexadecimal({ prefix: "", length: 64 }),
2320
+ derivationPath: "m/44'/60'/0'"
2321
+ }
2322
+ ]
2323
+ };
2324
+ };
2325
+ var genCreateEntityData = (opts) => {
2326
+ return {
2327
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2328
+ accountIds: [],
2329
+ memberIds: [],
2330
+ ...opts
2331
+ };
2332
+ };
2333
+ var genEditEntityData = (opts) => {
2334
+ return {
2335
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2336
+ accountIds: [],
2337
+ memberIds: [],
2338
+ ...opts
2339
+ };
2340
+ };
2341
+ var genCreateGroupData = (opts) => {
2342
+ return {
2343
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2344
+ description: faker.lorem.sentence(),
2345
+ members: [],
2346
+ ...opts
2347
+ };
2348
+ };
2349
+ var genEditGroupData = (opts) => {
2350
+ return {
2351
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2352
+ description: faker.lorem.sentence(),
2353
+ members: [],
2354
+ ...opts
2355
+ };
2356
+ };
2357
+ var genCreatePolicyData = (opts) => {
2358
+ return {
2359
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2360
+ description: faker.lorem.sentence(),
2361
+ currency: "bitcoin",
2362
+ govRules: [],
2363
+ ...opts
2364
+ };
2365
+ };
2366
+ var genEditPolicyData = (opts) => {
2367
+ return {
2368
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2369
+ description: faker.lorem.sentence(),
2370
+ govRules: [],
2371
+ ...opts
2372
+ };
2373
+ };
2374
+ var genCreateSciConfigData = (opts) => {
2375
+ return {
2376
+ account: faker.string.uuid(),
2377
+ config: {
2378
+ dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),
2379
+ customContractCallEnabled: faker.datatype.boolean()
2380
+ },
2381
+ ...opts
2382
+ };
2383
+ };
2384
+ var genEditSciConfigData = (opts) => {
2385
+ return {
2386
+ config: {
2387
+ dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),
2388
+ customContractCallEnabled: faker.datatype.boolean()
2389
+ },
2390
+ ...opts
2391
+ };
2392
+ };
2393
+ var genCreatePledgeIncrementData = (opts) => ({
2394
+ accountId: faker.string.uuid(),
2395
+ exchangeId: faker.string.uuid(),
2396
+ amount: "42",
2397
+ ...opts
2398
+ });
2399
+ var genRepledgeRequestData = (opts) => ({
2400
+ accountId: faker.string.uuid(),
2401
+ exchangeId: faker.string.uuid(),
2402
+ amount: "42",
2403
+ ...opts
2404
+ });
2405
+ var genCreateSettlementData = (opts) => ({
2406
+ accountId: faker.string.uuid(),
2407
+ exchangeId: faker.string.uuid(),
2408
+ transaction: {
2409
+ type: "BITCOIN_LIKE_SEND",
2410
+ amount: "42",
2411
+ currency: "bitcoin",
2412
+ maxFee: "999",
2413
+ recipient: faker.finance.bitcoinAddress(),
2414
+ feeStrategy: { type: "NORMAL" }
2415
+ },
2416
+ ...opts
2417
+ });
2418
+ var genForceUnpledgeData = (opts) => ({
2419
+ accountId: faker.string.uuid(),
2420
+ exchangeId: faker.string.uuid(),
2421
+ ...opts
2422
+ });
2423
+ var genTradelinkWithdrawData = (opts) => ({
2424
+ accountId: faker.string.uuid(),
2425
+ transaction: {
2426
+ type: "ETHEREUM_LIKE_SEND",
2427
+ recipient: "0x63e4195AF1509490b430F3f5bCb85A82a24F5C82",
2428
+ amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),
2429
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
2430
+ currency: "ethereum",
2431
+ feeStrategy: {
2432
+ type: "NORMAL",
2433
+ gasPrice: "2",
2434
+ gasLimit: "10"
2435
+ }
2436
+ },
2437
+ ...opts
2438
+ });
2439
+ var genTradelinkArbitrationData = (opts) => ({
2440
+ accountId: faker.string.uuid(),
2441
+ transaction: {
2442
+ type: "ETHEREUM_LIKE_SEND",
2443
+ recipient: "0xcefd70CFCd7a2FAa0fe956E3d496F9313297CB44",
2444
+ amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),
2445
+ maxFee: faker.number.bigInt({ min: 1 }).toString(),
2446
+ currency: "ethereum",
2447
+ feeStrategy: {
2448
+ type: "NORMAL",
2449
+ gasPrice: "2",
2450
+ gasLimit: "10"
2451
+ }
2452
+ },
2453
+ ...opts
2454
+ });
2455
+ var genCreatePsdUserData = (opts) => ({
2456
+ registrationId: faker.string.uuid(),
2457
+ ...opts
2458
+ });
2459
+ var genCreateApiUserData = (opts) => {
2460
+ return {
2461
+ name: faker.person.firstName(),
2462
+ pubKey: fakePubKey(),
2463
+ role: UserRole.OPERATOR,
2464
+ viewAll: false,
2465
+ ...opts
2466
+ };
2467
+ };
2468
+ var genCreateApiUserAccessData = (opts) => {
2469
+ return {
2470
+ name: faker.person.firstName(),
2471
+ ...opts
2472
+ };
2473
+ };
2474
+ var genCreateWhitelistData = (opts) => {
2475
+ return {
2476
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2477
+ description: faker.lorem.sentence(),
2478
+ type: faker.helpers.arrayElement(Object.values(WhitelistType)),
2479
+ addresses: [
2480
+ {
2481
+ name: faker.lorem.words(3),
2482
+ currency: "bitcoin",
2483
+ address: faker.finance.bitcoinAddress(),
2484
+ destinationTags: []
2485
+ },
2486
+ {
2487
+ name: faker.lorem.words(3),
2488
+ currency: "ethereum",
2489
+ address: faker.finance.ethereumAddress(),
2490
+ destinationTags: []
2491
+ }
2492
+ ],
2493
+ ...opts
2494
+ };
2495
+ };
2496
+ var genEditWhitelistData = (opts) => {
2497
+ return {
2498
+ name: faker.word.noun({ length: { min: 5, max: 19 } }),
2499
+ addresses: [
2500
+ {
2501
+ name: faker.lorem.words(3),
2502
+ currency: "bitcoin",
2503
+ address: faker.finance.bitcoinAddress(),
2504
+ destinationTags: []
2505
+ },
2506
+ {
2507
+ name: faker.lorem.words(3),
2508
+ currency: "ethereum",
2509
+ address: faker.finance.ethereumAddress(),
2510
+ destinationTags: []
2511
+ }
2512
+ ],
2513
+ ...opts
2514
+ };
2515
+ };
2516
+ var genWorkspaceRuleData = (opts) => {
2517
+ return {
2518
+ permission: AdminPermission.CREATE_ACCOUNT_WITH_POLICY,
2519
+ reviewConfig: [{ userIds: [], quorum: 2 }],
2520
+ ...opts
2521
+ };
2522
+ };
1746
2523
 
1747
2524
  // src/__fakes__/models/requests/requests-and-reviews.ts
2525
+ var genRequestData = (type, opts) => {
2526
+ switch (type) {
2527
+ // Workspace...
2528
+ case RequestType.UPDATE_QUORUM:
2529
+ return { quorum: 3, ...opts };
2530
+ // User...
2531
+ case RequestType.CREATE_PSD_USER:
2532
+ return genCreatePsdUserData(opts);
2533
+ case RequestType.CREATE_API_USER:
2534
+ return genCreateApiUserData(opts);
2535
+ case RequestType.CREATE_API_USER_ACCESS:
2536
+ return genCreateApiUserAccessData(opts);
2537
+ case RequestType.REVOKE_USER:
2538
+ return {};
2539
+ // Admin gov rule...
2540
+ case RequestType.EDIT_WORKSPACE_RULE:
2541
+ return genWorkspaceRuleData(opts);
2542
+ // Group...
2543
+ case RequestType.CREATE_GROUP:
2544
+ return genCreateGroupData(opts);
2545
+ case RequestType.EDIT_GROUP:
2546
+ return genEditGroupData(opts);
2547
+ case RequestType.REVOKE_GROUP:
2548
+ return {};
2549
+ // ApiKey...
2550
+ case RequestType.CREATE_API_KEY:
2551
+ return genCreateApiKeyData(opts);
2552
+ case RequestType.EDIT_API_KEY:
2553
+ return genEditApiKeyData(opts);
2554
+ case RequestType.REVOKE_API_KEY:
2555
+ return {};
2556
+ // Whitelist...
2557
+ case RequestType.CREATE_WHITELIST:
2558
+ return genCreateWhitelistData(opts);
2559
+ case RequestType.EDIT_WHITELIST:
2560
+ return genEditWhitelistData(opts);
2561
+ // Entity...
2562
+ case RequestType.CREATE_ENTITY:
2563
+ return genCreateEntityData(opts);
2564
+ case RequestType.EDIT_ENTITY:
2565
+ return genEditEntityData(opts);
2566
+ case RequestType.REVOKE_ENTITY:
2567
+ return {};
2568
+ // Account...
2569
+ case RequestType.CREATE_ACCOUNT:
2570
+ return genCreateAccountData(opts);
2571
+ case RequestType.EDIT_ACCOUNT:
2572
+ return genEditAccountData(opts);
2573
+ case RequestType.EDIT_TOKEN_RULE:
2574
+ return genEditTokenRuleData(opts);
2575
+ // Operator requests...
2576
+ case RequestType.CREATE_TRANSACTION:
2577
+ return genCreateTransactionData(opts);
2578
+ case RequestType.SIGN_MESSAGE:
2579
+ return genSignMessageData(opts);
2580
+ case RequestType.SIGN_DIGESTS:
2581
+ return genSignDigestsData(opts);
2582
+ // SCI config...
2583
+ case RequestType.CREATE_SCICONFIG:
2584
+ return genCreateSciConfigData(opts);
2585
+ case RequestType.EDIT_SCICONFIG:
2586
+ return genEditSciConfigData(opts);
2587
+ // Policy
2588
+ case RequestType.CREATE_POLICY:
2589
+ return genCreatePolicyData(opts);
2590
+ case RequestType.EDIT_POLICY:
2591
+ return genEditPolicyData(opts);
2592
+ // Tradelink...
2593
+ case RequestType.TRADELINK_ADJUST_PLEDGE:
2594
+ return genCreatePledgeIncrementData(opts);
2595
+ case RequestType.TRADELINK_CREATE_SETTLEMENT:
2596
+ return genCreateSettlementData(opts);
2597
+ case RequestType.TRADELINK_FORCE_UNPLEDGE:
2598
+ return genForceUnpledgeData(opts);
2599
+ case RequestType.TRADELINK_WITHDRAW:
2600
+ return genTradelinkWithdrawData(opts);
2601
+ case RequestType.TRADELINK_REPLEDGE:
2602
+ return genRepledgeRequestData(opts);
2603
+ case RequestType.TRADELINK_ARBITRATE:
2604
+ return genTradelinkArbitrationData(opts);
2605
+ default: {
2606
+ const unknownType = type;
2607
+ throw new Error(`Unknown request type: ${unknownType}`);
2608
+ }
2609
+ }
2610
+ };
1748
2611
  var genRequestReviewSteps = (numSteps) => times(1, () => ({ stageName: "default", quorum: 2 }));
1749
2612
  var genVaultRequest = (opts) => {
1750
2613
  const { type, state = RequestState.PENDING_APPROVAL, data, ...custom } = opts;
1751
2614
  const targetHsmId = shouldHaveTargetHsmId({ type, state }) ? type === RequestType.CREATE_PSD_USER ? fakePubKey() : fakeHsmObjectId() : null;
1752
- const targetId = shouldHaveTargetId({ type, state }) ? faker.string.uuid() : null;
2615
+ const targetId = shouldHaveTargetId(type) ? faker.string.uuid() : null;
1753
2616
  return injectSyncId({
1754
2617
  id: faker.string.uuid(),
1755
2618
  workspaceName: fakeWorkspaceName(),
@@ -1813,6 +2676,98 @@ var genVaultRequestReview = (opts) => {
1813
2676
  ...opts
1814
2677
  };
1815
2678
  };
2679
+ var genUserFieldsForDeviceType = (deviceType) => {
2680
+ switch (deviceType) {
2681
+ case UserDeviceType.PSD:
2682
+ case UserDeviceType.SOFT_PSD:
2683
+ return {
2684
+ deviceType,
2685
+ deviceUserId: fakeDeviceUserId(),
2686
+ hsmId: null
2687
+ };
2688
+ case UserDeviceType.API:
2689
+ return {
2690
+ deviceType,
2691
+ deviceUserId: null,
2692
+ hsmId: faker.string.uuid()
2693
+ };
2694
+ }
2695
+ };
2696
+ var genUser = (opts) => {
2697
+ const role = opts?.role ?? faker.helpers.arrayElement([UserRole.ADMIN, UserRole.OPERATOR]);
2698
+ const deviceType = opts?.deviceType ?? UserDeviceType.PSD;
2699
+ const userFieldsForDeviceType = genUserFieldsForDeviceType(deviceType);
2700
+ const gateType = role === UserRole.READ_ONLY_API_KEY ? GateUserType.VaultApiKey : GateUserType.Person;
2701
+ return injectSyncId({
2702
+ id: faker.string.uuid(),
2703
+ name: faker.person.fullName(),
2704
+ ...userFieldsForDeviceType,
2705
+ authUserId: genAuthUserId(),
2706
+ pubKey: fakePubKey(),
2707
+ workspaceName: fakeWorkspaceName(),
2708
+ u2fKeyHandle: fakePubKey(),
2709
+ u2fPubKey: fakePubKey(),
2710
+ legacyViewAll: false,
2711
+ role,
2712
+ status: ActivationStatus.ACTIVE,
2713
+ isSuspended: false,
2714
+ gateType,
2715
+ gateId: fakeGateId(),
2716
+ createdAt: faker.date.past(),
2717
+ updatedAt: faker.date.past(),
2718
+ ...opts
2719
+ });
2720
+ };
2721
+ var genGroup = (opts) => injectSyncId({
2722
+ id: faker.string.uuid(),
2723
+ workspaceName: fakeWorkspaceName(),
2724
+ name: faker.person.fullName(),
2725
+ description: faker.lorem.sentence(10),
2726
+ hsmId: fakeHsmObjectId(),
2727
+ status: ActivationStatus.ACTIVE,
2728
+ gateId: fakeGateId(),
2729
+ gateType: "Group",
2730
+ createdAt: faker.date.past(),
2731
+ updatedAt: faker.date.past(),
2732
+ ...opts
2733
+ });
2734
+ var genGroupWithMembers = (opts) => {
2735
+ const group = genGroup(opts);
2736
+ return {
2737
+ ...group,
2738
+ members: opts?.members ?? []
2739
+ };
2740
+ };
2741
+ var genWhitelist = (opts) => {
2742
+ return injectSyncId({
2743
+ id: faker.string.uuid(),
2744
+ workspaceName: fakeWorkspaceName(),
2745
+ name: faker.lorem.words(3),
2746
+ description: faker.lorem.sentence(10),
2747
+ addresses: [
2748
+ {
2749
+ name: faker.lorem.words(3),
2750
+ currency: "bitcoin",
2751
+ address: faker.finance.bitcoinAddress(),
2752
+ destinationTags: []
2753
+ },
2754
+ {
2755
+ name: faker.lorem.words(3),
2756
+ currency: "ethereum",
2757
+ address: faker.finance.ethereumAddress(),
2758
+ destinationTags: []
2759
+ }
2760
+ ],
2761
+ hsmId: fakeHsmObjectId(),
2762
+ type: faker.helpers.arrayElement(Object.values(WhitelistType)),
2763
+ status: faker.helpers.arrayElement(Object.values(ActivationStatus)),
2764
+ gateId: fakeGateId(),
2765
+ gateType: "Whitelist",
2766
+ createdAt: faker.date.past(),
2767
+ updatedAt: faker.date.past(),
2768
+ ...opts
2769
+ });
2770
+ };
1816
2771
  var zPubKey = zHexString.meta({ description: "Public key" });
1817
2772
  var zHsmCertificate = z.object({
1818
2773
  codeHash: z.base64().meta({ description: "Hash of the executable that generated this certificate" }),
@@ -1929,8 +2884,7 @@ var zUserRegistrationCreateInput = z.object({
1929
2884
  zUserRegistrationCreateInput.extend({
1930
2885
  id: z.string().meta({ description: "User registration ID" }),
1931
2886
  workspaceName: z.string().meta({ description: "Workspace name" }),
1932
- state: z.enum(UserRegistrationState).meta({ description: "User registration state" }),
1933
- isLocked: z.boolean().meta({ description: "Whether the registration is locked by a request" })
2887
+ state: z.enum(UserRegistrationState).meta({ description: "User registration state" })
1934
2888
  });
1935
2889
 
1936
2890
  // src/users/request-data.ts
@@ -1939,7 +2893,7 @@ var zCreatePsdUserRequestData = z14.object({
1939
2893
  });
1940
2894
  var zCreateApiUserRequestData = z14.object({
1941
2895
  name: zUserName,
1942
- pubKey: z14.string().meta({ description: "Public key" }),
2896
+ pubKey: z14.string().regex(/^04[0-9a-fA-F]{128}$/).meta({ description: "Public key, uncompressed secp256r1 format" }),
1943
2897
  role: z14.enum(["ADMIN", "OPERATOR"]).meta({ description: "User role" }),
1944
2898
  viewAll: z14.boolean().meta({ description: "View all data" }).optional()
1945
2899
  }).meta({ description: "Create API user request data" });
@@ -2353,10 +3307,7 @@ z14.enum([
2353
3307
  var zRawSigningLiveData = zCommonLiveData.extend({
2354
3308
  type: z14.literal(AccountType.RAW_SIGNING).meta({ description: "Account type" })
2355
3309
  }).meta({ description: "Raw signing account" });
2356
- z14.discriminatedUnion("type", [
2357
- zRawSigningLiveData,
2358
- ...zAccountLiveData.options
2359
- ]);
3310
+ z14.discriminatedUnion("type", [zRawSigningLiveData, ...zAccountLiveData.options]).meta({ description: "Account live data", id: "AccountLiveDataResponse" });
2360
3311
  z14.object({
2361
3312
  address: z14.string().meta({ description: "Address" }),
2362
3313
  derivationPath: z14.string().nullable().meta({ description: "Derivation path" })
@@ -2655,7 +3606,8 @@ var getAccountAssetFields = (account) => {
2655
3606
  case AccountType.HEDERA_LIKE:
2656
3607
  return {
2657
3608
  type: account.type,
2658
- address: account.address
3609
+ address: account.address,
3610
+ isActivated: account.lesWalletId !== null
2659
3611
  };
2660
3612
  /* v8 ignore next -- @preserve */
2661
3613
  default:
@@ -2695,6 +3647,63 @@ var serializeAccount = (account) => {
2695
3647
  };
2696
3648
  return zAccountResponse.parse(response);
2697
3649
  };
3650
+ var zUserResponse = z14.object({
3651
+ id: z14.string().meta({ description: "Internal unique identifier" }),
3652
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
3653
+ legacyViewAll: z14.boolean().meta({ description: "If true, user can read all resources on the workspace" }),
3654
+ workspaceName: z14.string().meta({ description: "User's workspace name" }),
3655
+ name: z14.string().meta({ description: "User name" }),
3656
+ deviceUserId: z14.string().nullable().meta({ description: "User's device ID (for non-API users)" }),
3657
+ deviceType: z14.enum(UserDeviceType).meta({ description: "User's device type" }),
3658
+ role: z14.enum(UserRole).meta({ description: "User role" }),
3659
+ pubKey: z14.string().meta({ description: "User public key" }),
3660
+ status: z14.enum(ActivationStatus).meta({ description: "User status" }),
3661
+ isSuspended: z14.boolean().meta({ description: "Whether the user is suspended" }),
3662
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
3663
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" })
3664
+ });
3665
+ zUserResponse.extend({
3666
+ role: z14.literal(UserRole.ADMIN).meta({ description: "Should always be ADMIN" })
3667
+ });
3668
+ z14.enum([
3669
+ "name",
3670
+ "role",
3671
+ "status",
3672
+ "createdAt",
3673
+ "updatedAt"
3674
+ ]).default("createdAt");
3675
+
3676
+ // src/users/app-utils.ts
3677
+ function serializeUser(user) {
3678
+ const serialized = {
3679
+ ...user,
3680
+ legacyId: user.gateId
3681
+ };
3682
+ return zUserResponse.parse(serialized);
3683
+ }
3684
+
3685
+ // src/groups/app-types.ts
3686
+ var zGroupResponse = z14.object({
3687
+ id: z14.string().meta({ description: "Internal unique identifier" }),
3688
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
3689
+ name: z14.string().meta({ description: "Group name" }),
3690
+ description: z14.string().nullable().meta({ description: "Group description" }),
3691
+ status: z14.enum(ActivationStatus).meta({ description: "Group status" }),
3692
+ members: z14.array(zUserResponse).meta({ description: "Group members" }),
3693
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
3694
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" })
3695
+ });
3696
+ z14.enum(["name", "status", "createdAt", "updatedAt"]).default("createdAt");
3697
+
3698
+ // src/groups/app-utils.ts
3699
+ function serializeGroup(group) {
3700
+ const serialized = {
3701
+ ...group,
3702
+ legacyId: group.gateId,
3703
+ members: group.members.map(serializeUser)
3704
+ };
3705
+ return zGroupResponse.parse(serialized);
3706
+ }
2698
3707
 
2699
3708
  // src/compat/patch-request-expired-at.ts
2700
3709
  var patchRequestExpiredAt = (data) => ({
@@ -3062,6 +4071,31 @@ function serializeVaultRequest(request) {
3062
4071
  patched = patchTezosRequestData(patched);
3063
4072
  return patched;
3064
4073
  }
4074
+ var zWhitelistAddressResponse = z14.object({
4075
+ name: z14.string().min(1).max(50).meta({ description: "Address name" }),
4076
+ currency: zCurrencyString.meta({ description: "Address currency" }),
4077
+ address: z14.string().min(1).max(200).meta({ description: "Address value" }),
4078
+ destinationTags: z14.array(z14.string().min(1).regex(/^\w+$/)).optional().meta({ description: "List of destination tags (applicable for Ripple currency)" })
4079
+ });
4080
+ var zWhitelistResponse = z14.object({
4081
+ id: z14.string().meta({ description: "Internal unique identifier" }),
4082
+ legacyId: z14.number().meta({ description: "Legacy internal unique identifier (for retro-compatibility)" }),
4083
+ name: z14.string().meta({ description: "Whitelist name" }),
4084
+ status: z14.enum(ActivationStatus).meta({ description: "Whitelist status" }),
4085
+ addresses: z14.array(zWhitelistAddressResponse),
4086
+ createdAt: z14.coerce.date().meta({ description: "Creation timestamp" }),
4087
+ updatedAt: z14.coerce.date().meta({ description: "Last modification timestamp" }),
4088
+ description: z14.string().nullable().meta({ description: "Whitelist description" })
4089
+ }).meta({ description: "Whitelist", id: "WhitelistResponse" });
4090
+ z14.enum(["name", "status", "createdAt", "updatedAt"]).default("createdAt");
4091
+ var serializeWhitelist = (whitelist) => {
4092
+ const serialized = {
4093
+ ...whitelist,
4094
+ legacyId: whitelist.gateId,
4095
+ addresses: z.array(zWhitelistAddressResponse).parse(whitelist.addresses)
4096
+ };
4097
+ return zWhitelistResponse.parse(serialized);
4098
+ };
3065
4099
 
3066
4100
  // src/__fakes__/responses.ts
3067
4101
  function genVaultRequestResponse(opts, reviews = []) {
@@ -3074,8 +4108,23 @@ function genAccountResponse(overrides) {
3074
4108
  const account = serializeAccount(dbAccount);
3075
4109
  return zAccountResponse.parse(account);
3076
4110
  }
4111
+ function genUserResponse(overrides) {
4112
+ const dbUser = genUser(overrides);
4113
+ const user = serializeUser(dbUser);
4114
+ return zUserResponse.parse(user);
4115
+ }
4116
+ function genGroupResponse(overrides) {
4117
+ const dbGroup = genGroupWithMembers(overrides);
4118
+ const group = serializeGroup(dbGroup);
4119
+ return zGroupResponse.parse(group);
4120
+ }
4121
+ function genWhitelistResponse(overrides) {
4122
+ const dbWhitelist = genWhitelist(overrides);
4123
+ const whitelist = serializeWhitelist(dbWhitelist);
4124
+ return zWhitelistResponse.parse(whitelist);
4125
+ }
3077
4126
  /* v8 ignore next -- @preserve */
3078
4127
 
3079
- export { genAccountResponse, genVaultRequestResponse, genVaultRequestReview };
4128
+ export { genAccountResponse, genCreateTransactionData, genGroupResponse, genRequestData, genUserResponse, genVaultRequestResponse, genVaultRequestReview, genWhitelistResponse };
3080
4129
  //# sourceMappingURL=fakes.mjs.map
3081
4130
  //# sourceMappingURL=fakes.mjs.map