@ledgerhq/revault-api 1.43.1 → 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]+$/);
@@ -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,
@@ -485,7 +499,6 @@ var zHederaLikeTransactionResponse = z14.discriminatedUnion("type", [
485
499
 
486
500
  // src/networks/hedera/index.ts
487
501
  var HEDERA_SPEC = {
488
- family: NetworkFamily.HEDERA_LIKE,
489
502
  zAssetFields: zHederaLikeAssetFields,
490
503
  zLiveData: zHederaLikeLiveData,
491
504
  zTransactionType: zHederaLikeTransactionType,
@@ -681,7 +694,6 @@ var zPolkadotLikeTransactionResponse = z14.discriminatedUnion("type", [
681
694
 
682
695
  // src/networks/polkadot/index.ts
683
696
  var POLKADOT_SPEC = {
684
- family: NetworkFamily.POLKADOT_LIKE,
685
697
  zAssetFields: zPolkadotLikeAssetFields,
686
698
  zLiveData: zPolkadotLikeLiveData,
687
699
  zTransactionType: zPolkadotLikeTransactionType,
@@ -721,7 +733,6 @@ var zRippleLikeTransactionResponse = z14.discriminatedUnion("type", [
721
733
 
722
734
  // src/networks/ripple/index.ts
723
735
  var RIPPLE_SPEC = {
724
- family: NetworkFamily.RIPPLE_LIKE,
725
736
  zAssetFields: zRippleLikeAssetFields,
726
737
  zLiveData: zRippleLikeLiveData,
727
738
  zTransactionType: zRippleLikeTransactionType,
@@ -917,7 +928,6 @@ var zSolanaLikeTransactionResponse = z14.discriminatedUnion("type", [
917
928
 
918
929
  // src/networks/solana/index.ts
919
930
  var SOLANA_SPEC = {
920
- family: NetworkFamily.SOLANA_LIKE,
921
931
  zAssetFields: zSolanaLikeAssetFields,
922
932
  zLiveData: zSolanaLikeLiveData,
923
933
  zTransactionType: zSolanaLikeTransactionType,
@@ -967,7 +977,6 @@ var zStellarLikeTransactionResponse = z14.discriminatedUnion("type", [
967
977
 
968
978
  // src/networks/stellar/index.ts
969
979
  var STELLAR_SPEC = {
970
- family: NetworkFamily.STELLAR_LIKE,
971
980
  zAssetFields: zStellarLikeAssetFields,
972
981
  zLiveData: zStellarLikeLiveData,
973
982
  zTransactionType: zStellarLikeTransactionType,
@@ -1057,7 +1066,6 @@ var zSuiLikeTransactionResponse = z14.discriminatedUnion("type", [
1057
1066
 
1058
1067
  // src/networks/sui/index.ts
1059
1068
  var SUI_SPEC = {
1060
- family: NetworkFamily.SUI_LIKE,
1061
1069
  zAssetFields: zSuiLikeAssetFields,
1062
1070
  zLiveData: zSuiLikeLiveData,
1063
1071
  zTransactionType: zSuiLikeTransactionType,
@@ -1134,7 +1142,6 @@ var zTezosLikeTransactionResponse = z14.discriminatedUnion("type", [
1134
1142
 
1135
1143
  // src/networks/tezos/index.ts
1136
1144
  var TEZOS_SPEC = {
1137
- family: NetworkFamily.TEZOS_LIKE,
1138
1145
  zAssetFields: zTezosLikeAssetFields,
1139
1146
  zLiveData: zTezosLikeLiveData,
1140
1147
  zTransactionType: zTezosLikeTransactionType,
@@ -1182,7 +1189,6 @@ var zTronLikeTransactionResponse = z14.discriminatedUnion("type", [
1182
1189
 
1183
1190
  // src/networks/tron/index.ts
1184
1191
  var TRON_SPEC = {
1185
- family: NetworkFamily.TRON_LIKE,
1186
1192
  zAssetFields: zTronLikeAssetFields,
1187
1193
  zLiveData: zTronLikeLiveData,
1188
1194
  zTransactionType: zTronLikeTransactionType,
@@ -1232,6 +1238,7 @@ z14.discriminatedUnion("type", [
1232
1238
  TEZOS_SPEC.zStakingFields
1233
1239
  ]);
1234
1240
  z14.discriminatedUnion("type", [
1241
+ BITCOIN_SPEC.zEstimatedFees,
1235
1242
  ETHEREUM_SPEC.zEstimatedFees,
1236
1243
  HEDERA_SPEC.zEstimatedFees,
1237
1244
  RIPPLE_SPEC.zEstimatedFees,
@@ -1270,11 +1277,6 @@ z14.union([
1270
1277
  ...TEZOS_SPEC.zTransactionType.enum,
1271
1278
  ...TRON_SPEC.zTransactionType.enum
1272
1279
  });
1273
- ({
1274
- ...NetworkFamily,
1275
- // TODO: Sometimes `NetworkFamily` is not a `TransactionType` prefix - but why?
1276
- [NetworkFamily.GENERIC_LIKE]: "GENERIC"
1277
- });
1278
1280
  var zTransactionData = z14.discriminatedUnion("type", [
1279
1281
  ...BITCOIN_SPEC.zTransactionData.options,
1280
1282
  ...CANTON_SPEC.zTransactionData.options,
@@ -1334,6 +1336,14 @@ var buildGateSyncId = (workspaceName, gateType, gateId) => {
1334
1336
 
1335
1337
  // src/utils.ts
1336
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);
1337
1347
  var ensureNonEmptyArray = (values, message) => {
1338
1348
  invariant8(
1339
1349
  values.length > 0,
@@ -1348,7 +1358,8 @@ function unreachable(value) {
1348
1358
  // src/__fakes__/faker-utils.ts
1349
1359
  var fakeUniqueName = (length = 20) => faker.string.alphanumeric({ length, casing: "lower" });
1350
1360
  var fakeHexString = (length, casing = "upper") => faker.string.hexadecimal({ prefix: "", casing, length });
1351
- 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 });
1352
1363
  var fakeIntegerId = () => faker.number.int({ min: 1, max: 2e9 });
1353
1364
  var fakeGateId = fakeIntegerId;
1354
1365
  var fakeBase64String = (length) => btoa(faker.string.sample(length));
@@ -1373,6 +1384,8 @@ var fakeWorkspaceName = () => faker.string.alphanumeric({ length: 16, casing: "l
1373
1384
  // src/__fakes__/canton.ts
1374
1385
  var fakeCantonAddress = (role) => `${role}-${faker.lorem.word()}::${fakeHexString(68, "lower")}`;
1375
1386
  var fakeCantonPartyId = () => fakeCantonAddress("party");
1387
+ var fakeCantonContractId = () => fakeHexString(138, "lower");
1388
+ var fakeCantonInstrumentId = () => fakeHexString(10, "lower");
1376
1389
  var injectSyncId = (obj) => {
1377
1390
  let { syncId } = obj;
1378
1391
  if (syncId === void 0) {
@@ -1652,6 +1665,482 @@ var genAccount = (opts) => {
1652
1665
  ...rest
1653
1666
  });
1654
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
+ };
1655
2144
  var shouldHaveTargetHsmId = (request) => {
1656
2145
  switch (request.type) {
1657
2146
  case RequestType.CREATE_ENTITY:
@@ -1743,8 +2232,368 @@ var shouldHaveTargetId = (request) => {
1743
2232
  return true;
1744
2233
  }
1745
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
+ };
1746
2509
 
1747
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
+ };
1748
2597
  var genRequestReviewSteps = (numSteps) => times(1, () => ({ stageName: "default", quorum: 2 }));
1749
2598
  var genVaultRequest = (opts) => {
1750
2599
  const { type, state = RequestState.PENDING_APPROVAL, data, ...custom } = opts;
@@ -1813,6 +2662,98 @@ var genVaultRequestReview = (opts) => {
1813
2662
  ...opts
1814
2663
  };
1815
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
+ };
1816
2757
  var zPubKey = zHexString.meta({ description: "Public key" });
1817
2758
  var zHsmCertificate = z.object({
1818
2759
  codeHash: z.base64().meta({ description: "Hash of the executable that generated this certificate" }),
@@ -1939,7 +2880,7 @@ var zCreatePsdUserRequestData = z14.object({
1939
2880
  });
1940
2881
  var zCreateApiUserRequestData = z14.object({
1941
2882
  name: zUserName,
1942
- 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" }),
1943
2884
  role: z14.enum(["ADMIN", "OPERATOR"]).meta({ description: "User role" }),
1944
2885
  viewAll: z14.boolean().meta({ description: "View all data" }).optional()
1945
2886
  }).meta({ description: "Create API user request data" });
@@ -2695,6 +3636,63 @@ var serializeAccount = (account) => {
2695
3636
  };
2696
3637
  return zAccountResponse.parse(response);
2697
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
+ }
2698
3696
 
2699
3697
  // src/compat/patch-request-expired-at.ts
2700
3698
  var patchRequestExpiredAt = (data) => ({
@@ -3062,6 +4060,31 @@ function serializeVaultRequest(request) {
3062
4060
  patched = patchTezosRequestData(patched);
3063
4061
  return patched;
3064
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
+ };
3065
4088
 
3066
4089
  // src/__fakes__/responses.ts
3067
4090
  function genVaultRequestResponse(opts, reviews = []) {
@@ -3074,8 +4097,23 @@ function genAccountResponse(overrides) {
3074
4097
  const account = serializeAccount(dbAccount);
3075
4098
  return zAccountResponse.parse(account);
3076
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
+ }
3077
4115
  /* v8 ignore next -- @preserve */
3078
4116
 
3079
- export { genAccountResponse, genVaultRequestResponse, genVaultRequestReview };
4117
+ export { genAccountResponse, genCreateTransactionData, genGroupResponse, genRequestData, genUserResponse, genVaultRequestResponse, genVaultRequestReview, genWhitelistResponse };
3080
4118
  //# sourceMappingURL=fakes.mjs.map
3081
4119
  //# sourceMappingURL=fakes.mjs.map