{"version":3,"file":"wallet.cjs","sourceRoot":"","sources":["../../../src/backup-and-sync/syncing/wallet.ts"],"names":[],"mappings":";;;AAAA,6CAAmD;AAEnD,sDAA2D;AAE3D,wCAAyD;AAEzD,+EAA6E;AAC7E,6CAAoD;AAEpD;;;;;;;;GAQG;AACI,KAAK,UAAU,sCAAsC,CAC1D,OAA6B,EAC7B,WAAuC,EACvC,qBAAiE,EACjE,SAAoB;IAEpB,MAAM,uBAAuB,GAC3B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAElE,IACE,CAAC,qBAAqB;QACtB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,MAAM,KAAK,CAAC,EAC/C,CAAC;QACD,IAAA,4BAAmB,EACjB,UAAU,WAAW,CAAC,EAAE,4DAA4D,CACrF,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,uDAAuD;IACvD,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAE7B,iCAAiC;IACjC,MAAM,iBAAiB,GAAG,MAAM,IAAA,iCAAsB,EAAC;QACrD,OAAO;QACP,aAAa,EAAE,uBAAuB,EAAE,IAAI;QAC5C,mBAAmB,EAAE,qBAAqB,CAAC,IAAI;QAC/C,wBAAwB,EAAE,CAAC,KAAK,EAAE,EAAE,CAClC,qCAA6B,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC;QAClE,gBAAgB,EAAE,CAAC,IAAY,EAAE,EAAE;YACjC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;QACD,SAAS,EAAE;YACT,MAAM,EAAE,uCAA2B,CAAC,aAAa;YACjD,SAAS;SACV;KACF,CAAC,CAAC;IAEH,gBAAgB,KAAhB,gBAAgB,GAAK,iBAAiB,EAAC;IAEvC,kFAAkF;IAClF,kBAAkB;IAClB,MAAM,+BAA+B,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAC3E,qBAAqB,EACrB,gCAAgC,CACjC,CAAC;IAEF,gBAAgB,KAAhB,gBAAgB,GAAK,+BAA+B,EAAC;IAErD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAjDD,wFAiDC;AAED;;;;;;;GAOG;AACI,KAAK,UAAU,kBAAkB,CACtC,OAA6B,EAC7B,WAAuC,EACvC,qBAAiE,EACjE,SAAoB;IAEpB,MAAM,uBAAuB,GAAG,MAAM,sCAAsC,CAC1E,OAAO,EACP,WAAW,EACX,qBAAqB,EACrB,SAAS,CACV,CAAC;IAEF,IAAI,uBAAuB,EAAE,CAAC;QAC5B,MAAM,IAAA,4CAAuB,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACtD,CAAC;AACH,CAAC;AAhBD,gDAgBC","sourcesContent":["import { backupAndSyncLogger } from '../../logger';\nimport type { AccountWalletEntropyObject } from '../../wallet';\nimport { BackupAndSyncAnalyticsEvent } from '../analytics';\nimport type { ProfileId } from '../authentication';\nimport { UserStorageSyncedWalletSchema } from '../types';\nimport type { BackupAndSyncContext, UserStorageSyncedWallet } from '../types';\nimport { pushWalletToUserStorage } from '../user-storage/network-operations';\nimport { compareAndSyncMetadata } from './metadata';\n\n/**\n * Syncs wallet metadata fields and determines if the wallet needs to be pushed to user storage.\n *\n * @param context - The sync context containing controller and messenger.\n * @param localWallet - The local wallet to sync.\n * @param walletFromUserStorage - The wallet data from user storage, if any.\n * @param profileId - The profile ID for analytics.\n * @returns Promise resolving to true if the wallet should be pushed to user storage.\n */\nexport async function syncWalletMetadataAndCheckIfPushNeeded(\n  context: BackupAndSyncContext,\n  localWallet: AccountWalletEntropyObject,\n  walletFromUserStorage: UserStorageSyncedWallet | null | undefined,\n  profileId: ProfileId,\n): Promise<boolean> {\n  const walletPersistedMetadata =\n    context.controller.state.accountWalletsMetadata[localWallet.id];\n\n  if (\n    !walletFromUserStorage ||\n    Object.keys(walletFromUserStorage).length === 0\n  ) {\n    backupAndSyncLogger(\n      `Wallet ${localWallet.id} did not exist in user storage, pushing to user storage...`,\n    );\n    return true;\n  }\n  // Track if we need to push this wallet to user storage\n  let shouldPushWallet = false;\n\n  // Compare and sync name metadata\n  const shouldPushForName = await compareAndSyncMetadata({\n    context,\n    localMetadata: walletPersistedMetadata?.name,\n    userStorageMetadata: walletFromUserStorage.name,\n    validateUserStorageValue: (value) =>\n      UserStorageSyncedWalletSchema.schema.name.schema.value.is(value),\n    applyLocalUpdate: (name: string) => {\n      context.controller.setAccountWalletName(localWallet.id, name);\n    },\n    analytics: {\n      action: BackupAndSyncAnalyticsEvent.WalletRenamed,\n      profileId,\n    },\n  });\n\n  shouldPushWallet ||= shouldPushForName;\n\n  // Avoid re-triggering legacy-syncing (in case this field is missing on the remote\n  // wallet object).\n  const shouldPushForMissingLegacyField = !Object.prototype.hasOwnProperty.call(\n    walletFromUserStorage,\n    'isLegacyAccountSyncingDisabled',\n  );\n\n  shouldPushWallet ||= shouldPushForMissingLegacyField;\n\n  return shouldPushWallet;\n}\n\n/**\n * Syncs wallet metadata and pushes it to user storage if needed.\n *\n * @param context - The sync context containing controller and messenger.\n * @param localWallet - The local wallet to sync.\n * @param walletFromUserStorage - The wallet data from user storage, if any.\n * @param profileId - The profile ID for analytics.\n */\nexport async function syncWalletMetadata(\n  context: BackupAndSyncContext,\n  localWallet: AccountWalletEntropyObject,\n  walletFromUserStorage: UserStorageSyncedWallet | null | undefined,\n  profileId: ProfileId,\n): Promise<void> {\n  const shouldPushToUserStorage = await syncWalletMetadataAndCheckIfPushNeeded(\n    context,\n    localWallet,\n    walletFromUserStorage,\n    profileId,\n  );\n\n  if (shouldPushToUserStorage) {\n    await pushWalletToUserStorage(context, localWallet);\n  }\n}\n"]}