{"version":3,"sources":["../../src/state.ts"],"sourcesContent":["import {\n  lsSet,\n  lsGet,\n  publicKeyFromPrivate,\n} from \"@fastnear/utils\";\n\nexport type FastNearNetworkId = \"mainnet\" | \"testnet\";\n\nexport interface FastNearServiceConfig {\n  baseUrl?: string | null;\n}\n\nexport interface FastNearServicesConfig {\n  rpc?: FastNearServiceConfig;\n  // Optional archival RPC. Used when callers pass `useArchival: true` to\n  // `view`/`queryAccount`/etc. Falls back to `rpc` when not configured so\n  // callers don't error on misconfiguration — they just see fresh-only state.\n  archival?: FastNearServiceConfig;\n  api?: FastNearServiceConfig;\n  tx?: FastNearServiceConfig;\n  transfers?: FastNearServiceConfig;\n  neardata?: FastNearServiceConfig;\n  fastdata?: {\n    kvBaseUrl?: string | null;\n  };\n}\n\nexport interface NetworkConfig {\n  networkId: FastNearNetworkId;\n  apiKey?: string | null;\n  nodeUrl?: string;\n  walletUrl?: string;\n  helperUrl?: string;\n  explorerUrl?: string;\n  services?: FastNearServicesConfig;\n\n  [key: string]: any;\n}\n\nfunction mergeServiceConfig(\n  base?: FastNearServiceConfig,\n  override?: FastNearServiceConfig\n): FastNearServiceConfig {\n  return {\n    ...(base || {}),\n    ...(override || {}),\n  };\n}\n\nfunction mergeServices(\n  base?: FastNearServicesConfig,\n  override?: FastNearServicesConfig\n): FastNearServicesConfig {\n  return {\n    rpc: mergeServiceConfig(base?.rpc, override?.rpc),\n    archival: mergeServiceConfig(base?.archival, override?.archival),\n    api: mergeServiceConfig(base?.api, override?.api),\n    tx: mergeServiceConfig(base?.tx, override?.tx),\n    transfers: mergeServiceConfig(base?.transfers, override?.transfers),\n    neardata: mergeServiceConfig(base?.neardata, override?.neardata),\n    fastdata: {\n      ...(base?.fastdata || {}),\n      ...(override?.fastdata || {}),\n    },\n  };\n}\n\nfunction normalizeNetworkId(networkId?: string | null): FastNearNetworkId {\n  return networkId === \"testnet\" ? \"testnet\" : \"mainnet\";\n}\n\nfunction normalizeApiKey(apiKey?: string | null): string | null {\n  if (typeof apiKey !== \"string\") {\n    return null;\n  }\n  const trimmed = apiKey.trim();\n  return trimmed ? trimmed : null;\n}\n\nexport const DEFAULT_NETWORK_ID: FastNearNetworkId = \"mainnet\";\nexport const NETWORKS: Record<FastNearNetworkId, NetworkConfig> = {\n  testnet: {\n    networkId: \"testnet\",\n    nodeUrl: \"https://rpc.testnet.fastnear.com/\",\n    services: {\n      rpc: { baseUrl: \"https://rpc.testnet.fastnear.com/\" },\n      archival: { baseUrl: \"https://archival-rpc.testnet.near.org/\" },\n      api: { baseUrl: \"https://test.api.fastnear.com\" },\n      tx: { baseUrl: \"https://tx.test.fastnear.com\" },\n      transfers: { baseUrl: null },\n      neardata: { baseUrl: \"https://testnet.neardata.xyz\" },\n      fastdata: { kvBaseUrl: \"https://kv.test.fastnear.com\" },\n    },\n  },\n  mainnet: {\n    networkId: \"mainnet\",\n    nodeUrl: \"https://rpc.mainnet.fastnear.com/\",\n    services: {\n      rpc: { baseUrl: \"https://rpc.mainnet.fastnear.com/\" },\n      archival: { baseUrl: \"https://archival-rpc.mainnet.near.org/\" },\n      api: { baseUrl: \"https://api.fastnear.com\" },\n      tx: { baseUrl: \"https://tx.main.fastnear.com\" },\n      transfers: { baseUrl: \"https://transfers.main.fastnear.com\" },\n      neardata: { baseUrl: \"https://mainnet.neardata.xyz\" },\n      fastdata: { kvBaseUrl: \"https://kv.main.fastnear.com\" },\n    },\n  },\n};\n\nexport function resolveConfig(\n  input?: Partial<NetworkConfig> | null,\n  base?: NetworkConfig | null\n): NetworkConfig {\n  const requested = input || {};\n  const baseConfig = base || NETWORKS[DEFAULT_NETWORK_ID];\n  const networkId = normalizeNetworkId(requested.networkId ?? baseConfig.networkId);\n  const networkDefaults = NETWORKS[networkId];\n  const services = mergeServices(\n    mergeServices(networkDefaults.services, baseConfig.services),\n    requested.services\n  );\n\n  const requestedRpcBaseUrl = requested.services?.rpc?.baseUrl;\n  const requestedNodeUrl = requested.nodeUrl;\n  const rpcBaseUrl =\n    requestedRpcBaseUrl ??\n    requestedNodeUrl ??\n    services.rpc?.baseUrl ??\n    networkDefaults.nodeUrl ??\n    null;\n  const nodeUrl = requestedNodeUrl ?? rpcBaseUrl ?? networkDefaults.nodeUrl;\n\n  services.rpc = {\n    ...(services.rpc || {}),\n    baseUrl: rpcBaseUrl,\n  };\n\n  const next: NetworkConfig = {\n    ...networkDefaults,\n    ...baseConfig,\n    ...requested,\n    networkId,\n    nodeUrl,\n    services,\n  };\n\n  if (Object.prototype.hasOwnProperty.call(requested, \"apiKey\")) {\n    next.apiKey = normalizeApiKey(requested.apiKey);\n  } else {\n    next.apiKey = normalizeApiKey(baseConfig.apiKey);\n  }\n\n  return next;\n}\n\nexport interface AccountSlot {\n  accountId?: string | null;\n  privateKey?: string | null;\n  publicKey?: string | null;\n  lastWalletId?: string | null;\n  accessKeyContractId?: string | null;\n}\n\n// Pre-1.1.1 callers used `AppState` for the flat global state blob. The\n// shape now lives as `AccountSlot` (one per network), and `AppState`\n// stays as a permissive alias so legacy `update({ … })` callers passing\n// extra keys continue to type-check.\nexport interface AppState extends AccountSlot {\n  [key: string]: any;\n}\n\nexport interface TxStatus {\n  txId: string;\n  updateTimestamp?: number;\n\n  [key: string]: any;\n}\n\nexport type TxHistory = Record<string, TxStatus>;\n\nexport interface EventListeners {\n  account: Set<(accountId: string) => void>;\n  tx: Set<(tx: TxStatus) => void>;\n}\n\nexport interface UnbroadcastedEvents {\n  account: string[];\n  tx: TxStatus[];\n}\n\n// Load config from localStorage or default to the network's config\nexport let _config: NetworkConfig = resolveConfig(lsGet(\"config\"));\n\n// Per-network account state. With @fastnear/wallet 1.1.0+ the wallet keeps\n// parallel mainnet+testnet sessions; api now does the same — `_state` is a\n// live alias for whichever network slot is currently active.\nconst _networkStates: Record<FastNearNetworkId, AccountSlot> = {\n  mainnet: lsGet(\"state.mainnet\") ?? {},\n  testnet: lsGet(\"state.testnet\") ?? {},\n};\n\nfunction persistShape(slot: AccountSlot) {\n  return {\n    accountId: slot.accountId,\n    privateKey: slot.privateKey,\n    lastWalletId: slot.lastWalletId,\n    accessKeyContractId: slot.accessKeyContractId,\n  };\n}\n\n// Legacy migration: pre-1.1.1 wrote a single `state` blob. Promote it\n// into the mainnet slot once, then clear the legacy key. Mirrors the\n// wallet's 1.1.0 migration of unscoped storage keys.\nconst _legacyState = lsGet(\"state\");\nif (_legacyState && Object.keys(_legacyState).length > 0) {\n  _networkStates.mainnet = { ..._networkStates.mainnet, ..._legacyState };\n  lsSet(\"state.mainnet\", persistShape(_networkStates.mainnet));\n  lsSet(\"state\", null);\n}\n\n// Same migration for the local-signing nonce/block caches — pre-1.1.2\n// kept these as unscoped `nonce` and `block` keys, which collided across\n// networks. Promote into the mainnet slot once and clear. Per-network\n// keys are written by `sendTx`'s local-signing path going forward.\nconst _legacyNonce = lsGet(\"nonce\");\nif (_legacyNonce !== null && _legacyNonce !== undefined) {\n  lsSet(\"nonce.mainnet\", _legacyNonce);\n  lsSet(\"nonce\", null);\n}\nconst _legacyBlock = lsGet(\"block\");\nif (_legacyBlock) {\n  lsSet(\"block.mainnet\", _legacyBlock);\n  lsSet(\"block\", null);\n}\n\nlet _activeNetwork: FastNearNetworkId = normalizeNetworkId(_config.networkId);\n\n// `_state` is a live binding pointing at the active slot. ESM live\n// bindings mean importers see the current value at read time; we\n// reassign on `setActiveNetwork` and `updateAccountState` so reads\n// like `_state.accountId` always resolve to the active network.\nexport let _state: AccountSlot = _networkStates[_activeNetwork];\n\nexport interface WalletProvider {\n  connect(options?: { contractId?: string; network?: string; excludedWallets?: string[]; features?: Record<string, boolean> }): Promise<{ accountId: string; network?: string } | null>;\n  restore?(options?: { contractId?: string; network?: string }): Promise<{ accountId: string; network?: string } | null>;\n  disconnect(options?: { network?: string }): Promise<void>;\n  sendTransaction(params: { receiverId: string; actions: any[]; signerId?: string; network?: string }): Promise<any>;\n  signMessage?(params: { message: string; recipient: string; nonce: Uint8Array; network?: string }): Promise<any>;\n  accountId(options?: { network?: string }): string | null;\n  isConnected(options?: { network?: string }): boolean;\n}\n\nlet _walletProvider: WalletProvider | null = null;\n\nexport const setWalletProvider = (provider: WalletProvider): void => {\n  _walletProvider = provider;\n};\n\nexport const getWalletProvider = (): WalletProvider | null => {\n  return _walletProvider;\n};\n\n// Initial publicKey derivation per slot. Each network's persisted\n// privateKey is parsed independently; a parse error clears that slot's\n// keys without touching the other network.\nfor (const network of [\"mainnet\", \"testnet\"] as const) {\n  try {\n    const slot = _networkStates[network];\n    slot.publicKey = slot.privateKey ? publicKeyFromPrivate(slot.privateKey) : null;\n  } catch (e) {\n    console.error(`Error parsing private key for ${network}:`, e);\n    _networkStates[network].privateKey = null;\n    _networkStates[network].publicKey = null;\n    lsSet(`nonce.${network}`, null);\n  }\n}\n\n// Transaction history\nexport let _txHistory: TxHistory = lsGet(\"txHistory\") || {};\n\n\nexport const _unbroadcastedEvents: UnbroadcastedEvents = {\n  account: [],\n  tx: [],\n};\n\n// events / listeners\nexport const events = {\n  _eventListeners: {\n    account: new Set(),\n    tx: new Set(),\n  },\n\n  notifyAccountListeners: (accountId: string) => {\n    if (events._eventListeners.account.size === 0) {\n      _unbroadcastedEvents.account.push(accountId);\n      return;\n    }\n    events._eventListeners.account.forEach((callback: any) => {\n      try {\n        callback(accountId);\n      } catch (e) {\n        console.error(e);\n      }\n    });\n  },\n\n  notifyTxListeners: (tx: TxStatus) => {\n    if (events._eventListeners.tx.size === 0) {\n      _unbroadcastedEvents.tx.push(tx);\n      return;\n    }\n    events._eventListeners.tx.forEach((callback: any) => {\n      try {\n        callback(tx);\n      } catch (e) {\n        console.error(e);\n      }\n    });\n  },\n\n  onAccount: (callback: (accountId: string) => void) => {\n    events._eventListeners.account.add(callback);\n    if (_unbroadcastedEvents.account.length > 0) {\n      const accountEvent = _unbroadcastedEvents.account;\n      _unbroadcastedEvents.account = [];\n      accountEvent.forEach(events.notifyAccountListeners);\n    }\n  },\n\n  onTx: (callback: (tx: TxStatus) => void): void => {\n    events._eventListeners.tx.add(callback);\n    if (_unbroadcastedEvents.tx.length > 0) {\n      const txEvent = _unbroadcastedEvents.tx;\n      _unbroadcastedEvents.tx = [];\n      txEvent.forEach(events.notifyTxListeners);\n    }\n  }\n}\n\n// Mutators\n\nexport const updateAccountState = (\n  partial: Partial<AccountSlot>,\n  network?: FastNearNetworkId,\n): void => {\n  const target = network ?? _activeNetwork;\n  const oldSlot = _networkStates[target];\n  const newSlot: AccountSlot = { ...oldSlot, ...partial };\n\n  if (\n    Object.prototype.hasOwnProperty.call(partial, \"privateKey\") &&\n    newSlot.privateKey !== oldSlot.privateKey\n  ) {\n    newSlot.publicKey = newSlot.privateKey\n      ? publicKeyFromPrivate(newSlot.privateKey as string)\n      : null;\n    // Invalidate the per-network nonce cache when the slot's key changes\n    // — the next sendTx local-signing call refetches via view_access_key.\n    lsSet(`nonce.${target}`, null);\n  }\n\n  _networkStates[target] = newSlot;\n  if (target === _activeNetwork) _state = newSlot;\n  lsSet(`state.${target}`, persistShape(newSlot));\n\n  if (target === _activeNetwork && newSlot.accountId !== oldSlot.accountId) {\n    events.notifyAccountListeners(newSlot.accountId as string);\n  }\n};\n\nexport const getAccountState = (network?: FastNearNetworkId): AccountSlot =>\n  _networkStates[network ?? _activeNetwork];\n\nexport const getActiveNetwork = (): FastNearNetworkId => _activeNetwork;\n\nexport const setActiveNetwork = (network: FastNearNetworkId): void => {\n  _activeNetwork = normalizeNetworkId(network);\n  _state = _networkStates[_activeNetwork];\n};\n\n// Back-compat: legacy `update(partial)` writes into the active network slot.\nexport const update = (newState: Partial<AppState>) => {\n  updateAccountState(newState, _activeNetwork);\n};\n\nexport const updateTxHistory = (txStatus: TxStatus) => {\n  const txId = txStatus.txId;\n  _txHistory[txId] = {\n    ...(_txHistory[txId] || {}),\n    ...txStatus,\n    updateTimestamp: Date.now(),\n  };\n  lsSet(\"txHistory\", _txHistory);\n  events.notifyTxListeners(_txHistory[txId]);\n}\n\nexport const getConfig = (): NetworkConfig => {\n  return _config;\n}\n\nexport const getTxHistory = (): TxHistory => {\n  return _txHistory;\n}\n\n// Exposed \"write\" functions\nexport const setConfig = (newConf: Partial<NetworkConfig> | FastNearNetworkId): void => {\n  const partial = typeof newConf === \"string\" ? { networkId: newConf } : newConf;\n  const nextNetworkId = normalizeNetworkId(partial.networkId ?? _config.networkId);\n  const base = nextNetworkId !== _config.networkId ? NETWORKS[nextNetworkId] : _config;\n  _config = resolveConfig(partial, base);\n  lsSet(\"config\", _config);\n}\n\nexport const resetTxHistory = (): void => {\n  _txHistory = {};\n  lsSet(\"txHistory\", _txHistory);\n}\n"],"mappings":"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","names":[]}