@ledgerhq/vault-common 2.2.0 → 2.2.1

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @ledgerhq/vault-common@2.2.0 build /home/runner/work/vault-ts/vault-ts/packages/common
2
+ > @ledgerhq/vault-common@2.2.1 build /home/runner/work/vault-ts/vault-ts/packages/common
3
3
  > tsup
4
4
 
5
5
  CLI Building entry: src/createHSMBridge.ts, src/index.ts, src/recipeManifest.ts, src/reviewAPIRequest.ts, src/utils.ts, src/crypto/utils.ts, src/types/index.ts
@@ -9,39 +9,39 @@
9
9
  CLI Target: es2022
10
10
  CLI Cleaning output folder
11
11
  CJS Build start
12
+ CJS lib/createHSMBridge.js 331.00 B
12
13
  CJS lib/crypto/utils.js 335.00 B
13
14
  CJS lib/types/index.js 329.00 B
14
- CJS lib/createHSMBridge.js 331.00 B
15
- CJS lib/index.js 120.29 KB
16
15
  CJS lib/chunk-R5RZM7VO.js 3.52 KB
16
+ CJS lib/index.js 120.29 KB
17
17
  CJS lib/recipeManifest.js 349.00 B
18
- CJS lib/chunk-YAB42L5H.js 17.66 KB
18
+ CJS lib/chunk-UE4JXAYM.js 17.80 KB
19
19
  CJS lib/reviewAPIRequest.js 365.00 B
20
- CJS lib/chunk-5KTWGTUF.js 37.27 KB
21
20
  CJS lib/chunk-QH2K2MDV.js 3.39 KB
22
21
  CJS lib/utils.js 1.20 KB
23
22
  CJS lib/chunk-6NGBW7BG.js 29.85 KB
24
- CJS lib/chunk-WCH2IYIJ.js 396.00 B
23
+ CJS lib/chunk-5KTWGTUF.js 37.27 KB
25
24
  CJS lib/chunk-PZ5AY32C.js 314.00 B
26
25
  CJS lib/chunk-3L2XDBZ2.js 8.65 KB
27
- CJS lib/crypto/utils.js.map 281.00 B
26
+ CJS lib/chunk-PBYMPTCY.js 396.00 B
28
27
  CJS lib/createHSMBridge.js.map 293.00 B
28
+ CJS lib/crypto/utils.js.map 281.00 B
29
29
  CJS lib/types/index.js.map 269.00 B
30
- CJS lib/index.js.map 178.14 KB
31
30
  CJS lib/chunk-R5RZM7VO.js.map 6.86 KB
31
+ CJS lib/index.js.map 178.14 KB
32
32
  CJS lib/recipeManifest.js.map 288.00 B
33
- CJS lib/chunk-YAB42L5H.js.map 36.38 KB
33
+ CJS lib/chunk-UE4JXAYM.js.map 36.53 KB
34
34
  CJS lib/reviewAPIRequest.js.map 308.00 B
35
- CJS lib/chunk-5KTWGTUF.js.map 71.12 KB
36
35
  CJS lib/chunk-QH2K2MDV.js.map 5.19 KB
37
36
  CJS lib/utils.js.map 398.00 B
38
37
  CJS lib/chunk-6NGBW7BG.js.map 55.76 KB
39
- CJS lib/chunk-WCH2IYIJ.js.map 52.44 KB
38
+ CJS lib/chunk-5KTWGTUF.js.map 71.12 KB
40
39
  CJS lib/chunk-PZ5AY32C.js.map 479.00 B
41
40
  CJS lib/chunk-3L2XDBZ2.js.map 20.30 KB
42
- CJS ⚡️ Build success in 922ms
41
+ CJS lib/chunk-PBYMPTCY.js.map 52.44 KB
42
+ CJS ⚡️ Build success in 909ms
43
43
  DTS Build start
44
- DTS ⚡️ Build success in 11971ms
44
+ DTS ⚡️ Build success in 11392ms
45
45
  DTS lib/createHSMBridge.d.ts 952.00 B
46
46
  DTS lib/index.d.ts 12.96 KB
47
47
  DTS lib/reviewAPIRequest.d.ts 836.00 B
@@ -49,4 +49,4 @@
49
49
  DTS lib/crypto/utils.d.ts 428.00 B
50
50
  DTS lib/recipeManifest.d.ts 704.00 B
51
51
  DTS lib/types/index.d.ts 5.86 KB
52
- DTS lib/index-C99kQ88p.d.ts 68.05 KB
52
+ DTS lib/index-CfKTZ-yG.d.ts 68.05 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @ledgerhq/vault-common
2
2
 
3
+ ## 2.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 50b6df6: fix: proper recipe of currency-less policies
8
+
3
9
  ## 2.2.0
4
10
 
5
11
  ### Minor Changes
@@ -11,4 +11,4 @@ var feesLevels = ["SLOW", "NORMAL", "FAST", "CUSTOM"];
11
11
 
12
12
 
13
13
  exports.GateGroupRequestTypeDefs = GateGroupRequestTypeDefs; exports.feesLevels = feesLevels;
