{"version":3,"file":"traces.mjs","sourceRoot":"","sources":["../../src/analytics/traces.ts"],"names":[],"mappings":"AAUA;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,aAAa,GAAkB,KAAK,EAC/C,QAAsB,EACtB,EAA2C,EACtB,EAAE;IACvB,IAAI,CAAC,EAAE,EAAE,CAAC;QACR,OAAO,SAAuB,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAiC;IAEjC,wFAAwF;IACxF,OAAO,SAAS,CAAC,MAAM,CACrB,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;QACnB,GAAG,IAAI;QACP,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI;KAC3B,CAAC,EACF,EAAE,CACH,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,4BAA4B,CAC1C,OAA6B;IAE7B,IAAI,OAAO,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;QAC1C,OAAO;YACL,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;QACvD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YACxB,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE;SACrB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,4DAA+C,CAAA;IAC/C,0DAA6C,CAAA;IAC7C,+EAAkE,CAAA;IAClE,iDAAoC,CAAA;IACpC,0FAA6E,CAAA;IAC7E,4FAA+E,CAAA;AACjF,CAAC,EAPW,SAAS,KAAT,SAAS,QAOpB","sourcesContent":["import type {\n  TraceCallback,\n  TraceContext,\n  TraceRequest,\n} from '@metamask/controller-utils';\nimport { CreateAccountOptions } from '@metamask/keyring-api';\n\n// Explicit import to avoid circular dependency between `analytics` and `providers`.\nimport type { Bip44AccountProvider } from '../providers/BaseBip44AccountProvider';\n\n/**\n * Fallback function for tracing.\n * This function is used when no specific trace function is provided.\n * It executes the provided function in a trace context if available.\n *\n * @param _request - The trace request containing additional data and context.\n * @param fn - The function to execute within the trace context.\n * @returns A promise that resolves to the result of the executed function.\n * If no function is provided, it resolves to undefined.\n */\nexport const traceFallback: TraceCallback = async <ReturnType>(\n  _request: TraceRequest,\n  fn?: (context?: TraceContext) => ReturnType,\n): Promise<ReturnType> => {\n  if (!fn) {\n    return undefined as ReturnType;\n  }\n  return await Promise.resolve(fn());\n};\n\n/**\n * Compute trace data for a list of providers.\n *\n * @param providers Providers to be included in the trace data.\n * @returns An object mapping provider names to true, indicating their presence in the trace.\n */\nexport function toProviderDataTraces(\n  providers: Bip44AccountProvider[],\n): Record<string, boolean> {\n  // We cannot use complex objects within traces, so we just map provider names with true.\n  return providers.reduce(\n    (data, provider) => ({\n      ...data,\n      [provider.getName()]: true,\n    }),\n    {},\n  );\n}\n\n/**\n * Compute trace data for `createAccounts` options.\n *\n * @param options The `createAccounts` options.\n * @returns An object containing options data depending on its type.\n */\nexport function toCreateAccountsV2DataTraces(\n  options: CreateAccountOptions,\n): Record<string, string | number | boolean> {\n  if (options.type === 'bip44:derive-index') {\n    return {\n      groupIndex: options.groupIndex,\n    };\n  } else if (options.type === 'bip44:derive-index-range') {\n    return {\n      from: options.range.from,\n      to: options.range.to,\n    };\n  }\n  return {};\n}\n\n/**\n * Trace names.\n */\nexport enum TraceName {\n  SnapDiscoverAccounts = 'Snap Discover Accounts',\n  EvmDiscoverAccounts = 'EVM Discover Accounts',\n  ProviderCreateAccounts = 'Provider Create Accounts (v2 - batched)',\n  WalletAlignment = 'Wallet Alignment',\n  WalletCreateMultichainAccountGroup = 'Wallet Create Multichain Account Group',\n  WalletCreateMultichainAccountGroups = 'Wallet Create Multichain Account Groups',\n}\n"]}