{"version":3,"file":"network-operations.cjs","sourceRoot":"","sources":["../../../src/backup-and-sync/user-storage/network-operations.ts"],"names":[],"mappings":"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","sourcesContent":["import { SDK } from '@metamask/profile-sync-controller';\n\nimport type { AccountGroupMultichainAccountObject } from '../../group';\nimport { backupAndSyncLogger } from '../../logger';\nimport type { AccountWalletEntropyObject } from '../../wallet';\nimport type {\n  BackupAndSyncContext,\n  LegacyUserStorageSyncedAccount,\n  UserStorageSyncedWallet,\n  UserStorageSyncedWalletGroup,\n} from '../types';\nimport { toErrorMessage } from '../utils/errors';\nimport {\n  USER_STORAGE_GROUPS_FEATURE_KEY,\n  USER_STORAGE_WALLETS_FEATURE_ENTRY_KEY,\n  USER_STORAGE_WALLETS_FEATURE_KEY,\n} from './constants';\nimport {\n  formatWalletForUserStorageUsage,\n  formatGroupForUserStorageUsage,\n  parseWalletFromUserStorageResponse,\n  parseGroupFromUserStorageResponse,\n  parseLegacyAccountFromUserStorageResponse,\n} from './format-utils';\nimport { executeWithRetry } from './network-utils';\n\n/**\n * Retrieves the wallet from user storage.\n *\n * @param context - The backup and sync context.\n * @param entropySourceId - The entropy source ID.\n * @returns The wallet from user storage or null if not found or invalid.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n */\nexport const getWalletFromUserStorage = async (\n  context: BackupAndSyncContext,\n  entropySourceId: string,\n): Promise<UserStorageSyncedWallet | null> => {\n  return executeWithRetry(async () => {\n    const walletData = await context.messenger.call(\n      'UserStorageController:performGetStorage',\n      `${USER_STORAGE_WALLETS_FEATURE_KEY}.${USER_STORAGE_WALLETS_FEATURE_ENTRY_KEY}`,\n      entropySourceId,\n    );\n    if (!walletData) {\n      return null;\n    }\n\n    try {\n      backupAndSyncLogger(\n        `Retrieved wallet data from user storage: ${JSON.stringify(walletData)}`,\n      );\n      return parseWalletFromUserStorageResponse(walletData);\n    } catch (error) {\n      backupAndSyncLogger(\n        `Failed to parse wallet data from user storage: ${toErrorMessage(error)}`,\n      );\n      return null;\n    }\n  });\n};\n\n/**\n * Pushes the wallet to user storage.\n *\n * @param context - The backup and sync context.\n * @param wallet - The wallet to push to user storage.\n * @returns A promise that resolves when the operation is complete.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n * @throws When JSON.stringify fails on the formatted wallet data.\n */\nexport const pushWalletToUserStorage = async (\n  context: BackupAndSyncContext,\n  wallet: AccountWalletEntropyObject,\n): Promise<void> => {\n  return executeWithRetry(async () => {\n    const formattedWallet = formatWalletForUserStorageUsage(context, wallet);\n    const stringifiedWallet = JSON.stringify(formattedWallet);\n    const entropySourceId = wallet.metadata.entropy.id;\n\n    backupAndSyncLogger(`Pushing wallet to user storage: ${stringifiedWallet}`);\n\n    return await context.messenger.call(\n      'UserStorageController:performSetStorage',\n      `${USER_STORAGE_WALLETS_FEATURE_KEY}.${USER_STORAGE_WALLETS_FEATURE_ENTRY_KEY}`,\n      stringifiedWallet,\n      entropySourceId,\n    );\n  });\n};\n\n/**\n * Retrieves all groups from user storage.\n *\n * @param context - The backup and sync context.\n * @param entropySourceId - The entropy source ID.\n * @returns An array of groups from user storage.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n */\nexport const getAllGroupsFromUserStorage = async (\n  context: BackupAndSyncContext,\n  entropySourceId: string,\n): Promise<UserStorageSyncedWalletGroup[]> => {\n  return executeWithRetry(async () => {\n    const groupData = await context.messenger.call(\n      'UserStorageController:performGetStorageAllFeatureEntries',\n      `${USER_STORAGE_GROUPS_FEATURE_KEY}`,\n      entropySourceId,\n    );\n    if (!groupData) {\n      return [];\n    }\n\n    const allGroups = groupData\n      .map((stringifiedGroup) => {\n        try {\n          return parseGroupFromUserStorageResponse(stringifiedGroup);\n        } catch (error) {\n          backupAndSyncLogger(\n            `Failed to parse group data from user storage: ${toErrorMessage(error)}`,\n          );\n          return null;\n        }\n      })\n      .filter((group): group is UserStorageSyncedWalletGroup => group !== null);\n\n    backupAndSyncLogger(\n      `Retrieved groups from user storage: ${JSON.stringify(allGroups)}`,\n    );\n\n    return allGroups;\n  });\n};\n\n/**\n * Retrieves a single group from user storage by group index.\n *\n * @param context - The backup and sync context.\n * @param entropySourceId - The entropy source ID.\n * @param groupIndex - The group index to retrieve.\n * @returns The group from user storage or null if not found or invalid.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n */\nexport const getGroupFromUserStorage = async (\n  context: BackupAndSyncContext,\n  entropySourceId: string,\n  groupIndex: number,\n): Promise<UserStorageSyncedWalletGroup | null> => {\n  return executeWithRetry(async () => {\n    const groupData = await context.messenger.call(\n      'UserStorageController:performGetStorage',\n      `${USER_STORAGE_GROUPS_FEATURE_KEY}.${groupIndex}`,\n      entropySourceId,\n    );\n    if (!groupData) {\n      return null;\n    }\n\n    try {\n      return parseGroupFromUserStorageResponse(groupData);\n    } catch (error) {\n      backupAndSyncLogger(\n        `Failed to parse group data from user storage: ${toErrorMessage(error)}`,\n      );\n      return null;\n    }\n  });\n};\n\n/**\n * Pushes a group to user storage.\n *\n * @param context - The backup and sync context.\n * @param group - The group to push to user storage.\n * @param entropySourceId - The entropy source ID.\n * @returns A promise that resolves when the operation is complete.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n * @throws When JSON.stringify fails on the formatted group data.\n */\nexport const pushGroupToUserStorage = async (\n  context: BackupAndSyncContext,\n  group: AccountGroupMultichainAccountObject,\n  entropySourceId: string,\n): Promise<void> => {\n  return executeWithRetry(async () => {\n    const formattedGroup = formatGroupForUserStorageUsage(context, group);\n    const stringifiedGroup = JSON.stringify(formattedGroup);\n\n    backupAndSyncLogger(`Pushing group to user storage: ${stringifiedGroup}`);\n\n    return await context.messenger.call(\n      'UserStorageController:performSetStorage',\n      `${USER_STORAGE_GROUPS_FEATURE_KEY}.${formattedGroup.groupIndex}`,\n      stringifiedGroup,\n      entropySourceId,\n    );\n  });\n};\n\n/**\n * Pushes a batch of groups to user storage.\n *\n * @param context - The backup and sync context.\n * @param groups - The groups to push to user storage.\n * @param entropySourceId - The entropy source ID.\n * @returns A promise that resolves when the operation is complete.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n * @throws When JSON.stringify fails on any of the formatted group data.\n */\nexport const pushGroupToUserStorageBatch = async (\n  context: BackupAndSyncContext,\n  groups: AccountGroupMultichainAccountObject[],\n  entropySourceId: string,\n): Promise<void> => {\n  return executeWithRetry(async () => {\n    const formattedGroups = groups.map((group) =>\n      formatGroupForUserStorageUsage(context, group),\n    );\n\n    const entries: [string, string][] = formattedGroups.map((group) => [\n      String(group.groupIndex),\n      JSON.stringify(group),\n    ]);\n\n    backupAndSyncLogger(\n      `Pushing groups to user storage: ${entries.map(([_, value]) => value).join(', ')}`,\n    );\n\n    return await context.messenger.call(\n      'UserStorageController:performBatchSetStorage',\n      USER_STORAGE_GROUPS_FEATURE_KEY,\n      entries,\n      entropySourceId,\n    );\n  });\n};\n\n/**\n * Retrieves legacy user storage accounts for a specific entropy source ID.\n *\n * @param context - The backup and sync context.\n * @param entropySourceId - The entropy source ID to retrieve data for.\n * @returns A promise that resolves with the legacy user storage accounts.\n * @throws When network operations fail after maximum retry attempts.\n * @throws When messenger calls to UserStorageController fail due to authentication errors, encryption/decryption failures, or network issues.\n */\nexport const getAllLegacyUserStorageAccounts = async (\n  context: BackupAndSyncContext,\n  entropySourceId: string,\n): Promise<LegacyUserStorageSyncedAccount[]> => {\n  return executeWithRetry(async () => {\n    const accountsData = await context.messenger.call(\n      'UserStorageController:performGetStorageAllFeatureEntries',\n      SDK.USER_STORAGE_FEATURE_NAMES.accounts,\n      entropySourceId,\n    );\n\n    if (!accountsData) {\n      return [];\n    }\n\n    const allAccounts = accountsData\n      .map((stringifiedAccount) => {\n        try {\n          return parseLegacyAccountFromUserStorageResponse(stringifiedAccount);\n        } catch (error) {\n          backupAndSyncLogger(\n            `Failed to parse legacy account data from user storage: ${toErrorMessage(error)}`,\n          );\n          return null;\n        }\n      })\n      .filter(\n        (account): account is LegacyUserStorageSyncedAccount =>\n          account !== null,\n      );\n\n    backupAndSyncLogger(\n      `Retrieved legacy accounts from user storage: ${JSON.stringify(allAccounts)}`,\n    );\n\n    return allAccounts;\n  });\n};\n"]}