14
- //# sourceMappingURL=chunk-WCH2IYIJ.js.map
14
+ //# sourceMappingURL=chunk-PBYMPTCY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-PBYMPTCY.js","../src/types/index.ts"],"names":[],"mappings":"AAAA;ACwoCO,IAAM,yBAAA,EAA2B;AAAA,EACtC,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAqVO,IAAM,WAAA,EAAa,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AD19C7D;AACA;AACE;AACA;AACF,6FAAC","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-PBYMPTCY.js","sourcesContent":[null,"import { RecordStore } from \"@ledgerhq/hw-transport-mocker\";\nimport { CryptoCurrency, TokenCurrency } from \"@ledgerhq/types-cryptoassets\";\nimport { Logger } from \"@ledgerhq/vault-utils\";\nimport { BigNumber } from \"bignumber.js\";\nimport { Socket } from \"socket.io-client\";\n\nimport { Device } from \"../device/types\";\nimport {\n DataAccount,\n DataExchange,\n DataGroup,\n DataPolicy,\n DataVaultEntity,\n DataWhitelist,\n} from \"../prepareRequest\";\nimport { RecipeManifestResult } from \"../recipeManifest\";\nimport { CardanoBalances } from \"./cardano\";\nimport { PolkadotAccountData } from \"./polkadot\";\n\nexport * from \"./cardano\";\n\nexport type UserContext = {\n network: Network;\n getToken: () => string | null;\n run: (interactions: Interaction<any>[], data: any) => Promise<any>;\n get: <T>(url: string, requestOptions?: any) => Promise<T>;\n post: <T>(url: string, payload: any) => Promise<T>;\n approveRequest: (payload: any) => Promise<any>;\n approveRequestWithoutHSM: (payload: any) => Promise<any>;\n rejectRequest: (requestID: number) => Promise<any>;\n connectSocket: () => Promise<typeof Socket>;\n onEvent: (cb: (event: VaultEvent) => void) => void;\n};\n\nexport type RawUser = {\n entityType: \"USER\";\n name: string;\n role: \"admin\" | \"operator\";\n device: number;\n};\n\nexport type RawGroup = {\n entityType: \"GROUP\";\n name: string;\n users: number[];\n description?: string;\n};\n\nexport type RawAccount = {\n entityType: \"ACCOUNT\";\n name: string;\n currency: string;\n derivationMode?: string;\n};\n\nexport type RawWhiteList = {\n entityType: \"WHITELIST\";\n name: string;\n description?: string;\n addresses: string[];\n};\n\nexport type RawEntity = RawUser | RawAccount | RawGroup | RawWhiteList;\n\nexport type EntityType =\n | \"USER\"\n | \"GROUP\"\n | \"ACCOUNT\"\n | \"WHITELIST\"\n | \"TRANSACTION\"\n | \"EXCHANGE\"\n | \"POLICY\"\n | \"VAULT_ENTITY\";\n\nexport type TransportType = \"software\" | \"speculos-web\" | \"nodehid\" | \"nodehid-replayer\";\n\nexport type DevicesPoolOptions = {\n salt?: string;\n gate: string;\n apiGateway?: string;\n overrideSeeds?: string[];\n deviceAPIURL?: string;\n notifierURL?: string;\n readOnlyUser?: string;\n transport?: TransportType;\n recordStore?: RecordStore | null;\n psdModel?: PsdModel;\n\n // see VFE-1010\n deviceAPISessionID?: string;\n};\n\nexport type LamOptions = {\n lamURL?: string;\n lamAPIKey?: string;\n};\n\nexport type CliOptions = {\n networkDelay?: number;\n};\n\nexport type PoolOptions = DevicesPoolOptions & LamOptions & CliOptions;\n\nexport type UserContextRunnable = (context: UserContext) => any;\n\nexport type DeployOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance, will be used for namespace creation & domain registration\n name: string;\n // who is deploying\n owner: string;\n // default is `main`\n preset?: string;\n // expiration date\n expireOn?: Date;\n // arbitrary helm values to pass\n values?: HelmValues;\n // elapsed minutes before deploy throw an error\n watchTimeoutMinutes?: number;\n // spawn a dedicated HSM simu\n useDedicatedHSMSimu?: boolean;\n // use HTTP polling instead of socket to check instance status\n useHTTPPolling?: boolean;\n};\n\nexport type UpgradeOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance to target\n name: string;\n // will upgrade to values defined in the preset\n preset?: string;\n // arbitrary helm values to pass\n values?: HelmValues;\n // elapsed minutes before deploy throw an error\n watchTimeoutMinutes?: number;\n};\n\nexport type DestroyOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance\n name: string;\n // wether we should wait for instance to completely disappear\n wait?: boolean;\n};\n\nexport type HelmValue =\n | string\n | number\n | boolean\n | undefined\n | null\n | Array<HelmValue>\n | HelmValues;\n\nexport interface HelmValues {\n [x: string]: HelmValue;\n}\n\nexport type DevicesPool = {\n getRevaultCompatOptions: () => {\n workspace: string;\n deviceApiUrl: string;\n salt: string;\n };\n workspace: string;\n gate: string;\n apiGateway: string | undefined;\n network: Network;\n psdModel: PsdModel;\n login: (deviceIndex: number | string) => Promise<UserContext>;\n getUserID: (deviceIndex: number) => Promise<string>;\n bruteforceDeviceIndex: (userID: string) => Promise<number>;\n setSalt: (salt: string) => void;\n registerDevice: (deviceIndex: number, request: any) => Promise<any>;\n lamAPI: {\n createInvitation: (invitationID: string) => Promise<{ device_id: string }>;\n registerUser: (name: string, uuid: string) => Promise<void>;\n };\n runWithDevice: (deviceIndex: number, interactions: Interaction<any>[], data: any) => Promise<any>;\n runWithQuorum: (iteratee: UserContextRunnable) => Promise<any>;\n device: Device;\n interactions: Interactions;\n getOnboardingAdminDevices: () => Promise<AdminDevice[]>;\n};\n\nexport type ConnectionEdge<T> = {\n cursor: number;\n node: T;\n};\n\nexport type Connection<T> = {\n edges: ConnectionEdge<T>[];\n pageInfo: {\n hasNextPage: boolean;\n count: number;\n };\n};\n\ntype GateEntityWithRequest = Extract<GateEntity, { last_request?: any }>;\n\nexport interface GateEditWorkspaceRuleRequest extends GateGenericRequest {\n type: \"EDIT_WORKSPACE_RULE\";\n target_type: \"WORKSPACE_RULE\";\n workspace_rule: GateWorkspaceRule;\n request_data: {\n steps: GateWorkspaceRuleStep[];\n };\n}\n\nexport type GateRequest =\n | NonNullable<GateEntityWithRequest[\"last_request\"]>\n | GateAPIV2UserAccessRequest\n | GateEditWorkspaceRuleRequest\n | GateOrganizationRequest\n | GateActivateRequest;\n\nexport type GateRequestType = GateRequest[\"type\"];\n\nexport type GateEntity =\n | GateAPIKey\n | GateAccount\n | GateExchange\n | GateExchange\n | GateGroup\n | GateMessage\n | GatePolicy\n | GateSCIConfig\n | GateTransaction\n | GateUser\n | GateVaultEntity\n | GateWhitelist\n | GatePledgeIncrement\n | GateWorkspaceRule\n | GateRepledge\n | GateForcedUnpledge\n | GateDigestGroup\n | GateTransfer\n | GateTradelink\n | GateTradelinkExchange\n | GateTradelinkAssetManager;\n\nexport type GatePledgeIncrement = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n amount: string;\n };\n last_request?: GatePledgeIncrementRequest;\n};\nexport type GateRepledge = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n pledge_id: number;\n settlement_id: string;\n account_name: string;\n exchange_name: string;\n amount: string;\n currency: string;\n };\n last_request?: GateRepledgeRequest;\n};\n\nexport type GateForcedUnpledge = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n pledge_id: number;\n account_name: string;\n currency: string;\n exchange_name: string;\n };\n pledge_id: string;\n last_request?: GateForcedUnpledgeRequest;\n};\n\nexport type TradelinkNetwork = {\n id: string;\n custodian: GateTradelinkThirdParty<\"CUSTODIAN\">;\n asset_managers: GateTradelinkThirdParty<\"ASSET_MANAGER\">[];\n exchanges: GateTradelinkThirdParty<\"EXCHANGE\">[];\n};\nexport type GateTradelink = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n hsm_groups: {\n arbitration_groups: GateGroup[];\n settlement_groups: GateGroup[];\n withdraw_groups: GateGroup[];\n };\n network: TradelinkNetwork;\n\n last_request?: GateTradelinkRequest;\n};\n\ntype TradelinkInternalGroup = {\n quorum: number;\n users: Array<{ id: number; pub_key: string; username: string }>;\n};\ntype TradelinkInternalWhitelist = {\n id: number;\n addresses: Array<Omit<GateAddress, \"id\">>;\n};\n\nexport type GateTradelinkExchange = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n last_request?: GateTradelinkExchangeRequest;\n is_under_edit: boolean;\n network: TradelinkNetwork;\n network_data: TradelinkNetwork[\"exchanges\"][number];\n front_data: {\n pledge_approval_group: TradelinkInternalGroup;\n settlement_creator_group: TradelinkInternalGroup;\n whitelist: TradelinkInternalWhitelist;\n };\n hsm_data: {\n name: string;\n pledge_approval_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n settlement_creator_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n };\n};\n\nexport type GateTradelinkAssetManager = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n last_request?: GateTradelinkAssetManagerRequest;\n is_under_edit: boolean;\n network: TradelinkNetwork;\n network_data: TradelinkNetwork[\"asset_managers\"][number];\n front_data: {\n pledge_creator_group: TradelinkInternalGroup;\n settlement_approval_group: TradelinkInternalGroup;\n whitelist: TradelinkInternalWhitelist;\n };\n hsm_data: {\n name: string;\n pledge_creator_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n settlement_approval_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n };\n};\n\nexport type GateDeviceType = \"API\" | \"PSD\" | \"SOFT_PSD\";\n\nexport type GateUser = {\n id: number;\n entityType: \"USER\";\n is_api?: boolean;\n view_all_override?: boolean;\n pub_key: string;\n username: string;\n user_id: string;\n picture?: string;\n created_on: string;\n status: string;\n email?: string;\n role: \"ADMIN\" | \"OPERATOR\";\n last_request?: GateUserRequest;\n device_type: GateDeviceType;\n app_version?: string;\n};\n\nexport type GateAPIKey = {\n id: number;\n secret?: string;\n entityType: \"VAULT_API_KEY\";\n name: string;\n created_on: string;\n updated_on: string;\n status:\n | \"PENDING_APPROVAL\"\n | \"APPROVED\"\n | \"ACTIVE\"\n | \"SUSPENDED\"\n | \"PENDING_REVOCATION\"\n | \"REVOKED\"\n | \"ABORTED\";\n entities: GateVaultEntity[];\n scopes: Record<string, any>;\n identifier: string;\n last_request?: GateAPIKeyRequest;\n};\n\nexport type GateTransfer = {\n id: number;\n amount: string;\n network: string | null;\n recipient: string;\n status: \"PENDING\" | \"APPROVED\" | \"SUBMITTED\" | \"ABORTED\";\n last_request: GateTransferRequest;\n};\n\nexport type GateSCIConfig = {\n id: number;\n entityType: \"SCI_CONFIG\";\n account: Omit<GateAccount, \"sci_config\">;\n sciconfig: {\n dapps: string[];\n custom_contract_call_enabled: boolean;\n };\n status: \"PENDING\" | \"ACTIVE\";\n last_request?: GateSCIConfigRequest;\n};\n\ntype MessageType = \"EIP191\" | \"EIP712\";\n\nexport type GateMessage = {\n account_id: number;\n data: string | Record<string, any>;\n id: number;\n message_type: MessageType;\n signature: string | null;\n der_signature: string | null;\n status: \"PENDING_APPROVAL\" | \"APPROVED\" | \"SIGNED\" | \"ABORTED\";\n type: \"MESSAGE_SIGNING_ALLOWED\";\n entityType: \"MESSAGE_SIGNING\";\n created_on?: string;\n notes: GateTransactionNote[];\n last_request?: GateMessageRequest;\n};\n\nexport type AdminDevice = [username: string, index: number];\n\nexport type GateGroup = {\n id: number;\n name: string;\n entityType: \"GROUP\";\n created_on: string;\n created_by: GateUser;\n description?: string;\n status: \"ACTIVE\" | \"PENDING\" | \"REVOKED\" | \"ABORTED\" | \"TO_MIGRATE\";\n is_internal: boolean;\n members: GateUser[];\n is_under_edit: boolean;\n last_request?: GateGroupRequest;\n is_tradelink?: boolean;\n};\n\ntype GateDigestSignature = {\n der: string;\n r: number;\n s: number;\n v: number | null;\n pub_key: string;\n};\n\ntype GateDigest = {\n digest: string;\n derivation_path: string;\n signature?: GateDigestSignature;\n index?: number;\n};\n\nexport type GateDigestGroup = {\n id: number;\n last_request?: GateDigestsRequest;\n account_id: number;\n created_by: GateUser;\n created_on: string;\n digests_data: GateDigest[];\n // todo check final status with gate\n status: \"PENDING_APPROVAL\" | \"APPROVED\";\n};\n\nexport type UTXOsPickingStrategy = \"MERGE_OUTPUTS\" | \"DEEP_OUTPUTS_FIRST\" | \"OPTIMIZE_SIZE\";\n\nexport type GateFees = {\n gas_price: string;\n gas_limit: string;\n fees_per_byte: string;\n fees: string;\n utxo_picking_strategy?: UTXOsPickingStrategy;\n storage_limit?: number;\n};\n\nexport type GateFeesEIP1559 = {\n base_fees: string;\n gas_limit: string;\n max_fees: string;\n max_fees_buffer_factor: string;\n priority_fees: string;\n};\n\nexport type AccountType =\n | \"Ethereum\"\n | \"Bitcoin\"\n | \"Erc20\"\n | \"Bep20\"\n | \"Ripple\"\n | \"Stellar\"\n | \"Tezos\"\n | \"Solana\"\n | \"Cardano\"\n | \"Polkadot\"\n | \"Tron\"\n | \"Trc20\";\n\nexport type AccountStatus =\n | \"PENDING_CREATE_IN_HSM\"\n | \"PENDING\"\n | \"APPROVED\"\n | \"PENDING_VIEW_ONLY\"\n | \"ACTIVE\"\n | \"VIEW_ONLY\"\n | \"PENDING_ACTIVATION\"\n | \"ABORTED\"\n | \"ACTIVATION_ABORTED\";\n\nexport type Unit = {\n name: string;\n code: string;\n magnitude: number;\n};\n\ntype AccountSettings = {\n id: number;\n fiat: string;\n currency_unit: Unit;\n unitIndex: number;\n blockchain_explorer: string;\n};\n\nexport type GateRuleMultiAuthStep = { quorum: number; group: GateGroup };\n\nexport type GateRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n data: GateRuleMultiAuthStep[];\n};\n\nexport type GateRuleThreshold = {\n type: \"THRESHOLD\";\n data: [\n {\n currency_type: \"CRYPTO\";\n max: string | null;\n min: string | null;\n },\n ];\n};\n\nexport type GateRuleWhitelist = {\n type: \"WHITELIST\";\n data: GateWhitelist[];\n};\n\nexport type GateRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\";\n data: [{ enabled: boolean }];\n};\n\ntype GateRuleTransactionFilterPreset =\n | \"TEZOS_DELEGATION\"\n | \"POLKADOT_STAKING\"\n | \"DEPLOY_CONTRACT\"\n | \"SOLANA_STAKING\"\n | \"CARDANO_STAKING\"\n | \"RAW_SIGNING\"\n | \"SEND\"\n | \"MESSAGE_SIGNING\"\n | \"CREATE_SPL_TOKEN_ACCOUNT\"\n | \"TRANSFER_SPL_TOKEN\"\n | \"STAKE\";\n\nexport type GateRuleTransactionFilter = {\n type: \"TRANSACTION_FILTER\";\n data:\n | { preset: Exclude<GateRuleTransactionFilterPreset, \"TRANSFER_SPL_TOKEN\"> }\n | { preset: \"TRANSFER_SPL_TOKEN\"; contract_address: string };\n};\n\nexport type GateGovernanceRule =\n | GateRuleMultiAuth\n | GateRuleThreshold\n | GateRuleWhitelist\n | GateRuleSCI\n | GateRuleTransactionFilter;\n\nexport type GateGovernanceRulesSet = {\n name: string;\n rules: GateGovernanceRule[];\n};\n\nexport type WeirdGateRuleMultiAuthStep =\n | { quorum: number; group_id: number }\n | { quorum: number; users: number[] };\n\nexport type WeirdGateRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n data: WeirdGateRuleMultiAuthStep[];\n};\n\nexport type WeirdGateRuleThreshold = {\n type: \"THRESHOLD\";\n data: [\n {\n currency_type: \"CRYPTO\";\n // *just* when creating threshold, `max` is optional and can't be null\n max?: string;\n min: string | null;\n },\n ];\n};\n\nexport type WeirdGateRuleWhitelist = {\n type: \"WHITELIST\";\n data: number[];\n};\n\nexport type WeirdGateGovernanceRule =\n | WeirdGateRuleMultiAuth\n | WeirdGateRuleThreshold\n | GateRuleSCI\n | GateRuleTransactionFilter\n | WeirdGateRuleWhitelist;\n\nexport type WeirdGateGovernanceRulesSet = {\n name: string;\n rules: WeirdGateGovernanceRule[];\n};\n\nexport type GateLabel = {\n id: number;\n name: string;\n info: {\n color: string;\n description: string;\n };\n};\n\nexport type GateAccountCommon = {\n id: number;\n account_type: AccountType;\n entityType: \"ACCOUNT\";\n address?: string;\n contract_address: string;\n name: string;\n settings: AccountSettings;\n balance: any; //Bignumber\n available_balance: any; //Bignumber\n currency: string;\n parent_balance?: any; //Bignumber\n has_access_to_parent: boolean | null;\n created_on: string;\n governance_rules: GateGovernanceRulesSet[] | null;\n next_governance_rules: GateGovernanceRulesSet[] | null;\n fresh_addresses: any;\n nfts_gallery_enabled?: boolean;\n is_hsm_coin_app_updated: boolean;\n is_under_edit: boolean;\n index: number;\n status: AccountStatus;\n xpub: string;\n parent: number | null;\n derivation_path: string;\n labels: GateLabel[];\n extended_public_key: {\n public_key: string;\n chain_code: string;\n };\n derivation_mode: \"STANDARD\" | \"NATIVE_SEGWIT\";\n entity_id?: number;\n last_request?: GateAccountRequest;\n is_tradelink?: boolean;\n tradelink_data?: GateAccountTradelinkData;\n synced_on: string | null;\n last_sync_requested_at: string | null;\n policy?: GatePolicy;\n is_raw_signing_account?: boolean;\n};\n\nexport interface GateAccountExchangeOptions {\n auto_repledge_enabled: boolean;\n requires_pre_approval: boolean;\n}\nexport interface GateAccountTradelinkData {\n asset_manager: GateTradelinkAssetManager;\n custodian: GateTradelinkThirdParty<\"CUSTODIAN\">;\n exchanges: Array<GateTradelinkExchange & GateAccountExchangeOptions>;\n total_repledge: string;\n}\n\nexport interface GateAccountEthereum extends GateAccountCommon {\n account_type: \"Ethereum\";\n sci_config: GateSCIConfig | null;\n ethereum_data?: {\n staking?: {\n total_staking: string;\n total_rewards: string;\n available_rewards: string;\n network_apy: string;\n };\n };\n}\n\nexport interface GateTradelinkThirdParty<T extends \"CUSTODIAN\" | \"ASSET_MANAGER\" | \"EXCHANGE\"> {\n code: string;\n id: string;\n logo_url: string | null;\n name: string;\n role: T;\n}\n\nexport interface GateTradelinkRequest extends GateGenericRequest {\n tradelink: GateTradelink;\n type: \"CREATE_TRADELINK\" | \"EDIT_TRADELINK\";\n target_type: \"TRADELINK\";\n edit_data?: {\n operators: string[]; // pub_keys\n };\n}\n\nexport interface GateTradelinkExchangeRequest extends GateGenericRequest {\n tradelink: GateTradelinkExchange;\n type: \"CREATE_TRADELINK_EXCHANGE\" | \"EDIT_TRADELINK_EXCHANGE\";\n target_type: \"TRADELINK_EXCHANGE\";\n tradelink_exchange: GateTradelinkExchange;\n edit_data?: {\n operators: string[]; // pub_keys\n addresses: Array<Omit<GateAddress, \"id\">>;\n };\n}\n\nexport interface GateTradelinkAssetManagerRequest extends GateGenericRequest {\n tradelink: GateTradelinkAssetManager;\n type: \"CREATE_TRADELINK_ASSET_MANAGER\" | \"EDIT_TRADELINK_ASSET_MANAGER\";\n target_type: \"TRADELINK_ASSET_MANAGER\";\n tradelink_asset_manager: GateTradelinkAssetManager;\n edit_data?: {\n operators: string[]; // pub_keys\n addresses: Array<Omit<GateAddress, \"id\">>;\n };\n}\n\nexport type SPLToken = {\n token_name: string;\n associated_token_account: string;\n account_name: string;\n contract_address: string;\n available: string;\n pending: string;\n status: \"ACTIVE\" | \"INACTIVE\" | \"VIEW_ONLY\";\n ticker: string;\n creation_transaction_hash: string;\n parent_id: number;\n};\n\nexport interface GateAccountBitcoin extends GateAccountCommon {\n account_type: \"Bitcoin\";\n}\nexport interface GateAccountTRC20 extends GateAccountCommon {\n account_type: \"Trc20\";\n parent_available_balance: BigNumber;\n}\nexport interface GateAccountERC20 extends GateAccountCommon {\n account_type: \"Erc20\";\n parent_available_balance: BigNumber;\n}\nexport interface GateAccountRipple extends GateAccountCommon {\n account_type: \"Ripple\";\n}\nexport interface GateAccountStellar extends GateAccountCommon {\n account_type: \"Stellar\";\n}\nexport interface GateAccountTezos extends GateAccountCommon {\n account_type: \"Tezos\";\n}\nexport interface GateAccountSolana extends GateAccountCommon {\n account_type: \"Solana\";\n solana_data?: {\n tokens?: SPLToken[];\n can_create_spl_token_accounts: boolean;\n };\n}\nexport interface GateAccountCardano extends GateAccountCommon {\n account_type: \"Cardano\";\n cardano_data: {\n balances: CardanoBalances;\n };\n}\nexport interface GateAccountTron extends GateAccountCommon {\n account_type: \"Tron\";\n tron_data: {\n available: number;\n bandwidth: number;\n energy: number;\n pending: number;\n total: number;\n };\n}\n\nexport interface GateAccountPolkadot extends GateAccountCommon {\n account_type: \"Polkadot\";\n polkadot_data: PolkadotAccountData;\n}\n\nexport type GateAccount =\n | GateAccountEthereum\n | GateAccountBitcoin\n | GateAccountERC20\n | GateAccountTRC20\n | GateAccountStellar\n | GateAccountTezos\n | GateAccountSolana\n | GateAccountPolkadot\n | GateAccountRipple\n | GateAccountCardano\n | GateAccountTron;\n\nexport type GateVaultEntityStatus = \"PENDING\" | \"ACTIVE\" | \"ABORTED\" | \"REVOKED\" | \"TO_MIGRATE\";\n\nexport type GateWorkspacePermission = \"ROOT\" | \"CREATE_ACCOUNT_WITH_POLICY\";\n\nexport type GateWorkspaceRuleStep = {\n quorum: number;\n users: string[]; // array of public keys\n};\n\nexport type GateWorkspaceRule = {\n id: number;\n permission: GateWorkspacePermission;\n status: \"ACTIVE\";\n steps: GateWorkspaceRuleStep[];\n\n // Gate will never serialize them, but assigning the key to respect what's in all the other entities\n last_request: null;\n};\n\nexport type GateExchange = {\n id: number;\n entityType: \"EXCHANGE\";\n created_by: GateUser;\n created_on: string;\n balances: {\n available: string;\n locked: string;\n total: string;\n };\n governance_rules: GateGovernanceRulesSet[] | null;\n last_request: GateExchangeRequest;\n name: string;\n platform: string;\n status: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type GatePolicy = {\n id: number;\n entityType: \"POLICY\";\n created_by: GateUser;\n created_on: string;\n last_request: GatePolicyRequest;\n name: string;\n currency: string | null;\n description: string | null;\n governance_rules: GateGovernanceRulesSet[];\n account_ids: GateAccount[\"id\"][];\n status: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type GateTradelinkEntity<T extends \"CUSTODIAN\" | \"ASSET_MANAGER\" | \"EXCHANGE\"> = Omit<\n GateTradelinkThirdParty<T>,\n \"role\"\n>;\n\nexport type GateTradelinkNetwork = {\n id: string;\n asset_managers: GateTradelinkEntity<\"ASSET_MANAGER\">[];\n custodian: GateTradelinkEntity<\"CUSTODIAN\">;\n exchanges: GateTradelinkEntity<\"EXCHANGE\">[];\n};\n\nexport type GateTradelinkOnboardingStatus = {\n status:\n | \"NOT_READY\"\n | \"READY_TO_ONBOARD\"\n | \"CUSTODIAN_ONBOARDED\"\n | \"EXCHANGE_ONBOARDED\"\n | \"HSM_READY\";\n};\n\nexport type GateVaultEntity = {\n id: number;\n entityType: \"VAULT_ENTITY\";\n name: string;\n accounts: GateAccount[];\n status: GateVaultEntityStatus;\n created_on: string;\n last_request?: GateVaultEntityRequest;\n};\n\ntype WhitelistType = \"TRANSACTION\" | \"SMART_CONTRACT\";\n\nexport type GateWhitelist = {\n id: number;\n name: string;\n entityType: \"WHITELIST\";\n description: string;\n addresses: GateAddress[];\n created_on: string;\n created_by: GateUser;\n approvals: Approval[];\n status: \"ACTIVE\" | \"PENDING\" | \"ABORTED\" | \"REVOKED\" | \"TO_MIGRATE\";\n last_request?: GateWhitelistRequest;\n whitelist_type?: WhitelistType;\n is_tradelink?: boolean;\n};\n\ntype GateTransactionNote = {\n title: string;\n content: string;\n};\n\nexport type GateTransactionType =\n | \"SEND\"\n | \"RECEIVE\"\n | \"PREBURN\"\n | \"BURN\"\n | \"MINT\"\n | \"DELEGATE\"\n | \"UNDELEGATE\"\n | \"DELEGATE_VOTE_TO_DREP\"\n | \"STAKING_REGISTER\"\n | \"STAKING_DEREGISTER\"\n | \"STAKING_DELEGATE\"\n | \"STAKING_WITHDRAW\"\n | \"CREATE_SPL_TOKEN_ACCOUNT\";\n\nexport type CardanoVoteDelegationDrep = \"ALWAYS ABSTAIN\" | null;\n\nexport type GateTransaction = {\n id: number;\n account_id: number;\n recipient: string;\n type: GateTransactionType;\n created_on: string;\n created_by: GateUser;\n labels: GateLabel[];\n tx_hash: string;\n status:\n | \"ABORTED\"\n | \"APPROVED\"\n | \"CONFIRMED\"\n | \"DROPPED\"\n | \"FAILED\"\n | \"FAILED_TO_BROADCAST\"\n | \"PENDING_APPROVAL\"\n | \"PENDING_CREATE_IN_HSM\"\n | \"SIGNED\"\n | \"SUBMITTED\";\n amount: string;\n max_fees?: string;\n notes: GateTransactionNote[];\n last_request?: GateTransactionRequest;\n failure_reason?: string | null;\n tx_parameters?: {\n drep?: CardanoVoteDelegationDrep;\n tradelink?: {\n type: \"SETTLEMENT\";\n settlement_id: string;\n pledge_id: string;\n };\n token_address?: string;\n };\n};\n\ntype Approval = {\n created_on: string;\n created_by: GateUser;\n type: \"APPROVE\" | \"ABORT\";\n};\n\nexport type GateAddress = {\n id: number;\n currency: string;\n address: string;\n name: string;\n destination_tags?: number[] | null;\n};\n\nexport type GateGenericRequest = {\n entityType: \"REQUEST\";\n created_by: GateUser | null;\n created_on: string;\n id: number;\n status: string;\n type: string;\n approvals?: RequestApproval[];\n approvals_steps: Array<{\n group: GateGroup;\n quorum: number;\n }>;\n current_step: number;\n target_id: number;\n target_type: string;\n quorum?: number;\n organization?: Organization;\n expired_at: Date;\n edit_data?: any;\n};\n\nexport interface GateAccountRequest extends GateGenericRequest {\n // TODO we probably want to have GateAccountBitcoin/Ethereum..etc.. based on target_type\n account: GateAccount;\n target_type:\n | \"BITCOIN_ACCOUNT\"\n | \"ETHEREUM_ACCOUNT\"\n | \"RIPPLE_ACCOUNT\"\n | \"TEZOS_ACCOUNT\"\n | \"POLKADOT_ACCOUNT\"\n | \"ERC20_ACCOUNT\"\n | \"STELLAR_ACCOUNT\"\n | \"SOLANA_ACCOUNT\"\n | \"CARDANO_ACCOUNT\"\n | \"TRON_ACCOUNT\";\n type:\n | \"CREATE_ACCOUNT\"\n | \"EDIT_ACCOUNT\"\n | \"REVOKE_ACCOUNT\"\n | \"EDIT_TOKEN_RULE\"\n | \"MIGRATE_ACCOUNT\"; // TODO migration code should be remove;\n request_data: Partial<{\n currency: { name: string };\n derivation_mode: string;\n entity_id: number | null;\n governance_rules: GateGovernanceRulesSet[];\n name: string;\n }>;\n}\n\nexport interface GateSPLTokenAccountRequest extends GateGenericRequest {\n account: GateAccount;\n target_type: \"SOLANA_ACCOUNT\";\n type: \"EDIT_TOKEN_RULE\";\n target_id: number;\n edit_data: {\n governance_rules: GateGovernanceRulesSet[];\n };\n request_data: Partial<{\n governance_rules: GateGovernanceRulesSet[];\n }>;\n contract_address: string;\n}\n\nexport interface GateActivateRequest extends GateGenericRequest {\n target_type: GateAccountRequest[\"target_type\"];\n target_id: number;\n target: GateAccount;\n type: \"ACTIVATE\";\n}\n\nexport interface GateRepledgeRequest extends GateGenericRequest {\n repledge: GateRepledge;\n target_type: \"REPLEDGE\";\n type: \"CREATE_REPLEDGE\";\n}\nexport interface GatePledgeIncrementRequest extends GateGenericRequest {\n pledge_increment: GatePledgeIncrement;\n target_type: \"PLEDGE_INCREMENT\";\n type: \"CREATE_PLEDGE_INCREMENT\";\n}\nexport interface GateForcedUnpledgeRequest extends GateGenericRequest {\n forced_unpledge: GateForcedUnpledge;\n target_type: \"FORCED_UNPLEDGE\";\n type: \"CREATE_FORCED_UNPLEDGE\";\n}\n\nexport interface GateUserRequest extends GateGenericRequest {\n url_id: string;\n user: GateUser;\n target_type: \"PERSON\";\n type:\n | \"REVOKE_USER\"\n | \"CREATE_ADMIN\"\n | \"CREATE_OPERATOR\"\n | \"CREATE_API_USER\"\n | \"CREATE_API_USER_ACCESS\"\n | \"MIGRATE_ADMIN\"\n | \"MIGRATE_OPERATOR\"; // TODO migration code should be remove\n}\n\nexport interface GateAPIV2UserAccessRequest extends GateGenericRequest {\n username: string;\n user: GateUser;\n api_key_id: string;\n api_key_secret: string;\n target_type: \"PERSON\";\n type: \"CREATE_API_USER\" | \"CREATE_API_USER_ACCESS\";\n}\n\nexport interface GateSCIConfigRequest extends GateGenericRequest {\n sciconfig: GateSCIConfig;\n target_type: \"SCI_CONFIG\";\n type: \"CREATE_SCICONFIG\" | \"EDIT_SCICONFIG\";\n edit_data?: {\n custom_contract_call_enabled: boolean;\n dapps: string[];\n };\n request_data?: {\n custom_contract_call_enabled: boolean;\n dapps: string[];\n };\n}\n\nexport interface GateMessageRequest extends GateGenericRequest {\n target_type: \"MESSAGE\";\n message: GateMessage;\n type: \"MESSAGE_SIGNING\";\n}\n\nexport interface GateWhitelistRequest extends GateGenericRequest {\n whitelist: GateWhitelist;\n target_type: \"WHITELIST\";\n type: \"CREATE_WHITELIST\" | \"EDIT_WHITELIST\" | \"MIGRATE_WHITELIST\"; // TODO migration code should be remove;\n edit_data?: {\n name?: string;\n addresses: GateAddress[];\n };\n}\n\nexport interface GateExchangeRequest extends GateGenericRequest {\n exchange: GateExchange;\n target_type: \"EXCHANGE\";\n type: \"IMPORT_EXCHANGE\" | \"EDIT_EXCHANGE\" | \"EDIT_EXCHANGE_CREDENTIALS\" | \"REVOKE_EXCHANGE\";\n}\n\nexport interface GateTransactionRequest extends GateGenericRequest {\n // TODO we probably want to have GateTransactionBitcoin/Ethereum..etc.. based on target_type\n transaction: GateTransaction;\n target_type:\n | \"BITCOIN_LIKE_TRANSACTION\"\n | \"ETHEREUM_LIKE_TRANSACTION\"\n | \"RIPPLE_LIKE_TRANSACTION\"\n | \"POLKADOT_LIKE_TRANSACTION\"\n | \"TEZOS_LIKE_TRANSACTION\"\n | \"STELLAR_LIKE_TRANSACTION\"\n | \"CARDANO_LIKE_TRANSACTION\";\n type: \"CREATE_TRANSACTION\";\n}\n\nexport const GateGroupRequestTypeDefs = [\n \"CREATE_GROUP\",\n \"EDIT_GROUP\",\n \"REVOKE_GROUP\",\n \"MIGRATE_GROUP\",\n] as const;\n\nexport interface GateGroupRequest extends GateGenericRequest {\n group: GateGroup;\n target_type: \"GROUP\";\n type: (typeof GateGroupRequestTypeDefs)[number]; // TODO migration code should be remove\n}\n\nexport interface GateDigestsRequest extends GateGenericRequest {\n digests: GateDigestGroup;\n target_type: \"DIGESTS\";\n type: \"SIGN_DIGESTS\";\n}\n\nexport interface GateOrganizationRequest extends GateGenericRequest {\n organization: Organization;\n target_type: \"ORGANIZATION\";\n type: \"UPDATE_QUORUM\";\n}\n\nexport interface GateAPIKeyRequest extends GateGenericRequest {\n api_key: GateAPIKey;\n target_type: \"VAULT_API_KEY\";\n type: \"CREATE_API_KEY\" | \"EDIT_API_KEY\" | \"REVOKE_API_KEY\";\n}\n\nexport interface GateTransferRequest extends GateGenericRequest {\n transfer: GateTransfer;\n target_type: \"TRANSFER\";\n type: \"CREATE_TRANSFER\";\n}\n\nexport interface GateVaultEntityRequest extends GateGenericRequest {\n vaultEntity: GateVaultEntity;\n target_type: \"ENTITY\";\n type: \"CREATE_ENTITY\" | \"EDIT_ENTITY\" | \"REVOKE_ENTITY\";\n edit_data?: {\n name: string;\n accounts: number[];\n };\n}\n\nexport interface GatePolicyRequest extends GateGenericRequest {\n policy: GatePolicy;\n target_type: \"POLICY\";\n type: \"CREATE_POLICY\" | \"EDIT_POLICY\";\n}\n\nexport type Organization = {\n name: string;\n domain_name: string;\n workspace: string;\n number_of_admins: number;\n quorum: number;\n};\n\ntype RequestApproval = {\n created_by: GateUser;\n created_on: string;\n type: string;\n step: number;\n};\n\n// a LAM user is referenced by string\nexport type UserDevice = number | string;\n\nexport type ManifestGroup = {\n name: string;\n users: UserDevice[];\n description?: string;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestAccountRuleMultiAuthStep =\n | { quorum: number; users: UserDevice[] }\n | { quorum: number; group: string };\n\nexport type ManifestAccountRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n steps: ManifestAccountRuleMultiAuthStep[];\n};\n\nexport type ManifestAccountRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\";\n enabled: boolean;\n};\n\nexport type ManifestAccountRuleTezosDelegation = {\n type: \"TEZOS_DELEGATION\";\n};\nexport type ManifestAccountRulePolkadotStaking = {\n type: \"POLKADOT_STAKING\";\n};\nexport type ManifestAccountRuleDeployContract = {\n type: \"DEPLOY_CONTRACT\";\n};\nexport type ManifestAccountRuleSolanaStaking = {\n type: \"SOLANA_STAKING\";\n};\nexport type ManifestAccountRuleCardanoStaking = {\n type: \"CARDANO_STAKING\";\n};\nexport type ManifestAccountRuleRawSigning = {\n type: \"RAW_SIGNING\";\n};\nexport type ManifestAccountRuleSend = {\n type: \"SEND\";\n};\nexport type ManifestAccountRuleStake = {\n type: \"STAKE\";\n};\nexport type ManifestAccountRuleMessageSigning = {\n type: \"MESSAGE_SIGNING\";\n};\n\nexport type ManifestAccountRuleCreateSplTokenAccount = {\n type: \"CREATE_SPL_TOKEN_ACCOUNT\";\n};\n\nexport type ManifestAccountRuleTransferSplToken = {\n type: \"TRANSFER_SPL_TOKEN\";\n contractAddress: string;\n};\n\nexport type ManifestAccountRuleWhitelist = {\n type: \"WHITELIST\";\n whitelists: string[];\n};\n\nexport type ManifestAccountRuleThreshold = {\n type: \"THRESHOLD\";\n min?: number;\n max?: number;\n};\n\nexport type ManifestAccountRule =\n | ManifestAccountRuleMultiAuth\n | ManifestAccountRuleWhitelist\n | ManifestAccountRuleSCI\n | ManifestAccountRuleDeployContract\n | ManifestAccountRuleThreshold\n | ManifestAccountRulePolkadotStaking\n | ManifestAccountRuleSolanaStaking\n | ManifestAccountRuleCardanoStaking\n | ManifestAccountRuleRawSigning\n | ManifestAccountRuleTezosDelegation\n | ManifestAccountRuleSend\n | ManifestAccountRuleMessageSigning\n | ManifestAccountRuleCreateSplTokenAccount\n | ManifestAccountRuleTransferSplToken\n | ManifestAccountRuleStake;\n\nexport type ManifestAccountConfig = {\n nftGallery?: boolean;\n};\n\ntype ManifestTradelinkOrg = {\n name: string;\n};\n\ntype AccountTradelinkExchangeData = {\n name: string;\n requires_pre_approval: boolean;\n auto_repledge_enabled: boolean;\n};\n\nexport type ManifestAccountTradelinkData = {\n currency: string;\n custodian: ManifestTradelinkOrg;\n asset_manager: ManifestTradelinkOrg;\n exchanges: AccountTradelinkExchangeData[];\n};\n\ntype ManifestCryptoAccount = {\n name: string;\n currency: string;\n accountType?: string;\n derivationMode?: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ABORTED\" | \"ACTIVE\";\n index?: number;\n readOnly?: {\n xpub: string;\n publicKey: string;\n chainCode: string;\n address?: string;\n };\n tradelink_data?: ManifestAccountTradelinkData;\n // all the fields that doesn't require a request to be changed\n config?: ManifestAccountConfig;\n};\n\ntype ManifestERC20Account = {\n name: string;\n contractAddress: string;\n parentAccount?: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ABORTED\" | \"ACTIVE\";\n index?: number;\n tradelink_data?: ManifestAccountTradelinkData;\n};\n\nexport type ManifestAccount = ManifestCryptoAccount | ManifestERC20Account;\n\nexport type ManifestVaultEntity = {\n name: string;\n accounts?: string[];\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestWhitelistAddress = {\n currency: string;\n name?: string;\n address: string;\n destination_tags?: number[] | null;\n};\n\nexport type ManifestWhitelist = {\n name: string;\n addresses: ManifestWhitelistAddress[];\n description?: string;\n status?: \"PENDING\" | \"ABORTED\";\n type?: WhitelistType;\n};\n\nexport type ManifestUser = {\n device: number;\n};\n\nexport type ManifestAPIUser = {\n name: string;\n viewAll?: boolean;\n};\n\nexport type ManifestAPIV2User = {\n name: string;\n role: string;\n publicKey?: string;\n viewAll?: boolean;\n};\n\nexport type ManifestExchange = {\n name: string;\n platform: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n\n // note for the future: one day we will be able to put\n // extra fields in the configuration, for now, all exchanges\n // receive `apiKey` and `secret` only\n configuration: {\n apiKey: string;\n apiSecret: string;\n };\n};\n\nexport type ManifestPolicy = {\n name: string;\n currency?: string;\n rules: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestWorkspaceRuleStep = {\n quorum: number;\n users: string[]; // array of api admin usernames\n};\n\nexport type ManifestWorkspaceRule = {\n permission: Exclude<GateWorkspacePermission, \"ROOT\">;\n steps: ManifestWorkspaceRuleStep[];\n};\n\ninterface ManifestCommon {\n salt?: string;\n quorum?: number;\n customUsernames?: Record<string, string>;\n groups?: ManifestGroup[];\n accounts?: ManifestAccount[];\n entities?: ManifestVaultEntity[];\n whitelists?: ManifestWhitelist[];\n exchanges?: ManifestExchange[];\n policies?: ManifestPolicy[];\n tradelink?: ManifestTradelink;\n contractApprovals?: ManifestContractApproval[];\n workspaceRules?: ManifestWorkspaceRule[];\n}\n\nexport type ManifestTradelink = {\n onboarded: boolean;\n exchanges: ManifestTradelinkEntityWithAddresses[];\n assetManagers: ManifestTradelinkEntityWithAddresses[];\n custodians: ManifestTradelinkEntity[];\n};\n\nexport type ManifestTradelinkEntity = {\n id: string;\n name: string;\n logoUrl: string;\n code: string;\n users: {\n operators?: number[];\n apiV2?: string[];\n };\n};\n\nexport type ManifestTradelinkEntityWithAddresses = {\n id: string;\n name: string;\n logoUrl: string;\n code: string;\n users: {\n operators?: number[];\n apiV2: string[];\n };\n addresses: ManifestWhitelistAddress[];\n};\n\nexport type ManifestContractApproval = {\n user: number;\n contractNames: string[];\n};\n\nexport interface Manifest extends ManifestCommon {\n users?: {\n operators?: Array<number | ManifestUser>;\n admins?: Array<number | ManifestUser>;\n api?: Array<string | ManifestAPIUser>;\n apiV2?: Array<ManifestAPIV2User>;\n };\n}\n\nexport interface DeserializedManifest extends ManifestCommon {\n users?: {\n operators?: ManifestUser[];\n admins?: ManifestUser[];\n api?: ManifestAPIUser[];\n apiV2?: ManifestAPIV2User[];\n };\n}\n\nexport const feesLevels = [\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"] as const;\nexport type FeesLevel = (typeof feesLevels)[number];\n\nexport type ManifestTransaction = {\n // account name\n account: string;\n // recipient address\n recipient: string;\n // transaction amount in default unit (e.g BTC)\n amount: string | number;\n utxosPickingStrategy?: UTXOsPickingStrategy;\n contractPayload?: string;\n transactionType?: GateTransactionType;\n feesLevel?: FeesLevel;\n gasPrice?: string;\n gasLimit?: string;\n title?: string;\n comment?: string;\n maxFees?: string;\n\n // EIP1559-specific\n baseFees?: string;\n maxFeesBufferFactor?: string;\n priorityFees?: string;\n};\n\nexport type OnboardingContext = {\n pool: DevicesPool;\n getState: () => Promise<any>;\n getChallenge: () => Promise<any>;\n next: (data?: any) => Promise<void>;\n collectMasterSeedFragment: (challenge: any, deviceIndex: number) => Promise<void>;\n validateSO: (challenge: any, deviceIndex: number) => Promise<void>;\n registerAdmin: (data: any, deviceIndex: number) => Promise<void>;\n registerSO: (data: any, deviceIndex: number) => Promise<void>;\n registerWrappingKey: (challenge: any, deviceIndex: number) => Promise<void>;\n};\n\nexport type OnboardingStep =\n | \"WRAPPING_KEYS_REGISTRATION\"\n | \"ADMINS_REGISTRATION\"\n | \"QUORUM_SETTINGS\"\n | \"SHARED_OWNERS_REGISTRATION\"\n | \"ADMIN_APPROVALS\"\n | \"MASTER_SEED_GENERATION\";\n\nexport interface RecordLogger extends Logger {\n logs: string[];\n reset: () => void;\n expect: (s: string) => void;\n}\n\nexport type RunnableOptions = {\n logger?: Logger;\n};\n\nexport type MockNetworkResponse = [\n string, // verb: GET, POST, ...\n string, // url\n number, // returned status code\n any?, // returned data\n any?, // expected request payload\n any?, // returned headers\n any?, // expected request headers\n];\n\nexport type LegacyERC20Token = {\n blockchain_name: \"foundation\" | \"ropsten\" | \"goerli\";\n contract_address: string;\n decimals: number;\n hsm_account_parameters: string;\n hsm_signature: string;\n name: string;\n ticker: string;\n};\n\nexport type GateCoinCapabilities = {\n signer: {\n raw_signing_supported: boolean;\n send_clear_signing_supported: boolean;\n stake_clear_signing_supported: boolean;\n };\n wallet: {\n balance_supported: boolean;\n broadcast_supported: boolean;\n crafting_supported: boolean;\n tx_history_supported: boolean;\n };\n};\n\nexport type GateTokenCurrency = {\n contract_address: string;\n family: \"ethereum\";\n name: string;\n parent_currency: \"ethereum\" | \"ethereum_ropsten\" | \"ethereum_goerli\" | \"bsc\";\n ticker: string;\n token_type: \"erc20\" | \"stablecoin\" | \"bep20\";\n units: [Unit];\n delisted?: boolean;\n disable_countervalue?: boolean;\n capabilities?: GateCoinCapabilities;\n\n // FIXME: here only for retro-compatibility with gate < 3.6 (that expect front to send hsm parameters)\n __legacy_hsm_account_parameters?: string;\n __legacy_hsm_signature?: string;\n};\n\nexport type GateCurrency = {\n name: string;\n type: \"CRYPTO\";\n family: string;\n confirmations_needed: number;\n units: Unit[];\n capabilities?: GateCoinCapabilities;\n};\n\n// surprisingly the gate expect some fields to change\n// from the erc20 token *it literally send* us\nexport type WeirdGateERC20Token = {\n ticker: string;\n address: string;\n decimals: number;\n hsm_signature: string;\n hsm_account_parameters: string;\n};\n\nexport type WeirdGateTokenCurrency = {\n type: \"erc20\" | \"stablecoin\";\n address: string;\n};\n\nexport type DaemonAddress = {\n address: string;\n derivation_path: string;\n};\n\nexport type VaultEvent =\n | Ev<\"ACCOUNT_UPDATED\", GateAccount>\n | Ev<\"REQUEST_CREATED\", GateRequest>\n | Ev<\"REQUEST_ABORTED\", GateRequest>\n | Ev<\"REQUEST_APPROVAL\", GateRequest>\n | Ev<\"REQUEST_APPROVED\", GateRequest>\n | Ev<\"TRANSACTION_BROADCASTED\", GateTransaction>\n | Ev<\"TRANSACTION_RECEIVED\", GateTransaction>\n | Ev<\"TRANSACTION_FAILED\", GateTransaction>\n | Ev<\"USER_REGISTERED\", GateUser>\n | Ev<\"USER_SUSPENDED\", GateUser>;\n\ntype Ev<T, P> = { type: T; payload: P };\n\nexport type { CryptoCurrency, TokenCurrency };\nexport type UserWithDevice = { deviceIndex: number; user: GateUser };\nexport type UserWithoutDevice = { username: string; user: GateUser };\n\nexport type CurrencyOrToken = CryptoCurrency | TokenCurrency;\n\nexport type Network = <T>(\n method: \"POST\" | \"PUT\" | \"GET\" | \"DELETE\",\n url: string,\n data?: any,\n requestOptions?: any,\n) => Promise<T>;\n\nexport type WipeOptions = {\n gate: string;\n lam?: string;\n lamAPIKey?: string;\n hsmCompartmentID: number;\n hsmEndpoint: string;\n hsmCert: Buffer;\n hsmCertKey: Buffer;\n monotonicCountersSize?: number;\n fileSystemSize?: number;\n};\n\nexport interface BakeManifestOptions extends RunnableOptions {\n noApproval?: boolean;\n runner?: ManifestRunner;\n untilStep?: OnboardingStep;\n twoStepsRequest?: boolean;\n waitForActive?: boolean;\n\n // revault-compat onboarding\n revaultOnboarding?: {\n compartmentId: number;\n hsmScriptsVersion: string;\n revaultApiUrl: string;\n revaultRootAuthToken: string;\n };\n}\n\n// 'MR' stands for 'ManifestRunner'\ntype MRAction<P, R> = (params: P) => Promise<R>;\n\nexport type MRCreateUserParams = {\n role: \"admin\" | \"operator\";\n userID: string;\n name: string;\n device: number;\n};\n\nexport type MRCreateAPIUserParams = {\n user: ManifestAPIUser;\n userID: string;\n name: string;\n};\n\nexport type MRCreateAPIV2UserParams = {\n user: ManifestAPIV2User;\n publicKey: string;\n role: string;\n name: string;\n};\n\nexport type MRBakeGroupParams = {\n group: ManifestGroup;\n data: DataGroup;\n existingRequest: GateGroupRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeAccountParams = {\n account: ManifestAccount;\n data: DataAccount;\n existingRequest: GateAccountRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n waitForActive?: boolean;\n tradelinkAM?: ManifestAPIV2User;\n};\n\nexport type MRBakeVaultEntityParams = {\n vaultEntity: ManifestVaultEntity;\n data: DataVaultEntity;\n existingRequest: GateVaultEntityRequest | null;\n noApproval: boolean;\n};\n\nexport type MRBakeWhitelistParams = {\n whitelist: ManifestWhitelist;\n data: DataWhitelist;\n existingRequest: GateWhitelistRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeExchangeParams = {\n exchange: ManifestExchange;\n data: DataExchange;\n existingRequest: GateExchangeRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakePolicyParams = {\n policy: ManifestPolicy;\n data: DataPolicy;\n existingRequest: GatePolicyRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeTradelinkOnboardingParams = {\n type: \"CREATE_TRADELINK\";\n operators: string[];\n};\n\nexport type MREditQuorumParams = {\n quorum: number;\n};\n\nexport type MREditWorkspaceRuleParams = {\n rule: ManifestWorkspaceRule;\n usersByName: Record<string, GateUser>;\n};\n\nexport type MBRBakeTradelinkEntityWithAddresses = {\n operators: string[];\n addresses: ManifestWhitelistAddress[];\n name: string;\n};\n\nexport type MRBakeTradelinkEntityParams = {\n tradelinkEntity: ManifestTradelinkEntity | ManifestTradelinkEntityWithAddresses;\n type: \"asset_managers\" | \"exchanges\" | \"custodians\";\n};\n\nexport type MRBakeTradelinkEntityOnboardingParams = {\n tradelinkEntity: MBRBakeTradelinkEntityWithAddresses;\n type: \"asset_managers\" | \"exchanges\";\n tradelinkEntityApprover: ManifestAPIV2User; // entity approver, like exchange approver of the exchange\n};\n\nexport type MRBakeTradelinkNetworkParams = {\n custodians: DataTradelinkNetworkEntity<\"CUSTODIAN\">[];\n exchanges: DataTradelinkNetworkEntity<\"EXCHANGE\">[];\n assetManagers: DataTradelinkNetworkEntity<\"ASSET_MANAGER\">[];\n};\n\nexport type DataTradelinkNetworkEntity<T extends \"CUSTODIAN\" | \"EXCHANGE\" | \"ASSET_MANAGER\"> = Pick<\n GateTradelinkThirdParty<T>,\n \"id\" | \"name\"\n>;\n\nexport type ManifestRunner = {\n editQuorum: (params: MREditQuorumParams) => Promise<void>;\n editWorkspaceRule: (params: MREditWorkspaceRuleParams) => Promise<void>;\n\n createUser: MRAction<MRCreateUserParams, GateUserRequest>;\n createAPIUser: (\n params: MRCreateAPIUserParams,\n r: RecipeManifestResult,\n ) => Promise<GateUserRequest>;\n createAPIV2User: MRAction<MRCreateAPIV2UserParams, GateUserRequest>;\n createAPIV2UserAccess: MRAction<MRCreateAPIV2UserParams, GateAPIV2UserAccessRequest>;\n\n createGroup: MRAction<MRBakeGroupParams, GateGroupRequest>;\n editGroup: MRAction<MRBakeGroupParams, GateGroupRequest>;\n\n createAccount: MRAction<MRBakeAccountParams, GateAccountRequest>;\n editAccount: MRAction<MRBakeAccountParams, GateAccountRequest>;\n\n createVaultEntity: MRAction<MRBakeVaultEntityParams, GateVaultEntityRequest>;\n editVaultEntity: MRAction<MRBakeVaultEntityParams, GateVaultEntityRequest>;\n\n createWhitelist: MRAction<MRBakeWhitelistParams, GateWhitelistRequest>;\n editWhitelist: MRAction<MRBakeWhitelistParams, GateWhitelistRequest>;\n\n createExchange: MRAction<MRBakeExchangeParams, GateExchangeRequest>;\n editExchange: MRAction<MRBakeExchangeParams, GateExchangeRequest>;\n\n createPolicy: MRAction<MRBakePolicyParams, GatePolicyRequest>;\n\n createTradelink: MRAction<MRBakeTradelinkOnboardingParams, GateTradelinkRequest>;\n createTradelinkEntity: <T extends \"ASSET_MANAGER\" | \"EXCHANGE\" | \"CUSTODIAN\">(\n params: MRBakeTradelinkEntityParams,\n ) => Promise<GateTradelinkEntity<T>>;\n onboardTradelinkEntity: MRAction<\n MRBakeTradelinkEntityOnboardingParams,\n GateTradelinkExchangeRequest | GateTradelinkAssetManagerRequest\n >;\n createTradelinkNetwork: MRAction<MRBakeTradelinkNetworkParams, GateTradelinkNetwork>;\n};\n\nexport type HsmCertificate = {\n attestation_pub: string;\n certificate: string;\n code_hash: string;\n signature: string;\n};\n\nexport type SecureChannel = {\n request_id: string;\n handshake: string;\n ciphertext: string;\n challenge: string;\n u2f_register_data: string;\n // defined for user registration\n handshake_attestation?: HsmCertificate;\n};\n\n// TODO centralize types with vault-remote\nexport type DeploymentStepID =\n | \"checkConnectivity\"\n | \"createNamespace\"\n | \"installNamespace\"\n | \"setupFeatureFlagsProvider\"\n | \"waitPods\"\n | \"success\";\n\nexport type DeploymentStep = {\n key: DeploymentStepID;\n labelWaiting: string;\n labelCurrent: string;\n labelSuccess: string;\n};\n\nexport type MVInstanceDeploymentFF = { key: string; set: boolean };\n\nexport type MVInstanceDeployment = {\n id: string;\n\n startedOn: Date;\n finishedOn: Date | null;\n\n status: \"BUSY\" | \"SUCCESS\" | \"ERROR\";\n steps: DeploymentStep[];\n currentStep: DeploymentStepID;\n\n instance: MVInstance;\n flags: Array<MVInstanceDeploymentFF>;\n\n error: Error | null;\n spawnFailTimeout?: ReturnType<typeof setTimeout>;\n};\n\nexport type MVPod = {\n name: string;\n podName: string;\n status: \"BUSY\" | \"HEALTHY\" | \"ERROR\" | \"EVICTED\";\n};\n\nexport type MVInstance = {\n name: string;\n status: string;\n host: string;\n pods: MVPod[];\n};\n\nexport type InteractionResponses = {\n network: Network;\n transport: any;\n secure_channel: any;\n pairing_payload: any;\n blob: any;\n confidentiality_key: any;\n attestation: any;\n u2f_key: any;\n onboardingRegisterChallenge: any;\n role: any;\n username: any;\n register_data: any;\n validation_key: any;\n u2f_register: any;\n validate_device: any;\n attested_handshake: any;\n};\n\nexport type Interaction<T> = {\n responseKey: string;\n action: (responses: InteractionResponses) => Promise<T>;\n device?: boolean;\n};\n\nexport type GetU2FPubKeyInteraction = Interaction<{\n pubKey: string;\n signature: Buffer;\n}>;\n\nexport type Interactions = {\n approveFlow: Interaction<any>[];\n approveFlowWithoutHSM: Interaction<any>[];\n doStartKpatternAsResponder: Interaction<any>;\n validateDevice: Interaction<any>;\n validatePayload: Interaction<any>;\n postApproval: Interaction<any>;\n postSimpleApproval: Interaction<any>;\n ensurePartitionPairing: Interaction<any>;\n finalizePairing: Interaction<any>;\n getAttestation: Interaction<{ attestation: Buffer }>;\n getConfidentialityPublicKey: Interaction<any>;\n getSecureChannel: Interaction<any>;\n getU2FChallenge: Interaction<any>;\n getU2FPublicKey: GetU2FPubKeyInteraction;\n getValidationPublicKey: Interaction<any>;\n initPairing: Interaction<any>;\n loginFlow: Interaction<any>[];\n operatorGetChallenge: Interaction<any>;\n postU2FSignature: Interaction<any>;\n postUserRegistration: Interaction<any>;\n readOnlyLoginFlow: (userName: string) => Interaction<any>[];\n registerUserFlow: Interaction<any>[];\n u2fAuthenticate: Interaction<any>;\n validateOperation: Interaction<any>[];\n};\n\n// API Types\nexport type APIBearerTokenResponse = {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n session_state: string;\n token_type: string;\n};\n\nexport type APIGetChallengeResponse = {\n challenge: string;\n id: number;\n};\n\n// FIXME properly define this type at this is the response to /request\n// and it handle a lot of type, request target, request id\nexport type APIRequestResponse = {\n id: number;\n status: \"PENDING_APPROVAL\" | \"APPROVED\" | \"SUBMITTED\" | \"ABORTED\";\n};\n\nexport type APICreateTransactionRequest = {\n data: APIBitcoinLikeSend | APIEthereumLikeSend;\n note?: {\n content: string;\n title: string;\n };\n type: \"CREATE_TRANSACTION\";\n};\n\nexport type APIGenericSend = {\n account_id: number;\n fees_strategy: GenericFeesStrategy;\n transaction_data: {\n account_name: string;\n amount: string;\n max_fees: string;\n recipient: string;\n };\n};\n\nexport type APIBitcoinLikeSend = APIGenericSend & {\n transaction_data: {\n currency: \"bitcoin\" | \"bitcoin_testnet\";\n };\n transaction_type: \"BITCOIN_LIKE_SEND\";\n};\n\nexport type APIEthereumLikeSend = APIGenericSend & {\n transaction_data: {\n currency: \"ethereum\" | \"ethereum_sepolia\" | \"polygon\" | \"ethereum_holesky\";\n contract_address?: string;\n };\n transaction_type: \"ETHEREUM_LIKE_SEND\";\n};\n\ntype GenericFeesStrategy = {\n type: \"SPEED\";\n data: {\n speed: \"FAST\" | \"NORMAL\" | \"SLOW\";\n };\n};\n\n// FIXME properly define this type\nexport type APIEstimateFeesResponse = {\n max_fees: string;\n};\n\nexport type PsdModel = \"BLUE\" | \"STAX\";\n"]}
@@ -338,7 +338,7 @@ async function recipeManifest(pool, options = {}) {
338
338
  policies: policies.map((p) => {
339
339
  return {
340
340
  name: p.name,
341
- currency: p.currency,
341
+ ...p.currency ? { currency: p.currency } : {},
342
342
  rules: extractRules(p.governance_rules, p.currency, operatorsDevicesByID),
343
343
  status: p.status
344
344
  };
@@ -402,12 +402,13 @@ function pickNonEmpty(obj) {
402
402
  return out;
403
403
  }
404
404
  function extractRules(gateGovRules, _currency, operatorsDevicesByID) {
405
- const currency = _chunk6NGBW7BGjs.getCryptoCurrencyById.call(void 0, _currency);
406
- const unit = currency.units[0];
405
+ const currency = _currency ? _chunk6NGBW7BGjs.getCryptoCurrencyById.call(void 0, _currency) : null;
406
+ const unit = currency ? currency.units[0] : null;
407
407
  const governance_rules = gateGovRules || [];
408
408
  let rulesSets = governance_rules.map((r) => {
409
409
  const rules = r.rules.map((rule) => {
410
410
  if (rule.type === "THRESHOLD") {
411
+ _invariant2.default.call(void 0, unit, "Unit must be defined for THRESHOLD rule");
411
412
  const thresholdRule = {
412
413
  type: "THRESHOLD",
413
414
  ...rule.data[0].min ? { min: _chunk6NGBW7BGjs.deserializeUnitValue.call(void 0, unit, rule.data[0].min) } : {},
@@ -500,4 +501,4 @@ function countAPIUsersUntil(index, users) {
500
501
 
501
502
 
502
503
  exports.getDeviceIndex = getDeviceIndex; exports.recipeManifest = recipeManifest;
503
- //# sourceMappingURL=chunk-YAB42L5H.js.map
504
+ //# sourceMappingURL=chunk-UE4JXAYM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-UE4JXAYM.js","../src/recipeManifest.ts"],"names":[],"mappings":"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","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-UE4JXAYM.js","sourcesContent":[null,"import invariant from \"invariant\";\nimport keyBy from \"lodash/keyBy\";\nimport sortBy from \"lodash/sortBy\";\n\nimport { getCryptoCurrencyById } from \"./currencies\";\nimport {\n GateGovernanceRulesSet,\n GateTradelink,\n GateTradelinkAssetManager,\n GateTradelinkEntity,\n GateTradelinkExchange,\n GateTradelinkNetwork,\n GateTradelinkOnboardingStatus,\n GateWorkspacePermission,\n GateWorkspaceRule,\n ManifestAccountRuleCreateSplTokenAccount,\n ManifestAccountRuleTransferSplToken,\n ManifestWorkspaceRule,\n} from \"./types\";\nimport {\n Connection,\n DevicesPool,\n GateAccount,\n GateExchange,\n GateGroup,\n GatePolicy,\n GateUser,\n GateUserRequest,\n GateVaultEntity,\n GateWhitelist,\n Manifest,\n ManifestAccountConfig,\n ManifestAccountRule,\n ManifestAccountRuleCardanoStaking,\n ManifestAccountRuleDeployContract,\n ManifestAccountRuleMessageSigning,\n ManifestAccountRuleMultiAuth,\n ManifestAccountRulePolkadotStaking,\n ManifestAccountRuleRawSigning,\n ManifestAccountRuleSCI,\n ManifestAccountRuleSolanaStaking,\n ManifestAccountRuleStake,\n ManifestAccountRuleTezosDelegation,\n ManifestAccountRuleThreshold,\n ManifestAccountRuleWhitelist,\n ManifestExchange,\n ManifestPolicy,\n ManifestWhitelistAddress,\n Organization,\n UserWithDevice,\n UserWithoutDevice,\n} from \"./types\";\nimport { getDefaultUsername } from \"./utils\";\nimport { deserializeUnitValue, unwrapConnection } from \"./utils\";\n\nconst ADMIN_START_DEVICE_INDEX = 4;\nconst DEFAULT_ADMINS_COUNT = 3;\nconst NB_SHARED_OWNERS = 3;\n\nexport const getDeviceIndex = (index: number): number => {\n const n = ADMIN_START_DEVICE_INDEX + index;\n if (n < ADMIN_START_DEVICE_INDEX + NB_SHARED_OWNERS) {\n return n;\n }\n return n + NB_SHARED_OWNERS;\n};\n\nexport type GateGroupsByName = Record<string, GateGroup>;\nexport type GateWhitelistsByName = Record<string, GateWhitelist>;\nexport type GateAccountsByName = Record<string, GateAccount>;\nexport type GateVaultEntitiesByName = Record<string, GateVaultEntity>;\nexport type GateExchangesByName = Record<string, GateExchange>;\nexport type GatePoliciesByName = Record<string, GatePolicy>;\nexport type GateTradelinkCustodianByName = Record<string, GateTradelinkEntity<\"CUSTODIAN\">>;\nexport type GateTradelinkHSMCustodianByName = Record<string, GateTradelink>;\nexport type GateTradelinkExchangeByName = Record<string, GateTradelinkEntity<\"EXCHANGE\">>;\nexport type GateTradelinkHSMExchangeByName = Record<string, GateTradelinkExchange>;\nexport type GateTradelinkHSMAssetManagerByName = Record<string, GateTradelinkAssetManager>;\nexport type GateTradelinkAssetManagerByName = Record<string, GateTradelinkEntity<\"ASSET_MANAGER\">>;\n\nexport type RecipeRawData = {\n pendingUserRequests: GateUserRequest[];\n groupsByName: GateGroupsByName;\n whitelistsByName: GateWhitelistsByName;\n accountsByName: GateAccountsByName;\n vaultEntitiesByName: GateVaultEntitiesByName;\n exchangesByName: GateExchangesByName;\n policiesByName: GatePoliciesByName;\n usersWithDevice: UserWithDevice[];\n usersWithoutDevice: UserWithoutDevice[];\n tradelinkCustodiansByName: GateTradelinkCustodianByName;\n tradelinkHSMCustodiansByName: GateTradelinkHSMCustodianByName;\n tradelinkExchangesByName: GateTradelinkExchangeByName;\n tradelinkHSMExchangesByName: GateTradelinkHSMExchangeByName;\n tradelinkHSMAssetManagersByName: GateTradelinkHSMAssetManagerByName;\n tradelinkAssetManagersByName: GateTradelinkAssetManagerByName;\n tradelinkNetwork: GateTradelinkNetwork;\n tradelinkOnboardingStatus: GateTradelinkOnboardingStatus;\n};\n\nexport type RecipeManifestResult = {\n manifest: Manifest;\n rawData: RecipeRawData;\n};\n\nexport type RecipeManifestOptions = {\n saveAccountsIndexes?: boolean;\n saveAccountsTypes?: boolean;\n};\n\nexport default async function recipeManifest(\n pool: DevicesPool,\n options: RecipeManifestOptions = {},\n): Promise<RecipeManifestResult> {\n const adminDevices = await pool.getOnboardingAdminDevices();\n const admin = await pool.login(adminDevices[0]![1]);\n const [\n organization,\n pendingUserRequestsConnection,\n usersConnection,\n groupsConnection,\n accountsConnection,\n vaultEntitiesConnection,\n whitelistsConnection,\n exchangesConnection,\n policiesConnection,\n tradelinkCustodianConnection,\n tradelinkHSMCustodianConnection,\n tradelinkExchangeConnection,\n tradelinkHSMExchangeConnection,\n tradelinkHSMAssetManagerConnection,\n tradelinkAssetManagerConnection,\n tradelinkNetwork,\n tradelinkOnboardingStatus,\n allWorkspaceRulesConnection,\n ] = await Promise.all([\n admin.network<Organization>(\"GET\", \"/organization\"),\n admin\n .network<Connection<GateUserRequest>>(\n \"GET\",\n `/requests?type=CREATE_ADMIN&type=CREATE_OPERATOR&type=CREATE_API_USER&status=PENDING_REGISTRATION&status=PENDING_APPROVAL`,\n )\n // for some reason this particular one can fail when targeting prod (not sure why)\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateUser>>(\n \"GET\",\n \"/people?status=ACTIVE&status=ACCESS_SUSPENDED&role=ADMIN&role=OPERATOR&pageSize=-1\",\n ),\n admin.network<Connection<GateGroup>>(\"GET\", \"/groups?pageSize=-1\"),\n admin.network<Connection<GateAccount>>(\n \"GET\",\n \"/accounts?status=ACTIVE&status=APPROVED&status=PENDING&status=VIEW_ONLY&pageSize=-1\",\n ),\n admin.network<Connection<GateVaultEntity>>(\"GET\", \"/entities?pageSize=-1\"),\n admin.network<Connection<GateWhitelist>>(\"GET\", \"/whitelists?pageSize=-1\"),\n admin\n .network<Connection<GateExchange>>(\"GET\", \"/exchanges?pageSize=-1\")\n // handle case where /exchanges is not supported by Gate\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GatePolicy>>(\"GET\", \"/policies?pageSize=-1\")\n // handle case where /policies is not supported by Gate\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkEntity<\"CUSTODIAN\">>>(\"GET\", \"/tradelink/custodians\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateTradelink>>(\"GET\", \"/tradelink/hsm-custodians\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n\n admin.network<Connection<GateTradelinkEntity<\"EXCHANGE\">>>(\"GET\", \"/tradelink/exchanges\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateTradelinkExchange>>(\"GET\", \"/tradelink/hsm-exchanges\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkAssetManager>>(\"GET\", \"/tradelink/hsm-asset-managers\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkEntity<\"ASSET_MANAGER\">>>(\"GET\", \"/tradelink/asset_managers\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<GateTradelinkNetwork>(\"GET\", \"/tradelink/network\").catch(\n /* istanbul ignore next */ () => ({\n id: \"\",\n asset_managers: [],\n custodian: {\n approver_group_id: 0,\n code: \"\",\n id: \"\",\n logo_url: \"\",\n name: \"\",\n whitelist_id: 0,\n },\n exchanges: [],\n }),\n ),\n admin\n .network<GateTradelinkOnboardingStatus>(\"GET\", \"/tradelink/onboarding\")\n .catch(\n /* istanbul ignore next */ (): GateTradelinkOnboardingStatus => ({ status: \"NOT_READY\" }),\n ),\n admin.network<Connection<GateWorkspaceRule>>(\"GET\", \"/workspace-rules\").catch(\n /* istanbul ignore next */ (): Connection<GateWorkspaceRule> => ({\n edges: [],\n pageInfo: { count: 0, hasNextPage: false },\n }),\n ),\n ]);\n\n const pendingUserRequests: GateUserRequest[] = unwrapConnection(pendingUserRequestsConnection);\n const users: GateUser[] = sortBy(unwrapConnection(usersConnection), \"id\");\n const groups: GateGroup[] = unwrapConnection(groupsConnection);\n const whitelists: GateWhitelist[] = unwrapConnection(whitelistsConnection);\n const accounts: GateAccount[] = sortBy(unwrapConnection(accountsConnection), \"index\");\n const vaultEntities: GateVaultEntity[] = unwrapConnection(vaultEntitiesConnection);\n const exchanges: GateExchange[] = unwrapConnection(exchangesConnection);\n const policies: GatePolicy[] = unwrapConnection(policiesConnection);\n const tradelinkCustodians: GateTradelinkEntity<\"CUSTODIAN\">[] = unwrapConnection(\n tradelinkCustodianConnection,\n );\n const tradelinkHSMCustodians: GateTradelink[] = unwrapConnection(tradelinkHSMCustodianConnection);\n const tradelinkExchanges: GateTradelinkEntity<\"EXCHANGE\">[] = unwrapConnection(\n tradelinkExchangeConnection,\n );\n const tradelinkHSMExchanges: GateTradelinkExchange[] = unwrapConnection(\n tradelinkHSMExchangeConnection,\n );\n const tradelinkHSMAssetManagers: GateTradelinkAssetManager[] = unwrapConnection(\n tradelinkHSMAssetManagerConnection,\n );\n const tradelinkAssetManagers: GateTradelinkEntity<\"ASSET_MANAGER\">[] = unwrapConnection(\n tradelinkAssetManagerConnection,\n );\n const allWorkspaceRules = unwrapConnection(allWorkspaceRulesConnection);\n const rootWorkspaceRule = allWorkspaceRules.find((r) => r.permission === \"ROOT\") ?? null;\n const apiAdminWorkspaceRules = allWorkspaceRules.filter((r) => r.permission !== \"ROOT\");\n\n const groupsByName = keyBy(groups, (group) => group.name);\n const whitelistsByName = keyBy(whitelists, (w) => w.name);\n const accountsByName = keyBy(accounts, (a) => a.name);\n const vaultEntitiesByName = keyBy(vaultEntities, (e) => e.name);\n const exchangesByName = keyBy(exchanges, (e) => e.name);\n const policiesByName = keyBy(policies, (e) => e.name);\n const tradelinkCustodiansByName = keyBy(tradelinkCustodians, (e) => e.name);\n const tradelinkHSMCustodiansByName = keyBy(\n tradelinkHSMCustodians,\n (e) => e.network.custodian.name,\n );\n const tradelinkExchangesByName = keyBy(tradelinkExchanges, (e) => e.name);\n const tradelinkHSMExchangesByName = keyBy(tradelinkHSMExchanges, (e) => e.hsm_data.name);\n const tradelinkHSMAssetManagersByName = keyBy(tradelinkHSMAssetManagers, (e) => e.hsm_data.name);\n const tradelinkAssetManagersByName = keyBy(tradelinkAssetManagers, (e) => e.name);\n\n // gate is sending all active users by order of creation\n // we rely on index in the reduce() to get the device index assuming we take them in order\n //\n // FIXME there is something weird with the typing of this reduce :(\n // @ts-ignore\n const {\n admins: _admins,\n operators,\n apiUsers,\n apiV2Users,\n }: {\n admins: Array<{ deviceIndex: number; user: GateUser }>;\n operators: Array<{ deviceIndex: number; user: GateUser }>;\n apiUsers: Array<{ deviceIndex: number; user: GateUser }>;\n apiV2Users: Array<{ username: string; user: GateUser }>;\n } = users.reduce(\n (acc, curr, index) =>\n // @ts-ignore\n curr.device_type === \"API\"\n ? {\n ...acc,\n apiV2Users: [...acc.apiV2Users, { deviceIndex: curr.username, user: curr }],\n }\n : curr.role === \"ADMIN\"\n ? {\n ...acc,\n admins: [\n ...acc.admins,\n {\n deviceIndex: getDeviceIndex(index - countAPIUsersUntil(index, users)),\n user: curr,\n },\n ],\n }\n : curr.device_type === \"SOFT_PSD\"\n ? {\n ...acc,\n apiUsers: [...acc.apiUsers, { deviceIndex: curr.username, user: curr }],\n }\n : {\n ...acc,\n operators: [\n ...acc.operators,\n {\n deviceIndex: getDeviceIndex(index - countAPIUsersUntil(index, users)),\n user: curr,\n },\n ],\n },\n { admins: [], operators: [], apiUsers: [], apiV2Users: [] },\n );\n\n const operatorsDevicesByID: Record<string, number> = operators.reduce((acc, curr) => {\n return { ...acc, [curr.user.id]: curr.deviceIndex };\n }, {});\n\n const customUsernames = [..._admins, ...operators].reduce((acc, curr) => {\n // don't assign custom username if user has default name\n if (\n getDefaultUsername(curr.user.role === \"ADMIN\" ? \"admin\" : \"operator\", curr.deviceIndex) ===\n curr.user.username\n ) {\n return acc;\n }\n return { ...acc, [curr.deviceIndex]: curr.user.username };\n }, {});\n\n const admins = _admins\n // remove admins 4, 5, 6, they are implicitly created during onboarding\n // we still want to fetch them first to eventually collect custom usernames\n .filter((_, i) => i > DEFAULT_ADMINS_COUNT - 1);\n\n const usersManifest = {\n operators: operators.map((o) => o.deviceIndex),\n admins: admins.map((a) => a.deviceIndex),\n api: apiUsers.map((a) =>\n a.user.view_all_override\n ? {\n name: a.user.username,\n viewAll: true,\n }\n : a.user.username,\n ),\n apiV2: apiV2Users.map((a) => ({\n role: a.user.role,\n name: a.user.username,\n ...(a.user.pub_key ? { publicKey: a.user.pub_key } : {}),\n ...(a.user.view_all_override ? { viewAll: true } : {}),\n })),\n };\n\n // we assume that if ROOT workspace rule exist, we take the workspace quorum from there,\n // else, we take it from the legacy \"organization\" object\n const quorum = rootWorkspaceRule ? rootWorkspaceRule.steps[0]!.quorum : organization.quorum;\n\n const manifestWorkspaceRules: ManifestWorkspaceRule[] = apiAdminWorkspaceRules\n .map((rule) => ({\n permission: rule.permission as Exclude<GateWorkspacePermission, \"ROOT\">,\n steps: rule.steps.map((gateStep) => ({\n quorum: gateStep.quorum,\n users: gateStep.users.map((pubKey) => {\n const user = users.find((u) => u.pub_key === pubKey);\n invariant(\n user,\n `Can't find user with pub key ${pubKey} referenced in workspace rule ${rule.permission}`,\n );\n return user.username;\n }),\n })),\n }))\n .filter((rule) => {\n // only output the rules that have users defined\n return rule.steps.length > 0;\n });\n\n const fullManifest: Manifest = {\n quorum: quorum === 2 ? undefined : quorum,\n customUsernames,\n users: usersManifest,\n workspaceRules: manifestWorkspaceRules,\n groups: groups\n .filter((g) => g.status === \"ACTIVE\")\n .map((g) => ({\n name: g.name,\n description: g.description,\n users: g.members.map((m) => (m.is_api ? m.username : operatorsDevicesByID[m.id]!)),\n })),\n whitelists: whitelists\n .filter((w) => w.status === \"ACTIVE\")\n .map((w) => ({\n name: w.name,\n description: w.description,\n type: w.whitelist_type,\n addresses: w.addresses.map(\n (a): ManifestWhitelistAddress => ({\n name: a.name,\n address: a.address,\n currency: a.currency,\n destination_tags: a.destination_tags,\n }),\n ),\n })),\n accounts: accounts\n // we want to get rid of VIEW_ONLY account see #76\n .filter((a) => a.status === \"ACTIVE\")\n .map((a) => ({\n name: a.name,\n currency: a.currency,\n ...(options.saveAccountsTypes ? { accountType: a.account_type } : {}),\n derivationMode: a.derivation_mode === \"STANDARD\" ? undefined : a.derivation_mode,\n contractAddress: a.contract_address || undefined,\n ...(options.saveAccountsIndexes ? { index: a.index } : {}),\n ...(a.parent\n ? {\n parentAccount: (() => {\n const parentAccount = accounts.find((acc) => acc.id === a.parent);\n /* istanbul ignore if */\n if (!parentAccount) {\n throw new Error(`Can't find parent account with id ${a.parent}`);\n }\n if (parentAccount.status !== \"ACTIVE\") {\n return undefined;\n }\n return parentAccount.name;\n })(),\n }\n : {}),\n rules: extractRules(a.governance_rules, a.currency, operatorsDevicesByID),\n ...(() => {\n const config: ManifestAccountConfig = {};\n\n if (a.nfts_gallery_enabled) {\n config.nftGallery = true;\n }\n\n const hasConfig = Object.keys(config).length > 0;\n return hasConfig ? { config } : {};\n })(),\n })),\n entities: vaultEntities\n .filter((e) => e.status === \"ACTIVE\")\n .map((e) => ({\n name: e.name,\n accounts: e.accounts.map((a) => a.name),\n })),\n exchanges: exchanges\n .filter((e) => e.status === \"ACTIVE\")\n .map(\n (e): ManifestExchange => ({\n name: e.name,\n platform: e.platform,\n configuration: {\n apiKey: \"<not-retrievable>\",\n apiSecret: \"<not-retrievable>\",\n },\n }),\n ),\n policies: policies.map((p): ManifestPolicy => {\n return {\n name: p.name,\n ...(p.currency ? { currency: p.currency } : {}),\n rules: extractRules(p.governance_rules, p.currency, operatorsDevicesByID),\n status: p.status,\n };\n }),\n };\n\n // clean out un-necessary keys\n const manifest = pickNonEmpty(fullManifest);\n\n return {\n manifest,\n rawData: {\n pendingUserRequests,\n groupsByName,\n whitelistsByName,\n accountsByName,\n vaultEntitiesByName,\n usersWithDevice: [..._admins, ...operators, ...apiUsers],\n usersWithoutDevice: [...apiV2Users],\n exchangesByName,\n policiesByName,\n tradelinkCustodiansByName,\n tradelinkHSMCustodiansByName,\n tradelinkExchangesByName,\n tradelinkHSMExchangesByName,\n tradelinkHSMAssetManagersByName,\n tradelinkAssetManagersByName,\n tradelinkNetwork,\n tradelinkOnboardingStatus,\n },\n };\n}\n\n// recursively create a minimal object (removing empty arrays etc.)\n// yeah.. lot of @ts-ignore in the function!\nfunction pickNonEmpty<T extends Record<string, any>>(obj: T) {\n const out = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n /* istanbul ignore if */\n if (!key) throw new Error(`Invalid key at index ${i}`);\n const val = obj[key];\n // @ts-ignore\n const getSanitized = (val: any) => {\n /* istanbul ignore if */\n if (val === null) {\n return;\n } else if (Array.isArray(val)) {\n // @ts-ignore\n const withoutEmpty = val.map(getSanitized).filter((v) => v !== undefined);\n if (withoutEmpty.length > 0) {\n return withoutEmpty;\n }\n } else if (typeof val === \"object\") {\n // @ts-ignore\n const subObj: Record<string, unknown> = val;\n const nonEmptyVal = pickNonEmpty(subObj);\n const nbKeys = Object.keys(nonEmptyVal).length;\n if (nbKeys > 0) {\n return nonEmptyVal;\n }\n } else if (val !== undefined) {\n return val;\n }\n };\n const sanitized = getSanitized(val);\n if (sanitized !== undefined) {\n // @ts-ignore\n out[key] = sanitized;\n }\n }\n return out;\n}\n\nfunction extractRules(\n gateGovRules: GateGovernanceRulesSet[] | null,\n _currency: string | null,\n operatorsDevicesByID: Record<string, number>,\n): ManifestAccountRule[][] {\n const currency = _currency ? getCryptoCurrencyById(_currency) : null;\n const unit = currency ? currency.units[0]! : null;\n const governance_rules = gateGovRules || [];\n let rulesSets = governance_rules.map((r) => {\n const rules = r.rules.map((rule) => {\n if (rule.type === \"THRESHOLD\") {\n invariant(unit, \"Unit must be defined for THRESHOLD rule\");\n const thresholdRule: ManifestAccountRuleThreshold = {\n type: \"THRESHOLD\",\n ...(rule.data[0].min ? { min: deserializeUnitValue(unit, rule.data[0].min) } : {}),\n ...(rule.data[0].max ? { max: deserializeUnitValue(unit, rule.data[0].max) } : {}),\n };\n return thresholdRule;\n }\n if (rule.type === \"WHITELIST\") {\n const whitelistRule: ManifestAccountRuleWhitelist = {\n type: \"WHITELIST\",\n whitelists: rule.data.map((d) => d.name),\n };\n return whitelistRule;\n }\n if (rule.type === \"MULTI_AUTHORIZATIONS\") {\n const multiAuthRule: ManifestAccountRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\",\n steps: rule.data.map((s) => ({\n quorum: s.quorum,\n ...(s.group.is_internal\n ? {\n users: s.group.members.map((m) => {\n const u = m.is_api ? m.username : operatorsDevicesByID[m.id];\n /* istanbul ignore if */\n if (!u) throw new Error(`Invalid user ${m}`);\n return u;\n }),\n }\n : { group: s.group.name }),\n })),\n };\n return multiAuthRule;\n }\n if (rule.type === \"SMART_CONTRACT_INTERACTION\") {\n const sciRule: ManifestAccountRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\",\n enabled: rule.data[0].enabled,\n };\n return sciRule;\n }\n if (rule.type === \"TRANSACTION_FILTER\") {\n switch (rule.data.preset) {\n case \"TEZOS_DELEGATION\":\n return { type: \"TEZOS_DELEGATION\" } as ManifestAccountRuleTezosDelegation;\n case \"POLKADOT_STAKING\":\n return { type: \"POLKADOT_STAKING\" } as ManifestAccountRulePolkadotStaking;\n case \"SOLANA_STAKING\":\n return { type: \"SOLANA_STAKING\" } as ManifestAccountRuleSolanaStaking;\n case \"CARDANO_STAKING\":\n return { type: \"CARDANO_STAKING\" } as ManifestAccountRuleCardanoStaking;\n case \"RAW_SIGNING\":\n return { type: \"RAW_SIGNING\" } as ManifestAccountRuleRawSigning;\n case \"CREATE_SPL_TOKEN_ACCOUNT\":\n return { type: \"CREATE_SPL_TOKEN_ACCOUNT\" } as ManifestAccountRuleCreateSplTokenAccount;\n case \"TRANSFER_SPL_TOKEN\":\n return {\n type: \"TRANSFER_SPL_TOKEN\",\n contractAddress: rule.data.contract_address,\n } as ManifestAccountRuleTransferSplToken;\n case \"SEND\":\n // VG-18271 don't recipe \"SEND\" rule as it's the default\n return null;\n case \"STAKE\":\n return { type: \"STAKE\" } as ManifestAccountRuleStake;\n case \"MESSAGE_SIGNING\":\n return { type: \"MESSAGE_SIGNING\" } as ManifestAccountRuleMessageSigning;\n case \"DEPLOY_CONTRACT\":\n return { type: \"DEPLOY_CONTRACT\" } as ManifestAccountRuleDeployContract;\n }\n }\n // @ts-ignore\n throw new Error(`Unknown rule type ${rule.type}`);\n });\n return rules.filter(Boolean) as ManifestAccountRule[];\n });\n\n // see VG-22141\n rulesSets = enforceSCIRuleIfNecessary(rulesSets);\n\n return rulesSets;\n}\n\n// Enforce that if a RulesSet have a SCI-enabled rule, all the other RulesSet should have\n// a SCI-disabled rule\n//\n// see VG-22141\n//\nfunction enforceSCIRuleIfNecessary(rulesSets: ManifestAccountRule[][]): ManifestAccountRule[][] {\n const hasSCIRulesSet = rulesSets.find((rulesSet) =>\n rulesSet.find((rule) => rule.type === \"SMART_CONTRACT_INTERACTION\" && rule.enabled),\n );\n if (!hasSCIRulesSet) return rulesSets;\n return rulesSets.map((rulesSet) => {\n const sciRule = rulesSet.find((r) => r.type === \"SMART_CONTRACT_INTERACTION\");\n if (sciRule) return rulesSet;\n return [...rulesSet, { type: \"SMART_CONTRACT_INTERACTION\", enabled: false }];\n });\n}\n\nfunction countAPIUsersUntil(index: number, users: GateUser[]) {\n return users.slice(0, index).filter((u) => u.is_api).length;\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { R as RunnableOptions } from './index-C99kQ88p.js';
1
+ import { R as RunnableOptions } from './index-CfKTZ-yG.js';
2
2
  import '@ledgerhq/hw-transport-mocker';
3
3
  import '@ledgerhq/types-cryptoassets';
4
4
  import '@ledgerhq/vault-utils';
@@ -1115,7 +1115,7 @@ type GatePolicy = {
1115
1115
  created_on: string;
1116
1116
  last_request: GatePolicyRequest;
1117
1117
  name: string;
1118
- currency: string;
1118
+ currency: string | null;
1119
1119
  description: string | null;
1120
1120
  governance_rules: GateGovernanceRulesSet[];
1121
1121
  account_ids: GateAccount["id"][];
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { N as Network, A as APIBearerTokenResponse, M as Manifest, D as DevicesPool, B as BakeManifestOptions, R as RunnableOptions, P as PoolOptions, a as ManifestAccount, G as GateAccount, b as ManifestAPIV2User, c as APIRequestResponse, d as DeployOptions, e as DestroyOptions, f as PsdModel, g as APIDevice, h as Device, I as Interactions, U as UserContext, i as GateTokenCurrency, j as MVInstance, k as ManifestTransaction, l as ManifestGroup, m as GateWhitelist, n as UTXOsPickingStrategy, o as GateTransaction, p as UpgradeOptions, W as WipeOptions, q as Interaction, T as TransportType } from './index-C99kQ88p.js';
2
- export { cD as APIBitcoinLikeSend, cB as APICreateTransactionRequest, cF as APIEstimateFeesResponse, cE as APIEthereumLikeSend, cC as APIGenericSend, cA as APIGetChallengeResponse, af as AccountStatus, ae as AccountType, a9 as AdminDevice, cG as CardanoBalances, cH as CardanoStakeInfo, a_ as CardanoVoteDelegationDrep, C as CliOptions, O as Connection, K as ConnectionEdge, c8 as CurrencyOrToken, c4 as DaemonAddress, cp as DataTradelinkNetworkEntity, cu as DeploymentStep, ct as DeploymentStepID, bU as DeserializedManifest, z as DevicesPoolOptions, E as EntityType, bW as FeesLevel, a5 as GateAPIKey, bi as GateAPIKeyRequest, b8 as GateAPIV2UserAccessRequest, aF as GateAccountBitcoin, aM as GateAccountCardano, aw as GateAccountCommon, aH as GateAccountERC20, az as GateAccountEthereum, ax as GateAccountExchangeOptions, aO as GateAccountPolkadot, b1 as GateAccountRequest, aI as GateAccountRipple, aL as GateAccountSolana, aJ as GateAccountStellar, aG as GateAccountTRC20, aK as GateAccountTezos, ay as GateAccountTradelinkData, aN as GateAccountTron, b3 as GateActivateRequest, a$ as GateAddress, c0 as GateCoinCapabilities, c1 as GateCurrency, a3 as GateDeviceType, ab as GateDigestGroup, bg as GateDigestsRequest, Q as GateEditWorkspaceRuleRequest, X as GateEntity, aT as GateExchange, bc as GateExchangeRequest, ac as GateFees, ad as GateFeesEIP1559, _ as GateForcedUnpledge, b6 as GateForcedUnpledgeRequest, b0 as GateGenericRequest, an as GateGovernanceRule, ao as GateGovernanceRulesSet, aa as GateGroup, bf as GateGroupRequest, be as GateGroupRequestTypeDefs, av as GateLabel, a8 as GateMessage, ba as GateMessageRequest, bh as GateOrganizationRequest, Y as GatePledgeIncrement, b5 as GatePledgeIncrementRequest, aU as GatePolicy, bl as GatePolicyRequest, Z as GateRepledge, b4 as GateRepledgeRequest, S as GateRequest, V as GateRequestType, ai as GateRuleMultiAuth, ah as GateRuleMultiAuthStep, al as GateRuleSCI, aj as GateRuleThreshold, am as GateRuleTransactionFilter, ak as GateRuleWhitelist, a7 as GateSCIConfig, b9 as GateSCIConfigRequest, b2 as GateSPLTokenAccountRequest, a0 as GateTradelink, a2 as GateTradelinkAssetManager, aD as GateTradelinkAssetManagerRequest, aV as GateTradelinkEntity, a1 as GateTradelinkExchange, aC as GateTradelinkExchangeRequest, aW as GateTradelinkNetwork, aX as GateTradelinkOnboardingStatus, aB as GateTradelinkRequest, aA as GateTradelinkThirdParty, bd as GateTransactionRequest, aZ as GateTransactionType, a6 as GateTransfer, bj as GateTransferRequest, a4 as GateUser, b7 as GateUserRequest, aY as GateVaultEntity, bk as GateVaultEntityRequest, aP as GateVaultEntityStatus, bb as GateWhitelistRequest, aQ as GateWorkspacePermission, aS as GateWorkspaceRule, aR as GateWorkspaceRuleStep, cz as GetU2FPubKeyInteraction, H as HelmValue, J as HelmValues, cr as HsmCertificate, cy as InteractionResponses, L as LamOptions, b$ as LegacyERC20Token, cl as MBRBakeTradelinkEntityWithAddresses, cd as MRBakeAccountParams, cg as MRBakeExchangeParams, cc as MRBakeGroupParams, ch as MRBakePolicyParams, cn as MRBakeTradelinkEntityOnboardingParams, cm as MRBakeTradelinkEntityParams, co as MRBakeTradelinkNetworkParams, ci as MRBakeTradelinkOnboardingParams, ce as MRBakeVaultEntityParams, cf as MRBakeWhitelistParams, ca as MRCreateAPIUserParams, cb as MRCreateAPIV2UserParams, c9 as MRCreateUserParams, cj as MREditQuorumParams, ck as MREditWorkspaceRuleParams, cw as MVInstanceDeployment, cv as MVInstanceDeploymentFF, cx as MVPod, bL as ManifestAPIUser, bF as ManifestAccountConfig, bE as ManifestAccountRule, bv as ManifestAccountRuleCardanoStaking, bA as ManifestAccountRuleCreateSplTokenAccount, bt as ManifestAccountRuleDeployContract, bz as ManifestAccountRuleMessageSigning, bp as ManifestAccountRuleMultiAuth, bo as ManifestAccountRuleMultiAuthStep, bs as ManifestAccountRulePolkadotStaking, bw as ManifestAccountRuleRawSigning, bq as ManifestAccountRuleSCI, bx as ManifestAccountRuleSend, bu as ManifestAccountRuleSolanaStaking, by as ManifestAccountRuleStake, br as ManifestAccountRuleTezosDelegation, bD as ManifestAccountRuleThreshold, bB as ManifestAccountRuleTransferSplToken, bC as ManifestAccountRuleWhitelist, bG as ManifestAccountTradelinkData, bT as ManifestContractApproval, bM as ManifestExchange, bN as ManifestPolicy, cq as ManifestRunner, bQ as ManifestTradelink, bR as ManifestTradelinkEntity, bS as ManifestTradelinkEntityWithAddresses, bK as ManifestUser, bH as ManifestVaultEntity, bJ as ManifestWhitelist, bI as ManifestWhitelistAddress, bP as ManifestWorkspaceRule, bO as ManifestWorkspaceRuleStep, b_ as MockNetworkResponse, bX as OnboardingContext, bY as OnboardingStep, bm as Organization, w as RawAccount, y as RawEntity, v as RawGroup, u as RawUser, x as RawWhiteList, bZ as RecordLogger, aE as SPLToken, cs as SecureChannel, $ as TradelinkNetwork, ag as Unit, F as UserContextRunnable, bn as UserDevice, c6 as UserWithDevice, c7 as UserWithoutDevice, c5 as VaultEvent, c2 as WeirdGateERC20Token, at as WeirdGateGovernanceRule, au as WeirdGateGovernanceRulesSet, aq as WeirdGateRuleMultiAuth, ap as WeirdGateRuleMultiAuthStep, ar as WeirdGateRuleThreshold, as as WeirdGateRuleWhitelist, c3 as WeirdGateTokenCurrency, bV as feesLevels, s as performRequest, r as prepareRequest, t as recipeManifest } from './index-C99kQ88p.js';
1
+ import { N as Network, A as APIBearerTokenResponse, M as Manifest, D as DevicesPool, B as BakeManifestOptions, R as RunnableOptions, P as PoolOptions, a as ManifestAccount, G as GateAccount, b as ManifestAPIV2User, c as APIRequestResponse, d as DeployOptions, e as DestroyOptions, f as PsdModel, g as APIDevice, h as Device, I as Interactions, U as UserContext, i as GateTokenCurrency, j as MVInstance, k as ManifestTransaction, l as ManifestGroup, m as GateWhitelist, n as UTXOsPickingStrategy, o as GateTransaction, p as UpgradeOptions, W as WipeOptions, q as Interaction, T as TransportType } from './index-CfKTZ-yG.js';
2
+ export { cD as APIBitcoinLikeSend, cB as APICreateTransactionRequest, cF as APIEstimateFeesResponse, cE as APIEthereumLikeSend, cC as APIGenericSend, cA as APIGetChallengeResponse, af as AccountStatus, ae as AccountType, a9 as AdminDevice, cG as CardanoBalances, cH as CardanoStakeInfo, a_ as CardanoVoteDelegationDrep, C as CliOptions, O as Connection, K as ConnectionEdge, c8 as CurrencyOrToken, c4 as DaemonAddress, cp as DataTradelinkNetworkEntity, cu as DeploymentStep, ct as DeploymentStepID, bU as DeserializedManifest, z as DevicesPoolOptions, E as EntityType, bW as FeesLevel, a5 as GateAPIKey, bi as GateAPIKeyRequest, b8 as GateAPIV2UserAccessRequest, aF as GateAccountBitcoin, aM as GateAccountCardano, aw as GateAccountCommon, aH as GateAccountERC20, az as GateAccountEthereum, ax as GateAccountExchangeOptions, aO as GateAccountPolkadot, b1 as GateAccountRequest, aI as GateAccountRipple, aL as GateAccountSolana, aJ as GateAccountStellar, aG as GateAccountTRC20, aK as GateAccountTezos, ay as GateAccountTradelinkData, aN as GateAccountTron, b3 as GateActivateRequest, a$ as GateAddress, c0 as GateCoinCapabilities, c1 as GateCurrency, a3 as GateDeviceType, ab as GateDigestGroup, bg as GateDigestsRequest, Q as GateEditWorkspaceRuleRequest, X as GateEntity, aT as GateExchange, bc as GateExchangeRequest, ac as GateFees, ad as GateFeesEIP1559, _ as GateForcedUnpledge, b6 as GateForcedUnpledgeRequest, b0 as GateGenericRequest, an as GateGovernanceRule, ao as GateGovernanceRulesSet, aa as GateGroup, bf as GateGroupRequest, be as GateGroupRequestTypeDefs, av as GateLabel, a8 as GateMessage, ba as GateMessageRequest, bh as GateOrganizationRequest, Y as GatePledgeIncrement, b5 as GatePledgeIncrementRequest, aU as GatePolicy, bl as GatePolicyRequest, Z as GateRepledge, b4 as GateRepledgeRequest, S as GateRequest, V as GateRequestType, ai as GateRuleMultiAuth, ah as GateRuleMultiAuthStep, al as GateRuleSCI, aj as GateRuleThreshold, am as GateRuleTransactionFilter, ak as GateRuleWhitelist, a7 as GateSCIConfig, b9 as GateSCIConfigRequest, b2 as GateSPLTokenAccountRequest, a0 as GateTradelink, a2 as GateTradelinkAssetManager, aD as GateTradelinkAssetManagerRequest, aV as GateTradelinkEntity, a1 as GateTradelinkExchange, aC as GateTradelinkExchangeRequest, aW as GateTradelinkNetwork, aX as GateTradelinkOnboardingStatus, aB as GateTradelinkRequest, aA as GateTradelinkThirdParty, bd as GateTransactionRequest, aZ as GateTransactionType, a6 as GateTransfer, bj as GateTransferRequest, a4 as GateUser, b7 as GateUserRequest, aY as GateVaultEntity, bk as GateVaultEntityRequest, aP as GateVaultEntityStatus, bb as GateWhitelistRequest, aQ as GateWorkspacePermission, aS as GateWorkspaceRule, aR as GateWorkspaceRuleStep, cz as GetU2FPubKeyInteraction, H as HelmValue, J as HelmValues, cr as HsmCertificate, cy as InteractionResponses, L as LamOptions, b$ as LegacyERC20Token, cl as MBRBakeTradelinkEntityWithAddresses, cd as MRBakeAccountParams, cg as MRBakeExchangeParams, cc as MRBakeGroupParams, ch as MRBakePolicyParams, cn as MRBakeTradelinkEntityOnboardingParams, cm as MRBakeTradelinkEntityParams, co as MRBakeTradelinkNetworkParams, ci as MRBakeTradelinkOnboardingParams, ce as MRBakeVaultEntityParams, cf as MRBakeWhitelistParams, ca as MRCreateAPIUserParams, cb as MRCreateAPIV2UserParams, c9 as MRCreateUserParams, cj as MREditQuorumParams, ck as MREditWorkspaceRuleParams, cw as MVInstanceDeployment, cv as MVInstanceDeploymentFF, cx as MVPod, bL as ManifestAPIUser, bF as ManifestAccountConfig, bE as ManifestAccountRule, bv as ManifestAccountRuleCardanoStaking, bA as ManifestAccountRuleCreateSplTokenAccount, bt as ManifestAccountRuleDeployContract, bz as ManifestAccountRuleMessageSigning, bp as ManifestAccountRuleMultiAuth, bo as ManifestAccountRuleMultiAuthStep, bs as ManifestAccountRulePolkadotStaking, bw as ManifestAccountRuleRawSigning, bq as ManifestAccountRuleSCI, bx as ManifestAccountRuleSend, bu as ManifestAccountRuleSolanaStaking, by as ManifestAccountRuleStake, br as ManifestAccountRuleTezosDelegation, bD as ManifestAccountRuleThreshold, bB as ManifestAccountRuleTransferSplToken, bC as ManifestAccountRuleWhitelist, bG as ManifestAccountTradelinkData, bT as ManifestContractApproval, bM as ManifestExchange, bN as ManifestPolicy, cq as ManifestRunner, bQ as ManifestTradelink, bR as ManifestTradelinkEntity, bS as ManifestTradelinkEntityWithAddresses, bK as ManifestUser, bH as ManifestVaultEntity, bJ as ManifestWhitelist, bI as ManifestWhitelistAddress, bP as ManifestWorkspaceRule, bO as ManifestWorkspaceRuleStep, b_ as MockNetworkResponse, bX as OnboardingContext, bY as OnboardingStep, bm as Organization, w as RawAccount, y as RawEntity, v as RawGroup, u as RawUser, x as RawWhiteList, bZ as RecordLogger, aE as SPLToken, cs as SecureChannel, $ as TradelinkNetwork, ag as Unit, F as UserContextRunnable, bn as UserDevice, c6 as UserWithDevice, c7 as UserWithoutDevice, c5 as VaultEvent, c2 as WeirdGateERC20Token, at as WeirdGateGovernanceRule, au as WeirdGateGovernanceRulesSet, aq as WeirdGateRuleMultiAuth, ap as WeirdGateRuleMultiAuthStep, ar as WeirdGateRuleThreshold, as as WeirdGateRuleWhitelist, c3 as WeirdGateTokenCurrency, bV as feesLevels, s as performRequest, r as prepareRequest, t as recipeManifest } from './index-CfKTZ-yG.js';
3
3
  import { Agent } from 'https';
4
4
  export { default as reviewAPIRequest } from './reviewAPIRequest.js';
5
5
  export { ExtendedPubKey, LIGHT_EVM_CURRENCIES, deserializeUnitValue, extractSecureChannel, getAccountTypeByCurrency, getAccountUnit, getCurrencyOrToken, getCurrencyUnit, getDefaultUsername, getGateAccountUnit, getTokenUnit, getWorkspaceFromGate, queue, serializeUnitValue, unwrapConnection, wait, xpubToExtendedPubKey } from './utils.js';
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@
3
3
  var _chunkR5RZM7VOjs = require('./chunk-R5RZM7VO.js');
4
4
 
5
5
 
6
- var _chunkYAB42L5Hjs = require('./chunk-YAB42L5H.js');
6
+ var _chunkUE4JXAYMjs = require('./chunk-UE4JXAYM.js');
7
7
 
8
8
 
9
9
 
@@ -46,7 +46,7 @@ var _chunk3L2XDBZ2js = require('./chunk-3L2XDBZ2.js');
46
46
 
47
47
 
48
48
 
49
- var _chunkWCH2IYIJjs = require('./chunk-WCH2IYIJ.js');
49
+ var _chunkPBYMPTCYjs = require('./chunk-PBYMPTCY.js');
50
50
 
51
51
 
52
52
  var _chunkPZ5AY32Cjs = require('./chunk-PZ5AY32C.js');
@@ -327,7 +327,7 @@ async function bakeManifest(_manifest, pool, options = {}) {
327
327
  logger.info("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
328
328
  }
329
329
  const runner = options.runner || _chunk5KTWGTUFjs.createDefaultRunner_default.call(void 0, pool, options);
330
- const manifestFromGate = await _chunkYAB42L5Hjs.recipeManifest.call(void 0, pool, { saveAccountsIndexes: true });
330
+ const manifestFromGate = await _chunkUE4JXAYMjs.recipeManifest.call(void 0, pool, { saveAccountsIndexes: true });
331
331
  const { rawData } = manifestFromGate;
332
332
  const {
333
333
  groupsByName,
@@ -3248,5 +3248,5 @@ var wipeBackend_default = wipeBackend;
3248
3248
 
3249
3249
 
3250
3250
 
3251
- exports.DEFAULT_SPAWN_WATCH_TIMEOUT_MINUTES = DEFAULT_SPAWN_WATCH_TIMEOUT_MINUTES; exports.DEFAULT_VAULT_REMOTE_URL = DEFAULT_VAULT_REMOTE_URL; exports.GateGroupRequestTypeDefs = _chunkWCH2IYIJjs.GateGroupRequestTypeDefs; exports.LIGHT_EVM_CURRENCIES = _chunk6NGBW7BGjs.LIGHT_EVM_CURRENCIES; exports.bakeManifest = bakeManifest; exports.createAPIDevice = createAPIDevice_default; exports.createConfigCatEnvironment = createConfigCatEnvironment; exports.createDevicesPool = createDevicesPool_default; exports.createFaucet = createFaucet_default; exports.createInteractions = createInteractions; exports.createNetwork = _chunkQH2K2MDVjs.createNetwork; exports.createPledge = createPledge_default; exports.createSettlement = createSettlement_default; exports.deleteConfigCatEnvironment = deleteConfigCatEnvironment; exports.deploy = deploy; exports.deserializeUnitValue = _chunk6NGBW7BGjs.deserializeUnitValue; exports.destroy = destroy; exports.device = device_exports; exports.extractSecureChannel = _chunk6NGBW7BGjs.extractSecureChannel; exports.feesLevels = _chunkWCH2IYIJjs.feesLevels; exports.fetchTokens = fetchTokens_default; exports.genSeed = genSeed_default; exports.getAccountTypeByCurrency = _chunk6NGBW7BGjs.getAccountTypeByCurrency; exports.getAccountUnit = _chunk6NGBW7BGjs.getAccountUnit; exports.getAuthTokens = _chunk5KTWGTUFjs.getAuthTokens; exports.getCryptoCurrencyById = _chunk6NGBW7BGjs.getCryptoCurrencyById; exports.getCurrencyOrToken = _chunk6NGBW7BGjs.getCurrencyOrToken; exports.getCurrencyUnit = _chunk6NGBW7BGjs.getCurrencyUnit; exports.getDefaultUsername = _chunk6NGBW7BGjs.getDefaultUsername; exports.getGateAccountUnit = _chunk6NGBW7BGjs.getGateAccountUnit; exports.getMVInstances = getMVInstances; exports.getTokenUnit = _chunk6NGBW7BGjs.getTokenUnit; exports.getWorkspaceFromGate = _chunk6NGBW7BGjs.getWorkspaceFromGate; exports.listCryptoCurrencies = _chunk6NGBW7BGjs.listCryptoCurrencies; exports.performRequest = _chunk5KTWGTUFjs.performRequest; exports.prepareRequest = _chunk5KTWGTUFjs.prepareRequest_default; exports.queue = _chunk6NGBW7BGjs.queue; exports.recipeManifest = _chunkYAB42L5Hjs.recipeManifest; exports.reviewAPIRequest = _chunk5KTWGTUFjs.reviewAPIRequest_default; exports.send = send_default; exports.serializeUnitValue = _chunk6NGBW7BGjs.serializeUnitValue; exports.setConfigCatFeatureFlagValues = setConfigCatFeatureFlagValues; exports.setDeviceAPIEndpoint = setDeviceAPIEndpoint; exports.unwrapConnection = _chunk6NGBW7BGjs.unwrapConnection; exports.upgrade = upgrade; exports.validateManifest = validateManifest; exports.vaultCoins = _chunk6NGBW7BGjs.vaultCoins; exports.wait = _chunk6NGBW7BGjs.wait; exports.wipeBackend = wipeBackend_default; exports.xpubToExtendedPubKey = _chunk6NGBW7BGjs.xpubToExtendedPubKey;
3251
+ exports.DEFAULT_SPAWN_WATCH_TIMEOUT_MINUTES = DEFAULT_SPAWN_WATCH_TIMEOUT_MINUTES; exports.DEFAULT_VAULT_REMOTE_URL = DEFAULT_VAULT_REMOTE_URL; exports.GateGroupRequestTypeDefs = _chunkPBYMPTCYjs.GateGroupRequestTypeDefs; exports.LIGHT_EVM_CURRENCIES = _chunk6NGBW7BGjs.LIGHT_EVM_CURRENCIES; exports.bakeManifest = bakeManifest; exports.createAPIDevice = createAPIDevice_default; exports.createConfigCatEnvironment = createConfigCatEnvironment; exports.createDevicesPool = createDevicesPool_default; exports.createFaucet = createFaucet_default; exports.createInteractions = createInteractions; exports.createNetwork = _chunkQH2K2MDVjs.createNetwork; exports.createPledge = createPledge_default; exports.createSettlement = createSettlement_default; exports.deleteConfigCatEnvironment = deleteConfigCatEnvironment; exports.deploy = deploy; exports.deserializeUnitValue = _chunk6NGBW7BGjs.deserializeUnitValue; exports.destroy = destroy; exports.device = device_exports; exports.extractSecureChannel = _chunk6NGBW7BGjs.extractSecureChannel; exports.feesLevels = _chunkPBYMPTCYjs.feesLevels; exports.fetchTokens = fetchTokens_default; exports.genSeed = genSeed_default; exports.getAccountTypeByCurrency = _chunk6NGBW7BGjs.getAccountTypeByCurrency; exports.getAccountUnit = _chunk6NGBW7BGjs.getAccountUnit; exports.getAuthTokens = _chunk5KTWGTUFjs.getAuthTokens; exports.getCryptoCurrencyById = _chunk6NGBW7BGjs.getCryptoCurrencyById; exports.getCurrencyOrToken = _chunk6NGBW7BGjs.getCurrencyOrToken; exports.getCurrencyUnit = _chunk6NGBW7BGjs.getCurrencyUnit; exports.getDefaultUsername = _chunk6NGBW7BGjs.getDefaultUsername; exports.getGateAccountUnit = _chunk6NGBW7BGjs.getGateAccountUnit; exports.getMVInstances = getMVInstances; exports.getTokenUnit = _chunk6NGBW7BGjs.getTokenUnit; exports.getWorkspaceFromGate = _chunk6NGBW7BGjs.getWorkspaceFromGate; exports.listCryptoCurrencies = _chunk6NGBW7BGjs.listCryptoCurrencies; exports.performRequest = _chunk5KTWGTUFjs.performRequest; exports.prepareRequest = _chunk5KTWGTUFjs.prepareRequest_default; exports.queue = _chunk6NGBW7BGjs.queue; exports.recipeManifest = _chunkUE4JXAYMjs.recipeManifest; exports.reviewAPIRequest = _chunk5KTWGTUFjs.reviewAPIRequest_default; exports.send = send_default; exports.serializeUnitValue = _chunk6NGBW7BGjs.serializeUnitValue; exports.setConfigCatFeatureFlagValues = setConfigCatFeatureFlagValues; exports.setDeviceAPIEndpoint = setDeviceAPIEndpoint; exports.unwrapConnection = _chunk6NGBW7BGjs.unwrapConnection; exports.upgrade = upgrade; exports.validateManifest = validateManifest; exports.vaultCoins = _chunk6NGBW7BGjs.vaultCoins; exports.wait = _chunk6NGBW7BGjs.wait; exports.wipeBackend = wipeBackend_default; exports.xpubToExtendedPubKey = _chunk6NGBW7BGjs.xpubToExtendedPubKey;
3252
3252
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- export { cL as GateAccountsByName, cN as GateExchangesByName, cJ as GateGroupsByName, cO as GatePoliciesByName, cU as GateTradelinkAssetManagerByName, cP as GateTradelinkCustodianByName, cR as GateTradelinkExchangeByName, cT as GateTradelinkHSMAssetManagerByName, cQ as GateTradelinkHSMCustodianByName, cS as GateTradelinkHSMExchangeByName, cM as GateVaultEntitiesByName, cK as GateWhitelistsByName, cX as RecipeManifestOptions, cW as RecipeManifestResult, cV as RecipeRawData, t as default, cI as getDeviceIndex } from './index-C99kQ88p.js';
1
+ export { cL as GateAccountsByName, cN as GateExchangesByName, cJ as GateGroupsByName, cO as GatePoliciesByName, cU as GateTradelinkAssetManagerByName, cP as GateTradelinkCustodianByName, cR as GateTradelinkExchangeByName, cT as GateTradelinkHSMAssetManagerByName, cQ as GateTradelinkHSMCustodianByName, cS as GateTradelinkHSMExchangeByName, cM as GateVaultEntitiesByName, cK as GateWhitelistsByName, cX as RecipeManifestOptions, cW as RecipeManifestResult, cV as RecipeRawData, t as default, cI as getDeviceIndex } from './index-CfKTZ-yG.js';
2
2
  import '@ledgerhq/hw-transport-mocker';
3
3
  import '@ledgerhq/types-cryptoassets';
4
4
  import '@ledgerhq/vault-utils';
@@ -1,11 +1,11 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkYAB42L5Hjs = require('./chunk-YAB42L5H.js');
4
+ var _chunkUE4JXAYMjs = require('./chunk-UE4JXAYM.js');
5
5
  require('./chunk-6NGBW7BG.js');
6
6
  require('./chunk-PZ5AY32C.js');
7
7
 
8
8
 
9
9
 
10
- exports.default = _chunkYAB42L5Hjs.recipeManifest; exports.getDeviceIndex = _chunkYAB42L5Hjs.getDeviceIndex;
10
+ exports.default = _chunkUE4JXAYMjs.recipeManifest; exports.getDeviceIndex = _chunkUE4JXAYMjs.getDeviceIndex;
11
11
  //# sourceMappingURL=recipeManifest.js.map
@@ -1,4 +1,4 @@
1
- import { D as DevicesPool, b as ManifestAPIV2User, R as RunnableOptions, c as APIRequestResponse } from './index-C99kQ88p.js';
1
+ import { D as DevicesPool, b as ManifestAPIV2User, R as RunnableOptions, c as APIRequestResponse } from './index-CfKTZ-yG.js';
2
2
  import '@ledgerhq/hw-transport-mocker';
3
3
  import '@ledgerhq/types-cryptoassets';
4
4
  import '@ledgerhq/vault-utils';
@@ -3,4 +3,4 @@ export { CryptoCurrency, TokenCurrency } from '@ledgerhq/types-cryptoassets';
3
3
  import '@ledgerhq/vault-utils';
4
4
  import 'bignumber.js';
5
5
  import 'socket.io-client';
6
- export { A as APIBearerTokenResponse, cD as APIBitcoinLikeSend, cB as APICreateTransactionRequest, cF as APIEstimateFeesResponse, cE as APIEthereumLikeSend, cC as APIGenericSend, cA as APIGetChallengeResponse, c as APIRequestResponse, af as AccountStatus, ae as AccountType, a9 as AdminDevice, B as BakeManifestOptions, cG as CardanoBalances, cH as CardanoStakeInfo, a_ as CardanoVoteDelegationDrep, C as CliOptions, O as Connection, K as ConnectionEdge, c8 as CurrencyOrToken, c4 as DaemonAddress, cp as DataTradelinkNetworkEntity, d as DeployOptions, cu as DeploymentStep, ct as DeploymentStepID, bU as DeserializedManifest, e as DestroyOptions, D as DevicesPool, z as DevicesPoolOptions, E as EntityType, bW as FeesLevel, a5 as GateAPIKey, bi as GateAPIKeyRequest, b8 as GateAPIV2UserAccessRequest, G as GateAccount, aF as GateAccountBitcoin, aM as GateAccountCardano, aw as GateAccountCommon, aH as GateAccountERC20, az as GateAccountEthereum, ax as GateAccountExchangeOptions, aO as GateAccountPolkadot, b1 as GateAccountRequest, aI as GateAccountRipple, aL as GateAccountSolana, aJ as GateAccountStellar, aG as GateAccountTRC20, aK as GateAccountTezos, ay as GateAccountTradelinkData, aN as GateAccountTron, b3 as GateActivateRequest, a$ as GateAddress, c0 as GateCoinCapabilities, c1 as GateCurrency, a3 as GateDeviceType, ab as GateDigestGroup, bg as GateDigestsRequest, Q as GateEditWorkspaceRuleRequest, X as GateEntity, aT as GateExchange, bc as GateExchangeRequest, ac as GateFees, ad as GateFeesEIP1559, _ as GateForcedUnpledge, b6 as GateForcedUnpledgeRequest, b0 as GateGenericRequest, an as GateGovernanceRule, ao as GateGovernanceRulesSet, aa as GateGroup, bf as GateGroupRequest, be as GateGroupRequestTypeDefs, av as GateLabel, a8 as GateMessage, ba as GateMessageRequest, bh as GateOrganizationRequest, Y as GatePledgeIncrement, b5 as GatePledgeIncrementRequest, aU as GatePolicy, bl as GatePolicyRequest, Z as GateRepledge, b4 as GateRepledgeRequest, S as GateRequest, V as GateRequestType, ai as GateRuleMultiAuth, ah as GateRuleMultiAuthStep, al as GateRuleSCI, aj as GateRuleThreshold, am as GateRuleTransactionFilter, ak as GateRuleWhitelist, a7 as GateSCIConfig, b9 as GateSCIConfigRequest, b2 as GateSPLTokenAccountRequest, i as GateTokenCurrency, a0 as GateTradelink, a2 as GateTradelinkAssetManager, aD as GateTradelinkAssetManagerRequest, aV as GateTradelinkEntity, a1 as GateTradelinkExchange, aC as GateTradelinkExchangeRequest, aW as GateTradelinkNetwork, aX as GateTradelinkOnboardingStatus, aB as GateTradelinkRequest, aA as GateTradelinkThirdParty, o as GateTransaction, bd as GateTransactionRequest, aZ as GateTransactionType, a6 as GateTransfer, bj as GateTransferRequest, a4 as GateUser, b7 as GateUserRequest, aY as GateVaultEntity, bk as GateVaultEntityRequest, aP as GateVaultEntityStatus, m as GateWhitelist, bb as GateWhitelistRequest, aQ as GateWorkspacePermission, aS as GateWorkspaceRule, aR as GateWorkspaceRuleStep, cz as GetU2FPubKeyInteraction, H as HelmValue, J as HelmValues, cr as HsmCertificate, q as Interaction, cy as InteractionResponses, I as Interactions, L as LamOptions, b$ as LegacyERC20Token, cl as MBRBakeTradelinkEntityWithAddresses, cd as MRBakeAccountParams, cg as MRBakeExchangeParams, cc as MRBakeGroupParams, ch as MRBakePolicyParams, cn as MRBakeTradelinkEntityOnboardingParams, cm as MRBakeTradelinkEntityParams, co as MRBakeTradelinkNetworkParams, ci as MRBakeTradelinkOnboardingParams, ce as MRBakeVaultEntityParams, cf as MRBakeWhitelistParams, ca as MRCreateAPIUserParams, cb as MRCreateAPIV2UserParams, c9 as MRCreateUserParams, cj as MREditQuorumParams, ck as MREditWorkspaceRuleParams, j as MVInstance, cw as MVInstanceDeployment, cv as MVInstanceDeploymentFF, cx as MVPod, M as Manifest, bL as ManifestAPIUser, b as ManifestAPIV2User, a as ManifestAccount, bF as ManifestAccountConfig, bE as ManifestAccountRule, bv as ManifestAccountRuleCardanoStaking, bA as ManifestAccountRuleCreateSplTokenAccount, bt as ManifestAccountRuleDeployContract, bz as ManifestAccountRuleMessageSigning, bp as ManifestAccountRuleMultiAuth, bo as ManifestAccountRuleMultiAuthStep, bs as ManifestAccountRulePolkadotStaking, bw as ManifestAccountRuleRawSigning, bq as ManifestAccountRuleSCI, bx as ManifestAccountRuleSend, bu as ManifestAccountRuleSolanaStaking, by as ManifestAccountRuleStake, br as ManifestAccountRuleTezosDelegation, bD as ManifestAccountRuleThreshold, bB as ManifestAccountRuleTransferSplToken, bC as ManifestAccountRuleWhitelist, bG as ManifestAccountTradelinkData, bT as ManifestContractApproval, bM as ManifestExchange, l as ManifestGroup, bN as ManifestPolicy, cq as ManifestRunner, bQ as ManifestTradelink, bR as ManifestTradelinkEntity, bS as ManifestTradelinkEntityWithAddresses, k as ManifestTransaction, bK as ManifestUser, bH as ManifestVaultEntity, bJ as ManifestWhitelist, bI as ManifestWhitelistAddress, bP as ManifestWorkspaceRule, bO as ManifestWorkspaceRuleStep, b_ as MockNetworkResponse, N as Network, bX as OnboardingContext, bY as OnboardingStep, bm as Organization, P as PoolOptions, f as PsdModel, w as RawAccount, y as RawEntity, v as RawGroup, u as RawUser, x as RawWhiteList, bZ as RecordLogger, R as RunnableOptions, aE as SPLToken, cs as SecureChannel, $ as TradelinkNetwork, T as TransportType, n as UTXOsPickingStrategy, ag as Unit, p as UpgradeOptions, U as UserContext, F as UserContextRunnable, bn as UserDevice, c6 as UserWithDevice, c7 as UserWithoutDevice, c5 as VaultEvent, c2 as WeirdGateERC20Token, at as WeirdGateGovernanceRule, au as WeirdGateGovernanceRulesSet, aq as WeirdGateRuleMultiAuth, ap as WeirdGateRuleMultiAuthStep, ar as WeirdGateRuleThreshold, as as WeirdGateRuleWhitelist, c3 as WeirdGateTokenCurrency, W as WipeOptions, bV as feesLevels } from '../index-C99kQ88p.js';
6
+ export { A as APIBearerTokenResponse, cD as APIBitcoinLikeSend, cB as APICreateTransactionRequest, cF as APIEstimateFeesResponse, cE as APIEthereumLikeSend, cC as APIGenericSend, cA as APIGetChallengeResponse, c as APIRequestResponse, af as AccountStatus, ae as AccountType, a9 as AdminDevice, B as BakeManifestOptions, cG as CardanoBalances, cH as CardanoStakeInfo, a_ as CardanoVoteDelegationDrep, C as CliOptions, O as Connection, K as ConnectionEdge, c8 as CurrencyOrToken, c4 as DaemonAddress, cp as DataTradelinkNetworkEntity, d as DeployOptions, cu as DeploymentStep, ct as DeploymentStepID, bU as DeserializedManifest, e as DestroyOptions, D as DevicesPool, z as DevicesPoolOptions, E as EntityType, bW as FeesLevel, a5 as GateAPIKey, bi as GateAPIKeyRequest, b8 as GateAPIV2UserAccessRequest, G as GateAccount, aF as GateAccountBitcoin, aM as GateAccountCardano, aw as GateAccountCommon, aH as GateAccountERC20, az as GateAccountEthereum, ax as GateAccountExchangeOptions, aO as GateAccountPolkadot, b1 as GateAccountRequest, aI as GateAccountRipple, aL as GateAccountSolana, aJ as GateAccountStellar, aG as GateAccountTRC20, aK as GateAccountTezos, ay as GateAccountTradelinkData, aN as GateAccountTron, b3 as GateActivateRequest, a$ as GateAddress, c0 as GateCoinCapabilities, c1 as GateCurrency, a3 as GateDeviceType, ab as GateDigestGroup, bg as GateDigestsRequest, Q as GateEditWorkspaceRuleRequest, X as GateEntity, aT as GateExchange, bc as GateExchangeRequest, ac as GateFees, ad as GateFeesEIP1559, _ as GateForcedUnpledge, b6 as GateForcedUnpledgeRequest, b0 as GateGenericRequest, an as GateGovernanceRule, ao as GateGovernanceRulesSet, aa as GateGroup, bf as GateGroupRequest, be as GateGroupRequestTypeDefs, av as GateLabel, a8 as GateMessage, ba as GateMessageRequest, bh as GateOrganizationRequest, Y as GatePledgeIncrement, b5 as GatePledgeIncrementRequest, aU as GatePolicy, bl as GatePolicyRequest, Z as GateRepledge, b4 as GateRepledgeRequest, S as GateRequest, V as GateRequestType, ai as GateRuleMultiAuth, ah as GateRuleMultiAuthStep, al as GateRuleSCI, aj as GateRuleThreshold, am as GateRuleTransactionFilter, ak as GateRuleWhitelist, a7 as GateSCIConfig, b9 as GateSCIConfigRequest, b2 as GateSPLTokenAccountRequest, i as GateTokenCurrency, a0 as GateTradelink, a2 as GateTradelinkAssetManager, aD as GateTradelinkAssetManagerRequest, aV as GateTradelinkEntity, a1 as GateTradelinkExchange, aC as GateTradelinkExchangeRequest, aW as GateTradelinkNetwork, aX as GateTradelinkOnboardingStatus, aB as GateTradelinkRequest, aA as GateTradelinkThirdParty, o as GateTransaction, bd as GateTransactionRequest, aZ as GateTransactionType, a6 as GateTransfer, bj as GateTransferRequest, a4 as GateUser, b7 as GateUserRequest, aY as GateVaultEntity, bk as GateVaultEntityRequest, aP as GateVaultEntityStatus, m as GateWhitelist, bb as GateWhitelistRequest, aQ as GateWorkspacePermission, aS as GateWorkspaceRule, aR as GateWorkspaceRuleStep, cz as GetU2FPubKeyInteraction, H as HelmValue, J as HelmValues, cr as HsmCertificate, q as Interaction, cy as InteractionResponses, I as Interactions, L as LamOptions, b$ as LegacyERC20Token, cl as MBRBakeTradelinkEntityWithAddresses, cd as MRBakeAccountParams, cg as MRBakeExchangeParams, cc as MRBakeGroupParams, ch as MRBakePolicyParams, cn as MRBakeTradelinkEntityOnboardingParams, cm as MRBakeTradelinkEntityParams, co as MRBakeTradelinkNetworkParams, ci as MRBakeTradelinkOnboardingParams, ce as MRBakeVaultEntityParams, cf as MRBakeWhitelistParams, ca as MRCreateAPIUserParams, cb as MRCreateAPIV2UserParams, c9 as MRCreateUserParams, cj as MREditQuorumParams, ck as MREditWorkspaceRuleParams, j as MVInstance, cw as MVInstanceDeployment, cv as MVInstanceDeploymentFF, cx as MVPod, M as Manifest, bL as ManifestAPIUser, b as ManifestAPIV2User, a as ManifestAccount, bF as ManifestAccountConfig, bE as ManifestAccountRule, bv as ManifestAccountRuleCardanoStaking, bA as ManifestAccountRuleCreateSplTokenAccount, bt as ManifestAccountRuleDeployContract, bz as ManifestAccountRuleMessageSigning, bp as ManifestAccountRuleMultiAuth, bo as ManifestAccountRuleMultiAuthStep, bs as ManifestAccountRulePolkadotStaking, bw as ManifestAccountRuleRawSigning, bq as ManifestAccountRuleSCI, bx as ManifestAccountRuleSend, bu as ManifestAccountRuleSolanaStaking, by as ManifestAccountRuleStake, br as ManifestAccountRuleTezosDelegation, bD as ManifestAccountRuleThreshold, bB as ManifestAccountRuleTransferSplToken, bC as ManifestAccountRuleWhitelist, bG as ManifestAccountTradelinkData, bT as ManifestContractApproval, bM as ManifestExchange, l as ManifestGroup, bN as ManifestPolicy, cq as ManifestRunner, bQ as ManifestTradelink, bR as ManifestTradelinkEntity, bS as ManifestTradelinkEntityWithAddresses, k as ManifestTransaction, bK as ManifestUser, bH as ManifestVaultEntity, bJ as ManifestWhitelist, bI as ManifestWhitelistAddress, bP as ManifestWorkspaceRule, bO as ManifestWorkspaceRuleStep, b_ as MockNetworkResponse, N as Network, bX as OnboardingContext, bY as OnboardingStep, bm as Organization, P as PoolOptions, f as PsdModel, w as RawAccount, y as RawEntity, v as RawGroup, u as RawUser, x as RawWhiteList, bZ as RecordLogger, R as RunnableOptions, aE as SPLToken, cs as SecureChannel, $ as TradelinkNetwork, T as TransportType, n as UTXOsPickingStrategy, ag as Unit, p as UpgradeOptions, U as UserContext, F as UserContextRunnable, bn as UserDevice, c6 as UserWithDevice, c7 as UserWithoutDevice, c5 as VaultEvent, c2 as WeirdGateERC20Token, at as WeirdGateGovernanceRule, au as WeirdGateGovernanceRulesSet, aq as WeirdGateRuleMultiAuth, ap as WeirdGateRuleMultiAuthStep, ar as WeirdGateRuleThreshold, as as WeirdGateRuleWhitelist, c3 as WeirdGateTokenCurrency, W as WipeOptions, bV as feesLevels } from '../index-CfKTZ-yG.js';
@@ -1,10 +1,10 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkWCH2IYIJjs = require('../chunk-WCH2IYIJ.js');
4
+ var _chunkPBYMPTCYjs = require('../chunk-PBYMPTCY.js');
5
5
  require('../chunk-PZ5AY32C.js');
6
6
 
7
7
 
8
8
 
9
- exports.GateGroupRequestTypeDefs = _chunkWCH2IYIJjs.GateGroupRequestTypeDefs; exports.feesLevels = _chunkWCH2IYIJjs.feesLevels;
9
+ exports.GateGroupRequestTypeDefs = _chunkPBYMPTCYjs.GateGroupRequestTypeDefs; exports.feesLevels = _chunkPBYMPTCYjs.feesLevels;
10
10
  //# sourceMappingURL=index.js.map
package/lib/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { ag as Unit, a as ManifestAccount, i as GateTokenCurrency, G as GateAccount, ae as AccountType, c8 as CurrencyOrToken, O as Connection, cs as SecureChannel } from './index-C99kQ88p.js';
1
+ import { ag as Unit, a as ManifestAccount, i as GateTokenCurrency, G as GateAccount, ae as AccountType, c8 as CurrencyOrToken, O as Connection, cs as SecureChannel } from './index-CfKTZ-yG.js';
2
2
  import '@ledgerhq/hw-transport-mocker';
3
3
  import '@ledgerhq/types-cryptoassets';
4
4
  import '@ledgerhq/vault-utils';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ledgerhq/vault-common",
3
- "version": "2.2.0",
3
+ "version": "2.2.1",
4
4
  "description": "> TODO: description",
5
5
  "homepage": "https://github.com/LedgerHQ/vault-ts",
6
6
  "license": "BSD-2-Clause",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-WCH2IYIJ.js","../src/types/index.ts"],"names":[],"mappings":"AAAA;ACwoCO,IAAM,yBAAA,EAA2B;AAAA,EACtC,cAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA;AAqVO,IAAM,WAAA,EAAa,CAAC,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,QAAQ,CAAA;AD19C7D;AACA;AACE;AACA;AACF,6FAAC","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-WCH2IYIJ.js","sourcesContent":[null,"import { RecordStore } from \"@ledgerhq/hw-transport-mocker\";\nimport { CryptoCurrency, TokenCurrency } from \"@ledgerhq/types-cryptoassets\";\nimport { Logger } from \"@ledgerhq/vault-utils\";\nimport { BigNumber } from \"bignumber.js\";\nimport { Socket } from \"socket.io-client\";\n\nimport { Device } from \"../device/types\";\nimport {\n DataAccount,\n DataExchange,\n DataGroup,\n DataPolicy,\n DataVaultEntity,\n DataWhitelist,\n} from \"../prepareRequest\";\nimport { RecipeManifestResult } from \"../recipeManifest\";\nimport { CardanoBalances } from \"./cardano\";\nimport { PolkadotAccountData } from \"./polkadot\";\n\nexport * from \"./cardano\";\n\nexport type UserContext = {\n network: Network;\n getToken: () => string | null;\n run: (interactions: Interaction<any>[], data: any) => Promise<any>;\n get: <T>(url: string, requestOptions?: any) => Promise<T>;\n post: <T>(url: string, payload: any) => Promise<T>;\n approveRequest: (payload: any) => Promise<any>;\n approveRequestWithoutHSM: (payload: any) => Promise<any>;\n rejectRequest: (requestID: number) => Promise<any>;\n connectSocket: () => Promise<typeof Socket>;\n onEvent: (cb: (event: VaultEvent) => void) => void;\n};\n\nexport type RawUser = {\n entityType: \"USER\";\n name: string;\n role: \"admin\" | \"operator\";\n device: number;\n};\n\nexport type RawGroup = {\n entityType: \"GROUP\";\n name: string;\n users: number[];\n description?: string;\n};\n\nexport type RawAccount = {\n entityType: \"ACCOUNT\";\n name: string;\n currency: string;\n derivationMode?: string;\n};\n\nexport type RawWhiteList = {\n entityType: \"WHITELIST\";\n name: string;\n description?: string;\n addresses: string[];\n};\n\nexport type RawEntity = RawUser | RawAccount | RawGroup | RawWhiteList;\n\nexport type EntityType =\n | \"USER\"\n | \"GROUP\"\n | \"ACCOUNT\"\n | \"WHITELIST\"\n | \"TRANSACTION\"\n | \"EXCHANGE\"\n | \"POLICY\"\n | \"VAULT_ENTITY\";\n\nexport type TransportType = \"software\" | \"speculos-web\" | \"nodehid\" | \"nodehid-replayer\";\n\nexport type DevicesPoolOptions = {\n salt?: string;\n gate: string;\n apiGateway?: string;\n overrideSeeds?: string[];\n deviceAPIURL?: string;\n notifierURL?: string;\n readOnlyUser?: string;\n transport?: TransportType;\n recordStore?: RecordStore | null;\n psdModel?: PsdModel;\n\n // see VFE-1010\n deviceAPISessionID?: string;\n};\n\nexport type LamOptions = {\n lamURL?: string;\n lamAPIKey?: string;\n};\n\nexport type CliOptions = {\n networkDelay?: number;\n};\n\nexport type PoolOptions = DevicesPoolOptions & LamOptions & CliOptions;\n\nexport type UserContextRunnable = (context: UserContext) => any;\n\nexport type DeployOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance, will be used for namespace creation & domain registration\n name: string;\n // who is deploying\n owner: string;\n // default is `main`\n preset?: string;\n // expiration date\n expireOn?: Date;\n // arbitrary helm values to pass\n values?: HelmValues;\n // elapsed minutes before deploy throw an error\n watchTimeoutMinutes?: number;\n // spawn a dedicated HSM simu\n useDedicatedHSMSimu?: boolean;\n // use HTTP polling instead of socket to check instance status\n useHTTPPolling?: boolean;\n};\n\nexport type UpgradeOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance to target\n name: string;\n // will upgrade to values defined in the preset\n preset?: string;\n // arbitrary helm values to pass\n values?: HelmValues;\n // elapsed minutes before deploy throw an error\n watchTimeoutMinutes?: number;\n};\n\nexport type DestroyOptions = {\n // vault-remote URL\n remoteURL?: string;\n // name of the instance\n name: string;\n // wether we should wait for instance to completely disappear\n wait?: boolean;\n};\n\nexport type HelmValue =\n | string\n | number\n | boolean\n | undefined\n | null\n | Array<HelmValue>\n | HelmValues;\n\nexport interface HelmValues {\n [x: string]: HelmValue;\n}\n\nexport type DevicesPool = {\n getRevaultCompatOptions: () => {\n workspace: string;\n deviceApiUrl: string;\n salt: string;\n };\n workspace: string;\n gate: string;\n apiGateway: string | undefined;\n network: Network;\n psdModel: PsdModel;\n login: (deviceIndex: number | string) => Promise<UserContext>;\n getUserID: (deviceIndex: number) => Promise<string>;\n bruteforceDeviceIndex: (userID: string) => Promise<number>;\n setSalt: (salt: string) => void;\n registerDevice: (deviceIndex: number, request: any) => Promise<any>;\n lamAPI: {\n createInvitation: (invitationID: string) => Promise<{ device_id: string }>;\n registerUser: (name: string, uuid: string) => Promise<void>;\n };\n runWithDevice: (deviceIndex: number, interactions: Interaction<any>[], data: any) => Promise<any>;\n runWithQuorum: (iteratee: UserContextRunnable) => Promise<any>;\n device: Device;\n interactions: Interactions;\n getOnboardingAdminDevices: () => Promise<AdminDevice[]>;\n};\n\nexport type ConnectionEdge<T> = {\n cursor: number;\n node: T;\n};\n\nexport type Connection<T> = {\n edges: ConnectionEdge<T>[];\n pageInfo: {\n hasNextPage: boolean;\n count: number;\n };\n};\n\ntype GateEntityWithRequest = Extract<GateEntity, { last_request?: any }>;\n\nexport interface GateEditWorkspaceRuleRequest extends GateGenericRequest {\n type: \"EDIT_WORKSPACE_RULE\";\n target_type: \"WORKSPACE_RULE\";\n workspace_rule: GateWorkspaceRule;\n request_data: {\n steps: GateWorkspaceRuleStep[];\n };\n}\n\nexport type GateRequest =\n | NonNullable<GateEntityWithRequest[\"last_request\"]>\n | GateAPIV2UserAccessRequest\n | GateEditWorkspaceRuleRequest\n | GateOrganizationRequest\n | GateActivateRequest;\n\nexport type GateRequestType = GateRequest[\"type\"];\n\nexport type GateEntity =\n | GateAPIKey\n | GateAccount\n | GateExchange\n | GateExchange\n | GateGroup\n | GateMessage\n | GatePolicy\n | GateSCIConfig\n | GateTransaction\n | GateUser\n | GateVaultEntity\n | GateWhitelist\n | GatePledgeIncrement\n | GateWorkspaceRule\n | GateRepledge\n | GateForcedUnpledge\n | GateDigestGroup\n | GateTransfer\n | GateTradelink\n | GateTradelinkExchange\n | GateTradelinkAssetManager;\n\nexport type GatePledgeIncrement = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n amount: string;\n };\n last_request?: GatePledgeIncrementRequest;\n};\nexport type GateRepledge = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n pledge_id: number;\n settlement_id: string;\n account_name: string;\n exchange_name: string;\n amount: string;\n currency: string;\n };\n last_request?: GateRepledgeRequest;\n};\n\nexport type GateForcedUnpledge = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\";\n account_id: number;\n data: {\n pledge_id: number;\n account_name: string;\n currency: string;\n exchange_name: string;\n };\n pledge_id: string;\n last_request?: GateForcedUnpledgeRequest;\n};\n\nexport type TradelinkNetwork = {\n id: string;\n custodian: GateTradelinkThirdParty<\"CUSTODIAN\">;\n asset_managers: GateTradelinkThirdParty<\"ASSET_MANAGER\">[];\n exchanges: GateTradelinkThirdParty<\"EXCHANGE\">[];\n};\nexport type GateTradelink = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n hsm_groups: {\n arbitration_groups: GateGroup[];\n settlement_groups: GateGroup[];\n withdraw_groups: GateGroup[];\n };\n network: TradelinkNetwork;\n\n last_request?: GateTradelinkRequest;\n};\n\ntype TradelinkInternalGroup = {\n quorum: number;\n users: Array<{ id: number; pub_key: string; username: string }>;\n};\ntype TradelinkInternalWhitelist = {\n id: number;\n addresses: Array<Omit<GateAddress, \"id\">>;\n};\n\nexport type GateTradelinkExchange = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n last_request?: GateTradelinkExchangeRequest;\n is_under_edit: boolean;\n network: TradelinkNetwork;\n network_data: TradelinkNetwork[\"exchanges\"][number];\n front_data: {\n pledge_approval_group: TradelinkInternalGroup;\n settlement_creator_group: TradelinkInternalGroup;\n whitelist: TradelinkInternalWhitelist;\n };\n hsm_data: {\n name: string;\n pledge_approval_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n settlement_creator_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n };\n};\n\nexport type GateTradelinkAssetManager = {\n id: number;\n status: \"PENDING\" | \"SUBMITTED\" | \"ACTIVE\" | \"ABORTED\";\n last_request?: GateTradelinkAssetManagerRequest;\n is_under_edit: boolean;\n network: TradelinkNetwork;\n network_data: TradelinkNetwork[\"asset_managers\"][number];\n front_data: {\n pledge_creator_group: TradelinkInternalGroup;\n settlement_approval_group: TradelinkInternalGroup;\n whitelist: TradelinkInternalWhitelist;\n };\n hsm_data: {\n name: string;\n pledge_creator_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n settlement_approval_group: {\n id: number;\n quorum: number;\n users: string[]; // array of public keys\n };\n };\n};\n\nexport type GateDeviceType = \"API\" | \"PSD\" | \"SOFT_PSD\";\n\nexport type GateUser = {\n id: number;\n entityType: \"USER\";\n is_api?: boolean;\n view_all_override?: boolean;\n pub_key: string;\n username: string;\n user_id: string;\n picture?: string;\n created_on: string;\n status: string;\n email?: string;\n role: \"ADMIN\" | \"OPERATOR\";\n last_request?: GateUserRequest;\n device_type: GateDeviceType;\n app_version?: string;\n};\n\nexport type GateAPIKey = {\n id: number;\n secret?: string;\n entityType: \"VAULT_API_KEY\";\n name: string;\n created_on: string;\n updated_on: string;\n status:\n | \"PENDING_APPROVAL\"\n | \"APPROVED\"\n | \"ACTIVE\"\n | \"SUSPENDED\"\n | \"PENDING_REVOCATION\"\n | \"REVOKED\"\n | \"ABORTED\";\n entities: GateVaultEntity[];\n scopes: Record<string, any>;\n identifier: string;\n last_request?: GateAPIKeyRequest;\n};\n\nexport type GateTransfer = {\n id: number;\n amount: string;\n network: string | null;\n recipient: string;\n status: \"PENDING\" | \"APPROVED\" | \"SUBMITTED\" | \"ABORTED\";\n last_request: GateTransferRequest;\n};\n\nexport type GateSCIConfig = {\n id: number;\n entityType: \"SCI_CONFIG\";\n account: Omit<GateAccount, \"sci_config\">;\n sciconfig: {\n dapps: string[];\n custom_contract_call_enabled: boolean;\n };\n status: \"PENDING\" | \"ACTIVE\";\n last_request?: GateSCIConfigRequest;\n};\n\ntype MessageType = \"EIP191\" | \"EIP712\";\n\nexport type GateMessage = {\n account_id: number;\n data: string | Record<string, any>;\n id: number;\n message_type: MessageType;\n signature: string | null;\n der_signature: string | null;\n status: \"PENDING_APPROVAL\" | \"APPROVED\" | \"SIGNED\" | \"ABORTED\";\n type: \"MESSAGE_SIGNING_ALLOWED\";\n entityType: \"MESSAGE_SIGNING\";\n created_on?: string;\n notes: GateTransactionNote[];\n last_request?: GateMessageRequest;\n};\n\nexport type AdminDevice = [username: string, index: number];\n\nexport type GateGroup = {\n id: number;\n name: string;\n entityType: \"GROUP\";\n created_on: string;\n created_by: GateUser;\n description?: string;\n status: \"ACTIVE\" | \"PENDING\" | \"REVOKED\" | \"ABORTED\" | \"TO_MIGRATE\";\n is_internal: boolean;\n members: GateUser[];\n is_under_edit: boolean;\n last_request?: GateGroupRequest;\n is_tradelink?: boolean;\n};\n\ntype GateDigestSignature = {\n der: string;\n r: number;\n s: number;\n v: number | null;\n pub_key: string;\n};\n\ntype GateDigest = {\n digest: string;\n derivation_path: string;\n signature?: GateDigestSignature;\n index?: number;\n};\n\nexport type GateDigestGroup = {\n id: number;\n last_request?: GateDigestsRequest;\n account_id: number;\n created_by: GateUser;\n created_on: string;\n digests_data: GateDigest[];\n // todo check final status with gate\n status: \"PENDING_APPROVAL\" | \"APPROVED\";\n};\n\nexport type UTXOsPickingStrategy = \"MERGE_OUTPUTS\" | \"DEEP_OUTPUTS_FIRST\" | \"OPTIMIZE_SIZE\";\n\nexport type GateFees = {\n gas_price: string;\n gas_limit: string;\n fees_per_byte: string;\n fees: string;\n utxo_picking_strategy?: UTXOsPickingStrategy;\n storage_limit?: number;\n};\n\nexport type GateFeesEIP1559 = {\n base_fees: string;\n gas_limit: string;\n max_fees: string;\n max_fees_buffer_factor: string;\n priority_fees: string;\n};\n\nexport type AccountType =\n | \"Ethereum\"\n | \"Bitcoin\"\n | \"Erc20\"\n | \"Bep20\"\n | \"Ripple\"\n | \"Stellar\"\n | \"Tezos\"\n | \"Solana\"\n | \"Cardano\"\n | \"Polkadot\"\n | \"Tron\"\n | \"Trc20\";\n\nexport type AccountStatus =\n | \"PENDING_CREATE_IN_HSM\"\n | \"PENDING\"\n | \"APPROVED\"\n | \"PENDING_VIEW_ONLY\"\n | \"ACTIVE\"\n | \"VIEW_ONLY\"\n | \"PENDING_ACTIVATION\"\n | \"ABORTED\"\n | \"ACTIVATION_ABORTED\";\n\nexport type Unit = {\n name: string;\n code: string;\n magnitude: number;\n};\n\ntype AccountSettings = {\n id: number;\n fiat: string;\n currency_unit: Unit;\n unitIndex: number;\n blockchain_explorer: string;\n};\n\nexport type GateRuleMultiAuthStep = { quorum: number; group: GateGroup };\n\nexport type GateRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n data: GateRuleMultiAuthStep[];\n};\n\nexport type GateRuleThreshold = {\n type: \"THRESHOLD\";\n data: [\n {\n currency_type: \"CRYPTO\";\n max: string | null;\n min: string | null;\n },\n ];\n};\n\nexport type GateRuleWhitelist = {\n type: \"WHITELIST\";\n data: GateWhitelist[];\n};\n\nexport type GateRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\";\n data: [{ enabled: boolean }];\n};\n\ntype GateRuleTransactionFilterPreset =\n | \"TEZOS_DELEGATION\"\n | \"POLKADOT_STAKING\"\n | \"DEPLOY_CONTRACT\"\n | \"SOLANA_STAKING\"\n | \"CARDANO_STAKING\"\n | \"RAW_SIGNING\"\n | \"SEND\"\n | \"MESSAGE_SIGNING\"\n | \"CREATE_SPL_TOKEN_ACCOUNT\"\n | \"TRANSFER_SPL_TOKEN\"\n | \"STAKE\";\n\nexport type GateRuleTransactionFilter = {\n type: \"TRANSACTION_FILTER\";\n data:\n | { preset: Exclude<GateRuleTransactionFilterPreset, \"TRANSFER_SPL_TOKEN\"> }\n | { preset: \"TRANSFER_SPL_TOKEN\"; contract_address: string };\n};\n\nexport type GateGovernanceRule =\n | GateRuleMultiAuth\n | GateRuleThreshold\n | GateRuleWhitelist\n | GateRuleSCI\n | GateRuleTransactionFilter;\n\nexport type GateGovernanceRulesSet = {\n name: string;\n rules: GateGovernanceRule[];\n};\n\nexport type WeirdGateRuleMultiAuthStep =\n | { quorum: number; group_id: number }\n | { quorum: number; users: number[] };\n\nexport type WeirdGateRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n data: WeirdGateRuleMultiAuthStep[];\n};\n\nexport type WeirdGateRuleThreshold = {\n type: \"THRESHOLD\";\n data: [\n {\n currency_type: \"CRYPTO\";\n // *just* when creating threshold, `max` is optional and can't be null\n max?: string;\n min: string | null;\n },\n ];\n};\n\nexport type WeirdGateRuleWhitelist = {\n type: \"WHITELIST\";\n data: number[];\n};\n\nexport type WeirdGateGovernanceRule =\n | WeirdGateRuleMultiAuth\n | WeirdGateRuleThreshold\n | GateRuleSCI\n | GateRuleTransactionFilter\n | WeirdGateRuleWhitelist;\n\nexport type WeirdGateGovernanceRulesSet = {\n name: string;\n rules: WeirdGateGovernanceRule[];\n};\n\nexport type GateLabel = {\n id: number;\n name: string;\n info: {\n color: string;\n description: string;\n };\n};\n\nexport type GateAccountCommon = {\n id: number;\n account_type: AccountType;\n entityType: \"ACCOUNT\";\n address?: string;\n contract_address: string;\n name: string;\n settings: AccountSettings;\n balance: any; //Bignumber\n available_balance: any; //Bignumber\n currency: string;\n parent_balance?: any; //Bignumber\n has_access_to_parent: boolean | null;\n created_on: string;\n governance_rules: GateGovernanceRulesSet[] | null;\n next_governance_rules: GateGovernanceRulesSet[] | null;\n fresh_addresses: any;\n nfts_gallery_enabled?: boolean;\n is_hsm_coin_app_updated: boolean;\n is_under_edit: boolean;\n index: number;\n status: AccountStatus;\n xpub: string;\n parent: number | null;\n derivation_path: string;\n labels: GateLabel[];\n extended_public_key: {\n public_key: string;\n chain_code: string;\n };\n derivation_mode: \"STANDARD\" | \"NATIVE_SEGWIT\";\n entity_id?: number;\n last_request?: GateAccountRequest;\n is_tradelink?: boolean;\n tradelink_data?: GateAccountTradelinkData;\n synced_on: string | null;\n last_sync_requested_at: string | null;\n policy?: GatePolicy;\n is_raw_signing_account?: boolean;\n};\n\nexport interface GateAccountExchangeOptions {\n auto_repledge_enabled: boolean;\n requires_pre_approval: boolean;\n}\nexport interface GateAccountTradelinkData {\n asset_manager: GateTradelinkAssetManager;\n custodian: GateTradelinkThirdParty<\"CUSTODIAN\">;\n exchanges: Array<GateTradelinkExchange & GateAccountExchangeOptions>;\n total_repledge: string;\n}\n\nexport interface GateAccountEthereum extends GateAccountCommon {\n account_type: \"Ethereum\";\n sci_config: GateSCIConfig | null;\n ethereum_data?: {\n staking?: {\n total_staking: string;\n total_rewards: string;\n available_rewards: string;\n network_apy: string;\n };\n };\n}\n\nexport interface GateTradelinkThirdParty<T extends \"CUSTODIAN\" | \"ASSET_MANAGER\" | \"EXCHANGE\"> {\n code: string;\n id: string;\n logo_url: string | null;\n name: string;\n role: T;\n}\n\nexport interface GateTradelinkRequest extends GateGenericRequest {\n tradelink: GateTradelink;\n type: \"CREATE_TRADELINK\" | \"EDIT_TRADELINK\";\n target_type: \"TRADELINK\";\n edit_data?: {\n operators: string[]; // pub_keys\n };\n}\n\nexport interface GateTradelinkExchangeRequest extends GateGenericRequest {\n tradelink: GateTradelinkExchange;\n type: \"CREATE_TRADELINK_EXCHANGE\" | \"EDIT_TRADELINK_EXCHANGE\";\n target_type: \"TRADELINK_EXCHANGE\";\n tradelink_exchange: GateTradelinkExchange;\n edit_data?: {\n operators: string[]; // pub_keys\n addresses: Array<Omit<GateAddress, \"id\">>;\n };\n}\n\nexport interface GateTradelinkAssetManagerRequest extends GateGenericRequest {\n tradelink: GateTradelinkAssetManager;\n type: \"CREATE_TRADELINK_ASSET_MANAGER\" | \"EDIT_TRADELINK_ASSET_MANAGER\";\n target_type: \"TRADELINK_ASSET_MANAGER\";\n tradelink_asset_manager: GateTradelinkAssetManager;\n edit_data?: {\n operators: string[]; // pub_keys\n addresses: Array<Omit<GateAddress, \"id\">>;\n };\n}\n\nexport type SPLToken = {\n token_name: string;\n associated_token_account: string;\n account_name: string;\n contract_address: string;\n available: string;\n pending: string;\n status: \"ACTIVE\" | \"INACTIVE\" | \"VIEW_ONLY\";\n ticker: string;\n creation_transaction_hash: string;\n parent_id: number;\n};\n\nexport interface GateAccountBitcoin extends GateAccountCommon {\n account_type: \"Bitcoin\";\n}\nexport interface GateAccountTRC20 extends GateAccountCommon {\n account_type: \"Trc20\";\n parent_available_balance: BigNumber;\n}\nexport interface GateAccountERC20 extends GateAccountCommon {\n account_type: \"Erc20\";\n parent_available_balance: BigNumber;\n}\nexport interface GateAccountRipple extends GateAccountCommon {\n account_type: \"Ripple\";\n}\nexport interface GateAccountStellar extends GateAccountCommon {\n account_type: \"Stellar\";\n}\nexport interface GateAccountTezos extends GateAccountCommon {\n account_type: \"Tezos\";\n}\nexport interface GateAccountSolana extends GateAccountCommon {\n account_type: \"Solana\";\n solana_data?: {\n tokens?: SPLToken[];\n can_create_spl_token_accounts: boolean;\n };\n}\nexport interface GateAccountCardano extends GateAccountCommon {\n account_type: \"Cardano\";\n cardano_data: {\n balances: CardanoBalances;\n };\n}\nexport interface GateAccountTron extends GateAccountCommon {\n account_type: \"Tron\";\n tron_data: {\n available: number;\n bandwidth: number;\n energy: number;\n pending: number;\n total: number;\n };\n}\n\nexport interface GateAccountPolkadot extends GateAccountCommon {\n account_type: \"Polkadot\";\n polkadot_data: PolkadotAccountData;\n}\n\nexport type GateAccount =\n | GateAccountEthereum\n | GateAccountBitcoin\n | GateAccountERC20\n | GateAccountTRC20\n | GateAccountStellar\n | GateAccountTezos\n | GateAccountSolana\n | GateAccountPolkadot\n | GateAccountRipple\n | GateAccountCardano\n | GateAccountTron;\n\nexport type GateVaultEntityStatus = \"PENDING\" | \"ACTIVE\" | \"ABORTED\" | \"REVOKED\" | \"TO_MIGRATE\";\n\nexport type GateWorkspacePermission = \"ROOT\" | \"CREATE_ACCOUNT_WITH_POLICY\";\n\nexport type GateWorkspaceRuleStep = {\n quorum: number;\n users: string[]; // array of public keys\n};\n\nexport type GateWorkspaceRule = {\n id: number;\n permission: GateWorkspacePermission;\n status: \"ACTIVE\";\n steps: GateWorkspaceRuleStep[];\n\n // Gate will never serialize them, but assigning the key to respect what's in all the other entities\n last_request: null;\n};\n\nexport type GateExchange = {\n id: number;\n entityType: \"EXCHANGE\";\n created_by: GateUser;\n created_on: string;\n balances: {\n available: string;\n locked: string;\n total: string;\n };\n governance_rules: GateGovernanceRulesSet[] | null;\n last_request: GateExchangeRequest;\n name: string;\n platform: string;\n status: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type GatePolicy = {\n id: number;\n entityType: \"POLICY\";\n created_by: GateUser;\n created_on: string;\n last_request: GatePolicyRequest;\n name: string;\n currency: string;\n description: string | null;\n governance_rules: GateGovernanceRulesSet[];\n account_ids: GateAccount[\"id\"][];\n status: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type GateTradelinkEntity<T extends \"CUSTODIAN\" | \"ASSET_MANAGER\" | \"EXCHANGE\"> = Omit<\n GateTradelinkThirdParty<T>,\n \"role\"\n>;\n\nexport type GateTradelinkNetwork = {\n id: string;\n asset_managers: GateTradelinkEntity<\"ASSET_MANAGER\">[];\n custodian: GateTradelinkEntity<\"CUSTODIAN\">;\n exchanges: GateTradelinkEntity<\"EXCHANGE\">[];\n};\n\nexport type GateTradelinkOnboardingStatus = {\n status:\n | \"NOT_READY\"\n | \"READY_TO_ONBOARD\"\n | \"CUSTODIAN_ONBOARDED\"\n | \"EXCHANGE_ONBOARDED\"\n | \"HSM_READY\";\n};\n\nexport type GateVaultEntity = {\n id: number;\n entityType: \"VAULT_ENTITY\";\n name: string;\n accounts: GateAccount[];\n status: GateVaultEntityStatus;\n created_on: string;\n last_request?: GateVaultEntityRequest;\n};\n\ntype WhitelistType = \"TRANSACTION\" | \"SMART_CONTRACT\";\n\nexport type GateWhitelist = {\n id: number;\n name: string;\n entityType: \"WHITELIST\";\n description: string;\n addresses: GateAddress[];\n created_on: string;\n created_by: GateUser;\n approvals: Approval[];\n status: \"ACTIVE\" | \"PENDING\" | \"ABORTED\" | \"REVOKED\" | \"TO_MIGRATE\";\n last_request?: GateWhitelistRequest;\n whitelist_type?: WhitelistType;\n is_tradelink?: boolean;\n};\n\ntype GateTransactionNote = {\n title: string;\n content: string;\n};\n\nexport type GateTransactionType =\n | \"SEND\"\n | \"RECEIVE\"\n | \"PREBURN\"\n | \"BURN\"\n | \"MINT\"\n | \"DELEGATE\"\n | \"UNDELEGATE\"\n | \"DELEGATE_VOTE_TO_DREP\"\n | \"STAKING_REGISTER\"\n | \"STAKING_DEREGISTER\"\n | \"STAKING_DELEGATE\"\n | \"STAKING_WITHDRAW\"\n | \"CREATE_SPL_TOKEN_ACCOUNT\";\n\nexport type CardanoVoteDelegationDrep = \"ALWAYS ABSTAIN\" | null;\n\nexport type GateTransaction = {\n id: number;\n account_id: number;\n recipient: string;\n type: GateTransactionType;\n created_on: string;\n created_by: GateUser;\n labels: GateLabel[];\n tx_hash: string;\n status:\n | \"ABORTED\"\n | \"APPROVED\"\n | \"CONFIRMED\"\n | \"DROPPED\"\n | \"FAILED\"\n | \"FAILED_TO_BROADCAST\"\n | \"PENDING_APPROVAL\"\n | \"PENDING_CREATE_IN_HSM\"\n | \"SIGNED\"\n | \"SUBMITTED\";\n amount: string;\n max_fees?: string;\n notes: GateTransactionNote[];\n last_request?: GateTransactionRequest;\n failure_reason?: string | null;\n tx_parameters?: {\n drep?: CardanoVoteDelegationDrep;\n tradelink?: {\n type: \"SETTLEMENT\";\n settlement_id: string;\n pledge_id: string;\n };\n token_address?: string;\n };\n};\n\ntype Approval = {\n created_on: string;\n created_by: GateUser;\n type: \"APPROVE\" | \"ABORT\";\n};\n\nexport type GateAddress = {\n id: number;\n currency: string;\n address: string;\n name: string;\n destination_tags?: number[] | null;\n};\n\nexport type GateGenericRequest = {\n entityType: \"REQUEST\";\n created_by: GateUser | null;\n created_on: string;\n id: number;\n status: string;\n type: string;\n approvals?: RequestApproval[];\n approvals_steps: Array<{\n group: GateGroup;\n quorum: number;\n }>;\n current_step: number;\n target_id: number;\n target_type: string;\n quorum?: number;\n organization?: Organization;\n expired_at: Date;\n edit_data?: any;\n};\n\nexport interface GateAccountRequest extends GateGenericRequest {\n // TODO we probably want to have GateAccountBitcoin/Ethereum..etc.. based on target_type\n account: GateAccount;\n target_type:\n | \"BITCOIN_ACCOUNT\"\n | \"ETHEREUM_ACCOUNT\"\n | \"RIPPLE_ACCOUNT\"\n | \"TEZOS_ACCOUNT\"\n | \"POLKADOT_ACCOUNT\"\n | \"ERC20_ACCOUNT\"\n | \"STELLAR_ACCOUNT\"\n | \"SOLANA_ACCOUNT\"\n | \"CARDANO_ACCOUNT\"\n | \"TRON_ACCOUNT\";\n type:\n | \"CREATE_ACCOUNT\"\n | \"EDIT_ACCOUNT\"\n | \"REVOKE_ACCOUNT\"\n | \"EDIT_TOKEN_RULE\"\n | \"MIGRATE_ACCOUNT\"; // TODO migration code should be remove;\n request_data: Partial<{\n currency: { name: string };\n derivation_mode: string;\n entity_id: number | null;\n governance_rules: GateGovernanceRulesSet[];\n name: string;\n }>;\n}\n\nexport interface GateSPLTokenAccountRequest extends GateGenericRequest {\n account: GateAccount;\n target_type: \"SOLANA_ACCOUNT\";\n type: \"EDIT_TOKEN_RULE\";\n target_id: number;\n edit_data: {\n governance_rules: GateGovernanceRulesSet[];\n };\n request_data: Partial<{\n governance_rules: GateGovernanceRulesSet[];\n }>;\n contract_address: string;\n}\n\nexport interface GateActivateRequest extends GateGenericRequest {\n target_type: GateAccountRequest[\"target_type\"];\n target_id: number;\n target: GateAccount;\n type: \"ACTIVATE\";\n}\n\nexport interface GateRepledgeRequest extends GateGenericRequest {\n repledge: GateRepledge;\n target_type: \"REPLEDGE\";\n type: \"CREATE_REPLEDGE\";\n}\nexport interface GatePledgeIncrementRequest extends GateGenericRequest {\n pledge_increment: GatePledgeIncrement;\n target_type: \"PLEDGE_INCREMENT\";\n type: \"CREATE_PLEDGE_INCREMENT\";\n}\nexport interface GateForcedUnpledgeRequest extends GateGenericRequest {\n forced_unpledge: GateForcedUnpledge;\n target_type: \"FORCED_UNPLEDGE\";\n type: \"CREATE_FORCED_UNPLEDGE\";\n}\n\nexport interface GateUserRequest extends GateGenericRequest {\n url_id: string;\n user: GateUser;\n target_type: \"PERSON\";\n type:\n | \"REVOKE_USER\"\n | \"CREATE_ADMIN\"\n | \"CREATE_OPERATOR\"\n | \"CREATE_API_USER\"\n | \"CREATE_API_USER_ACCESS\"\n | \"MIGRATE_ADMIN\"\n | \"MIGRATE_OPERATOR\"; // TODO migration code should be remove\n}\n\nexport interface GateAPIV2UserAccessRequest extends GateGenericRequest {\n username: string;\n user: GateUser;\n api_key_id: string;\n api_key_secret: string;\n target_type: \"PERSON\";\n type: \"CREATE_API_USER\" | \"CREATE_API_USER_ACCESS\";\n}\n\nexport interface GateSCIConfigRequest extends GateGenericRequest {\n sciconfig: GateSCIConfig;\n target_type: \"SCI_CONFIG\";\n type: \"CREATE_SCICONFIG\" | \"EDIT_SCICONFIG\";\n edit_data?: {\n custom_contract_call_enabled: boolean;\n dapps: string[];\n };\n request_data?: {\n custom_contract_call_enabled: boolean;\n dapps: string[];\n };\n}\n\nexport interface GateMessageRequest extends GateGenericRequest {\n target_type: \"MESSAGE\";\n message: GateMessage;\n type: \"MESSAGE_SIGNING\";\n}\n\nexport interface GateWhitelistRequest extends GateGenericRequest {\n whitelist: GateWhitelist;\n target_type: \"WHITELIST\";\n type: \"CREATE_WHITELIST\" | \"EDIT_WHITELIST\" | \"MIGRATE_WHITELIST\"; // TODO migration code should be remove;\n edit_data?: {\n name?: string;\n addresses: GateAddress[];\n };\n}\n\nexport interface GateExchangeRequest extends GateGenericRequest {\n exchange: GateExchange;\n target_type: \"EXCHANGE\";\n type: \"IMPORT_EXCHANGE\" | \"EDIT_EXCHANGE\" | \"EDIT_EXCHANGE_CREDENTIALS\" | \"REVOKE_EXCHANGE\";\n}\n\nexport interface GateTransactionRequest extends GateGenericRequest {\n // TODO we probably want to have GateTransactionBitcoin/Ethereum..etc.. based on target_type\n transaction: GateTransaction;\n target_type:\n | \"BITCOIN_LIKE_TRANSACTION\"\n | \"ETHEREUM_LIKE_TRANSACTION\"\n | \"RIPPLE_LIKE_TRANSACTION\"\n | \"POLKADOT_LIKE_TRANSACTION\"\n | \"TEZOS_LIKE_TRANSACTION\"\n | \"STELLAR_LIKE_TRANSACTION\"\n | \"CARDANO_LIKE_TRANSACTION\";\n type: \"CREATE_TRANSACTION\";\n}\n\nexport const GateGroupRequestTypeDefs = [\n \"CREATE_GROUP\",\n \"EDIT_GROUP\",\n \"REVOKE_GROUP\",\n \"MIGRATE_GROUP\",\n] as const;\n\nexport interface GateGroupRequest extends GateGenericRequest {\n group: GateGroup;\n target_type: \"GROUP\";\n type: (typeof GateGroupRequestTypeDefs)[number]; // TODO migration code should be remove\n}\n\nexport interface GateDigestsRequest extends GateGenericRequest {\n digests: GateDigestGroup;\n target_type: \"DIGESTS\";\n type: \"SIGN_DIGESTS\";\n}\n\nexport interface GateOrganizationRequest extends GateGenericRequest {\n organization: Organization;\n target_type: \"ORGANIZATION\";\n type: \"UPDATE_QUORUM\";\n}\n\nexport interface GateAPIKeyRequest extends GateGenericRequest {\n api_key: GateAPIKey;\n target_type: \"VAULT_API_KEY\";\n type: \"CREATE_API_KEY\" | \"EDIT_API_KEY\" | \"REVOKE_API_KEY\";\n}\n\nexport interface GateTransferRequest extends GateGenericRequest {\n transfer: GateTransfer;\n target_type: \"TRANSFER\";\n type: \"CREATE_TRANSFER\";\n}\n\nexport interface GateVaultEntityRequest extends GateGenericRequest {\n vaultEntity: GateVaultEntity;\n target_type: \"ENTITY\";\n type: \"CREATE_ENTITY\" | \"EDIT_ENTITY\" | \"REVOKE_ENTITY\";\n edit_data?: {\n name: string;\n accounts: number[];\n };\n}\n\nexport interface GatePolicyRequest extends GateGenericRequest {\n policy: GatePolicy;\n target_type: \"POLICY\";\n type: \"CREATE_POLICY\" | \"EDIT_POLICY\";\n}\n\nexport type Organization = {\n name: string;\n domain_name: string;\n workspace: string;\n number_of_admins: number;\n quorum: number;\n};\n\ntype RequestApproval = {\n created_by: GateUser;\n created_on: string;\n type: string;\n step: number;\n};\n\n// a LAM user is referenced by string\nexport type UserDevice = number | string;\n\nexport type ManifestGroup = {\n name: string;\n users: UserDevice[];\n description?: string;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestAccountRuleMultiAuthStep =\n | { quorum: number; users: UserDevice[] }\n | { quorum: number; group: string };\n\nexport type ManifestAccountRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\";\n steps: ManifestAccountRuleMultiAuthStep[];\n};\n\nexport type ManifestAccountRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\";\n enabled: boolean;\n};\n\nexport type ManifestAccountRuleTezosDelegation = {\n type: \"TEZOS_DELEGATION\";\n};\nexport type ManifestAccountRulePolkadotStaking = {\n type: \"POLKADOT_STAKING\";\n};\nexport type ManifestAccountRuleDeployContract = {\n type: \"DEPLOY_CONTRACT\";\n};\nexport type ManifestAccountRuleSolanaStaking = {\n type: \"SOLANA_STAKING\";\n};\nexport type ManifestAccountRuleCardanoStaking = {\n type: \"CARDANO_STAKING\";\n};\nexport type ManifestAccountRuleRawSigning = {\n type: \"RAW_SIGNING\";\n};\nexport type ManifestAccountRuleSend = {\n type: \"SEND\";\n};\nexport type ManifestAccountRuleStake = {\n type: \"STAKE\";\n};\nexport type ManifestAccountRuleMessageSigning = {\n type: \"MESSAGE_SIGNING\";\n};\n\nexport type ManifestAccountRuleCreateSplTokenAccount = {\n type: \"CREATE_SPL_TOKEN_ACCOUNT\";\n};\n\nexport type ManifestAccountRuleTransferSplToken = {\n type: \"TRANSFER_SPL_TOKEN\";\n contractAddress: string;\n};\n\nexport type ManifestAccountRuleWhitelist = {\n type: \"WHITELIST\";\n whitelists: string[];\n};\n\nexport type ManifestAccountRuleThreshold = {\n type: \"THRESHOLD\";\n min?: number;\n max?: number;\n};\n\nexport type ManifestAccountRule =\n | ManifestAccountRuleMultiAuth\n | ManifestAccountRuleWhitelist\n | ManifestAccountRuleSCI\n | ManifestAccountRuleDeployContract\n | ManifestAccountRuleThreshold\n | ManifestAccountRulePolkadotStaking\n | ManifestAccountRuleSolanaStaking\n | ManifestAccountRuleCardanoStaking\n | ManifestAccountRuleRawSigning\n | ManifestAccountRuleTezosDelegation\n | ManifestAccountRuleSend\n | ManifestAccountRuleMessageSigning\n | ManifestAccountRuleCreateSplTokenAccount\n | ManifestAccountRuleTransferSplToken\n | ManifestAccountRuleStake;\n\nexport type ManifestAccountConfig = {\n nftGallery?: boolean;\n};\n\ntype ManifestTradelinkOrg = {\n name: string;\n};\n\ntype AccountTradelinkExchangeData = {\n name: string;\n requires_pre_approval: boolean;\n auto_repledge_enabled: boolean;\n};\n\nexport type ManifestAccountTradelinkData = {\n currency: string;\n custodian: ManifestTradelinkOrg;\n asset_manager: ManifestTradelinkOrg;\n exchanges: AccountTradelinkExchangeData[];\n};\n\ntype ManifestCryptoAccount = {\n name: string;\n currency: string;\n accountType?: string;\n derivationMode?: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ABORTED\" | \"ACTIVE\";\n index?: number;\n readOnly?: {\n xpub: string;\n publicKey: string;\n chainCode: string;\n address?: string;\n };\n tradelink_data?: ManifestAccountTradelinkData;\n // all the fields that doesn't require a request to be changed\n config?: ManifestAccountConfig;\n};\n\ntype ManifestERC20Account = {\n name: string;\n contractAddress: string;\n parentAccount?: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ABORTED\" | \"ACTIVE\";\n index?: number;\n tradelink_data?: ManifestAccountTradelinkData;\n};\n\nexport type ManifestAccount = ManifestCryptoAccount | ManifestERC20Account;\n\nexport type ManifestVaultEntity = {\n name: string;\n accounts?: string[];\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestWhitelistAddress = {\n currency: string;\n name?: string;\n address: string;\n destination_tags?: number[] | null;\n};\n\nexport type ManifestWhitelist = {\n name: string;\n addresses: ManifestWhitelistAddress[];\n description?: string;\n status?: \"PENDING\" | \"ABORTED\";\n type?: WhitelistType;\n};\n\nexport type ManifestUser = {\n device: number;\n};\n\nexport type ManifestAPIUser = {\n name: string;\n viewAll?: boolean;\n};\n\nexport type ManifestAPIV2User = {\n name: string;\n role: string;\n publicKey?: string;\n viewAll?: boolean;\n};\n\nexport type ManifestExchange = {\n name: string;\n platform: string;\n rules?: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n\n // note for the future: one day we will be able to put\n // extra fields in the configuration, for now, all exchanges\n // receive `apiKey` and `secret` only\n configuration: {\n apiKey: string;\n apiSecret: string;\n };\n};\n\nexport type ManifestPolicy = {\n name: string;\n currency?: string;\n rules: Array<ManifestAccountRule[]>;\n status?: \"PENDING\" | \"ACTIVE\" | \"ABORTED\";\n};\n\nexport type ManifestWorkspaceRuleStep = {\n quorum: number;\n users: string[]; // array of api admin usernames\n};\n\nexport type ManifestWorkspaceRule = {\n permission: Exclude<GateWorkspacePermission, \"ROOT\">;\n steps: ManifestWorkspaceRuleStep[];\n};\n\ninterface ManifestCommon {\n salt?: string;\n quorum?: number;\n customUsernames?: Record<string, string>;\n groups?: ManifestGroup[];\n accounts?: ManifestAccount[];\n entities?: ManifestVaultEntity[];\n whitelists?: ManifestWhitelist[];\n exchanges?: ManifestExchange[];\n policies?: ManifestPolicy[];\n tradelink?: ManifestTradelink;\n contractApprovals?: ManifestContractApproval[];\n workspaceRules?: ManifestWorkspaceRule[];\n}\n\nexport type ManifestTradelink = {\n onboarded: boolean;\n exchanges: ManifestTradelinkEntityWithAddresses[];\n assetManagers: ManifestTradelinkEntityWithAddresses[];\n custodians: ManifestTradelinkEntity[];\n};\n\nexport type ManifestTradelinkEntity = {\n id: string;\n name: string;\n logoUrl: string;\n code: string;\n users: {\n operators?: number[];\n apiV2?: string[];\n };\n};\n\nexport type ManifestTradelinkEntityWithAddresses = {\n id: string;\n name: string;\n logoUrl: string;\n code: string;\n users: {\n operators?: number[];\n apiV2: string[];\n };\n addresses: ManifestWhitelistAddress[];\n};\n\nexport type ManifestContractApproval = {\n user: number;\n contractNames: string[];\n};\n\nexport interface Manifest extends ManifestCommon {\n users?: {\n operators?: Array<number | ManifestUser>;\n admins?: Array<number | ManifestUser>;\n api?: Array<string | ManifestAPIUser>;\n apiV2?: Array<ManifestAPIV2User>;\n };\n}\n\nexport interface DeserializedManifest extends ManifestCommon {\n users?: {\n operators?: ManifestUser[];\n admins?: ManifestUser[];\n api?: ManifestAPIUser[];\n apiV2?: ManifestAPIV2User[];\n };\n}\n\nexport const feesLevels = [\"SLOW\", \"NORMAL\", \"FAST\", \"CUSTOM\"] as const;\nexport type FeesLevel = (typeof feesLevels)[number];\n\nexport type ManifestTransaction = {\n // account name\n account: string;\n // recipient address\n recipient: string;\n // transaction amount in default unit (e.g BTC)\n amount: string | number;\n utxosPickingStrategy?: UTXOsPickingStrategy;\n contractPayload?: string;\n transactionType?: GateTransactionType;\n feesLevel?: FeesLevel;\n gasPrice?: string;\n gasLimit?: string;\n title?: string;\n comment?: string;\n maxFees?: string;\n\n // EIP1559-specific\n baseFees?: string;\n maxFeesBufferFactor?: string;\n priorityFees?: string;\n};\n\nexport type OnboardingContext = {\n pool: DevicesPool;\n getState: () => Promise<any>;\n getChallenge: () => Promise<any>;\n next: (data?: any) => Promise<void>;\n collectMasterSeedFragment: (challenge: any, deviceIndex: number) => Promise<void>;\n validateSO: (challenge: any, deviceIndex: number) => Promise<void>;\n registerAdmin: (data: any, deviceIndex: number) => Promise<void>;\n registerSO: (data: any, deviceIndex: number) => Promise<void>;\n registerWrappingKey: (challenge: any, deviceIndex: number) => Promise<void>;\n};\n\nexport type OnboardingStep =\n | \"WRAPPING_KEYS_REGISTRATION\"\n | \"ADMINS_REGISTRATION\"\n | \"QUORUM_SETTINGS\"\n | \"SHARED_OWNERS_REGISTRATION\"\n | \"ADMIN_APPROVALS\"\n | \"MASTER_SEED_GENERATION\";\n\nexport interface RecordLogger extends Logger {\n logs: string[];\n reset: () => void;\n expect: (s: string) => void;\n}\n\nexport type RunnableOptions = {\n logger?: Logger;\n};\n\nexport type MockNetworkResponse = [\n string, // verb: GET, POST, ...\n string, // url\n number, // returned status code\n any?, // returned data\n any?, // expected request payload\n any?, // returned headers\n any?, // expected request headers\n];\n\nexport type LegacyERC20Token = {\n blockchain_name: \"foundation\" | \"ropsten\" | \"goerli\";\n contract_address: string;\n decimals: number;\n hsm_account_parameters: string;\n hsm_signature: string;\n name: string;\n ticker: string;\n};\n\nexport type GateCoinCapabilities = {\n signer: {\n raw_signing_supported: boolean;\n send_clear_signing_supported: boolean;\n stake_clear_signing_supported: boolean;\n };\n wallet: {\n balance_supported: boolean;\n broadcast_supported: boolean;\n crafting_supported: boolean;\n tx_history_supported: boolean;\n };\n};\n\nexport type GateTokenCurrency = {\n contract_address: string;\n family: \"ethereum\";\n name: string;\n parent_currency: \"ethereum\" | \"ethereum_ropsten\" | \"ethereum_goerli\" | \"bsc\";\n ticker: string;\n token_type: \"erc20\" | \"stablecoin\" | \"bep20\";\n units: [Unit];\n delisted?: boolean;\n disable_countervalue?: boolean;\n capabilities?: GateCoinCapabilities;\n\n // FIXME: here only for retro-compatibility with gate < 3.6 (that expect front to send hsm parameters)\n __legacy_hsm_account_parameters?: string;\n __legacy_hsm_signature?: string;\n};\n\nexport type GateCurrency = {\n name: string;\n type: \"CRYPTO\";\n family: string;\n confirmations_needed: number;\n units: Unit[];\n capabilities?: GateCoinCapabilities;\n};\n\n// surprisingly the gate expect some fields to change\n// from the erc20 token *it literally send* us\nexport type WeirdGateERC20Token = {\n ticker: string;\n address: string;\n decimals: number;\n hsm_signature: string;\n hsm_account_parameters: string;\n};\n\nexport type WeirdGateTokenCurrency = {\n type: \"erc20\" | \"stablecoin\";\n address: string;\n};\n\nexport type DaemonAddress = {\n address: string;\n derivation_path: string;\n};\n\nexport type VaultEvent =\n | Ev<\"ACCOUNT_UPDATED\", GateAccount>\n | Ev<\"REQUEST_CREATED\", GateRequest>\n | Ev<\"REQUEST_ABORTED\", GateRequest>\n | Ev<\"REQUEST_APPROVAL\", GateRequest>\n | Ev<\"REQUEST_APPROVED\", GateRequest>\n | Ev<\"TRANSACTION_BROADCASTED\", GateTransaction>\n | Ev<\"TRANSACTION_RECEIVED\", GateTransaction>\n | Ev<\"TRANSACTION_FAILED\", GateTransaction>\n | Ev<\"USER_REGISTERED\", GateUser>\n | Ev<\"USER_SUSPENDED\", GateUser>;\n\ntype Ev<T, P> = { type: T; payload: P };\n\nexport type { CryptoCurrency, TokenCurrency };\nexport type UserWithDevice = { deviceIndex: number; user: GateUser };\nexport type UserWithoutDevice = { username: string; user: GateUser };\n\nexport type CurrencyOrToken = CryptoCurrency | TokenCurrency;\n\nexport type Network = <T>(\n method: \"POST\" | \"PUT\" | \"GET\" | \"DELETE\",\n url: string,\n data?: any,\n requestOptions?: any,\n) => Promise<T>;\n\nexport type WipeOptions = {\n gate: string;\n lam?: string;\n lamAPIKey?: string;\n hsmCompartmentID: number;\n hsmEndpoint: string;\n hsmCert: Buffer;\n hsmCertKey: Buffer;\n monotonicCountersSize?: number;\n fileSystemSize?: number;\n};\n\nexport interface BakeManifestOptions extends RunnableOptions {\n noApproval?: boolean;\n runner?: ManifestRunner;\n untilStep?: OnboardingStep;\n twoStepsRequest?: boolean;\n waitForActive?: boolean;\n\n // revault-compat onboarding\n revaultOnboarding?: {\n compartmentId: number;\n hsmScriptsVersion: string;\n revaultApiUrl: string;\n revaultRootAuthToken: string;\n };\n}\n\n// 'MR' stands for 'ManifestRunner'\ntype MRAction<P, R> = (params: P) => Promise<R>;\n\nexport type MRCreateUserParams = {\n role: \"admin\" | \"operator\";\n userID: string;\n name: string;\n device: number;\n};\n\nexport type MRCreateAPIUserParams = {\n user: ManifestAPIUser;\n userID: string;\n name: string;\n};\n\nexport type MRCreateAPIV2UserParams = {\n user: ManifestAPIV2User;\n publicKey: string;\n role: string;\n name: string;\n};\n\nexport type MRBakeGroupParams = {\n group: ManifestGroup;\n data: DataGroup;\n existingRequest: GateGroupRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeAccountParams = {\n account: ManifestAccount;\n data: DataAccount;\n existingRequest: GateAccountRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n waitForActive?: boolean;\n tradelinkAM?: ManifestAPIV2User;\n};\n\nexport type MRBakeVaultEntityParams = {\n vaultEntity: ManifestVaultEntity;\n data: DataVaultEntity;\n existingRequest: GateVaultEntityRequest | null;\n noApproval: boolean;\n};\n\nexport type MRBakeWhitelistParams = {\n whitelist: ManifestWhitelist;\n data: DataWhitelist;\n existingRequest: GateWhitelistRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeExchangeParams = {\n exchange: ManifestExchange;\n data: DataExchange;\n existingRequest: GateExchangeRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakePolicyParams = {\n policy: ManifestPolicy;\n data: DataPolicy;\n existingRequest: GatePolicyRequest | null;\n noApproval: boolean;\n twoStepsRequest?: boolean;\n};\n\nexport type MRBakeTradelinkOnboardingParams = {\n type: \"CREATE_TRADELINK\";\n operators: string[];\n};\n\nexport type MREditQuorumParams = {\n quorum: number;\n};\n\nexport type MREditWorkspaceRuleParams = {\n rule: ManifestWorkspaceRule;\n usersByName: Record<string, GateUser>;\n};\n\nexport type MBRBakeTradelinkEntityWithAddresses = {\n operators: string[];\n addresses: ManifestWhitelistAddress[];\n name: string;\n};\n\nexport type MRBakeTradelinkEntityParams = {\n tradelinkEntity: ManifestTradelinkEntity | ManifestTradelinkEntityWithAddresses;\n type: \"asset_managers\" | \"exchanges\" | \"custodians\";\n};\n\nexport type MRBakeTradelinkEntityOnboardingParams = {\n tradelinkEntity: MBRBakeTradelinkEntityWithAddresses;\n type: \"asset_managers\" | \"exchanges\";\n tradelinkEntityApprover: ManifestAPIV2User; // entity approver, like exchange approver of the exchange\n};\n\nexport type MRBakeTradelinkNetworkParams = {\n custodians: DataTradelinkNetworkEntity<\"CUSTODIAN\">[];\n exchanges: DataTradelinkNetworkEntity<\"EXCHANGE\">[];\n assetManagers: DataTradelinkNetworkEntity<\"ASSET_MANAGER\">[];\n};\n\nexport type DataTradelinkNetworkEntity<T extends \"CUSTODIAN\" | \"EXCHANGE\" | \"ASSET_MANAGER\"> = Pick<\n GateTradelinkThirdParty<T>,\n \"id\" | \"name\"\n>;\n\nexport type ManifestRunner = {\n editQuorum: (params: MREditQuorumParams) => Promise<void>;\n editWorkspaceRule: (params: MREditWorkspaceRuleParams) => Promise<void>;\n\n createUser: MRAction<MRCreateUserParams, GateUserRequest>;\n createAPIUser: (\n params: MRCreateAPIUserParams,\n r: RecipeManifestResult,\n ) => Promise<GateUserRequest>;\n createAPIV2User: MRAction<MRCreateAPIV2UserParams, GateUserRequest>;\n createAPIV2UserAccess: MRAction<MRCreateAPIV2UserParams, GateAPIV2UserAccessRequest>;\n\n createGroup: MRAction<MRBakeGroupParams, GateGroupRequest>;\n editGroup: MRAction<MRBakeGroupParams, GateGroupRequest>;\n\n createAccount: MRAction<MRBakeAccountParams, GateAccountRequest>;\n editAccount: MRAction<MRBakeAccountParams, GateAccountRequest>;\n\n createVaultEntity: MRAction<MRBakeVaultEntityParams, GateVaultEntityRequest>;\n editVaultEntity: MRAction<MRBakeVaultEntityParams, GateVaultEntityRequest>;\n\n createWhitelist: MRAction<MRBakeWhitelistParams, GateWhitelistRequest>;\n editWhitelist: MRAction<MRBakeWhitelistParams, GateWhitelistRequest>;\n\n createExchange: MRAction<MRBakeExchangeParams, GateExchangeRequest>;\n editExchange: MRAction<MRBakeExchangeParams, GateExchangeRequest>;\n\n createPolicy: MRAction<MRBakePolicyParams, GatePolicyRequest>;\n\n createTradelink: MRAction<MRBakeTradelinkOnboardingParams, GateTradelinkRequest>;\n createTradelinkEntity: <T extends \"ASSET_MANAGER\" | \"EXCHANGE\" | \"CUSTODIAN\">(\n params: MRBakeTradelinkEntityParams,\n ) => Promise<GateTradelinkEntity<T>>;\n onboardTradelinkEntity: MRAction<\n MRBakeTradelinkEntityOnboardingParams,\n GateTradelinkExchangeRequest | GateTradelinkAssetManagerRequest\n >;\n createTradelinkNetwork: MRAction<MRBakeTradelinkNetworkParams, GateTradelinkNetwork>;\n};\n\nexport type HsmCertificate = {\n attestation_pub: string;\n certificate: string;\n code_hash: string;\n signature: string;\n};\n\nexport type SecureChannel = {\n request_id: string;\n handshake: string;\n ciphertext: string;\n challenge: string;\n u2f_register_data: string;\n // defined for user registration\n handshake_attestation?: HsmCertificate;\n};\n\n// TODO centralize types with vault-remote\nexport type DeploymentStepID =\n | \"checkConnectivity\"\n | \"createNamespace\"\n | \"installNamespace\"\n | \"setupFeatureFlagsProvider\"\n | \"waitPods\"\n | \"success\";\n\nexport type DeploymentStep = {\n key: DeploymentStepID;\n labelWaiting: string;\n labelCurrent: string;\n labelSuccess: string;\n};\n\nexport type MVInstanceDeploymentFF = { key: string; set: boolean };\n\nexport type MVInstanceDeployment = {\n id: string;\n\n startedOn: Date;\n finishedOn: Date | null;\n\n status: \"BUSY\" | \"SUCCESS\" | \"ERROR\";\n steps: DeploymentStep[];\n currentStep: DeploymentStepID;\n\n instance: MVInstance;\n flags: Array<MVInstanceDeploymentFF>;\n\n error: Error | null;\n spawnFailTimeout?: ReturnType<typeof setTimeout>;\n};\n\nexport type MVPod = {\n name: string;\n podName: string;\n status: \"BUSY\" | \"HEALTHY\" | \"ERROR\" | \"EVICTED\";\n};\n\nexport type MVInstance = {\n name: string;\n status: string;\n host: string;\n pods: MVPod[];\n};\n\nexport type InteractionResponses = {\n network: Network;\n transport: any;\n secure_channel: any;\n pairing_payload: any;\n blob: any;\n confidentiality_key: any;\n attestation: any;\n u2f_key: any;\n onboardingRegisterChallenge: any;\n role: any;\n username: any;\n register_data: any;\n validation_key: any;\n u2f_register: any;\n validate_device: any;\n attested_handshake: any;\n};\n\nexport type Interaction<T> = {\n responseKey: string;\n action: (responses: InteractionResponses) => Promise<T>;\n device?: boolean;\n};\n\nexport type GetU2FPubKeyInteraction = Interaction<{\n pubKey: string;\n signature: Buffer;\n}>;\n\nexport type Interactions = {\n approveFlow: Interaction<any>[];\n approveFlowWithoutHSM: Interaction<any>[];\n doStartKpatternAsResponder: Interaction<any>;\n validateDevice: Interaction<any>;\n validatePayload: Interaction<any>;\n postApproval: Interaction<any>;\n postSimpleApproval: Interaction<any>;\n ensurePartitionPairing: Interaction<any>;\n finalizePairing: Interaction<any>;\n getAttestation: Interaction<{ attestation: Buffer }>;\n getConfidentialityPublicKey: Interaction<any>;\n getSecureChannel: Interaction<any>;\n getU2FChallenge: Interaction<any>;\n getU2FPublicKey: GetU2FPubKeyInteraction;\n getValidationPublicKey: Interaction<any>;\n initPairing: Interaction<any>;\n loginFlow: Interaction<any>[];\n operatorGetChallenge: Interaction<any>;\n postU2FSignature: Interaction<any>;\n postUserRegistration: Interaction<any>;\n readOnlyLoginFlow: (userName: string) => Interaction<any>[];\n registerUserFlow: Interaction<any>[];\n u2fAuthenticate: Interaction<any>;\n validateOperation: Interaction<any>[];\n};\n\n// API Types\nexport type APIBearerTokenResponse = {\n access_token: string;\n expires_in: number;\n refresh_token: string;\n session_state: string;\n token_type: string;\n};\n\nexport type APIGetChallengeResponse = {\n challenge: string;\n id: number;\n};\n\n// FIXME properly define this type at this is the response to /request\n// and it handle a lot of type, request target, request id\nexport type APIRequestResponse = {\n id: number;\n status: \"PENDING_APPROVAL\" | \"APPROVED\" | \"SUBMITTED\" | \"ABORTED\";\n};\n\nexport type APICreateTransactionRequest = {\n data: APIBitcoinLikeSend | APIEthereumLikeSend;\n note?: {\n content: string;\n title: string;\n };\n type: \"CREATE_TRANSACTION\";\n};\n\nexport type APIGenericSend = {\n account_id: number;\n fees_strategy: GenericFeesStrategy;\n transaction_data: {\n account_name: string;\n amount: string;\n max_fees: string;\n recipient: string;\n };\n};\n\nexport type APIBitcoinLikeSend = APIGenericSend & {\n transaction_data: {\n currency: \"bitcoin\" | \"bitcoin_testnet\";\n };\n transaction_type: \"BITCOIN_LIKE_SEND\";\n};\n\nexport type APIEthereumLikeSend = APIGenericSend & {\n transaction_data: {\n currency: \"ethereum\" | \"ethereum_sepolia\" | \"polygon\" | \"ethereum_holesky\";\n contract_address?: string;\n };\n transaction_type: \"ETHEREUM_LIKE_SEND\";\n};\n\ntype GenericFeesStrategy = {\n type: \"SPEED\";\n data: {\n speed: \"FAST\" | \"NORMAL\" | \"SLOW\";\n };\n};\n\n// FIXME properly define this type\nexport type APIEstimateFeesResponse = {\n max_fees: string;\n};\n\nexport type PsdModel = \"BLUE\" | \"STAX\";\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-YAB42L5H.js","../src/recipeManifest.ts"],"names":[],"mappings":"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","file":"/home/runner/work/vault-ts/vault-ts/packages/common/lib/chunk-YAB42L5H.js","sourcesContent":[null,"import invariant from \"invariant\";\nimport keyBy from \"lodash/keyBy\";\nimport sortBy from \"lodash/sortBy\";\n\nimport { getCryptoCurrencyById } from \"./currencies\";\nimport {\n GateGovernanceRulesSet,\n GateTradelink,\n GateTradelinkAssetManager,\n GateTradelinkEntity,\n GateTradelinkExchange,\n GateTradelinkNetwork,\n GateTradelinkOnboardingStatus,\n GateWorkspacePermission,\n GateWorkspaceRule,\n ManifestAccountRuleCreateSplTokenAccount,\n ManifestAccountRuleTransferSplToken,\n ManifestWorkspaceRule,\n} from \"./types\";\nimport {\n Connection,\n DevicesPool,\n GateAccount,\n GateExchange,\n GateGroup,\n GatePolicy,\n GateUser,\n GateUserRequest,\n GateVaultEntity,\n GateWhitelist,\n Manifest,\n ManifestAccountConfig,\n ManifestAccountRule,\n ManifestAccountRuleCardanoStaking,\n ManifestAccountRuleDeployContract,\n ManifestAccountRuleMessageSigning,\n ManifestAccountRuleMultiAuth,\n ManifestAccountRulePolkadotStaking,\n ManifestAccountRuleRawSigning,\n ManifestAccountRuleSCI,\n ManifestAccountRuleSolanaStaking,\n ManifestAccountRuleStake,\n ManifestAccountRuleTezosDelegation,\n ManifestAccountRuleThreshold,\n ManifestAccountRuleWhitelist,\n ManifestExchange,\n ManifestPolicy,\n ManifestWhitelistAddress,\n Organization,\n UserWithDevice,\n UserWithoutDevice,\n} from \"./types\";\nimport { getDefaultUsername } from \"./utils\";\nimport { deserializeUnitValue, unwrapConnection } from \"./utils\";\n\nconst ADMIN_START_DEVICE_INDEX = 4;\nconst DEFAULT_ADMINS_COUNT = 3;\nconst NB_SHARED_OWNERS = 3;\n\nexport const getDeviceIndex = (index: number): number => {\n const n = ADMIN_START_DEVICE_INDEX + index;\n if (n < ADMIN_START_DEVICE_INDEX + NB_SHARED_OWNERS) {\n return n;\n }\n return n + NB_SHARED_OWNERS;\n};\n\nexport type GateGroupsByName = Record<string, GateGroup>;\nexport type GateWhitelistsByName = Record<string, GateWhitelist>;\nexport type GateAccountsByName = Record<string, GateAccount>;\nexport type GateVaultEntitiesByName = Record<string, GateVaultEntity>;\nexport type GateExchangesByName = Record<string, GateExchange>;\nexport type GatePoliciesByName = Record<string, GatePolicy>;\nexport type GateTradelinkCustodianByName = Record<string, GateTradelinkEntity<\"CUSTODIAN\">>;\nexport type GateTradelinkHSMCustodianByName = Record<string, GateTradelink>;\nexport type GateTradelinkExchangeByName = Record<string, GateTradelinkEntity<\"EXCHANGE\">>;\nexport type GateTradelinkHSMExchangeByName = Record<string, GateTradelinkExchange>;\nexport type GateTradelinkHSMAssetManagerByName = Record<string, GateTradelinkAssetManager>;\nexport type GateTradelinkAssetManagerByName = Record<string, GateTradelinkEntity<\"ASSET_MANAGER\">>;\n\nexport type RecipeRawData = {\n pendingUserRequests: GateUserRequest[];\n groupsByName: GateGroupsByName;\n whitelistsByName: GateWhitelistsByName;\n accountsByName: GateAccountsByName;\n vaultEntitiesByName: GateVaultEntitiesByName;\n exchangesByName: GateExchangesByName;\n policiesByName: GatePoliciesByName;\n usersWithDevice: UserWithDevice[];\n usersWithoutDevice: UserWithoutDevice[];\n tradelinkCustodiansByName: GateTradelinkCustodianByName;\n tradelinkHSMCustodiansByName: GateTradelinkHSMCustodianByName;\n tradelinkExchangesByName: GateTradelinkExchangeByName;\n tradelinkHSMExchangesByName: GateTradelinkHSMExchangeByName;\n tradelinkHSMAssetManagersByName: GateTradelinkHSMAssetManagerByName;\n tradelinkAssetManagersByName: GateTradelinkAssetManagerByName;\n tradelinkNetwork: GateTradelinkNetwork;\n tradelinkOnboardingStatus: GateTradelinkOnboardingStatus;\n};\n\nexport type RecipeManifestResult = {\n manifest: Manifest;\n rawData: RecipeRawData;\n};\n\nexport type RecipeManifestOptions = {\n saveAccountsIndexes?: boolean;\n saveAccountsTypes?: boolean;\n};\n\nexport default async function recipeManifest(\n pool: DevicesPool,\n options: RecipeManifestOptions = {},\n): Promise<RecipeManifestResult> {\n const adminDevices = await pool.getOnboardingAdminDevices();\n const admin = await pool.login(adminDevices[0]![1]);\n const [\n organization,\n pendingUserRequestsConnection,\n usersConnection,\n groupsConnection,\n accountsConnection,\n vaultEntitiesConnection,\n whitelistsConnection,\n exchangesConnection,\n policiesConnection,\n tradelinkCustodianConnection,\n tradelinkHSMCustodianConnection,\n tradelinkExchangeConnection,\n tradelinkHSMExchangeConnection,\n tradelinkHSMAssetManagerConnection,\n tradelinkAssetManagerConnection,\n tradelinkNetwork,\n tradelinkOnboardingStatus,\n allWorkspaceRulesConnection,\n ] = await Promise.all([\n admin.network<Organization>(\"GET\", \"/organization\"),\n admin\n .network<Connection<GateUserRequest>>(\n \"GET\",\n `/requests?type=CREATE_ADMIN&type=CREATE_OPERATOR&type=CREATE_API_USER&status=PENDING_REGISTRATION&status=PENDING_APPROVAL`,\n )\n // for some reason this particular one can fail when targeting prod (not sure why)\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateUser>>(\n \"GET\",\n \"/people?status=ACTIVE&status=ACCESS_SUSPENDED&role=ADMIN&role=OPERATOR&pageSize=-1\",\n ),\n admin.network<Connection<GateGroup>>(\"GET\", \"/groups?pageSize=-1\"),\n admin.network<Connection<GateAccount>>(\n \"GET\",\n \"/accounts?status=ACTIVE&status=APPROVED&status=PENDING&status=VIEW_ONLY&pageSize=-1\",\n ),\n admin.network<Connection<GateVaultEntity>>(\"GET\", \"/entities?pageSize=-1\"),\n admin.network<Connection<GateWhitelist>>(\"GET\", \"/whitelists?pageSize=-1\"),\n admin\n .network<Connection<GateExchange>>(\"GET\", \"/exchanges?pageSize=-1\")\n // handle case where /exchanges is not supported by Gate\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GatePolicy>>(\"GET\", \"/policies?pageSize=-1\")\n // handle case where /policies is not supported by Gate\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkEntity<\"CUSTODIAN\">>>(\"GET\", \"/tradelink/custodians\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateTradelink>>(\"GET\", \"/tradelink/hsm-custodians\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n\n admin.network<Connection<GateTradelinkEntity<\"EXCHANGE\">>>(\"GET\", \"/tradelink/exchanges\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<Connection<GateTradelinkExchange>>(\"GET\", \"/tradelink/hsm-exchanges\").catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkAssetManager>>(\"GET\", \"/tradelink/hsm-asset-managers\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin\n .network<Connection<GateTradelinkEntity<\"ASSET_MANAGER\">>>(\"GET\", \"/tradelink/asset_managers\")\n .catch(\n /* istanbul ignore next */ () => ({\n edges: [],\n pageInfo: { hasNextPage: false, count: 0 },\n }),\n ),\n admin.network<GateTradelinkNetwork>(\"GET\", \"/tradelink/network\").catch(\n /* istanbul ignore next */ () => ({\n id: \"\",\n asset_managers: [],\n custodian: {\n approver_group_id: 0,\n code: \"\",\n id: \"\",\n logo_url: \"\",\n name: \"\",\n whitelist_id: 0,\n },\n exchanges: [],\n }),\n ),\n admin\n .network<GateTradelinkOnboardingStatus>(\"GET\", \"/tradelink/onboarding\")\n .catch(\n /* istanbul ignore next */ (): GateTradelinkOnboardingStatus => ({ status: \"NOT_READY\" }),\n ),\n admin.network<Connection<GateWorkspaceRule>>(\"GET\", \"/workspace-rules\").catch(\n /* istanbul ignore next */ (): Connection<GateWorkspaceRule> => ({\n edges: [],\n pageInfo: { count: 0, hasNextPage: false },\n }),\n ),\n ]);\n\n const pendingUserRequests: GateUserRequest[] = unwrapConnection(pendingUserRequestsConnection);\n const users: GateUser[] = sortBy(unwrapConnection(usersConnection), \"id\");\n const groups: GateGroup[] = unwrapConnection(groupsConnection);\n const whitelists: GateWhitelist[] = unwrapConnection(whitelistsConnection);\n const accounts: GateAccount[] = sortBy(unwrapConnection(accountsConnection), \"index\");\n const vaultEntities: GateVaultEntity[] = unwrapConnection(vaultEntitiesConnection);\n const exchanges: GateExchange[] = unwrapConnection(exchangesConnection);\n const policies: GatePolicy[] = unwrapConnection(policiesConnection);\n const tradelinkCustodians: GateTradelinkEntity<\"CUSTODIAN\">[] = unwrapConnection(\n tradelinkCustodianConnection,\n );\n const tradelinkHSMCustodians: GateTradelink[] = unwrapConnection(tradelinkHSMCustodianConnection);\n const tradelinkExchanges: GateTradelinkEntity<\"EXCHANGE\">[] = unwrapConnection(\n tradelinkExchangeConnection,\n );\n const tradelinkHSMExchanges: GateTradelinkExchange[] = unwrapConnection(\n tradelinkHSMExchangeConnection,\n );\n const tradelinkHSMAssetManagers: GateTradelinkAssetManager[] = unwrapConnection(\n tradelinkHSMAssetManagerConnection,\n );\n const tradelinkAssetManagers: GateTradelinkEntity<\"ASSET_MANAGER\">[] = unwrapConnection(\n tradelinkAssetManagerConnection,\n );\n const allWorkspaceRules = unwrapConnection(allWorkspaceRulesConnection);\n const rootWorkspaceRule = allWorkspaceRules.find((r) => r.permission === \"ROOT\") ?? null;\n const apiAdminWorkspaceRules = allWorkspaceRules.filter((r) => r.permission !== \"ROOT\");\n\n const groupsByName = keyBy(groups, (group) => group.name);\n const whitelistsByName = keyBy(whitelists, (w) => w.name);\n const accountsByName = keyBy(accounts, (a) => a.name);\n const vaultEntitiesByName = keyBy(vaultEntities, (e) => e.name);\n const exchangesByName = keyBy(exchanges, (e) => e.name);\n const policiesByName = keyBy(policies, (e) => e.name);\n const tradelinkCustodiansByName = keyBy(tradelinkCustodians, (e) => e.name);\n const tradelinkHSMCustodiansByName = keyBy(\n tradelinkHSMCustodians,\n (e) => e.network.custodian.name,\n );\n const tradelinkExchangesByName = keyBy(tradelinkExchanges, (e) => e.name);\n const tradelinkHSMExchangesByName = keyBy(tradelinkHSMExchanges, (e) => e.hsm_data.name);\n const tradelinkHSMAssetManagersByName = keyBy(tradelinkHSMAssetManagers, (e) => e.hsm_data.name);\n const tradelinkAssetManagersByName = keyBy(tradelinkAssetManagers, (e) => e.name);\n\n // gate is sending all active users by order of creation\n // we rely on index in the reduce() to get the device index assuming we take them in order\n //\n // FIXME there is something weird with the typing of this reduce :(\n // @ts-ignore\n const {\n admins: _admins,\n operators,\n apiUsers,\n apiV2Users,\n }: {\n admins: Array<{ deviceIndex: number; user: GateUser }>;\n operators: Array<{ deviceIndex: number; user: GateUser }>;\n apiUsers: Array<{ deviceIndex: number; user: GateUser }>;\n apiV2Users: Array<{ username: string; user: GateUser }>;\n } = users.reduce(\n (acc, curr, index) =>\n // @ts-ignore\n curr.device_type === \"API\"\n ? {\n ...acc,\n apiV2Users: [...acc.apiV2Users, { deviceIndex: curr.username, user: curr }],\n }\n : curr.role === \"ADMIN\"\n ? {\n ...acc,\n admins: [\n ...acc.admins,\n {\n deviceIndex: getDeviceIndex(index - countAPIUsersUntil(index, users)),\n user: curr,\n },\n ],\n }\n : curr.device_type === \"SOFT_PSD\"\n ? {\n ...acc,\n apiUsers: [...acc.apiUsers, { deviceIndex: curr.username, user: curr }],\n }\n : {\n ...acc,\n operators: [\n ...acc.operators,\n {\n deviceIndex: getDeviceIndex(index - countAPIUsersUntil(index, users)),\n user: curr,\n },\n ],\n },\n { admins: [], operators: [], apiUsers: [], apiV2Users: [] },\n );\n\n const operatorsDevicesByID: Record<string, number> = operators.reduce((acc, curr) => {\n return { ...acc, [curr.user.id]: curr.deviceIndex };\n }, {});\n\n const customUsernames = [..._admins, ...operators].reduce((acc, curr) => {\n // don't assign custom username if user has default name\n if (\n getDefaultUsername(curr.user.role === \"ADMIN\" ? \"admin\" : \"operator\", curr.deviceIndex) ===\n curr.user.username\n ) {\n return acc;\n }\n return { ...acc, [curr.deviceIndex]: curr.user.username };\n }, {});\n\n const admins = _admins\n // remove admins 4, 5, 6, they are implicitly created during onboarding\n // we still want to fetch them first to eventually collect custom usernames\n .filter((_, i) => i > DEFAULT_ADMINS_COUNT - 1);\n\n const usersManifest = {\n operators: operators.map((o) => o.deviceIndex),\n admins: admins.map((a) => a.deviceIndex),\n api: apiUsers.map((a) =>\n a.user.view_all_override\n ? {\n name: a.user.username,\n viewAll: true,\n }\n : a.user.username,\n ),\n apiV2: apiV2Users.map((a) => ({\n role: a.user.role,\n name: a.user.username,\n ...(a.user.pub_key ? { publicKey: a.user.pub_key } : {}),\n ...(a.user.view_all_override ? { viewAll: true } : {}),\n })),\n };\n\n // we assume that if ROOT workspace rule exist, we take the workspace quorum from there,\n // else, we take it from the legacy \"organization\" object\n const quorum = rootWorkspaceRule ? rootWorkspaceRule.steps[0]!.quorum : organization.quorum;\n\n const manifestWorkspaceRules: ManifestWorkspaceRule[] = apiAdminWorkspaceRules\n .map((rule) => ({\n permission: rule.permission as Exclude<GateWorkspacePermission, \"ROOT\">,\n steps: rule.steps.map((gateStep) => ({\n quorum: gateStep.quorum,\n users: gateStep.users.map((pubKey) => {\n const user = users.find((u) => u.pub_key === pubKey);\n invariant(\n user,\n `Can't find user with pub key ${pubKey} referenced in workspace rule ${rule.permission}`,\n );\n return user.username;\n }),\n })),\n }))\n .filter((rule) => {\n // only output the rules that have users defined\n return rule.steps.length > 0;\n });\n\n const fullManifest: Manifest = {\n quorum: quorum === 2 ? undefined : quorum,\n customUsernames,\n users: usersManifest,\n workspaceRules: manifestWorkspaceRules,\n groups: groups\n .filter((g) => g.status === \"ACTIVE\")\n .map((g) => ({\n name: g.name,\n description: g.description,\n users: g.members.map((m) => (m.is_api ? m.username : operatorsDevicesByID[m.id]!)),\n })),\n whitelists: whitelists\n .filter((w) => w.status === \"ACTIVE\")\n .map((w) => ({\n name: w.name,\n description: w.description,\n type: w.whitelist_type,\n addresses: w.addresses.map(\n (a): ManifestWhitelistAddress => ({\n name: a.name,\n address: a.address,\n currency: a.currency,\n destination_tags: a.destination_tags,\n }),\n ),\n })),\n accounts: accounts\n // we want to get rid of VIEW_ONLY account see #76\n .filter((a) => a.status === \"ACTIVE\")\n .map((a) => ({\n name: a.name,\n currency: a.currency,\n ...(options.saveAccountsTypes ? { accountType: a.account_type } : {}),\n derivationMode: a.derivation_mode === \"STANDARD\" ? undefined : a.derivation_mode,\n contractAddress: a.contract_address || undefined,\n ...(options.saveAccountsIndexes ? { index: a.index } : {}),\n ...(a.parent\n ? {\n parentAccount: (() => {\n const parentAccount = accounts.find((acc) => acc.id === a.parent);\n /* istanbul ignore if */\n if (!parentAccount) {\n throw new Error(`Can't find parent account with id ${a.parent}`);\n }\n if (parentAccount.status !== \"ACTIVE\") {\n return undefined;\n }\n return parentAccount.name;\n })(),\n }\n : {}),\n rules: extractRules(a.governance_rules, a.currency, operatorsDevicesByID),\n ...(() => {\n const config: ManifestAccountConfig = {};\n\n if (a.nfts_gallery_enabled) {\n config.nftGallery = true;\n }\n\n const hasConfig = Object.keys(config).length > 0;\n return hasConfig ? { config } : {};\n })(),\n })),\n entities: vaultEntities\n .filter((e) => e.status === \"ACTIVE\")\n .map((e) => ({\n name: e.name,\n accounts: e.accounts.map((a) => a.name),\n })),\n exchanges: exchanges\n .filter((e) => e.status === \"ACTIVE\")\n .map(\n (e): ManifestExchange => ({\n name: e.name,\n platform: e.platform,\n configuration: {\n apiKey: \"<not-retrievable>\",\n apiSecret: \"<not-retrievable>\",\n },\n }),\n ),\n policies: policies.map((p): ManifestPolicy => {\n return {\n name: p.name,\n currency: p.currency,\n rules: extractRules(p.governance_rules, p.currency, operatorsDevicesByID),\n status: p.status,\n };\n }),\n };\n\n // clean out un-necessary keys\n const manifest = pickNonEmpty(fullManifest);\n\n return {\n manifest,\n rawData: {\n pendingUserRequests,\n groupsByName,\n whitelistsByName,\n accountsByName,\n vaultEntitiesByName,\n usersWithDevice: [..._admins, ...operators, ...apiUsers],\n usersWithoutDevice: [...apiV2Users],\n exchangesByName,\n policiesByName,\n tradelinkCustodiansByName,\n tradelinkHSMCustodiansByName,\n tradelinkExchangesByName,\n tradelinkHSMExchangesByName,\n tradelinkHSMAssetManagersByName,\n tradelinkAssetManagersByName,\n tradelinkNetwork,\n tradelinkOnboardingStatus,\n },\n };\n}\n\n// recursively create a minimal object (removing empty arrays etc.)\n// yeah.. lot of @ts-ignore in the function!\nfunction pickNonEmpty<T extends Record<string, any>>(obj: T) {\n const out = {};\n const keys = Object.keys(obj);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n /* istanbul ignore if */\n if (!key) throw new Error(`Invalid key at index ${i}`);\n const val = obj[key];\n // @ts-ignore\n const getSanitized = (val: any) => {\n /* istanbul ignore if */\n if (val === null) {\n return;\n } else if (Array.isArray(val)) {\n // @ts-ignore\n const withoutEmpty = val.map(getSanitized).filter((v) => v !== undefined);\n if (withoutEmpty.length > 0) {\n return withoutEmpty;\n }\n } else if (typeof val === \"object\") {\n // @ts-ignore\n const subObj: Record<string, unknown> = val;\n const nonEmptyVal = pickNonEmpty(subObj);\n const nbKeys = Object.keys(nonEmptyVal).length;\n if (nbKeys > 0) {\n return nonEmptyVal;\n }\n } else if (val !== undefined) {\n return val;\n }\n };\n const sanitized = getSanitized(val);\n if (sanitized !== undefined) {\n // @ts-ignore\n out[key] = sanitized;\n }\n }\n return out;\n}\n\nfunction extractRules(\n gateGovRules: GateGovernanceRulesSet[] | null,\n _currency: string,\n operatorsDevicesByID: Record<string, number>,\n): ManifestAccountRule[][] {\n const currency = getCryptoCurrencyById(_currency);\n const unit = currency.units[0]!;\n const governance_rules = gateGovRules || [];\n let rulesSets = governance_rules.map((r) => {\n const rules = r.rules.map((rule) => {\n if (rule.type === \"THRESHOLD\") {\n const thresholdRule: ManifestAccountRuleThreshold = {\n type: \"THRESHOLD\",\n ...(rule.data[0].min ? { min: deserializeUnitValue(unit, rule.data[0].min) } : {}),\n ...(rule.data[0].max ? { max: deserializeUnitValue(unit, rule.data[0].max) } : {}),\n };\n return thresholdRule;\n }\n if (rule.type === \"WHITELIST\") {\n const whitelistRule: ManifestAccountRuleWhitelist = {\n type: \"WHITELIST\",\n whitelists: rule.data.map((d) => d.name),\n };\n return whitelistRule;\n }\n if (rule.type === \"MULTI_AUTHORIZATIONS\") {\n const multiAuthRule: ManifestAccountRuleMultiAuth = {\n type: \"MULTI_AUTHORIZATIONS\",\n steps: rule.data.map((s) => ({\n quorum: s.quorum,\n ...(s.group.is_internal\n ? {\n users: s.group.members.map((m) => {\n const u = m.is_api ? m.username : operatorsDevicesByID[m.id];\n /* istanbul ignore if */\n if (!u) throw new Error(`Invalid user ${m}`);\n return u;\n }),\n }\n : { group: s.group.name }),\n })),\n };\n return multiAuthRule;\n }\n if (rule.type === \"SMART_CONTRACT_INTERACTION\") {\n const sciRule: ManifestAccountRuleSCI = {\n type: \"SMART_CONTRACT_INTERACTION\",\n enabled: rule.data[0].enabled,\n };\n return sciRule;\n }\n if (rule.type === \"TRANSACTION_FILTER\") {\n switch (rule.data.preset) {\n case \"TEZOS_DELEGATION\":\n return { type: \"TEZOS_DELEGATION\" } as ManifestAccountRuleTezosDelegation;\n case \"POLKADOT_STAKING\":\n return { type: \"POLKADOT_STAKING\" } as ManifestAccountRulePolkadotStaking;\n case \"SOLANA_STAKING\":\n return { type: \"SOLANA_STAKING\" } as ManifestAccountRuleSolanaStaking;\n case \"CARDANO_STAKING\":\n return { type: \"CARDANO_STAKING\" } as ManifestAccountRuleCardanoStaking;\n case \"RAW_SIGNING\":\n return { type: \"RAW_SIGNING\" } as ManifestAccountRuleRawSigning;\n case \"CREATE_SPL_TOKEN_ACCOUNT\":\n return { type: \"CREATE_SPL_TOKEN_ACCOUNT\" } as ManifestAccountRuleCreateSplTokenAccount;\n case \"TRANSFER_SPL_TOKEN\":\n return {\n type: \"TRANSFER_SPL_TOKEN\",\n contractAddress: rule.data.contract_address,\n } as ManifestAccountRuleTransferSplToken;\n case \"SEND\":\n // VG-18271 don't recipe \"SEND\" rule as it's the default\n return null;\n case \"STAKE\":\n return { type: \"STAKE\" } as ManifestAccountRuleStake;\n case \"MESSAGE_SIGNING\":\n return { type: \"MESSAGE_SIGNING\" } as ManifestAccountRuleMessageSigning;\n case \"DEPLOY_CONTRACT\":\n return { type: \"DEPLOY_CONTRACT\" } as ManifestAccountRuleDeployContract;\n }\n }\n // @ts-ignore\n throw new Error(`Unknown rule type ${rule.type}`);\n });\n return rules.filter(Boolean) as ManifestAccountRule[];\n });\n\n // see VG-22141\n rulesSets = enforceSCIRuleIfNecessary(rulesSets);\n\n return rulesSets;\n}\n\n// Enforce that if a RulesSet have a SCI-enabled rule, all the other RulesSet should have\n// a SCI-disabled rule\n//\n// see VG-22141\n//\nfunction enforceSCIRuleIfNecessary(rulesSets: ManifestAccountRule[][]): ManifestAccountRule[][] {\n const hasSCIRulesSet = rulesSets.find((rulesSet) =>\n rulesSet.find((rule) => rule.type === \"SMART_CONTRACT_INTERACTION\" && rule.enabled),\n );\n if (!hasSCIRulesSet) return rulesSets;\n return rulesSets.map((rulesSet) => {\n const sciRule = rulesSet.find((r) => r.type === \"SMART_CONTRACT_INTERACTION\");\n if (sciRule) return rulesSet;\n return [...rulesSet, { type: \"SMART_CONTRACT_INTERACTION\", enabled: false }];\n });\n}\n\nfunction countAPIUsersUntil(index: number, users: GateUser[]) {\n return users.slice(0, index).filter((u) => u.is_api).length;\n}\n"]}