@ledgerhq/revault-api 1.43.2 → 1.45.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/{app-types-TiTgl5lF.d.mts → app-types-DvxHpGGY.d.mts} +181 -183
- package/lib/fakes.d.mts +43 -25
- package/lib/fakes.mjs +63 -47
- package/lib/fakes.mjs.map +1 -1
- package/lib/index.d.mts +727 -374
- package/package.json +3 -3
package/lib/fakes.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/zod-utils.ts","../src/networks/common.ts","../src/networks/bitcoin/schemas.ts","../src/networks/bitcoin/index.ts","../src/networks/canton/schemas.ts","../src/networks/canton/index.ts","../src/networks/cardano/schemas.ts","../src/networks/cardano/index.ts","../src/networks/ethereum/schemas.ts","../src/networks/ethereum/index.ts","../src/networks/generic/schemas.ts","../src/networks/generic/index.ts","../src/networks/hedera/schema.ts","../src/networks/hedera/index.ts","../src/networks/polkadot/schemas.ts","../src/networks/polkadot/index.ts","../src/networks/ripple/schemas.ts","../src/networks/ripple/index.ts","../src/networks/solana/schemas.ts","../src/networks/solana/index.ts","../src/networks/stellar/schemas.ts","../src/networks/stellar/index.ts","../src/networks/sui/schemas.ts","../src/networks/sui/index.ts","../src/networks/tezos/schemas.ts","../src/networks/tezos/index.ts","../src/networks/tron/schemas.ts","../src/networks/tron/index.ts","../src/networks/index.ts","../src/errors.ts","../src/sync-utils.ts","../src/utils.ts","../src/__fakes__/faker-utils.ts","../src/__fakes__/canton.ts","../src/__fakes__/models/sync-id-utils.ts","../src/__fakes__/models/accounts.ts","../src/__fakes__/models/requests/request-for-message-signature.ts","../src/__fakes__/models/requests/request-for-transaction.ts","../src/requests/utils.ts","../src/__fakes__/models/requests/request-for-account.ts","../src/__fakes__/models/requests/request-for-api-key.ts","../src/__fakes__/models/requests/request-for-digests-signature.ts","../src/__fakes__/models/requests/request-for-entity.ts","../src/__fakes__/models/requests/request-for-group.ts","../src/__fakes__/models/requests/request-for-policy.ts","../src/__fakes__/models/requests/request-for-sciconfig.ts","../src/__fakes__/models/requests/request-for-tradelink.ts","../src/__fakes__/models/requests/request-for-user.ts","../src/__fakes__/models/requests/request-for-whitelist.ts","../src/__fakes__/models/requests/request-for-workspace-rule.ts","../src/__fakes__/models/requests/requests-and-reviews.ts","../src/__fakes__/models/workspaces-users-groups.ts","../src/__fakes__/models/whitelists-policies.ts","../src/hsm/types.ts","../src/workspaces/utils.ts","../src/users/types.ts","../src/users/request-data.ts","../src/governance/review-config.ts","../src/prisma-utils/policy.ts","../src/types/common.ts","../src/types/governable-intent.ts","../src/prisma-utils/review-config.ts","../src/governance/request-data.ts","../src/governance/workspace-rule-requests.ts","../src/accounts/clients/types.ts","../src/accounts/les-wallet/canton-extras.ts","../src/tradelink/types.ts","../src/tradelink/request-data.ts","../src/accounts/account-governance-fields.ts","../src/accounts/types.ts","../src/transactions/types.ts","../src/transactions/request-data.ts","../src/accounts/app-types.ts","../src/whitelists/db-types.ts","../src/whitelists/whitelist-requests.ts","../src/policies/db-utils.ts","../src/policies/request-data.ts","../src/accounts/request-data.ts","../src/accounts/app-utils.ts","../src/users/app-types.ts","../src/users/app-utils.ts","../src/groups/app-types.ts","../src/groups/app-utils.ts","../src/compat/patch-request-expired-at.ts","../src/compat/patch-tezos-request-data.ts","../src/accounts/sci/request-data.ts","../src/workflows/types.ts","../src/entities/request-data.ts","../src/groups/request-data.ts","../src/api-keys/api-key-requests.ts","../src/requests/request-data.ts","../src/requests/app-types.ts","../src/requests/app-utils/index.ts","../src/whitelists/app-types.ts","../src/whitelists/app-utils.ts","../src/__fakes__/responses.ts"],"names":["z","invariant","EC","times","faker","omit","match","P","RequestType","RequestState","ChallengeType","UserDeviceType","UserRole","ActivationStatus","WhitelistType","PsdModel","UserRegistrationState","AdminPermission","AccountGovernanceType","AccountType","zCurrency","RequestReviewStatus"],"mappings":"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","file":"fakes.mjs","sourcesContent":["import { z } from \"zod\";\n\nexport const zHexString = z.string().regex(/^[0-9a-fA-F]+$/);\n\nexport const zIntString = z\n .string()\n .nonempty()\n .regex(/^(-?[1-9]\\d*|0)$/);\n\nexport const zUnsignedIntString = z\n .string()\n .nonempty()\n .regex(/^([1-9]\\d*|0)$/);\n\nexport const zCurrencyString = z\n .string()\n .nonempty()\n .max(40)\n .regex(/^\\w+$/)\n .meta({ description: \"Will be deprecated soon, use network instead. Currency\" });\n\nexport const zNetwork = z\n .string()\n .nonempty()\n .max(40)\n .regex(/^\\w+$/)\n .meta({ description: \"Network (Same as currency for now)\" });\n\nexport const zCurrency = z.object({\n network: zNetwork,\n contractAddress: z.string().nonempty().nullable().meta({ description: \"Token issuer\" }),\n tokenIdentifier: z.string().nonempty().nullable().meta({ description: \"Token identifier\" }),\n});\n\nexport const zObjectId = z\n .string()\n .regex(/^[\\w-]+$/) // UUID, GUID, NanoID, CUID... or just a slug\n .nonempty();\n\nexport type ObjectId = z.infer<typeof zObjectId>;\n\nexport const zHsmObjectId = z\n .string()\n .regex(/^[\\w-]+$/) // TODO: what is the exact format of an HSM ID?\n .nonempty();\n\nexport type HsmObjectId = z.infer<typeof zHsmObjectId>;\n\n/* v8 ignore next -- @preserve */\nexport const zDateCodec = z.codec(z.iso.datetime(), z.date(), {\n decode: (isoString) => new Date(isoString), // ISO string → Date\n encode: (date) => date.toISOString(), // Date → ISO string\n});\n","import type { AccountType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- Utils -----------------------------------------------------------------------\n\nexport type NetworkFamily = Exclude<AccountType, \"RAW_SIGNING\">;\n\nexport const NetworkFamily = {\n BITCOIN_LIKE: \"BITCOIN_LIKE\",\n CANTON_LIKE: \"CANTON_LIKE\",\n CARDANO_LIKE: \"CARDANO_LIKE\",\n ETHEREUM_LIKE: \"ETHEREUM_LIKE\",\n GENERIC_LIKE: \"GENERIC_LIKE\",\n HEDERA_LIKE: \"HEDERA_LIKE\",\n POLKADOT_LIKE: \"POLKADOT_LIKE\",\n RIPPLE_LIKE: \"RIPPLE_LIKE\",\n SOLANA_LIKE: \"SOLANA_LIKE\",\n STELLAR_LIKE: \"STELLAR_LIKE\",\n SUI_LIKE: \"SUI_LIKE\",\n TEZOS_LIKE: \"TEZOS_LIKE\",\n TRON_LIKE: \"TRON_LIKE\",\n} satisfies Record<NetworkFamily, NetworkFamily>;\n\n/**\n * Ensure that this is a hex string and transform it to lowercase with 0x prefix.\n * Not to be used for EIP-55 addresses or other attributes where letter casing is important!\n */\n/* v8 ignore next -- @preserve */\nexport const zHexDataString = z.codec(z.string().regex(/^(?:0x|0X)?[a-fA-F0-9]+$/), z.string(), {\n decode: (hex) => `0x${hex.toLowerCase().replace(\"0x\", \"\")}`,\n encode: (hex) => hex,\n});\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zCommonLiveData = z.object({\n id: z.string().meta({ description: \"Account internal unique identifier\" }),\n balance: z\n .object({\n total: z.string().meta({ description: \"Total balance\" }),\n pending: z.string().meta({ description: \"Pending balance\" }),\n })\n .meta({ description: \"Balance fields\" }),\n});\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\n/**\n * Schema of `Request.data.transaction`\n */\nexport const zCommonTransactionData = z.object({\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }), // TODO: to remove, use account.network instead\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().meta({ description: \"Transaction recipient\" }),\n});\n\nexport const zFeeStrategyCustom = z.object({\n type: z.enum([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n});\n\nexport const zFeeStrategy = z.object({\n type: z.enum([\"SLOW\", \"NORMAL\", \"FAST\"]),\n});\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTransactionStatus = z.enum([\"SUCCESSFUL\", \"FAILED\"]);\n\nexport type TransactionStatus = z.infer<typeof zTransactionStatus>;\n\nexport const zCommonTransactionResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n hash: z.string().meta({ description: \"Transaction hash\" }),\n block: z.object({\n height: z.string().nullable().meta({ description: \"Transaction block height\" }),\n time: z.string().nullable().meta({ description: \"Transaction block time\" }),\n }),\n status: zTransactionStatus.meta({ description: \"Transaction status\" }),\n confirmations: z.string().meta({ description: \"Block confirmations\" }),\n amount: z.string().meta({ description: \"Transaction amount\" }),\n fee: z.string().meta({ description: \"Transaction fee\" }),\n senders: z\n .array(z.string())\n .meta({ description: \"Senders (can be multiple for UTXOs-based accounts)\" }),\n recipients: z\n .array(z.string())\n .meta({ description: \"Recipients (can be multiple for multi-output transactions)\" }),\n});\n\n// #endregion\n","import z from \"zod\";\n\nimport { zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zBitcoinLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.BITCOIN_LIKE).meta({ description: \"Account type\" }),\n xpub: z.string().meta({ description: \"xpub (extended public key)\" }),\n })\n .meta({ description: \"Bitcoin-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zBitcoinLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.BITCOIN_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Bitcoin-like\" });\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zBitcoinLikeTransactionType = z\n .enum([\"BITCOIN_LIKE_SEND\", \"BITCOIN_LIKE_RECEIVE\"])\n .meta({ description: \"Bitcoin-like transaction type\" });\n\nexport type BitcoinLikeTransactionType = z.infer<typeof zBitcoinLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zBitcoinLikeFeeStrategy = zFeeStrategyCustom\n .extend({\n // nullish is optional + nullable, it is easier to seed rather than just optional\n feePerByte: zUnsignedIntString.nullish().meta({ description: \"Fee per byte\" }),\n })\n .meta({ description: \"Bitcoin-like fee strategy\" });\n\nexport const zBitcoinLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zBitcoinLikeTransactionType.enum.BITCOIN_LIKE_SEND),\n feeStrategy: zBitcoinLikeFeeStrategy,\n })\n .meta({\n description: \"Bitcoin-like send data\",\n id: \"BitcoinLikeSendData\",\n });\n\nexport const zBitcoinLikeTransactionData = z.discriminatedUnion(\"type\", [zBitcoinLikeSendData]);\n\nexport type BitcoinLikeTransactionData = z.infer<typeof zBitcoinLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zBitcoinLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.BITCOIN_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Bitcoin-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zBitcoinLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zBitcoinLikeTransactionType })\n .meta({ description: \"Bitcoin-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { BitcoinLikeTransactionData, BitcoinLikeTransactionType } from \"./schemas\";\nimport {\n zBitcoinLikeAssetFields,\n zBitcoinLikeEstimatedFees,\n zBitcoinLikeLiveData,\n zBitcoinLikeSendData,\n zBitcoinLikeTransactionData,\n zBitcoinLikeTransactionResponse,\n zBitcoinLikeTransactionType,\n} from \"./schemas\";\n\nexport const BITCOIN_SPEC = {\n family: NetworkFamily.BITCOIN_LIKE,\n\n zAssetFields: zBitcoinLikeAssetFields,\n zLiveData: zBitcoinLikeLiveData,\n\n zTransactionType: zBitcoinLikeTransactionType,\n zTransactionData: zBitcoinLikeTransactionData,\n zSendTransactionData: zBitcoinLikeSendData,\n zEstimatedFees: zBitcoinLikeEstimatedFees,\n zTransactionResponse: zBitcoinLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"BITCOIN_LIKE\",\n BitcoinLikeTransactionType,\n BitcoinLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n} from \"../common\";\n\n// #region ---------- Canton specific -------------------------------------------------------------\n\nexport const zCantonTransferProposal = z\n .object({\n amount: zUnsignedIntString.meta({ description: \"Transfer amount\" }),\n contractId: z.string().meta({ description: \"ID of the transfer-proposal contract\" }),\n instrumentId: z.string().meta({ description: \"ID of the instrument being transferred\" }),\n expiresAtMicros: z.number().int().meta({ description: \"Expiration timestamp in microseconds\" }),\n memo: z.string().nullable().meta({ description: \"Optional note attached to the proposal\" }),\n sender: z.string().meta({ description: \"Party proposing to send the asset\" }),\n recipient: z.string().meta({ description: \"Intended recipient of the proposed transfer\" }),\n })\n .meta({\n description: \"A pending asset-transfer request\",\n id: \"CantonTransferProposal\",\n });\n\nexport type CantonTransferProposal = z.infer<typeof zCantonTransferProposal>;\n\n// #endregion\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zCantonLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.CANTON_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Canton-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zCantonLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.CANTON_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Canton-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zCantonLikeTransactionType = z\n .enum([\n \"CANTON_LIKE_SEND\",\n \"CANTON_LIKE_SEND_TOKEN\",\n \"CANTON_LIKE_WITHDRAW\",\n \"CANTON_LIKE_RECEIVE\",\n \"CANTON_LIKE_PRE_APPROVAL\",\n \"CANTON_LIKE_TAP\",\n ])\n .meta({ description: \"Canton-like transaction type\" });\n\nexport type CantonLikeTransactionType = z.infer<typeof zCantonLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zExecuteBeforeSeconds = z\n .number()\n .int()\n .positive()\n .optional()\n .meta({ description: \"Execute before seconds\" });\n\nexport const zCantonLikeSendData = zCommonTransactionData\n .omit({ maxFee: true })\n .extend({\n executeBeforeSeconds: zExecuteBeforeSeconds,\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND),\n })\n .meta({\n description: \"Canton-like send data\",\n id: \"CantonLikeSendData\",\n });\n\nconst zCantonLikeSendTokenData = zCommonTransactionData\n .omit({ maxFee: true })\n .extend({\n executeBeforeSeconds: zExecuteBeforeSeconds,\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND_TOKEN),\n })\n .meta({\n description: \"Canton-like send token data\",\n id: \"CantonLikeSendTokenData\",\n });\n\nconst zCantonLikeWithdrawData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transfer currency\",\n }), // TODO: to remove, use account.network instead\n transferProposal: zCantonTransferProposal,\n reason: z.string().nullable().meta({ description: \"Reason of the verdict\" }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_WITHDRAW),\n })\n .meta({\n description: \"Canton-like withdraw data\",\n id: \"CantonLikeWithdrawData\",\n });\n\nconst zCantonLikeReceiveData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transfer currency\",\n }), // TODO: to remove, use account.network instead\n transferProposal: zCantonTransferProposal,\n verdict: z.enum([\"ACCEPT\", \"REJECT\"]).meta({ description: \"Accept or reject the transfer\" }),\n reason: z.string().nullable().meta({ description: \"Reason of the verdict\" }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_RECEIVE),\n })\n .meta({\n description: \"Canton-like receive data\",\n id: \"CantonLikeReceiveData\",\n });\n\nconst zCantonLikePreApprovalData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }), // TODO: to remove, use account.network instead\n recipient: z.string().nonempty().meta({\n description: \"Recipient party on which to enable pre-approval\",\n }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_PRE_APPROVAL),\n })\n .meta({\n description: \"Canton-like pre-approval data\",\n id: \"CantonLikePreApprovalData\",\n });\n\nconst zCantonLikeTapData = zCommonTransactionData\n .extend({\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_TAP),\n })\n .meta({\n description: \"Canton-like tap data\",\n id: \"CantonLikeTapData\",\n });\n\nexport const zCantonLikeTransactionData = z.discriminatedUnion(\"type\", [\n zCantonLikeSendData,\n zCantonLikeSendTokenData,\n zCantonLikeWithdrawData,\n zCantonLikeReceiveData,\n zCantonLikePreApprovalData,\n zCantonLikeTapData,\n]);\n\nexport type CantonLikeTransactionData = z.infer<typeof zCantonLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zCantonLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zCantonLikeTransactionType })\n .meta({ description: \"Canton-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { CantonLikeTransactionData, CantonLikeTransactionType } from \"./schemas\";\nimport {\n zCantonLikeAssetFields,\n zCantonLikeLiveData,\n zCantonLikeSendData,\n zCantonLikeTransactionData,\n zCantonLikeTransactionResponse,\n zCantonLikeTransactionType,\n} from \"./schemas\";\n\nexport const CANTON_SPEC = {\n family: NetworkFamily.CANTON_LIKE,\n\n zAssetFields: zCantonLikeAssetFields,\n zLiveData: zCantonLikeLiveData,\n\n zTransactionType: zCantonLikeTransactionType,\n zTransactionData: zCantonLikeTransactionData,\n zSendTransactionData: zCantonLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zCantonLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"CANTON_LIKE\",\n CantonLikeTransactionType,\n CantonLikeTransactionData\n>;\n\n// Canton-specific...\n\nexport { type CantonTransferProposal, zCantonTransferProposal } from \"./schemas\";\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zCardanoLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.CARDANO_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Cardano-like\" });\n\n// #endregion\n\n// #region ---------- Live Data & Staking ---------------------------------------------------------\n\nconst zCardanoLikeStakingData = z\n .object({\n staked: z.string().meta({ description: \"Staked balance\" }),\n })\n .nullable()\n .meta({ description: \"Cardano-like staking data\" });\n\nexport const zCardanoLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.CARDANO_LIKE).meta({ description: \"Account type\" }),\n staking: zCardanoLikeStakingData.optional(),\n});\n\nexport const zCardanoLikeLiveData = zCommonLiveData\n .extend(zCardanoLikeStakingFields.shape)\n .meta({ description: \"Cardano-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zCardanoLikeTransactionType = z\n .enum([\n \"CARDANO_LIKE_SEND\",\n \"CARDANO_LIKE_RECEIVE\",\n \"CARDANO_LIKE_STAKING_REGISTER\",\n \"CARDANO_LIKE_STAKING_DEREGISTER\",\n \"CARDANO_LIKE_STAKING_DELEGATE\",\n \"CARDANO_LIKE_STAKING_WITHDRAW\",\n ])\n .meta({ description: \"Cardano-like transaction type\" });\n\nexport type CardanoLikeTransactionType = z.infer<typeof zCardanoLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zCardanoLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n })\n .meta({\n description: \"Cardano-like send data\",\n id: \"CardanoSendData\",\n });\n\nconst zCardanoStakingDelegateData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_DELEGATE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // DELEGATE doesn't have neither amount nor recipient\n stakePoolId: z.string().min(1).max(100).meta({ description: \"\" }),\n })\n .meta({\n description: \"Cardano-like staking delegate\",\n id: \"CardanoStakingDelegateData\",\n });\n\nconst zCardanoStakingDeregisterData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_DEREGISTER),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // DEREGISTER doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to deregister\" }),\n })\n .meta({\n description: \"Cardano-like staking deregister data\",\n id: \"CardanoStakingDeregisterData\",\n });\n\nconst zCardanoStakingRegisterData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_REGISTER),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // REGISTER doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to register\" }),\n })\n .meta({\n description: \"Cardano-like staking register data\",\n id: \"CardanoStakingRegisterData\",\n });\n\nconst zCardanoStakingWithdrawData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_WITHDRAW),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // WITHDRAW doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to withdraw\" }),\n })\n .meta({\n description: \"Cardano-like staking withdraw data\",\n id: \"CardanoStakingWithdrawData\",\n });\n\nexport const zCardanoLikeTransactionData = z.discriminatedUnion(\"type\", [\n zCardanoLikeSendData,\n zCardanoStakingDelegateData,\n zCardanoStakingDeregisterData,\n zCardanoStakingRegisterData,\n zCardanoStakingWithdrawData,\n]);\n\nexport type CardanoLikeTransactionData = z.infer<typeof zCardanoLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zCardanoLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zCardanoLikeTransactionType })\n .meta({ description: \"Cardano-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { CardanoLikeTransactionData, CardanoLikeTransactionType } from \"./schemas\";\nimport {\n zCardanoLikeAssetFields,\n zCardanoLikeLiveData,\n zCardanoLikeSendData,\n zCardanoLikeStakingFields,\n zCardanoLikeTransactionData,\n zCardanoLikeTransactionResponse,\n zCardanoLikeTransactionType,\n} from \"./schemas\";\n\nexport const CARDANO_SPEC = {\n family: NetworkFamily.CARDANO_LIKE,\n\n zAssetFields: zCardanoLikeAssetFields,\n zLiveData: zCardanoLikeLiveData,\n\n zTransactionType: zCardanoLikeTransactionType,\n zTransactionData: zCardanoLikeTransactionData,\n zSendTransactionData: zCardanoLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zCardanoLikeTransactionResponse,\n\n zStakingFields: zCardanoLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"CARDANO_LIKE\",\n CardanoLikeTransactionType,\n CardanoLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n zHexDataString,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zEthereumLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .nullable() // main account has null contract address\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .optional(),\n })\n .meta({ description: \"Ethereum-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zEthereumLikeStakingData = z\n .object({\n totalStaking: z.string().meta({ description: \"Total staked amount\" }),\n totalRewards: z.string().meta({ description: \"Total of rewards\" }),\n availableRewards: z.string().meta({ description: \"Available rewards\" }),\n networkApy: z.number().meta({ description: \"Network APY\" }),\n })\n .nullable()\n .meta({ description: \"Ethereum-like staking data\" });\n\nexport const zEthereumLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE).meta({ description: \"Account type\" }),\n staking: zEthereumLikeStakingData.optional(),\n});\n\nexport const zEthereumLikeLiveData = zCommonLiveData\n .extend(zEthereumLikeStakingFields.shape)\n .meta({ description: \"Ethereum-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zEthereumLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE),\n baseFees: zIntString,\n gasLimit: zIntString,\n nonce: z.string(),\n priorityFees: zIntString,\n })\n .meta({ description: \"Ethereum-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nconst zEthereumLikeTransferTransactionType = z\n .enum([\"ETHEREUM_LIKE_SEND\", \"ETHEREUM_LIKE_RECEIVE\"])\n .meta({ description: \"Ethereum-like transaction type\" });\n\nconst zEthereumLikeContractTransactionType = z\n .enum([\"ETHEREUM_LIKE_EXECUTE_CONTRACT\", \"ETHEREUM_LIKE_DEPLOY_CONTRACT\"])\n .meta({ description: \"Ethereum-like transaction type\" });\n\nexport const zEthereumLikeTransactionType = z\n .enum([\n ...zEthereumLikeTransferTransactionType.options,\n ...zEthereumLikeContractTransactionType.options,\n ])\n .meta({\n description: \"Ethereum-like transaction type\",\n });\n\nexport type EthereumLikeTransactionType = z.infer<typeof zEthereumLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zEthereumLikeLegacyFeeStrategy = zFeeStrategyCustom\n .extend({\n gasPrice: zUnsignedIntString.meta({ description: \"Gas price\" }),\n gasLimit: zUnsignedIntString.meta({ description: \"Gas limit\" }),\n })\n .meta({ description: \"Ethereum-like legacy fee strategy\" });\n\nconst zEthereumLikeEip1559FeeStrategy = zFeeStrategyCustom\n .extend({\n maxPriorityFeePerGas: zUnsignedIntString.meta({ description: \"Maximum priority fee per gas\" }),\n maxFeePerGas: zUnsignedIntString.meta({ description: \"Maximum fee per gas (base + priority)\" }),\n gasLimit: zUnsignedIntString.meta({ description: \"Gas limit\" }),\n })\n .meta({ description: \"Ethereum-like EIP-1559 fee strategy\" });\n\nconst zEthereumLikeFeeStrategy = z\n .union([zEthereumLikeLegacyFeeStrategy, zEthereumLikeEip1559FeeStrategy])\n .meta({\n description: \"Ethereum-like fee strategy\",\n id: \"EthereumLikeFeeStrategy\",\n });\n\nconst zEthereumLikeDeployContractData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeContractTransactionType.enum.ETHEREUM_LIKE_DEPLOY_CONTRACT),\n // force the recipient to be the zero address\n recipient: z.literal(\"0x0000000000000000000000000000000000000000\"),\n contractData: zHexDataString.meta({ description: \"Contract data in hexadecimal format\" }),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like deploy contract data\",\n id: \"EthereumLikeDeployContractData\",\n });\n\nconst zEthereumLikeExecuteContractData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeContractTransactionType.enum.ETHEREUM_LIKE_EXECUTE_CONTRACT),\n contractData: zHexDataString.meta({ description: \"Contract call data in hexadecimal format\" }),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like execute contract data\",\n id: \"EthereumLikeExecuteContractData\",\n });\n\nexport const zEthereumLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeTransferTransactionType.enum.ETHEREUM_LIKE_SEND),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like send data\",\n id: \"EthereumLikeSendData\",\n });\n\nexport const zEthereumLikeTransactionData = z.discriminatedUnion(\"type\", [\n zEthereumLikeDeployContractData,\n zEthereumLikeExecuteContractData,\n zEthereumLikeSendData,\n]);\n\nexport type EthereumLikeTransactionData = z.infer<typeof zEthereumLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nconst zEthereumLikeTransferCoinFields = z.object({\n type: zEthereumLikeTransferTransactionType,\n gasPrice: z.string(),\n gasLimit: z.string(),\n nonce: z.string(),\n});\n\nconst zEthereumLikeContractCoinFields = zEthereumLikeTransferCoinFields.extend({\n type: zEthereumLikeContractTransactionType,\n contractData: z.string().meta({ description: \"Contract deployment or contract execution data\" }),\n});\n\nexport const zEthereumLikeTransactionResponse = z\n .discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend(zEthereumLikeTransferCoinFields.shape)\n .meta({ description: \"Ethereum-like transfer transaction\" }),\n zCommonTransactionResponse\n .extend(zEthereumLikeContractCoinFields.shape)\n .meta({ description: \"Ethereum-like contract transaction\" }),\n ])\n .meta({ description: \"Ethereum-like contract transaction\" });\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { EthereumLikeTransactionData, EthereumLikeTransactionType } from \"./schemas\";\nimport {\n zEthereumLikeAssetFields,\n zEthereumLikeEstimatedFees,\n zEthereumLikeLiveData,\n zEthereumLikeSendData,\n zEthereumLikeStakingFields,\n zEthereumLikeTransactionData,\n zEthereumLikeTransactionResponse,\n zEthereumLikeTransactionType,\n} from \"./schemas\";\n\nexport const ETHEREUM_SPEC = {\n family: NetworkFamily.ETHEREUM_LIKE,\n\n zAssetFields: zEthereumLikeAssetFields,\n zLiveData: zEthereumLikeLiveData,\n\n zTransactionType: zEthereumLikeTransactionType,\n zTransactionData: zEthereumLikeTransactionData,\n zSendTransactionData: zEthereumLikeSendData,\n zEstimatedFees: zEthereumLikeEstimatedFees,\n zTransactionResponse: zEthereumLikeTransactionResponse,\n\n zStakingFields: zEthereumLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"ETHEREUM_LIKE\",\n EthereumLikeTransactionType,\n EthereumLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nimport { NetworkFamily, zCommonLiveData, zCommonTransactionResponse } from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zGenericAssetFields = z\n .object({ type: z.literal(NetworkFamily.GENERIC_LIKE).meta({ description: \"Account type\" }) })\n .meta({ description: \"Generic-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zGenericLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.GENERIC_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Generic-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zGenericTransactionType = z\n .enum([\"GENERIC_TRANSACTION\"])\n .meta({ description: \"Generic transaction type\" });\n\nexport type GenericTransactionType = z.infer<typeof zGenericTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zGenericTransactionData = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(zGenericTransactionType.enum.GENERIC_TRANSACTION),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n rawTx: z.string().meta({ description: \"Raw tx\" }),\n })\n .meta({\n description: \"Generic transaction data\",\n id: \"GenericTransactionData\",\n }),\n]);\n\nexport type GenericTransactionData = z.infer<typeof zGenericTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zGenericTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zGenericTransactionType })\n .meta({ description: \"Generic transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { GenericTransactionData, GenericTransactionType } from \"./schemas\";\nimport {\n zGenericAssetFields,\n zGenericLiveData,\n zGenericTransactionData,\n zGenericTransactionResponse,\n zGenericTransactionType,\n} from \"./schemas\";\n\nexport const GENERIC_SPEC = {\n family: NetworkFamily.GENERIC_LIKE,\n\n zAssetFields: zGenericAssetFields,\n zLiveData: zGenericLiveData,\n\n zTransactionType: zGenericTransactionType,\n zTransactionData: zGenericTransactionData,\n zSendTransactionData: z.never(),\n zEstimatedFees: z.never(),\n zTransactionResponse: zGenericTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"GENERIC_LIKE\", GenericTransactionType, GenericTransactionData>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zHederaLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.HEDERA_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Hedera-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zHederaLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.HEDERA_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Hedera-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zHederaLikeTransactionType = z\n .enum([\n \"HEDERA_LIKE_SEND\",\n \"HEDERA_LIKE_RECEIVE\",\n \"HEDERA_LIKE_SEND_TOKEN\",\n \"HEDERA_LIKE_RECEIVE_TOKEN\",\n ])\n .meta({ description: \"Hedera-like transaction type\" });\n\nexport type HederaLikeTransactionType = z.infer<typeof zHederaLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zHederaLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.HEDERA_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Hedera-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zHederaLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zHederaLikeTransactionType.enum.HEDERA_LIKE_SEND),\n feeStrategy: zFeeStrategy,\n })\n .meta({\n description: \"Hedera-like send data\",\n id: \"HederaLikeSendData\",\n });\n\nexport const zHederaLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zHederaLikeTransactionType.enum.HEDERA_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy,\n })\n .meta({\n description: \"Hedera-like send token data\",\n id: \"HederaLikeSendTokenData\",\n });\n\nexport const zHederaLikeTransactionData = z.discriminatedUnion(\"type\", [\n zHederaLikeSendData,\n zHederaLikeSendTokenData,\n]);\n\nexport type HederaLikeTransactionData = z.infer<typeof zHederaLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zHederaLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({\n type: zHederaLikeTransactionType,\n })\n .meta({ description: \"Hedera-like transaction\" }),\n]);\n\n// #endregion\n","import { z } from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport type { NetworkSpec } from \"../spec\";\nimport { makeTxHandler } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { HederaLikeTransactionData, HederaLikeTransactionType } from \"./schema\";\nimport {\n zHederaLikeAssetFields,\n zHederaLikeEstimatedFees,\n zHederaLikeLiveData,\n zHederaLikeSendData,\n zHederaLikeTransactionData,\n zHederaLikeTransactionResponse,\n zHederaLikeTransactionType,\n} from \"./schema\";\n\nexport const HEDERA_SPEC = {\n family: NetworkFamily.HEDERA_LIKE,\n\n zAssetFields: zHederaLikeAssetFields,\n zLiveData: zHederaLikeLiveData,\n\n zTransactionType: zHederaLikeTransactionType,\n zTransactionData: zHederaLikeTransactionData,\n zSendTransactionData: zHederaLikeSendData,\n zEstimatedFees: zHederaLikeEstimatedFees,\n zTransactionResponse: zHederaLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"HEDERA_LIKE\",\n HederaLikeTransactionType,\n HederaLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zPolkadotLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.POLKADOT_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Polkadot-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zPolkadotUnbondingAmount = z.object({\n amount: z.string().meta({ description: \"Amount\" }),\n waiting_time: z.string().meta({ description: \"Waiting time\" }),\n});\n\nconst zPolkadotLikeStakingData = z\n .object({\n info: z.object({\n controllerAddress: z.string().nullable().meta({ description: \"Controller address\" }),\n rewardsDestination: z.string().nullable().meta({ description: \"Rewards destination\" }),\n proxies: z.array(z.string()).meta({ description: \"Proxies\" }),\n legacyStaking: z.boolean().meta({ description: \"True if account uses legacy staking\" }),\n isNominator: z.boolean().meta({ description: \"True if is nominator\" }),\n }),\n balances: z.object({\n free: z.string().meta({ description: \"Free balance\" }),\n reserved: z.string().meta({ description: \"Reserved balance\" }),\n frozen: z.string().meta({ description: \"Frozen balance\" }),\n bonded: z.string().meta({ description: \"Bonded balance\" }),\n available: z.string().meta({ description: \"Available balance\" }),\n unbonding: z.array(zPolkadotUnbondingAmount).meta({ description: \"Unbonding balances\" }),\n unbonded: z.array(zPolkadotUnbondingAmount).meta({ description: \"Unbonded balances\" }),\n totalUnbonding: z.string().meta({ description: \"Total unbonding\" }),\n totalUnbonded: z.string().meta({ description: \"Total unbonded\" }),\n }),\n anonymousProxy: z\n .object({\n address: z.string().meta({ description: \"Address\" }),\n createdAt: z.string().meta({ description: \"Creation date\" }),\n isController: z.boolean().meta({ description: \"True if is controller\" }),\n isMain: z.boolean().meta({ description: \"True if is main\" }),\n balances: z\n .object({\n free: z.string().meta({ description: \"Anonymous proxy free balance\" }),\n reserved: z.string().meta({ description: \"Anonymous proxy reserved balance\" }),\n frozen: z.string().meta({ description: \"Anonymous proxy frozen balance\" }),\n bonded: z.string().meta({ description: \"Anonymous proxy bonded balance\" }),\n available: z.string().meta({ description: \"Anonymous proxy available balance\" }),\n total: z.string().meta({ description: \"Anonymous proxy total balance\" }),\n })\n .nullable(),\n blockHeight: z.string().meta({ description: \"Anonymous proxy block height\" }),\n extIndex: z.string().meta({ description: \"Ext index\" }),\n index: z.string().meta({ description: \"Index\" }),\n kind: z.string().meta({ description: \"Kind\" }),\n })\n .nullable()\n .meta({ description: \"Anonymous proxy\" }),\n })\n .nullable()\n .meta({ description: \"Polkadot-like staking data\" });\n\nexport const zPolkadotLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.POLKADOT_LIKE).meta({ description: \"Account type\" }),\n staking: zPolkadotLikeStakingData.optional(),\n});\n\nexport const zPolkadotLikeLiveData = zCommonLiveData\n .extend(zPolkadotLikeStakingFields.shape)\n .meta({ description: \"Polkadot-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zPolkadotLikeTransactionType = z\n .enum([\n \"POLKADOT_LIKE_SEND\",\n \"POLKADOT_LIKE_RECEIVE\",\n \"POLKADOT_LIKE_ADDPROXY\",\n \"POLKADOT_LIKE_REMOVEPROXY\",\n \"POLKADOT_LIKE_BOND\",\n \"POLKADOT_LIKE_REBOND\",\n \"POLKADOT_LIKE_BONDEXTRA\",\n \"POLKADOT_LIKE_UNBOND\",\n \"POLKADOT_LIKE_WITHDRAWUNBONDED\",\n \"POLKADOT_LIKE_SETCONTROLLER\",\n \"POLKADOT_LIKE_SETPAYEE\",\n \"POLKADOT_LIKE_PROXY\",\n \"POLKADOT_LIKE_ANONYMOUSPROXY\",\n \"POLKADOT_LIKE_KILLANONYMOUS\",\n \"POLKADOT_LIKE_PUREPROXY\",\n \"POLKADOT_LIKE_KILLPURE\",\n \"POLKADOT_LIKE_NOMINATE\",\n \"POLKADOT_LIKE_REWARD\",\n \"POLKADOT_LIKE_CHILL\",\n \"POLKADOT_LIKE_TRANSFERALL\",\n ])\n .meta({ description: \"Polkadot-like transaction type\" });\n\nexport type PolkadotLikeTransactionType = z.infer<typeof zPolkadotLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zPolkadotRewardDestination = z.enum([\"Staked\", \"Stash\"]);\n\nconst zPolkadotLikeAddProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_ADDPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n kind: z.literal(\"Staking\").meta({ description: \"Proxy kind\" }),\n proxy: z.string().meta({ description: \"Proxy address\" }),\n })\n .meta({\n description: \"Polkadot-like add proxy data\",\n id: \"PolkadotLikeAddProxyData\",\n });\n\nconst zPolkadotLikeAnonymousProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_ANONYMOUSPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like anonymous proxy data\",\n id: \"PolkadotLikeAnonymousProxyData\",\n });\n\nconst zPolkadotLikeBondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_BOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n payee: zPolkadotRewardDestination,\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like bond data\",\n id: \"PolkadotLikeBondData\",\n });\n\nconst zPolkadotLikeBondExtraData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_BONDEXTRA),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like bond extra data\",\n id: \"PolkadotLikeBondExtraData\",\n });\n\nconst zPolkadotLikeChillData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_CHILL),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like chill data\",\n id: \"PolkadotLikeChillData\",\n });\n\nconst zPolkadotLikeKillAnonymousData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_KILLANONYMOUS),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like kill anonymous data\",\n id: \"PolkadotLikeKillAnonymousData\",\n });\n\nconst zPolkadotLikeRebondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_REBOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like rebond data\",\n id: \"PolkadotLikeRebondData\",\n });\n\nconst zPolkadotLikeRemoveProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_REMOVEPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n kind: z.literal(\"Staking\"),\n proxy: z.string().meta({ description: \"Proxy address\" }),\n })\n .meta({\n description: \"Polkadot-like remove proxy data\",\n id: \"PolkadotLikeRemoveProxyData\",\n });\n\nexport const zPolkadotLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_SEND),\n })\n .meta({\n description: \"Polkadot-like send data\",\n id: \"PolkadotLikeSendData\",\n });\n\nconst zPolkadotLikeSetPayeeData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_SETPAYEE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n payee: zPolkadotRewardDestination,\n })\n .meta({\n description: \"Polkadot-like set payee data\",\n id: \"PolkadotLikeSetPayeeData\",\n });\n\nconst zPolkadotLikeUnbondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_UNBOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like unbond data\",\n id: \"PolkadotLikeUnbondData\",\n });\n\nconst zPolkadotLikeWithdrawUnbondedData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_WITHDRAWUNBONDED),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like withdraw unbonded data\",\n id: \"PolkadotLikeWithdrawUnbondedData\",\n });\n\nexport const zPolkadotLikeTransactionData = z.discriminatedUnion(\"type\", [\n zPolkadotLikeAddProxyData,\n zPolkadotLikeAnonymousProxyData,\n zPolkadotLikeBondData,\n zPolkadotLikeBondExtraData,\n zPolkadotLikeChillData,\n zPolkadotLikeKillAnonymousData,\n zPolkadotLikeRebondData,\n zPolkadotLikeRemoveProxyData,\n zPolkadotLikeSendData,\n zPolkadotLikeSetPayeeData,\n zPolkadotLikeUnbondData,\n zPolkadotLikeWithdrawUnbondedData,\n]);\n\nexport type PolkadotLikeTransactionData = z.infer<typeof zPolkadotLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zPolkadotLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zPolkadotLikeTransactionType })\n .meta({ description: \"Polkadot-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { PolkadotLikeTransactionData, PolkadotLikeTransactionType } from \"./schemas\";\nimport {\n zPolkadotLikeAssetFields,\n zPolkadotLikeLiveData,\n zPolkadotLikeSendData,\n zPolkadotLikeStakingFields,\n zPolkadotLikeTransactionData,\n zPolkadotLikeTransactionResponse,\n zPolkadotLikeTransactionType,\n} from \"./schemas\";\n\nexport const POLKADOT_SPEC = {\n family: NetworkFamily.POLKADOT_LIKE,\n\n zAssetFields: zPolkadotLikeAssetFields,\n zLiveData: zPolkadotLikeLiveData,\n\n zTransactionType: zPolkadotLikeTransactionType,\n zTransactionData: zPolkadotLikeTransactionData,\n zSendTransactionData: zPolkadotLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zPolkadotLikeTransactionResponse,\n\n zStakingFields: zPolkadotLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"POLKADOT_LIKE\",\n PolkadotLikeTransactionType,\n PolkadotLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zRippleLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.RIPPLE_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Ripple-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zRippleLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.RIPPLE_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Ripple-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zRippleLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.RIPPLE_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Ripple-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zRippleLikeTransactionType = z\n .enum([\"RIPPLE_LIKE_SEND\", \"RIPPLE_LIKE_RECEIVE\"])\n .meta({ description: \"Ripple-like transaction type\" });\n\nexport type RippleLikeTransactionType = z.infer<typeof zRippleLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zRippleLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zRippleLikeTransactionType.enum.RIPPLE_LIKE_SEND),\n destinationTag: zIntString.nullable().meta({ description: \"Destination tag\" }),\n feeStrategy: zFeeStrategyCustom.meta({ description: \"Ripple-like fee strategy\" }),\n })\n .meta({\n description: \"Ripple-like send data\",\n id: \"RippleLikeSendData\",\n });\n\nexport const zRippleLikeTransactionData = z.discriminatedUnion(\"type\", [zRippleLikeSendData]);\n\nexport type RippleLikeTransactionData = z.infer<typeof zRippleLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zRippleLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({\n type: zRippleLikeTransactionType,\n memos: z.array(z.string()),\n destinationTag: z.string(),\n })\n .meta({ description: \"Ripple-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { RippleLikeTransactionData, RippleLikeTransactionType } from \"./schemas\";\nimport {\n zRippleLikeAssetFields,\n zRippleLikeEstimatedFees,\n zRippleLikeLiveData,\n zRippleLikeSendData,\n zRippleLikeTransactionData,\n zRippleLikeTransactionResponse,\n zRippleLikeTransactionType,\n} from \"./schemas\";\n\nexport const RIPPLE_SPEC = {\n family: NetworkFamily.RIPPLE_LIKE,\n\n zAssetFields: zRippleLikeAssetFields,\n zLiveData: zRippleLikeLiveData,\n\n zTransactionType: zRippleLikeTransactionType,\n zTransactionData: zRippleLikeTransactionData,\n zSendTransactionData: zRippleLikeSendData,\n zEstimatedFees: zRippleLikeEstimatedFees,\n zTransactionResponse: zRippleLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"RIPPLE_LIKE\",\n RippleLikeTransactionType,\n RippleLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zSolanaLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.SOLANA_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .nullable()\n .optional(),\n })\n .meta({ description: \"Solana-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zSolanaStakingAccountStatus = z\n .enum([\"not_sync\", \"activating\", \"activated\", \"deactivating\", \"deactivated\", \"deleted\"])\n .meta({ description: \"Staking account status\" });\n\nconst zSolanaLikeStakingData = z\n .object({\n staked: z.string().meta({ description: \"Staked balance\" }),\n rewards: z.object({\n total: z.string().meta({ description: \"Total rewards\" }),\n last7: z.string().meta({ description: \"Rewards on last 7 days\" }),\n last30: z.string().meta({ description: \"Rewards on last 30 days\" }),\n }),\n stakes: z.array(\n z.object({\n uid: z.string(),\n baseAccountUid: z.string(),\n pubKey: z.string().meta({ description: \"Public key\" }),\n validatorPubKey: z.string().nullable().meta({ description: \"Validator public key\" }),\n initialAmount: z.string().meta({ description: \"Initial amount\" }),\n activeAmount: z.string().meta({ description: \"Active amount\" }),\n inactiveAmount: z.string().meta({ description: \"Inactive amount\" }),\n totalBalance: z.string().meta({ description: \"Total balance\" }),\n creationDate: z.string().meta({ description: \"Creation date\" }),\n activationEpoch: z.string().nullable().meta({ description: \"Activation epoch\" }),\n activationDate: z.string().nullable().meta({ description: \"Activation date\" }),\n deactivationEpoch: z.string().nullable().meta({ description: \"Deactivation epoch\" }),\n deactivationDate: z.string().nullable().meta({ description: \"Deactivation date\" }),\n status: zSolanaStakingAccountStatus,\n rentExemptReserve: z.string().meta({ description: \"Rent exempt reserve\" }),\n withdrawableAmount: z.string().meta({ description: \"Withdrawable amount\" }),\n totalRewards: z.string().meta({ description: \"Total rewards\" }),\n creationTxHash: z.string().nullable().meta({ description: \"Creation transaction hash\" }),\n actionsTxHashes: z.array(z.string()).meta({ description: \"Actions transactions hashes\" }),\n }),\n ),\n })\n .nullable()\n .meta({ description: \"Solana-like staking data\" });\n\nexport const zSolanaLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.SOLANA_LIKE).meta({ description: \"Account type\" }),\n staking: zSolanaLikeStakingData.optional(),\n});\n\nexport type SolanaLikeStakingFields = z.infer<typeof zSolanaLikeStakingFields>;\n\nexport const zSolanaLikeLiveData = zCommonLiveData\n .extend(zSolanaLikeStakingFields.shape)\n .meta({ description: \"Solana-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zSolanaLikeTransactionType = z\n .enum([\n \"SOLANA_LIKE_SEND\",\n \"SOLANA_LIKE_RECEIVE\",\n \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\",\n \"SOLANA_LIKE_DELEGATE_STAKE\",\n \"SOLANA_LIKE_WITHDRAW_STAKE\",\n \"SOLANA_LIKE_DEACTIVATE_STAKE\",\n \"SOLANA_LIKE_SPLIT_STAKE\",\n \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\",\n \"SOLANA_LIKE_MERGE_STAKE\",\n \"SOLANA_LIKE_SEND_TOKEN\",\n \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\",\n \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\",\n ])\n .meta({ description: \"Solana-like transaction type\" });\n\nexport type SolanaLikeTransactionType = z.infer<typeof zSolanaLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zSolanaLikeCreateDelegateStakeData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_CREATE_DELEGATE_STAKE),\n recipient: z.string().meta({ description: \"Delegated vote address\" }), // Re-described\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like create delegate stake data\",\n id: \"SolanaLikeCreateDelegateStakeData\",\n });\n\nconst zSolanaLikeDeactivateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_DEACTIVATE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient, no amount\n })\n .meta({\n description: \"Solana-like deactivate stake data\",\n id: \"SolanaLikeDeactivateStakeData\",\n });\n\nconst zSolanaLikeDelegateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_DELEGATE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().meta({ description: \"Delegated vote address\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No amount\n })\n .meta({\n description: \"Solana-like delegate stake data\",\n id: \"SolanaLikeDelegateStakeData\",\n });\n\nconst zSolanaLikeMergeStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_MERGE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n mergeSrcAccount: z.string().meta({ description: \"Source stake address\" }),\n mergeDstAccount: z.string().meta({ description: \"Destination stake address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient, no amount\n })\n .meta({\n description: \"Solana-like merge stake data\",\n id: \"SolanaLikeMergeStakeData\",\n });\n\nexport const zSolanaLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like send data\",\n id: \"SolanaLikeSendData\",\n });\n\nconst zSolanaLikeSplitDeactivateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like split deactivate stake data\",\n id: \"SolanaLikeSplitDeactivateStakeData\",\n });\n\nconst zSolanaLikeSplitStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SPLIT_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like split stake data\",\n id: \"SolanaLikeSplitStakeData\",\n });\n\nconst zSolanaLikeWithdrawStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_WITHDRAW_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like withdraw stake data\",\n id: \"SolanaLikeWithdrawStakeData\",\n });\n\nconst zSolanaLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like send token data\",\n id: \"SolanaLikeSendTokenData\",\n });\n\nconst zSolanaLikeFundAndSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_FUND_AND_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like fund token account and send token data\",\n id: \"SolanaLikeFundAndSendTokenData\",\n });\n\n/**\n * This type of transaction requires both the token account address and the\n * token (\"contract\") address. These addresses can be obtained from the\n * associated account using the `accountId` field in the request data.\n */\nconst zSolanaLikeCreateTokenAccountData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like create token account\",\n id: \"SolanaLikeCreateTokenAccountData\",\n });\n\nexport const zSolanaLikeTransactionData = z.discriminatedUnion(\"type\", [\n zSolanaLikeCreateDelegateStakeData,\n zSolanaLikeDeactivateStakeData,\n zSolanaLikeDelegateStakeData,\n zSolanaLikeMergeStakeData,\n zSolanaLikeSendData,\n zSolanaLikeSplitDeactivateStakeData,\n zSolanaLikeSplitStakeData,\n zSolanaLikeWithdrawStakeData,\n zSolanaLikeSendTokenData,\n zSolanaLikeFundAndSendTokenData,\n zSolanaLikeCreateTokenAccountData,\n]);\n\nexport type SolanaLikeTransactionData = z.infer<typeof zSolanaLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zSolanaLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zSolanaLikeTransactionType })\n .meta({ description: \"Solana-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { SolanaLikeTransactionData, SolanaLikeTransactionType } from \"./schemas\";\nimport {\n zSolanaLikeAssetFields,\n zSolanaLikeLiveData,\n zSolanaLikeSendData,\n zSolanaLikeStakingFields,\n zSolanaLikeTransactionData,\n zSolanaLikeTransactionResponse,\n zSolanaLikeTransactionType,\n} from \"./schemas\";\n\nexport const SOLANA_SPEC = {\n family: NetworkFamily.SOLANA_LIKE,\n\n zAssetFields: zSolanaLikeAssetFields,\n zLiveData: zSolanaLikeLiveData,\n\n zTransactionType: zSolanaLikeTransactionType,\n zTransactionData: zSolanaLikeTransactionData,\n zSendTransactionData: zSolanaLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zSolanaLikeTransactionResponse,\n\n zStakingFields: zSolanaLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"SOLANA_LIKE\",\n SolanaLikeTransactionType,\n SolanaLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zStellarLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.STELLAR_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Stellar-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zStellarLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.STELLAR_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Stellar-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zStellarLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.STELLAR_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Stellar-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zStellarLikeTransactionType = z\n .enum([\"STELLAR_LIKE_SEND\", \"STELLAR_LIKE_RECEIVE\"])\n .meta({ description: \"Stellar-like transaction type\" });\n\nexport type StellarLikeTransactionType = z.infer<typeof zStellarLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\n// https://developers.stellar.org/docs/learn/encyclopedia/memos\nconst zStellarMemo = z.union([\n z\n .object({\n MEMO_TEXT: z.string().max(28).meta({ description: \"Text memo (at most a 28 bytes string)\" }),\n })\n .meta({ description: \"Text memo\" }),\n z\n .object({ MEMO_ID: zIntString.meta({ description: \"Id memo (unsigned 64 bits integer)\" }) })\n .meta({ description: \"Id memo\" }),\n z\n .object({\n MEMO_HASH: z\n .string()\n .max(128)\n .regex(/^[a-fA-F0-9]+$/)\n .meta({ description: \"Transaction hash memo (64 bytes hexadecimal string)\" }),\n })\n .meta({ description: \"Hash memo\" }),\n z\n .object({\n MEMO_RETURN: z\n .string()\n .max(128)\n .regex(/^[a-fA-F0-9]+$/)\n .meta({\n description:\n \"A 64 bytes hexadecimal string intended to be interpreted as the hash of the transaction the sender is refunding.\",\n }),\n })\n .meta({ description: \"Return memo\" }),\n]);\n\nexport const zStellarLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zStellarLikeTransactionType.enum.STELLAR_LIKE_SEND),\n memo: zStellarMemo.nullable().meta({ description: \"Stellar memo\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Stellar-like fee strategy\" }),\n })\n .meta({\n description: \"Stellar-like send data\",\n id: \"StellarLikeSendData\",\n });\n\nexport const zStellarLikeTransactionData = z.discriminatedUnion(\"type\", [zStellarLikeSendData]);\n\nexport type StellarLikeTransactionData = z.infer<typeof zStellarLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zStellarLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zStellarLikeTransactionType })\n .meta({ description: \"Stellar-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { StellarLikeTransactionData, StellarLikeTransactionType } from \"./schemas\";\nimport {\n zStellarLikeAssetFields,\n zStellarLikeEstimatedFees,\n zStellarLikeLiveData,\n zStellarLikeSendData,\n zStellarLikeTransactionData,\n zStellarLikeTransactionResponse,\n zStellarLikeTransactionType,\n} from \"./schemas\";\n\nexport const STELLAR_SPEC = {\n family: NetworkFamily.STELLAR_LIKE,\n\n zAssetFields: zStellarLikeAssetFields,\n zLiveData: zStellarLikeLiveData,\n\n zTransactionType: zStellarLikeTransactionType,\n zTransactionData: zStellarLikeTransactionData,\n zSendTransactionData: zStellarLikeSendData,\n zEstimatedFees: zStellarLikeEstimatedFees,\n zTransactionResponse: zStellarLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"STELLAR_LIKE\",\n StellarLikeTransactionType,\n StellarLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zSuiLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.SUI_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Sui-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zSuiLikeStakingData = z\n .object({\n totalStaked: z.string().meta({ description: \"Total staked amount\" }),\n totalRewards: z.string().meta({ description: \"Total of rewards\" }),\n })\n .nullable()\n .meta({ description: \"Sui-like staking data\" });\n\nexport const zSuiLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.SUI_LIKE).meta({ description: \"Account type\" }),\n staking: zSuiLikeStakingData.optional(),\n});\n\nexport const zSuiLikeLiveData = zCommonLiveData\n .extend(zSuiLikeStakingFields.shape)\n .meta({ description: \"Sui-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zSuiLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.SUI_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Sui-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\nexport const zSuiLikeTransactionType = z\n .enum([\n \"SUI_LIKE_SEND\",\n \"SUI_LIKE_RECEIVE\",\n \"SUI_LIKE_SEND_TOKEN\",\n \"SUI_LIKE_RECEIVE_TOKEN\",\n \"SUI_LIKE_STAKE\",\n \"SUI_LIKE_UNSTAKE\",\n ])\n .meta({ description: \"Sui-like transaction type\" });\n\nexport type SuiLikeTransactionType = z.infer<typeof zSuiLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zSuiLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n })\n .meta({\n description: \"Sui-like send data\",\n id: \"SuiLikeSendData\",\n });\n\nconst zSuiLikeTransferTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n })\n .meta({\n description: \"Sui-like transfer token data\",\n id: \"SuiLikeTransferTokenData\",\n });\n\nconst zSuiLikeStakeData = z\n .object({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_STAKE),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n // DELEGATE does not have recipient, but has validator instead\n validator: z.string().nonempty().meta({ description: \"Validator address\" }),\n })\n .meta({\n description: \"Sui-like stake data\",\n id: \"SuiLikeStakeData\",\n });\n\nconst zSuiLikeUnstakeData = z\n .object({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_UNSTAKE),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakedSuiId: z\n .string()\n .nonempty()\n .meta({ description: \"Staked object to (partially?) unstake\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount to unstake from the position\" }),\n useAllAmount: z.boolean().meta({\n description:\n \"Whether to unstake the full amount (triggers different sets of transaction commands)\",\n }),\n })\n .meta({\n description: \"Sui-like unstake data\",\n id: \"SuiLikeUnstakeData\",\n });\n\nexport const zSuiLikeTransactionData = z.discriminatedUnion(\"type\", [\n zSuiLikeSendData,\n zSuiLikeTransferTokenData,\n zSuiLikeStakeData,\n zSuiLikeUnstakeData,\n]);\n\nexport type SuiLikeTransactionData = z.infer<typeof zSuiLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zSuiLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zSuiLikeTransactionType })\n .meta({ description: \"Sui-like transaction\" }),\n]);\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { SuiLikeTransactionData, SuiLikeTransactionType } from \"./schemas\";\nimport {\n zSuiLikeAssetFields,\n zSuiLikeEstimatedFees,\n zSuiLikeLiveData,\n zSuiLikeSendData,\n zSuiLikeStakingFields,\n zSuiLikeTransactionData,\n zSuiLikeTransactionResponse,\n zSuiLikeTransactionType,\n} from \"./schemas\";\n\nexport const SUI_SPEC = {\n family: NetworkFamily.SUI_LIKE,\n\n zAssetFields: zSuiLikeAssetFields,\n zLiveData: zSuiLikeLiveData,\n\n zTransactionType: zSuiLikeTransactionType,\n zTransactionData: zSuiLikeTransactionData,\n zSendTransactionData: zSuiLikeSendData,\n zEstimatedFees: zSuiLikeEstimatedFees,\n zTransactionResponse: zSuiLikeTransactionResponse,\n\n zStakingFields: zSuiLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"SUI_LIKE\", SuiLikeTransactionType, SuiLikeTransactionData>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zTezosLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.TEZOS_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Tezos-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zTezosLikeStakingData = z\n .object({\n delegations: z.array(\n z.object({\n address: z.string(),\n }),\n ),\n })\n .nullable()\n .meta({ description: \"Tezos-like staking data\" });\n\nexport const zTezosLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.TEZOS_LIKE).meta({ description: \"Account type\" }),\n staking: zTezosLikeStakingData.optional(),\n});\n\nexport const zTezosLikeLiveData = zCommonLiveData\n .extend(zTezosLikeStakingFields.shape)\n .meta({ description: \"Tezos-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zTezosLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.TEZOS_LIKE),\n fee: zIntString,\n })\n .describe(\"Tezos-like fees\");\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zTezosLikeTransactionType = z\n .enum([\n \"TEZOS_LIKE_SEND\",\n \"TEZOS_LIKE_RECEIVE\",\n \"TEZOS_LIKE_REVEAL\",\n \"TEZOS_LIKE_DELEGATE\",\n \"TEZOS_LIKE_UNDELEGATE\",\n ])\n .meta({ description: \"Tezos-like transaction type\" });\n\nexport type TezosLikeTransactionType = z.infer<typeof zTezosLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zTezosLikeFeeStrategy = zFeeStrategyCustom.meta({ description: \"Tezos-like fee strategy\" });\n\nexport const zTezosLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_SEND),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like send data\",\n id: \"TezosLikeSendData\",\n });\n\nconst zTezosLikeDelegateData = z\n .object({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_DELEGATE),\n amount: zUnsignedIntString.optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().meta({ description: \"Transaction recipient\" }),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like delegate data\",\n id: \"TezosLikeDelegateData\",\n });\n\nconst zTezosLikeUndelegateData = z\n .object({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_UNDELEGATE),\n amount: zUnsignedIntString.optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like undelegate data\",\n id: \"TezosLikeUndelegateData\",\n });\n\nexport const zTezosLikeTransactionData = z.discriminatedUnion(\"type\", [\n zTezosLikeSendData,\n zTezosLikeDelegateData,\n zTezosLikeUndelegateData,\n]);\n\nexport type TezosLikeTransactionData = z.infer<typeof zTezosLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTezosLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zTezosLikeTransactionType })\n .meta({ description: \"Tezos-like transaction\" }),\n]);\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { TezosLikeTransactionData, TezosLikeTransactionType } from \"./schemas\";\nimport {\n zTezosLikeAssetFields,\n zTezosLikeEstimatedFees,\n zTezosLikeLiveData,\n zTezosLikeSendData,\n zTezosLikeStakingFields,\n zTezosLikeTransactionData,\n zTezosLikeTransactionResponse,\n zTezosLikeTransactionType,\n} from \"./schemas\";\n\nexport const TEZOS_SPEC = {\n family: NetworkFamily.TEZOS_LIKE,\n\n zAssetFields: zTezosLikeAssetFields,\n zLiveData: zTezosLikeLiveData,\n\n zTransactionType: zTezosLikeTransactionType,\n zTransactionData: zTezosLikeTransactionData,\n zSendTransactionData: zTezosLikeSendData,\n zEstimatedFees: zTezosLikeEstimatedFees,\n zTransactionResponse: zTezosLikeTransactionResponse,\n\n zStakingFields: zTezosLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"TEZOS_LIKE\", TezosLikeTransactionType, TezosLikeTransactionData>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zTronLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.TRON_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .nullable() // main account has null contract address\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .optional(),\n })\n .meta({ description: \"Tron-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zTronLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.TRON_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Tron-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zTronLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.TRON_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Tron-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zTronLikeTransactionType = z\n .enum([\"TRON_LIKE_SEND\", \"TRON_LIKE_RECEIVE\", \"TRON_LIKE_SEND_TOKEN\", \"TRON_LIKE_RECEIVE_TOKEN\"])\n .meta({ description: \"Tron-like transaction type\" });\n\nexport type TronLikeTransactionType = z.infer<typeof zTronLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zTronLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zTronLikeTransactionType.enum.TRON_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Tron-like fee strategy\" }),\n })\n .meta({\n description: \"Tron-like send data\",\n id: \"TronLikeSendData\",\n });\n\nconst zTronLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zTronLikeTransactionType.enum.TRON_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Tron-like fee strategy\" }),\n })\n .meta({\n description: \"Tron-like send token data\",\n id: \"TronLikeSendTokenData\",\n });\n\nexport const zTronLikeTransactionData = z.discriminatedUnion(\"type\", [\n zTronLikeSendData,\n zTronLikeSendTokenData,\n]);\n\nexport type TronLikeTransactionData = z.infer<typeof zTronLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTronLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zTronLikeTransactionType })\n .meta({ description: \"Tron-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { TronLikeTransactionData, TronLikeTransactionType } from \"./schemas\";\nimport {\n zTronLikeAssetFields,\n zTronLikeEstimatedFees,\n zTronLikeLiveData,\n zTronLikeTransactionData,\n zTronLikeTransactionResponse,\n zTronLikeTransactionType,\n} from \"./schemas\";\n\nexport const TRON_SPEC = {\n family: NetworkFamily.TRON_LIKE,\n\n zAssetFields: zTronLikeAssetFields,\n zLiveData: zTronLikeLiveData,\n\n zTransactionType: zTronLikeTransactionType,\n zTransactionData: zTronLikeTransactionData,\n zSendTransactionData: z.never(),\n zEstimatedFees: zTronLikeEstimatedFees,\n zTransactionResponse: zTronLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"TRON_LIKE\", TronLikeTransactionType, TronLikeTransactionData>;\n","import type { Account } from \"@prisma/client\";\nimport { match, P } from \"ts-pattern\";\nimport z from \"zod\";\n\nimport type { TypeEquals } from \"@/type-utils\";\nimport type { GovernableIntent } from \"@/types\";\n\nimport { BITCOIN_SPEC } from \"./bitcoin\";\nimport { CANTON_SPEC } from \"./canton\";\nimport { CARDANO_SPEC } from \"./cardano\";\nimport { NetworkFamily, zCommonLiveData } from \"./common\";\nimport { ETHEREUM_SPEC } from \"./ethereum\";\nimport { GENERIC_SPEC } from \"./generic\";\nimport { HEDERA_SPEC } from \"./hedera\";\nimport { POLKADOT_SPEC } from \"./polkadot\";\nimport { RIPPLE_SPEC } from \"./ripple\";\nimport { SOLANA_SPEC } from \"./solana\";\nimport type { TxHandler, TxHsmProps } from \"./spec\";\nimport { STELLAR_SPEC } from \"./stellar\";\nimport { SUI_SPEC } from \"./sui\";\nimport { TEZOS_SPEC } from \"./tezos\";\nimport { TRON_SPEC } from \"./tron\";\n\nexport { NetworkFamily };\n\n// #region ---------- NetworkAssetFields ----------------------------------------------------------\n\nexport const zNetworkAssetFields = z\n .discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zAssetFields,\n CANTON_SPEC.zAssetFields,\n CARDANO_SPEC.zAssetFields,\n ETHEREUM_SPEC.zAssetFields,\n GENERIC_SPEC.zAssetFields,\n HEDERA_SPEC.zAssetFields,\n POLKADOT_SPEC.zAssetFields,\n RIPPLE_SPEC.zAssetFields,\n SOLANA_SPEC.zAssetFields,\n STELLAR_SPEC.zAssetFields,\n SUI_SPEC.zAssetFields,\n TEZOS_SPEC.zAssetFields,\n TRON_SPEC.zAssetFields,\n ])\n .meta({ description: \"Network asset fields\" });\n\n// #endregion\n\n// #region ---------- AccountLiveData -------------------------------------------------------------\n\nexport { zCommonLiveData };\n\nexport const zAccountLiveData = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zLiveData,\n CANTON_SPEC.zLiveData,\n CARDANO_SPEC.zLiveData,\n ETHEREUM_SPEC.zLiveData,\n GENERIC_SPEC.zLiveData,\n HEDERA_SPEC.zLiveData,\n POLKADOT_SPEC.zLiveData,\n RIPPLE_SPEC.zLiveData,\n SOLANA_SPEC.zLiveData,\n STELLAR_SPEC.zLiveData,\n SUI_SPEC.zLiveData,\n TEZOS_SPEC.zLiveData,\n TRON_SPEC.zLiveData,\n]);\n\nexport const zAccountStakingFields = z.discriminatedUnion(\"type\", [\n CARDANO_SPEC.zStakingFields,\n ETHEREUM_SPEC.zStakingFields,\n POLKADOT_SPEC.zStakingFields,\n SOLANA_SPEC.zStakingFields,\n SUI_SPEC.zStakingFields,\n TEZOS_SPEC.zStakingFields,\n]);\n\nexport type AccountStakingFields = z.infer<typeof zAccountStakingFields>;\n\nexport type StakingDataOf<T extends AccountStakingFields[\"type\"]> = NonNullable<\n Extract<AccountStakingFields, { type: T }>[\"staking\"]\n>;\n\n// #endregion\n\n// #region ---------- EstimatedFees -------------------------------------------------------------\n\nexport const zEstimatedFees = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zEstimatedFees,\n ETHEREUM_SPEC.zEstimatedFees,\n HEDERA_SPEC.zEstimatedFees,\n RIPPLE_SPEC.zEstimatedFees,\n STELLAR_SPEC.zEstimatedFees,\n SUI_SPEC.zEstimatedFees,\n TEZOS_SPEC.zEstimatedFees,\n TRON_SPEC.zEstimatedFees,\n]);\n\nexport type EstimatedFees = z.infer<typeof zEstimatedFees>;\n\n// #endregion\n\n// #region ---------- TransactionType -------------------------------------------------------------\n\nexport const zTransactionType = z.union([\n BITCOIN_SPEC.zTransactionType,\n CANTON_SPEC.zTransactionType,\n CARDANO_SPEC.zTransactionType,\n ETHEREUM_SPEC.zTransactionType,\n GENERIC_SPEC.zTransactionType,\n HEDERA_SPEC.zTransactionType,\n POLKADOT_SPEC.zTransactionType,\n RIPPLE_SPEC.zTransactionType,\n SOLANA_SPEC.zTransactionType,\n STELLAR_SPEC.zTransactionType,\n SUI_SPEC.zTransactionType,\n TEZOS_SPEC.zTransactionType,\n TRON_SPEC.zTransactionType,\n]);\n\n// Runtime counterpart of the `TransactionType` type, a type-safe enum-like\n// object providing constants like `TransactionType.BITCOIN_LIKE_SEND`.\nexport const TransactionType = {\n ...BITCOIN_SPEC.zTransactionType.enum,\n ...CANTON_SPEC.zTransactionType.enum,\n ...CARDANO_SPEC.zTransactionType.enum,\n ...ETHEREUM_SPEC.zTransactionType.enum,\n ...HEDERA_SPEC.zTransactionType.enum,\n ...GENERIC_SPEC.zTransactionType.enum,\n ...POLKADOT_SPEC.zTransactionType.enum,\n ...RIPPLE_SPEC.zTransactionType.enum,\n ...SOLANA_SPEC.zTransactionType.enum,\n ...STELLAR_SPEC.zTransactionType.enum,\n ...SUI_SPEC.zTransactionType.enum,\n ...TEZOS_SPEC.zTransactionType.enum,\n ...TRON_SPEC.zTransactionType.enum,\n} as const;\n\nexport type TransactionType = z.infer<typeof zTransactionType>;\n\n/* v8 ignore next -- @preserve */\nconst _ensureTransactionTypeEnum = (\n shouldBeTrue: TypeEquals<keyof typeof TransactionType, TransactionType>,\n): true => shouldBeTrue;\n\n// TODO: Rename `GENERIC_LIKE` to `GENERIC` (or something else)\nconst _TRANSACTION_TYPE_PREFIXES = {\n ...NetworkFamily,\n // TODO: Sometimes `NetworkFamily` is not a `TransactionType` prefix - but why?\n [NetworkFamily.GENERIC_LIKE]: \"GENERIC\",\n} as const satisfies Record<NetworkFamily, string>;\n\ntype TransactionTypePrefixOf<T extends NetworkFamily> = (typeof _TRANSACTION_TYPE_PREFIXES)[T];\n\nexport type TransactionTypeOf<T extends NetworkFamily> = TransactionType &\n `${TransactionTypePrefixOf<T>}_${string}`;\n\n// #endregion\n\n// #region ---------- TransactionData -------------------------------------------------------------\n\nexport const zTransactionData = z.discriminatedUnion(\"type\", [\n ...BITCOIN_SPEC.zTransactionData.options,\n ...CANTON_SPEC.zTransactionData.options,\n ...CARDANO_SPEC.zTransactionData.options,\n ...ETHEREUM_SPEC.zTransactionData.options,\n ...GENERIC_SPEC.zTransactionData.options,\n ...HEDERA_SPEC.zTransactionData.options,\n ...POLKADOT_SPEC.zTransactionData.options,\n ...RIPPLE_SPEC.zTransactionData.options,\n ...SOLANA_SPEC.zTransactionData.options,\n ...STELLAR_SPEC.zTransactionData.options,\n ...SUI_SPEC.zTransactionData.options,\n ...TEZOS_SPEC.zTransactionData.options,\n ...TRON_SPEC.zTransactionData.options,\n]);\n\nexport type TransactionData = z.infer<typeof zTransactionData>;\n\nexport type TransactionDataOf<T extends NetworkFamily | TransactionType> = T extends TransactionType\n ? Extract<TransactionData, { type: T }>\n : T extends NetworkFamily\n ? Extract<TransactionData, { type: TransactionTypeOf<T> }>\n : never;\n\nexport const zSendOnlyTransactionData = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zSendTransactionData,\n CANTON_SPEC.zSendTransactionData,\n CARDANO_SPEC.zSendTransactionData,\n ETHEREUM_SPEC.zSendTransactionData,\n HEDERA_SPEC.zSendTransactionData,\n POLKADOT_SPEC.zSendTransactionData,\n RIPPLE_SPEC.zSendTransactionData,\n SOLANA_SPEC.zSendTransactionData,\n STELLAR_SPEC.zSendTransactionData,\n SUI_SPEC.zSendTransactionData,\n TEZOS_SPEC.zSendTransactionData,\n]);\n\nexport type SendOnlyTransactionData = z.infer<typeof zSendOnlyTransactionData>;\n\n// #endregion\n\n// #region ---------- TransactionResponse ---------------------------------------------------------\n\nexport const zTransactionResponse = z.discriminatedUnion(\"type\", [\n ...BITCOIN_SPEC.zTransactionResponse.options,\n ...CANTON_SPEC.zTransactionResponse.options,\n ...CARDANO_SPEC.zTransactionResponse.options,\n ...ETHEREUM_SPEC.zTransactionResponse.options,\n ...GENERIC_SPEC.zTransactionResponse.options,\n ...HEDERA_SPEC.zTransactionResponse.options,\n ...POLKADOT_SPEC.zTransactionResponse.options,\n ...RIPPLE_SPEC.zTransactionResponse.options,\n ...SOLANA_SPEC.zTransactionResponse.options,\n ...STELLAR_SPEC.zTransactionResponse.options,\n ...SUI_SPEC.zTransactionResponse.options,\n ...TEZOS_SPEC.zTransactionResponse.options,\n ...TRON_SPEC.zTransactionResponse.options,\n]);\n\nexport type TransactionResponse = z.infer<typeof zTransactionResponse>;\n\n// #endregion\n\n// #region ---------- Functions -------------------------------------------------------------------\n\ntype TxCallback<T> = (txHandler: TxHandler) => T;\n\nconst dispatchTx = <T>(tx: TransactionData, callback: TxCallback<T>): T =>\n match(tx)\n .with({ type: P.string.startsWith(NetworkFamily.BITCOIN_LIKE) }, (matchedTx) =>\n callback(BITCOIN_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.CANTON_LIKE) }, (matchedTx) =>\n callback(CANTON_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.CARDANO_LIKE) }, (matchedTx) =>\n callback(CARDANO_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.ETHEREUM_LIKE) }, (matchedTx) =>\n callback(ETHEREUM_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.HEDERA_LIKE) }, (matchedTx) =>\n callback(HEDERA_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.POLKADOT_LIKE) }, (matchedTx) =>\n callback(POLKADOT_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.RIPPLE_LIKE) }, (matchedTx) =>\n callback(RIPPLE_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.SOLANA_LIKE) }, (matchedTx) =>\n callback(SOLANA_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.STELLAR_LIKE) }, (matchedTx) =>\n callback(STELLAR_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.SUI_LIKE) }, (matchedTx) =>\n callback(SUI_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.TEZOS_LIKE) }, (matchedTx) =>\n callback(TEZOS_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.TRON_LIKE) }, (matchedTx) =>\n callback(TRON_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(\"GENERIC\") }, (matchedTx) =>\n callback(GENERIC_SPEC.withTx(matchedTx)),\n )\n .exhaustive();\n\nexport const getTxHsmProps = (tx: TransactionData, account: Account): TxHsmProps =>\n dispatchTx(tx, (txHandler) => txHandler.getHsmProps(account));\n\nexport const convertTxToGovernableIntent = (tx: TransactionData): GovernableIntent =>\n dispatchTx(tx, (txHandler) => txHandler.convertToGovernableIntent());\n\n// #endregion\n\n// Export all network specs...\nexport { BITCOIN_SPEC, CANTON_SPEC, ETHEREUM_SPEC, GENERIC_SPEC, HEDERA_SPEC, SUI_SPEC };\n\n// Network specific...\n\nexport { type CantonTransferProposal, zCantonTransferProposal } from \"./canton\";\n","/** Error thrown when a model object does not pass the validation. */\nexport class ValidationError extends Error {}\n\n/** Error thrown when data is in an unexpected state - e.g. missing objects or duplicate entries */\nexport class DataInconsistencyError extends Error {}\n","import type {\n GateAccountType,\n GateEntityType,\n GateGroupType,\n GatePolicyType,\n GateRequestType,\n GateReviewConfigType,\n GateSciConfigType,\n GateUserType,\n GateWhitelistType,\n GateWorkspaceRuleType,\n} from \"@prisma/client\";\n\nimport { ValidationError } from \"./errors\";\n\nexport type GateType =\n | GateAccountType\n | GateEntityType\n | GateGroupType\n | GateReviewConfigType\n | GatePolicyType\n | GateRequestType\n | GateUserType\n | GateWhitelistType\n | GateWorkspaceRuleType\n | GateSciConfigType;\n\nconst GATE_SYNC_ID_PREFIX = \"gate://\";\n\n/** Build `syncId` for object synchronized from Gate. */\nexport const buildGateSyncId = (\n workspaceName: string,\n gateType: GateType,\n gateId: number,\n): string => {\n if (gateId <= 0) {\n throw new ValidationError(`Invalid gate ID: ${gateId}`);\n }\n return `${GATE_SYNC_ID_PREFIX}${workspaceName}/${gateType}/${gateId}`;\n};\n\n/**\n * Object that might have been synchronized from Gate.\n *\n * - To create a new object, `gateType` can be omitted (like `gateId` and `syncId`).\n * - For an object already saved in DB, `gateType` can be null.\n */\nexport type Syncable<T> = Omit<T, \"gateType\" | \"gateId\" | \"syncId\"> & {\n workspaceName: string;\n gateType?: GateType | null;\n gateId?: number;\n syncId?: string;\n};\n\n/**\n * Validate object sync fields.\n *\n * Following are some possible combinations:\n *\n * - All the fields are missing (`undefined`): This happens when we create a new object which\n * does not come from Gate. In such case, we will use default values defined in Prisma schema.\n * - All the fields are present:\n * - When `gateType` is not null: This happens for objects that come from Gate.\n * - When `gateType` is null: This happens for objects that do not come from Gate.\n *\n * All other combinations should be considered as invalid.\n */\nexport const validateSyncFields = <T>(syncable: Syncable<T>): void => {\n const { workspaceName, gateType, gateId, syncId } = syncable;\n\n // Case 1: All fields are missing.\n if (gateType === undefined && gateId === undefined && syncId === undefined) {\n return;\n }\n\n // Case 2: All fields are present...\n if (gateType !== undefined && gateId !== undefined && syncId !== undefined) {\n if (gateType !== null) {\n // Case 2.1: `gateType` is not null: Object is coming from Gate.\n if (gateId <= 0) {\n throw new ValidationError(`Invalid gateId for ${gateType}: ${gateId}`);\n }\n const expectedSyncId = buildGateSyncId(workspaceName, gateType, gateId);\n if (expectedSyncId !== syncId) {\n throw new ValidationError(`Invalid syncId: expected ${expectedSyncId} but got ${syncId}`);\n }\n } else {\n // Case 2.2: `gateType` is null: Object is not coming from Gate.\n if (gateId !== 0) {\n throw new ValidationError(`Expected gateId to be 0 but got: ${gateId}`);\n }\n if (syncId.startsWith(GATE_SYNC_ID_PREFIX)) {\n throw new ValidationError(\n `Invalid syncId: ${syncId} should not start with ${GATE_SYNC_ID_PREFIX}`,\n );\n }\n }\n return;\n }\n\n // All other cases are considered invalid.\n throw new ValidationError(`Inconsistent sync fields: ${gateType}, ${gateId}, ${syncId}`);\n};\n","import { Prisma } from \"@prisma/client\";\nimport { AxiosError } from \"axios\";\nimport invariant from \"invariant\";\nimport { isPlainObject, omit, times, uniq, uniqBy } from \"lodash-es\";\nimport z from \"zod\";\n\nimport { DataInconsistencyError } from \"./errors\";\nimport type { GateType } from \"./sync-utils\";\nimport { buildGateSyncId } from \"./sync-utils\";\n\nexport const formatError = (err: unknown): string => {\n if (err instanceof AxiosError) {\n // See: https://axios-http.com/docs/handling_errors\n return `AxiosError: ${err.message ?? \"no detail provided\"}`;\n }\n if (err instanceof z.ZodError) {\n return `ZodError: ${JSON.stringify(err.flatten())}`;\n }\n return err instanceof Error\n ? err.message\n : /* v8 ignore next -- @preserve */ `${err} (${typeof err})`;\n};\n\n/** A type guard to assert that a value is a record. */\nexport const isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\n/**\n * Convert an arbitrary value to a `Prisma.JsonValue` suitable to be assigned to a `Json` field.\n * @param value - the value to convert\n * @returns a `Prisma.JsonValue`\n */\nexport const toJsonValue = (value: unknown): Prisma.JsonValue => {\n const jsonPrimitives = [\"string\", \"number\", \"boolean\"];\n if (value === undefined) {\n throw new Error(\"Tried to convert undefined to JSON\");\n }\n if (value === null) {\n return null;\n }\n if (jsonPrimitives.includes(typeof value)) {\n return value;\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (value instanceof Date) {\n return `${value.toISOString().slice(0, -5)}Z`; // Strip off milliseconds.\n }\n if (Array.isArray(value)) {\n return toJsonArray(value);\n }\n if (isRecord(value)) {\n return toJsonObject(value);\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- intended\n return String(value); // We can't do any better...\n};\n\n/**\n * Convert an arbitrary object to a `Prisma.JsonObject` suitable to be assigned to a `Json` field.\n * @param value - the object to convert\n * @returns a `Prisma.JsonObject`\n */\nexport const toJsonObject = (obj: Record<string, unknown>): Prisma.JsonObject => {\n return Object.fromEntries(\n Object.entries(obj)\n // strip off `undefined` values\n .filter(([_k, v]) => v !== undefined)\n .map(([k, v]): [string, Prisma.JsonValue] => {\n return [k, toJsonValue(v)];\n }),\n );\n};\n\nexport const toJsonArray = (obj: unknown[]): Prisma.JsonArray => obj.map(toJsonValue);\n\nexport type InputJsonValueOrNull = Prisma.InputJsonValue | Prisma.NullTypes.JsonNull;\n\nexport const convertToInputJsonValueOrJsonNull = (value: Prisma.JsonValue): InputJsonValueOrNull =>\n /* v8 ignore next -- @preserve */\n value === null || value === undefined ? Prisma.JsonNull : (value as Prisma.InputJsonValue);\n\n/**\n * Transform the object by iterating through the specified Json fields and converting all `null`\n * values to `Prisma.JsonNull`.\n *\n * Prisma does not accept `null` when writing to a Json field. This is because of the ambiguity\n * that there exist two possible null values: `Prisma.DbNull` and `Prisma.JsonNull`. Given a list\n * of keys for the Json fields, this function converts all `null` values to `Prisma.JsonNull`.\n *\n * See: See: https://github.com/prisma/prisma/issues/13969\n */\nexport const convertNullToJsonNull = <\n K extends string,\n T extends Record<K, Prisma.JsonValue | null>,\n>(\n obj: T,\n jsonKeys: K[],\n): Omit<T, K> & Record<K, InputJsonValueOrNull> => {\n const inputJsonEntries = jsonKeys.map((k): [K, InputJsonValueOrNull] => {\n const value = obj[k];\n return [k, value ?? Prisma.JsonNull];\n });\n const inputJsonFields = Object.fromEntries(inputJsonEntries) as Record<K, InputJsonValueOrNull>;\n return { ...omit(obj, jsonKeys), ...inputJsonFields };\n};\n\nexport const validateJsonField = (fieldName: string, value: unknown, schema: z.ZodType): void => {\n try {\n schema.parse(value);\n } catch (err) {\n throw new Error(`Invalid ${fieldName} field: ${formatError(err)}`);\n }\n};\n\n/**\n * Sleep for given ms\n *\n * @param ms - number of milliseconds to sleep\n * @returns Promise<void>\n */\nexport async function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * Generate random hex string\n * @param length - length in bytes\n * @returns 'length' bytes long hex string (so the string has '2 * length' chars)\n */\nexport const randomHex = (length: number): string => {\n const hexBytes = times(length, () => {\n const randomByte = Math.floor(Math.random() * 256);\n return randomByte.toString(16).padStart(2, \"0\");\n });\n return hexBytes.join(\"\").toUpperCase();\n};\n\nexport const genAuthUserId = (): string => randomHex(20);\n\n/**\n * Return the unique item in an array, or null if the array is empty.\n * @throws an error if the array contains multiple items.\n */\nexport const getUniqueOrNull = <T>(items: T[], msg: () => string): T | null => {\n if (items.length > 1) {\n throw new DataInconsistencyError(`Expected 0 or 1 but got ${items.length}: ${msg()}`);\n }\n return items.length === 0 ? null : items[0]!;\n};\n\n/**\n * Return the unique item in an array.\n * @throws an error if the array is empty or contains multiple items.\n */\nexport const getUniqueOrThrow = <T>(items: T[], msg: () => string): T => {\n if (items.length !== 1) {\n throw new DataInconsistencyError(`Expected 1 but got ${items.length}: ${msg()}`);\n }\n return items[0]!;\n};\n\n/** Extract object ids and join them to string. */\nexport const joinObjectIds = <T extends { id: string }>(objects: T[]): string =>\n objects.map((_) => _.id).join(\", \");\n\nexport const uniqById = <T extends { id: string }>(objects: T[]): T[] =>\n uniqBy(objects, (_) => _.id);\n\n/**\n * Given an array of string ids, return an array of objects containing only the `id` field.\n * The result is suitable for connecting or setting model foreign keys.\n */\nexport const wrapToObjectsWithId = (ids: string[]): { id: string }[] =>\n uniq(ids).map((id) => ({ id }));\n\n/**\n * Used in tRPC procedures to give ability to bypass automatic inference of query & mutations input/output\n * Handy when some performance problems starts to occur (e.g: request data inference).\n *\n * At static or build time, the given parametric type is used, removing tRPC need to compute the return\n * type.\n */\nexport const skipStaticInference = <T>(validator: z.ZodType): z.ZodType<T> =>\n validator as z.ZodType<T>;\n\n/**\n * Return a `where` object for `findUnique` function for a given\n * ID, where it could be either revault uuid or gate ID (integer).\n */\nexport const compatWhereById = (\n workspaceName: string,\n type: GateType,\n id: string,\n): { workspaceName: string; id: string } | { workspaceName: string; syncId: string } => {\n // If `id` looks like an integer, assume it is the Gate ID.\n if (/^\\d+$/.test(id)) {\n const syncId = buildGateSyncId(workspaceName, type, parseInt(id, 10));\n return { workspaceName, syncId };\n }\n // Otherwise - it must be UUID\n return { workspaceName, id };\n};\n\n/**\n * Capitalize first letter of given string.\n */\nexport const capitalize = (text: string): string => text && text[0]!.toUpperCase() + text.slice(1);\n\n// #region ---------- Base64 ----------------------------------------------------------------------\n\nexport const base64urlEncode = (payload: Record<string, unknown>): string => {\n const jsonString = JSON.stringify(payload);\n return Buffer.from(jsonString, \"utf-8\").toString(\"base64url\").replace(/=+$/, \"\");\n};\n\nexport const base64urlDecode = (encodedPayload: string): Record<string, unknown> => {\n // Add missing padding chars to payload if necessary.\n const paddedBase64 = encodedPayload.padEnd(\n encodedPayload.length + ((4 - (encodedPayload.length % 4)) % 4),\n \"=\",\n );\n const decoded = JSON.parse(Buffer.from(paddedBase64, \"base64url\").toString(\"utf-8\"));\n invariant(isRecord(decoded), \"Decoded payload should be a JSON object\");\n return decoded;\n};\n\n// #endregion\n\n// #region ---------- Assertions ------------------------------------------------------------------\n\nexport const ensureNotNil = <T>(value: T | null | undefined, message?: string): T => {\n invariant(\n value !== null && value !== undefined,\n message ?? `Expected non-nil value but got ${value}`,\n );\n return value;\n};\n\n/**\n * Check the string is not nil and not empty, then return the trimmed string.\n */\nexport const ensureNonEmptyString = (\n value: string | null | undefined,\n message?: string,\n): string => {\n const trimmed = (value ?? \"\").trim();\n invariant(trimmed.length > 0, message ?? `Expected non-empty string but got: ${value}`);\n return trimmed;\n};\n\n/**\n * Ensure an array to be non-empty, and return the same array with a conforming type.\n * This is useful when used in combination of zod's `union` or `discriminatedUnion`.\n */\nexport const ensureNonEmptyArray = <T>(values: T[], message?: string): [T, ...T[]] => {\n invariant(\n values.length > 0,\n message ?? `Expected non-empty array but got one with length ${values.length}`,\n );\n return values as [T, ...T[]];\n};\n\n/**\n * Utility to enforce all branches are covered at compile time\n */\nexport function unreachable(value: never): never {\n throw new Error(`Un-covered: ${value}`);\n}\n\n// #endregion\n","import { faker } from \"@faker-js/faker\";\nimport type { User } from \"@prisma/client\";\nimport { ChallengeType, UserDeviceType } from \"@prisma/client\";\nimport { ec as EC } from \"elliptic\";\nimport { times } from \"lodash-es\";\n\nimport type {\n ApiChallenge,\n HsmCertificate,\n HsmChallenge,\n HsmChallengeSteps,\n HsmSignature,\n PsdChallenge,\n} from \"@/hsm\";\nimport { base64urlEncode } from \"@/utils\";\nimport type { Proof, SoftChallenge } from \"@/workflows\";\n\nexport const fakeUniqueName = (length = 20): string =>\n faker.string.alphanumeric({ length, casing: \"lower\" });\n\nexport const fakeHexString = (length: number, casing: \"lower\" | \"upper\" = \"upper\"): string =>\n faker.string.hexadecimal({ prefix: \"\", casing, length });\n\nexport const fakePubKey = (): string => new EC(\"p256\").genKeyPair().getPublic(false, \"hex\");\n\nexport const fakeBlob = (length?: number): string => fakeHexString(length ?? 100);\n\nexport const fakeDeviceUserId = (): string =>\n faker.string.hexadecimal({ prefix: \"\", casing: \"upper\", length: 16 });\n\n/**\n * Generate a fake integer ID for postgres. For postgres, max value of an integer is 2147483647.\n * See: https://www.postgresql.org/docs/current/datatype-numeric.html\n */\nexport const fakeIntegerId = (): number => faker.number.int({ min: 1, max: 2000000000 });\n\n/** Generate a fake Gate ID, which is an integer primary key in postgres. */\nexport const fakeGateId = fakeIntegerId;\n\nexport const fakeBase64String = (length?: number): string => btoa(faker.string.sample(length));\n\nexport const fakePsdSignature = (): string => fakeBase64String(100);\n\nexport const fakeJws = (): string =>\n times(3, () => faker.string.hexadecimal({ prefix: \"\", length: 100 })).join(\".\");\n\nexport const fakeHsmObjectId = (): string => faker.string.uuid();\n\nexport const fakeHsmCertificate = (): HsmCertificate => ({\n codeHash: fakeBase64String(10),\n attestationPub: fakeBase64String(20),\n certificate: fakeBase64String(20),\n signature: fakeBase64String(20),\n});\n\nexport const fakePsdChallenge = (): PsdChallenge => ({\n challengeType: \"PSD\",\n wActions: [fakeBase64String(50), fakeBase64String(50), fakeBase64String(50)],\n handshake: fakeBase64String(100),\n handshakeAttestation: fakeHsmCertificate(),\n partitionId: fakeBase64String(20),\n});\n\nexport const fakeApiChallenge = (): ApiChallenge => ({\n challengeType: \"API\",\n payload: {\n approve: base64urlEncode({ randomHex: fakeHexString(20), action: \"approve\" }),\n reject: base64urlEncode({ randomHex: fakeHexString(20), action: \"reject\" }),\n },\n});\n\nexport const fakeSoftChallenge = (): SoftChallenge => ({\n challengeType: ChallengeType.SOFT,\n});\n\nexport const fakeChallenge = (type: ChallengeType) => {\n switch (type) {\n case ChallengeType.PSD:\n return fakePsdChallenge();\n case ChallengeType.API:\n return fakeApiChallenge();\n case ChallengeType.SOFT:\n return fakeSoftChallenge();\n }\n};\n\nexport const fakePsdProof = (): Proof => ({\n signature: fakeBase64String(100),\n challengeType: ChallengeType.PSD,\n});\n\nexport const fakeApiProof = (): Proof => ({\n signature: fakeJws(),\n challengeType: ChallengeType.API,\n});\n\nexport const fakeSoftProof = (): Proof => ({\n signature: \"\",\n challengeType: ChallengeType.SOFT,\n});\n\nexport const fakeUserProof = (user: User): Proof => {\n switch (user.deviceType) {\n case UserDeviceType.PSD:\n case UserDeviceType.SOFT_PSD:\n return fakePsdProof();\n case UserDeviceType.API:\n return fakeApiProof();\n }\n};\n\n/**\n * HSM challenges are an array of record indexed by user's public key\n */\nexport const fakeHsmChallenges = (\n type: HsmChallenge[\"challengeType\"],\n pubKeys?: string[],\n): HsmChallengeSteps => {\n const challengeKeys = pubKeys ?? times(3, () => fakePubKey());\n const fakeChallengeFunctions = {\n [ChallengeType.PSD]: fakePsdChallenge,\n [ChallengeType.API]: fakeApiChallenge,\n } as const;\n const fakeChallenge = fakeChallengeFunctions[type];\n return [Object.fromEntries(challengeKeys.map((pubKey) => [pubKey, fakeChallenge()]))];\n};\n\nexport const fakeHsmSignature = (): HsmSignature => ({\n digest: fakeHexString(32),\n derivationPath: \"m/44'/60'/0'\",\n r: fakeBase64String(32),\n s: fakeBase64String(32),\n v: 1,\n der: fakeHexString(16, \"upper\"),\n pubkey: fakePubKey(),\n});\n\nexport const fakeWorkspaceName = (): string =>\n faker.string.alphanumeric({ length: 16, casing: \"lower\" });\n\n// Compartment id is stored as a integer in the prisma schema, which are signed 32bits on postgres\n// Hence, pick a number between 0 and 2^31 - 1 (0x7fffffff)\nexport const fakeCompartmentId = (): number => faker.number.int({ max: 0x7fffffff });\n\nexport const fakeRootCaHex = (): string => fakeHexString(260);\nexport const fakeRootCaBase64 = (): string =>\n Buffer.from(fakeRootCaHex(), \"hex\").toString(\"base64\");\n","import { faker } from \"@faker-js/faker\";\n\nimport { fakeHexString } from \"./faker-utils\";\n\nconst fakeCantonAddress = (role: \"party\" | \"validator\"): string =>\n `${role}-${faker.lorem.word()}::${fakeHexString(68, \"lower\")}`;\n\nexport const fakeCantonPartyId = (): string => fakeCantonAddress(\"party\");\n\nexport const fakeCantonValidatorId = (): string => fakeCantonAddress(\"validator\");\n\nexport const fakeCantonContractId = (): string => fakeHexString(138, \"lower\");\n\n// TODO: I don't know what it looks like... Update it to a more realistic format later.\nexport const fakeCantonInstrumentId = (): string => fakeHexString(10, \"lower\");\n","import { faker } from \"@faker-js/faker\";\n\nimport type { GateType } from \"@/sync-utils\";\nimport { buildGateSyncId } from \"@/sync-utils\";\n\nexport type MaybeFromGate = {\n workspaceName: string;\n gateType: GateType | null;\n gateId: number;\n syncId?: string; // If provided, do not overwrite.\n};\n\nexport const injectSyncId = <T extends MaybeFromGate>(obj: T): T & { syncId: string } => {\n let { syncId } = obj;\n if (syncId === undefined) {\n if (obj.gateType !== null && obj.gateId !== 0) {\n syncId = buildGateSyncId(obj.workspaceName, obj.gateType, obj.gateId);\n } else if (obj.gateType === null && obj.gateId === 0) {\n syncId = faker.string.uuid();\n } else {\n throw new Error(`Invalid gateType and gateId: ${obj.gateType}, ${obj.gateId}`);\n }\n }\n return { ...obj, syncId };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Account, ClassicGovernanceMixin, TradelinkGovernanceMixin } from \"@prisma/client\";\nimport {\n AccountGovernanceType,\n AccountType,\n ActivationStatus,\n GateAccountType,\n} from \"@prisma/client\";\n\nimport type { AccountWithGovernanceMixins } from \"@/accounts\";\nimport { NetworkFamily } from \"@/networks\";\n\nimport { fakeCantonPartyId } from \"../canton\";\nimport {\n fakeGateId,\n fakeHexString,\n fakeHsmObjectId,\n fakeUniqueName,\n fakeWorkspaceName,\n} from \"../faker-utils\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nconst WELL_KNOWN_NETWORKS_BY_FAMILY: Record<NetworkFamily, [string, ...string[]]> = {\n [NetworkFamily.BITCOIN_LIKE]: [\"bitcoin\", \"bitcoin_testnet\"],\n [NetworkFamily.CANTON_LIKE]: [\"canton_network\"],\n [NetworkFamily.CARDANO_LIKE]: [\"cardano\"],\n [NetworkFamily.ETHEREUM_LIKE]: [\"ethereum\", \"ethereum_goerli\"],\n [NetworkFamily.HEDERA_LIKE]: [\"hedera\"],\n [NetworkFamily.POLKADOT_LIKE]: [\"polkadot\"],\n [NetworkFamily.RIPPLE_LIKE]: [\"ripple\"],\n [NetworkFamily.SOLANA_LIKE]: [\"solana\"],\n [NetworkFamily.STELLAR_LIKE]: [\"stellar\"],\n [NetworkFamily.SUI_LIKE]: [\"sui\"],\n [NetworkFamily.TEZOS_LIKE]: [\"tezos\"],\n [NetworkFamily.TRON_LIKE]: [\"tron\"],\n [NetworkFamily.GENERIC_LIKE]: [\"cosmos\"],\n};\n\nconst genConsistentAccountType = (opts?: Partial<Account>): AccountType => {\n // If type is explicitly provided, use it.\n if (opts?.type !== undefined) {\n return opts.type;\n }\n // If currency is provided, find matching account type.\n if (opts?.currency !== undefined) {\n for (const [family, currencies] of Object.entries(WELL_KNOWN_NETWORKS_BY_FAMILY)) {\n if (currencies.includes(opts.currency)) {\n return family as AccountType;\n }\n }\n }\n // Default: pick a random account type.\n return faker.helpers.arrayElement(Object.values(AccountType));\n};\n\nconst genAssetFieldsForType = (\n type: AccountType,\n): Pick<\n Account,\n | \"type\"\n | \"currency\"\n | \"derivationPath\"\n | \"address\"\n | \"contractAddress\"\n | \"tokenIdentifier\"\n | \"xpub\"\n | \"hsmXpub\"\n | \"hsmChainCode\"\n> => {\n const currency = faker.helpers.arrayElement(\n type === \"RAW_SIGNING\" ? [\"ethereum\", \"bitcoin\"] : WELL_KNOWN_NETWORKS_BY_FAMILY[type],\n );\n const hsmXpub = fakeHexString(66, \"upper\");\n const hsmChainCode = fakeHexString(64, \"upper\");\n switch (type) {\n case \"BITCOIN_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"84'/0'/0'\",\n address: null,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: fakeHexString(120),\n hsmXpub,\n hsmChainCode,\n };\n case \"ETHEREUM_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/60'/0'\",\n address: faker.finance.ethereumAddress(),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"CANTON_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/6767'/0'/0'/0'\",\n address: fakeCantonPartyId(),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"CARDANO_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"1852'/1815'/0'\",\n address: `addr${faker.string.alphanumeric({ length: 100, casing: \"lower\" })}`,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"SOLANA_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/501'/0'\",\n address: faker.string.alphanumeric({ length: 44, casing: \"lower\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"TEZOS_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/1729'/0'\",\n address: `tz${faker.string.alphanumeric({ length: 34, casing: \"mixed\" })}`,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"STELLAR_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/148'/0'\",\n address: faker.string.alphanumeric({ length: 56, casing: \"upper\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"RIPPLE_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/144'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: `xpub${faker.string.alphanumeric({ length: 107, casing: \"mixed\" })}`,\n hsmXpub,\n hsmChainCode,\n };\n case \"POLKADOT_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/354'/0'\",\n address: faker.string.alphanumeric({ length: 48, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"TRON_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/195'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"SUI_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/784'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"HEDERA_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/3030'/0'\",\n address: faker.string.hexadecimal({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"GENERIC_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/118'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"RAW_SIGNING\":\n return {\n type,\n currency,\n derivationPath: \"44'/118'/0'\",\n address: null,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n }\n};\n\nexport const genGovernanceFieldsForType = (\n governanceType: AccountGovernanceType,\n {\n accountId,\n policyId,\n assetManagerId,\n }: { accountId: string; policyId?: string; assetManagerId?: string },\n):\n | {\n governanceType: typeof AccountGovernanceType.CLASSIC;\n classicGovernanceMixin: ClassicGovernanceMixin;\n tradelinkGovernanceMixin: null;\n }\n | {\n governanceType: typeof AccountGovernanceType.TRADELINK;\n classicGovernanceMixin: null;\n tradelinkGovernanceMixin: TradelinkGovernanceMixin;\n }\n | {\n governanceType: typeof AccountGovernanceType.RAW_SIGNING;\n classicGovernanceMixin: ClassicGovernanceMixin;\n tradelinkGovernanceMixin: null;\n } => {\n switch (governanceType) {\n case AccountGovernanceType.CLASSIC:\n case AccountGovernanceType.RAW_SIGNING:\n return {\n governanceType,\n classicGovernanceMixin: {\n id: faker.number.int(),\n policyId: policyId ?? faker.string.uuid(),\n accountId: accountId,\n },\n tradelinkGovernanceMixin: null,\n };\n case AccountGovernanceType.TRADELINK:\n return {\n governanceType,\n classicGovernanceMixin: null,\n tradelinkGovernanceMixin: {\n id: faker.number.int(),\n assetManagerId: assetManagerId ?? faker.string.uuid(),\n accountId: accountId,\n exchangeConfigs: [],\n status: ActivationStatus.ACTIVE,\n },\n };\n }\n};\n\nexport const genAccount = (\n opts?: Partial<Account> & { policyId?: string; assetManagerId?: string } & {\n withLesWalletId?: boolean;\n },\n): AccountWithGovernanceMixins => {\n const { policyId, assetManagerId, withLesWalletId, ...rest } = opts ?? {};\n\n const commonFields = {\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: fakeUniqueName(),\n hsmId: fakeHsmObjectId(),\n status: ActivationStatus.ACTIVE,\n index: faker.number.int({ min: 0, max: 10 }),\n gateId: fakeGateId(),\n gateType: GateAccountType.Account,\n lesWalletId: (withLesWalletId ?? true) ? faker.string.uuid() : null,\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n };\n const type = genConsistentAccountType(rest);\n const assetFields = genAssetFieldsForType(type);\n const governanceFields = genGovernanceFieldsForType(\n opts?.governanceType ?? faker.helpers.arrayElement(Object.values(AccountGovernanceType)),\n { accountId: commonFields.id, policyId, assetManagerId },\n );\n return injectSyncId({\n ...commonFields,\n ...governanceFields,\n ...assetFields,\n ...rest,\n });\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { SignMessageRequestData, SignMessageUserInputData } from \"@/transactions\";\n\nimport { fakeHexString } from \"../../faker-utils\";\n\nexport const genSignMessageData = (\n opts?: Partial<SignMessageRequestData>,\n): SignMessageRequestData => ({\n message: {\n type: \"EIP191\",\n data: fakeHexString(10, \"upper\"),\n },\n accountId: faker.string.uuid(),\n address: faker.finance.ethereumAddress(),\n derivationPath: \"44'/60'/0'/0/0\",\n ...opts,\n});\n\nexport const genSignMessageUserInputData = (\n opts?: Partial<SignMessageUserInputData>,\n): SignMessageUserInputData => ({\n message: {\n type: \"EIP191\",\n data: fakeHexString(10, \"upper\"),\n },\n accountId: faker.string.uuid(),\n ...opts,\n});\n","import { faker } from \"@faker-js/faker\";\nimport { omit } from \"lodash-es\";\nimport { match, P } from \"ts-pattern\";\n\nimport type { CantonTransferProposal, TransactionData, TransactionDataOf } from \"@/networks\";\nimport { zTransactionData } from \"@/networks\";\n\nimport { fakeCantonContractId, fakeCantonInstrumentId, fakeCantonPartyId } from \"../../canton\";\n\n// #region ---------- Transaction data ------------------------------------------------------------\n\ntype BitcoinLikeSendData = TransactionDataOf<\"BITCOIN_LIKE\">;\n\nconst genBitcoinLikeSendData = (opts?: Partial<BitcoinLikeSendData>): BitcoinLikeSendData => {\n return {\n type: \"BITCOIN_LIKE_SEND\",\n currency: \"bitcoin\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n feePerByte: faker.number.bigInt({ min: 1 }).toString(),\n },\n ...opts,\n };\n};\n\ntype CardanoLikeTxData = TransactionDataOf<\"CARDANO_LIKE\">;\n\nconst genCardanoLikeTxData = (\n txType: Exclude<CardanoLikeTxData[\"type\"], \"CARDANO_LIKE_RECEIVE\">,\n): CardanoLikeTxData => {\n switch (txType) {\n case \"CARDANO_LIKE_SEND\":\n return {\n type: txType,\n currency: \"cardano\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"CARDANO_LIKE_STAKING_DELEGATE\":\n return {\n type: txType,\n currency: \"cardano\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakePoolId: `pool${faker.string.alphanumeric({ length: 52 })}`,\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"CARDANO_LIKE_STAKING_REGISTER\":\n case \"CARDANO_LIKE_STAKING_DEREGISTER\":\n case \"CARDANO_LIKE_STAKING_WITHDRAW\":\n return {\n type: txType,\n currency: \"cardano\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n amount: faker.number.bigInt({ min: 0 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n }\n};\n\ntype EthereumLikeSendData = TransactionDataOf<\"ETHEREUM_LIKE_SEND\">;\n\nconst genEthereumLikeSendData = (opts?: Partial<EthereumLikeSendData>): EthereumLikeSendData => {\n const gasLimit = faker.number.bigInt({ min: 1 });\n const gasPrice = faker.number.bigInt({ min: 1 });\n const maxFee = gasLimit * gasPrice;\n return {\n type: \"ETHEREUM_LIKE_SEND\",\n currency: \"ethereum\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: maxFee.toString(),\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n gasLimit: gasLimit.toString(),\n gasPrice: gasPrice.toString(),\n },\n ...opts,\n };\n};\n\ntype EthereumLikeExecuteContractData = TransactionDataOf<\"ETHEREUM_LIKE_EXECUTE_CONTRACT\">;\n\nconst genEthereumLikeExecuteContractData = (\n opts?: Partial<EthereumLikeExecuteContractData>,\n): EthereumLikeExecuteContractData => {\n const sendData = genEthereumLikeSendData();\n return {\n ...omit(sendData, [\"type\"]),\n type: \"ETHEREUM_LIKE_EXECUTE_CONTRACT\",\n contractData: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 128 }),\n ...opts,\n };\n};\n\ntype EthereumLikeDeployContractData = TransactionDataOf<\"ETHEREUM_LIKE_DEPLOY_CONTRACT\">;\n\nconst genEthereumLikeDeployContractData = (\n opts?: Partial<EthereumLikeDeployContractData>,\n): EthereumLikeDeployContractData => {\n const sendData = genEthereumLikeSendData();\n return {\n ...omit(sendData, [\"type\"]),\n type: \"ETHEREUM_LIKE_DEPLOY_CONTRACT\",\n recipient: \"0x0000000000000000000000000000000000000000\",\n contractData: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 128 }),\n ...opts,\n };\n};\n\nconst genGenericTransactionData = (): TransactionDataOf<\"GENERIC_LIKE\"> => {\n return {\n type: \"GENERIC_TRANSACTION\",\n currency: \"tron\",\n rawTx: faker.string.alphanumeric({ length: 100 }),\n };\n};\n\ntype HederaLikeTxData = TransactionDataOf<\"HEDERA_LIKE\">;\n\nconst genHederaLikeSendData = (\n txType: Exclude<HederaLikeTxData[\"type\"], \"HEDERA_LIKE_RECEIVE\" | \"HEDERA_LIKE_RECEIVE_TOKEN\">,\n): HederaLikeTxData => {\n return {\n type: txType,\n currency: \"hedera\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: `0.0.${faker.number.int({ min: 10000000, max: 99999999 }).toString()}`,\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype PolkadotLikeTxData = TransactionDataOf<\"POLKADOT_LIKE\">;\n\nconst genPolkadotLikeTxData = (\n txType: Exclude<\n PolkadotLikeTxData[\"type\"],\n | \"POLKADOT_LIKE_RECEIVE\"\n | \"POLKADOT_LIKE_SETCONTROLLER\"\n | \"POLKADOT_LIKE_PROXY\"\n | \"POLKADOT_LIKE_PUREPROXY\"\n | \"POLKADOT_LIKE_KILLPURE\"\n | \"POLKADOT_LIKE_NOMINATE\"\n | \"POLKADOT_LIKE_REWARD\"\n | \"POLKADOT_LIKE_TRANSFERALL\"\n >,\n): PolkadotLikeTxData => {\n switch (txType) {\n case \"POLKADOT_LIKE_SEND\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n };\n case \"POLKADOT_LIKE_ADDPROXY\":\n case \"POLKADOT_LIKE_REMOVEPROXY\":\n return {\n type: txType,\n currency: \"polkadot\",\n kind: \"Staking\",\n proxy: faker.string.alphanumeric({ length: 30 }),\n };\n case \"POLKADOT_LIKE_BOND\":\n return {\n type: txType,\n currency: \"polkadot\",\n payee: faker.helpers.arrayElement([\"Staked\", \"Stash\"]),\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_REBOND\":\n case \"POLKADOT_LIKE_UNBOND\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_BONDEXTRA\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_WITHDRAWUNBONDED\":\n case \"POLKADOT_LIKE_CHILL\":\n return {\n type: txType,\n currency: \"polkadot\",\n };\n case \"POLKADOT_LIKE_SETPAYEE\":\n return {\n type: txType,\n currency: \"polkadot\",\n payee: faker.helpers.arrayElement([\"Staked\", \"Stash\"]),\n };\n case \"POLKADOT_LIKE_ANONYMOUSPROXY\":\n case \"POLKADOT_LIKE_KILLANONYMOUS\":\n return {\n type: txType,\n currency: \"polkadot\",\n };\n }\n};\n\ntype RippleLikeTxData = TransactionDataOf<\"RIPPLE_LIKE\">;\n\nconst genRippleLikeSendData = (\n txType: Exclude<RippleLikeTxData[\"type\"], \"RIPPLE_LIKE_RECEIVE\">,\n): RippleLikeTxData => {\n return {\n type: txType,\n currency: \"ripple\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n destinationTag: faker.helpers.arrayElement([faker.number.int().toString(), null]),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype SolanaLikeTxData = TransactionDataOf<\"SOLANA_LIKE\">;\n\nconst genSolanaLikeTxData = (\n txType: Exclude<SolanaLikeTxData[\"type\"], \"SOLANA_LIKE_RECEIVE\">,\n): SolanaLikeTxData => {\n switch (txType) {\n case \"SOLANA_LIKE_SEND\":\n case \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_SEND_TOKEN\":\n case \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\":\n return {\n type: txType,\n currency: \"solana\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_DELEGATE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_DEACTIVATE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_SPLIT_STAKE\":\n case \"SOLANA_LIKE_WITHDRAW_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_MERGE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n mergeSrcAccount: faker.string.alphanumeric({ length: 30 }),\n mergeDstAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n }\n};\n\ntype StellarLikeTxData = TransactionDataOf<\"STELLAR_LIKE\">;\n\nconst genStellarLikeSendData = (\n txType: Exclude<StellarLikeTxData[\"type\"], \"STELLAR_LIKE_RECEIVE\">,\n): StellarLikeTxData => {\n return {\n type: txType,\n currency: \"stellar\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n memo: faker.helpers.arrayElement([\n { MEMO_ID: faker.number.bigInt({ min: 0 }).toString() },\n { MEMO_TEXT: faker.word.conjunction(28) },\n { MEMO_HASH: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 64 }) },\n { MEMO_RETURN: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 64 }) },\n null,\n ]),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype SuiLikeTxData = TransactionDataOf<\"SUI_LIKE\">;\n\nconst genSuiLikeTxData = (\n txType: Exclude<SuiLikeTxData[\"type\"], \"SUI_LIKE_RECEIVE\" | \"SUI_LIKE_RECEIVE_TOKEN\">,\n): SuiLikeTxData => {\n return {\n currency: \"sui\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n ...match(txType)\n .with(\"SUI_LIKE_STAKE\", (type) => ({\n type,\n validator: faker.string.alphanumeric({ length: 30 }),\n }))\n .with(\"SUI_LIKE_UNSTAKE\", (type) => ({\n type,\n stakedSuiId: faker.string.alphanumeric({ length: 30 }),\n useAllAmount: faker.datatype.boolean(),\n }))\n .with(P.union(\"SUI_LIKE_SEND\", \"SUI_LIKE_SEND_TOKEN\"), (type) => ({\n type,\n recipient: faker.string.alphanumeric({ length: 30 }),\n }))\n .exhaustive(),\n };\n};\n\ntype TezosLikeTxData = TransactionDataOf<\"TEZOS_LIKE\">;\n\nconst genTezosLikeTxData = (\n txType: Exclude<TezosLikeTxData[\"type\"], \"TEZOS_LIKE_RECEIVE\" | \"TEZOS_LIKE_REVEAL\">,\n): TezosLikeTxData => {\n return {\n type: txType,\n currency: \"tezos\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n },\n };\n};\n\ntype TronLikeTxData = TransactionDataOf<\"TRON_LIKE\">;\n\nconst genTronLikeTxData = (\n txType: Exclude<TronLikeTxData[\"type\"], \"TRON_LIKE_RECEIVE\" | \"TRON_LIKE_RECEIVE_TOKEN\">,\n): TronLikeTxData => {\n return {\n type: txType,\n currency: \"tron\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype CantonLikeTxData = TransactionDataOf<\"CANTON_LIKE\">;\n\nconst genCantonTransferProposal = (): CantonTransferProposal => ({\n amount: faker.number.bigInt({ min: 0 }).toString(),\n contractId: fakeCantonContractId(),\n instrumentId: fakeCantonInstrumentId(),\n expiresAtMicros: faker.date.future().getTime() * 1000,\n memo: faker.lorem.sentence(),\n sender: fakeCantonPartyId(),\n recipient: fakeCantonPartyId(),\n});\n\nconst genCantonLikeTxData = (txType: CantonLikeTxData[\"type\"]): CantonLikeTxData => {\n switch (txType) {\n case \"CANTON_LIKE_SEND\":\n case \"CANTON_LIKE_SEND_TOKEN\":\n return {\n type: txType,\n currency: \"canton_network\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n recipient: fakeCantonPartyId(),\n };\n case \"CANTON_LIKE_WITHDRAW\":\n return {\n type: txType,\n currency: \"canton_network\",\n transferProposal: genCantonTransferProposal(),\n reason: faker.lorem.sentence(),\n };\n case \"CANTON_LIKE_RECEIVE\":\n return {\n type: txType,\n currency: \"canton_network\",\n transferProposal: genCantonTransferProposal(),\n verdict: \"ACCEPT\",\n reason: faker.lorem.sentence(),\n };\n case \"CANTON_LIKE_PRE_APPROVAL\":\n return {\n type: txType,\n currency: \"canton_network\",\n recipient: fakeCantonPartyId(),\n };\n case \"CANTON_LIKE_TAP\":\n return {\n type: txType,\n currency: \"canton_network\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: null,\n recipient: fakeCantonPartyId(),\n };\n }\n};\n\n// #endregion\n\nconst mergeTransactionData = (\n defaults: TransactionData,\n custom?: Partial<TransactionData>,\n): TransactionData => {\n const merged = {\n ...defaults,\n ...custom,\n type: defaults.type, // make sure `type` comes from `defaults`\n };\n // Parse the merged object to make sure it is valid.\n // It is too hard to get the typing correct in a static way. As a compromise, we rely on\n // a dynamic check: If user tries to merge two objects of different types, the code will\n // still type-check, but it will throw an error at runtime.\n return zTransactionData.parse(merged);\n};\n\nexport const genCreateTransactionData = <T extends TransactionData[\"type\"]>(opts?: {\n accountId?: string;\n transaction?: Partial<TransactionData> & { type: T };\n}): { accountId: string; transaction: Extract<TransactionData, { type: T }> } => {\n const { accountId, transaction } = opts ?? {};\n const transactionType = transaction?.type ?? \"ETHEREUM_LIKE_SEND\";\n let transactionDefaults;\n switch (transactionType) {\n case \"BITCOIN_LIKE_SEND\":\n transactionDefaults = genBitcoinLikeSendData();\n break;\n case \"CANTON_LIKE_SEND\":\n case \"CANTON_LIKE_SEND_TOKEN\":\n case \"CANTON_LIKE_WITHDRAW\":\n case \"CANTON_LIKE_RECEIVE\":\n case \"CANTON_LIKE_PRE_APPROVAL\":\n case \"CANTON_LIKE_TAP\":\n transactionDefaults = genCantonLikeTxData(transactionType);\n break;\n case \"CARDANO_LIKE_SEND\":\n case \"CARDANO_LIKE_STAKING_REGISTER\":\n case \"CARDANO_LIKE_STAKING_DEREGISTER\":\n case \"CARDANO_LIKE_STAKING_DELEGATE\":\n case \"CARDANO_LIKE_STAKING_WITHDRAW\":\n transactionDefaults = genCardanoLikeTxData(transactionType);\n break;\n case \"ETHEREUM_LIKE_SEND\":\n transactionDefaults = genEthereumLikeSendData();\n break;\n case \"ETHEREUM_LIKE_EXECUTE_CONTRACT\":\n transactionDefaults = genEthereumLikeExecuteContractData();\n break;\n case \"ETHEREUM_LIKE_DEPLOY_CONTRACT\":\n transactionDefaults = genEthereumLikeDeployContractData();\n break;\n case \"GENERIC_TRANSACTION\":\n transactionDefaults = genGenericTransactionData();\n break;\n case \"HEDERA_LIKE_SEND\":\n case \"HEDERA_LIKE_SEND_TOKEN\":\n transactionDefaults = genHederaLikeSendData(transactionType);\n break;\n case \"POLKADOT_LIKE_SEND\":\n case \"POLKADOT_LIKE_ADDPROXY\":\n case \"POLKADOT_LIKE_REMOVEPROXY\":\n case \"POLKADOT_LIKE_BOND\":\n case \"POLKADOT_LIKE_REBOND\":\n case \"POLKADOT_LIKE_BONDEXTRA\":\n case \"POLKADOT_LIKE_UNBOND\":\n case \"POLKADOT_LIKE_WITHDRAWUNBONDED\":\n case \"POLKADOT_LIKE_SETPAYEE\":\n case \"POLKADOT_LIKE_ANONYMOUSPROXY\":\n case \"POLKADOT_LIKE_KILLANONYMOUS\":\n case \"POLKADOT_LIKE_CHILL\":\n transactionDefaults = genPolkadotLikeTxData(transactionType);\n break;\n case \"RIPPLE_LIKE_SEND\":\n transactionDefaults = genRippleLikeSendData(transactionType);\n break;\n case \"SOLANA_LIKE_SEND\":\n case \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_WITHDRAW_STAKE\":\n case \"SOLANA_LIKE_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_SPLIT_STAKE\":\n case \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_MERGE_STAKE\":\n case \"SOLANA_LIKE_SEND_TOKEN\":\n case \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\":\n case \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\":\n transactionDefaults = genSolanaLikeTxData(transactionType);\n break;\n case \"STELLAR_LIKE_SEND\":\n transactionDefaults = genStellarLikeSendData(transactionType);\n break;\n case \"TEZOS_LIKE_SEND\":\n case \"TEZOS_LIKE_DELEGATE\":\n case \"TEZOS_LIKE_UNDELEGATE\":\n transactionDefaults = genTezosLikeTxData(transactionType);\n break;\n case \"SUI_LIKE_SEND\":\n case \"SUI_LIKE_SEND_TOKEN\":\n case \"SUI_LIKE_STAKE\":\n case \"SUI_LIKE_UNSTAKE\":\n transactionDefaults = genSuiLikeTxData(transactionType);\n break;\n case \"TRON_LIKE_SEND\":\n case \"TRON_LIKE_SEND_TOKEN\":\n transactionDefaults = genTronLikeTxData(transactionType);\n break;\n }\n return {\n accountId: accountId ?? faker.string.uuid(),\n transaction: mergeTransactionData(transactionDefaults, transaction) as Extract<\n TransactionData,\n { type: T }\n >,\n };\n};\n","import type { VaultRequest } from \"@prisma/client\";\nimport { RequestState, RequestType } from \"@prisma/client\";\n\n/** Return whether a request with the given type and state should have a non-null `targetHsmId`. */\nexport const shouldHaveTargetHsmId = (\n request: Pick<VaultRequest, \"type\" | \"state\">,\n): boolean | undefined => {\n switch (request.type) {\n case RequestType.CREATE_ENTITY:\n case RequestType.EDIT_ENTITY:\n case RequestType.REVOKE_ENTITY:\n case RequestType.CREATE_SCICONFIG:\n case RequestType.EDIT_SCICONFIG:\n case RequestType.CREATE_API_KEY:\n case RequestType.EDIT_API_KEY:\n case RequestType.REVOKE_API_KEY:\n case RequestType.EDIT_WORKSPACE_RULE:\n case RequestType.UPDATE_QUORUM:\n return false;\n case RequestType.CREATE_PSD_USER:\n case RequestType.CREATE_API_USER:\n case RequestType.CREATE_API_USER_ACCESS: // targeting / editing an existing `User`\n case RequestType.REVOKE_USER:\n case RequestType.CREATE_TRANSACTION:\n case RequestType.SIGN_MESSAGE:\n case RequestType.SIGN_DIGESTS:\n case RequestType.CREATE_ACCOUNT:\n case RequestType.EDIT_ACCOUNT:\n case RequestType.TRADELINK_ACTIVATE_ACCOUNT:\n case RequestType.CREATE_GROUP:\n case RequestType.EDIT_GROUP:\n case RequestType.REVOKE_GROUP:\n case RequestType.CREATE_WHITELIST:\n case RequestType.EDIT_WHITELIST:\n case RequestType.CREATE_POLICY:\n case RequestType.EDIT_POLICY:\n case RequestType.TRADELINK_CREATE_CUSTODIAN:\n case RequestType.TRADELINK_EDIT_CUSTODIAN:\n case RequestType.TRADELINK_CREATE_EXCHANGE:\n case RequestType.TRADELINK_EDIT_EXCHANGE:\n case RequestType.TRADELINK_CREATE_ASSET_MANAGER:\n case RequestType.TRADELINK_EDIT_ASSET_MANAGER:\n return request.state !== RequestState.INITIAL;\n case RequestType.EDIT_TOKEN_RULE:\n return true;\n }\n};\n\n/** Return whether a request with the given type and state should have a non-null `targetId`. */\nexport const shouldHaveTargetId = (request: Pick<VaultRequest, \"type\" | \"state\">): boolean => {\n switch (request.type) {\n case RequestType.CREATE_API_KEY:\n case RequestType.EDIT_API_KEY:\n case RequestType.REVOKE_API_KEY:\n // We don't wire read-only API keys for now on revault (and we may never will, as it is not\n // sure if we will synchronize those models and implement read-only API key auth)\n return false;\n case RequestType.CREATE_TRANSACTION:\n case RequestType.SIGN_DIGESTS:\n // TODO: We don't know how to wire, so just return the request unchanged.\n return false;\n case RequestType.UPDATE_QUORUM:\n case RequestType.CREATE_PSD_USER:\n case RequestType.CREATE_API_USER:\n case RequestType.CREATE_ACCOUNT:\n case RequestType.CREATE_GROUP:\n case RequestType.CREATE_WHITELIST:\n case RequestType.CREATE_ENTITY:\n case RequestType.CREATE_SCICONFIG:\n case RequestType.CREATE_POLICY:\n case RequestType.SIGN_MESSAGE:\n case RequestType.TRADELINK_CREATE_CUSTODIAN:\n case RequestType.TRADELINK_CREATE_EXCHANGE:\n case RequestType.TRADELINK_CREATE_ASSET_MANAGER:\n // The request is to create the target object. The target object will exist only when\n // the request is executed.\n return request.state === RequestState.EXECUTED;\n case RequestType.EDIT_WORKSPACE_RULE:\n case RequestType.EDIT_ACCOUNT:\n case RequestType.TRADELINK_ACTIVATE_ACCOUNT:\n case RequestType.EDIT_TOKEN_RULE: // EDIT_TOKEN_RULE targetId is the parent account which must always exist, even when creating new token rule.\n case RequestType.EDIT_GROUP:\n case RequestType.REVOKE_GROUP:\n case RequestType.EDIT_WHITELIST:\n case RequestType.EDIT_ENTITY:\n case RequestType.REVOKE_ENTITY:\n case RequestType.CREATE_API_USER_ACCESS:\n case RequestType.REVOKE_USER:\n case RequestType.EDIT_SCICONFIG:\n case RequestType.EDIT_POLICY:\n case RequestType.TRADELINK_EDIT_CUSTODIAN:\n case RequestType.TRADELINK_EDIT_EXCHANGE:\n case RequestType.TRADELINK_EDIT_ASSET_MANAGER:\n case RequestType.TRADELINK_ADJUST_PLEDGE:\n case RequestType.TRADELINK_REPLEDGE:\n case RequestType.TRADELINK_CREATE_SETTLEMENT:\n case RequestType.TRADELINK_FORCE_UNPLEDGE:\n case RequestType.TRADELINK_WITHDRAW:\n case RequestType.TRADELINK_ARBITRATE:\n return true;\n }\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type {\n CreateAccountRequestData,\n EditAccountRequestData,\n EditTokenRuleRequestData,\n} from \"@/accounts\";\n\nimport { fakeUniqueName } from \"../../faker-utils\";\n\nexport const genCreateAccountData = (\n opts?: Partial<CreateAccountRequestData>,\n): CreateAccountRequestData => {\n return {\n name: fakeUniqueName(),\n type: \"BITCOIN_LIKE\",\n currency: \"bitcoin\",\n contractAddress: null,\n tokenIdentifier: null,\n governance: {\n type: \"CLASSIC\",\n policy: { rules: [] }, // TODO: account gov rules should not be empty\n },\n index: 0,\n derivationPath: \"m/84'/0'/0'\",\n ...opts,\n };\n};\n\nexport const genEditAccountData = (\n opts?: Partial<EditAccountRequestData>,\n): EditAccountRequestData => {\n return {\n name: fakeUniqueName(),\n governance: {\n type: \"CLASSIC\",\n policy: { rules: [] }, // TODO: account gov rules should not be empty\n },\n ...opts,\n };\n};\n\nexport const genEditTokenRuleData = (\n opts?: Partial<EditTokenRuleRequestData>,\n): EditTokenRuleRequestData => {\n return {\n parentAccountId: faker.string.uuid(),\n contractAddress: faker.string.alphanumeric({ length: 44 }),\n rules: [\n {\n operationType: \"SEND\",\n reviewSteps: [\n {\n quorum: 1,\n userIds: [],\n },\n ],\n },\n ],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateApiKeyRequestData, EditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\n\nexport const genCreateApiKeyData = (\n opts?: Partial<CreateApiKeyRequestData>,\n): CreateApiKeyRequestData => {\n return {\n name: faker.company.name().slice(0, 19),\n entities: [],\n scopes: {}, // FIXME what should we put there?\n ...opts,\n };\n};\n\nexport const genEditApiKeyData = (opts?: Partial<EditApiKeyRequestData>): EditApiKeyRequestData => {\n return {\n name: faker.company.name().slice(0, 19),\n entities: [],\n scopes: {}, // FIXME what should we put there?\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { SignDigestsRequestData } from \"@/transactions\";\n\nexport const genSignDigestsData = (\n opts?: Partial<SignDigestsRequestData>,\n): SignDigestsRequestData => {\n const { accountId, digests } = opts ?? {};\n return {\n accountId: accountId ?? faker.string.uuid(),\n digests: digests ?? [\n {\n digest: faker.string.hexadecimal({ prefix: \"\", length: 64 }),\n derivationPath: \"m/44'/60'/0'\",\n },\n ],\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateEntityRequestData, EditEntityRequestData } from \"@/entities\";\n\nexport const genCreateEntityData = (\n opts?: Partial<CreateEntityRequestData>,\n): CreateEntityRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n accountIds: [],\n memberIds: [],\n ...opts,\n };\n};\n\nexport const genEditEntityData = (opts?: Partial<EditEntityRequestData>): EditEntityRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n accountIds: [],\n memberIds: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateGroupRequestData, EditGroupRequestData } from \"@/groups\";\n\nexport const genCreateGroupData = (\n opts?: Partial<CreateGroupRequestData>,\n): CreateGroupRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n members: [],\n ...opts,\n };\n};\n\nexport const genEditGroupData = (opts?: Partial<EditGroupRequestData>): EditGroupRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n members: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreatePublicPolicyRequestData, EditPublicPolicyRequestData } from \"@/policies\";\n\nexport const genCreatePolicyData = (\n opts?: Partial<CreatePublicPolicyRequestData>,\n): CreatePublicPolicyRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n currency: \"bitcoin\",\n govRules: [],\n ...opts,\n };\n};\n\nexport const genEditPolicyData = (\n opts?: Partial<EditPublicPolicyRequestData>,\n): EditPublicPolicyRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n govRules: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport { times } from \"lodash-es\";\n\nimport type { CreateSciConfigRequestData, EditSciConfigRequestData } from \"@/accounts\";\n\nexport const genCreateSciConfigData = (\n opts?: Partial<CreateSciConfigRequestData>,\n): CreateSciConfigRequestData => {\n return {\n account: faker.string.uuid(),\n config: {\n dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),\n customContractCallEnabled: faker.datatype.boolean(),\n },\n ...opts,\n };\n};\n\nexport const genEditSciConfigData = (\n opts?: Partial<EditSciConfigRequestData>,\n): EditSciConfigRequestData => {\n return {\n config: {\n dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),\n customContractCallEnabled: faker.datatype.boolean(),\n },\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type {\n TradelinkAdjustPledgeRequestData,\n TradelinkArbitrationRequestData,\n TradelinkCreateSettlementRequestData,\n TradelinkForceUnpledgeRequestData,\n TradelinkRepledgeRequestData,\n TradelinkWithdrawRequestData,\n} from \"@/tradelink\";\n\nexport const genCreatePledgeIncrementData = (\n opts?: Partial<TradelinkAdjustPledgeRequestData>,\n): TradelinkAdjustPledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n amount: \"42\",\n ...opts,\n});\n\nexport const genRepledgeRequestData = (\n opts?: Partial<TradelinkRepledgeRequestData>,\n): TradelinkRepledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n amount: \"42\",\n ...opts,\n});\n\nexport const genCreateSettlementData = (\n opts?: Partial<TradelinkCreateSettlementRequestData>,\n): TradelinkCreateSettlementRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n transaction: {\n type: \"BITCOIN_LIKE_SEND\",\n amount: \"42\",\n currency: \"bitcoin\",\n maxFee: \"999\",\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: { type: \"NORMAL\" },\n },\n ...opts,\n});\n\nexport const genForceUnpledgeData = (\n opts?: Partial<TradelinkForceUnpledgeRequestData>,\n): TradelinkForceUnpledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n ...opts,\n});\n\nexport const genTradelinkWithdrawData = (\n opts?: Partial<TradelinkWithdrawRequestData>,\n): TradelinkWithdrawRequestData => ({\n accountId: faker.string.uuid(),\n transaction: {\n type: \"ETHEREUM_LIKE_SEND\",\n recipient: \"0x63e4195AF1509490b430F3f5bCb85A82a24F5C82\",\n amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n currency: \"ethereum\",\n feeStrategy: {\n type: \"NORMAL\",\n gasPrice: \"2\",\n gasLimit: \"10\",\n },\n },\n ...opts,\n});\n\nexport const genTradelinkArbitrationData = (\n opts?: Partial<TradelinkArbitrationRequestData>,\n): TradelinkArbitrationRequestData => ({\n accountId: faker.string.uuid(),\n transaction: {\n type: \"ETHEREUM_LIKE_SEND\",\n recipient: \"0xcefd70CFCd7a2FAa0fe956E3d496F9313297CB44\",\n amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n currency: \"ethereum\",\n feeStrategy: {\n type: \"NORMAL\",\n gasPrice: \"2\",\n gasLimit: \"10\",\n },\n },\n ...opts,\n});\n","import { faker } from \"@faker-js/faker\";\nimport { UserRole } from \"@prisma/client\";\n\nimport type {\n CreateApiUserAccessRequestData,\n CreateApiUserRequestData,\n CreatePsdUserRequestData,\n} from \"@/users\";\n\nimport { fakePubKey } from \"../../faker-utils\";\n\nexport const genCreatePsdUserData = (\n opts?: Partial<CreatePsdUserRequestData>,\n): CreatePsdUserRequestData => ({\n registrationId: faker.string.uuid(),\n ...opts,\n});\n\nexport const genCreateApiUserData = (\n opts?: Partial<CreateApiUserRequestData>,\n): CreateApiUserRequestData => {\n return {\n name: faker.person.firstName(),\n pubKey: fakePubKey(),\n role: UserRole.OPERATOR,\n viewAll: false,\n ...opts,\n };\n};\n\nexport const genCreateApiUserAccessData = (\n opts?: Partial<CreateApiUserAccessRequestData>,\n): CreateApiUserAccessRequestData => {\n return {\n name: faker.person.firstName(),\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport { WhitelistType } from \"@prisma/client\";\n\nimport type {\n CreateWhitelistRequestData,\n EditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\n\nexport const genCreateWhitelistData = (\n opts?: Partial<CreateWhitelistRequestData>,\n): CreateWhitelistRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n type: faker.helpers.arrayElement(Object.values(WhitelistType)),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n ...opts,\n };\n};\n\nexport const genEditWhitelistData = (\n opts?: Partial<EditWhitelistRequestData>,\n): EditWhitelistRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n ...opts,\n };\n};\n","import { AdminPermission } from \"@prisma/client\";\n\nimport type { WorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\n\nexport const genWorkspaceRuleData = (\n opts?: Partial<WorkspaceRuleRequestData>,\n): WorkspaceRuleRequestData => {\n return {\n permission: AdminPermission.CREATE_ACCOUNT_WITH_POLICY,\n reviewConfig: [{ userIds: [], quorum: 2 }],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { VaultRequest, VaultRequestReview } from \"@prisma/client\";\nimport { ChallengeType, RequestReviewStatus, RequestState, RequestType } from \"@prisma/client\";\nimport { times } from \"lodash-es\";\n\nimport type {\n CreateAccountRequestData,\n CreateSciConfigRequestData,\n EditAccountRequestData,\n EditSciConfigRequestData,\n EditTokenRuleRequestData,\n} from \"@/accounts\";\nimport type { CreateApiKeyRequestData, EditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\nimport type { CreateEntityRequestData, EditEntityRequestData } from \"@/entities\";\nimport type { UpdateQuorumRequestData } from \"@/governance\";\nimport type { WorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\nimport type { CreateGroupRequestData, EditGroupRequestData } from \"@/groups\";\nimport type { CreatePublicPolicyRequestData, EditPublicPolicyRequestData } from \"@/policies\";\nimport { shouldHaveTargetHsmId, shouldHaveTargetId } from \"@/requests/utils\";\nimport type {\n TradelinkAdjustPledgeRequestData,\n TradelinkArbitrationRequestData,\n TradelinkCreateSettlementRequestData,\n TradelinkForceUnpledgeRequestData,\n TradelinkRepledgeRequestData,\n TradelinkWithdrawRequestData,\n} from \"@/tradelink\";\nimport type {\n CreateTransactionRequestData,\n SignDigestsRequestData,\n SignMessageRequestData,\n} from \"@/transactions\";\nimport type {\n CreateApiUserAccessRequestData,\n CreateApiUserRequestData,\n CreatePsdUserRequestData,\n} from \"@/users\";\nimport type {\n CreateWhitelistRequestData,\n EditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\nimport type { Challenge, RequestReviewStep } from \"@/workflows\";\n\nimport {\n fakeGateId,\n fakeHsmObjectId,\n fakeJws,\n fakePsdChallenge,\n fakePsdSignature,\n fakePubKey,\n fakeWorkspaceName,\n} from \"../../faker-utils\";\nimport { injectSyncId } from \"../sync-id-utils\";\nimport {\n genCreateAccountData,\n genEditAccountData,\n genEditTokenRuleData,\n} from \"./request-for-account\";\nimport { genCreateApiKeyData, genEditApiKeyData } from \"./request-for-api-key\";\nimport { genSignDigestsData } from \"./request-for-digests-signature\";\nimport { genCreateEntityData, genEditEntityData } from \"./request-for-entity\";\nimport { genCreateGroupData, genEditGroupData } from \"./request-for-group\";\nimport { genSignMessageData } from \"./request-for-message-signature\";\nimport { genCreatePolicyData, genEditPolicyData } from \"./request-for-policy\";\nimport { genCreateSciConfigData, genEditSciConfigData } from \"./request-for-sciconfig\";\nimport {\n genCreatePledgeIncrementData,\n genCreateSettlementData,\n genForceUnpledgeData,\n genRepledgeRequestData,\n genTradelinkArbitrationData,\n genTradelinkWithdrawData,\n} from \"./request-for-tradelink\";\nimport { genCreateTransactionData } from \"./request-for-transaction\";\nimport {\n genCreateApiUserAccessData,\n genCreateApiUserData,\n genCreatePsdUserData,\n} from \"./request-for-user\";\nimport { genCreateWhitelistData, genEditWhitelistData } from \"./request-for-whitelist\";\nimport { genWorkspaceRuleData } from \"./request-for-workspace-rule\";\n\nexport type RequestDataTypes = {\n // Workspace...\n [RequestType.UPDATE_QUORUM]: UpdateQuorumRequestData;\n // User...\n [RequestType.CREATE_PSD_USER]: CreatePsdUserRequestData;\n [RequestType.CREATE_API_USER]: CreateApiUserRequestData;\n [RequestType.CREATE_API_USER_ACCESS]: CreateApiUserAccessRequestData;\n [RequestType.REVOKE_USER]: Record<string, never>;\n // Admin gov rule...\n [RequestType.EDIT_WORKSPACE_RULE]: WorkspaceRuleRequestData;\n // Group...\n [RequestType.CREATE_GROUP]: CreateGroupRequestData;\n [RequestType.EDIT_GROUP]: EditGroupRequestData;\n [RequestType.REVOKE_GROUP]: Record<string, never>;\n // API key...\n [RequestType.CREATE_API_KEY]: CreateApiKeyRequestData;\n [RequestType.EDIT_API_KEY]: EditApiKeyRequestData;\n [RequestType.REVOKE_API_KEY]: Record<string, never>;\n // Whitelist...\n [RequestType.CREATE_WHITELIST]: CreateWhitelistRequestData;\n [RequestType.EDIT_WHITELIST]: EditWhitelistRequestData;\n // Entity...\n [RequestType.CREATE_ENTITY]: CreateEntityRequestData;\n [RequestType.EDIT_ENTITY]: EditEntityRequestData;\n [RequestType.REVOKE_ENTITY]: Record<string, never>;\n // Account...\n [RequestType.CREATE_ACCOUNT]: CreateAccountRequestData;\n [RequestType.EDIT_ACCOUNT]: EditAccountRequestData;\n [RequestType.EDIT_TOKEN_RULE]: EditTokenRuleRequestData;\n // Operator requests...\n [RequestType.CREATE_TRANSACTION]: CreateTransactionRequestData;\n [RequestType.SIGN_MESSAGE]: SignMessageRequestData;\n [RequestType.SIGN_DIGESTS]: SignDigestsRequestData;\n // SCI config ...\n [RequestType.CREATE_SCICONFIG]: CreateSciConfigRequestData;\n [RequestType.EDIT_SCICONFIG]: EditSciConfigRequestData;\n // Policy\n [RequestType.CREATE_POLICY]: CreatePublicPolicyRequestData;\n [RequestType.EDIT_POLICY]: EditPublicPolicyRequestData;\n // Tradelink...\n [RequestType.TRADELINK_ADJUST_PLEDGE]: TradelinkAdjustPledgeRequestData;\n [RequestType.TRADELINK_REPLEDGE]: TradelinkRepledgeRequestData;\n [RequestType.TRADELINK_CREATE_SETTLEMENT]: TradelinkCreateSettlementRequestData;\n [RequestType.TRADELINK_FORCE_UNPLEDGE]: TradelinkForceUnpledgeRequestData;\n [RequestType.TRADELINK_WITHDRAW]: TradelinkWithdrawRequestData;\n [RequestType.TRADELINK_ARBITRATE]: TradelinkArbitrationRequestData;\n};\n\n/**\n * A more strict subtype of `VaultRequest`: The `data` field should be a `Prisma.JsonValue`\n * (in this case, a `Prisma.JsonObject`) __AND__ also of type `D`.\n */\nexport type RequestWith<D> = VaultRequest & { data: D };\n\nexport const genRequestData = <T extends keyof RequestDataTypes>(\n type: T,\n opts?: Partial<RequestDataTypes[T]>,\n): RequestDataTypes[T] => {\n switch (type) {\n // Workspace...\n case RequestType.UPDATE_QUORUM:\n return { quorum: 3, ...opts } as RequestDataTypes[T];\n\n // User...\n case RequestType.CREATE_PSD_USER:\n return genCreatePsdUserData(opts) as RequestDataTypes[T];\n case RequestType.CREATE_API_USER:\n return genCreateApiUserData(opts) as RequestDataTypes[T];\n case RequestType.CREATE_API_USER_ACCESS:\n return genCreateApiUserAccessData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_USER:\n return {} as RequestDataTypes[T];\n\n // Admin gov rule...\n case RequestType.EDIT_WORKSPACE_RULE:\n return genWorkspaceRuleData(opts) as RequestDataTypes[T];\n\n // Group...\n case RequestType.CREATE_GROUP:\n return genCreateGroupData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_GROUP:\n return genEditGroupData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_GROUP:\n return {} as RequestDataTypes[T];\n\n // ApiKey...\n case RequestType.CREATE_API_KEY:\n return genCreateApiKeyData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_API_KEY:\n return genEditApiKeyData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_API_KEY:\n return {} as RequestDataTypes[T];\n\n // Whitelist...\n case RequestType.CREATE_WHITELIST:\n return genCreateWhitelistData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_WHITELIST:\n return genEditWhitelistData(opts) as RequestDataTypes[T];\n\n // Entity...\n case RequestType.CREATE_ENTITY:\n return genCreateEntityData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_ENTITY:\n return genEditEntityData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_ENTITY:\n return {} as RequestDataTypes[T];\n\n // Account...\n case RequestType.CREATE_ACCOUNT:\n return genCreateAccountData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_ACCOUNT:\n return genEditAccountData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_TOKEN_RULE:\n return genEditTokenRuleData(opts) as RequestDataTypes[T];\n\n // Operator requests...\n case RequestType.CREATE_TRANSACTION:\n return genCreateTransactionData(opts) as RequestDataTypes[T];\n case RequestType.SIGN_MESSAGE:\n return genSignMessageData(opts) as RequestDataTypes[T];\n case RequestType.SIGN_DIGESTS:\n return genSignDigestsData(opts) as RequestDataTypes[T];\n\n // SCI config...\n case RequestType.CREATE_SCICONFIG:\n return genCreateSciConfigData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_SCICONFIG:\n return genEditSciConfigData(opts) as RequestDataTypes[T];\n\n // Policy\n case RequestType.CREATE_POLICY:\n return genCreatePolicyData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_POLICY:\n return genEditPolicyData(opts) as RequestDataTypes[T];\n\n // Tradelink...\n case RequestType.TRADELINK_ADJUST_PLEDGE:\n return genCreatePledgeIncrementData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_CREATE_SETTLEMENT:\n return genCreateSettlementData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_FORCE_UNPLEDGE:\n return genForceUnpledgeData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_WITHDRAW:\n return genTradelinkWithdrawData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_REPLEDGE:\n return genRepledgeRequestData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_ARBITRATE:\n return genTradelinkArbitrationData(opts) as RequestDataTypes[T];\n\n default: {\n const unknownType: never = type;\n throw new Error(`Unknown request type: ${unknownType}`);\n }\n }\n};\n\nexport const genRequestReviewSteps = (numSteps?: number): RequestReviewStep[] =>\n times(numSteps ?? 1, () => ({ stageName: \"default\", quorum: 2 }));\n\nexport type VaultRequestOpts<T extends keyof RequestDataTypes> = {\n type: T;\n data: RequestDataTypes[T];\n} & Partial<Omit<VaultRequest, \"type\" | \"data\">>;\n\nexport const genVaultRequest = <T extends keyof RequestDataTypes>(\n opts: VaultRequestOpts<T>,\n): RequestWith<RequestDataTypes[T]> => {\n const { type, state = RequestState.PENDING_APPROVAL, data, ...custom } = opts;\n const targetHsmId = shouldHaveTargetHsmId({ type, state })\n ? type === RequestType.CREATE_PSD_USER\n ? fakePubKey()\n : fakeHsmObjectId()\n : null;\n const targetId = shouldHaveTargetId({ type, state }) ? faker.string.uuid() : null;\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n type,\n state,\n reviewSteps: genRequestReviewSteps(),\n currentStepIndex: 0,\n expiresAt: faker.date.future(),\n targetHsmId,\n createdById: faker.string.uuid(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n note: null,\n managedData: null,\n data,\n targetId,\n gateTargetType: \"Whatsoever\",\n gateTargetId: 0,\n gateType: \"Request\",\n gateId: fakeGateId(),\n // Note: Custom properties will overwrite the default ones. It is still possible for caller\n // to overwrite `targetId`. Thus it is not guaranteed that these values will always be\n // consistent with `type` and `state`.\n ...custom,\n });\n};\n\nexport const genVaultRequestReview = (\n opts?: Partial<VaultRequestReview & { challenge: Challenge }>,\n): VaultRequestReview => {\n const status = opts?.status ?? RequestReviewStatus.PENDING;\n const challenge = opts?.challenge ?? fakePsdChallenge();\n const { challengeType } = challenge;\n let signature;\n if (status !== RequestReviewStatus.APPROVED) {\n signature = null;\n } else {\n switch (challengeType) {\n case ChallengeType.PSD:\n signature = fakePsdSignature();\n break;\n case ChallengeType.API:\n signature = fakeJws();\n break;\n case ChallengeType.SOFT:\n signature = \"\";\n break;\n }\n }\n return {\n id: faker.number.int(),\n requestId: faker.string.uuid(),\n stageName: \"default\", // assume the simple case where there is one single stage\n stepIndex: 0,\n userId: faker.string.uuid(),\n pubKey: fakePubKey(),\n challengeType,\n challenge,\n signature,\n status,\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Group, User, UserRegistration, Workspace } from \"@prisma/client\";\nimport {\n ActivationStatus,\n GateUserType,\n PsdModel,\n UserDeviceType,\n UserRegistrationState,\n UserRole,\n} from \"@prisma/client\";\n\nimport type { GroupWithMembers } from \"@/groups\";\nimport { genAuthUserId } from \"@/utils\";\n\nimport {\n fakeDeviceUserId,\n fakeGateId,\n fakeHexString,\n fakeHsmObjectId,\n fakePubKey,\n fakeWorkspaceName,\n} from \"../faker-utils\";\nimport { fakeUserRegistrationChallenge } from \"../hsm\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nexport const genWorkspace = (opts?: Partial<Workspace>): Workspace => ({\n id: faker.string.uuid(),\n name: fakeWorkspaceName(),\n compartmentId: faker.number.int({ max: 1e6 }),\n status: ActivationStatus.ACTIVE,\n mode: \"GATE_COMPAT\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n pkiRootCaFetched: false,\n ...opts,\n});\n\nconst genUserFieldsForDeviceType = (\n deviceType: UserDeviceType,\n): Pick<User, \"deviceType\" | \"deviceUserId\" | \"hsmId\"> => {\n switch (deviceType) {\n case UserDeviceType.PSD:\n case UserDeviceType.SOFT_PSD:\n return {\n deviceType,\n deviceUserId: fakeDeviceUserId(),\n hsmId: null,\n };\n case UserDeviceType.API:\n return {\n deviceType,\n deviceUserId: null,\n hsmId: faker.string.uuid(),\n };\n }\n};\n\nexport const genUser = (opts?: Partial<User>): User => {\n // By default, generate ADMIN or OPERATOR. The `READ_ONLY_API_KEY` role is a bit special,\n // so if needed, caller should ask for it explicitly.\n const role = opts?.role ?? faker.helpers.arrayElement([UserRole.ADMIN, UserRole.OPERATOR]);\n const deviceType = opts?.deviceType ?? UserDeviceType.PSD;\n const userFieldsForDeviceType = genUserFieldsForDeviceType(deviceType);\n const gateType =\n role === UserRole.READ_ONLY_API_KEY ? GateUserType.VaultApiKey : GateUserType.Person;\n return injectSyncId({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n ...userFieldsForDeviceType,\n authUserId: genAuthUserId(),\n pubKey: fakePubKey(),\n workspaceName: fakeWorkspaceName(),\n u2fKeyHandle: fakePubKey(),\n u2fPubKey: fakePubKey(),\n legacyViewAll: false,\n role,\n status: ActivationStatus.ACTIVE,\n isSuspended: false,\n gateType,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\nexport const genGroup = (opts?: Partial<Group>): Group =>\n injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.person.fullName(),\n description: faker.lorem.sentence(10),\n hsmId: fakeHsmObjectId(),\n status: ActivationStatus.ACTIVE,\n gateId: fakeGateId(),\n gateType: \"Group\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n\nexport const genGroupWithMembers = (opts?: Partial<GroupWithMembers>): GroupWithMembers => {\n const group = genGroup(opts);\n return {\n ...group,\n members: opts?.members ?? [],\n };\n};\n\nexport const genUserRegistration = (opts?: Partial<UserRegistration>): UserRegistration => {\n const state = opts?.state ?? UserRegistrationState.INITIAL;\n let fieldsForState;\n switch (state) {\n case UserRegistrationState.INITIAL:\n fieldsForState = {\n pubKey: null,\n challenge: null,\n u2fKeyHandle: null,\n u2fPubKey: null,\n };\n break;\n case UserRegistrationState.PENDING:\n fieldsForState = {\n pubKey: fakePubKey(),\n challenge: fakeUserRegistrationChallenge(),\n u2fKeyHandle: null,\n u2fPubKey: null,\n };\n break;\n case UserRegistrationState.COMPLETED:\n fieldsForState = {\n pubKey: fakePubKey(),\n challenge: fakeUserRegistrationChallenge(),\n u2fKeyHandle: fakeHexString(150),\n u2fPubKey: fakePubKey(),\n };\n break;\n }\n\n return {\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.string.alphanumeric(16),\n role: UserRole.OPERATOR,\n psdModel: PsdModel.STAX,\n deviceUserId: fakeDeviceUserId(),\n invitedById: faker.string.uuid(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n state,\n isLocked: false,\n ...fieldsForState,\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Policy, User, Whitelist } from \"@prisma/client\";\nimport {\n ActivationStatus,\n GatePolicyType,\n GateReviewConfigType,\n ReviewConfigType,\n WhitelistType,\n} from \"@prisma/client\";\nimport { times } from \"lodash-es\";\n\nimport type { ReviewConfigWithMembers } from \"@/governance\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport type { GovRuleData, PolicyWithRelatedObjects } from \"@/policies\";\n\nimport { fakeGateId, fakeHsmObjectId, fakeWorkspaceName } from \"../faker-utils\";\nimport { genReviewConfig } from \"./review-configs\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nexport const genWhitelist = (opts?: Partial<Whitelist>): Whitelist => {\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.lorem.words(3),\n description: faker.lorem.sentence(10),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n hsmId: fakeHsmObjectId(),\n type: faker.helpers.arrayElement(Object.values(WhitelistType)),\n status: faker.helpers.arrayElement(Object.values(ActivationStatus)),\n gateId: fakeGateId(),\n gateType: \"Whitelist\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\ntype PolicyThinOpts = Partial<Omit<Policy, \"rulesJsonArray\">>;\n\nexport const genPolicyWithFakeRules = (opts?: PolicyThinOpts): PolicyWithRelatedObjects => {\n const { workspaceName, name, description, currency, isPrivate, hsmId } = {\n workspaceName: fakeWorkspaceName(),\n name: \"policy_\".concat(faker.string.alpha(5)),\n description: faker.lorem.sentence(10),\n currency: null,\n isPrivate: true,\n hsmId: null,\n ...opts,\n };\n const reviewConfig = genReviewConfig({\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n });\n const whitelists = times(2, () => genWhitelist({ workspaceName }));\n const rulesJsonArray = [\n {\n operationType: \"SEND\",\n threshold: { min: \"1\", max: \"99\" },\n whitelistIds: whitelists.map((_) => _.id),\n reviewConfigId: reviewConfig.id,\n hsmId: fakeHsmObjectId(),\n },\n ];\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n name,\n description,\n currency,\n isPrivate,\n hsmId,\n rulesJsonArray,\n whitelists,\n reviewConfigs: [reviewConfig],\n status: ActivationStatus.ACTIVE,\n gateType: isPrivate ? GatePolicyType.AccountGovernanceRules : GatePolicyType.Policy,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\ntype PolicyRichOpts = PolicyThinOpts & {\n workspaceName: string;\n rules: GovRuleData[];\n whitelists: Whitelist[];\n users: User[];\n groups: GroupWithMembers[];\n};\n\nexport const genPolicyWithRules = (opts: PolicyRichOpts): PolicyWithRelatedObjects => {\n const {\n id: policyId = faker.string.uuid(),\n workspaceName,\n rules,\n whitelists,\n users,\n groups,\n ...otherFields\n } = opts;\n\n const rulesJsonArray = [];\n const reviewConfigs: ReviewConfigWithMembers[] = [];\n for (const rule of rules) {\n const { reviewSteps, ...otherRuleFields } = rule;\n const relatedUserIds = reviewSteps.flatMap((reviewStep) =>\n \"userIds\" in reviewStep ? reviewStep.userIds : [],\n );\n const relatedUsers = users.filter((_) => relatedUserIds.includes(_.id));\n const relatedGroupIds = reviewSteps.flatMap((reviewStep) =>\n \"groupId\" in reviewStep ? [reviewStep.groupId] : [],\n );\n const relatedGroups = groups.filter((_) => relatedGroupIds.includes(_.id));\n const reviewConfig: ReviewConfigWithMembers = injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n steps: reviewSteps,\n users: relatedUsers,\n groups: relatedGroups,\n ownerPolicyId: policyId,\n gateType: GateReviewConfigType.MultiAuthorizationsRule,\n gateId: fakeGateId(),\n });\n rulesJsonArray.push({\n ...otherRuleFields,\n reviewConfigId: reviewConfig.id,\n });\n reviewConfigs.push(reviewConfig);\n }\n\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n name: faker.person.fullName(),\n description: faker.lorem.sentence(10),\n currency: null,\n isPrivate: true,\n hsmId: null,\n status: ActivationStatus.ACTIVE,\n gateType: GatePolicyType.AccountGovernanceRules,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n rulesJsonArray,\n whitelists,\n reviewConfigs,\n ...otherFields,\n });\n};\n","import { ChallengeType, PsdModel } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { type HsmObjectId, zHexString } from \"@/zod-utils\";\n\nexport type HsmObject = {\n hsmId: HsmObjectId;\n};\n\n// #region ---------- Common schemas & types ------------------------------------------------------\n\nexport const zPubKey = zHexString.meta({ description: \"Public key\" });\n\nexport type PubKey = z.infer<typeof zPubKey>;\n\nexport const zHsmCertificate = z.object({\n codeHash: z\n .base64()\n .meta({ description: \"Hash of the executable that generated this certificate\" }),\n attestationPub: z.base64().meta({ description: \"Attestation public key\" }),\n certificate: z.base64().meta({ description: \"Certificate bytes\" }),\n signature: z.base64().meta({ description: \"Certificate signature\" }),\n});\n\nexport type HsmCertificate = z.infer<typeof zHsmCertificate>;\n\nexport const zBlob = z.string(); // TODO: .min(1).max(???).regex(???)\n\nexport type Blob = z.infer<typeof zBlob>;\n\nexport type HsmReviewStep = {\n quorum: number;\n users: PubKey[];\n};\n\nexport type HsmCurrency = {\n family: string;\n ticker: string; // hack: replaced by ledger id\n parameters: string; // the atp payload\n signature: string; // the atp signature\n};\n\n// #endregion\n\n// #region ---------- Challenge -------------------------------------------------------------------\n\nexport const zPsdChallenge = z.object({\n challengeType: z.literal(ChallengeType.PSD),\n wActions: z\n .array(z.string())\n .meta({ description: \"Wrapped blobs that describe the screens to display\" }),\n handshake: z.string().meta({ description: \"Handshake for the HSM <-> PSD communication\" }),\n handshakeAttestation: zHsmCertificate.meta({\n description: \"Handshake attestation to verify secure channel between HSM & PSD\",\n }),\n partitionId: z.string().meta({ description: \"HSM partition id (maybe not useful)\" }),\n});\n\nexport type PsdChallenge = z.infer<typeof zPsdChallenge>;\n\nexport const zApiChallenge = z.object({\n challengeType: z.literal(ChallengeType.API),\n payload: z\n .object({\n approve: z.string().meta({ description: \"JSON payload to sign (as JWS) to approve\" }),\n reject: z.string().meta({ description: \"JSON payload to sign (as JWS) to reject\" }),\n })\n .meta({ description: \"JSON payload to approve and to reject\" }),\n});\n\nexport type ApiChallenge = z.infer<typeof zApiChallenge>;\n\nexport const zHsmChallenge = z.discriminatedUnion(\"challengeType\", [\n zPsdChallenge.meta({ description: \"Necessary data to approve on a PSD\" }),\n zApiChallenge.meta({ description: \"Necessary data for approval by an API user\" }),\n]);\n\nexport type HsmChallenge = z.infer<typeof zHsmChallenge>;\n\n/** A group of challenges indexed by pub key. */\nexport const zHsmChallengeGroup = z.record(zPubKey, zHsmChallenge);\n\nexport type HsmChallengeGroup = z.infer<typeof zHsmChallengeGroup>;\n\n/**\n * One or more steps of challenges, each step contains a challenge group.\n * It is a 2D structure where the 1st dimension is \"step\", and the 2nd dimension is \"pubKey\".\n */\nexport const zHsmChallengeSteps = z.array(zHsmChallengeGroup);\n\nexport type HsmChallengeSteps = z.infer<typeof zHsmChallengeSteps>;\n\n// #endregion\n\n// #region ---------- Signature -------------------------------------------------------------------\n\n// TODO: Make it more strict (but don't be too strict).\nexport const zPsdSignature = z.string().min(1).meta({ description: \"Signature from PSD\" });\n\nexport type PsdSignature = z.infer<typeof zPsdSignature>;\n\n// TODO: Make it more strict (but don't be too strict).\nexport const zApiSignature = z.string().min(1).meta({ description: \"Signature from API (JWS)\" });\n\nexport type ApiSignature = z.infer<typeof zApiSignature>;\n\nexport const zHsmProof = z.discriminatedUnion(\"challengeType\", [\n z.object({\n challengeType: z.literal(ChallengeType.PSD),\n signature: zPsdSignature,\n }),\n z.object({\n challengeType: z.literal(ChallengeType.API),\n signature: zApiSignature,\n }),\n]);\n\nexport type HsmProof = z.infer<typeof zHsmProof>;\n\n/** A group of approvals indexed by pub key. */\nconst zHsmApprovalGroup = z.record(zPubKey, zHsmProof);\n\nexport type HsmApprovalGroup = z.infer<typeof zHsmApprovalGroup>;\n\n/**\n * One or more steps of approvals, each step contains an approval group.\n * This is a 2D matrix while the 1st dimension is \"step\", and the 2nd dimension is \"pubKey\".\n */\nexport const zHsmApprovalSteps = z.array(zHsmApprovalGroup);\n\nexport type HsmApprovalSteps = z.infer<typeof zHsmApprovalSteps>;\n\n/**\n * HSM approvals for approved stages. Key is the approved stage name, and value is an array of\n * approval steps where each step is a record of approvals indexed by user pub key.\n */\nexport type HsmApprovalStages = Record<string, HsmApprovalSteps>;\n\n/**\n * A challenge stage has a name and contains an array of one or more challenge steps.\n * Each challenge step contains challenges for multiple users, indexed by user's pub key.\n */\nexport const zHsmChallengeStage = z.object({\n stageName: z.string(),\n steps: zHsmChallengeSteps,\n});\n\nexport type HsmChallengeStage = z.infer<typeof zHsmChallengeStage>;\n\n// #endregion\n\n// #region ---------- User registration -----------------------------------------------------------\n\n/**\n * Device data submitted by the invited user, to generate a registration challenge.\n */\nexport const zUserRegistrationDeviceData = z\n .object({\n name: z.string().meta({ description: \"Name of the user to register\" }),\n psdModel: z.enum(PsdModel).meta({ description: \"Device model\" }),\n pubKey: zPubKey.meta({ description: \"Device public key\" }),\n confidentialityKey: zPubKey,\n psdEphemeralKey: zPubKey,\n psdEphemeralKeyAttestation: zHsmCertificate,\n })\n .meta({ description: \"Data generated by the PSD to register on HSM\" });\n\nexport type UserRegistrationDeviceData = z.infer<typeof zUserRegistrationDeviceData>;\n\n/**\n * Registration challenge for the invited user, generated by HSM.\n */\nexport const zUserRegistrationChallenge = z\n .object({\n challenge: z.string(),\n ephemeralPublicKey: zPubKey,\n ephemeralPublicKeyAttestation: zHsmCertificate,\n handshake: zHexString,\n handshakeAttestation: zHsmCertificate,\n u2fRegisterData: z.string(),\n ciphertext: z.string(),\n requestId: z.string(),\n })\n .meta({ description: \"Challenge generated by HSM using the PSD registration data\" });\n\nexport type UserRegistrationChallenge = z.infer<typeof zUserRegistrationChallenge>;\n\n/**\n * Response to the user registration challenge, submitted by the invited user.\n */\nexport const zUserRegistrationChallengeResponse = z\n .object({\n certificate: zHsmCertificate,\n u2fRegister: zHexString,\n u2fKeyHandle: zHexString,\n registerData: z.string(),\n validationKey: zPubKey,\n pairingPayload: z.string(),\n })\n .meta({ description: \"Final registration response from PSD to HSM\" });\n\nexport type UserRegistrationChallengeResponse = z.infer<typeof zUserRegistrationChallengeResponse>;\n\n// #endregion\n\n// #region ---------- PSD Pairing -----------------------------------------------------------------\n\nexport const zPsdPairingInputData = z.object({\n confidentialityKeyCurve25519: z.string(),\n confidentialityKeySignature: z.string(),\n});\n\nexport type PsdPairingInputData = z.infer<typeof zPsdPairingInputData>;\n\nexport const zPsdPairingData = z.object({\n pairing: z.object({\n workspaceName: z.string(),\n partitionKey: z.string(), // TODO: Is this `zPubKey`?\n bootstrapEnabled: z.boolean(),\n }),\n // TODO: Is this `zHsmCertificate`?\n partitionKeyAttestation: z.object({\n codeHash: z.string(),\n attestationPub: z.string(),\n certificate: z.string(),\n signature: z.string(),\n }),\n blob: zBlob,\n});\n\nexport type PsdPairingData = z.infer<typeof zPsdPairingData>;\n\n// #endregion\n\n// #region ---------- Signatures ------------------------------------------------------------------\n\nexport const zHsmSignature = z.object({\n digest: z.string().nullable().meta({ description: \"Signed digest\" }),\n derivationPath: z\n .string()\n .nullable()\n .meta({ description: \"Derivation path used to sign the digest\" }),\n r: z.base64().meta({ description: \"Base64 encoded signature r coordinate\" }),\n s: z.base64().meta({ description: \"Base64 encoded signature s coordinate\" }),\n v: z\n .union([z.literal(0), z.literal(1)])\n .nullable()\n .meta({ description: \"Ecdsa only, signature recovery value\" }),\n der: zHexString.meta({\n description: \"Hex string encoded DER signature format (for eddsa, concatenation of r & s)\",\n }),\n pubkey: zHexString\n .nullable()\n .meta({ description: \"Public key for signature verification, 32 or 33 bytes\" }),\n});\n\nexport type HsmSignature = z.infer<typeof zHsmSignature>;\n\n// #endregion\n","import { ActivationStatus, type PrismaClient, type Workspace } from \"@prisma/client\";\nimport z from \"zod\";\n\nexport const zWorkspaceName = z\n .string()\n .min(1)\n .max(20)\n .regex(/^[a-z0-9]+$/);\n\nexport const getActiveWorkspaceOrThrow = async (\n name: string,\n prisma: PrismaClient,\n): Promise<Workspace> => {\n return prisma.workspace.findUniqueOrThrow({\n where: { name, status: ActivationStatus.ACTIVE },\n });\n};\n","import { PsdModel, UserRegistrationState, UserRole } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nexport const zUserName = z.string().min(1).max(19).meta({ description: \"User name\" });\n\nexport const zUserRegistrationCreateInput = z.object({\n name: zUserName,\n role: z.enum([UserRole.ADMIN, UserRole.OPERATOR]).meta({ description: \"User role\" }),\n psdModel: z.enum(PsdModel).meta({ description: \"PSD model\" }),\n deviceUserId: z.string().meta({ description: \"Device user ID\" }),\n});\n\nexport type UserRegistrationCreateInput = z.infer<typeof zUserRegistrationCreateInput>;\n\nexport const zUserRegistrationResponse = zUserRegistrationCreateInput.extend({\n id: z.string().meta({ description: \"User registration ID\" }),\n workspaceName: z.string().meta({ description: \"Workspace name\" }),\n state: z.enum(UserRegistrationState).meta({ description: \"User registration state\" }),\n isLocked: z.boolean().meta({ description: \"Whether the registration is locked by a request\" }),\n});\n\nexport type UserRegistrationResponse = z.infer<typeof zUserRegistrationResponse>;\n","import z from \"zod\";\n\nimport { zUserName } from \"./types\";\n\nexport const zCreatePsdUserRequestData = z.object({\n registrationId: z.string().meta({ description: \"User registration ID\" }),\n});\n\nexport type CreatePsdUserRequestData = z.infer<typeof zCreatePsdUserRequestData>;\n\nexport const zCreateApiUserRequestData = z\n .object({\n name: zUserName,\n pubKey: z\n .string()\n .regex(/^04[0-9a-fA-F]{128}$/)\n .meta({ description: \"Public key, uncompressed secp256r1 format\" }),\n role: z.enum([\"ADMIN\", \"OPERATOR\"]).meta({ description: \"User role\" }),\n viewAll: z.boolean().meta({ description: \"View all data\" }).optional(),\n })\n .meta({ description: \"Create API user request data\" });\n\nexport type CreateApiUserRequestData = z.infer<typeof zCreateApiUserRequestData>;\n\nexport const zCreateApiUserAccessRequestData = z\n .object({\n name: zUserName,\n })\n .meta({ description: \"Create API user credential request data\" });\n\nexport type CreateApiUserAccessRequestData = z.infer<typeof zCreateApiUserAccessRequestData>;\n\nexport const zCreateApiUserManagedData = z\n .object({\n authUserId: z.string().meta({ description: \"Authentication broker ID\" }),\n })\n .meta({ description: \"Managed data for API user\" });\n\nexport const zRevokeUserRequestData = z.object({});\n\nexport type RevokeUserRequestData = z.infer<typeof zRevokeUserRequestData>;\n\n// #endregion\n","import type { Group, Prisma, PrismaClient, ReviewConfig, User } from \"@prisma/client\";\nimport { isEqual, zip } from \"lodash-es\";\nimport { z } from \"zod\";\n\nimport type { GroupWithMembers } from \"@/groups\";\nimport { ensureNotNil, wrapToObjectsWithId } from \"@/utils\";\n\ntype UsersAndGroups = {\n users: User[];\n groups: GroupWithMembers[];\n};\n\nexport type ReviewConfigWithMembers = ReviewConfig & UsersAndGroups;\n\nexport const zReviewStepWithUsers = z\n .object({\n quorum: z.number().min(0).meta({ description: \"Number of required approvals for the step\" }),\n userIds: z.array(z.string().min(1)).meta({ description: \"User ids in the step\" }), // PKs to `User` model\n })\n .meta({ description: \"Review step with users\" });\n\nexport type ReviewStepWithUsers = z.infer<typeof zReviewStepWithUsers>;\n\nexport const zReviewStepWithUsersArray = z.array(zReviewStepWithUsers);\n\nexport const zReviewStepData = z.union([\n zReviewStepWithUsers,\n z\n .object({\n quorum: z.number().min(0).meta({ description: \"Number of required approvals for the step\" }),\n groupId: z.string().min(1).meta({ description: \"Group id in the step\" }), // PKs to `Group` model\n })\n .meta({ description: \"Review step with group\" }),\n]);\n\nexport type ReviewStepData = z.infer<typeof zReviewStepData>;\n\nexport const zReviewStepsArray = z\n .array(zReviewStepData)\n .min(1)\n .meta({ description: \"Review steps\" });\n\n/**\n * Compares two review steps arrays and return whether they are equivalent. They are equivalent\n * if they contain the same number of review steps, and for each review step, the quorum and\n * members (regardless of the order) are the same.\n */\nexport const reviewStepsAreEquivalent = (\n steps: ReviewStepData[],\n otherSteps: ReviewStepData[],\n): boolean => {\n if (steps.length !== otherSteps.length) {\n return false;\n }\n\n const isEquivalent = ([step, otherStep]: [\n ReviewStepData | undefined,\n ReviewStepData | undefined,\n ]): boolean => {\n // We should not see undefined as we should have already compared the length of the steps.\n /* v8 ignore if -- @preserve */\n if (step === undefined || otherStep === undefined) {\n return false;\n }\n if (step.quorum !== otherStep.quorum) {\n return false;\n }\n if (\"userIds\" in step && \"userIds\" in otherStep) {\n // The ordering is not important.\n return isEqual(step.userIds.slice().sort(), otherStep.userIds.slice().sort());\n }\n if (\"groupId\" in step && \"groupId\" in otherStep) {\n return step.groupId === otherStep.groupId;\n }\n // One has `userIds` while the other has `groupId`...\n return false;\n };\n\n return zip(steps, otherSteps).every(isEquivalent);\n};\n\n// Prisma arguments to connect (append) `ReviewConfig` to its related users and groups.\ntype ReviewConfigConnectionData = {\n users: { connect: { id: string }[] };\n groups: { connect: { id: string }[] };\n};\n\n/**\n * Given a data containing review steps, connect (append) the related users and groups.\n * This should be used only when creating a `ReviewConfig` in DB.\n *\n * Note: This function does NOT check if referenced users or groups exist in DB. If any of them\n * does not exist, prisma will throw an error when creating or updating objects in DB.\n */\nexport const connectReviewConfigData = <T extends { steps: ReviewStepData[] }>(\n data: T,\n): Omit<T, \"users\" | \"groups\"> & ReviewConfigConnectionData => {\n const { steps } = data;\n const userIds = steps.flatMap((step) => (\"userIds\" in step ? step.userIds : []));\n const groupIds = steps.flatMap((step) => (\"groupId\" in step ? [step.groupId] : []));\n return {\n ...data,\n users: { connect: wrapToObjectsWithId(userIds) },\n groups: { connect: wrapToObjectsWithId(groupIds) },\n };\n};\n\n// Prisma arguments to set (overwrite) `ReviewConfig` related users and groups.\ntype ReviewConfigSetData = {\n users: { set: { id: string }[] };\n groups: { set: { id: string }[] };\n};\n\n/**\n * Given a data containing review steps, set (overwrite) the related users and groups.\n * This should be used when updating a `ReviewConfig` in DB.\n *\n * Note: This function does NOT check if referenced users or groups exist in DB. If any of them\n * does not exist, prisma will throw an error when creating or updating objects in DB.\n */\nexport const setReviewConfigData = <T extends { steps: ReviewStepData[] }>(\n data: T,\n): Omit<T, \"users\" | \"groups\"> & ReviewConfigSetData => {\n const { steps } = data;\n const userIds = steps.flatMap((step) => (\"userIds\" in step ? step.userIds : []));\n const groupIds = steps.flatMap((step) => (\"groupId\" in step ? [step.groupId] : []));\n return {\n ...data,\n users: { set: wrapToObjectsWithId(userIds) },\n groups: { set: wrapToObjectsWithId(groupIds) },\n };\n};\n\nexport type EnrichedReviewConfig = Omit<ReviewConfigWithMembers, \"steps\"> & {\n steps: ReviewStepData[];\n};\n\nexport const enrichReviewConfig = (reviewConfig: ReviewConfigWithMembers): EnrichedReviewConfig => {\n const steps = zReviewStepsArray.parse(reviewConfig.steps);\n return {\n ...reviewConfig,\n steps,\n };\n};\n\nexport type ExpandedReviewStep = {\n quorum: number;\n users: User[];\n group: GroupWithMembers | null;\n};\n\n/**\n * Return a list of review steps, where each step is expanded to include the users and group.\n * If the step is a user step, the users array will contain the user.\n * If the step is a group step, the users array will be empty and the group will contain the group.\n */\nexport const expandReviewSteps = (reviewConfig: ReviewConfigWithMembers): ExpandedReviewStep[] => {\n const { steps } = enrichReviewConfig(reviewConfig);\n return steps.map((step) => {\n const { quorum } = step;\n let users: User[];\n let group: GroupWithMembers | null;\n if (\"userIds\" in step) {\n users = step.userIds.map((userId) =>\n ensureNotNil(reviewConfig.users.find((_) => _.id === userId)),\n );\n group = null;\n } else {\n users = [];\n group = ensureNotNil(reviewConfig.groups.find((_) => _.id === step.groupId));\n }\n return { quorum, users, group };\n });\n};\n\nexport const findReviewConfigs = async (\n prisma: PrismaClient,\n opts: { user: User; group?: never } | { user?: never; group: Group },\n): Promise<ReviewConfigWithMembers[]> => {\n const { user, group } = opts;\n const conditions = user\n ? [\n // find by user\n { users: { some: { id: user.id } } },\n { groups: { some: { members: { some: { id: user.id } } } } },\n ]\n : [\n // find by group\n { groups: { some: { id: group.id } } },\n ];\n return prisma.reviewConfig.findMany({\n where: { OR: conditions },\n include: {\n users: true,\n groups: { include: { members: true } },\n },\n });\n};\n\nexport const prepareQueryToRemoveUserFromReviewConfigs = (\n prisma: PrismaClient,\n reviewConfig: ReviewConfigWithMembers,\n user: User,\n): Prisma.PrismaPromise<ReviewConfig> => {\n const steps = zReviewStepsArray.parse(reviewConfig.steps);\n const updatedSteps = steps.map((step) => {\n /* v8 ignore else -- @preserve */\n if (\"userIds\" in step) {\n return { ...step, userIds: step.userIds.filter((id) => id !== user.id) };\n } else {\n return { ...step, groupId: step.groupId };\n }\n });\n\n return prisma.reviewConfig.update({\n where: { id: reviewConfig.id },\n data: {\n users: { disconnect: { id: user.id } },\n steps: updatedSteps,\n },\n });\n};\n","import type { Policy, Prisma } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { zGovernableAction } from \"@/types\";\nimport { zHsmObjectId, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- GovRuleJsonObject -----------------------------------------------------------\n\nexport const zThreshold = z\n .object({\n min: zUnsignedIntString.nullable().meta({ description: \"Minimum transaction amount\" }),\n max: zUnsignedIntString.nullable().meta({ description: \"Maximum transaction amount\" }),\n })\n .meta({ description: \"Threshold for the transaction value\" });\n\nexport type Threshold = z.infer<typeof zThreshold>;\n\nexport const zWhitelistIds = z\n .array(z.string().min(1))\n .meta({ description: \"IDs of whitelists for the recipient address\" });\n\n// Shape of the policy model rulesJsonArray field\nexport const zGovRuleJsonObject = z\n .object({\n // Required. TODO: Rename to `action`\n operationType: zGovernableAction.meta({ description: \"Allowed action\" }),\n // Optional threshold on transaction value: null `min` = 0, null `max` = +inf\n threshold: zThreshold,\n // Optional whitelist on transaction recipient: Empty list means no whitelist.\n whitelistIds: zWhitelistIds,\n reviewConfigId: z.string().min(1).meta({ description: \"Id of ReviewConfig\" }),\n // HSM id for the rule\n hsmId: zHsmObjectId,\n })\n .meta({ description: \"INTERNAL: Governance rule JSON representation in DB\" });\n\nexport type GovRuleJsonObject = z.infer<typeof zGovRuleJsonObject>;\n\nexport const zGovRulesJsonArray = z.array(zGovRuleJsonObject);\n\n// #endregion\n\ntype PolicyJsonFields = { rulesJsonArray: Prisma.JsonValue };\n\nexport type ParsedPolicy<T extends PolicyJsonFields = Policy> = Omit<T, \"rulesJsonArray\"> & {\n rulesJsonArray: GovRuleJsonObject[];\n};\n\nexport const parseFields = <T extends PolicyJsonFields>(policy: T): ParsedPolicy<T> => {\n const rulesJsonArray = zGovRulesJsonArray.parse(policy.rulesJsonArray);\n return { ...policy, rulesJsonArray };\n};\n","import z from \"zod\";\n\nexport const zNote = z.object({\n title: z.string().meta({ description: \"Note title\" }),\n content: z.string().meta({ description: \"Note content\" }),\n});\n\nexport type Note = z.infer<typeof zNote>;\n","import { AllowedAction } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport type { TypeEquals } from \"@/type-utils\";\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- GovernableAction by type ----------------------------------------------------\n\nconst zValueTransactionAction = z.enum([\n AllowedAction.SEND,\n AllowedAction.STAKE,\n AllowedAction.DEPLOY_CONTRACT,\n AllowedAction.EXECUTE_CONTRACT,\n AllowedAction.ACTIVATE_TOKEN,\n]);\n\nexport const zValueTransactionIntent = z.object({\n type: zValueTransactionAction,\n currency: zCurrencyString,\n recipient: z.string().nonempty(),\n destinationTag: z.string().nonempty().optional(),\n value: zUnsignedIntString,\n});\n\nexport type ValueTransactionIntent = z.infer<typeof zValueTransactionIntent>;\n\nconst zReceiveAction = z.enum([AllowedAction.RECEIVE]);\n\nexport const zReceiveIntent = z.object({\n type: zReceiveAction,\n currency: zCurrencyString,\n sender: z.string().nonempty(),\n value: zUnsignedIntString.nullable(), // null means \"any value\"\n verdict: z.enum([\"ACCEPT\", \"REJECT\"]),\n});\n\nconst zSigningAction = z.enum([AllowedAction.SIGN_MESSAGE, AllowedAction.SIGN_DIGESTS]);\n\nexport const zSigningIntent = z.object({\n type: zSigningAction,\n});\n\nexport type SigningIntent = z.infer<typeof zSigningIntent>;\n\n// #endregion\n\n// #region ---------- Classic and raw-signing -----------------------------------------------------\n\n/** Governable action that is allowed on an account with `CLASSIC` governance type */\nexport const zClassicAction = z.enum([\n AllowedAction.SEND,\n AllowedAction.STAKE,\n AllowedAction.DEPLOY_CONTRACT,\n AllowedAction.EXECUTE_CONTRACT,\n AllowedAction.SIGN_MESSAGE,\n AllowedAction.ACTIVATE_TOKEN,\n AllowedAction.RECEIVE,\n]);\n\nexport type ClassicAction = z.infer<typeof zClassicAction>;\n\n/** Governable action that is allowed on an account with `RAW_SIGNING` governance type */\nexport const zRawSigningAction = z.enum([AllowedAction.SIGN_DIGESTS]);\n\nexport type RawSigningAction = z.infer<typeof zRawSigningAction>;\n\n// #endregion\n\n// #region ---------- GovernableIntent ------------------------------------------------------------\n\nexport const zGovernableAction = z.enum([\n ...zValueTransactionAction.options,\n ...zReceiveAction.options,\n ...zSigningAction.options,\n]);\n\nexport type GovernableAction = z.infer<typeof zGovernableAction>;\n\n/**\n * Governance-relevant description of an operation on an account.\n *\n * This \"intent\" isn't a full representation of the underlying operation.\n * It only contains the fields required to evaluate governance rules and\n * determine which rule applies.\n */\nexport const zGovernableIntent = z.discriminatedUnion(\"type\", [\n zValueTransactionIntent,\n zReceiveIntent,\n zSigningIntent,\n]);\n\nexport type GovernableIntent = z.infer<typeof zGovernableIntent>;\n\n// #endregion\n\n// #region ---------- Utilities -------------------------------------------------------------------\n\nexport const isValueTransactionIntent = (\n intent: GovernableIntent,\n): intent is ValueTransactionIntent => {\n const validActions: GovernableIntent[\"type\"][] = zValueTransactionAction.options;\n return validActions.includes(intent.type);\n};\n\n// #endregion\n\n/* v8 ignore next -- @preserve */\n// This function is only used for type-checking.\nconst _ensureGovernableAction = (\n shouldBeTrue: TypeEquals<GovernableAction, ClassicAction | RawSigningAction>,\n): true => shouldBeTrue;\n","export const INCLUDE_MEMBERS = {\n users: true,\n groups: {\n include: { members: true },\n },\n};\n","import z from \"zod\";\n\nexport const zUpdateQuorumRequestData = z.object({\n quorum: z.number().int().min(2).meta({ description: \"Workspace quorum\" }),\n});\n\nexport type UpdateQuorumRequestData = z.infer<typeof zUpdateQuorumRequestData>;\n","import { AdminPermission } from \"@prisma/client\";\nimport { omit } from \"lodash-es\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"./review-config\";\n\nexport const NonRootAdminPermission = omit(AdminPermission, \"ROOT\");\n\n// A non-root admin gov rule is uniquely identified by its permission\nexport const zWorkspaceRuleRequestData = z.object({\n permission: z.enum(NonRootAdminPermission).meta({ description: \"Granted permissions\" }),\n reviewConfig: zReviewStepWithUsersArray.meta({ description: \"List of admin review steps\" }),\n});\n\nexport type WorkspaceRuleRequestData = z.infer<typeof zWorkspaceRuleRequestData>;\n","import z from \"zod\";\n\nimport type { TransactionResponse } from \"@/networks\";\nimport { zTransactionResponse } from \"@/networks\";\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\n\nexport const zTransactionWithMetaResponse = z.discriminatedUnion(\n zTransactionResponse._zod.def.discriminator,\n ensureNonEmptyArray(\n zTransactionResponse.options.map((_) => _.extend({ note: zNote.nullable() })),\n ),\n);\n\nexport type TransactionWithMetaResponse = z.infer<typeof zTransactionWithMetaResponse>;\n\nexport { type TransactionResponse, zTransactionResponse };\n","import type { Account } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport type { CantonTransferProposal } from \"@/networks\";\nimport { zCantonTransferProposal } from \"@/networks\";\n\nexport const zPreApprovalState = z\n .discriminatedUnion(\"enabled\", [\n z.object({\n enabled: z.literal(true).meta({ description: \"Pre-approval is enabled\" }),\n contractId: z.string().meta({ description: \"ID of the pre-approval contract\" }),\n expiresAt: z.coerce\n .date()\n .meta({ description: \"Timestamp when the pre-approval expires and becomes invalid\" }),\n lastRenewedAt: z.coerce\n .date()\n .meta({ description: \"Timestamp of the most recent renewal of the pre-approval\" }),\n provider: z\n .string()\n .meta({ description: \"Validator that issued and manages the pre-approval\" }),\n recipient: z\n .string()\n .meta({ description: \"Party that authorizes the pre-approval to receive transfers\" }),\n validFrom: z.coerce\n .date()\n .meta({ description: \"Timestamp when the pre-approval becomes effective\" }),\n }),\n z.object({\n enabled: z.literal(false).meta({ description: \"Pre-approval is not enabled\" }),\n }),\n ])\n .meta({\n description: \"Pre-approval state of the account\",\n });\n\nexport type PreApprovalState = z.infer<typeof zPreApprovalState>;\n\nexport const zTransferProposal = zCantonTransferProposal;\n\nexport type TransferProposal = CantonTransferProposal;\n\nexport type Extras = {\n getPreApprovalState: (account: Account) => Promise<PreApprovalState>;\n getTransferProposals: (account: Account) => Promise<TransferProposal[]>;\n};\n","import z from \"zod\";\n\nimport { zWorkspaceName } from \"@/workspaces\";\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nexport const zTradelinkWhitelistAddress = z.object({\n name: z.string().min(1),\n currency: zCurrencyString,\n address: z.string().min(1),\n});\n\nexport type TradelinkWhitelistAddress = z.infer<typeof zTradelinkWhitelistAddress>;\n\nexport const zTradelinkWhitelist = z.array(zTradelinkWhitelistAddress);\n\nconst zTradelinkId = z.string().meta({ description: \"Unique identifier in Tradelink service\" });\n\nexport type TradelinkId = z.infer<typeof zTradelinkId>;\n\nexport const zTradelinkOrgEntityResponse = z.object({\n tradelinkId: zTradelinkId,\n name: z.string().meta({ description: \"Name\" }),\n code: z.string().meta({ description: \"Code\" }),\n logoUrl: z.string().meta({ description: \"Logo URL\" }),\n});\n\nexport type TradelinkOrgEntityResponse = z.infer<typeof zTradelinkOrgEntityResponse>;\n\nexport const zCreateTradelinkOrgEntityInput = zTradelinkOrgEntityResponse.omit({\n tradelinkId: true,\n});\n\nexport type CreateTradelinkOrgEntityInput = z.infer<typeof zCreateTradelinkOrgEntityInput>;\n\nexport const zDeleteTradelinkOrgEntityInput = z.object({\n tradelinkId: zTradelinkId,\n});\n\nexport type DeleteTradelinkExchangeInput = z.infer<typeof zDeleteTradelinkOrgEntityInput>;\n\nconst zTradelinkExchangeConfig = z.object({\n exchangeId: z.string().meta({ description: \"Tradelink exchange id\" }),\n repledgeAuthorized: z.boolean().meta({\n description: \"Determines whether this exchange is authorized to repledge on this account\",\n }),\n needsAssetManagerApprovalForSettlements: z.boolean().meta({\n description:\n 'Determines whether asset manager will \"pre-approve\" the settlement requests on this account',\n }),\n});\n\nexport type TradelinkExchangeConfig = z.infer<typeof zTradelinkExchangeConfig>;\n\nexport const zTradelinkExchangeConfigs = z.array(zTradelinkExchangeConfig);\n\nexport type TradelinkExchangeConfigs = z.infer<typeof zTradelinkExchangeConfigs>;\n\nexport const zCreateTradelinkNetworkBlueprintInput = z.object({\n workspaceName: zWorkspaceName,\n custodian: z.object({ name: z.string() }),\n assetManagers: z.array(z.object({ name: z.string() })),\n exchanges: z.array(z.object({ name: z.string() })),\n});\nexport type CreateTradelinkNetworkBlueprintInput = z.infer<\n typeof zCreateTradelinkNetworkBlueprintInput\n>;\n\nexport const zTradelinkNetworkBlueprintResponse = z.object({\n tradelinkId: z.string(),\n workspaceName: zWorkspaceName,\n custodian: zTradelinkOrgEntityResponse,\n assetManagers: z.array(zTradelinkOrgEntityResponse),\n exchanges: z.array(zTradelinkOrgEntityResponse),\n});\nexport type TradelinkNetworkBlueprintResponse = z.infer<typeof zTradelinkNetworkBlueprintResponse>;\n\n// #region ---------- Pledge ----------------------------------------------------------------------\n\nconst zTradelinkAsset = z.object({\n name: z.string(),\n magnitude: z.number().int().nonnegative(),\n});\n\nexport type TradelinkAsset = z.infer<typeof zTradelinkAsset>;\n\nexport const zPledgeResponse = z.object({\n tradelinkId: zTradelinkId,\n asset: zTradelinkAsset,\n state: z.enum([\n \"PLEDGE_READY\",\n \"PLEDGE_INCREMENT_PENDING_APPROVAL\",\n \"PLEDGE_APPROVED\",\n \"PLEDGE_REJECTED\",\n \"UNPLEDGE_PENDING_APPROVAL\",\n \"UNPLEDGE_APPROVED\",\n \"UNPLEDGE_REJECTED\",\n \"REPLEDGE_PENDING_APPROVAL\",\n \"REPLEDGE_APPROVED\",\n \"REPLEDGE_REJECTED\",\n \"ASSIGNED_TO_SETTLEMENT\",\n \"OUTBOUND_TRANSACTION_CONFIRMED\",\n \"OUTBOUND_TRANSACTION_FAILED\",\n \"RECOVERING_FROM_FAILURE\",\n \"PLEDGE_CONSUMED\",\n ]),\n isLocked: z.boolean(),\n amount: z.string().meta({ description: \"Currently pledged amount\" }),\n pending: z.string().meta({ description: \"Requested pledge increment, not yet approved\" }),\n repledge: z.string().meta({ description: \"TODO: describe this field\" }),\n exchangeTradelinkId: z.string(),\n accountId: z.string(),\n});\n\nexport type PledgeResponse = z.infer<typeof zPledgeResponse>;\n\nexport const zCreatePledgeInput = z.object({\n workspaceName: z.string(),\n clientAccountId: z.string().meta({ description: \"Account ID from the client side\" }),\n exchangeTradelinkId: zTradelinkId,\n asset: zTradelinkAsset,\n});\n\nexport type CreatePledgeInput = z.infer<typeof zCreatePledgeInput>;\n\nexport const zPledgeAdjustmentInput = z.object({\n pledgeTradelinkId: zTradelinkId,\n amount: zUnsignedIntString,\n asset: zTradelinkAsset,\n});\n\nexport type PledgeAdjustmentInput = z.infer<typeof zPledgeAdjustmentInput>;\n\nexport const zSettlementResponse = z.object({\n tradelinkId: z.string(),\n pledgeTradelinkId: z.string(),\n state: z.enum([\n \"REGISTERED\",\n \"PENDING_REPLEDGE_CREATION_APPROVAL\",\n \"PENDING_REPLEDGE_APPROVAL\",\n \"PENDING_CREATION_APPROVAL\",\n \"PENDING_PRE_APPROVAL\",\n \"PRE_APPROVED\",\n \"APPROVED\",\n \"REJECTED\",\n \"CONFIRMED\",\n \"FAILED\",\n \"CANCELED\",\n ]),\n // For now we only consider the outbound settlement\n outboundTransactionHash: z.string().nullable(),\n});\n\nexport type SettlementResponse = z.infer<typeof zSettlementResponse>;\n\n// #endregion\n","import { RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"@/governance\";\nimport { zSendOnlyTransactionData } from \"@/networks\";\nimport { zIntString } from \"@/zod-utils\";\n\nimport { zTradelinkWhitelistAddress } from \"./types\";\n\nexport const zTradelinkActivateAccountRequestData = z.null();\n\nexport type TradelinkActivateAccountRequestData = z.infer<\n typeof zTradelinkActivateAccountRequestData\n>;\n\nexport const zTradelinkCustodianRequestData = z.object({\n settlement: zReviewStepWithUsersArray.meta({ description: \"List of settlement review steps\" }),\n withdraw: zReviewStepWithUsersArray.meta({ description: \"List of withdraw review steps\" }),\n arbitration: zReviewStepWithUsersArray.meta({ description: \"List of arbitration review steps\" }),\n});\n\nexport type TradelinkCustodianRequestData = z.infer<typeof zTradelinkCustodianRequestData>;\n\nexport const zTradelinkEntityRequestData = z.object({\n tradelinkId: z.string().min(1),\n groups: zReviewStepWithUsersArray.meta({ description: \"List of asset manager review groups\" }),\n whitelist: z\n .array(zTradelinkWhitelistAddress)\n .meta({ description: \"List of asset manager whitelisted addresses\" }),\n});\n\nexport type TradelinkEntityRequestData = z.infer<typeof zTradelinkEntityRequestData>;\n\n// #region ---------- Tradelink operations --------------------------------------------------------\n\nexport const zTradelinkAdjustPledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n amount: zIntString.meta({ description: \"Amount to add to pledge\" }),\n});\n\nexport type TradelinkAdjustPledgeRequestData = z.infer<typeof zTradelinkAdjustPledgeRequestData>;\n\nexport const zTradelinkRepledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n amount: zIntString.meta({ description: \"Amount to add to pledge\" }),\n});\n\nexport type TradelinkRepledgeRequestData = z.infer<typeof zTradelinkRepledgeRequestData>;\n\nexport const zTradelinkCreateSettlementRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkCreateSettlementRequestData = z.infer<\n typeof zTradelinkCreateSettlementRequestData\n>;\n\nexport const zTradelinkForceUnpledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n});\n\nexport type TradelinkForceUnpledgeRequestData = z.infer<typeof zTradelinkForceUnpledgeRequestData>;\n\nexport const zTradelinkWithdrawRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkWithdrawRequestData = z.infer<typeof zTradelinkWithdrawRequestData>;\n\nexport const zTradelinkArbitrationRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkArbitrationRequestData = z.infer<typeof zTradelinkArbitrationRequestData>;\n\n// #endregion\n\nexport const zTradelinkRequestMixinsByType = {\n [RequestType.TRADELINK_ACTIVATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.TRADELINK_ACTIVATE_ACCOUNT),\n targetId: z.string(),\n data: zTradelinkActivateAccountRequestData,\n }),\n [RequestType.TRADELINK_CREATE_CUSTODIAN]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_CUSTODIAN),\n data: zTradelinkCustodianRequestData,\n }),\n [RequestType.TRADELINK_EDIT_CUSTODIAN]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_CUSTODIAN),\n targetId: z.string(),\n data: zTradelinkCustodianRequestData,\n }),\n [RequestType.TRADELINK_CREATE_EXCHANGE]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_EXCHANGE),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_EDIT_EXCHANGE]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_EXCHANGE),\n targetId: z.string(),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_CREATE_ASSET_MANAGER]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_ASSET_MANAGER),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_EDIT_ASSET_MANAGER]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_ASSET_MANAGER),\n targetId: z.string(),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_ADJUST_PLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_ADJUST_PLEDGE),\n data: zTradelinkAdjustPledgeRequestData,\n }),\n [RequestType.TRADELINK_REPLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_REPLEDGE),\n data: zTradelinkRepledgeRequestData,\n }),\n [RequestType.TRADELINK_CREATE_SETTLEMENT]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_SETTLEMENT),\n data: zTradelinkCreateSettlementRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.TRADELINK_FORCE_UNPLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_FORCE_UNPLEDGE),\n data: zTradelinkForceUnpledgeRequestData,\n }),\n [RequestType.TRADELINK_WITHDRAW]: z.object({\n type: z.literal(RequestType.TRADELINK_WITHDRAW),\n data: zTradelinkWithdrawRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.TRADELINK_ARBITRATE]: z.object({\n type: z.literal(RequestType.TRADELINK_ARBITRATE),\n data: zTradelinkArbitrationRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n} as const satisfies Record<RequestType & `TRADELINK_${string}`, unknown>;\n","import { AccountGovernanceType } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\n\nconst zClassicAccountGovernanceFields = z\n .object({\n type: z\n .literal(AccountGovernanceType.CLASSIC)\n .meta({ description: \"Classic account governance\" }),\n policyId: z.string().meta({ description: \"Identifier of corresponding governance policy\" }),\n })\n .meta({ description: \"Classic\" });\n\nconst zTradelinkAccountGovernanceFields = z\n .object({\n type: z\n .literal(AccountGovernanceType.TRADELINK)\n .meta({ description: \"Tradelink account governance\" }),\n assetManagerId: z.string().meta({ description: \"Identifier of corresponding asset manager\" }),\n exchangeConfigs: zTradelinkExchangeConfigs.meta({\n description: \"Tradelink exchange configurations\",\n }),\n })\n .meta({ description: \"Tradelink\" });\n\nexport const zAccountGovernanceFields = z\n .discriminatedUnion(\"type\", [zClassicAccountGovernanceFields, zTradelinkAccountGovernanceFields])\n .meta({ description: \"Governance fields\" });\n\nexport type AccountGovernanceFields = z.infer<typeof zAccountGovernanceFields>;\n","import { AccountType, ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zAccountLiveData, zCommonLiveData, zNetworkAssetFields } from \"@/networks\";\nimport { zCurrency, zCurrencyString, zIntString, zNetwork } from \"@/zod-utils\";\n\nimport { zAccountGovernanceFields } from \"./account-governance-fields\";\n\nexport const zAccountCommonFields = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Name\" }),\n currency: zCurrencyString,\n network: zNetwork,\n contractAddress: z\n .string()\n .nullable()\n .meta({ description: \"Token contract address for Token account\" }),\n tokenIdentifier: z\n .string()\n .nullable()\n .meta({ description: \"Token identifier for Token account\" }),\n index: z.number().gte(0).meta({ description: \"BIP44 account index\" }),\n derivationPath: z.string().meta({ description: \"Derivation path\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Status\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nconst zRawSigningAssetFields = z\n .object({ type: z.literal(AccountType.RAW_SIGNING).meta({ description: \"Account type\" }) })\n .meta({ description: \"Raw signing account\" });\n\nexport const zAccountAssetFields = z\n .discriminatedUnion(\"type\", [zRawSigningAssetFields, ...zNetworkAssetFields.options])\n .meta({ description: \"Account asset fields\" });\n\nexport type AccountAssetFields = z.infer<typeof zAccountAssetFields>;\n\nexport const zAccountResponse = zAccountCommonFields.extend({\n asset: zAccountAssetFields,\n governance: zAccountGovernanceFields,\n});\n\nexport type AccountResponse = z.infer<typeof zAccountResponse>;\n\nexport const zAccountSortBy = z\n .enum([\n \"name\",\n \"currency\",\n \"index\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof AccountResponse)[])\n .default(\"createdAt\");\n\nexport type AccountSortBy = z.infer<typeof zAccountSortBy>;\n\nconst zRawSigningLiveData = zCommonLiveData\n .extend({\n type: z.literal(AccountType.RAW_SIGNING).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Raw signing account\" });\n\nexport const zAccountLiveDataResponse = z.discriminatedUnion(\"type\", [\n zRawSigningLiveData,\n ...zAccountLiveData.options,\n]);\n\nexport type AccountLiveDataResponse = z.infer<typeof zAccountLiveDataResponse>;\n\nexport const zAccountFreshAddress = z.object({\n address: z.string().meta({ description: \"Address\" }),\n derivationPath: z.string().nullable().meta({ description: \"Derivation path\" }),\n});\n\nexport type AccountFreshAddress = z.infer<typeof zAccountFreshAddress>;\n\nexport const zBalance = z.object({\n amount: zIntString.meta({ description: \"Amount in the smallest unit of the currency\" }),\n currency: zCurrency,\n});\n\nexport type Balance = z.infer<typeof zBalance>;\n\nexport const zStake = z.object({\n id: z.string().nonempty().meta({ description: \"Staking position ID (if applicable)\" }),\n validator: z.string().nonempty().meta({ description: \"Validator address\" }),\n state: z\n .enum([\"ACTIVE\", \"INACTIVE\", \"ACTIVATING\", \"DEACTIVATING\", \"UNKNOWN\"])\n .meta({ description: \"Stake state\" }),\n staked: z.string().meta({ description: \"Staked amount\" }),\n rewards: z.object({\n total: z.string().meta({ description: \"Total rewards\" }),\n }),\n});\n\nexport type Stake = z.infer<typeof zStake>;\n\nexport const zStakeSortBy = z.enum([\"staked\", \"rewards\", \"total\"]).default(\"total\");\n\nexport type StakeSortBy = z.infer<typeof zStakeSortBy>;\n\nexport const zStakingValidator = z.object({\n address: z.string().meta({ description: \"Validator address\" }),\n apy: z.string().nullable().meta({ description: \"Validator APY\" }),\n balance: z.string().nullable().meta({ description: \"Validator balance\" }),\n commissionRate: z.string().nullable().meta({ description: \"Validator commission rate\" }),\n description: z.string().nullable().meta({ description: \"Description\" }),\n logo: z.string().nullable().meta({ description: \"Logo URL\" }),\n name: z.string().nullable().meta({ description: \"Validator name\" }),\n url: z.string().nullable().meta({ description: \"Validator URL\" }),\n});\n\nexport type StakingValidator = z.infer<typeof zStakingValidator>;\n\nexport const zStakingValidatorSortBy = z\n .enum([\"balance\"] as const satisfies (keyof StakingValidator)[])\n .default(\"balance\");\n\nexport type StakingValidatorSortBy = z.infer<typeof zStakingValidatorSortBy>;\n","import { MessageType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zHsmSignature } from \"@/hsm\";\nimport { zHexString } from \"@/zod-utils\";\n\n// #region ---------- Message Signing -------------------------------------------------------------\n\nexport const zMessageType = z\n .enum(MessageType)\n .meta({ description: \"Type of the message to sign\" });\n\nexport const zMessageData = zHexString.nonempty().meta({\n description: \"Hex data to sign, either a json string for EIP712, or a raw string for other types\",\n});\n\n// TODO: Rename? \"message\" is a too generic word...\nexport const zMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"EIP191\"),\n data: zMessageData,\n }),\n z.object({\n type: z.literal(\"EIP712\"),\n data: zMessageData, // TODO: put a proper EIP712 schema\n }),\n z.object({\n type: z.literal(\"CIP8\"),\n data: zMessageData,\n signingKey: z.literal([\"PAYMENT\", \"STAKE\"]).meta({ description: \"CIP-8 signing key\" }),\n }),\n z.object({\n type: z.literal(\"BIP137\"),\n data: zMessageData,\n }),\n]);\n\nexport type Message = z.infer<typeof zMessage>;\n\nexport const zSignedMessageResponse = z\n .object({\n id: z.string().meta({ description: \"Unique identifier\" }),\n type: zMessageType,\n data: zMessageData,\n address: z.string().meta({ description: \"Address of the signing key\" }),\n derivationPath: z.string().meta({ description: \"Derivation path of the signing key\" }),\n signature: zHsmSignature.meta({ description: \"Signature of the message\" }),\n createdById: z.string().meta({ description: \"ID of the creator\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n })\n .meta({ description: \"Signed message\", id: \"SignedMessageResponse\" });\n\nexport type SignedMessageResponse = z.infer<typeof zSignedMessageResponse>;\n\n// #endregion\n","import z from \"zod\";\n\nimport { zHsmSignature } from \"@/hsm\";\nimport { zTransactionData } from \"@/networks\";\nimport { zHexString } from \"@/zod-utils\";\n\nimport { zMessage } from \"./types\";\n\n/**\n * Schema of `Request.data` for `CREATE_TRANSACTION` request.\n */\nexport const zCreateTransactionRequestData = z\n .object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n transaction: zTransactionData,\n })\n .meta({\n description: \"Create transaction request data\",\n id: \"CreateTransactionRequestData\",\n });\n\nexport type CreateTransactionRequestData = z.infer<typeof zCreateTransactionRequestData>;\n\n// #region ---------- SIGN_MESSAGE ----------------------------------------------------------------\n\nexport const zSignMessageRequestData = z.object({\n message: zMessage.meta({ description: \"Message to sign\" }),\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n address: z.string().nonempty().meta({ description: \"Address with which to sign the message\" }),\n derivationPath: z\n .string()\n .nonempty()\n .meta({ description: \"Derivation path of the signing address\" }),\n});\n\nexport type SignMessageRequestData = z.infer<typeof zSignMessageRequestData>;\n\nexport const zSignMessageUserInputData = zSignMessageRequestData.partial({\n address: true,\n derivationPath: true,\n});\n\nexport type SignMessageUserInputData = z.infer<typeof zSignMessageUserInputData>;\n\n// #endregion\n\n// #region ---------- SIGN_DIGESTS ----------------------------------------------------------------\n\nexport const zDigestData = z.object({\n digest: zHexString.meta({ description: \"The hex string digest to sign\" }),\n derivationPath: z\n .string()\n .nonempty()\n .meta({ description: \"The derivation path with which to sign the digest\" }),\n});\n\nexport type DigestData = z.infer<typeof zDigestData>;\n\nexport const zSignDigestsRequestData = z.object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n digests: z.array(zDigestData).meta({ description: \"The digests to sign\" }),\n});\n\nexport type SignDigestsRequestData = z.infer<typeof zSignDigestsRequestData>;\n\nexport const zSignDigestsManagedData = z.object({\n signatures: z.array(zHsmSignature),\n});\n\nexport type SignDigestsManagedData = z.infer<typeof zSignDigestsManagedData>;\n\n// #endregion\n","import z from \"zod\";\n\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\n\nimport { zTransactionResponse } from \"./clients/types\";\nimport { Canton } from \"./les-wallet/extra-types\";\n\nexport { zGovernableAction } from \"@/types\";\n\n// re-export TransactionResponse from clients\nexport type { TransactionResponse } from \"./clients/types\";\nexport {\n type AccountFreshAddress,\n type AccountLiveDataResponse,\n type AccountResponse,\n type AccountSortBy,\n zAccountFreshAddress,\n zAccountLiveDataResponse,\n zAccountResponse,\n zAccountSortBy,\n zBalance,\n zStake,\n zStakeSortBy,\n zStakingValidator,\n zStakingValidatorSortBy,\n} from \"./types\";\n\nexport const zTransactionWithMetaResponse = z.discriminatedUnion(\n zTransactionResponse._zod.def.discriminator,\n ensureNonEmptyArray(\n zTransactionResponse.options.map((_) =>\n _.extend({\n note: zNote.nullable().meta({ description: \"Optional transaction note\" }),\n requestId: z\n .string()\n .nullable()\n .meta({ description: \"Request ID associated with the transaction, if available\" }),\n }),\n ),\n ),\n);\n\nexport type TransactionWithMetaResponse = z.infer<typeof zTransactionWithMetaResponse>;\n\nexport { zEstimatedFees as zEstimateFeesResponse } from \"@/networks\";\nexport { zSignedMessageResponse } from \"@/transactions\";\n\nexport const zCantonPreApprovalStateResponse = Canton.zPreApprovalState;\nexport const zCantonTransferProposalResponse = Canton.zTransferProposal;\n","import type { Whitelist } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nexport const zWhitelistAddress = z.object({\n name: z.string().min(1).max(50),\n currency: zCurrencyString,\n address: z.string().min(1).max(200),\n // Destination tags are numeric-only or alpha-numeric.\n // Empty array (or undefined) means no check on destination tag.\n destinationTags: z.array(z.string().min(1).regex(/^\\w+$/)).optional(),\n});\n\nexport const zWhitelistAddresses = z.array(zWhitelistAddress);\n\nexport type WhitelistAddress = z.infer<typeof zWhitelistAddress>;\n\nexport type Destination = {\n currency: string;\n recipient: string;\n destinationTag?: string;\n};\n\nexport const isWhitelisted = (destination: Destination, whitelist: Whitelist): boolean => {\n const addresses = zWhitelistAddresses.parse(whitelist.addresses);\n return addresses.some(\n (whitelisted) =>\n whitelisted.currency === destination.currency &&\n whitelisted.address === destination.recipient &&\n // If no destination tags, it means all tags are allowed.\n (!whitelisted.destinationTags ||\n whitelisted.destinationTags.length === 0 ||\n whitelisted.destinationTags.includes(destination.destinationTag ?? \"\")),\n );\n};\n","import { WhitelistType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zWhitelistAddresses } from \"./db-types\";\n\n// FIXME unify the different max length of object names\n// there is some inconsistencies right now between front<>gate and what is actually\n// possible on a real device screen\n//\n// for now, putting 45 to unlock Gate sync\n// see https://ledger.slack.com/archives/C05RD1RKUSV/p1719320103721699\n//\nexport const zWhitelistName = z.string().min(1).max(45).meta({ description: \"Whitelist name\" });\n\nexport const zCreateWhitelistRequestData = z.object({\n name: zWhitelistName,\n description: z.string().nullable(),\n addresses: zWhitelistAddresses,\n type: z.enum(WhitelistType),\n});\n\nexport type CreateWhitelistRequestData = z.infer<typeof zCreateWhitelistRequestData>;\n\n// FIXME should we allow edit of description? probably yes\nexport const zEditWhitelistRequestData = z.object({\n name: zWhitelistName,\n addresses: zWhitelistAddresses,\n});\n\nexport type EditWhitelistRequestData = z.infer<typeof zEditWhitelistRequestData>;\n","import type { Policy, PrismaClient, User, Whitelist } from \"@prisma/client\";\nimport { ReviewConfigType } from \"@prisma/client\";\nimport invariant from \"invariant\";\nimport { uniq } from \"lodash-es\";\nimport z from \"zod\";\n\nimport type { EnrichedReviewConfig, ReviewConfigWithMembers } from \"@/governance\";\nimport {\n connectReviewConfigData,\n enrichReviewConfig,\n expandReviewSteps,\n zReviewStepsArray,\n} from \"@/governance\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport type { HsmObjectId } from \"@/hsm\";\nimport { PolicyModel, ReviewConfigModel } from \"@/prisma-utils\";\nimport type { GovernableIntent } from \"@/types\";\nimport { isValueTransactionIntent, zClassicAction, zGovernableAction } from \"@/types\";\nimport { ensureNotNil, uniqById } from \"@/utils\";\nimport { isWhitelisted } from \"@/whitelists\";\n\n// #region ---------- Public schema for governance rules ------------------------------------------\n\nconst zBaseGovRuleData = z.object({\n // Steps of users that will need to review operations\n reviewSteps: zReviewStepsArray,\n // Optional threshold on transaction value: null `min` = 0, null `max` = +inf\n threshold: PolicyModel.zThreshold.optional(),\n // Optional whitelist on transaction recipient: Empty list means no whitelist.\n whitelistIds: PolicyModel.zWhitelistIds.optional(),\n});\n\n// Used when creating/editing classic governance rules (non digest signing)\nexport const zClassicGovRuleData = zBaseGovRuleData\n .extend({\n operationType: zClassicAction.meta({ description: \"Allowed action\" }),\n })\n .meta({ description: \"Account governance rule\", id: \"ClassicGovRuleData\" });\n\nexport type ClassicGovRuleData = z.infer<typeof zClassicGovRuleData>;\n\n/**\n * Public facing governance rule response shape, facing clients and used in API.\n */\nexport const zGovRuleData = zBaseGovRuleData\n .extend({\n operationType: zGovernableAction.meta({ description: \"Allowed action\" }),\n })\n .meta({ description: \"Governance rule\", id: \"GovRuleResponse\" });\n\nexport type GovRuleData = z.infer<typeof zGovRuleData>;\n\n// #endregion\n\n// #region ---------- Utilities -------------------------------------------------------------------\n\n// TODO: Should be set with no duplicates!\nexport type PolicyRelatedObjects = {\n whitelists: Whitelist[];\n reviewConfigs: ReviewConfigWithMembers[];\n};\n\n/** Constant to be used with `prisma.policy` to include all the related objects of a policy. */\nexport const INCLUDE_POLICY_RELATED_OBJECTS = {\n whitelists: true,\n reviewConfigs: { include: ReviewConfigModel.INCLUDE_MEMBERS },\n};\n\n/** `Policy` with related objects. */\nexport type PolicyWithRelatedObjects = Policy & PolicyRelatedObjects;\n\n/** Extract individual users and groups (with members) from a policy. */\nexport const getPolicyUsersAndGroups = (\n policy: Omit<PolicyWithRelatedObjects, \"whitelists\">,\n): {\n users: User[];\n groups: GroupWithMembers[];\n} => {\n const users = uniqById(policy.reviewConfigs.flatMap((_) => _.users));\n const groups = uniqById(policy.reviewConfigs.flatMap((_) => _.groups));\n return { users, groups };\n};\n\n/** Extract members (individual users and group members) from a policy. */\nexport const getPolicyMembers = (policy: Omit<PolicyWithRelatedObjects, \"whitelists\">): User[] => {\n const { users, groups } = getPolicyUsersAndGroups(policy);\n return uniqById(users.concat(groups.flatMap((_) => _.members)));\n};\n\nexport const createGovRule = async (\n workspaceName: string,\n rule: GovRuleData,\n hsmId: string,\n prisma: PrismaClient,\n): Promise<PolicyModel.GovRuleJsonObject> => {\n const { operationType, reviewSteps, threshold, whitelistIds } = {\n threshold: { min: null, max: null },\n whitelistIds: [],\n ...rule,\n };\n const reviewConfig = await prisma.reviewConfig.create({\n data: connectReviewConfigData({\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n steps: reviewSteps,\n ownerPolicyId: null,\n }),\n include: ReviewConfigModel.INCLUDE_MEMBERS,\n });\n const reviewConfigId = reviewConfig.id;\n return {\n operationType,\n threshold,\n whitelistIds,\n reviewConfigId,\n hsmId,\n };\n};\n\n/**\n * Create governance rules JSON array from the rules data. For each governance rule, it will create\n * review configs owned by the rule. It returns an object with:\n *\n * - `rulesJsonArray`: A JSON array suitable for the `Policy.rulesJsonArray` field.\n * - `whitelistIds`: IDs of related whitelists, to be connected to the `Policy` object.\n * - `reviewConfigIds`: IDs of related review configs, to be connected to the `Policy` object.\n */\nexport const createGovRules = async (\n workspaceName: string,\n rules: GovRuleData[],\n hsmRuleSetIds: string[],\n prisma: PrismaClient,\n): Promise<{\n rulesJsonArray: PolicyModel.GovRuleJsonObject[];\n whitelistIds: string[];\n reviewConfigIds: string[];\n}> => {\n invariant(\n rules.length === hsmRuleSetIds.length,\n `Rule and rule HSM id count mismatch ${rules.length} !== ${hsmRuleSetIds.length}`,\n );\n const rulesJsonArray = await Promise.all(\n rules.map(async (rule, index) =>\n createGovRule(workspaceName, rule, hsmRuleSetIds[index]!, prisma),\n ),\n );\n const whitelistIds = uniq(rulesJsonArray.flatMap((_) => _.whitelistIds));\n const reviewConfigIds = uniq(rulesJsonArray.map((_) => _.reviewConfigId));\n return { rulesJsonArray, whitelistIds, reviewConfigIds };\n};\n\nexport type GovRuleExpanded = Pick<PolicyModel.GovRuleJsonObject, \"operationType\" | \"threshold\"> & {\n whitelists: Whitelist[];\n reviewConfig: ReviewConfigWithMembers;\n hsmId: string;\n};\n\n/** Expand govRules of the given policy by dereferencing related objects from ID. */\nexport const expandGovRules = (policy: PolicyWithRelatedObjects): GovRuleExpanded[] =>\n PolicyModel.parseFields(policy).rulesJsonArray.map((ruleJsonObject) => {\n const { operationType, threshold, whitelistIds, reviewConfigId, hsmId } = ruleJsonObject;\n const whitelists = whitelistIds.map((whitelistId) =>\n ensureNotNil(policy.whitelists.find((_) => _.id === whitelistId)),\n );\n const reviewConfig = ensureNotNil(policy.reviewConfigs.find((_) => _.id === reviewConfigId));\n return {\n operationType,\n threshold,\n whitelists,\n reviewConfig,\n hsmId,\n };\n });\n\n/**\n * TODO: This function is only used by `app-routers` to convert `policy.rules` to JSON format\n * expected by `PolicyResponse`. Consider redefining the shape of `PolicyResponse`!\n */\nexport const jsonifyGovRules = (policy: PolicyWithRelatedObjects): GovRuleData[] =>\n expandGovRules(policy).map((rule) => {\n const { operationType, threshold, whitelists } = rule;\n const whitelistIds = whitelists.map((_) => _.id);\n const reviewSteps = zReviewStepsArray.parse(rule.reviewConfig.steps);\n return { operationType, whitelistIds, threshold, reviewSteps };\n });\n\nexport const checkPreconditions = (intent: GovernableIntent, govRule: GovRuleExpanded): boolean => {\n const { operationType, threshold, whitelists } = govRule;\n // Check if operation type is allowed.\n if (operationType !== intent.type) {\n return false;\n }\n\n if (isValueTransactionIntent(intent)) {\n // Check if value is within the threshold.\n const { min, max } = threshold;\n const value = BigInt(intent.value);\n if ((min !== null && value < BigInt(min)) || (max !== null && value > BigInt(max))) {\n return false;\n }\n // If this govRule has whitelists: Check if the destination is whitelisted.\n if (whitelists.length > 0 && !whitelists.some((_) => isWhitelisted(intent, _))) {\n return false;\n }\n }\n\n // All checks passed!\n return true;\n};\n\n/**\n * Check the operation and find the first matching govRule for it. Then return the matching gov rule's\n * reviewConfig, hsm id, and whitelist hsm id.\n * If no govRule matches the operation, return undefined.\n */\nexport const findMatchingRule = (\n intent: GovernableIntent,\n currentUser: User,\n policy: PolicyWithRelatedObjects,\n):\n | { reviewConfig: EnrichedReviewConfig; govRuleHsmId: HsmObjectId; whitelistHsmId?: HsmObjectId }\n | undefined => {\n const matchingRule = expandGovRules(policy)\n .filter((rule) => checkPreconditions(intent, rule))\n .find((rule) => {\n const firstStep = expandReviewSteps(rule.reviewConfig)[0];\n invariant(firstStep !== undefined, \"ReviewConfig must have at least one step\");\n const members = firstStep.users.concat(firstStep.group?.members ?? []);\n return members.some((_) => _.id === currentUser.id);\n });\n\n if (matchingRule === undefined) {\n return undefined;\n }\n\n const matchingWhitelist = isValueTransactionIntent(intent)\n ? matchingRule.whitelists.find((_) => isWhitelisted(intent, _))\n : undefined;\n\n return {\n reviewConfig: enrichReviewConfig(matchingRule.reviewConfig),\n govRuleHsmId: matchingRule.hsmId,\n whitelistHsmId: matchingWhitelist?.hsmId,\n };\n};\n\n// #endregion\n","import z from \"zod\";\n\nimport { zClassicGovRuleData } from \"./db-utils\";\n\nconst zPolicyName = z.string().min(1).max(19).meta({ description: \"Policy name\" });\nconst zCurrency = z.string().min(1).max(40).regex(/^\\w+$/).meta({ description: \"Currency\" });\n\nexport const zCreatePublicPolicyRequestData = z.object({\n name: zPolicyName,\n description: z.string().nullable().meta({ description: \"Description\" }),\n currency: zCurrency.nullable(),\n govRules: z.array(zClassicGovRuleData).meta({ description: \"Governance rules\" }),\n});\n\nexport type CreatePublicPolicyRequestData = z.infer<typeof zCreatePublicPolicyRequestData>;\n\nexport const zEditPublicPolicyRequestData = z.object({\n name: zPolicyName,\n description: z.string().nullable().meta({ description: \"Description\" }),\n govRules: z.array(zClassicGovRuleData).meta({ description: \"Governance rules\" }),\n});\n\nexport type EditPublicPolicyRequestData = z.infer<typeof zEditPublicPolicyRequestData>;\n","import { AccountGovernanceType, AccountType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"@/governance\";\nimport { zClassicGovRuleData } from \"@/policies\";\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\nimport { zCurrencyString } from \"@/zod-utils\";\n\nconst zAccountName = z.string().min(1).max(40).meta({ description: \"Account name\" });\n\nexport const zSupport = z.enum([\"standalone\", \"legacy\"]);\n\nconst zSignDigestsGovRuleData = z\n .object({\n operationType: z.literal(\"SIGN_DIGESTS\"),\n reviewSteps: zReviewStepWithUsersArray, // we need to control for API users only\n })\n .meta({ description: \"Digest signing rule\" });\n\nexport type SignDigestGovRuleData = z.infer<typeof zSignDigestsGovRuleData>;\n\nexport const zAccountPolicyRequestData = z\n .union([\n z.object({ policyId: z.string() }).meta({ description: \"Account policy\" }),\n z\n .object({ rules: z.array(zClassicGovRuleData) })\n .meta({ description: \"Account governance rules\" }),\n ])\n .meta({ description: \"Account policy or governance rules\" });\n\nexport type AccountPolicyRequestData = z.infer<typeof zAccountPolicyRequestData>;\n\nexport const zCreateAccountGovernanceData = z\n .discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(AccountGovernanceType.CLASSIC),\n policy: zAccountPolicyRequestData,\n })\n .meta({ description: \"Classic governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.TRADELINK),\n assetManagerId: z.string(),\n exchangeConfigs: zTradelinkExchangeConfigs,\n })\n .meta({ description: \"Tradelink governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.RAW_SIGNING),\n policy: z.object({ rules: z.array(zSignDigestsGovRuleData) }),\n })\n .meta({ description: \"Raw signing governance\" }),\n ])\n .meta({ description: \"Governance fields\" });\n\nexport type CreateAccountGovernanceData = z.infer<typeof zCreateAccountGovernanceData>;\n\nexport const zCreateAccountUserInputData = z.object({\n name: zAccountName,\n currency: zCurrencyString, // \"bitcoin\"\n index: z.number().nonnegative().optional().meta({ description: \"Account index\" }),\n contractAddress: z.string().nonempty().nullable().meta({ description: \"Token issuer\" }),\n tokenIdentifier: z.string().nonempty().nullable().meta({ description: \"Token identifier\" }),\n governance: zCreateAccountGovernanceData,\n});\n\nexport type CreateAccountUserInputData = z.infer<typeof zCreateAccountUserInputData>;\n\n// CreateAccountUserInputData is exposed to the outside world, but we will resolve the\n// account index and derivation path before storing the request data in DB\nexport const zCreateAccountRequestData = zCreateAccountUserInputData\n .omit({ index: true })\n .extend({\n index: z.number().nonnegative().meta({ description: \"Account index\" }),\n derivationPath: z.string().meta({ description: \"Account bip44 derivation path\" }),\n type: z.enum(AccountType), // \"BITCOIN_LIKE\"\n })\n .meta({\n description: \"Create account request data\",\n id: \"CreateAccountRequestData\",\n });\n\nexport type CreateAccountRequestData = z.infer<typeof zCreateAccountRequestData>;\n\nexport const zEditAccountGovernanceData = z\n .discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(AccountGovernanceType.CLASSIC),\n policy: zAccountPolicyRequestData,\n })\n .meta({ description: \"Classic governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.TRADELINK),\n exchangeConfigs: zTradelinkExchangeConfigs,\n })\n .meta({ description: \"Tradelink governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.RAW_SIGNING),\n policy: z.object({ rules: z.array(zSignDigestsGovRuleData) }),\n })\n .meta({ description: \"Raw signing governance\" }),\n ])\n .meta({ description: \"Governance fields\" });\n\nexport type EditAccountGovernanceData = z.infer<typeof zEditAccountGovernanceData>;\n\nexport const zEditAccountRequestData = z\n .object({\n name: zAccountName,\n governance: zEditAccountGovernanceData,\n })\n .meta({\n description: \"Edit account request data\",\n id: \"EditAccountRequestData\",\n });\n\nexport type EditAccountRequestData = z.infer<typeof zEditAccountRequestData>;\n\nexport const zEditTokenRuleRequestData = z.object({\n parentAccountId: z.string().min(1).meta({ description: \"Parent account unique ID\" }),\n contractAddress: z.string().min(1).meta({ description: \"Token contract address\" }),\n rules: z.array(zClassicGovRuleData).meta({ description: \"Account governance rules\" }),\n});\nexport type EditTokenRuleRequestData = z.infer<typeof zEditTokenRuleRequestData>;\n","import type { Account, PrismaClient } from \"@prisma/client\";\nimport { AccountGovernanceType, AccountType } from \"@prisma/client\";\nimport { keyBy } from \"lodash-es\";\n\nimport type { AccountStakingFields } from \"@/networks\";\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\nimport { zNote } from \"@/types\";\nimport { unreachable } from \"@/utils\";\n\nimport type { AccountGovernanceFields } from \"./account-governance-fields\";\nimport type { TransactionResponse, TransactionWithMetaResponse } from \"./app-types\";\nimport type {\n LamaCardanoClient,\n LamaEthereumClient,\n LamaSolanaClient,\n PolkadotAccountClient,\n} from \"./clients\";\nimport { getAccountClient } from \"./clients\";\nimport type { AccountWithGovernanceMixins } from \"./db-types\";\nimport { getLesWallet } from \"./les-wallet\";\nimport type { Canton } from \"./les-wallet/extra-types\";\nimport type { AccountAssetFields, AccountLiveDataResponse, AccountResponse } from \"./types\";\nimport { zAccountResponse } from \"./types\";\nimport { getAccountBalance } from \"./utils\";\n\nconst loadBalanceFields = async (\n account: Account,\n prisma: PrismaClient,\n): Promise<AccountLiveDataResponse[\"balance\"]> => {\n const { total, pending } = await getAccountBalance(account, prisma);\n return {\n total: total.toString(),\n pending: pending.toString(),\n };\n};\n\nconst loadStakingFields = async (account: Account): Promise<AccountStakingFields | null> => {\n // Token account has no staking.\n if (account.contractAddress !== null) {\n return null;\n }\n\n const client = getAccountClient(account);\n switch (account.type) {\n case AccountType.ETHEREUM_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaEthereumClient).getAccountStakingData(account),\n };\n case AccountType.CARDANO_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaCardanoClient).getAccountStakingData(account),\n };\n case AccountType.SOLANA_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaSolanaClient).getAccountStakingData(account),\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: account.type,\n staking: null, // TO REIMPLEMENT\n };\n case AccountType.POLKADOT_LIKE:\n return {\n type: account.type,\n staking: await (client as PolkadotAccountClient).getAccountStakingData(account),\n };\n case AccountType.SUI_LIKE: {\n const wallet = getLesWallet(account.type);\n return wallet.getStakingFields(account);\n }\n }\n return null;\n};\n\nexport const getAccountLiveData = async (\n account: Account,\n prisma: PrismaClient,\n): Promise<AccountLiveDataResponse> => {\n const [balance, staking] = await Promise.all([\n loadBalanceFields(account, prisma),\n loadStakingFields(account),\n ]);\n return {\n id: account.id,\n balance,\n ...(staking ?? { type: account.type }),\n };\n};\n\nconst getAccountAssetFields = (account: AccountWithGovernanceMixins): AccountAssetFields => {\n switch (account.type) {\n case AccountType.BITCOIN_LIKE:\n return {\n type: account.type,\n xpub: account.xpub!,\n };\n case AccountType.ETHEREUM_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.CARDANO_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.SOLANA_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.STELLAR_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.SUI_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.RIPPLE_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.POLKADOT_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.TRON_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.GENERIC_LIKE:\n case AccountType.RAW_SIGNING:\n return {\n type: account.type,\n };\n case AccountType.CANTON_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.HEDERA_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n /* v8 ignore next -- @preserve */\n default:\n unreachable(account.type);\n }\n};\n\nconst getAccountGovernanceFields = (\n account: AccountWithGovernanceMixins,\n): AccountGovernanceFields => {\n switch (account.governanceType) {\n case AccountGovernanceType.CLASSIC:\n case AccountGovernanceType.RAW_SIGNING:\n return {\n type: AccountGovernanceType.CLASSIC,\n policyId: account.classicGovernanceMixin!.policyId,\n };\n case AccountGovernanceType.TRADELINK:\n return {\n type: AccountGovernanceType.TRADELINK,\n assetManagerId: account.tradelinkGovernanceMixin!.assetManagerId,\n exchangeConfigs: zTradelinkExchangeConfigs.parse(\n account.tradelinkGovernanceMixin!.exchangeConfigs,\n ),\n };\n /* v8 ignore next -- @preserve */\n default:\n unreachable(account.governanceType);\n }\n};\n\nexport const serializeAccount = (account: AccountWithGovernanceMixins): AccountResponse => {\n const asset = getAccountAssetFields(account);\n const governance = getAccountGovernanceFields(account);\n\n const response: AccountResponse = {\n ...account,\n network: account.currency,\n legacyId: account.gateId,\n governance,\n asset,\n };\n\n // Parse to strip off fields that are not defined in the schema.\n return zAccountResponse.parse(response);\n};\n\n/**\n * For each transaction, check if there is an associated TransactionMeta object, and retrieve\n * the corresponding data on the corresponding request\n *\n * @param transactions - TransactionResponse[] - transactions from account client\n * @param prisma - PrismaClient - prisma client\n *\n * @returns TransactionWithMetaResponse[]\n */\nexport const fetchTransactionMetas = async (\n workspaceName: string,\n transactions: TransactionResponse[],\n prisma: PrismaClient,\n): Promise<TransactionWithMetaResponse[]> => {\n const txHashes = transactions.map((tx) => tx.hash);\n const metas = await prisma.transactionMeta.findMany({\n where: { workspaceName, hash: { in: txHashes } },\n });\n const metasByHash = keyBy(metas, \"hash\");\n return transactions.map((t) => {\n const note = metasByHash[t.hash]?.note ? zNote.parse(metasByHash[t.hash]?.note) : null;\n return { ...t, note, requestId: metasByHash[t.hash]?.requestId ?? null };\n });\n};\n\n// #region ---------- Canton specific -------------------------------------------------------------\n\nexport const getCantonPreApprovalState = async (\n account: Account,\n): Promise<Canton.PreApprovalState> => {\n const wallet = getLesWallet(AccountType.CANTON_LIKE);\n const preApprovalState = await wallet.extras.getPreApprovalState(account);\n return preApprovalState;\n};\n\nexport const getCantonTransferProposals = async (\n account: Account,\n): Promise<Canton.TransferProposal[]> => {\n const wallet = getLesWallet(AccountType.CANTON_LIKE);\n const transferProposals = await wallet.extras.getTransferProposals(account);\n return transferProposals;\n};\n\n// #endregion\n","import { ActivationStatus, UserDeviceType, UserRole } from \"@prisma/client\";\nimport z from \"zod\";\n\nexport { zApiUserCredentialsResponse } from \"@/auth\";\n\nexport const zUserResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n legacyViewAll: z\n .boolean()\n .meta({ description: \"If true, user can read all resources on the workspace\" }),\n workspaceName: z.string().meta({ description: \"User's workspace name\" }),\n name: z.string().meta({ description: \"User name\" }),\n deviceUserId: z.string().nullable().meta({ description: \"User's device ID (for non-API users)\" }),\n deviceType: z.enum(UserDeviceType).meta({ description: \"User's device type\" }),\n role: z.enum(UserRole).meta({ description: \"User role\" }),\n pubKey: z.string().meta({ description: \"User public key\" }),\n status: z.enum(ActivationStatus).meta({ description: \"User status\" }),\n isSuspended: z.boolean().meta({ description: \"Whether the user is suspended\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nexport type UserResponse = z.infer<typeof zUserResponse>;\n\nexport const zAdminResponse = zUserResponse.extend({\n role: z.literal(UserRole.ADMIN).meta({ description: \"Should always be ADMIN\" }),\n});\n\nexport type AdminResponse = z.infer<typeof zAdminResponse>;\n\nexport const zUserSortBy = z\n .enum([\n \"name\",\n \"role\",\n \"status\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof UserResponse)[])\n .default(\"createdAt\");\n\nexport type UserSortBy = z.infer<typeof zUserSortBy>;\n\nexport {\n zUserRegistrationChallenge,\n zUserRegistrationChallengeResponse,\n zUserRegistrationDeviceData,\n} from \"@/hsm\";\n\nexport {\n type UserRegistrationCreateInput,\n type UserRegistrationResponse,\n zUserRegistrationCreateInput,\n zUserRegistrationResponse,\n} from \"./types\";\n","import type { User, UserRegistration } from \"@prisma/client\";\n\nimport type { UserRegistrationResponse, UserResponse } from \"./app-types\";\nimport { zUserRegistrationResponse, zUserResponse } from \"./app-types\";\n\nexport function serializeUser(user: User): UserResponse {\n const serialized = {\n ...user,\n legacyId: user.gateId,\n } satisfies UserResponse;\n return zUserResponse.parse(serialized);\n}\n\nexport function serializeUserRegistration(\n registration: UserRegistration,\n): UserRegistrationResponse {\n return zUserRegistrationResponse.parse(registration);\n}\n","import { ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zUserResponse } from \"@/users/app\";\n\nexport const zGroupResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Group name\" }),\n description: z.string().nullable().meta({ description: \"Group description\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Group status\" }),\n members: z.array(zUserResponse).meta({ description: \"Group members\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nexport type GroupResponse = z.infer<typeof zGroupResponse>;\n\nexport const zGroupSortBy = z\n .enum([\"name\", \"status\", \"createdAt\", \"updatedAt\"] as const satisfies (keyof GroupResponse)[])\n .default(\"createdAt\");\n\nexport type GroupSortBy = z.infer<typeof zGroupSortBy>;\n","import { serializeUser } from \"@/users/app\";\n\nimport { type GroupResponse, zGroupResponse } from \"./app-types\";\nimport type { GroupWithMembers } from \"./db-types\";\n\nexport function serializeGroup(group: GroupWithMembers): GroupResponse {\n const serialized = {\n ...group,\n legacyId: group.gateId,\n members: group.members.map(serializeUser),\n } satisfies GroupResponse;\n return zGroupResponse.parse(serialized);\n}\n","// @compat-until mobile@x.y.z\n// ☝️ Can delete this patch when we drop support for mobile app < x.y.z\n// TODO: Delete `zVaultRequestCommonMixin.expiredAt`!\nexport const patchRequestExpiredAt = <T extends { expiresAt: Date }>(data: T): T => ({\n ...data,\n expiredAt: data.expiresAt,\n});\n","import { RequestType } from \"@prisma/client\";\nimport { get } from \"lodash-es\";\n\nimport { isRecord } from \"@/utils\";\n\n// @compat-until mobile@x.y.z\n// TODO: Delete deprecated fields in `zTezosLikeDelegateData` and `zTezosLikeUndelegateData`!\nexport const patchTezosRequestData = <T extends { type: RequestType }>(data: T): T => {\n if (data.type !== RequestType.CREATE_TRANSACTION) {\n return data;\n }\n const transaction = get(data, [\"data\", \"transaction\"]);\n /* v8 ignore next -- @preserve */\n if (!isRecord(transaction)) {\n return data;\n }\n\n // Inject fields in-place...\n /* v8 ignore next -- @preserve */\n if (transaction.type === \"TEZOS_LIKE_DELEGATE\") {\n transaction.amount = transaction.amount ?? \"0\";\n } else if (transaction.type === \"TEZOS_LIKE_UNDELEGATE\") {\n transaction.amount = transaction.amount ?? \"0\";\n transaction.recipient = transaction.recipient ?? \"0\";\n }\n\n return data;\n};\n","import z from \"zod\";\n\nexport const zSciConfigData = z.object({\n dapps: z.array(z.string()).nullable().meta({ description: \"Allowed DApps, null allows all\" }),\n customContractCallEnabled: z.boolean().meta({ description: \"Allow non-DApp SCI\" }),\n});\n\nexport const zCreateSciConfigRequestData = z.object({\n account: z.string().meta({ description: \"Account UUID\" }),\n config: zSciConfigData,\n});\n\nexport type CreateSciConfigRequestData = z.infer<typeof zCreateSciConfigRequestData>;\n\nexport const zEditSciConfigRequestData = z.object({\n config: zSciConfigData,\n});\n\nexport type EditSciConfigRequestData = z.infer<typeof zEditSciConfigRequestData>;\n","import {\n ChallengeType,\n type PrismaClient,\n type User,\n type VaultRequest,\n type VaultRequestReview,\n type Workspace,\n} from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport {\n type HsmChallengeStage,\n type HsmProof,\n zApiChallenge,\n zPsdChallenge,\n zPubKey,\n} from \"@/hsm\";\n\nexport type WorkflowContext = {\n prisma: PrismaClient;\n workspace: Workspace;\n};\n\n/** The base type of `VaultRequest.data` and the request input data type. */\nexport type RecordOrNull = Record<string, unknown> | null;\n\nexport type RequestWithData<T extends RecordOrNull> = Omit<VaultRequest, \"data\"> & { data: T };\n\n/** Resolved review step that participates in the review process of a request. */\nexport type ResolvedReviewStep = {\n stageName: string;\n users: User[];\n quorum: number;\n};\n\nexport type ValidationResult<T extends RecordOrNull> = {\n resolvedReviewSteps: ResolvedReviewStep[];\n requestData: T;\n managedData?: Record<string, unknown>;\n};\n\n/**\n * All approved review stages so far, where key is the stage name, and value is an array of\n * reviews with `APPROVED` status in the stage.\n */\nexport type ApprovedReviewStages = Record<string, VaultRequestReview[]>;\n\n/** Challenge response (signature) that user provides as proof to approve or reject a request. */\nexport type Proof = HsmProof | { challengeType: typeof ChallengeType.SOFT; signature: \"\" };\n\nexport type TargetObject = { id: string };\n\nexport type WorkflowEvent =\n | {\n type: \"TRANSACTION_SUBMITTED\";\n requestId: string;\n txHash: string;\n }\n | {\n type: \"TRANSACTION_FAILED\" | \"TRANSACTION_ONCHAIN\" | \"TRANSACTION_CONFIRMED\";\n requestId: string;\n }\n | {\n // Dummy event type just for testing\n type: \"DUMMY\";\n foobar: \"foo\" | \"bar\";\n };\n\nexport const zSoftChallenge = z.object({\n challengeType: z.literal(ChallengeType.SOFT), // soft approval with no challenge to sign\n});\n\nexport type SoftChallenge = z.infer<typeof zSoftChallenge>;\n\nexport const zChallenge = z.discriminatedUnion(\"challengeType\", [\n zPsdChallenge,\n zApiChallenge,\n zSoftChallenge,\n]);\n\nexport type Challenge = z.infer<typeof zChallenge>;\n\nconst zSoftChallengeGroup = z.record(zPubKey, zSoftChallenge);\nconst zSoftChallengeSteps = z.array(zSoftChallengeGroup);\nconst zSoftChallengeStage = z.object({\n stageName: z.string(),\n steps: zSoftChallengeSteps,\n});\nexport type SoftChallengeStage = z.infer<typeof zSoftChallengeStage>;\n\nexport type ChallengeStage = HsmChallengeStage | SoftChallengeStage;\n\n// #region ---------- VaultRequest.reviewSteps ----------------------------------------------------\n\n/** Item in `VaultRequest.reviewSteps` array representing one review step. */\nexport const zRequestReviewStep = z.object({\n stageName: z.string().regex(/^\\w+$/).meta({ description: \"The review stage name\" }),\n quorum: z.int().min(1).meta({ description: \"Quorum for the review step\" }),\n});\n\nexport const zRequestReviewSteps = z.array(zRequestReviewStep);\n\nexport type RequestReviewStep = z.infer<typeof zRequestReviewStep>;\n\n// #endregion\n\n// #region ---------- Multi-stage HSM challenges --------------------------------------------------\n\nexport type MultiStageHsmChallenges = {\n targetHsmId: string;\n stages: HsmChallengeStage[];\n};\n\n// #endregion\n","import z from \"zod\";\n\nexport const zEntityName = z.string().min(1).max(19).meta({ description: \"Entity name\" });\n\nexport const zCreateEntityRequestData = z.object({\n name: zEntityName,\n accountIds: z.array(z.string()).meta({ description: \"List of Account IDs\" }),\n memberIds: z.array(z.string()).meta({ description: \"List of User IDs\" }),\n});\n\nexport type CreateEntityRequestData = z.infer<typeof zCreateEntityRequestData>;\n\nexport const zEditEntityRequestData = zCreateEntityRequestData;\n\nexport type EditEntityRequestData = z.infer<typeof zEditEntityRequestData>;\n\nexport const zRevokeEntityRequestData = z.object({});\n\nexport type RevokeEntityRequestData = z.infer<typeof zRevokeEntityRequestData>;\n","import z from \"zod\";\n\nconst zGroupName = z.string().min(1).max(19).meta({ description: \"Group name\" });\n\nexport const zCreateGroupRequestData = z.object({\n name: zGroupName,\n description: z.string().nullable().meta({ description: \"Group description\" }),\n members: z.array(z.string()).meta({ description: \"List of group members ids\" }),\n});\n\nexport type CreateGroupRequestData = z.infer<typeof zCreateGroupRequestData>;\n\nexport const zEditGroupRequestData = z.object({\n name: zGroupName,\n description: z.string().nullable().meta({ description: \"Group description\" }),\n members: z.array(z.string()).meta({ description: \"List of group members ids\" }),\n});\n\nexport type EditGroupRequestData = z.infer<typeof zEditGroupRequestData>;\n","import z from \"zod\";\n\nexport const zApiKeyName = z.string().min(1).max(19).meta({ description: \"API key name\" });\n\nexport const zCreateApiKeyRequestData = z\n .object({\n name: zApiKeyName,\n entities: z.array(z.string()).meta({ description: \"List of related entities ids\" }),\n scopes: z.object({}).meta({ description: \"FIXME to be precised\" }),\n })\n .meta({ description: \"Create read-only API key request data\" });\n\nexport type CreateApiKeyRequestData = z.infer<typeof zCreateApiKeyRequestData>;\n\nexport const zEditApiKeyRequestData = zCreateApiKeyRequestData.meta({\n description: \"Edit read-only API key request data\",\n});\n\nexport type EditApiKeyRequestData = z.infer<typeof zEditApiKeyRequestData>;\n","/**\n * All zod schemas for `VaultRequest.data` are registered here.\n */\nimport { RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport {\n zCreateAccountRequestData,\n zCreateSciConfigRequestData,\n zEditAccountRequestData,\n zEditSciConfigRequestData,\n zEditTokenRuleRequestData,\n} from \"@/accounts\";\nimport { zCreateApiKeyRequestData, zEditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\nimport {\n zCreateEntityRequestData,\n zEditEntityRequestData,\n zRevokeEntityRequestData,\n} from \"@/entities\";\nimport { zUpdateQuorumRequestData } from \"@/governance\";\nimport { zWorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\nimport { zCreateGroupRequestData, zEditGroupRequestData } from \"@/groups\";\nimport { zCreatePublicPolicyRequestData, zEditPublicPolicyRequestData } from \"@/policies\";\nimport { zTradelinkRequestMixinsByType } from \"@/tradelink\";\nimport {\n zCreateTransactionRequestData,\n zSignDigestsRequestData,\n zSignMessageRequestData,\n} from \"@/transactions\";\nimport {\n zCreateApiUserAccessRequestData,\n zCreateApiUserRequestData,\n zCreatePsdUserRequestData,\n zRevokeUserRequestData,\n} from \"@/users\";\nimport {\n zCreateWhitelistRequestData,\n zEditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\n\nexport const zVaultRequestMixinsByType = {\n // Workspaces\n [RequestType.UPDATE_QUORUM]: z.object({\n type: z.literal(RequestType.UPDATE_QUORUM),\n data: zUpdateQuorumRequestData,\n }),\n // Operator requests\n [RequestType.CREATE_TRANSACTION]: z.object({\n type: z.literal(RequestType.CREATE_TRANSACTION),\n data: zCreateTransactionRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.SIGN_MESSAGE]: z.object({\n type: z.literal(RequestType.SIGN_MESSAGE),\n data: zSignMessageRequestData,\n }),\n [RequestType.SIGN_DIGESTS]: z.object({\n type: z.literal(RequestType.SIGN_DIGESTS),\n data: zSignDigestsRequestData,\n }),\n // Accounts\n [RequestType.CREATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.CREATE_ACCOUNT),\n data: zCreateAccountRequestData,\n }),\n [RequestType.EDIT_ACCOUNT]: z.object({\n type: z.literal(RequestType.EDIT_ACCOUNT),\n targetId: z.string(),\n data: zEditAccountRequestData,\n }),\n [RequestType.EDIT_TOKEN_RULE]: z.object({\n type: z.literal(RequestType.EDIT_TOKEN_RULE),\n targetId: z.string(),\n data: zEditTokenRuleRequestData,\n }),\n // Groups\n [RequestType.CREATE_GROUP]: z.object({\n type: z.literal(RequestType.CREATE_GROUP),\n data: zCreateGroupRequestData,\n }),\n [RequestType.EDIT_GROUP]: z.object({\n type: z.literal(RequestType.EDIT_GROUP),\n targetId: z.string(),\n data: zEditGroupRequestData,\n }),\n [RequestType.REVOKE_GROUP]: z.object({\n type: z.literal(RequestType.REVOKE_GROUP),\n targetId: z.string(),\n data: zRevokeUserRequestData,\n }),\n // Whitelists\n [RequestType.CREATE_WHITELIST]: z.object({\n type: z.literal(RequestType.CREATE_WHITELIST),\n data: zCreateWhitelistRequestData,\n }),\n [RequestType.EDIT_WHITELIST]: z.object({\n type: z.literal(RequestType.EDIT_WHITELIST),\n targetId: z.string(),\n data: zEditWhitelistRequestData,\n }),\n // Entities\n [RequestType.CREATE_ENTITY]: z.object({\n type: z.literal(RequestType.CREATE_ENTITY),\n data: zCreateEntityRequestData,\n }),\n [RequestType.EDIT_ENTITY]: z.object({\n type: z.literal(RequestType.EDIT_ENTITY),\n targetId: z.string(),\n data: zEditEntityRequestData,\n }),\n [RequestType.REVOKE_ENTITY]: z.object({\n type: z.literal(RequestType.REVOKE_ENTITY),\n targetId: z.string(),\n data: zRevokeEntityRequestData,\n }),\n // Users\n [RequestType.CREATE_PSD_USER]: z.object({\n type: z.literal(RequestType.CREATE_PSD_USER),\n data: zCreatePsdUserRequestData,\n }),\n [RequestType.CREATE_API_USER]: z.object({\n type: z.literal(RequestType.CREATE_API_USER),\n data: zCreateApiUserRequestData,\n }),\n [RequestType.CREATE_API_USER_ACCESS]: z.object({\n type: z.literal(RequestType.CREATE_API_USER_ACCESS),\n data: zCreateApiUserAccessRequestData,\n }),\n [RequestType.REVOKE_USER]: z.object({\n type: z.literal(RequestType.REVOKE_USER),\n targetId: z.string(),\n data: zRevokeUserRequestData,\n }),\n // Admin gov rules\n [RequestType.EDIT_WORKSPACE_RULE]: z.object({\n type: z.literal(RequestType.EDIT_WORKSPACE_RULE),\n data: zWorkspaceRuleRequestData,\n }),\n // SCI configs\n [RequestType.CREATE_SCICONFIG]: z.object({\n type: z.literal(RequestType.CREATE_SCICONFIG),\n data: zCreateSciConfigRequestData,\n }),\n [RequestType.EDIT_SCICONFIG]: z.object({\n type: z.literal(RequestType.EDIT_SCICONFIG),\n data: zEditSciConfigRequestData,\n }),\n // API keys\n [RequestType.CREATE_API_KEY]: z.object({\n type: z.literal(RequestType.CREATE_API_KEY),\n data: zCreateApiKeyRequestData,\n }),\n [RequestType.EDIT_API_KEY]: z.object({\n type: z.literal(RequestType.EDIT_API_KEY),\n data: zEditApiKeyRequestData,\n }),\n [RequestType.REVOKE_API_KEY]: z.object({\n type: z.literal(RequestType.REVOKE_API_KEY),\n data: z.object({}),\n }),\n // Policies\n [RequestType.CREATE_POLICY]: z.object({\n type: z.literal(RequestType.CREATE_POLICY),\n data: zCreatePublicPolicyRequestData,\n }),\n [RequestType.EDIT_POLICY]: z.object({\n type: z.literal(RequestType.EDIT_POLICY),\n targetId: z.string(),\n data: zEditPublicPolicyRequestData,\n }),\n // Tradelink-related requests\n ...zTradelinkRequestMixinsByType,\n} as const satisfies Record<RequestType, unknown>;\n","import { ChallengeType, RequestReviewStatus, RequestState, RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCreateAccountUserInputData } from \"@/accounts\";\nimport type { TransactionData } from \"@/networks\";\nimport { zSignMessageUserInputData } from \"@/transactions\";\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\nimport { zChallenge, zRequestReviewSteps } from \"@/workflows\";\n\nimport { zVaultRequestMixinsByType } from \"./request-data\";\n\nconst zRequestReviewResponse = z.object({\n // Note: Do NOT include `quorum` as it is already available in the request's `reviewSteps` field.\n stepIndex: z\n .number()\n .int()\n .meta({ description: \"Index of the governance step in the request workflow\" }),\n userId: z.string().meta({ description: \"Reviewer id\" }),\n status: z.enum(RequestReviewStatus).meta({ description: \"Review status\" }),\n createdAt: z.coerce.date().meta({ description: \"Created date\" }),\n updatedAt: z.coerce.date().meta({ description: \"Updated date\" }),\n});\n\nconst zVaultRequestCommonMixin = z.object({\n id: z.string().meta({ description: \"Request unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n state: z.enum(RequestState).meta({ description: \"Request state\" }),\n reviewSteps: zRequestReviewSteps.meta({ description: \"Request review steps\" }),\n currentStepIndex: z\n .number()\n .int()\n .min(0)\n .meta({ description: \"Index of the current approval step\" }),\n expiresAt: z.coerce.date().meta({ description: \"Request expiration date\" }),\n expiredAt: z.coerce.date().optional().meta({ description: \"Deprecated: use expiresAt\" }),\n targetId: z.string().nullable().meta({ description: \"Optional ID of the target object\" }),\n note: zNote.nullable().meta({ description: \"Optional request note\" }),\n reviews: z.array(zRequestReviewResponse).meta({ description: \"Requests reviews\" }),\n // `type` and `data` are correlated -- See `zVaultRequestMixinsByType`\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n createdById: z.string().meta({ description: \"ID of the user who created the request\" }),\n // `inflight` is fetched from ONGOING RequestSaga\n inflight: z\n .object({\n lastError: z.string().nullable().meta({ description: \"Error message from the last failure\" }),\n numFailed: z.number().int().meta({ description: \"Number of failures so far\" }),\n retryAfter: z.coerce.date().meta({ description: \"Date after which next retry is scheduled\" }),\n })\n .optional()\n .meta({ description: \"Extra information if the request is currently being processed\" }),\n});\n\n/**\n * Maps from request type to request creation input schema.\n *\n * Most of the time, the user input data shape for request creation is the same as `request.data`.\n * But there are some exceptions. In such case, we redefine the shape for input data.\n */\nconst allowedRequestCreationInputByType = {\n [RequestType.UPDATE_QUORUM]: zVaultRequestMixinsByType[RequestType.UPDATE_QUORUM],\n [RequestType.CREATE_PSD_USER]: zVaultRequestMixinsByType[RequestType.CREATE_PSD_USER],\n [RequestType.CREATE_API_USER]: zVaultRequestMixinsByType[RequestType.CREATE_API_USER],\n [RequestType.CREATE_GROUP]: zVaultRequestMixinsByType[RequestType.CREATE_GROUP],\n [RequestType.EDIT_GROUP]: zVaultRequestMixinsByType[RequestType.EDIT_GROUP],\n [RequestType.CREATE_WHITELIST]: zVaultRequestMixinsByType[RequestType.CREATE_WHITELIST],\n [RequestType.EDIT_WHITELIST]: zVaultRequestMixinsByType[RequestType.EDIT_WHITELIST],\n [RequestType.CREATE_TRANSACTION]: zVaultRequestMixinsByType[RequestType.CREATE_TRANSACTION],\n [RequestType.SIGN_MESSAGE]: z.object({\n type: z.literal(RequestType.SIGN_MESSAGE),\n data: zSignMessageUserInputData,\n }),\n [RequestType.CREATE_POLICY]: zVaultRequestMixinsByType[RequestType.CREATE_POLICY],\n [RequestType.EDIT_POLICY]: zVaultRequestMixinsByType[RequestType.EDIT_POLICY],\n [RequestType.CREATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.CREATE_ACCOUNT),\n data: zCreateAccountUserInputData,\n }),\n [RequestType.EDIT_ACCOUNT]: zVaultRequestMixinsByType[RequestType.EDIT_ACCOUNT],\n [RequestType.TRADELINK_ACTIVATE_ACCOUNT]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_ACTIVATE_ACCOUNT],\n [RequestType.TRADELINK_CREATE_CUSTODIAN]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_CUSTODIAN],\n [RequestType.TRADELINK_EDIT_CUSTODIAN]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_CUSTODIAN],\n [RequestType.TRADELINK_CREATE_EXCHANGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_EXCHANGE],\n [RequestType.TRADELINK_EDIT_EXCHANGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_EXCHANGE],\n [RequestType.TRADELINK_CREATE_ASSET_MANAGER]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_ASSET_MANAGER],\n [RequestType.TRADELINK_EDIT_ASSET_MANAGER]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_ASSET_MANAGER],\n [RequestType.TRADELINK_ADJUST_PLEDGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_ADJUST_PLEDGE],\n [RequestType.TRADELINK_REPLEDGE]: zVaultRequestMixinsByType[RequestType.TRADELINK_REPLEDGE],\n [RequestType.TRADELINK_FORCE_UNPLEDGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_FORCE_UNPLEDGE],\n [RequestType.TRADELINK_CREATE_SETTLEMENT]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_SETTLEMENT],\n [RequestType.TRADELINK_WITHDRAW]: zVaultRequestMixinsByType[RequestType.TRADELINK_WITHDRAW],\n [RequestType.TRADELINK_ARBITRATE]: zVaultRequestMixinsByType[RequestType.TRADELINK_ARBITRATE],\n [RequestType.REVOKE_USER]: zVaultRequestMixinsByType[RequestType.REVOKE_USER],\n [RequestType.EDIT_WORKSPACE_RULE]: zVaultRequestMixinsByType[RequestType.EDIT_WORKSPACE_RULE],\n [RequestType.CREATE_ENTITY]: zVaultRequestMixinsByType[RequestType.CREATE_ENTITY],\n [RequestType.EDIT_ENTITY]: zVaultRequestMixinsByType[RequestType.EDIT_ENTITY],\n [RequestType.REVOKE_ENTITY]: zVaultRequestMixinsByType[RequestType.REVOKE_ENTITY],\n};\n\nconst zRequestCreationInputCommonMixin = z.object({\n note: zNote.optional().meta({ description: \"Optional request note\" }),\n});\n\n// To generate the OpenAPI schema with trpc-openapi, we need the input to be a zod object.\n// See: https://github.com/jlalmes/trpc-openapi?tab=readme-ov-file#requirements\nexport const zVaultRequestCreateInput = z.object({\n request: z.discriminatedUnion(\n \"type\",\n ensureNonEmptyArray(\n Object.values(allowedRequestCreationInputByType).map((_) => {\n // properly extract request type for documentation generation\n const requestType = _.shape.type.value;\n return _.extend(zRequestCreationInputCommonMixin.shape).meta({\n description: `${requestType} request data`,\n });\n }),\n ),\n ),\n});\n\nexport type VaultRequestCreateInput = z.infer<typeof zVaultRequestCreateInput>;\n\nexport const zVaultRequestResponse = z\n .discriminatedUnion(\n \"type\",\n ensureNonEmptyArray(\n Object.values(zVaultRequestMixinsByType).map((_) => {\n // properly extract request type for documentation generation\n const requestType = _.shape.type.value;\n return _.extend(zVaultRequestCommonMixin.shape).meta({\n description: `${requestType} request`,\n });\n }),\n ),\n )\n .meta({\n description: \"Vault request response data\",\n id: \"VaultRequestResponse\",\n });\n\nexport type VaultRequestResponse = z.infer<typeof zVaultRequestResponse>;\n\nexport const zRequestSortBy = z\n .enum([\n \"state\",\n \"expiresAt\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof VaultRequestResponse)[])\n .default(\"createdAt\");\n\nexport type RequestSortBy = z.infer<typeof zRequestSortBy>;\n\nexport const zChallengeResponse = z.object({\n pubKey: z.string().meta({ description: \"Public key of the current user\" }),\n challenge: zChallenge.meta({\n description: \"Challenge data to sign with the user's private key\",\n }),\n});\n\nexport type ChallengeResponse = z.infer<typeof zChallengeResponse>;\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- type does not bring any value here\nexport const genTransactionSchemas = <T extends TransactionData>(innerSchema: z.ZodType<T>) => ({\n zInput: z\n .object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n transaction: innerSchema,\n })\n .extend(zRequestCreationInputCommonMixin.shape)\n .meta({ description: \"Transaction request data\" }),\n zOutput: z\n .object({\n type: z.literal(RequestType.CREATE_TRANSACTION),\n data: z.object({\n accountId: z.string(),\n transaction: innerSchema,\n }),\n })\n .extend(zVaultRequestCommonMixin.shape)\n .describe(\"Transaction request\"),\n});\n\nexport const zApproveVaultRequestInput = z.object({\n id: z.string().meta({ description: \"ID of the request to approve\" }),\n data: z.discriminatedUnion(\"challengeType\", [\n z.object({\n challengeType: z\n .enum([ChallengeType.PSD, ChallengeType.API])\n .meta({ description: \"Challenge type\" }),\n signature: z.string().min(1).meta({ description: \"Challenge signature\" }),\n }),\n z.object({\n challengeType: z.enum([ChallengeType.SOFT]).meta({ description: \"Challenge type\" }),\n }),\n ]),\n});\n\nexport type ApproveVaultRequestInput = z.infer<typeof zApproveVaultRequestInput>;\n\nexport type { Challenge, SoftChallenge } from \"@/workflows\";\n","import { patchRequestExpiredAt, patchTezosRequestData } from \"@/compat\";\nimport type { RequestSagaWithFailures } from \"@/workflows\";\n\nimport { type VaultRequestResponse, zVaultRequestResponse } from \"../app-types\";\nimport type { VaultRequestWithRelatedObjects } from \"../db-types\";\n\nexport {\n GateRequestService,\n isFromGate,\n shouldForbidRequestCreationInGateCompatMode,\n} from \"./gate-service\";\n\nexport function serializeVaultRequest(\n request: VaultRequestWithRelatedObjects,\n): VaultRequestResponse {\n const serialized = {\n ...request,\n legacyId: request.gateId,\n } satisfies Omit<VaultRequestResponse, \"type\" | \"data\" | \"reviewSteps\" | \"note\">;\n /* v8 ignore next -- @preserve */\n switch (request.type) {\n case \"CREATE_TRANSACTION\":\n case \"TRADELINK_WITHDRAW\":\n case \"TRADELINK_ARBITRATE\":\n case \"TRADELINK_CREATE_SETTLEMENT\":\n Object.assign(serialized, {\n meta: {\n hash: request.transactionMeta?.hash ?? null,\n },\n });\n break;\n default:\n break;\n }\n let patched = zVaultRequestResponse.parse(serialized);\n patched = patchRequestExpiredAt(patched);\n patched = patchTezosRequestData(patched);\n return patched;\n}\n\nexport function serializeVaultRequestWithOngoingSaga(\n request: VaultRequestWithRelatedObjects,\n ongoingSaga: RequestSagaWithFailures | null,\n): VaultRequestResponse {\n let inflightField;\n if (ongoingSaga !== null) {\n const { retryAfter, failures } = ongoingSaga;\n const lastError = failures[failures.length - 1]?.message ?? null;\n const numFailed = failures.length;\n inflightField = {\n inflight: { lastError, numFailed, retryAfter },\n };\n } else {\n inflightField = {};\n }\n return {\n ...serializeVaultRequest(request),\n ...inflightField,\n };\n}\n","import { ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nexport const zWhitelistAddressResponse = z.object({\n name: z.string().min(1).max(50).meta({ description: \"Address name\" }),\n currency: zCurrencyString.meta({ description: \"Address currency\" }),\n address: z.string().min(1).max(200).meta({ description: \"Address value\" }),\n destinationTags: z\n .array(z.string().min(1).regex(/^\\w+$/))\n .optional()\n .meta({ description: \"List of destination tags (applicable for Ripple currency)\" }),\n});\n\nexport const zWhitelistResponse = z\n .object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Whitelist name\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Whitelist status\" }),\n addresses: z.array(zWhitelistAddressResponse),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n description: z.string().nullable().meta({ description: \"Whitelist description\" }),\n })\n .meta({ description: \"Whitelist\", id: \"WhitelistResponse\" });\n\nexport type WhitelistResponse = z.infer<typeof zWhitelistResponse>;\n\nexport const zWhitelistSortBy = z\n .enum([\"name\", \"status\", \"createdAt\", \"updatedAt\"] as const satisfies (keyof WhitelistResponse)[])\n .default(\"createdAt\");\n\nexport type WhitelistSortBy = z.infer<typeof zWhitelistSortBy>;\n","import type { Whitelist } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport type { WhitelistResponse } from \"./app-types\";\nimport { zWhitelistAddressResponse, zWhitelistResponse } from \"./app-types\";\n\nexport const serializeWhitelist = (whitelist: Whitelist): WhitelistResponse => {\n const serialized = {\n ...whitelist,\n legacyId: whitelist.gateId,\n addresses: z.array(zWhitelistAddressResponse).parse(whitelist.addresses),\n } satisfies WhitelistResponse;\n return zWhitelistResponse.parse(serialized);\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Account, User, VaultRequestReview, Whitelist } from \"@prisma/client\";\nimport { AccountType } from \"@prisma/client\";\n\nimport { type AccountResponse, zAccountResponse } from \"@/accounts/app-types\";\nimport { serializeAccount } from \"@/accounts/app-utils\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport { type GroupResponse, zGroupResponse } from \"@/groups/app-types\";\nimport { serializeGroup } from \"@/groups/app-utils\";\nimport type { AccountStakingFields } from \"@/networks\";\nimport type { VaultRequestResponse } from \"@/requests/app-types\";\nimport { serializeVaultRequest } from \"@/requests/app-utils\";\nimport { type UserResponse, zUserResponse } from \"@/users/app-types\";\nimport { serializeUser } from \"@/users/app-utils\";\nimport { type WhitelistResponse, zWhitelistResponse } from \"@/whitelists/app-types\";\nimport { serializeWhitelist } from \"@/whitelists/app-utils\";\n\nimport { genAccount, genGroupWithMembers, genUser, genVaultRequest, genWhitelist } from \"./models\";\nimport type { RequestDataTypes } from \"./models/requests/requests-and-reviews\";\n\nexport const genStakingFields = (account: Account): AccountStakingFields | null => {\n // No staking for token account\n if (account.contractAddress !== null) {\n return null;\n }\n\n switch (account.type) {\n case AccountType.BITCOIN_LIKE:\n return null;\n case AccountType.CANTON_LIKE:\n return null;\n case AccountType.CARDANO_LIKE:\n return {\n type: \"CARDANO_LIKE\",\n staking: {\n staked: faker.number.int().toString(),\n },\n };\n case AccountType.ETHEREUM_LIKE:\n return {\n type: \"ETHEREUM_LIKE\",\n staking: {\n totalStaking: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n availableRewards: faker.number.int().toString(),\n networkApy: faker.number.float({ min: 0, max: 1 }),\n },\n };\n case AccountType.GENERIC_LIKE:\n return null;\n case AccountType.POLKADOT_LIKE:\n return {\n type: \"POLKADOT_LIKE\",\n staking: {\n info: {\n controllerAddress: \"<fake-controller-address>\",\n rewardsDestination: \"<fake-rewards-destination>\",\n proxies: [\"<fake-proxy>\"],\n legacyStaking: false,\n isNominator: false,\n },\n balances: {\n free: faker.number.int().toString(),\n reserved: faker.number.int().toString(),\n frozen: faker.number.int().toString(),\n bonded: faker.number.int().toString(),\n available: faker.number.int().toString(),\n unbonding: [\n { amount: faker.number.int().toString(), waiting_time: \"<fake-waiting-time>\" },\n ],\n unbonded: [\n { amount: faker.number.int().toString(), waiting_time: \"<fake-waiting-time>\" },\n ],\n totalUnbonding: faker.number.int().toString(),\n totalUnbonded: faker.number.int().toString(),\n },\n anonymousProxy: {\n address: \"<fake-anonymous-proxy-address>\",\n createdAt: faker.date.past().toISOString(),\n isController: false,\n isMain: false,\n balances: {\n free: faker.number.int().toString(),\n reserved: faker.number.int().toString(),\n frozen: faker.number.int().toString(),\n bonded: faker.number.int().toString(),\n available: faker.number.int().toString(),\n total: faker.number.int().toString(),\n },\n blockHeight: faker.number.int().toString(),\n extIndex: faker.number.int().toString(),\n index: faker.number.int().toString(),\n kind: \"<fake-kind>\",\n },\n },\n };\n case AccountType.RAW_SIGNING:\n return null;\n case AccountType.RIPPLE_LIKE:\n return null;\n case AccountType.SOLANA_LIKE:\n return {\n type: \"SOLANA_LIKE\",\n staking: {\n staked: faker.number.int().toString(),\n rewards: {\n total: faker.number.int().toString(),\n last7: faker.number.int().toString(),\n last30: faker.number.int().toString(),\n },\n stakes: [\n {\n uid: \"<fake-stake-uid>\",\n baseAccountUid: \"<fake-base-account-uid>\",\n pubKey: \"<fake-pub-key>\",\n validatorPubKey: \"<fake-validator-pub-key>\",\n initialAmount: faker.number.int().toString(),\n activeAmount: faker.number.int().toString(),\n inactiveAmount: faker.number.int().toString(),\n totalBalance: faker.number.int().toString(),\n creationDate: faker.date.past().toISOString(),\n activationEpoch: faker.date.past().toISOString(),\n activationDate: faker.date.past().toISOString(),\n deactivationEpoch: \"<fake-deactivation-epoch>\",\n deactivationDate: faker.date.past().toISOString(),\n status: \"activated\",\n rentExemptReserve: faker.number.int().toString(),\n withdrawableAmount: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n creationTxHash: \"<fake-creation-tx-hash>\",\n actionsTxHashes: [\"<fake-action-tx-hash>\"],\n },\n ],\n },\n };\n case AccountType.STELLAR_LIKE:\n return null;\n case AccountType.SUI_LIKE:\n return {\n type: \"SUI_LIKE\",\n staking: {\n totalStaked: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n },\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: \"TEZOS_LIKE\",\n staking: {\n delegations: [{ address: faker.string.alpha({ length: 10 }) }],\n },\n };\n case AccountType.TRON_LIKE:\n return null;\n case AccountType.HEDERA_LIKE:\n return null;\n }\n};\n\nexport function genVaultRequestResponse<T extends keyof RequestDataTypes>(\n opts: Parameters<typeof genVaultRequest<T>>[0],\n reviews: VaultRequestReview[] = [],\n): VaultRequestResponse {\n const request = genVaultRequest(opts);\n const requestWithReviews = { ...request, reviews };\n return serializeVaultRequest(requestWithReviews);\n}\n\nexport function genAccountResponse(overrides?: Partial<Account>): AccountResponse {\n const dbAccount = genAccount(overrides);\n const account = serializeAccount(dbAccount);\n return zAccountResponse.parse(account);\n}\n\nexport function genUserResponse(overrides?: Partial<User>): UserResponse {\n const dbUser = genUser(overrides);\n const user = serializeUser(dbUser);\n return zUserResponse.parse(user);\n}\n\nexport function genGroupResponse(overrides?: Partial<GroupWithMembers>): GroupResponse {\n const dbGroup = genGroupWithMembers(overrides);\n const group = serializeGroup(dbGroup);\n return zGroupResponse.parse(group);\n}\n\nexport function genWhitelistResponse(overrides?: Partial<Whitelist>): WhitelistResponse {\n const dbWhitelist = genWhitelist(overrides);\n const whitelist = serializeWhitelist(dbWhitelist);\n return zWhitelistResponse.parse(whitelist);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/zod-utils.ts","../src/networks/common.ts","../src/networks/bitcoin/schemas.ts","../src/networks/bitcoin/index.ts","../src/networks/canton/schemas.ts","../src/networks/canton/index.ts","../src/networks/cardano/schemas.ts","../src/networks/cardano/index.ts","../src/networks/ethereum/schemas.ts","../src/networks/ethereum/index.ts","../src/networks/generic/schemas.ts","../src/networks/generic/index.ts","../src/networks/hedera/schema.ts","../src/networks/hedera/index.ts","../src/networks/polkadot/schemas.ts","../src/networks/polkadot/index.ts","../src/networks/ripple/schemas.ts","../src/networks/ripple/index.ts","../src/networks/solana/schemas.ts","../src/networks/solana/index.ts","../src/networks/stellar/schemas.ts","../src/networks/stellar/index.ts","../src/networks/sui/schemas.ts","../src/networks/sui/index.ts","../src/networks/tezos/schemas.ts","../src/networks/tezos/index.ts","../src/networks/tron/schemas.ts","../src/networks/tron/index.ts","../src/networks/index.ts","../src/errors.ts","../src/sync-utils.ts","../src/utils.ts","../src/__fakes__/faker-utils.ts","../src/__fakes__/canton.ts","../src/__fakes__/models/sync-id-utils.ts","../src/__fakes__/models/accounts.ts","../src/__fakes__/models/requests/request-for-message-signature.ts","../src/__fakes__/models/requests/request-for-transaction.ts","../src/requests/utils.ts","../src/__fakes__/models/requests/request-for-account.ts","../src/__fakes__/models/requests/request-for-api-key.ts","../src/__fakes__/models/requests/request-for-digests-signature.ts","../src/__fakes__/models/requests/request-for-entity.ts","../src/__fakes__/models/requests/request-for-group.ts","../src/__fakes__/models/requests/request-for-policy.ts","../src/__fakes__/models/requests/request-for-sciconfig.ts","../src/__fakes__/models/requests/request-for-tradelink.ts","../src/__fakes__/models/requests/request-for-user.ts","../src/__fakes__/models/requests/request-for-whitelist.ts","../src/__fakes__/models/requests/request-for-workspace-rule.ts","../src/__fakes__/models/requests/requests-and-reviews.ts","../src/__fakes__/models/workspaces-users-groups.ts","../src/__fakes__/models/whitelists-policies.ts","../src/hsm/types.ts","../src/workspaces/utils.ts","../src/users/types.ts","../src/users/request-data.ts","../src/governance/review-config.ts","../src/prisma-utils/policy.ts","../src/types/common.ts","../src/types/governable-intent.ts","../src/prisma-utils/review-config.ts","../src/governance/request-data.ts","../src/governance/workspace-rule-requests.ts","../src/accounts/clients/types.ts","../src/accounts/les-wallet/canton-extras.ts","../src/tradelink/types.ts","../src/tradelink/request-data.ts","../src/accounts/account-governance-fields.ts","../src/accounts/types.ts","../src/transactions/types.ts","../src/transactions/request-data.ts","../src/accounts/app-types.ts","../src/whitelists/db-types.ts","../src/whitelists/whitelist-requests.ts","../src/policies/db-utils.ts","../src/policies/request-data.ts","../src/accounts/request-data.ts","../src/accounts/app-utils.ts","../src/users/app-types.ts","../src/users/app-utils.ts","../src/groups/app-types.ts","../src/groups/app-utils.ts","../src/compat/patch-request-expired-at.ts","../src/compat/patch-tezos-request-data.ts","../src/accounts/sci/request-data.ts","../src/workflows/types.ts","../src/entities/request-data.ts","../src/groups/request-data.ts","../src/api-keys/api-key-requests.ts","../src/requests/request-data.ts","../src/requests/app-types.ts","../src/requests/app-utils/index.ts","../src/whitelists/app-types.ts","../src/whitelists/app-utils.ts","../src/__fakes__/responses.ts"],"names":["z","invariant","times","faker","omit","match","P","RequestType","RequestState","ChallengeType","UserDeviceType","UserRole","ActivationStatus","WhitelistType","PsdModel","UserRegistrationState","AdminPermission","AccountGovernanceType","AccountType","zCurrency","RequestReviewStatus"],"mappings":"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","file":"fakes.mjs","sourcesContent":["import { z } from \"zod\";\n\nexport const zHexString = z.string().regex(/^[0-9a-fA-F]+$/);\n\nexport const zIntString = z\n .string()\n .nonempty()\n .regex(/^(-?[1-9]\\d*|0)$/);\n\nexport const zUnsignedIntString = z\n .string()\n .nonempty()\n .regex(/^([1-9]\\d*|0)$/);\n\nexport const zCurrencyString = z\n .string()\n .nonempty()\n .max(40)\n .regex(/^\\w+$/)\n .meta({ description: \"Will be deprecated soon, use network instead. Currency\" });\n\nexport const zNetwork = z\n .string()\n .nonempty()\n .max(40)\n .regex(/^\\w+$/)\n .meta({ description: \"Network (Same as currency for now)\" });\n\nexport const zCurrency = z.object({\n network: zNetwork,\n contractAddress: z.string().nonempty().nullable().meta({ description: \"Token issuer\" }),\n tokenIdentifier: z.string().nonempty().nullable().meta({ description: \"Token identifier\" }),\n});\n\nexport const zObjectId = z\n .string()\n .regex(/^[\\w-]+$/) // UUID, GUID, NanoID, CUID... or just a slug\n .nonempty();\n\nexport type ObjectId = z.infer<typeof zObjectId>;\n\nexport const zHsmObjectId = z\n .string()\n .regex(/^[\\w-]+$/) // TODO: what is the exact format of an HSM ID?\n .nonempty();\n\nexport type HsmObjectId = z.infer<typeof zHsmObjectId>;\n\n/* v8 ignore next -- @preserve */\nexport const zDateCodec = z.codec(z.iso.datetime(), z.date(), {\n decode: (isoString) => new Date(isoString), // ISO string → Date\n encode: (date) => date.toISOString(), // Date → ISO string\n});\n","import type { AccountType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- Utils -----------------------------------------------------------------------\n\nexport type NetworkFamily = Exclude<AccountType, \"RAW_SIGNING\">;\n\nexport const NetworkFamily = {\n BITCOIN_LIKE: \"BITCOIN_LIKE\",\n CANTON_LIKE: \"CANTON_LIKE\",\n CARDANO_LIKE: \"CARDANO_LIKE\",\n ETHEREUM_LIKE: \"ETHEREUM_LIKE\",\n GENERIC_LIKE: \"GENERIC_LIKE\",\n HEDERA_LIKE: \"HEDERA_LIKE\",\n POLKADOT_LIKE: \"POLKADOT_LIKE\",\n RIPPLE_LIKE: \"RIPPLE_LIKE\",\n SOLANA_LIKE: \"SOLANA_LIKE\",\n STELLAR_LIKE: \"STELLAR_LIKE\",\n SUI_LIKE: \"SUI_LIKE\",\n TEZOS_LIKE: \"TEZOS_LIKE\",\n TRON_LIKE: \"TRON_LIKE\",\n} satisfies Record<NetworkFamily, NetworkFamily>;\n\n/**\n * Ensure that this is a hex string and transform it to lowercase with 0x prefix.\n * Not to be used for EIP-55 addresses or other attributes where letter casing is important!\n */\n/* v8 ignore next -- @preserve */\nexport const zHexDataString = z.codec(z.string().regex(/^(?:0x|0X)?[a-fA-F0-9]+$/), z.string(), {\n decode: (hex) => `0x${hex.toLowerCase().replace(\"0x\", \"\")}`,\n encode: (hex) => hex,\n});\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zCommonLiveData = z.object({\n id: z.string().meta({ description: \"Account internal unique identifier\" }),\n balance: z\n .object({\n total: z.string().meta({ description: \"Total balance\" }),\n pending: z.string().meta({ description: \"Pending balance\" }),\n })\n .meta({ description: \"Balance fields\" }),\n});\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\n/**\n * Schema of `Request.data.transaction`\n */\nexport const zCommonTransactionData = z.object({\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }), // TODO: to remove, use account.network instead\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().meta({ description: \"Transaction recipient\" }),\n});\n\nexport const zFeeStrategyCustom = z.object({\n type: z.enum([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n});\n\nexport const zFeeStrategy = z.object({\n type: z.enum([\"SLOW\", \"NORMAL\", \"FAST\"]),\n});\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTransactionStatus = z.enum([\"SUCCESSFUL\", \"FAILED\"]);\n\nexport type TransactionStatus = z.infer<typeof zTransactionStatus>;\n\nexport const zCommonTransactionResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n hash: z.string().meta({ description: \"Transaction hash\" }),\n block: z.object({\n height: z.string().nullable().meta({ description: \"Transaction block height\" }),\n time: z.string().nullable().meta({ description: \"Transaction block time\" }),\n }),\n status: zTransactionStatus.meta({ description: \"Transaction status\" }),\n confirmations: z.string().meta({ description: \"Block confirmations\" }),\n amount: z.string().meta({ description: \"Transaction amount\" }),\n fee: z.string().meta({ description: \"Transaction fee\" }),\n senders: z\n .array(z.string())\n .meta({ description: \"Senders (can be multiple for UTXOs-based accounts)\" }),\n recipients: z\n .array(z.string())\n .meta({ description: \"Recipients (can be multiple for multi-output transactions)\" }),\n});\n\n// #endregion\n","import z from \"zod\";\n\nimport { zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zBitcoinLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.BITCOIN_LIKE).meta({ description: \"Account type\" }),\n xpub: z.string().meta({ description: \"xpub (extended public key)\" }),\n })\n .meta({ description: \"Bitcoin-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zBitcoinLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.BITCOIN_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Bitcoin-like\" });\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zBitcoinLikeTransactionType = z\n .enum([\"BITCOIN_LIKE_SEND\", \"BITCOIN_LIKE_RECEIVE\"])\n .meta({ description: \"Bitcoin-like transaction type\" });\n\nexport type BitcoinLikeTransactionType = z.infer<typeof zBitcoinLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zBitcoinLikeFeeStrategy = zFeeStrategyCustom\n .extend({\n // nullish is optional + nullable, it is easier to seed rather than just optional\n feePerByte: zUnsignedIntString.nullish().meta({ description: \"Fee per byte\" }),\n })\n .meta({ description: \"Bitcoin-like fee strategy\" });\n\nexport const zBitcoinLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zBitcoinLikeTransactionType.enum.BITCOIN_LIKE_SEND),\n feeStrategy: zBitcoinLikeFeeStrategy,\n })\n .meta({\n description: \"Bitcoin-like send data\",\n id: \"BitcoinLikeSendData\",\n });\n\nexport const zBitcoinLikeTransactionData = z.discriminatedUnion(\"type\", [zBitcoinLikeSendData]);\n\nexport type BitcoinLikeTransactionData = z.infer<typeof zBitcoinLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zBitcoinLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.BITCOIN_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Bitcoin-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zBitcoinLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zBitcoinLikeTransactionType })\n .meta({ description: \"Bitcoin-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { BitcoinLikeTransactionData, BitcoinLikeTransactionType } from \"./schemas\";\nimport {\n zBitcoinLikeAssetFields,\n zBitcoinLikeEstimatedFees,\n zBitcoinLikeLiveData,\n zBitcoinLikeSendData,\n zBitcoinLikeTransactionData,\n zBitcoinLikeTransactionResponse,\n zBitcoinLikeTransactionType,\n} from \"./schemas\";\n\nexport const BITCOIN_SPEC = {\n family: NetworkFamily.BITCOIN_LIKE,\n\n zAssetFields: zBitcoinLikeAssetFields,\n zLiveData: zBitcoinLikeLiveData,\n\n zTransactionType: zBitcoinLikeTransactionType,\n zTransactionData: zBitcoinLikeTransactionData,\n zSendTransactionData: zBitcoinLikeSendData,\n zEstimatedFees: zBitcoinLikeEstimatedFees,\n zTransactionResponse: zBitcoinLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"BITCOIN_LIKE\",\n BitcoinLikeTransactionType,\n BitcoinLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n} from \"../common\";\n\n// #region ---------- Canton specific -------------------------------------------------------------\n\nexport const zCantonTransferProposal = z\n .object({\n amount: zUnsignedIntString.meta({ description: \"Transfer amount\" }),\n contractId: z.string().meta({ description: \"ID of the transfer-proposal contract\" }),\n instrumentAdmin: z.string().meta({ description: \"Issuer of the instrument being transferred\" }),\n instrumentId: z.string().meta({ description: \"ID of the instrument being transferred\" }),\n expiresAtMicros: z.number().int().meta({ description: \"Expiration timestamp in microseconds\" }),\n memo: z.string().nullable().meta({ description: \"Optional note attached to the proposal\" }),\n sender: z.string().meta({ description: \"Party proposing to send the asset\" }),\n recipient: z.string().meta({ description: \"Intended recipient of the proposed transfer\" }),\n })\n .meta({\n description: \"A pending asset-transfer request\",\n id: \"CantonTransferProposal\",\n });\n\nexport type CantonTransferProposal = z.infer<typeof zCantonTransferProposal>;\n\n// #endregion\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zCantonLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.CANTON_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Canton-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zCantonLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.CANTON_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Canton-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zCantonLikeTransactionType = z\n .enum([\n \"CANTON_LIKE_SEND\",\n \"CANTON_LIKE_SEND_TOKEN\",\n \"CANTON_LIKE_WITHDRAW\",\n \"CANTON_LIKE_RECEIVE\",\n \"CANTON_LIKE_PRE_APPROVAL\",\n \"CANTON_LIKE_TAP\",\n ])\n .meta({ description: \"Canton-like transaction type\" });\n\nexport type CantonLikeTransactionType = z.infer<typeof zCantonLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zExecuteBeforeSeconds = z\n .number()\n .int()\n .positive()\n .optional()\n .meta({ description: \"Execute before seconds\" });\n\nexport const zCantonLikeSendData = zCommonTransactionData\n .omit({ maxFee: true })\n .extend({\n executeBeforeSeconds: zExecuteBeforeSeconds,\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND),\n })\n .meta({\n description: \"Canton-like send data\",\n id: \"CantonLikeSendData\",\n });\n\nconst zCantonLikeSendTokenData = zCommonTransactionData\n .omit({ maxFee: true })\n .extend({\n executeBeforeSeconds: zExecuteBeforeSeconds,\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_SEND_TOKEN),\n })\n .meta({\n description: \"Canton-like send token data\",\n id: \"CantonLikeSendTokenData\",\n });\n\nconst zCantonLikeWithdrawData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transfer currency\",\n }), // TODO: to remove, use account.network instead\n transferProposal: zCantonTransferProposal,\n reason: z.string().nullable().meta({ description: \"Reason of the verdict\" }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_WITHDRAW),\n })\n .meta({\n description: \"Canton-like withdraw data\",\n id: \"CantonLikeWithdrawData\",\n });\n\nconst zCantonLikeReceiveData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transfer currency\",\n }), // TODO: to remove, use account.network instead\n transferProposal: zCantonTransferProposal,\n verdict: z.enum([\"ACCEPT\", \"REJECT\"]).meta({ description: \"Accept or reject the transfer\" }),\n reason: z.string().nullable().meta({ description: \"Reason of the verdict\" }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_RECEIVE),\n })\n .meta({\n description: \"Canton-like receive data\",\n id: \"CantonLikeReceiveData\",\n });\n\nconst zCantonLikePreApprovalData = z\n .object({\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }), // TODO: to remove, use account.network instead\n recipient: z.string().nonempty().meta({\n description: \"Recipient party on which to enable pre-approval\",\n }),\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_PRE_APPROVAL),\n })\n .meta({\n description: \"Canton-like pre-approval data\",\n id: \"CantonLikePreApprovalData\",\n });\n\nconst zCantonLikeTapData = zCommonTransactionData\n .extend({\n type: z.literal(zCantonLikeTransactionType.enum.CANTON_LIKE_TAP),\n })\n .meta({\n description: \"Canton-like tap data\",\n id: \"CantonLikeTapData\",\n });\n\nexport const zCantonLikeTransactionData = z.discriminatedUnion(\"type\", [\n zCantonLikeSendData,\n zCantonLikeSendTokenData,\n zCantonLikeWithdrawData,\n zCantonLikeReceiveData,\n zCantonLikePreApprovalData,\n zCantonLikeTapData,\n]);\n\nexport type CantonLikeTransactionData = z.infer<typeof zCantonLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zCantonLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zCantonLikeTransactionType })\n .meta({ description: \"Canton-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { CantonLikeTransactionData, CantonLikeTransactionType } from \"./schemas\";\nimport {\n zCantonLikeAssetFields,\n zCantonLikeLiveData,\n zCantonLikeSendData,\n zCantonLikeTransactionData,\n zCantonLikeTransactionResponse,\n zCantonLikeTransactionType,\n} from \"./schemas\";\n\nexport const CANTON_SPEC = {\n family: NetworkFamily.CANTON_LIKE,\n\n zAssetFields: zCantonLikeAssetFields,\n zLiveData: zCantonLikeLiveData,\n\n zTransactionType: zCantonLikeTransactionType,\n zTransactionData: zCantonLikeTransactionData,\n zSendTransactionData: zCantonLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zCantonLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"CANTON_LIKE\",\n CantonLikeTransactionType,\n CantonLikeTransactionData\n>;\n\n// Canton-specific...\n\nexport { type CantonTransferProposal, zCantonTransferProposal } from \"./schemas\";\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zCardanoLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.CARDANO_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Cardano-like\" });\n\n// #endregion\n\n// #region ---------- Live Data & Staking ---------------------------------------------------------\n\nconst zCardanoLikeStakingData = z\n .object({\n staked: z.string().meta({ description: \"Staked balance\" }),\n })\n .nullable()\n .meta({ description: \"Cardano-like staking data\" });\n\nexport const zCardanoLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.CARDANO_LIKE).meta({ description: \"Account type\" }),\n staking: zCardanoLikeStakingData.optional(),\n});\n\nexport const zCardanoLikeLiveData = zCommonLiveData\n .extend(zCardanoLikeStakingFields.shape)\n .meta({ description: \"Cardano-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zCardanoLikeTransactionType = z\n .enum([\n \"CARDANO_LIKE_SEND\",\n \"CARDANO_LIKE_RECEIVE\",\n \"CARDANO_LIKE_STAKING_REGISTER\",\n \"CARDANO_LIKE_STAKING_DEREGISTER\",\n \"CARDANO_LIKE_STAKING_DELEGATE\",\n \"CARDANO_LIKE_STAKING_WITHDRAW\",\n ])\n .meta({ description: \"Cardano-like transaction type\" });\n\nexport type CardanoLikeTransactionType = z.infer<typeof zCardanoLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zCardanoLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n })\n .meta({\n description: \"Cardano-like send data\",\n id: \"CardanoSendData\",\n });\n\nconst zCardanoStakingDelegateData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_DELEGATE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // DELEGATE doesn't have neither amount nor recipient\n stakePoolId: z.string().min(1).max(100).meta({ description: \"\" }),\n })\n .meta({\n description: \"Cardano-like staking delegate\",\n id: \"CardanoStakingDelegateData\",\n });\n\nconst zCardanoStakingDeregisterData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_DEREGISTER),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // DEREGISTER doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to deregister\" }),\n })\n .meta({\n description: \"Cardano-like staking deregister data\",\n id: \"CardanoStakingDeregisterData\",\n });\n\nconst zCardanoStakingRegisterData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_REGISTER),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // REGISTER doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to register\" }),\n })\n .meta({\n description: \"Cardano-like staking register data\",\n id: \"CardanoStakingRegisterData\",\n });\n\nconst zCardanoStakingWithdrawData = z\n .object({\n type: z.literal(zCardanoLikeTransactionType.enum.CARDANO_LIKE_STAKING_WITHDRAW),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }), // TODO: strict literal or enum?\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Cardano-like fee strategy\" }),\n // WITHDRAW doesn't have a recipient\n amount: zUnsignedIntString.meta({ description: \"Amount to withdraw\" }),\n })\n .meta({\n description: \"Cardano-like staking withdraw data\",\n id: \"CardanoStakingWithdrawData\",\n });\n\nexport const zCardanoLikeTransactionData = z.discriminatedUnion(\"type\", [\n zCardanoLikeSendData,\n zCardanoStakingDelegateData,\n zCardanoStakingDeregisterData,\n zCardanoStakingRegisterData,\n zCardanoStakingWithdrawData,\n]);\n\nexport type CardanoLikeTransactionData = z.infer<typeof zCardanoLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zCardanoLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zCardanoLikeTransactionType })\n .meta({ description: \"Cardano-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { CardanoLikeTransactionData, CardanoLikeTransactionType } from \"./schemas\";\nimport {\n zCardanoLikeAssetFields,\n zCardanoLikeLiveData,\n zCardanoLikeSendData,\n zCardanoLikeStakingFields,\n zCardanoLikeTransactionData,\n zCardanoLikeTransactionResponse,\n zCardanoLikeTransactionType,\n} from \"./schemas\";\n\nexport const CARDANO_SPEC = {\n family: NetworkFamily.CARDANO_LIKE,\n\n zAssetFields: zCardanoLikeAssetFields,\n zLiveData: zCardanoLikeLiveData,\n\n zTransactionType: zCardanoLikeTransactionType,\n zTransactionData: zCardanoLikeTransactionData,\n zSendTransactionData: zCardanoLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zCardanoLikeTransactionResponse,\n\n zStakingFields: zCardanoLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"CARDANO_LIKE\",\n CardanoLikeTransactionType,\n CardanoLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n zHexDataString,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zEthereumLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .nullable() // main account has null contract address\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .optional(),\n })\n .meta({ description: \"Ethereum-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zEthereumLikeStakingData = z\n .object({\n totalStaking: z.string().meta({ description: \"Total staked amount\" }),\n totalRewards: z.string().meta({ description: \"Total of rewards\" }),\n availableRewards: z.string().meta({ description: \"Available rewards\" }),\n networkApy: z.number().meta({ description: \"Network APY\" }),\n })\n .nullable()\n .meta({ description: \"Ethereum-like staking data\" });\n\nexport const zEthereumLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE).meta({ description: \"Account type\" }),\n staking: zEthereumLikeStakingData.optional(),\n});\n\nexport const zEthereumLikeLiveData = zCommonLiveData\n .extend(zEthereumLikeStakingFields.shape)\n .meta({ description: \"Ethereum-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zEthereumLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.ETHEREUM_LIKE),\n baseFees: zIntString,\n gasLimit: zIntString,\n nonce: z.string(),\n priorityFees: zIntString,\n })\n .meta({ description: \"Ethereum-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nconst zEthereumLikeTransferTransactionType = z\n .enum([\"ETHEREUM_LIKE_SEND\", \"ETHEREUM_LIKE_RECEIVE\"])\n .meta({ description: \"Ethereum-like transaction type\" });\n\nconst zEthereumLikeContractTransactionType = z\n .enum([\"ETHEREUM_LIKE_EXECUTE_CONTRACT\", \"ETHEREUM_LIKE_DEPLOY_CONTRACT\"])\n .meta({ description: \"Ethereum-like transaction type\" });\n\nexport const zEthereumLikeTransactionType = z\n .enum([\n ...zEthereumLikeTransferTransactionType.options,\n ...zEthereumLikeContractTransactionType.options,\n ])\n .meta({\n description: \"Ethereum-like transaction type\",\n });\n\nexport type EthereumLikeTransactionType = z.infer<typeof zEthereumLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zEthereumLikeLegacyFeeStrategy = zFeeStrategyCustom\n .extend({\n gasPrice: zUnsignedIntString.meta({ description: \"Gas price\" }),\n gasLimit: zUnsignedIntString.meta({ description: \"Gas limit\" }),\n })\n .meta({ description: \"Ethereum-like legacy fee strategy\" });\n\nconst zEthereumLikeEip1559FeeStrategy = zFeeStrategyCustom\n .extend({\n maxPriorityFeePerGas: zUnsignedIntString.meta({ description: \"Maximum priority fee per gas\" }),\n maxFeePerGas: zUnsignedIntString.meta({ description: \"Maximum fee per gas (base + priority)\" }),\n gasLimit: zUnsignedIntString.meta({ description: \"Gas limit\" }),\n })\n .meta({ description: \"Ethereum-like EIP-1559 fee strategy\" });\n\nconst zEthereumLikeFeeStrategy = z\n .union([zEthereumLikeLegacyFeeStrategy, zEthereumLikeEip1559FeeStrategy])\n .meta({\n description: \"Ethereum-like fee strategy\",\n id: \"EthereumLikeFeeStrategy\",\n });\n\nconst zEthereumLikeDeployContractData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeContractTransactionType.enum.ETHEREUM_LIKE_DEPLOY_CONTRACT),\n // force the recipient to be the zero address\n recipient: z.literal(\"0x0000000000000000000000000000000000000000\"),\n contractData: zHexDataString.meta({ description: \"Contract data in hexadecimal format\" }),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like deploy contract data\",\n id: \"EthereumLikeDeployContractData\",\n });\n\nconst zEthereumLikeExecuteContractData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeContractTransactionType.enum.ETHEREUM_LIKE_EXECUTE_CONTRACT),\n contractData: zHexDataString.meta({ description: \"Contract call data in hexadecimal format\" }),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like execute contract data\",\n id: \"EthereumLikeExecuteContractData\",\n });\n\nexport const zEthereumLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zEthereumLikeTransferTransactionType.enum.ETHEREUM_LIKE_SEND),\n feeStrategy: zEthereumLikeFeeStrategy,\n })\n .meta({\n description: \"Ethereum-like send data\",\n id: \"EthereumLikeSendData\",\n });\n\nexport const zEthereumLikeTransactionData = z.discriminatedUnion(\"type\", [\n zEthereumLikeDeployContractData,\n zEthereumLikeExecuteContractData,\n zEthereumLikeSendData,\n]);\n\nexport type EthereumLikeTransactionData = z.infer<typeof zEthereumLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nconst zEthereumLikeTransferCoinFields = z.object({\n type: zEthereumLikeTransferTransactionType,\n gasPrice: z.string(),\n gasLimit: z.string(),\n nonce: z.string(),\n});\n\nconst zEthereumLikeContractCoinFields = zEthereumLikeTransferCoinFields.extend({\n type: zEthereumLikeContractTransactionType,\n contractData: z.string().meta({ description: \"Contract deployment or contract execution data\" }),\n});\n\nexport const zEthereumLikeTransactionResponse = z\n .discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend(zEthereumLikeTransferCoinFields.shape)\n .meta({ description: \"Ethereum-like transfer transaction\" }),\n zCommonTransactionResponse\n .extend(zEthereumLikeContractCoinFields.shape)\n .meta({ description: \"Ethereum-like contract transaction\" }),\n ])\n .meta({ description: \"Ethereum-like contract transaction\" });\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { EthereumLikeTransactionData, EthereumLikeTransactionType } from \"./schemas\";\nimport {\n zEthereumLikeAssetFields,\n zEthereumLikeEstimatedFees,\n zEthereumLikeLiveData,\n zEthereumLikeSendData,\n zEthereumLikeStakingFields,\n zEthereumLikeTransactionData,\n zEthereumLikeTransactionResponse,\n zEthereumLikeTransactionType,\n} from \"./schemas\";\n\nexport const ETHEREUM_SPEC = {\n family: NetworkFamily.ETHEREUM_LIKE,\n\n zAssetFields: zEthereumLikeAssetFields,\n zLiveData: zEthereumLikeLiveData,\n\n zTransactionType: zEthereumLikeTransactionType,\n zTransactionData: zEthereumLikeTransactionData,\n zSendTransactionData: zEthereumLikeSendData,\n zEstimatedFees: zEthereumLikeEstimatedFees,\n zTransactionResponse: zEthereumLikeTransactionResponse,\n\n zStakingFields: zEthereumLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"ETHEREUM_LIKE\",\n EthereumLikeTransactionType,\n EthereumLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nimport { NetworkFamily, zCommonLiveData, zCommonTransactionResponse } from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zGenericAssetFields = z\n .object({ type: z.literal(NetworkFamily.GENERIC_LIKE).meta({ description: \"Account type\" }) })\n .meta({ description: \"Generic-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zGenericLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.GENERIC_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Generic-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zGenericTransactionType = z\n .enum([\"GENERIC_TRANSACTION\"])\n .meta({ description: \"Generic transaction type\" });\n\nexport type GenericTransactionType = z.infer<typeof zGenericTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zGenericTransactionData = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(zGenericTransactionType.enum.GENERIC_TRANSACTION),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n rawTx: z.string().meta({ description: \"Raw tx\" }),\n })\n .meta({\n description: \"Generic transaction data\",\n id: \"GenericTransactionData\",\n }),\n]);\n\nexport type GenericTransactionData = z.infer<typeof zGenericTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zGenericTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zGenericTransactionType })\n .meta({ description: \"Generic transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { GenericTransactionData, GenericTransactionType } from \"./schemas\";\nimport {\n zGenericAssetFields,\n zGenericLiveData,\n zGenericTransactionData,\n zGenericTransactionResponse,\n zGenericTransactionType,\n} from \"./schemas\";\n\nexport const GENERIC_SPEC = {\n family: NetworkFamily.GENERIC_LIKE,\n\n zAssetFields: zGenericAssetFields,\n zLiveData: zGenericLiveData,\n\n zTransactionType: zGenericTransactionType,\n zTransactionData: zGenericTransactionData,\n zSendTransactionData: z.never(),\n zEstimatedFees: z.never(),\n zTransactionResponse: zGenericTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"GENERIC_LIKE\", GenericTransactionType, GenericTransactionData>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zHederaLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.HEDERA_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n isActivated: z.boolean().meta({ description: \"Indicates if the account is activated\" }),\n })\n .meta({ description: \"Hedera-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zHederaLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.HEDERA_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Hedera-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zHederaLikeTransactionType = z\n .enum([\n \"HEDERA_LIKE_SEND\",\n \"HEDERA_LIKE_RECEIVE\",\n \"HEDERA_LIKE_SEND_TOKEN\",\n \"HEDERA_LIKE_RECEIVE_TOKEN\",\n ])\n .meta({ description: \"Hedera-like transaction type\" });\n\nexport type HederaLikeTransactionType = z.infer<typeof zHederaLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zHederaLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.HEDERA_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Hedera-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zHederaLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zHederaLikeTransactionType.enum.HEDERA_LIKE_SEND),\n feeStrategy: zFeeStrategy,\n })\n .meta({\n description: \"Hedera-like send data\",\n id: \"HederaLikeSendData\",\n });\n\nexport const zHederaLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zHederaLikeTransactionType.enum.HEDERA_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy,\n })\n .meta({\n description: \"Hedera-like send token data\",\n id: \"HederaLikeSendTokenData\",\n });\n\nexport const zHederaLikeTransactionData = z.discriminatedUnion(\"type\", [\n zHederaLikeSendData,\n zHederaLikeSendTokenData,\n]);\n\nexport type HederaLikeTransactionData = z.infer<typeof zHederaLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zHederaLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({\n type: zHederaLikeTransactionType,\n })\n .meta({ description: \"Hedera-like transaction\" }),\n]);\n\n// #endregion\n","import { z } from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport type { NetworkSpec } from \"../spec\";\nimport { makeTxHandler } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { HederaLikeTransactionData, HederaLikeTransactionType } from \"./schema\";\nimport {\n zHederaLikeAssetFields,\n zHederaLikeEstimatedFees,\n zHederaLikeLiveData,\n zHederaLikeSendData,\n zHederaLikeTransactionData,\n zHederaLikeTransactionResponse,\n zHederaLikeTransactionType,\n} from \"./schema\";\n\nexport const HEDERA_SPEC = {\n family: NetworkFamily.HEDERA_LIKE,\n\n zAssetFields: zHederaLikeAssetFields,\n zLiveData: zHederaLikeLiveData,\n\n zTransactionType: zHederaLikeTransactionType,\n zTransactionData: zHederaLikeTransactionData,\n zSendTransactionData: zHederaLikeSendData,\n zEstimatedFees: zHederaLikeEstimatedFees,\n zTransactionResponse: zHederaLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"HEDERA_LIKE\",\n HederaLikeTransactionType,\n HederaLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zPolkadotLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.POLKADOT_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Polkadot-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zPolkadotUnbondingAmount = z.object({\n amount: z.string().meta({ description: \"Amount\" }),\n waiting_time: z.string().meta({ description: \"Waiting time\" }),\n});\n\nconst zPolkadotLikeStakingData = z\n .object({\n info: z.object({\n controllerAddress: z.string().nullable().meta({ description: \"Controller address\" }),\n rewardsDestination: z.string().nullable().meta({ description: \"Rewards destination\" }),\n proxies: z.array(z.string()).meta({ description: \"Proxies\" }),\n legacyStaking: z.boolean().meta({ description: \"True if account uses legacy staking\" }),\n isNominator: z.boolean().meta({ description: \"True if is nominator\" }),\n }),\n balances: z.object({\n free: z.string().meta({ description: \"Free balance\" }),\n reserved: z.string().meta({ description: \"Reserved balance\" }),\n frozen: z.string().meta({ description: \"Frozen balance\" }),\n bonded: z.string().meta({ description: \"Bonded balance\" }),\n available: z.string().meta({ description: \"Available balance\" }),\n unbonding: z.array(zPolkadotUnbondingAmount).meta({ description: \"Unbonding balances\" }),\n unbonded: z.array(zPolkadotUnbondingAmount).meta({ description: \"Unbonded balances\" }),\n totalUnbonding: z.string().meta({ description: \"Total unbonding\" }),\n totalUnbonded: z.string().meta({ description: \"Total unbonded\" }),\n }),\n anonymousProxy: z\n .object({\n address: z.string().meta({ description: \"Address\" }),\n createdAt: z.string().meta({ description: \"Creation date\" }),\n isController: z.boolean().meta({ description: \"True if is controller\" }),\n isMain: z.boolean().meta({ description: \"True if is main\" }),\n balances: z\n .object({\n free: z.string().meta({ description: \"Anonymous proxy free balance\" }),\n reserved: z.string().meta({ description: \"Anonymous proxy reserved balance\" }),\n frozen: z.string().meta({ description: \"Anonymous proxy frozen balance\" }),\n bonded: z.string().meta({ description: \"Anonymous proxy bonded balance\" }),\n available: z.string().meta({ description: \"Anonymous proxy available balance\" }),\n total: z.string().meta({ description: \"Anonymous proxy total balance\" }),\n })\n .nullable(),\n blockHeight: z.string().meta({ description: \"Anonymous proxy block height\" }),\n extIndex: z.string().meta({ description: \"Ext index\" }),\n index: z.string().meta({ description: \"Index\" }),\n kind: z.string().meta({ description: \"Kind\" }),\n })\n .nullable()\n .meta({ description: \"Anonymous proxy\" }),\n })\n .nullable()\n .meta({ description: \"Polkadot-like staking data\" });\n\nexport const zPolkadotLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.POLKADOT_LIKE).meta({ description: \"Account type\" }),\n staking: zPolkadotLikeStakingData.optional(),\n});\n\nexport const zPolkadotLikeLiveData = zCommonLiveData\n .extend(zPolkadotLikeStakingFields.shape)\n .meta({ description: \"Polkadot-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zPolkadotLikeTransactionType = z\n .enum([\n \"POLKADOT_LIKE_SEND\",\n \"POLKADOT_LIKE_RECEIVE\",\n \"POLKADOT_LIKE_ADDPROXY\",\n \"POLKADOT_LIKE_REMOVEPROXY\",\n \"POLKADOT_LIKE_BOND\",\n \"POLKADOT_LIKE_REBOND\",\n \"POLKADOT_LIKE_BONDEXTRA\",\n \"POLKADOT_LIKE_UNBOND\",\n \"POLKADOT_LIKE_WITHDRAWUNBONDED\",\n \"POLKADOT_LIKE_SETCONTROLLER\",\n \"POLKADOT_LIKE_SETPAYEE\",\n \"POLKADOT_LIKE_PROXY\",\n \"POLKADOT_LIKE_ANONYMOUSPROXY\",\n \"POLKADOT_LIKE_KILLANONYMOUS\",\n \"POLKADOT_LIKE_PUREPROXY\",\n \"POLKADOT_LIKE_KILLPURE\",\n \"POLKADOT_LIKE_NOMINATE\",\n \"POLKADOT_LIKE_REWARD\",\n \"POLKADOT_LIKE_CHILL\",\n \"POLKADOT_LIKE_TRANSFERALL\",\n ])\n .meta({ description: \"Polkadot-like transaction type\" });\n\nexport type PolkadotLikeTransactionType = z.infer<typeof zPolkadotLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zPolkadotRewardDestination = z.enum([\"Staked\", \"Stash\"]);\n\nconst zPolkadotLikeAddProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_ADDPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n kind: z.literal(\"Staking\").meta({ description: \"Proxy kind\" }),\n proxy: z.string().meta({ description: \"Proxy address\" }),\n })\n .meta({\n description: \"Polkadot-like add proxy data\",\n id: \"PolkadotLikeAddProxyData\",\n });\n\nconst zPolkadotLikeAnonymousProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_ANONYMOUSPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like anonymous proxy data\",\n id: \"PolkadotLikeAnonymousProxyData\",\n });\n\nconst zPolkadotLikeBondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_BOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n payee: zPolkadotRewardDestination,\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like bond data\",\n id: \"PolkadotLikeBondData\",\n });\n\nconst zPolkadotLikeBondExtraData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_BONDEXTRA),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like bond extra data\",\n id: \"PolkadotLikeBondExtraData\",\n });\n\nconst zPolkadotLikeChillData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_CHILL),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like chill data\",\n id: \"PolkadotLikeChillData\",\n });\n\nconst zPolkadotLikeKillAnonymousData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_KILLANONYMOUS),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like kill anonymous data\",\n id: \"PolkadotLikeKillAnonymousData\",\n });\n\nconst zPolkadotLikeRebondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_REBOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like rebond data\",\n id: \"PolkadotLikeRebondData\",\n });\n\nconst zPolkadotLikeRemoveProxyData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_REMOVEPROXY),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n kind: z.literal(\"Staking\"),\n proxy: z.string().meta({ description: \"Proxy address\" }),\n })\n .meta({\n description: \"Polkadot-like remove proxy data\",\n id: \"PolkadotLikeRemoveProxyData\",\n });\n\nexport const zPolkadotLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_SEND),\n })\n .meta({\n description: \"Polkadot-like send data\",\n id: \"PolkadotLikeSendData\",\n });\n\nconst zPolkadotLikeSetPayeeData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_SETPAYEE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n payee: zPolkadotRewardDestination,\n })\n .meta({\n description: \"Polkadot-like set payee data\",\n id: \"PolkadotLikeSetPayeeData\",\n });\n\nconst zPolkadotLikeUnbondData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_UNBOND),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount\" }),\n })\n .meta({\n description: \"Polkadot-like unbond data\",\n id: \"PolkadotLikeUnbondData\",\n });\n\nconst zPolkadotLikeWithdrawUnbondedData = z\n .object({\n type: z.literal(zPolkadotLikeTransactionType.enum.POLKADOT_LIKE_WITHDRAWUNBONDED),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n })\n .meta({\n description: \"Polkadot-like withdraw unbonded data\",\n id: \"PolkadotLikeWithdrawUnbondedData\",\n });\n\nexport const zPolkadotLikeTransactionData = z.discriminatedUnion(\"type\", [\n zPolkadotLikeAddProxyData,\n zPolkadotLikeAnonymousProxyData,\n zPolkadotLikeBondData,\n zPolkadotLikeBondExtraData,\n zPolkadotLikeChillData,\n zPolkadotLikeKillAnonymousData,\n zPolkadotLikeRebondData,\n zPolkadotLikeRemoveProxyData,\n zPolkadotLikeSendData,\n zPolkadotLikeSetPayeeData,\n zPolkadotLikeUnbondData,\n zPolkadotLikeWithdrawUnbondedData,\n]);\n\nexport type PolkadotLikeTransactionData = z.infer<typeof zPolkadotLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zPolkadotLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zPolkadotLikeTransactionType })\n .meta({ description: \"Polkadot-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { PolkadotLikeTransactionData, PolkadotLikeTransactionType } from \"./schemas\";\nimport {\n zPolkadotLikeAssetFields,\n zPolkadotLikeLiveData,\n zPolkadotLikeSendData,\n zPolkadotLikeStakingFields,\n zPolkadotLikeTransactionData,\n zPolkadotLikeTransactionResponse,\n zPolkadotLikeTransactionType,\n} from \"./schemas\";\n\nexport const POLKADOT_SPEC = {\n family: NetworkFamily.POLKADOT_LIKE,\n\n zAssetFields: zPolkadotLikeAssetFields,\n zLiveData: zPolkadotLikeLiveData,\n\n zTransactionType: zPolkadotLikeTransactionType,\n zTransactionData: zPolkadotLikeTransactionData,\n zSendTransactionData: zPolkadotLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zPolkadotLikeTransactionResponse,\n\n zStakingFields: zPolkadotLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"POLKADOT_LIKE\",\n PolkadotLikeTransactionType,\n PolkadotLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zRippleLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.RIPPLE_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Ripple-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zRippleLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.RIPPLE_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Ripple-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zRippleLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.RIPPLE_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Ripple-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zRippleLikeTransactionType = z\n .enum([\"RIPPLE_LIKE_SEND\", \"RIPPLE_LIKE_RECEIVE\"])\n .meta({ description: \"Ripple-like transaction type\" });\n\nexport type RippleLikeTransactionType = z.infer<typeof zRippleLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zRippleLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zRippleLikeTransactionType.enum.RIPPLE_LIKE_SEND),\n destinationTag: zIntString.nullable().meta({ description: \"Destination tag\" }),\n feeStrategy: zFeeStrategyCustom.meta({ description: \"Ripple-like fee strategy\" }),\n })\n .meta({\n description: \"Ripple-like send data\",\n id: \"RippleLikeSendData\",\n });\n\nexport const zRippleLikeTransactionData = z.discriminatedUnion(\"type\", [zRippleLikeSendData]);\n\nexport type RippleLikeTransactionData = z.infer<typeof zRippleLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zRippleLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({\n type: zRippleLikeTransactionType,\n memos: z.array(z.string()),\n destinationTag: z.string(),\n })\n .meta({ description: \"Ripple-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { RippleLikeTransactionData, RippleLikeTransactionType } from \"./schemas\";\nimport {\n zRippleLikeAssetFields,\n zRippleLikeEstimatedFees,\n zRippleLikeLiveData,\n zRippleLikeSendData,\n zRippleLikeTransactionData,\n zRippleLikeTransactionResponse,\n zRippleLikeTransactionType,\n} from \"./schemas\";\n\nexport const RIPPLE_SPEC = {\n family: NetworkFamily.RIPPLE_LIKE,\n\n zAssetFields: zRippleLikeAssetFields,\n zLiveData: zRippleLikeLiveData,\n\n zTransactionType: zRippleLikeTransactionType,\n zTransactionData: zRippleLikeTransactionData,\n zSendTransactionData: zRippleLikeSendData,\n zEstimatedFees: zRippleLikeEstimatedFees,\n zTransactionResponse: zRippleLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"RIPPLE_LIKE\",\n RippleLikeTransactionType,\n RippleLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zSolanaLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.SOLANA_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .nullable()\n .optional(),\n })\n .meta({ description: \"Solana-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zSolanaStakingAccountStatus = z\n .enum([\"not_sync\", \"activating\", \"activated\", \"deactivating\", \"deactivated\", \"deleted\"])\n .meta({ description: \"Staking account status\" });\n\nconst zSolanaLikeStakingData = z\n .object({\n staked: z.string().meta({ description: \"Staked balance\" }),\n rewards: z.object({\n total: z.string().meta({ description: \"Total rewards\" }),\n last7: z.string().meta({ description: \"Rewards on last 7 days\" }),\n last30: z.string().meta({ description: \"Rewards on last 30 days\" }),\n }),\n stakes: z.array(\n z.object({\n uid: z.string(),\n baseAccountUid: z.string(),\n pubKey: z.string().meta({ description: \"Public key\" }),\n validatorPubKey: z.string().nullable().meta({ description: \"Validator public key\" }),\n initialAmount: z.string().meta({ description: \"Initial amount\" }),\n activeAmount: z.string().meta({ description: \"Active amount\" }),\n inactiveAmount: z.string().meta({ description: \"Inactive amount\" }),\n totalBalance: z.string().meta({ description: \"Total balance\" }),\n creationDate: z.string().meta({ description: \"Creation date\" }),\n activationEpoch: z.string().nullable().meta({ description: \"Activation epoch\" }),\n activationDate: z.string().nullable().meta({ description: \"Activation date\" }),\n deactivationEpoch: z.string().nullable().meta({ description: \"Deactivation epoch\" }),\n deactivationDate: z.string().nullable().meta({ description: \"Deactivation date\" }),\n status: zSolanaStakingAccountStatus,\n rentExemptReserve: z.string().meta({ description: \"Rent exempt reserve\" }),\n withdrawableAmount: z.string().meta({ description: \"Withdrawable amount\" }),\n totalRewards: z.string().meta({ description: \"Total rewards\" }),\n creationTxHash: z.string().nullable().meta({ description: \"Creation transaction hash\" }),\n actionsTxHashes: z.array(z.string()).meta({ description: \"Actions transactions hashes\" }),\n }),\n ),\n })\n .nullable()\n .meta({ description: \"Solana-like staking data\" });\n\nexport const zSolanaLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.SOLANA_LIKE).meta({ description: \"Account type\" }),\n staking: zSolanaLikeStakingData.optional(),\n});\n\nexport type SolanaLikeStakingFields = z.infer<typeof zSolanaLikeStakingFields>;\n\nexport const zSolanaLikeLiveData = zCommonLiveData\n .extend(zSolanaLikeStakingFields.shape)\n .meta({ description: \"Solana-like\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zSolanaLikeTransactionType = z\n .enum([\n \"SOLANA_LIKE_SEND\",\n \"SOLANA_LIKE_RECEIVE\",\n \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\",\n \"SOLANA_LIKE_DELEGATE_STAKE\",\n \"SOLANA_LIKE_WITHDRAW_STAKE\",\n \"SOLANA_LIKE_DEACTIVATE_STAKE\",\n \"SOLANA_LIKE_SPLIT_STAKE\",\n \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\",\n \"SOLANA_LIKE_MERGE_STAKE\",\n \"SOLANA_LIKE_SEND_TOKEN\",\n \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\",\n \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\",\n ])\n .meta({ description: \"Solana-like transaction type\" });\n\nexport type SolanaLikeTransactionType = z.infer<typeof zSolanaLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zSolanaLikeCreateDelegateStakeData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_CREATE_DELEGATE_STAKE),\n recipient: z.string().meta({ description: \"Delegated vote address\" }), // Re-described\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like create delegate stake data\",\n id: \"SolanaLikeCreateDelegateStakeData\",\n });\n\nconst zSolanaLikeDeactivateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_DEACTIVATE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient, no amount\n })\n .meta({\n description: \"Solana-like deactivate stake data\",\n id: \"SolanaLikeDeactivateStakeData\",\n });\n\nconst zSolanaLikeDelegateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_DELEGATE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().meta({ description: \"Delegated vote address\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No amount\n })\n .meta({\n description: \"Solana-like delegate stake data\",\n id: \"SolanaLikeDelegateStakeData\",\n });\n\nconst zSolanaLikeMergeStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_MERGE_STAKE),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n mergeSrcAccount: z.string().meta({ description: \"Source stake address\" }),\n mergeDstAccount: z.string().meta({ description: \"Destination stake address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient, no amount\n })\n .meta({\n description: \"Solana-like merge stake data\",\n id: \"SolanaLikeMergeStakeData\",\n });\n\nexport const zSolanaLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like send data\",\n id: \"SolanaLikeSendData\",\n });\n\nconst zSolanaLikeSplitDeactivateStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like split deactivate stake data\",\n id: \"SolanaLikeSplitDeactivateStakeData\",\n });\n\nconst zSolanaLikeSplitStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SPLIT_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like split stake data\",\n id: \"SolanaLikeSplitStakeData\",\n });\n\nconst zSolanaLikeWithdrawStakeData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_WITHDRAW_STAKE),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakeAccount: z.string().meta({ description: \"Stake account address\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n // No recipient\n })\n .meta({\n description: \"Solana-like withdraw stake data\",\n id: \"SolanaLikeWithdrawStakeData\",\n });\n\nconst zSolanaLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like send token data\",\n id: \"SolanaLikeSendTokenData\",\n });\n\nconst zSolanaLikeFundAndSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_FUND_AND_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like fund token account and send token data\",\n id: \"SolanaLikeFundAndSendTokenData\",\n });\n\n/**\n * This type of transaction requires both the token account address and the\n * token (\"contract\") address. These addresses can be obtained from the\n * associated account using the `accountId` field in the request data.\n */\nconst zSolanaLikeCreateTokenAccountData = z\n .object({\n type: z.literal(zSolanaLikeTransactionType.enum.SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Solana-like fee strategy\" }),\n })\n .meta({\n description: \"Solana-like create token account\",\n id: \"SolanaLikeCreateTokenAccountData\",\n });\n\nexport const zSolanaLikeTransactionData = z.discriminatedUnion(\"type\", [\n zSolanaLikeCreateDelegateStakeData,\n zSolanaLikeDeactivateStakeData,\n zSolanaLikeDelegateStakeData,\n zSolanaLikeMergeStakeData,\n zSolanaLikeSendData,\n zSolanaLikeSplitDeactivateStakeData,\n zSolanaLikeSplitStakeData,\n zSolanaLikeWithdrawStakeData,\n zSolanaLikeSendTokenData,\n zSolanaLikeFundAndSendTokenData,\n zSolanaLikeCreateTokenAccountData,\n]);\n\nexport type SolanaLikeTransactionData = z.infer<typeof zSolanaLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zSolanaLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zSolanaLikeTransactionType })\n .meta({ description: \"Solana-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { SolanaLikeTransactionData, SolanaLikeTransactionType } from \"./schemas\";\nimport {\n zSolanaLikeAssetFields,\n zSolanaLikeLiveData,\n zSolanaLikeSendData,\n zSolanaLikeStakingFields,\n zSolanaLikeTransactionData,\n zSolanaLikeTransactionResponse,\n zSolanaLikeTransactionType,\n} from \"./schemas\";\n\nexport const SOLANA_SPEC = {\n family: NetworkFamily.SOLANA_LIKE,\n\n zAssetFields: zSolanaLikeAssetFields,\n zLiveData: zSolanaLikeLiveData,\n\n zTransactionType: zSolanaLikeTransactionType,\n zTransactionData: zSolanaLikeTransactionData,\n zSendTransactionData: zSolanaLikeSendData,\n zEstimatedFees: z.never(),\n zTransactionResponse: zSolanaLikeTransactionResponse,\n\n zStakingFields: zSolanaLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"SOLANA_LIKE\",\n SolanaLikeTransactionType,\n SolanaLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zStellarLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.STELLAR_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Stellar-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zStellarLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.STELLAR_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Stellar-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zStellarLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.STELLAR_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Stellar-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zStellarLikeTransactionType = z\n .enum([\"STELLAR_LIKE_SEND\", \"STELLAR_LIKE_RECEIVE\"])\n .meta({ description: \"Stellar-like transaction type\" });\n\nexport type StellarLikeTransactionType = z.infer<typeof zStellarLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\n// https://developers.stellar.org/docs/learn/encyclopedia/memos\nconst zStellarMemo = z.discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(\"MEMO_TEXT\"),\n value: z.string().max(28).meta({ description: \"Text memo (at most a 28 bytes string)\" }),\n })\n .meta({ description: \"Text memo\" }),\n z\n .object({\n type: z.literal(\"MEMO_ID\"),\n value: zIntString.meta({ description: \"Id memo (unsigned 64 bits integer)\" }),\n })\n .meta({ description: \"Id memo\" }),\n z\n .object({\n type: z.literal(\"MEMO_HASH\"),\n value: z\n .string()\n .max(128)\n .regex(/^[a-fA-F0-9]+$/)\n .meta({ description: \"Transaction hash memo (64 bytes hexadecimal string)\" }),\n })\n .meta({ description: \"Hash memo\" }),\n z\n .object({\n type: z.literal(\"MEMO_RETURN\"),\n value: z\n .string()\n .max(128)\n .regex(/^[a-fA-F0-9]+$/)\n .meta({\n description:\n \"A 64 bytes hexadecimal string intended to be interpreted as the hash of the transaction the sender is refunding.\",\n }),\n })\n .meta({ description: \"Return memo\" }),\n]);\n\nexport const zStellarLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zStellarLikeTransactionType.enum.STELLAR_LIKE_SEND),\n memo: zStellarMemo.nullable().meta({ description: \"Stellar memo\" }),\n feeStrategy: zFeeStrategy.meta({ description: \"Stellar-like fee strategy\" }),\n })\n .meta({\n description: \"Stellar-like send data\",\n id: \"StellarLikeSendData\",\n });\n\nexport const zStellarLikeTransactionData = z.discriminatedUnion(\"type\", [zStellarLikeSendData]);\n\nexport type StellarLikeTransactionData = z.infer<typeof zStellarLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zStellarLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zStellarLikeTransactionType })\n .meta({ description: \"Stellar-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { StellarLikeTransactionData, StellarLikeTransactionType } from \"./schemas\";\nimport {\n zStellarLikeAssetFields,\n zStellarLikeEstimatedFees,\n zStellarLikeLiveData,\n zStellarLikeSendData,\n zStellarLikeTransactionData,\n zStellarLikeTransactionResponse,\n zStellarLikeTransactionType,\n} from \"./schemas\";\n\nexport const STELLAR_SPEC = {\n family: NetworkFamily.STELLAR_LIKE,\n\n zAssetFields: zStellarLikeAssetFields,\n zLiveData: zStellarLikeLiveData,\n\n zTransactionType: zStellarLikeTransactionType,\n zTransactionData: zStellarLikeTransactionData,\n zSendTransactionData: zStellarLikeSendData,\n zEstimatedFees: zStellarLikeEstimatedFees,\n zTransactionResponse: zStellarLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\n \"STELLAR_LIKE\",\n StellarLikeTransactionType,\n StellarLikeTransactionData\n>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zSuiLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.SUI_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Sui-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zSuiLikeStakingData = z\n .object({\n totalStaked: z.string().meta({ description: \"Total staked amount\" }),\n totalRewards: z.string().meta({ description: \"Total of rewards\" }),\n })\n .nullable()\n .meta({ description: \"Sui-like staking data\" });\n\nexport const zSuiLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.SUI_LIKE).meta({ description: \"Account type\" }),\n staking: zSuiLikeStakingData.optional(),\n});\n\nexport const zSuiLikeLiveData = zCommonLiveData\n .extend(zSuiLikeStakingFields.shape)\n .meta({ description: \"Sui-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zSuiLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.SUI_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Sui-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\nexport const zSuiLikeTransactionType = z\n .enum([\n \"SUI_LIKE_SEND\",\n \"SUI_LIKE_RECEIVE\",\n \"SUI_LIKE_SEND_TOKEN\",\n \"SUI_LIKE_RECEIVE_TOKEN\",\n \"SUI_LIKE_STAKE\",\n \"SUI_LIKE_UNSTAKE\",\n ])\n .meta({ description: \"Sui-like transaction type\" });\n\nexport type SuiLikeTransactionType = z.infer<typeof zSuiLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nexport const zSuiLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n })\n .meta({\n description: \"Sui-like send data\",\n id: \"SuiLikeSendData\",\n });\n\nconst zSuiLikeTransferTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n })\n .meta({\n description: \"Sui-like transfer token data\",\n id: \"SuiLikeTransferTokenData\",\n });\n\nconst zSuiLikeStakeData = z\n .object({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_STAKE),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n amount: zUnsignedIntString.meta({ description: \"Transaction amount\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n // DELEGATE does not have recipient, but has validator instead\n validator: z.string().nonempty().meta({ description: \"Validator address\" }),\n })\n .meta({\n description: \"Sui-like stake data\",\n id: \"SuiLikeStakeData\",\n });\n\nconst zSuiLikeUnstakeData = z\n .object({\n type: z.literal(zSuiLikeTransactionType.enum.SUI_LIKE_UNSTAKE),\n feeStrategy: zFeeStrategy.meta({ description: \"Sui-like fee strategy\" }),\n currency: zCurrencyString.meta({\n description: \"Will be deprecated soon, use Account.network. Transaction currency\",\n }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n stakedSuiId: z\n .string()\n .nonempty()\n .meta({ description: \"Staked object to (partially?) unstake\" }),\n amount: zUnsignedIntString.meta({ description: \"Amount to unstake from the position\" }),\n useAllAmount: z.boolean().meta({\n description:\n \"Whether to unstake the full amount (triggers different sets of transaction commands)\",\n }),\n })\n .meta({\n description: \"Sui-like unstake data\",\n id: \"SuiLikeUnstakeData\",\n });\n\nexport const zSuiLikeTransactionData = z.discriminatedUnion(\"type\", [\n zSuiLikeSendData,\n zSuiLikeTransferTokenData,\n zSuiLikeStakeData,\n zSuiLikeUnstakeData,\n]);\n\nexport type SuiLikeTransactionData = z.infer<typeof zSuiLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zSuiLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zSuiLikeTransactionType })\n .meta({ description: \"Sui-like transaction\" }),\n]);\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { SuiLikeTransactionData, SuiLikeTransactionType } from \"./schemas\";\nimport {\n zSuiLikeAssetFields,\n zSuiLikeEstimatedFees,\n zSuiLikeLiveData,\n zSuiLikeSendData,\n zSuiLikeStakingFields,\n zSuiLikeTransactionData,\n zSuiLikeTransactionResponse,\n zSuiLikeTransactionType,\n} from \"./schemas\";\n\nexport const SUI_SPEC = {\n family: NetworkFamily.SUI_LIKE,\n\n zAssetFields: zSuiLikeAssetFields,\n zLiveData: zSuiLikeLiveData,\n\n zTransactionType: zSuiLikeTransactionType,\n zTransactionData: zSuiLikeTransactionData,\n zSendTransactionData: zSuiLikeSendData,\n zEstimatedFees: zSuiLikeEstimatedFees,\n zTransactionResponse: zSuiLikeTransactionResponse,\n\n zStakingFields: zSuiLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"SUI_LIKE\", SuiLikeTransactionType, SuiLikeTransactionData>;\n","import z from \"zod\";\n\nimport { zCurrencyString, zIntString, zUnsignedIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategyCustom,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zTezosLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.TEZOS_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n })\n .meta({ description: \"Tezos-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nconst zTezosLikeStakingData = z\n .object({\n delegations: z.array(\n z.object({\n address: z.string(),\n }),\n ),\n })\n .nullable()\n .meta({ description: \"Tezos-like staking data\" });\n\nexport const zTezosLikeStakingFields = z.object({\n type: z.literal(NetworkFamily.TEZOS_LIKE).meta({ description: \"Account type\" }),\n staking: zTezosLikeStakingData.optional(),\n});\n\nexport const zTezosLikeLiveData = zCommonLiveData\n .extend(zTezosLikeStakingFields.shape)\n .meta({ description: \"Tezos-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zTezosLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.TEZOS_LIKE),\n fee: zIntString,\n })\n .describe(\"Tezos-like fees\");\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zTezosLikeTransactionType = z\n .enum([\n \"TEZOS_LIKE_SEND\",\n \"TEZOS_LIKE_RECEIVE\",\n \"TEZOS_LIKE_REVEAL\",\n \"TEZOS_LIKE_DELEGATE\",\n \"TEZOS_LIKE_UNDELEGATE\",\n ])\n .meta({ description: \"Tezos-like transaction type\" });\n\nexport type TezosLikeTransactionType = z.infer<typeof zTezosLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zTezosLikeFeeStrategy = zFeeStrategyCustom.meta({ description: \"Tezos-like fee strategy\" });\n\nexport const zTezosLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_SEND),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like send data\",\n id: \"TezosLikeSendData\",\n });\n\nconst zTezosLikeDelegateData = z\n .object({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_DELEGATE),\n amount: zUnsignedIntString.optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().meta({ description: \"Transaction recipient\" }),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like delegate data\",\n id: \"TezosLikeDelegateData\",\n });\n\nconst zTezosLikeUndelegateData = z\n .object({\n type: z.literal(zTezosLikeTransactionType.enum.TEZOS_LIKE_UNDELEGATE),\n amount: zUnsignedIntString.optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n currency: zCurrencyString.meta({ description: \"Transaction currency\" }),\n maxFee: zUnsignedIntString.nullable().meta({ description: \"Transaction max fee\" }),\n recipient: z.string().nonempty().optional().meta({ description: \"Deprecated: DO NOT USE!\" }),\n feeStrategy: zTezosLikeFeeStrategy,\n })\n .meta({\n description: \"Tezos-like undelegate data\",\n id: \"TezosLikeUndelegateData\",\n });\n\nexport const zTezosLikeTransactionData = z.discriminatedUnion(\"type\", [\n zTezosLikeSendData,\n zTezosLikeDelegateData,\n zTezosLikeUndelegateData,\n]);\n\nexport type TezosLikeTransactionData = z.infer<typeof zTezosLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTezosLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zTezosLikeTransactionType })\n .meta({ description: \"Tezos-like transaction\" }),\n]);\n\n// #endregion\n","import { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { TezosLikeTransactionData, TezosLikeTransactionType } from \"./schemas\";\nimport {\n zTezosLikeAssetFields,\n zTezosLikeEstimatedFees,\n zTezosLikeLiveData,\n zTezosLikeSendData,\n zTezosLikeStakingFields,\n zTezosLikeTransactionData,\n zTezosLikeTransactionResponse,\n zTezosLikeTransactionType,\n} from \"./schemas\";\n\nexport const TEZOS_SPEC = {\n family: NetworkFamily.TEZOS_LIKE,\n\n zAssetFields: zTezosLikeAssetFields,\n zLiveData: zTezosLikeLiveData,\n\n zTransactionType: zTezosLikeTransactionType,\n zTransactionData: zTezosLikeTransactionData,\n zSendTransactionData: zTezosLikeSendData,\n zEstimatedFees: zTezosLikeEstimatedFees,\n zTransactionResponse: zTezosLikeTransactionResponse,\n\n zStakingFields: zTezosLikeStakingFields,\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"TEZOS_LIKE\", TezosLikeTransactionType, TezosLikeTransactionData>;\n","import z from \"zod\";\n\nimport { zIntString } from \"@/zod-utils\";\n\nimport {\n NetworkFamily,\n zCommonLiveData,\n zCommonTransactionData,\n zCommonTransactionResponse,\n zFeeStrategy,\n} from \"../common\";\n\n// #region ---------- Asset Fields ----------------------------------------------------------------\n\nexport const zTronLikeAssetFields = z\n .object({\n type: z.literal(NetworkFamily.TRON_LIKE).meta({ description: \"Account type\" }),\n address: z.string().nullable().meta({ description: \"Account address\" }),\n contractAddress: z\n .string()\n .nullable() // main account has null contract address\n .meta({\n description:\n \"Will be deprecated, Use contractAddress at root level instead; Token contract address\",\n })\n .optional(),\n })\n .meta({ description: \"Tron-like\" });\n\n// #endregion\n\n// #region ---------- Live Data -------------------------------------------------------------------\n\nexport const zTronLikeLiveData = zCommonLiveData\n .extend({\n type: z.literal(NetworkFamily.TRON_LIKE).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Tron-like\" });\n\n// #endregion\n\n// #region ---------- Estimated Fee ---------------------------------------------------------------\n\nexport const zTronLikeEstimatedFees = z\n .object({\n type: z.literal(NetworkFamily.TRON_LIKE),\n fee: zIntString,\n })\n .meta({ description: \"Tron-like fees\" });\n\n// #endregion\n\n// #region ---------- Transaction Type ------------------------------------------------------------\n\nexport const zTronLikeTransactionType = z\n .enum([\"TRON_LIKE_SEND\", \"TRON_LIKE_RECEIVE\", \"TRON_LIKE_SEND_TOKEN\", \"TRON_LIKE_RECEIVE_TOKEN\"])\n .meta({ description: \"Tron-like transaction type\" });\n\nexport type TronLikeTransactionType = z.infer<typeof zTronLikeTransactionType>;\n\n// #endregion\n\n// #region ---------- Transaction Data ------------------------------------------------------------\n\nconst zTronLikeSendData = zCommonTransactionData\n .extend({\n type: z.literal(zTronLikeTransactionType.enum.TRON_LIKE_SEND),\n feeStrategy: zFeeStrategy.meta({ description: \"Tron-like fee strategy\" }),\n })\n .meta({\n description: \"Tron-like send data\",\n id: \"TronLikeSendData\",\n });\n\nconst zTronLikeSendTokenData = zCommonTransactionData\n .extend({\n type: z.literal(zTronLikeTransactionType.enum.TRON_LIKE_SEND_TOKEN),\n feeStrategy: zFeeStrategy.meta({ description: \"Tron-like fee strategy\" }),\n })\n .meta({\n description: \"Tron-like send token data\",\n id: \"TronLikeSendTokenData\",\n });\n\nexport const zTronLikeTransactionData = z.discriminatedUnion(\"type\", [\n zTronLikeSendData,\n zTronLikeSendTokenData,\n]);\n\nexport type TronLikeTransactionData = z.infer<typeof zTronLikeTransactionData>;\n\n// #endregion\n\n// #region ---------- Transaction Response --------------------------------------------------------\n\nexport const zTronLikeTransactionResponse = z.discriminatedUnion(\"type\", [\n zCommonTransactionResponse\n .extend({ type: zTronLikeTransactionType })\n .meta({ description: \"Tron-like transaction\" }),\n]);\n\n// #endregion\n","import z from \"zod\";\n\nimport { NetworkFamily } from \"../common\";\nimport { makeTxHandler, type NetworkSpec } from \"../spec\";\nimport { convertTxToGovernableIntent } from \"./governance\";\nimport { getTxHsmProps } from \"./hsm\";\nimport type { TronLikeTransactionData, TronLikeTransactionType } from \"./schemas\";\nimport {\n zTronLikeAssetFields,\n zTronLikeEstimatedFees,\n zTronLikeLiveData,\n zTronLikeTransactionData,\n zTronLikeTransactionResponse,\n zTronLikeTransactionType,\n} from \"./schemas\";\n\nexport const TRON_SPEC = {\n family: NetworkFamily.TRON_LIKE,\n\n zAssetFields: zTronLikeAssetFields,\n zLiveData: zTronLikeLiveData,\n\n zTransactionType: zTronLikeTransactionType,\n zTransactionData: zTronLikeTransactionData,\n zSendTransactionData: z.never(),\n zEstimatedFees: zTronLikeEstimatedFees,\n zTransactionResponse: zTronLikeTransactionResponse,\n\n zStakingFields: z.never(),\n\n withTx: (tx) => makeTxHandler(tx, { getTxHsmProps, convertTxToGovernableIntent }),\n} as const satisfies NetworkSpec<\"TRON_LIKE\", TronLikeTransactionType, TronLikeTransactionData>;\n","import type { Account } from \"@prisma/client\";\nimport { match, P } from \"ts-pattern\";\nimport z from \"zod\";\n\nimport type { TypeEquals } from \"@/type-utils\";\nimport type { GovernableIntent } from \"@/types\";\n\nimport { BITCOIN_SPEC } from \"./bitcoin\";\nimport { CANTON_SPEC } from \"./canton\";\nimport { CARDANO_SPEC } from \"./cardano\";\nimport { NetworkFamily, zCommonLiveData } from \"./common\";\nimport { ETHEREUM_SPEC } from \"./ethereum\";\nimport { GENERIC_SPEC } from \"./generic\";\nimport { HEDERA_SPEC } from \"./hedera\";\nimport { POLKADOT_SPEC } from \"./polkadot\";\nimport { RIPPLE_SPEC } from \"./ripple\";\nimport { SOLANA_SPEC } from \"./solana\";\nimport type { TxHandler, TxHsmProps } from \"./spec\";\nimport { STELLAR_SPEC } from \"./stellar\";\nimport { SUI_SPEC } from \"./sui\";\nimport { TEZOS_SPEC } from \"./tezos\";\nimport { TRON_SPEC } from \"./tron\";\n\nexport { NetworkFamily };\n\n// #region ---------- NetworkAssetFields ----------------------------------------------------------\n\nexport const zNetworkAssetFields = z\n .discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zAssetFields,\n CANTON_SPEC.zAssetFields,\n CARDANO_SPEC.zAssetFields,\n ETHEREUM_SPEC.zAssetFields,\n GENERIC_SPEC.zAssetFields,\n HEDERA_SPEC.zAssetFields,\n POLKADOT_SPEC.zAssetFields,\n RIPPLE_SPEC.zAssetFields,\n SOLANA_SPEC.zAssetFields,\n STELLAR_SPEC.zAssetFields,\n SUI_SPEC.zAssetFields,\n TEZOS_SPEC.zAssetFields,\n TRON_SPEC.zAssetFields,\n ])\n .meta({ description: \"Network asset fields\" });\n\n// #endregion\n\n// #region ---------- AccountLiveData -------------------------------------------------------------\n\nexport { zCommonLiveData };\n\nexport const zAccountLiveData = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zLiveData,\n CANTON_SPEC.zLiveData,\n CARDANO_SPEC.zLiveData,\n ETHEREUM_SPEC.zLiveData,\n GENERIC_SPEC.zLiveData,\n HEDERA_SPEC.zLiveData,\n POLKADOT_SPEC.zLiveData,\n RIPPLE_SPEC.zLiveData,\n SOLANA_SPEC.zLiveData,\n STELLAR_SPEC.zLiveData,\n SUI_SPEC.zLiveData,\n TEZOS_SPEC.zLiveData,\n TRON_SPEC.zLiveData,\n]);\n\nexport const zAccountStakingFields = z.discriminatedUnion(\"type\", [\n CARDANO_SPEC.zStakingFields,\n ETHEREUM_SPEC.zStakingFields,\n POLKADOT_SPEC.zStakingFields,\n SOLANA_SPEC.zStakingFields,\n SUI_SPEC.zStakingFields,\n TEZOS_SPEC.zStakingFields,\n]);\n\nexport type AccountStakingFields = z.infer<typeof zAccountStakingFields>;\n\nexport type StakingDataOf<T extends AccountStakingFields[\"type\"]> = NonNullable<\n Extract<AccountStakingFields, { type: T }>[\"staking\"]\n>;\n\n// #endregion\n\n// #region ---------- EstimatedFees -------------------------------------------------------------\n\nexport const zEstimatedFees = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zEstimatedFees,\n ETHEREUM_SPEC.zEstimatedFees,\n HEDERA_SPEC.zEstimatedFees,\n RIPPLE_SPEC.zEstimatedFees,\n STELLAR_SPEC.zEstimatedFees,\n SUI_SPEC.zEstimatedFees,\n TEZOS_SPEC.zEstimatedFees,\n TRON_SPEC.zEstimatedFees,\n]);\n\nexport type EstimatedFees = z.infer<typeof zEstimatedFees>;\n\n// #endregion\n\n// #region ---------- TransactionType -------------------------------------------------------------\n\nexport const zTransactionType = z.union([\n BITCOIN_SPEC.zTransactionType,\n CANTON_SPEC.zTransactionType,\n CARDANO_SPEC.zTransactionType,\n ETHEREUM_SPEC.zTransactionType,\n GENERIC_SPEC.zTransactionType,\n HEDERA_SPEC.zTransactionType,\n POLKADOT_SPEC.zTransactionType,\n RIPPLE_SPEC.zTransactionType,\n SOLANA_SPEC.zTransactionType,\n STELLAR_SPEC.zTransactionType,\n SUI_SPEC.zTransactionType,\n TEZOS_SPEC.zTransactionType,\n TRON_SPEC.zTransactionType,\n]);\n\n// Runtime counterpart of the `TransactionType` type, a type-safe enum-like\n// object providing constants like `TransactionType.BITCOIN_LIKE_SEND`.\nexport const TransactionType = {\n ...BITCOIN_SPEC.zTransactionType.enum,\n ...CANTON_SPEC.zTransactionType.enum,\n ...CARDANO_SPEC.zTransactionType.enum,\n ...ETHEREUM_SPEC.zTransactionType.enum,\n ...HEDERA_SPEC.zTransactionType.enum,\n ...GENERIC_SPEC.zTransactionType.enum,\n ...POLKADOT_SPEC.zTransactionType.enum,\n ...RIPPLE_SPEC.zTransactionType.enum,\n ...SOLANA_SPEC.zTransactionType.enum,\n ...STELLAR_SPEC.zTransactionType.enum,\n ...SUI_SPEC.zTransactionType.enum,\n ...TEZOS_SPEC.zTransactionType.enum,\n ...TRON_SPEC.zTransactionType.enum,\n} as const;\n\nexport type TransactionType = z.infer<typeof zTransactionType>;\n\n/* v8 ignore next -- @preserve */\nconst _ensureTransactionTypeEnum = (\n shouldBeTrue: TypeEquals<keyof typeof TransactionType, TransactionType>,\n): true => shouldBeTrue;\n\n// TODO: Rename `GENERIC_LIKE` to `GENERIC` (or something else)\nconst _TRANSACTION_TYPE_PREFIXES = {\n ...NetworkFamily,\n // TODO: Sometimes `NetworkFamily` is not a `TransactionType` prefix - but why?\n [NetworkFamily.GENERIC_LIKE]: \"GENERIC\",\n} as const satisfies Record<NetworkFamily, string>;\n\ntype TransactionTypePrefixOf<T extends NetworkFamily> = (typeof _TRANSACTION_TYPE_PREFIXES)[T];\n\nexport type TransactionTypeOf<T extends NetworkFamily> = TransactionType &\n `${TransactionTypePrefixOf<T>}_${string}`;\n\n// #endregion\n\n// #region ---------- TransactionData -------------------------------------------------------------\n\nexport const zTransactionData = z.discriminatedUnion(\"type\", [\n ...BITCOIN_SPEC.zTransactionData.options,\n ...CANTON_SPEC.zTransactionData.options,\n ...CARDANO_SPEC.zTransactionData.options,\n ...ETHEREUM_SPEC.zTransactionData.options,\n ...GENERIC_SPEC.zTransactionData.options,\n ...HEDERA_SPEC.zTransactionData.options,\n ...POLKADOT_SPEC.zTransactionData.options,\n ...RIPPLE_SPEC.zTransactionData.options,\n ...SOLANA_SPEC.zTransactionData.options,\n ...STELLAR_SPEC.zTransactionData.options,\n ...SUI_SPEC.zTransactionData.options,\n ...TEZOS_SPEC.zTransactionData.options,\n ...TRON_SPEC.zTransactionData.options,\n]);\n\nexport type TransactionData = z.infer<typeof zTransactionData>;\n\nexport type TransactionDataOf<T extends NetworkFamily | TransactionType> = T extends TransactionType\n ? Extract<TransactionData, { type: T }>\n : T extends NetworkFamily\n ? Extract<TransactionData, { type: TransactionTypeOf<T> }>\n : never;\n\nexport const zSendOnlyTransactionData = z.discriminatedUnion(\"type\", [\n BITCOIN_SPEC.zSendTransactionData,\n CANTON_SPEC.zSendTransactionData,\n CARDANO_SPEC.zSendTransactionData,\n ETHEREUM_SPEC.zSendTransactionData,\n HEDERA_SPEC.zSendTransactionData,\n POLKADOT_SPEC.zSendTransactionData,\n RIPPLE_SPEC.zSendTransactionData,\n SOLANA_SPEC.zSendTransactionData,\n STELLAR_SPEC.zSendTransactionData,\n SUI_SPEC.zSendTransactionData,\n TEZOS_SPEC.zSendTransactionData,\n]);\n\nexport type SendOnlyTransactionData = z.infer<typeof zSendOnlyTransactionData>;\n\n// #endregion\n\n// #region ---------- TransactionResponse ---------------------------------------------------------\n\nexport const zTransactionResponse = z.discriminatedUnion(\"type\", [\n ...BITCOIN_SPEC.zTransactionResponse.options,\n ...CANTON_SPEC.zTransactionResponse.options,\n ...CARDANO_SPEC.zTransactionResponse.options,\n ...ETHEREUM_SPEC.zTransactionResponse.options,\n ...GENERIC_SPEC.zTransactionResponse.options,\n ...HEDERA_SPEC.zTransactionResponse.options,\n ...POLKADOT_SPEC.zTransactionResponse.options,\n ...RIPPLE_SPEC.zTransactionResponse.options,\n ...SOLANA_SPEC.zTransactionResponse.options,\n ...STELLAR_SPEC.zTransactionResponse.options,\n ...SUI_SPEC.zTransactionResponse.options,\n ...TEZOS_SPEC.zTransactionResponse.options,\n ...TRON_SPEC.zTransactionResponse.options,\n]);\n\nexport type TransactionResponse = z.infer<typeof zTransactionResponse>;\n\n// #endregion\n\n// #region ---------- Functions -------------------------------------------------------------------\n\ntype TxCallback<T> = (txHandler: TxHandler) => T;\n\nconst dispatchTx = <T>(tx: TransactionData, callback: TxCallback<T>): T =>\n match(tx)\n .with({ type: P.string.startsWith(NetworkFamily.BITCOIN_LIKE) }, (matchedTx) =>\n callback(BITCOIN_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.CANTON_LIKE) }, (matchedTx) =>\n callback(CANTON_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.CARDANO_LIKE) }, (matchedTx) =>\n callback(CARDANO_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.ETHEREUM_LIKE) }, (matchedTx) =>\n callback(ETHEREUM_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.HEDERA_LIKE) }, (matchedTx) =>\n callback(HEDERA_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.POLKADOT_LIKE) }, (matchedTx) =>\n callback(POLKADOT_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.RIPPLE_LIKE) }, (matchedTx) =>\n callback(RIPPLE_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.SOLANA_LIKE) }, (matchedTx) =>\n callback(SOLANA_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.STELLAR_LIKE) }, (matchedTx) =>\n callback(STELLAR_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.SUI_LIKE) }, (matchedTx) =>\n callback(SUI_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.TEZOS_LIKE) }, (matchedTx) =>\n callback(TEZOS_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(NetworkFamily.TRON_LIKE) }, (matchedTx) =>\n callback(TRON_SPEC.withTx(matchedTx)),\n )\n .with({ type: P.string.startsWith(\"GENERIC\") }, (matchedTx) =>\n callback(GENERIC_SPEC.withTx(matchedTx)),\n )\n .exhaustive();\n\nexport const getTxHsmProps = (tx: TransactionData, account: Account): TxHsmProps =>\n dispatchTx(tx, (txHandler) => txHandler.getHsmProps(account));\n\nexport const convertTxToGovernableIntent = (tx: TransactionData): GovernableIntent =>\n dispatchTx(tx, (txHandler) => txHandler.convertToGovernableIntent());\n\n// #endregion\n\n// Export all network specs...\nexport {\n BITCOIN_SPEC,\n CANTON_SPEC,\n ETHEREUM_SPEC,\n GENERIC_SPEC,\n HEDERA_SPEC,\n SUI_SPEC,\n CARDANO_SPEC,\n POLKADOT_SPEC,\n SOLANA_SPEC,\n RIPPLE_SPEC,\n STELLAR_SPEC,\n TEZOS_SPEC,\n TRON_SPEC,\n};\n\n// Network specific...\n\nexport { type CantonTransferProposal, zCantonTransferProposal } from \"./canton\";\n","/** Error thrown when a model object does not pass the validation. */\nexport class ValidationError extends Error {}\n\n/** Error thrown when data is in an unexpected state - e.g. missing objects or duplicate entries */\nexport class DataInconsistencyError extends Error {}\n","import type {\n GateAccountType,\n GateEntityType,\n GateGroupType,\n GatePolicyType,\n GateRequestType,\n GateReviewConfigType,\n GateSciConfigType,\n GateUserType,\n GateWhitelistType,\n GateWorkspaceRuleType,\n} from \"@prisma/client\";\n\nimport { ValidationError } from \"./errors\";\n\nexport type GateType =\n | GateAccountType\n | GateEntityType\n | GateGroupType\n | GateReviewConfigType\n | GatePolicyType\n | GateRequestType\n | GateUserType\n | GateWhitelistType\n | GateWorkspaceRuleType\n | GateSciConfigType;\n\nconst GATE_SYNC_ID_PREFIX = \"gate://\";\n\n/** Build `syncId` for object synchronized from Gate. */\nexport const buildGateSyncId = (\n workspaceName: string,\n gateType: GateType,\n gateId: number,\n): string => {\n if (gateId <= 0) {\n throw new ValidationError(`Invalid gate ID: ${gateId}`);\n }\n return `${GATE_SYNC_ID_PREFIX}${workspaceName}/${gateType}/${gateId}`;\n};\n\n/**\n * Object that might have been synchronized from Gate.\n *\n * - To create a new object, `gateType` can be omitted (like `gateId` and `syncId`).\n * - For an object already saved in DB, `gateType` can be null.\n */\nexport type Syncable<T> = Omit<T, \"gateType\" | \"gateId\" | \"syncId\"> & {\n workspaceName: string;\n gateType?: GateType | null;\n gateId?: number;\n syncId?: string;\n};\n\n/**\n * Validate object sync fields.\n *\n * Following are some possible combinations:\n *\n * - All the fields are missing (`undefined`): This happens when we create a new object which\n * does not come from Gate. In such case, we will use default values defined in Prisma schema.\n * - All the fields are present:\n * - When `gateType` is not null: This happens for objects that come from Gate.\n * - When `gateType` is null: This happens for objects that do not come from Gate.\n *\n * All other combinations should be considered as invalid.\n */\nexport const validateSyncFields = <T>(syncable: Syncable<T>): void => {\n const { workspaceName, gateType, gateId, syncId } = syncable;\n\n // Case 1: All fields are missing.\n if (gateType === undefined && gateId === undefined && syncId === undefined) {\n return;\n }\n\n // Case 2: All fields are present...\n if (gateType !== undefined && gateId !== undefined && syncId !== undefined) {\n if (gateType !== null) {\n // Case 2.1: `gateType` is not null: Object is coming from Gate.\n if (gateId <= 0) {\n throw new ValidationError(`Invalid gateId for ${gateType}: ${gateId}`);\n }\n const expectedSyncId = buildGateSyncId(workspaceName, gateType, gateId);\n if (expectedSyncId !== syncId) {\n throw new ValidationError(`Invalid syncId: expected ${expectedSyncId} but got ${syncId}`);\n }\n } else {\n // Case 2.2: `gateType` is null: Object is not coming from Gate.\n if (gateId !== 0) {\n throw new ValidationError(`Expected gateId to be 0 but got: ${gateId}`);\n }\n if (syncId.startsWith(GATE_SYNC_ID_PREFIX)) {\n throw new ValidationError(\n `Invalid syncId: ${syncId} should not start with ${GATE_SYNC_ID_PREFIX}`,\n );\n }\n }\n return;\n }\n\n // All other cases are considered invalid.\n throw new ValidationError(`Inconsistent sync fields: ${gateType}, ${gateId}, ${syncId}`);\n};\n","import { Prisma } from \"@prisma/client\";\nimport { AxiosError } from \"axios\";\nimport invariant from \"invariant\";\nimport { isPlainObject, omit, times, uniq, uniqBy } from \"lodash-es\";\nimport z from \"zod\";\n\nimport { DataInconsistencyError } from \"./errors\";\nimport type { GateType } from \"./sync-utils\";\nimport { buildGateSyncId } from \"./sync-utils\";\n\nexport const formatError = (err: unknown): string => {\n if (err instanceof AxiosError) {\n // See: https://axios-http.com/docs/handling_errors\n return `AxiosError: ${err.message ?? \"no detail provided\"}`;\n }\n if (err instanceof z.ZodError) {\n return `ZodError: ${JSON.stringify(err.flatten())}`;\n }\n return err instanceof Error\n ? err.message\n : /* v8 ignore next -- @preserve */ `${err} (${typeof err})`;\n};\n\n/** A type guard to assert that a value is a record. */\nexport const isRecord = (value: unknown): value is Record<string, unknown> => isPlainObject(value);\n\n/**\n * Convert an arbitrary value to a `Prisma.JsonValue` suitable to be assigned to a `Json` field.\n * @param value - the value to convert\n * @returns a `Prisma.JsonValue`\n */\nexport const toJsonValue = (value: unknown): Prisma.JsonValue => {\n const jsonPrimitives = [\"string\", \"number\", \"boolean\"];\n if (value === undefined) {\n throw new Error(\"Tried to convert undefined to JSON\");\n }\n if (value === null) {\n return null;\n }\n if (jsonPrimitives.includes(typeof value)) {\n return value;\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (value instanceof Date) {\n return `${value.toISOString().slice(0, -5)}Z`; // Strip off milliseconds.\n }\n if (Array.isArray(value)) {\n return toJsonArray(value);\n }\n if (isRecord(value)) {\n return toJsonObject(value);\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string -- intended\n return String(value); // We can't do any better...\n};\n\n/**\n * Convert an arbitrary object to a `Prisma.JsonObject` suitable to be assigned to a `Json` field.\n * @param value - the object to convert\n * @returns a `Prisma.JsonObject`\n */\nexport const toJsonObject = (obj: Record<string, unknown>): Prisma.JsonObject => {\n return Object.fromEntries(\n Object.entries(obj)\n // strip off `undefined` values\n .filter(([_k, v]) => v !== undefined)\n .map(([k, v]): [string, Prisma.JsonValue] => {\n return [k, toJsonValue(v)];\n }),\n );\n};\n\nexport const toJsonArray = (obj: unknown[]): Prisma.JsonArray => obj.map(toJsonValue);\n\nexport type InputJsonValueOrNull = Prisma.InputJsonValue | Prisma.NullTypes.JsonNull;\n\nexport const convertToInputJsonValueOrJsonNull = (value: Prisma.JsonValue): InputJsonValueOrNull =>\n /* v8 ignore next -- @preserve */\n value === null || value === undefined ? Prisma.JsonNull : (value as Prisma.InputJsonValue);\n\n/**\n * Transform the object by iterating through the specified Json fields and converting all `null`\n * values to `Prisma.JsonNull`.\n *\n * Prisma does not accept `null` when writing to a Json field. This is because of the ambiguity\n * that there exist two possible null values: `Prisma.DbNull` and `Prisma.JsonNull`. Given a list\n * of keys for the Json fields, this function converts all `null` values to `Prisma.JsonNull`.\n *\n * See: See: https://github.com/prisma/prisma/issues/13969\n */\nexport const convertNullToJsonNull = <\n K extends string,\n T extends Record<K, Prisma.JsonValue | null>,\n>(\n obj: T,\n jsonKeys: K[],\n): Omit<T, K> & Record<K, InputJsonValueOrNull> => {\n const inputJsonEntries = jsonKeys.map((k): [K, InputJsonValueOrNull] => {\n const value = obj[k];\n return [k, value ?? Prisma.JsonNull];\n });\n const inputJsonFields = Object.fromEntries(inputJsonEntries) as Record<K, InputJsonValueOrNull>;\n return { ...omit(obj, jsonKeys), ...inputJsonFields };\n};\n\nexport const validateJsonField = (fieldName: string, value: unknown, schema: z.ZodType): void => {\n try {\n schema.parse(value);\n } catch (err) {\n throw new Error(`Invalid ${fieldName} field: ${formatError(err)}`);\n }\n};\n\n/**\n * Sleep for given ms\n *\n * @param ms - number of milliseconds to sleep\n * @returns Promise<void>\n */\nexport async function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\n/**\n * Generate random hex string\n * @param length - length in bytes\n * @returns 'length' bytes long hex string (so the string has '2 * length' chars)\n */\nexport const randomHex = (length: number): string => {\n const hexBytes = times(length, () => {\n const randomByte = Math.floor(Math.random() * 256);\n return randomByte.toString(16).padStart(2, \"0\");\n });\n return hexBytes.join(\"\").toUpperCase();\n};\n\nexport const genAuthUserId = (): string => randomHex(20);\n\n/**\n * Return the unique item in an array, or null if the array is empty.\n * @throws an error if the array contains multiple items.\n */\nexport const getUniqueOrNull = <T>(items: T[], msg: () => string): T | null => {\n if (items.length > 1) {\n throw new DataInconsistencyError(`Expected 0 or 1 but got ${items.length}: ${msg()}`);\n }\n return items.length === 0 ? null : items[0]!;\n};\n\n/**\n * Return the unique item in an array.\n * @throws an error if the array is empty or contains multiple items.\n */\nexport const getUniqueOrThrow = <T>(items: T[], msg: () => string): T => {\n if (items.length !== 1) {\n throw new DataInconsistencyError(`Expected 1 but got ${items.length}: ${msg()}`);\n }\n return items[0]!;\n};\n\n/** Extract object ids and join them to string. */\nexport const joinObjectIds = <T extends { id: string }>(objects: T[]): string =>\n objects.map((_) => _.id).join(\", \");\n\nexport const uniqById = <T extends { id: string }>(objects: T[]): T[] =>\n uniqBy(objects, (_) => _.id);\n\n/**\n * Given an array of string ids, return an array of objects containing only the `id` field.\n * The result is suitable for connecting or setting model foreign keys.\n */\nexport const wrapToObjectsWithId = (ids: string[]): { id: string }[] =>\n uniq(ids).map((id) => ({ id }));\n\n/**\n * Used in tRPC procedures to give ability to bypass automatic inference of query & mutations input/output\n * Handy when some performance problems starts to occur (e.g: request data inference).\n *\n * At static or build time, the given parametric type is used, removing tRPC need to compute the return\n * type.\n */\nexport const skipStaticInference = <T>(validator: z.ZodType): z.ZodType<T> =>\n validator as z.ZodType<T>;\n\n/**\n * Return a `where` object for `findUnique` function for a given\n * ID, where it could be either revault uuid or gate ID (integer).\n */\nexport const compatWhereById = (\n workspaceName: string,\n type: GateType,\n id: string,\n): { workspaceName: string; id: string } | { workspaceName: string; syncId: string } => {\n // If `id` looks like an integer, assume it is the Gate ID.\n if (/^\\d+$/.test(id)) {\n const syncId = buildGateSyncId(workspaceName, type, parseInt(id, 10));\n return { workspaceName, syncId };\n }\n // Otherwise - it must be UUID\n return { workspaceName, id };\n};\n\n/**\n * Capitalize first letter of given string.\n */\nexport const capitalize = (text: string): string => text && text[0]!.toUpperCase() + text.slice(1);\n\n// #region ---------- Base64 ----------------------------------------------------------------------\n\nexport const base64urlEncode = (payload: Record<string, unknown>): string => {\n const jsonString = JSON.stringify(payload);\n return Buffer.from(jsonString, \"utf-8\").toString(\"base64url\").replace(/=+$/, \"\");\n};\n\nexport const base64urlDecode = (encodedPayload: string): Record<string, unknown> => {\n // Add missing padding chars to payload if necessary.\n const paddedBase64 = encodedPayload.padEnd(\n encodedPayload.length + ((4 - (encodedPayload.length % 4)) % 4),\n \"=\",\n );\n const decoded = JSON.parse(Buffer.from(paddedBase64, \"base64url\").toString(\"utf-8\"));\n invariant(isRecord(decoded), \"Decoded payload should be a JSON object\");\n return decoded;\n};\n\n// #endregion\n\n// #region ---------- Assertions ------------------------------------------------------------------\n\nexport const ensureNotNil = <T>(value: T | null | undefined, message?: string): T => {\n invariant(\n value !== null && value !== undefined,\n message ?? `Expected non-nil value but got ${value}`,\n );\n return value;\n};\n\n/**\n * Check the string is not nil and not empty, then return the trimmed string.\n */\nexport const ensureNonEmptyString = (\n value: string | null | undefined,\n message?: string,\n): string => {\n const trimmed = (value ?? \"\").trim();\n invariant(trimmed.length > 0, message ?? `Expected non-empty string but got: ${value}`);\n return trimmed;\n};\n\n/**\n * Ensure an array to be non-empty, and return the same array with a conforming type.\n * This is useful when used in combination of zod's `union` or `discriminatedUnion`.\n */\nexport const ensureNonEmptyArray = <T>(values: T[], message?: string): [T, ...T[]] => {\n invariant(\n values.length > 0,\n message ?? `Expected non-empty array but got one with length ${values.length}`,\n );\n return values as [T, ...T[]];\n};\n\n/**\n * Utility to enforce all branches are covered at compile time\n */\nexport function unreachable(value: never): never {\n throw new Error(`Un-covered: ${value}`);\n}\n\n// #endregion\n","import { faker } from \"@faker-js/faker\";\nimport type { User } from \"@prisma/client\";\nimport { ChallengeType, UserDeviceType } from \"@prisma/client\";\nimport elliptic from \"elliptic\";\nimport { times } from \"lodash-es\";\n\n// use manual destructuring instead of ESM-like import to avoid CJS/ESM interop issues\n// when used in bundlers (e.g. Vite). This is the case when using fake data generation\n// on frontend side (e.g. revault-web).\n//\n// The code below was the original import statement:\n//\n// import { ec as EC } from \"elliptic\";\n//\n// -> this was causing the following error:\n//\n// SyntaxError: [vite] Named export 'ec' not found. The requested module 'elliptic' is a\n// CommonJS module, which may not support all module.exports as named exports.\n//\nconst { ec: EC } = elliptic;\n\nimport type {\n ApiChallenge,\n HsmCertificate,\n HsmChallenge,\n HsmChallengeSteps,\n HsmSignature,\n PsdChallenge,\n} from \"@/hsm\";\nimport { base64urlEncode } from \"@/utils\";\nimport type { Proof, SoftChallenge } from \"@/workflows\";\n\nexport const fakeUniqueName = (length = 20): string =>\n faker.string.alphanumeric({ length, casing: \"lower\" });\n\nexport const fakeHexString = (length: number, casing: \"lower\" | \"upper\" = \"upper\"): string =>\n faker.string.hexadecimal({ prefix: \"\", casing, length });\n\nexport const fakePubKey = (): string => new EC(\"p256\").genKeyPair().getPublic(false, \"hex\");\n\nexport const fakeBlob = (length?: number): string => fakeHexString(length ?? 100);\n\nexport const fakeDeviceUserId = (): string =>\n faker.string.hexadecimal({ prefix: \"\", casing: \"upper\", length: 16 });\n\n/**\n * Generate a fake integer ID for postgres. For postgres, max value of an integer is 2147483647.\n * See: https://www.postgresql.org/docs/current/datatype-numeric.html\n */\nexport const fakeIntegerId = (): number => faker.number.int({ min: 1, max: 2000000000 });\n\n/** Generate a fake Gate ID, which is an integer primary key in postgres. */\nexport const fakeGateId = fakeIntegerId;\n\nexport const fakeBase64String = (length?: number): string => btoa(faker.string.sample(length));\n\nexport const fakePsdSignature = (): string => fakeBase64String(100);\n\nexport const fakeJws = (): string =>\n times(3, () => faker.string.hexadecimal({ prefix: \"\", length: 100 })).join(\".\");\n\nexport const fakeHsmObjectId = (): string => faker.string.uuid();\n\nexport const fakeHsmCertificate = (): HsmCertificate => ({\n codeHash: fakeBase64String(10),\n attestationPub: fakeBase64String(20),\n certificate: fakeBase64String(20),\n signature: fakeBase64String(20),\n});\n\nexport const fakePsdChallenge = (): PsdChallenge => ({\n challengeType: \"PSD\",\n wActions: [fakeBase64String(50), fakeBase64String(50), fakeBase64String(50)],\n handshake: fakeBase64String(100),\n handshakeAttestation: fakeHsmCertificate(),\n partitionId: fakeBase64String(20),\n});\n\nexport const fakeApiChallenge = (): ApiChallenge => ({\n challengeType: \"API\",\n payload: {\n approve: base64urlEncode({ randomHex: fakeHexString(20), action: \"approve\" }),\n reject: base64urlEncode({ randomHex: fakeHexString(20), action: \"reject\" }),\n },\n});\n\nexport const fakeSoftChallenge = (): SoftChallenge => ({\n challengeType: ChallengeType.SOFT,\n});\n\nexport const fakeChallenge = (type: ChallengeType) => {\n switch (type) {\n case ChallengeType.PSD:\n return fakePsdChallenge();\n case ChallengeType.API:\n return fakeApiChallenge();\n case ChallengeType.SOFT:\n return fakeSoftChallenge();\n }\n};\n\nexport const fakePsdProof = (): Proof => ({\n signature: fakeBase64String(100),\n challengeType: ChallengeType.PSD,\n});\n\nexport const fakeApiProof = (): Proof => ({\n signature: fakeJws(),\n challengeType: ChallengeType.API,\n});\n\nexport const fakeSoftProof = (): Proof => ({\n signature: \"\",\n challengeType: ChallengeType.SOFT,\n});\n\nexport const fakeUserProof = (user: User): Proof => {\n switch (user.deviceType) {\n case UserDeviceType.PSD:\n case UserDeviceType.SOFT_PSD:\n return fakePsdProof();\n case UserDeviceType.API:\n return fakeApiProof();\n }\n};\n\n/**\n * HSM challenges are an array of record indexed by user's public key\n */\nexport const fakeHsmChallenges = (\n type: HsmChallenge[\"challengeType\"],\n pubKeys?: string[],\n): HsmChallengeSteps => {\n const challengeKeys = pubKeys ?? times(3, () => fakePubKey());\n const fakeChallengeFunctions = {\n [ChallengeType.PSD]: fakePsdChallenge,\n [ChallengeType.API]: fakeApiChallenge,\n } as const;\n const fakeChallenge = fakeChallengeFunctions[type];\n return [Object.fromEntries(challengeKeys.map((pubKey) => [pubKey, fakeChallenge()]))];\n};\n\nexport const fakeHsmSignature = (): HsmSignature => ({\n digest: fakeHexString(32),\n derivationPath: \"m/44'/60'/0'\",\n r: fakeBase64String(32),\n s: fakeBase64String(32),\n v: 1,\n der: fakeHexString(16, \"upper\"),\n pubkey: fakePubKey(),\n});\n\nexport const fakeWorkspaceName = (): string =>\n faker.string.alphanumeric({ length: 16, casing: \"lower\" });\n\n// Compartment id is stored as a integer in the prisma schema, which are signed 32bits on postgres\n// Hence, pick a number between 0 and 2^31 - 1 (0x7fffffff)\nexport const fakeCompartmentId = (): number => faker.number.int({ max: 0x7fffffff });\n\nexport const fakeRootCaHex = (): string => fakeHexString(260);\nexport const fakeRootCaBase64 = (): string =>\n Buffer.from(fakeRootCaHex(), \"hex\").toString(\"base64\");\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CantonTransferProposal } from \"@/networks\";\n\nimport { fakeHexString } from \"./faker-utils\";\n\nconst fakeCantonAddress = (role: \"party\" | \"validator\"): string =>\n `${role}-${faker.lorem.word()}::${fakeHexString(68, \"lower\")}`;\n\nexport const fakeCantonPartyId = (): string => fakeCantonAddress(\"party\");\n\nexport const fakeCantonValidatorId = (): string => fakeCantonAddress(\"validator\");\n\nexport const fakeCantonContractId = (): string => fakeHexString(138, \"lower\");\n\n// TODO: I don't know what it looks like... Update it to a more realistic format later.\nexport const fakeCantonInstrumentId = (): string => fakeHexString(10, \"lower\");\n\nexport const fakeCantonTransferProposal = (\n opts?: Partial<CantonTransferProposal>,\n): CantonTransferProposal => {\n return {\n amount: faker.number.bigInt().toString(),\n contractId: fakeCantonContractId(),\n instrumentAdmin: fakeCantonPartyId(),\n instrumentId: fakeCantonInstrumentId(),\n expiresAtMicros: faker.number.int(),\n memo: faker.lorem.sentence(),\n sender: fakeCantonPartyId(),\n recipient: fakeCantonPartyId(),\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { GateType } from \"@/sync-utils\";\nimport { buildGateSyncId } from \"@/sync-utils\";\n\nexport type MaybeFromGate = {\n workspaceName: string;\n gateType: GateType | null;\n gateId: number;\n syncId?: string; // If provided, do not overwrite.\n};\n\nexport const injectSyncId = <T extends MaybeFromGate>(obj: T): T & { syncId: string } => {\n let { syncId } = obj;\n if (syncId === undefined) {\n if (obj.gateType !== null && obj.gateId !== 0) {\n syncId = buildGateSyncId(obj.workspaceName, obj.gateType, obj.gateId);\n } else if (obj.gateType === null && obj.gateId === 0) {\n syncId = faker.string.uuid();\n } else {\n throw new Error(`Invalid gateType and gateId: ${obj.gateType}, ${obj.gateId}`);\n }\n }\n return { ...obj, syncId };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Account, ClassicGovernanceMixin, TradelinkGovernanceMixin } from \"@prisma/client\";\nimport {\n AccountGovernanceType,\n AccountType,\n ActivationStatus,\n GateAccountType,\n} from \"@prisma/client\";\n\nimport type { AccountWithGovernanceMixins } from \"@/accounts\";\nimport { NetworkFamily } from \"@/networks\";\n\nimport { fakeCantonPartyId } from \"../canton\";\nimport {\n fakeGateId,\n fakeHexString,\n fakeHsmObjectId,\n fakeUniqueName,\n fakeWorkspaceName,\n} from \"../faker-utils\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nconst WELL_KNOWN_NETWORKS_BY_FAMILY: Record<NetworkFamily, [string, ...string[]]> = {\n [NetworkFamily.BITCOIN_LIKE]: [\"bitcoin\", \"bitcoin_testnet\"],\n [NetworkFamily.CANTON_LIKE]: [\"canton_network\"],\n [NetworkFamily.CARDANO_LIKE]: [\"cardano\"],\n [NetworkFamily.ETHEREUM_LIKE]: [\"ethereum\", \"ethereum_goerli\"],\n [NetworkFamily.HEDERA_LIKE]: [\"hedera\"],\n [NetworkFamily.POLKADOT_LIKE]: [\"polkadot\"],\n [NetworkFamily.RIPPLE_LIKE]: [\"ripple\"],\n [NetworkFamily.SOLANA_LIKE]: [\"solana\"],\n [NetworkFamily.STELLAR_LIKE]: [\"stellar\"],\n [NetworkFamily.SUI_LIKE]: [\"sui\"],\n [NetworkFamily.TEZOS_LIKE]: [\"tezos\"],\n [NetworkFamily.TRON_LIKE]: [\"tron\"],\n [NetworkFamily.GENERIC_LIKE]: [\"cosmos\"],\n};\n\nconst genConsistentAccountType = (opts?: Partial<Account>): AccountType => {\n // If type is explicitly provided, use it.\n if (opts?.type !== undefined) {\n return opts.type;\n }\n // If currency is provided, find matching account type.\n if (opts?.currency !== undefined) {\n for (const [family, currencies] of Object.entries(WELL_KNOWN_NETWORKS_BY_FAMILY)) {\n if (currencies.includes(opts.currency)) {\n return family as AccountType;\n }\n }\n }\n // Default: pick a random account type.\n return faker.helpers.arrayElement(Object.values(AccountType));\n};\n\nconst genAssetFieldsForType = (\n type: AccountType,\n): Pick<\n Account,\n | \"type\"\n | \"currency\"\n | \"derivationPath\"\n | \"address\"\n | \"contractAddress\"\n | \"tokenIdentifier\"\n | \"xpub\"\n | \"hsmXpub\"\n | \"hsmChainCode\"\n> => {\n const currency = faker.helpers.arrayElement(\n type === \"RAW_SIGNING\" ? [\"ethereum\", \"bitcoin\"] : WELL_KNOWN_NETWORKS_BY_FAMILY[type],\n );\n const hsmXpub = fakeHexString(66, \"upper\");\n const hsmChainCode = fakeHexString(64, \"upper\");\n switch (type) {\n case \"BITCOIN_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"84'/0'/0'\",\n address: null,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: fakeHexString(120),\n hsmXpub,\n hsmChainCode,\n };\n case \"ETHEREUM_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/60'/0'\",\n address: faker.finance.ethereumAddress(),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"CANTON_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/6767'/0'/0'/0'\",\n address: fakeCantonPartyId(),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"CARDANO_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"1852'/1815'/0'\",\n address: `addr${faker.string.alphanumeric({ length: 100, casing: \"lower\" })}`,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"SOLANA_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/501'/0'\",\n address: faker.string.alphanumeric({ length: 44, casing: \"lower\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"TEZOS_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/1729'/0'\",\n address: `tz${faker.string.alphanumeric({ length: 34, casing: \"mixed\" })}`,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"STELLAR_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/148'/0'\",\n address: faker.string.alphanumeric({ length: 56, casing: \"upper\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"RIPPLE_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/144'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: `xpub${faker.string.alphanumeric({ length: 107, casing: \"mixed\" })}`,\n hsmXpub,\n hsmChainCode,\n };\n case \"POLKADOT_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/354'/0'\",\n address: faker.string.alphanumeric({ length: 48, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"TRON_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/195'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"SUI_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/784'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode: null,\n };\n case \"HEDERA_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/3030'/0'\",\n address: faker.string.hexadecimal({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"GENERIC_LIKE\":\n return {\n type,\n currency,\n derivationPath: \"44'/118'/0'\",\n address: faker.string.alphanumeric({ length: 34, casing: \"mixed\" }),\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n case \"RAW_SIGNING\":\n return {\n type,\n currency,\n derivationPath: \"44'/118'/0'\",\n address: null,\n contractAddress: null,\n tokenIdentifier: null,\n xpub: null,\n hsmXpub,\n hsmChainCode,\n };\n }\n};\n\nexport const genGovernanceFieldsForType = (\n governanceType: AccountGovernanceType,\n {\n accountId,\n policyId,\n assetManagerId,\n }: { accountId: string; policyId?: string; assetManagerId?: string },\n):\n | {\n governanceType: typeof AccountGovernanceType.CLASSIC;\n classicGovernanceMixin: ClassicGovernanceMixin;\n tradelinkGovernanceMixin: null;\n }\n | {\n governanceType: typeof AccountGovernanceType.TRADELINK;\n classicGovernanceMixin: null;\n tradelinkGovernanceMixin: TradelinkGovernanceMixin;\n }\n | {\n governanceType: typeof AccountGovernanceType.RAW_SIGNING;\n classicGovernanceMixin: ClassicGovernanceMixin;\n tradelinkGovernanceMixin: null;\n } => {\n switch (governanceType) {\n case AccountGovernanceType.CLASSIC:\n case AccountGovernanceType.RAW_SIGNING:\n return {\n governanceType,\n classicGovernanceMixin: {\n id: faker.number.int(),\n policyId: policyId ?? faker.string.uuid(),\n accountId: accountId,\n },\n tradelinkGovernanceMixin: null,\n };\n case AccountGovernanceType.TRADELINK:\n return {\n governanceType,\n classicGovernanceMixin: null,\n tradelinkGovernanceMixin: {\n id: faker.number.int(),\n assetManagerId: assetManagerId ?? faker.string.uuid(),\n accountId: accountId,\n exchangeConfigs: [],\n status: ActivationStatus.ACTIVE,\n },\n };\n }\n};\n\nexport const genAccount = (\n opts?: Partial<Account> & { policyId?: string; assetManagerId?: string } & {\n withLesWalletId?: boolean;\n },\n): AccountWithGovernanceMixins => {\n const { policyId, assetManagerId, withLesWalletId, ...rest } = opts ?? {};\n\n const commonFields = {\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: fakeUniqueName(),\n hsmId: fakeHsmObjectId(),\n status: ActivationStatus.ACTIVE,\n index: faker.number.int({ min: 0, max: 10 }),\n gateId: fakeGateId(),\n gateType: GateAccountType.Account,\n lesWalletId: (withLesWalletId ?? true) ? faker.string.uuid() : null,\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n };\n const type = genConsistentAccountType(rest);\n const assetFields = genAssetFieldsForType(type);\n const governanceFields = genGovernanceFieldsForType(\n opts?.governanceType ?? faker.helpers.arrayElement(Object.values(AccountGovernanceType)),\n { accountId: commonFields.id, policyId, assetManagerId },\n );\n return injectSyncId({\n ...commonFields,\n ...governanceFields,\n ...assetFields,\n ...rest,\n });\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { SignMessageRequestData, SignMessageUserInputData } from \"@/transactions\";\n\nimport { fakeHexString } from \"../../faker-utils\";\n\nexport const genSignMessageData = (\n opts?: Partial<SignMessageRequestData>,\n): SignMessageRequestData => ({\n message: {\n type: \"EIP191\",\n data: fakeHexString(10, \"upper\"),\n },\n accountId: faker.string.uuid(),\n address: faker.finance.ethereumAddress(),\n derivationPath: \"44'/60'/0'/0/0\",\n ...opts,\n});\n\nexport const genSignMessageUserInputData = (\n opts?: Partial<SignMessageUserInputData>,\n): SignMessageUserInputData => ({\n message: {\n type: \"EIP191\",\n data: fakeHexString(10, \"upper\"),\n },\n accountId: faker.string.uuid(),\n ...opts,\n});\n","import { faker } from \"@faker-js/faker\";\nimport { omit } from \"lodash-es\";\nimport { match, P } from \"ts-pattern\";\n\nimport type { TransactionData, TransactionDataOf } from \"@/networks\";\nimport { zTransactionData } from \"@/networks\";\n\nimport { fakeCantonPartyId, fakeCantonTransferProposal } from \"../../canton\";\n\n// #region ---------- Transaction data ------------------------------------------------------------\n\ntype BitcoinLikeSendData = TransactionDataOf<\"BITCOIN_LIKE\">;\n\nconst genBitcoinLikeSendData = (opts?: Partial<BitcoinLikeSendData>): BitcoinLikeSendData => {\n return {\n type: \"BITCOIN_LIKE_SEND\",\n currency: \"bitcoin\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n feePerByte: faker.number.bigInt({ min: 1 }).toString(),\n },\n ...opts,\n };\n};\n\ntype CardanoLikeTxData = TransactionDataOf<\"CARDANO_LIKE\">;\n\nconst genCardanoLikeTxData = (\n txType: Exclude<CardanoLikeTxData[\"type\"], \"CARDANO_LIKE_RECEIVE\">,\n): CardanoLikeTxData => {\n switch (txType) {\n case \"CARDANO_LIKE_SEND\":\n return {\n type: txType,\n currency: \"cardano\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"CARDANO_LIKE_STAKING_DELEGATE\":\n return {\n type: txType,\n currency: \"cardano\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakePoolId: `pool${faker.string.alphanumeric({ length: 52 })}`,\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"CARDANO_LIKE_STAKING_REGISTER\":\n case \"CARDANO_LIKE_STAKING_DEREGISTER\":\n case \"CARDANO_LIKE_STAKING_WITHDRAW\":\n return {\n type: txType,\n currency: \"cardano\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n amount: faker.number.bigInt({ min: 0 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n }\n};\n\ntype EthereumLikeSendData = TransactionDataOf<\"ETHEREUM_LIKE_SEND\">;\n\nconst genEthereumLikeSendData = (opts?: Partial<EthereumLikeSendData>): EthereumLikeSendData => {\n const gasLimit = faker.number.bigInt({ min: 1 });\n const gasPrice = faker.number.bigInt({ min: 1 });\n const maxFee = gasLimit * gasPrice;\n return {\n type: \"ETHEREUM_LIKE_SEND\",\n currency: \"ethereum\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: maxFee.toString(),\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n gasLimit: gasLimit.toString(),\n gasPrice: gasPrice.toString(),\n },\n ...opts,\n };\n};\n\ntype EthereumLikeExecuteContractData = TransactionDataOf<\"ETHEREUM_LIKE_EXECUTE_CONTRACT\">;\n\nconst genEthereumLikeExecuteContractData = (\n opts?: Partial<EthereumLikeExecuteContractData>,\n): EthereumLikeExecuteContractData => {\n const sendData = genEthereumLikeSendData();\n return {\n ...omit(sendData, [\"type\"]),\n type: \"ETHEREUM_LIKE_EXECUTE_CONTRACT\",\n contractData: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 128 }),\n ...opts,\n };\n};\n\ntype EthereumLikeDeployContractData = TransactionDataOf<\"ETHEREUM_LIKE_DEPLOY_CONTRACT\">;\n\nconst genEthereumLikeDeployContractData = (\n opts?: Partial<EthereumLikeDeployContractData>,\n): EthereumLikeDeployContractData => {\n const sendData = genEthereumLikeSendData();\n return {\n ...omit(sendData, [\"type\"]),\n type: \"ETHEREUM_LIKE_DEPLOY_CONTRACT\",\n recipient: \"0x0000000000000000000000000000000000000000\",\n contractData: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 128 }),\n ...opts,\n };\n};\n\nconst genGenericTransactionData = (): TransactionDataOf<\"GENERIC_LIKE\"> => {\n return {\n type: \"GENERIC_TRANSACTION\",\n currency: \"tron\",\n rawTx: faker.string.alphanumeric({ length: 100 }),\n };\n};\n\ntype HederaLikeTxData = TransactionDataOf<\"HEDERA_LIKE\">;\n\nconst genHederaLikeSendData = (\n txType: Exclude<HederaLikeTxData[\"type\"], \"HEDERA_LIKE_RECEIVE\" | \"HEDERA_LIKE_RECEIVE_TOKEN\">,\n): HederaLikeTxData => {\n return {\n type: txType,\n currency: \"hedera\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: `0.0.${faker.number.int({ min: 10000000, max: 99999999 }).toString()}`,\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype PolkadotLikeTxData = TransactionDataOf<\"POLKADOT_LIKE\">;\n\nconst genPolkadotLikeTxData = (\n txType: Exclude<\n PolkadotLikeTxData[\"type\"],\n | \"POLKADOT_LIKE_RECEIVE\"\n | \"POLKADOT_LIKE_SETCONTROLLER\"\n | \"POLKADOT_LIKE_PROXY\"\n | \"POLKADOT_LIKE_PUREPROXY\"\n | \"POLKADOT_LIKE_KILLPURE\"\n | \"POLKADOT_LIKE_NOMINATE\"\n | \"POLKADOT_LIKE_REWARD\"\n | \"POLKADOT_LIKE_TRANSFERALL\"\n >,\n): PolkadotLikeTxData => {\n switch (txType) {\n case \"POLKADOT_LIKE_SEND\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n };\n case \"POLKADOT_LIKE_ADDPROXY\":\n case \"POLKADOT_LIKE_REMOVEPROXY\":\n return {\n type: txType,\n currency: \"polkadot\",\n kind: \"Staking\",\n proxy: faker.string.alphanumeric({ length: 30 }),\n };\n case \"POLKADOT_LIKE_BOND\":\n return {\n type: txType,\n currency: \"polkadot\",\n payee: faker.helpers.arrayElement([\"Staked\", \"Stash\"]),\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_REBOND\":\n case \"POLKADOT_LIKE_UNBOND\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_BONDEXTRA\":\n return {\n type: txType,\n currency: \"polkadot\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n };\n case \"POLKADOT_LIKE_WITHDRAWUNBONDED\":\n case \"POLKADOT_LIKE_CHILL\":\n return {\n type: txType,\n currency: \"polkadot\",\n };\n case \"POLKADOT_LIKE_SETPAYEE\":\n return {\n type: txType,\n currency: \"polkadot\",\n payee: faker.helpers.arrayElement([\"Staked\", \"Stash\"]),\n };\n case \"POLKADOT_LIKE_ANONYMOUSPROXY\":\n case \"POLKADOT_LIKE_KILLANONYMOUS\":\n return {\n type: txType,\n currency: \"polkadot\",\n };\n }\n};\n\ntype RippleLikeTxData = TransactionDataOf<\"RIPPLE_LIKE\">;\n\nconst genRippleLikeSendData = (\n txType: Exclude<RippleLikeTxData[\"type\"], \"RIPPLE_LIKE_RECEIVE\">,\n): RippleLikeTxData => {\n return {\n type: txType,\n currency: \"ripple\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n destinationTag: faker.helpers.arrayElement([faker.number.int().toString(), null]),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype SolanaLikeTxData = TransactionDataOf<\"SOLANA_LIKE\">;\n\nconst genSolanaLikeTxData = (\n txType: Exclude<SolanaLikeTxData[\"type\"], \"SOLANA_LIKE_RECEIVE\">,\n): SolanaLikeTxData => {\n switch (txType) {\n case \"SOLANA_LIKE_SEND\":\n case \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_SEND_TOKEN\":\n case \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\":\n return {\n type: txType,\n currency: \"solana\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_DELEGATE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_DEACTIVATE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_SPLIT_STAKE\":\n case \"SOLANA_LIKE_WITHDRAW_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n stakeAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_MERGE_STAKE\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n mergeSrcAccount: faker.string.alphanumeric({ length: 30 }),\n mergeDstAccount: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n case \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\":\n return {\n type: txType,\n currency: \"solana\",\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n }\n};\n\ntype StellarLikeTxData = TransactionDataOf<\"STELLAR_LIKE\">;\n\nconst genStellarLikeSendData = (\n txType: Exclude<StellarLikeTxData[\"type\"], \"STELLAR_LIKE_RECEIVE\">,\n): StellarLikeTxData => {\n return {\n type: txType,\n currency: \"stellar\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n memo: faker.helpers.arrayElement([\n { type: \"MEMO_ID\", value: faker.number.bigInt({ min: 0 }).toString() },\n { type: \"MEMO_TEXT\", value: faker.word.conjunction(28) },\n {\n type: \"MEMO_HASH\",\n value: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 64 }),\n },\n {\n type: \"MEMO_RETURN\",\n value: faker.string.hexadecimal({ prefix: \"\", casing: \"lower\", length: 64 }),\n },\n null,\n ]),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype SuiLikeTxData = TransactionDataOf<\"SUI_LIKE\">;\n\nconst genSuiLikeTxData = (\n txType: Exclude<SuiLikeTxData[\"type\"], \"SUI_LIKE_RECEIVE\" | \"SUI_LIKE_RECEIVE_TOKEN\">,\n): SuiLikeTxData => {\n return {\n currency: \"sui\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n ...match(txType)\n .with(\"SUI_LIKE_STAKE\", (type) => ({\n type,\n validator: faker.string.alphanumeric({ length: 30 }),\n }))\n .with(\"SUI_LIKE_UNSTAKE\", (type) => ({\n type,\n stakedSuiId: faker.string.alphanumeric({ length: 30 }),\n useAllAmount: faker.datatype.boolean(),\n }))\n .with(P.union(\"SUI_LIKE_SEND\", \"SUI_LIKE_SEND_TOKEN\"), (type) => ({\n type,\n recipient: faker.string.alphanumeric({ length: 30 }),\n }))\n .exhaustive(),\n };\n};\n\ntype TezosLikeTxData = TransactionDataOf<\"TEZOS_LIKE\">;\n\nconst genTezosLikeTxData = (\n txType: Exclude<TezosLikeTxData[\"type\"], \"TEZOS_LIKE_RECEIVE\" | \"TEZOS_LIKE_REVEAL\">,\n): TezosLikeTxData => {\n return {\n type: txType,\n currency: \"tezos\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"]),\n },\n };\n};\n\ntype TronLikeTxData = TransactionDataOf<\"TRON_LIKE\">;\n\nconst genTronLikeTxData = (\n txType: Exclude<TronLikeTxData[\"type\"], \"TRON_LIKE_RECEIVE\" | \"TRON_LIKE_RECEIVE_TOKEN\">,\n): TronLikeTxData => {\n return {\n type: txType,\n currency: \"tron\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n recipient: faker.string.alphanumeric({ length: 30 }),\n feeStrategy: {\n type: faker.helpers.arrayElement([\"SLOW\", \"NORMAL\", \"FAST\"]),\n },\n };\n};\n\ntype CantonLikeTxData = TransactionDataOf<\"CANTON_LIKE\">;\n\nconst genCantonLikeTxData = (txType: CantonLikeTxData[\"type\"]): CantonLikeTxData => {\n switch (txType) {\n case \"CANTON_LIKE_SEND\":\n case \"CANTON_LIKE_SEND_TOKEN\":\n return {\n type: txType,\n currency: \"canton_network\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n recipient: fakeCantonPartyId(),\n };\n case \"CANTON_LIKE_WITHDRAW\":\n return {\n type: txType,\n currency: \"canton_network\",\n transferProposal: fakeCantonTransferProposal(),\n reason: faker.lorem.sentence(),\n };\n case \"CANTON_LIKE_RECEIVE\":\n return {\n type: txType,\n currency: \"canton_network\",\n transferProposal: fakeCantonTransferProposal(),\n verdict: \"ACCEPT\",\n reason: faker.lorem.sentence(),\n };\n case \"CANTON_LIKE_PRE_APPROVAL\":\n return {\n type: txType,\n currency: \"canton_network\",\n recipient: fakeCantonPartyId(),\n };\n case \"CANTON_LIKE_TAP\":\n return {\n type: txType,\n currency: \"canton_network\",\n amount: faker.number.bigInt({ min: 0 }).toString(),\n maxFee: null,\n recipient: fakeCantonPartyId(),\n };\n }\n};\n\n// #endregion\n\nconst mergeTransactionData = (\n defaults: TransactionData,\n custom?: Partial<TransactionData>,\n): TransactionData => {\n const merged = {\n ...defaults,\n ...custom,\n type: defaults.type, // make sure `type` comes from `defaults`\n };\n // Parse the merged object to make sure it is valid.\n // It is too hard to get the typing correct in a static way. As a compromise, we rely on\n // a dynamic check: If user tries to merge two objects of different types, the code will\n // still type-check, but it will throw an error at runtime.\n return zTransactionData.parse(merged);\n};\n\nexport const genCreateTransactionData = <T extends TransactionData[\"type\"]>(opts?: {\n accountId?: string;\n transaction?: Partial<TransactionData> & { type: T };\n}): { accountId: string; transaction: Extract<TransactionData, { type: T }> } => {\n const { accountId, transaction } = opts ?? {};\n const transactionType = transaction?.type ?? \"ETHEREUM_LIKE_SEND\";\n let transactionDefaults;\n switch (transactionType) {\n case \"BITCOIN_LIKE_SEND\":\n transactionDefaults = genBitcoinLikeSendData();\n break;\n case \"CANTON_LIKE_SEND\":\n case \"CANTON_LIKE_SEND_TOKEN\":\n case \"CANTON_LIKE_WITHDRAW\":\n case \"CANTON_LIKE_RECEIVE\":\n case \"CANTON_LIKE_PRE_APPROVAL\":\n case \"CANTON_LIKE_TAP\":\n transactionDefaults = genCantonLikeTxData(transactionType);\n break;\n case \"CARDANO_LIKE_SEND\":\n case \"CARDANO_LIKE_STAKING_REGISTER\":\n case \"CARDANO_LIKE_STAKING_DEREGISTER\":\n case \"CARDANO_LIKE_STAKING_DELEGATE\":\n case \"CARDANO_LIKE_STAKING_WITHDRAW\":\n transactionDefaults = genCardanoLikeTxData(transactionType);\n break;\n case \"ETHEREUM_LIKE_SEND\":\n transactionDefaults = genEthereumLikeSendData();\n break;\n case \"ETHEREUM_LIKE_EXECUTE_CONTRACT\":\n transactionDefaults = genEthereumLikeExecuteContractData();\n break;\n case \"ETHEREUM_LIKE_DEPLOY_CONTRACT\":\n transactionDefaults = genEthereumLikeDeployContractData();\n break;\n case \"GENERIC_TRANSACTION\":\n transactionDefaults = genGenericTransactionData();\n break;\n case \"HEDERA_LIKE_SEND\":\n case \"HEDERA_LIKE_SEND_TOKEN\":\n transactionDefaults = genHederaLikeSendData(transactionType);\n break;\n case \"POLKADOT_LIKE_SEND\":\n case \"POLKADOT_LIKE_ADDPROXY\":\n case \"POLKADOT_LIKE_REMOVEPROXY\":\n case \"POLKADOT_LIKE_BOND\":\n case \"POLKADOT_LIKE_REBOND\":\n case \"POLKADOT_LIKE_BONDEXTRA\":\n case \"POLKADOT_LIKE_UNBOND\":\n case \"POLKADOT_LIKE_WITHDRAWUNBONDED\":\n case \"POLKADOT_LIKE_SETPAYEE\":\n case \"POLKADOT_LIKE_ANONYMOUSPROXY\":\n case \"POLKADOT_LIKE_KILLANONYMOUS\":\n case \"POLKADOT_LIKE_CHILL\":\n transactionDefaults = genPolkadotLikeTxData(transactionType);\n break;\n case \"RIPPLE_LIKE_SEND\":\n transactionDefaults = genRippleLikeSendData(transactionType);\n break;\n case \"SOLANA_LIKE_SEND\":\n case \"SOLANA_LIKE_CREATE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_DELEGATE_STAKE\":\n case \"SOLANA_LIKE_WITHDRAW_STAKE\":\n case \"SOLANA_LIKE_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_SPLIT_STAKE\":\n case \"SOLANA_LIKE_SPLIT_DEACTIVATE_STAKE\":\n case \"SOLANA_LIKE_MERGE_STAKE\":\n case \"SOLANA_LIKE_SEND_TOKEN\":\n case \"SOLANA_LIKE_FUND_AND_SEND_TOKEN\":\n case \"SOLANA_LIKE_CREATE_SPL_TOKEN_ACCOUNT\":\n transactionDefaults = genSolanaLikeTxData(transactionType);\n break;\n case \"STELLAR_LIKE_SEND\":\n transactionDefaults = genStellarLikeSendData(transactionType);\n break;\n case \"TEZOS_LIKE_SEND\":\n case \"TEZOS_LIKE_DELEGATE\":\n case \"TEZOS_LIKE_UNDELEGATE\":\n transactionDefaults = genTezosLikeTxData(transactionType);\n break;\n case \"SUI_LIKE_SEND\":\n case \"SUI_LIKE_SEND_TOKEN\":\n case \"SUI_LIKE_STAKE\":\n case \"SUI_LIKE_UNSTAKE\":\n transactionDefaults = genSuiLikeTxData(transactionType);\n break;\n case \"TRON_LIKE_SEND\":\n case \"TRON_LIKE_SEND_TOKEN\":\n transactionDefaults = genTronLikeTxData(transactionType);\n break;\n }\n return {\n accountId: accountId ?? faker.string.uuid(),\n transaction: mergeTransactionData(transactionDefaults, transaction) as Extract<\n TransactionData,\n { type: T }\n >,\n };\n};\n","import type { VaultRequest } from \"@prisma/client\";\nimport { RequestState, RequestType } from \"@prisma/client\";\n\n/** Return whether a request with the given type and state should have a non-null `targetHsmId`. */\nexport const shouldHaveTargetHsmId = (\n request: Pick<VaultRequest, \"type\" | \"state\">,\n): boolean | undefined => {\n switch (request.type) {\n case RequestType.CREATE_ENTITY:\n case RequestType.EDIT_ENTITY:\n case RequestType.REVOKE_ENTITY:\n case RequestType.CREATE_SCICONFIG:\n case RequestType.EDIT_SCICONFIG:\n case RequestType.CREATE_API_KEY:\n case RequestType.EDIT_API_KEY:\n case RequestType.REVOKE_API_KEY:\n case RequestType.EDIT_WORKSPACE_RULE:\n case RequestType.UPDATE_QUORUM:\n return false;\n case RequestType.CREATE_PSD_USER:\n case RequestType.CREATE_API_USER:\n case RequestType.CREATE_API_USER_ACCESS: // targeting / editing an existing `User`\n case RequestType.REVOKE_USER:\n case RequestType.CREATE_TRANSACTION:\n case RequestType.SIGN_MESSAGE:\n case RequestType.SIGN_DIGESTS:\n case RequestType.CREATE_ACCOUNT:\n case RequestType.EDIT_ACCOUNT:\n case RequestType.TRADELINK_ACTIVATE_ACCOUNT:\n case RequestType.CREATE_GROUP:\n case RequestType.EDIT_GROUP:\n case RequestType.REVOKE_GROUP:\n case RequestType.CREATE_WHITELIST:\n case RequestType.EDIT_WHITELIST:\n case RequestType.CREATE_POLICY:\n case RequestType.EDIT_POLICY:\n case RequestType.TRADELINK_CREATE_CUSTODIAN:\n case RequestType.TRADELINK_EDIT_CUSTODIAN:\n case RequestType.TRADELINK_CREATE_EXCHANGE:\n case RequestType.TRADELINK_EDIT_EXCHANGE:\n case RequestType.TRADELINK_CREATE_ASSET_MANAGER:\n case RequestType.TRADELINK_EDIT_ASSET_MANAGER:\n return request.state !== RequestState.INITIAL;\n case RequestType.EDIT_TOKEN_RULE:\n return true;\n }\n};\n\n/** Return whether a request with the given type and state should have a non-null `targetId`.\n * If the request is a `CREATE_XXX` request, we will generate the targetId at validation hook\n */\nexport const shouldHaveTargetId = (type: RequestType): boolean => {\n switch (type) {\n case RequestType.CREATE_API_KEY:\n case RequestType.EDIT_API_KEY:\n case RequestType.REVOKE_API_KEY:\n // We don't wire read-only API keys for now on revault (and we may never will, as it is not\n // sure if we will synchronize those models and implement read-only API key auth)\n return false;\n case RequestType.CREATE_TRANSACTION: // TODO: move to True when we resolved the MetaTransaction id being an int\n case RequestType.SIGN_DIGESTS:\n // TODO: We don't know how to wire, so just return the request unchanged.\n return false;\n case RequestType.UPDATE_QUORUM:\n case RequestType.CREATE_PSD_USER:\n case RequestType.CREATE_API_USER:\n case RequestType.CREATE_SCICONFIG:\n case RequestType.CREATE_ACCOUNT:\n case RequestType.CREATE_API_USER_ACCESS:\n case RequestType.CREATE_ENTITY:\n case RequestType.CREATE_GROUP:\n case RequestType.CREATE_POLICY:\n case RequestType.CREATE_WHITELIST:\n case RequestType.EDIT_WORKSPACE_RULE:\n case RequestType.EDIT_ACCOUNT:\n case RequestType.EDIT_TOKEN_RULE: // EDIT_TOKEN_RULE targetId is the parent account which must always exist, even when creating new token rule.\n case RequestType.EDIT_GROUP:\n case RequestType.EDIT_ENTITY:\n case RequestType.EDIT_SCICONFIG:\n case RequestType.EDIT_POLICY:\n case RequestType.EDIT_WHITELIST:\n case RequestType.REVOKE_ENTITY:\n case RequestType.REVOKE_GROUP:\n case RequestType.REVOKE_USER:\n case RequestType.SIGN_MESSAGE:\n case RequestType.TRADELINK_ACTIVATE_ACCOUNT:\n case RequestType.TRADELINK_CREATE_ASSET_MANAGER:\n case RequestType.TRADELINK_CREATE_CUSTODIAN:\n case RequestType.TRADELINK_CREATE_EXCHANGE:\n case RequestType.TRADELINK_EDIT_CUSTODIAN:\n case RequestType.TRADELINK_EDIT_EXCHANGE:\n case RequestType.TRADELINK_EDIT_ASSET_MANAGER:\n case RequestType.TRADELINK_ADJUST_PLEDGE:\n case RequestType.TRADELINK_REPLEDGE:\n case RequestType.TRADELINK_CREATE_SETTLEMENT:\n case RequestType.TRADELINK_FORCE_UNPLEDGE:\n case RequestType.TRADELINK_WITHDRAW:\n case RequestType.TRADELINK_ARBITRATE:\n return true;\n }\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type {\n CreateAccountRequestData,\n EditAccountRequestData,\n EditTokenRuleRequestData,\n} from \"@/accounts\";\n\nimport { fakeUniqueName } from \"../../faker-utils\";\n\nexport const genCreateAccountData = (\n opts?: Partial<CreateAccountRequestData>,\n): CreateAccountRequestData => {\n return {\n name: fakeUniqueName(),\n type: \"BITCOIN_LIKE\",\n currency: \"bitcoin\",\n contractAddress: null,\n tokenIdentifier: null,\n governance: {\n type: \"CLASSIC\",\n policy: { rules: [] }, // TODO: account gov rules should not be empty\n },\n index: 0,\n derivationPath: \"m/84'/0'/0'\",\n ...opts,\n };\n};\n\nexport const genEditAccountData = (\n opts?: Partial<EditAccountRequestData>,\n): EditAccountRequestData => {\n return {\n name: fakeUniqueName(),\n governance: {\n type: \"CLASSIC\",\n policy: { rules: [] }, // TODO: account gov rules should not be empty\n },\n ...opts,\n };\n};\n\nexport const genEditTokenRuleData = (\n opts?: Partial<EditTokenRuleRequestData>,\n): EditTokenRuleRequestData => {\n return {\n parentAccountId: faker.string.uuid(),\n contractAddress: faker.string.alphanumeric({ length: 44 }),\n rules: [\n {\n operationType: \"SEND\",\n reviewSteps: [\n {\n quorum: 1,\n userIds: [],\n },\n ],\n },\n ],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateApiKeyRequestData, EditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\n\nexport const genCreateApiKeyData = (\n opts?: Partial<CreateApiKeyRequestData>,\n): CreateApiKeyRequestData => {\n return {\n name: faker.company.name().slice(0, 19),\n entities: [],\n scopes: {}, // FIXME what should we put there?\n ...opts,\n };\n};\n\nexport const genEditApiKeyData = (opts?: Partial<EditApiKeyRequestData>): EditApiKeyRequestData => {\n return {\n name: faker.company.name().slice(0, 19),\n entities: [],\n scopes: {}, // FIXME what should we put there?\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { SignDigestsRequestData } from \"@/transactions\";\n\nexport const genSignDigestsData = (\n opts?: Partial<SignDigestsRequestData>,\n): SignDigestsRequestData => {\n const { accountId, digests } = opts ?? {};\n return {\n accountId: accountId ?? faker.string.uuid(),\n digests: digests ?? [\n {\n digest: faker.string.hexadecimal({ prefix: \"\", length: 64 }),\n derivationPath: \"m/44'/60'/0'\",\n },\n ],\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateEntityRequestData, EditEntityRequestData } from \"@/entities\";\n\nexport const genCreateEntityData = (\n opts?: Partial<CreateEntityRequestData>,\n): CreateEntityRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n accountIds: [],\n memberIds: [],\n ...opts,\n };\n};\n\nexport const genEditEntityData = (opts?: Partial<EditEntityRequestData>): EditEntityRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n accountIds: [],\n memberIds: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreateGroupRequestData, EditGroupRequestData } from \"@/groups\";\n\nexport const genCreateGroupData = (\n opts?: Partial<CreateGroupRequestData>,\n): CreateGroupRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n members: [],\n ...opts,\n };\n};\n\nexport const genEditGroupData = (opts?: Partial<EditGroupRequestData>): EditGroupRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n members: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type { CreatePublicPolicyRequestData, EditPublicPolicyRequestData } from \"@/policies\";\n\nexport const genCreatePolicyData = (\n opts?: Partial<CreatePublicPolicyRequestData>,\n): CreatePublicPolicyRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n currency: \"bitcoin\",\n govRules: [],\n ...opts,\n };\n};\n\nexport const genEditPolicyData = (\n opts?: Partial<EditPublicPolicyRequestData>,\n): EditPublicPolicyRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n govRules: [],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport { times } from \"lodash-es\";\n\nimport type { CreateSciConfigRequestData, EditSciConfigRequestData } from \"@/accounts\";\n\nexport const genCreateSciConfigData = (\n opts?: Partial<CreateSciConfigRequestData>,\n): CreateSciConfigRequestData => {\n return {\n account: faker.string.uuid(),\n config: {\n dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),\n customContractCallEnabled: faker.datatype.boolean(),\n },\n ...opts,\n };\n};\n\nexport const genEditSciConfigData = (\n opts?: Partial<EditSciConfigRequestData>,\n): EditSciConfigRequestData => {\n return {\n config: {\n dapps: times(faker.number.int({ min: 0, max: 5 }), () => faker.word.noun()),\n customContractCallEnabled: faker.datatype.boolean(),\n },\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\n\nimport type {\n TradelinkAdjustPledgeRequestData,\n TradelinkArbitrationRequestData,\n TradelinkCreateSettlementRequestData,\n TradelinkForceUnpledgeRequestData,\n TradelinkRepledgeRequestData,\n TradelinkWithdrawRequestData,\n} from \"@/tradelink\";\n\nexport const genCreatePledgeIncrementData = (\n opts?: Partial<TradelinkAdjustPledgeRequestData>,\n): TradelinkAdjustPledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n amount: \"42\",\n ...opts,\n});\n\nexport const genRepledgeRequestData = (\n opts?: Partial<TradelinkRepledgeRequestData>,\n): TradelinkRepledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n amount: \"42\",\n ...opts,\n});\n\nexport const genCreateSettlementData = (\n opts?: Partial<TradelinkCreateSettlementRequestData>,\n): TradelinkCreateSettlementRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n transaction: {\n type: \"BITCOIN_LIKE_SEND\",\n amount: \"42\",\n currency: \"bitcoin\",\n maxFee: \"999\",\n recipient: faker.finance.bitcoinAddress(),\n feeStrategy: { type: \"NORMAL\" },\n },\n ...opts,\n});\n\nexport const genForceUnpledgeData = (\n opts?: Partial<TradelinkForceUnpledgeRequestData>,\n): TradelinkForceUnpledgeRequestData => ({\n accountId: faker.string.uuid(),\n exchangeId: faker.string.uuid(),\n ...opts,\n});\n\nexport const genTradelinkWithdrawData = (\n opts?: Partial<TradelinkWithdrawRequestData>,\n): TradelinkWithdrawRequestData => ({\n accountId: faker.string.uuid(),\n transaction: {\n type: \"ETHEREUM_LIKE_SEND\",\n recipient: \"0x63e4195AF1509490b430F3f5bCb85A82a24F5C82\",\n amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n currency: \"ethereum\",\n feeStrategy: {\n type: \"NORMAL\",\n gasPrice: \"2\",\n gasLimit: \"10\",\n },\n },\n ...opts,\n});\n\nexport const genTradelinkArbitrationData = (\n opts?: Partial<TradelinkArbitrationRequestData>,\n): TradelinkArbitrationRequestData => ({\n accountId: faker.string.uuid(),\n transaction: {\n type: \"ETHEREUM_LIKE_SEND\",\n recipient: \"0xcefd70CFCd7a2FAa0fe956E3d496F9313297CB44\",\n amount: faker.number.bigInt({ min: 0, max: 99 }).toString(),\n maxFee: faker.number.bigInt({ min: 1 }).toString(),\n currency: \"ethereum\",\n feeStrategy: {\n type: \"NORMAL\",\n gasPrice: \"2\",\n gasLimit: \"10\",\n },\n },\n ...opts,\n});\n","import { faker } from \"@faker-js/faker\";\nimport { UserRole } from \"@prisma/client\";\n\nimport type {\n CreateApiUserAccessRequestData,\n CreateApiUserRequestData,\n CreatePsdUserRequestData,\n} from \"@/users\";\n\nimport { fakePubKey } from \"../../faker-utils\";\n\nexport const genCreatePsdUserData = (\n opts?: Partial<CreatePsdUserRequestData>,\n): CreatePsdUserRequestData => ({\n registrationId: faker.string.uuid(),\n ...opts,\n});\n\nexport const genCreateApiUserData = (\n opts?: Partial<CreateApiUserRequestData>,\n): CreateApiUserRequestData => {\n return {\n name: faker.person.firstName(),\n pubKey: fakePubKey(),\n role: UserRole.OPERATOR,\n viewAll: false,\n ...opts,\n };\n};\n\nexport const genCreateApiUserAccessData = (\n opts?: Partial<CreateApiUserAccessRequestData>,\n): CreateApiUserAccessRequestData => {\n return {\n name: faker.person.firstName(),\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport { WhitelistType } from \"@prisma/client\";\n\nimport type {\n CreateWhitelistRequestData,\n EditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\n\nexport const genCreateWhitelistData = (\n opts?: Partial<CreateWhitelistRequestData>,\n): CreateWhitelistRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n description: faker.lorem.sentence(),\n type: faker.helpers.arrayElement(Object.values(WhitelistType)),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n ...opts,\n };\n};\n\nexport const genEditWhitelistData = (\n opts?: Partial<EditWhitelistRequestData>,\n): EditWhitelistRequestData => {\n return {\n name: faker.word.noun({ length: { min: 5, max: 19 } }),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n ...opts,\n };\n};\n","import { AdminPermission } from \"@prisma/client\";\n\nimport type { WorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\n\nexport const genWorkspaceRuleData = (\n opts?: Partial<WorkspaceRuleRequestData>,\n): WorkspaceRuleRequestData => {\n return {\n permission: AdminPermission.CREATE_ACCOUNT_WITH_POLICY,\n reviewConfig: [{ userIds: [], quorum: 2 }],\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { VaultRequest, VaultRequestReview } from \"@prisma/client\";\nimport { ChallengeType, RequestReviewStatus, RequestState, RequestType } from \"@prisma/client\";\nimport { times } from \"lodash-es\";\n\nimport type {\n CreateAccountRequestData,\n CreateSciConfigRequestData,\n EditAccountRequestData,\n EditSciConfigRequestData,\n EditTokenRuleRequestData,\n} from \"@/accounts\";\nimport type { CreateApiKeyRequestData, EditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\nimport type { CreateEntityRequestData, EditEntityRequestData } from \"@/entities\";\nimport type { UpdateQuorumRequestData } from \"@/governance\";\nimport type { WorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\nimport type { CreateGroupRequestData, EditGroupRequestData } from \"@/groups\";\nimport type { CreatePublicPolicyRequestData, EditPublicPolicyRequestData } from \"@/policies\";\nimport { shouldHaveTargetHsmId, shouldHaveTargetId } from \"@/requests/utils\";\nimport type {\n TradelinkAdjustPledgeRequestData,\n TradelinkArbitrationRequestData,\n TradelinkCreateSettlementRequestData,\n TradelinkForceUnpledgeRequestData,\n TradelinkRepledgeRequestData,\n TradelinkWithdrawRequestData,\n} from \"@/tradelink\";\nimport type {\n CreateTransactionRequestData,\n SignDigestsRequestData,\n SignMessageRequestData,\n} from \"@/transactions\";\nimport type {\n CreateApiUserAccessRequestData,\n CreateApiUserRequestData,\n CreatePsdUserRequestData,\n} from \"@/users\";\nimport type {\n CreateWhitelistRequestData,\n EditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\nimport type { Challenge, RequestReviewStep } from \"@/workflows\";\n\nimport {\n fakeGateId,\n fakeHsmObjectId,\n fakeJws,\n fakePsdChallenge,\n fakePsdSignature,\n fakePubKey,\n fakeWorkspaceName,\n} from \"../../faker-utils\";\nimport { injectSyncId } from \"../sync-id-utils\";\nimport {\n genCreateAccountData,\n genEditAccountData,\n genEditTokenRuleData,\n} from \"./request-for-account\";\nimport { genCreateApiKeyData, genEditApiKeyData } from \"./request-for-api-key\";\nimport { genSignDigestsData } from \"./request-for-digests-signature\";\nimport { genCreateEntityData, genEditEntityData } from \"./request-for-entity\";\nimport { genCreateGroupData, genEditGroupData } from \"./request-for-group\";\nimport { genSignMessageData } from \"./request-for-message-signature\";\nimport { genCreatePolicyData, genEditPolicyData } from \"./request-for-policy\";\nimport { genCreateSciConfigData, genEditSciConfigData } from \"./request-for-sciconfig\";\nimport {\n genCreatePledgeIncrementData,\n genCreateSettlementData,\n genForceUnpledgeData,\n genRepledgeRequestData,\n genTradelinkArbitrationData,\n genTradelinkWithdrawData,\n} from \"./request-for-tradelink\";\nimport { genCreateTransactionData } from \"./request-for-transaction\";\nimport {\n genCreateApiUserAccessData,\n genCreateApiUserData,\n genCreatePsdUserData,\n} from \"./request-for-user\";\nimport { genCreateWhitelistData, genEditWhitelistData } from \"./request-for-whitelist\";\nimport { genWorkspaceRuleData } from \"./request-for-workspace-rule\";\n\nexport type RequestDataTypes = {\n // Workspace...\n [RequestType.UPDATE_QUORUM]: UpdateQuorumRequestData;\n // User...\n [RequestType.CREATE_PSD_USER]: CreatePsdUserRequestData;\n [RequestType.CREATE_API_USER]: CreateApiUserRequestData;\n [RequestType.CREATE_API_USER_ACCESS]: CreateApiUserAccessRequestData;\n [RequestType.REVOKE_USER]: Record<string, never>;\n // Admin gov rule...\n [RequestType.EDIT_WORKSPACE_RULE]: WorkspaceRuleRequestData;\n // Group...\n [RequestType.CREATE_GROUP]: CreateGroupRequestData;\n [RequestType.EDIT_GROUP]: EditGroupRequestData;\n [RequestType.REVOKE_GROUP]: Record<string, never>;\n // API key...\n [RequestType.CREATE_API_KEY]: CreateApiKeyRequestData;\n [RequestType.EDIT_API_KEY]: EditApiKeyRequestData;\n [RequestType.REVOKE_API_KEY]: Record<string, never>;\n // Whitelist...\n [RequestType.CREATE_WHITELIST]: CreateWhitelistRequestData;\n [RequestType.EDIT_WHITELIST]: EditWhitelistRequestData;\n // Entity...\n [RequestType.CREATE_ENTITY]: CreateEntityRequestData;\n [RequestType.EDIT_ENTITY]: EditEntityRequestData;\n [RequestType.REVOKE_ENTITY]: Record<string, never>;\n // Account...\n [RequestType.CREATE_ACCOUNT]: CreateAccountRequestData;\n [RequestType.EDIT_ACCOUNT]: EditAccountRequestData;\n [RequestType.EDIT_TOKEN_RULE]: EditTokenRuleRequestData;\n // Operator requests...\n [RequestType.CREATE_TRANSACTION]: CreateTransactionRequestData;\n [RequestType.SIGN_MESSAGE]: SignMessageRequestData;\n [RequestType.SIGN_DIGESTS]: SignDigestsRequestData;\n // SCI config ...\n [RequestType.CREATE_SCICONFIG]: CreateSciConfigRequestData;\n [RequestType.EDIT_SCICONFIG]: EditSciConfigRequestData;\n // Policy\n [RequestType.CREATE_POLICY]: CreatePublicPolicyRequestData;\n [RequestType.EDIT_POLICY]: EditPublicPolicyRequestData;\n // Tradelink...\n [RequestType.TRADELINK_ADJUST_PLEDGE]: TradelinkAdjustPledgeRequestData;\n [RequestType.TRADELINK_REPLEDGE]: TradelinkRepledgeRequestData;\n [RequestType.TRADELINK_CREATE_SETTLEMENT]: TradelinkCreateSettlementRequestData;\n [RequestType.TRADELINK_FORCE_UNPLEDGE]: TradelinkForceUnpledgeRequestData;\n [RequestType.TRADELINK_WITHDRAW]: TradelinkWithdrawRequestData;\n [RequestType.TRADELINK_ARBITRATE]: TradelinkArbitrationRequestData;\n};\n\n/**\n * A more strict subtype of `VaultRequest`: The `data` field should be a `Prisma.JsonValue`\n * (in this case, a `Prisma.JsonObject`) __AND__ also of type `D`.\n */\nexport type RequestWith<D> = VaultRequest & { data: D };\n\nexport const genRequestData = <T extends keyof RequestDataTypes>(\n type: T,\n opts?: Partial<RequestDataTypes[T]>,\n): RequestDataTypes[T] => {\n switch (type) {\n // Workspace...\n case RequestType.UPDATE_QUORUM:\n return { quorum: 3, ...opts } as RequestDataTypes[T];\n\n // User...\n case RequestType.CREATE_PSD_USER:\n return genCreatePsdUserData(opts) as RequestDataTypes[T];\n case RequestType.CREATE_API_USER:\n return genCreateApiUserData(opts) as RequestDataTypes[T];\n case RequestType.CREATE_API_USER_ACCESS:\n return genCreateApiUserAccessData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_USER:\n return {} as RequestDataTypes[T];\n\n // Admin gov rule...\n case RequestType.EDIT_WORKSPACE_RULE:\n return genWorkspaceRuleData(opts) as RequestDataTypes[T];\n\n // Group...\n case RequestType.CREATE_GROUP:\n return genCreateGroupData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_GROUP:\n return genEditGroupData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_GROUP:\n return {} as RequestDataTypes[T];\n\n // ApiKey...\n case RequestType.CREATE_API_KEY:\n return genCreateApiKeyData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_API_KEY:\n return genEditApiKeyData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_API_KEY:\n return {} as RequestDataTypes[T];\n\n // Whitelist...\n case RequestType.CREATE_WHITELIST:\n return genCreateWhitelistData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_WHITELIST:\n return genEditWhitelistData(opts) as RequestDataTypes[T];\n\n // Entity...\n case RequestType.CREATE_ENTITY:\n return genCreateEntityData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_ENTITY:\n return genEditEntityData(opts) as RequestDataTypes[T];\n case RequestType.REVOKE_ENTITY:\n return {} as RequestDataTypes[T];\n\n // Account...\n case RequestType.CREATE_ACCOUNT:\n return genCreateAccountData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_ACCOUNT:\n return genEditAccountData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_TOKEN_RULE:\n return genEditTokenRuleData(opts) as RequestDataTypes[T];\n\n // Operator requests...\n case RequestType.CREATE_TRANSACTION:\n return genCreateTransactionData(opts) as RequestDataTypes[T];\n case RequestType.SIGN_MESSAGE:\n return genSignMessageData(opts) as RequestDataTypes[T];\n case RequestType.SIGN_DIGESTS:\n return genSignDigestsData(opts) as RequestDataTypes[T];\n\n // SCI config...\n case RequestType.CREATE_SCICONFIG:\n return genCreateSciConfigData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_SCICONFIG:\n return genEditSciConfigData(opts) as RequestDataTypes[T];\n\n // Policy\n case RequestType.CREATE_POLICY:\n return genCreatePolicyData(opts) as RequestDataTypes[T];\n case RequestType.EDIT_POLICY:\n return genEditPolicyData(opts) as RequestDataTypes[T];\n\n // Tradelink...\n case RequestType.TRADELINK_ADJUST_PLEDGE:\n return genCreatePledgeIncrementData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_CREATE_SETTLEMENT:\n return genCreateSettlementData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_FORCE_UNPLEDGE:\n return genForceUnpledgeData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_WITHDRAW:\n return genTradelinkWithdrawData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_REPLEDGE:\n return genRepledgeRequestData(opts) as RequestDataTypes[T];\n case RequestType.TRADELINK_ARBITRATE:\n return genTradelinkArbitrationData(opts) as RequestDataTypes[T];\n\n default: {\n const unknownType: never = type;\n throw new Error(`Unknown request type: ${unknownType}`);\n }\n }\n};\n\nexport const genRequestReviewSteps = (numSteps?: number): RequestReviewStep[] =>\n times(numSteps ?? 1, () => ({ stageName: \"default\", quorum: 2 }));\n\nexport type VaultRequestOpts<T extends keyof RequestDataTypes> = {\n type: T;\n data: RequestDataTypes[T];\n} & Partial<Omit<VaultRequest, \"type\" | \"data\">>;\n\nexport const genVaultRequest = <T extends keyof RequestDataTypes>(\n opts: VaultRequestOpts<T>,\n): RequestWith<RequestDataTypes[T]> => {\n const { type, state = RequestState.PENDING_APPROVAL, data, ...custom } = opts;\n const targetHsmId = shouldHaveTargetHsmId({ type, state })\n ? type === RequestType.CREATE_PSD_USER\n ? fakePubKey()\n : fakeHsmObjectId()\n : null;\n const targetId = shouldHaveTargetId(type) ? faker.string.uuid() : null;\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n type,\n state,\n reviewSteps: genRequestReviewSteps(),\n currentStepIndex: 0,\n expiresAt: faker.date.future(),\n targetHsmId,\n createdById: faker.string.uuid(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n note: null,\n managedData: null,\n data,\n targetId,\n gateTargetType: \"Whatsoever\",\n gateTargetId: 0,\n gateType: \"Request\",\n gateId: fakeGateId(),\n // Note: Custom properties will overwrite the default ones. It is still possible for caller\n // to overwrite `targetId`. Thus it is not guaranteed that these values will always be\n // consistent with `type` and `state`.\n ...custom,\n });\n};\n\nexport const genVaultRequestReview = (\n opts?: Partial<VaultRequestReview & { challenge: Challenge }>,\n): VaultRequestReview => {\n const status = opts?.status ?? RequestReviewStatus.PENDING;\n const challenge = opts?.challenge ?? fakePsdChallenge();\n const { challengeType } = challenge;\n let signature;\n if (status !== RequestReviewStatus.APPROVED) {\n signature = null;\n } else {\n switch (challengeType) {\n case ChallengeType.PSD:\n signature = fakePsdSignature();\n break;\n case ChallengeType.API:\n signature = fakeJws();\n break;\n case ChallengeType.SOFT:\n signature = \"\";\n break;\n }\n }\n return {\n id: faker.number.int(),\n requestId: faker.string.uuid(),\n stageName: \"default\", // assume the simple case where there is one single stage\n stepIndex: 0,\n userId: faker.string.uuid(),\n pubKey: fakePubKey(),\n challengeType,\n challenge,\n signature,\n status,\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Group, User, UserRegistration, Workspace } from \"@prisma/client\";\nimport {\n ActivationStatus,\n GateUserType,\n PsdModel,\n UserDeviceType,\n UserRegistrationState,\n UserRole,\n} from \"@prisma/client\";\n\nimport type { GroupWithMembers } from \"@/groups\";\nimport { genAuthUserId } from \"@/utils\";\n\nimport {\n fakeDeviceUserId,\n fakeGateId,\n fakeHexString,\n fakeHsmObjectId,\n fakePubKey,\n fakeWorkspaceName,\n} from \"../faker-utils\";\nimport { fakeUserRegistrationChallenge } from \"../hsm\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nexport const genWorkspace = (opts?: Partial<Workspace>): Workspace => ({\n id: faker.string.uuid(),\n name: fakeWorkspaceName(),\n compartmentId: faker.number.int({ max: 1e6 }),\n status: ActivationStatus.ACTIVE,\n mode: \"GATE_COMPAT\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n pkiRootCaFetched: false,\n ...opts,\n});\n\nconst genUserFieldsForDeviceType = (\n deviceType: UserDeviceType,\n): Pick<User, \"deviceType\" | \"deviceUserId\" | \"hsmId\"> => {\n switch (deviceType) {\n case UserDeviceType.PSD:\n case UserDeviceType.SOFT_PSD:\n return {\n deviceType,\n deviceUserId: fakeDeviceUserId(),\n hsmId: null,\n };\n case UserDeviceType.API:\n return {\n deviceType,\n deviceUserId: null,\n hsmId: faker.string.uuid(),\n };\n }\n};\n\nexport const genUser = (opts?: Partial<User>): User => {\n // By default, generate ADMIN or OPERATOR. The `READ_ONLY_API_KEY` role is a bit special,\n // so if needed, caller should ask for it explicitly.\n const role = opts?.role ?? faker.helpers.arrayElement([UserRole.ADMIN, UserRole.OPERATOR]);\n const deviceType = opts?.deviceType ?? UserDeviceType.PSD;\n const userFieldsForDeviceType = genUserFieldsForDeviceType(deviceType);\n const gateType =\n role === UserRole.READ_ONLY_API_KEY ? GateUserType.VaultApiKey : GateUserType.Person;\n return injectSyncId({\n id: faker.string.uuid(),\n name: faker.person.fullName(),\n ...userFieldsForDeviceType,\n authUserId: genAuthUserId(),\n pubKey: fakePubKey(),\n workspaceName: fakeWorkspaceName(),\n u2fKeyHandle: fakePubKey(),\n u2fPubKey: fakePubKey(),\n legacyViewAll: false,\n role,\n status: ActivationStatus.ACTIVE,\n isSuspended: false,\n gateType,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\nexport const genGroup = (opts?: Partial<Group>): Group =>\n injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.person.fullName(),\n description: faker.lorem.sentence(10),\n hsmId: fakeHsmObjectId(),\n status: ActivationStatus.ACTIVE,\n gateId: fakeGateId(),\n gateType: \"Group\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n\nexport const genGroupWithMembers = (opts?: Partial<GroupWithMembers>): GroupWithMembers => {\n const group = genGroup(opts);\n return {\n ...group,\n members: opts?.members ?? [],\n };\n};\n\nexport const genUserRegistration = (opts?: Partial<UserRegistration>): UserRegistration => {\n const state = opts?.state ?? UserRegistrationState.INITIAL;\n let fieldsForState;\n switch (state) {\n case UserRegistrationState.INITIAL:\n fieldsForState = {\n pubKey: null,\n challenge: null,\n u2fKeyHandle: null,\n u2fPubKey: null,\n };\n break;\n case UserRegistrationState.PENDING:\n fieldsForState = {\n pubKey: fakePubKey(),\n challenge: fakeUserRegistrationChallenge(),\n u2fKeyHandle: null,\n u2fPubKey: null,\n };\n break;\n case UserRegistrationState.COMPLETED:\n fieldsForState = {\n pubKey: fakePubKey(),\n challenge: fakeUserRegistrationChallenge(),\n u2fKeyHandle: fakeHexString(150),\n u2fPubKey: fakePubKey(),\n };\n break;\n }\n\n return {\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.string.alphanumeric(16),\n role: UserRole.OPERATOR,\n psdModel: PsdModel.STAX,\n deviceUserId: fakeDeviceUserId(),\n invitedById: faker.string.uuid(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n state,\n ...fieldsForState,\n ...opts,\n };\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Policy, User, Whitelist } from \"@prisma/client\";\nimport {\n ActivationStatus,\n GatePolicyType,\n GateReviewConfigType,\n ReviewConfigType,\n WhitelistType,\n} from \"@prisma/client\";\nimport { times } from \"lodash-es\";\n\nimport type { ReviewConfigWithMembers } from \"@/governance\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport type { GovRuleData, PolicyWithRelatedObjects } from \"@/policies\";\n\nimport { fakeGateId, fakeHsmObjectId, fakeWorkspaceName } from \"../faker-utils\";\nimport { genReviewConfig } from \"./review-configs\";\nimport { injectSyncId } from \"./sync-id-utils\";\n\nexport const genWhitelist = (opts?: Partial<Whitelist>): Whitelist => {\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName: fakeWorkspaceName(),\n name: faker.lorem.words(3),\n description: faker.lorem.sentence(10),\n addresses: [\n {\n name: faker.lorem.words(3),\n currency: \"bitcoin\",\n address: faker.finance.bitcoinAddress(),\n destinationTags: [],\n },\n {\n name: faker.lorem.words(3),\n currency: \"ethereum\",\n address: faker.finance.ethereumAddress(),\n destinationTags: [],\n },\n ],\n hsmId: fakeHsmObjectId(),\n type: faker.helpers.arrayElement(Object.values(WhitelistType)),\n status: faker.helpers.arrayElement(Object.values(ActivationStatus)),\n gateId: fakeGateId(),\n gateType: \"Whitelist\",\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\ntype PolicyThinOpts = Partial<Omit<Policy, \"rulesJsonArray\">>;\n\nexport const genPolicyWithFakeRules = (opts?: PolicyThinOpts): PolicyWithRelatedObjects => {\n const { workspaceName, name, description, currency, isPrivate, hsmId } = {\n workspaceName: fakeWorkspaceName(),\n name: \"policy_\".concat(faker.string.alpha(5)),\n description: faker.lorem.sentence(10),\n currency: null,\n isPrivate: true,\n hsmId: null,\n ...opts,\n };\n const reviewConfig = genReviewConfig({\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n });\n const whitelists = times(2, () => genWhitelist({ workspaceName }));\n const rulesJsonArray = [\n {\n operationType: \"SEND\",\n threshold: { min: \"1\", max: \"99\" },\n whitelistIds: whitelists.map((_) => _.id),\n reviewConfigId: reviewConfig.id,\n hsmId: fakeHsmObjectId(),\n },\n ];\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n name,\n description,\n currency,\n isPrivate,\n hsmId,\n rulesJsonArray,\n whitelists,\n reviewConfigs: [reviewConfig],\n status: ActivationStatus.ACTIVE,\n gateType: isPrivate ? GatePolicyType.AccountGovernanceRules : GatePolicyType.Policy,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n ...opts,\n });\n};\n\ntype PolicyRichOpts = PolicyThinOpts & {\n workspaceName: string;\n rules: GovRuleData[];\n whitelists: Whitelist[];\n users: User[];\n groups: GroupWithMembers[];\n};\n\nexport const genPolicyWithRules = (opts: PolicyRichOpts): PolicyWithRelatedObjects => {\n const {\n id: policyId = faker.string.uuid(),\n workspaceName,\n rules,\n whitelists,\n users,\n groups,\n ...otherFields\n } = opts;\n\n const rulesJsonArray = [];\n const reviewConfigs: ReviewConfigWithMembers[] = [];\n for (const rule of rules) {\n const { reviewSteps, ...otherRuleFields } = rule;\n const relatedUserIds = reviewSteps.flatMap((reviewStep) =>\n \"userIds\" in reviewStep ? reviewStep.userIds : [],\n );\n const relatedUsers = users.filter((_) => relatedUserIds.includes(_.id));\n const relatedGroupIds = reviewSteps.flatMap((reviewStep) =>\n \"groupId\" in reviewStep ? [reviewStep.groupId] : [],\n );\n const relatedGroups = groups.filter((_) => relatedGroupIds.includes(_.id));\n const reviewConfig: ReviewConfigWithMembers = injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n steps: reviewSteps,\n users: relatedUsers,\n groups: relatedGroups,\n ownerPolicyId: policyId,\n gateType: GateReviewConfigType.MultiAuthorizationsRule,\n gateId: fakeGateId(),\n });\n rulesJsonArray.push({\n ...otherRuleFields,\n reviewConfigId: reviewConfig.id,\n });\n reviewConfigs.push(reviewConfig);\n }\n\n return injectSyncId({\n id: faker.string.uuid(),\n workspaceName,\n name: faker.person.fullName(),\n description: faker.lorem.sentence(10),\n currency: null,\n isPrivate: true,\n hsmId: null,\n status: ActivationStatus.ACTIVE,\n gateType: GatePolicyType.AccountGovernanceRules,\n gateId: fakeGateId(),\n createdAt: faker.date.past(),\n updatedAt: faker.date.past(),\n rulesJsonArray,\n whitelists,\n reviewConfigs,\n ...otherFields,\n });\n};\n","import { ChallengeType, PsdModel } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { type HsmObjectId, zHexString } from \"@/zod-utils\";\n\nexport type HsmObject = {\n hsmId: HsmObjectId;\n};\n\n// #region ---------- Common schemas & types ------------------------------------------------------\n\nexport const zPubKey = zHexString.meta({ description: \"Public key\" });\n\nexport type PubKey = z.infer<typeof zPubKey>;\n\nexport const zHsmCertificate = z.object({\n codeHash: z\n .base64()\n .meta({ description: \"Hash of the executable that generated this certificate\" }),\n attestationPub: z.base64().meta({ description: \"Attestation public key\" }),\n certificate: z.base64().meta({ description: \"Certificate bytes\" }),\n signature: z.base64().meta({ description: \"Certificate signature\" }),\n});\n\nexport type HsmCertificate = z.infer<typeof zHsmCertificate>;\n\nexport const zBlob = z.string(); // TODO: .min(1).max(???).regex(???)\n\nexport type Blob = z.infer<typeof zBlob>;\n\nexport type HsmReviewStep = {\n quorum: number;\n users: PubKey[];\n};\n\nexport type HsmCurrency = {\n family: string;\n ticker: string; // hack: replaced by ledger id\n parameters: string; // the atp payload\n signature: string; // the atp signature\n};\n\n// #endregion\n\n// #region ---------- Challenge -------------------------------------------------------------------\n\nexport const zPsdChallenge = z.object({\n challengeType: z.literal(ChallengeType.PSD),\n wActions: z\n .array(z.string())\n .meta({ description: \"Wrapped blobs that describe the screens to display\" }),\n handshake: z.string().meta({ description: \"Handshake for the HSM <-> PSD communication\" }),\n handshakeAttestation: zHsmCertificate.meta({\n description: \"Handshake attestation to verify secure channel between HSM & PSD\",\n }),\n partitionId: z.string().meta({ description: \"HSM partition id (maybe not useful)\" }),\n});\n\nexport type PsdChallenge = z.infer<typeof zPsdChallenge>;\n\nexport const zApiChallenge = z.object({\n challengeType: z.literal(ChallengeType.API),\n payload: z\n .object({\n approve: z.string().meta({ description: \"JSON payload to sign (as JWS) to approve\" }),\n reject: z.string().meta({ description: \"JSON payload to sign (as JWS) to reject\" }),\n })\n .meta({ description: \"JSON payload to approve and to reject\" }),\n});\n\nexport type ApiChallenge = z.infer<typeof zApiChallenge>;\n\nexport const zHsmChallenge = z.discriminatedUnion(\"challengeType\", [\n zPsdChallenge.meta({ description: \"Necessary data to approve on a PSD\" }),\n zApiChallenge.meta({ description: \"Necessary data for approval by an API user\" }),\n]);\n\nexport type HsmChallenge = z.infer<typeof zHsmChallenge>;\n\n/** A group of challenges indexed by pub key. */\nexport const zHsmChallengeGroup = z.record(zPubKey, zHsmChallenge);\n\nexport type HsmChallengeGroup = z.infer<typeof zHsmChallengeGroup>;\n\n/**\n * One or more steps of challenges, each step contains a challenge group.\n * It is a 2D structure where the 1st dimension is \"step\", and the 2nd dimension is \"pubKey\".\n */\nexport const zHsmChallengeSteps = z.array(zHsmChallengeGroup);\n\nexport type HsmChallengeSteps = z.infer<typeof zHsmChallengeSteps>;\n\n// #endregion\n\n// #region ---------- Signature -------------------------------------------------------------------\n\n// TODO: Make it more strict (but don't be too strict).\nexport const zPsdSignature = z.string().min(1).meta({ description: \"Signature from PSD\" });\n\nexport type PsdSignature = z.infer<typeof zPsdSignature>;\n\n// TODO: Make it more strict (but don't be too strict).\nexport const zApiSignature = z.string().min(1).meta({ description: \"Signature from API (JWS)\" });\n\nexport type ApiSignature = z.infer<typeof zApiSignature>;\n\nexport const zHsmProof = z.discriminatedUnion(\"challengeType\", [\n z.object({\n challengeType: z.literal(ChallengeType.PSD),\n signature: zPsdSignature,\n }),\n z.object({\n challengeType: z.literal(ChallengeType.API),\n signature: zApiSignature,\n }),\n]);\n\nexport type HsmProof = z.infer<typeof zHsmProof>;\n\n/** A group of approvals indexed by pub key. */\nconst zHsmApprovalGroup = z.record(zPubKey, zHsmProof);\n\nexport type HsmApprovalGroup = z.infer<typeof zHsmApprovalGroup>;\n\n/**\n * One or more steps of approvals, each step contains an approval group.\n * This is a 2D matrix while the 1st dimension is \"step\", and the 2nd dimension is \"pubKey\".\n */\nexport const zHsmApprovalSteps = z.array(zHsmApprovalGroup);\n\nexport type HsmApprovalSteps = z.infer<typeof zHsmApprovalSteps>;\n\n/**\n * HSM approvals for approved stages. Key is the approved stage name, and value is an array of\n * approval steps where each step is a record of approvals indexed by user pub key.\n */\nexport type HsmApprovalStages = Record<string, HsmApprovalSteps>;\n\n/**\n * A challenge stage has a name and contains an array of one or more challenge steps.\n * Each challenge step contains challenges for multiple users, indexed by user's pub key.\n */\nexport const zHsmChallengeStage = z.object({\n stageName: z.string(),\n steps: zHsmChallengeSteps,\n});\n\nexport type HsmChallengeStage = z.infer<typeof zHsmChallengeStage>;\n\n// #endregion\n\n// #region ---------- User registration -----------------------------------------------------------\n\n/**\n * Device data submitted by the invited user, to generate a registration challenge.\n */\nexport const zUserRegistrationDeviceData = z\n .object({\n name: z.string().meta({ description: \"Name of the user to register\" }),\n psdModel: z.enum(PsdModel).meta({ description: \"Device model\" }),\n pubKey: zPubKey.meta({ description: \"Device public key\" }),\n confidentialityKey: zPubKey,\n psdEphemeralKey: zPubKey,\n psdEphemeralKeyAttestation: zHsmCertificate,\n })\n .meta({ description: \"Data generated by the PSD to register on HSM\" });\n\nexport type UserRegistrationDeviceData = z.infer<typeof zUserRegistrationDeviceData>;\n\n/**\n * Registration challenge for the invited user, generated by HSM.\n */\nexport const zUserRegistrationChallenge = z\n .object({\n challenge: z.string(),\n ephemeralPublicKey: zPubKey,\n ephemeralPublicKeyAttestation: zHsmCertificate,\n handshake: zHexString,\n handshakeAttestation: zHsmCertificate,\n u2fRegisterData: z.string(),\n ciphertext: z.string(),\n requestId: z.string(),\n })\n .meta({ description: \"Challenge generated by HSM using the PSD registration data\" });\n\nexport type UserRegistrationChallenge = z.infer<typeof zUserRegistrationChallenge>;\n\n/**\n * Response to the user registration challenge, submitted by the invited user.\n */\nexport const zUserRegistrationChallengeResponse = z\n .object({\n certificate: zHsmCertificate,\n u2fRegister: zHexString,\n u2fKeyHandle: zHexString,\n registerData: z.string(),\n validationKey: zPubKey,\n pairingPayload: z.string(),\n })\n .meta({ description: \"Final registration response from PSD to HSM\" });\n\nexport type UserRegistrationChallengeResponse = z.infer<typeof zUserRegistrationChallengeResponse>;\n\n// #endregion\n\n// #region ---------- PSD Pairing -----------------------------------------------------------------\n\nexport const zPsdPairingInputData = z.object({\n confidentialityKeyCurve25519: z.string(),\n confidentialityKeySignature: z.string(),\n});\n\nexport type PsdPairingInputData = z.infer<typeof zPsdPairingInputData>;\n\nexport const zPsdPairingData = z.object({\n pairing: z.object({\n workspaceName: z.string(),\n partitionKey: z.string(), // TODO: Is this `zPubKey`?\n bootstrapEnabled: z.boolean(),\n }),\n // TODO: Is this `zHsmCertificate`?\n partitionKeyAttestation: z.object({\n codeHash: z.string(),\n attestationPub: z.string(),\n certificate: z.string(),\n signature: z.string(),\n }),\n blob: zBlob,\n});\n\nexport type PsdPairingData = z.infer<typeof zPsdPairingData>;\n\n// #endregion\n\n// #region ---------- Signatures ------------------------------------------------------------------\n\nexport const zHsmSignature = z.object({\n digest: z.string().nullable().meta({ description: \"Signed digest\" }),\n derivationPath: z\n .string()\n .nullable()\n .meta({ description: \"Derivation path used to sign the digest\" }),\n r: z.base64().meta({ description: \"Base64 encoded signature r coordinate\" }),\n s: z.base64().meta({ description: \"Base64 encoded signature s coordinate\" }),\n v: z\n .union([z.literal(0), z.literal(1)])\n .nullable()\n .meta({ description: \"Ecdsa only, signature recovery value\" }),\n der: zHexString.meta({\n description: \"Hex string encoded DER signature format (for eddsa, concatenation of r & s)\",\n }),\n pubkey: zHexString\n .nullable()\n .meta({ description: \"Public key for signature verification, 32 or 33 bytes\" }),\n});\n\nexport type HsmSignature = z.infer<typeof zHsmSignature>;\n\n// #endregion\n","import { ActivationStatus, type PrismaClient, type Workspace } from \"@prisma/client\";\nimport z from \"zod\";\n\nexport const zWorkspaceName = z\n .string()\n .min(1)\n .max(20)\n .regex(/^[a-z0-9]+$/);\n\nexport const getActiveWorkspaceOrThrow = async (\n name: string,\n prisma: PrismaClient,\n): Promise<Workspace> => {\n return prisma.workspace.findUniqueOrThrow({\n where: { name, status: ActivationStatus.ACTIVE },\n });\n};\n","import { PsdModel, UserRegistrationState, UserRole } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nexport const zUserName = z.string().min(1).max(19).meta({ description: \"User name\" });\n\nexport const zUserRegistrationCreateInput = z.object({\n name: zUserName,\n role: z.enum([UserRole.ADMIN, UserRole.OPERATOR]).meta({ description: \"User role\" }),\n psdModel: z.enum(PsdModel).meta({ description: \"PSD model\" }),\n deviceUserId: z.string().meta({ description: \"Device user ID\" }),\n});\n\nexport type UserRegistrationCreateInput = z.infer<typeof zUserRegistrationCreateInput>;\n\nexport const zUserRegistrationResponse = zUserRegistrationCreateInput.extend({\n id: z.string().meta({ description: \"User registration ID\" }),\n workspaceName: z.string().meta({ description: \"Workspace name\" }),\n state: z.enum(UserRegistrationState).meta({ description: \"User registration state\" }),\n});\n\nexport type UserRegistrationResponse = z.infer<typeof zUserRegistrationResponse>;\n","import z from \"zod\";\n\nimport { zUserName } from \"./types\";\n\nexport const zCreatePsdUserRequestData = z.object({\n registrationId: z.string().meta({ description: \"User registration ID\" }),\n});\n\nexport type CreatePsdUserRequestData = z.infer<typeof zCreatePsdUserRequestData>;\n\nexport const zCreateApiUserRequestData = z\n .object({\n name: zUserName,\n pubKey: z\n .string()\n .regex(/^04[0-9a-fA-F]{128}$/)\n .meta({ description: \"Public key, uncompressed secp256r1 format\" }),\n role: z.enum([\"ADMIN\", \"OPERATOR\"]).meta({ description: \"User role\" }),\n viewAll: z.boolean().meta({ description: \"View all data\" }).optional(),\n })\n .meta({ description: \"Create API user request data\" });\n\nexport type CreateApiUserRequestData = z.infer<typeof zCreateApiUserRequestData>;\n\nexport const zCreateApiUserAccessRequestData = z\n .object({\n name: zUserName,\n })\n .meta({ description: \"Create API user credential request data\" });\n\nexport type CreateApiUserAccessRequestData = z.infer<typeof zCreateApiUserAccessRequestData>;\n\nexport const zCreateApiUserManagedData = z\n .object({\n authUserId: z.string().meta({ description: \"Authentication broker ID\" }),\n })\n .meta({ description: \"Managed data for API user\" });\n\nexport const zRevokeUserRequestData = z.object({});\n\nexport type RevokeUserRequestData = z.infer<typeof zRevokeUserRequestData>;\n\n// #endregion\n","import type { Group, Prisma, PrismaClient, ReviewConfig, User } from \"@prisma/client\";\nimport { isEqual, zip } from \"lodash-es\";\nimport { z } from \"zod\";\n\nimport type { GroupWithMembers } from \"@/groups\";\nimport { ensureNotNil, wrapToObjectsWithId } from \"@/utils\";\n\ntype UsersAndGroups = {\n users: User[];\n groups: GroupWithMembers[];\n};\n\nexport type ReviewConfigWithMembers = ReviewConfig & UsersAndGroups;\n\nexport const zReviewStepWithUsers = z\n .object({\n quorum: z.number().min(0).meta({ description: \"Number of required approvals for the step\" }),\n userIds: z.array(z.string().min(1)).meta({ description: \"User ids in the step\" }), // PKs to `User` model\n })\n .meta({ description: \"Review step with users\" });\n\nexport type ReviewStepWithUsers = z.infer<typeof zReviewStepWithUsers>;\n\nexport const zReviewStepWithUsersArray = z.array(zReviewStepWithUsers);\n\nexport const zReviewStepData = z.union([\n zReviewStepWithUsers,\n z\n .object({\n quorum: z.number().min(0).meta({ description: \"Number of required approvals for the step\" }),\n groupId: z.string().min(1).meta({ description: \"Group id in the step\" }), // PKs to `Group` model\n })\n .meta({ description: \"Review step with group\" }),\n]);\n\nexport type ReviewStepData = z.infer<typeof zReviewStepData>;\n\nexport const zReviewStepsArray = z\n .array(zReviewStepData)\n .min(1)\n .meta({ description: \"Review steps\" });\n\n/**\n * Compares two review steps arrays and return whether they are equivalent. They are equivalent\n * if they contain the same number of review steps, and for each review step, the quorum and\n * members (regardless of the order) are the same.\n */\nexport const reviewStepsAreEquivalent = (\n steps: ReviewStepData[],\n otherSteps: ReviewStepData[],\n): boolean => {\n if (steps.length !== otherSteps.length) {\n return false;\n }\n\n const isEquivalent = ([step, otherStep]: [\n ReviewStepData | undefined,\n ReviewStepData | undefined,\n ]): boolean => {\n // We should not see undefined as we should have already compared the length of the steps.\n /* v8 ignore if -- @preserve */\n if (step === undefined || otherStep === undefined) {\n return false;\n }\n if (step.quorum !== otherStep.quorum) {\n return false;\n }\n if (\"userIds\" in step && \"userIds\" in otherStep) {\n // The ordering is not important.\n return isEqual(step.userIds.slice().sort(), otherStep.userIds.slice().sort());\n }\n if (\"groupId\" in step && \"groupId\" in otherStep) {\n return step.groupId === otherStep.groupId;\n }\n // One has `userIds` while the other has `groupId`...\n return false;\n };\n\n return zip(steps, otherSteps).every(isEquivalent);\n};\n\n// Prisma arguments to connect (append) `ReviewConfig` to its related users and groups.\ntype ReviewConfigConnectionData = {\n users: { connect: { id: string }[] };\n groups: { connect: { id: string }[] };\n};\n\n/**\n * Given a data containing review steps, connect (append) the related users and groups.\n * This should be used only when creating a `ReviewConfig` in DB.\n *\n * Note: This function does NOT check if referenced users or groups exist in DB. If any of them\n * does not exist, prisma will throw an error when creating or updating objects in DB.\n */\nexport const connectReviewConfigData = <T extends { steps: ReviewStepData[] }>(\n data: T,\n): Omit<T, \"users\" | \"groups\"> & ReviewConfigConnectionData => {\n const { steps } = data;\n const userIds = steps.flatMap((step) => (\"userIds\" in step ? step.userIds : []));\n const groupIds = steps.flatMap((step) => (\"groupId\" in step ? [step.groupId] : []));\n return {\n ...data,\n users: { connect: wrapToObjectsWithId(userIds) },\n groups: { connect: wrapToObjectsWithId(groupIds) },\n };\n};\n\n// Prisma arguments to set (overwrite) `ReviewConfig` related users and groups.\ntype ReviewConfigSetData = {\n users: { set: { id: string }[] };\n groups: { set: { id: string }[] };\n};\n\n/**\n * Given a data containing review steps, set (overwrite) the related users and groups.\n * This should be used when updating a `ReviewConfig` in DB.\n *\n * Note: This function does NOT check if referenced users or groups exist in DB. If any of them\n * does not exist, prisma will throw an error when creating or updating objects in DB.\n */\nexport const setReviewConfigData = <T extends { steps: ReviewStepData[] }>(\n data: T,\n): Omit<T, \"users\" | \"groups\"> & ReviewConfigSetData => {\n const { steps } = data;\n const userIds = steps.flatMap((step) => (\"userIds\" in step ? step.userIds : []));\n const groupIds = steps.flatMap((step) => (\"groupId\" in step ? [step.groupId] : []));\n return {\n ...data,\n users: { set: wrapToObjectsWithId(userIds) },\n groups: { set: wrapToObjectsWithId(groupIds) },\n };\n};\n\nexport type EnrichedReviewConfig = Omit<ReviewConfigWithMembers, \"steps\"> & {\n steps: ReviewStepData[];\n};\n\nexport const enrichReviewConfig = (reviewConfig: ReviewConfigWithMembers): EnrichedReviewConfig => {\n const steps = zReviewStepsArray.parse(reviewConfig.steps);\n return {\n ...reviewConfig,\n steps,\n };\n};\n\nexport type ExpandedReviewStep = {\n quorum: number;\n users: User[];\n group: GroupWithMembers | null;\n};\n\n/**\n * Return a list of review steps, where each step is expanded to include the users and group.\n * If the step is a user step, the users array will contain the user.\n * If the step is a group step, the users array will be empty and the group will contain the group.\n */\nexport const expandReviewSteps = (reviewConfig: ReviewConfigWithMembers): ExpandedReviewStep[] => {\n const { steps } = enrichReviewConfig(reviewConfig);\n return steps.map((step) => {\n const { quorum } = step;\n let users: User[];\n let group: GroupWithMembers | null;\n if (\"userIds\" in step) {\n users = step.userIds.map((userId) =>\n ensureNotNil(reviewConfig.users.find((_) => _.id === userId)),\n );\n group = null;\n } else {\n users = [];\n group = ensureNotNil(reviewConfig.groups.find((_) => _.id === step.groupId));\n }\n return { quorum, users, group };\n });\n};\n\nexport const findReviewConfigs = async (\n prisma: PrismaClient,\n opts: { user: User; group?: never } | { user?: never; group: Group },\n): Promise<ReviewConfigWithMembers[]> => {\n const { user, group } = opts;\n const conditions = user\n ? [\n // find by user\n { users: { some: { id: user.id } } },\n { groups: { some: { members: { some: { id: user.id } } } } },\n ]\n : [\n // find by group\n { groups: { some: { id: group.id } } },\n ];\n return prisma.reviewConfig.findMany({\n where: { OR: conditions },\n include: {\n users: true,\n groups: { include: { members: true } },\n },\n });\n};\n\nexport const prepareQueryToRemoveUserFromReviewConfigs = (\n prisma: PrismaClient,\n reviewConfig: ReviewConfigWithMembers,\n user: User,\n): Prisma.PrismaPromise<ReviewConfig> => {\n const steps = zReviewStepsArray.parse(reviewConfig.steps);\n const updatedSteps = steps.map((step) => {\n /* v8 ignore else -- @preserve */\n if (\"userIds\" in step) {\n return { ...step, userIds: step.userIds.filter((id) => id !== user.id) };\n } else {\n return { ...step, groupId: step.groupId };\n }\n });\n\n return prisma.reviewConfig.update({\n where: { id: reviewConfig.id },\n data: {\n users: { disconnect: { id: user.id } },\n steps: updatedSteps,\n },\n });\n};\n","import type { Policy, Prisma } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { zGovernableAction } from \"@/types\";\nimport { zHsmObjectId, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- GovRuleJsonObject -----------------------------------------------------------\n\nexport const zThreshold = z\n .object({\n min: zUnsignedIntString.nullable().meta({ description: \"Minimum transaction amount\" }),\n max: zUnsignedIntString.nullable().meta({ description: \"Maximum transaction amount\" }),\n })\n .meta({ description: \"Threshold for the transaction value\" });\n\nexport type Threshold = z.infer<typeof zThreshold>;\n\nexport const zWhitelistIds = z\n .array(z.string().min(1))\n .meta({ description: \"IDs of whitelists for the recipient address\" });\n\n// Shape of the policy model rulesJsonArray field\nexport const zGovRuleJsonObject = z\n .object({\n // Required. TODO: Rename to `action`\n operationType: zGovernableAction.meta({ description: \"Allowed action\" }),\n // Optional threshold on transaction value: null `min` = 0, null `max` = +inf\n threshold: zThreshold,\n // Optional whitelist on transaction recipient: Empty list means no whitelist.\n whitelistIds: zWhitelistIds,\n reviewConfigId: z.string().min(1).meta({ description: \"Id of ReviewConfig\" }),\n // HSM id for the rule\n hsmId: zHsmObjectId,\n })\n .meta({ description: \"INTERNAL: Governance rule JSON representation in DB\" });\n\nexport type GovRuleJsonObject = z.infer<typeof zGovRuleJsonObject>;\n\nexport const zGovRulesJsonArray = z.array(zGovRuleJsonObject);\n\n// #endregion\n\ntype PolicyJsonFields = { rulesJsonArray: Prisma.JsonValue };\n\nexport type ParsedPolicy<T extends PolicyJsonFields = Policy> = Omit<T, \"rulesJsonArray\"> & {\n rulesJsonArray: GovRuleJsonObject[];\n};\n\nexport const parseFields = <T extends PolicyJsonFields>(policy: T): ParsedPolicy<T> => {\n const rulesJsonArray = zGovRulesJsonArray.parse(policy.rulesJsonArray);\n return { ...policy, rulesJsonArray };\n};\n","import z from \"zod\";\n\nexport const zNote = z.object({\n title: z.string().meta({ description: \"Note title\" }),\n content: z.string().meta({ description: \"Note content\" }),\n});\n\nexport type Note = z.infer<typeof zNote>;\n","import { AllowedAction } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport type { TypeEquals } from \"@/type-utils\";\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\n// #region ---------- GovernableAction by type ----------------------------------------------------\n\nconst zValueTransactionAction = z.enum([\n AllowedAction.SEND,\n AllowedAction.STAKE,\n AllowedAction.DEPLOY_CONTRACT,\n AllowedAction.EXECUTE_CONTRACT,\n AllowedAction.ACTIVATE_TOKEN,\n]);\n\nexport const zValueTransactionIntent = z.object({\n type: zValueTransactionAction,\n currency: zCurrencyString,\n recipient: z.string().nonempty(),\n destinationTag: z.string().nonempty().optional(),\n value: zUnsignedIntString,\n});\n\nexport type ValueTransactionIntent = z.infer<typeof zValueTransactionIntent>;\n\nconst zReceiveAction = z.enum([AllowedAction.RECEIVE]);\n\nexport const zReceiveIntent = z.object({\n type: zReceiveAction,\n currency: zCurrencyString,\n sender: z.string().nonempty(),\n value: zUnsignedIntString.nullable(), // null means \"any value\"\n verdict: z.enum([\"ACCEPT\", \"REJECT\"]),\n});\n\nconst zSigningAction = z.enum([AllowedAction.SIGN_MESSAGE, AllowedAction.SIGN_DIGESTS]);\n\nexport const zSigningIntent = z.object({\n type: zSigningAction,\n});\n\nexport type SigningIntent = z.infer<typeof zSigningIntent>;\n\n// #endregion\n\n// #region ---------- Classic and raw-signing -----------------------------------------------------\n\n/** Governable action that is allowed on an account with `CLASSIC` governance type */\nexport const zClassicAction = z.enum([\n AllowedAction.SEND,\n AllowedAction.STAKE,\n AllowedAction.DEPLOY_CONTRACT,\n AllowedAction.EXECUTE_CONTRACT,\n AllowedAction.SIGN_MESSAGE,\n AllowedAction.ACTIVATE_TOKEN,\n AllowedAction.RECEIVE,\n]);\n\nexport type ClassicAction = z.infer<typeof zClassicAction>;\n\n/** Governable action that is allowed on an account with `RAW_SIGNING` governance type */\nexport const zRawSigningAction = z.enum([AllowedAction.SIGN_DIGESTS]);\n\nexport type RawSigningAction = z.infer<typeof zRawSigningAction>;\n\n// #endregion\n\n// #region ---------- GovernableIntent ------------------------------------------------------------\n\nexport const zGovernableAction = z.enum([\n ...zValueTransactionAction.options,\n ...zReceiveAction.options,\n ...zSigningAction.options,\n]);\n\nexport type GovernableAction = z.infer<typeof zGovernableAction>;\n\n/**\n * Governance-relevant description of an operation on an account.\n *\n * This \"intent\" isn't a full representation of the underlying operation.\n * It only contains the fields required to evaluate governance rules and\n * determine which rule applies.\n */\nexport const zGovernableIntent = z.discriminatedUnion(\"type\", [\n zValueTransactionIntent,\n zReceiveIntent,\n zSigningIntent,\n]);\n\nexport type GovernableIntent = z.infer<typeof zGovernableIntent>;\n\n// #endregion\n\n// #region ---------- Utilities -------------------------------------------------------------------\n\nexport const isValueTransactionIntent = (\n intent: GovernableIntent,\n): intent is ValueTransactionIntent => {\n const validActions: GovernableIntent[\"type\"][] = zValueTransactionAction.options;\n return validActions.includes(intent.type);\n};\n\n// #endregion\n\n/* v8 ignore next -- @preserve */\n// This function is only used for type-checking.\nconst _ensureGovernableAction = (\n shouldBeTrue: TypeEquals<GovernableAction, ClassicAction | RawSigningAction>,\n): true => shouldBeTrue;\n","export const INCLUDE_MEMBERS = {\n users: true,\n groups: {\n include: { members: true },\n },\n};\n","import z from \"zod\";\n\nexport const zUpdateQuorumRequestData = z.object({\n quorum: z.number().int().min(2).meta({ description: \"Workspace quorum\" }),\n});\n\nexport type UpdateQuorumRequestData = z.infer<typeof zUpdateQuorumRequestData>;\n","import { AdminPermission } from \"@prisma/client\";\nimport { omit } from \"lodash-es\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"./review-config\";\n\nexport const NonRootAdminPermission = omit(AdminPermission, \"ROOT\");\n\n// A non-root admin gov rule is uniquely identified by its permission\nexport const zWorkspaceRuleRequestData = z.object({\n permission: z.enum(NonRootAdminPermission).meta({ description: \"Granted permissions\" }),\n reviewConfig: zReviewStepWithUsersArray.meta({ description: \"List of admin review steps\" }),\n});\n\nexport type WorkspaceRuleRequestData = z.infer<typeof zWorkspaceRuleRequestData>;\n","import z from \"zod\";\n\nimport type { TransactionResponse } from \"@/networks\";\nimport { zTransactionResponse } from \"@/networks\";\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\n\nexport const zTransactionWithMetaResponse = z.discriminatedUnion(\n zTransactionResponse._zod.def.discriminator,\n ensureNonEmptyArray(\n zTransactionResponse.options.map((_) => _.extend({ note: zNote.nullable() })),\n ),\n);\n\nexport type TransactionWithMetaResponse = z.infer<typeof zTransactionWithMetaResponse>;\n\nexport { type TransactionResponse, zTransactionResponse };\n","import type { Account } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport type { CantonTransferProposal } from \"@/networks\";\nimport { zCantonTransferProposal } from \"@/networks\";\n\nexport const zPreApprovalState = z\n .discriminatedUnion(\"enabled\", [\n z.object({\n enabled: z.literal(true).meta({ description: \"Pre-approval is enabled\" }),\n contractId: z.string().meta({ description: \"ID of the pre-approval contract\" }),\n expiresAt: z.coerce\n .date()\n .meta({ description: \"Timestamp when the pre-approval expires and becomes invalid\" }),\n lastRenewedAt: z.coerce\n .date()\n .meta({ description: \"Timestamp of the most recent renewal of the pre-approval\" }),\n provider: z\n .string()\n .meta({ description: \"Validator that issued and manages the pre-approval\" }),\n recipient: z\n .string()\n .meta({ description: \"Party that authorizes the pre-approval to receive transfers\" }),\n validFrom: z.coerce\n .date()\n .meta({ description: \"Timestamp when the pre-approval becomes effective\" }),\n }),\n z.object({\n enabled: z.literal(false).meta({ description: \"Pre-approval is not enabled\" }),\n }),\n ])\n .meta({\n description: \"Pre-approval state of the account\",\n });\n\nexport type PreApprovalState = z.infer<typeof zPreApprovalState>;\n\nexport const zTransferProposal = zCantonTransferProposal;\n\nexport type TransferProposal = CantonTransferProposal;\n\nexport type Extras = {\n getPreApprovalState: (account: Account) => Promise<PreApprovalState>;\n getTransferProposals: (account: Account) => Promise<TransferProposal[]>;\n};\n","import z from \"zod\";\n\nimport { zWorkspaceName } from \"@/workspaces\";\nimport { zCurrencyString, zUnsignedIntString } from \"@/zod-utils\";\n\nexport const zTradelinkWhitelistAddress = z.object({\n name: z.string().min(1),\n currency: zCurrencyString,\n address: z.string().min(1),\n});\n\nexport type TradelinkWhitelistAddress = z.infer<typeof zTradelinkWhitelistAddress>;\n\nexport const zTradelinkWhitelist = z.array(zTradelinkWhitelistAddress);\n\nconst zTradelinkId = z.string().meta({ description: \"Unique identifier in Tradelink service\" });\n\nexport type TradelinkId = z.infer<typeof zTradelinkId>;\n\nexport const zTradelinkOrgEntityResponse = z.object({\n tradelinkId: zTradelinkId,\n name: z.string().meta({ description: \"Name\" }),\n code: z.string().meta({ description: \"Code\" }),\n logoUrl: z.string().meta({ description: \"Logo URL\" }),\n});\n\nexport type TradelinkOrgEntityResponse = z.infer<typeof zTradelinkOrgEntityResponse>;\n\nexport const zCreateTradelinkOrgEntityInput = zTradelinkOrgEntityResponse.omit({\n tradelinkId: true,\n});\n\nexport type CreateTradelinkOrgEntityInput = z.infer<typeof zCreateTradelinkOrgEntityInput>;\n\nexport const zDeleteTradelinkOrgEntityInput = z.object({\n tradelinkId: zTradelinkId,\n});\n\nexport type DeleteTradelinkExchangeInput = z.infer<typeof zDeleteTradelinkOrgEntityInput>;\n\nconst zTradelinkExchangeConfig = z.object({\n exchangeId: z.string().meta({ description: \"Tradelink exchange id\" }),\n repledgeAuthorized: z.boolean().meta({\n description: \"Determines whether this exchange is authorized to repledge on this account\",\n }),\n needsAssetManagerApprovalForSettlements: z.boolean().meta({\n description:\n 'Determines whether asset manager will \"pre-approve\" the settlement requests on this account',\n }),\n});\n\nexport type TradelinkExchangeConfig = z.infer<typeof zTradelinkExchangeConfig>;\n\nexport const zTradelinkExchangeConfigs = z.array(zTradelinkExchangeConfig);\n\nexport type TradelinkExchangeConfigs = z.infer<typeof zTradelinkExchangeConfigs>;\n\nexport const zCreateTradelinkNetworkBlueprintInput = z.object({\n workspaceName: zWorkspaceName,\n custodian: z.object({ name: z.string() }),\n assetManagers: z.array(z.object({ name: z.string() })),\n exchanges: z.array(z.object({ name: z.string() })),\n});\nexport type CreateTradelinkNetworkBlueprintInput = z.infer<\n typeof zCreateTradelinkNetworkBlueprintInput\n>;\n\nexport const zTradelinkNetworkBlueprintResponse = z.object({\n tradelinkId: z.string(),\n workspaceName: zWorkspaceName,\n custodian: zTradelinkOrgEntityResponse,\n assetManagers: z.array(zTradelinkOrgEntityResponse),\n exchanges: z.array(zTradelinkOrgEntityResponse),\n});\nexport type TradelinkNetworkBlueprintResponse = z.infer<typeof zTradelinkNetworkBlueprintResponse>;\n\n// #region ---------- Pledge ----------------------------------------------------------------------\n\nconst zTradelinkAsset = z.object({\n name: z.string(),\n magnitude: z.number().int().nonnegative(),\n});\n\nexport type TradelinkAsset = z.infer<typeof zTradelinkAsset>;\n\nexport const zPledgeResponse = z.object({\n tradelinkId: zTradelinkId,\n asset: zTradelinkAsset,\n state: z.enum([\n \"PLEDGE_READY\",\n \"PLEDGE_INCREMENT_PENDING_APPROVAL\",\n \"PLEDGE_APPROVED\",\n \"PLEDGE_REJECTED\",\n \"UNPLEDGE_PENDING_APPROVAL\",\n \"UNPLEDGE_APPROVED\",\n \"UNPLEDGE_REJECTED\",\n \"REPLEDGE_PENDING_APPROVAL\",\n \"REPLEDGE_APPROVED\",\n \"REPLEDGE_REJECTED\",\n \"ASSIGNED_TO_SETTLEMENT\",\n \"OUTBOUND_TRANSACTION_CONFIRMED\",\n \"OUTBOUND_TRANSACTION_FAILED\",\n \"RECOVERING_FROM_FAILURE\",\n \"PLEDGE_CONSUMED\",\n ]),\n isLocked: z.boolean(),\n amount: z.string().meta({ description: \"Currently pledged amount\" }),\n pending: z.string().meta({ description: \"Requested pledge increment, not yet approved\" }),\n repledge: z.string().meta({ description: \"TODO: describe this field\" }),\n exchangeTradelinkId: z.string(),\n accountId: z.string(),\n});\n\nexport type PledgeResponse = z.infer<typeof zPledgeResponse>;\n\nexport const zCreatePledgeInput = z.object({\n workspaceName: z.string(),\n clientAccountId: z.string().meta({ description: \"Account ID from the client side\" }),\n exchangeTradelinkId: zTradelinkId,\n asset: zTradelinkAsset,\n});\n\nexport type CreatePledgeInput = z.infer<typeof zCreatePledgeInput>;\n\nexport const zPledgeAdjustmentInput = z.object({\n pledgeTradelinkId: zTradelinkId,\n amount: zUnsignedIntString,\n asset: zTradelinkAsset,\n});\n\nexport type PledgeAdjustmentInput = z.infer<typeof zPledgeAdjustmentInput>;\n\nexport const zSettlementResponse = z.object({\n tradelinkId: z.string(),\n pledgeTradelinkId: z.string(),\n state: z.enum([\n \"REGISTERED\",\n \"PENDING_REPLEDGE_CREATION_APPROVAL\",\n \"PENDING_REPLEDGE_APPROVAL\",\n \"PENDING_CREATION_APPROVAL\",\n \"PENDING_PRE_APPROVAL\",\n \"PRE_APPROVED\",\n \"APPROVED\",\n \"REJECTED\",\n \"CONFIRMED\",\n \"FAILED\",\n \"CANCELED\",\n ]),\n // For now we only consider the outbound settlement\n outboundTransactionHash: z.string().nullable(),\n});\n\nexport type SettlementResponse = z.infer<typeof zSettlementResponse>;\n\n// #endregion\n","import { RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"@/governance\";\nimport { zSendOnlyTransactionData } from \"@/networks\";\nimport { zIntString } from \"@/zod-utils\";\n\nimport { zTradelinkWhitelistAddress } from \"./types\";\n\nexport const zTradelinkActivateAccountRequestData = z.null();\n\nexport type TradelinkActivateAccountRequestData = z.infer<\n typeof zTradelinkActivateAccountRequestData\n>;\n\nexport const zTradelinkCustodianRequestData = z.object({\n settlement: zReviewStepWithUsersArray.meta({ description: \"List of settlement review steps\" }),\n withdraw: zReviewStepWithUsersArray.meta({ description: \"List of withdraw review steps\" }),\n arbitration: zReviewStepWithUsersArray.meta({ description: \"List of arbitration review steps\" }),\n});\n\nexport type TradelinkCustodianRequestData = z.infer<typeof zTradelinkCustodianRequestData>;\n\nexport const zTradelinkEntityRequestData = z.object({\n tradelinkId: z.string().min(1),\n groups: zReviewStepWithUsersArray.meta({ description: \"List of asset manager review groups\" }),\n whitelist: z\n .array(zTradelinkWhitelistAddress)\n .meta({ description: \"List of asset manager whitelisted addresses\" }),\n});\n\nexport type TradelinkEntityRequestData = z.infer<typeof zTradelinkEntityRequestData>;\n\n// #region ---------- Tradelink operations --------------------------------------------------------\n\nexport const zTradelinkAdjustPledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n amount: zIntString.meta({ description: \"Amount to add to pledge\" }),\n});\n\nexport type TradelinkAdjustPledgeRequestData = z.infer<typeof zTradelinkAdjustPledgeRequestData>;\n\nexport const zTradelinkRepledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n amount: zIntString.meta({ description: \"Amount to add to pledge\" }),\n});\n\nexport type TradelinkRepledgeRequestData = z.infer<typeof zTradelinkRepledgeRequestData>;\n\nexport const zTradelinkCreateSettlementRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkCreateSettlementRequestData = z.infer<\n typeof zTradelinkCreateSettlementRequestData\n>;\n\nexport const zTradelinkForceUnpledgeRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n exchangeId: z.string().meta({ description: \"Exchange id\" }),\n});\n\nexport type TradelinkForceUnpledgeRequestData = z.infer<typeof zTradelinkForceUnpledgeRequestData>;\n\nexport const zTradelinkWithdrawRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkWithdrawRequestData = z.infer<typeof zTradelinkWithdrawRequestData>;\n\nexport const zTradelinkArbitrationRequestData = z.object({\n accountId: z.string().meta({ description: \"Account id\" }),\n transaction: zSendOnlyTransactionData,\n});\n\nexport type TradelinkArbitrationRequestData = z.infer<typeof zTradelinkArbitrationRequestData>;\n\n// #endregion\n\nexport const zTradelinkRequestMixinsByType = {\n [RequestType.TRADELINK_ACTIVATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.TRADELINK_ACTIVATE_ACCOUNT),\n targetId: z.string(),\n data: zTradelinkActivateAccountRequestData,\n }),\n [RequestType.TRADELINK_CREATE_CUSTODIAN]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_CUSTODIAN),\n data: zTradelinkCustodianRequestData,\n }),\n [RequestType.TRADELINK_EDIT_CUSTODIAN]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_CUSTODIAN),\n targetId: z.string(),\n data: zTradelinkCustodianRequestData,\n }),\n [RequestType.TRADELINK_CREATE_EXCHANGE]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_EXCHANGE),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_EDIT_EXCHANGE]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_EXCHANGE),\n targetId: z.string(),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_CREATE_ASSET_MANAGER]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_ASSET_MANAGER),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_EDIT_ASSET_MANAGER]: z.object({\n type: z.literal(RequestType.TRADELINK_EDIT_ASSET_MANAGER),\n targetId: z.string(),\n data: zTradelinkEntityRequestData,\n }),\n [RequestType.TRADELINK_ADJUST_PLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_ADJUST_PLEDGE),\n data: zTradelinkAdjustPledgeRequestData,\n }),\n [RequestType.TRADELINK_REPLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_REPLEDGE),\n data: zTradelinkRepledgeRequestData,\n }),\n [RequestType.TRADELINK_CREATE_SETTLEMENT]: z.object({\n type: z.literal(RequestType.TRADELINK_CREATE_SETTLEMENT),\n data: zTradelinkCreateSettlementRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.TRADELINK_FORCE_UNPLEDGE]: z.object({\n type: z.literal(RequestType.TRADELINK_FORCE_UNPLEDGE),\n data: zTradelinkForceUnpledgeRequestData,\n }),\n [RequestType.TRADELINK_WITHDRAW]: z.object({\n type: z.literal(RequestType.TRADELINK_WITHDRAW),\n data: zTradelinkWithdrawRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.TRADELINK_ARBITRATE]: z.object({\n type: z.literal(RequestType.TRADELINK_ARBITRATE),\n data: zTradelinkArbitrationRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n} as const satisfies Record<RequestType & `TRADELINK_${string}`, unknown>;\n","import { AccountGovernanceType } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\n\nconst zClassicAccountGovernanceFields = z\n .object({\n type: z\n .literal(AccountGovernanceType.CLASSIC)\n .meta({ description: \"Classic account governance\" }),\n policyId: z.string().meta({ description: \"Identifier of corresponding governance policy\" }),\n })\n .meta({ description: \"Classic\" });\n\nconst zTradelinkAccountGovernanceFields = z\n .object({\n type: z\n .literal(AccountGovernanceType.TRADELINK)\n .meta({ description: \"Tradelink account governance\" }),\n assetManagerId: z.string().meta({ description: \"Identifier of corresponding asset manager\" }),\n exchangeConfigs: zTradelinkExchangeConfigs.meta({\n description: \"Tradelink exchange configurations\",\n }),\n })\n .meta({ description: \"Tradelink\" });\n\nexport const zAccountGovernanceFields = z\n .discriminatedUnion(\"type\", [zClassicAccountGovernanceFields, zTradelinkAccountGovernanceFields])\n .meta({ description: \"Governance fields\" });\n\nexport type AccountGovernanceFields = z.infer<typeof zAccountGovernanceFields>;\n","import { AccountType, ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zAccountLiveData, zCommonLiveData, zNetworkAssetFields } from \"@/networks\";\nimport { zCurrency, zCurrencyString, zIntString, zNetwork } from \"@/zod-utils\";\n\nimport { zAccountGovernanceFields } from \"./account-governance-fields\";\n\nexport const zAccountCommonFields = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Name\" }),\n currency: zCurrencyString,\n network: zNetwork,\n contractAddress: z\n .string()\n .nullable()\n .meta({ description: \"Token contract address for Token account\" }),\n tokenIdentifier: z\n .string()\n .nullable()\n .meta({ description: \"Token identifier for Token account\" }),\n index: z.number().gte(0).meta({ description: \"BIP44 account index\" }),\n derivationPath: z.string().meta({ description: \"Derivation path\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Status\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nconst zRawSigningAssetFields = z\n .object({ type: z.literal(AccountType.RAW_SIGNING).meta({ description: \"Account type\" }) })\n .meta({ description: \"Raw signing account\" });\n\nexport const zAccountAssetFields = z\n .discriminatedUnion(\"type\", [zRawSigningAssetFields, ...zNetworkAssetFields.options])\n .meta({ description: \"Account asset fields\" });\n\nexport type AccountAssetFields = z.infer<typeof zAccountAssetFields>;\n\nexport const zAccountResponse = zAccountCommonFields.extend({\n asset: zAccountAssetFields,\n governance: zAccountGovernanceFields,\n});\n\nexport type AccountResponse = z.infer<typeof zAccountResponse>;\n\nexport const zAccountSortBy = z\n .enum([\n \"name\",\n \"currency\",\n \"index\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof AccountResponse)[])\n .default(\"createdAt\");\n\nexport type AccountSortBy = z.infer<typeof zAccountSortBy>;\n\nconst zRawSigningLiveData = zCommonLiveData\n .extend({\n type: z.literal(AccountType.RAW_SIGNING).meta({ description: \"Account type\" }),\n })\n .meta({ description: \"Raw signing account\" });\n\nexport const zAccountLiveDataResponse = z\n .discriminatedUnion(\"type\", [zRawSigningLiveData, ...zAccountLiveData.options])\n .meta({ description: \"Account live data\", id: \"AccountLiveDataResponse\" });\n\nexport type AccountLiveDataResponse = z.infer<typeof zAccountLiveDataResponse>;\n\nexport const zAccountFreshAddress = z.object({\n address: z.string().meta({ description: \"Address\" }),\n derivationPath: z.string().nullable().meta({ description: \"Derivation path\" }),\n});\n\nexport type AccountFreshAddress = z.infer<typeof zAccountFreshAddress>;\n\nexport const zBalance = z.object({\n amount: zIntString.meta({ description: \"Amount in the smallest unit of the currency\" }),\n currency: zCurrency,\n});\n\nexport type Balance = z.infer<typeof zBalance>;\n\nexport const zStake = z.object({\n id: z.string().nonempty().meta({ description: \"Staking position ID (if applicable)\" }),\n validator: z.string().nonempty().meta({ description: \"Validator address\" }),\n state: z\n .enum([\"ACTIVE\", \"INACTIVE\", \"ACTIVATING\", \"DEACTIVATING\", \"UNKNOWN\"])\n .meta({ description: \"Stake state\" }),\n staked: z.string().meta({ description: \"Staked amount\" }),\n rewards: z.object({\n total: z.string().meta({ description: \"Total rewards\" }),\n }),\n});\n\nexport type Stake = z.infer<typeof zStake>;\n\nexport const zStakeSortBy = z.enum([\"staked\", \"rewards\", \"total\"]).default(\"total\");\n\nexport type StakeSortBy = z.infer<typeof zStakeSortBy>;\n\nexport const zStakingValidator = z.object({\n address: z.string().meta({ description: \"Validator address\" }),\n apy: z.string().nullable().meta({ description: \"Validator APY\" }),\n balance: z.string().nullable().meta({ description: \"Validator balance\" }),\n commissionRate: z.string().nullable().meta({ description: \"Validator commission rate\" }),\n description: z.string().nullable().meta({ description: \"Description\" }),\n logo: z.string().nullable().meta({ description: \"Logo URL\" }),\n name: z.string().nullable().meta({ description: \"Validator name\" }),\n url: z.string().nullable().meta({ description: \"Validator URL\" }),\n});\n\nexport type StakingValidator = z.infer<typeof zStakingValidator>;\n\nexport const zStakingValidatorSortBy = z\n .enum([\"balance\"] as const satisfies (keyof StakingValidator)[])\n .default(\"balance\");\n\nexport type StakingValidatorSortBy = z.infer<typeof zStakingValidatorSortBy>;\n","import { MessageType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zHsmSignature } from \"@/hsm\";\nimport { zHexString } from \"@/zod-utils\";\n\n// #region ---------- Message Signing -------------------------------------------------------------\n\nexport const zMessageType = z\n .enum(MessageType)\n .meta({ description: \"Type of the message to sign\" });\n\nexport const zMessageData = zHexString.nonempty().meta({\n description: \"Hex data to sign, either a json string for EIP712, or a raw string for other types\",\n});\n\n// TODO: Rename? \"message\" is a too generic word...\nexport const zMessage = z.discriminatedUnion(\"type\", [\n z.object({\n type: z.literal(\"EIP191\"),\n data: zMessageData,\n }),\n z.object({\n type: z.literal(\"EIP712\"),\n data: zMessageData, // TODO: put a proper EIP712 schema\n }),\n z.object({\n type: z.literal(\"CIP8\"),\n data: zMessageData,\n signingKey: z.literal([\"PAYMENT\", \"STAKE\"]).meta({ description: \"CIP-8 signing key\" }),\n }),\n z.object({\n type: z.literal(\"BIP137\"),\n data: zMessageData,\n }),\n]);\n\nexport type Message = z.infer<typeof zMessage>;\n\nexport const zSignedMessageResponse = z\n .object({\n id: z.string().meta({ description: \"Unique identifier\" }),\n type: zMessageType,\n data: zMessageData,\n address: z.string().meta({ description: \"Address of the signing key\" }),\n derivationPath: z.string().meta({ description: \"Derivation path of the signing key\" }),\n signature: zHsmSignature.meta({ description: \"Signature of the message\" }),\n createdById: z.string().meta({ description: \"ID of the creator\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n })\n .meta({ description: \"Signed message\", id: \"SignedMessageResponse\" });\n\nexport type SignedMessageResponse = z.infer<typeof zSignedMessageResponse>;\n\n// #endregion\n","import z from \"zod\";\n\nimport { zHsmSignature } from \"@/hsm\";\nimport { zTransactionData } from \"@/networks\";\nimport { zHexString } from \"@/zod-utils\";\n\nimport { zMessage } from \"./types\";\n\n/**\n * Schema of `Request.data` for `CREATE_TRANSACTION` request.\n */\nexport const zCreateTransactionRequestData = z\n .object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n transaction: zTransactionData,\n })\n .meta({\n description: \"Create transaction request data\",\n id: \"CreateTransactionRequestData\",\n });\n\nexport type CreateTransactionRequestData = z.infer<typeof zCreateTransactionRequestData>;\n\n// #region ---------- SIGN_MESSAGE ----------------------------------------------------------------\n\nexport const zSignMessageRequestData = z.object({\n message: zMessage.meta({ description: \"Message to sign\" }),\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n address: z.string().nonempty().meta({ description: \"Address with which to sign the message\" }),\n derivationPath: z\n .string()\n .nonempty()\n .meta({ description: \"Derivation path of the signing address\" }),\n});\n\nexport type SignMessageRequestData = z.infer<typeof zSignMessageRequestData>;\n\nexport const zSignMessageUserInputData = zSignMessageRequestData.partial({\n address: true,\n derivationPath: true,\n});\n\nexport type SignMessageUserInputData = z.infer<typeof zSignMessageUserInputData>;\n\n// #endregion\n\n// #region ---------- SIGN_DIGESTS ----------------------------------------------------------------\n\nexport const zDigestData = z.object({\n digest: zHexString.meta({ description: \"The hex string digest to sign\" }),\n derivationPath: z\n .string()\n .nonempty()\n .meta({ description: \"The derivation path with which to sign the digest\" }),\n});\n\nexport type DigestData = z.infer<typeof zDigestData>;\n\nexport const zSignDigestsRequestData = z.object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n digests: z.array(zDigestData).meta({ description: \"The digests to sign\" }),\n});\n\nexport type SignDigestsRequestData = z.infer<typeof zSignDigestsRequestData>;\n\nexport const zSignDigestsManagedData = z.object({\n signatures: z.array(zHsmSignature),\n});\n\nexport type SignDigestsManagedData = z.infer<typeof zSignDigestsManagedData>;\n\n// #endregion\n","import z from \"zod\";\n\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\n\nimport { zTransactionResponse } from \"./clients/types\";\nimport { Canton } from \"./les-wallet/extra-types\";\n\nexport { zGovernableAction } from \"@/types\";\n\n// re-export TransactionResponse from clients\nexport type { TransactionResponse } from \"./clients/types\";\nexport {\n type AccountFreshAddress,\n type AccountLiveDataResponse,\n type AccountResponse,\n type AccountSortBy,\n zAccountFreshAddress,\n zAccountLiveDataResponse,\n zAccountResponse,\n zAccountSortBy,\n zBalance,\n zStake,\n zStakeSortBy,\n zStakingValidator,\n zStakingValidatorSortBy,\n} from \"./types\";\n\nexport const zTransactionWithMetaResponse = z.discriminatedUnion(\n zTransactionResponse._zod.def.discriminator,\n ensureNonEmptyArray(\n zTransactionResponse.options.map((_) =>\n _.extend({\n note: zNote.nullable().meta({ description: \"Optional transaction note\" }),\n requestId: z\n .string()\n .nullable()\n .meta({ description: \"Request ID associated with the transaction, if available\" }),\n }),\n ),\n ),\n);\n\nexport type TransactionWithMetaResponse = z.infer<typeof zTransactionWithMetaResponse>;\n\nexport { zEstimatedFees as zEstimateFeesResponse } from \"@/networks\";\nexport { zSignedMessageResponse } from \"@/transactions\";\n\nexport const zCantonPreApprovalStateResponse = Canton.zPreApprovalState;\nexport const zCantonTransferProposalResponse = Canton.zTransferProposal;\n","import type { Whitelist } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nexport const zWhitelistAddress = z.object({\n name: z.string().min(1).max(50),\n currency: zCurrencyString,\n address: z.string().min(1).max(200),\n // Destination tags are numeric-only or alpha-numeric.\n // Empty array (or undefined) means no check on destination tag.\n destinationTags: z.array(z.string().min(1).regex(/^\\w+$/)).optional(),\n});\n\nexport const zWhitelistAddresses = z.array(zWhitelistAddress);\n\nexport type WhitelistAddress = z.infer<typeof zWhitelistAddress>;\n\nexport type Destination = {\n currency: string;\n recipient: string;\n destinationTag?: string;\n};\n\nexport const isWhitelisted = (destination: Destination, whitelist: Whitelist): boolean => {\n const addresses = zWhitelistAddresses.parse(whitelist.addresses);\n return addresses.some(\n (whitelisted) =>\n whitelisted.currency === destination.currency &&\n whitelisted.address === destination.recipient &&\n // If no destination tags, it means all tags are allowed.\n (!whitelisted.destinationTags ||\n whitelisted.destinationTags.length === 0 ||\n whitelisted.destinationTags.includes(destination.destinationTag ?? \"\")),\n );\n};\n","import { WhitelistType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zWhitelistAddresses } from \"./db-types\";\n\n// FIXME unify the different max length of object names\n// there is some inconsistencies right now between front<>gate and what is actually\n// possible on a real device screen\n//\n// for now, putting 45 to unlock Gate sync\n// see https://ledger.slack.com/archives/C05RD1RKUSV/p1719320103721699\n//\nexport const zWhitelistName = z.string().min(1).max(45).meta({ description: \"Whitelist name\" });\n\nexport const zCreateWhitelistRequestData = z.object({\n name: zWhitelistName,\n description: z.string().nullable(),\n addresses: zWhitelistAddresses,\n type: z.enum(WhitelistType),\n});\n\nexport type CreateWhitelistRequestData = z.infer<typeof zCreateWhitelistRequestData>;\n\n// FIXME should we allow edit of description? probably yes\nexport const zEditWhitelistRequestData = z.object({\n name: zWhitelistName,\n addresses: zWhitelistAddresses,\n});\n\nexport type EditWhitelistRequestData = z.infer<typeof zEditWhitelistRequestData>;\n","import type { Policy, PrismaClient, User, Whitelist } from \"@prisma/client\";\nimport { ReviewConfigType } from \"@prisma/client\";\nimport invariant from \"invariant\";\nimport { uniq } from \"lodash-es\";\nimport z from \"zod\";\n\nimport type { EnrichedReviewConfig, ReviewConfigWithMembers } from \"@/governance\";\nimport {\n connectReviewConfigData,\n enrichReviewConfig,\n expandReviewSteps,\n zReviewStepsArray,\n} from \"@/governance\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport type { HsmObjectId } from \"@/hsm\";\nimport { PolicyModel, ReviewConfigModel } from \"@/prisma-utils\";\nimport type { GovernableIntent } from \"@/types\";\nimport { isValueTransactionIntent, zClassicAction, zGovernableAction } from \"@/types\";\nimport { ensureNotNil, uniqById } from \"@/utils\";\nimport { isWhitelisted } from \"@/whitelists\";\n\n// #region ---------- Public schema for governance rules ------------------------------------------\n\nconst zBaseGovRuleData = z.object({\n // Steps of users that will need to review operations\n reviewSteps: zReviewStepsArray,\n // Optional threshold on transaction value: null `min` = 0, null `max` = +inf\n threshold: PolicyModel.zThreshold.optional(),\n // Optional whitelist on transaction recipient: Empty list means no whitelist.\n whitelistIds: PolicyModel.zWhitelistIds.optional(),\n});\n\n// Used when creating/editing classic governance rules (non digest signing)\nexport const zClassicGovRuleData = zBaseGovRuleData\n .extend({\n operationType: zClassicAction.meta({ description: \"Allowed action\" }),\n })\n .meta({ description: \"Account governance rule\", id: \"ClassicGovRuleData\" });\n\nexport type ClassicGovRuleData = z.infer<typeof zClassicGovRuleData>;\n\n/**\n * Public facing governance rule response shape, facing clients and used in API.\n */\nexport const zGovRuleData = zBaseGovRuleData\n .extend({\n operationType: zGovernableAction.meta({ description: \"Allowed action\" }),\n })\n .meta({ description: \"Governance rule\", id: \"GovRuleResponse\" });\n\nexport type GovRuleData = z.infer<typeof zGovRuleData>;\n\n// #endregion\n\n// #region ---------- Utilities -------------------------------------------------------------------\n\n// TODO: Should be set with no duplicates!\nexport type PolicyRelatedObjects = {\n whitelists: Whitelist[];\n reviewConfigs: ReviewConfigWithMembers[];\n};\n\n/** Constant to be used with `prisma.policy` to include all the related objects of a policy. */\nexport const INCLUDE_POLICY_RELATED_OBJECTS = {\n whitelists: true,\n reviewConfigs: { include: ReviewConfigModel.INCLUDE_MEMBERS },\n};\n\n/** `Policy` with related objects. */\nexport type PolicyWithRelatedObjects = Policy & PolicyRelatedObjects;\n\n/** Extract individual users and groups (with members) from a policy. */\nexport const getPolicyUsersAndGroups = (\n policy: Omit<PolicyWithRelatedObjects, \"whitelists\">,\n): {\n users: User[];\n groups: GroupWithMembers[];\n} => {\n const users = uniqById(policy.reviewConfigs.flatMap((_) => _.users));\n const groups = uniqById(policy.reviewConfigs.flatMap((_) => _.groups));\n return { users, groups };\n};\n\n/** Extract members (individual users and group members) from a policy. */\nexport const getPolicyMembers = (policy: Omit<PolicyWithRelatedObjects, \"whitelists\">): User[] => {\n const { users, groups } = getPolicyUsersAndGroups(policy);\n return uniqById(users.concat(groups.flatMap((_) => _.members)));\n};\n\nexport const createGovRule = async (\n workspaceName: string,\n rule: GovRuleData,\n hsmId: string,\n prisma: PrismaClient,\n): Promise<PolicyModel.GovRuleJsonObject> => {\n const { operationType, reviewSteps, threshold, whitelistIds } = {\n threshold: { min: null, max: null },\n whitelistIds: [],\n ...rule,\n };\n const reviewConfig = await prisma.reviewConfig.create({\n data: connectReviewConfigData({\n workspaceName,\n type: ReviewConfigType.OPERATOR_REVIEW_CONFIG,\n steps: reviewSteps,\n ownerPolicyId: null,\n }),\n include: ReviewConfigModel.INCLUDE_MEMBERS,\n });\n const reviewConfigId = reviewConfig.id;\n return {\n operationType,\n threshold,\n whitelistIds,\n reviewConfigId,\n hsmId,\n };\n};\n\n/**\n * Create governance rules JSON array from the rules data. For each governance rule, it will create\n * review configs owned by the rule. It returns an object with:\n *\n * - `rulesJsonArray`: A JSON array suitable for the `Policy.rulesJsonArray` field.\n * - `whitelistIds`: IDs of related whitelists, to be connected to the `Policy` object.\n * - `reviewConfigIds`: IDs of related review configs, to be connected to the `Policy` object.\n */\nexport const createGovRules = async (\n workspaceName: string,\n rules: GovRuleData[],\n hsmRuleSetIds: string[],\n prisma: PrismaClient,\n): Promise<{\n rulesJsonArray: PolicyModel.GovRuleJsonObject[];\n whitelistIds: string[];\n reviewConfigIds: string[];\n}> => {\n invariant(\n rules.length === hsmRuleSetIds.length,\n `Rule and rule HSM id count mismatch ${rules.length} !== ${hsmRuleSetIds.length}`,\n );\n const rulesJsonArray = await Promise.all(\n rules.map(async (rule, index) =>\n createGovRule(workspaceName, rule, hsmRuleSetIds[index]!, prisma),\n ),\n );\n const whitelistIds = uniq(rulesJsonArray.flatMap((_) => _.whitelistIds));\n const reviewConfigIds = uniq(rulesJsonArray.map((_) => _.reviewConfigId));\n return { rulesJsonArray, whitelistIds, reviewConfigIds };\n};\n\nexport type GovRuleExpanded = Pick<PolicyModel.GovRuleJsonObject, \"operationType\" | \"threshold\"> & {\n whitelists: Whitelist[];\n reviewConfig: ReviewConfigWithMembers;\n hsmId: string;\n};\n\n/** Expand govRules of the given policy by dereferencing related objects from ID. */\nexport const expandGovRules = (policy: PolicyWithRelatedObjects): GovRuleExpanded[] =>\n PolicyModel.parseFields(policy).rulesJsonArray.map((ruleJsonObject) => {\n const { operationType, threshold, whitelistIds, reviewConfigId, hsmId } = ruleJsonObject;\n const whitelists = whitelistIds.map((whitelistId) =>\n ensureNotNil(policy.whitelists.find((_) => _.id === whitelistId)),\n );\n const reviewConfig = ensureNotNil(policy.reviewConfigs.find((_) => _.id === reviewConfigId));\n return {\n operationType,\n threshold,\n whitelists,\n reviewConfig,\n hsmId,\n };\n });\n\n/**\n * TODO: This function is only used by `app-routers` to convert `policy.rules` to JSON format\n * expected by `PolicyResponse`. Consider redefining the shape of `PolicyResponse`!\n */\nexport const jsonifyGovRules = (policy: PolicyWithRelatedObjects): GovRuleData[] =>\n expandGovRules(policy).map((rule) => {\n const { operationType, threshold, whitelists } = rule;\n const whitelistIds = whitelists.map((_) => _.id);\n const reviewSteps = zReviewStepsArray.parse(rule.reviewConfig.steps);\n return { operationType, whitelistIds, threshold, reviewSteps };\n });\n\nexport const checkPreconditions = (intent: GovernableIntent, govRule: GovRuleExpanded): boolean => {\n const { operationType, threshold, whitelists } = govRule;\n // Check if operation type is allowed.\n if (operationType !== intent.type) {\n return false;\n }\n\n if (isValueTransactionIntent(intent)) {\n // Check if value is within the threshold.\n const { min, max } = threshold;\n const value = BigInt(intent.value);\n if ((min !== null && value < BigInt(min)) || (max !== null && value > BigInt(max))) {\n return false;\n }\n // If this govRule has whitelists: Check if the destination is whitelisted.\n if (whitelists.length > 0 && !whitelists.some((_) => isWhitelisted(intent, _))) {\n return false;\n }\n }\n\n // All checks passed!\n return true;\n};\n\n/**\n * Check the operation and find the first matching govRule for it. Then return the matching gov rule's\n * reviewConfig, hsm id, and whitelist hsm id.\n * If no govRule matches the operation, return undefined.\n */\nexport const findMatchingRule = (\n intent: GovernableIntent,\n currentUser: User,\n policy: PolicyWithRelatedObjects,\n):\n | { reviewConfig: EnrichedReviewConfig; govRuleHsmId: HsmObjectId; whitelistHsmId?: HsmObjectId }\n | undefined => {\n const matchingRule = expandGovRules(policy)\n .filter((rule) => checkPreconditions(intent, rule))\n .find((rule) => {\n const firstStep = expandReviewSteps(rule.reviewConfig)[0];\n invariant(firstStep !== undefined, \"ReviewConfig must have at least one step\");\n const members = firstStep.users.concat(firstStep.group?.members ?? []);\n return members.some((_) => _.id === currentUser.id);\n });\n\n if (matchingRule === undefined) {\n return undefined;\n }\n\n const matchingWhitelist = isValueTransactionIntent(intent)\n ? matchingRule.whitelists.find((_) => isWhitelisted(intent, _))\n : undefined;\n\n return {\n reviewConfig: enrichReviewConfig(matchingRule.reviewConfig),\n govRuleHsmId: matchingRule.hsmId,\n whitelistHsmId: matchingWhitelist?.hsmId,\n };\n};\n\n// #endregion\n","import z from \"zod\";\n\nimport { zClassicGovRuleData } from \"./db-utils\";\n\nconst zPolicyName = z.string().min(1).max(19).meta({ description: \"Policy name\" });\nconst zCurrency = z.string().min(1).max(40).regex(/^\\w+$/).meta({ description: \"Currency\" });\n\nexport const zCreatePublicPolicyRequestData = z.object({\n name: zPolicyName,\n description: z.string().nullable().meta({ description: \"Description\" }),\n currency: zCurrency.nullable(),\n govRules: z.array(zClassicGovRuleData).meta({ description: \"Governance rules\" }),\n});\n\nexport type CreatePublicPolicyRequestData = z.infer<typeof zCreatePublicPolicyRequestData>;\n\nexport const zEditPublicPolicyRequestData = z.object({\n name: zPolicyName,\n description: z.string().nullable().meta({ description: \"Description\" }),\n govRules: z.array(zClassicGovRuleData).meta({ description: \"Governance rules\" }),\n});\n\nexport type EditPublicPolicyRequestData = z.infer<typeof zEditPublicPolicyRequestData>;\n","import { AccountGovernanceType, AccountType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zReviewStepWithUsersArray } from \"@/governance\";\nimport { zClassicGovRuleData } from \"@/policies\";\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\nimport { zCurrencyString } from \"@/zod-utils\";\n\nconst zAccountName = z.string().min(1).max(40).meta({ description: \"Account name\" });\n\nexport const zSupport = z.enum([\"standalone\", \"legacy\"]);\n\nconst zSignDigestsGovRuleData = z\n .object({\n operationType: z.literal(\"SIGN_DIGESTS\"),\n reviewSteps: zReviewStepWithUsersArray, // we need to control for API users only\n })\n .meta({ description: \"Digest signing rule\" });\n\nexport type SignDigestGovRuleData = z.infer<typeof zSignDigestsGovRuleData>;\n\nexport const zAccountPolicyRequestData = z\n .union([\n z.object({ policyId: z.string() }).meta({ description: \"Account policy\" }),\n z\n .object({ rules: z.array(zClassicGovRuleData) })\n .meta({ description: \"Account governance rules\" }),\n ])\n .meta({ description: \"Account policy or governance rules\" });\n\nexport type AccountPolicyRequestData = z.infer<typeof zAccountPolicyRequestData>;\n\nexport const zCreateAccountGovernanceData = z\n .discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(AccountGovernanceType.CLASSIC),\n policy: zAccountPolicyRequestData,\n })\n .meta({ description: \"Classic governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.TRADELINK),\n assetManagerId: z.string(),\n exchangeConfigs: zTradelinkExchangeConfigs,\n })\n .meta({ description: \"Tradelink governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.RAW_SIGNING),\n policy: z.object({ rules: z.array(zSignDigestsGovRuleData) }),\n })\n .meta({ description: \"Raw signing governance\" }),\n ])\n .meta({ description: \"Governance fields\" });\n\nexport type CreateAccountGovernanceData = z.infer<typeof zCreateAccountGovernanceData>;\n\nexport const zCreateAccountUserInputData = z.object({\n name: zAccountName,\n currency: zCurrencyString, // \"bitcoin\"\n index: z.number().nonnegative().optional().meta({ description: \"Account index\" }),\n contractAddress: z.string().nonempty().nullable().meta({ description: \"Token issuer\" }),\n tokenIdentifier: z.string().nonempty().nullable().meta({ description: \"Token identifier\" }),\n governance: zCreateAccountGovernanceData,\n});\n\nexport type CreateAccountUserInputData = z.infer<typeof zCreateAccountUserInputData>;\n\n// CreateAccountUserInputData is exposed to the outside world, but we will resolve the\n// account index and derivation path before storing the request data in DB\nexport const zCreateAccountRequestData = zCreateAccountUserInputData\n .omit({ index: true })\n .extend({\n index: z.number().nonnegative().meta({ description: \"Account index\" }),\n derivationPath: z.string().meta({ description: \"Account bip44 derivation path\" }),\n type: z.enum(AccountType), // \"BITCOIN_LIKE\"\n })\n .meta({\n description: \"Create account request data\",\n id: \"CreateAccountRequestData\",\n });\n\nexport type CreateAccountRequestData = z.infer<typeof zCreateAccountRequestData>;\n\nexport const zEditAccountGovernanceData = z\n .discriminatedUnion(\"type\", [\n z\n .object({\n type: z.literal(AccountGovernanceType.CLASSIC),\n policy: zAccountPolicyRequestData,\n })\n .meta({ description: \"Classic governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.TRADELINK),\n exchangeConfigs: zTradelinkExchangeConfigs,\n })\n .meta({ description: \"Tradelink governance\" }),\n z\n .object({\n type: z.literal(AccountGovernanceType.RAW_SIGNING),\n policy: z.object({ rules: z.array(zSignDigestsGovRuleData) }),\n })\n .meta({ description: \"Raw signing governance\" }),\n ])\n .meta({ description: \"Governance fields\" });\n\nexport type EditAccountGovernanceData = z.infer<typeof zEditAccountGovernanceData>;\n\nexport const zEditAccountRequestData = z\n .object({\n name: zAccountName,\n governance: zEditAccountGovernanceData,\n })\n .meta({\n description: \"Edit account request data\",\n id: \"EditAccountRequestData\",\n });\n\nexport type EditAccountRequestData = z.infer<typeof zEditAccountRequestData>;\n\nexport const zEditTokenRuleRequestData = z.object({\n parentAccountId: z.string().min(1).meta({ description: \"Parent account unique ID\" }),\n contractAddress: z.string().min(1).meta({ description: \"Token contract address\" }),\n rules: z.array(zClassicGovRuleData).meta({ description: \"Account governance rules\" }),\n});\nexport type EditTokenRuleRequestData = z.infer<typeof zEditTokenRuleRequestData>;\n","import type { Account, PrismaClient } from \"@prisma/client\";\nimport { AccountGovernanceType, AccountType } from \"@prisma/client\";\nimport { keyBy } from \"lodash-es\";\n\nimport type { AccountStakingFields } from \"@/networks\";\nimport { zTradelinkExchangeConfigs } from \"@/tradelink\";\nimport { zNote } from \"@/types\";\nimport { unreachable } from \"@/utils\";\n\nimport type { AccountGovernanceFields } from \"./account-governance-fields\";\nimport type { TransactionResponse, TransactionWithMetaResponse } from \"./app-types\";\nimport type {\n LamaCardanoClient,\n LamaEthereumClient,\n LamaSolanaClient,\n PolkadotAccountClient,\n} from \"./clients\";\nimport { getAccountClient } from \"./clients\";\nimport type { AccountWithGovernanceMixins } from \"./db-types\";\nimport { getLesWallet } from \"./les-wallet\";\nimport type { Canton } from \"./les-wallet/extra-types\";\nimport type { AccountAssetFields, AccountLiveDataResponse, AccountResponse } from \"./types\";\nimport { zAccountResponse } from \"./types\";\nimport { getAccountBalance } from \"./utils\";\n\nconst loadBalanceFields = async (\n account: Account,\n prisma: PrismaClient,\n): Promise<AccountLiveDataResponse[\"balance\"]> => {\n const { total, pending } = await getAccountBalance(account, prisma);\n return {\n total: total.toString(),\n pending: pending.toString(),\n };\n};\n\nconst loadStakingFields = async (account: Account): Promise<AccountStakingFields | null> => {\n // Token account has no staking.\n if (account.contractAddress !== null) {\n return null;\n }\n\n const client = getAccountClient(account);\n switch (account.type) {\n case AccountType.ETHEREUM_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaEthereumClient).getAccountStakingData(account),\n };\n case AccountType.CARDANO_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaCardanoClient).getAccountStakingData(account),\n };\n case AccountType.SOLANA_LIKE:\n return {\n type: account.type,\n staking: await (client as LamaSolanaClient).getAccountStakingData(account),\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: account.type,\n staking: null, // TO REIMPLEMENT\n };\n case AccountType.POLKADOT_LIKE:\n return {\n type: account.type,\n staking: await (client as PolkadotAccountClient).getAccountStakingData(account),\n };\n case AccountType.SUI_LIKE: {\n const wallet = getLesWallet(account.type);\n return wallet.getStakingFields(account);\n }\n }\n return null;\n};\n\nexport const getAccountLiveData = async (\n account: Account,\n prisma: PrismaClient,\n): Promise<AccountLiveDataResponse> => {\n const [balance, staking] = await Promise.all([\n loadBalanceFields(account, prisma),\n loadStakingFields(account),\n ]);\n return {\n id: account.id,\n balance,\n ...(staking ?? { type: account.type }),\n };\n};\n\nconst getAccountAssetFields = (account: AccountWithGovernanceMixins): AccountAssetFields => {\n switch (account.type) {\n case AccountType.BITCOIN_LIKE:\n return {\n type: account.type,\n xpub: account.xpub!,\n };\n case AccountType.ETHEREUM_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.CARDANO_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.SOLANA_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.STELLAR_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.SUI_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.RIPPLE_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.POLKADOT_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.TRON_LIKE:\n return {\n type: account.type,\n address: account.address,\n contractAddress: account.contractAddress,\n };\n case AccountType.GENERIC_LIKE:\n case AccountType.RAW_SIGNING:\n return {\n type: account.type,\n };\n case AccountType.CANTON_LIKE:\n return {\n type: account.type,\n address: account.address,\n };\n case AccountType.HEDERA_LIKE:\n return {\n type: account.type,\n address: account.address,\n isActivated: account.lesWalletId !== null,\n };\n /* v8 ignore next -- @preserve */\n default:\n unreachable(account.type);\n }\n};\n\nconst getAccountGovernanceFields = (\n account: AccountWithGovernanceMixins,\n): AccountGovernanceFields => {\n switch (account.governanceType) {\n case AccountGovernanceType.CLASSIC:\n case AccountGovernanceType.RAW_SIGNING:\n return {\n type: AccountGovernanceType.CLASSIC,\n policyId: account.classicGovernanceMixin!.policyId,\n };\n case AccountGovernanceType.TRADELINK:\n return {\n type: AccountGovernanceType.TRADELINK,\n assetManagerId: account.tradelinkGovernanceMixin!.assetManagerId,\n exchangeConfigs: zTradelinkExchangeConfigs.parse(\n account.tradelinkGovernanceMixin!.exchangeConfigs,\n ),\n };\n /* v8 ignore next -- @preserve */\n default:\n unreachable(account.governanceType);\n }\n};\n\nexport const serializeAccount = (account: AccountWithGovernanceMixins): AccountResponse => {\n const asset = getAccountAssetFields(account);\n const governance = getAccountGovernanceFields(account);\n\n const response: AccountResponse = {\n ...account,\n network: account.currency,\n legacyId: account.gateId,\n governance,\n asset,\n };\n\n // Parse to strip off fields that are not defined in the schema.\n return zAccountResponse.parse(response);\n};\n\n/**\n * For each transaction, check if there is an associated TransactionMeta object, and retrieve\n * the corresponding data on the corresponding request\n *\n * @param transactions - TransactionResponse[] - transactions from account client\n * @param prisma - PrismaClient - prisma client\n *\n * @returns TransactionWithMetaResponse[]\n */\nexport const fetchTransactionMetas = async (\n workspaceName: string,\n transactions: TransactionResponse[],\n prisma: PrismaClient,\n): Promise<TransactionWithMetaResponse[]> => {\n const txHashes = transactions.map((tx) => tx.hash);\n const metas = await prisma.transactionMeta.findMany({\n where: { workspaceName, hash: { in: txHashes } },\n });\n const metasByHash = keyBy(metas, \"hash\");\n return transactions.map((t) => {\n const note = metasByHash[t.hash]?.note ? zNote.parse(metasByHash[t.hash]?.note) : null;\n return { ...t, note, requestId: metasByHash[t.hash]?.requestId ?? null };\n });\n};\n\n// #region ---------- Canton specific -------------------------------------------------------------\n\nexport const getCantonPreApprovalState = async (\n account: Account,\n): Promise<Canton.PreApprovalState> => {\n const wallet = getLesWallet(AccountType.CANTON_LIKE);\n const preApprovalState = await wallet.extras.getPreApprovalState(account);\n return preApprovalState;\n};\n\nexport const getCantonTransferProposals = async (\n account: Account,\n): Promise<Canton.TransferProposal[]> => {\n const wallet = getLesWallet(AccountType.CANTON_LIKE);\n const transferProposals = await wallet.extras.getTransferProposals(account);\n return transferProposals;\n};\n\n// #endregion\n","import { ActivationStatus, UserDeviceType, UserRole } from \"@prisma/client\";\nimport z from \"zod\";\n\nexport { zApiUserCredentialsResponse } from \"@/auth\";\n\nexport const zUserResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n legacyViewAll: z\n .boolean()\n .meta({ description: \"If true, user can read all resources on the workspace\" }),\n workspaceName: z.string().meta({ description: \"User's workspace name\" }),\n name: z.string().meta({ description: \"User name\" }),\n deviceUserId: z.string().nullable().meta({ description: \"User's device ID (for non-API users)\" }),\n deviceType: z.enum(UserDeviceType).meta({ description: \"User's device type\" }),\n role: z.enum(UserRole).meta({ description: \"User role\" }),\n pubKey: z.string().meta({ description: \"User public key\" }),\n status: z.enum(ActivationStatus).meta({ description: \"User status\" }),\n isSuspended: z.boolean().meta({ description: \"Whether the user is suspended\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nexport type UserResponse = z.infer<typeof zUserResponse>;\n\nexport const zAdminResponse = zUserResponse.extend({\n role: z.literal(UserRole.ADMIN).meta({ description: \"Should always be ADMIN\" }),\n});\n\nexport type AdminResponse = z.infer<typeof zAdminResponse>;\n\nexport const zUserSortBy = z\n .enum([\n \"name\",\n \"role\",\n \"status\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof UserResponse)[])\n .default(\"createdAt\");\n\nexport type UserSortBy = z.infer<typeof zUserSortBy>;\n\nexport {\n zUserRegistrationChallenge,\n zUserRegistrationChallengeResponse,\n zUserRegistrationDeviceData,\n} from \"@/hsm\";\n\nexport {\n type UserRegistrationCreateInput,\n type UserRegistrationResponse,\n zUserRegistrationCreateInput,\n zUserRegistrationResponse,\n} from \"./types\";\n","import type { User, UserRegistration } from \"@prisma/client\";\n\nimport type { UserRegistrationResponse, UserResponse } from \"./app-types\";\nimport { zUserRegistrationResponse, zUserResponse } from \"./app-types\";\n\nexport function serializeUser(user: User): UserResponse {\n const serialized = {\n ...user,\n legacyId: user.gateId,\n } satisfies UserResponse;\n return zUserResponse.parse(serialized);\n}\n\nexport function serializeUserRegistration(\n registration: UserRegistration,\n): UserRegistrationResponse {\n return zUserRegistrationResponse.parse(registration);\n}\n","import { ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zUserResponse } from \"@/users/app\";\n\nexport const zGroupResponse = z.object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Group name\" }),\n description: z.string().nullable().meta({ description: \"Group description\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Group status\" }),\n members: z.array(zUserResponse).meta({ description: \"Group members\" }),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n});\n\nexport type GroupResponse = z.infer<typeof zGroupResponse>;\n\nexport const zGroupSortBy = z\n .enum([\"name\", \"status\", \"createdAt\", \"updatedAt\"] as const satisfies (keyof GroupResponse)[])\n .default(\"createdAt\");\n\nexport type GroupSortBy = z.infer<typeof zGroupSortBy>;\n","import { serializeUser } from \"@/users/app\";\n\nimport { type GroupResponse, zGroupResponse } from \"./app-types\";\nimport type { GroupWithMembers } from \"./db-types\";\n\nexport function serializeGroup(group: GroupWithMembers): GroupResponse {\n const serialized = {\n ...group,\n legacyId: group.gateId,\n members: group.members.map(serializeUser),\n } satisfies GroupResponse;\n return zGroupResponse.parse(serialized);\n}\n","// @compat-until mobile@x.y.z\n// ☝️ Can delete this patch when we drop support for mobile app < x.y.z\n// TODO: Delete `zVaultRequestCommonMixin.expiredAt`!\nexport const patchRequestExpiredAt = <T extends { expiresAt: Date }>(data: T): T => ({\n ...data,\n expiredAt: data.expiresAt,\n});\n","import { RequestType } from \"@prisma/client\";\nimport { get } from \"lodash-es\";\n\nimport { isRecord } from \"@/utils\";\n\n// @compat-until mobile@x.y.z\n// TODO: Delete deprecated fields in `zTezosLikeDelegateData` and `zTezosLikeUndelegateData`!\nexport const patchTezosRequestData = <T extends { type: RequestType }>(data: T): T => {\n if (data.type !== RequestType.CREATE_TRANSACTION) {\n return data;\n }\n const transaction = get(data, [\"data\", \"transaction\"]);\n /* v8 ignore next -- @preserve */\n if (!isRecord(transaction)) {\n return data;\n }\n\n // Inject fields in-place...\n /* v8 ignore next -- @preserve */\n if (transaction.type === \"TEZOS_LIKE_DELEGATE\") {\n transaction.amount = transaction.amount ?? \"0\";\n } else if (transaction.type === \"TEZOS_LIKE_UNDELEGATE\") {\n transaction.amount = transaction.amount ?? \"0\";\n transaction.recipient = transaction.recipient ?? \"0\";\n }\n\n return data;\n};\n","import z from \"zod\";\n\nexport const zSciConfigData = z.object({\n dapps: z.array(z.string()).nullable().meta({ description: \"Allowed DApps, null allows all\" }),\n customContractCallEnabled: z.boolean().meta({ description: \"Allow non-DApp SCI\" }),\n});\n\nexport const zCreateSciConfigRequestData = z.object({\n account: z.string().meta({ description: \"Account UUID\" }),\n config: zSciConfigData,\n});\n\nexport type CreateSciConfigRequestData = z.infer<typeof zCreateSciConfigRequestData>;\n\nexport const zEditSciConfigRequestData = z.object({\n config: zSciConfigData,\n});\n\nexport type EditSciConfigRequestData = z.infer<typeof zEditSciConfigRequestData>;\n","import type {\n BorrowType,\n PrismaClient,\n User,\n VaultRequest,\n VaultRequestReview,\n Workspace,\n} from \"@prisma/client\";\nimport { ChallengeType } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport {\n type HsmChallengeStage,\n type HsmProof,\n zApiChallenge,\n zPsdChallenge,\n zPubKey,\n} from \"@/hsm\";\nimport type { Resource } from \"@/resource\";\n\nexport type WorkflowContext = {\n prisma: PrismaClient;\n workspace: Workspace;\n};\n\n/** The base type of `VaultRequest.data` and the request input data type. */\nexport type RecordOrNull = Record<string, unknown> | null;\n\nexport type RequestWithData<T extends RecordOrNull> = Omit<VaultRequest, \"data\"> & { data: T };\n\n/** Resolved review step that participates in the review process of a request. */\nexport type ResolvedReviewStep = {\n stageName: string;\n users: User[];\n quorum: number;\n};\n\nexport type ResourceClaim = {\n resource: Resource;\n borrowType: BorrowType;\n};\n\nexport type ValidationResult<T extends RecordOrNull> = {\n targetId: string | null;\n resolvedReviewSteps: ResolvedReviewStep[];\n requestData: T;\n managedData?: Record<string, unknown>;\n resourceClaims: ResourceClaim[];\n};\n\n/**\n * All approved review stages so far, where key is the stage name, and value is an array of\n * reviews with `APPROVED` status in the stage.\n */\nexport type ApprovedReviewStages = Record<string, VaultRequestReview[]>;\n\n/** Challenge response (signature) that user provides as proof to approve or reject a request. */\nexport type Proof = HsmProof | { challengeType: typeof ChallengeType.SOFT; signature: \"\" };\n\nexport type TargetObject = { id: string };\n\nexport type WorkflowEvent =\n | {\n type: \"TRANSACTION_SUBMITTED\";\n requestId: string;\n txHash: string;\n }\n | {\n type: \"TRANSACTION_FAILED\" | \"TRANSACTION_ONCHAIN\" | \"TRANSACTION_CONFIRMED\";\n requestId: string;\n }\n | {\n // Dummy event type just for testing\n type: \"DUMMY\";\n foobar: \"foo\" | \"bar\";\n };\n\nexport const zSoftChallenge = z.object({\n challengeType: z.literal(ChallengeType.SOFT), // soft approval with no challenge to sign\n});\n\nexport type SoftChallenge = z.infer<typeof zSoftChallenge>;\n\nexport const zChallenge = z.discriminatedUnion(\"challengeType\", [\n zPsdChallenge,\n zApiChallenge,\n zSoftChallenge,\n]);\n\nexport type Challenge = z.infer<typeof zChallenge>;\n\nconst zSoftChallengeGroup = z.record(zPubKey, zSoftChallenge);\nconst zSoftChallengeSteps = z.array(zSoftChallengeGroup);\nconst zSoftChallengeStage = z.object({\n stageName: z.string(),\n steps: zSoftChallengeSteps,\n});\nexport type SoftChallengeStage = z.infer<typeof zSoftChallengeStage>;\n\nexport type ChallengeStage = HsmChallengeStage | SoftChallengeStage;\n\n// #region ---------- VaultRequest.reviewSteps ----------------------------------------------------\n\n/** Item in `VaultRequest.reviewSteps` array representing one review step. */\nexport const zRequestReviewStep = z.object({\n stageName: z.string().regex(/^\\w+$/).meta({ description: \"The review stage name\" }),\n quorum: z.int().min(1).meta({ description: \"Quorum for the review step\" }),\n});\n\nexport const zRequestReviewSteps = z.array(zRequestReviewStep);\n\nexport type RequestReviewStep = z.infer<typeof zRequestReviewStep>;\n\n// #endregion\n\n// #region ---------- Multi-stage HSM challenges --------------------------------------------------\n\nexport type MultiStageHsmChallenges = {\n targetHsmId: string;\n stages: HsmChallengeStage[];\n};\n\n// #endregion\n","import z from \"zod\";\n\nexport const zEntityName = z.string().min(1).max(19).meta({ description: \"Entity name\" });\n\nexport const zCreateEntityRequestData = z.object({\n name: zEntityName,\n accountIds: z.array(z.string()).meta({ description: \"List of Account IDs\" }),\n memberIds: z.array(z.string()).meta({ description: \"List of User IDs\" }),\n});\n\nexport type CreateEntityRequestData = z.infer<typeof zCreateEntityRequestData>;\n\nexport const zEditEntityRequestData = zCreateEntityRequestData;\n\nexport type EditEntityRequestData = z.infer<typeof zEditEntityRequestData>;\n\nexport const zRevokeEntityRequestData = z.object({});\n\nexport type RevokeEntityRequestData = z.infer<typeof zRevokeEntityRequestData>;\n","import z from \"zod\";\n\nconst zGroupName = z.string().min(1).max(19).meta({ description: \"Group name\" });\n\nexport const zCreateGroupRequestData = z.object({\n name: zGroupName,\n description: z.string().nullable().meta({ description: \"Group description\" }),\n members: z.array(z.string()).meta({ description: \"List of group members ids\" }),\n});\n\nexport type CreateGroupRequestData = z.infer<typeof zCreateGroupRequestData>;\n\nexport const zEditGroupRequestData = z.object({\n name: zGroupName,\n description: z.string().nullable().meta({ description: \"Group description\" }),\n members: z.array(z.string()).meta({ description: \"List of group members ids\" }),\n});\n\nexport type EditGroupRequestData = z.infer<typeof zEditGroupRequestData>;\n","import z from \"zod\";\n\nexport const zApiKeyName = z.string().min(1).max(19).meta({ description: \"API key name\" });\n\nexport const zCreateApiKeyRequestData = z\n .object({\n name: zApiKeyName,\n entities: z.array(z.string()).meta({ description: \"List of related entities ids\" }),\n scopes: z.object({}).meta({ description: \"FIXME to be precised\" }),\n })\n .meta({ description: \"Create read-only API key request data\" });\n\nexport type CreateApiKeyRequestData = z.infer<typeof zCreateApiKeyRequestData>;\n\nexport const zEditApiKeyRequestData = zCreateApiKeyRequestData.meta({\n description: \"Edit read-only API key request data\",\n});\n\nexport type EditApiKeyRequestData = z.infer<typeof zEditApiKeyRequestData>;\n","/**\n * All zod schemas for `VaultRequest.data` are registered here.\n */\nimport { RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport {\n zCreateAccountRequestData,\n zCreateSciConfigRequestData,\n zEditAccountRequestData,\n zEditSciConfigRequestData,\n zEditTokenRuleRequestData,\n} from \"@/accounts\";\nimport { zCreateApiKeyRequestData, zEditApiKeyRequestData } from \"@/api-keys/api-key-requests\";\nimport {\n zCreateEntityRequestData,\n zEditEntityRequestData,\n zRevokeEntityRequestData,\n} from \"@/entities\";\nimport { zUpdateQuorumRequestData } from \"@/governance\";\nimport { zWorkspaceRuleRequestData } from \"@/governance/workspace-rule-requests\";\nimport { zCreateGroupRequestData, zEditGroupRequestData } from \"@/groups\";\nimport { zCreatePublicPolicyRequestData, zEditPublicPolicyRequestData } from \"@/policies\";\nimport { zTradelinkRequestMixinsByType } from \"@/tradelink\";\nimport {\n zCreateTransactionRequestData,\n zSignDigestsRequestData,\n zSignMessageRequestData,\n} from \"@/transactions\";\nimport {\n zCreateApiUserAccessRequestData,\n zCreateApiUserRequestData,\n zCreatePsdUserRequestData,\n zRevokeUserRequestData,\n} from \"@/users\";\nimport {\n zCreateWhitelistRequestData,\n zEditWhitelistRequestData,\n} from \"@/whitelists/whitelist-requests\";\n\nexport const zVaultRequestMixinsByType = {\n // Workspaces\n [RequestType.UPDATE_QUORUM]: z.object({\n type: z.literal(RequestType.UPDATE_QUORUM),\n data: zUpdateQuorumRequestData,\n }),\n // Operator requests\n [RequestType.CREATE_TRANSACTION]: z.object({\n type: z.literal(RequestType.CREATE_TRANSACTION),\n data: zCreateTransactionRequestData,\n meta: z\n .object({\n hash: z.string().nullable(),\n })\n .optional()\n .nullable(),\n }),\n [RequestType.SIGN_MESSAGE]: z.object({\n type: z.literal(RequestType.SIGN_MESSAGE),\n data: zSignMessageRequestData,\n }),\n [RequestType.SIGN_DIGESTS]: z.object({\n type: z.literal(RequestType.SIGN_DIGESTS),\n data: zSignDigestsRequestData,\n }),\n // Accounts\n [RequestType.CREATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.CREATE_ACCOUNT),\n data: zCreateAccountRequestData,\n }),\n [RequestType.EDIT_ACCOUNT]: z.object({\n type: z.literal(RequestType.EDIT_ACCOUNT),\n targetId: z.string(),\n data: zEditAccountRequestData,\n }),\n [RequestType.EDIT_TOKEN_RULE]: z.object({\n type: z.literal(RequestType.EDIT_TOKEN_RULE),\n targetId: z.string(),\n data: zEditTokenRuleRequestData,\n }),\n // Groups\n [RequestType.CREATE_GROUP]: z.object({\n type: z.literal(RequestType.CREATE_GROUP),\n data: zCreateGroupRequestData,\n }),\n [RequestType.EDIT_GROUP]: z.object({\n type: z.literal(RequestType.EDIT_GROUP),\n targetId: z.string(),\n data: zEditGroupRequestData,\n }),\n [RequestType.REVOKE_GROUP]: z.object({\n type: z.literal(RequestType.REVOKE_GROUP),\n targetId: z.string(),\n data: zRevokeUserRequestData,\n }),\n // Whitelists\n [RequestType.CREATE_WHITELIST]: z.object({\n type: z.literal(RequestType.CREATE_WHITELIST),\n data: zCreateWhitelistRequestData,\n }),\n [RequestType.EDIT_WHITELIST]: z.object({\n type: z.literal(RequestType.EDIT_WHITELIST),\n targetId: z.string(),\n data: zEditWhitelistRequestData,\n }),\n // Entities\n [RequestType.CREATE_ENTITY]: z.object({\n type: z.literal(RequestType.CREATE_ENTITY),\n data: zCreateEntityRequestData,\n }),\n [RequestType.EDIT_ENTITY]: z.object({\n type: z.literal(RequestType.EDIT_ENTITY),\n targetId: z.string(),\n data: zEditEntityRequestData,\n }),\n [RequestType.REVOKE_ENTITY]: z.object({\n type: z.literal(RequestType.REVOKE_ENTITY),\n targetId: z.string(),\n data: zRevokeEntityRequestData,\n }),\n // Users\n [RequestType.CREATE_PSD_USER]: z.object({\n type: z.literal(RequestType.CREATE_PSD_USER),\n data: zCreatePsdUserRequestData,\n }),\n [RequestType.CREATE_API_USER]: z.object({\n type: z.literal(RequestType.CREATE_API_USER),\n data: zCreateApiUserRequestData,\n }),\n [RequestType.CREATE_API_USER_ACCESS]: z.object({\n type: z.literal(RequestType.CREATE_API_USER_ACCESS),\n data: zCreateApiUserAccessRequestData,\n }),\n [RequestType.REVOKE_USER]: z.object({\n type: z.literal(RequestType.REVOKE_USER),\n targetId: z.string(),\n data: zRevokeUserRequestData,\n }),\n // Admin gov rules\n [RequestType.EDIT_WORKSPACE_RULE]: z.object({\n type: z.literal(RequestType.EDIT_WORKSPACE_RULE),\n data: zWorkspaceRuleRequestData,\n }),\n // SCI configs\n [RequestType.CREATE_SCICONFIG]: z.object({\n type: z.literal(RequestType.CREATE_SCICONFIG),\n data: zCreateSciConfigRequestData,\n }),\n [RequestType.EDIT_SCICONFIG]: z.object({\n type: z.literal(RequestType.EDIT_SCICONFIG),\n data: zEditSciConfigRequestData,\n }),\n // API keys\n [RequestType.CREATE_API_KEY]: z.object({\n type: z.literal(RequestType.CREATE_API_KEY),\n data: zCreateApiKeyRequestData,\n }),\n [RequestType.EDIT_API_KEY]: z.object({\n type: z.literal(RequestType.EDIT_API_KEY),\n data: zEditApiKeyRequestData,\n }),\n [RequestType.REVOKE_API_KEY]: z.object({\n type: z.literal(RequestType.REVOKE_API_KEY),\n data: z.object({}),\n }),\n // Policies\n [RequestType.CREATE_POLICY]: z.object({\n type: z.literal(RequestType.CREATE_POLICY),\n data: zCreatePublicPolicyRequestData,\n }),\n [RequestType.EDIT_POLICY]: z.object({\n type: z.literal(RequestType.EDIT_POLICY),\n targetId: z.string(),\n data: zEditPublicPolicyRequestData,\n }),\n // Tradelink-related requests\n ...zTradelinkRequestMixinsByType,\n} as const satisfies Record<RequestType, unknown>;\n","import { ChallengeType, RequestReviewStatus, RequestState, RequestType } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCreateAccountUserInputData } from \"@/accounts\";\nimport type { TransactionData } from \"@/networks\";\nimport { zSignMessageUserInputData } from \"@/transactions\";\nimport { zNote } from \"@/types\";\nimport { ensureNonEmptyArray } from \"@/utils\";\nimport { zChallenge, zRequestReviewSteps } from \"@/workflows\";\n\nimport { zVaultRequestMixinsByType } from \"./request-data\";\n\nconst zRequestReviewResponse = z.object({\n // Note: Do NOT include `quorum` as it is already available in the request's `reviewSteps` field.\n stepIndex: z\n .number()\n .int()\n .meta({ description: \"Index of the governance step in the request workflow\" }),\n userId: z.string().meta({ description: \"Reviewer id\" }),\n status: z.enum(RequestReviewStatus).meta({ description: \"Review status\" }),\n createdAt: z.coerce.date().meta({ description: \"Created date\" }),\n updatedAt: z.coerce.date().meta({ description: \"Updated date\" }),\n});\n\nconst zVaultRequestCommonMixin = z.object({\n id: z.string().meta({ description: \"Request unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n state: z.enum(RequestState).meta({ description: \"Request state\" }),\n reviewSteps: zRequestReviewSteps.meta({ description: \"Request review steps\" }),\n currentStepIndex: z\n .number()\n .int()\n .min(0)\n .meta({ description: \"Index of the current approval step\" }),\n expiresAt: z.coerce.date().meta({ description: \"Request expiration date\" }),\n expiredAt: z.coerce.date().optional().meta({ description: \"Deprecated: use expiresAt\" }),\n targetId: z.string().nullable().meta({ description: \"Optional ID of the target object\" }),\n note: zNote.nullable().meta({ description: \"Optional request note\" }),\n reviews: z.array(zRequestReviewResponse).meta({ description: \"Requests reviews\" }),\n // `type` and `data` are correlated -- See `zVaultRequestMixinsByType`\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n createdById: z.string().meta({ description: \"ID of the user who created the request\" }),\n // `inflight` is fetched from ONGOING RequestSaga\n inflight: z\n .object({\n lastError: z.string().nullable().meta({ description: \"Error message from the last failure\" }),\n numFailed: z.number().int().meta({ description: \"Number of failures so far\" }),\n retryAfter: z.coerce.date().meta({ description: \"Date after which next retry is scheduled\" }),\n })\n .optional()\n .meta({ description: \"Extra information if the request is currently being processed\" }),\n});\n\n/**\n * Maps from request type to request creation input schema.\n *\n * Most of the time, the user input data shape for request creation is the same as `request.data`.\n * But there are some exceptions. In such case, we redefine the shape for input data.\n */\nconst allowedRequestCreationInputByType = {\n [RequestType.UPDATE_QUORUM]: zVaultRequestMixinsByType[RequestType.UPDATE_QUORUM],\n [RequestType.CREATE_PSD_USER]: zVaultRequestMixinsByType[RequestType.CREATE_PSD_USER],\n [RequestType.CREATE_API_USER]: zVaultRequestMixinsByType[RequestType.CREATE_API_USER],\n [RequestType.CREATE_GROUP]: zVaultRequestMixinsByType[RequestType.CREATE_GROUP],\n [RequestType.EDIT_GROUP]: zVaultRequestMixinsByType[RequestType.EDIT_GROUP],\n [RequestType.CREATE_WHITELIST]: zVaultRequestMixinsByType[RequestType.CREATE_WHITELIST],\n [RequestType.EDIT_WHITELIST]: zVaultRequestMixinsByType[RequestType.EDIT_WHITELIST],\n [RequestType.CREATE_TRANSACTION]: zVaultRequestMixinsByType[RequestType.CREATE_TRANSACTION],\n [RequestType.SIGN_MESSAGE]: z.object({\n type: z.literal(RequestType.SIGN_MESSAGE),\n data: zSignMessageUserInputData,\n }),\n [RequestType.CREATE_POLICY]: zVaultRequestMixinsByType[RequestType.CREATE_POLICY],\n [RequestType.EDIT_POLICY]: zVaultRequestMixinsByType[RequestType.EDIT_POLICY],\n [RequestType.CREATE_ACCOUNT]: z.object({\n type: z.literal(RequestType.CREATE_ACCOUNT),\n data: zCreateAccountUserInputData,\n }),\n [RequestType.EDIT_ACCOUNT]: zVaultRequestMixinsByType[RequestType.EDIT_ACCOUNT],\n [RequestType.TRADELINK_ACTIVATE_ACCOUNT]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_ACTIVATE_ACCOUNT],\n [RequestType.TRADELINK_CREATE_CUSTODIAN]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_CUSTODIAN],\n [RequestType.TRADELINK_EDIT_CUSTODIAN]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_CUSTODIAN],\n [RequestType.TRADELINK_CREATE_EXCHANGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_EXCHANGE],\n [RequestType.TRADELINK_EDIT_EXCHANGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_EXCHANGE],\n [RequestType.TRADELINK_CREATE_ASSET_MANAGER]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_ASSET_MANAGER],\n [RequestType.TRADELINK_EDIT_ASSET_MANAGER]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_EDIT_ASSET_MANAGER],\n [RequestType.TRADELINK_ADJUST_PLEDGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_ADJUST_PLEDGE],\n [RequestType.TRADELINK_REPLEDGE]: zVaultRequestMixinsByType[RequestType.TRADELINK_REPLEDGE],\n [RequestType.TRADELINK_FORCE_UNPLEDGE]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_FORCE_UNPLEDGE],\n [RequestType.TRADELINK_CREATE_SETTLEMENT]:\n zVaultRequestMixinsByType[RequestType.TRADELINK_CREATE_SETTLEMENT],\n [RequestType.TRADELINK_WITHDRAW]: zVaultRequestMixinsByType[RequestType.TRADELINK_WITHDRAW],\n [RequestType.TRADELINK_ARBITRATE]: zVaultRequestMixinsByType[RequestType.TRADELINK_ARBITRATE],\n [RequestType.REVOKE_USER]: zVaultRequestMixinsByType[RequestType.REVOKE_USER],\n [RequestType.EDIT_WORKSPACE_RULE]: zVaultRequestMixinsByType[RequestType.EDIT_WORKSPACE_RULE],\n [RequestType.CREATE_ENTITY]: zVaultRequestMixinsByType[RequestType.CREATE_ENTITY],\n [RequestType.EDIT_ENTITY]: zVaultRequestMixinsByType[RequestType.EDIT_ENTITY],\n [RequestType.REVOKE_ENTITY]: zVaultRequestMixinsByType[RequestType.REVOKE_ENTITY],\n};\n\nconst zRequestCreationInputCommonMixin = z.object({\n note: zNote.optional().meta({ description: \"Optional request note\" }),\n});\n\n// To generate the OpenAPI schema with trpc-openapi, we need the input to be a zod object.\n// See: https://github.com/jlalmes/trpc-openapi?tab=readme-ov-file#requirements\nexport const zVaultRequestCreateInput = z.object({\n request: z.discriminatedUnion(\n \"type\",\n ensureNonEmptyArray(\n Object.values(allowedRequestCreationInputByType).map((_) => {\n // properly extract request type for documentation generation\n const requestType = _.shape.type.value;\n return _.extend(zRequestCreationInputCommonMixin.shape).meta({\n description: `${requestType} request data`,\n });\n }),\n ),\n ),\n});\n\nexport type VaultRequestCreateInput = z.infer<typeof zVaultRequestCreateInput>;\n\nexport const zVaultRequestResponse = z\n .discriminatedUnion(\n \"type\",\n ensureNonEmptyArray(\n Object.values(zVaultRequestMixinsByType).map((_) => {\n // properly extract request type for documentation generation\n const requestType = _.shape.type.value;\n return _.extend(zVaultRequestCommonMixin.shape).meta({\n description: `${requestType} request`,\n });\n }),\n ),\n )\n .meta({\n description: \"Vault request response data\",\n id: \"VaultRequestResponse\",\n });\n\nexport type VaultRequestResponse = z.infer<typeof zVaultRequestResponse>;\n\nexport const zRequestSortBy = z\n .enum([\n \"state\",\n \"expiresAt\",\n \"createdAt\",\n \"updatedAt\",\n ] as const satisfies (keyof VaultRequestResponse)[])\n .default(\"createdAt\");\n\nexport type RequestSortBy = z.infer<typeof zRequestSortBy>;\n\nexport const zChallengeResponse = z.object({\n pubKey: z.string().meta({ description: \"Public key of the current user\" }),\n challenge: zChallenge.meta({\n description: \"Challenge data to sign with the user's private key\",\n }),\n});\n\nexport type ChallengeResponse = z.infer<typeof zChallengeResponse>;\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type -- type does not bring any value here\nexport const genTransactionSchemas = <T extends TransactionData>(innerSchema: z.ZodType<T>) => ({\n zInput: z\n .object({\n accountId: z.string().min(1).meta({ description: \"Target account id\" }),\n transaction: innerSchema,\n })\n .extend(zRequestCreationInputCommonMixin.shape)\n .meta({ description: \"Transaction request data\" }),\n zOutput: z\n .object({\n type: z.literal(RequestType.CREATE_TRANSACTION),\n data: z.object({\n accountId: z.string(),\n transaction: innerSchema,\n }),\n })\n .extend(zVaultRequestCommonMixin.shape)\n .describe(\"Transaction request\"),\n});\n\nexport const zApproveVaultRequestInput = z.object({\n id: z.string().meta({ description: \"ID of the request to approve\" }),\n data: z.discriminatedUnion(\"challengeType\", [\n z.object({\n challengeType: z\n .enum([ChallengeType.PSD, ChallengeType.API])\n .meta({ description: \"Challenge type\" }),\n signature: z.string().min(1).meta({ description: \"Challenge signature\" }),\n }),\n z.object({\n challengeType: z.enum([ChallengeType.SOFT]).meta({ description: \"Challenge type\" }),\n }),\n ]),\n});\n\nexport type ApproveVaultRequestInput = z.infer<typeof zApproveVaultRequestInput>;\n\nexport type { Challenge, SoftChallenge } from \"@/workflows\";\n","import { patchRequestExpiredAt, patchTezosRequestData } from \"@/compat\";\nimport type { RequestSagaWithFailures } from \"@/workflows\";\n\nimport { type VaultRequestResponse, zVaultRequestResponse } from \"../app-types\";\nimport type { VaultRequestWithRelatedObjects } from \"../db-types\";\n\nexport {\n GateRequestService,\n isFromGate,\n shouldForbidRequestCreationInGateCompatMode,\n} from \"./gate-service\";\n\nexport function serializeVaultRequest(\n request: VaultRequestWithRelatedObjects,\n): VaultRequestResponse {\n const serialized = {\n ...request,\n legacyId: request.gateId,\n } satisfies Omit<VaultRequestResponse, \"type\" | \"data\" | \"reviewSteps\" | \"note\">;\n /* v8 ignore next -- @preserve */\n switch (request.type) {\n case \"CREATE_TRANSACTION\":\n case \"TRADELINK_WITHDRAW\":\n case \"TRADELINK_ARBITRATE\":\n case \"TRADELINK_CREATE_SETTLEMENT\":\n Object.assign(serialized, {\n meta: {\n hash: request.transactionMeta?.hash ?? null,\n },\n });\n break;\n default:\n break;\n }\n let patched = zVaultRequestResponse.parse(serialized);\n patched = patchRequestExpiredAt(patched);\n patched = patchTezosRequestData(patched);\n return patched;\n}\n\nexport function serializeVaultRequestWithOngoingSaga(\n request: VaultRequestWithRelatedObjects,\n ongoingSaga: RequestSagaWithFailures | null,\n): VaultRequestResponse {\n let inflightField;\n if (ongoingSaga !== null) {\n const { retryAfter, failures } = ongoingSaga;\n const lastError = failures[failures.length - 1]?.message ?? null;\n const numFailed = failures.length;\n inflightField = {\n inflight: { lastError, numFailed, retryAfter },\n };\n } else {\n inflightField = {};\n }\n return {\n ...serializeVaultRequest(request),\n ...inflightField,\n };\n}\n","import { ActivationStatus } from \"@prisma/client\";\nimport z from \"zod\";\n\nimport { zCurrencyString } from \"@/zod-utils\";\n\nexport const zWhitelistAddressResponse = z.object({\n name: z.string().min(1).max(50).meta({ description: \"Address name\" }),\n currency: zCurrencyString.meta({ description: \"Address currency\" }),\n address: z.string().min(1).max(200).meta({ description: \"Address value\" }),\n destinationTags: z\n .array(z.string().min(1).regex(/^\\w+$/))\n .optional()\n .meta({ description: \"List of destination tags (applicable for Ripple currency)\" }),\n});\n\nexport const zWhitelistResponse = z\n .object({\n id: z.string().meta({ description: \"Internal unique identifier\" }),\n legacyId: z\n .number()\n .meta({ description: \"Legacy internal unique identifier (for retro-compatibility)\" }),\n name: z.string().meta({ description: \"Whitelist name\" }),\n status: z.enum(ActivationStatus).meta({ description: \"Whitelist status\" }),\n addresses: z.array(zWhitelistAddressResponse),\n createdAt: z.coerce.date().meta({ description: \"Creation timestamp\" }),\n updatedAt: z.coerce.date().meta({ description: \"Last modification timestamp\" }),\n description: z.string().nullable().meta({ description: \"Whitelist description\" }),\n })\n .meta({ description: \"Whitelist\", id: \"WhitelistResponse\" });\n\nexport type WhitelistResponse = z.infer<typeof zWhitelistResponse>;\n\nexport const zWhitelistSortBy = z\n .enum([\"name\", \"status\", \"createdAt\", \"updatedAt\"] as const satisfies (keyof WhitelistResponse)[])\n .default(\"createdAt\");\n\nexport type WhitelistSortBy = z.infer<typeof zWhitelistSortBy>;\n","import type { Whitelist } from \"@prisma/client\";\nimport { z } from \"zod\";\n\nimport type { WhitelistResponse } from \"./app-types\";\nimport { zWhitelistAddressResponse, zWhitelistResponse } from \"./app-types\";\n\nexport const serializeWhitelist = (whitelist: Whitelist): WhitelistResponse => {\n const serialized = {\n ...whitelist,\n legacyId: whitelist.gateId,\n addresses: z.array(zWhitelistAddressResponse).parse(whitelist.addresses),\n } satisfies WhitelistResponse;\n return zWhitelistResponse.parse(serialized);\n};\n","import { faker } from \"@faker-js/faker\";\nimport type { Account, User, VaultRequestReview, Whitelist } from \"@prisma/client\";\nimport { AccountType } from \"@prisma/client\";\n\nimport { type AccountResponse, zAccountResponse } from \"@/accounts/app-types\";\nimport { serializeAccount } from \"@/accounts/app-utils\";\nimport type { GroupWithMembers } from \"@/groups\";\nimport { type GroupResponse, zGroupResponse } from \"@/groups/app-types\";\nimport { serializeGroup } from \"@/groups/app-utils\";\nimport type { AccountStakingFields } from \"@/networks\";\nimport type { VaultRequestResponse } from \"@/requests/app-types\";\nimport { serializeVaultRequest } from \"@/requests/app-utils\";\nimport { type UserResponse, zUserResponse } from \"@/users/app-types\";\nimport { serializeUser } from \"@/users/app-utils\";\nimport { type WhitelistResponse, zWhitelistResponse } from \"@/whitelists/app-types\";\nimport { serializeWhitelist } from \"@/whitelists/app-utils\";\n\nimport { genAccount, genGroupWithMembers, genUser, genVaultRequest, genWhitelist } from \"./models\";\nimport type { RequestDataTypes } from \"./models/requests/requests-and-reviews\";\n\nexport const genStakingFields = (account: Account): AccountStakingFields | null => {\n // No staking for token account\n if (account.contractAddress !== null) {\n return null;\n }\n\n switch (account.type) {\n case AccountType.BITCOIN_LIKE:\n return null;\n case AccountType.CANTON_LIKE:\n return null;\n case AccountType.CARDANO_LIKE:\n return {\n type: \"CARDANO_LIKE\",\n staking: {\n staked: faker.number.int().toString(),\n },\n };\n case AccountType.ETHEREUM_LIKE:\n return {\n type: \"ETHEREUM_LIKE\",\n staking: {\n totalStaking: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n availableRewards: faker.number.int().toString(),\n networkApy: faker.number.float({ min: 0, max: 1 }),\n },\n };\n case AccountType.GENERIC_LIKE:\n return null;\n case AccountType.POLKADOT_LIKE:\n return {\n type: \"POLKADOT_LIKE\",\n staking: {\n info: {\n controllerAddress: \"<fake-controller-address>\",\n rewardsDestination: \"<fake-rewards-destination>\",\n proxies: [\"<fake-proxy>\"],\n legacyStaking: false,\n isNominator: false,\n },\n balances: {\n free: faker.number.int().toString(),\n reserved: faker.number.int().toString(),\n frozen: faker.number.int().toString(),\n bonded: faker.number.int().toString(),\n available: faker.number.int().toString(),\n unbonding: [\n { amount: faker.number.int().toString(), waiting_time: \"<fake-waiting-time>\" },\n ],\n unbonded: [\n { amount: faker.number.int().toString(), waiting_time: \"<fake-waiting-time>\" },\n ],\n totalUnbonding: faker.number.int().toString(),\n totalUnbonded: faker.number.int().toString(),\n },\n anonymousProxy: {\n address: \"<fake-anonymous-proxy-address>\",\n createdAt: faker.date.past().toISOString(),\n isController: false,\n isMain: false,\n balances: {\n free: faker.number.int().toString(),\n reserved: faker.number.int().toString(),\n frozen: faker.number.int().toString(),\n bonded: faker.number.int().toString(),\n available: faker.number.int().toString(),\n total: faker.number.int().toString(),\n },\n blockHeight: faker.number.int().toString(),\n extIndex: faker.number.int().toString(),\n index: faker.number.int().toString(),\n kind: \"<fake-kind>\",\n },\n },\n };\n case AccountType.RAW_SIGNING:\n return null;\n case AccountType.RIPPLE_LIKE:\n return null;\n case AccountType.SOLANA_LIKE:\n return {\n type: \"SOLANA_LIKE\",\n staking: {\n staked: faker.number.int().toString(),\n rewards: {\n total: faker.number.int().toString(),\n last7: faker.number.int().toString(),\n last30: faker.number.int().toString(),\n },\n stakes: [\n {\n uid: \"<fake-stake-uid>\",\n baseAccountUid: \"<fake-base-account-uid>\",\n pubKey: \"<fake-pub-key>\",\n validatorPubKey: \"<fake-validator-pub-key>\",\n initialAmount: faker.number.int().toString(),\n activeAmount: faker.number.int().toString(),\n inactiveAmount: faker.number.int().toString(),\n totalBalance: faker.number.int().toString(),\n creationDate: faker.date.past().toISOString(),\n activationEpoch: faker.date.past().toISOString(),\n activationDate: faker.date.past().toISOString(),\n deactivationEpoch: \"<fake-deactivation-epoch>\",\n deactivationDate: faker.date.past().toISOString(),\n status: \"activated\",\n rentExemptReserve: faker.number.int().toString(),\n withdrawableAmount: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n creationTxHash: \"<fake-creation-tx-hash>\",\n actionsTxHashes: [\"<fake-action-tx-hash>\"],\n },\n ],\n },\n };\n case AccountType.STELLAR_LIKE:\n return null;\n case AccountType.SUI_LIKE:\n return {\n type: \"SUI_LIKE\",\n staking: {\n totalStaked: faker.number.int().toString(),\n totalRewards: faker.number.int().toString(),\n },\n };\n case AccountType.TEZOS_LIKE:\n return {\n type: \"TEZOS_LIKE\",\n staking: {\n delegations: [{ address: faker.string.alpha({ length: 10 }) }],\n },\n };\n case AccountType.TRON_LIKE:\n return null;\n case AccountType.HEDERA_LIKE:\n return null;\n }\n};\n\nexport function genVaultRequestResponse<T extends keyof RequestDataTypes>(\n opts: Parameters<typeof genVaultRequest<T>>[0],\n reviews: VaultRequestReview[] = [],\n): VaultRequestResponse {\n const request = genVaultRequest(opts);\n const requestWithReviews = { ...request, reviews };\n return serializeVaultRequest(requestWithReviews);\n}\n\nexport function genAccountResponse(overrides?: Partial<Account>): AccountResponse {\n const dbAccount = genAccount(overrides);\n const account = serializeAccount(dbAccount);\n return zAccountResponse.parse(account);\n}\n\nexport function genUserResponse(overrides?: Partial<User>): UserResponse {\n const dbUser = genUser(overrides);\n const user = serializeUser(dbUser);\n return zUserResponse.parse(user);\n}\n\nexport function genGroupResponse(overrides?: Partial<GroupWithMembers>): GroupResponse {\n const dbGroup = genGroupWithMembers(overrides);\n const group = serializeGroup(dbGroup);\n return zGroupResponse.parse(group);\n}\n\nexport function genWhitelistResponse(overrides?: Partial<Whitelist>): WhitelistResponse {\n const dbWhitelist = genWhitelist(overrides);\n const whitelist = serializeWhitelist(dbWhitelist);\n return zWhitelistResponse.parse(whitelist);\n}\n"]}
|