@termix-it/vue-tool 1.0.0

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.
Files changed (107) hide show
  1. package/README.md +650 -0
  2. package/dist/adapters/EthersV5Adapter.d.ts +20 -0
  3. package/dist/adapters/EthersV5Adapter.d.ts.map +1 -0
  4. package/dist/adapters/EthersV6Adapter.d.ts +20 -0
  5. package/dist/adapters/EthersV6Adapter.d.ts.map +1 -0
  6. package/dist/components/AP2PaymentFlow.vue.d.ts +44 -0
  7. package/dist/components/AP2PaymentFlow.vue.d.ts.map +1 -0
  8. package/dist/components/ChatInterface.vue.d.ts +67 -0
  9. package/dist/components/ChatInterface.vue.d.ts.map +1 -0
  10. package/dist/components/ChatWidget.vue.d.ts +80 -0
  11. package/dist/components/ChatWidget.vue.d.ts.map +1 -0
  12. package/dist/components/FunctionCallDisplay.vue.d.ts +38 -0
  13. package/dist/components/FunctionCallDisplay.vue.d.ts.map +1 -0
  14. package/dist/components/PaymentApprovalModal.vue.d.ts +46 -0
  15. package/dist/components/PaymentApprovalModal.vue.d.ts.map +1 -0
  16. package/dist/components/SourcesBadge.vue.d.ts +20 -0
  17. package/dist/components/SourcesBadge.vue.d.ts.map +1 -0
  18. package/dist/components/WalletConnect.vue.d.ts +24 -0
  19. package/dist/components/WalletConnect.vue.d.ts.map +1 -0
  20. package/dist/components/WalletIndicator.vue.d.ts +33 -0
  21. package/dist/components/WalletIndicator.vue.d.ts.map +1 -0
  22. package/dist/components/index.d.ts +14 -0
  23. package/dist/components/index.d.ts.map +1 -0
  24. package/dist/composables/index.d.ts +10 -0
  25. package/dist/composables/index.d.ts.map +1 -0
  26. package/dist/composables/useAP2Payment.d.ts +96 -0
  27. package/dist/composables/useAP2Payment.d.ts.map +1 -0
  28. package/dist/composables/useDI.d.ts +75 -0
  29. package/dist/composables/useDI.d.ts.map +1 -0
  30. package/dist/composables/useInternalDI.d.ts +23 -0
  31. package/dist/composables/useInternalDI.d.ts.map +1 -0
  32. package/dist/composables/useToast.d.ts +14 -0
  33. package/dist/composables/useToast.d.ts.map +1 -0
  34. package/dist/core/container.d.ts +99 -0
  35. package/dist/core/container.d.ts.map +1 -0
  36. package/dist/core/index.d.ts +4 -0
  37. package/dist/core/index.d.ts.map +1 -0
  38. package/dist/core/internal-container.d.ts +26 -0
  39. package/dist/core/internal-container.d.ts.map +1 -0
  40. package/dist/core/tokens.d.ts +44 -0
  41. package/dist/core/tokens.d.ts.map +1 -0
  42. package/dist/core/types.d.ts +104 -0
  43. package/dist/core/types.d.ts.map +1 -0
  44. package/dist/executors/AP2Executor.d.ts +20 -0
  45. package/dist/executors/AP2Executor.d.ts.map +1 -0
  46. package/dist/executors/APIExecutor.d.ts +35 -0
  47. package/dist/executors/APIExecutor.d.ts.map +1 -0
  48. package/dist/executors/ContractExecutor.d.ts +41 -0
  49. package/dist/executors/ContractExecutor.d.ts.map +1 -0
  50. package/dist/executors/ExecutorRegistry.d.ts +99 -0
  51. package/dist/executors/ExecutorRegistry.d.ts.map +1 -0
  52. package/dist/executors/FiatExecutor.d.ts +31 -0
  53. package/dist/executors/FiatExecutor.d.ts.map +1 -0
  54. package/dist/executors/base/BaseExecutor.d.ts +87 -0
  55. package/dist/executors/base/BaseExecutor.d.ts.map +1 -0
  56. package/dist/executors/base/index.d.ts +2 -0
  57. package/dist/executors/base/index.d.ts.map +1 -0
  58. package/dist/executors/index.d.ts +7 -0
  59. package/dist/executors/index.d.ts.map +1 -0
  60. package/dist/index.d.ts +11 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +17473 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/interfaces/IAPIClient.d.ts +179 -0
  65. package/dist/interfaces/IAPIClient.d.ts.map +1 -0
  66. package/dist/interfaces/IEthersAdapter.d.ts +116 -0
  67. package/dist/interfaces/IEthersAdapter.d.ts.map +1 -0
  68. package/dist/interfaces/IExecutor.d.ts +64 -0
  69. package/dist/interfaces/IExecutor.d.ts.map +1 -0
  70. package/dist/interfaces/IRenderer.d.ts +117 -0
  71. package/dist/interfaces/IRenderer.d.ts.map +1 -0
  72. package/dist/interfaces/index.d.ts +5 -0
  73. package/dist/interfaces/index.d.ts.map +1 -0
  74. package/dist/lib/markdown.d.ts +21 -0
  75. package/dist/lib/markdown.d.ts.map +1 -0
  76. package/dist/lib/utils.d.ts +72 -0
  77. package/dist/lib/utils.d.ts.map +1 -0
  78. package/dist/renderers/AP2Renderer.d.ts +12 -0
  79. package/dist/renderers/AP2Renderer.d.ts.map +1 -0
  80. package/dist/renderers/APIRenderer.d.ts +12 -0
  81. package/dist/renderers/APIRenderer.d.ts.map +1 -0
  82. package/dist/renderers/BaseRenderer.d.ts +16 -0
  83. package/dist/renderers/BaseRenderer.d.ts.map +1 -0
  84. package/dist/renderers/ContractRenderer.d.ts +14 -0
  85. package/dist/renderers/ContractRenderer.d.ts.map +1 -0
  86. package/dist/renderers/FiatRenderer.d.ts +12 -0
  87. package/dist/renderers/FiatRenderer.d.ts.map +1 -0
  88. package/dist/renderers/RendererRegistry.d.ts +78 -0
  89. package/dist/renderers/RendererRegistry.d.ts.map +1 -0
  90. package/dist/renderers/index.d.ts +12 -0
  91. package/dist/renderers/index.d.ts.map +1 -0
  92. package/dist/services/api.d.ts +55 -0
  93. package/dist/services/api.d.ts.map +1 -0
  94. package/dist/services/functionCallExecutor.d.ts +32 -0
  95. package/dist/services/functionCallExecutor.d.ts.map +1 -0
  96. package/dist/services/moonpayService.d.ts +82 -0
  97. package/dist/services/moonpayService.d.ts.map +1 -0
  98. package/dist/services/toolCallProcessor.d.ts +12 -0
  99. package/dist/services/toolCallProcessor.d.ts.map +1 -0
  100. package/dist/services/walletService.d.ts +250 -0
  101. package/dist/services/walletService.d.ts.map +1 -0
  102. package/dist/style.css +1 -0
  103. package/dist/types/index.d.ts +109 -0
  104. package/dist/types/index.d.ts.map +1 -0
  105. package/dist/types/moonpay.d.ts +31 -0
  106. package/dist/types/moonpay.d.ts.map +1 -0
  107. package/package.json +87 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/dist/bundle-mjs.mjs","../src/lib/utils.ts","../../node_modules/.pnpm/marked@9.1.6/node_modules/marked/lib/marked.esm.js","../../node_modules/.pnpm/dompurify@3.3.1/node_modules/dompurify/dist/purify.es.mjs","../src/lib/markdown.ts","../src/composables/useToast.ts","../../node_modules/.pnpm/reflect-metadata@0.2.2/node_modules/reflect-metadata/Reflect.js","../../node_modules/.pnpm/@inversifyjs+common@1.4.0/node_modules/@inversifyjs/common/lib/esm/index.js","../../node_modules/.pnpm/@inversifyjs+reflect-metada_07577426a6374fde7eec3f227474a891/node_modules/@inversifyjs/reflect-metadata-utils/lib/esm/index.js","../../node_modules/.pnpm/@inversifyjs+core@1.3.5_reflect-metadata@0.2.2/node_modules/@inversifyjs/core/lib/esm/index.js","../../node_modules/.pnpm/inversify@6.2.2_reflect-metadata@0.2.2/node_modules/inversify/lib/esm/index.js","../src/core/tokens.ts","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/bind.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/utils.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosError.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/null.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toFormData.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/AxiosURLSearchParams.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/buildURL.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/InterceptorManager.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/transitional.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/FormData.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/classes/Blob.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/browser/index.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/common/utils.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/platform/index.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/toURLEncodedForm.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/formDataToJSON.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/defaults/index.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseHeaders.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/AxiosHeaders.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/transformData.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/isCancel.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CanceledError.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/settle.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/parseProtocol.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/speedometer.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/throttle.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/progressEventReducer.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isURLSameOrigin.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/cookies.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAbsoluteURL.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/combineURLs.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/buildFullPath.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/mergeConfig.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/resolveConfig.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/xhr.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/composeSignals.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/trackStream.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/fetch.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/adapters/adapters.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/dispatchRequest.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/env/data.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/validator.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/core/Axios.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/cancel/CancelToken.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/spread.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/isAxiosError.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/helpers/HttpStatusCode.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/lib/axios.js","../../node_modules/.pnpm/axios@1.13.2/node_modules/axios/index.js","../src/services/api.ts","../src/services/moonpayService.ts","../src/services/walletService.ts","../src/services/toolCallProcessor.ts","../src/services/functionCallExecutor.ts","../src/adapters/EthersV5Adapter.ts","../src/adapters/EthersV6Adapter.ts","../src/executors/base/BaseExecutor.ts","../src/executors/APIExecutor.ts","../src/executors/ContractExecutor.ts","../src/executors/FiatExecutor.ts","../src/executors/AP2Executor.ts","../src/executors/ExecutorRegistry.ts","../src/renderers/BaseRenderer.ts","../src/renderers/APIRenderer.ts","../src/renderers/ContractRenderer.ts","../src/renderers/FiatRenderer.ts","../src/renderers/AP2Renderer.ts","../src/renderers/RendererRegistry.ts","../src/core/container.ts","../src/core/internal-container.ts","../src/composables/useInternalDI.ts","../src/composables/useAP2Payment.ts","../src/components/WalletConnect.vue","../src/components/AP2PaymentFlow.vue","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/shared/src/utils.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/defaultAttributes.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/Icon.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/createLucideIcon.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/code-xml.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/copy.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/dollar-sign.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/hash.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/wallet.js","../../node_modules/.pnpm/lucide-vue-next@0.562.0_vue@3.5.26_typescript@5.9.3_/node_modules/lucide-vue-next/dist/esm/icons/zap.js","../src/components/FunctionCallDisplay.vue","../src/components/WalletIndicator.vue","../src/components/PaymentApprovalModal.vue","../src/components/SourcesBadge.vue","../src/components/ChatInterface.vue","../src/components/ChatWidget.vue"],"sourcesContent":["function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","const CLASS_PART_SEPARATOR = '-';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n const conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\n }\n return conflicts;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, classPartObject) => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[0];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(({\n validator\n }) => validator(classRest))?.classGroupId;\n};\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nconst getGroupIdForArbitraryProperty = className => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n};\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n prefix\n } = config;\n const classMap = {\n nextPart: new Map(),\n validators: []\n };\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n classGroup.forEach(classDefinition => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n};\nconst getPart = (classPartObject, path) => {\n let currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n};\nconst isThemeGetter = func => func.isThemeGetter;\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map(classDefinition => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n};\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = new Map();\n let previousCache = new Map();\n const update = (key, value) => {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n };\n return {\n get(key) {\n let value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst createParseClassName = config => {\n const {\n separator,\n experimentalParseClassName\n } = config;\n const isSeparatorSingleCharacter = separator.length === 1;\n const firstSeparatorCharacter = separator[0];\n const separatorLength = separator.length;\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = className => {\n const modifiers = [];\n let bracketDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n };\n };\n if (experimentalParseClassName) {\n return className => experimentalParseClassName({\n className,\n parseClassName\n });\n }\n return parseClassName;\n};\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst sortModifiers = modifiers => {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n const sortedModifiers = [];\n let unsortedModifiers = [];\n modifiers.forEach(modifier => {\n const isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push(...unsortedModifiers.sort());\n return sortedModifiers;\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n const variantModifier = sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nfunction twJoin() {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nconst toValue = mix => {\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || [];\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\nconst isAny = () => true;\nconst getIsArbitraryValue = (value, label, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n const colors = fromTheme('colors');\n const spacing = fromTheme('spacing');\n const blur = fromTheme('blur');\n const brightness = fromTheme('brightness');\n const borderColor = fromTheme('borderColor');\n const borderRadius = fromTheme('borderRadius');\n const borderSpacing = fromTheme('borderSpacing');\n const borderWidth = fromTheme('borderWidth');\n const contrast = fromTheme('contrast');\n const grayscale = fromTheme('grayscale');\n const hueRotate = fromTheme('hueRotate');\n const invert = fromTheme('invert');\n const gap = fromTheme('gap');\n const gradientColorStops = fromTheme('gradientColorStops');\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n const inset = fromTheme('inset');\n const margin = fromTheme('margin');\n const opacity = fromTheme('opacity');\n const padding = fromTheme('padding');\n const saturate = fromTheme('saturate');\n const scale = fromTheme('scale');\n const sepia = fromTheme('sepia');\n const skew = fromTheme('skew');\n const space = fromTheme('space');\n const translate = fromTheme('translate');\n const getOverscroll = () => ['auto', 'contain', 'none'];\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [...getPositions(), isArbitraryValue]\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger, isArbitraryValue]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger, isArbitraryValue]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal', ...getAlign()]\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...getAlign(), 'baseline']\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [...getAlign(), 'baseline']\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\n }],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...getLineStyles(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isLength, isArbitraryValue]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [...getPositions(), isArbitraryPosition]\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...getLineStyles(), 'hidden']\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': [borderColor]\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: ['', ...getLineStyles()]\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isLength, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmptyAndArbitrary()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'separator', separator);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n for (const configKey in override) {\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\n }\n for (const key in extend) {\n mergeConfigProperties(baseConfig[key], extend[key]);\n }\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\n }\n }\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\nexport function cn(...inputs: ClassValue[]) {\r\n return twMerge(clsx(inputs));\r\n}\r\n\r\n/**\r\n * API Configuration\r\n */\r\ndeclare global {\r\n interface Window {\r\n __TERMIX_API_LOCAL__?: boolean;\r\n }\r\n}\r\n\r\n/**\r\n * Get the API base URL\r\n * In production: Uses https://dashboard.termix.ai\r\n * In development with window.__TERMIX_API_LOCAL__=true: Uses http://127.0.0.1:3000\r\n * Otherwise: Uses https://dashboard.termix.ai\r\n */\r\nexport const getApiBaseUrl = (): string => {\r\n // Check for browser environment variable (injected by build config)\r\n if (typeof window !== \"undefined\" && window.__TERMIX_API_LOCAL__ === true) {\r\n return \"http://127.0.0.1:3000\";\r\n }\r\n\r\n return \"https://dashboard.termix.ai\";\r\n};\r\n\r\n/**\r\n * Export the base URL constant for direct usage\r\n */\r\nexport const API_BASE_URL = getApiBaseUrl();\r\n\r\n// Helper function to extract function calls from AI response text\r\nexport function extractFunctionCalls(text: string): Array<{\r\n name: string;\r\n parameters: Record<string, any>;\r\n metadata?: Record<string, any>;\r\n}> {\r\n console.log(\r\n \"extractFunctionCalls: Starting extraction from text length:\",\r\n text?.length\r\n );\r\n\r\n const functionCalls: Array<{\r\n name: string;\r\n parameters: Record<string, any>;\r\n metadata?: Record<string, any>;\r\n }> = [];\r\n\r\n // Look for JSON code blocks with function_call\r\n const jsonBlockRegex = /```json\\s*\\n?([\\s\\S]*?)\\n?```/g;\r\n let match;\r\n let matchCount = 0;\r\n\r\n while ((match = jsonBlockRegex.exec(text)) !== null) {\r\n matchCount++;\r\n console.log(\r\n `extractFunctionCalls: Found JSON block ${matchCount}:`,\r\n match[1].substring(0, 100) + \"...\"\r\n );\r\n\r\n try {\r\n const jsonContent = match[1].trim();\r\n const parsed = JSON.parse(jsonContent);\r\n\r\n console.log(\"extractFunctionCalls: Parsed JSON:\", parsed);\r\n\r\n // Check if it's a function call\r\n if (parsed.function_call && parsed.function_call.name) {\r\n const functionCall = {\r\n name: parsed.function_call.name,\r\n parameters: parsed.function_call.parameters || {},\r\n metadata: parsed.function_call.metadata || {},\r\n };\r\n functionCalls.push(functionCall);\r\n console.log(\"extractFunctionCalls: Added function call:\", functionCall);\r\n } else {\r\n console.log(\r\n \"extractFunctionCalls: JSON does not contain function_call with name\"\r\n );\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to parse JSON block:\", error);\r\n }\r\n }\r\n\r\n console.log(\r\n `extractFunctionCalls: Total matches: ${matchCount}, function calls extracted: ${functionCalls.length}`\r\n );\r\n return functionCalls;\r\n}\r\n\r\n/**\r\n * HMAC (Hash-based Message Authentication Code) utility functions\r\n * Uses Web Crypto API for browser-compatible cryptographic operations\r\n */\r\n\r\nexport type HmacAlgorithm = 'SHA-256' | 'SHA-384' | 'SHA-512';\r\n\r\n/**\r\n * Generate HMAC signature for a message\r\n *\r\n * @param secret - The secret key for HMAC\r\n * @param message - The message to sign\r\n * @param algorithm - Hash algorithm to use (default: SHA-256)\r\n * @returns Promise<string> - Hex-encoded HMAC signature\r\n *\r\n * @example\r\n * ```typescript\r\n * const signature = await hmacSign('my-secret-key', 'message to sign');\r\n * console.log(signature); // hex string like \"a1b2c3...\"\r\n * ```\r\n */\r\nexport async function hmacSign(\r\n secret: string,\r\n message: string,\r\n algorithm: HmacAlgorithm = 'SHA-256'\r\n): Promise<string> {\r\n const encoder = new TextEncoder();\r\n const keyData = encoder.encode(secret);\r\n const messageData = encoder.encode(message);\r\n\r\n const cryptoKey = await crypto.subtle.importKey(\r\n 'raw',\r\n keyData,\r\n { name: 'HMAC', hash: algorithm },\r\n false,\r\n ['sign']\r\n );\r\n\r\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\r\n return arrayBufferToHex(signature);\r\n}\r\n\r\n/**\r\n * Verify HMAC signature\r\n *\r\n * @param secret - The secret key for HMAC\r\n * @param message - The original message\r\n * @param signature - The HMAC signature to verify (hex string)\r\n * @param algorithm - Hash algorithm to use (default: SHA-256)\r\n * @returns Promise<boolean> - True if signature is valid\r\n *\r\n * @example\r\n * ```typescript\r\n * const isValid = await hmacVerify('my-secret-key', 'message', 'a1b2c3...');\r\n * ```\r\n */\r\nexport async function hmacVerify(\r\n secret: string,\r\n message: string,\r\n signature: string,\r\n algorithm: HmacAlgorithm = 'SHA-256'\r\n): Promise<boolean> {\r\n const expectedSignature = await hmacSign(secret, message, algorithm);\r\n return timingSafeEqual(expectedSignature, signature);\r\n}\r\n\r\n/**\r\n * Generate HMAC signature and return as Base64\r\n *\r\n * @param secret - The secret key for HMAC\r\n * @param message - The message to sign\r\n * @param algorithm - Hash algorithm to use (default: SHA-256)\r\n * @returns Promise<string> - Base64-encoded HMAC signature\r\n */\r\nexport async function hmacSignBase64(\r\n secret: string,\r\n message: string,\r\n algorithm: HmacAlgorithm = 'SHA-256'\r\n): Promise<string> {\r\n const encoder = new TextEncoder();\r\n const keyData = encoder.encode(secret);\r\n const messageData = encoder.encode(message);\r\n\r\n const cryptoKey = await crypto.subtle.importKey(\r\n 'raw',\r\n keyData,\r\n { name: 'HMAC', hash: algorithm },\r\n false,\r\n ['sign']\r\n );\r\n\r\n const signature = await crypto.subtle.sign('HMAC', cryptoKey, messageData);\r\n return arrayBufferToBase64(signature);\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to hexadecimal string\r\n */\r\nfunction arrayBufferToHex(buffer: ArrayBuffer): string {\r\n const byteArray = new Uint8Array(buffer);\r\n return Array.from(byteArray)\r\n .map(byte => byte.toString(16).padStart(2, '0'))\r\n .join('');\r\n}\r\n\r\n/**\r\n * Convert ArrayBuffer to Base64 string\r\n */\r\nfunction arrayBufferToBase64(buffer: ArrayBuffer): string {\r\n const byteArray = new Uint8Array(buffer);\r\n let binary = '';\r\n for (let i = 0; i < byteArray.length; i++) {\r\n binary += String.fromCharCode(byteArray[i]);\r\n }\r\n return btoa(binary);\r\n}\r\n\r\n/**\r\n * Timing-safe string comparison to prevent timing attacks\r\n */\r\nfunction timingSafeEqual(a: string, b: string): boolean {\r\n if (a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n let result = 0;\r\n for (let i = 0; i < a.length; i++) {\r\n result |= a.charCodeAt(i) ^ b.charCodeAt(i);\r\n }\r\n return result === 0;\r\n}\r\n","/**\n * marked v9.1.6 - a markdown parser\n * Copyright (c) 2011-2023, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\nfunction unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, (_, n) => {\n n = n.toLowerCase();\n if (n === 'colon')\n return ':';\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x'\n ? String.fromCharCode(parseInt(n.substring(2), 16))\n : String.fromCharCode(+n.substring(1));\n }\n return '';\n });\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n val = typeof val === 'object' && 'source' in val ? val.source : val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: () => {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch (e) {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape(text)\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n // TODO: Fix this rules type\n rules;\n lexer;\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline._escapes, '$1') : cap[2],\n text\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n const text = rtrim(cap[0].replace(/^ *>[ \\t]?/gm, ''), '\\n');\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n const tokens = this.lexer.blockTokens(text);\n this.lexer.state.top = top;\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens,\n text\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let raw = '';\n let itemContents = '';\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n let blankLine = false;\n if (!line && /^ *$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(src)) {\n break;\n }\n if (nextLine.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLine.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLine.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: []\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = raw.trimEnd();\n list.items[list.items.length - 1].text = itemContents.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0]\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline._escapes, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline._escapes, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (cap) {\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const item = {\n type: 'table',\n raw: cap[0],\n header: splitCells(cap[1]).map(c => {\n return { text: c, tokens: [] };\n }),\n align: cap[2].replace(/^\\||\\| *$/g, '').split('|'),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n if (item.header.length === item.align.length) {\n let l = item.align.length;\n let i, j, k, row;\n for (i = 0; i < l; i++) {\n const align = item.align[i];\n if (align) {\n if (/^ *-+: *$/.test(align)) {\n item.align[i] = 'right';\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align[i] = 'center';\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align[i] = 'left';\n }\n else {\n item.align[i] = null;\n }\n }\n }\n l = item.rows.length;\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(c => {\n return { text: c, tokens: [] };\n });\n }\n // parse child tokens inside headers and cells\n // header child tokens\n l = item.header.length;\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n }\n // cell child tokens\n l = item.rows.length;\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n return item;\n }\n }\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text)\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0]\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n let link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n text = escape(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text\n }\n ]\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\n// Not all rules are defined in the object literal\n// @ts-expect-error\nconst block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^(?!bull )((?:.|\\n(?!\\s*?\\n|bull ))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n};\nblock._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nblock._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\nblock.def = edit(block.def)\n .replace('label', block._label)\n .replace('title', block._title)\n .getRegex();\nblock.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nblock.listItemStart = edit(/^( *)(bull) */)\n .replace('bull', block.bullet)\n .getRegex();\nblock.list = edit(block.list)\n .replace(/bull/g, block.bullet)\n .replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))')\n .replace('def', '\\\\n+(?=' + block.def.source + ')')\n .getRegex();\nblock._tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr'\n + '|track|ul';\nblock._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\nblock.html = edit(block.html, 'i')\n .replace('comment', block._comment)\n .replace('tag', block._tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nblock.lheading = edit(block.lheading)\n .replace(/bull/g, block.bullet) // lists can interrupt\n .getRegex();\nblock.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nblock.blockquote = edit(block.blockquote)\n .replace('paragraph', block.paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nblock.normal = { ...block };\n/**\n * GFM Block Grammar\n */\nblock.gfm = {\n ...block.normal,\n table: '^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n};\nblock.gfm.table = edit(block.gfm.table)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', ' {4}[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nblock.gfm.paragraph = edit(block._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nblock.pedantic = {\n ...block.normal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', block._comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(block.normal._paragraph)\n .replace('hr', block.hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', block.lheading)\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .getRegex()\n};\n/**\n * Inline-Level Grammar\n */\n// Not all rules are defined in the object literal\n// @ts-expect-error\nconst inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // | Skip orphan inside strong | Consume to delim | (1) #*** | (2) a***#, a*** | (3) #***a, ***a | (4) ***# | (5) #***# | (6) a***a\n rDelimAst: /^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])/,\n rDelimUnd: /^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])/ // ^- Not allowed for _\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^((?![*_])[\\spunctuation])/\n};\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\ninline._punctuation = '\\\\p{P}$+<=>`^|~';\ninline.punctuation = edit(inline.punctuation, 'u').replace(/punctuation/g, inline._punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\ninline.blockSkip = /\\[[^[\\]]*?\\]\\([^\\(\\)]*?\\)|`[^`]*?`|<[^<>]*?>/g;\ninline.anyPunctuation = /\\\\[punct]/g;\ninline._escapes = /\\\\([punct])/g;\ninline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\ninline.emStrong.lDelim = edit(inline.emStrong.lDelim, 'u')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline.anyPunctuation = edit(inline.anyPunctuation, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline._escapes = edit(inline._escapes, 'gu')\n .replace(/punct/g, inline._punctuation)\n .getRegex();\ninline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\ninline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\ninline.autolink = edit(inline.autolink)\n .replace('scheme', inline._scheme)\n .replace('email', inline._email)\n .getRegex();\ninline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\ninline.tag = edit(inline.tag)\n .replace('comment', inline._comment)\n .replace('attribute', inline._attribute)\n .getRegex();\ninline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\ninline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\ninline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\ninline.link = edit(inline.link)\n .replace('label', inline._label)\n .replace('href', inline._href)\n .replace('title', inline._title)\n .getRegex();\ninline.reflink = edit(inline.reflink)\n .replace('label', inline._label)\n .replace('ref', block._label)\n .getRegex();\ninline.nolink = edit(inline.nolink)\n .replace('ref', block._label)\n .getRegex();\ninline.reflinkSearch = edit(inline.reflinkSearch, 'g')\n .replace('reflink', inline.reflink)\n .replace('nolink', inline.nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\ninline.normal = { ...inline };\n/**\n * Pedantic Inline Grammar\n */\ninline.pedantic = {\n ...inline.normal,\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', inline._label)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', inline._label)\n .getRegex()\n};\n/**\n * GFM Inline Grammar\n */\ninline.gfm = {\n ...inline.normal,\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n};\ninline.gfm.url = edit(inline.gfm.url, 'i')\n .replace('email', inline.gfm._extended_email)\n .getRegex();\n/**\n * GFM + Line Breaks Inline Grammar\n */\ninline.breaks = {\n ...inline.gfm,\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex()\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n // @ts-expect-error\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n const rules = {\n block: block.normal,\n inline: inline.normal\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n let next;\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n return this.tokens;\n }\n blockTokens(src, tokens = []) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n }\n else {\n src = src.replace(/^( *)(\\t+)/gm, (_, leading, tabs) => {\n return leading + ' '.repeat(tabs.length);\n });\n }\n let token;\n let lastToken;\n let cutSrc;\n let lastParagraphClipped;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n code(code, infostring, escaped) {\n const lang = (infostring || '').match(/^\\S*/)?.[0];\n code = code.replace(/\\n$/, '') + '\\n';\n if (!lang) {\n return '<pre><code>'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape(lang)\n + '\">'\n + (escaped ? code : escape(code, true))\n + '</code></pre>\\n';\n }\n blockquote(quote) {\n return `<blockquote>\\n${quote}</blockquote>\\n`;\n }\n html(html, block) {\n return html;\n }\n heading(text, level, raw) {\n // ignore IDs\n return `<h${level}>${text}</h${level}>\\n`;\n }\n hr() {\n return '<hr>\\n';\n }\n list(body, ordered, start) {\n const type = ordered ? 'ol' : 'ul';\n const startatt = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(text, task, checked) {\n return `<li>${text}</li>\\n`;\n }\n checkbox(checked) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph(text) {\n return `<p>${text}</p>\\n`;\n }\n table(header, body) {\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow(content) {\n return `<tr>\\n${content}</tr>\\n`;\n }\n tablecell(content, flags) {\n const type = flags.header ? 'th' : 'td';\n const tag = flags.align\n ? `<${type} align=\"${flags.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong(text) {\n return `<strong>${text}</strong>`;\n }\n em(text) {\n return `<em>${text}</em>`;\n }\n codespan(text) {\n return `<code>${text}</code>`;\n }\n br() {\n return '<br>';\n }\n del(text) {\n return `<del>${text}</del>`;\n }\n link(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image(href, title, text) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${title}\"`;\n }\n out += '>';\n return out;\n }\n text(text) {\n return text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong(text) {\n return text;\n }\n em(text) {\n return text;\n }\n codespan(text) {\n return text;\n }\n del(text) {\n return text;\n }\n html(text) {\n return text;\n }\n text(text) {\n return text;\n }\n link(href, title, text) {\n return '' + text;\n }\n image(href, title, text) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const genericToken = token;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'space': {\n continue;\n }\n case 'hr': {\n out += this.renderer.hr();\n continue;\n }\n case 'heading': {\n const headingToken = token;\n out += this.renderer.heading(this.parseInline(headingToken.tokens), headingToken.depth, unescape(this.parseInline(headingToken.tokens, this.textRenderer)));\n continue;\n }\n case 'code': {\n const codeToken = token;\n out += this.renderer.code(codeToken.text, codeToken.lang, !!codeToken.escaped);\n continue;\n }\n case 'table': {\n const tableToken = token;\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < tableToken.header.length; j++) {\n cell += this.renderer.tablecell(this.parseInline(tableToken.header[j].tokens), { header: true, align: tableToken.align[j] });\n }\n header += this.renderer.tablerow(cell);\n let body = '';\n for (let j = 0; j < tableToken.rows.length; j++) {\n const row = tableToken.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), { header: false, align: tableToken.align[k] });\n }\n body += this.renderer.tablerow(cell);\n }\n out += this.renderer.table(header, body);\n continue;\n }\n case 'blockquote': {\n const blockquoteToken = token;\n const body = this.parse(blockquoteToken.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n case 'list': {\n const listToken = token;\n const ordered = listToken.ordered;\n const start = listToken.start;\n const loose = listToken.loose;\n let body = '';\n for (let j = 0; j < listToken.items.length; j++) {\n const item = listToken.items[j];\n const checked = item.checked;\n const task = item.task;\n let itemBody = '';\n if (item.task) {\n const checkbox = this.renderer.checkbox(!!checked);\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox + ' '\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, !!checked);\n }\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n case 'html': {\n const htmlToken = token;\n out += this.renderer.html(htmlToken.text, htmlToken.block);\n continue;\n }\n case 'paragraph': {\n const paragraphToken = token;\n out += this.renderer.paragraph(this.parseInline(paragraphToken.tokens));\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text;\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + (textToken.tokens ? this.parseInline(textToken.tokens) : textToken.text);\n }\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n const ret = this.options.extensions.renderers[token.type].call({ parser: this }, token);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n switch (token.type) {\n case 'escape': {\n const escapeToken = token;\n out += renderer.text(escapeToken.text);\n break;\n }\n case 'html': {\n const tagToken = token;\n out += renderer.html(tagToken.text);\n break;\n }\n case 'link': {\n const linkToken = token;\n out += renderer.link(linkToken.href, linkToken.title, this.parseInline(linkToken.tokens, renderer));\n break;\n }\n case 'image': {\n const imageToken = token;\n out += renderer.image(imageToken.href, imageToken.title, imageToken.text);\n break;\n }\n case 'strong': {\n const strongToken = token;\n out += renderer.strong(this.parseInline(strongToken.tokens, renderer));\n break;\n }\n case 'em': {\n const emToken = token;\n out += renderer.em(this.parseInline(emToken.tokens, renderer));\n break;\n }\n case 'codespan': {\n const codespanToken = token;\n out += renderer.codespan(codespanToken.text);\n break;\n }\n case 'br': {\n out += renderer.br();\n break;\n }\n case 'del': {\n const delToken = token;\n out += renderer.del(this.parseInline(delToken.tokens, renderer));\n break;\n }\n case 'text': {\n const textToken = token;\n out += renderer.text(textToken.text);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess'\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.#parseMarkdown(_Lexer.lex, _Parser.parse);\n parseInline = this.#parseMarkdown(_Lexer.lexInline, _Parser.parseInline);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n values = values.concat(this.walkTokens(genericToken[childTokens], callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n const rendererFunc = pack.renderer[prop];\n const rendererKey = prop;\n const prevRenderer = renderer[rendererKey];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererKey] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n const tokenizerFunc = pack.tokenizer[prop];\n const tokenizerKey = prop;\n const prevTokenizer = tokenizer[tokenizerKey];\n // Replace tokenizer with func to run extension, but fall back if false\n tokenizer[tokenizerKey] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n const hooksFunc = pack.hooks[prop];\n const hooksKey = prop;\n const prevHook = hooks[hooksKey];\n if (_Hooks.passThroughHooks.has(prop)) {\n hooks[hooksKey] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n hooks[hooksKey] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n #parseMarkdown(lexer, parser) {\n return (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n // Show warning if an extension set async to true but the parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n if (!opt.silent) {\n console.warn('marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.');\n }\n opt.async = true;\n }\n const throwError = this.#onError(!!opt.silent, !!opt.async);\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n }\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n const tokens = lexer(src, opt);\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n }\n #onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","/*! @license DOMPurify 3.3.1 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.3.1/LICENSE */\n\nconst {\n entries,\n setPrototypeOf,\n isFrozen,\n getPrototypeOf,\n getOwnPropertyDescriptor\n} = Object;\nlet {\n freeze,\n seal,\n create\n} = Object; // eslint-disable-line import/no-mutable-exports\nlet {\n apply,\n construct\n} = typeof Reflect !== 'undefined' && Reflect;\nif (!freeze) {\n freeze = function freeze(x) {\n return x;\n };\n}\nif (!seal) {\n seal = function seal(x) {\n return x;\n };\n}\nif (!apply) {\n apply = function apply(func, thisArg) {\n for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n args[_key - 2] = arguments[_key];\n }\n return func.apply(thisArg, args);\n };\n}\nif (!construct) {\n construct = function construct(Func) {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n return new Func(...args);\n };\n}\nconst arrayForEach = unapply(Array.prototype.forEach);\nconst arrayLastIndexOf = unapply(Array.prototype.lastIndexOf);\nconst arrayPop = unapply(Array.prototype.pop);\nconst arrayPush = unapply(Array.prototype.push);\nconst arraySplice = unapply(Array.prototype.splice);\nconst stringToLowerCase = unapply(String.prototype.toLowerCase);\nconst stringToString = unapply(String.prototype.toString);\nconst stringMatch = unapply(String.prototype.match);\nconst stringReplace = unapply(String.prototype.replace);\nconst stringIndexOf = unapply(String.prototype.indexOf);\nconst stringTrim = unapply(String.prototype.trim);\nconst objectHasOwnProperty = unapply(Object.prototype.hasOwnProperty);\nconst regExpTest = unapply(RegExp.prototype.test);\nconst typeErrorCreate = unconstruct(TypeError);\n/**\n * Creates a new function that calls the given function with a specified thisArg and arguments.\n *\n * @param func - The function to be wrapped and called.\n * @returns A new function that calls the given function with a specified thisArg and arguments.\n */\nfunction unapply(func) {\n return function (thisArg) {\n if (thisArg instanceof RegExp) {\n thisArg.lastIndex = 0;\n }\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n return apply(func, thisArg, args);\n };\n}\n/**\n * Creates a new function that constructs an instance of the given constructor function with the provided arguments.\n *\n * @param func - The constructor function to be wrapped and called.\n * @returns A new function that constructs an instance of the given constructor function with the provided arguments.\n */\nfunction unconstruct(Func) {\n return function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n return construct(Func, args);\n };\n}\n/**\n * Add properties to a lookup table\n *\n * @param set - The set to which elements will be added.\n * @param array - The array containing elements to be added to the set.\n * @param transformCaseFunc - An optional function to transform the case of each element before adding to the set.\n * @returns The modified set with added elements.\n */\nfunction addToSet(set, array) {\n let transformCaseFunc = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : stringToLowerCase;\n if (setPrototypeOf) {\n // Make 'in' and truthy checks like Boolean(set.constructor)\n // independent of any properties defined on Object.prototype.\n // Prevent prototype setters from intercepting set as a this value.\n setPrototypeOf(set, null);\n }\n let l = array.length;\n while (l--) {\n let element = array[l];\n if (typeof element === 'string') {\n const lcElement = transformCaseFunc(element);\n if (lcElement !== element) {\n // Config presets (e.g. tags.js, attrs.js) are immutable.\n if (!isFrozen(array)) {\n array[l] = lcElement;\n }\n element = lcElement;\n }\n }\n set[element] = true;\n }\n return set;\n}\n/**\n * Clean up an array to harden against CSPP\n *\n * @param array - The array to be cleaned.\n * @returns The cleaned version of the array\n */\nfunction cleanArray(array) {\n for (let index = 0; index < array.length; index++) {\n const isPropertyExist = objectHasOwnProperty(array, index);\n if (!isPropertyExist) {\n array[index] = null;\n }\n }\n return array;\n}\n/**\n * Shallow clone an object\n *\n * @param object - The object to be cloned.\n * @returns A new object that copies the original.\n */\nfunction clone(object) {\n const newObject = create(null);\n for (const [property, value] of entries(object)) {\n const isPropertyExist = objectHasOwnProperty(object, property);\n if (isPropertyExist) {\n if (Array.isArray(value)) {\n newObject[property] = cleanArray(value);\n } else if (value && typeof value === 'object' && value.constructor === Object) {\n newObject[property] = clone(value);\n } else {\n newObject[property] = value;\n }\n }\n }\n return newObject;\n}\n/**\n * This method automatically checks if the prop is function or getter and behaves accordingly.\n *\n * @param object - The object to look up the getter function in its prototype chain.\n * @param prop - The property name for which to find the getter function.\n * @returns The getter function found in the prototype chain or a fallback function.\n */\nfunction lookupGetter(object, prop) {\n while (object !== null) {\n const desc = getOwnPropertyDescriptor(object, prop);\n if (desc) {\n if (desc.get) {\n return unapply(desc.get);\n }\n if (typeof desc.value === 'function') {\n return unapply(desc.value);\n }\n }\n object = getPrototypeOf(object);\n }\n function fallbackValue() {\n return null;\n }\n return fallbackValue;\n}\n\nconst html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'search', 'section', 'select', 'shadow', 'slot', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']);\nconst svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'enterkeyhint', 'exportparts', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'inputmode', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'part', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);\nconst svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feDropShadow', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']);\n// List of SVG elements that are disallowed by default.\n// We still need to know them so that we can do namespace\n// checks properly in case one wants to add them to\n// allow-list.\nconst svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);\nconst mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover', 'mprescripts']);\n// Similarly to SVG, we want to know all MathML elements,\n// even those that we disallow by default.\nconst mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);\nconst text = freeze(['#text']);\n\nconst html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'exportparts', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inert', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'part', 'pattern', 'placeholder', 'playsinline', 'popover', 'popovertarget', 'popovertargetaction', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'slot', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'wrap', 'xmlns', 'slot']);\nconst svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'amplitude', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'exponent', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'intercept', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'mask-type', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'slope', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'tablevalues', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);\nconst mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);\nconst xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);\n\n// eslint-disable-next-line unicorn/better-regex\nconst MUSTACHE_EXPR = seal(/\\{\\{[\\w\\W]*|[\\w\\W]*\\}\\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode\nconst ERB_EXPR = seal(/<%[\\w\\W]*|[\\w\\W]*%>/gm);\nconst TMPLIT_EXPR = seal(/\\$\\{[\\w\\W]*/gm); // eslint-disable-line unicorn/better-regex\nconst DATA_ATTR = seal(/^data-[\\-\\w.\\u00B7-\\uFFFF]+$/); // eslint-disable-line no-useless-escape\nconst ARIA_ATTR = seal(/^aria-[\\-\\w]+$/); // eslint-disable-line no-useless-escape\nconst IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\\-]+(?:[^a-z+.\\-:]|$))/i // eslint-disable-line no-useless-escape\n);\nconst IS_SCRIPT_OR_DATA = seal(/^(?:\\w+script|data):/i);\nconst ATTR_WHITESPACE = seal(/[\\u0000-\\u0020\\u00A0\\u1680\\u180E\\u2000-\\u2029\\u205F\\u3000]/g // eslint-disable-line no-control-regex\n);\nconst DOCTYPE_NAME = seal(/^html$/i);\nconst CUSTOM_ELEMENT = seal(/^[a-z][.\\w]*(-[.\\w]+)+$/i);\n\nvar EXPRESSIONS = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARIA_ATTR: ARIA_ATTR,\n ATTR_WHITESPACE: ATTR_WHITESPACE,\n CUSTOM_ELEMENT: CUSTOM_ELEMENT,\n DATA_ATTR: DATA_ATTR,\n DOCTYPE_NAME: DOCTYPE_NAME,\n ERB_EXPR: ERB_EXPR,\n IS_ALLOWED_URI: IS_ALLOWED_URI,\n IS_SCRIPT_OR_DATA: IS_SCRIPT_OR_DATA,\n MUSTACHE_EXPR: MUSTACHE_EXPR,\n TMPLIT_EXPR: TMPLIT_EXPR\n});\n\n/* eslint-disable @typescript-eslint/indent */\n// https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType\nconst NODE_TYPE = {\n element: 1,\n attribute: 2,\n text: 3,\n cdataSection: 4,\n entityReference: 5,\n // Deprecated\n entityNode: 6,\n // Deprecated\n progressingInstruction: 7,\n comment: 8,\n document: 9,\n documentType: 10,\n documentFragment: 11,\n notation: 12 // Deprecated\n};\nconst getGlobal = function getGlobal() {\n return typeof window === 'undefined' ? null : window;\n};\n/**\n * Creates a no-op policy for internal use only.\n * Don't export this function outside this module!\n * @param trustedTypes The policy factory.\n * @param purifyHostElement The Script element used to load DOMPurify (to determine policy name suffix).\n * @return The policy created (or null, if Trusted Types\n * are not supported or creating the policy failed).\n */\nconst _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, purifyHostElement) {\n if (typeof trustedTypes !== 'object' || typeof trustedTypes.createPolicy !== 'function') {\n return null;\n }\n // Allow the callers to control the unique policy name\n // by adding a data-tt-policy-suffix to the script element with the DOMPurify.\n // Policy creation with duplicate names throws in Trusted Types.\n let suffix = null;\n const ATTR_NAME = 'data-tt-policy-suffix';\n if (purifyHostElement && purifyHostElement.hasAttribute(ATTR_NAME)) {\n suffix = purifyHostElement.getAttribute(ATTR_NAME);\n }\n const policyName = 'dompurify' + (suffix ? '#' + suffix : '');\n try {\n return trustedTypes.createPolicy(policyName, {\n createHTML(html) {\n return html;\n },\n createScriptURL(scriptUrl) {\n return scriptUrl;\n }\n });\n } catch (_) {\n // Policy creation failed (most likely another DOMPurify script has\n // already run). Skip creating the policy, as this will only cause errors\n // if TT are enforced.\n console.warn('TrustedTypes policy ' + policyName + ' could not be created.');\n return null;\n }\n};\nconst _createHooksMap = function _createHooksMap() {\n return {\n afterSanitizeAttributes: [],\n afterSanitizeElements: [],\n afterSanitizeShadowDOM: [],\n beforeSanitizeAttributes: [],\n beforeSanitizeElements: [],\n beforeSanitizeShadowDOM: [],\n uponSanitizeAttribute: [],\n uponSanitizeElement: [],\n uponSanitizeShadowNode: []\n };\n};\nfunction createDOMPurify() {\n let window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();\n const DOMPurify = root => createDOMPurify(root);\n DOMPurify.version = '3.3.1';\n DOMPurify.removed = [];\n if (!window || !window.document || window.document.nodeType !== NODE_TYPE.document || !window.Element) {\n // Not running in a browser, provide a factory function\n // so that you can pass your own Window\n DOMPurify.isSupported = false;\n return DOMPurify;\n }\n let {\n document\n } = window;\n const originalDocument = document;\n const currentScript = originalDocument.currentScript;\n const {\n DocumentFragment,\n HTMLTemplateElement,\n Node,\n Element,\n NodeFilter,\n NamedNodeMap = window.NamedNodeMap || window.MozNamedAttrMap,\n HTMLFormElement,\n DOMParser,\n trustedTypes\n } = window;\n const ElementPrototype = Element.prototype;\n const cloneNode = lookupGetter(ElementPrototype, 'cloneNode');\n const remove = lookupGetter(ElementPrototype, 'remove');\n const getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');\n const getChildNodes = lookupGetter(ElementPrototype, 'childNodes');\n const getParentNode = lookupGetter(ElementPrototype, 'parentNode');\n // As per issue #47, the web-components registry is inherited by a\n // new document created via createHTMLDocument. As per the spec\n // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)\n // a new empty registry is used when creating a template contents owner\n // document, so we use that as our parent document to ensure nothing\n // is inherited.\n if (typeof HTMLTemplateElement === 'function') {\n const template = document.createElement('template');\n if (template.content && template.content.ownerDocument) {\n document = template.content.ownerDocument;\n }\n }\n let trustedTypesPolicy;\n let emptyHTML = '';\n const {\n implementation,\n createNodeIterator,\n createDocumentFragment,\n getElementsByTagName\n } = document;\n const {\n importNode\n } = originalDocument;\n let hooks = _createHooksMap();\n /**\n * Expose whether this browser supports running the full DOMPurify.\n */\n DOMPurify.isSupported = typeof entries === 'function' && typeof getParentNode === 'function' && implementation && implementation.createHTMLDocument !== undefined;\n const {\n MUSTACHE_EXPR,\n ERB_EXPR,\n TMPLIT_EXPR,\n DATA_ATTR,\n ARIA_ATTR,\n IS_SCRIPT_OR_DATA,\n ATTR_WHITESPACE,\n CUSTOM_ELEMENT\n } = EXPRESSIONS;\n let {\n IS_ALLOWED_URI: IS_ALLOWED_URI$1\n } = EXPRESSIONS;\n /**\n * We consider the elements and attributes below to be safe. Ideally\n * don't add any new ones but feel free to remove unwanted ones.\n */\n /* allowed element names */\n let ALLOWED_TAGS = null;\n const DEFAULT_ALLOWED_TAGS = addToSet({}, [...html$1, ...svg$1, ...svgFilters, ...mathMl$1, ...text]);\n /* Allowed attribute names */\n let ALLOWED_ATTR = null;\n const DEFAULT_ALLOWED_ATTR = addToSet({}, [...html, ...svg, ...mathMl, ...xml]);\n /*\n * Configure how DOMPurify should handle custom elements and their attributes as well as customized built-in elements.\n * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)\n * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)\n * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.\n */\n let CUSTOM_ELEMENT_HANDLING = Object.seal(create(null, {\n tagNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeNameCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n allowCustomizedBuiltInElements: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: false\n }\n }));\n /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */\n let FORBID_TAGS = null;\n /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */\n let FORBID_ATTR = null;\n /* Config object to store ADD_TAGS/ADD_ATTR functions (when used as functions) */\n const EXTRA_ELEMENT_HANDLING = Object.seal(create(null, {\n tagCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n },\n attributeCheck: {\n writable: true,\n configurable: false,\n enumerable: true,\n value: null\n }\n }));\n /* Decide if ARIA attributes are okay */\n let ALLOW_ARIA_ATTR = true;\n /* Decide if custom data attributes are okay */\n let ALLOW_DATA_ATTR = true;\n /* Decide if unknown protocols are okay */\n let ALLOW_UNKNOWN_PROTOCOLS = false;\n /* Decide if self-closing tags in attributes are allowed.\n * Usually removed due to a mXSS issue in jQuery 3.0 */\n let ALLOW_SELF_CLOSE_IN_ATTR = true;\n /* Output should be safe for common template engines.\n * This means, DOMPurify removes data attributes, mustaches and ERB\n */\n let SAFE_FOR_TEMPLATES = false;\n /* Output should be safe even for XML used within HTML and alike.\n * This means, DOMPurify removes comments when containing risky content.\n */\n let SAFE_FOR_XML = true;\n /* Decide if document with <html>... should be returned */\n let WHOLE_DOCUMENT = false;\n /* Track whether config is already set on this instance of DOMPurify. */\n let SET_CONFIG = false;\n /* Decide if all elements (e.g. style, script) must be children of\n * document.body. By default, browsers might move them to document.head */\n let FORCE_BODY = false;\n /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported).\n * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead\n */\n let RETURN_DOM = false;\n /* Decide if a DOM `DocumentFragment` should be returned, instead of a html\n * string (or a TrustedHTML object if Trusted Types are supported) */\n let RETURN_DOM_FRAGMENT = false;\n /* Try to return a Trusted Type object instead of a string, return a string in\n * case Trusted Types are not supported */\n let RETURN_TRUSTED_TYPE = false;\n /* Output should be free from DOM clobbering attacks?\n * This sanitizes markups named with colliding, clobberable built-in DOM APIs.\n */\n let SANITIZE_DOM = true;\n /* Achieve full DOM Clobbering protection by isolating the namespace of named\n * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.\n *\n * HTML/DOM spec rules that enable DOM Clobbering:\n * - Named Access on Window (§7.3.3)\n * - DOM Tree Accessors (§3.1.5)\n * - Form Element Parent-Child Relations (§4.10.3)\n * - Iframe srcdoc / Nested WindowProxies (§4.8.5)\n * - HTMLCollection (§4.2.10.2)\n *\n * Namespace isolation is implemented by prefixing `id` and `name` attributes\n * with a constant string, i.e., `user-content-`\n */\n let SANITIZE_NAMED_PROPS = false;\n const SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';\n /* Keep element content when removing element? */\n let KEEP_CONTENT = true;\n /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead\n * of importing it into a new Document and returning a sanitized copy */\n let IN_PLACE = false;\n /* Allow usage of profiles like html, svg and mathMl */\n let USE_PROFILES = {};\n /* Tags to ignore content of when KEEP_CONTENT is true */\n let FORBID_CONTENTS = null;\n const DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);\n /* Tags that are safe for data: URIs */\n let DATA_URI_TAGS = null;\n const DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);\n /* Attributes safe for values like \"javascript:\" */\n let URI_SAFE_ATTRIBUTES = null;\n const DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);\n const MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';\n const SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\n const HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';\n /* Document namespace */\n let NAMESPACE = HTML_NAMESPACE;\n let IS_EMPTY_INPUT = false;\n /* Allowed XHTML+XML namespaces */\n let ALLOWED_NAMESPACES = null;\n const DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);\n let MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);\n let HTML_INTEGRATION_POINTS = addToSet({}, ['annotation-xml']);\n // Certain elements are allowed in both SVG and HTML\n // namespace. We need to specify them explicitly\n // so that they don't get erroneously deleted from\n // HTML namespace.\n const COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);\n /* Parsing of strict XHTML documents */\n let PARSER_MEDIA_TYPE = null;\n const SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];\n const DEFAULT_PARSER_MEDIA_TYPE = 'text/html';\n let transformCaseFunc = null;\n /* Keep a reference to config to pass to hooks */\n let CONFIG = null;\n /* Ideally, do not touch anything below this line */\n /* ______________________________________________ */\n const formElement = document.createElement('form');\n const isRegexOrFunction = function isRegexOrFunction(testValue) {\n return testValue instanceof RegExp || testValue instanceof Function;\n };\n /**\n * _parseConfig\n *\n * @param cfg optional config literal\n */\n // eslint-disable-next-line complexity\n const _parseConfig = function _parseConfig() {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n if (CONFIG && CONFIG === cfg) {\n return;\n }\n /* Shield configuration object from tampering */\n if (!cfg || typeof cfg !== 'object') {\n cfg = {};\n }\n /* Shield configuration object from prototype pollution */\n cfg = clone(cfg);\n PARSER_MEDIA_TYPE =\n // eslint-disable-next-line unicorn/prefer-includes\n SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? DEFAULT_PARSER_MEDIA_TYPE : cfg.PARSER_MEDIA_TYPE;\n // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.\n transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;\n /* Set configuration parameters */\n ALLOWED_TAGS = objectHasOwnProperty(cfg, 'ALLOWED_TAGS') ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;\n ALLOWED_ATTR = objectHasOwnProperty(cfg, 'ALLOWED_ATTR') ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;\n ALLOWED_NAMESPACES = objectHasOwnProperty(cfg, 'ALLOWED_NAMESPACES') ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;\n URI_SAFE_ATTRIBUTES = objectHasOwnProperty(cfg, 'ADD_URI_SAFE_ATTR') ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), cfg.ADD_URI_SAFE_ATTR, transformCaseFunc) : DEFAULT_URI_SAFE_ATTRIBUTES;\n DATA_URI_TAGS = objectHasOwnProperty(cfg, 'ADD_DATA_URI_TAGS') ? addToSet(clone(DEFAULT_DATA_URI_TAGS), cfg.ADD_DATA_URI_TAGS, transformCaseFunc) : DEFAULT_DATA_URI_TAGS;\n FORBID_CONTENTS = objectHasOwnProperty(cfg, 'FORBID_CONTENTS') ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;\n FORBID_TAGS = objectHasOwnProperty(cfg, 'FORBID_TAGS') ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : clone({});\n FORBID_ATTR = objectHasOwnProperty(cfg, 'FORBID_ATTR') ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : clone({});\n USE_PROFILES = objectHasOwnProperty(cfg, 'USE_PROFILES') ? cfg.USE_PROFILES : false;\n ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true\n ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true\n ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false\n ALLOW_SELF_CLOSE_IN_ATTR = cfg.ALLOW_SELF_CLOSE_IN_ATTR !== false; // Default true\n SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false\n SAFE_FOR_XML = cfg.SAFE_FOR_XML !== false; // Default true\n WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false\n RETURN_DOM = cfg.RETURN_DOM || false; // Default false\n RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false\n RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false\n FORCE_BODY = cfg.FORCE_BODY || false; // Default false\n SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true\n SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false\n KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true\n IN_PLACE = cfg.IN_PLACE || false; // Default false\n IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI;\n NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;\n MATHML_TEXT_INTEGRATION_POINTS = cfg.MATHML_TEXT_INTEGRATION_POINTS || MATHML_TEXT_INTEGRATION_POINTS;\n HTML_INTEGRATION_POINTS = cfg.HTML_INTEGRATION_POINTS || HTML_INTEGRATION_POINTS;\n CUSTOM_ELEMENT_HANDLING = cfg.CUSTOM_ELEMENT_HANDLING || {};\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {\n CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;\n }\n if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {\n CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;\n }\n if (SAFE_FOR_TEMPLATES) {\n ALLOW_DATA_ATTR = false;\n }\n if (RETURN_DOM_FRAGMENT) {\n RETURN_DOM = true;\n }\n /* Parse profile info */\n if (USE_PROFILES) {\n ALLOWED_TAGS = addToSet({}, text);\n ALLOWED_ATTR = [];\n if (USE_PROFILES.html === true) {\n addToSet(ALLOWED_TAGS, html$1);\n addToSet(ALLOWED_ATTR, html);\n }\n if (USE_PROFILES.svg === true) {\n addToSet(ALLOWED_TAGS, svg$1);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.svgFilters === true) {\n addToSet(ALLOWED_TAGS, svgFilters);\n addToSet(ALLOWED_ATTR, svg);\n addToSet(ALLOWED_ATTR, xml);\n }\n if (USE_PROFILES.mathMl === true) {\n addToSet(ALLOWED_TAGS, mathMl$1);\n addToSet(ALLOWED_ATTR, mathMl);\n addToSet(ALLOWED_ATTR, xml);\n }\n }\n /* Merge configuration parameters */\n if (cfg.ADD_TAGS) {\n if (typeof cfg.ADD_TAGS === 'function') {\n EXTRA_ELEMENT_HANDLING.tagCheck = cfg.ADD_TAGS;\n } else {\n if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {\n ALLOWED_TAGS = clone(ALLOWED_TAGS);\n }\n addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);\n }\n }\n if (cfg.ADD_ATTR) {\n if (typeof cfg.ADD_ATTR === 'function') {\n EXTRA_ELEMENT_HANDLING.attributeCheck = cfg.ADD_ATTR;\n } else {\n if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {\n ALLOWED_ATTR = clone(ALLOWED_ATTR);\n }\n addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);\n }\n }\n if (cfg.ADD_URI_SAFE_ATTR) {\n addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);\n }\n if (cfg.FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);\n }\n if (cfg.ADD_FORBID_CONTENTS) {\n if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {\n FORBID_CONTENTS = clone(FORBID_CONTENTS);\n }\n addToSet(FORBID_CONTENTS, cfg.ADD_FORBID_CONTENTS, transformCaseFunc);\n }\n /* Add #text in case KEEP_CONTENT is set to true */\n if (KEEP_CONTENT) {\n ALLOWED_TAGS['#text'] = true;\n }\n /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */\n if (WHOLE_DOCUMENT) {\n addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);\n }\n /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */\n if (ALLOWED_TAGS.table) {\n addToSet(ALLOWED_TAGS, ['tbody']);\n delete FORBID_TAGS.tbody;\n }\n if (cfg.TRUSTED_TYPES_POLICY) {\n if (typeof cfg.TRUSTED_TYPES_POLICY.createHTML !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createHTML\" hook.');\n }\n if (typeof cfg.TRUSTED_TYPES_POLICY.createScriptURL !== 'function') {\n throw typeErrorCreate('TRUSTED_TYPES_POLICY configuration option must provide a \"createScriptURL\" hook.');\n }\n // Overwrite existing TrustedTypes policy.\n trustedTypesPolicy = cfg.TRUSTED_TYPES_POLICY;\n // Sign local variables required by `sanitize`.\n emptyHTML = trustedTypesPolicy.createHTML('');\n } else {\n // Uninitialized policy, attempt to initialize the internal dompurify policy.\n if (trustedTypesPolicy === undefined) {\n trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, currentScript);\n }\n // If creating the internal policy succeeded sign internal variables.\n if (trustedTypesPolicy !== null && typeof emptyHTML === 'string') {\n emptyHTML = trustedTypesPolicy.createHTML('');\n }\n }\n // Prevent further manipulation of configuration.\n // Not available in IE8, Safari 5, etc.\n if (freeze) {\n freeze(cfg);\n }\n CONFIG = cfg;\n };\n /* Keep track of all possible SVG and MathML tags\n * so that we can perform the namespace checks\n * correctly. */\n const ALL_SVG_TAGS = addToSet({}, [...svg$1, ...svgFilters, ...svgDisallowed]);\n const ALL_MATHML_TAGS = addToSet({}, [...mathMl$1, ...mathMlDisallowed]);\n /**\n * @param element a DOM element whose namespace is being checked\n * @returns Return false if the element has a\n * namespace that a spec-compliant parser would never\n * return. Return true otherwise.\n */\n const _checkValidNamespace = function _checkValidNamespace(element) {\n let parent = getParentNode(element);\n // In JSDOM, if we're inside shadow DOM, then parentNode\n // can be null. We just simulate parent in this case.\n if (!parent || !parent.tagName) {\n parent = {\n namespaceURI: NAMESPACE,\n tagName: 'template'\n };\n }\n const tagName = stringToLowerCase(element.tagName);\n const parentTagName = stringToLowerCase(parent.tagName);\n if (!ALLOWED_NAMESPACES[element.namespaceURI]) {\n return false;\n }\n if (element.namespaceURI === SVG_NAMESPACE) {\n // The only way to switch from HTML namespace to SVG\n // is via <svg>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'svg';\n }\n // The only way to switch from MathML to SVG is via`\n // svg if parent is either <annotation-xml> or MathML\n // text integration points.\n if (parent.namespaceURI === MATHML_NAMESPACE) {\n return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);\n }\n // We only allow elements that are defined in SVG\n // spec. All others are disallowed in SVG namespace.\n return Boolean(ALL_SVG_TAGS[tagName]);\n }\n if (element.namespaceURI === MATHML_NAMESPACE) {\n // The only way to switch from HTML namespace to MathML\n // is via <math>. If it happens via any other tag, then\n // it should be killed.\n if (parent.namespaceURI === HTML_NAMESPACE) {\n return tagName === 'math';\n }\n // The only way to switch from SVG to MathML is via\n // <math> and HTML integration points\n if (parent.namespaceURI === SVG_NAMESPACE) {\n return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];\n }\n // We only allow elements that are defined in MathML\n // spec. All others are disallowed in MathML namespace.\n return Boolean(ALL_MATHML_TAGS[tagName]);\n }\n if (element.namespaceURI === HTML_NAMESPACE) {\n // The only way to switch from SVG to HTML is via\n // HTML integration points, and from MathML to HTML\n // is via MathML text integration points\n if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {\n return false;\n }\n // We disallow tags that are specific for MathML\n // or SVG and should never appear in HTML namespace\n return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);\n }\n // For XHTML and XML documents that support custom namespaces\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {\n return true;\n }\n // The code should never reach this place (this means\n // that the element somehow got namespace that is not\n // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).\n // Return false just in case.\n return false;\n };\n /**\n * _forceRemove\n *\n * @param node a DOM node\n */\n const _forceRemove = function _forceRemove(node) {\n arrayPush(DOMPurify.removed, {\n element: node\n });\n try {\n // eslint-disable-next-line unicorn/prefer-dom-node-remove\n getParentNode(node).removeChild(node);\n } catch (_) {\n remove(node);\n }\n };\n /**\n * _removeAttribute\n *\n * @param name an Attribute name\n * @param element a DOM node\n */\n const _removeAttribute = function _removeAttribute(name, element) {\n try {\n arrayPush(DOMPurify.removed, {\n attribute: element.getAttributeNode(name),\n from: element\n });\n } catch (_) {\n arrayPush(DOMPurify.removed, {\n attribute: null,\n from: element\n });\n }\n element.removeAttribute(name);\n // We void attribute values for unremovable \"is\" attributes\n if (name === 'is') {\n if (RETURN_DOM || RETURN_DOM_FRAGMENT) {\n try {\n _forceRemove(element);\n } catch (_) {}\n } else {\n try {\n element.setAttribute(name, '');\n } catch (_) {}\n }\n }\n };\n /**\n * _initDocument\n *\n * @param dirty - a string of dirty markup\n * @return a DOM, filled with the dirty markup\n */\n const _initDocument = function _initDocument(dirty) {\n /* Create a HTML document */\n let doc = null;\n let leadingWhitespace = null;\n if (FORCE_BODY) {\n dirty = '<remove></remove>' + dirty;\n } else {\n /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */\n const matches = stringMatch(dirty, /^[\\r\\n\\t ]+/);\n leadingWhitespace = matches && matches[0];\n }\n if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {\n // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)\n dirty = '<html xmlns=\"http://www.w3.org/1999/xhtml\"><head></head><body>' + dirty + '</body></html>';\n }\n const dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;\n /*\n * Use the DOMParser API by default, fallback later if needs be\n * DOMParser not work for svg when has multiple root element.\n */\n if (NAMESPACE === HTML_NAMESPACE) {\n try {\n doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);\n } catch (_) {}\n }\n /* Use createHTMLDocument in case DOMParser is not available */\n if (!doc || !doc.documentElement) {\n doc = implementation.createDocument(NAMESPACE, 'template', null);\n try {\n doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;\n } catch (_) {\n // Syntax error if dirtyPayload is invalid xml\n }\n }\n const body = doc.body || doc.documentElement;\n if (dirty && leadingWhitespace) {\n body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);\n }\n /* Work on whole document or just its body */\n if (NAMESPACE === HTML_NAMESPACE) {\n return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];\n }\n return WHOLE_DOCUMENT ? doc.documentElement : body;\n };\n /**\n * Creates a NodeIterator object that you can use to traverse filtered lists of nodes or elements in a document.\n *\n * @param root The root element or node to start traversing on.\n * @return The created NodeIterator\n */\n const _createNodeIterator = function _createNodeIterator(root) {\n return createNodeIterator.call(root.ownerDocument || root, root,\n // eslint-disable-next-line no-bitwise\n NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT | NodeFilter.SHOW_PROCESSING_INSTRUCTION | NodeFilter.SHOW_CDATA_SECTION, null);\n };\n /**\n * _isClobbered\n *\n * @param element element to check for clobbering attacks\n * @return true if clobbered, false if safe\n */\n const _isClobbered = function _isClobbered(element) {\n return element instanceof HTMLFormElement && (typeof element.nodeName !== 'string' || typeof element.textContent !== 'string' || typeof element.removeChild !== 'function' || !(element.attributes instanceof NamedNodeMap) || typeof element.removeAttribute !== 'function' || typeof element.setAttribute !== 'function' || typeof element.namespaceURI !== 'string' || typeof element.insertBefore !== 'function' || typeof element.hasChildNodes !== 'function');\n };\n /**\n * Checks whether the given object is a DOM node.\n *\n * @param value object to check whether it's a DOM node\n * @return true is object is a DOM node\n */\n const _isNode = function _isNode(value) {\n return typeof Node === 'function' && value instanceof Node;\n };\n function _executeHooks(hooks, currentNode, data) {\n arrayForEach(hooks, hook => {\n hook.call(DOMPurify, currentNode, data, CONFIG);\n });\n }\n /**\n * _sanitizeElements\n *\n * @protect nodeName\n * @protect textContent\n * @protect removeChild\n * @param currentNode to check for permission to exist\n * @return true if node was killed, false if left alive\n */\n const _sanitizeElements = function _sanitizeElements(currentNode) {\n let content = null;\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeElements, currentNode, null);\n /* Check if element is clobbered or can clobber */\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Now let's check the element's type and name */\n const tagName = transformCaseFunc(currentNode.nodeName);\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeElement, currentNode, {\n tagName,\n allowedTags: ALLOWED_TAGS\n });\n /* Detect mXSS attempts abusing namespace confusion */\n if (SAFE_FOR_XML && currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && regExpTest(/<[/\\w!]/g, currentNode.innerHTML) && regExpTest(/<[/\\w!]/g, currentNode.textContent)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any occurrence of processing instructions */\n if (currentNode.nodeType === NODE_TYPE.progressingInstruction) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove any kind of possibly harmful comments */\n if (SAFE_FOR_XML && currentNode.nodeType === NODE_TYPE.comment && regExpTest(/<[/\\w]/g, currentNode.data)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Remove element if anything forbids its presence */\n if (!(EXTRA_ELEMENT_HANDLING.tagCheck instanceof Function && EXTRA_ELEMENT_HANDLING.tagCheck(tagName)) && (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName])) {\n /* Check if we have a custom element to handle */\n if (!FORBID_TAGS[tagName] && _isBasicCustomElement(tagName)) {\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) {\n return false;\n }\n if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) {\n return false;\n }\n }\n /* Keep content except for bad-listed elements */\n if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {\n const parentNode = getParentNode(currentNode) || currentNode.parentNode;\n const childNodes = getChildNodes(currentNode) || currentNode.childNodes;\n if (childNodes && parentNode) {\n const childCount = childNodes.length;\n for (let i = childCount - 1; i >= 0; --i) {\n const childClone = cloneNode(childNodes[i], true);\n childClone.__removalCount = (currentNode.__removalCount || 0) + 1;\n parentNode.insertBefore(childClone, getNextSibling(currentNode));\n }\n }\n }\n _forceRemove(currentNode);\n return true;\n }\n /* Check whether element has a valid namespace */\n if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Make sure that older browsers don't get fallback-tag mXSS */\n if ((tagName === 'noscript' || tagName === 'noembed' || tagName === 'noframes') && regExpTest(/<\\/no(script|embed|frames)/i, currentNode.innerHTML)) {\n _forceRemove(currentNode);\n return true;\n }\n /* Sanitize element content to be template-safe */\n if (SAFE_FOR_TEMPLATES && currentNode.nodeType === NODE_TYPE.text) {\n /* Get the element's text content */\n content = currentNode.textContent;\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n content = stringReplace(content, expr, ' ');\n });\n if (currentNode.textContent !== content) {\n arrayPush(DOMPurify.removed, {\n element: currentNode.cloneNode()\n });\n currentNode.textContent = content;\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeElements, currentNode, null);\n return false;\n };\n /**\n * _isValidAttribute\n *\n * @param lcTag Lowercase tag name of containing element.\n * @param lcName Lowercase attribute name.\n * @param value Attribute value.\n * @return Returns true if `value` is valid, otherwise false.\n */\n // eslint-disable-next-line complexity\n const _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {\n /* Make sure attribute cannot clobber */\n if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {\n return false;\n }\n /* Allow valid data-* attributes: At least one character after \"-\"\n (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)\n XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)\n We don't need to check the value; it's always URI safe. */\n if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR, lcName)) ; else if (EXTRA_ELEMENT_HANDLING.attributeCheck instanceof Function && EXTRA_ELEMENT_HANDLING.attributeCheck(lcName, lcTag)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {\n if (\n // First condition does a very basic check if a) it's basically a valid custom element tagname AND\n // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck\n _isBasicCustomElement(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName, lcTag)) ||\n // Alternative, second condition checks if it's an `is`-attribute, AND\n // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck\n lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {\n return false;\n }\n /* Check value is safe. First, is attr inert? If so, is safe */\n } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA, stringReplace(value, ATTR_WHITESPACE, ''))) ; else if (value) {\n return false;\n } else ;\n return true;\n };\n /**\n * _isBasicCustomElement\n * checks if at least one dash is included in tagName, and it's not the first char\n * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name\n *\n * @param tagName name of the tag of the node to sanitize\n * @returns Returns true if the tag name meets the basic criteria for a custom element, otherwise false.\n */\n const _isBasicCustomElement = function _isBasicCustomElement(tagName) {\n return tagName !== 'annotation-xml' && stringMatch(tagName, CUSTOM_ELEMENT);\n };\n /**\n * _sanitizeAttributes\n *\n * @protect attributes\n * @protect nodeName\n * @protect removeAttribute\n * @protect setAttribute\n *\n * @param currentNode to sanitize\n */\n const _sanitizeAttributes = function _sanitizeAttributes(currentNode) {\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeAttributes, currentNode, null);\n const {\n attributes\n } = currentNode;\n /* Check if we have attributes; if not we might have a text node */\n if (!attributes || _isClobbered(currentNode)) {\n return;\n }\n const hookEvent = {\n attrName: '',\n attrValue: '',\n keepAttr: true,\n allowedAttributes: ALLOWED_ATTR,\n forceKeepAttr: undefined\n };\n let l = attributes.length;\n /* Go backwards over all attributes; safely remove bad ones */\n while (l--) {\n const attr = attributes[l];\n const {\n name,\n namespaceURI,\n value: attrValue\n } = attr;\n const lcName = transformCaseFunc(name);\n const initValue = attrValue;\n let value = name === 'value' ? initValue : stringTrim(initValue);\n /* Execute a hook if present */\n hookEvent.attrName = lcName;\n hookEvent.attrValue = value;\n hookEvent.keepAttr = true;\n hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set\n _executeHooks(hooks.uponSanitizeAttribute, currentNode, hookEvent);\n value = hookEvent.attrValue;\n /* Full DOM Clobbering protection via namespace isolation,\n * Prefix id and name attributes with `user-content-`\n */\n if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {\n // Remove the attribute with this value\n _removeAttribute(name, currentNode);\n // Prefix the value and later re-create the attribute with the sanitized value\n value = SANITIZE_NAMED_PROPS_PREFIX + value;\n }\n /* Work around a security issue with comments inside attributes */\n if (SAFE_FOR_XML && regExpTest(/((--!?|])>)|<\\/(style|title|textarea)/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Make sure we cannot easily use animated hrefs, even if animations are allowed */\n if (lcName === 'attributename' && stringMatch(value, 'href')) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (hookEvent.forceKeepAttr) {\n continue;\n }\n /* Did the hooks approve of the attribute? */\n if (!hookEvent.keepAttr) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Work around a security issue in jQuery 3.0 */\n if (!ALLOW_SELF_CLOSE_IN_ATTR && regExpTest(/\\/>/i, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Sanitize attribute content to be template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n value = stringReplace(value, expr, ' ');\n });\n }\n /* Is `value` valid for this attribute? */\n const lcTag = transformCaseFunc(currentNode.nodeName);\n if (!_isValidAttribute(lcTag, lcName, value)) {\n _removeAttribute(name, currentNode);\n continue;\n }\n /* Handle attributes that require Trusted Types */\n if (trustedTypesPolicy && typeof trustedTypes === 'object' && typeof trustedTypes.getAttributeType === 'function') {\n if (namespaceURI) ; else {\n switch (trustedTypes.getAttributeType(lcTag, lcName)) {\n case 'TrustedHTML':\n {\n value = trustedTypesPolicy.createHTML(value);\n break;\n }\n case 'TrustedScriptURL':\n {\n value = trustedTypesPolicy.createScriptURL(value);\n break;\n }\n }\n }\n }\n /* Handle invalid data-* attribute set by try-catching it */\n if (value !== initValue) {\n try {\n if (namespaceURI) {\n currentNode.setAttributeNS(namespaceURI, name, value);\n } else {\n /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. \"x-schema\". */\n currentNode.setAttribute(name, value);\n }\n if (_isClobbered(currentNode)) {\n _forceRemove(currentNode);\n } else {\n arrayPop(DOMPurify.removed);\n }\n } catch (_) {\n _removeAttribute(name, currentNode);\n }\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeAttributes, currentNode, null);\n };\n /**\n * _sanitizeShadowDOM\n *\n * @param fragment to iterate over recursively\n */\n const _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {\n let shadowNode = null;\n const shadowIterator = _createNodeIterator(fragment);\n /* Execute a hook if present */\n _executeHooks(hooks.beforeSanitizeShadowDOM, fragment, null);\n while (shadowNode = shadowIterator.nextNode()) {\n /* Execute a hook if present */\n _executeHooks(hooks.uponSanitizeShadowNode, shadowNode, null);\n /* Sanitize tags and elements */\n _sanitizeElements(shadowNode);\n /* Check attributes next */\n _sanitizeAttributes(shadowNode);\n /* Deep shadow DOM detected */\n if (shadowNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(shadowNode.content);\n }\n }\n /* Execute a hook if present */\n _executeHooks(hooks.afterSanitizeShadowDOM, fragment, null);\n };\n // eslint-disable-next-line complexity\n DOMPurify.sanitize = function (dirty) {\n let cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n let body = null;\n let importedNode = null;\n let currentNode = null;\n let returnNode = null;\n /* Make sure we have a string to sanitize.\n DO NOT return early, as this will return the wrong type if\n the user has requested a DOM object rather than a string */\n IS_EMPTY_INPUT = !dirty;\n if (IS_EMPTY_INPUT) {\n dirty = '<!-->';\n }\n /* Stringify, in case dirty is an object */\n if (typeof dirty !== 'string' && !_isNode(dirty)) {\n if (typeof dirty.toString === 'function') {\n dirty = dirty.toString();\n if (typeof dirty !== 'string') {\n throw typeErrorCreate('dirty is not a string, aborting');\n }\n } else {\n throw typeErrorCreate('toString is not a function');\n }\n }\n /* Return dirty HTML if DOMPurify cannot run */\n if (!DOMPurify.isSupported) {\n return dirty;\n }\n /* Assign config vars */\n if (!SET_CONFIG) {\n _parseConfig(cfg);\n }\n /* Clean up removed elements */\n DOMPurify.removed = [];\n /* Check if dirty is correctly typed for IN_PLACE */\n if (typeof dirty === 'string') {\n IN_PLACE = false;\n }\n if (IN_PLACE) {\n /* Do some early pre-sanitization to avoid unsafe root nodes */\n if (dirty.nodeName) {\n const tagName = transformCaseFunc(dirty.nodeName);\n if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {\n throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');\n }\n }\n } else if (dirty instanceof Node) {\n /* If dirty is a DOM element, append to an empty document to avoid\n elements being stripped by the parser */\n body = _initDocument('<!---->');\n importedNode = body.ownerDocument.importNode(dirty, true);\n if (importedNode.nodeType === NODE_TYPE.element && importedNode.nodeName === 'BODY') {\n /* Node is already a body, use as is */\n body = importedNode;\n } else if (importedNode.nodeName === 'HTML') {\n body = importedNode;\n } else {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n body.appendChild(importedNode);\n }\n } else {\n /* Exit directly if we have nothing to do */\n if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT &&\n // eslint-disable-next-line unicorn/prefer-includes\n dirty.indexOf('<') === -1) {\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;\n }\n /* Initialize the document to work on */\n body = _initDocument(dirty);\n /* Check we have a DOM node from the data */\n if (!body) {\n return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';\n }\n }\n /* Remove first element node (ours) if FORCE_BODY is set */\n if (body && FORCE_BODY) {\n _forceRemove(body.firstChild);\n }\n /* Get node iterator */\n const nodeIterator = _createNodeIterator(IN_PLACE ? dirty : body);\n /* Now start iterating over the created document */\n while (currentNode = nodeIterator.nextNode()) {\n /* Sanitize tags and elements */\n _sanitizeElements(currentNode);\n /* Check attributes next */\n _sanitizeAttributes(currentNode);\n /* Shadow DOM detected, sanitize it */\n if (currentNode.content instanceof DocumentFragment) {\n _sanitizeShadowDOM(currentNode.content);\n }\n }\n /* If we sanitized `dirty` in-place, return it. */\n if (IN_PLACE) {\n return dirty;\n }\n /* Return sanitized string or DOM */\n if (RETURN_DOM) {\n if (RETURN_DOM_FRAGMENT) {\n returnNode = createDocumentFragment.call(body.ownerDocument);\n while (body.firstChild) {\n // eslint-disable-next-line unicorn/prefer-dom-node-append\n returnNode.appendChild(body.firstChild);\n }\n } else {\n returnNode = body;\n }\n if (ALLOWED_ATTR.shadowroot || ALLOWED_ATTR.shadowrootmode) {\n /*\n AdoptNode() is not used because internal state is not reset\n (e.g. the past names map of a HTMLFormElement), this is safe\n in theory but we would rather not risk another attack vector.\n The state that is cloned by importNode() is explicitly defined\n by the specs.\n */\n returnNode = importNode.call(originalDocument, returnNode, true);\n }\n return returnNode;\n }\n let serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;\n /* Serialize doctype if allowed */\n if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {\n serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\\n' + serializedHTML;\n }\n /* Sanitize final string template-safe */\n if (SAFE_FOR_TEMPLATES) {\n arrayForEach([MUSTACHE_EXPR, ERB_EXPR, TMPLIT_EXPR], expr => {\n serializedHTML = stringReplace(serializedHTML, expr, ' ');\n });\n }\n return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;\n };\n DOMPurify.setConfig = function () {\n let cfg = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n _parseConfig(cfg);\n SET_CONFIG = true;\n };\n DOMPurify.clearConfig = function () {\n CONFIG = null;\n SET_CONFIG = false;\n };\n DOMPurify.isValidAttribute = function (tag, attr, value) {\n /* Initialize shared config vars if necessary. */\n if (!CONFIG) {\n _parseConfig({});\n }\n const lcTag = transformCaseFunc(tag);\n const lcName = transformCaseFunc(attr);\n return _isValidAttribute(lcTag, lcName, value);\n };\n DOMPurify.addHook = function (entryPoint, hookFunction) {\n if (typeof hookFunction !== 'function') {\n return;\n }\n arrayPush(hooks[entryPoint], hookFunction);\n };\n DOMPurify.removeHook = function (entryPoint, hookFunction) {\n if (hookFunction !== undefined) {\n const index = arrayLastIndexOf(hooks[entryPoint], hookFunction);\n return index === -1 ? undefined : arraySplice(hooks[entryPoint], index, 1)[0];\n }\n return arrayPop(hooks[entryPoint]);\n };\n DOMPurify.removeHooks = function (entryPoint) {\n hooks[entryPoint] = [];\n };\n DOMPurify.removeAllHooks = function () {\n hooks = _createHooksMap();\n };\n return DOMPurify;\n}\nvar purify = createDOMPurify();\n\nexport { purify as default };\n//# sourceMappingURL=purify.es.mjs.map\n","/**\r\n * Markdown renderer utility using marked + DOMPurify\r\n * Provides secure markdown-to-HTML rendering for chat messages\r\n */\r\n\r\nimport { marked } from 'marked';\r\nimport DOMPurify from 'dompurify';\r\n\r\n// Configure marked options\r\nmarked.setOptions({\r\n gfm: true, // GitHub Flavored Markdown\r\n breaks: true, // Convert \\n to <br>\r\n});\r\n\r\n// Custom renderer for enhanced styling\r\nconst renderer = new marked.Renderer();\r\n\r\n// Headings with proper styling classes\r\nrenderer.heading = (text: string, level: number): string => {\r\n const sizes: Record<number, string> = {\r\n 1: 'termix-prose-h1',\r\n 2: 'termix-prose-h2',\r\n 3: 'termix-prose-h3',\r\n 4: 'termix-prose-h4',\r\n 5: 'termix-prose-h5',\r\n 6: 'termix-prose-h6',\r\n };\r\n return `<h${level} class=\"${sizes[level] || ''}\">${text}</h${level}>`;\r\n};\r\n\r\n// Paragraphs\r\nrenderer.paragraph = (text: string): string => {\r\n return `<p class=\"termix-prose-p\">${text}</p>`;\r\n};\r\n\r\n// Lists\r\nrenderer.list = (body: string, ordered: boolean): string => {\r\n const tag = ordered ? 'ol' : 'ul';\r\n const className = ordered ? 'termix-prose-ol' : 'termix-prose-ul';\r\n return `<${tag} class=\"${className}\">${body}</${tag}>`;\r\n};\r\n\r\nrenderer.listitem = (text: string): string => {\r\n return `<li class=\"termix-prose-li\">${text}</li>`;\r\n};\r\n\r\n// Code blocks\r\nrenderer.code = (code: string, language: string | undefined): string => {\r\n const lang = language || '';\r\n const langLabel = lang ? `<div class=\"termix-prose-code-lang\">${lang}</div>` : '';\r\n return `<div class=\"termix-prose-code-block\">${langLabel}<pre class=\"termix-prose-pre\"><code class=\"termix-prose-code language-${lang}\">${escapeHtml(code)}</code></pre></div>`;\r\n};\r\n\r\n// Inline code\r\nrenderer.codespan = (code: string): string => {\r\n return `<code class=\"termix-prose-code-inline\">${escapeHtml(code)}</code>`;\r\n};\r\n\r\n// Blockquotes\r\nrenderer.blockquote = (quote: string): string => {\r\n return `<blockquote class=\"termix-prose-blockquote\">${quote}</blockquote>`;\r\n};\r\n\r\n// Links\r\nrenderer.link = (href: string, title: string | null, text: string): string => {\r\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\r\n return `<a href=\"${escapeHtml(href)}\" target=\"_blank\" rel=\"noopener noreferrer\" class=\"termix-prose-link\"${titleAttr}>${text}</a>`;\r\n};\r\n\r\n// Images\r\nrenderer.image = (href: string, title: string | null, text: string): string => {\r\n const titleAttr = title ? ` title=\"${escapeHtml(title)}\"` : '';\r\n const altAttr = text ? ` alt=\"${escapeHtml(text)}\"` : '';\r\n return `<img src=\"${escapeHtml(href)}\" loading=\"lazy\" class=\"termix-prose-img\"${altAttr}${titleAttr} />`;\r\n};\r\n\r\n// Tables\r\nrenderer.table = (header: string, body: string): string => {\r\n return `<div class=\"termix-prose-table-wrapper\"><table class=\"termix-prose-table\"><thead class=\"termix-prose-thead\">${header}</thead><tbody class=\"termix-prose-tbody\">${body}</tbody></table></div>`;\r\n};\r\n\r\nrenderer.tablerow = (content: string): string => {\r\n return `<tr class=\"termix-prose-tr\">${content}</tr>`;\r\n};\r\n\r\nrenderer.tablecell = (content: string, flags: { header: boolean; align: string | null }): string => {\r\n const tag = flags.header ? 'th' : 'td';\r\n const className = flags.header ? 'termix-prose-th' : 'termix-prose-td';\r\n const alignStyle = flags.align ? ` style=\"text-align: ${flags.align}\"` : '';\r\n return `<${tag} class=\"${className}\"${alignStyle}>${content}</${tag}>`;\r\n};\r\n\r\n// Horizontal rule\r\nrenderer.hr = (): string => {\r\n return `<hr class=\"termix-prose-hr\" />`;\r\n};\r\n\r\n// Strong/Bold\r\nrenderer.strong = (text: string): string => {\r\n return `<strong class=\"termix-prose-strong\">${text}</strong>`;\r\n};\r\n\r\n// Emphasis/Italic\r\nrenderer.em = (text: string): string => {\r\n return `<em class=\"termix-prose-em\">${text}</em>`;\r\n};\r\n\r\n// Strikethrough\r\nrenderer.del = (text: string): string => {\r\n return `<del class=\"termix-prose-del\">${text}</del>`;\r\n};\r\n\r\n// Apply custom renderer\r\nmarked.use({ renderer });\r\n\r\n// Helper to escape HTML special characters\r\nfunction escapeHtml(text: string): string {\r\n const map: Record<string, string> = {\r\n '&': '&amp;',\r\n '<': '&lt;',\r\n '>': '&gt;',\r\n '\"': '&quot;',\r\n \"'\": '&#39;',\r\n };\r\n return text.replace(/[&<>\"']/g, (char) => map[char] || char);\r\n}\r\n\r\n// Configure DOMPurify\r\nconst purifyConfig = {\r\n ALLOWED_TAGS: [\r\n 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',\r\n 'p', 'br', 'hr',\r\n 'ul', 'ol', 'li',\r\n 'blockquote', 'pre', 'code',\r\n 'table', 'thead', 'tbody', 'tr', 'th', 'td',\r\n 'a', 'img',\r\n 'strong', 'b', 'em', 'i', 'u', 'del', 's', 'strike',\r\n 'div', 'span',\r\n ],\r\n ALLOWED_ATTR: [\r\n 'href', 'target', 'rel', 'title', 'alt', 'src', 'loading',\r\n 'class', 'style',\r\n ],\r\n ALLOW_DATA_ATTR: false,\r\n};\r\n\r\n/**\r\n * Renders markdown string to sanitized HTML\r\n * @param markdown - The markdown string to render\r\n * @returns Sanitized HTML string\r\n */\r\nexport function renderMarkdown(markdown: string): string {\r\n if (!markdown) return '';\r\n\r\n try {\r\n // Parse markdown to HTML\r\n const rawHtml = marked.parse(markdown) as string;\r\n\r\n // Sanitize the HTML to prevent XSS\r\n const sanitizedHtml = DOMPurify.sanitize(rawHtml, purifyConfig) as string;\r\n\r\n return sanitizedHtml;\r\n } catch (error) {\r\n console.error('[TermiX] Markdown rendering error:', error);\r\n // Fallback to escaped plain text\r\n return `<p class=\"termix-prose-p\">${escapeHtml(markdown)}</p>`;\r\n }\r\n}\r\n\r\n/**\r\n * Processes message content for display\r\n * Removes function call JSON blocks and renders remaining content as markdown\r\n * @param content - The message content\r\n * @param role - The message role (user, assistant, system)\r\n * @returns Processed HTML string\r\n */\r\nexport function processMessageContent(content: string, role: string): string {\r\n if (!content) return '';\r\n\r\n // For user messages, just escape and wrap\r\n if (role === 'user' || role === 'system') {\r\n return `<p class=\"termix-prose-p whitespace-pre-wrap\">${escapeHtml(content)}</p>`;\r\n }\r\n\r\n // For assistant messages, process and render as markdown\r\n let processed = content;\r\n\r\n // Remove JSON code blocks that contain function_call\r\n const jsonBlockRegex = /```json\\s*\\n?([\\s\\S]*?)\\n?```/g;\r\n let match;\r\n\r\n while ((match = jsonBlockRegex.exec(content)) !== null) {\r\n try {\r\n const jsonContent = match[1].trim();\r\n const parsed = JSON.parse(jsonContent);\r\n\r\n // If this JSON block contains a function_call, remove it from display\r\n if (parsed.function_call && parsed.function_call.name) {\r\n processed = processed.replace(match[0], '').trim();\r\n }\r\n } catch {\r\n // Keep non-JSON content\r\n }\r\n }\r\n\r\n // Clean up any excessive newlines\r\n processed = processed.replace(/\\n\\s*\\n\\s*\\n/g, '\\n\\n').trim();\r\n\r\n // Render as markdown\r\n return renderMarkdown(processed);\r\n}\r\n\r\nexport { escapeHtml };\r\n","/**\r\n * Toast Composable\r\n *\r\n * Simple toast notification composable - can be replaced with your preferred toast library\r\n */\r\n\r\nexport interface ToastOptions {\r\n title: string;\r\n description?: string;\r\n variant?: 'default' | 'destructive';\r\n}\r\n\r\nexport function useToast() {\r\n const toast = (options: ToastOptions) => {\r\n // Simple console implementation - replace with your toast library\r\n console.log(`Toast: ${options.title}`, options.description);\r\n\r\n // For production, you might want to use vue-toastification or another library\r\n // Example with alert (not recommended for production):\r\n if (options.variant === 'destructive') {\r\n alert(`Error: ${options.title}\\n${options.description || ''}`);\r\n } else {\r\n console.log(`${options.title}: ${options.description || ''}`);\r\n }\r\n };\r\n\r\n return { toast };\r\n}\r\n","/*! *****************************************************************************\nCopyright (C) Microsoft. All rights reserved.\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\nthis file except in compliance with the License. You may obtain a copy of the\nLicense at http://www.apache.org/licenses/LICENSE-2.0\n\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\nMERCHANTABLITY OR NON-INFRINGEMENT.\n\nSee the Apache Version 2.0 License for specific language governing permissions\nand limitations under the License.\n***************************************************************************** */\nvar Reflect;\n(function (Reflect) {\n // Metadata Proposal\n // https://rbuckton.github.io/reflect-metadata/\n (function (factory) {\n var root = typeof globalThis === \"object\" ? globalThis :\n typeof global === \"object\" ? global :\n typeof self === \"object\" ? self :\n typeof this === \"object\" ? this :\n sloppyModeThis();\n var exporter = makeExporter(Reflect);\n if (typeof root.Reflect !== \"undefined\") {\n exporter = makeExporter(root.Reflect, exporter);\n }\n factory(exporter, root);\n if (typeof root.Reflect === \"undefined\") {\n root.Reflect = Reflect;\n }\n function makeExporter(target, previous) {\n return function (key, value) {\n Object.defineProperty(target, key, { configurable: true, writable: true, value: value });\n if (previous)\n previous(key, value);\n };\n }\n function functionThis() {\n try {\n return Function(\"return this;\")();\n }\n catch (_) { }\n }\n function indirectEvalThis() {\n try {\n return (void 0, eval)(\"(function() { return this; })()\");\n }\n catch (_) { }\n }\n function sloppyModeThis() {\n return functionThis() || indirectEvalThis();\n }\n })(function (exporter, root) {\n var hasOwn = Object.prototype.hasOwnProperty;\n // feature test for Symbol support\n var supportsSymbol = typeof Symbol === \"function\";\n var toPrimitiveSymbol = supportsSymbol && typeof Symbol.toPrimitive !== \"undefined\" ? Symbol.toPrimitive : \"@@toPrimitive\";\n var iteratorSymbol = supportsSymbol && typeof Symbol.iterator !== \"undefined\" ? Symbol.iterator : \"@@iterator\";\n var supportsCreate = typeof Object.create === \"function\"; // feature test for Object.create support\n var supportsProto = { __proto__: [] } instanceof Array; // feature test for __proto__ support\n var downLevel = !supportsCreate && !supportsProto;\n var HashMap = {\n // create an object in dictionary mode (a.k.a. \"slow\" mode in v8)\n create: supportsCreate\n ? function () { return MakeDictionary(Object.create(null)); }\n : supportsProto\n ? function () { return MakeDictionary({ __proto__: null }); }\n : function () { return MakeDictionary({}); },\n has: downLevel\n ? function (map, key) { return hasOwn.call(map, key); }\n : function (map, key) { return key in map; },\n get: downLevel\n ? function (map, key) { return hasOwn.call(map, key) ? map[key] : undefined; }\n : function (map, key) { return map[key]; },\n };\n // Load global or shim versions of Map, Set, and WeakMap\n var functionPrototype = Object.getPrototypeOf(Function);\n var _Map = typeof Map === \"function\" && typeof Map.prototype.entries === \"function\" ? Map : CreateMapPolyfill();\n var _Set = typeof Set === \"function\" && typeof Set.prototype.entries === \"function\" ? Set : CreateSetPolyfill();\n var _WeakMap = typeof WeakMap === \"function\" ? WeakMap : CreateWeakMapPolyfill();\n var registrySymbol = supportsSymbol ? Symbol.for(\"@reflect-metadata:registry\") : undefined;\n var metadataRegistry = GetOrCreateMetadataRegistry();\n var metadataProvider = CreateMetadataProvider(metadataRegistry);\n /**\n * Applies a set of decorators to a property of a target object.\n * @param decorators An array of decorators.\n * @param target The target object.\n * @param propertyKey (Optional) The property key to decorate.\n * @param attributes (Optional) The property descriptor for the target key.\n * @remarks Decorators are applied in reverse order.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Example = Reflect.decorate(decoratorsArray, Example);\n *\n * // property (on constructor)\n * Reflect.decorate(decoratorsArray, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.decorate(decoratorsArray, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Object.defineProperty(Example, \"staticMethod\",\n * Reflect.decorate(decoratorsArray, Example, \"staticMethod\",\n * Object.getOwnPropertyDescriptor(Example, \"staticMethod\")));\n *\n * // method (on prototype)\n * Object.defineProperty(Example.prototype, \"method\",\n * Reflect.decorate(decoratorsArray, Example.prototype, \"method\",\n * Object.getOwnPropertyDescriptor(Example.prototype, \"method\")));\n *\n */\n function decorate(decorators, target, propertyKey, attributes) {\n if (!IsUndefined(propertyKey)) {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsObject(target))\n throw new TypeError();\n if (!IsObject(attributes) && !IsUndefined(attributes) && !IsNull(attributes))\n throw new TypeError();\n if (IsNull(attributes))\n attributes = undefined;\n propertyKey = ToPropertyKey(propertyKey);\n return DecorateProperty(decorators, target, propertyKey, attributes);\n }\n else {\n if (!IsArray(decorators))\n throw new TypeError();\n if (!IsConstructor(target))\n throw new TypeError();\n return DecorateConstructor(decorators, target);\n }\n }\n exporter(\"decorate\", decorate);\n // 4.1.2 Reflect.metadata(metadataKey, metadataValue)\n // https://rbuckton.github.io/reflect-metadata/#reflect.metadata\n /**\n * A default metadata decorator factory that can be used on a class, class member, or parameter.\n * @param metadataKey The key for the metadata entry.\n * @param metadataValue The value for the metadata entry.\n * @returns A decorator function.\n * @remarks\n * If `metadataKey` is already defined for the target and target key, the\n * metadataValue for that key will be overwritten.\n * @example\n *\n * // constructor\n * @Reflect.metadata(key, value)\n * class Example {\n * }\n *\n * // property (on constructor, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticProperty;\n * }\n *\n * // property (on prototype, TypeScript only)\n * class Example {\n * @Reflect.metadata(key, value)\n * property;\n * }\n *\n * // method (on constructor)\n * class Example {\n * @Reflect.metadata(key, value)\n * static staticMethod() { }\n * }\n *\n * // method (on prototype)\n * class Example {\n * @Reflect.metadata(key, value)\n * method() { }\n * }\n *\n */\n function metadata(metadataKey, metadataValue) {\n function decorator(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey) && !IsPropertyKey(propertyKey))\n throw new TypeError();\n OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n return decorator;\n }\n exporter(\"metadata\", metadata);\n /**\n * Define a unique metadata entry on the target.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param metadataValue A value that contains attached metadata.\n * @param target The target object on which to define metadata.\n * @param propertyKey (Optional) The property key for the target.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * Reflect.defineMetadata(\"custom:annotation\", options, Example);\n *\n * // property (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticProperty\");\n *\n * // property (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"property\");\n *\n * // method (on constructor)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example, \"staticMethod\");\n *\n * // method (on prototype)\n * Reflect.defineMetadata(\"custom:annotation\", options, Example.prototype, \"method\");\n *\n * // decorator factory as metadata-producing annotation.\n * function MyAnnotation(options): Decorator {\n * return (target, key?) => Reflect.defineMetadata(\"custom:annotation\", options, target, key);\n * }\n *\n */\n function defineMetadata(metadataKey, metadataValue, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryDefineOwnMetadata(metadataKey, metadataValue, target, propertyKey);\n }\n exporter(\"defineMetadata\", defineMetadata);\n /**\n * Gets a value indicating whether the target object or its prototype chain has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object or its prototype chain; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasMetadata\", hasMetadata);\n /**\n * Gets a value indicating whether the target object has the provided metadata key defined.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata key was defined on the target object; otherwise, `false`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.hasOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function hasOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryHasOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"hasOwnMetadata\", hasOwnMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object or its prototype chain.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getMetadata\", getMetadata);\n /**\n * Gets the metadata value for the provided metadata key on the target object.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns The metadata value for the metadata key if found; otherwise, `undefined`.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function getOwnMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryGetOwnMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"getOwnMetadata\", getOwnMetadata);\n /**\n * Gets the metadata keys defined on the target object or its prototype chain.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryMetadataKeys(target, propertyKey);\n }\n exporter(\"getMetadataKeys\", getMetadataKeys);\n /**\n * Gets the unique metadata keys defined on the target object.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns An array of unique metadata keys.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.getOwnMetadataKeys(Example);\n *\n * // property (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.getOwnMetadataKeys(Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.getOwnMetadataKeys(Example.prototype, \"method\");\n *\n */\n function getOwnMetadataKeys(target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n return OrdinaryOwnMetadataKeys(target, propertyKey);\n }\n exporter(\"getOwnMetadataKeys\", getOwnMetadataKeys);\n /**\n * Deletes the metadata entry from the target object with the provided key.\n * @param metadataKey A key used to store and retrieve metadata.\n * @param target The target object on which the metadata is defined.\n * @param propertyKey (Optional) The property key for the target.\n * @returns `true` if the metadata entry was found and deleted; otherwise, false.\n * @example\n *\n * class Example {\n * // property declarations are not part of ES6, though they are valid in TypeScript:\n * // static staticProperty;\n * // property;\n *\n * constructor(p) { }\n * static staticMethod(p) { }\n * method(p) { }\n * }\n *\n * // constructor\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example);\n *\n * // property (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticProperty\");\n *\n * // property (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"property\");\n *\n * // method (on constructor)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example, \"staticMethod\");\n *\n * // method (on prototype)\n * result = Reflect.deleteMetadata(\"custom:annotation\", Example.prototype, \"method\");\n *\n */\n function deleteMetadata(metadataKey, target, propertyKey) {\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n if (!IsObject(target))\n throw new TypeError();\n if (!IsUndefined(propertyKey))\n propertyKey = ToPropertyKey(propertyKey);\n var provider = GetMetadataProvider(target, propertyKey, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return provider.OrdinaryDeleteMetadata(metadataKey, target, propertyKey);\n }\n exporter(\"deleteMetadata\", deleteMetadata);\n function DecorateConstructor(decorators, target) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsConstructor(decorated))\n throw new TypeError();\n target = decorated;\n }\n }\n return target;\n }\n function DecorateProperty(decorators, target, propertyKey, descriptor) {\n for (var i = decorators.length - 1; i >= 0; --i) {\n var decorator = decorators[i];\n var decorated = decorator(target, propertyKey, descriptor);\n if (!IsUndefined(decorated) && !IsNull(decorated)) {\n if (!IsObject(decorated))\n throw new TypeError();\n descriptor = decorated;\n }\n }\n return descriptor;\n }\n // 3.1.1.1 OrdinaryHasMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasmetadata\n function OrdinaryHasMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return true;\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryHasMetadata(MetadataKey, parent, P);\n return false;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return false;\n return ToBoolean(provider.OrdinaryHasOwnMetadata(MetadataKey, O, P));\n }\n // 3.1.3.1 OrdinaryGetMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetmetadata\n function OrdinaryGetMetadata(MetadataKey, O, P) {\n var hasOwn = OrdinaryHasOwnMetadata(MetadataKey, O, P);\n if (hasOwn)\n return OrdinaryGetOwnMetadata(MetadataKey, O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (!IsNull(parent))\n return OrdinaryGetMetadata(MetadataKey, parent, P);\n return undefined;\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ false);\n if (IsUndefined(provider))\n return;\n return provider.OrdinaryGetOwnMetadata(MetadataKey, O, P);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var provider = GetMetadataProvider(O, P, /*Create*/ true);\n provider.OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P);\n }\n // 3.1.6.1 OrdinaryMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarymetadatakeys\n function OrdinaryMetadataKeys(O, P) {\n var ownKeys = OrdinaryOwnMetadataKeys(O, P);\n var parent = OrdinaryGetPrototypeOf(O);\n if (parent === null)\n return ownKeys;\n var parentKeys = OrdinaryMetadataKeys(parent, P);\n if (parentKeys.length <= 0)\n return ownKeys;\n if (ownKeys.length <= 0)\n return parentKeys;\n var set = new _Set();\n var keys = [];\n for (var _i = 0, ownKeys_1 = ownKeys; _i < ownKeys_1.length; _i++) {\n var key = ownKeys_1[_i];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n for (var _a = 0, parentKeys_1 = parentKeys; _a < parentKeys_1.length; _a++) {\n var key = parentKeys_1[_a];\n var hasKey = set.has(key);\n if (!hasKey) {\n set.add(key);\n keys.push(key);\n }\n }\n return keys;\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var provider = GetMetadataProvider(O, P, /*create*/ false);\n if (!provider) {\n return [];\n }\n return provider.OrdinaryOwnMetadataKeys(O, P);\n }\n // 6 ECMAScript Data Types and Values\n // https://tc39.github.io/ecma262/#sec-ecmascript-data-types-and-values\n function Type(x) {\n if (x === null)\n return 1 /* Null */;\n switch (typeof x) {\n case \"undefined\": return 0 /* Undefined */;\n case \"boolean\": return 2 /* Boolean */;\n case \"string\": return 3 /* String */;\n case \"symbol\": return 4 /* Symbol */;\n case \"number\": return 5 /* Number */;\n case \"object\": return x === null ? 1 /* Null */ : 6 /* Object */;\n default: return 6 /* Object */;\n }\n }\n // 6.1.1 The Undefined Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-undefined-type\n function IsUndefined(x) {\n return x === undefined;\n }\n // 6.1.2 The Null Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-null-type\n function IsNull(x) {\n return x === null;\n }\n // 6.1.5 The Symbol Type\n // https://tc39.github.io/ecma262/#sec-ecmascript-language-types-symbol-type\n function IsSymbol(x) {\n return typeof x === \"symbol\";\n }\n // 6.1.7 The Object Type\n // https://tc39.github.io/ecma262/#sec-object-type\n function IsObject(x) {\n return typeof x === \"object\" ? x !== null : typeof x === \"function\";\n }\n // 7.1 Type Conversion\n // https://tc39.github.io/ecma262/#sec-type-conversion\n // 7.1.1 ToPrimitive(input [, PreferredType])\n // https://tc39.github.io/ecma262/#sec-toprimitive\n function ToPrimitive(input, PreferredType) {\n switch (Type(input)) {\n case 0 /* Undefined */: return input;\n case 1 /* Null */: return input;\n case 2 /* Boolean */: return input;\n case 3 /* String */: return input;\n case 4 /* Symbol */: return input;\n case 5 /* Number */: return input;\n }\n var hint = PreferredType === 3 /* String */ ? \"string\" : PreferredType === 5 /* Number */ ? \"number\" : \"default\";\n var exoticToPrim = GetMethod(input, toPrimitiveSymbol);\n if (exoticToPrim !== undefined) {\n var result = exoticToPrim.call(input, hint);\n if (IsObject(result))\n throw new TypeError();\n return result;\n }\n return OrdinaryToPrimitive(input, hint === \"default\" ? \"number\" : hint);\n }\n // 7.1.1.1 OrdinaryToPrimitive(O, hint)\n // https://tc39.github.io/ecma262/#sec-ordinarytoprimitive\n function OrdinaryToPrimitive(O, hint) {\n if (hint === \"string\") {\n var toString_1 = O.toString;\n if (IsCallable(toString_1)) {\n var result = toString_1.call(O);\n if (!IsObject(result))\n return result;\n }\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n else {\n var valueOf = O.valueOf;\n if (IsCallable(valueOf)) {\n var result = valueOf.call(O);\n if (!IsObject(result))\n return result;\n }\n var toString_2 = O.toString;\n if (IsCallable(toString_2)) {\n var result = toString_2.call(O);\n if (!IsObject(result))\n return result;\n }\n }\n throw new TypeError();\n }\n // 7.1.2 ToBoolean(argument)\n // https://tc39.github.io/ecma262/2016/#sec-toboolean\n function ToBoolean(argument) {\n return !!argument;\n }\n // 7.1.12 ToString(argument)\n // https://tc39.github.io/ecma262/#sec-tostring\n function ToString(argument) {\n return \"\" + argument;\n }\n // 7.1.14 ToPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-topropertykey\n function ToPropertyKey(argument) {\n var key = ToPrimitive(argument, 3 /* String */);\n if (IsSymbol(key))\n return key;\n return ToString(key);\n }\n // 7.2 Testing and Comparison Operations\n // https://tc39.github.io/ecma262/#sec-testing-and-comparison-operations\n // 7.2.2 IsArray(argument)\n // https://tc39.github.io/ecma262/#sec-isarray\n function IsArray(argument) {\n return Array.isArray\n ? Array.isArray(argument)\n : argument instanceof Object\n ? argument instanceof Array\n : Object.prototype.toString.call(argument) === \"[object Array]\";\n }\n // 7.2.3 IsCallable(argument)\n // https://tc39.github.io/ecma262/#sec-iscallable\n function IsCallable(argument) {\n // NOTE: This is an approximation as we cannot check for [[Call]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.4 IsConstructor(argument)\n // https://tc39.github.io/ecma262/#sec-isconstructor\n function IsConstructor(argument) {\n // NOTE: This is an approximation as we cannot check for [[Construct]] internal method.\n return typeof argument === \"function\";\n }\n // 7.2.7 IsPropertyKey(argument)\n // https://tc39.github.io/ecma262/#sec-ispropertykey\n function IsPropertyKey(argument) {\n switch (Type(argument)) {\n case 3 /* String */: return true;\n case 4 /* Symbol */: return true;\n default: return false;\n }\n }\n function SameValueZero(x, y) {\n return x === y || x !== x && y !== y;\n }\n // 7.3 Operations on Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-objects\n // 7.3.9 GetMethod(V, P)\n // https://tc39.github.io/ecma262/#sec-getmethod\n function GetMethod(V, P) {\n var func = V[P];\n if (func === undefined || func === null)\n return undefined;\n if (!IsCallable(func))\n throw new TypeError();\n return func;\n }\n // 7.4 Operations on Iterator Objects\n // https://tc39.github.io/ecma262/#sec-operations-on-iterator-objects\n function GetIterator(obj) {\n var method = GetMethod(obj, iteratorSymbol);\n if (!IsCallable(method))\n throw new TypeError(); // from Call\n var iterator = method.call(obj);\n if (!IsObject(iterator))\n throw new TypeError();\n return iterator;\n }\n // 7.4.4 IteratorValue(iterResult)\n // https://tc39.github.io/ecma262/2016/#sec-iteratorvalue\n function IteratorValue(iterResult) {\n return iterResult.value;\n }\n // 7.4.5 IteratorStep(iterator)\n // https://tc39.github.io/ecma262/#sec-iteratorstep\n function IteratorStep(iterator) {\n var result = iterator.next();\n return result.done ? false : result;\n }\n // 7.4.6 IteratorClose(iterator, completion)\n // https://tc39.github.io/ecma262/#sec-iteratorclose\n function IteratorClose(iterator) {\n var f = iterator[\"return\"];\n if (f)\n f.call(iterator);\n }\n // 9.1 Ordinary Object Internal Methods and Internal Slots\n // https://tc39.github.io/ecma262/#sec-ordinary-object-internal-methods-and-internal-slots\n // 9.1.1.1 OrdinaryGetPrototypeOf(O)\n // https://tc39.github.io/ecma262/#sec-ordinarygetprototypeof\n function OrdinaryGetPrototypeOf(O) {\n var proto = Object.getPrototypeOf(O);\n if (typeof O !== \"function\" || O === functionPrototype)\n return proto;\n // TypeScript doesn't set __proto__ in ES5, as it's non-standard.\n // Try to determine the superclass constructor. Compatible implementations\n // must either set __proto__ on a subclass constructor to the superclass constructor,\n // or ensure each class has a valid `constructor` property on its prototype that\n // points back to the constructor.\n // If this is not the same as Function.[[Prototype]], then this is definately inherited.\n // This is the case when in ES6 or when using __proto__ in a compatible browser.\n if (proto !== functionPrototype)\n return proto;\n // If the super prototype is Object.prototype, null, or undefined, then we cannot determine the heritage.\n var prototype = O.prototype;\n var prototypeProto = prototype && Object.getPrototypeOf(prototype);\n if (prototypeProto == null || prototypeProto === Object.prototype)\n return proto;\n // If the constructor was not a function, then we cannot determine the heritage.\n var constructor = prototypeProto.constructor;\n if (typeof constructor !== \"function\")\n return proto;\n // If we have some kind of self-reference, then we cannot determine the heritage.\n if (constructor === O)\n return proto;\n // we have a pretty good guess at the heritage.\n return constructor;\n }\n // Global metadata registry\n // - Allows `import \"reflect-metadata\"` and `import \"reflect-metadata/no-conflict\"` to interoperate.\n // - Uses isolated metadata if `Reflect` is frozen before the registry can be installed.\n /**\n * Creates a registry used to allow multiple `reflect-metadata` providers.\n */\n function CreateMetadataRegistry() {\n var fallback;\n if (!IsUndefined(registrySymbol) &&\n typeof root.Reflect !== \"undefined\" &&\n !(registrySymbol in root.Reflect) &&\n typeof root.Reflect.defineMetadata === \"function\") {\n // interoperate with older version of `reflect-metadata` that did not support a registry.\n fallback = CreateFallbackProvider(root.Reflect);\n }\n var first;\n var second;\n var rest;\n var targetProviderMap = new _WeakMap();\n var registry = {\n registerProvider: registerProvider,\n getProvider: getProvider,\n setProvider: setProvider,\n };\n return registry;\n function registerProvider(provider) {\n if (!Object.isExtensible(registry)) {\n throw new Error(\"Cannot add provider to a frozen registry.\");\n }\n switch (true) {\n case fallback === provider: break;\n case IsUndefined(first):\n first = provider;\n break;\n case first === provider: break;\n case IsUndefined(second):\n second = provider;\n break;\n case second === provider: break;\n default:\n if (rest === undefined)\n rest = new _Set();\n rest.add(provider);\n break;\n }\n }\n function getProviderNoCache(O, P) {\n if (!IsUndefined(first)) {\n if (first.isProviderFor(O, P))\n return first;\n if (!IsUndefined(second)) {\n if (second.isProviderFor(O, P))\n return first;\n if (!IsUndefined(rest)) {\n var iterator = GetIterator(rest);\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n return undefined;\n }\n var provider = IteratorValue(next);\n if (provider.isProviderFor(O, P)) {\n IteratorClose(iterator);\n return provider;\n }\n }\n }\n }\n }\n if (!IsUndefined(fallback) && fallback.isProviderFor(O, P)) {\n return fallback;\n }\n return undefined;\n }\n function getProvider(O, P) {\n var providerMap = targetProviderMap.get(O);\n var provider;\n if (!IsUndefined(providerMap)) {\n provider = providerMap.get(P);\n }\n if (!IsUndefined(provider)) {\n return provider;\n }\n provider = getProviderNoCache(O, P);\n if (!IsUndefined(provider)) {\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return provider;\n }\n function hasProvider(provider) {\n if (IsUndefined(provider))\n throw new TypeError();\n return first === provider || second === provider || !IsUndefined(rest) && rest.has(provider);\n }\n function setProvider(O, P, provider) {\n if (!hasProvider(provider)) {\n throw new Error(\"Metadata provider not registered.\");\n }\n var existingProvider = getProvider(O, P);\n if (existingProvider !== provider) {\n if (!IsUndefined(existingProvider)) {\n return false;\n }\n var providerMap = targetProviderMap.get(O);\n if (IsUndefined(providerMap)) {\n providerMap = new _Map();\n targetProviderMap.set(O, providerMap);\n }\n providerMap.set(P, provider);\n }\n return true;\n }\n }\n /**\n * Gets or creates the shared registry of metadata providers.\n */\n function GetOrCreateMetadataRegistry() {\n var metadataRegistry;\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n metadataRegistry = root.Reflect[registrySymbol];\n }\n if (IsUndefined(metadataRegistry)) {\n metadataRegistry = CreateMetadataRegistry();\n }\n if (!IsUndefined(registrySymbol) && IsObject(root.Reflect) && Object.isExtensible(root.Reflect)) {\n Object.defineProperty(root.Reflect, registrySymbol, {\n enumerable: false,\n configurable: false,\n writable: false,\n value: metadataRegistry\n });\n }\n return metadataRegistry;\n }\n function CreateMetadataProvider(registry) {\n // [[Metadata]] internal slot\n // https://rbuckton.github.io/reflect-metadata/#ordinary-object-internal-methods-and-internal-slots\n var metadata = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var targetMetadata = metadata.get(O);\n if (IsUndefined(targetMetadata))\n return false;\n return targetMetadata.has(P);\n },\n OrdinaryDefineOwnMetadata: OrdinaryDefineOwnMetadata,\n OrdinaryHasOwnMetadata: OrdinaryHasOwnMetadata,\n OrdinaryGetOwnMetadata: OrdinaryGetOwnMetadata,\n OrdinaryOwnMetadataKeys: OrdinaryOwnMetadataKeys,\n OrdinaryDeleteMetadata: OrdinaryDeleteMetadata,\n };\n metadataRegistry.registerProvider(provider);\n return provider;\n function GetOrCreateMetadataMap(O, P, Create) {\n var targetMetadata = metadata.get(O);\n var createdTargetMetadata = false;\n if (IsUndefined(targetMetadata)) {\n if (!Create)\n return undefined;\n targetMetadata = new _Map();\n metadata.set(O, targetMetadata);\n createdTargetMetadata = true;\n }\n var metadataMap = targetMetadata.get(P);\n if (IsUndefined(metadataMap)) {\n if (!Create)\n return undefined;\n metadataMap = new _Map();\n targetMetadata.set(P, metadataMap);\n if (!registry.setProvider(O, P, provider)) {\n targetMetadata.delete(P);\n if (createdTargetMetadata) {\n metadata.delete(O);\n }\n throw new Error(\"Wrong provider for target.\");\n }\n }\n return metadataMap;\n }\n // 3.1.2.1 OrdinaryHasOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryhasownmetadata\n function OrdinaryHasOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n return ToBoolean(metadataMap.has(MetadataKey));\n }\n // 3.1.4.1 OrdinaryGetOwnMetadata(MetadataKey, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarygetownmetadata\n function OrdinaryGetOwnMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return undefined;\n return metadataMap.get(MetadataKey);\n }\n // 3.1.5.1 OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinarydefineownmetadata\n function OrdinaryDefineOwnMetadata(MetadataKey, MetadataValue, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ true);\n metadataMap.set(MetadataKey, MetadataValue);\n }\n // 3.1.7.1 OrdinaryOwnMetadataKeys(O, P)\n // https://rbuckton.github.io/reflect-metadata/#ordinaryownmetadatakeys\n function OrdinaryOwnMetadataKeys(O, P) {\n var keys = [];\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return keys;\n var keysObj = metadataMap.keys();\n var iterator = GetIterator(keysObj);\n var k = 0;\n while (true) {\n var next = IteratorStep(iterator);\n if (!next) {\n keys.length = k;\n return keys;\n }\n var nextValue = IteratorValue(next);\n try {\n keys[k] = nextValue;\n }\n catch (e) {\n try {\n IteratorClose(iterator);\n }\n finally {\n throw e;\n }\n }\n k++;\n }\n }\n function OrdinaryDeleteMetadata(MetadataKey, O, P) {\n var metadataMap = GetOrCreateMetadataMap(O, P, /*Create*/ false);\n if (IsUndefined(metadataMap))\n return false;\n if (!metadataMap.delete(MetadataKey))\n return false;\n if (metadataMap.size === 0) {\n var targetMetadata = metadata.get(O);\n if (!IsUndefined(targetMetadata)) {\n targetMetadata.delete(P);\n if (targetMetadata.size === 0) {\n metadata.delete(targetMetadata);\n }\n }\n }\n return true;\n }\n }\n function CreateFallbackProvider(reflect) {\n var defineMetadata = reflect.defineMetadata, hasOwnMetadata = reflect.hasOwnMetadata, getOwnMetadata = reflect.getOwnMetadata, getOwnMetadataKeys = reflect.getOwnMetadataKeys, deleteMetadata = reflect.deleteMetadata;\n var metadataOwner = new _WeakMap();\n var provider = {\n isProviderFor: function (O, P) {\n var metadataPropertySet = metadataOwner.get(O);\n if (!IsUndefined(metadataPropertySet) && metadataPropertySet.has(P)) {\n return true;\n }\n if (getOwnMetadataKeys(O, P).length) {\n if (IsUndefined(metadataPropertySet)) {\n metadataPropertySet = new _Set();\n metadataOwner.set(O, metadataPropertySet);\n }\n metadataPropertySet.add(P);\n return true;\n }\n return false;\n },\n OrdinaryDefineOwnMetadata: defineMetadata,\n OrdinaryHasOwnMetadata: hasOwnMetadata,\n OrdinaryGetOwnMetadata: getOwnMetadata,\n OrdinaryOwnMetadataKeys: getOwnMetadataKeys,\n OrdinaryDeleteMetadata: deleteMetadata,\n };\n return provider;\n }\n /**\n * Gets the metadata provider for an object. If the object has no metadata provider and this is for a create operation,\n * then this module's metadata provider is assigned to the object.\n */\n function GetMetadataProvider(O, P, Create) {\n var registeredProvider = metadataRegistry.getProvider(O, P);\n if (!IsUndefined(registeredProvider)) {\n return registeredProvider;\n }\n if (Create) {\n if (metadataRegistry.setProvider(O, P, metadataProvider)) {\n return metadataProvider;\n }\n throw new Error(\"Illegal state.\");\n }\n return undefined;\n }\n // naive Map shim\n function CreateMapPolyfill() {\n var cacheSentinel = {};\n var arraySentinel = [];\n var MapIterator = /** @class */ (function () {\n function MapIterator(keys, values, selector) {\n this._index = 0;\n this._keys = keys;\n this._values = values;\n this._selector = selector;\n }\n MapIterator.prototype[\"@@iterator\"] = function () { return this; };\n MapIterator.prototype[iteratorSymbol] = function () { return this; };\n MapIterator.prototype.next = function () {\n var index = this._index;\n if (index >= 0 && index < this._keys.length) {\n var result = this._selector(this._keys[index], this._values[index]);\n if (index + 1 >= this._keys.length) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n else {\n this._index++;\n }\n return { value: result, done: false };\n }\n return { value: undefined, done: true };\n };\n MapIterator.prototype.throw = function (error) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n throw error;\n };\n MapIterator.prototype.return = function (value) {\n if (this._index >= 0) {\n this._index = -1;\n this._keys = arraySentinel;\n this._values = arraySentinel;\n }\n return { value: value, done: true };\n };\n return MapIterator;\n }());\n var Map = /** @class */ (function () {\n function Map() {\n this._keys = [];\n this._values = [];\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n Object.defineProperty(Map.prototype, \"size\", {\n get: function () { return this._keys.length; },\n enumerable: true,\n configurable: true\n });\n Map.prototype.has = function (key) { return this._find(key, /*insert*/ false) >= 0; };\n Map.prototype.get = function (key) {\n var index = this._find(key, /*insert*/ false);\n return index >= 0 ? this._values[index] : undefined;\n };\n Map.prototype.set = function (key, value) {\n var index = this._find(key, /*insert*/ true);\n this._values[index] = value;\n return this;\n };\n Map.prototype.delete = function (key) {\n var index = this._find(key, /*insert*/ false);\n if (index >= 0) {\n var size = this._keys.length;\n for (var i = index + 1; i < size; i++) {\n this._keys[i - 1] = this._keys[i];\n this._values[i - 1] = this._values[i];\n }\n this._keys.length--;\n this._values.length--;\n if (SameValueZero(key, this._cacheKey)) {\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n }\n return true;\n }\n return false;\n };\n Map.prototype.clear = function () {\n this._keys.length = 0;\n this._values.length = 0;\n this._cacheKey = cacheSentinel;\n this._cacheIndex = -2;\n };\n Map.prototype.keys = function () { return new MapIterator(this._keys, this._values, getKey); };\n Map.prototype.values = function () { return new MapIterator(this._keys, this._values, getValue); };\n Map.prototype.entries = function () { return new MapIterator(this._keys, this._values, getEntry); };\n Map.prototype[\"@@iterator\"] = function () { return this.entries(); };\n Map.prototype[iteratorSymbol] = function () { return this.entries(); };\n Map.prototype._find = function (key, insert) {\n if (!SameValueZero(this._cacheKey, key)) {\n this._cacheIndex = -1;\n for (var i = 0; i < this._keys.length; i++) {\n if (SameValueZero(this._keys[i], key)) {\n this._cacheIndex = i;\n break;\n }\n }\n }\n if (this._cacheIndex < 0 && insert) {\n this._cacheIndex = this._keys.length;\n this._keys.push(key);\n this._values.push(undefined);\n }\n return this._cacheIndex;\n };\n return Map;\n }());\n return Map;\n function getKey(key, _) {\n return key;\n }\n function getValue(_, value) {\n return value;\n }\n function getEntry(key, value) {\n return [key, value];\n }\n }\n // naive Set shim\n function CreateSetPolyfill() {\n var Set = /** @class */ (function () {\n function Set() {\n this._map = new _Map();\n }\n Object.defineProperty(Set.prototype, \"size\", {\n get: function () { return this._map.size; },\n enumerable: true,\n configurable: true\n });\n Set.prototype.has = function (value) { return this._map.has(value); };\n Set.prototype.add = function (value) { return this._map.set(value, value), this; };\n Set.prototype.delete = function (value) { return this._map.delete(value); };\n Set.prototype.clear = function () { this._map.clear(); };\n Set.prototype.keys = function () { return this._map.keys(); };\n Set.prototype.values = function () { return this._map.keys(); };\n Set.prototype.entries = function () { return this._map.entries(); };\n Set.prototype[\"@@iterator\"] = function () { return this.keys(); };\n Set.prototype[iteratorSymbol] = function () { return this.keys(); };\n return Set;\n }());\n return Set;\n }\n // naive WeakMap shim\n function CreateWeakMapPolyfill() {\n var UUID_SIZE = 16;\n var keys = HashMap.create();\n var rootKey = CreateUniqueKey();\n return /** @class */ (function () {\n function WeakMap() {\n this._key = CreateUniqueKey();\n }\n WeakMap.prototype.has = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.has(table, this._key) : false;\n };\n WeakMap.prototype.get = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? HashMap.get(table, this._key) : undefined;\n };\n WeakMap.prototype.set = function (target, value) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ true);\n table[this._key] = value;\n return this;\n };\n WeakMap.prototype.delete = function (target) {\n var table = GetOrCreateWeakMapTable(target, /*create*/ false);\n return table !== undefined ? delete table[this._key] : false;\n };\n WeakMap.prototype.clear = function () {\n // NOTE: not a real clear, just makes the previous data unreachable\n this._key = CreateUniqueKey();\n };\n return WeakMap;\n }());\n function CreateUniqueKey() {\n var key;\n do\n key = \"@@WeakMap@@\" + CreateUUID();\n while (HashMap.has(keys, key));\n keys[key] = true;\n return key;\n }\n function GetOrCreateWeakMapTable(target, create) {\n if (!hasOwn.call(target, rootKey)) {\n if (!create)\n return undefined;\n Object.defineProperty(target, rootKey, { value: HashMap.create() });\n }\n return target[rootKey];\n }\n function FillRandomBytes(buffer, size) {\n for (var i = 0; i < size; ++i)\n buffer[i] = Math.random() * 0xff | 0;\n return buffer;\n }\n function GenRandomBytes(size) {\n if (typeof Uint8Array === \"function\") {\n var array = new Uint8Array(size);\n if (typeof crypto !== \"undefined\") {\n crypto.getRandomValues(array);\n }\n else if (typeof msCrypto !== \"undefined\") {\n msCrypto.getRandomValues(array);\n }\n else {\n FillRandomBytes(array, size);\n }\n return array;\n }\n return FillRandomBytes(new Array(size), size);\n }\n function CreateUUID() {\n var data = GenRandomBytes(UUID_SIZE);\n // mark as random - RFC 4122 § 4.4\n data[6] = data[6] & 0x4f | 0x40;\n data[8] = data[8] & 0xbf | 0x80;\n var result = \"\";\n for (var offset = 0; offset < UUID_SIZE; ++offset) {\n var byte = data[offset];\n if (offset === 4 || offset === 6 || offset === 8)\n result += \"-\";\n if (byte < 16)\n result += \"0\";\n result += byte.toString(16).toLowerCase();\n }\n return result;\n }\n }\n // uses a heuristic used by v8 and chakra to force an object into dictionary mode.\n function MakeDictionary(obj) {\n obj.__ = undefined;\n delete obj.__;\n return obj;\n }\n });\n})(Reflect || (Reflect = {}));\n","function e(e){switch(typeof e){case\"string\":case\"symbol\":return e.toString();case\"function\":return e.name;default:throw new Error(`Unexpected ${typeof e} service id type`)}}const t=Symbol.for(\"@inversifyjs/common/islazyServiceIdentifier\");class r{[t];#e;constructor(e){this.#e=e,this[t]=!0}static is(e){return\"object\"==typeof e&&null!==e&&!0===e[t]}unwrap(){return this.#e()}}export{r as LazyServiceIdentifier,e as stringifyServiceIdentifier};\n//# sourceMappingURL=index.js.map\n","function t(t,e){return Reflect.getMetadata(e,t)}function e(e,n,a,c){const f=c(t(e,n)??a);Reflect.defineMetadata(n,f,e)}export{t as getReflectMetadata,e as updateReflectMetadata};\n//# sourceMappingURL=index.js.map\n","import{getReflectMetadata as t,updateReflectMetadata as e}from\"@inversifyjs/reflect-metadata-utils\";import{LazyServiceIdentifier as n}from\"@inversifyjs/common\";const a=\"named\",r=\"name\",i=\"unmanaged\",o=\"optional\",s=\"inject\",c=\"multi_inject\",u=\"post_construct\",d=\"pre_destroy\";const m=[s,c,r,i,a,o],l=Symbol.for(\"@inversifyjs/core/InversifyCoreError\");class f extends Error{[l];kind;constructor(t,e,n){super(e,n),this[l]=!0,this.kind=t}static is(t){return\"object\"==typeof t&&null!==t&&!0===t[l]}static isErrorOfKind(t,e){return f.is(t)&&t.kind===e}}var g,p;function h(t,e){const n=[];for(let t=0;t<e.length;++t){void 0===e[t]&&n.push(t)}if(n.length>0)throw new f(g.missingInjectionDecorator,`Found unexpected missing metadata on type \"${t.name}\" at constructor indexes \"${n.join('\", \"')}\".\\n\\nAre you using @inject, @multiInject or @unmanaged decorators at those indexes?\\n\\nIf you're using typescript and want to rely on auto injection, set \"emitDecoratorMetadata\" compiler option to true`)}function y(t){return{kind:p.singleInjection,name:void 0,optional:!1,tags:new Map,targetName:void 0,value:t}}function v(t){const e=t.find((t=>t.key===s)),n=t.find((t=>t.key===c));if(void 0!==t.find((t=>t.key===i)))return function(t,e){if(void 0!==e||void 0!==t)throw new f(g.missingInjectionDecorator,\"Expected a single @inject, @multiInject or @unmanaged metadata\");return{kind:p.unmanaged}}(e,n);if(void 0===n&&void 0===e)throw new f(g.missingInjectionDecorator,\"Expected @inject, @multiInject or @unmanaged metadata\");const u=t.find((t=>t.key===a)),d=t.find((t=>t.key===o)),l=t.find((t=>t.key===r));return{kind:void 0===e?p.multipleInjection:p.singleInjection,name:u?.value,optional:void 0!==d,tags:new Map(t.filter((t=>m.every((e=>t.key!==e)))).map((t=>[t.key,t.value]))),targetName:l?.value,value:void 0===e?n?.value:e.value}}function j(t,e,n){try{return v(n)}catch(n){throw f.isErrorOfKind(n,g.missingInjectionDecorator)?new f(g.missingInjectionDecorator,`Expected a single @inject, @multiInject or @unmanaged decorator at type \"${t.name}\" at constructor arguments at index \"${e.toString()}\"`,{cause:n}):n}}function k(e){const n=t(e,\"design:paramtypes\"),a=t(e,\"inversify:tagged\"),r=[];if(void 0!==a)for(const[t,n]of Object.entries(a)){const a=parseInt(t);r[a]=j(e,a,n)}if(void 0!==n)for(let t=0;t<n.length;++t)if(void 0===r[t]){const e=n[t];r[t]=y(e)}return h(e,r),r}function I(t,e,n){try{return v(n)}catch(n){throw f.isErrorOfKind(n,g.missingInjectionDecorator)?new f(g.missingInjectionDecorator,`Expected a single @inject, @multiInject or @unmanaged decorator at type \"${t.name}\" at property \"${e.toString()}\"`,{cause:n}):n}}function w(e){const n=t(e,\"inversify:tagged_props\"),a=new Map;if(void 0!==n)for(const t of Reflect.ownKeys(n)){const r=n[t];a.set(t,I(e,t,r))}return a}function M(e){const n=t(e,u),a=t(e,d);return{constructorArguments:k(e),lifecycle:{postConstructMethodName:n?.value,preDestroyMethodName:a?.value},properties:w(e)}}function N(t,e){const n=e.getConstructorMetadata(t),a=[];for(const[e,r]of Object.entries(n.userGeneratedMetadata)){const n=parseInt(e);a[n]=j(t,n,r)}if(void 0!==n.compilerGeneratedMetadata)for(let t=0;t<n.compilerGeneratedMetadata.length;++t)if(void 0===a[t]){const e=n.compilerGeneratedMetadata[t];a[t]=y(e)}return h(t,a),a}function E(t,e){const n=e.getPropertiesMetadata(t),a=new Map;for(const e of Reflect.ownKeys(n)){const r=n[e];a.set(e,I(t,e,r))}return a}function D(e,n){const a=t(e,u),r=t(e,d);return{constructorArguments:N(e,n),lifecycle:{postConstructMethodName:a?.value,preDestroyMethodName:r?.value},properties:E(e,n)}}function b(t){const e=Object.getPrototypeOf(t.prototype),n=e?.constructor;return n}function O(t){return t.kind===p.unmanaged?[{key:i,value:!0}]:function(t){const e=[A(t)];void 0!==t.name&&e.push({key:a,value:t.name});t.optional&&e.push({key:o,value:!0});for(const[n,a]of t.tags)e.push({key:n,value:a});void 0!==t.targetName&&e.push({key:r,value:t.targetName});return e}(t)}function A(t){let e;switch(t.kind){case p.multipleInjection:e={key:c,value:t.value};break;case p.singleInjection:e={key:s,value:t.value}}return e}!function(t){t[t.injectionDecoratorConflict=0]=\"injectionDecoratorConflict\",t[t.missingInjectionDecorator=1]=\"missingInjectionDecorator\",t[t.planning=2]=\"planning\",t[t.unknown=3]=\"unknown\"}(g||(g={})),function(t){t[t.multipleInjection=0]=\"multipleInjection\",t[t.singleInjection=1]=\"singleInjection\",t[t.unmanaged=2]=\"unmanaged\"}(p||(p={}));class x{#t;constructor(t){this.#t=t}startsWith(t){return this.#t.startsWith(t)}endsWith(t){return this.#t.endsWith(t)}contains(t){return this.#t.includes(t)}equals(t){return this.#t===t}value(){return this.#t}}const C=\"@inversifyjs/core/targetId\";class T{#e;#n;#a;#r;#i;#o;constructor(n,a,r){this.#n=function(){const n=t(Object,C)??0;return n===Number.MAX_SAFE_INTEGER?e(Object,C,n,(()=>Number.MIN_SAFE_INTEGER)):e(Object,C,n,(t=>t+1)),n}(),this.#a=n,this.#r=void 0,this.#e=a,this.#i=new x(\"string\"==typeof n?n:n.toString().slice(7,-1)),this.#o=r}get id(){return this.#n}get identifier(){return this.#a}get metadata(){return void 0===this.#r&&(this.#r=O(this.#e)),this.#r}get name(){return this.#i}get type(){return this.#o}get serviceIdentifier(){return n.is(this.#e.value)?this.#e.value.unwrap():this.#e.value}getCustomTags(){return[...this.#e.tags.entries()].map((([t,e])=>({key:t,value:e})))}getNamedTag(){return void 0===this.#e.name?null:{key:a,value:this.#e.name}}hasTag(t){return this.metadata.some((e=>e.key===t))}isArray(){return this.#e.kind===p.multipleInjection}isNamed(){return void 0!==this.#e.name}isOptional(){return this.#e.optional}isTagged(){return this.#e.tags.size>0}matchesArray(t){return this.isArray()&&this.#e.value===t}matchesNamedTag(t){return this.#e.name===t}matchesTag(t){return e=>this.metadata.some((n=>n.key===t&&n.value===e))}}const _=t=>function(t,e){return function(n){const a=t(n);let r=b(n);for(;void 0!==r&&r!==Object;){const t=e(r);for(const[e,n]of t)a.properties.has(e)||a.properties.set(e,n);r=b(r)}const i=[];for(const t of a.constructorArguments)if(t.kind!==p.unmanaged){const e=t.targetName??\"\";i.push(new T(e,t,\"ConstructorArgument\"))}for(const[t,e]of a.properties)if(e.kind!==p.unmanaged){const n=e.targetName??t;i.push(new T(n,e,\"ClassProperty\"))}return i}}(void 0===t?M:e=>D(e,t),void 0===t?w:e=>E(e,t));export{p as ClassElementMetadataKind,T as LegacyTargetImpl,v as getClassElementMetadataFromLegacyMetadata,M as getClassMetadata,D as getClassMetadataFromMetadataReader,_ as getTargets};\n//# sourceMappingURL=index.js.map\n","import\"reflect-metadata\";import{LazyServiceIdentifier as t}from\"@inversifyjs/common\";export{LazyServiceIdentifier}from\"@inversifyjs/common\";import{getTargets as n,getClassElementMetadataFromLegacyMetadata as e,ClassElementMetadataKind as i,LegacyTargetImpl as r}from\"@inversifyjs/core\";const s=\"named\",o=\"name\",a=\"unmanaged\",c=\"optional\",d=\"inject\",u=\"multi_inject\",h=\"inversify:tagged\",l=\"inversify:tagged_props\",g=\"inversify:paramtypes\",y=\"design:paramtypes\",p=\"post_construct\",f=\"pre_destroy\";const _=[d,u,o,a,s,c];var v=Object.freeze({__proto__:null,DESIGN_PARAM_TYPES:y,INJECT_TAG:d,MULTI_INJECT_TAG:u,NAMED_TAG:s,NAME_TAG:o,NON_CUSTOM_TAG_KEYS:_,OPTIONAL_TAG:c,PARAM_TYPES:g,POST_CONSTRUCT:p,PRE_DESTROY:f,TAGGED:h,TAGGED_PROP:l,UNMANAGED_TAG:a});const b={Request:\"Request\",Singleton:\"Singleton\",Transient:\"Transient\"},w={ConstantValue:\"ConstantValue\",Constructor:\"Constructor\",DynamicValue:\"DynamicValue\",Factory:\"Factory\",Function:\"Function\",Instance:\"Instance\",Invalid:\"Invalid\",Provider:\"Provider\"},m={ClassProperty:\"ClassProperty\",ConstructorArgument:\"ConstructorArgument\",Variable:\"Variable\"};let A=0;function S(){return A++}class I{id;moduleId;activated;serviceIdentifier;implementationType;cache;dynamicValue;scope;type;factory;provider;constraint;onActivation;onDeactivation;constructor(t,n){this.id=S(),this.activated=!1,this.serviceIdentifier=t,this.scope=n,this.type=w.Invalid,this.constraint=t=>!0,this.implementationType=null,this.cache=null,this.factory=null,this.provider=null,this.onActivation=null,this.onDeactivation=null,this.dynamicValue=null}clone(){const t=new I(this.serviceIdentifier,this.scope);return t.activated=t.scope===b.Singleton&&this.activated,t.implementationType=this.implementationType,t.dynamicValue=this.dynamicValue,t.scope=this.scope,t.type=this.type,t.factory=this.factory,t.provider=this.provider,t.constraint=this.constraint,t.onActivation=this.onActivation,t.onDeactivation=this.onDeactivation,t.cache=this.cache,t}}const T=\"Metadata key was used more than once in a parameter:\",D=\"NULL argument\",N=\"Key Not Found\",C=\"Ambiguous match found for serviceIdentifier:\",x=\"No matching bindings found for serviceIdentifier:\",R=\"The @inject @multiInject @tagged and @named decorators must be applied to the parameters of a class constructor or a class property.\",E=(t,n)=>`onDeactivation() error in class ${t}: ${n}`;class M{getConstructorMetadata(t){return{compilerGeneratedMetadata:Reflect.getMetadata(y,t)??[],userGeneratedMetadata:Reflect.getMetadata(h,t)??{}}}getPropertiesMetadata(t){return Reflect.getMetadata(l,t)??{}}}var B;function P(t){return t instanceof RangeError||\"Maximum call stack size exceeded\"===t.message}!function(t){t[t.MultipleBindingsAvailable=2]=\"MultipleBindingsAvailable\",t[t.NoBindingsAvailable=0]=\"NoBindingsAvailable\",t[t.OnlyOneBindingAvailable=1]=\"OnlyOneBindingAvailable\"}(B||(B={}));function k(t){return\"function\"==typeof t?t.name:\"symbol\"==typeof t?t.toString():t}function q(t,n,e){let i=\"\";const r=e(t,n);return 0!==r.length&&(i=\"\\nRegistered bindings:\",r.forEach((t=>{let n=\"Object\";null!==t.implementationType&&(n=O(t.implementationType)),i=`${i}\\n ${n}`,t.constraint.metaData&&(i=`${i} - ${t.constraint.metaData}`)}))),i}function F(t,n){return null!==t.parentRequest&&(t.parentRequest.serviceIdentifier===n||F(t.parentRequest,n))}function j(t){t.childRequests.forEach((n=>{if(F(t,n.serviceIdentifier)){const t=function(t){const n=function t(n,e=[]){const i=k(n.serviceIdentifier);return e.push(i),null!==n.parentRequest?t(n.parentRequest,e):e}(t);return n.reverse().join(\" --\\x3e \")}(n);throw new Error(`Circular dependency found: ${t}`)}j(n)}))}function O(t){if(null!=t.name&&\"\"!==t.name)return t.name;{const n=t.toString(),e=n.match(/^function\\s*([^\\s(]+)/);return null===e?`Anonymous function: ${n}`:e[1]}}function $(t){return`{\"key\":\"${t.key.toString()}\",\"value\":\"${t.value.toString()}\"}`}class V{id;container;plan;currentRequest;constructor(t){this.id=S(),this.container=t}addPlan(t){this.plan=t}setCurrentRequest(t){this.currentRequest=t}}class W{key;value;constructor(t,n){this.key=t,this.value=n}toString(){return this.key===s?`named: ${String(this.value).toString()} `:`tagged: { key:${this.key.toString()}, value: ${String(this.value)} }`}}class G{parentContext;rootRequest;constructor(t,n){this.parentContext=t,this.rootRequest=n}}function K(t,e){const i=function(t){const n=Object.getPrototypeOf(t.prototype),e=n?.constructor;return e}(e);if(void 0===i||i===Object)return 0;const r=n(t)(i),s=r.map((t=>t.metadata.filter((t=>t.key===a)))),o=[].concat.apply([],s).length,c=r.length-o;return c>0?c:K(t,i)}class H{id;serviceIdentifier;parentContext;parentRequest;bindings;childRequests;target;requestScope;constructor(t,n,e,i,r){this.id=S(),this.serviceIdentifier=t,this.parentContext=n,this.parentRequest=e,this.target=r,this.childRequests=[],this.bindings=Array.isArray(i)?i:[i],this.requestScope=null===e?new Map:null}addChildRequest(t,n,e){const i=new H(t,this.parentContext,this,n,e);return this.childRequests.push(i),i}}function U(t){return t._bindingDictionary}function L(t,n,e,i,r){let s=J(e.container,r.serviceIdentifier),o=[];return s.length===B.NoBindingsAvailable&&!0===e.container.options.autoBindInjectable&&\"function\"==typeof r.serviceIdentifier&&t.getConstructorMetadata(r.serviceIdentifier).compilerGeneratedMetadata&&(e.container.bind(r.serviceIdentifier).toSelf(),s=J(e.container,r.serviceIdentifier)),o=n?s:s.filter((t=>{const n=new H(t.serviceIdentifier,e,i,t,r);return t.constraint(n)})),function(t,n,e,i,r){switch(n.length){case B.NoBindingsAvailable:if(i.isOptional())return n;{const n=k(t);let s=x;throw s+=function(t,n){if(n.isTagged()||n.isNamed()){let e=\"\";const i=n.getNamedTag(),r=n.getCustomTags();return null!==i&&(e+=$(i)+\"\\n\"),null!==r&&r.forEach((t=>{e+=$(t)+\"\\n\"})),` ${t}\\n ${t} - ${e}`}return` ${t}`}(n,i),s+=q(r,n,J),null!==e&&(s+=\"\\n\"+`Trying to resolve bindings for \"${k(e.serviceIdentifier)}\"`),new Error(s)}case B.OnlyOneBindingAvailable:return n;case B.MultipleBindingsAvailable:default:if(i.isArray())return n;{const n=k(t);let e=`${C} ${n}`;throw e+=q(r,n,J),new Error(e)}}}(r.serviceIdentifier,o,i,r,e.container),o}function Y(t,n){const e=n.isMultiInject?u:d,i=[new W(e,t)];return void 0!==n.customTag&&i.push(new W(n.customTag.key,n.customTag.value)),!0===n.isOptional&&i.push(new W(c,!0)),i}function z(t,e,i,r,s,o){let a,c;if(null===s){a=L(t,e,r,null,o),c=new H(i,r,null,a,o);const n=new G(r,c);r.addPlan(n)}else a=L(t,e,r,s,o),c=s.addChildRequest(o.serviceIdentifier,a,o);a.forEach((e=>{let i=null;if(o.isArray())i=c.addChildRequest(e.serviceIdentifier,e,o);else{if(null!==e.cache)return;i=c}if(e.type===w.Instance&&null!==e.implementationType){const s=function(t,e){return n(t)(e)}(t,e.implementationType);if(!0!==r.container.options.skipBaseClassChecks){const n=K(t,e.implementationType);if(s.length<n){const t=`The number of constructor arguments in the derived class ${O(e.implementationType)} must be >= than the number of constructor arguments of its base class.`;throw new Error(t)}}s.forEach((n=>{z(t,!1,n.serviceIdentifier,r,i,n)}))}}))}function J(t,n){let e=[];const i=U(t);return i.hasKey(n)?e=i.get(n):null!==t.parent&&(e=J(t.parent,n)),e}function Q(t,n,s,o,a,c=!1){const d=new V(n),u=function(t,n,s){const o=Y(n,s),a=e(o);if(a.kind===i.unmanaged)throw new Error(\"Unexpected metadata when creating target\");return new r(\"\",a,t)}(s,o,a);try{return z(t,c,o,d,null,u),d}catch(t){throw P(t)&&j(d.plan.rootRequest),t}}function X(t){return(\"object\"==typeof t&&null!==t||\"function\"==typeof t)&&\"function\"==typeof t.then}function Z(t){return!!X(t)||Array.isArray(t)&&t.some(X)}const tt=(t,n,e)=>{t.has(n.id)||t.set(n.id,e)},nt=(t,n)=>{t.cache=n,t.activated=!0,X(n)&&et(t,n)},et=async(t,n)=>{try{const e=await n;t.cache=e}catch(n){throw t.cache=null,t.activated=!1,n}};var it;!function(t){t.DynamicValue=\"toDynamicValue\",t.Factory=\"toFactory\",t.Provider=\"toProvider\"}(it||(it={}));const rt=t=>n=>(...e)=>{e.forEach((e=>{t.bind(e).toService(n)}))};function st(t,n,e){let i;if(n.length>0){const r=function(t,n){return t.reduce(((t,e)=>{const i=n(e);return e.target.type===m.ConstructorArgument?t.constructorInjections.push(i):(t.propertyRequests.push(e),t.propertyInjections.push(i)),t.isAsync||(t.isAsync=Z(i)),t}),{constructorInjections:[],isAsync:!1,propertyInjections:[],propertyRequests:[]})}(n,e),s={...r,constr:t};i=r.isAsync?async function(t){const n=await at(t.constructorInjections),e=await at(t.propertyInjections);return ot({...t,constructorInjections:n,propertyInjections:e})}(s):ot(s)}else i=new t;return i}function ot(t){const n=new t.constr(...t.constructorInjections);return t.propertyRequests.forEach(((e,i)=>{const r=e.target.identifier,s=t.propertyInjections[i];e.target.isOptional()&&void 0===s||(n[r]=s)})),n}async function at(t){const n=[];for(const e of t)Array.isArray(e)?n.push(Promise.all(e)):n.push(e);return Promise.all(n)}function ct(t,n){const e=function(t,n){if(Reflect.hasMetadata(p,t)){const r=Reflect.getMetadata(p,t);try{return n[r.value]?.()}catch(n){if(n instanceof Error)throw new Error((e=t.name,i=n.message,`@postConstruct error in class ${e}: ${i}`))}}var e,i}(t,n);return X(e)?e.then((()=>n)):n}function dt(t,n){t.scope!==b.Singleton&&function(t,n){const e=`Class cannot be instantiated in ${t.scope===b.Request?\"request\":\"transient\"} scope.`;if(\"function\"==typeof t.onDeactivation)throw new Error(E(n.name,e));if(Reflect.hasMetadata(f,n))throw new Error(`@preDestroy error in class ${n.name}: ${e}`)}(t,n)}const ut=t=>n=>{n.parentContext.setCurrentRequest(n);const e=n.bindings,i=n.childRequests,r=n.target&&n.target.isArray(),s=!(n.parentRequest&&n.parentRequest.target&&n.target&&n.parentRequest.target.matchesArray(n.target.serviceIdentifier));if(r&&s)return i.map((n=>ut(t)(n)));{if(n.target.isOptional()&&0===e.length)return;const i=e[0];return yt(t,n,i)}},ht=(t,n)=>{const e=(t=>{switch(t.type){case w.Factory:return{factory:t.factory,factoryType:it.Factory};case w.Provider:return{factory:t.provider,factoryType:it.Provider};case w.DynamicValue:return{factory:t.dynamicValue,factoryType:it.DynamicValue};default:throw new Error(`Unexpected factory type ${t.type}`)}})(t);return((t,n)=>{try{return t()}catch(t){if(P(t))throw n();throw t}})((()=>e.factory.bind(t)(n)),(()=>{return new Error((t=e.factoryType,i=n.currentRequest.serviceIdentifier.toString(),`It looks like there is a circular dependency in one of the '${t}' bindings. Please investigate bindings with service identifier '${i}'.`));var t,i}))},lt=(t,n,e)=>{let i;const r=n.childRequests;switch((t=>{let n=null;switch(t.type){case w.ConstantValue:case w.Function:n=t.cache;break;case w.Constructor:case w.Instance:n=t.implementationType;break;case w.DynamicValue:n=t.dynamicValue;break;case w.Provider:n=t.provider;break;case w.Factory:n=t.factory}if(null===n){const n=k(t.serviceIdentifier);throw new Error(`Invalid binding type: ${n}`)}})(e),e.type){case w.ConstantValue:case w.Function:i=e.cache;break;case w.Constructor:i=e.implementationType;break;case w.Instance:i=function(t,n,e,i){dt(t,n);const r=st(n,e,i);return X(r)?r.then((t=>ct(n,t))):ct(n,r)}(e,e.implementationType,r,ut(t));break;default:i=ht(e,n.parentContext)}return i},gt=(t,n,e)=>{let i=((t,n)=>n.scope===b.Singleton&&n.activated?n.cache:n.scope===b.Request&&t.has(n.id)?t.get(n.id):null)(t,n);return null!==i||(i=e(),((t,n,e)=>{n.scope===b.Singleton&&nt(n,e),n.scope===b.Request&&tt(t,n,e)})(t,n,i)),i},yt=(t,n,e)=>gt(t,e,(()=>{let i=lt(t,n,e);return i=X(i)?i.then((t=>pt(n,e,t))):pt(n,e,i),i}));function pt(t,n,e){let i=ft(t.parentContext,n,e);const r=wt(t.parentContext.container);let s,o=r.next();do{s=o.value;const n=t.parentContext,e=t.serviceIdentifier,a=bt(s,e);i=X(i)?vt(a,n,i):_t(a,n,i),o=r.next()}while(!0!==o.done&&!U(s).hasKey(t.serviceIdentifier));return i}const ft=(t,n,e)=>{let i;return i=\"function\"==typeof n.onActivation?n.onActivation(t,e):e,i},_t=(t,n,e)=>{let i=t.next();for(;!0!==i.done;){if(X(e=i.value(n,e)))return vt(t,n,e);i=t.next()}return e},vt=async(t,n,e)=>{let i=await e,r=t.next();for(;!0!==r.done;)i=await r.value(n,i),r=t.next();return i},bt=(t,n)=>{const e=t._activations;return e.hasKey(n)?e.get(n).values():[].values()},wt=t=>{const n=[t];let e=t.parent;for(;null!==e;)n.push(e),e=e.parent;return{next:()=>{const t=n.pop();return void 0!==t?{done:!1,value:t}:{done:!0,value:void 0}}}};const mt=(t,n)=>{const e=t.parentRequest;return null!==e&&(!!n(e)||mt(e,n))},At=t=>n=>{const e=e=>null!==e&&null!==e.target&&e.target.matchesTag(t)(n);return e.metaData=new W(t,n),e},St=At(s),It=t=>n=>{let e=null;if(null!==n){if(e=n.bindings[0],\"string\"==typeof t)return e.serviceIdentifier===t;{const e=n.bindings[0].implementationType;return t===e}}return!1};class Tt{_binding;constructor(t){this._binding=t}when(t){return this._binding.constraint=t,new Dt(this._binding)}whenTargetNamed(t){return this._binding.constraint=St(t),new Dt(this._binding)}whenTargetIsDefault(){return this._binding.constraint=t=>{if(null===t)return!1;return null!==t.target&&!t.target.isNamed()&&!t.target.isTagged()},new Dt(this._binding)}whenTargetTagged(t,n){return this._binding.constraint=At(t)(n),new Dt(this._binding)}whenInjectedInto(t){return this._binding.constraint=n=>null!==n&&It(t)(n.parentRequest),new Dt(this._binding)}whenParentNamed(t){return this._binding.constraint=n=>null!==n&&St(t)(n.parentRequest),new Dt(this._binding)}whenParentTagged(t,n){return this._binding.constraint=e=>null!==e&&At(t)(n)(e.parentRequest),new Dt(this._binding)}whenAnyAncestorIs(t){return this._binding.constraint=n=>null!==n&&mt(n,It(t)),new Dt(this._binding)}whenNoAncestorIs(t){return this._binding.constraint=n=>null!==n&&!mt(n,It(t)),new Dt(this._binding)}whenAnyAncestorNamed(t){return this._binding.constraint=n=>null!==n&&mt(n,St(t)),new Dt(this._binding)}whenNoAncestorNamed(t){return this._binding.constraint=n=>null!==n&&!mt(n,St(t)),new Dt(this._binding)}whenAnyAncestorTagged(t,n){return this._binding.constraint=e=>null!==e&&mt(e,At(t)(n)),new Dt(this._binding)}whenNoAncestorTagged(t,n){return this._binding.constraint=e=>null!==e&&!mt(e,At(t)(n)),new Dt(this._binding)}whenAnyAncestorMatches(t){return this._binding.constraint=n=>null!==n&&mt(n,t),new Dt(this._binding)}whenNoAncestorMatches(t){return this._binding.constraint=n=>null!==n&&!mt(n,t),new Dt(this._binding)}}class Dt{_binding;constructor(t){this._binding=t}onActivation(t){return this._binding.onActivation=t,new Tt(this._binding)}onDeactivation(t){return this._binding.onDeactivation=t,new Tt(this._binding)}}class Nt{_bindingWhenSyntax;_bindingOnSyntax;_binding;constructor(t){this._binding=t,this._bindingWhenSyntax=new Tt(this._binding),this._bindingOnSyntax=new Dt(this._binding)}when(t){return this._bindingWhenSyntax.when(t)}whenTargetNamed(t){return this._bindingWhenSyntax.whenTargetNamed(t)}whenTargetIsDefault(){return this._bindingWhenSyntax.whenTargetIsDefault()}whenTargetTagged(t,n){return this._bindingWhenSyntax.whenTargetTagged(t,n)}whenInjectedInto(t){return this._bindingWhenSyntax.whenInjectedInto(t)}whenParentNamed(t){return this._bindingWhenSyntax.whenParentNamed(t)}whenParentTagged(t,n){return this._bindingWhenSyntax.whenParentTagged(t,n)}whenAnyAncestorIs(t){return this._bindingWhenSyntax.whenAnyAncestorIs(t)}whenNoAncestorIs(t){return this._bindingWhenSyntax.whenNoAncestorIs(t)}whenAnyAncestorNamed(t){return this._bindingWhenSyntax.whenAnyAncestorNamed(t)}whenAnyAncestorTagged(t,n){return this._bindingWhenSyntax.whenAnyAncestorTagged(t,n)}whenNoAncestorNamed(t){return this._bindingWhenSyntax.whenNoAncestorNamed(t)}whenNoAncestorTagged(t,n){return this._bindingWhenSyntax.whenNoAncestorTagged(t,n)}whenAnyAncestorMatches(t){return this._bindingWhenSyntax.whenAnyAncestorMatches(t)}whenNoAncestorMatches(t){return this._bindingWhenSyntax.whenNoAncestorMatches(t)}onActivation(t){return this._bindingOnSyntax.onActivation(t)}onDeactivation(t){return this._bindingOnSyntax.onDeactivation(t)}}class Ct{_binding;constructor(t){this._binding=t}inRequestScope(){return this._binding.scope=b.Request,new Nt(this._binding)}inSingletonScope(){return this._binding.scope=b.Singleton,new Nt(this._binding)}inTransientScope(){return this._binding.scope=b.Transient,new Nt(this._binding)}}class xt{_bindingInSyntax;_bindingWhenSyntax;_bindingOnSyntax;_binding;constructor(t){this._binding=t,this._bindingWhenSyntax=new Tt(this._binding),this._bindingOnSyntax=new Dt(this._binding),this._bindingInSyntax=new Ct(t)}inRequestScope(){return this._bindingInSyntax.inRequestScope()}inSingletonScope(){return this._bindingInSyntax.inSingletonScope()}inTransientScope(){return this._bindingInSyntax.inTransientScope()}when(t){return this._bindingWhenSyntax.when(t)}whenTargetNamed(t){return this._bindingWhenSyntax.whenTargetNamed(t)}whenTargetIsDefault(){return this._bindingWhenSyntax.whenTargetIsDefault()}whenTargetTagged(t,n){return this._bindingWhenSyntax.whenTargetTagged(t,n)}whenInjectedInto(t){return this._bindingWhenSyntax.whenInjectedInto(t)}whenParentNamed(t){return this._bindingWhenSyntax.whenParentNamed(t)}whenParentTagged(t,n){return this._bindingWhenSyntax.whenParentTagged(t,n)}whenAnyAncestorIs(t){return this._bindingWhenSyntax.whenAnyAncestorIs(t)}whenNoAncestorIs(t){return this._bindingWhenSyntax.whenNoAncestorIs(t)}whenAnyAncestorNamed(t){return this._bindingWhenSyntax.whenAnyAncestorNamed(t)}whenAnyAncestorTagged(t,n){return this._bindingWhenSyntax.whenAnyAncestorTagged(t,n)}whenNoAncestorNamed(t){return this._bindingWhenSyntax.whenNoAncestorNamed(t)}whenNoAncestorTagged(t,n){return this._bindingWhenSyntax.whenNoAncestorTagged(t,n)}whenAnyAncestorMatches(t){return this._bindingWhenSyntax.whenAnyAncestorMatches(t)}whenNoAncestorMatches(t){return this._bindingWhenSyntax.whenNoAncestorMatches(t)}onActivation(t){return this._bindingOnSyntax.onActivation(t)}onDeactivation(t){return this._bindingOnSyntax.onDeactivation(t)}}class Rt{_binding;constructor(t){this._binding=t}to(t){return this._binding.type=w.Instance,this._binding.implementationType=t,new xt(this._binding)}toSelf(){if(\"function\"!=typeof this._binding.serviceIdentifier)throw new Error(\"The toSelf function can only be applied when a constructor is used as service identifier\");const t=this._binding.serviceIdentifier;return this.to(t)}toConstantValue(t){return this._binding.type=w.ConstantValue,this._binding.cache=t,this._binding.dynamicValue=null,this._binding.implementationType=null,this._binding.scope=b.Singleton,new Nt(this._binding)}toDynamicValue(t){return this._binding.type=w.DynamicValue,this._binding.cache=null,this._binding.dynamicValue=t,this._binding.implementationType=null,new xt(this._binding)}toConstructor(t){return this._binding.type=w.Constructor,this._binding.implementationType=t,this._binding.scope=b.Singleton,new Nt(this._binding)}toFactory(t){return this._binding.type=w.Factory,this._binding.factory=t,this._binding.scope=b.Singleton,new Nt(this._binding)}toFunction(t){if(\"function\"!=typeof t)throw new Error(\"Value provided to function binding must be a function!\");const n=this.toConstantValue(t);return this._binding.type=w.Function,this._binding.scope=b.Singleton,n}toAutoFactory(t){return this._binding.type=w.Factory,this._binding.factory=n=>()=>n.container.get(t),this._binding.scope=b.Singleton,new Nt(this._binding)}toAutoNamedFactory(t){return this._binding.type=w.Factory,this._binding.factory=n=>e=>n.container.getNamed(t,e),new Nt(this._binding)}toProvider(t){return this._binding.type=w.Provider,this._binding.provider=t,this._binding.scope=b.Singleton,new Nt(this._binding)}toService(t){this._binding.type=w.DynamicValue,Object.defineProperty(this._binding,\"cache\",{configurable:!0,enumerable:!0,get:()=>null,set(t){}}),this._binding.dynamicValue=n=>{try{return n.container.get(t)}catch(e){return n.container.getAsync(t)}},this._binding.implementationType=null}}class Et{bindings;activations;deactivations;middleware;moduleActivationStore;static of(t,n,e,i,r){const s=new Et;return s.bindings=t,s.middleware=n,s.deactivations=i,s.activations=e,s.moduleActivationStore=r,s}}class Mt{_map;constructor(){this._map=new Map}getMap(){return this._map}add(t,n){if(this._checkNonNulish(t),null==n)throw new Error(D);const e=this._map.get(t);void 0!==e?e.push(n):this._map.set(t,[n])}get(t){this._checkNonNulish(t);const n=this._map.get(t);if(void 0!==n)return n;throw new Error(N)}remove(t){if(this._checkNonNulish(t),!this._map.delete(t))throw new Error(N)}removeIntersection(t){this.traverse(((n,e)=>{const i=t.hasKey(n)?t.get(n):void 0;if(void 0!==i){const t=e.filter((t=>!i.some((n=>t===n))));this._setValue(n,t)}}))}removeByCondition(t){const n=[];return this._map.forEach(((e,i)=>{const r=[];for(const i of e){t(i)?n.push(i):r.push(i)}this._setValue(i,r)})),n}hasKey(t){return this._checkNonNulish(t),this._map.has(t)}clone(){const t=new Mt;return this._map.forEach(((n,e)=>{n.forEach((n=>{var i;t.add(e,\"object\"==typeof(i=n)&&null!==i&&\"clone\"in i&&\"function\"==typeof i.clone?n.clone():n)}))})),t}traverse(t){this._map.forEach(((n,e)=>{t(e,n)}))}_checkNonNulish(t){if(null==t)throw new Error(D)}_setValue(t,n){n.length>0?this._map.set(t,n):this._map.delete(t)}}class Bt{_map=new Map;remove(t){const n=this._map.get(t);return void 0===n?this._getEmptyHandlersStore():(this._map.delete(t),n)}addDeactivation(t,n,e){this._getModuleActivationHandlers(t).onDeactivations.add(n,e)}addActivation(t,n,e){this._getModuleActivationHandlers(t).onActivations.add(n,e)}clone(){const t=new Bt;return this._map.forEach(((n,e)=>{t._map.set(e,{onActivations:n.onActivations.clone(),onDeactivations:n.onDeactivations.clone()})})),t}_getModuleActivationHandlers(t){let n=this._map.get(t);return void 0===n&&(n=this._getEmptyHandlersStore(),this._map.set(t,n)),n}_getEmptyHandlersStore(){return{onActivations:new Mt,onDeactivations:new Mt}}}class Pt{id;parent;options;_middleware;_bindingDictionary;_activations;_deactivations;_snapshots;_metadataReader;_moduleActivationStore;constructor(t){const n=t||{};if(\"object\"!=typeof n)throw new Error(\"Invalid Container constructor argument. Container options must be an object.\");if(void 0===n.defaultScope)n.defaultScope=b.Transient;else if(n.defaultScope!==b.Singleton&&n.defaultScope!==b.Transient&&n.defaultScope!==b.Request)throw new Error('Invalid Container option. Default scope must be a string (\"singleton\" or \"transient\").');if(void 0===n.autoBindInjectable)n.autoBindInjectable=!1;else if(\"boolean\"!=typeof n.autoBindInjectable)throw new Error(\"Invalid Container option. Auto bind injectable must be a boolean\");if(void 0===n.skipBaseClassChecks)n.skipBaseClassChecks=!1;else if(\"boolean\"!=typeof n.skipBaseClassChecks)throw new Error(\"Invalid Container option. Skip base check must be a boolean\");this.options={autoBindInjectable:n.autoBindInjectable,defaultScope:n.defaultScope,skipBaseClassChecks:n.skipBaseClassChecks},this.id=S(),this._bindingDictionary=new Mt,this._snapshots=[],this._middleware=null,this._activations=new Mt,this._deactivations=new Mt,this.parent=null,this._metadataReader=new M,this._moduleActivationStore=new Bt}static merge(t,n,...e){const i=new Pt,r=[t,n,...e].map((t=>U(t))),s=U(i);return r.forEach((t=>{var n;n=s,t.traverse(((t,e)=>{e.forEach((t=>{n.add(t.serviceIdentifier,t.clone())}))}))})),i}load(...t){const n=this._getContainerModuleHelpersFactory();for(const e of t){const t=n(e.id);e.registry(t.bindFunction,t.unbindFunction,t.isboundFunction,t.rebindFunction,t.unbindAsyncFunction,t.onActivationFunction,t.onDeactivationFunction)}}async loadAsync(...t){const n=this._getContainerModuleHelpersFactory();for(const e of t){const t=n(e.id);await e.registry(t.bindFunction,t.unbindFunction,t.isboundFunction,t.rebindFunction,t.unbindAsyncFunction,t.onActivationFunction,t.onDeactivationFunction)}}unload(...t){t.forEach((t=>{const n=this._removeModuleBindings(t.id);this._deactivateSingletons(n),this._removeModuleHandlers(t.id)}))}async unloadAsync(...t){for(const n of t){const t=this._removeModuleBindings(n.id);await this._deactivateSingletonsAsync(t),this._removeModuleHandlers(n.id)}}bind(t){return this._bind(this._buildBinding(t))}rebind(t){return this.unbind(t),this.bind(t)}async rebindAsync(t){return await this.unbindAsync(t),this.bind(t)}unbind(t){if(this._bindingDictionary.hasKey(t)){const n=this._bindingDictionary.get(t);this._deactivateSingletons(n)}this._removeServiceFromDictionary(t)}async unbindAsync(t){if(this._bindingDictionary.hasKey(t)){const n=this._bindingDictionary.get(t);await this._deactivateSingletonsAsync(n)}this._removeServiceFromDictionary(t)}unbindAll(){this._bindingDictionary.traverse(((t,n)=>{this._deactivateSingletons(n)})),this._bindingDictionary=new Mt}async unbindAllAsync(){const t=[];this._bindingDictionary.traverse(((n,e)=>{t.push(this._deactivateSingletonsAsync(e))})),await Promise.all(t),this._bindingDictionary=new Mt}onActivation(t,n){this._activations.add(t,n)}onDeactivation(t,n){this._deactivations.add(t,n)}isBound(t){let n=this._bindingDictionary.hasKey(t);return!n&&this.parent&&(n=this.parent.isBound(t)),n}isCurrentBound(t){return this._bindingDictionary.hasKey(t)}isBoundNamed(t,n){return this.isBoundTagged(t,s,n)}isBoundTagged(t,n,s){let o=!1;if(this._bindingDictionary.hasKey(t)){const a=this._bindingDictionary.get(t),c=function(t,n,s){const o=Y(n,s),a=e(o);if(a.kind===i.unmanaged)throw new Error(\"Unexpected metadata when creating target\");const c=new r(\"\",a,\"Variable\"),d=new V(t);return new H(n,d,null,[],c)}(this,t,{customTag:{key:n,value:s},isMultiInject:!1});o=a.some((t=>t.constraint(c)))}return!o&&this.parent&&(o=this.parent.isBoundTagged(t,n,s)),o}snapshot(){this._snapshots.push(Et.of(this._bindingDictionary.clone(),this._middleware,this._activations.clone(),this._deactivations.clone(),this._moduleActivationStore.clone()))}restore(){const t=this._snapshots.pop();if(void 0===t)throw new Error(\"No snapshot available to restore.\");this._bindingDictionary=t.bindings,this._activations=t.activations,this._deactivations=t.deactivations,this._middleware=t.middleware,this._moduleActivationStore=t.moduleActivationStore}createChild(t){const n=new Pt(t||this.options);return n.parent=this,n}applyMiddleware(...t){const n=this._middleware?this._middleware:this._planAndResolve();this._middleware=t.reduce(((t,n)=>n(t)),n)}applyCustomMetadataReader(t){this._metadataReader=t}get(t){const n=this._getNotAllArgs(t,!1,!1);return this._getButThrowIfAsync(n)}async getAsync(t){const n=this._getNotAllArgs(t,!1,!1);return this._get(n)}getTagged(t,n,e){const i=this._getNotAllArgs(t,!1,!1,n,e);return this._getButThrowIfAsync(i)}async getTaggedAsync(t,n,e){const i=this._getNotAllArgs(t,!1,!1,n,e);return this._get(i)}getNamed(t,n){return this.getTagged(t,s,n)}async getNamedAsync(t,n){return this.getTaggedAsync(t,s,n)}getAll(t,n){const e=this._getAllArgs(t,n,!1);return this._getButThrowIfAsync(e)}async getAllAsync(t,n){const e=this._getAllArgs(t,n,!1);return this._getAll(e)}getAllTagged(t,n,e){const i=this._getNotAllArgs(t,!0,!1,n,e);return this._getButThrowIfAsync(i)}async getAllTaggedAsync(t,n,e){const i=this._getNotAllArgs(t,!0,!1,n,e);return this._getAll(i)}getAllNamed(t,n){return this.getAllTagged(t,s,n)}async getAllNamedAsync(t,n){return this.getAllTaggedAsync(t,s,n)}resolve(t){const n=this.isBound(t);n||this.bind(t).toSelf();const e=this.get(t);return n||this.unbind(t),e}tryGet(t){const n=this._getNotAllArgs(t,!1,!0);return this._getButThrowIfAsync(n)}async tryGetAsync(t){const n=this._getNotAllArgs(t,!1,!0);return this._get(n)}tryGetTagged(t,n,e){const i=this._getNotAllArgs(t,!1,!0,n,e);return this._getButThrowIfAsync(i)}async tryGetTaggedAsync(t,n,e){const i=this._getNotAllArgs(t,!1,!0,n,e);return this._get(i)}tryGetNamed(t,n){return this.tryGetTagged(t,s,n)}async tryGetNamedAsync(t,n){return this.tryGetTaggedAsync(t,s,n)}tryGetAll(t,n){const e=this._getAllArgs(t,n,!0);return this._getButThrowIfAsync(e)}async tryGetAllAsync(t,n){const e=this._getAllArgs(t,n,!0);return this._getAll(e)}tryGetAllTagged(t,n,e){const i=this._getNotAllArgs(t,!0,!0,n,e);return this._getButThrowIfAsync(i)}async tryGetAllTaggedAsync(t,n,e){const i=this._getNotAllArgs(t,!0,!0,n,e);return this._getAll(i)}tryGetAllNamed(t,n){return this.tryGetAllTagged(t,s,n)}async tryGetAllNamedAsync(t,n){return this.tryGetAllTaggedAsync(t,s,n)}_preDestroy(t,n){if(void 0!==t&&Reflect.hasMetadata(f,t)){const e=Reflect.getMetadata(f,t);return n[e.value]?.()}}_removeModuleHandlers(t){const n=this._moduleActivationStore.remove(t);this._activations.removeIntersection(n.onActivations),this._deactivations.removeIntersection(n.onDeactivations)}_removeModuleBindings(t){return this._bindingDictionary.removeByCondition((n=>n.moduleId===t))}_deactivate(t,n){const e=null==n?void 0:Object.getPrototypeOf(n).constructor;try{if(this._deactivations.hasKey(t.serviceIdentifier)){const i=this._deactivateContainer(n,this._deactivations.get(t.serviceIdentifier).values());if(X(i))return this._handleDeactivationError(i.then((async()=>this._propagateContainerDeactivationThenBindingAndPreDestroyAsync(t,n,e))),t.serviceIdentifier)}const i=this._propagateContainerDeactivationThenBindingAndPreDestroy(t,n,e);if(X(i))return this._handleDeactivationError(i,t.serviceIdentifier)}catch(n){if(n instanceof Error)throw new Error(E(k(t.serviceIdentifier),n.message))}}async _handleDeactivationError(t,n){try{await t}catch(t){if(t instanceof Error)throw new Error(E(k(n),t.message))}}_deactivateContainer(t,n){let e=n.next();for(;\"function\"==typeof e.value;){const i=e.value(t);if(X(i))return i.then((async()=>this._deactivateContainerAsync(t,n)));e=n.next()}}async _deactivateContainerAsync(t,n){let e=n.next();for(;\"function\"==typeof e.value;)await e.value(t),e=n.next()}_getContainerModuleHelpersFactory(){const t=t=>n=>{const e=this._buildBinding(n);return e.moduleId=t,this._bind(e)},n=()=>t=>{this.unbind(t)},e=()=>async t=>this.unbindAsync(t),i=()=>t=>this.isBound(t),r=n=>{const e=t(n);return t=>(this.unbind(t),e(t))},s=t=>(n,e)=>{this._moduleActivationStore.addActivation(t,n,e),this.onActivation(n,e)},o=t=>(n,e)=>{this._moduleActivationStore.addDeactivation(t,n,e),this.onDeactivation(n,e)};return a=>({bindFunction:t(a),isboundFunction:i(),onActivationFunction:s(a),onDeactivationFunction:o(a),rebindFunction:r(a),unbindAsyncFunction:e(),unbindFunction:n()})}_bind(t){return this._bindingDictionary.add(t.serviceIdentifier,t),new Rt(t)}_buildBinding(t){const n=this.options.defaultScope||b.Transient;return new I(t,n)}async _getAll(t){return Promise.all(this._get(t))}_get(t){const n={...t,contextInterceptor:t=>t,targetType:m.Variable};if(this._middleware){const t=this._middleware(n);if(null==t)throw new Error(\"Invalid return type in middleware. Middleware must return!\");return t}return this._planAndResolve()(n)}_getButThrowIfAsync(t){const n=this._get(t);if(Z(n))throw new Error(`You are attempting to construct ${function(t){return\"function\"==typeof t?`[function/class ${t.name||\"<anonymous>\"}]`:\"symbol\"==typeof t?t.toString():`'${t}'`}(t.serviceIdentifier)} in a synchronous way but it has asynchronous dependencies.`);return n}_getAllArgs(t,n,e){return{avoidConstraints:!n?.enforceBindingConstraints,isMultiInject:!0,isOptional:e,serviceIdentifier:t}}_getNotAllArgs(t,n,e,i,r){return{avoidConstraints:!1,isMultiInject:n,isOptional:e,key:i,serviceIdentifier:t,value:r}}_getPlanMetadataFromNextArgs(t){const n={isMultiInject:t.isMultiInject};return void 0!==t.key&&(n.customTag={key:t.key,value:t.value}),!0===t.isOptional&&(n.isOptional=!0),n}_planAndResolve(){return t=>{let n=Q(this._metadataReader,this,t.targetType,t.serviceIdentifier,this._getPlanMetadataFromNextArgs(t),t.avoidConstraints);n=t.contextInterceptor(n);const e=function(t){return ut(t.plan.rootRequest.requestScope)(t.plan.rootRequest)}(n);return e}}_deactivateIfSingleton(t){if(t.activated)return X(t.cache)?t.cache.then((n=>this._deactivate(t,n))):this._deactivate(t,t.cache)}_deactivateSingletons(t){for(const n of t){if(X(this._deactivateIfSingleton(n)))throw new Error(\"Attempting to unbind dependency with asynchronous destruction (@preDestroy or onDeactivation)\")}}async _deactivateSingletonsAsync(t){await Promise.all(t.map((async t=>this._deactivateIfSingleton(t))))}_propagateContainerDeactivationThenBindingAndPreDestroy(t,n,e){return this.parent?this._deactivate.bind(this.parent)(t,n):this._bindingDeactivationAndPreDestroy(t,n,e)}async _propagateContainerDeactivationThenBindingAndPreDestroyAsync(t,n,e){this.parent?await this._deactivate.bind(this.parent)(t,n):await this._bindingDeactivationAndPreDestroyAsync(t,n,e)}_removeServiceFromDictionary(t){try{this._bindingDictionary.remove(t)}catch(n){throw new Error(`Could not unbind serviceIdentifier: ${k(t)}`)}}_bindingDeactivationAndPreDestroy(t,n,e){if(\"function\"==typeof t.onDeactivation){const i=t.onDeactivation(n);if(X(i))return i.then((()=>this._preDestroy(e,n)))}return this._preDestroy(e,n)}async _bindingDeactivationAndPreDestroyAsync(t,n,e){\"function\"==typeof t.onDeactivation&&await t.onDeactivation(n),await this._preDestroy(e,n)}}class kt{id;registry;constructor(t){this.id=S(),this.registry=t}}class qt{id;registry;constructor(t){this.id=S(),this.registry=t}}function Ft(t,n,e,i){!function(t){if(void 0!==t)throw new Error(R)}(n),Ot(h,t,e.toString(),i)}function jt(t){let n=[];if(Array.isArray(t)){n=t;const e=function(t){const n=new Set;for(const e of t){if(n.has(e))return e;n.add(e)}}(n.map((t=>t.key)));if(void 0!==e)throw new Error(`${T} ${e.toString()}`)}else n=[t];return n}function Ot(t,n,e,i){const r=jt(i);let s={};Reflect.hasOwnMetadata(t,n)&&(s=Reflect.getMetadata(t,n));let o=s[e];if(void 0===o)o=[];else for(const t of o)if(r.some((n=>n.key===t.key)))throw new Error(`${T} ${t.key.toString()}`);o.push(...r),s[e]=o,Reflect.defineMetadata(t,s,n)}function $t(t){return(n,e,i)=>{\"number\"==typeof i?Ft(n,e,i,t):function(t,n,e){if(void 0!==t.prototype)throw new Error(R);Ot(l,t.constructor,n,e)}(n,e,t)}}function Vt(t,n){Reflect.decorate(t,n)}function Wt(t,n){return function(e,i){n(e,i,t)}}function Gt(t,n,e){\"number\"==typeof e?Vt([Wt(e,t)],n):\"string\"==typeof e?Reflect.decorate([t],n,e):Vt([t],n)}function Kt(){return function(t){if(Reflect.hasOwnMetadata(g,t))throw new Error(\"Cannot apply @injectable decorator multiple times.\");const n=Reflect.getMetadata(y,t)||[];return Reflect.defineMetadata(g,n,t),t}}function Ht(t,n){return $t(new W(t,n))}function Ut(t){return $t(new W(s,t))}function Lt(t){return n=>(e,i,r)=>{if(void 0===n){const t=\"function\"==typeof e?e.name:e.constructor.name;throw new Error(`@inject called with undefined this could mean that the class ${t} has a circular dependency problem. You can use a LazyServiceIdentifer to overcome this limitation.`)}$t(new W(t,n))(e,i,r)}}const Yt=Lt(d);function zt(){return $t(new W(c,!0))}function Jt(){return function(t,n,e){Ft(t,n,e,new W(a,!0))}}const Qt=Lt(u);function Xt(t){return function(n,e,i){Ft(n,e,i,new W(o,t))}}function Zt(t,n){return()=>(e,i)=>{const r=new W(t,i);if(Reflect.hasOwnMetadata(t,e.constructor))throw new Error(n);Reflect.defineMetadata(t,r,e.constructor)}}const tn=Zt(p,\"Cannot apply @postConstruct decorator multiple times in the same class\"),nn=Zt(f,\"Cannot apply @preDestroy decorator multiple times in the same class\"),en=t,rn=v;export{qt as AsyncContainerModule,b as BindingScopeEnum,w as BindingTypeEnum,Pt as Container,kt as ContainerModule,en as LazyServiceIdentifer,rn as METADATA_KEY,M as MetadataReader,m as TargetTypeEnum,$t as createTaggedDecorator,Gt as decorate,k as getServiceIdentifierAsString,S as id,Yt as inject,Kt as injectable,rt as multiBindToService,Qt as multiInject,Ut as named,St as namedConstraint,zt as optional,tn as postConstruct,nn as preDestroy,Ht as tagged,At as taggedConstraint,Xt as targetName,mt as traverseAncerstors,It as typeConstraint,Jt as unmanaged};\n//# sourceMappingURL=index.js.map\n","/**\r\n * Dependency Injection Tokens\r\n *\r\n * This file defines all the injection tokens used throughout the application.\r\n * Using symbols ensures type-safe dependency injection and prevents naming collisions.\r\n *\r\n * Inspired by Angular's DI token system.\r\n */\r\n\r\n/**\r\n * Core Service Tokens\r\n */\r\nexport const TOKENS = {\r\n // API & HTTP Clients\r\n APIClient: Symbol.for('APIClient'),\r\n\r\n // Blockchain & Web3\r\n EthersAdapter: Symbol.for('EthersAdapter'),\r\n WalletService: Symbol.for('WalletService'),\r\n\r\n // Payment Services\r\n MoonPayService: Symbol.for('MoonPayService'),\r\n\r\n // Tool Processing\r\n ToolCallProcessor: Symbol.for('ToolCallProcessor'),\r\n FunctionCallExecutor: Symbol.for('FunctionCallExecutor'),\r\n\r\n // Executors\r\n ExecutorRegistry: Symbol.for('ExecutorRegistry'),\r\n APIExecutor: Symbol.for('APIExecutor'),\r\n ContractExecutor: Symbol.for('ContractExecutor'),\r\n FiatExecutor: Symbol.for('FiatExecutor'),\r\n AP2Executor: Symbol.for('AP2Executor'),\r\n\r\n // Renderers\r\n RendererRegistry: Symbol.for('RendererRegistry'),\r\n APIRenderer: Symbol.for('APIRenderer'),\r\n ContractRenderer: Symbol.for('ContractRenderer'),\r\n FiatRenderer: Symbol.for('FiatRenderer'),\r\n AP2Renderer: Symbol.for('AP2Renderer'),\r\n\r\n // Configuration\r\n SDKConfig: Symbol.for('SDKConfig'),\r\n DomainHeaders: Symbol.for('DomainHeaders'),\r\n Authorization: Symbol.for('Authorization'),\r\n APIBaseUrl: Symbol.for('APIBaseUrl'),\r\n ProxyMode: Symbol.for('ProxyMode'),\r\n} as const;\r\n\r\n/**\r\n * Type-safe token accessor\r\n */\r\nexport type TokenType = typeof TOKENS;\r\nexport type TokenKey = keyof TokenType;\r\n\r\n/**\r\n * Helper to get token by key\r\n */\r\nexport function getToken(key: TokenKey): symbol {\r\n return TOKENS[key];\r\n}\r\n","'use strict';\n\n/**\n * Create a bound version of a function with a specified `this` context\n *\n * @param {Function} fn - The function to bind\n * @param {*} thisArg - The value to be passed as the `this` parameter\n * @returns {Function} A new function that will call the original function with the specified `this` context\n */\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is an empty object (safely handles Buffers)\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an empty object, otherwise false\n */\nconst isEmptyObject = (val) => {\n // Early return for non-objects or Buffers to prevent RangeError\n if (!isObject(val) || isBuffer(val)) {\n return false;\n }\n\n try {\n return Object.keys(val).length === 0 && Object.getPrototypeOf(val) === Object.prototype;\n } catch (e) {\n // Fallback for any other objects that might cause RangeError with Object.keys()\n return false;\n }\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Buffer check\n if (isBuffer(obj)) {\n return;\n }\n\n // Iterate over object keys\n const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n if (isBuffer(obj)){\n return null;\n }\n\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless, skipUndefined} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else if (!skipUndefined || !isUndefined(val)) {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object<any, any>} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array<boolean>}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n //Buffer check\n if (isBuffer(source)) {\n return source;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isEmptyObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\n return {\n // Standard\n message: this.message,\n name: this.name,\n // Microsoft\n description: this.description,\n number: this.number,\n // Mozilla\n fileName: this.fileName,\n lineNumber: this.lineNumber,\n columnNumber: this.columnNumber,\n stack: this.stack,\n // Axios\n config: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n const msg = error && error.message ? error.message : 'Error';\n\n // Prefer explicit code; otherwise copy the low-level error's code (e.g. ECONNREFUSED)\n const errCode = code == null && error ? error.code : code;\n AxiosError.call(axiosError, msg, errCode, config, request, response);\n\n // Chain the original error on the standard field; non-enumerable to avoid JSON noise\n if (error && axiosError.cause == null) {\n Object.defineProperty(axiosError, 'cause', { value: error, configurable: true });\n }\n\n axiosError.name = (error && error.name) || 'Error';\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array<any>} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object<any, any>} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object<string, any>} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (utils.isBoolean(value)) {\n return value.toString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array<String|Number>} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object<string, any>} params - The parameters to be converted to a FormData object.\n * @param {Object<string, any>} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\n replace(/%3A/gi, ':').\n replace(/%24/g, '$').\n replace(/%2C/gi, ',').\n replace(/%20/g, '+');\n}\n\n/**\n * Build a URL by appending params to the end\n *\n * @param {string} url The base of the url (e.g., http://www.google.com)\n * @param {object} [params] The params to be appended\n * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\n this.handlers = [];\n }\n\n /**\n * Add a new interceptor to the stack\n *\n * @param {Function} fulfilled The function to handle `then` for a `Promise`\n * @param {Function} rejected The function to handle `reject` for a `Promise`\n *\n * @return {Number} An ID used to remove interceptor later\n */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\n });\n return this.handlers.length - 1;\n }\n\n /**\n * Remove an interceptor from the stack\n *\n * @param {Number} id The ID that was returned by `use`\n *\n * @returns {void}\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\n }\n }\n\n /**\n * Iterate over all the registered interceptors\n *\n * This method is particularly useful for skipping over any\n * interceptors that may have become `null` calling `eject`.\n *\n * @param {Function} fn The function to call for each interceptor\n *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n * nativescript\n * navigator.product -> 'NativeScript' or 'NS'\n *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), {\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n },\n ...options\n });\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array<any>} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object<string, any> | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data, this.parseReviver);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\n\n return data;\n }],\n\n /**\n * A timeout in milliseconds to abort a request. If set to 0 (default) a\n * timeout is not created.\n */\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\n 'age', 'authorization', 'content-length', 'content-type', 'etag',\n 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',\n 'last-modified', 'location', 'max-forwards', 'proxy-authorization',\n 'referer', 'retry-after', 'user-agent'\n]);\n\n/**\n * Parse headers into an object\n *\n * ```\n * Date: Wed, 27 Aug 2014 08:58:49 GMT\n * Content-Type: application/json\n * Connection: keep-alive\n * Transfer-Encoding: chunked\n * ```\n *\n * @param {String} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.js';\n\n/**\n * Resolve or reject a Promise based on response status.\n *\n * @param {Function} resolve A function that resolves the promise.\n * @param {Function} reject A function that rejects the promise.\n * @param {object} response The response.\n *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn(...args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure, sameSite) {\n if (typeof document === 'undefined') return;\n\n const cookie = [`${name}=${encodeURIComponent(value)}`];\n\n if (utils.isNumber(expires)) {\n cookie.push(`expires=${new Date(expires).toUTCString()}`);\n }\n if (utils.isString(path)) {\n cookie.push(`path=${path}`);\n }\n if (utils.isString(domain)) {\n cookie.push(`domain=${domain}`);\n }\n if (secure === true) {\n cookie.push('secure');\n }\n if (utils.isString(sameSite)) {\n cookie.push(`SameSite=${sameSite}`);\n }\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n if (typeof document === 'undefined') return null;\n const match = document.cookie.match(new RegExp('(?:^|; )' + name + '=([^;]*)'));\n return match ? decodeURIComponent(match[1]) : null;\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000, '/');\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"<scheme>://\" or \"//\" (protocol-relative URL).\n // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed\n // by any combination of letters, digits, plus, period, or hyphen.\n return /^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(url);\n}\n","'use strict';\n\n/**\n * Creates a new URL by combining the specified URLs\n *\n * @param {string} baseURL The base URL\n * @param {string} relativeURL The relative URL\n *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\n\n/**\n * Config-specific merge-function which creates a new config-object\n * by merging two configuration objects together.\n *\n * @param {Object} config1\n * @param {Object} config2\n *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop, caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop, caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop, caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b, prop) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true)\n };\n\n utils.forEach(Object.keys({...config1, ...config2}), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let { data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // browser handles it\n } else if (utils.isFunction(data.getHeaders)) {\n // Node.js FormData (like form-data package)\n const formHeaders = data.getHeaders();\n // Only set safe headers to avoid overwriting security headers\n const allowedHeaders = ['content-type', 'content-length'];\n Object.entries(formHeaders).forEach(([key, val]) => {\n if (allowedHeaders.includes(key.toLowerCase())) {\n headers.set(key, val);\n }\n });\n }\n } \n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\n request.onreadystatechange = function handleLoad() {\n if (!request || request.readyState !== 4) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\n }\n\n // Handle browser request cancellation (as opposed to a manual cancellation)\n request.onabort = function handleAbort() {\n if (!request) {\n return;\n }\n\n reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError(event) {\n // Browsers deliver a ProgressEvent in XHR onerror\n // (message may be empty; when present, surface it)\n // See https://developer.mozilla.org/docs/Web/API/XMLHttpRequest/error_event\n const msg = event && event.message ? event.message : 'Network Error';\n const err = new AxiosError(msg, AxiosError.ERR_NETWORK, config, request);\n // attach the underlying event for consumers who want details\n err.event = event || null;\n reject(err);\n request = null;\n };\n \n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst {isFunction} = utils;\n\nconst globalFetchAPI = (({Request, Response}) => ({\n Request, Response\n}))(utils.global);\n\nconst {\n ReadableStream, TextEncoder\n} = utils.global;\n\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst factory = (env) => {\n env = utils.merge.call({\n skipUndefined: true\n }, globalFetchAPI, env);\n\n const {fetch: envFetch, Request, Response} = env;\n const isFetchSupported = envFetch ? isFunction(envFetch) : typeof fetch === 'function';\n const isRequestSupported = isFunction(Request);\n const isResponseSupported = isFunction(Response);\n\n if (!isFetchSupported) {\n return false;\n }\n\n const isReadableStreamSupported = isFetchSupported && isFunction(ReadableStream);\n\n const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Request(str).arrayBuffer())\n );\n\n const supportsRequestStream = isRequestSupported && isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n });\n\n const supportsResponseStream = isResponseSupported && isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n const resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n };\n\n isFetchSupported && ((() => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = (res, config) => {\n let method = res && res[type];\n\n if (method) {\n return method.call(res);\n }\n\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n })());\n\n const getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if (utils.isBlob(body)) {\n return body.size;\n }\n\n if (utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if (utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if (utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if (utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n }\n\n const resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n }\n\n return async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n let _fetch = envFetch || fetch;\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request = null;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = isRequestSupported && \"credentials\" in Request.prototype;\n\n const resolvedOptions = {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n };\n\n request = isRequestSupported && new Request(url, resolvedOptions);\n\n let response = await (isRequestSupported ? _fetch(request, fetchOptions) : _fetch(url, resolvedOptions));\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n }\n}\n\nconst seedCache = new Map();\n\nexport const getFetch = (config) => {\n let env = (config && config.env) || {};\n const {fetch, Request, Response} = env;\n const seeds = [\n Request, Response, fetch\n ];\n\n let len = seeds.length, i = len,\n seed, target, map = seedCache;\n\n while (i--) {\n seed = seeds[i];\n target = map.get(seed);\n\n target === undefined && map.set(seed, target = (i ? new Map() : factory(env)))\n\n map = target;\n }\n\n return target;\n};\n\nconst adapter = getFetch();\n\nexport default adapter;\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport * as fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\n/**\n * Known adapters mapping.\n * Provides environment-specific adapters for Axios:\n * - `http` for Node.js\n * - `xhr` for browsers\n * - `fetch` for fetch API-based requests\n * \n * @type {Object<string, Function|Object>}\n */\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: {\n get: fetchAdapter.getFetch,\n }\n};\n\n// Assign adapter names for easier debugging and identification\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', { value });\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', { value });\n }\n});\n\n/**\n * Render a rejection reason string for unknown or unsupported adapters\n * \n * @param {string} reason\n * @returns {string}\n */\nconst renderReason = (reason) => `- ${reason}`;\n\n/**\n * Check if the adapter is resolved (function, null, or false)\n * \n * @param {Function|null|false} adapter\n * @returns {boolean}\n */\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\n/**\n * Get the first suitable adapter from the provided list.\n * Tries each adapter in order until a supported one is found.\n * Throws an AxiosError if no adapter is suitable.\n * \n * @param {Array<string|Function>|string|Function} adapters - Adapter(s) by name or function.\n * @param {Object} config - Axios request configuration\n * @throws {AxiosError} If no suitable adapter is available\n * @returns {Function} The resolved adapter function\n */\nfunction getAdapter(adapters, config) {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const { length } = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter && (utils.isFunction(adapter) || (adapter = adapter.get(config)))) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n}\n\n/**\n * Exports Axios adapters and utility to resolve an adapter\n */\nexport default {\n /**\n * Resolve an adapter from a list of adapter names or functions.\n * @type {Function}\n */\n getAdapter,\n\n /**\n * Exposes all known adapters\n * @type {Object<string, Function|Object>}\n */\n adapters: knownAdapters\n};\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\n }\n}\n\n/**\n * Dispatch a request to the server using the configured adapter.\n *\n * @param {object} config The config that is to be used for the request\n *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(config.adapter || defaults.adapter, config);\n\n return adapter(config).then(function onAdapterResolution(response) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n response.data = transformData.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\n\n return response;\n }, function onAdapterRejection(reason) {\n if (!isCancel(reason)) {\n throwIfCancellationRequested(config);\n\n // Transform response data\n if (reason && reason.response) {\n reason.response.data = transformData.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.13.2\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(instanceConfig) {\n this.defaults = instanceConfig || {};\n this.interceptors = {\n request: new InterceptorManager(),\n response: new InterceptorManager()\n };\n }\n\n /**\n * Dispatch a request\n *\n * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift(...requestInterceptorChain);\n chain.push(...responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\n}\n\n// Provide aliases for supported request methods\nutils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {\n /*eslint func-names:0*/\n Axios.prototype[method] = function(url, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\n\n/**\n * Syntactic sugar for invoking a function and expanding an array for arguments.\n *\n * Common use case would be to use `Function.prototype.apply`.\n *\n * ```js\n * function f(x, y, z) {}\n * var args = [1, 2, 3];\n * f.apply(null, args);\n * ```\n *\n * With `spread` this example can be re-written.\n *\n * ```js\n * spread(function(x, y, z) {})([1, 2, 3]);\n * ```\n *\n * @param {Function} callback\n *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n WebServerIsDown: 521,\n ConnectionTimedOut: 522,\n OriginIsUnreachable: 523,\n TimeoutOccurred: 524,\n SslHandshakeFailed: 525,\n InvalidSslCertificate: 526,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n","import { injectable, inject, optional } from 'inversify';\r\nimport axios, { AxiosInstance } from \"axios\";\r\nimport { Message, KnowledgeContext } from \"../types\";\r\nimport { getApiBaseUrl } from \"../lib/utils\";\r\nimport { IAPIClient } from \"../interfaces/IAPIClient\";\r\nimport { TOKENS } from \"../core/tokens\";\r\n\r\n// API prefix - can be overridden by environment variable at build time\r\nexport const API_PREFIX = process.env.VITE_API_BASE_URL || \"/api/v1\";\r\n\r\n// Cache entry type for storing API responses by projectId\r\ninterface CacheEntry<T> {\r\n projectId: string;\r\n data: T;\r\n}\r\n\r\n@injectable()\r\nexport class APIService implements IAPIClient {\r\n private client: AxiosInstance;\r\n\r\n // In-memory cache for static data (cleared on page refresh)\r\n private parsedEndpointsCache: CacheEntry<any> | null = null;\r\n private parsedContractsCache: CacheEntry<any> | null = null;\r\n private ap2ToolsCache: CacheEntry<any> | null = null;\r\n\r\n // Pending request promises for deduplication (prevents duplicate in-flight requests)\r\n private pendingEndpointsRequest: Map<string, Promise<any>> = new Map();\r\n private pendingContractsRequest: Map<string, Promise<any>> = new Map();\r\n private pendingAp2ToolsRequest: Map<string, Promise<any>> = new Map();\r\n\r\n constructor(\r\n @inject(TOKENS.APIBaseUrl) @optional() baseUrl?: string,\r\n @inject(TOKENS.Authorization) @optional() authorization?: string\r\n ) {\r\n const defaultHeaders: Record<string, string> = {\r\n \"Content-Type\": \"application/json\",\r\n };\r\n\r\n if (authorization) {\r\n defaultHeaders[\"x-api-key\"] = authorization;\r\n }\r\n\r\n this.client = axios.create({\r\n baseURL: baseUrl || getApiBaseUrl(),\r\n headers: defaultHeaders,\r\n });\r\n }\r\n\r\n // AI Chat Service\r\n async chat(\r\n projectId: string,\r\n data: {\r\n sessionId?: string;\r\n aiConfigId: string;\r\n messages: Array<{ role: string; content: string }>;\r\n includeContext: boolean;\r\n executeTools: boolean;\r\n knowledgeContext?: KnowledgeContext[];\r\n }\r\n ) {\r\n const response = await this.client.post(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/chat`,\r\n data,\r\n {\r\n headers: {\r\n \"X-Project-ID\": projectId,\r\n },\r\n }\r\n );\r\n return response.data;\r\n }\r\n\r\n // AI Chat Service with SSE Streaming\r\n async chatStream(\r\n projectId: string,\r\n data: {\r\n sessionId?: string;\r\n aiConfigId: string;\r\n messages: Array<{ role: string; content: string }>;\r\n includeContext: boolean;\r\n executeTools: boolean;\r\n knowledgeContext?: KnowledgeContext[];\r\n },\r\n onMessage: (data: string) => void,\r\n onError?: (error: Error) => void,\r\n onComplete?: (sessionId?: string) => void,\r\n onToolCall?: (toolCalls: any[]) => void\r\n ): Promise<() => void> {\r\n const url = `${this.client.defaults.baseURL}${API_PREFIX}/sdk-api/projects/${projectId}/chat/stream`;\r\n\r\n // Create a POST request with EventSource workaround\r\n const controller = new AbortController();\r\n\r\n fetch(url, {\r\n method: \"POST\",\r\n headers: {\r\n ...((this.client.defaults.headers as Record<string, string>) || {}),\r\n \"Content-Type\": \"application/json\",\r\n Accept: \"text/event-stream\",\r\n \"Cache-Control\": \"no-cache\",\r\n \"X-Project-ID\": projectId,\r\n },\r\n body: JSON.stringify(data),\r\n signal: controller.signal,\r\n })\r\n .then((response) => {\r\n if (!response.ok) {\r\n throw new Error(`HTTP error! status: ${response.status}`);\r\n }\r\n\r\n const reader = response.body?.getReader();\r\n const decoder = new TextDecoder();\r\n\r\n if (!reader) {\r\n throw new Error(\"No response body\");\r\n }\r\n\r\n const processStream = async () => {\r\n let buffer = \"\";\r\n let finalSessionId: string | undefined;\r\n\r\n while (true) {\r\n const { done, value } = await reader.read();\r\n\r\n if (done) {\r\n if (onComplete) onComplete(finalSessionId);\r\n break;\r\n }\r\n\r\n // Use flush: true to ensure immediate processing\r\n buffer += decoder.decode(value, { stream: true });\r\n const lines = buffer.split(\"\\n\");\r\n buffer = lines.pop() || \"\";\r\n\r\n for (const line of lines) {\r\n if (line.startsWith(\"data: \")) {\r\n const data = line.slice(6);\r\n\r\n if (data === \"[DONE]\") {\r\n if (onComplete) onComplete(finalSessionId);\r\n return;\r\n }\r\n\r\n try {\r\n // Try to parse as JSON first for structured data\r\n const parsed = JSON.parse(data);\r\n\r\n if (parsed.type === \"done\") {\r\n // Handle completion with sessionId\r\n finalSessionId = parsed.sessionId;\r\n if (onComplete) onComplete(finalSessionId);\r\n return;\r\n } else if (parsed.type === \"content\" && parsed.data) {\r\n // Handle the correct format: {\"type\":\"content\",\"data\":\"字符\"}\r\n onMessage(parsed.data);\r\n } else if (\r\n parsed.type === \"tool_calls_complete\" &&\r\n parsed.data\r\n ) {\r\n // Handle completed tool calls\r\n console.log(\r\n \"[TermiX SDK] Received tool calls:\",\r\n parsed.data\r\n );\r\n if (onToolCall) {\r\n onToolCall(parsed.data);\r\n }\r\n } else if (parsed.type === \"tool_call_progress\") {\r\n // Optionally handle progress updates (currently we wait for complete)\r\n } else if (parsed.content) {\r\n // Handle legacy content format\r\n onMessage(parsed.content);\r\n } else if (parsed.delta && parsed.delta.content) {\r\n // Handle OpenAI-style delta format\r\n onMessage(parsed.delta.content);\r\n }\r\n } catch (err) {\r\n // If not JSON, treat as plain text content\r\n if (data.trim()) {\r\n onMessage(data);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Force a small delay to allow UI updates\r\n await new Promise((resolve) => setTimeout(resolve, 0));\r\n }\r\n };\r\n\r\n processStream().catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n })\r\n .catch((error) => {\r\n if (onError) onError(error);\r\n });\r\n\r\n // Return cleanup function\r\n return () => {\r\n controller.abort();\r\n };\r\n }\r\n\r\n // Knowledge Service\r\n async searchKnowledge(projectId: string, query: string) {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/knowledge-base/search`,\r\n {\r\n params: { q: query },\r\n }\r\n );\r\n return response.data.results; // Unwrap results array\r\n }\r\n\r\n async getAllKnowledge(projectId: string) {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/knowledge/${projectId}`\r\n );\r\n return response.data;\r\n }\r\n\r\n // AP2 Tools Service (cached by projectId with request deduplication)\r\n async getAP2Tools(projectId: string) {\r\n // Return cached data if projectId matches\r\n if (this.ap2ToolsCache?.projectId === projectId) {\r\n return this.ap2ToolsCache.data;\r\n }\r\n\r\n // Check if there's already a pending request for this projectId\r\n const pendingRequest = this.pendingAp2ToolsRequest.get(projectId);\r\n if (pendingRequest) {\r\n return pendingRequest;\r\n }\r\n\r\n // Create a new request promise\r\n const requestPromise = (async () => {\r\n try {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/ap2/tools`\r\n );\r\n\r\n // Cache the response\r\n this.ap2ToolsCache = { projectId, data: response.data };\r\n return response.data;\r\n } finally {\r\n // Remove the pending request when done\r\n this.pendingAp2ToolsRequest.delete(projectId);\r\n }\r\n })();\r\n\r\n // Store the pending request\r\n this.pendingAp2ToolsRequest.set(projectId, requestPromise);\r\n return requestPromise;\r\n }\r\n\r\n // AP2 Config Service\r\n async getAP2Config(projectId: string) {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/ap2/config`\r\n );\r\n return response.data;\r\n }\r\n\r\n // MCP Tools Service (cached by projectId with request deduplication)\r\n async getParsedEndpoints(projectId: string) {\r\n // Return cached data if projectId matches\r\n if (this.parsedEndpointsCache?.projectId === projectId) {\r\n return this.parsedEndpointsCache.data;\r\n }\r\n\r\n // Check if there's already a pending request for this projectId\r\n const pendingRequest = this.pendingEndpointsRequest.get(projectId);\r\n if (pendingRequest) {\r\n return pendingRequest;\r\n }\r\n\r\n // Create a new request promise\r\n const requestPromise = (async () => {\r\n try {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/mcp-tools/${projectId}/parsed-endpoints`\r\n );\r\n\r\n // Cache the response\r\n this.parsedEndpointsCache = { projectId, data: response.data };\r\n return response.data;\r\n } finally {\r\n // Remove the pending request when done\r\n this.pendingEndpointsRequest.delete(projectId);\r\n }\r\n })();\r\n\r\n // Store the pending request\r\n this.pendingEndpointsRequest.set(projectId, requestPromise);\r\n return requestPromise;\r\n }\r\n\r\n async getParsedContracts(projectId: string) {\r\n // Return cached data if projectId matches\r\n if (this.parsedContractsCache?.projectId === projectId) {\r\n return this.parsedContractsCache.data;\r\n }\r\n\r\n // Check if there's already a pending request for this projectId\r\n const pendingRequest = this.pendingContractsRequest.get(projectId);\r\n if (pendingRequest) {\r\n return pendingRequest;\r\n }\r\n\r\n // Create a new request promise\r\n const requestPromise = (async () => {\r\n try {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/mcp-tools/${projectId}/parsed-contracts`\r\n );\r\n\r\n // Cache the response\r\n this.parsedContractsCache = { projectId, data: response.data };\r\n return response.data;\r\n } finally {\r\n // Remove the pending request when done\r\n this.pendingContractsRequest.delete(projectId);\r\n }\r\n })();\r\n\r\n // Store the pending request\r\n this.pendingContractsRequest.set(projectId, requestPromise);\r\n return requestPromise;\r\n }\r\n\r\n // AI Config Service - Get config details including greeting\r\n async getAIConfig(projectId: string, configId: string) {\r\n try {\r\n // Try the single config endpoint first\r\n try {\r\n const response = await this.client.get(\r\n `${API_PREFIX}/sdk-api/configs/${configId}`\r\n );\r\n return response.data;\r\n } catch (err) {\r\n // If single endpoint fails, try fetching all configs and filter\r\n console.log(\r\n \"[TermiX SDK] Single config endpoint failed, trying batch endpoint\"\r\n );\r\n const allConfigsResponse = await this.client.get(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/configs`\r\n );\r\n if (allConfigsResponse.data && Array.isArray(allConfigsResponse.data)) {\r\n const config = allConfigsResponse.data.find(\r\n (c: any) => c._id === configId || c.id === configId\r\n );\r\n return config || null;\r\n }\r\n return null;\r\n }\r\n } catch (error) {\r\n console.warn(\"Failed to fetch AI config:\", error);\r\n return null;\r\n }\r\n }\r\n\r\n // AP2 Payment Service\r\n async submitPaymentSignature(\r\n projectId: string,\r\n sessionId: string,\r\n data: {\r\n sessionId: string;\r\n signature: string;\r\n mandateType: string;\r\n }\r\n ) {\r\n const response = await this.client.post(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/ap2/payments/${sessionId}/signature`,\r\n data\r\n );\r\n return response.data;\r\n }\r\n\r\n async submitPaymentTxHash(\r\n projectId: string,\r\n sessionId: string,\r\n txHash: string\r\n ) {\r\n const response = await this.client.post(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/ap2/payments/${sessionId}/tx-hash`,\r\n { txHash }\r\n );\r\n return response.data;\r\n }\r\n\r\n // AP2 Tools Execution Service\r\n async executeAP2Tool(\r\n projectId: string,\r\n data: {\r\n toolName: string;\r\n params: any;\r\n sessionId?: string;\r\n }\r\n ) {\r\n const response = await this.client.post(\r\n `${API_PREFIX}/sdk-api/projects/${projectId}/ap2/tools/execute`,\r\n data\r\n );\r\n return response.data;\r\n }\r\n}\r\n","/**\r\n * MoonPay Integration Service\r\n * Handles MoonPay Web SDK integration with proper event handling\r\n */\r\n\r\nimport { injectable, optional, inject } from 'inversify';\r\nimport { TOKENS } from '../core/tokens';\r\n\r\nexport interface MoonPayTransactionEvent {\r\n type: string;\r\n transactionId?: string;\r\n transactionStatus?: string;\r\n status?: string;\r\n id?: string;\r\n failureReason?: string;\r\n data?: any;\r\n}\r\n\r\nexport interface MoonPayConfig {\r\n apiKey?: string;\r\n environment?: 'sandbox' | 'production';\r\n baseUrl?: {\r\n buy: string;\r\n sell: string;\r\n api: string;\r\n };\r\n}\r\n\r\n/**\r\n * MoonPay Web SDK Types\r\n */\r\ninterface MoonPaySDK {\r\n (config: MoonPayWidgetConfig): MoonPayWidget;\r\n}\r\n\r\ninterface MoonPayWidget {\r\n show(): void;\r\n close(): void;\r\n}\r\n\r\ninterface MoonPayWidgetConfig {\r\n flow: 'buy' | 'sell';\r\n environment?: 'sandbox' | 'production';\r\n params: {\r\n apiKey: string;\r\n currencyCode?: string;\r\n baseCurrencyCode?: string;\r\n baseCurrencyAmount?: string;\r\n quoteCurrencyAmount?: string;\r\n walletAddress?: string;\r\n refundWalletAddress?: string;\r\n redirectURL?: string;\r\n colorCode?: string;\r\n theme?: 'light' | 'dark';\r\n [key: string]: any;\r\n };\r\n variant?: 'overlay' | 'new-window' | 'embedded';\r\n handlers?: {\r\n onReady?: () => Promise<void>;\r\n onClose?: () => Promise<void>;\r\n onLogin?: (props: any) => Promise<void>;\r\n onTransactionCreated?: (props: any) => Promise<void>;\r\n onTransactionCompleted?: (props: any) => Promise<void>;\r\n onInitiateDeposit?: (props: any) => Promise<void>;\r\n onUnsupportedRegion?: () => Promise<void>;\r\n };\r\n}\r\n\r\n/**\r\n * Interface for MoonPay service operations\r\n */\r\nexport interface IMoonPayService {\r\n createBuyTransaction(params: any): Promise<any>;\r\n createSellTransaction(params: any): Promise<any>;\r\n getTransactionStatus(transactionId: string): any;\r\n cancelTransaction(transactionId: string): boolean;\r\n getActiveTransactions(): string[];\r\n}\r\n\r\n@injectable()\r\nexport class MoonPayService implements IMoonPayService {\r\n private config: MoonPayConfig;\r\n private activeTransactions: Map<string, any> = new Map();\r\n private sdkLoaded: boolean = false;\r\n private sdkLoadPromise: Promise<void> | null = null;\r\n\r\n constructor(@inject(TOKENS.SDKConfig) @optional() sdkConfig?: any) {\r\n // Get API key from SDK config, environment variable, or use default\r\n let apiKey = sdkConfig?.moonpayApiKey || 'pk_live_mKGFVziJOjM6aQZpAKHXGnflxRq1X1q';\r\n\r\n // Try to get from window object if available (for browser environments)\r\n if (typeof window !== 'undefined' && (window as any).VITE_MOONPAY_API_KEY) {\r\n apiKey = (window as any).VITE_MOONPAY_API_KEY;\r\n }\r\n\r\n this.config = {\r\n apiKey,\r\n environment: sdkConfig?.moonpayEnvironment || 'production',\r\n baseUrl: sdkConfig?.moonpayBaseUrl || {\r\n buy: 'https://buy.moonpay.com',\r\n sell: 'https://sell.moonpay.com',\r\n api: 'https://api.moonpay.com/v3'\r\n }\r\n };\r\n\r\n console.log('[MoonPayService] Initialized with Web SDK integration');\r\n\r\n // Start loading SDK\r\n this.loadSDK();\r\n }\r\n\r\n /**\r\n * Load MoonPay Web SDK dynamically\r\n */\r\n private loadSDK(): Promise<void> {\r\n if (this.sdkLoadPromise) {\r\n return this.sdkLoadPromise;\r\n }\r\n\r\n this.sdkLoadPromise = new Promise((resolve, reject) => {\r\n // Check if SDK is already loaded\r\n if (typeof window !== 'undefined' && (window as any).MoonPayWebSdk) {\r\n console.log('[MoonPayService] SDK already loaded');\r\n this.sdkLoaded = true;\r\n resolve();\r\n return;\r\n }\r\n\r\n // Check if script is already being loaded\r\n const existingScript = document.querySelector('script[src*=\"moonpay-web-sdk\"]');\r\n if (existingScript) {\r\n console.log('[MoonPayService] SDK script already exists, waiting for load');\r\n existingScript.addEventListener('load', () => {\r\n this.sdkLoaded = true;\r\n resolve();\r\n });\r\n existingScript.addEventListener('error', reject);\r\n return;\r\n }\r\n\r\n // Load SDK script dynamically\r\n console.log('[MoonPayService] Loading SDK script...');\r\n const script = document.createElement('script');\r\n script.src = 'https://static.moonpay.com/web-sdk/v1/moonpay-web-sdk.min.js';\r\n script.defer = true;\r\n\r\n script.onload = () => {\r\n console.log('[MoonPayService] SDK script loaded successfully');\r\n this.sdkLoaded = true;\r\n resolve();\r\n };\r\n\r\n script.onerror = (error) => {\r\n console.error('[MoonPayService] Failed to load SDK script', error);\r\n reject(new Error('Failed to load MoonPay SDK'));\r\n };\r\n\r\n document.head.appendChild(script);\r\n });\r\n\r\n return this.sdkLoadPromise;\r\n }\r\n\r\n /**\r\n * Get MoonPay SDK instance\r\n */\r\n private async getSDK(): Promise<MoonPaySDK> {\r\n await this.loadSDK();\r\n\r\n if (typeof window === 'undefined' || !(window as any).MoonPayWebSdk) {\r\n throw new Error('MoonPay SDK not available');\r\n }\r\n\r\n return (window as any).MoonPayWebSdk.init;\r\n }\r\n\r\n /**\r\n * Create a MoonPay buy transaction with proper event handling\r\n */\r\n async createBuyTransaction(params: {\r\n currencyCode: string;\r\n baseCurrencyCode: string;\r\n baseCurrencyAmount: number;\r\n walletAddress: string;\r\n redirectURL?: string;\r\n onStatusUpdate?: (status: string, data?: any) => void;\r\n }): Promise<any> {\r\n console.log('[MoonPayService] Creating buy transaction with SDK', params);\r\n\r\n try {\r\n // Get SDK instance\r\n const moonPay = await this.getSDK();\r\n\r\n const transactionId = `buy_${Date.now()}`;\r\n let transactionCompleted = false;\r\n let transactionData: any = null;\r\n\r\n // Create widget with event handlers\r\n const widget = moonPay({\r\n flow: 'buy',\r\n environment: this.config.environment,\r\n params: {\r\n apiKey: this.config.apiKey || '',\r\n currencyCode: params.currencyCode.toUpperCase(),\r\n baseCurrencyCode: params.baseCurrencyCode.toUpperCase(),\r\n baseCurrencyAmount: params.baseCurrencyAmount.toString(),\r\n walletAddress: params.walletAddress,\r\n redirectURL: params.redirectURL || window.location.origin,\r\n colorCode: '#007BFF',\r\n theme: 'light'\r\n },\r\n variant: 'overlay',\r\n handlers: {\r\n async onReady() {\r\n console.log('[MoonPayService] Widget ready');\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('ready', null);\r\n }\r\n },\r\n async onLogin(props: any) {\r\n console.log('[MoonPayService] User logged in', props);\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('authenticated', props);\r\n }\r\n },\r\n async onTransactionCreated(props: any) {\r\n console.log('[MoonPayService] Transaction created', props);\r\n transactionData = props;\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('created', props);\r\n }\r\n },\r\n async onTransactionCompleted(props: any) {\r\n console.log('[MoonPayService] Transaction completed', props);\r\n transactionCompleted = true;\r\n transactionData = props;\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('completed', props);\r\n }\r\n },\r\n async onClose() {\r\n console.log('[MoonPayService] Widget closed');\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('closed', { transactionCompleted, transactionData });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Show the widget\r\n widget.show();\r\n console.log('[MoonPayService] Widget shown');\r\n\r\n // Store transaction reference\r\n this.activeTransactions.set(transactionId, {\r\n widget,\r\n params,\r\n startTime: Date.now(),\r\n flow: 'buy'\r\n });\r\n\r\n return {\r\n transactionId,\r\n widget,\r\n status: 'initiated'\r\n };\r\n } catch (error: any) {\r\n console.error('[MoonPayService] Failed to create buy transaction', error);\r\n throw new Error(`Failed to create MoonPay buy transaction: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Create a MoonPay sell transaction with proper event handling\r\n */\r\n async createSellTransaction(params: {\r\n currencyCode: string;\r\n baseCurrencyCode: string;\r\n quoteCurrencyAmount: number;\r\n refundWalletAddress: string;\r\n redirectURL?: string;\r\n onStatusUpdate?: (status: string, data?: any) => void;\r\n }): Promise<any> {\r\n console.log('[MoonPayService] Creating sell transaction with SDK', params);\r\n\r\n try {\r\n // Get SDK instance\r\n const moonPay = await this.getSDK();\r\n\r\n const transactionId = `sell_${Date.now()}`;\r\n let transactionCompleted = false;\r\n let transactionData: any = null;\r\n\r\n // Create widget with event handlers\r\n const widget = moonPay({\r\n flow: 'sell',\r\n environment: this.config.environment,\r\n params: {\r\n apiKey: this.config.apiKey || '',\r\n currencyCode: params.currencyCode.toUpperCase(),\r\n baseCurrencyCode: params.baseCurrencyCode.toUpperCase(),\r\n quoteCurrencyAmount: params.quoteCurrencyAmount.toString(),\r\n refundWalletAddress: params.refundWalletAddress,\r\n redirectURL: params.redirectURL || window.location.origin,\r\n colorCode: '#007BFF',\r\n theme: 'light'\r\n },\r\n variant: 'overlay',\r\n handlers: {\r\n async onReady() {\r\n console.log('[MoonPayService] Widget ready');\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('ready', null);\r\n }\r\n },\r\n async onLogin(props: any) {\r\n console.log('[MoonPayService] User logged in', props);\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('authenticated', props);\r\n }\r\n },\r\n async onTransactionCreated(props: any) {\r\n console.log('[MoonPayService] Transaction created', props);\r\n transactionData = props;\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('created', props);\r\n }\r\n },\r\n async onTransactionCompleted(props: any) {\r\n console.log('[MoonPayService] Transaction completed', props);\r\n transactionCompleted = true;\r\n transactionData = props;\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('completed', props);\r\n }\r\n },\r\n async onInitiateDeposit(props: any) {\r\n console.log('[MoonPayService] Deposit initiated', props);\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('deposit_initiated', props);\r\n }\r\n },\r\n async onClose() {\r\n console.log('[MoonPayService] Widget closed');\r\n if (params.onStatusUpdate) {\r\n params.onStatusUpdate('closed', { transactionCompleted, transactionData });\r\n }\r\n }\r\n }\r\n });\r\n\r\n // Show the widget\r\n widget.show();\r\n console.log('[MoonPayService] Widget shown');\r\n\r\n // Store transaction reference\r\n this.activeTransactions.set(transactionId, {\r\n widget,\r\n params,\r\n startTime: Date.now(),\r\n flow: 'sell'\r\n });\r\n\r\n return {\r\n transactionId,\r\n widget,\r\n status: 'initiated'\r\n };\r\n } catch (error: any) {\r\n console.error('[MoonPayService] Failed to create sell transaction', error);\r\n throw new Error(`Failed to create MoonPay sell transaction: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get transaction status by ID\r\n */\r\n getTransactionStatus(transactionId: string): any {\r\n return this.activeTransactions.get(transactionId);\r\n }\r\n\r\n /**\r\n * Cancel a transaction\r\n */\r\n cancelTransaction(transactionId: string): boolean {\r\n const transaction = this.activeTransactions.get(transactionId);\r\n if (transaction) {\r\n if (transaction.widget) {\r\n try {\r\n transaction.widget.close();\r\n console.log('[MoonPayService] Widget closed for transaction:', transactionId);\r\n } catch (error) {\r\n console.error('[MoonPayService] Error closing widget:', error);\r\n }\r\n }\r\n this.activeTransactions.delete(transactionId);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Get all active transactions\r\n */\r\n getActiveTransactions(): string[] {\r\n return Array.from(this.activeTransactions.keys());\r\n }\r\n}\r\n","/**\r\n * Wallet Service\r\n *\r\n * Unified service for wallet management and blockchain interactions.\r\n * Combines wallet state management with Web3 provider functionality.\r\n * Uses EthersAdapter for blockchain operations (supports both ethers v5 and v6).\r\n */\r\n\r\nimport { inject, injectable } from 'inversify';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { IEthersAdapter, EthersProvider, EthersSigner, EthersContract, EthersNetwork, EthersTransactionResponse, EthersTransactionReceipt, EthersResult } from '../interfaces/IEthersAdapter';\r\n\r\nexport interface WalletState {\r\n isConnected: boolean;\r\n address: string | null;\r\n balance: string | null;\r\n network: string | null;\r\n chainId: number | null;\r\n}\r\n\r\n/**\r\n * Transaction parameters\r\n */\r\nexport interface TransactionParams {\r\n to: string;\r\n data?: string;\r\n value?: bigint | string;\r\n gasLimit?: bigint | string;\r\n gasPrice?: bigint | string;\r\n maxFeePerGas?: bigint | string;\r\n maxPriorityFeePerGas?: bigint | string;\r\n}\r\n\r\n/**\r\n * Interface for wallet service operations\r\n * Combines wallet state management with Web3 provider functionality\r\n */\r\nexport interface IWalletService {\r\n // ===== Wallet State Management =====\r\n subscribe(listener: (state: WalletState) => void): () => void;\r\n getState(): WalletState;\r\n isMetaMaskInstalled(): boolean;\r\n connect(): Promise<WalletState>;\r\n disconnect(): void;\r\n\r\n // ===== Payment Operations =====\r\n executePayment(toAddress: string, amount: string, options?: any): Promise<string>;\r\n signTypedData(typedData: any): Promise<string>;\r\n buildPaymentMandateTypedData(mandateData: any, merchantAddress: string): any;\r\n\r\n // ===== UI Helper Functions =====\r\n getNetworkName(): string;\r\n getCurrencySymbol(): string;\r\n getFormattedBalance(): string;\r\n getShortAddress(): string;\r\n shortenAddress(address: string | null, chars?: number): string;\r\n\r\n // ===== Web3 Provider Functionality =====\r\n initialize(): Promise<void>;\r\n getProvider(): EthersProvider;\r\n getSigner(): Promise<EthersSigner>;\r\n requestAccounts(): Promise<string[]>;\r\n getAddress(): Promise<string>;\r\n switchChain(chainId: number): Promise<void>;\r\n getNetwork(): Promise<EthersNetwork>;\r\n getBalance(address: string): Promise<bigint>;\r\n isAddress(address: string): boolean;\r\n\r\n // ===== Contract Interaction =====\r\n encodeFunctionCall(functionSignature: string, parameters: any[]): string;\r\n encodeFunctionCallFromABI(abi: any[], functionName: string, parameters: any[]): string;\r\n decodeFunctionResult(functionSignature: string, data: string): EthersResult;\r\n decodeFunctionResultFromABI(abi: any[], functionName: string, data: string): EthersResult;\r\n createContract(address: string, abi: any[]): Promise<EthersContract>;\r\n call(to: string, data: string): Promise<string>;\r\n sendTransaction(txParams: TransactionParams): Promise<EthersTransactionResponse>;\r\n waitForTransaction(txHash: string, confirmations?: number, timeout?: number): Promise<EthersTransactionReceipt | null>;\r\n\r\n // ===== Utility Functions =====\r\n formatUnits(value: bigint | string, decimals?: number): string;\r\n parseUnits(value: string, decimals?: number): bigint;\r\n parseEther(value: string): bigint;\r\n formatEther(value: bigint): string;\r\n}\r\n\r\n@injectable()\r\nexport class WalletService implements IWalletService {\r\n private provider: EthersProvider | null = null;\r\n private signer: EthersSigner | null = null;\r\n private walletState: WalletState = {\r\n isConnected: false,\r\n address: null,\r\n balance: null,\r\n network: null,\r\n chainId: null\r\n };\r\n\r\n // Network configuration mapping\r\n private networkConfigs: Record<number, {name: string, currency: string}> = {\r\n 1: { name: 'Ethereum', currency: 'ETH' },\r\n 5: { name: 'Goerli', currency: 'GoerliETH' },\r\n 56: { name: 'BNB Smart Chain', currency: 'BNB' },\r\n 97: { name: 'BNB Testnet', currency: 'tBNB' },\r\n 11155111: { name: 'Sepolia', currency: 'SepoliaETH' },\r\n };\r\n\r\n // Listeners for wallet state changes\r\n private listeners: ((state: WalletState) => void)[] = [];\r\n\r\n constructor(\r\n @inject(TOKENS.EthersAdapter) private ethersAdapter: IEthersAdapter\r\n ) {\r\n console.log(`[WalletService] Initialized with ethers v${this.ethersAdapter.getVersion()}`);\r\n // Check if wallet was previously connected (in session)\r\n this.checkPreviousConnection();\r\n }\r\n\r\n // ==================== Wallet State Management ====================\r\n\r\n /**\r\n * Subscribe to wallet state changes\r\n */\r\n subscribe(listener: (state: WalletState) => void) {\r\n this.listeners.push(listener);\r\n // Send current state immediately\r\n listener(this.walletState);\r\n return () => {\r\n this.listeners = this.listeners.filter(l => l !== listener);\r\n };\r\n }\r\n\r\n /**\r\n * Notify all listeners of state change\r\n */\r\n private notifyListeners() {\r\n this.listeners.forEach(listener => listener(this.walletState));\r\n }\r\n\r\n /**\r\n * Get current wallet state\r\n */\r\n getState(): WalletState {\r\n return this.walletState;\r\n }\r\n\r\n /**\r\n * Check if MetaMask is installed\r\n */\r\n isMetaMaskInstalled(): boolean {\r\n return typeof window !== 'undefined' && typeof window.ethereum !== 'undefined';\r\n }\r\n\r\n /**\r\n * Check if wallet was previously connected\r\n */\r\n async checkPreviousConnection() {\r\n if (!this.isMetaMaskInstalled()) return;\r\n\r\n try {\r\n // Use ethersAdapter to create provider\r\n const ethereum = (window as any).ethereum;\r\n if (!ethereum) return;\r\n\r\n const tempProvider = this.ethersAdapter.createBrowserProvider(ethereum);\r\n const accounts = await ethereum.request({ method: 'eth_accounts' });\r\n\r\n if (accounts && accounts.length > 0) {\r\n await this.handleConnection(accounts[0]);\r\n }\r\n } catch (error) {\r\n console.error('[WalletService] Failed to check previous connection:', error);\r\n }\r\n }\r\n\r\n /**\r\n * Connect to MetaMask\r\n */\r\n async connect(): Promise<WalletState> {\r\n if (!this.isMetaMaskInstalled()) {\r\n throw new Error('MetaMask is not installed. Please install MetaMask extension.');\r\n }\r\n\r\n try {\r\n // Initialize provider\r\n await this.initialize();\r\n\r\n // Request account access\r\n const accounts = await this.requestAccounts();\r\n\r\n if (accounts && accounts.length > 0) {\r\n await this.handleConnection(accounts[0]);\r\n return this.walletState;\r\n } else {\r\n throw new Error('No accounts found');\r\n }\r\n } catch (error: any) {\r\n if (error.code === 4001) {\r\n throw new Error('User rejected the connection request');\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Handle successful connection\r\n */\r\n private async handleConnection(address: string) {\r\n let balance = '0';\r\n let network;\r\n let chainId = 56; // Default to BNB mainnet\r\n\r\n try {\r\n // Get network first (usually more reliable)\r\n network = await this.getNetwork();\r\n chainId = Number(network.chainId);\r\n } catch (error) {\r\n console.warn('[WalletService] Failed to fetch network, using defaults:', error);\r\n }\r\n\r\n try {\r\n // Get balance with retry logic for RPC errors\r\n const balanceResult = await this.getBalance(address);\r\n balance = this.formatEther(balanceResult);\r\n } catch (error: any) {\r\n console.warn('[WalletService] Failed to fetch balance (RPC error - node sync issue):', error);\r\n // Continue with balance = '0' - user can still connect and make payments\r\n }\r\n\r\n // Get proper network name using config\r\n const networkInfo = this.getNetworkInfo(chainId);\r\n const networkName = networkInfo.name;\r\n\r\n // Update state\r\n this.walletState = {\r\n isConnected: true,\r\n address,\r\n balance: balance,\r\n network: networkName,\r\n chainId: chainId\r\n };\r\n\r\n // Store in session storage\r\n sessionStorage.setItem('walletConnected', 'true');\r\n sessionStorage.setItem('walletAddress', address);\r\n\r\n // Setup event listeners\r\n this.setupEventListeners();\r\n\r\n // Notify listeners\r\n this.notifyListeners();\r\n }\r\n\r\n /**\r\n * Setup MetaMask event listeners\r\n */\r\n private setupEventListeners() {\r\n if (!window.ethereum) return;\r\n\r\n window.ethereum.on('accountsChanged', async (accounts: string[]) => {\r\n if (accounts.length === 0) {\r\n this.disconnect();\r\n } else {\r\n await this.handleConnection(accounts[0]);\r\n }\r\n });\r\n\r\n window.ethereum.on('chainChanged', () => {\r\n window.location.reload();\r\n });\r\n }\r\n\r\n /**\r\n * Disconnect wallet\r\n */\r\n disconnect() {\r\n this.provider = null;\r\n this.signer = null;\r\n this.walletState = {\r\n isConnected: false,\r\n address: null,\r\n balance: null,\r\n network: null,\r\n chainId: null\r\n };\r\n\r\n // Clear session storage\r\n sessionStorage.removeItem('walletConnected');\r\n sessionStorage.removeItem('walletAddress');\r\n\r\n // Notify listeners\r\n this.notifyListeners();\r\n }\r\n\r\n private getNetworkInfo(chainId: number) {\r\n return this.networkConfigs[chainId] || { name: 'Unknown Network', currency: 'ETH' };\r\n }\r\n\r\n // ==================== Payment Operations ====================\r\n\r\n /**\r\n * Execute payment transaction\r\n */\r\n async executePayment(\r\n toAddress: string,\r\n amount: string,\r\n options?: {\r\n data?: string;\r\n gasLimit?: bigint | string;\r\n gasPrice?: bigint | string;\r\n }\r\n ): Promise<string> {\r\n if (!this.walletState.isConnected || !this.signer) {\r\n throw new Error('Wallet not connected');\r\n }\r\n\r\n try {\r\n // Parse amount to Wei\r\n const amountInWei = this.parseEther(amount);\r\n\r\n // Normalize address to checksummed format\r\n const normalizedAddress = this.normalizeAddress(toAddress);\r\n\r\n // Create transaction parameters\r\n const txParams: TransactionParams = {\r\n to: normalizedAddress,\r\n value: amountInWei,\r\n };\r\n\r\n if (options?.data) {\r\n txParams.data = options.data;\r\n }\r\n\r\n if (options?.gasLimit) {\r\n txParams.gasLimit = options.gasLimit;\r\n }\r\n\r\n if (options?.gasPrice) {\r\n txParams.gasPrice = options.gasPrice;\r\n }\r\n\r\n const tx = await this.sendTransaction(txParams);\r\n\r\n // Wait for transaction confirmation\r\n const receipt = await this.waitForTransaction(tx.hash);\r\n\r\n return receipt?.hash || tx.hash;\r\n } catch (error: any) {\r\n if (error.code === 4001) {\r\n throw new Error('User rejected the transaction');\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Sign EIP-712 typed data (for payment mandate signatures)\r\n */\r\n async signTypedData(typedData: {\r\n domain: any;\r\n types: any;\r\n primaryType: string;\r\n message: any;\r\n }): Promise<string> {\r\n if (!this.walletState.isConnected || !this.signer) {\r\n throw new Error('Wallet not connected');\r\n }\r\n\r\n try {\r\n const { domain, types, message } = typedData;\r\n\r\n // Remove EIP712Domain from types as it's implicit\r\n const typesWithoutDomain = { ...types };\r\n delete typesWithoutDomain.EIP712Domain;\r\n\r\n // Sign the typed data directly using signer\r\n // Both ethers v5 and v6 support this API\r\n const signature = await (this.signer as any).signTypedData(\r\n domain,\r\n typesWithoutDomain,\r\n message\r\n );\r\n\r\n return signature;\r\n } catch (error: any) {\r\n console.error('[WalletService] Error signing typed data:', error);\r\n if (error.code === 4001) {\r\n throw new Error('User rejected signature request');\r\n }\r\n throw new Error(error.message || 'Failed to sign data');\r\n }\r\n }\r\n\r\n /**\r\n * Build EIP-712 typed data for payment mandate\r\n */\r\n buildPaymentMandateTypedData(\r\n mandateData: {\r\n mandateId: string;\r\n cartHash: string;\r\n amount: string;\r\n merchant: string;\r\n expiry: number;\r\n nonce: number;\r\n },\r\n merchantAddress: string\r\n ): any {\r\n return {\r\n domain: {\r\n name: 'AP2 Payment Protocol',\r\n version: '1',\r\n chainId: this.walletState.chainId || 56,\r\n verifyingContract: merchantAddress,\r\n },\r\n types: {\r\n PaymentMandate: [\r\n { name: 'mandateId', type: 'string' },\r\n { name: 'cartHash', type: 'bytes32' },\r\n { name: 'amount', type: 'uint256' },\r\n { name: 'merchant', type: 'address' },\r\n { name: 'expiry', type: 'uint256' },\r\n { name: 'nonce', type: 'uint256' },\r\n ],\r\n },\r\n primaryType: 'PaymentMandate',\r\n message: mandateData,\r\n };\r\n }\r\n\r\n // ==================== UI Helper Functions ====================\r\n\r\n /**\r\n * Get network name\r\n */\r\n getNetworkName(): string {\r\n if (!this.walletState.chainId) return 'Unknown Network';\r\n const networkInfo = this.getNetworkInfo(this.walletState.chainId);\r\n return networkInfo.name;\r\n }\r\n\r\n /**\r\n * Get currency symbol for current network\r\n */\r\n getCurrencySymbol(): string {\r\n if (!this.walletState.chainId) return 'ETH';\r\n const networkInfo = this.getNetworkInfo(this.walletState.chainId);\r\n return networkInfo.currency;\r\n }\r\n\r\n /**\r\n * Get formatted balance\r\n */\r\n getFormattedBalance(): string {\r\n if (!this.walletState.balance) return '0';\r\n const networkInfo = this.getNetworkInfo(this.walletState.chainId || 11155111);\r\n const suffix = ` ${networkInfo.currency}`;\r\n return parseFloat(this.walletState.balance).toFixed(4) + suffix;\r\n }\r\n\r\n /**\r\n * Get shortened address\r\n */\r\n getShortAddress(): string {\r\n if (!this.walletState.address) return '';\r\n return `${this.walletState.address.slice(0, 6)}...${this.walletState.address.slice(-4)}`;\r\n }\r\n\r\n /**\r\n * Shorten address for display (e.g., 0x1234...5678)\r\n */\r\n shortenAddress(address: string | null, chars: number = 4): string {\r\n if (!address) return '';\r\n return `${address.substring(0, chars + 2)}...${address.substring(address.length - chars)}`;\r\n }\r\n\r\n // ==================== Web3 Provider Functionality ====================\r\n\r\n /**\r\n * Initialize the provider from MetaMask or other injected wallet\r\n */\r\n async initialize(): Promise<void> {\r\n const ethereum = (window as any).ethereum;\r\n if (!ethereum) {\r\n throw new Error('No web3 provider found. Please install MetaMask or another web3 wallet.');\r\n }\r\n\r\n this.provider = this.ethersAdapter.createBrowserProvider(ethereum);\r\n console.log('[WalletService] Provider initialized');\r\n }\r\n\r\n /**\r\n * Get the provider instance\r\n */\r\n getProvider(): EthersProvider {\r\n if (!this.provider) {\r\n throw new Error('Provider not initialized. Call initialize() or connect() first.');\r\n }\r\n return this.provider;\r\n }\r\n\r\n /**\r\n * Get the signer instance\r\n */\r\n async getSigner(): Promise<EthersSigner> {\r\n if (!this.provider) {\r\n await this.initialize();\r\n }\r\n\r\n if (!this.signer) {\r\n this.signer = await this.ethersAdapter.getSigner(this.getProvider());\r\n }\r\n\r\n return this.signer;\r\n }\r\n\r\n /**\r\n * Request account access from the wallet\r\n */\r\n async requestAccounts(): Promise<string[]> {\r\n const ethereum = (window as any).ethereum;\r\n if (!ethereum) {\r\n throw new Error('No web3 provider found.');\r\n }\r\n\r\n const accounts = await ethereum.request({ method: 'eth_requestAccounts' });\r\n if (!accounts || accounts.length === 0) {\r\n throw new Error('No accounts found. Please connect your wallet.');\r\n }\r\n\r\n console.log(`[WalletService] Connected to ${accounts.length} account(s)`);\r\n return accounts;\r\n }\r\n\r\n /**\r\n * Get the connected wallet address\r\n */\r\n async getAddress(): Promise<string> {\r\n const signer = await this.getSigner();\r\n return await signer.getAddress();\r\n }\r\n\r\n /**\r\n * Switch to a specific chain\r\n */\r\n async switchChain(chainId: number): Promise<void> {\r\n const ethereum = (window as any).ethereum;\r\n if (!ethereum) {\r\n throw new Error('No web3 provider found.');\r\n }\r\n\r\n const chainIdHex = '0x' + chainId.toString(16);\r\n try {\r\n await ethereum.request({\r\n method: 'wallet_switchEthereumChain',\r\n params: [{ chainId: chainIdHex }],\r\n });\r\n console.log(`[WalletService] Switched to chain ${chainId}`);\r\n } catch (switchError: any) {\r\n // This error code indicates that the chain has not been added to MetaMask\r\n if (switchError.code === 4902) {\r\n throw new Error(`Please add chain ${chainId} to your wallet`);\r\n }\r\n throw switchError;\r\n }\r\n }\r\n\r\n /**\r\n * Get the current network\r\n */\r\n async getNetwork(): Promise<EthersNetwork> {\r\n const provider = this.getProvider();\r\n return await provider.getNetwork();\r\n }\r\n\r\n /**\r\n * Get balance of an address\r\n */\r\n async getBalance(address: string): Promise<bigint> {\r\n const provider = this.getProvider();\r\n const checksummedAddress = this.normalizeAddress(address);\r\n return await provider.getBalance(checksummedAddress);\r\n }\r\n\r\n /**\r\n * Check if address is valid\r\n */\r\n isAddress(address: string): boolean {\r\n return this.ethersAdapter.isAddress(address);\r\n }\r\n\r\n /**\r\n * Normalize address to checksummed format\r\n * Handles addresses with invalid checksums by converting to lowercase first\r\n */\r\n private normalizeAddress(address: string): string {\r\n try {\r\n return this.ethersAdapter.getAddress(address);\r\n } catch (error) {\r\n // If checksum validation fails, convert to lowercase first\r\n try {\r\n const lowercaseAddress = address.toLowerCase();\r\n console.warn(`[WalletService] Invalid checksum for ${address}, correcting...`);\r\n return this.ethersAdapter.getAddress(lowercaseAddress);\r\n } catch (innerError) {\r\n console.error(`[WalletService] Invalid address format: ${address}`, innerError);\r\n throw new Error(`Invalid address: ${address}`);\r\n }\r\n }\r\n }\r\n\r\n // ==================== Contract Interaction ====================\r\n\r\n /**\r\n * Encode a function call with parameters\r\n */\r\n encodeFunctionCall(functionSignature: string, parameters: any[]): string {\r\n const iface = this.ethersAdapter.createInterface([functionSignature]);\r\n const functionName = functionSignature.split('(')[0].replace('function ', '').trim();\r\n return iface.encodeFunctionData(functionName, parameters);\r\n }\r\n\r\n /**\r\n * Encode a function call from ABI\r\n */\r\n encodeFunctionCallFromABI(abi: any[], functionName: string, parameters: any[]): string {\r\n const iface = this.ethersAdapter.createInterface(abi);\r\n return iface.encodeFunctionData(functionName, parameters);\r\n }\r\n\r\n /**\r\n * Decode function result\r\n */\r\n decodeFunctionResult(functionSignature: string, data: string): EthersResult {\r\n const iface = this.ethersAdapter.createInterface([functionSignature]);\r\n const functionName = functionSignature.split('(')[0].replace('function ', '').trim();\r\n return iface.decodeFunctionResult(functionName, data);\r\n }\r\n\r\n /**\r\n * Decode function result from ABI\r\n */\r\n decodeFunctionResultFromABI(abi: any[], functionName: string, data: string): EthersResult {\r\n const iface = this.ethersAdapter.createInterface(abi);\r\n return iface.decodeFunctionResult(functionName, data);\r\n }\r\n\r\n /**\r\n * Create a contract instance\r\n */\r\n async createContract(address: string, abi: any[]): Promise<EthersContract> {\r\n const signer = await this.getSigner();\r\n const checksummedAddress = this.normalizeAddress(address);\r\n return this.ethersAdapter.createContract(checksummedAddress, abi, signer);\r\n }\r\n\r\n /**\r\n * Execute a read-only contract call\r\n */\r\n async call(to: string, data: string): Promise<string> {\r\n const provider = this.getProvider();\r\n const checksummedAddress = this.normalizeAddress(to);\r\n return await provider.call({ to: checksummedAddress, data });\r\n }\r\n\r\n /**\r\n * Send a transaction\r\n */\r\n async sendTransaction(txParams: TransactionParams): Promise<EthersTransactionResponse> {\r\n const signer = await this.getSigner();\r\n // Normalize address to checksummed format\r\n const normalizedParams = {\r\n ...txParams,\r\n to: this.normalizeAddress(txParams.to),\r\n };\r\n console.log('[WalletService] Sending transaction', normalizedParams);\r\n return await signer.sendTransaction(normalizedParams);\r\n }\r\n\r\n /**\r\n * Wait for transaction receipt\r\n */\r\n async waitForTransaction(\r\n txHash: string,\r\n confirmations: number = 1,\r\n timeout?: number\r\n ): Promise<EthersTransactionReceipt | null> {\r\n const provider = this.getProvider();\r\n console.log(`[WalletService] Waiting for transaction ${txHash}`);\r\n return await provider.waitForTransaction(txHash, confirmations, timeout);\r\n }\r\n\r\n // ==================== Utility Functions ====================\r\n\r\n /**\r\n * Format units (e.g., wei to ether)\r\n */\r\n formatUnits(value: bigint | string, decimals: number = 18): string {\r\n return this.ethersAdapter.formatUnits(value, decimals);\r\n }\r\n\r\n /**\r\n * Parse units (e.g., ether to wei)\r\n */\r\n parseUnits(value: string, decimals: number = 18): bigint {\r\n return this.ethersAdapter.parseUnits(value, decimals);\r\n }\r\n\r\n /**\r\n * Parse ETH value to Wei\r\n */\r\n parseEther(value: string): bigint {\r\n return this.ethersAdapter.parseUnits(value, 18);\r\n }\r\n\r\n /**\r\n * Format Wei to ETH\r\n */\r\n formatEther(value: bigint): string {\r\n return this.ethersAdapter.formatUnits(value, 18);\r\n }\r\n}\r\n\r\n// Type declarations for window.ethereum\r\ndeclare global {\r\n interface Window {\r\n ethereum?: any;\r\n }\r\n}\r\n","import { injectable, inject } from 'inversify';\r\nimport { FunctionCall, ToolCall } from \"../types\";\r\nimport type { IAPIClient } from \"../interfaces/IAPIClient\";\r\nimport { TOKENS } from \"../core/tokens\";\r\n\r\n@injectable()\r\nexport class ToolCallProcessor {\r\n private apiService: IAPIClient;\r\n\r\n constructor(@inject(TOKENS.APIClient) apiService: IAPIClient) {\r\n this.apiService = apiService;\r\n }\r\n\r\n async processToolCalls(\r\n projectId: string,\r\n toolCalls: ToolCall[]\r\n ): Promise<FunctionCall[]> {\r\n if (!toolCalls || !Array.isArray(toolCalls)) {\r\n return [];\r\n }\r\n\r\n const functionCalls: FunctionCall[] = [];\r\n\r\n // Fetch endpoint, contract, and AP2 metadata for enrichment\r\n let endpoints: any[] = [];\r\n let contracts: any[] = [];\r\n let ap2Tools: any[] = [];\r\n\r\n try {\r\n const [endpointsResponse, contractsResponse, ap2Response]: [any, any, any] =\r\n await Promise.all([\r\n this.apiService.getParsedEndpoints(projectId),\r\n this.apiService.getParsedContracts(projectId),\r\n this.apiService.getAP2Tools(projectId),\r\n ]);\r\n\r\n endpoints = endpointsResponse?.endpoints || [];\r\n contracts = contractsResponse?.methods || [];\r\n ap2Tools = ap2Response?.tools || ap2Response || [];\r\n } catch (error) {\r\n console.warn(\"Failed to fetch tool metadata:\", error);\r\n }\r\n\r\n for (const toolCall of toolCalls) {\r\n if (toolCall.function) {\r\n const functionName = toolCall.function.name;\r\n let parameters = {};\r\n const nameCandidates = this.generateNameCandidates(functionName);\r\n\r\n // Parse arguments if they're a string\r\n if (typeof toolCall.function.arguments === \"string\") {\r\n try {\r\n parameters = JSON.parse(toolCall.function.arguments);\r\n } catch (error) {\r\n console.warn(\"Failed to parse function arguments:\", error);\r\n parameters = { raw: toolCall.function.arguments };\r\n }\r\n } else {\r\n parameters = toolCall.function.arguments || {};\r\n }\r\n\r\n if (functionName.startsWith(\"ap2_\")) {\r\n functionCalls.push({\r\n name: functionName,\r\n parameters,\r\n metadata: {\r\n type: \"ap2\",\r\n description: `Function: ${functionName}`,\r\n projectId,\r\n },\r\n });\r\n continue;\r\n }\r\n\r\n // Detect MoonPay functions (fiat operations)\r\n if (functionName.startsWith(\"moonpay_\")) {\r\n functionCalls.push({\r\n name: functionName,\r\n parameters,\r\n metadata: {\r\n type: \"fiat\",\r\n description: `Function: ${functionName}`,\r\n projectId,\r\n },\r\n });\r\n continue;\r\n }\r\n\r\n // Try to find matching endpoint or contract for metadata\r\n let endpoint = null;\r\n const methodPattern = /^(GET|POST|PUT|DELETE|PATCH)__(.+)$/;\r\n\r\n for (const candidateName of nameCandidates) {\r\n const methodMatch = candidateName.match(methodPattern);\r\n\r\n if (methodMatch) {\r\n const [, method, pathPart] = methodMatch;\r\n const endpointId = `api-${method.toLowerCase()}-${pathPart.replace(/[^a-zA-Z0-9]/g, '-')}`;\r\n endpoint = endpoints.find((e) => e.id === endpointId);\r\n\r\n console.log(\r\n `Matching tool: ${candidateName} -> method: ${method}, endpointId: ${endpointId}, found: ${!!endpoint}`\r\n );\r\n\r\n if (endpoint) {\r\n console.log(\r\n `Matched endpoint - path: ${endpoint.path}, baseUrl: ${endpoint.baseUrl}`\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Fallback to operationId/path/id matching\r\n if (!endpoint) {\r\n for (const candidateName of nameCandidates) {\r\n endpoint = endpoints.find(\r\n (e) =>\r\n e.operationId === candidateName ||\r\n e.path === candidateName ||\r\n e.id === candidateName\r\n );\r\n\r\n if (endpoint) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Try to match contract calls\r\n let contract = null;\r\n\r\n for (const candidateName of nameCandidates) {\r\n contract = contracts.find(\r\n (c) => c.name === candidateName || c.id === candidateName\r\n );\r\n\r\n if (contract) {\r\n break;\r\n }\r\n }\r\n\r\n // If no direct match, try to parse contract pattern\r\n if (!contract) {\r\n contract = contracts.find((c) => {\r\n if (functionName.endsWith(`_${c.name}`)) {\r\n const contractPart = functionName.substring(\r\n 0,\r\n functionName.length - c.name.length - 1\r\n );\r\n\r\n const normalizedContractName = c.contractName\r\n ?.replace(/\\s+/g, \"_\")\r\n ?.replace(/\\(([^)]+)\\)/g, \"__$1_\")\r\n ?.replace(/__+/g, \"__\")\r\n ?.replace(/_+$/, \"\");\r\n\r\n console.log(\r\n `Comparing: functionName='${functionName}', contractPart='${contractPart}', normalizedName='${normalizedContractName}', methodName='${c.name}'`\r\n );\r\n\r\n if (normalizedContractName === contractPart) return true;\r\n\r\n const simplifiedContractName = c.contractName\r\n ?.replace(/[^a-zA-Z0-9]/g, \"\")\r\n .toUpperCase();\r\n const simplifiedFunctionName = functionName\r\n .replace(/[^a-zA-Z0-9]/g, \"\")\r\n .toUpperCase();\r\n if (\r\n simplifiedFunctionName.includes(simplifiedContractName) &&\r\n functionName.endsWith(`_${c.name}`)\r\n )\r\n return true;\r\n }\r\n return false;\r\n });\r\n\r\n if (contract) {\r\n console.log(\r\n `Found contract match for ${functionName}: ${contract.contractName}.${contract.name}`\r\n );\r\n }\r\n }\r\n\r\n // Try to match AP2 tools\r\n let ap2Tool = null;\r\n if (ap2Tools && ap2Tools.length > 0) {\r\n for (const candidateName of nameCandidates) {\r\n ap2Tool = ap2Tools.find((tool: any) => tool.name === candidateName);\r\n if (ap2Tool) {\r\n break;\r\n }\r\n }\r\n }\r\n\r\n const functionCall: FunctionCall = {\r\n name: functionName,\r\n parameters,\r\n metadata: {},\r\n };\r\n\r\n if (endpoint) {\r\n functionCall.metadata = {\r\n type: \"api\",\r\n description: endpoint.summary || endpoint.description,\r\n method: endpoint.method,\r\n path: endpoint.path,\r\n baseUrl: endpoint.baseUrl || endpoint.servers?.[0]?.url || \"\",\r\n ...endpoint,\r\n };\r\n } else if (contract) {\r\n functionCall.metadata = {\r\n type: \"contract\",\r\n description:\r\n contract.description ||\r\n `Call ${contract.name} on ${contract.contractName}`,\r\n contractName: contract.contractName,\r\n contractAddress: contract.contractAddress,\r\n chainName: contract.chainName,\r\n chainId: contract.chainId,\r\n stateMutability: contract.stateMutability,\r\n projectId: projectId,\r\n ...contract,\r\n };\r\n } else if (ap2Tool) {\r\n functionCall.metadata = this.buildAp2Metadata(ap2Tool, projectId);\r\n } else {\r\n const fallbackMetadata = this.buildFallbackMetadata(\r\n functionName,\r\n nameCandidates\r\n );\r\n functionCall.metadata = fallbackMetadata;\r\n }\r\n\r\n functionCalls.push(functionCall);\r\n }\r\n }\r\n\r\n return functionCalls;\r\n }\r\n\r\n private generateNameCandidates(functionName: string): string[] {\r\n if (!functionName) return [];\r\n\r\n const methodPattern = /^(GET|POST|PUT|DELETE|PATCH)__/;\r\n if (methodPattern.test(functionName)) {\r\n return [functionName];\r\n }\r\n\r\n const candidates = new Set<string>();\r\n candidates.add(functionName);\r\n\r\n const parts = functionName.split(\"_\").filter(Boolean);\r\n if (parts.length > 1) {\r\n for (let i = 1; i < parts.length; i++) {\r\n const candidate = parts.slice(i).join(\"_\");\r\n if (candidate) {\r\n candidates.add(candidate);\r\n }\r\n }\r\n }\r\n\r\n return Array.from(candidates);\r\n }\r\n\r\n private buildAp2Metadata(\r\n ap2Tool: any,\r\n projectId: string\r\n ): FunctionCall[\"metadata\"] {\r\n const method = ap2Tool.metadata?.method\r\n ? String(ap2Tool.metadata.method).toUpperCase()\r\n : \"GET\";\r\n let path = ap2Tool.metadata?.path || \"\";\r\n if (path && !path.startsWith(\"/\")) {\r\n path = `/${path}`;\r\n }\r\n\r\n return {\r\n type: \"api\",\r\n description: ap2Tool.description || `Execute ${ap2Tool.name}`,\r\n method,\r\n path,\r\n baseUrl: ap2Tool.metadata?.baseUrl || \"\",\r\n merchantId: ap2Tool.metadata?.merchantId,\r\n merchantName: ap2Tool.metadata?.merchantName,\r\n ap2Category: ap2Tool.category,\r\n source: ap2Tool.source || \"ap2\",\r\n projectId,\r\n };\r\n }\r\n\r\n private buildFallbackMetadata(\r\n functionName: string,\r\n nameCandidates: string[]\r\n ): FunctionCall[\"metadata\"] {\r\n const methodPattern = /^(GET|POST|PUT|DELETE|PATCH)__(.+)$/;\r\n\r\n for (const candidateName of nameCandidates) {\r\n const match = candidateName.match(methodPattern);\r\n\r\n if (match) {\r\n const [, method, pathPart] = match;\r\n console.warn(`[Fallback] Converting tool name to path - may be incorrect for paths with underscores: ${candidateName}`);\r\n const path = \"/\" + pathPart.replace(/_/g, \"/\");\r\n return {\r\n type: \"api\",\r\n method,\r\n path,\r\n baseUrl: \"\",\r\n description: `${method} ${path}`,\r\n };\r\n }\r\n }\r\n\r\n if (functionName.includes(\"_\")) {\r\n const lastUnderscore = functionName.lastIndexOf(\"_\");\r\n\r\n if (lastUnderscore > 0) {\r\n const methodName = functionName.substring(lastUnderscore + 1);\r\n const contractPart = functionName.substring(0, lastUnderscore);\r\n\r\n let displayContractName = contractPart\r\n .replace(/__/g, \" (\")\r\n .replace(/_/g, \" \")\r\n .replace(/\\s\\(/g, \" (\")\r\n .trim();\r\n\r\n const openParens = (displayContractName.match(/\\(/g) || []).length;\r\n const closeParens = (displayContractName.match(/\\)/g) || []).length;\r\n if (openParens > closeParens) {\r\n displayContractName += \")\";\r\n }\r\n\r\n const contractPatterns = [\r\n \"ERC20\",\r\n \"ERC721\",\r\n \"ERC1155\",\r\n \"Token\",\r\n \"NFT\",\r\n \"Contract\",\r\n \"USD\",\r\n \"ETH\",\r\n \"BTC\",\r\n ];\r\n const isLikelyContract =\r\n contractPatterns.some((pattern) =>\r\n functionName.toUpperCase().includes(pattern.toUpperCase())\r\n ) || /^[A-Z]/.test(functionName);\r\n\r\n if (\r\n isLikelyContract ||\r\n methodName.match(\r\n /^(transfer|approve|balanceOf|mint|burn|name|symbol|decimals|totalSupply|owner|pause|unpause)$/i\r\n )\r\n ) {\r\n return {\r\n type: \"contract\",\r\n contractName: displayContractName,\r\n functionName: methodName,\r\n description: `Call ${methodName} on ${displayContractName}`,\r\n contractAddress: \"\",\r\n chainName: \"\",\r\n chainId: 1,\r\n stateMutability: \"nonpayable\",\r\n };\r\n }\r\n }\r\n }\r\n\r\n return {\r\n type: \"unknown\",\r\n description: `Function: ${functionName}`,\r\n };\r\n }\r\n}\r\n","/**\r\n * Function Call Executor - Orchestrator Service\r\n *\r\n * This service acts as a facade that delegates function execution to the ExecutorRegistry.\r\n * The actual execution logic is handled by specific executors (APIExecutor, ContractExecutor, etc.)\r\n */\r\n\r\nimport { injectable, inject, optional } from 'inversify';\r\nimport { FunctionCall, ExecutionResult, DomainHeaderConfig } from \"../types\";\r\nimport { ExecutionContext } from \"../core/types\";\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { ExecutorRegistry } from \"../executors/ExecutorRegistry\";\r\n\r\n/**\r\n * Interface for FunctionCallExecutor\r\n */\r\nexport interface IFunctionCallExecutor {\r\n execute(functionCall: FunctionCall, contextOverride?: Partial<ExecutionContext>): Promise<ExecutionResult>;\r\n}\r\n\r\n/**\r\n * FunctionCallExecutor now acts as a lightweight orchestrator\r\n * that delegates all execution to the ExecutorRegistry\r\n */\r\n@injectable()\r\nexport class FunctionCallExecutor implements IFunctionCallExecutor {\r\n constructor(\r\n @inject(TOKENS.ExecutorRegistry) private executorRegistry: ExecutorRegistry,\r\n @inject(TOKENS.DomainHeaders) @optional() private domainHeaders?: DomainHeaderConfig[],\r\n @inject(TOKENS.Authorization) @optional() private authorization?: string\r\n ) {\r\n console.log('[FunctionCallExecutor] Initialized with ExecutorRegistry (IoC pattern)');\r\n }\r\n\r\n /**\r\n * Execute a function call by delegating to ExecutorRegistry\r\n *\r\n * This method builds the execution context and delegates to the appropriate executor.\r\n * The ExecutorRegistry automatically routes the call to the correct executor based on type.\r\n *\r\n * @param functionCall - The function call to execute\r\n * @param contextOverride - Optional context properties to override/merge with default context\r\n * @returns Execution result from the executor\r\n */\r\n async execute(functionCall: FunctionCall, contextOverride?: Partial<ExecutionContext>): Promise<ExecutionResult> {\r\n console.log('[FunctionCallExecutor] Delegating to ExecutorRegistry:', {\r\n name: functionCall.name,\r\n type: functionCall.metadata?.type,\r\n hasContextOverride: !!contextOverride,\r\n });\r\n\r\n // Build execution context with optional overrides\r\n const context: ExecutionContext = {\r\n projectId: functionCall.metadata?.projectId || '',\r\n authorization: this.authorization,\r\n domainHeaders: this.domainHeaders,\r\n restExecuteHeaders: functionCall.metadata?.restExecuteHeaders,\r\n ...contextOverride, // Merge any overrides (e.g., beforeCallApiFunc)\r\n };\r\n\r\n try {\r\n // Delegate to ExecutorRegistry - it will find and use the appropriate executor\r\n const result = await this.executorRegistry.execute(functionCall, context);\r\n\r\n console.log('[FunctionCallExecutor] Execution completed:', {\r\n success: result.success,\r\n type: result.type,\r\n });\r\n\r\n return result;\r\n } catch (error: any) {\r\n console.error('[FunctionCallExecutor] Execution failed:', error);\r\n\r\n return {\r\n success: false,\r\n type: 'error',\r\n error: error.message || 'Unknown error occurred',\r\n metadata: {\r\n functionName: functionCall.name,\r\n functionType: functionCall.metadata?.type,\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","/**\r\n * Ethers V5 Adapter\r\n *\r\n * Implementation of IEthersAdapter for ethers.js v5.x\r\n * Wraps ethers v5 API into the unified adapter interface.\r\n */\r\n\r\nimport { injectable } from 'inversify';\r\nimport * as ethers from 'ethers';\r\nimport {\r\n IEthersAdapter,\r\n EthersProvider,\r\n EthersSigner,\r\n EthersContract,\r\n EthersInterface,\r\n} from '../interfaces/IEthersAdapter';\r\n\r\n@injectable()\r\nexport class EthersV5Adapter implements IEthersAdapter {\r\n getVersion(): number {\r\n return 5;\r\n }\r\n\r\n isV6(): boolean {\r\n return false;\r\n }\r\n\r\n isV5(): boolean {\r\n return true;\r\n }\r\n\r\n createBrowserProvider(ethereum: any): EthersProvider {\r\n // @ts-ignore - ethers v5 API\r\n return new ethers.providers.Web3Provider(ethereum);\r\n }\r\n\r\n async getSigner(provider: EthersProvider): Promise<EthersSigner> {\r\n // In v5, getSigner() is synchronous, but we return Promise for compatibility\r\n return Promise.resolve(provider.getSigner());\r\n }\r\n\r\n createContract(\r\n address: string,\r\n abi: any[],\r\n signerOrProvider: EthersSigner | EthersProvider\r\n ): EthersContract {\r\n return new ethers.Contract(address, abi, signerOrProvider);\r\n }\r\n\r\n createInterface(abi: any[]): EthersInterface {\r\n // @ts-ignore - ethers v5 API\r\n return new ethers.utils.Interface(abi);\r\n }\r\n\r\n getAddress(address: string): string {\r\n // @ts-ignore - ethers v5 API\r\n return ethers.utils.getAddress(address);\r\n }\r\n\r\n isAddress(address: string): boolean {\r\n // @ts-ignore - ethers v5 API\r\n return ethers.utils.isAddress(address);\r\n }\r\n\r\n formatUnits(value: bigint | string, decimals: number = 18): string {\r\n // @ts-ignore - ethers v5 API\r\n return ethers.utils.formatUnits(value, decimals);\r\n }\r\n\r\n parseUnits(value: string, decimals: number = 18): bigint {\r\n // @ts-ignore - ethers v5 API\r\n // v5 returns BigNumber, need to convert to bigint\r\n return ethers.utils.parseUnits(value, decimals).toBigInt();\r\n }\r\n\r\n formatEther(wei: bigint | string): string {\r\n // @ts-ignore - ethers v5 API\r\n return ethers.utils.formatEther(wei);\r\n }\r\n\r\n parseEther(ether: string): bigint {\r\n // @ts-ignore - ethers v5 API\r\n // v5 returns BigNumber, need to convert to bigint\r\n return ethers.utils.parseEther(ether).toBigInt();\r\n }\r\n\r\n getAbiCoder(): any {\r\n // @ts-ignore - ethers v5 API\r\n return ethers.utils.defaultAbiCoder;\r\n }\r\n\r\n toBigInt(value: any): bigint {\r\n if (typeof value === 'bigint') {\r\n return value;\r\n }\r\n // v5 BigNumber has toBigInt() method\r\n if (value && typeof value === 'object' && 'toBigInt' in value) {\r\n return value.toBigInt();\r\n }\r\n return BigInt(value.toString());\r\n }\r\n}\r\n","/**\r\n * Ethers V6 Adapter\r\n *\r\n * Implementation of IEthersAdapter for ethers.js v6.x\r\n * Wraps ethers v6 API into the unified adapter interface.\r\n */\r\n\r\nimport { injectable } from 'inversify';\r\nimport * as ethers from 'ethers';\r\nimport {\r\n IEthersAdapter,\r\n EthersProvider,\r\n EthersSigner,\r\n EthersContract,\r\n EthersInterface,\r\n} from '../interfaces/IEthersAdapter';\r\n\r\n@injectable()\r\nexport class EthersV6Adapter implements IEthersAdapter {\r\n getVersion(): number {\r\n return 6;\r\n }\r\n\r\n isV6(): boolean {\r\n return true;\r\n }\r\n\r\n isV5(): boolean {\r\n return false;\r\n }\r\n\r\n createBrowserProvider(ethereum: any): EthersProvider {\r\n // @ts-ignore - ethers v6 API\r\n return new ethers.BrowserProvider(ethereum);\r\n }\r\n\r\n async getSigner(provider: EthersProvider): Promise<EthersSigner> {\r\n return await provider.getSigner();\r\n }\r\n\r\n createContract(\r\n address: string,\r\n abi: any[],\r\n signerOrProvider: EthersSigner | EthersProvider\r\n ): EthersContract {\r\n return new ethers.Contract(address, abi, signerOrProvider);\r\n }\r\n\r\n createInterface(abi: any[]): EthersInterface {\r\n // @ts-ignore - ethers v6 API\r\n return new ethers.Interface(abi);\r\n }\r\n\r\n getAddress(address: string): string {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.getAddress(address);\r\n }\r\n\r\n isAddress(address: string): boolean {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.isAddress(address);\r\n }\r\n\r\n formatUnits(value: bigint | string, decimals: number = 18): string {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.formatUnits(value, decimals);\r\n }\r\n\r\n parseUnits(value: string, decimals: number = 18): bigint {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.parseUnits(value, decimals);\r\n }\r\n\r\n formatEther(wei: bigint | string): string {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.formatEther(wei);\r\n }\r\n\r\n parseEther(ether: string): bigint {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.parseEther(ether);\r\n }\r\n\r\n getAbiCoder(): any {\r\n // @ts-ignore - ethers v6 API\r\n return ethers.AbiCoder.defaultAbiCoder();\r\n }\r\n\r\n toBigInt(value: any): bigint {\r\n if (typeof value === 'bigint') {\r\n return value;\r\n }\r\n return BigInt(value.toString());\r\n }\r\n}\r\n","/**\r\n * Base Executor\r\n *\r\n * Abstract base class for all executor implementations.\r\n * Provides common functionality like validation, error handling, and logging.\r\n *\r\n * Follows the Template Method pattern - subclasses implement specific execution logic.\r\n */\r\n\r\nimport { injectable } from 'inversify';\r\nimport { IExecutor, IExecutorWithLifecycle, ValidationResult } from '../../interfaces/IExecutor';\r\nimport { FunctionCall, ExecutionResult } from '../../types';\r\nimport { ExecutionContext, ExecutionProgress } from '../../core/types';\r\n\r\n@injectable()\r\nexport abstract class BaseExecutor implements IExecutorWithLifecycle {\r\n /**\r\n * Type identifier for this executor\r\n * Must be overridden by subclasses\r\n */\r\n abstract readonly type: string;\r\n\r\n /**\r\n * Human-readable name for logging\r\n */\r\n protected get name(): string {\r\n return `${this.type}Executor`;\r\n }\r\n\r\n /**\r\n * Check if this executor can handle the given function call\r\n * Default implementation checks if function type matches executor type\r\n */\r\n canHandle(functionCall: FunctionCall): boolean {\r\n return functionCall.metadata?.type === this.type;\r\n }\r\n\r\n /**\r\n * Validate function call before execution\r\n * Can be overridden by subclasses for custom validation\r\n */\r\n validate(functionCall: FunctionCall): ValidationResult {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Basic validation\r\n if (!functionCall.name) {\r\n errors.push('Function name is required');\r\n }\r\n\r\n if (!functionCall.parameters) {\r\n errors.push('Function parameters are required');\r\n }\r\n\r\n if (!functionCall.metadata?.type) {\r\n warnings.push('Function type not specified');\r\n }\r\n\r\n // Let subclasses add their own validation\r\n const customValidation = this.validateCustom(functionCall);\r\n errors.push(...(customValidation.errors || []));\r\n warnings.push(...(customValidation.warnings || []));\r\n\r\n return {\r\n isValid: errors.length === 0,\r\n errors: errors.length > 0 ? errors : undefined,\r\n warnings: warnings.length > 0 ? warnings : undefined,\r\n };\r\n }\r\n\r\n /**\r\n * Custom validation logic for subclasses\r\n * Override this to add type-specific validation\r\n */\r\n protected validateCustom(functionCall: FunctionCall): Partial<ValidationResult> {\r\n return {};\r\n }\r\n\r\n /**\r\n * Execute the function call\r\n * This is the main entry point that orchestrates the execution lifecycle\r\n */\r\n async execute(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n const startTime = Date.now();\r\n\r\n try {\r\n // Lifecycle: onBeforeExecute\r\n await this.onBeforeExecute?.(functionCall, context);\r\n\r\n // Log execution start\r\n this.log('info', `Executing ${functionCall.name}`, { functionCall });\r\n\r\n // Validation\r\n const validation = this.validate(functionCall);\r\n if (!validation.isValid) {\r\n const errorMessage = `Validation failed: ${validation.errors?.join(', ')}`;\r\n this.log('error', errorMessage, { validation });\r\n return this.createErrorResult(errorMessage, functionCall);\r\n }\r\n\r\n // Report progress: preparing\r\n this.reportProgress(context, {\r\n stage: 'preparing',\r\n message: 'Preparing execution...',\r\n percentage: 0,\r\n });\r\n\r\n // Prepare execution (hook for subclasses)\r\n await this.onPrepare?.(functionCall, context);\r\n\r\n // Report progress: executing\r\n this.reportProgress(context, {\r\n stage: 'executing',\r\n message: 'Executing function...',\r\n percentage: 25,\r\n });\r\n\r\n // Execute the actual function (implemented by subclasses)\r\n const result = await this.executeInternal(functionCall, context);\r\n\r\n // Report progress: processing\r\n this.reportProgress(context, {\r\n stage: 'processing',\r\n message: 'Processing result...',\r\n percentage: 75,\r\n });\r\n\r\n // Post-process result (hook for subclasses)\r\n const processedResult = await this.onPostProcess?.(result, functionCall, context) || result;\r\n\r\n // Report progress: completed\r\n this.reportProgress(context, {\r\n stage: 'completed',\r\n message: 'Execution completed',\r\n percentage: 100,\r\n });\r\n\r\n // Log execution success\r\n const duration = Date.now() - startTime;\r\n this.log('info', `Execution completed in ${duration}ms`, { result, duration });\r\n\r\n // Lifecycle: onAfterExecute\r\n await this.onAfterExecute?.(functionCall, processedResult, context);\r\n\r\n return processedResult;\r\n } catch (error) {\r\n // Log error\r\n const duration = Date.now() - startTime;\r\n this.log('error', `Execution failed after ${duration}ms`, { error, duration });\r\n\r\n // Report error to context\r\n if (context.onError) {\r\n context.onError({\r\n code: 'EXECUTION_ERROR',\r\n message: error instanceof Error ? error.message : String(error),\r\n details: error,\r\n });\r\n }\r\n\r\n // Create error result\r\n const errorMessage = error instanceof Error ? error.message : String(error);\r\n const result = this.createErrorResult(errorMessage, functionCall);\r\n\r\n // Lifecycle: onAfterExecute (even on error)\r\n await this.onAfterExecute?.(functionCall, result, context);\r\n\r\n return result;\r\n }\r\n }\r\n\r\n /**\r\n * Internal execution logic - must be implemented by subclasses\r\n * This is where the actual work happens\r\n */\r\n protected abstract executeInternal(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult>;\r\n\r\n /**\r\n * Lifecycle hook: called when executor is initialized\r\n */\r\n async onInit?(): Promise<void>;\r\n\r\n /**\r\n * Lifecycle hook: called before execution starts\r\n */\r\n async onBeforeExecute?(functionCall: FunctionCall, context: ExecutionContext): Promise<void>;\r\n\r\n /**\r\n * Lifecycle hook: called to prepare execution\r\n * Useful for fetching metadata, checking permissions, etc.\r\n */\r\n protected async onPrepare?(functionCall: FunctionCall, context: ExecutionContext): Promise<void> {\r\n // Default: no preparation needed\r\n }\r\n\r\n /**\r\n * Lifecycle hook: called to post-process result\r\n * Useful for transforming data, adding metadata, etc.\r\n */\r\n protected async onPostProcess?(\r\n result: ExecutionResult,\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n // Default: return result as-is\r\n return result;\r\n }\r\n\r\n /**\r\n * Lifecycle hook: called after execution completes (success or failure)\r\n */\r\n async onAfterExecute?(\r\n functionCall: FunctionCall,\r\n result: ExecutionResult,\r\n context: ExecutionContext\r\n ): Promise<void>;\r\n\r\n /**\r\n * Lifecycle hook: called when executor is disposed\r\n */\r\n async onDispose?(): Promise<void>;\r\n\r\n /**\r\n * Helper: Create a success result\r\n */\r\n protected createSuccessResult(\r\n data: any,\r\n metadata?: Record<string, any>\r\n ): ExecutionResult {\r\n return {\r\n success: true,\r\n type: this.type as any,\r\n data,\r\n metadata,\r\n };\r\n }\r\n\r\n /**\r\n * Helper: Create an error result\r\n */\r\n protected createErrorResult(\r\n error: string,\r\n functionCall?: FunctionCall,\r\n metadata?: Record<string, any>\r\n ): ExecutionResult {\r\n return {\r\n success: false,\r\n type: 'error',\r\n error,\r\n metadata: {\r\n ...metadata,\r\n functionCall: functionCall?.name,\r\n executorType: this.type,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Helper: Report execution progress\r\n */\r\n protected reportProgress(context: ExecutionContext, progress: ExecutionProgress): void {\r\n if (context.onProgress) {\r\n context.onProgress(progress);\r\n }\r\n }\r\n\r\n /**\r\n * Helper: Log messages with consistent formatting\r\n */\r\n protected log(level: 'info' | 'warn' | 'error', message: string, data?: any): void {\r\n const prefix = `[${this.name}]`;\r\n const logData = data ? JSON.stringify(data, null, 2) : '';\r\n\r\n switch (level) {\r\n case 'info':\r\n console.log(`${prefix} ${message}`, logData || '');\r\n break;\r\n case 'warn':\r\n console.warn(`${prefix} ${message}`, logData || '');\r\n break;\r\n case 'error':\r\n console.error(`${prefix} ${message}`, logData || '');\r\n break;\r\n }\r\n }\r\n\r\n /**\r\n * Helper: Sleep utility for testing/delays\r\n */\r\n protected sleep(ms: number): Promise<void> {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n}\r\n","/**\r\n * API Executor\r\n *\r\n * Handles execution of REST API calls with domain-based header matching.\r\n * Supports GET, POST, PUT, PATCH, DELETE methods with query params, path params, and body.\r\n *\r\n * Special handling for CALLDATA responses that require blockchain transactions.\r\n */\r\n\r\nimport { inject, injectable } from 'inversify';\r\nimport axios from 'axios';\r\nimport { BaseExecutor } from './base/BaseExecutor';\r\nimport { FunctionCall, ExecutionResult, DomainHeaderConfig, ApiRequest } from '../types';\r\nimport { ExecutionContext } from '../core/types';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { IWalletService } from '../services/walletService';\r\nimport { ValidationResult } from '../interfaces/IExecutor';\r\nimport { API_PREFIX } from \"../services/api\";\r\n\r\n@injectable()\r\nexport class APIExecutor extends BaseExecutor {\r\n readonly type = 'api';\r\n\r\n constructor(\r\n @inject(TOKENS.WalletService) private walletService: IWalletService,\r\n @inject(TOKENS.DomainHeaders) private domainHeaders: DomainHeaderConfig[] = [],\r\n @inject(TOKENS.ProxyMode) private proxyMode: boolean = false,\r\n @inject(TOKENS.APIBaseUrl) private apiBaseUrl?: string\r\n ) {\r\n super();\r\n this.log('info', `[APIExecutor] Initialized with proxyMode=${proxyMode}`);\r\n }\r\n\r\n /**\r\n * Validate API-specific requirements\r\n */\r\n protected validateCustom(functionCall: FunctionCall): Partial<ValidationResult> {\r\n const errors: string[] = [];\r\n\r\n if (!functionCall.metadata?.path) {\r\n errors.push('API path is required in metadata');\r\n }\r\n\r\n return { errors: errors.length > 0 ? errors : undefined };\r\n }\r\n\r\n /**\r\n * Execute REST API call\r\n */\r\n protected async executeInternal(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n const { metadata, parameters } = functionCall;\r\n const method = (metadata?.method || 'GET').toUpperCase();\r\n const baseUrl = metadata?.baseUrl || '';\r\n let url = `${baseUrl}${metadata?.path}`;\r\n\r\n try {\r\n // Replace path parameters\r\n const pathParams = parameters.path || {};\r\n Object.keys(pathParams).forEach((key) => {\r\n url = url.replace(`{${key}}`, encodeURIComponent(pathParams[key]));\r\n });\r\n\r\n // Store original URL for domain header matching\r\n let originalUrl = url;\r\n\r\n // Handle GET query parameters for proxy mode\r\n let queryParams: any = undefined;\r\n if (method === 'GET') {\r\n queryParams =\r\n parameters.query ||\r\n (() => {\r\n const { headers, path, body, ...rest } = parameters;\r\n return Object.keys(rest).length > 0 ? rest : undefined;\r\n })();\r\n\r\n if (this.proxyMode && this.apiBaseUrl && queryParams) {\r\n const urlObj = new URL(originalUrl);\r\n Object.keys(queryParams).forEach((key) => {\r\n urlObj.searchParams.append(key, queryParams[key]);\r\n });\r\n originalUrl = urlObj.toString();\r\n queryParams = undefined;\r\n }\r\n }\r\n\r\n // Get headers for this specific URL based on domain matching\r\n const matchedHeaders = this.getHeadersForUrl(originalUrl, context);\r\n\r\n // Transform URL to proxy format if proxyMode is enabled\r\n if (this.proxyMode && this.apiBaseUrl) {\r\n const proxyUrl = `${this.apiBaseUrl}${API_PREFIX}/proxy?url=${encodeURIComponent(originalUrl)}`;\r\n this.log('info', `[ProxyMode] Routing through proxy: ${originalUrl} -> ${proxyUrl}`);\r\n url = proxyUrl;\r\n } else {\r\n url = originalUrl;\r\n }\r\n\r\n // Prepare request headers\r\n const headers: Record<string, string> = {\r\n 'Content-Type': 'application/json',\r\n ...matchedHeaders,\r\n ...parameters.headers,\r\n };\r\n\r\n // Prepare request config\r\n const config: any = {\r\n method,\r\n url,\r\n headers,\r\n };\r\n\r\n // Add query parameters\r\n if (method === 'GET' && queryParams) {\r\n config.params = queryParams;\r\n } else if (method !== 'GET' && parameters.query) {\r\n config.params = parameters.query;\r\n }\r\n\r\n // Add body for POST/PUT/PATCH\r\n if (['POST', 'PUT', 'PATCH'].includes(method)) {\r\n config.data = parameters.body || parameters;\r\n }\r\n\r\n this.log('info', `Making ${method} request to ${url}`, { config });\r\n\r\n // Call beforeCallApiFunc hook if provided\r\n if (context.beforeCallApiFunc) {\r\n this.log('info', 'Calling beforeCallApiFunc hook');\r\n const request: ApiRequest = {\r\n method: config.method,\r\n url: config.url,\r\n headers: config.headers,\r\n params: config.params,\r\n data: config.data,\r\n };\r\n const modifiedRequest = await context.beforeCallApiFunc(request);\r\n config.method = modifiedRequest.method;\r\n config.url = modifiedRequest.url;\r\n config.headers = modifiedRequest.headers;\r\n config.params = modifiedRequest.params;\r\n config.data = modifiedRequest.data;\r\n this.log('info', 'beforeCallApiFunc hook completed', { modifiedConfig: config });\r\n }\r\n\r\n // Execute the request\r\n const response = await axios(config);\r\n\r\n // Check if response contains CALLDATA that needs blockchain execution\r\n if (response.data?.type === 'CALLDATA' && response.data?.data) {\r\n this.log('info', 'Response contains CALLDATA, executing blockchain transaction');\r\n const calldataResult = await this.executeCalldataTransaction(\r\n response.data.data,\r\n metadata\r\n );\r\n\r\n return this.createSuccessResult(calldataResult, {\r\n type: 'contract',\r\n isReadOnly:\r\n metadata?.stateMutability === 'view' ||\r\n metadata?.stateMutability === 'pure',\r\n chainName: metadata?.chainName,\r\n contractAddress: metadata?.contractAddress,\r\n txHash: calldataResult.transactionHash,\r\n });\r\n }\r\n\r\n // Regular API response\r\n return this.createSuccessResult(\r\n {\r\n status: response.status,\r\n statusText: response.statusText,\r\n data: response.data,\r\n headers: response.headers,\r\n },\r\n {\r\n method,\r\n url,\r\n }\r\n );\r\n } catch (error: any) {\r\n this.log('error', `API call failed: ${error.message}`, { error });\r\n\r\n return {\r\n success: false,\r\n type: 'api',\r\n error: error.response?.data?.message || error.message,\r\n data: error.response?.data,\r\n metadata: {\r\n status: error.response?.status,\r\n method,\r\n url,\r\n },\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Match domain pattern against URL hostname\r\n */\r\n private matchDomain(url: string, pattern: string): boolean {\r\n try {\r\n const urlObj = new URL(url);\r\n const hostname = urlObj.hostname;\r\n\r\n if (pattern === hostname) return true;\r\n\r\n if (pattern.startsWith('*.')) {\r\n const baseDomain = pattern.slice(2);\r\n return hostname.endsWith('.' + baseDomain) || hostname === baseDomain;\r\n }\r\n\r\n return false;\r\n } catch (error) {\r\n this.log('error', `Invalid URL for domain matching: ${url}`, { error });\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Get headers for a specific URL by matching domain patterns\r\n */\r\n private getHeadersForUrl(url: string, context: ExecutionContext): Record<string, string> {\r\n const headers = context.domainHeaders || this.domainHeaders || [];\r\n\r\n if (headers.length === 0) {\r\n return {};\r\n }\r\n\r\n for (const config of headers) {\r\n if (this.matchDomain(url, config.domain)) {\r\n this.log('info', `Matched domain ${config.domain} for URL ${url}`);\r\n return config.headers;\r\n }\r\n }\r\n\r\n this.log('info', `No domain match found for URL ${url}`);\r\n return {};\r\n }\r\n\r\n /**\r\n * Execute a calldata transaction on the blockchain\r\n */\r\n private async executeCalldataTransaction(\r\n calldataResponse: any,\r\n metadata: any\r\n ): Promise<any> {\r\n const walletState = await this.walletService.connect();\r\n const from = walletState.address;\r\n\r\n const txParams: any = {\r\n to: calldataResponse.to,\r\n data: calldataResponse.data,\r\n };\r\n\r\n if (calldataResponse.value) {\r\n if (\r\n typeof calldataResponse.value === 'string' &&\r\n calldataResponse.value !== '0'\r\n ) {\r\n txParams.value = BigInt(calldataResponse.value);\r\n } else if (\r\n typeof calldataResponse.value === 'number' &&\r\n calldataResponse.value > 0\r\n ) {\r\n txParams.value = BigInt(calldataResponse.value);\r\n }\r\n }\r\n\r\n this.log('info', 'Sending calldata transaction', { txParams });\r\n\r\n const txHash = await this.walletService.executePayment(txParams.to, '0', {\r\n data: txParams.data,\r\n });\r\n\r\n return {\r\n transactionHash: txHash,\r\n from,\r\n to: txParams.to,\r\n };\r\n }\r\n}\r\n","/**\r\n * Contract Executor\r\n *\r\n * Handles execution of smart contract function calls.\r\n * Supports both read-only (view/pure) and write operations.\r\n * Automatically fetches ABIs from backend when needed.\r\n */\r\n\r\nimport { inject, injectable } from 'inversify';\r\nimport { BaseExecutor } from './base/BaseExecutor';\r\nimport { FunctionCall, ExecutionResult } from '../types';\r\nimport { ExecutionContext } from '../core/types';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { IWalletService } from '../services/walletService';\r\nimport type { IAPIClient } from '../interfaces/IAPIClient';\r\nimport type { IEthersAdapter } from '../interfaces/IEthersAdapter';\r\nimport { ValidationResult } from '../interfaces/IExecutor';\r\n\r\n@injectable()\r\nexport class ContractExecutor extends BaseExecutor {\r\n readonly type = 'contract';\r\n\r\n // ABI cache to avoid repeated fetches\r\n private contractABICache: Map<string, { abi: any[]; functionName: string }> = new Map();\r\n\r\n constructor(\r\n @inject(TOKENS.WalletService) private walletService: IWalletService,\r\n @inject(TOKENS.APIClient) private apiClient: IAPIClient,\r\n @inject(TOKENS.EthersAdapter) private ethersAdapter: IEthersAdapter\r\n ) {\r\n super();\r\n }\r\n\r\n /**\r\n * Validate contract-specific requirements\r\n */\r\n protected validateCustom(functionCall: FunctionCall): Partial<ValidationResult> {\r\n const errors: string[] = [];\r\n const warnings: string[] = [];\r\n const { metadata } = functionCall;\r\n\r\n if (!metadata?.contractAddress) {\r\n warnings.push('Contract address not specified - will simulate execution');\r\n }\r\n\r\n if (!metadata?.chainId && !metadata?.chainName) {\r\n warnings.push('Chain ID/name not specified - will use current chain');\r\n }\r\n\r\n return {\r\n errors: errors.length > 0 ? errors : undefined,\r\n warnings: warnings.length > 0 ? warnings : undefined,\r\n };\r\n }\r\n\r\n /**\r\n * Execute smart contract call\r\n */\r\n protected async executeInternal(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n const { metadata, parameters } = functionCall;\r\n\r\n this.log('info', 'Executing contract call', {\r\n contract: metadata?.contractName,\r\n method: functionCall.name,\r\n contractAddress: metadata?.contractAddress,\r\n projectId: context.projectId,\r\n });\r\n\r\n // Check if we have enough information to execute the contract call\r\n if (metadata?.contractAddress && (metadata?.chainId || metadata?.chainName)) {\r\n try {\r\n // Fetch ABI if needed\r\n let abiDetails: { abi: any[]; functionName: string } | null = null;\r\n\r\n if (metadata?.abi) {\r\n const inferredName =\r\n this.extractFunctionNameFromABI(metadata.abi, functionCall.name) ||\r\n functionCall.name;\r\n abiDetails = { abi: metadata.abi, functionName: inferredName };\r\n }\r\n\r\n if (!abiDetails && context.projectId) {\r\n this.log('info', `Fetching ABI for projectId: ${context.projectId}`);\r\n abiDetails = await this.getContractABI(\r\n context.projectId,\r\n metadata.contractAddress,\r\n functionCall.name\r\n );\r\n\r\n if (abiDetails) {\r\n this.log('info', 'Successfully fetched ABI from backend');\r\n } else {\r\n this.log('warn', 'Failed to fetch ABI, will try fallback methods');\r\n }\r\n }\r\n\r\n const resolvedFunctionName =\r\n abiDetails?.functionName || functionCall.name;\r\n\r\n // Build execute JSON\r\n const executeJson = metadata?.executeJson\r\n ? { ...metadata.executeJson }\r\n : {\r\n to: metadata.contractAddress,\r\n contract: metadata.contractAddress,\r\n chainId: metadata.chainId,\r\n chainName: metadata.chainName,\r\n stateMutability: metadata.stateMutability,\r\n needsEncoding: true,\r\n };\r\n\r\n executeJson.to = executeJson.to || metadata.contractAddress;\r\n executeJson.contract = executeJson.contract || metadata.contractAddress;\r\n executeJson.chainId = executeJson.chainId || metadata.chainId;\r\n executeJson.chainName = executeJson.chainName || metadata.chainName;\r\n executeJson.stateMutability =\r\n executeJson.stateMutability || metadata.stateMutability;\r\n if (executeJson.parameters === undefined) {\r\n executeJson.parameters = parameters;\r\n }\r\n\r\n if (!executeJson.functionName) {\r\n executeJson.functionName = resolvedFunctionName;\r\n }\r\n\r\n if (!executeJson.abi && abiDetails?.abi) {\r\n executeJson.abi = abiDetails.abi;\r\n }\r\n\r\n // Execute the contract call\r\n const result = await this.executeWeb3Transaction(\r\n executeJson,\r\n executeJson.functionName || resolvedFunctionName,\r\n parameters\r\n );\r\n\r\n return this.createSuccessResult(result, {\r\n isReadOnly:\r\n metadata?.stateMutability === 'view' || metadata?.stateMutability === 'pure',\r\n chainName: metadata?.chainName,\r\n contractAddress: metadata?.contractAddress,\r\n txHash: result.transactionHash,\r\n });\r\n } catch (error: any) {\r\n this.log('error', `Contract execution failed: ${error.message}`, { error });\r\n\r\n return {\r\n success: false,\r\n type: 'contract',\r\n error: error.message || 'Contract execution failed',\r\n metadata: {\r\n chainName: metadata?.chainName,\r\n contractAddress: metadata?.contractAddress,\r\n },\r\n };\r\n }\r\n }\r\n\r\n // Fallback to simulation if insufficient data\r\n this.log('warn', 'Insufficient contract data - simulating execution');\r\n\r\n return this.createSuccessResult(\r\n {\r\n contractName: metadata?.contractName,\r\n functionName: functionCall.name,\r\n parameters,\r\n result: 'Contract execution simulated - insufficient contract data',\r\n },\r\n {\r\n isReadOnly:\r\n metadata?.stateMutability === 'view' || metadata?.stateMutability === 'pure',\r\n chainName: metadata?.chainName,\r\n contractAddress: metadata?.contractAddress,\r\n simulated: true,\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Fetch ABI for a contract method from the backend\r\n */\r\n private async getContractABI(\r\n projectId: string,\r\n contractAddress: string,\r\n functionName: string\r\n ): Promise<{ abi: any[]; functionName: string } | null> {\r\n try {\r\n // Clean function name - remove any prefixes\r\n const cleanFunctionName = functionName.includes('_')\r\n ? functionName.split('_').pop() || functionName\r\n : functionName;\r\n\r\n // Create a cache key\r\n const cacheKey = `${projectId}-${contractAddress}-${cleanFunctionName}`;\r\n\r\n // Check cache first\r\n if (this.contractABICache.has(cacheKey)) {\r\n this.log('info', `ABI Cache Hit: ${contractAddress}::${cleanFunctionName}`);\r\n return this.contractABICache.get(cacheKey)!;\r\n }\r\n\r\n this.log('info', `Fetching ABI for projectId: ${projectId}`);\r\n\r\n // Fetch from API\r\n const response: any = await this.apiClient.getParsedContracts(projectId);\r\n\r\n if (!response || !response.methods || !Array.isArray(response.methods)) {\r\n this.log('warn', 'Invalid response from getParsedContracts', { response });\r\n return null;\r\n }\r\n\r\n // Find the matching contract method\r\n const method = response.methods.find(\r\n (m: any) =>\r\n m.contractAddress?.toLowerCase() === contractAddress.toLowerCase() &&\r\n m.name === cleanFunctionName\r\n );\r\n\r\n if (!method) {\r\n this.log('warn', `Contract method not found: ${contractAddress}::${cleanFunctionName}`);\r\n return null;\r\n }\r\n\r\n this.log('info', 'Method found', { method });\r\n\r\n // Build ABI from method definition\r\n const abi = [\r\n {\r\n type: 'function',\r\n name: method.name,\r\n stateMutability: method.stateMutability || 'nonpayable',\r\n inputs: method.inputs || [],\r\n outputs: method.outputs || [],\r\n },\r\n ];\r\n\r\n this.log('info', `ABI built for ${cleanFunctionName}`, { abi });\r\n\r\n // Cache the ABI\r\n const cacheValue = {\r\n abi,\r\n functionName: method.name,\r\n };\r\n\r\n this.contractABICache.set(cacheKey, cacheValue);\r\n\r\n return cacheValue;\r\n } catch (error) {\r\n this.log('error', 'Error fetching contract ABI', { error });\r\n return null;\r\n }\r\n }\r\n\r\n /**\r\n * Execute Web3 transaction (read or write)\r\n */\r\n private async executeWeb3Transaction(\r\n executeJson: any,\r\n functionName?: string,\r\n parameters?: any\r\n ): Promise<any> {\r\n // Connect wallet\r\n const walletState = await this.walletService.connect();\r\n const from = walletState.address;\r\n\r\n const contractAddress =\r\n executeJson.to || executeJson.contract || executeJson.contractAddress;\r\n\r\n // Handle data encoding\r\n let data: string;\r\n if (executeJson.data || executeJson.calldata) {\r\n data = executeJson.data || executeJson.calldata;\r\n } else if (executeJson.needsEncoding && functionName && executeJson.abi) {\r\n // Encode the function call using ethers adapter\r\n const iface = this.ethersAdapter.createInterface(executeJson.abi);\r\n const params = this.convertParametersToArray(parameters, executeJson.abi, functionName);\r\n data = iface.encodeFunctionData(functionName, params);\r\n } else {\r\n throw new Error('No transaction data provided');\r\n }\r\n\r\n // Check if this is a read-only call\r\n if (\r\n executeJson.stateMutability === 'view' ||\r\n executeJson.stateMutability === 'pure' ||\r\n executeJson.readOnly\r\n ) {\r\n this.log('info', 'Executing read-only contract call');\r\n\r\n // For read-only calls, we need to use provider.call\r\n // This is simplified - in production, you'd use the provider directly\r\n return {\r\n result: 'Read-only call simulated',\r\n decodedResult: null,\r\n readOnly: true,\r\n functionName: functionName || 'unknown',\r\n };\r\n }\r\n\r\n // Prepare transaction parameters for write operation\r\n this.log('info', 'Executing write transaction');\r\n\r\n const txHash = await this.walletService.executePayment(contractAddress, '0', {\r\n data,\r\n ...(executeJson.value && { value: BigInt(executeJson.value).toString() }),\r\n ...(executeJson.gasLimit && { gasLimit: executeJson.gasLimit }),\r\n });\r\n\r\n return {\r\n transactionHash: txHash,\r\n from,\r\n to: contractAddress,\r\n };\r\n }\r\n\r\n /**\r\n * Convert parameters object to ordered array based on ABI\r\n */\r\n private convertParametersToArray(\r\n parameters: Record<string, any>,\r\n abi: any[],\r\n functionName: string\r\n ): any[] {\r\n const functionAbi = abi.find((item) => item.name === functionName);\r\n if (!functionAbi || !functionAbi.inputs) {\r\n return Object.values(parameters);\r\n }\r\n\r\n return functionAbi.inputs.map((input: any) => {\r\n const value = parameters[input.name];\r\n if (value === undefined) {\r\n throw new Error(`Missing required parameter: ${input.name}`);\r\n }\r\n return value;\r\n });\r\n }\r\n\r\n /**\r\n * Attempt to determine the correct ABI function name to use for encoding.\r\n */\r\n private extractFunctionNameFromABI(\r\n abi: any[],\r\n fallbackName: string\r\n ): string | null {\r\n if (!Array.isArray(abi)) {\r\n return null;\r\n }\r\n\r\n const exactMatch = abi.find(\r\n (item) => item?.type === 'function' && item?.name === fallbackName\r\n );\r\n if (exactMatch?.name) {\r\n return exactMatch.name;\r\n }\r\n\r\n const firstFunction = abi.find((item) => item?.type === 'function');\r\n return firstFunction?.name || null;\r\n }\r\n}\r\n","/**\r\n * Fiat Executor\r\n *\r\n * Handles fiat currency operations via MoonPay integration.\r\n * Supports buying crypto with fiat, selling crypto for fiat, and getting currency info.\r\n */\r\n\r\nimport { inject, injectable } from 'inversify';\r\nimport { BaseExecutor } from './base/BaseExecutor';\r\nimport { FunctionCall, ExecutionResult } from '../types';\r\nimport { ExecutionContext } from '../core/types';\r\nimport { TOKENS } from '../core/tokens';\r\nimport { ValidationResult } from '../interfaces/IExecutor';\r\n\r\n// MoonPay service interface (will be injected)\r\nexport interface IMoonPayService {\r\n createBuyTransaction(params: any): Promise<any>;\r\n createSellTransaction(params: any): Promise<any>;\r\n}\r\n\r\n@injectable()\r\nexport class FiatExecutor extends BaseExecutor {\r\n readonly type = 'fiat';\r\n\r\n // MoonPay limits\r\n private readonly MOONPAY_LIMITS = { min: 30, max: 50000 };\r\n\r\n constructor(\r\n @inject(TOKENS.MoonPayService) private moonPayService: IMoonPayService\r\n ) {\r\n super();\r\n }\r\n\r\n /**\r\n * Execute fiat operation\r\n */\r\n protected async executeInternal(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n const { name, parameters, metadata } = functionCall;\r\n\r\n this.log('info', 'Executing fiat call', { name, parameters });\r\n\r\n try {\r\n if (name === 'moonpay_buy_crypto') {\r\n return await this.executeMoonPayBuy(parameters);\r\n } else if (name === 'moonpay_sell_crypto') {\r\n return await this.executeMoonPaySell(parameters);\r\n } else if (name === 'moonpay_get_currencies') {\r\n return await this.getMoonPayCurrencies(parameters);\r\n } else {\r\n return this.createErrorResult(`Unsupported fiat operation: ${name}`, functionCall);\r\n }\r\n } catch (error: any) {\r\n this.log('error', `Fiat operation failed: ${error.message}`, { error });\r\n return this.createErrorResult(error.message || 'Fiat operation failed', functionCall, {\r\n operation: name,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Execute MoonPay buy operation\r\n */\r\n private async executeMoonPayBuy(parameters: any): Promise<ExecutionResult> {\r\n const {\r\n currencyCode,\r\n baseCurrencyCode,\r\n baseCurrencyAmount,\r\n walletAddress,\r\n redirectURL,\r\n } = parameters;\r\n\r\n // Validation\r\n if (!currencyCode || !baseCurrencyCode || !baseCurrencyAmount || !walletAddress) {\r\n return this.createErrorResult(\r\n 'Missing required parameters: currencyCode, baseCurrencyCode, baseCurrencyAmount, and walletAddress are required'\r\n );\r\n }\r\n\r\n // Amount validation\r\n if (\r\n baseCurrencyAmount < this.MOONPAY_LIMITS.min ||\r\n baseCurrencyAmount > this.MOONPAY_LIMITS.max\r\n ) {\r\n return this.createErrorResult(\r\n `Amount must be between $${this.MOONPAY_LIMITS.min} and $${this.MOONPAY_LIMITS.max}`\r\n );\r\n }\r\n\r\n try {\r\n // Use MoonPay service with SDK\r\n const transaction = await this.moonPayService.createBuyTransaction({\r\n currencyCode,\r\n baseCurrencyCode,\r\n baseCurrencyAmount,\r\n walletAddress,\r\n redirectURL,\r\n onStatusUpdate: (status: string, data: any) => {\r\n this.log('info', `MoonPay Buy Status Update: ${status}`, { data });\r\n },\r\n });\r\n\r\n // Return success immediately - the widget will handle the transaction flow\r\n return {\r\n success: true,\r\n type: 'fiat',\r\n data: {\r\n message: `MoonPay widget opened for purchasing ${baseCurrencyAmount} ${baseCurrencyCode.toUpperCase()} worth of ${currencyCode.toUpperCase()}`,\r\n status: transaction.status,\r\n transactionId: transaction.transactionId,\r\n details: {\r\n amount: `${baseCurrencyAmount} ${baseCurrencyCode.toUpperCase()}`,\r\n cryptocurrency: currencyCode.toUpperCase(),\r\n walletAddress: walletAddress,\r\n widgetOpened: true,\r\n },\r\n },\r\n metadata: {\r\n operation: 'moonpay_buy',\r\n widgetOpened: true,\r\n },\r\n };\r\n } catch (error: any) {\r\n return this.createErrorResult(`Failed to open MoonPay: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Execute MoonPay sell operation\r\n */\r\n private async executeMoonPaySell(parameters: any): Promise<ExecutionResult> {\r\n const {\r\n currencyCode,\r\n baseCurrencyCode,\r\n quoteCurrencyAmount,\r\n refundWalletAddress,\r\n redirectURL,\r\n } = parameters;\r\n\r\n // Validation\r\n if (!currencyCode || !baseCurrencyCode || !quoteCurrencyAmount || !refundWalletAddress) {\r\n return this.createErrorResult(\r\n 'Missing required parameters: currencyCode, baseCurrencyCode, quoteCurrencyAmount, and refundWalletAddress are required'\r\n );\r\n }\r\n\r\n try {\r\n // Use MoonPay service with SDK\r\n const transaction = await this.moonPayService.createSellTransaction({\r\n currencyCode,\r\n baseCurrencyCode,\r\n quoteCurrencyAmount,\r\n refundWalletAddress,\r\n redirectURL,\r\n onStatusUpdate: (status: string, data: any) => {\r\n this.log('info', `MoonPay Sell Status Update: ${status}`, { data });\r\n },\r\n });\r\n\r\n // Return success immediately - the widget will handle the transaction flow\r\n return {\r\n success: true,\r\n type: 'fiat',\r\n data: {\r\n message: `MoonPay widget opened for selling ${quoteCurrencyAmount} ${currencyCode.toUpperCase()} for ${baseCurrencyCode.toUpperCase()}`,\r\n status: transaction.status,\r\n transactionId: transaction.transactionId,\r\n details: {\r\n amount: `${quoteCurrencyAmount} ${currencyCode.toUpperCase()}`,\r\n fiatCurrency: baseCurrencyCode.toUpperCase(),\r\n refundAddress: refundWalletAddress,\r\n widgetOpened: true,\r\n },\r\n },\r\n metadata: {\r\n operation: 'moonpay_sell',\r\n widgetOpened: true,\r\n },\r\n };\r\n } catch (error: any) {\r\n return this.createErrorResult(`Failed to open MoonPay: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Get MoonPay currencies\r\n */\r\n private async getMoonPayCurrencies(\r\n parameters: { type?: 'crypto' | 'fiat' | 'both' } = {}\r\n ): Promise<ExecutionResult> {\r\n const { type = 'both' } = parameters;\r\n\r\n try {\r\n const baseUrl = 'https://api.moonpay.com/v3';\r\n const responses = await Promise.all([\r\n type === 'crypto' || type === 'both'\r\n ? fetch(`${baseUrl}/currencies?type=crypto`).then((r) => r.json())\r\n : Promise.resolve([]),\r\n type === 'fiat' || type === 'both'\r\n ? fetch(`${baseUrl}/currencies?type=fiat`).then((r) => r.json())\r\n : Promise.resolve([]),\r\n ]);\r\n\r\n const [cryptoResponse, fiatResponse] = responses;\r\n\r\n return this.createSuccessResult(\r\n {\r\n message: `Retrieved ${type} currencies from MoonPay`,\r\n currencies: {\r\n crypto: Array.isArray(cryptoResponse) ? cryptoResponse : cryptoResponse.data || [],\r\n fiat: Array.isArray(fiatResponse) ? fiatResponse : fiatResponse.data || [],\r\n total: (cryptoResponse?.length || 0) + (fiatResponse?.length || 0),\r\n },\r\n supportedNetworks: ['ethereum', 'bitcoin', 'solana', 'polygon'],\r\n },\r\n {\r\n operation: 'moonpay_get_currencies',\r\n type,\r\n }\r\n );\r\n } catch (error: any) {\r\n return {\r\n success: false,\r\n type: 'fiat',\r\n error: `Failed to fetch currencies from MoonPay API: ${error.message}`,\r\n data: {\r\n fallback: {\r\n commonCrypto: ['BTC', 'ETH', 'USDC', 'USDT', 'MATIC', 'SOL'],\r\n commonFiat: ['USD', 'EUR', 'GBP', 'CAD', 'AUD'],\r\n },\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","/**\r\n * AP2 Executor\r\n *\r\n * Handles execution of AP2 (merchant) tools.\r\n * AP2 tools are backend-defined custom operations that extend the SDK's capabilities.\r\n */\r\n\r\nimport { inject, injectable } from 'inversify';\r\nimport { BaseExecutor } from './base/BaseExecutor';\r\nimport { FunctionCall, ExecutionResult } from '../types';\r\nimport { ExecutionContext } from '../core/types';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { IAPIClient } from '../interfaces/IAPIClient';\r\nimport { ValidationResult } from '../interfaces/IExecutor';\r\n\r\n@injectable()\r\nexport class AP2Executor extends BaseExecutor {\r\n readonly type = 'ap2';\r\n\r\n constructor(@inject(TOKENS.APIClient) private apiClient: IAPIClient) {\r\n super();\r\n }\r\n\r\n /**\r\n * Validate AP2-specific requirements\r\n */\r\n protected validateCustom(functionCall: FunctionCall): Partial<ValidationResult> {\r\n const errors: string[] = [];\r\n\r\n if (!functionCall.metadata?.projectId) {\r\n errors.push('AP2 tool execution requires projectId metadata');\r\n }\r\n\r\n return { errors: errors.length > 0 ? errors : undefined };\r\n }\r\n\r\n /**\r\n * Execute AP2 tool call\r\n */\r\n protected async executeInternal(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n const { metadata, parameters } = functionCall;\r\n\r\n // Use projectId from context or metadata\r\n const projectId = context.projectId || metadata?.projectId;\r\n\r\n if (!projectId) {\r\n return this.createErrorResult(\r\n 'AP2 tool execution requires projectId',\r\n functionCall\r\n );\r\n }\r\n\r\n this.log('info', 'Executing AP2 tool', {\r\n toolName: functionCall.name,\r\n projectId,\r\n parameters,\r\n });\r\n\r\n try {\r\n const response = await this.apiClient.executeAP2Tool(projectId, {\r\n toolName: functionCall.name,\r\n params: parameters,\r\n sessionId: parameters?.sessionId,\r\n });\r\n\r\n this.log('info', 'AP2 tool executed successfully', { response });\r\n\r\n return this.createSuccessResult(response, {\r\n toolName: functionCall.name,\r\n projectId,\r\n });\r\n } catch (error: any) {\r\n this.log('error', `AP2 tool execution failed: ${error.message}`, { error });\r\n\r\n return {\r\n success: false,\r\n type: 'ap2',\r\n error: error.response?.data?.message || error.message,\r\n data: error.response?.data,\r\n metadata: {\r\n toolName: functionCall.name,\r\n projectId,\r\n },\r\n };\r\n }\r\n }\r\n}\r\n","/**\r\n * Executor Registry\r\n *\r\n * Central registry for managing all function executors.\r\n * Uses Strategy pattern to dynamically route function calls to the correct executor.\r\n *\r\n * Inspired by Angular's service registry and provider pattern.\r\n */\r\n\r\nimport { inject, injectable, multiInject } from 'inversify';\r\nimport type { IExecutor } from '../interfaces/IExecutor';\r\nimport { FunctionCall, ExecutionResult } from '../types';\r\nimport { ExecutionContext } from '../core/types';\r\nimport { TOKENS } from '../core/tokens';\r\n\r\n/**\r\n * Executor registry manages all registered executors\r\n * and routes function calls to the appropriate executor\r\n */\r\n@injectable()\r\nexport class ExecutorRegistry {\r\n // Map of executor type to executor instance\r\n private executorMap: Map<string, IExecutor> = new Map();\r\n\r\n constructor(\r\n // Inject all registered executors\r\n @inject(TOKENS.APIExecutor) apiExecutor: IExecutor,\r\n @inject(TOKENS.ContractExecutor) contractExecutor: IExecutor,\r\n @inject(TOKENS.FiatExecutor) fiatExecutor: IExecutor,\r\n @inject(TOKENS.AP2Executor) ap2Executor: IExecutor\r\n ) {\r\n // Register all executors\r\n this.register(apiExecutor);\r\n this.register(contractExecutor);\r\n this.register(fiatExecutor);\r\n this.register(ap2Executor);\r\n\r\n this.log('ExecutorRegistry initialized with executors:', Array.from(this.executorMap.keys()));\r\n }\r\n\r\n /**\r\n * Register an executor\r\n *\r\n * @param executor - Executor instance to register\r\n */\r\n register(executor: IExecutor): void {\r\n if (this.executorMap.has(executor.type)) {\r\n console.warn(\r\n `[ExecutorRegistry] Executor for type \"${executor.type}\" already registered. Overwriting.`\r\n );\r\n }\r\n\r\n this.executorMap.set(executor.type, executor);\r\n this.log(`Registered executor: ${executor.type}`);\r\n }\r\n\r\n /**\r\n * Unregister an executor\r\n *\r\n * @param type - Executor type to unregister\r\n */\r\n unregister(type: string): boolean {\r\n const result = this.executorMap.delete(type);\r\n if (result) {\r\n this.log(`Unregistered executor: ${type}`);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get an executor by type\r\n *\r\n * @param type - Executor type\r\n * @returns Executor instance or undefined\r\n */\r\n getExecutor(type: string): IExecutor | undefined {\r\n return this.executorMap.get(type);\r\n }\r\n\r\n /**\r\n * Check if an executor is registered\r\n *\r\n * @param type - Executor type\r\n * @returns True if executor is registered\r\n */\r\n hasExecutor(type: string): boolean {\r\n return this.executorMap.has(type);\r\n }\r\n\r\n /**\r\n * Get all registered executors\r\n *\r\n * @returns Array of all executor instances\r\n */\r\n getAllExecutors(): IExecutor[] {\r\n return Array.from(this.executorMap.values());\r\n }\r\n\r\n /**\r\n * Get all registered executor types\r\n *\r\n * @returns Array of executor type strings\r\n */\r\n getExecutorTypes(): string[] {\r\n return Array.from(this.executorMap.keys());\r\n }\r\n\r\n /**\r\n * Find the appropriate executor for a function call\r\n *\r\n * Uses the executor's canHandle method to determine if it can execute the call.\r\n * Falls back to type-based matching if no executor claims to handle it.\r\n *\r\n * @param functionCall - Function call to find executor for\r\n * @returns Executor instance or undefined\r\n */\r\n findExecutor(functionCall: FunctionCall): IExecutor | undefined {\r\n // First, try to find an executor that explicitly says it can handle this call\r\n for (const executor of this.executorMap.values()) {\r\n if (executor.canHandle(functionCall)) {\r\n this.log(`Found executor ${executor.type} via canHandle()`);\r\n return executor;\r\n }\r\n }\r\n\r\n // Fallback: try to match by metadata type\r\n const type = functionCall.metadata?.type;\r\n if (type && this.executorMap.has(type)) {\r\n this.log(`Found executor ${type} via metadata.type fallback`);\r\n return this.executorMap.get(type);\r\n }\r\n\r\n this.log(`No executor found for function call:`, functionCall);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Execute a function call\r\n *\r\n * Automatically finds the appropriate executor and executes the call.\r\n *\r\n * @param functionCall - Function call to execute\r\n * @param context - Execution context\r\n * @returns Execution result\r\n */\r\n async execute(\r\n functionCall: FunctionCall,\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult> {\r\n this.log(`Executing function call: ${functionCall.name}`, {\r\n type: functionCall.metadata?.type,\r\n });\r\n\r\n // Find the appropriate executor\r\n const executor = this.findExecutor(functionCall);\r\n\r\n if (!executor) {\r\n const errorMessage = `No executor found for function type: ${\r\n functionCall.metadata?.type || 'unknown'\r\n }`;\r\n this.log(errorMessage, { functionCall });\r\n\r\n return {\r\n success: false,\r\n type: 'error',\r\n error: errorMessage,\r\n metadata: {\r\n functionName: functionCall.name,\r\n functionType: functionCall.metadata?.type,\r\n availableExecutors: this.getExecutorTypes(),\r\n },\r\n };\r\n }\r\n\r\n this.log(`Using executor: ${executor.type}`);\r\n\r\n try {\r\n // Execute with the found executor\r\n const result = await executor.execute(functionCall, context);\r\n this.log(`Execution completed successfully with ${executor.type}`);\r\n return result;\r\n } catch (error: any) {\r\n const errorMessage = error.message || 'Execution failed';\r\n this.log(`Execution failed with ${executor.type}: ${errorMessage}`, { error });\r\n\r\n return {\r\n success: false,\r\n type: 'error',\r\n error: errorMessage,\r\n metadata: {\r\n functionName: functionCall.name,\r\n executorType: executor.type,\r\n },\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Validate a function call\r\n *\r\n * Finds the appropriate executor and validates the call.\r\n *\r\n * @param functionCall - Function call to validate\r\n * @returns Validation result\r\n */\r\n validate(functionCall: FunctionCall): {\r\n isValid: boolean;\r\n errors?: string[];\r\n warnings?: string[];\r\n executorType?: string;\r\n } {\r\n const executor = this.findExecutor(functionCall);\r\n\r\n if (!executor) {\r\n return {\r\n isValid: false,\r\n errors: [\r\n `No executor found for function type: ${functionCall.metadata?.type || 'unknown'}`,\r\n ],\r\n };\r\n }\r\n\r\n const validation = executor.validate(functionCall);\r\n\r\n return {\r\n ...validation,\r\n executorType: executor.type,\r\n };\r\n }\r\n\r\n /**\r\n * Batch execute multiple function calls\r\n *\r\n * Executes multiple function calls in parallel.\r\n *\r\n * @param functionCalls - Array of function calls to execute\r\n * @param context - Execution context\r\n * @returns Array of execution results in the same order\r\n */\r\n async executeMany(\r\n functionCalls: FunctionCall[],\r\n context: ExecutionContext\r\n ): Promise<ExecutionResult[]> {\r\n this.log(`Batch executing ${functionCalls.length} function calls`);\r\n\r\n return Promise.all(functionCalls.map((call) => this.execute(call, context)));\r\n }\r\n\r\n /**\r\n * Log helper\r\n */\r\n private log(message: string, data?: any): void {\r\n const prefix = '[ExecutorRegistry]';\r\n if (data) {\r\n console.log(`${prefix} ${message}`, data);\r\n } else {\r\n console.log(`${prefix} ${message}`);\r\n }\r\n }\r\n}\r\n","import { h, VNode } from 'vue';\r\nimport { injectable } from 'inversify';\r\nimport { FunctionCall, ExecutionResult } from '../types';\r\nimport { IRenderer, IResultRenderer, RendererProps } from '../interfaces/IRenderer';\r\n\r\n@injectable()\r\nexport abstract class BaseRenderer implements IRenderer, IResultRenderer {\r\n abstract readonly type: string;\r\n abstract readonly name: string;\r\n\r\n canRender(functionCall: FunctionCall): boolean {\r\n return functionCall.metadata?.type === this.type;\r\n }\r\n\r\n render(props: RendererProps): VNode {\r\n const { executionResult } = props;\r\n\r\n if (executionResult) {\r\n if (executionResult.success) {\r\n return this.renderResult(executionResult, props.functionCall);\r\n }\r\n return this.renderError(executionResult.error || 'Execution failed', props.functionCall, executionResult);\r\n }\r\n\r\n return this.renderContent(props);\r\n }\r\n\r\n protected abstract renderContent(props: RendererProps): VNode;\r\n\r\n renderLoading(functionCall: FunctionCall): VNode {\r\n return h('div', { class: 'termix-function-call__loading' }, [\r\n h('div', { class: 'termix-function-call__loading-spinner' }),\r\n h('span', {}, `Executing ${functionCall.name}...`)\r\n ]);\r\n }\r\n\r\n renderResult(result: ExecutionResult, _functionCall: FunctionCall): VNode {\r\n return h('div', { class: 'termix-function-call__result-generic' }, [\r\n h('pre', {}, JSON.stringify(result.data, null, 2))\r\n ]);\r\n }\r\n\r\n renderError(error: string | Error, functionCall: FunctionCall, executionResult?: ExecutionResult): VNode {\r\n const errorMessage = typeof error === 'string' ? error : error.message;\r\n\r\n const children: VNode[] = [\r\n h('div', { class: 'termix-function-call__result-error-status' }, [\r\n h('div', { class: 'termix-function-call__result-error-status-badge' }, [\r\n h('svg', {\r\n class: 'lucide-icon',\r\n viewBox: '0 0 24 24',\r\n fill: 'none',\r\n stroke: 'currentColor',\r\n 'stroke-width': '2'\r\n }, [\r\n h('circle', { cx: '12', cy: '12', r: '10' }),\r\n h('line', { x1: '12', y1: '8', x2: '12', y2: '12' }),\r\n h('line', { x1: '12', y1: '16', x2: '12.01', y2: '16' })\r\n ]),\r\n errorMessage.toLowerCase().includes('network') ? 'Network Error' : 'Error'\r\n ]),\r\n executionResult?.metadata?.url ? h('span', {\r\n class: 'termix-function-call__result-error-status-url'\r\n }, `${executionResult.metadata.method || 'GET'} ${executionResult.metadata.url}`) : null\r\n ].filter(Boolean)),\r\n h('div', { class: 'termix-function-call__result-error-message' }, [\r\n h('strong', {}, 'Error:'),\r\n ` ${errorMessage}`\r\n ])\r\n ];\r\n\r\n if (executionResult?.data) {\r\n children.push(\r\n h('div', { class: 'termix-function-call__result-error-details' }, [\r\n h('div', { class: 'termix-function-call__result-error-details-label' }, 'Details:'),\r\n h('pre', {}, JSON.stringify(executionResult.data, null, 2))\r\n ])\r\n );\r\n }\r\n\r\n if (executionResult?.metadata && Object.keys(executionResult.metadata).length > 0) {\r\n children.push(\r\n h('div', { class: 'termix-function-call__result-error-metadata' }, [\r\n h('div', { class: 'termix-function-call__result-error-metadata-label' }, 'Additional Information:'),\r\n h('pre', {}, JSON.stringify(executionResult.metadata, null, 2))\r\n ])\r\n );\r\n }\r\n\r\n children.push(\r\n h('div', { class: 'termix-function-call__result-error-context' }, [\r\n h('p', {}, [\r\n h('strong', {}, 'Function:'),\r\n ` ${functionCall.name}`\r\n ])\r\n ])\r\n );\r\n\r\n return h('div', { class: 'termix-function-call__result-error' }, children);\r\n }\r\n\r\n protected renderParameterPreview(\r\n parameters: Record<string, any>,\r\n isExpanded?: boolean,\r\n onToggleExpand?: () => void\r\n ): VNode | null {\r\n const entries = Object.entries(parameters);\r\n if (entries.length === 0) {\r\n return null;\r\n }\r\n\r\n const expanded = !!isExpanded;\r\n\r\n const headerChildren: (VNode | null)[] = [\r\n h('span', { class: 'termix-function-call__content-parameters-header-label' }, 'Parameters:')\r\n ];\r\n\r\n if (onToggleExpand) {\r\n headerChildren.push(\r\n h('button', {\r\n onClick: onToggleExpand,\r\n class: 'termix-function-call__content-parameters-header-toggle',\r\n type: 'button'\r\n }, [\r\n h('svg', {\r\n class: 'lucide-icon',\r\n viewBox: '0 0 24 24',\r\n fill: 'none',\r\n stroke: 'currentColor',\r\n 'stroke-width': '2'\r\n }, [\r\n expanded\r\n ? h('polyline', { points: '6 9 12 15 18 9' })\r\n : h('polyline', { points: '9 18 15 12 9 6' })\r\n ])\r\n ])\r\n );\r\n }\r\n\r\n const contentChildren: VNode[] = [];\r\n\r\n if (expanded) {\r\n contentChildren.push(\r\n h('div', { class: 'termix-function-call__content-parameters-expanded' }, [\r\n h('pre', {}, JSON.stringify(parameters, null, 2))\r\n ])\r\n );\r\n } else {\r\n const previewItems = entries.slice(0, 3).map(([key, value]) =>\r\n h('div', {\r\n key,\r\n class: 'termix-function-call__content-parameters-preview-item'\r\n }, [\r\n h('span', { class: 'termix-function-call__content-parameters-preview-item-key' }, `${key}:`),\r\n h('span', {\r\n class: 'termix-function-call__content-parameters-preview-item-value'\r\n }, typeof value === 'string' ? `\"${value}\"` : JSON.stringify(value))\r\n ])\r\n );\r\n\r\n if (entries.length > 3) {\r\n previewItems.push(\r\n h('div', { class: 'termix-function-call__content-parameters-preview-more' }, `+${entries.length - 3} more parameters`)\r\n );\r\n }\r\n\r\n contentChildren.push(\r\n h('div', { class: 'termix-function-call__content-parameters-preview' }, previewItems)\r\n );\r\n }\r\n\r\n return h('div', { class: 'termix-function-call__content-parameters' }, [\r\n h('div', { class: 'termix-function-call__content-parameters-header' }, headerChildren.filter(Boolean) as VNode[]),\r\n ...contentChildren\r\n ]);\r\n }\r\n}\r\n","import { h, VNode } from 'vue';\r\nimport { injectable } from 'inversify';\r\nimport { BaseRenderer } from './BaseRenderer';\r\nimport { RendererProps } from '../interfaces/IRenderer';\r\nimport { ExecutionResult, FunctionCall } from '../types';\r\n\r\n@injectable()\r\nexport class APIRenderer extends BaseRenderer {\r\n readonly type = 'api';\r\n readonly name = 'APIRenderer';\r\n\r\n protected renderContent(props: RendererProps): VNode {\r\n const { functionCall, isExpanded, onToggleExpand } = props;\r\n const { metadata, parameters } = functionCall;\r\n\r\n const methodBadgeClass = `termix-api-method termix-api-method--${(metadata?.method || 'GET').toLowerCase()}`;\r\n\r\n return h('div', { class: 'termix-api-renderer' }, [\r\n h('div', { class: 'termix-api-renderer__endpoint' }, [\r\n h('span', { class: methodBadgeClass }, metadata?.method || 'GET'),\r\n h('code', { class: 'termix-api-renderer__path' }, metadata?.path || functionCall.name)\r\n ]),\r\n metadata?.baseUrl ? h('div', { class: 'termix-api-renderer__base-url' }, [\r\n h('span', { class: 'termix-api-renderer__base-url-label' }, 'Base URL:'),\r\n h('code', {}, metadata.baseUrl)\r\n ]) : null,\r\n this.renderParameterPreview(parameters, isExpanded, onToggleExpand)\r\n ].filter(Boolean));\r\n }\r\n\r\n renderResult(result: ExecutionResult, functionCall: FunctionCall): VNode {\r\n const data = result.data;\r\n\r\n if (data?.status) {\r\n const statusClass = data.status >= 200 && data.status < 300\r\n ? 'termix-api-renderer__status--success'\r\n : 'termix-api-renderer__status--error';\r\n\r\n return h('div', { class: 'termix-api-renderer__result' }, [\r\n h('div', { class: 'termix-api-renderer__status-line' }, [\r\n h('span', { class: `termix-api-renderer__status ${statusClass}` }, `${data.status}`),\r\n h('span', { class: 'termix-api-renderer__status-text' }, data.statusText || '')\r\n ]),\r\n h('div', { class: 'termix-api-renderer__response' }, [\r\n h('div', { class: 'termix-api-renderer__response-label' }, 'Response:'),\r\n h('pre', { class: 'termix-api-renderer__response-body' }, JSON.stringify(data.data, null, 2))\r\n ])\r\n ]);\r\n }\r\n\r\n return h('div', { class: 'termix-api-renderer__result' }, [\r\n h('pre', {}, JSON.stringify(result.data, null, 2))\r\n ]);\r\n }\r\n}\r\n","import { h, VNode } from 'vue';\r\nimport { injectable } from 'inversify';\r\nimport { BaseRenderer } from './BaseRenderer';\r\nimport { RendererProps } from '../interfaces/IRenderer';\r\nimport { ExecutionResult, FunctionCall } from '../types';\r\n\r\n@injectable()\r\nexport class ContractRenderer extends BaseRenderer {\r\n readonly type = 'contract';\r\n readonly name = 'ContractRenderer';\r\n\r\n protected renderContent(props: RendererProps): VNode {\r\n const { functionCall, isExpanded, onToggleExpand } = props;\r\n const { metadata, parameters } = functionCall;\r\n\r\n return h('div', { class: 'termix-contract-renderer' }, [\r\n h('div', { class: 'termix-contract-renderer__header' }, [\r\n h('span', { class: 'termix-contract-renderer__type-badge' }, 'Smart Contract'),\r\n metadata?.stateMutability ? h('span', {\r\n class: `termix-contract-renderer__mutability termix-contract-renderer__mutability--${metadata.stateMutability}`\r\n }, metadata.stateMutability) : null\r\n ].filter(Boolean)),\r\n h('div', { class: 'termix-contract-renderer__details' }, [\r\n metadata?.contractName ? h('div', { class: 'termix-contract-renderer__detail' }, [\r\n h('span', { class: 'termix-contract-renderer__detail-label' }, 'Contract:'),\r\n h('span', { class: 'termix-contract-renderer__detail-value' }, metadata.contractName)\r\n ]) : null,\r\n metadata?.contractAddress ? h('div', { class: 'termix-contract-renderer__detail' }, [\r\n h('span', { class: 'termix-contract-renderer__detail-label' }, 'Address:'),\r\n h('code', { class: 'termix-contract-renderer__address' }, this.truncateAddress(metadata.contractAddress))\r\n ]) : null,\r\n metadata?.chainName ? h('div', { class: 'termix-contract-renderer__detail' }, [\r\n h('span', { class: 'termix-contract-renderer__detail-label' }, 'Chain:'),\r\n h('span', { class: 'termix-contract-renderer__detail-value' }, metadata.chainName)\r\n ]) : null\r\n ].filter(Boolean)),\r\n this.renderParameterPreview(parameters, isExpanded, onToggleExpand)\r\n ].filter(Boolean));\r\n }\r\n\r\n renderResult(result: ExecutionResult, functionCall: FunctionCall): VNode {\r\n const data = result.data;\r\n\r\n if (data?.transactionHash) {\r\n return h('div', { class: 'termix-contract-renderer__result' }, [\r\n h('div', { class: 'termix-contract-renderer__result-header' }, [\r\n h('svg', {\r\n class: 'termix-contract-renderer__success-icon',\r\n viewBox: '0 0 24 24',\r\n fill: 'none',\r\n stroke: 'currentColor',\r\n 'stroke-width': '2'\r\n }, [\r\n h('path', { d: 'M22 11.08V12a10 10 0 1 1-5.93-9.14' }),\r\n h('polyline', { points: '22 4 12 14.01 9 11.01' })\r\n ]),\r\n h('span', {}, 'Transaction Confirmed')\r\n ]),\r\n h('div', { class: 'termix-contract-renderer__tx-hash' }, [\r\n h('span', { class: 'termix-contract-renderer__tx-label' }, 'Tx Hash:'),\r\n h('code', {}, this.truncateHash(data.transactionHash))\r\n ])\r\n ]);\r\n }\r\n\r\n if (data?.readOnly) {\r\n return h('div', { class: 'termix-contract-renderer__result' }, [\r\n h('div', { class: 'termix-contract-renderer__result-header' }, [\r\n h('span', {}, 'Read Result')\r\n ]),\r\n h('div', { class: 'termix-contract-renderer__read-result' }, [\r\n h('pre', {}, JSON.stringify(data.decodedResult || data.result, null, 2))\r\n ])\r\n ]);\r\n }\r\n\r\n return h('div', { class: 'termix-contract-renderer__result' }, [\r\n h('pre', {}, JSON.stringify(result.data, null, 2))\r\n ]);\r\n }\r\n\r\n private truncateAddress(address: string): string {\r\n if (address.length <= 12) return address;\r\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\r\n }\r\n\r\n private truncateHash(hash: string): string {\r\n if (hash.length <= 16) return hash;\r\n return `${hash.slice(0, 10)}...${hash.slice(-6)}`;\r\n }\r\n}\r\n","import { h, VNode } from 'vue';\r\nimport { injectable } from 'inversify';\r\nimport { BaseRenderer } from './BaseRenderer';\r\nimport { RendererProps } from '../interfaces/IRenderer';\r\nimport { ExecutionResult, FunctionCall } from '../types';\r\n\r\n@injectable()\r\nexport class FiatRenderer extends BaseRenderer {\r\n readonly type = 'fiat';\r\n readonly name = 'FiatRenderer';\r\n\r\n protected renderContent(props: RendererProps): VNode {\r\n const { functionCall, isExpanded, onToggleExpand } = props;\r\n const { parameters } = functionCall;\r\n\r\n return h('div', { class: 'termix-fiat-renderer' }, [\r\n h('div', { class: 'termix-fiat-renderer__header' }, [\r\n h('span', { class: 'termix-fiat-renderer__type-badge' }, 'Fiat Operation'),\r\n h('span', { class: 'termix-fiat-renderer__provider' }, 'MoonPay')\r\n ]),\r\n h('div', { class: 'termix-fiat-renderer__operation' }, [\r\n h('span', { class: 'termix-fiat-renderer__operation-label' }, 'Operation:'),\r\n h('span', { class: 'termix-fiat-renderer__operation-value' }, functionCall.name)\r\n ]),\r\n parameters?.baseCurrencyAmount ? h('div', { class: 'termix-fiat-renderer__amount' }, [\r\n h('span', { class: 'termix-fiat-renderer__amount-label' }, 'Amount:'),\r\n h('span', { class: 'termix-fiat-renderer__amount-value' },\r\n `${parameters.baseCurrencyAmount} ${(parameters.baseCurrencyCode || 'USD').toUpperCase()}`\r\n )\r\n ]) : null,\r\n parameters?.currencyCode ? h('div', { class: 'termix-fiat-renderer__crypto' }, [\r\n h('span', { class: 'termix-fiat-renderer__crypto-label' }, 'Crypto:'),\r\n h('span', { class: 'termix-fiat-renderer__crypto-value' }, parameters.currencyCode.toUpperCase())\r\n ]) : null,\r\n this.renderParameterPreview(parameters, isExpanded, onToggleExpand)\r\n ].filter(Boolean));\r\n }\r\n\r\n renderResult(result: ExecutionResult, functionCall: FunctionCall): VNode {\r\n const data = result.data;\r\n\r\n if (data?.widgetOpened || data?.details?.widgetOpened) {\r\n return h('div', { class: 'termix-fiat-renderer__result' }, [\r\n h('div', { class: 'termix-fiat-renderer__result-header' }, [\r\n h('svg', {\r\n class: 'termix-fiat-renderer__info-icon',\r\n viewBox: '0 0 24 24',\r\n fill: 'none',\r\n stroke: 'currentColor',\r\n 'stroke-width': '2'\r\n }, [\r\n h('circle', { cx: '12', cy: '12', r: '10' }),\r\n h('line', { x1: '12', y1: '16', x2: '12', y2: '12' }),\r\n h('line', { x1: '12', y1: '8', x2: '12.01', y2: '8' })\r\n ]),\r\n h('span', {}, 'MoonPay Widget Opened')\r\n ]),\r\n h('p', { class: 'termix-fiat-renderer__message' }, data.message || 'Complete the transaction in the MoonPay widget.'),\r\n data?.details ? h('div', { class: 'termix-fiat-renderer__details' }, [\r\n data.details.amount ? h('div', { class: 'termix-fiat-renderer__detail' }, [\r\n h('span', { class: 'termix-fiat-renderer__detail-label' }, 'Amount:'),\r\n h('span', {}, data.details.amount)\r\n ]) : null,\r\n data.details.cryptocurrency ? h('div', { class: 'termix-fiat-renderer__detail' }, [\r\n h('span', { class: 'termix-fiat-renderer__detail-label' }, 'Crypto:'),\r\n h('span', {}, data.details.cryptocurrency)\r\n ]) : null\r\n ].filter(Boolean)) : null\r\n ].filter(Boolean));\r\n }\r\n\r\n return h('div', { class: 'termix-fiat-renderer__result' }, [\r\n h('pre', {}, JSON.stringify(result.data, null, 2))\r\n ]);\r\n }\r\n}\r\n","/**\r\n * AP2 Renderer\r\n *\r\n * Renders AP2 (merchant) tool executions.\r\n */\r\n\r\nimport { h, VNode } from 'vue';\r\nimport { injectable } from 'inversify';\r\nimport { BaseRenderer } from './BaseRenderer';\r\nimport { RendererProps } from '../interfaces/IRenderer';\r\nimport { ExecutionResult, FunctionCall } from '../types';\r\n\r\n@injectable()\r\nexport class AP2Renderer extends BaseRenderer {\r\n readonly type = 'ap2';\r\n readonly name = 'AP2 Renderer';\r\n\r\n protected renderContent(props: RendererProps): VNode {\r\n const { functionCall, isExpanded, onToggleExpand } = props;\r\n const { metadata, parameters } = functionCall;\r\n\r\n return h('div', { class: 'termix-ap2-renderer' }, [\r\n h('div', { class: 'termix-function-call__content-metadata termix-function-call__content-metadata--ap2' }, [\r\n metadata?.description ? h('div', { class: 'termix-function-call__content-metadata-description' }, [\r\n h('span', { class: 'termix-function-call__content-metadata-description-label' }, 'Description:'),\r\n ' ',\r\n metadata.description\r\n ]) : null,\r\n h('div', { class: 'termix-function-call__content-metadata-ap2' }, [\r\n metadata?.merchantName ? h('div', { class: 'termix-function-call__content-metadata-ap2-item' }, [\r\n h('span', { class: 'termix-function-call__content-metadata-ap2-item-label' }, 'Merchant:'),\r\n ' ',\r\n metadata.merchantName\r\n ]) : null,\r\n metadata?.sessionId ? h('div', { class: 'termix-function-call__content-metadata-ap2-item' }, [\r\n h('span', { class: 'termix-function-call__content-metadata-ap2-item-label' }, 'Session:'),\r\n ' ',\r\n metadata.sessionId\r\n ]) : null\r\n ].filter(Boolean))\r\n ]),\r\n this.renderParameterPreview(parameters, isExpanded, onToggleExpand)\r\n ].filter(Boolean));\r\n }\r\n\r\n renderResult(result: ExecutionResult, _functionCall: FunctionCall): VNode {\r\n const { data } = result;\r\n\r\n return h('div', { class: 'termix-ap2-result' }, [\r\n h('div', { class: 'termix-function-call__result-ap2' }, [\r\n h('div', { class: 'termix-function-call__result-ap2-status' }, 'AP2 Tool Executed'),\r\n data ? h('div', { class: 'termix-function-call__result-ap2-content' }, [\r\n h('pre', {}, JSON.stringify(data, null, 2))\r\n ]) : null\r\n ].filter(Boolean))\r\n ]);\r\n }\r\n}\r\n","/**\r\n * Renderer Registry\r\n *\r\n * Central registry for managing all function call renderers.\r\n * Uses Strategy pattern to dynamically route rendering to the correct renderer.\r\n *\r\n * Inspired by Angular's component registry pattern.\r\n */\r\n\r\nimport { h, VNode } from 'vue';\r\nimport { inject, injectable } from 'inversify';\r\nimport type { IRenderer } from '../interfaces/IRenderer';\r\nimport { RendererProps } from '../interfaces/IRenderer';\r\nimport { FunctionCall } from '../types';\r\nimport { TOKENS } from '../core/tokens';\r\n\r\n/**\r\n * Renderer registry manages all registered renderers\r\n * and routes function calls to the appropriate renderer for display\r\n */\r\n@injectable()\r\nexport class RendererRegistry {\r\n // Map of renderer type to renderer instance\r\n private rendererMap: Map<string, IRenderer> = new Map();\r\n\r\n constructor(\r\n // Inject all registered renderers\r\n @inject(TOKENS.APIRenderer) apiRenderer: IRenderer,\r\n @inject(TOKENS.ContractRenderer) contractRenderer: IRenderer,\r\n @inject(TOKENS.FiatRenderer) fiatRenderer: IRenderer,\r\n @inject(TOKENS.AP2Renderer) ap2Renderer: IRenderer\r\n ) {\r\n // Register all renderers\r\n this.register(apiRenderer);\r\n this.register(contractRenderer);\r\n this.register(fiatRenderer);\r\n this.register(ap2Renderer);\r\n\r\n console.log('[RendererRegistry] Initialized with renderers:', Array.from(this.rendererMap.keys()));\r\n }\r\n\r\n /**\r\n * Register a renderer\r\n *\r\n * @param renderer - Renderer instance to register\r\n */\r\n register(renderer: IRenderer): void {\r\n if (this.rendererMap.has(renderer.type)) {\r\n console.warn(\r\n `[RendererRegistry] Renderer for type \"${renderer.type}\" already registered. Overwriting.`\r\n );\r\n }\r\n\r\n this.rendererMap.set(renderer.type, renderer);\r\n console.log(`[RendererRegistry] Registered renderer: ${renderer.type}`);\r\n }\r\n\r\n /**\r\n * Unregister a renderer\r\n *\r\n * @param type - Renderer type to unregister\r\n */\r\n unregister(type: string): boolean {\r\n const result = this.rendererMap.delete(type);\r\n if (result) {\r\n console.log(`[RendererRegistry] Unregistered renderer: ${type}`);\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Get a renderer by type\r\n *\r\n * @param type - Renderer type\r\n * @returns Renderer instance or undefined\r\n */\r\n getRenderer(type: string): IRenderer | undefined {\r\n return this.rendererMap.get(type);\r\n }\r\n\r\n /**\r\n * Check if a renderer is registered\r\n *\r\n * @param type - Renderer type\r\n * @returns True if renderer is registered\r\n */\r\n hasRenderer(type: string): boolean {\r\n return this.rendererMap.has(type);\r\n }\r\n\r\n /**\r\n * Get all registered renderers\r\n *\r\n * @returns Array of all renderer instances\r\n */\r\n getAllRenderers(): IRenderer[] {\r\n return Array.from(this.rendererMap.values());\r\n }\r\n\r\n /**\r\n * Get all registered renderer types\r\n *\r\n * @returns Array of renderer type strings\r\n */\r\n getRendererTypes(): string[] {\r\n return Array.from(this.rendererMap.keys());\r\n }\r\n\r\n /**\r\n * Find the appropriate renderer for a function call\r\n *\r\n * Uses the renderer's canRender method to determine if it can render the call.\r\n * Falls back to type-based matching if no renderer claims to handle it.\r\n *\r\n * @param functionCall - Function call to find renderer for\r\n * @returns Renderer instance or undefined\r\n */\r\n findRenderer(functionCall: FunctionCall): IRenderer | undefined {\r\n // First, try to find a renderer that explicitly says it can render this call\r\n for (const renderer of this.rendererMap.values()) {\r\n if (renderer.canRender(functionCall)) {\r\n console.log(`[RendererRegistry] Found renderer ${renderer.type} via canRender()`);\r\n return renderer;\r\n }\r\n }\r\n\r\n // Fallback: try to match by metadata type\r\n const type = functionCall.metadata?.type;\r\n if (type && this.rendererMap.has(type)) {\r\n console.log(`[RendererRegistry] Found renderer ${type} via metadata.type fallback`);\r\n return this.rendererMap.get(type);\r\n }\r\n\r\n console.log(`[RendererRegistry] No renderer found for function call:`, functionCall);\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Render a function call\r\n *\r\n * Automatically finds the appropriate renderer and renders the call.\r\n *\r\n * @param props - Renderer props including function call and context\r\n * @returns VNode to render\r\n */\r\n render(props: RendererProps): VNode {\r\n const { functionCall } = props;\r\n\r\n console.log(`[RendererRegistry] Rendering function call: ${functionCall.name}`, {\r\n type: functionCall.metadata?.type,\r\n });\r\n\r\n // Find the appropriate renderer\r\n const renderer = this.findRenderer(functionCall);\r\n\r\n if (!renderer) {\r\n console.warn(`[RendererRegistry] No renderer found for type: ${functionCall.metadata?.type || 'unknown'}`);\r\n return this.renderFallback(props);\r\n }\r\n\r\n console.log(`[RendererRegistry] Using renderer: ${renderer.type}`);\r\n\r\n try {\r\n // Render with the found renderer\r\n return renderer.render(props);\r\n } catch (error: any) {\r\n console.error(`[RendererRegistry] Render error with ${renderer.type}:`, error);\r\n return this.renderError(error, functionCall);\r\n }\r\n }\r\n\r\n /**\r\n * Render fallback UI when no renderer is found\r\n */\r\n private renderFallback(props: RendererProps): VNode {\r\n const { functionCall } = props;\r\n\r\n return h('div', { class: 'termix-renderer-fallback' }, [\r\n h('div', { class: 'termix-fallback-header' }, [\r\n h('span', { class: 'termix-fallback-icon' }, '⚠️'),\r\n h('span', {}, 'Unknown Function Type')\r\n ]),\r\n h('div', { class: 'termix-fallback-body' }, [\r\n h('p', {}, [h('strong', {}, 'Function:'), ' ', functionCall.name]),\r\n h('p', {}, [h('strong', {}, 'Type:'), ' ', functionCall.metadata?.type || 'unknown']),\r\n h('p', {}, [h('strong', {}, 'Available Renderers:'), ' ', this.getRendererTypes().join(', ')]),\r\n h('details', {}, [\r\n h('summary', {}, 'Function Details'),\r\n h('pre', {}, JSON.stringify(functionCall, null, 2))\r\n ])\r\n ])\r\n ]);\r\n }\r\n\r\n /**\r\n * Render error UI\r\n */\r\n private renderError(error: Error, functionCall: FunctionCall): VNode {\r\n return h('div', { class: 'termix-renderer-error' }, [\r\n h('div', { class: 'termix-error-header' }, [\r\n h('span', { class: 'termix-error-icon' }, '❌'),\r\n h('span', {}, 'Renderer Error')\r\n ]),\r\n h('div', { class: 'termix-error-body' }, [\r\n h('p', {}, [h('strong', {}, 'Function:'), ' ', functionCall.name]),\r\n h('p', {}, [h('strong', {}, 'Error:'), ' ', error.message]),\r\n h('details', {}, [\r\n h('summary', {}, 'Stack Trace'),\r\n h('pre', {}, error.stack)\r\n ])\r\n ])\r\n ]);\r\n }\r\n}\r\n","/**\r\n * Dependency Injection Container\r\n *\r\n * Central container for managing all service dependencies.\r\n * Uses InversifyJS for powerful DI capabilities with decorator support.\r\n *\r\n * Inspired by Angular's DI container architecture.\r\n */\r\n\r\nimport 'reflect-metadata';\r\nimport { Container } from 'inversify';\r\nimport { TOKENS } from './tokens';\r\nimport { SDKConfig } from './types';\r\n\r\n// Import services\r\nimport { APIService } from '../services/api';\r\nimport { MoonPayService } from '../services/moonpayService';\r\nimport { WalletService } from '../services/walletService';\r\nimport { ToolCallProcessor } from '../services/toolCallProcessor';\r\nimport { FunctionCallExecutor } from '../services/functionCallExecutor';\r\n\r\n// Import adapters\r\nimport { EthersV5Adapter } from '../adapters/EthersV5Adapter';\r\nimport { EthersV6Adapter } from '../adapters/EthersV6Adapter';\r\nimport { IEthersAdapter } from '../interfaces/IEthersAdapter';\r\n\r\n// Import executors\r\nimport { APIExecutor } from '../executors/APIExecutor';\r\nimport { ContractExecutor } from '../executors/ContractExecutor';\r\nimport { FiatExecutor } from '../executors/FiatExecutor';\r\nimport { AP2Executor } from '../executors/AP2Executor';\r\nimport { ExecutorRegistry } from '../executors/ExecutorRegistry';\r\n\r\n// Import renderers\r\nimport { APIRenderer } from '../renderers/APIRenderer';\r\nimport { ContractRenderer } from '../renderers/ContractRenderer';\r\nimport { FiatRenderer } from '../renderers/FiatRenderer';\r\nimport { AP2Renderer } from '../renderers/AP2Renderer';\r\nimport { RendererRegistry } from '../renderers/RendererRegistry';\r\n\r\n/**\r\n * Global DI container instance\r\n */\r\nlet container: Container | null = null;\r\n\r\n/**\r\n * Get the global container instance\r\n * Throws error if not initialized\r\n */\r\nexport function getContainer(): Container {\r\n if (!container) {\r\n throw new Error(\r\n 'DI Container not initialized. Call initializeContainer() first.'\r\n );\r\n }\r\n return container;\r\n}\r\n\r\n/**\r\n * Check if container is initialized\r\n */\r\nexport function isContainerInitialized(): boolean {\r\n return container !== null;\r\n}\r\n\r\n/**\r\n * Initialize the DI container with configuration\r\n *\r\n * This function:\r\n * 1. Creates a new container instance\r\n * 2. Registers all core services\r\n * 3. Registers all executors\r\n * 4. Registers all renderers\r\n * 5. Binds configuration values\r\n *\r\n * @param config - SDK configuration\r\n * @returns Initialized container\r\n */\r\nexport function initializeContainer(config: SDKConfig): Container {\r\n // Create new container\r\n container = new Container({\r\n defaultScope: 'Singleton', // Most services are singletons\r\n skipBaseClassChecks: true, // Allow abstract base classes\r\n });\r\n\r\n // Bind configuration values\r\n container.bind<SDKConfig>(TOKENS.SDKConfig).toConstantValue(config);\r\n container.bind<string | undefined>(TOKENS.Authorization).toConstantValue(config.authorization);\r\n container.bind<string | undefined>(TOKENS.APIBaseUrl).toConstantValue(config.apiBaseUrl);\r\n container.bind<any[] | undefined>(TOKENS.DomainHeaders).toConstantValue(config.domainHeaders || []);\r\n container.bind<boolean>(TOKENS.ProxyMode).toConstantValue(config.proxyMode || false);\r\n\r\n // Import and bind all services\r\n // This ensures @injectable decorators are processed\r\n registerServices(container);\r\n\r\n console.log('[DI Container] Initialization complete');\r\n console.log('[DI Container] Registered services:', getAllServiceTokens());\r\n\r\n return container;\r\n}\r\n\r\n/**\r\n * Detect ethers version at runtime\r\n * Returns 5 or 6 based on the installed ethers package\r\n */\r\nfunction detectEthersVersion(): number {\r\n try {\r\n // Try to import ethers\r\n const ethers = require('ethers');\r\n\r\n // Check if ethers.version exists (v5 has it, v6 might not)\r\n if (ethers.version) {\r\n const major = parseInt(ethers.version.split('.')[0]);\r\n return major;\r\n }\r\n\r\n // Check for v6-specific exports\r\n if (ethers.BrowserProvider) {\r\n return 6;\r\n }\r\n\r\n // Check for v5-specific exports\r\n if (ethers.providers && ethers.providers.Web3Provider) {\r\n return 5;\r\n }\r\n\r\n // Default to v6 if we can't determine\r\n console.warn('[DI Container] Could not detect ethers version, defaulting to v6');\r\n return 6;\r\n } catch (error) {\r\n console.error('[DI Container] Error detecting ethers version:', error);\r\n return 6; // Default to v6\r\n }\r\n}\r\n\r\n/**\r\n * Register all services in the container\r\n * All services are imported at the top of this file\r\n */\r\nfunction registerServices(container: Container): void {\r\n // Detect and bind appropriate ethers adapter\r\n const ethersVersion = detectEthersVersion();\r\n console.log(`[DI Container] Detected ethers v${ethersVersion}`);\r\n\r\n if (ethersVersion === 5) {\r\n container.bind<IEthersAdapter>(TOKENS.EthersAdapter).to(EthersV5Adapter).inSingletonScope();\r\n } else {\r\n container.bind<IEthersAdapter>(TOKENS.EthersAdapter).to(EthersV6Adapter).inSingletonScope();\r\n }\r\n\r\n // Bind core services\r\n container.bind(TOKENS.APIClient).to(APIService).inSingletonScope();\r\n container.bind(TOKENS.MoonPayService).to(MoonPayService).inSingletonScope();\r\n container.bind(TOKENS.WalletService).to(WalletService).inSingletonScope();\r\n container.bind(TOKENS.ToolCallProcessor).to(ToolCallProcessor).inSingletonScope();\r\n container.bind(TOKENS.FunctionCallExecutor).to(FunctionCallExecutor).inSingletonScope();\r\n\r\n // Bind executors\r\n container.bind(TOKENS.APIExecutor).to(APIExecutor).inSingletonScope();\r\n container.bind(TOKENS.ContractExecutor).to(ContractExecutor).inSingletonScope();\r\n container.bind(TOKENS.FiatExecutor).to(FiatExecutor).inSingletonScope();\r\n container.bind(TOKENS.AP2Executor).to(AP2Executor).inSingletonScope();\r\n container.bind(TOKENS.ExecutorRegistry).to(ExecutorRegistry).inSingletonScope();\r\n\r\n // Bind renderers\r\n container.bind(TOKENS.APIRenderer).to(APIRenderer).inSingletonScope();\r\n container.bind(TOKENS.ContractRenderer).to(ContractRenderer).inSingletonScope();\r\n container.bind(TOKENS.FiatRenderer).to(FiatRenderer).inSingletonScope();\r\n container.bind(TOKENS.AP2Renderer).to(AP2Renderer).inSingletonScope();\r\n container.bind(TOKENS.RendererRegistry).to(RendererRegistry).inSingletonScope();\r\n}\r\n\r\n/**\r\n * Get all registered service tokens\r\n * Useful for debugging\r\n */\r\nfunction getAllServiceTokens(): string[] {\r\n if (!container) return [];\r\n\r\n return Object.keys(TOKENS).filter(key => {\r\n const token = (TOKENS as any)[key];\r\n return container!.isBound(token);\r\n });\r\n}\r\n\r\n/**\r\n * Reset the container (useful for testing)\r\n */\r\nexport function resetContainer(): void {\r\n if (container) {\r\n container.unbindAll();\r\n container = null;\r\n }\r\n}\r\n\r\n/**\r\n * Create a child container (for scoped dependencies)\r\n *\r\n * Useful for:\r\n * - Per-request scoping\r\n * - Per-component scoping\r\n * - Testing with mocks\r\n *\r\n * @param parentContainer - Parent container to inherit from\r\n * @returns New child container\r\n */\r\nexport function createChildContainer(parentContainer?: Container): Container {\r\n const parent = parentContainer || getContainer();\r\n // Create a new child container manually (inversify 6.x doesn't have createChild)\r\n const child = new Container();\r\n child.parent = parent;\r\n return child;\r\n}\r\n\r\n/**\r\n * Helper to get a service from the container\r\n *\r\n * Type-safe service resolution\r\n *\r\n * @param token - Service token\r\n * @returns Service instance\r\n */\r\nexport function getService<T>(token: symbol): T {\r\n const container = getContainer();\r\n return container.get<T>(token);\r\n}\r\n\r\n/**\r\n * Helper to get all services of a type (for registries)\r\n *\r\n * @param token - Service token\r\n * @returns Array of service instances\r\n */\r\nexport function getAllServices<T>(token: symbol): T[] {\r\n const container = getContainer();\r\n return container.getAll<T>(token);\r\n}\r\n\r\n/**\r\n * Helper to check if a service is bound\r\n *\r\n * @param token - Service token\r\n * @returns True if service is bound\r\n */\r\nexport function hasService(token: symbol): boolean {\r\n const container = getContainer();\r\n return container.isBound(token);\r\n}\r\n\r\n/**\r\n * Helper to bind a service manually\r\n *\r\n * @param token - Service token\r\n * @param service - Service instance or factory\r\n * @param scope - Service scope (Singleton, Transient, Request)\r\n */\r\nexport function bindService<T>(\r\n token: symbol,\r\n service: new (...args: any[]) => T | T,\r\n scope: 'Singleton' | 'Transient' | 'Request' = 'Singleton'\r\n): void {\r\n const container = getContainer();\r\n\r\n if (typeof service === 'function') {\r\n // It's a class constructor\r\n const binding = container.bind<T>(token).to(service as new (...args: any[]) => T);\r\n\r\n switch (scope) {\r\n case 'Singleton':\r\n binding.inSingletonScope();\r\n break;\r\n case 'Transient':\r\n binding.inTransientScope();\r\n break;\r\n case 'Request':\r\n binding.inRequestScope();\r\n break;\r\n }\r\n } else {\r\n // It's an instance\r\n container.bind<T>(token).toConstantValue(service);\r\n }\r\n}\r\n\r\n/**\r\n * Helper to bind a factory function\r\n *\r\n * @param token - Service token\r\n * @param factory - Factory function\r\n */\r\nexport function bindFactory<T>(\r\n token: symbol,\r\n factory: (context: any) => T\r\n): void {\r\n const container = getContainer();\r\n container.bind<T>(token).toDynamicValue(factory);\r\n}\r\n\r\n/**\r\n * Helper to unbind a service\r\n *\r\n * @param token - Service token\r\n */\r\nexport function unbindService(token: symbol): void {\r\n const container = getContainer();\r\n if (container.isBound(token)) {\r\n container.unbind(token);\r\n }\r\n}\r\n\r\n/**\r\n * Container snapshot for testing\r\n */\r\nexport interface ContainerSnapshot {\r\n config: SDKConfig;\r\n services: Map<symbol, any>;\r\n}\r\n\r\n/**\r\n * Create a snapshot of the container state\r\n * Useful for debugging and testing\r\n */\r\nexport function snapshotContainer(): ContainerSnapshot {\r\n const container = getContainer();\r\n const config = container.get<SDKConfig>(TOKENS.SDKConfig);\r\n\r\n const services = new Map<symbol, any>();\r\n for (const token of Object.values(TOKENS)) {\r\n if (container.isBound(token)) {\r\n try {\r\n services.set(token, container.get(token));\r\n } catch (e) {\r\n // Skip services that can't be instantiated without context\r\n }\r\n }\r\n }\r\n\r\n return { config, services };\r\n}\r\n","import { Container } from 'inversify';\r\nimport { initializeContainer } from './container';\r\n\r\n/**\r\n * Internal container management for implicit DI pattern.\r\n * This module is NOT exported from the public API.\r\n *\r\n * It maintains a global container instance that gets automatically initialized\r\n * when components need services, without requiring users to manage DI themselves.\r\n */\r\n\r\nlet globalContainer: Container | null = null;\r\nlet currentConfig: string | null = null;\r\n\r\nexport interface ContainerConfig {\r\n projectId: string;\r\n authorization?: string;\r\n apiBaseUrl?: string;\r\n domainHeaders?: any[];\r\n proxyMode?: boolean;\r\n}\r\n\r\n/**\r\n * Get or create a container instance based on configuration.\r\n * If the configuration hasn't changed, returns the cached container.\r\n * Otherwise, creates a new container with the new configuration.\r\n */\r\nexport function getOrCreateContainer(config: ContainerConfig): Container {\r\n const configKey = JSON.stringify({\r\n projectId: config.projectId,\r\n authorization: config.authorization,\r\n apiBaseUrl: config.apiBaseUrl,\r\n domainHeaders: config.domainHeaders,\r\n proxyMode: config.proxyMode,\r\n });\r\n\r\n // If we already have a container with the same config, reuse it\r\n if (globalContainer && currentConfig === configKey) {\r\n return globalContainer;\r\n }\r\n\r\n // Create new container with the provided configuration\r\n globalContainer = initializeContainer({\r\n projectId: config.projectId,\r\n authorization: config.authorization,\r\n apiBaseUrl: config.apiBaseUrl,\r\n domainHeaders: config.domainHeaders,\r\n proxyMode: config.proxyMode,\r\n });\r\n currentConfig = configKey;\r\n\r\n return globalContainer;\r\n}\r\n\r\n/**\r\n * Reset the global container.\r\n * Useful for testing or when you need to force re-initialization.\r\n */\r\nexport function resetContainer(): void {\r\n globalContainer = null;\r\n currentConfig = null;\r\n}\r\n\r\n/**\r\n * Get the current container instance without creating a new one.\r\n * Returns null if no container has been initialized yet.\r\n */\r\nexport function getCurrentContainer(): Container | null {\r\n return globalContainer;\r\n}\r\n","/**\r\n * Internal DI Composable\r\n *\r\n * Internal DI composable for components.\r\n * This composable is NOT exported from the public API.\r\n *\r\n * It provides a clean way for components to access DI services\r\n * without exposing DI complexity to users.\r\n */\r\n\r\nimport { computed, ComputedRef } from 'vue';\r\nimport { Container } from 'inversify';\r\nimport { getOrCreateContainer, ContainerConfig } from '../core/internal-container';\r\n\r\nexport interface UseInternalDIConfig extends ContainerConfig {\r\n // Can extend with additional component-specific config if needed\r\n}\r\n\r\n/**\r\n * Internal DI composable for components.\r\n *\r\n * Usage inside components:\r\n * ```vue\r\n * <script setup>\r\n * const resolve = useInternalDI({ projectId, authorization, apiBaseUrl });\r\n * const apiClient = resolve<IAPIClient>(TOKENS.APIClient);\r\n * </script>\r\n * ```\r\n */\r\nexport function useInternalDI(config: UseInternalDIConfig) {\r\n // Get or create container based on config\r\n const container = getOrCreateContainer(config);\r\n\r\n // Return a resolve function that components can use to get services\r\n const resolve = <T>(serviceIdentifier: symbol | string | (new (...args: any[]) => T)): T => {\r\n return container.get<T>(serviceIdentifier as any);\r\n };\r\n\r\n return resolve;\r\n}\r\n\r\n/**\r\n * Composable for getting the current container instance.\r\n * Useful when you need direct access to the container.\r\n */\r\nexport function useInternalContainer(config: UseInternalDIConfig): Container {\r\n return getOrCreateContainer(config);\r\n}\r\n","/**\r\n * AP2 Payment Composable\r\n *\r\n * Handles AP2 payment flow with mandate signing\r\n */\r\n\r\nimport { ref, onMounted, onUnmounted } from 'vue';\r\nimport { useToast } from './useToast';\r\nimport { getApiBaseUrl } from '../lib/utils';\r\nimport { useInternalDI } from './useInternalDI';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { IAPIClient } from '../interfaces/IAPIClient';\r\n\r\nexport interface FunctionCall {\r\n name: string;\r\n parameters: any;\r\n [key: string]: any;\r\n}\r\n\r\nexport interface PaymentMandate {\r\n sessionId: string;\r\n mandateId: string;\r\n cartHash: string;\r\n amount: string;\r\n amountDisplay?: string;\r\n amountWei?: string;\r\n currency?: string;\r\n paymentDetailsId?: string;\r\n paymentTimestamp?: string;\r\n walletAddress?: string;\r\n merchant: string;\r\n typedData?: any;\r\n functionCall?: FunctionCall;\r\n items?: Array<{\r\n name: string;\r\n price: number;\r\n quantity: number;\r\n }>;\r\n}\r\n\r\nexport interface UseAP2PaymentReturn {\r\n // State\r\n pendingPayment: typeof pendingPayment;\r\n isPaymentModalOpen: typeof isPaymentModalOpen;\r\n paymentStatus: typeof paymentStatus;\r\n\r\n // Actions\r\n requestPayment: (mandate: PaymentMandate) => void;\r\n approvePayment: (signature: string, txHash?: string) => Promise<void>;\r\n rejectPayment: () => void;\r\n clearPayment: () => void;\r\n}\r\n\r\nexport interface UseAP2PaymentOptions {\r\n projectId: string;\r\n authorization?: string;\r\n customHeaders?: Record<string, string>;\r\n}\r\n\r\n// Reactive state\r\nconst pendingPayment = ref<PaymentMandate | null>(null);\r\nconst isPaymentModalOpen = ref(false);\r\nconst paymentStatus = ref<'idle' | 'pending' | 'signing' | 'completed' | 'failed'>('idle');\r\n\r\nexport function useAP2Payment(\r\n projectIdOrOptions: string | UseAP2PaymentOptions\r\n): UseAP2PaymentReturn {\r\n // Support both old (string) and new (options object) API for backward compatibility\r\n const options: UseAP2PaymentOptions = typeof projectIdOrOptions === 'string'\r\n ? { projectId: projectIdOrOptions }\r\n : projectIdOrOptions;\r\n\r\n const { projectId, authorization, customHeaders = {} } = options;\r\n\r\n const { toast } = useToast();\r\n\r\n // Resolve APIClient from DI container\r\n const resolve = useInternalDI({\r\n projectId,\r\n authorization,\r\n apiBaseUrl: getApiBaseUrl(),\r\n });\r\n const apiService = resolve<IAPIClient>(TOKENS.APIClient);\r\n\r\n const requestPayment = (mandate: PaymentMandate) => {\r\n console.log('[useAP2Payment] requestPayment called with mandate:', mandate);\r\n pendingPayment.value = mandate;\r\n isPaymentModalOpen.value = true;\r\n paymentStatus.value = 'pending';\r\n\r\n toast({\r\n title: 'Payment Required',\r\n description: `Approve payment of ${mandate.amountDisplay || mandate.amount} to complete your purchase`,\r\n });\r\n };\r\n\r\n const approvePayment = async (signature: string, txHash?: string) => {\r\n if (!pendingPayment.value) return;\r\n\r\n paymentStatus.value = 'signing';\r\n\r\n try {\r\n // Submit signature to backend using APIService\r\n await apiService.submitPaymentSignature(\r\n projectId,\r\n pendingPayment.value.sessionId,\r\n {\r\n sessionId: pendingPayment.value.sessionId,\r\n signature,\r\n mandateType: 'payment',\r\n }\r\n );\r\n\r\n if (txHash) {\r\n // Submit transaction hash if available\r\n await apiService.submitPaymentTxHash(\r\n projectId,\r\n pendingPayment.value.sessionId,\r\n txHash\r\n );\r\n }\r\n\r\n paymentStatus.value = 'completed';\r\n isPaymentModalOpen.value = false;\r\n\r\n toast({\r\n title: 'Payment Approved',\r\n description: 'Your payment has been processed successfully',\r\n });\r\n\r\n // Notify the chat that payment was approved\r\n if (typeof window !== 'undefined') {\r\n try {\r\n window.dispatchEvent(new CustomEvent('ap2:payment:approved', {\r\n detail: {\r\n sessionId: pendingPayment.value.sessionId,\r\n signature,\r\n txHash,\r\n functionCall: pendingPayment.value.functionCall,\r\n }\r\n }));\r\n } catch (error) {\r\n console.warn('Failed to emit payment approved event', error);\r\n }\r\n }\r\n\r\n // Clear payment after a delay\r\n setTimeout(() => {\r\n pendingPayment.value = null;\r\n paymentStatus.value = 'idle';\r\n }, 2000);\r\n\r\n } catch (error: any) {\r\n console.error('Error approving payment:', error);\r\n paymentStatus.value = 'failed';\r\n\r\n toast({\r\n title: 'Payment Failed',\r\n description: error.response?.data?.message || 'Failed to process payment',\r\n variant: 'destructive',\r\n });\r\n }\r\n };\r\n\r\n const rejectPayment = () => {\r\n if (!pendingPayment.value) return;\r\n\r\n isPaymentModalOpen.value = false;\r\n paymentStatus.value = 'failed';\r\n\r\n toast({\r\n title: 'Payment Cancelled',\r\n description: 'You cancelled the payment',\r\n variant: 'destructive',\r\n });\r\n\r\n // Notify the chat that payment was rejected\r\n if (typeof window !== 'undefined') {\r\n try {\r\n window.dispatchEvent(new CustomEvent('ap2:payment:rejected', {\r\n detail: {\r\n sessionId: pendingPayment.value.sessionId,\r\n }\r\n }));\r\n } catch (error) {\r\n console.warn('Failed to emit payment rejected event', error);\r\n }\r\n }\r\n\r\n pendingPayment.value = null;\r\n paymentStatus.value = 'idle';\r\n };\r\n\r\n const clearPayment = () => {\r\n pendingPayment.value = null;\r\n isPaymentModalOpen.value = false;\r\n paymentStatus.value = 'idle';\r\n };\r\n\r\n // Listen for payment requests from the chat (via tool calls)\r\n const handlePaymentRequest = (event: CustomEvent<PaymentMandate>) => {\r\n console.log('[useAP2Payment] Payment request received!', event.detail);\r\n requestPayment(event.detail);\r\n };\r\n\r\n onMounted(() => {\r\n console.log('[useAP2Payment] Setting up event listener for ap2:payment:requested');\r\n window.addEventListener('ap2:payment:requested' as any, handlePaymentRequest as any);\r\n });\r\n\r\n onUnmounted(() => {\r\n console.log('[useAP2Payment] Cleaning up event listener');\r\n window.removeEventListener('ap2:payment:requested' as any, handlePaymentRequest as any);\r\n });\r\n\r\n return {\r\n pendingPayment,\r\n isPaymentModalOpen,\r\n paymentStatus,\r\n requestPayment,\r\n approvePayment,\r\n rejectPayment,\r\n clearPayment,\r\n };\r\n}\r\n","<script setup lang=\"ts\">\r\n/**\r\n * WalletConnect Component\r\n *\r\n * Component for connecting MetaMask wallet\r\n */\r\n\r\nimport { ref, onMounted, onUnmounted } from 'vue';\r\nimport type { IWalletService, WalletState } from '../services/walletService';\r\nimport '../styles/components/wallet-connect.less';\r\n\r\nconst props = defineProps<{\r\n walletService: IWalletService;\r\n onConnect?: (address: string) => void;\r\n onDisconnect?: () => void;\r\n showInChat?: boolean;\r\n}>();\r\n\r\nconst walletState = ref<WalletState>(props.walletService.getState());\r\nconst isConnecting = ref(false);\r\nconst error = ref<string | null>(null);\r\n\r\nlet unsubscribe: (() => void) | null = null;\r\n\r\nonMounted(() => {\r\n // Subscribe to wallet state changes\r\n unsubscribe = props.walletService.subscribe((state) => {\r\n walletState.value = state;\r\n });\r\n});\r\n\r\nonUnmounted(() => {\r\n if (unsubscribe) {\r\n unsubscribe();\r\n }\r\n});\r\n\r\nconst handleConnect = async () => {\r\n isConnecting.value = true;\r\n error.value = null;\r\n\r\n try {\r\n const state = await props.walletService.connect();\r\n if (state.address && props.onConnect) {\r\n props.onConnect(state.address);\r\n }\r\n } catch (err: any) {\r\n error.value = err.message || 'Failed to connect wallet';\r\n } finally {\r\n isConnecting.value = false;\r\n }\r\n};\r\n\r\nconst handleDisconnect = () => {\r\n props.walletService.disconnect();\r\n if (props.onDisconnect) {\r\n props.onDisconnect();\r\n }\r\n};\r\n</script>\r\n\r\n<template>\r\n <!-- MetaMask not installed -->\r\n <div\r\n v-if=\"!walletService.isMetaMaskInstalled()\"\r\n :class=\"['wallet-connect-container', showInChat ? 'in-chat' : '']\"\r\n >\r\n <div class=\"wallet-not-installed\">\r\n <svg class=\"wallet-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n />\r\n </svg>\r\n <p>MetaMask not installed</p>\r\n <a\r\n href=\"https://metamask.io/download/\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"install-link\"\r\n >\r\n Install MetaMask\r\n </a>\r\n </div>\r\n </div>\r\n\r\n <!-- Wallet connected -->\r\n <div\r\n v-else-if=\"walletState.isConnected\"\r\n :class=\"['wallet-connect-container', showInChat ? 'in-chat' : '']\"\r\n >\r\n <div class=\"wallet-connected\">\r\n <div class=\"wallet-info\">\r\n <div class=\"wallet-status\">\r\n <span class=\"status-dot connected\"></span>\r\n <span class=\"status-text\">Connected</span>\r\n </div>\r\n <div class=\"wallet-details\">\r\n <div class=\"wallet-address\">\r\n {{ walletService.getShortAddress() }}\r\n </div>\r\n <div class=\"wallet-balance\">\r\n {{ walletService.getFormattedBalance() }}\r\n </div>\r\n <div v-if=\"walletState.network\" class=\"wallet-network\">\r\n {{ walletState.network }}\r\n </div>\r\n </div>\r\n </div>\r\n <button class=\"wallet-disconnect-btn\" @click=\"handleDisconnect\">\r\n Disconnect\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Wallet disconnected -->\r\n <div\r\n v-else\r\n :class=\"['wallet-connect-container', showInChat ? 'in-chat' : '']\"\r\n >\r\n <div class=\"wallet-disconnected\">\r\n <div v-if=\"showInChat\" class=\"wallet-connect-prompt\">\r\n <svg class=\"wallet-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n />\r\n <polyline\r\n points=\"9 22 9 12 15 12 15 22\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n />\r\n </svg>\r\n <p class=\"prompt-text\">\r\n Connect your wallet to proceed with payment\r\n </p>\r\n </div>\r\n\r\n <button\r\n class=\"wallet-connect-btn\"\r\n @click=\"handleConnect\"\r\n :disabled=\"isConnecting\"\r\n >\r\n <template v-if=\"isConnecting\">\r\n <span class=\"spinner\"></span>\r\n Connecting...\r\n </template>\r\n <template v-else>\r\n <img\r\n src=\"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzMiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMyAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTMwLjkyMjcgMC45NDE0MDZIMi4wNzcyN0MxLjQ5MzA3IDAuOTQxNDA2IDAuOTQwOTE4IDEuNDkzNTggMC45NDA5MTggMi4wNzc3N1YyOS45MjMyQzAuOTQwOTE4IDMwLjUwNzQgMS40OTMwNyAzMS4wNTk2IDIuMDc3MjcgMzEuMDU5NkgzMC45MjI3QzMxLjUwNjkgMzEuMDU5NiAzMi4wNTkxIDMwLjUwNzQgMzIuMDU5MSAyOS45MjMyVjIuMDc3NzdDMzIuMDU5MSAxLjQ5MzU4IDMxLjUwNjkgMC45NDE0MDYgMzAuOTIyNyAwLjk0MTQwNloiIGZpbGw9IiNGNjg1MUIiLz4KPHBhdGggZD0iTTIzLjIxNjQgOC45NzczNEMyMS4yNzQxIDcuMDM1MDMgMTguMTQ2MyA3LjAzNTAzIDE2LjIwNCA4Ljk3NzM0TDEzLjUwODUgMTEuNjcyOEwxMS42MjU4IDEwLjU2ODdMMTQuMzIxMyA3Ljg3MzI0QzE2LjI2MzYgNS45MzA5MyAxOS4zOTE0IDUuOTMwOTMgMjEuMzMzNyA3Ljg3MzI0TDIzLjIxNjQgOC45NzczNFoiIGZpbGw9IiNGNkY2RjYiLz4KPHBhdGggZD0iTTkuNzgzMjYgOC45NzczNEMxMS43MjU2IDcuMDM1MDMgMTQuODUzNCA3LjAzNTAzIDE2Ljc5NTcgOC45NzczNEwxOC42Nzg0IDEwLjU2ODdMMTcuNDkxOCAxMS42NzI4TDE0Ljc5NjMgOC45NzczNEMxMi44NTQgNy4wMzUwMyA5LjcyNjE3IDcuMDM1MDMgNy43ODM4NyA4Ljk3NzM0TDkuNzgzMjYgOC45NzczNFoiIGZpbGw9IiNGNkY2RjYiLz4KPHBhdGggZD0iTTcuNzgzNjQgMjMuMDIzMkM5LjcyNTk0IDI0Ljk2NTUgMTIuODUzNyAyNC45NjU1IDE0Ljc5NjEgMjMuMDIzMkwxNy40OTE1IDIwLjMyNzdMMTkuMzc0MyAyMS40MzE4TDE2LjY3ODggMjQuMTI3M0MxNC43MzY1IDI2LjA2OTYgMTEuNjA4NyAyNi4wNjk2IDkuNjY2NDEgMjQuMTI3M0w3Ljc4MzY0IDIzLjAyMzJaIiBmaWxsPSIjRjZGNkY2Ii8+CjxwYXRoIGQ9Ik0yMy4yMTY2IDIzLjAyMzJDMjEuMjc0MyAyNC45NjU1IDE4LjE0NjUgMjQuOTY1NSAxNi4yMDQyIDIzLjAyMzJMMTMuNTA4NyAyMC4zMjc3TDExLjYyNiAyMS40MzE4TDE0LjMyMTUgMjQuMTI3M0MxNi4yNjM4IDI2LjA2OTYgMTkuMzkxNiAyNi4wNjk2IDIxLjMzMzkgMjQuMTI3M0wyMy4yMTY2IDIzLjAyMzJaIiBmaWxsPSIjRjZGNkY2Ii8+Cjwvc3ZnPg==\"\r\n alt=\"MetaMask\"\r\n class=\"metamask-logo\"\r\n />\r\n Connect MetaMask\r\n </template>\r\n </button>\r\n\r\n <div v-if=\"error\" class=\"wallet-error\">{{ error }}</div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * AP2PaymentFlow Component\r\n *\r\n * Multi-step payment flow for AP2 protocol payments\r\n */\r\n\r\nimport { ref, computed, onMounted, onUnmounted } from 'vue';\r\nimport WalletConnect from './WalletConnect.vue';\r\nimport type { IWalletService, WalletState } from '../services/walletService';\r\nimport '../styles/components/ap2-payment.less';\r\n\r\ninterface NetworkConfig {\r\n id: string;\r\n chainId: number;\r\n label: string;\r\n shortLabel: string;\r\n currency: string;\r\n currencySymbol: string;\r\n explorerUrl: string;\r\n isTestnet: boolean;\r\n}\r\n\r\nconst DEFAULT_NETWORK: NetworkConfig = {\r\n id: 'sepolia',\r\n chainId: 11155111,\r\n label: 'Sepolia',\r\n shortLabel: 'Sepolia',\r\n currency: 'SepoliaETH',\r\n currencySymbol: 'ETH',\r\n explorerUrl: 'https://sepolia.etherscan.io',\r\n isTestnet: true,\r\n};\r\n\r\nconst props = defineProps<{\r\n walletService: IWalletService;\r\n cartMandate?: any;\r\n paymentMandate?: any;\r\n merchantAddress?: string;\r\n totalAmount?: string;\r\n sessionId?: string;\r\n network?: NetworkConfig;\r\n onPaymentComplete?: (txHash: string) => void;\r\n onPaymentError?: (error: string) => void;\r\n}>();\r\n\r\nconst walletState = ref<WalletState>(props.walletService.getState());\r\nconst paymentStep = ref<'connect' | 'review' | 'confirm' | 'processing' | 'complete'>('connect');\r\nconst txHash = ref<string | null>(null);\r\nconst error = ref<string | null>(null);\r\n\r\nlet unsubscribe: (() => void) | null = null;\r\n\r\n// Extract currency and network info\r\nconst activeNetwork = computed(() => props.network || DEFAULT_NETWORK);\r\nconst currency = computed(() =>\r\n props.paymentMandate?.paymentMandateContents?.paymentDetailsTotal?.amount?.currency ||\r\n activeNetwork.value.currency\r\n);\r\nconst currencySymbol = computed(() => activeNetwork.value.currencySymbol);\r\n\r\nconst resolvedAmount = computed(() => {\r\n const amountInfo = props.paymentMandate?.paymentMandateContents?.paymentDetailsTotal?.amount || {};\r\n const amountFromMandate =\r\n typeof amountInfo.value === 'number'\r\n ? amountInfo.value.toString()\r\n : typeof amountInfo.value === 'string'\r\n ? amountInfo.value\r\n : undefined;\r\n\r\n if (props.totalAmount) return props.totalAmount;\r\n if (amountFromMandate) return amountFromMandate;\r\n if (amountInfo.valueInWei) {\r\n // Format from wei - this is a simplified version\r\n try {\r\n const wei = BigInt(amountInfo.valueInWei);\r\n const eth = Number(wei) / 1e18;\r\n return eth.toString();\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n return undefined;\r\n});\r\n\r\nonMounted(() => {\r\n unsubscribe = props.walletService.subscribe((state) => {\r\n walletState.value = state;\r\n if (state.isConnected && paymentStep.value === 'connect') {\r\n paymentStep.value = 'review';\r\n }\r\n });\r\n});\r\n\r\nonUnmounted(() => {\r\n if (unsubscribe) {\r\n unsubscribe();\r\n }\r\n});\r\n\r\nconst handlePayment = async () => {\r\n if (!walletState.value.isConnected || !props.merchantAddress || !resolvedAmount.value) {\r\n error.value = 'Missing payment information';\r\n return;\r\n }\r\n\r\n paymentStep.value = 'processing';\r\n error.value = null;\r\n\r\n try {\r\n // Execute payment through MetaMask\r\n const hash = await props.walletService.executePayment(\r\n props.merchantAddress,\r\n resolvedAmount.value\r\n );\r\n\r\n txHash.value = hash;\r\n paymentStep.value = 'complete';\r\n\r\n if (props.onPaymentComplete) {\r\n props.onPaymentComplete(hash);\r\n }\r\n } catch (err: any) {\r\n error.value = err.message || 'Payment failed';\r\n paymentStep.value = 'review';\r\n if (props.onPaymentError) {\r\n props.onPaymentError(err.message);\r\n }\r\n }\r\n};\r\n\r\nconst handleReset = () => {\r\n paymentStep.value = 'connect';\r\n txHash.value = null;\r\n};\r\n\r\nconst handleDisconnect = () => {\r\n props.walletService.disconnect();\r\n paymentStep.value = 'connect';\r\n};\r\n</script>\r\n\r\n<template>\r\n <div class=\"ap2-payment-flow\">\r\n <div class=\"ap2-payment-header\">\r\n <h3>AP2 Payment Authorization</h3>\r\n <div class=\"payment-steps\">\r\n <div :class=\"['step', paymentStep === 'connect' ? 'active' : walletState.isConnected ? 'complete' : '']\">\r\n 1. Connect Wallet\r\n </div>\r\n <div :class=\"['step', paymentStep === 'review' ? 'active' : ['confirm', 'processing', 'complete'].includes(paymentStep) ? 'complete' : '']\">\r\n 2. Review Payment\r\n </div>\r\n <div :class=\"['step', ['confirm', 'processing'].includes(paymentStep) ? 'active' : paymentStep === 'complete' ? 'complete' : '']\">\r\n 3. Confirm Transaction\r\n </div>\r\n <div :class=\"['step', paymentStep === 'complete' ? 'active complete' : '']\">\r\n 4. Complete\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"ap2-payment-content\">\r\n <!-- Step 1: Connect Wallet -->\r\n <div v-if=\"paymentStep === 'connect'\" class=\"payment-step-content\">\r\n <div class=\"step-icon\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n </svg>\r\n </div>\r\n <h4>Connect Your Wallet</h4>\r\n <p>Connect your MetaMask wallet to proceed with the payment</p>\r\n <WalletConnect :wallet-service=\"walletService\" :show-in-chat=\"true\" />\r\n </div>\r\n\r\n <!-- Step 2: Review Payment -->\r\n <div v-if=\"paymentStep === 'review' && walletState.isConnected\" class=\"payment-step-content\">\r\n <div class=\"wallet-info-display\">\r\n <div class=\"info-row\">\r\n <span class=\"label\">Your Wallet:</span>\r\n <span class=\"value\">{{ walletService.getShortAddress() }}</span>\r\n </div>\r\n <div class=\"info-row\">\r\n <span class=\"label\">Balance:</span>\r\n <span class=\"value\">{{ walletService.getFormattedBalance() }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"payment-details\">\r\n <h4>Payment Details</h4>\r\n <div class=\"detail-row\">\r\n <span class=\"label\">To Merchant:</span>\r\n <span class=\"value\">\r\n {{ merchantAddress ? `${merchantAddress.slice(0, 6)}...${merchantAddress.slice(-4)}` : 'Not specified' }}\r\n </span>\r\n </div>\r\n <div class=\"detail-row\">\r\n <span class=\"label\">Amount:</span>\r\n <span class=\"value amount\">{{ resolvedAmount || '0' }} {{ currencySymbol }}</span>\r\n </div>\r\n <div v-if=\"cartMandate\" class=\"detail-row\">\r\n <span class=\"label\">Cart ID:</span>\r\n <span class=\"value\">{{ cartMandate.contents?.id || sessionId }}</span>\r\n </div>\r\n </div>\r\n\r\n <div class=\"mandate-info\">\r\n <div class=\"info-box\">\r\n <svg class=\"info-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"16\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n </svg>\r\n <p>This payment follows the AP2 protocol with mandate-based authorization</p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"payment-actions\">\r\n <button class=\"btn-secondary\" @click=\"handleDisconnect\">\r\n Cancel\r\n </button>\r\n <button class=\"btn-primary\" @click=\"paymentStep = 'confirm'\">\r\n Proceed to Payment\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Step 3: Confirm Transaction -->\r\n <div v-if=\"paymentStep === 'confirm'\" class=\"payment-step-content\">\r\n <div class=\"confirm-icon\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M9 11l3 3L22 4\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n <path d=\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\" stroke=\"currentColor\" stroke-width=\"2\"/>\r\n </svg>\r\n </div>\r\n <h4>Confirm Transaction</h4>\r\n <p class=\"confirm-message\">\r\n You are about to send <strong>{{ resolvedAmount }} {{ currencySymbol }}</strong> to the merchant.\r\n This action cannot be undone.\r\n </p>\r\n <div class=\"payment-actions\">\r\n <button class=\"btn-secondary\" @click=\"paymentStep = 'review'\">\r\n Back\r\n </button>\r\n <button class=\"btn-primary confirm\" @click=\"handlePayment\">\r\n Confirm & Pay\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <!-- Step 4: Processing -->\r\n <div v-if=\"paymentStep === 'processing'\" class=\"payment-step-content\">\r\n <div class=\"processing-spinner\">\r\n <div class=\"spinner\"></div>\r\n </div>\r\n <h4>Processing Payment</h4>\r\n <p>Please confirm the transaction in your MetaMask wallet...</p>\r\n <p class=\"processing-note\">Do not close this window</p>\r\n </div>\r\n\r\n <!-- Step 5: Complete -->\r\n <div v-if=\"paymentStep === 'complete' && txHash\" class=\"payment-step-content\">\r\n <div class=\"success-icon\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#10B981\"/>\r\n <path d=\"M8 12l2 2 4-4\" stroke=\"white\" stroke-width=\"2\"/>\r\n </svg>\r\n </div>\r\n <h4>Payment Successful!</h4>\r\n <p>Your payment has been processed successfully.</p>\r\n <div class=\"tx-details\">\r\n <div class=\"tx-hash\">\r\n <span class=\"label\">Transaction Hash:</span>\r\n <a\r\n :href=\"`${activeNetwork.explorerUrl}/tx/${txHash}`\"\r\n target=\"_blank\"\r\n rel=\"noopener noreferrer\"\r\n class=\"tx-link\"\r\n >\r\n {{ txHash.slice(0, 10) }}...{{ txHash.slice(-8) }}\r\n </a>\r\n </div>\r\n </div>\r\n <button class=\"btn-primary\" @click=\"handleReset\">\r\n Done\r\n </button>\r\n </div>\r\n\r\n <!-- Error Display -->\r\n <div v-if=\"error\" class=\"payment-error\">\r\n <svg class=\"error-icon\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#EF4444\" stroke-width=\"2\"/>\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" stroke=\"#EF4444\" stroke-width=\"2\"/>\r\n <circle cx=\"12\" cy=\"16\" r=\"1\" fill=\"#EF4444\"/>\r\n </svg>\r\n <p>{{ error }}</p>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst isEmptyString = (value) => value === \"\";\n\nexport { isEmptyString, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n \"stroke-width\": 2,\n \"stroke-linecap\": \"round\",\n \"stroke-linejoin\": \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport { mergeClasses, toKebabCase, toPascalCase, isEmptyString } from './shared/src/utils.js';\nimport defaultAttributes from './defaultAttributes.js';\n\nconst Icon = ({\n name,\n iconNode,\n absoluteStrokeWidth,\n \"absolute-stroke-width\": absoluteStrokeWidthKebabCase,\n strokeWidth,\n \"stroke-width\": strokeWidthKebabCase,\n size = defaultAttributes.width,\n color = defaultAttributes.stroke,\n ...props\n}, { slots }) => {\n return h(\n \"svg\",\n {\n ...defaultAttributes,\n ...props,\n width: size,\n height: size,\n stroke: color,\n \"stroke-width\": isEmptyString(absoluteStrokeWidth) || isEmptyString(absoluteStrokeWidthKebabCase) || absoluteStrokeWidth === true || absoluteStrokeWidthKebabCase === true ? Number(strokeWidth || strokeWidthKebabCase || defaultAttributes[\"stroke-width\"]) * 24 / Number(size) : strokeWidth || strokeWidthKebabCase || defaultAttributes[\"stroke-width\"],\n class: mergeClasses(\n \"lucide\",\n props.class,\n ...name ? [`lucide-${toKebabCase(toPascalCase(name))}-icon`, `lucide-${toKebabCase(name)}`] : [\"lucide-icon\"]\n )\n },\n [...iconNode.map((child) => h(...child)), ...slots.default ? [slots.default()] : []]\n );\n};\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { h } from 'vue';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => (props, { slots, attrs }) => h(\n Icon,\n {\n ...attrs,\n ...props,\n iconNode,\n name: iconName\n },\n slots\n);\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CodeXml = createLucideIcon(\"code-xml\", [\n [\"path\", { d: \"m18 16 4-4-4-4\", key: \"1inbqp\" }],\n [\"path\", { d: \"m6 8-4 4 4 4\", key: \"15zrgr\" }],\n [\"path\", { d: \"m14.5 4-5 16\", key: \"e7oirm\" }]\n]);\n\nexport { CodeXml as default };\n//# sourceMappingURL=code-xml.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Copy = createLucideIcon(\"copy\", [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n]);\n\nexport { Copy as default };\n//# sourceMappingURL=copy.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst DollarSign = createLucideIcon(\"dollar-sign\", [\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"2\", y2: \"22\", key: \"7eqyqh\" }],\n [\"path\", { d: \"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\", key: \"1b0p4s\" }]\n]);\n\nexport { DollarSign as default };\n//# sourceMappingURL=dollar-sign.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Hash = createLucideIcon(\"hash\", [\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"9\", y2: \"9\", key: \"4lhtct\" }],\n [\"line\", { x1: \"4\", x2: \"20\", y1: \"15\", y2: \"15\", key: \"vyu0kd\" }],\n [\"line\", { x1: \"10\", x2: \"8\", y1: \"3\", y2: \"21\", key: \"1ggp8o\" }],\n [\"line\", { x1: \"16\", x2: \"14\", y1: \"3\", y2: \"21\", key: \"weycgp\" }]\n]);\n\nexport { Hash as default };\n//# sourceMappingURL=hash.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Wallet = createLucideIcon(\"wallet\", [\n [\n \"path\",\n {\n d: \"M19 7V4a1 1 0 0 0-1-1H5a2 2 0 0 0 0 4h15a1 1 0 0 1 1 1v4h-3a2 2 0 0 0 0 4h3a1 1 0 0 0 1-1v-2a1 1 0 0 0-1-1\",\n key: \"18etb6\"\n }\n ],\n [\"path\", { d: \"M3 5v14a2 2 0 0 0 2 2h15a1 1 0 0 0 1-1v-4\", key: \"xoc0q4\" }]\n]);\n\nexport { Wallet as default };\n//# sourceMappingURL=wallet.js.map\n","/**\n * @license lucide-vue-next v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Zap = createLucideIcon(\"zap\", [\n [\n \"path\",\n {\n d: \"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z\",\n key: \"1xq2db\"\n }\n ]\n]);\n\nexport { Zap as default };\n//# sourceMappingURL=zap.js.map\n","<script setup lang=\"ts\">\r\n/**\r\n * FunctionCallDisplay Component\r\n *\r\n * Displays and executes function calls from AI responses\r\n */\r\n\r\nimport { ref, computed, watch, onMounted } from 'vue';\r\nimport { cn } from '../lib/utils';\r\nimport type { IFunctionCallExecutor } from '../services/functionCallExecutor';\r\nimport type { FunctionCall, ExecutionResult, DomainHeaderConfig } from '../types';\r\nimport type { IWalletService } from '../services/walletService';\r\nimport AP2PaymentFlow from './AP2PaymentFlow.vue';\r\nimport { useOptionalService } from '../composables/useDI';\r\nimport { useInternalDI } from '../composables/useInternalDI';\r\nimport { TOKENS } from '../core/tokens';\r\nimport type { RendererRegistry } from '../renderers/RendererRegistry';\r\nimport { Copy, DollarSign, Hash, Zap } from 'lucide-vue-next';\r\nimport { CodeXml } from 'lucide-vue-next';\r\n\r\n\r\n\r\nconst props = defineProps<{\r\n functionCall: FunctionCall;\r\n walletService: IWalletService;\r\n functionCallExecutor: IFunctionCallExecutor;\r\n onExecute?: (functionCall: FunctionCall, result: ExecutionResult) => void;\r\n class?: string;\r\n domainHeaders?: DomainHeaderConfig[];\r\n authorization?: string;\r\n sessionAllowedTools?: Set<string>;\r\n allowToolForSession?: (toolName: string) => void;\r\n beforeCallApiFunc?: (request: any) => Promise<any>;\r\n}>();\r\n\r\nconst isExpanded = ref(false);\r\nconst copied = ref(false);\r\nconst isExecuting = ref(false);\r\nconst hasExecuted = ref(false);\r\nconst executionResult = ref<ExecutionResult | null>(null);\r\nconst showResult = ref(false);\r\nconst showPaymentFlow = ref(false);\r\nconst autoExecutedKeys = ref<Set<string>>(new Set());\r\nconst executedKeys = ref<Set<string>>(new Set());\r\n\r\nconst projectId = computed(() => props.functionCall.metadata?.projectId || 'local-project');\r\n\r\n// Try to get renderer registry\r\nlet rendererRegistry: RendererRegistry | null = null;\r\ntry {\r\n const resolve = useInternalDI({\r\n projectId: projectId.value,\r\n authorization: props.authorization,\r\n apiBaseUrl: props.functionCall.metadata?.apiBaseUrl,\r\n domainHeaders: props.domainHeaders,\r\n proxyMode: props.functionCall.metadata?.proxyMode,\r\n });\r\n rendererRegistry = resolve<RendererRegistry>(TOKENS.RendererRegistry);\r\n} catch (error) {\r\n console.warn('[FunctionCallDisplay] RendererRegistry not available', error);\r\n}\r\n\r\nconst handleToggleExpand = () => {\r\n isExpanded.value = !isExpanded.value;\r\n};\r\n\r\nconst rendererContext = computed(() => ({\r\n projectId: projectId.value,\r\n authorization: props.authorization,\r\n domainHeaders: props.domainHeaders,\r\n}));\r\n\r\nconst rendererContent = computed(() => {\r\n if (!rendererRegistry) return null;\r\n try {\r\n return rendererRegistry.render({\r\n functionCall: props.functionCall,\r\n context: rendererContext.value,\r\n isExecuting: isExecuting.value,\r\n isExpanded: isExpanded.value,\r\n onToggleExpand: handleToggleExpand,\r\n });\r\n } catch (error) {\r\n console.error('[FunctionCallDisplay] Failed to render function details', error);\r\n return null;\r\n }\r\n});\r\n\r\nconst rendererResult = computed(() => {\r\n if (!executionResult.value || !executionResult.value.success || !rendererRegistry) {\r\n return null;\r\n }\r\n try {\r\n return rendererRegistry.render({\r\n functionCall: props.functionCall,\r\n context: rendererContext.value,\r\n executionResult: executionResult.value,\r\n isExecuting: isExecuting.value,\r\n isExpanded: isExpanded.value,\r\n onToggleExpand: handleToggleExpand,\r\n });\r\n } catch (error) {\r\n console.error('[FunctionCallDisplay] Failed to render execution result', error);\r\n return null;\r\n }\r\n});\r\n\r\n// Check if this requires wallet connection\r\nconst requiresWalletConnection = () => {\r\n return props.functionCall.name === 'ap2_payment_process_payment' ||\r\n props.functionCall.name === 'ap2_credentials_create_payment_mandate' ||\r\n props.functionCall.name === 'ap2_credentials_select_payment_method';\r\n};\r\n\r\n// Check if tool is already allowed for this session\r\nconst isToolAllowedForSession = () => {\r\n return props.sessionAllowedTools?.has(props.functionCall.name) || false;\r\n};\r\n\r\n// Check if we should show approval buttons\r\nconst shouldShowApproval = computed(() => {\r\n return !isToolAllowedForSession() && !hasExecuted.value && props.sessionAllowedTools && props.allowToolForSession;\r\n});\r\n\r\nconst copyToClipboard = async () => {\r\n try {\r\n await navigator.clipboard.writeText(JSON.stringify(props.functionCall, null, 2));\r\n copied.value = true;\r\n setTimeout(() => { copied.value = false; }, 2000);\r\n } catch (error) {\r\n console.error('Failed to copy:', error);\r\n }\r\n};\r\n\r\nconst executionKey = computed(() => {\r\n try {\r\n return `${props.functionCall.name}-${JSON.stringify(props.functionCall.parameters)}-${JSON.stringify(props.functionCall.metadata)}`;\r\n } catch {\r\n return props.functionCall.name;\r\n }\r\n});\r\n\r\n// Reset when execution key changes\r\nwatch(executionKey, () => {\r\n hasExecuted.value = false;\r\n autoExecutedKeys.value.clear();\r\n});\r\n\r\nconst handleRunOnce = async () => {\r\n await handleExecute();\r\n};\r\n\r\nconst handleAllowForSession = async () => {\r\n if (props.allowToolForSession) {\r\n props.allowToolForSession(props.functionCall.name);\r\n }\r\n await handleExecute();\r\n};\r\n\r\nconst handleExecute = async () => {\r\n executedKeys.value.add(executionKey.value);\r\n\r\n // Handle wallet connection function\r\n if (props.functionCall.name === 'ap2_wallet_connect') {\r\n isExecuting.value = true;\r\n try {\r\n const walletState = await props.walletService.connect();\r\n if (walletState.isConnected && walletState.address) {\r\n const sessionId = props.functionCall.parameters?.sessionId;\r\n if (sessionId) {\r\n await props.functionCallExecutor.execute({\r\n name: 'ap2_wallet_update_status',\r\n parameters: {\r\n sessionId,\r\n connected: true,\r\n address: walletState.address,\r\n network: walletState.network,\r\n chainId: walletState.chainId\r\n },\r\n metadata: {\r\n type: 'ap2',\r\n projectId: props.functionCall.metadata?.projectId\r\n }\r\n });\r\n }\r\n\r\n executionResult.value = {\r\n success: true,\r\n type: 'wallet',\r\n data: {\r\n address: walletState.address,\r\n network: walletState.network,\r\n message: 'MetaMask wallet connected successfully'\r\n }\r\n };\r\n showResult.value = true;\r\n\r\n if (props.onExecute) {\r\n props.onExecute(props.functionCall, executionResult.value);\r\n }\r\n }\r\n } catch (error: any) {\r\n executionResult.value = {\r\n success: false,\r\n type: 'error',\r\n error: error.message || 'Failed to connect MetaMask'\r\n };\r\n showResult.value = true;\r\n } finally {\r\n isExecuting.value = false;\r\n hasExecuted.value = true;\r\n }\r\n return;\r\n }\r\n\r\n // Check if this is a payment function that requires wallet connection\r\n if (requiresWalletConnection() && !props.walletService.getState().isConnected) {\r\n try {\r\n console.log('[AP2][Payment] Wallet not connected – attempting auto-connect');\r\n const state = await props.walletService.connect();\r\n if (!state.isConnected) {\r\n showPaymentFlow.value = true;\r\n return;\r\n }\r\n } catch (error) {\r\n console.warn('[AP2][Payment] Auto-connect failed, falling back to manual flow', error);\r\n showPaymentFlow.value = true;\r\n return;\r\n }\r\n }\r\n\r\n isExecuting.value = true;\r\n executionResult.value = null;\r\n\r\n try {\r\n const contextOverride = props.beforeCallApiFunc ? { beforeCallApiFunc: props.beforeCallApiFunc } : undefined;\r\n const result = await props.functionCallExecutor.execute(props.functionCall, contextOverride);\r\n\r\n // Check if result indicates wallet connection is needed\r\n if (result.data?.action === 'METAMASK_CONNECT_REQUEST') {\r\n try {\r\n const walletState = await props.walletService.connect();\r\n if (walletState.isConnected && walletState.address) {\r\n const sessionId = props.functionCall.parameters?.sessionId || result.data?.sessionId;\r\n if (sessionId) {\r\n await props.functionCallExecutor.execute({\r\n name: 'ap2_wallet_update_status',\r\n parameters: {\r\n sessionId,\r\n connected: true,\r\n address: walletState.address,\r\n network: walletState.network,\r\n chainId: walletState.chainId\r\n },\r\n metadata: {\r\n type: 'ap2',\r\n projectId: props.functionCall.metadata?.projectId\r\n }\r\n });\r\n }\r\n\r\n executionResult.value = {\r\n success: true,\r\n type: 'wallet',\r\n data: {\r\n address: walletState.address,\r\n message: 'Wallet connected successfully'\r\n }\r\n };\r\n }\r\n } catch (error: any) {\r\n executionResult.value = {\r\n success: false,\r\n type: 'error',\r\n error: error.message || 'Failed to connect wallet'\r\n };\r\n }\r\n } else {\r\n executionResult.value = result;\r\n }\r\n\r\n showResult.value = true;\r\n\r\n if (props.onExecute) {\r\n props.onExecute(props.functionCall, executionResult.value || result);\r\n }\r\n } catch (error) {\r\n console.error('Execution error:', error);\r\n executionResult.value = {\r\n success: false,\r\n type: 'error',\r\n error: error instanceof Error ? error.message : 'Unknown error occurred',\r\n };\r\n showResult.value = true;\r\n } finally {\r\n isExecuting.value = false;\r\n hasExecuted.value = true;\r\n }\r\n};\r\n\r\n// Auto-execute if tool is already allowed for this session\r\nonMounted(() => {\r\n if (isToolAllowedForSession() && !isExecuting.value && !executedKeys.value.has(executionKey.value)) {\r\n console.log(`[Tool Approval] Auto-executing ${props.functionCall.name} (already allowed for session)`);\r\n executedKeys.value.add(executionKey.value);\r\n handleExecute();\r\n }\r\n});\r\n\r\nconst getTypeIcon = computed(() => {\r\n const type = props.functionCall.metadata?.type;\r\n if (type === 'contract') return Hash;\r\n if (type === 'api') return Zap;\r\n if (type === 'fiat') return DollarSign;\r\n if (type === 'ap2') return Zap;\r\n return CodeXml;\r\n});\r\n\r\nconst getTypeColor = computed(() => {\r\n const type = props.functionCall.metadata?.type;\r\n if (type === 'contract') return 'termix-function-call__header-type-badge--contract';\r\n if (type === 'api') return 'termix-function-call__header-type-badge--api';\r\n if (type === 'ap2') return 'termix-function-call__header-type-badge--api';\r\n if (type === 'fiat') return 'termix-function-call__header-type-badge--fiat';\r\n return 'termix-function-call__header-type-badge--unknown';\r\n});\r\n</script>\r\n\r\n<template>\r\n <!-- Payment Flow -->\r\n <AP2PaymentFlow v-if=\"showPaymentFlow && requiresWalletConnection()\" :wallet-service=\"walletService\"\r\n :session-id=\"functionCall.parameters?.sessionId\"\r\n :merchant-address=\"functionCall.parameters?.merchantAddress || functionCall.metadata?.merchantAddress\"\r\n :total-amount=\"functionCall.parameters?.amount || functionCall.parameters?.totalAmount\"\r\n :cart-mandate=\"functionCall.parameters?.cartMandate\" :payment-mandate=\"functionCall.parameters?.paymentMandate\"\r\n :on-payment-complete=\"(txHash: string) => {\r\n executionResult = { success: true, type: 'payment', data: { transactionHash: txHash } };\r\n showResult = true;\r\n showPaymentFlow = false;\r\n if (onExecute) {\r\n onExecute(functionCall, { success: true, type: 'payment', data: { transactionHash: txHash } });\r\n }\r\n }\" :on-payment-error=\"(error: string) => {\r\n executionResult = { success: false, type: 'error', error };\r\n showResult = true;\r\n showPaymentFlow = false;\r\n }\" />\r\n\r\n <!-- Function Call Card -->\r\n <div v-else :class=\"cn('termix-card termix-function-call', props.class)\">\r\n <div class=\"termix-card__header\">\r\n <div class=\"termix-function-call__header-top\">\r\n <h3 class=\"termix-card__title termix-function-call__header-title\">\r\n <!-- <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <polyline points=\"16 18 22 12 16 6\" />\r\n <polyline points=\"8 6 2 12 8 18\" />\r\n </svg> -->\r\n <CodeXml />\r\n Function Call Detected\r\n </h3>\r\n <div>\r\n <div :class=\"cn('termix-badge termix-function-call__header-type-badge', getTypeColor)\">\r\n <component :is=\"getTypeIcon\" :size=\"12\" />\r\n {{ functionCall.metadata?.type || 'unknown' }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"termix-card__content\">\r\n <!-- Function Name -->\r\n <div class=\"termix-function-call__content-function\">\r\n <span class=\"termix-function-call__content-function-label\">Function:</span>\r\n <code class=\"termix-function-call__content-function-name\">{{ functionCall.name }}</code>\r\n </div>\r\n\r\n <!-- Type-specific rendering -->\r\n <div class=\"termix-function-call__content-renderer\">\r\n <component v-if=\"rendererContent\" :is=\"() => rendererContent\" />\r\n <div v-else class=\"termix-renderer-fallback\">\r\n <div class=\"termix-fallback-header\">\r\n <span class=\"termix-fallback-icon\">⚠️</span>\r\n <span>Renderer unavailable</span>\r\n </div>\r\n <div class=\"termix-fallback-body\">\r\n <pre>{{ JSON.stringify(functionCall, null, 2) }}</pre>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Actions -->\r\n <div class=\"termix-function-call__content-actions\">\r\n <div class=\"termix-function-call__content-actions-buttons\">\r\n <template v-if=\"shouldShowApproval\">\r\n <button @click=\"handleRunOnce\" :disabled=\"isExecuting\" :class=\"cn(\r\n 'termix-function-call__content-actions-execute',\r\n 'termix-function-call__content-actions-execute--secondary',\r\n isExecuting && 'termix-function-call__content-actions-execute--loading'\r\n )\">\r\n <template v-if=\"isExecuting\">\r\n <svg class=\"animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n width=\"16\" height=\"16\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n Executing...\r\n </template>\r\n <template v-else>\r\n Run once\r\n </template>\r\n </button>\r\n <button @click=\"handleAllowForSession\" :disabled=\"isExecuting\" :class=\"cn(\r\n 'termix-function-call__content-actions-execute',\r\n isExecuting && 'termix-function-call__content-actions-execute--loading'\r\n )\">\r\n <template v-if=\"isExecuting\">\r\n <svg class=\"animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n width=\"16\" height=\"16\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n Executing...\r\n </template>\r\n <template v-else>\r\n Always allow\r\n </template>\r\n </button>\r\n </template>\r\n <template v-else>\r\n <button @click=\"handleExecute\" :disabled=\"isExecuting || hasExecuted\" :class=\"cn(\r\n 'termix-function-call__content-actions-execute',\r\n isExecuting && 'termix-function-call__content-actions-execute--loading'\r\n )\">\r\n <template v-if=\"isExecuting\">\r\n <svg class=\"animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n width=\"16\" height=\"16\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n Executing...\r\n </template>\r\n <template v-else-if=\"hasExecuted\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n Executed\r\n </template>\r\n <template v-else-if=\"requiresWalletConnection()\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg>\r\n Connect & Pay\r\n </template>\r\n <template v-else>\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <polygon points=\"5 3 19 12 5 21 5 3\" />\r\n </svg>\r\n Execute\r\n </template>\r\n </button>\r\n </template>\r\n\r\n <button @click=\"copyToClipboard\" :class=\"cn(\r\n 'termix-function-call__content-actions-copy',\r\n copied && 'termix-function-call__content-actions-copy--copied'\r\n )\">\r\n <template v-if=\"copied\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n Copied!\r\n </template>\r\n <template v-else>\r\n <!-- <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\r\n </svg> -->\r\n <Copy :size=\"16\" />\r\n Copy JSON\r\n </template>\r\n </button>\r\n </div>\r\n\r\n <div class=\"termix-function-call__content-actions-status\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\" />\r\n <polyline points=\"14 2 14 8 20 8\" />\r\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\" />\r\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\" />\r\n <polyline points=\"10 9 9 9 8 9\" />\r\n </svg>\r\n {{ isExecuting ? 'Executing...' : executionResult ? 'Executed' : 'Ready' }}\r\n </div>\r\n </div>\r\n\r\n <!-- Execution Result -->\r\n <div v-if=\"executionResult\" class=\"termix-function-call__result\">\r\n <div class=\"termix-function-call__result-header\">\r\n <h4 class=\"termix-function-call__result-header-title\">\r\n <svg v-if=\"executionResult.success\" class=\"termix-function-call__result-header-title--success\"\r\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\" />\r\n <polyline points=\"22 4 12 14.01 9 11.01\" />\r\n </svg>\r\n <svg v-else class=\"termix-function-call__result-header-title--error\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\" width=\"16\" height=\"16\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n Execution Result\r\n </h4>\r\n <button @click=\"showResult = !showResult\" class=\"termix-function-call__result-header-hide\">\r\n {{ showResult ? 'Hide' : 'Show' }}\r\n </button>\r\n </div>\r\n\r\n <template v-if=\"showResult\">\r\n <div v-if=\"executionResult.success\" class=\"termix-function-call__result-success\">\r\n <component v-if=\"rendererResult\" :is=\"() => rendererResult\" />\r\n <div v-else class=\"termix-renderer-fallback\">\r\n <div class=\"termix-fallback-header\">\r\n <span class=\"termix-fallback-icon\">ℹ️</span>\r\n <span>Result</span>\r\n </div>\r\n <div class=\"termix-fallback-body\">\r\n <pre>{{ JSON.stringify(executionResult, null, 2) }}</pre>\r\n </div>\r\n </div>\r\n </div>\r\n <div v-else class=\"termix-function-call__result-error\">\r\n <div class=\"termix-function-call__result-error-status\">\r\n <div class=\"termix-badge termix-function-call__result-error-status-badge\">\r\n {{ executionResult.error?.toLowerCase().includes('network') ? 'Network Error' : 'Error' }}\r\n </div>\r\n <span v-if=\"executionResult.metadata?.url\" class=\"termix-function-call__result-error-status-url\">\r\n {{ executionResult.metadata.method || 'GET' }} {{ executionResult.metadata.url }}\r\n </span>\r\n </div>\r\n <div class=\"termix-function-call__result-error-message\">\r\n <strong>Error:</strong> {{ executionResult.error }}\r\n </div>\r\n <div v-if=\"executionResult.data\" class=\"termix-function-call__result-error-details\">\r\n <div class=\"termix-function-call__result-error-details-label\">Details:</div>\r\n <pre>{{ JSON.stringify(executionResult.data, null, 2) }}</pre>\r\n </div>\r\n <div v-if=\"executionResult.metadata && Object.keys(executionResult.metadata).length > 0\"\r\n class=\"termix-function-call__result-error-metadata\">\r\n <div class=\"termix-function-call__result-error-metadata-label\">Additional Information:</div>\r\n <pre>{{ JSON.stringify(executionResult.metadata, null, 2) }}</pre>\r\n </div>\r\n </div>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * WalletIndicator Component\r\n *\r\n * Compact wallet connection indicator with status display\r\n */\r\n\r\nimport { ref, onMounted, onUnmounted, computed } from 'vue';\r\nimport { cn } from '../lib/utils';\r\nimport type { IWalletService, WalletState } from '../services/walletService';\r\nimport type { IFunctionCallExecutor } from '../services/functionCallExecutor';\r\nimport { Wallet } from 'lucide-vue-next';\r\n\r\n\r\nconst props = defineProps<{\r\n walletService: IWalletService;\r\n functionCallExecutor?: IFunctionCallExecutor;\r\n sessionId?: string;\r\n projectId?: string;\r\n class?: string;\r\n onConnect?: (address: string) => void;\r\n onDisconnect?: () => void;\r\n compact?: boolean;\r\n}>();\r\n\r\nconst walletState = ref<WalletState>(props.walletService.getState());\r\nconst isConnecting = ref(false);\r\nconst error = ref<string | null>(null);\r\nconst copied = ref(false);\r\n\r\nlet unsubscribe: (() => void) | null = null;\r\n\r\nonMounted(() => {\r\n unsubscribe = props.walletService.subscribe((state) => {\r\n walletState.value = state;\r\n });\r\n});\r\n\r\nonUnmounted(() => {\r\n if (unsubscribe) {\r\n unsubscribe();\r\n }\r\n});\r\n\r\nconst handleConnect = async () => {\r\n isConnecting.value = true;\r\n error.value = null;\r\n\r\n try {\r\n const state = await props.walletService.connect();\r\n if (state.address) {\r\n // Store in session if sessionId provided\r\n if (props.sessionId) {\r\n sessionStorage.setItem(`wallet_${props.sessionId}`, state.address);\r\n }\r\n\r\n // Update AP2 session with wallet status\r\n if (props.sessionId && props.projectId && props.functionCallExecutor) {\r\n try {\r\n await props.functionCallExecutor.execute({\r\n name: 'ap2_wallet_update_status',\r\n parameters: {\r\n sessionId: props.sessionId,\r\n connected: true,\r\n address: state.address,\r\n network: state.network,\r\n chainId: state.chainId,\r\n },\r\n metadata: {\r\n type: 'ap2',\r\n projectId: props.projectId,\r\n },\r\n });\r\n console.log('[WalletIndicator] AP2 session updated with wallet status');\r\n } catch (updateError) {\r\n console.warn('[WalletIndicator] Failed to update AP2 session:', updateError);\r\n }\r\n }\r\n\r\n if (props.onConnect) {\r\n props.onConnect(state.address);\r\n }\r\n }\r\n } catch (err: any) {\r\n error.value = err.message || 'Failed to connect MetaMask';\r\n } finally {\r\n isConnecting.value = false;\r\n }\r\n};\r\n\r\nconst handleDisconnect = () => {\r\n props.walletService.disconnect();\r\n if (props.sessionId) {\r\n sessionStorage.removeItem(`wallet_${props.sessionId}`);\r\n }\r\n if (props.onDisconnect) {\r\n props.onDisconnect();\r\n }\r\n};\r\n\r\nconst shortAddress = computed(() => props.walletService.getShortAddress());\r\nconst fullAddress = computed(() => walletState.value.address || '');\r\n\r\nconst handleCopy = () => {\r\n if (!fullAddress.value) return;\r\n navigator.clipboard.writeText(fullAddress.value).then(() => {\r\n copied.value = true;\r\n setTimeout(() => { copied.value = false; }, 2000);\r\n });\r\n};\r\n</script>\r\n\r\n<template>\r\n <!-- MetaMask not installed -->\r\n <div v-if=\"!walletService.isMetaMaskInstalled()\"\r\n :class=\"cn('termix-wallet-indicator', 'termix-wallet-indicator--not-installed', props.class)\">\r\n <svg class=\"termix-wallet-indicator__icon termix-wallet-indicator__icon--error\" viewBox=\"0 0 24 24\" fill=\"none\"\r\n stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n <span class=\"termix-wallet-indicator__text\">MetaMask not installed</span>\r\n <a href=\"https://metamask.io/download/\" target=\"_blank\" rel=\"noopener noreferrer\"\r\n class=\"termix-wallet-indicator__link\">\r\n Install →\r\n </a>\r\n </div>\r\n\r\n <!-- Connecting -->\r\n <div v-else-if=\"isConnecting\" :class=\"cn('termix-wallet-pill', props.class)\">\r\n <div class=\"termix-wallet-pill__segment termix-wallet-pill__segment--primary\">\r\n <svg class=\"termix-wallet-pill__spinner\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n <span>Connecting…</span>\r\n </div>\r\n <div class=\"termix-wallet-pill__segment termix-wallet-pill__segment--muted\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg>\r\n <span>Awaiting approval</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Connected -->\r\n <div v-else-if=\"walletState.isConnected\"\r\n :class=\"cn('termix-wallet-pill', 'termix-wallet-pill--connected', props.class)\">\r\n <div class=\"termix-wallet-pill__segment termix-wallet-pill__segment--success\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n <span>Connected</span>\r\n </div>\r\n <button class=\"termix-wallet-pill__segment termix-wallet-pill__segment--address\" @click=\"handleCopy\"\r\n :title=\"fullAddress\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg>\r\n <span>{{ shortAddress }}</span>\r\n <span :class=\"cn('termix-wallet-pill__copy', copied && 'termix-wallet-pill__copy--active')\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\" ry=\"2\" />\r\n <path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\" />\r\n </svg>\r\n </span>\r\n </button>\r\n <button class=\"termix-wallet-pill__segment termix-wallet-pill__segment--action\" @click=\"handleDisconnect\"\r\n aria-label=\"Disconnect wallet\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Disconnected -->\r\n <div v-else :class=\"props.class\">\r\n <button class=\"termix-wallet-pill termix-wallet-pill--cta\" @click=\"handleConnect\" :disabled=\"isConnecting\">\r\n <!-- <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg> -->\r\n <Wallet :size=\"18\"/>\r\n <span>Connect wallet</span>\r\n </button>\r\n <span v-if=\"error\" class=\"termix-wallet-pill__error\">{{ error }}</span>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * PaymentApprovalModal Component\r\n *\r\n * Modal for approving AP2 payment mandates\r\n */\r\n\r\nimport { ref, computed, watch, onMounted, onUnmounted, Teleport } from 'vue';\r\nimport type { IWalletService, WalletState } from '../services/walletService';\r\nimport '../styles/components/payment-approval-modal.less';\r\n\r\ninterface MandateData {\r\n mandateId: string;\r\n cartHash: string;\r\n amount: string;\r\n amountDisplay?: string;\r\n amountWei?: string;\r\n currency?: string;\r\n paymentDetailsId?: string;\r\n paymentTimestamp?: string;\r\n walletAddress?: string;\r\n typedData?: any;\r\n merchant: string;\r\n items?: Array<{\r\n name: string;\r\n price: number;\r\n quantity: number;\r\n }>;\r\n}\r\n\r\nconst props = defineProps<{\r\n walletService: IWalletService;\r\n open: boolean;\r\n mandateData: MandateData;\r\n onClose: () => void;\r\n onApprove: (signature: string, txHash?: string) => void;\r\n onReject: () => void;\r\n}>();\r\n\r\nconst walletState = ref<WalletState>(props.walletService.getState());\r\nconst isSigning = ref(false);\r\nconst error = ref('');\r\nconst step = ref<'connect' | 'approve' | 'sign' | 'complete'>('connect');\r\n\r\nlet unsubscribe: (() => void) | null = null;\r\n\r\nonMounted(() => {\r\n unsubscribe = props.walletService.subscribe((state) => {\r\n walletState.value = state;\r\n if (state.isConnected && step.value === 'connect') {\r\n step.value = 'approve';\r\n }\r\n });\r\n});\r\n\r\nonUnmounted(() => {\r\n if (unsubscribe) {\r\n unsubscribe();\r\n }\r\n});\r\n\r\n// Determine current step based on wallet state\r\nwatch(() => walletState.value.isConnected, (isConnected) => {\r\n if (isConnected && step.value === 'connect') {\r\n step.value = 'approve';\r\n }\r\n});\r\n\r\nconst handleConnect = async () => {\r\n try {\r\n await props.walletService.connect();\r\n step.value = 'approve';\r\n } catch (err: any) {\r\n error.value = err.message || 'Failed to connect wallet';\r\n }\r\n};\r\n\r\nconst handleSign = async () => {\r\n if (!walletState.value.isConnected) {\r\n error.value = 'Wallet not connected';\r\n return;\r\n }\r\n\r\n isSigning.value = true;\r\n error.value = '';\r\n\r\n try {\r\n const fallbackAmount = (() => {\r\n if (props.mandateData.amountWei) {\r\n return props.mandateData.amountWei;\r\n }\r\n\r\n if (typeof props.mandateData.amount === 'string') {\r\n try {\r\n const numericPortion = props.mandateData.amount.split(' ')[0];\r\n return props.walletService.parseEther(numericPortion).toString();\r\n } catch (err) {\r\n console.warn('Failed to parse amount for fallback typed data', err);\r\n }\r\n }\r\n\r\n return '0';\r\n })();\r\n\r\n const fallbackTypedData = props.walletService.buildPaymentMandateTypedData(\r\n {\r\n mandateId: props.mandateData.mandateId,\r\n cartHash: props.mandateData.cartHash,\r\n amount: fallbackAmount,\r\n merchant: props.mandateData.merchant,\r\n expiry: Math.floor(Date.now() / 1000) + 900,\r\n nonce: Math.floor(Math.random() * 1000000000),\r\n },\r\n '0x0000000000000000000000000000000000000000'\r\n );\r\n\r\n const normaliseTypedData = (raw: any) => {\r\n if (!raw) return null;\r\n\r\n try {\r\n const clone = JSON.parse(JSON.stringify(raw));\r\n\r\n if (clone?.message) {\r\n Object.keys(clone.message).forEach((key) => {\r\n const value = clone.message[key];\r\n\r\n if (typeof value === 'number') {\r\n clone.message[key] = value.toString();\r\n return;\r\n }\r\n\r\n if (typeof value === 'string' && value.includes(' ') && key.toLowerCase().includes('amount')) {\r\n clone.message[key] = value.split(' ')[0];\r\n }\r\n\r\n if (key.toLowerCase().includes('amount') && clone.message[key] === undefined) {\r\n clone.message[key] = fallbackAmount;\r\n }\r\n });\r\n\r\n if (clone.message.totalAmount === undefined || clone.message.totalAmount === null || clone.message.totalAmount === '') {\r\n clone.message.totalAmount = fallbackAmount;\r\n }\r\n\r\n if (clone.message.amount === undefined || clone.message.amount === null || clone.message.amount === '') {\r\n clone.message.amount = fallbackAmount;\r\n }\r\n }\r\n\r\n return clone;\r\n } catch (err) {\r\n console.warn('Failed to normalise typed data, using fallback generated payload', err);\r\n return null;\r\n }\r\n };\r\n\r\n const typedData = normaliseTypedData(props.mandateData.typedData) || fallbackTypedData;\r\n\r\n // Request signature\r\n step.value = 'sign';\r\n const signature = await props.walletService.signTypedData(typedData);\r\n\r\n step.value = 'complete';\r\n props.onApprove(signature);\r\n\r\n // Close modal after a short delay\r\n setTimeout(() => {\r\n props.onClose();\r\n }, 2000);\r\n } catch (err: any) {\r\n console.error('Error signing mandate:', err);\r\n if (err.message?.includes('User rejected')) {\r\n error.value = 'Transaction cancelled by user';\r\n props.onReject();\r\n } else {\r\n error.value = err.message || 'Failed to sign mandate';\r\n }\r\n step.value = 'approve';\r\n } finally {\r\n isSigning.value = false;\r\n }\r\n};\r\n\r\nconst formatAmount = computed(() => {\r\n if (props.mandateData.amountDisplay) {\r\n return props.mandateData.amountDisplay;\r\n }\r\n\r\n if (props.mandateData.amountWei) {\r\n try {\r\n const formatted = props.walletService.formatEther(BigInt(props.mandateData.amountWei));\r\n const currencySymbol = props.walletService.getCurrencySymbol();\r\n return `${parseFloat(formatted).toFixed(4)} ${currencySymbol}`;\r\n } catch {\r\n // fall back to raw amount below\r\n }\r\n }\r\n\r\n return props.mandateData.amount;\r\n});\r\n</script>\r\n\r\n<template>\r\n <Teleport to=\"body\">\r\n <div\r\n v-if=\"open\"\r\n class=\"payment-approval-overlay\"\r\n @click=\"onClose\"\r\n data-termix-modal=\"payment-approval\"\r\n >\r\n <div class=\"payment-approval-modal\" @click.stop>\r\n <!-- Header -->\r\n <div class=\"payment-modal-header\">\r\n <h3 class=\"payment-modal-title\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg>\r\n Payment Approval Required\r\n </h3>\r\n <p class=\"payment-modal-description\">\r\n Review and approve the payment mandate to complete your purchase.\r\n </p>\r\n </div>\r\n\r\n <!-- Content -->\r\n <div class=\"payment-modal-content\">\r\n <!-- Connection Status -->\r\n <div v-if=\"!walletState.isConnected\" class=\"payment-alert payment-alert-info\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n <p class=\"payment-alert-description\">\r\n Connect your wallet to approve the payment\r\n </p>\r\n </div>\r\n <div v-else class=\"wallet-badge-container\">\r\n <span class=\"wallet-badge-label\">Connected Wallet</span>\r\n <span class=\"wallet-badge\">\r\n {{ walletService.shortenAddress(walletState.address) }}\r\n </span>\r\n </div>\r\n\r\n <!-- Payment Details -->\r\n <div class=\"payment-modal-section\">\r\n <div class=\"payment-details\">\r\n <h4>Payment Details</h4>\r\n\r\n <div class=\"payment-detail-row\">\r\n <span class=\"payment-detail-label\">Mandate ID</span>\r\n <span class=\"payment-detail-value\">{{ mandateData.mandateId.slice(0, 12) }}...</span>\r\n </div>\r\n\r\n <div class=\"payment-detail-row\">\r\n <span class=\"payment-detail-label\">Amount</span>\r\n <span class=\"payment-detail-amount\">{{ formatAmount }}</span>\r\n </div>\r\n\r\n <div class=\"payment-detail-row\">\r\n <span class=\"payment-detail-label\">Merchant</span>\r\n <span class=\"payment-detail-value\">{{ walletService.shortenAddress(mandateData.merchant) }}</span>\r\n </div>\r\n\r\n <div class=\"payment-detail-row\">\r\n <span class=\"payment-detail-label\">Network</span>\r\n <span class=\"payment-detail-badge\">{{ walletService.getNetworkName() }}</span>\r\n </div>\r\n </div>\r\n\r\n <!-- Cart Items -->\r\n <div v-if=\"mandateData.items && mandateData.items.length > 0\" class=\"cart-items\">\r\n <h4>Items</h4>\r\n <div class=\"cart-items-list\">\r\n <div v-for=\"(item, index) in mandateData.items\" :key=\"index\" class=\"cart-item\">\r\n <span class=\"cart-item-name\">\r\n {{ item.name }} × {{ item.quantity }}\r\n </span>\r\n <span>${{ (item.price * item.quantity).toFixed(2) }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Step Indicator -->\r\n <div class=\"payment-steps\">\r\n <div class=\"payment-step\">\r\n <div :class=\"['payment-step-dot', step === 'connect' ? 'active' : walletState.isConnected ? 'complete' : '']\" />\r\n <span :class=\"['payment-step-label', step === 'connect' ? 'active' : walletState.isConnected ? 'complete' : '']\">\r\n Connect\r\n </span>\r\n </div>\r\n <div class=\"payment-step-separator\" />\r\n <div class=\"payment-step\">\r\n <div :class=\"['payment-step-dot', step === 'approve' ? 'active' : ['sign', 'complete'].includes(step) ? 'complete' : '']\" />\r\n <span :class=\"['payment-step-label', step === 'approve' ? 'active' : ['sign', 'complete'].includes(step) ? 'complete' : '']\">\r\n Approve\r\n </span>\r\n </div>\r\n <div class=\"payment-step-separator\" />\r\n <div class=\"payment-step\">\r\n <div :class=\"['payment-step-dot', step === 'sign' ? 'active' : step === 'complete' ? 'complete' : '']\" />\r\n <span :class=\"['payment-step-label', step === 'sign' ? 'active' : step === 'complete' ? 'complete' : '']\">\r\n Sign\r\n </span>\r\n </div>\r\n <div class=\"payment-step-separator\" />\r\n <div class=\"payment-step\">\r\n <div :class=\"['payment-step-dot', step === 'complete' ? 'active complete' : '']\" />\r\n <span :class=\"['payment-step-label', step === 'complete' ? 'active complete' : '']\">\r\n Complete\r\n </span>\r\n </div>\r\n </div>\r\n\r\n <!-- Error Display -->\r\n <div v-if=\"error\" class=\"payment-alert payment-alert-error\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\r\n </svg>\r\n <p class=\"payment-alert-description\">{{ error }}</p>\r\n </div>\r\n\r\n <!-- Success Message -->\r\n <div v-if=\"step === 'complete'\" class=\"payment-alert payment-alert-success\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n <p class=\"payment-alert-description\">\r\n Payment mandate signed successfully!\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- Footer -->\r\n <div class=\"payment-modal-footer\">\r\n <button\r\n class=\"payment-btn payment-btn-outline\"\r\n @click=\"onReject\"\r\n :disabled=\"isSigning\"\r\n >\r\n Cancel\r\n </button>\r\n\r\n <button\r\n v-if=\"!walletState.isConnected\"\r\n class=\"payment-btn payment-btn-primary\"\r\n @click=\"handleConnect\"\r\n >\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M20 12V8H6a2 2 0 0 1-2-2c0-1.1.9-2 2-2h12v4\" />\r\n <path d=\"M4 6v12c0 1.1.9 2 2 2h14v-4\" />\r\n <path d=\"M18 12a2 2 0 0 0-2 2c0 1.1.9 2 2 2h4v-4h-4z\" />\r\n </svg>\r\n Connect Wallet\r\n </button>\r\n\r\n <button\r\n v-else\r\n class=\"payment-btn payment-btn-primary\"\r\n @click=\"handleSign\"\r\n :disabled=\"isSigning || step === 'complete'\"\r\n >\r\n <template v-if=\"isSigning\">\r\n <div class=\"payment-spinner\" />\r\n Signing...\r\n </template>\r\n <template v-else-if=\"step === 'complete'\">\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n Signed\r\n </template>\r\n <template v-else>\r\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <polyline points=\"20 6 9 17 4 12\" />\r\n </svg>\r\n Approve Payment\r\n </template>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </Teleport>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * SourcesBadge Component\r\n *\r\n * Displays knowledge base sources referenced in AI responses\r\n */\r\n\r\nimport { ref, computed } from 'vue';\r\nimport type { KnowledgeContext } from '../types';\r\n\r\nconst props = defineProps<{\r\n sources: KnowledgeContext[];\r\n class?: string;\r\n}>();\r\n\r\nconst showPopover = ref(false);\r\n\r\n// Group sources by title to avoid showing duplicates from chunks\r\nconst uniqueSources = computed(() => {\r\n if (!props.sources || props.sources.length === 0) {\r\n return [];\r\n }\r\n\r\n const seen: Record<string, KnowledgeContext> = {};\r\n for (const source of props.sources) {\r\n const key = source.metadata?.fileName || source.title;\r\n if (!seen[key]) {\r\n seen[key] = source;\r\n }\r\n }\r\n return Object.values(seen);\r\n});\r\n\r\nconst displayCount = computed(() => Math.min(uniqueSources.value.length, 3));\r\n\r\nconst getSourceIcon = (type: string) => {\r\n if (type === 'markdown') return '📝';\r\n if (type === 'json') return '📋';\r\n if (type === 'text') return '📄';\r\n return '📚';\r\n};\r\n</script>\r\n\r\n<template>\r\n <div\r\n v-if=\"uniqueSources.length > 0\"\r\n :class=\"['termix-sources-badge', props.class]\"\r\n @mouseenter=\"showPopover = true\"\r\n @mouseleave=\"showPopover = false\"\r\n @click=\"showPopover = !showPopover\"\r\n >\r\n <!-- Circular dots -->\r\n <div class=\"termix-sources-badge__dots\">\r\n <div\r\n v-for=\"(_, i) in displayCount\"\r\n :key=\"i\"\r\n class=\"termix-sources-badge__dot\"\r\n />\r\n <div v-if=\"uniqueSources.length > 3\" class=\"termix-sources-badge__more\">\r\n +{{ uniqueSources.length - 3 }}\r\n </div>\r\n </div>\r\n\r\n <!-- Popover with source list -->\r\n <div v-if=\"showPopover\" class=\"termix-sources-badge__popover\">\r\n <div class=\"termix-sources-badge__popover-header\">\r\n <svg\r\n class=\"termix-sources-badge__icon\"\r\n width=\"14\"\r\n height=\"14\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <path d=\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\" />\r\n <path d=\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\" />\r\n </svg>\r\n <span>Knowledge Sources ({{ uniqueSources.length }})</span>\r\n </div>\r\n <div class=\"termix-sources-badge__popover-list\">\r\n <div\r\n v-for=\"source in uniqueSources\"\r\n :key=\"source.id\"\r\n class=\"termix-sources-badge__popover-item\"\r\n >\r\n <div class=\"termix-sources-badge__popover-item-icon\">\r\n {{ getSourceIcon(source.type) }}\r\n </div>\r\n <div class=\"termix-sources-badge__popover-item-content\">\r\n <div class=\"termix-sources-badge__popover-item-title\">\r\n {{ source.metadata?.sourceDescription || source.title }}\r\n </div>\r\n <div v-if=\"source.score\" class=\"termix-sources-badge__popover-item-score\">\r\n {{ Math.round(source.score * 100) }}% relevance\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * ChatInterface Component\r\n *\r\n * Main chat interface component with AI chat, function execution, and payment support\r\n */\r\n\r\nimport { ref, computed, watch, onMounted, onUnmounted, nextTick } from 'vue';\r\nimport { cn, extractFunctionCalls, getApiBaseUrl } from '../lib/utils';\r\nimport { processMessageContent, renderMarkdown } from '../lib/markdown';\r\nimport { useToast } from '../composables/useToast';\r\nimport { useAP2Payment } from '../composables/useAP2Payment';\r\nimport { useInternalDI } from '../composables/useInternalDI';\r\nimport { TOKENS } from '../core/tokens';\r\nimport FunctionCallDisplay from './FunctionCallDisplay.vue';\r\nimport WalletIndicator from './WalletIndicator.vue';\r\nimport PaymentApprovalModal from './PaymentApprovalModal.vue';\r\nimport SourcesBadge from './SourcesBadge.vue';\r\nimport type { IAPIClient, ChatResponse } from '../interfaces/IAPIClient';\r\nimport type { IWalletService } from '../services/walletService';\r\nimport type { IFunctionCallExecutor } from '../services/functionCallExecutor';\r\nimport type { ToolCallProcessor } from '../services/toolCallProcessor';\r\nimport type {\r\n Message,\r\n KnowledgeContext,\r\n ChatInterfaceProps,\r\n FunctionCall,\r\n ExecutionResult,\r\n DomainHeaderConfig,\r\n ToolCall,\r\n} from '../types';\r\n\r\nconst props = withDefaults(defineProps<ChatInterfaceProps>(), {\r\n placeholder: 'Type your message...',\r\n enableStreamingMode: false,\r\n showHeader: false,\r\n showUsageInfo: false,\r\n showTimestamp: false,\r\n maxKnowledgeResults: 3,\r\n className: '',\r\n messagesClassName: '',\r\n inputClassName: '',\r\n proxyMode: false,\r\n});\r\n\r\nconst emit = defineEmits<{\r\n (e: 'messageSent', message: Message): void;\r\n (e: 'responseReceived', message: Message): void;\r\n (e: 'functionExecuted', functionCall: FunctionCall, result: ExecutionResult): void;\r\n (e: 'error', error: any): void;\r\n (e: 'messagesChange', messages: Message[]): void;\r\n}>();\r\n\r\nconst TOKEN_TABLE_ROWS = 5;\r\nconst MAX_MESSAGE_CHARS = 20000;\r\nconst MAX_TOOL_RESULT_CHARS = 20000;\r\n\r\n// Helper functions\r\nconst truncateContentSafe = (content: string, limit: number) => {\r\n if (!content) return { value: '', truncated: false, removed: 0 };\r\n if (content.length <= limit) return { value: content, truncated: false, removed: 0 };\r\n const removed = content.length - limit;\r\n const suffix = `\\n\\n...[truncated ${removed} characters]`;\r\n return { value: content.slice(0, limit) + suffix, truncated: true, removed };\r\n};\r\n\r\nconst { toast } = useToast();\r\n\r\n// Support both new restExecuteHeaders (domain-based) and legacy restExecuteHeader\r\nconst domainHeaders = computed(() =>\r\n props.restExecuteHeaders ||\r\n (props.restExecuteHeader ? [{ domain: '*', headers: props.restExecuteHeader }] : [])\r\n);\r\n\r\n// Initialize DI container and resolve services\r\nconst resolve = useInternalDI({\r\n projectId: props.projectId,\r\n authorization: props.authorization,\r\n apiBaseUrl: getApiBaseUrl(),\r\n domainHeaders: domainHeaders.value,\r\n proxyMode: props.proxyMode,\r\n});\r\n\r\nconst apiService = resolve<IAPIClient>(TOKENS.APIClient);\r\nconst toolProcessor = resolve<ToolCallProcessor>(TOKENS.ToolCallProcessor);\r\nconst walletService = resolve<IWalletService>(TOKENS.WalletService);\r\nconst functionCallExecutor = resolve<IFunctionCallExecutor>(TOKENS.FunctionCallExecutor);\r\n\r\n// AP2 Payment Integration\r\nconst {\r\n pendingPayment,\r\n isPaymentModalOpen,\r\n approvePayment,\r\n rejectPayment,\r\n clearPayment,\r\n} = useAP2Payment({\r\n projectId: props.projectId,\r\n authorization: props.authorization,\r\n customHeaders: props.apiHeaders || {},\r\n});\r\n\r\n// State\r\nconst internalMessages = ref<Message[]>([]);\r\nconst isControlled = computed(() => props.messages !== undefined);\r\nconst messages = computed({\r\n get: () => isControlled.value ? props.messages! : internalMessages.value,\r\n set: (value: Message[]) => {\r\n if (isControlled.value) {\r\n emit('messagesChange', value);\r\n } else {\r\n internalMessages.value = value;\r\n }\r\n }\r\n});\r\n\r\nconst inputValue = ref('');\r\nconst sessionId = ref<string | undefined>();\r\nconst sessionAllowedTools = ref<Set<string>>(new Set());\r\nconst isAp2PaymentEnabled = ref(false);\r\nconst totalCost = ref(0);\r\nconst knowledgeSearchResults = ref<KnowledgeContext[]>([]);\r\nconst reactProcessing = ref(false);\r\nconst isLoading = ref(false);\r\nconst isStreaming = ref(false);\r\nconst streamingContent = ref('');\r\nconst welcomeMessage = ref('');\r\nconst aiConfigData = ref<any>(null);\r\nconst isComposing = ref(false);\r\nconst showDisclaimer = ref(false);\r\nconst isDisclaimerHiding = ref(false);\r\nconst hasShownDisclaimer = ref(false);\r\nconst handledFunctionCalls = ref<Set<string>>(new Set());\r\n\r\n// Refs\r\nconst messagesEndRef = ref<HTMLDivElement | null>(null);\r\nconst textareaRef = ref<HTMLTextAreaElement | null>(null);\r\nlet streamCleanup: (() => void) | null = null;\r\n\r\n// Default values\r\nconst enableKnowledgeBase = true;\r\nconst enableFunctionCalls = true;\r\nconst enableReActPattern = true;\r\nconst showKnowledgeReferences = true;\r\n\r\n// Scroll to bottom\r\nconst scrollToBottom = () => {\r\n nextTick(() => {\r\n messagesEndRef.value?.scrollIntoView({ behavior: 'smooth', block: 'end' });\r\n });\r\n};\r\n\r\n// Auto-scroll when messages change\r\nwatch([messages, isLoading, reactProcessing, streamingContent], () => {\r\n setTimeout(scrollToBottom, 100);\r\n});\r\n\r\n// Fetch AI config\r\nconst fetchAIConfig = async () => {\r\n if (props.projectId && props.aiConfigId) {\r\n console.log('[TermiX SDK] Fetching AI config:', { projectId: props.projectId, aiConfigId: props.aiConfigId });\r\n const config = await apiService.getAIConfig(props.projectId, props.aiConfigId);\r\n console.log('[TermiX SDK] AI config fetched:', config);\r\n\r\n if (config) {\r\n aiConfigData.value = config;\r\n const configPersonalityName = config.personality?.name || 'your AI assistant';\r\n const greeting = config.personality?.greeting || `Hello! I'm ${configPersonalityName}. How can I help you today?`;\r\n welcomeMessage.value = greeting;\r\n } else {\r\n const fallbackName = props.personalityName || 'your AI assistant';\r\n welcomeMessage.value = `Hello! I'm ${fallbackName}. How can I help you today?`;\r\n }\r\n } else {\r\n const fallbackName = props.personalityName || 'your AI assistant';\r\n welcomeMessage.value = `Hello! I'm ${fallbackName}. How can I help you today?`;\r\n }\r\n};\r\n\r\n// Set initial welcome message\r\nwatch(welcomeMessage, (newMessage) => {\r\n if (newMessage && messages.value.length === 0) {\r\n messages.value = [{\r\n id: '1',\r\n role: 'assistant',\r\n content: newMessage,\r\n timestamp: new Date(),\r\n }];\r\n }\r\n});\r\n\r\n// Reset session allowed tools when sessionId changes\r\nwatch(sessionId, () => {\r\n sessionAllowedTools.value = new Set();\r\n handledFunctionCalls.value.clear();\r\n});\r\n\r\n// Fetch AP2 config\r\nconst fetchAp2Config = async () => {\r\n let paymentFromConfig = false;\r\n let hasWalletTools = false;\r\n\r\n try {\r\n const ap2Config = await apiService.getAP2Config(props.projectId);\r\n paymentFromConfig = ap2Config?.enabled === true && ap2Config?.enabledServices?.payment !== false;\r\n } catch (error) {\r\n console.warn('[ChatInterface] Failed to fetch AP2 config', error);\r\n }\r\n\r\n try {\r\n const ap2ToolsResponse: any = await apiService.getAP2Tools(props.projectId);\r\n const tools = Array.isArray(ap2ToolsResponse?.tools)\r\n ? ap2ToolsResponse.tools\r\n : Array.isArray(ap2ToolsResponse)\r\n ? ap2ToolsResponse\r\n : [];\r\n\r\n hasWalletTools = tools.some((tool: any) =>\r\n tool.category === 'wallet' ||\r\n tool.metadata?.type === 'wallet' ||\r\n (typeof tool.name === 'string' && tool.name.startsWith('ap2_wallet'))\r\n );\r\n } catch (toolError) {\r\n console.warn('[ChatInterface] Failed to fetch AP2 tools', toolError);\r\n }\r\n\r\n isAp2PaymentEnabled.value = paymentFromConfig || hasWalletTools;\r\n};\r\n\r\n// Auto-resize textarea\r\nconst handleTextareaResize = () => {\r\n const textarea = textareaRef.value;\r\n if (textarea) {\r\n textarea.style.height = 'auto';\r\n const scrollHeight = textarea.scrollHeight;\r\n const lineHeight = parseInt(window.getComputedStyle(textarea).lineHeight);\r\n const maxLines = 5;\r\n const maxHeight = lineHeight * maxLines;\r\n\r\n if (scrollHeight <= maxHeight) {\r\n textarea.style.height = `${scrollHeight}px`;\r\n textarea.style.overflowY = 'hidden';\r\n } else {\r\n textarea.style.height = `${maxHeight}px`;\r\n textarea.style.overflowY = 'auto';\r\n }\r\n }\r\n};\r\n\r\nconst handleInputChange = (e: Event) => {\r\n inputValue.value = (e.target as HTMLTextAreaElement).value;\r\n handleTextareaResize();\r\n};\r\n\r\nwatch(inputValue, (val) => {\r\n if (val === '') handleTextareaResize();\r\n});\r\n\r\n// Allow tool for session\r\nconst allowToolForSession = (toolName: string) => {\r\n sessionAllowedTools.value.add(toolName);\r\n};\r\n\r\n// Close disclaimer\r\nconst handleCloseDisclaimer = () => {\r\n isDisclaimerHiding.value = true;\r\n setTimeout(() => {\r\n showDisclaimer.value = false;\r\n isDisclaimerHiding.value = false;\r\n }, 300);\r\n};\r\n\r\n// Auto-hide disclaimer\r\nwatch(showDisclaimer, (show) => {\r\n if (show && !isDisclaimerHiding.value) {\r\n setTimeout(handleCloseDisclaimer, 5000);\r\n }\r\n});\r\n\r\n// Chat mutation\r\nconst chatMutation = async (message: string): Promise<ChatResponse> => {\r\n let knowledgeContext: KnowledgeContext[] = [];\r\n\r\n if (enableKnowledgeBase) {\r\n try {\r\n const searchResults = await apiService.searchKnowledge(props.projectId, message);\r\n knowledgeContext = searchResults.slice(0, props.maxKnowledgeResults).map((doc: any) => ({\r\n id: doc._id || doc.id,\r\n title: doc.title,\r\n content: doc.content.substring(0, 500),\r\n type: doc.type || 'document',\r\n score: doc.score,\r\n metadata: doc.metadata,\r\n }));\r\n knowledgeSearchResults.value = knowledgeContext;\r\n } catch (error) {\r\n console.warn('Knowledge search failed:', error);\r\n }\r\n }\r\n\r\n const walletState = walletService.getState();\r\n console.log({ walletState });\r\n\r\n\r\n const chatData = {\r\n sessionId: sessionId.value,\r\n aiConfigId: props.aiConfigId,\r\n messages: [{ role: 'user', content: message }],\r\n includeContext: true,\r\n executeTools: enableFunctionCalls,\r\n knowledgeContext: knowledgeContext.length > 0 ? knowledgeContext : undefined,\r\n walletInfo: walletState.isConnected\r\n ? {\r\n connected: true,\r\n address: walletState.address,\r\n network: walletState.network,\r\n chainId: walletState.chainId,\r\n }\r\n : { connected: false },\r\n };\r\n\r\n if (props.enableStreamingMode) {\r\n isStreaming.value = true;\r\n streamingContent.value = '';\r\n\r\n return new Promise((resolve, reject) => {\r\n let fullContent = '';\r\n let toolCalls: any[] = [];\r\n\r\n apiService.chatStream(\r\n props.projectId,\r\n chatData,\r\n (data) => {\r\n fullContent += data;\r\n streamingContent.value = fullContent;\r\n },\r\n (error) => {\r\n isStreaming.value = false;\r\n streamingContent.value = '';\r\n reject(error);\r\n },\r\n (receivedSessionId) => {\r\n isStreaming.value = false;\r\n streamingContent.value = '';\r\n resolve({\r\n message: {\r\n content: fullContent,\r\n toolCalls: toolCalls.length > 0 ? toolCalls : undefined,\r\n },\r\n sessionId: receivedSessionId || sessionId.value || '',\r\n usage: { cost: 0 },\r\n });\r\n },\r\n (receivedToolCalls) => {\r\n console.log('[ChatInterface] Received tool calls from stream:', receivedToolCalls);\r\n toolCalls = receivedToolCalls;\r\n streamingContent.value = '';\r\n }\r\n ).then((cleanup) => {\r\n streamCleanup = cleanup;\r\n }).catch(reject);\r\n });\r\n } else {\r\n isLoading.value = true;\r\n try {\r\n const response = await apiService.chat(props.projectId, chatData);\r\n return response;\r\n } finally {\r\n isLoading.value = false;\r\n }\r\n }\r\n};\r\n\r\n// Send message to AI\r\nconst sendMessageToAI = async (rawInput: string, options: { invokeCallbacks?: boolean } = {}) => {\r\n const { invokeCallbacks = true } = options;\r\n const trimmedInput = rawInput.trim();\r\n\r\n if (!trimmedInput) return;\r\n\r\n const sanitizedInput = truncateContentSafe(trimmedInput, MAX_MESSAGE_CHARS);\r\n\r\n if (sanitizedInput.truncated) {\r\n toast({\r\n title: 'Message truncated',\r\n description: `Your message exceeded ${MAX_MESSAGE_CHARS.toLocaleString()} characters. Only the first ${MAX_MESSAGE_CHARS.toLocaleString()} characters were sent to the AI.`,\r\n });\r\n }\r\n\r\n const userMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'user',\r\n content: sanitizedInput.value,\r\n timestamp: new Date(),\r\n };\r\n\r\n messages.value = [...messages.value, userMessage];\r\n setTimeout(scrollToBottom, 50);\r\n\r\n // Show disclaimer on first message\r\n if (!hasShownDisclaimer.value) {\r\n hasShownDisclaimer.value = true;\r\n showDisclaimer.value = true;\r\n }\r\n\r\n if (invokeCallbacks) {\r\n emit('messageSent', userMessage);\r\n }\r\n\r\n try {\r\n const data = await chatMutation(userMessage.content);\r\n\r\n if (data.sessionId) {\r\n sessionId.value = data.sessionId;\r\n }\r\n\r\n const assistantMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'assistant',\r\n content: data.message.content,\r\n timestamp: new Date(),\r\n usage: data.usage,\r\n knowledgeContext:\r\n (data.context?.knowledgeItems?.length ?? 0) > 0\r\n ? data.context!.knowledgeItems!.map((item: any) => ({\r\n id: item.id,\r\n title: item.metadata?.sourceDescription || item.metadata?.title || item.title || 'Document',\r\n content: item.content,\r\n type: item.metadata?.type || item.type || 'document',\r\n score: item.score,\r\n metadata: item.metadata,\r\n }))\r\n : knowledgeSearchResults.value.length > 0\r\n ? knowledgeSearchResults.value\r\n : undefined,\r\n toolCalls: data.message.toolCalls,\r\n };\r\n\r\n messages.value = [...messages.value, assistantMessage];\r\n setTimeout(scrollToBottom, 50);\r\n\r\n if (data.usage?.cost) {\r\n totalCost.value += data.usage.cost;\r\n }\r\n\r\n if (invokeCallbacks) {\r\n emit('responseReceived', assistantMessage);\r\n }\r\n } catch (error: any) {\r\n console.error('Chat error:', error);\r\n\r\n let errorMessage = error.message || 'Failed to get response';\r\n let errorTitle = 'Error';\r\n\r\n if (error.response?.status === 403) {\r\n if (error.response?.data?.message?.includes('Origin')) {\r\n errorTitle = 'Origin Not Allowed';\r\n errorMessage = `This domain (${window.location.origin}) is not allowed to use this SDK. Please add it to your project's allowed origins list.`;\r\n } else {\r\n errorMessage = error.response?.data?.message || 'Access denied';\r\n }\r\n }\r\n\r\n if (invokeCallbacks) {\r\n emit('error', { ...error, message: errorMessage });\r\n } else {\r\n toast({ title: errorTitle, description: errorMessage, variant: 'destructive' });\r\n }\r\n\r\n messages.value = [...messages.value, {\r\n id: Date.now().toString(),\r\n role: 'assistant',\r\n content: 'Sorry, I encountered an error. Please try again.',\r\n timestamp: new Date(),\r\n }];\r\n setTimeout(scrollToBottom, 50);\r\n }\r\n};\r\n\r\n// Handle send\r\nconst handleSend = async () => {\r\n if (!inputValue.value.trim() || isLoading.value || isStreaming.value) return;\r\n\r\n const content = inputValue.value.trim();\r\n inputValue.value = '';\r\n await sendMessageToAI(content);\r\n};\r\n\r\n// Handle key press\r\nconst handleKeyPress = (e: KeyboardEvent) => {\r\n if (e.key === 'Enter' && !e.shiftKey && !isComposing.value) {\r\n e.preventDefault();\r\n handleSend();\r\n }\r\n};\r\n\r\n// Safe JSON stringify for BigInt\r\nconst safeJSONStringify = (obj: any, indent: number = 2): string => {\r\n return JSON.stringify(\r\n obj,\r\n (key, value) => typeof value === 'bigint' ? value.toString() : value,\r\n indent\r\n );\r\n};\r\n\r\n// Format execution result for AI\r\nconst formatExecutionResultForAI = (functionCall: FunctionCall, result: ExecutionResult): string => {\r\n let resultText = `## Function Execution Result\\n\\n`;\r\n resultText += `**Function:** ${functionCall.name}\\n`;\r\n resultText += `**Type:** ${functionCall.metadata?.type || 'unknown'}\\n`;\r\n\r\n if (functionCall.metadata?.type === 'contract') {\r\n resultText += `**Contract:** ${functionCall.metadata.contractName || 'Unknown'}\\n`;\r\n resultText += `**Address:** ${functionCall.metadata.contractAddress}\\n`;\r\n resultText += `**Chain:** ${functionCall.metadata.chainName || 'Unknown'}\\n`;\r\n }\r\n\r\n if (functionCall.metadata?.method && functionCall.metadata?.path) {\r\n resultText += `**API:** ${functionCall.metadata.method} ${functionCall.metadata.path}\\n`;\r\n }\r\n\r\n resultText += `\\n**Parameters:**\\n\\`\\`\\`json\\n${safeJSONStringify(functionCall.parameters)}\\n\\`\\`\\`\\n\\n`;\r\n\r\n if (result.success) {\r\n resultText += `**Status:** ✅ SUCCESS\\n\\n`;\r\n resultText += `**Result:**\\n`;\r\n\r\n if (result.data?.decodedResult) {\r\n resultText += `\\n**Decoded Value:**\\n`;\r\n if (result.data.decodedResult.formatted) {\r\n resultText += `- Formatted: ${result.data.decodedResult.formatted}\\n`;\r\n resultText += `- Raw: ${result.data.decodedResult.raw}\\n`;\r\n if (result.data.decodedResult.decimals) {\r\n resultText += `- Decimals: ${result.data.decodedResult.decimals}\\n`;\r\n }\r\n } else {\r\n resultText += `\\`\\`\\`json\\n${safeJSONStringify(result.data.decodedResult)}\\n\\`\\`\\`\\n`;\r\n }\r\n } else {\r\n const rawJson = safeJSONStringify(result.data ?? result);\r\n const truncatedJson = truncateContentSafe(rawJson, MAX_TOOL_RESULT_CHARS);\r\n resultText += `\\n**Raw Result:**\\n\\`\\`\\`json\\n${truncatedJson.value}\\n\\`\\`\\`\\n`;\r\n }\r\n } else {\r\n resultText += `**Status:** ❌ FAILED\\n\\n`;\r\n resultText += `**Error:** ${result.error}\\n`;\r\n\r\n if (result.data) {\r\n const errorJson = safeJSONStringify(result.data);\r\n const truncatedError = truncateContentSafe(errorJson, MAX_TOOL_RESULT_CHARS);\r\n resultText += `\\n**Error Details:**\\n\\`\\`\\`json\\n${truncatedError.value}\\n\\`\\`\\`\\n`;\r\n }\r\n }\r\n\r\n const finalResult = truncateContentSafe(resultText, MAX_MESSAGE_CHARS);\r\n return finalResult.value;\r\n};\r\n\r\n// Handle function call executed\r\nconst handleFunctionCallExecuted = async (functionCall: FunctionCall, executionResult: ExecutionResult) => {\r\n // Guard against duplicate handling\r\n const key = (() => {\r\n try {\r\n return `${functionCall.name}-${JSON.stringify(functionCall.parameters)}-${JSON.stringify(functionCall.metadata)}-${executionResult.success}`;\r\n } catch {\r\n return functionCall.name;\r\n }\r\n })();\r\n\r\n if (handledFunctionCalls.value.has(key)) {\r\n console.log('[ChatInterface] Skipping duplicate function call handling', { key });\r\n return;\r\n }\r\n handledFunctionCalls.value.add(key);\r\n\r\n // Check if this is an AP2 payment request\r\n if (\r\n functionCall.name === 'ap2_credentials_sign_payment' &&\r\n executionResult.success &&\r\n executionResult.data?.requiresSignature === true &&\r\n executionResult.data?.typedData &&\r\n executionResult.data?.paymentMandateContents\r\n ) {\r\n console.log('[AP2][ChatInterface] Detected payment mandate requiring signature');\r\n\r\n const mandateContents = executionResult.data.paymentMandateContents;\r\n const totalAmountInfo = mandateContents?.paymentDetailsTotal;\r\n\r\n window.dispatchEvent(new CustomEvent('ap2:payment:requested', {\r\n detail: {\r\n sessionId: sessionId.value || `session_${Date.now()}`,\r\n mandateId: mandateContents?.paymentDetailsId || executionResult.data?.mandateId || `mandate_${Date.now()}`,\r\n cartHash: executionResult.data?.cartHash || `cart_${Date.now()}`,\r\n amount: totalAmountInfo?.amount?.value?.toString() || '0',\r\n merchant: mandateContents?.merchantAgent || mandateContents?.merchant || '0x0000000000000000000000000000000000000000',\r\n typedData: executionResult.data?.typedData,\r\n functionCall: functionCall,\r\n },\r\n }));\r\n }\r\n\r\n if (!enableFunctionCalls || reactProcessing.value || isLoading.value || isStreaming.value) return;\r\n\r\n if (enableReActPattern) {\r\n reactProcessing.value = true;\r\n }\r\n\r\n try {\r\n const resultMessage = formatExecutionResultForAI(functionCall, executionResult);\r\n const instructions = `The function execution has completed. Here is the result:\\n\\n${resultMessage}\\n\\nPlease analyze this result and provide the answer to the user's original question.`;\r\n const sanitizedContinuation = truncateContentSafe(instructions, MAX_MESSAGE_CHARS);\r\n\r\n try {\r\n const data = await chatMutation(sanitizedContinuation.value);\r\n\r\n const assistantMessage: Message = {\r\n id: Date.now().toString(),\r\n role: 'assistant',\r\n content: data.message.content,\r\n timestamp: new Date(),\r\n usage: data.usage,\r\n toolCalls: data.message.toolCalls,\r\n };\r\n\r\n messages.value = [...messages.value, assistantMessage];\r\n\r\n emit('responseReceived', assistantMessage);\r\n\r\n if (data.usage?.cost) {\r\n totalCost.value += data.usage.cost;\r\n }\r\n } catch (error: any) {\r\n console.error('ReAct continuation error:', error);\r\n }\r\n\r\n emit('functionExecuted', functionCall, executionResult);\r\n } catch (error) {\r\n console.error('Error in ReAct processing:', error);\r\n } finally {\r\n if (enableReActPattern) {\r\n reactProcessing.value = false;\r\n }\r\n }\r\n};\r\n\r\n// Payment event handlers\r\nlet lastPaymentEvent: string | null = null;\r\n\r\nconst handlePaymentApproved = (event: CustomEvent<any>) => {\r\n const detail = event.detail || {};\r\n const key = `approved-${detail.sessionId || ''}-${detail.signature || ''}-${detail.txHash || ''}`;\r\n if (lastPaymentEvent === key) return;\r\n lastPaymentEvent = key;\r\n\r\n const parts = ['I have signed the payment mandate in MetaMask.'];\r\n if (detail.sessionId) parts.push(`Session ID: ${detail.sessionId}.`);\r\n if (detail.signature) parts.push(`Signature: ${detail.signature}.`);\r\n parts.push('Please continue processing the payment.');\r\n\r\n sendMessageToAI(parts.join(' '), { invokeCallbacks: false });\r\n};\r\n\r\nconst handlePaymentRejected = (event: CustomEvent<any>) => {\r\n const detail = event.detail || {};\r\n const key = `rejected-${detail.sessionId || ''}`;\r\n if (lastPaymentEvent === key) return;\r\n lastPaymentEvent = key;\r\n\r\n const parts = ['I was not able to sign the payment mandate in MetaMask.'];\r\n if (detail.sessionId) parts.push(`Session ID: ${detail.sessionId}.`);\r\n parts.push('Please provide the next steps.');\r\n\r\n sendMessageToAI(parts.join(' '), { invokeCallbacks: false });\r\n};\r\n\r\n// Lifecycle\r\nonMounted(() => {\r\n fetchAIConfig();\r\n fetchAp2Config();\r\n\r\n window.addEventListener('ap2:payment:approved' as any, handlePaymentApproved as any);\r\n window.addEventListener('ap2:payment:rejected' as any, handlePaymentRejected as any);\r\n});\r\n\r\nonUnmounted(() => {\r\n if (streamCleanup) {\r\n streamCleanup();\r\n }\r\n window.removeEventListener('ap2:payment:approved' as any, handlePaymentApproved as any);\r\n window.removeEventListener('ap2:payment:rejected' as any, handlePaymentRejected as any);\r\n});\r\n\r\n// Cache for processed function calls per message (keyed by message id)\r\nconst processedFunctionCallsCache = ref<Map<string, FunctionCall[]>>(new Map());\r\n\r\n// Process function calls from message asynchronously and cache them\r\nconst processAndCacheFunctionCalls = async (message: Message): Promise<FunctionCall[]> => {\r\n // Check cache first\r\n if (processedFunctionCallsCache.value.has(message.id)) {\r\n return processedFunctionCallsCache.value.get(message.id)!;\r\n }\r\n\r\n let calls: FunctionCall[] = [];\r\n\r\n if (message.toolCalls && Array.isArray(message.toolCalls) && props.projectId) {\r\n // Use toolProcessor to properly enrich metadata (like React does)\r\n try {\r\n calls = await toolProcessor.processToolCalls(props.projectId, message.toolCalls);\r\n console.log('[ChatInterface] Processed tool calls with enriched metadata:', calls);\r\n } catch (error) {\r\n console.warn('[ChatInterface] Failed to process tool calls, using fallback:', error);\r\n // Fallback to basic parsing if toolProcessor fails\r\n calls = message.toolCalls\r\n .filter((tc): tc is ToolCall & { function: NonNullable<ToolCall['function']> } => !!tc.function)\r\n .map((tc) => {\r\n let parameters = {};\r\n if (typeof tc.function.arguments === 'string') {\r\n try {\r\n parameters = JSON.parse(tc.function.arguments);\r\n } catch {\r\n parameters = { raw: tc.function.arguments };\r\n }\r\n } else {\r\n parameters = tc.function.arguments || {};\r\n }\r\n return {\r\n name: tc.function.name,\r\n parameters,\r\n metadata: { type: 'unknown' as const },\r\n };\r\n });\r\n }\r\n } else if (message.content) {\r\n calls = extractFunctionCalls(message.content);\r\n }\r\n\r\n // Cache the result\r\n processedFunctionCallsCache.value.set(message.id, calls);\r\n return calls;\r\n};\r\n\r\n// Synchronous getter for template (returns cached value or empty array)\r\nconst processFunctionCalls = (message: Message): FunctionCall[] => {\r\n // Return cached value if available\r\n if (processedFunctionCallsCache.value.has(message.id)) {\r\n return processedFunctionCallsCache.value.get(message.id)!;\r\n }\r\n\r\n // Trigger async processing (will update cache and cause re-render)\r\n processAndCacheFunctionCalls(message);\r\n\r\n // Return empty array for now (will re-render when cache is populated)\r\n return [];\r\n};\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('termix-container termix-chat-interface', props.className)\" :style=\"props.style\">\r\n <!-- Chat Header -->\r\n <div v-if=\"showHeader\" class=\"termix-chat-interface__header\">\r\n <div class=\"termix-chat-interface__header-info\">\r\n <div class=\"termix-chat-interface__header-avatar\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" width=\"24\" height=\"24\">\r\n <circle cx=\"12\" cy=\"8\" r=\"4\" />\r\n <path d=\"M6 20v-2a4 4 0 0 1 4-4h4a4 4 0 0 1 4 4v2\" />\r\n </svg>\r\n </div>\r\n <div>\r\n <h3 class=\"termix-chat-interface__header-title\">\r\n {{ personalityName || aiConfigData?.personality?.name || 'Assistant' }}\r\n </h3>\r\n <p class=\"termix-chat-interface__header-subtitle\">\r\n {{ aiConfigData?.modelConfig?.model || 'AI Model' }}\r\n </p>\r\n </div>\r\n </div>\r\n <div v-if=\"showUsageInfo && totalCost > 0\" class=\"termix-chat-interface__header-usage\">\r\n Total cost: ${{ totalCost.toFixed(6) }}\r\n </div>\r\n </div>\r\n\r\n <!-- Wallet Indicator -->\r\n <div v-if=\"isAp2PaymentEnabled\"\r\n style=\"padding: 0.5rem 1rem; border-bottom: 1px solid var(--termix-border, #e5e7eb);\">\r\n <WalletIndicator :wallet-service=\"walletService\" :function-call-executor=\"functionCallExecutor\"\r\n :session-id=\"sessionId\" :project-id=\"projectId\" :compact=\"true\"\r\n :on-connect=\"(address: string) => { console.log('Wallet connected:', address); }\" />\r\n </div>\r\n\r\n <!-- Messages Area -->\r\n <div :class=\"cn('termix-chat-interface__messages', props.messagesClassName)\"\r\n :style=\"{ ...props.messagesStyle, position: 'relative' }\">\r\n <!-- Disclaimer Toast -->\r\n <div v-if=\"showDisclaimer\"\r\n :class=\"cn('termix-disclaimer-toast', isDisclaimerHiding && 'termix-disclaimer-toast--hiding')\">\r\n <div class=\"termix-disclaimer-toast__content\">\r\n <svg class=\"termix-disclaimer-toast__icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\r\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\r\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\r\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\r\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\r\n </svg>\r\n <span class=\"termix-disclaimer-toast__text\">\r\n Content is AI-generated and may contain errors. For issues, please contact customer support.\r\n </span>\r\n </div>\r\n <button class=\"termix-disclaimer-toast__close\" @click=\"handleCloseDisclaimer\" aria-label=\"Close disclaimer\">\r\n <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\">\r\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\r\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"termix-chat-interface__messages-container\">\r\n <div v-for=\"message in messages\" :key=\"message.id\" :class=\"cn(\r\n 'termix-chat-interface__message',\r\n message.role === 'user'\r\n ? 'termix-chat-interface__message--user'\r\n : 'termix-chat-interface__message--assistant'\r\n )\">\r\n <div :class=\"cn(\r\n 'termix-chat-interface__message-bubble',\r\n message.role === 'user'\r\n ? 'termix-chat-interface__message-bubble--user'\r\n : message.role === 'system'\r\n ? 'termix-chat-interface__message-bubble--system'\r\n : 'termix-chat-interface__message-bubble--assistant'\r\n )\">\r\n <div class=\"termix-chat-interface__message-content\">\r\n <!-- User and system messages: plain text -->\r\n <div v-if=\"message.role === 'user' || message.role === 'system'\"\r\n v-html=\"processMessageContent(message.content, message.role)\"></div>\r\n <!-- Assistant messages: markdown rendered -->\r\n <div v-else class=\"termix-prose\" v-html=\"processMessageContent(message.content, message.role)\"></div>\r\n\r\n <!-- Sources Badge -->\r\n <SourcesBadge\r\n v-if=\"message.role === 'assistant' && message.knowledgeContext && message.knowledgeContext.length > 0\"\r\n :sources=\"message.knowledgeContext\" />\r\n </div>\r\n\r\n <!-- Function Calls -->\r\n <div v-if=\"message.role === 'assistant' && processFunctionCalls(message).length > 0\"\r\n class=\"termix-chat-interface__message-functions\">\r\n <FunctionCallDisplay v-for=\"(fc, index) in processFunctionCalls(message)\" :key=\"index\" :function-call=\"fc\"\r\n :wallet-service=\"walletService\" :function-call-executor=\"functionCallExecutor\"\r\n :domain-headers=\"domainHeaders\" :authorization=\"authorization\"\r\n :session-allowed-tools=\"sessionAllowedTools\" :allow-tool-for-session=\"allowToolForSession\"\r\n :on-execute=\"handleFunctionCallExecuted\" :before-call-api-func=\"beforeCallApiFunc\" />\r\n </div>\r\n\r\n <!-- Metadata -->\r\n <div :class=\"cn(\r\n 'termix-chat-interface__message-metadata',\r\n message.role === 'user'\r\n ? 'termix-chat-interface__message-metadata--user'\r\n : 'termix-chat-interface__message-metadata--assistant'\r\n )\">\r\n <span v-if=\"showTimestamp\">\r\n {{ message.timestamp.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) }}\r\n </span>\r\n <template v-if=\"showUsageInfo && message.usage\">\r\n <span>•</span>\r\n <span>{{ message.usage.totalTokens }} tokens</span>\r\n <span>•</span>\r\n <span>${{ message.usage.cost.toFixed(6) }}</span>\r\n </template>\r\n <template\r\n v-if=\"showKnowledgeReferences && message.knowledgeContext && message.knowledgeContext.length > 0\">\r\n <span>•</span>\r\n <span>{{ message.knowledgeContext.length }} KB refs</span>\r\n </template>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Streaming content -->\r\n <div v-if=\"isStreaming && streamingContent\" class=\"termix-chat-interface__streaming\">\r\n <div class=\"message-bubble\">\r\n <div class=\"termix-chat-interface__message-content termix-prose\" v-html=\"renderMarkdown(streamingContent)\">\r\n </div>\r\n <div class=\"loading-indicator\">\r\n <svg class=\"animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n width=\"16\" height=\"16\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n <span>AI is thinking...</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Loading state -->\r\n <div v-if=\"isLoading || reactProcessing || (isStreaming && !streamingContent)\"\r\n class=\"termix-chat-interface__loading\">\r\n <div class=\"loading-bubble\">\r\n <div class=\"loading-content\">\r\n <svg class=\"animate-spin\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\r\n width=\"16\" height=\"16\">\r\n <path d=\"M21 12a9 9 0 11-6.219-8.56\" />\r\n </svg>\r\n <span>{{ reactProcessing ? 'AI is analyzing execution results...' : 'AI is thinking...' }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Scroll target -->\r\n <div ref=\"messagesEndRef\" />\r\n </div>\r\n </div>\r\n\r\n <!-- Input Area -->\r\n <div class=\"termix-chat-interface__input\">\r\n <div class=\"termix-chat-interface__input-container\">\r\n <div class=\"termix-chat-interface__input-wrapper\">\r\n <textarea ref=\"textareaRef\" :value=\"inputValue\" @input=\"handleInputChange\" @keydown=\"handleKeyPress\"\r\n @compositionstart=\"isComposing = true\" @compositionend=\"isComposing = false\" :placeholder=\"placeholder\"\r\n :class=\"cn('termix-chat-interface__input-field', props.inputClassName)\" :style=\"props.inputStyle\"\r\n :disabled=\"isLoading || reactProcessing || isStreaming\" rows=\"1\" />\r\n <button @click=\"handleSend\" :disabled=\"!inputValue.trim() || isLoading || reactProcessing || isStreaming\"\r\n class=\"termix-chat-interface__input-button\" type=\"button\" aria-label=\"Send message\">\r\n <svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M23.4135 12.9919C24.1695 12.6469 24.1718 12.0889 23.4135 11.7432L2.88 2.37493C2.124 2.02993 1.5105 2.42593 1.509 3.24568L1.5 10.0077L18.1305 12.3672L1.5 14.7267L1.509 21.4894C1.5105 22.3152 2.12175 22.7059 2.88 22.3602L23.4135 12.9919Z\"\r\n fill=\"white\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- AP2 Payment Modal -->\r\n <PaymentApprovalModal v-if=\"pendingPayment\" :wallet-service=\"walletService\" :open=\"isPaymentModalOpen\"\r\n :mandate-data=\"pendingPayment\" :on-close=\"clearPayment\" :on-approve=\"approvePayment\" :on-reject=\"rejectPayment\" />\r\n </div>\r\n</template>\r\n","<script setup lang=\"ts\">\r\n/**\r\n * ChatWidget Component\r\n *\r\n * Floating chat widget with toggle button\r\n */\r\n\r\nimport { ref, onMounted, onUnmounted } from 'vue';\r\nimport { cn } from '../lib/utils';\r\n\r\nconst props = withDefaults(defineProps<{\r\n /** Custom button icon URL */\r\n buttonIcon?: string;\r\n /** Dialog title */\r\n title?: string;\r\n /** Custom CSS class */\r\n class?: string;\r\n /** Custom inline styles */\r\n style?: Record<string, string>;\r\n /** Button custom class */\r\n buttonClassName?: string;\r\n /** Button custom styles */\r\n buttonStyle?: Record<string, string>;\r\n /** Dialog custom class */\r\n dialogClassName?: string;\r\n /** Dialog custom styles */\r\n dialogStyle?: Record<string, string>;\r\n /** Default open state */\r\n defaultOpen?: boolean;\r\n}>(), {\r\n title: 'AI Assistant',\r\n defaultOpen: false,\r\n});\r\n\r\nconst emit = defineEmits<{\r\n (e: 'openChange', open: boolean): void;\r\n}>();\r\n\r\nconst isOpen = ref(props.defaultOpen);\r\nconst dialogRef = ref<HTMLDivElement | null>(null);\r\nconst buttonRef = ref<HTMLButtonElement | null>(null);\r\n\r\nconst handleToggle = () => {\r\n isOpen.value = !isOpen.value;\r\n emit('openChange', isOpen.value);\r\n};\r\n\r\nconst handleClose = () => {\r\n isOpen.value = false;\r\n emit('openChange', false);\r\n};\r\n\r\n// Close dialog when clicking outside\r\nconst handleClickOutside = (event: MouseEvent) => {\r\n const target = event.target as HTMLElement;\r\n\r\n // Check if the click is inside a Termix modal\r\n const isInsideTermixModal = target.closest('[data-termix-modal]') !== null;\r\n\r\n if (\r\n isOpen.value &&\r\n dialogRef.value &&\r\n buttonRef.value &&\r\n !dialogRef.value.contains(target) &&\r\n !buttonRef.value.contains(target) &&\r\n !isInsideTermixModal\r\n ) {\r\n handleClose();\r\n }\r\n};\r\n\r\nonMounted(() => {\r\n document.addEventListener('mousedown', handleClickOutside);\r\n});\r\n\r\nonUnmounted(() => {\r\n document.removeEventListener('mousedown', handleClickOutside);\r\n});\r\n</script>\r\n\r\n<template>\r\n <div :class=\"cn('termix-chat-widget', props.class)\" :style=\"props.style\">\r\n <!-- Chat Dialog -->\r\n <div\r\n v-if=\"isOpen\"\r\n ref=\"dialogRef\"\r\n :class=\"cn(\r\n 'termix-chat-widget__dialog',\r\n 'termix-chat-widget__dialog--entering',\r\n props.dialogClassName\r\n )\"\r\n :style=\"props.dialogStyle\"\r\n >\r\n <!-- Dialog Header -->\r\n <div class=\"termix-chat-widget__dialog-header\">\r\n <div class=\"termix-chat-widget__dialog-header-info\">\r\n <div class=\"termix-chat-widget__dialog-header-avatar\" style=\"scale: 0.8\">\r\n <svg width=\"54\" height=\"54\" viewBox=\"0 0 54 54\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <rect x=\"0.75\" y=\"0.75\" width=\"52.5\" height=\"52.5\" rx=\"12.25\" fill=\"black\"/>\r\n <rect x=\"0.75\" y=\"0.75\" width=\"52.5\" height=\"52.5\" rx=\"12.25\" stroke=\"url(#paint0_linear_1438_11556)\" stroke-width=\"1.5\"/>\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M31.0517 23.6275L41.9604 34.5362L38.2648 38.2317L27.0006 26.9676V20.2875L34.2853 13.0029L37.9809 16.6985L31.0517 23.6275ZM22.9484 30.3727L12.0397 19.4641L15.7352 15.7686L26.9995 27.0326V33.7128L19.7149 40.9974L16.0193 37.3018L22.9484 30.3727Z\" fill=\"url(#paint1_radial_1438_11556)\"/>\r\n <defs>\r\n <linearGradient id=\"paint0_linear_1438_11556\" x1=\"-5.26988e-07\" y1=\"5.81986\" x2=\"54\" y2=\"48.1801\" gradientUnits=\"userSpaceOnUse\">\r\n <stop stop-color=\"#AEF431\"/>\r\n <stop offset=\"1\" stop-color=\"#32F5D4\"/>\r\n </linearGradient>\r\n <radialGradient id=\"paint1_radial_1438_11556\" cx=\"0\" cy=\"0\" r=\"1\" gradientUnits=\"userSpaceOnUse\" gradientTransform=\"translate(26.5006 27.0029) scale(29 17.196)\">\r\n <stop stop-color=\"#AEF431\"/>\r\n <stop offset=\"1\" stop-color=\"#32F5D4\"/>\r\n </radialGradient>\r\n </defs>\r\n </svg>\r\n </div>\r\n <span class=\"termix-chat-widget__dialog-header-title\">{{ title }}</span>\r\n </div>\r\n\r\n <button\r\n @click=\"handleClose\"\r\n class=\"termix-chat-widget__dialog-header-close\"\r\n >\r\n <img v-if=\"buttonIcon\" :src=\"buttonIcon\" alt=\"Chat\" />\r\n <svg v-else fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <!-- Dialog Content -->\r\n <div class=\"termix-chat-widget__dialog-content\">\r\n <slot></slot>\r\n </div>\r\n </div>\r\n\r\n <!-- Chat Button -->\r\n <button\r\n ref=\"buttonRef\"\r\n @click=\"handleToggle\"\r\n :class=\"cn('termix-chat-widget__button', props.buttonClassName)\"\r\n :style=\"props.buttonStyle\"\r\n >\r\n <img v-if=\"buttonIcon\" :src=\"buttonIcon\" alt=\"Chat\" />\r\n <svg v-else width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path d=\"M34.7604 6.85718H4.73958C4.1456 6.85718 3.57596 7.09313 3.15596 7.51314C2.73595 7.93314 2.5 8.50278 2.5 9.09675V28.9781C2.5 29.5721 2.73595 30.1417 3.15596 30.5617C3.57596 30.9817 4.1456 31.2177 4.73958 31.2177H8.31822C8.60475 31.2177 8.82695 31.475 8.78017 31.7615L8.78602 35.884C8.72754 36.2582 9.11347 36.5447 9.45263 36.381L18.0835 31.2762C18.1536 31.2586 18.2238 31.2411 18.2998 31.2235H34.7604C35.3544 31.2235 35.924 30.9876 36.344 30.5676C36.764 30.1476 37 29.5779 37 28.984V9.1026C37 7.85709 35.9942 6.85718 34.7604 6.85718ZM12.3705 21.3881C10.78 21.3881 9.48771 20.0958 9.48771 18.5053C9.48771 16.9148 10.78 15.6225 12.3705 15.6225C13.961 15.6225 15.2533 16.9148 15.2533 18.5053C15.2475 20.0958 13.961 21.3881 12.3705 21.3881ZM19.8845 21.3881C18.294 21.3881 17.0017 20.0958 17.0017 18.5053C17.0017 16.9148 18.294 15.6225 19.8845 15.6225C21.475 15.6225 22.7673 16.9148 22.7673 18.5053C22.7614 20.0958 21.475 21.3881 19.8845 21.3881ZM27.3985 21.3881C25.808 21.3881 24.5157 20.0958 24.5157 18.5053C24.5157 16.9148 25.808 15.6225 27.3985 15.6225C28.989 15.6225 30.2813 16.9148 30.2813 18.5053C30.2813 20.0958 28.989 21.3881 27.3985 21.3881Z\" fill=\"#010101\"/>\r\n </svg>\r\n </button>\r\n </div>\r\n</template>\r\n"],"names":["r","e","t","f","o","_a","validator","classGroup","i","k","isNumber","text","a","b","html","encode","unescape","_","c","l","j","block","renderer","_b","args","ret","src","getPrototypeOf","freeze","x","seal","apply","construct","getGlobal","_createTrustedTypesPolicy","_createHooksMap","window","document","MUSTACHE_EXPR","ERB_EXPR","TMPLIT_EXPR","DATA_ATTR","ARIA_ATTR","IS_SCRIPT_OR_DATA","ATTR_WHITESPACE","CUSTOM_ELEMENT","isRegexOrFunction","_parseConfig","_checkValidNamespace","_forceRemove","_removeAttribute","_initDocument","_createNodeIterator","_isClobbered","_isNode","hooks","_sanitizeElements","_isValidAttribute","_isBasicCustomElement","_sanitizeAttributes","_sanitizeShadowDOM","DOMPurify","Reflect","factory","global","O","P","hasOwn","_i","y","V","iterator","prototype","metadataRegistry","metadata","OrdinaryDefineOwnMetadata","OrdinaryHasOwnMetadata","OrdinaryGetOwnMetadata","OrdinaryOwnMetadataKeys","defineMetadata","hasOwnMetadata","getOwnMetadata","getOwnMetadataKeys","deleteMetadata","MapIterator","Map","Set","WeakMap","create","_e","s","u","d","m","g","p","h","n","I","w","M","N","E","D","A","_t","C","T","isFunction","descriptors","filter","toCamelCase","hasOwnProperty","AxiosError","utils","toFormData","toString","URLSearchParams","FormData","Blob","platform","isFormData","isFileList","transitional","self","computed","AxiosHeaders","isCancel","CanceledError","validateStatus","origin","mergeConfig","merge","signal","done","ReadableStream","TextEncoder","fetch","fetchAdapter.getFetch","getAdapter","adapters","VERSION","validators","Axios","spread","isAxiosError","HttpStatusCode","CancelToken","all","data","__decorateClass","injectable","__decorateParam","inject","optional","_d","_c","_f","headers","entries","Container","ethers","container","_createElementBlock","_createElementVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_toDisplayString","_hoisted_5","_openBlock","_hoisted_6","_hoisted_7","_hoisted_8","_Fragment","_hoisted_10","_normalizeClass","_createVNode","WalletConnect","_hoisted_9","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","_hoisted_23","_hoisted_24","_hoisted_25","_hoisted_26","_hoisted_27","_hoisted_28","_createBlock","AP2PaymentFlow","_unref","_resolveDynamicComponent","_createTextVNode","clone","_Teleport","_renderList","pendingPayment","isPaymentModalOpen","resolve","_normalizeStyle","WalletIndicator","SourcesBadge","FunctionCallDisplay","PaymentApprovalModal","_renderSlot"],"mappings":"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","x_google_ignoreList":[0,1,3,4,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,88,89,90,91,92,93,94,95,96,97]}