@frontmcp/ui 0.5.1 → 0.6.1

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 (805) hide show
  1. package/README.md +140 -362
  2. package/bridge/adapters/base-adapter.d.ts +104 -0
  3. package/bridge/adapters/base-adapter.d.ts.map +1 -0
  4. package/bridge/adapters/claude.adapter.d.ts +67 -0
  5. package/bridge/adapters/claude.adapter.d.ts.map +1 -0
  6. package/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  7. package/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  8. package/bridge/adapters/gemini.adapter.d.ts +64 -0
  9. package/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  10. package/bridge/adapters/generic.adapter.d.ts +56 -0
  11. package/bridge/adapters/generic.adapter.d.ts.map +1 -0
  12. package/bridge/adapters/index.d.ts +26 -0
  13. package/bridge/adapters/index.d.ts.map +1 -0
  14. package/bridge/adapters/openai.adapter.d.ts +65 -0
  15. package/bridge/adapters/openai.adapter.d.ts.map +1 -0
  16. package/bridge/core/adapter-registry.d.ts +122 -0
  17. package/bridge/core/adapter-registry.d.ts.map +1 -0
  18. package/bridge/core/bridge-factory.d.ts +199 -0
  19. package/bridge/core/bridge-factory.d.ts.map +1 -0
  20. package/bridge/core/index.d.ts +10 -0
  21. package/bridge/core/index.d.ts.map +1 -0
  22. package/bridge/index.d.ts +62 -0
  23. package/bridge/index.d.ts.map +1 -0
  24. package/bridge/index.js +2540 -0
  25. package/bridge/runtime/iife-generator.d.ts +62 -0
  26. package/bridge/runtime/iife-generator.d.ts.map +1 -0
  27. package/bridge/runtime/index.d.ts +10 -0
  28. package/bridge/runtime/index.d.ts.map +1 -0
  29. package/bridge/types.d.ts +386 -0
  30. package/bridge/types.d.ts.map +1 -0
  31. package/bundler/bundler.d.ts +208 -0
  32. package/bundler/bundler.d.ts.map +1 -0
  33. package/bundler/cache.d.ts +173 -0
  34. package/bundler/cache.d.ts.map +1 -0
  35. package/bundler/file-cache/component-builder.d.ts +167 -0
  36. package/bundler/file-cache/component-builder.d.ts.map +1 -0
  37. package/bundler/file-cache/hash-calculator.d.ts +155 -0
  38. package/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  39. package/bundler/file-cache/index.d.ts +12 -0
  40. package/bundler/file-cache/index.d.ts.map +1 -0
  41. package/bundler/file-cache/storage/filesystem.d.ts +149 -0
  42. package/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  43. package/bundler/file-cache/storage/index.d.ts +11 -0
  44. package/bundler/file-cache/storage/index.d.ts.map +1 -0
  45. package/bundler/file-cache/storage/interface.d.ts +152 -0
  46. package/bundler/file-cache/storage/interface.d.ts.map +1 -0
  47. package/bundler/file-cache/storage/redis.d.ts +139 -0
  48. package/bundler/file-cache/storage/redis.d.ts.map +1 -0
  49. package/bundler/index.d.ts +43 -0
  50. package/bundler/index.d.ts.map +1 -0
  51. package/bundler/index.js +3707 -0
  52. package/bundler/sandbox/enclave-adapter.d.ts +121 -0
  53. package/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  54. package/bundler/sandbox/executor.d.ts +14 -0
  55. package/bundler/sandbox/executor.d.ts.map +1 -0
  56. package/bundler/sandbox/policy.d.ts +62 -0
  57. package/bundler/sandbox/policy.d.ts.map +1 -0
  58. package/bundler/types.d.ts +702 -0
  59. package/bundler/types.d.ts.map +1 -0
  60. package/components/alert.d.ts +66 -0
  61. package/components/alert.d.ts.map +1 -0
  62. package/components/alert.schema.d.ts +98 -0
  63. package/components/alert.schema.d.ts.map +1 -0
  64. package/components/avatar.d.ts +77 -0
  65. package/components/avatar.d.ts.map +1 -0
  66. package/components/avatar.schema.d.ts +170 -0
  67. package/components/avatar.schema.d.ts.map +1 -0
  68. package/components/badge.d.ts +64 -0
  69. package/components/badge.d.ts.map +1 -0
  70. package/components/badge.schema.d.ts +91 -0
  71. package/components/badge.schema.d.ts.map +1 -0
  72. package/components/button.d.ts +100 -0
  73. package/components/button.d.ts.map +1 -0
  74. package/components/button.schema.d.ts +120 -0
  75. package/components/button.schema.d.ts.map +1 -0
  76. package/components/card.d.ts +53 -0
  77. package/components/card.d.ts.map +1 -0
  78. package/components/card.schema.d.ts +93 -0
  79. package/components/card.schema.d.ts.map +1 -0
  80. package/components/form.d.ts +212 -0
  81. package/components/form.d.ts.map +1 -0
  82. package/components/form.schema.d.ts +365 -0
  83. package/components/form.schema.d.ts.map +1 -0
  84. package/components/index.d.ts +29 -0
  85. package/components/index.d.ts.map +1 -0
  86. package/components/index.js +2525 -0
  87. package/components/list.d.ts +121 -0
  88. package/components/list.d.ts.map +1 -0
  89. package/components/list.schema.d.ts +129 -0
  90. package/components/list.schema.d.ts.map +1 -0
  91. package/components/modal.d.ts +100 -0
  92. package/components/modal.d.ts.map +1 -0
  93. package/components/modal.schema.d.ts +151 -0
  94. package/components/modal.schema.d.ts.map +1 -0
  95. package/components/table.d.ts +91 -0
  96. package/components/table.d.ts.map +1 -0
  97. package/components/table.schema.d.ts +123 -0
  98. package/components/table.schema.d.ts.map +1 -0
  99. package/esm/bridge/adapters/base-adapter.d.ts +104 -0
  100. package/esm/bridge/adapters/base-adapter.d.ts.map +1 -0
  101. package/esm/bridge/adapters/claude.adapter.d.ts +67 -0
  102. package/esm/bridge/adapters/claude.adapter.d.ts.map +1 -0
  103. package/esm/bridge/adapters/ext-apps.adapter.d.ts +143 -0
  104. package/esm/bridge/adapters/ext-apps.adapter.d.ts.map +1 -0
  105. package/esm/bridge/adapters/gemini.adapter.d.ts +64 -0
  106. package/esm/bridge/adapters/gemini.adapter.d.ts.map +1 -0
  107. package/esm/bridge/adapters/generic.adapter.d.ts +56 -0
  108. package/esm/bridge/adapters/generic.adapter.d.ts.map +1 -0
  109. package/esm/bridge/adapters/index.d.ts +26 -0
  110. package/esm/bridge/adapters/index.d.ts.map +1 -0
  111. package/esm/bridge/adapters/openai.adapter.d.ts +65 -0
  112. package/esm/bridge/adapters/openai.adapter.d.ts.map +1 -0
  113. package/esm/bridge/core/adapter-registry.d.ts +122 -0
  114. package/esm/bridge/core/adapter-registry.d.ts.map +1 -0
  115. package/esm/bridge/core/bridge-factory.d.ts +199 -0
  116. package/esm/bridge/core/bridge-factory.d.ts.map +1 -0
  117. package/esm/bridge/core/index.d.ts +10 -0
  118. package/esm/bridge/core/index.d.ts.map +1 -0
  119. package/esm/bridge/index.d.ts +62 -0
  120. package/esm/bridge/index.d.ts.map +1 -0
  121. package/esm/bridge/index.js +2487 -0
  122. package/esm/bridge/runtime/iife-generator.d.ts +62 -0
  123. package/esm/bridge/runtime/iife-generator.d.ts.map +1 -0
  124. package/esm/bridge/runtime/index.d.ts +10 -0
  125. package/esm/bridge/runtime/index.d.ts.map +1 -0
  126. package/esm/bridge/types.d.ts +386 -0
  127. package/esm/bridge/types.d.ts.map +1 -0
  128. package/esm/bundler/bundler.d.ts +208 -0
  129. package/esm/bundler/bundler.d.ts.map +1 -0
  130. package/esm/bundler/cache.d.ts +173 -0
  131. package/esm/bundler/cache.d.ts.map +1 -0
  132. package/esm/bundler/file-cache/component-builder.d.ts +167 -0
  133. package/esm/bundler/file-cache/component-builder.d.ts.map +1 -0
  134. package/esm/bundler/file-cache/hash-calculator.d.ts +155 -0
  135. package/esm/bundler/file-cache/hash-calculator.d.ts.map +1 -0
  136. package/esm/bundler/file-cache/index.d.ts +12 -0
  137. package/esm/bundler/file-cache/index.d.ts.map +1 -0
  138. package/esm/bundler/file-cache/storage/filesystem.d.ts +149 -0
  139. package/esm/bundler/file-cache/storage/filesystem.d.ts.map +1 -0
  140. package/esm/bundler/file-cache/storage/index.d.ts +11 -0
  141. package/esm/bundler/file-cache/storage/index.d.ts.map +1 -0
  142. package/esm/bundler/file-cache/storage/interface.d.ts +152 -0
  143. package/esm/bundler/file-cache/storage/interface.d.ts.map +1 -0
  144. package/esm/bundler/file-cache/storage/redis.d.ts +139 -0
  145. package/esm/bundler/file-cache/storage/redis.d.ts.map +1 -0
  146. package/esm/bundler/index.d.ts +43 -0
  147. package/esm/bundler/index.d.ts.map +1 -0
  148. package/esm/bundler/index.js +3640 -0
  149. package/esm/bundler/sandbox/enclave-adapter.d.ts +121 -0
  150. package/esm/bundler/sandbox/enclave-adapter.d.ts.map +1 -0
  151. package/esm/bundler/sandbox/executor.d.ts +14 -0
  152. package/esm/bundler/sandbox/executor.d.ts.map +1 -0
  153. package/esm/bundler/sandbox/policy.d.ts +62 -0
  154. package/esm/bundler/sandbox/policy.d.ts.map +1 -0
  155. package/esm/bundler/types.d.ts +702 -0
  156. package/esm/bundler/types.d.ts.map +1 -0
  157. package/esm/components/alert.d.ts +66 -0
  158. package/esm/components/alert.d.ts.map +1 -0
  159. package/esm/components/alert.schema.d.ts +98 -0
  160. package/esm/components/alert.schema.d.ts.map +1 -0
  161. package/esm/components/avatar.d.ts +77 -0
  162. package/esm/components/avatar.d.ts.map +1 -0
  163. package/esm/components/avatar.schema.d.ts +170 -0
  164. package/esm/components/avatar.schema.d.ts.map +1 -0
  165. package/esm/components/badge.d.ts +64 -0
  166. package/esm/components/badge.d.ts.map +1 -0
  167. package/esm/components/badge.schema.d.ts +91 -0
  168. package/esm/components/badge.schema.d.ts.map +1 -0
  169. package/esm/components/button.d.ts +100 -0
  170. package/esm/components/button.d.ts.map +1 -0
  171. package/esm/components/button.schema.d.ts +120 -0
  172. package/esm/components/button.schema.d.ts.map +1 -0
  173. package/esm/components/card.d.ts +53 -0
  174. package/esm/components/card.d.ts.map +1 -0
  175. package/esm/components/card.schema.d.ts +93 -0
  176. package/esm/components/card.schema.d.ts.map +1 -0
  177. package/esm/components/form.d.ts +212 -0
  178. package/esm/components/form.d.ts.map +1 -0
  179. package/esm/components/form.schema.d.ts +365 -0
  180. package/esm/components/form.schema.d.ts.map +1 -0
  181. package/esm/components/index.d.ts +29 -0
  182. package/esm/components/index.d.ts.map +1 -0
  183. package/esm/components/index.js +2396 -0
  184. package/esm/components/list.d.ts +121 -0
  185. package/esm/components/list.d.ts.map +1 -0
  186. package/esm/components/list.schema.d.ts +129 -0
  187. package/esm/components/list.schema.d.ts.map +1 -0
  188. package/esm/components/modal.d.ts +100 -0
  189. package/esm/components/modal.d.ts.map +1 -0
  190. package/esm/components/modal.schema.d.ts +151 -0
  191. package/esm/components/modal.schema.d.ts.map +1 -0
  192. package/esm/components/table.d.ts +91 -0
  193. package/esm/components/table.d.ts.map +1 -0
  194. package/esm/components/table.schema.d.ts +123 -0
  195. package/esm/components/table.schema.d.ts.map +1 -0
  196. package/esm/index.d.ts +40 -0
  197. package/esm/index.d.ts.map +1 -0
  198. package/esm/index.js +8326 -0
  199. package/esm/layouts/base.d.ts +86 -0
  200. package/esm/layouts/base.d.ts.map +1 -0
  201. package/esm/layouts/index.d.ts +8 -0
  202. package/esm/layouts/index.d.ts.map +1 -0
  203. package/esm/layouts/index.js +409 -0
  204. package/esm/layouts/presets.d.ts +134 -0
  205. package/esm/layouts/presets.d.ts.map +1 -0
  206. package/esm/package.json +72 -0
  207. package/esm/pages/consent.d.ts +117 -0
  208. package/esm/pages/consent.d.ts.map +1 -0
  209. package/esm/pages/error.d.ts +101 -0
  210. package/esm/pages/error.d.ts.map +1 -0
  211. package/esm/pages/index.d.ts +9 -0
  212. package/esm/pages/index.d.ts.map +1 -0
  213. package/esm/pages/index.js +1036 -0
  214. package/esm/react/Alert.d.ts +101 -0
  215. package/esm/react/Alert.d.ts.map +1 -0
  216. package/esm/react/Badge.d.ts +100 -0
  217. package/esm/react/Badge.d.ts.map +1 -0
  218. package/esm/react/Button.d.ts +108 -0
  219. package/esm/react/Button.d.ts.map +1 -0
  220. package/esm/react/Card.d.ts +103 -0
  221. package/esm/react/Card.d.ts.map +1 -0
  222. package/esm/react/hooks/context.d.ts +179 -0
  223. package/esm/react/hooks/context.d.ts.map +1 -0
  224. package/esm/react/hooks/index.d.ts +42 -0
  225. package/esm/react/hooks/index.d.ts.map +1 -0
  226. package/esm/react/hooks/tools.d.ts +284 -0
  227. package/esm/react/hooks/tools.d.ts.map +1 -0
  228. package/esm/react/index.d.ts +80 -0
  229. package/esm/react/index.d.ts.map +1 -0
  230. package/esm/react/index.js +3124 -0
  231. package/esm/react/types.d.ts +105 -0
  232. package/esm/react/types.d.ts.map +1 -0
  233. package/esm/react/utils.d.ts +43 -0
  234. package/esm/react/utils.d.ts.map +1 -0
  235. package/esm/render/index.d.ts +8 -0
  236. package/esm/render/index.d.ts.map +1 -0
  237. package/esm/render/index.js +45 -0
  238. package/esm/render/prerender.d.ts +57 -0
  239. package/esm/render/prerender.d.ts.map +1 -0
  240. package/esm/renderers/index.d.ts +21 -0
  241. package/esm/renderers/index.d.ts.map +1 -0
  242. package/esm/renderers/index.js +381 -0
  243. package/esm/renderers/react.adapter.d.ts +70 -0
  244. package/esm/renderers/react.adapter.d.ts.map +1 -0
  245. package/esm/renderers/react.renderer.d.ts +96 -0
  246. package/esm/renderers/react.renderer.d.ts.map +1 -0
  247. package/esm/universal/UniversalApp.d.ts +108 -0
  248. package/esm/universal/UniversalApp.d.ts.map +1 -0
  249. package/esm/universal/cached-runtime.d.ts +115 -0
  250. package/esm/universal/cached-runtime.d.ts.map +1 -0
  251. package/esm/universal/context.d.ts +122 -0
  252. package/esm/universal/context.d.ts.map +1 -0
  253. package/esm/universal/index.d.ts +57 -0
  254. package/esm/universal/index.d.ts.map +1 -0
  255. package/esm/universal/index.js +1755 -0
  256. package/esm/universal/renderers/html.renderer.d.ts +37 -0
  257. package/esm/universal/renderers/html.renderer.d.ts.map +1 -0
  258. package/esm/universal/renderers/index.d.ts +112 -0
  259. package/esm/universal/renderers/index.d.ts.map +1 -0
  260. package/esm/universal/renderers/markdown.renderer.d.ts +33 -0
  261. package/esm/universal/renderers/markdown.renderer.d.ts.map +1 -0
  262. package/esm/universal/renderers/mdx.renderer.d.ts +38 -0
  263. package/esm/universal/renderers/mdx.renderer.d.ts.map +1 -0
  264. package/esm/universal/renderers/react.renderer.d.ts +46 -0
  265. package/esm/universal/renderers/react.renderer.d.ts.map +1 -0
  266. package/esm/universal/runtime-builder.d.ts +33 -0
  267. package/esm/universal/runtime-builder.d.ts.map +1 -0
  268. package/esm/universal/store.d.ts +135 -0
  269. package/esm/universal/store.d.ts.map +1 -0
  270. package/esm/universal/types.d.ts +199 -0
  271. package/esm/universal/types.d.ts.map +1 -0
  272. package/esm/web-components/core/attribute-parser.d.ts +82 -0
  273. package/esm/web-components/core/attribute-parser.d.ts.map +1 -0
  274. package/esm/web-components/core/base-element.d.ts +197 -0
  275. package/esm/web-components/core/base-element.d.ts.map +1 -0
  276. package/esm/web-components/core/index.d.ts +9 -0
  277. package/esm/web-components/core/index.d.ts.map +1 -0
  278. package/esm/web-components/elements/fmcp-alert.d.ts +46 -0
  279. package/esm/web-components/elements/fmcp-alert.d.ts.map +1 -0
  280. package/esm/web-components/elements/fmcp-badge.d.ts +47 -0
  281. package/esm/web-components/elements/fmcp-badge.d.ts.map +1 -0
  282. package/esm/web-components/elements/fmcp-button.d.ts +117 -0
  283. package/esm/web-components/elements/fmcp-button.d.ts.map +1 -0
  284. package/esm/web-components/elements/fmcp-card.d.ts +53 -0
  285. package/esm/web-components/elements/fmcp-card.d.ts.map +1 -0
  286. package/esm/web-components/elements/fmcp-input.d.ts +96 -0
  287. package/esm/web-components/elements/fmcp-input.d.ts.map +1 -0
  288. package/esm/web-components/elements/fmcp-select.d.ts +100 -0
  289. package/esm/web-components/elements/fmcp-select.d.ts.map +1 -0
  290. package/esm/web-components/elements/index.d.ts +13 -0
  291. package/esm/web-components/elements/index.d.ts.map +1 -0
  292. package/esm/web-components/index.d.ts +50 -0
  293. package/esm/web-components/index.d.ts.map +1 -0
  294. package/esm/web-components/index.js +1993 -0
  295. package/esm/web-components/register.d.ts +57 -0
  296. package/esm/web-components/register.d.ts.map +1 -0
  297. package/esm/web-components/types.d.ts +122 -0
  298. package/esm/web-components/types.d.ts.map +1 -0
  299. package/esm/widgets/index.d.ts +8 -0
  300. package/esm/widgets/index.d.ts.map +1 -0
  301. package/esm/widgets/index.js +883 -0
  302. package/esm/widgets/progress.d.ts +133 -0
  303. package/esm/widgets/progress.d.ts.map +1 -0
  304. package/esm/widgets/resource.d.ts +163 -0
  305. package/esm/widgets/resource.d.ts.map +1 -0
  306. package/index.d.ts +40 -0
  307. package/index.d.ts.map +1 -0
  308. package/index.js +8526 -0
  309. package/layouts/base.d.ts +86 -0
  310. package/layouts/base.d.ts.map +1 -0
  311. package/layouts/index.d.ts +8 -0
  312. package/layouts/index.d.ts.map +1 -0
  313. package/layouts/index.js +437 -0
  314. package/layouts/presets.d.ts +134 -0
  315. package/layouts/presets.d.ts.map +1 -0
  316. package/package.json +33 -110
  317. package/pages/consent.d.ts +117 -0
  318. package/pages/consent.d.ts.map +1 -0
  319. package/pages/error.d.ts +101 -0
  320. package/pages/error.d.ts.map +1 -0
  321. package/pages/index.d.ts +9 -0
  322. package/pages/index.d.ts.map +1 -0
  323. package/pages/index.js +1065 -0
  324. package/react/Alert.d.ts +101 -0
  325. package/react/Alert.d.ts.map +1 -0
  326. package/react/Badge.d.ts +100 -0
  327. package/react/Badge.d.ts.map +1 -0
  328. package/react/Button.d.ts +108 -0
  329. package/react/Button.d.ts.map +1 -0
  330. package/react/Card.d.ts +103 -0
  331. package/react/Card.d.ts.map +1 -0
  332. package/react/hooks/context.d.ts +179 -0
  333. package/react/hooks/context.d.ts.map +1 -0
  334. package/react/hooks/index.d.ts +42 -0
  335. package/react/hooks/index.d.ts.map +1 -0
  336. package/react/hooks/tools.d.ts +284 -0
  337. package/react/hooks/tools.d.ts.map +1 -0
  338. package/react/index.d.ts +80 -0
  339. package/react/index.d.ts.map +1 -0
  340. package/react/index.js +3160 -0
  341. package/react/types.d.ts +105 -0
  342. package/react/types.d.ts.map +1 -0
  343. package/react/utils.d.ts +43 -0
  344. package/react/utils.d.ts.map +1 -0
  345. package/render/index.d.ts +8 -0
  346. package/render/index.d.ts.map +1 -0
  347. package/render/index.js +77 -0
  348. package/render/prerender.d.ts +57 -0
  349. package/render/prerender.d.ts.map +1 -0
  350. package/renderers/index.d.ts +21 -0
  351. package/renderers/index.d.ts.map +1 -0
  352. package/renderers/index.js +416 -0
  353. package/renderers/react.adapter.d.ts +70 -0
  354. package/renderers/react.adapter.d.ts.map +1 -0
  355. package/renderers/react.renderer.d.ts +96 -0
  356. package/renderers/react.renderer.d.ts.map +1 -0
  357. package/universal/UniversalApp.d.ts +108 -0
  358. package/universal/UniversalApp.d.ts.map +1 -0
  359. package/universal/cached-runtime.d.ts +115 -0
  360. package/universal/cached-runtime.d.ts.map +1 -0
  361. package/universal/context.d.ts +122 -0
  362. package/universal/context.d.ts.map +1 -0
  363. package/universal/index.d.ts +57 -0
  364. package/universal/index.d.ts.map +1 -0
  365. package/universal/index.js +1841 -0
  366. package/universal/renderers/html.renderer.d.ts +37 -0
  367. package/universal/renderers/html.renderer.d.ts.map +1 -0
  368. package/universal/renderers/index.d.ts +112 -0
  369. package/universal/renderers/index.d.ts.map +1 -0
  370. package/universal/renderers/markdown.renderer.d.ts +33 -0
  371. package/universal/renderers/markdown.renderer.d.ts.map +1 -0
  372. package/universal/renderers/mdx.renderer.d.ts +38 -0
  373. package/universal/renderers/mdx.renderer.d.ts.map +1 -0
  374. package/universal/renderers/react.renderer.d.ts +46 -0
  375. package/universal/renderers/react.renderer.d.ts.map +1 -0
  376. package/universal/runtime-builder.d.ts +33 -0
  377. package/universal/runtime-builder.d.ts.map +1 -0
  378. package/universal/store.d.ts +135 -0
  379. package/universal/store.d.ts.map +1 -0
  380. package/universal/types.d.ts +199 -0
  381. package/universal/types.d.ts.map +1 -0
  382. package/web-components/core/attribute-parser.d.ts +82 -0
  383. package/web-components/core/attribute-parser.d.ts.map +1 -0
  384. package/web-components/core/base-element.d.ts +197 -0
  385. package/web-components/core/base-element.d.ts.map +1 -0
  386. package/web-components/core/index.d.ts +9 -0
  387. package/web-components/core/index.d.ts.map +1 -0
  388. package/web-components/elements/fmcp-alert.d.ts +46 -0
  389. package/web-components/elements/fmcp-alert.d.ts.map +1 -0
  390. package/web-components/elements/fmcp-badge.d.ts +47 -0
  391. package/web-components/elements/fmcp-badge.d.ts.map +1 -0
  392. package/web-components/elements/fmcp-button.d.ts +117 -0
  393. package/web-components/elements/fmcp-button.d.ts.map +1 -0
  394. package/web-components/elements/fmcp-card.d.ts +53 -0
  395. package/web-components/elements/fmcp-card.d.ts.map +1 -0
  396. package/web-components/elements/fmcp-input.d.ts +96 -0
  397. package/web-components/elements/fmcp-input.d.ts.map +1 -0
  398. package/web-components/elements/fmcp-select.d.ts +100 -0
  399. package/web-components/elements/fmcp-select.d.ts.map +1 -0
  400. package/web-components/elements/index.d.ts +13 -0
  401. package/web-components/elements/index.d.ts.map +1 -0
  402. package/web-components/index.d.ts +50 -0
  403. package/web-components/index.d.ts.map +1 -0
  404. package/web-components/index.js +2028 -0
  405. package/web-components/register.d.ts +57 -0
  406. package/web-components/register.d.ts.map +1 -0
  407. package/web-components/types.d.ts +122 -0
  408. package/web-components/types.d.ts.map +1 -0
  409. package/widgets/index.d.ts +8 -0
  410. package/widgets/index.d.ts.map +1 -0
  411. package/widgets/index.js +910 -0
  412. package/widgets/progress.d.ts +133 -0
  413. package/widgets/progress.d.ts.map +1 -0
  414. package/widgets/resource.d.ts +163 -0
  415. package/widgets/resource.d.ts.map +1 -0
  416. package/src/adapters/index.d.ts +0 -10
  417. package/src/adapters/index.js +0 -18
  418. package/src/adapters/index.js.map +0 -1
  419. package/src/adapters/platform-meta.d.ts +0 -165
  420. package/src/adapters/platform-meta.js +0 -310
  421. package/src/adapters/platform-meta.js.map +0 -1
  422. package/src/base-template/bridge.d.ts +0 -89
  423. package/src/base-template/bridge.js +0 -452
  424. package/src/base-template/bridge.js.map +0 -1
  425. package/src/base-template/default-base-template.d.ts +0 -91
  426. package/src/base-template/default-base-template.js +0 -435
  427. package/src/base-template/default-base-template.js.map +0 -1
  428. package/src/base-template/index.d.ts +0 -14
  429. package/src/base-template/index.js +0 -30
  430. package/src/base-template/index.js.map +0 -1
  431. package/src/base-template/polyfills.d.ts +0 -30
  432. package/src/base-template/polyfills.js +0 -190
  433. package/src/base-template/polyfills.js.map +0 -1
  434. package/src/base-template/theme-styles.d.ts +0 -73
  435. package/src/base-template/theme-styles.js +0 -95
  436. package/src/base-template/theme-styles.js.map +0 -1
  437. package/src/bridge/adapters/base-adapter.d.ts +0 -103
  438. package/src/bridge/adapters/base-adapter.js +0 -314
  439. package/src/bridge/adapters/base-adapter.js.map +0 -1
  440. package/src/bridge/adapters/claude.adapter.d.ts +0 -66
  441. package/src/bridge/adapters/claude.adapter.js +0 -145
  442. package/src/bridge/adapters/claude.adapter.js.map +0 -1
  443. package/src/bridge/adapters/ext-apps.adapter.d.ts +0 -142
  444. package/src/bridge/adapters/ext-apps.adapter.js +0 -416
  445. package/src/bridge/adapters/ext-apps.adapter.js.map +0 -1
  446. package/src/bridge/adapters/gemini.adapter.d.ts +0 -63
  447. package/src/bridge/adapters/gemini.adapter.js +0 -160
  448. package/src/bridge/adapters/gemini.adapter.js.map +0 -1
  449. package/src/bridge/adapters/generic.adapter.d.ts +0 -55
  450. package/src/bridge/adapters/generic.adapter.js +0 -108
  451. package/src/bridge/adapters/generic.adapter.js.map +0 -1
  452. package/src/bridge/adapters/index.d.ts +0 -25
  453. package/src/bridge/adapters/index.js +0 -65
  454. package/src/bridge/adapters/index.js.map +0 -1
  455. package/src/bridge/adapters/openai.adapter.d.ts +0 -64
  456. package/src/bridge/adapters/openai.adapter.js +0 -194
  457. package/src/bridge/adapters/openai.adapter.js.map +0 -1
  458. package/src/bridge/core/adapter-registry.d.ts +0 -121
  459. package/src/bridge/core/adapter-registry.js +0 -271
  460. package/src/bridge/core/adapter-registry.js.map +0 -1
  461. package/src/bridge/core/bridge-factory.d.ts +0 -198
  462. package/src/bridge/core/bridge-factory.js +0 -428
  463. package/src/bridge/core/bridge-factory.js.map +0 -1
  464. package/src/bridge/core/index.d.ts +0 -9
  465. package/src/bridge/core/index.js +0 -22
  466. package/src/bridge/core/index.js.map +0 -1
  467. package/src/bridge/index.d.ts +0 -61
  468. package/src/bridge/index.js +0 -94
  469. package/src/bridge/index.js.map +0 -1
  470. package/src/bridge/runtime/iife-generator.d.ts +0 -61
  471. package/src/bridge/runtime/iife-generator.js +0 -940
  472. package/src/bridge/runtime/iife-generator.js.map +0 -1
  473. package/src/bridge/runtime/index.d.ts +0 -8
  474. package/src/bridge/runtime/index.js +0 -16
  475. package/src/bridge/runtime/index.js.map +0 -1
  476. package/src/bridge/types.d.ts +0 -385
  477. package/src/bridge/types.js +0 -11
  478. package/src/bridge/types.js.map +0 -1
  479. package/src/build/cdn-resources.d.ts +0 -140
  480. package/src/build/cdn-resources.js +0 -314
  481. package/src/build/cdn-resources.js.map +0 -1
  482. package/src/build/index.d.ts +0 -294
  483. package/src/build/index.js +0 -325
  484. package/src/build/index.js.map +0 -1
  485. package/src/build/widget-manifest.d.ts +0 -212
  486. package/src/build/widget-manifest.js +0 -652
  487. package/src/build/widget-manifest.js.map +0 -1
  488. package/src/bundler/bundler.d.ts +0 -110
  489. package/src/bundler/bundler.js +0 -432
  490. package/src/bundler/bundler.js.map +0 -1
  491. package/src/bundler/cache.d.ts +0 -172
  492. package/src/bundler/cache.js +0 -250
  493. package/src/bundler/cache.js.map +0 -1
  494. package/src/bundler/index.d.ts +0 -41
  495. package/src/bundler/index.js +0 -73
  496. package/src/bundler/index.js.map +0 -1
  497. package/src/bundler/sandbox/enclave-adapter.d.ts +0 -120
  498. package/src/bundler/sandbox/enclave-adapter.js +0 -339
  499. package/src/bundler/sandbox/enclave-adapter.js.map +0 -1
  500. package/src/bundler/sandbox/executor.d.ts +0 -13
  501. package/src/bundler/sandbox/executor.js +0 -22
  502. package/src/bundler/sandbox/executor.js.map +0 -1
  503. package/src/bundler/sandbox/policy.d.ts +0 -61
  504. package/src/bundler/sandbox/policy.js +0 -238
  505. package/src/bundler/sandbox/policy.js.map +0 -1
  506. package/src/bundler/types.d.ts +0 -347
  507. package/src/bundler/types.js +0 -132
  508. package/src/bundler/types.js.map +0 -1
  509. package/src/components/alert.d.ts +0 -71
  510. package/src/components/alert.js +0 -189
  511. package/src/components/alert.js.map +0 -1
  512. package/src/components/alert.schema.d.ts +0 -114
  513. package/src/components/alert.schema.js +0 -105
  514. package/src/components/alert.schema.js.map +0 -1
  515. package/src/components/avatar.d.ts +0 -76
  516. package/src/components/avatar.js +0 -176
  517. package/src/components/avatar.js.map +0 -1
  518. package/src/components/avatar.schema.d.ts +0 -169
  519. package/src/components/avatar.schema.js +0 -103
  520. package/src/components/avatar.schema.js.map +0 -1
  521. package/src/components/badge.d.ts +0 -70
  522. package/src/components/badge.js +0 -149
  523. package/src/components/badge.js.map +0 -1
  524. package/src/components/badge.schema.d.ts +0 -109
  525. package/src/components/badge.schema.js +0 -96
  526. package/src/components/badge.schema.js.map +0 -1
  527. package/src/components/button.d.ts +0 -111
  528. package/src/components/button.js +0 -336
  529. package/src/components/button.js.map +0 -1
  530. package/src/components/button.schema.d.ts +0 -148
  531. package/src/components/button.schema.js +0 -121
  532. package/src/components/button.schema.js.map +0 -1
  533. package/src/components/card.d.ts +0 -60
  534. package/src/components/card.js +0 -117
  535. package/src/components/card.js.map +0 -1
  536. package/src/components/card.schema.d.ts +0 -113
  537. package/src/components/card.schema.js +0 -98
  538. package/src/components/card.schema.js.map +0 -1
  539. package/src/components/form.d.ts +0 -239
  540. package/src/components/form.js +0 -420
  541. package/src/components/form.js.map +0 -1
  542. package/src/components/form.schema.d.ts +0 -441
  543. package/src/components/form.schema.js +0 -406
  544. package/src/components/form.schema.js.map +0 -1
  545. package/src/components/index.d.ts +0 -29
  546. package/src/components/index.js +0 -98
  547. package/src/components/index.js.map +0 -1
  548. package/src/components/list.d.ts +0 -127
  549. package/src/components/list.js +0 -279
  550. package/src/components/list.js.map +0 -1
  551. package/src/components/list.schema.d.ts +0 -134
  552. package/src/components/list.schema.js +0 -168
  553. package/src/components/list.schema.js.map +0 -1
  554. package/src/components/modal.d.ts +0 -111
  555. package/src/components/modal.js +0 -260
  556. package/src/components/modal.js.map +0 -1
  557. package/src/components/modal.schema.d.ts +0 -186
  558. package/src/components/modal.schema.js +0 -167
  559. package/src/components/modal.schema.js.map +0 -1
  560. package/src/components/table.d.ts +0 -105
  561. package/src/components/table.js +0 -283
  562. package/src/components/table.js.map +0 -1
  563. package/src/components/table.schema.d.ts +0 -159
  564. package/src/components/table.schema.js +0 -173
  565. package/src/components/table.schema.js.map +0 -1
  566. package/src/handlebars/helpers.d.ts +0 -348
  567. package/src/handlebars/helpers.js +0 -605
  568. package/src/handlebars/helpers.js.map +0 -1
  569. package/src/handlebars/index.d.ts +0 -193
  570. package/src/handlebars/index.js +0 -350
  571. package/src/handlebars/index.js.map +0 -1
  572. package/src/index.d.ts +0 -50
  573. package/src/index.js +0 -192
  574. package/src/index.js.map +0 -1
  575. package/src/layouts/base.d.ts +0 -88
  576. package/src/layouts/base.js +0 -227
  577. package/src/layouts/base.js.map +0 -1
  578. package/src/layouts/index.d.ts +0 -7
  579. package/src/layouts/index.js +0 -25
  580. package/src/layouts/index.js.map +0 -1
  581. package/src/layouts/presets.d.ts +0 -133
  582. package/src/layouts/presets.js +0 -277
  583. package/src/layouts/presets.js.map +0 -1
  584. package/src/pages/consent.d.ts +0 -116
  585. package/src/pages/consent.js +0 -218
  586. package/src/pages/consent.js.map +0 -1
  587. package/src/pages/error.d.ts +0 -100
  588. package/src/pages/error.js +0 -263
  589. package/src/pages/error.js.map +0 -1
  590. package/src/pages/index.d.ts +0 -8
  591. package/src/pages/index.js +0 -27
  592. package/src/pages/index.js.map +0 -1
  593. package/src/react/Alert.d.ts +0 -101
  594. package/src/react/Alert.js +0 -51
  595. package/src/react/Alert.js.map +0 -1
  596. package/src/react/Badge.d.ts +0 -100
  597. package/src/react/Badge.js +0 -55
  598. package/src/react/Badge.js.map +0 -1
  599. package/src/react/Button.d.ts +0 -108
  600. package/src/react/Button.js +0 -52
  601. package/src/react/Button.js.map +0 -1
  602. package/src/react/Card.d.ts +0 -103
  603. package/src/react/Card.js +0 -55
  604. package/src/react/Card.js.map +0 -1
  605. package/src/react/hooks/context.d.ts +0 -178
  606. package/src/react/hooks/context.js +0 -287
  607. package/src/react/hooks/context.js.map +0 -1
  608. package/src/react/hooks/index.d.ts +0 -41
  609. package/src/react/hooks/index.js +0 -61
  610. package/src/react/hooks/index.js.map +0 -1
  611. package/src/react/hooks/tools.d.ts +0 -283
  612. package/src/react/hooks/tools.js +0 -465
  613. package/src/react/hooks/tools.js.map +0 -1
  614. package/src/react/index.d.ts +0 -80
  615. package/src/react/index.js +0 -113
  616. package/src/react/index.js.map +0 -1
  617. package/src/react/types.d.ts +0 -105
  618. package/src/react/types.js +0 -12
  619. package/src/react/types.js.map +0 -1
  620. package/src/react/utils.d.ts +0 -42
  621. package/src/react/utils.js +0 -99
  622. package/src/react/utils.js.map +0 -1
  623. package/src/registry/index.d.ts +0 -45
  624. package/src/registry/index.js +0 -67
  625. package/src/registry/index.js.map +0 -1
  626. package/src/registry/render-template.d.ts +0 -86
  627. package/src/registry/render-template.js +0 -239
  628. package/src/registry/render-template.js.map +0 -1
  629. package/src/registry/tool-ui.registry.d.ts +0 -260
  630. package/src/registry/tool-ui.registry.js +0 -438
  631. package/src/registry/tool-ui.registry.js.map +0 -1
  632. package/src/registry/uri-utils.d.ts +0 -55
  633. package/src/registry/uri-utils.js +0 -97
  634. package/src/registry/uri-utils.js.map +0 -1
  635. package/src/render/index.d.ts +0 -7
  636. package/src/render/index.js +0 -14
  637. package/src/render/index.js.map +0 -1
  638. package/src/render/prerender.d.ts +0 -56
  639. package/src/render/prerender.js +0 -98
  640. package/src/render/prerender.js.map +0 -1
  641. package/src/renderers/cache.d.ts +0 -144
  642. package/src/renderers/cache.js +0 -240
  643. package/src/renderers/cache.js.map +0 -1
  644. package/src/renderers/html.renderer.d.ts +0 -122
  645. package/src/renderers/html.renderer.js +0 -204
  646. package/src/renderers/html.renderer.js.map +0 -1
  647. package/src/renderers/index.d.ts +0 -35
  648. package/src/renderers/index.js +0 -70
  649. package/src/renderers/index.js.map +0 -1
  650. package/src/renderers/mdx.renderer.d.ts +0 -119
  651. package/src/renderers/mdx.renderer.js +0 -305
  652. package/src/renderers/mdx.renderer.js.map +0 -1
  653. package/src/renderers/react.renderer.d.ts +0 -95
  654. package/src/renderers/react.renderer.js +0 -260
  655. package/src/renderers/react.renderer.js.map +0 -1
  656. package/src/renderers/registry.d.ts +0 -133
  657. package/src/renderers/registry.js +0 -232
  658. package/src/renderers/registry.js.map +0 -1
  659. package/src/renderers/types.d.ts +0 -341
  660. package/src/renderers/types.js +0 -9
  661. package/src/renderers/types.js.map +0 -1
  662. package/src/renderers/utils/detect.d.ts +0 -106
  663. package/src/renderers/utils/detect.js +0 -267
  664. package/src/renderers/utils/detect.js.map +0 -1
  665. package/src/renderers/utils/hash.d.ts +0 -39
  666. package/src/renderers/utils/hash.js +0 -75
  667. package/src/renderers/utils/hash.js.map +0 -1
  668. package/src/renderers/utils/index.d.ts +0 -8
  669. package/src/renderers/utils/index.js +0 -28
  670. package/src/renderers/utils/index.js.map +0 -1
  671. package/src/renderers/utils/transpiler.d.ts +0 -88
  672. package/src/renderers/utils/transpiler.js +0 -215
  673. package/src/renderers/utils/transpiler.js.map +0 -1
  674. package/src/runtime/adapters/html.adapter.d.ts +0 -58
  675. package/src/runtime/adapters/html.adapter.js +0 -131
  676. package/src/runtime/adapters/html.adapter.js.map +0 -1
  677. package/src/runtime/adapters/index.d.ts +0 -25
  678. package/src/runtime/adapters/index.js +0 -54
  679. package/src/runtime/adapters/index.js.map +0 -1
  680. package/src/runtime/adapters/mdx.adapter.d.ts +0 -72
  681. package/src/runtime/adapters/mdx.adapter.js +0 -241
  682. package/src/runtime/adapters/mdx.adapter.js.map +0 -1
  683. package/src/runtime/adapters/react.adapter.d.ts +0 -69
  684. package/src/runtime/adapters/react.adapter.js +0 -245
  685. package/src/runtime/adapters/react.adapter.js.map +0 -1
  686. package/src/runtime/adapters/types.d.ts +0 -94
  687. package/src/runtime/adapters/types.js +0 -11
  688. package/src/runtime/adapters/types.js.map +0 -1
  689. package/src/runtime/csp.d.ts +0 -37
  690. package/src/runtime/csp.js +0 -140
  691. package/src/runtime/csp.js.map +0 -1
  692. package/src/runtime/index.d.ts +0 -16
  693. package/src/runtime/index.js +0 -72
  694. package/src/runtime/index.js.map +0 -1
  695. package/src/runtime/mcp-bridge.d.ts +0 -100
  696. package/src/runtime/mcp-bridge.js +0 -581
  697. package/src/runtime/mcp-bridge.js.map +0 -1
  698. package/src/runtime/renderer-runtime.d.ts +0 -132
  699. package/src/runtime/renderer-runtime.js +0 -389
  700. package/src/runtime/renderer-runtime.js.map +0 -1
  701. package/src/runtime/sanitizer.d.ts +0 -171
  702. package/src/runtime/sanitizer.js +0 -318
  703. package/src/runtime/sanitizer.js.map +0 -1
  704. package/src/runtime/types.d.ts +0 -414
  705. package/src/runtime/types.js +0 -12
  706. package/src/runtime/types.js.map +0 -1
  707. package/src/runtime/wrapper.d.ts +0 -375
  708. package/src/runtime/wrapper.js +0 -1793
  709. package/src/runtime/wrapper.js.map +0 -1
  710. package/src/styles/index.d.ts +0 -7
  711. package/src/styles/index.js +0 -11
  712. package/src/styles/index.js.map +0 -1
  713. package/src/styles/variants.d.ts +0 -50
  714. package/src/styles/variants.js +0 -175
  715. package/src/styles/variants.js.map +0 -1
  716. package/src/theme/cdn.d.ts +0 -194
  717. package/src/theme/cdn.js +0 -375
  718. package/src/theme/cdn.js.map +0 -1
  719. package/src/theme/index.d.ts +0 -17
  720. package/src/theme/index.js +0 -57
  721. package/src/theme/index.js.map +0 -1
  722. package/src/theme/platforms.d.ts +0 -106
  723. package/src/theme/platforms.js +0 -161
  724. package/src/theme/platforms.js.map +0 -1
  725. package/src/theme/presets/github-openai.d.ts +0 -49
  726. package/src/theme/presets/github-openai.js +0 -189
  727. package/src/theme/presets/github-openai.js.map +0 -1
  728. package/src/theme/presets/index.d.ts +0 -10
  729. package/src/theme/presets/index.js +0 -17
  730. package/src/theme/presets/index.js.map +0 -1
  731. package/src/theme/theme.d.ts +0 -395
  732. package/src/theme/theme.js +0 -332
  733. package/src/theme/theme.js.map +0 -1
  734. package/src/tool-template/builder.d.ts +0 -212
  735. package/src/tool-template/builder.js +0 -397
  736. package/src/tool-template/builder.js.map +0 -1
  737. package/src/tool-template/index.d.ts +0 -15
  738. package/src/tool-template/index.js +0 -38
  739. package/src/tool-template/index.js.map +0 -1
  740. package/src/types/index.d.ts +0 -13
  741. package/src/types/index.js +0 -26
  742. package/src/types/index.js.map +0 -1
  743. package/src/types/ui-config.d.ts +0 -357
  744. package/src/types/ui-config.js +0 -12
  745. package/src/types/ui-config.js.map +0 -1
  746. package/src/types/ui-runtime.d.ts +0 -965
  747. package/src/types/ui-runtime.js +0 -117
  748. package/src/types/ui-runtime.js.map +0 -1
  749. package/src/validation/error-box.d.ts +0 -55
  750. package/src/validation/error-box.js +0 -75
  751. package/src/validation/error-box.js.map +0 -1
  752. package/src/validation/index.d.ts +0 -12
  753. package/src/validation/index.js +0 -21
  754. package/src/validation/index.js.map +0 -1
  755. package/src/validation/wrapper.d.ts +0 -96
  756. package/src/validation/wrapper.js +0 -117
  757. package/src/validation/wrapper.js.map +0 -1
  758. package/src/web-components/core/attribute-parser.d.ts +0 -85
  759. package/src/web-components/core/attribute-parser.js +0 -189
  760. package/src/web-components/core/attribute-parser.js.map +0 -1
  761. package/src/web-components/core/base-element.d.ts +0 -197
  762. package/src/web-components/core/base-element.js +0 -289
  763. package/src/web-components/core/base-element.js.map +0 -1
  764. package/src/web-components/core/index.d.ts +0 -8
  765. package/src/web-components/core/index.js +0 -18
  766. package/src/web-components/core/index.js.map +0 -1
  767. package/src/web-components/elements/fmcp-alert.d.ts +0 -45
  768. package/src/web-components/elements/fmcp-alert.js +0 -93
  769. package/src/web-components/elements/fmcp-alert.js.map +0 -1
  770. package/src/web-components/elements/fmcp-badge.d.ts +0 -46
  771. package/src/web-components/elements/fmcp-badge.js +0 -99
  772. package/src/web-components/elements/fmcp-badge.js.map +0 -1
  773. package/src/web-components/elements/fmcp-button.d.ts +0 -124
  774. package/src/web-components/elements/fmcp-button.js +0 -233
  775. package/src/web-components/elements/fmcp-button.js.map +0 -1
  776. package/src/web-components/elements/fmcp-card.d.ts +0 -52
  777. package/src/web-components/elements/fmcp-card.js +0 -115
  778. package/src/web-components/elements/fmcp-card.js.map +0 -1
  779. package/src/web-components/elements/fmcp-input.d.ts +0 -95
  780. package/src/web-components/elements/fmcp-input.js +0 -248
  781. package/src/web-components/elements/fmcp-input.js.map +0 -1
  782. package/src/web-components/elements/fmcp-select.d.ts +0 -99
  783. package/src/web-components/elements/fmcp-select.js +0 -243
  784. package/src/web-components/elements/fmcp-select.js.map +0 -1
  785. package/src/web-components/elements/index.d.ts +0 -12
  786. package/src/web-components/elements/index.js +0 -34
  787. package/src/web-components/elements/index.js.map +0 -1
  788. package/src/web-components/index.d.ts +0 -49
  789. package/src/web-components/index.js +0 -75
  790. package/src/web-components/index.js.map +0 -1
  791. package/src/web-components/register.d.ts +0 -56
  792. package/src/web-components/register.js +0 -80
  793. package/src/web-components/register.js.map +0 -1
  794. package/src/web-components/types.d.ts +0 -121
  795. package/src/web-components/types.js +0 -25
  796. package/src/web-components/types.js.map +0 -1
  797. package/src/widgets/index.d.ts +0 -7
  798. package/src/widgets/index.js +0 -24
  799. package/src/widgets/index.js.map +0 -1
  800. package/src/widgets/progress.d.ts +0 -132
  801. package/src/widgets/progress.js +0 -303
  802. package/src/widgets/progress.js.map +0 -1
  803. package/src/widgets/resource.d.ts +0 -162
  804. package/src/widgets/resource.js +0 -340
  805. package/src/widgets/resource.js.map +0 -1
@@ -1,171 +0,0 @@
1
- /**
2
- * Input Sanitizer
3
- *
4
- * Provides PII detection and redaction for tool inputs before they are
5
- * exposed to widget code. This protects sensitive data from being
6
- * accidentally exposed in client-side widgets.
7
- *
8
- * Built-in patterns:
9
- * - Email addresses → [EMAIL]
10
- * - Phone numbers → [PHONE]
11
- * - Credit card numbers → [CARD]
12
- * - SSN / National IDs → [ID]
13
- * - IP addresses → [IP]
14
- *
15
- * @example
16
- * ```typescript
17
- * import { sanitizeInput, createSanitizer } from './sanitizer';
18
- *
19
- * // Auto-detect and redact PII
20
- * const sanitized = sanitizeInput({
21
- * user: 'john@example.com',
22
- * phone: '555-123-4567',
23
- * message: 'Hello world',
24
- * });
25
- * // Result: { user: '[EMAIL]', phone: '[PHONE]', message: 'Hello world' }
26
- *
27
- * // Redact specific fields
28
- * const sanitized2 = sanitizeInput(data, ['email', 'ssn']);
29
- *
30
- * // Custom sanitizer
31
- * const sanitized3 = sanitizeInput(data, (key, value) => {
32
- * if (key === 'secret') return '[REDACTED]';
33
- * return value;
34
- * });
35
- * ```
36
- */
37
- /**
38
- * Redaction placeholder tokens
39
- */
40
- export declare const REDACTION_TOKENS: {
41
- readonly EMAIL: "[EMAIL]";
42
- readonly PHONE: "[PHONE]";
43
- readonly CARD: "[CARD]";
44
- readonly ID: "[ID]";
45
- readonly IP: "[IP]";
46
- readonly REDACTED: "[REDACTED]";
47
- };
48
- /**
49
- * PII detection patterns
50
- */
51
- export declare const PII_PATTERNS: {
52
- email: RegExp;
53
- emailInText: RegExp;
54
- phone: RegExp;
55
- phoneInText: RegExp;
56
- creditCard: RegExp;
57
- creditCardInText: RegExp;
58
- ssn: RegExp;
59
- ssnInText: RegExp;
60
- ipv4: RegExp;
61
- ipv4InText: RegExp;
62
- };
63
- /**
64
- * Custom sanitizer function type
65
- */
66
- export type SanitizerFn = (key: string, value: unknown, path: string[]) => unknown;
67
- /**
68
- * Sanitizer options
69
- */
70
- export interface SanitizeOptions {
71
- /**
72
- * How to handle PII detection:
73
- * - true: Auto-detect and redact common PII patterns
74
- * - string[]: Only redact values in fields with these names
75
- * - SanitizerFn: Custom sanitizer function
76
- */
77
- mode: true | string[] | SanitizerFn;
78
- /**
79
- * Maximum depth for recursive sanitization
80
- * @default 10
81
- */
82
- maxDepth?: number;
83
- /**
84
- * Whether to sanitize PII patterns within string values
85
- * @default true
86
- */
87
- sanitizeInText?: boolean;
88
- }
89
- /**
90
- * Check if a string matches an email pattern
91
- */
92
- export declare function isEmail(value: string): boolean;
93
- /**
94
- * Check if a string matches a phone pattern
95
- */
96
- export declare function isPhone(value: string): boolean;
97
- /**
98
- * Check if a string matches a credit card pattern
99
- */
100
- export declare function isCreditCard(value: string): boolean;
101
- /**
102
- * Check if a string matches an SSN pattern
103
- */
104
- export declare function isSSN(value: string): boolean;
105
- /**
106
- * Check if a string matches an IPv4 pattern
107
- */
108
- export declare function isIPv4(value: string): boolean;
109
- /**
110
- * Detect PII type in a string value
111
- */
112
- export declare function detectPIIType(value: string): keyof typeof REDACTION_TOKENS | null;
113
- /**
114
- * Redact PII patterns from text
115
- */
116
- export declare function redactPIIFromText(text: string): string;
117
- /**
118
- * Sanitize input data by redacting PII.
119
- *
120
- * @param input - The input data to sanitize
121
- * @param mode - Sanitization mode:
122
- * - `true`: Auto-detect and redact common PII patterns
123
- * - `string[]`: Redact values in fields with these names
124
- * - `SanitizerFn`: Custom sanitizer function
125
- * @returns Sanitized copy of the input
126
- *
127
- * @example
128
- * ```typescript
129
- * // Auto-detect PII
130
- * sanitizeInput({ email: 'test@example.com' });
131
- * // { email: '[EMAIL]' }
132
- *
133
- * // Redact specific fields
134
- * sanitizeInput({ password: 'secret', name: 'John' }, ['password']);
135
- * // { password: '[REDACTED]', name: 'John' }
136
- *
137
- * // Custom sanitizer
138
- * sanitizeInput(data, (key, value) => key === 'token' ? '[TOKEN]' : value);
139
- * ```
140
- */
141
- export declare function sanitizeInput(input: Record<string, unknown>, mode?: true | string[] | SanitizerFn): Record<string, unknown>;
142
- /**
143
- * Create a reusable sanitizer function with preset options.
144
- *
145
- * @param mode - Sanitization mode
146
- * @returns Sanitizer function
147
- *
148
- * @example
149
- * ```typescript
150
- * const sanitizer = createSanitizer(['email', 'phone', 'ssn']);
151
- *
152
- * const clean1 = sanitizer(userData1);
153
- * const clean2 = sanitizer(userData2);
154
- * ```
155
- */
156
- export declare function createSanitizer(mode?: true | string[] | SanitizerFn): (input: Record<string, unknown>) => Record<string, unknown>;
157
- /**
158
- * Check if an object contains any detected PII.
159
- * Does not modify the input.
160
- *
161
- * @param input - The input to check
162
- * @param options - Optional configuration
163
- * @param options.maxDepth - Maximum recursion depth (default: 10)
164
- * @returns Object with boolean `hasPII` and `fields` array of field paths
165
- */
166
- export declare function detectPII(input: Record<string, unknown>, options?: {
167
- maxDepth?: number;
168
- }): {
169
- hasPII: boolean;
170
- fields: string[];
171
- };
@@ -1,318 +0,0 @@
1
- "use strict";
2
- /**
3
- * Input Sanitizer
4
- *
5
- * Provides PII detection and redaction for tool inputs before they are
6
- * exposed to widget code. This protects sensitive data from being
7
- * accidentally exposed in client-side widgets.
8
- *
9
- * Built-in patterns:
10
- * - Email addresses → [EMAIL]
11
- * - Phone numbers → [PHONE]
12
- * - Credit card numbers → [CARD]
13
- * - SSN / National IDs → [ID]
14
- * - IP addresses → [IP]
15
- *
16
- * @example
17
- * ```typescript
18
- * import { sanitizeInput, createSanitizer } from './sanitizer';
19
- *
20
- * // Auto-detect and redact PII
21
- * const sanitized = sanitizeInput({
22
- * user: 'john@example.com',
23
- * phone: '555-123-4567',
24
- * message: 'Hello world',
25
- * });
26
- * // Result: { user: '[EMAIL]', phone: '[PHONE]', message: 'Hello world' }
27
- *
28
- * // Redact specific fields
29
- * const sanitized2 = sanitizeInput(data, ['email', 'ssn']);
30
- *
31
- * // Custom sanitizer
32
- * const sanitized3 = sanitizeInput(data, (key, value) => {
33
- * if (key === 'secret') return '[REDACTED]';
34
- * return value;
35
- * });
36
- * ```
37
- */
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.PII_PATTERNS = exports.REDACTION_TOKENS = void 0;
40
- exports.isEmail = isEmail;
41
- exports.isPhone = isPhone;
42
- exports.isCreditCard = isCreditCard;
43
- exports.isSSN = isSSN;
44
- exports.isIPv4 = isIPv4;
45
- exports.detectPIIType = detectPIIType;
46
- exports.redactPIIFromText = redactPIIFromText;
47
- exports.sanitizeInput = sanitizeInput;
48
- exports.createSanitizer = createSanitizer;
49
- exports.detectPII = detectPII;
50
- /**
51
- * Redaction placeholder tokens
52
- */
53
- exports.REDACTION_TOKENS = {
54
- EMAIL: '[EMAIL]',
55
- PHONE: '[PHONE]',
56
- CARD: '[CARD]',
57
- ID: '[ID]',
58
- IP: '[IP]',
59
- REDACTED: '[REDACTED]',
60
- };
61
- /**
62
- * PII detection patterns
63
- */
64
- exports.PII_PATTERNS = {
65
- // Email: user@domain.tld
66
- email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/,
67
- // Email embedded in text
68
- emailInText: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
69
- // Phone: Various formats (US-centric but flexible)
70
- phone: /^[+]?[(]?[0-9]{1,4}[)]?[-\s.]?[0-9]{1,4}[-\s.]?[0-9]{1,9}$/,
71
- // Phone embedded in text
72
- phoneInText: /(?:\+?1[-.\s]?)?\(?[0-9]{3}\)?[-.\s]?[0-9]{3}[-.\s]?[0-9]{4}/g,
73
- // Credit card: 13-19 digits (with optional separators)
74
- creditCard: /^(?:[0-9]{4}[-\s]?){3,4}[0-9]{1,4}$/,
75
- // Credit card embedded in text
76
- creditCardInText: /\b(?:[0-9]{4}[-\s]?){3,4}[0-9]{1,4}\b/g,
77
- // SSN: XXX-XX-XXXX
78
- ssn: /^[0-9]{3}[-]?[0-9]{2}[-]?[0-9]{4}$/,
79
- // SSN embedded in text
80
- ssnInText: /\b[0-9]{3}[-]?[0-9]{2}[-]?[0-9]{4}\b/g,
81
- // IPv4 address
82
- ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
83
- // IPv4 embedded in text
84
- ipv4InText: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
85
- };
86
- /**
87
- * Check if a string matches an email pattern
88
- */
89
- function isEmail(value) {
90
- return exports.PII_PATTERNS.email.test(value);
91
- }
92
- /**
93
- * Check if a string matches a phone pattern
94
- */
95
- function isPhone(value) {
96
- return exports.PII_PATTERNS.phone.test(value);
97
- }
98
- /**
99
- * Check if a string matches a credit card pattern
100
- */
101
- function isCreditCard(value) {
102
- // Remove separators for digit count check
103
- const digits = value.replace(/[-\s]/g, '');
104
- return digits.length >= 13 && digits.length <= 19 && exports.PII_PATTERNS.creditCard.test(value);
105
- }
106
- /**
107
- * Check if a string matches an SSN pattern
108
- */
109
- function isSSN(value) {
110
- return exports.PII_PATTERNS.ssn.test(value);
111
- }
112
- /**
113
- * Check if a string matches an IPv4 pattern
114
- */
115
- function isIPv4(value) {
116
- return exports.PII_PATTERNS.ipv4.test(value);
117
- }
118
- /**
119
- * Detect PII type in a string value
120
- */
121
- function detectPIIType(value) {
122
- if (isEmail(value))
123
- return 'EMAIL';
124
- if (isCreditCard(value))
125
- return 'CARD';
126
- if (isSSN(value))
127
- return 'ID';
128
- if (isPhone(value))
129
- return 'PHONE';
130
- if (isIPv4(value))
131
- return 'IP';
132
- return null;
133
- }
134
- /**
135
- * Redact PII patterns from text
136
- */
137
- function redactPIIFromText(text) {
138
- let result = text;
139
- // Order matters - more specific patterns first
140
- result = result.replace(exports.PII_PATTERNS.creditCardInText, exports.REDACTION_TOKENS.CARD);
141
- result = result.replace(exports.PII_PATTERNS.ssnInText, exports.REDACTION_TOKENS.ID);
142
- result = result.replace(exports.PII_PATTERNS.emailInText, exports.REDACTION_TOKENS.EMAIL);
143
- result = result.replace(exports.PII_PATTERNS.phoneInText, exports.REDACTION_TOKENS.PHONE);
144
- result = result.replace(exports.PII_PATTERNS.ipv4InText, exports.REDACTION_TOKENS.IP);
145
- return result;
146
- }
147
- /**
148
- * Sanitize a value based on its type
149
- */
150
- function sanitizeValue(key, value, path, options, depth, visited) {
151
- const maxDepth = options.maxDepth ?? 10;
152
- // Prevent infinite recursion
153
- if (depth > maxDepth) {
154
- return value;
155
- }
156
- // Handle null/undefined
157
- if (value === null || value === undefined) {
158
- return value;
159
- }
160
- // Handle custom sanitizer function
161
- if (typeof options.mode === 'function') {
162
- return options.mode(key, value, path);
163
- }
164
- // Handle field name list
165
- if (Array.isArray(options.mode)) {
166
- const lowerKey = key.toLowerCase();
167
- if (options.mode.some((f) => f.toLowerCase() === lowerKey)) {
168
- return exports.REDACTION_TOKENS.REDACTED;
169
- }
170
- // Continue to recurse into objects/arrays
171
- }
172
- // Handle string values
173
- if (typeof value === 'string') {
174
- // Auto-detect mode: check if entire string is PII
175
- if (options.mode === true) {
176
- const piiType = detectPIIType(value);
177
- if (piiType) {
178
- return exports.REDACTION_TOKENS[piiType];
179
- }
180
- // Check for PII patterns embedded in text
181
- if (options.sanitizeInText !== false) {
182
- const redacted = redactPIIFromText(value);
183
- if (redacted !== value) {
184
- return redacted;
185
- }
186
- }
187
- }
188
- return value;
189
- }
190
- // Handle arrays
191
- if (Array.isArray(value)) {
192
- // Check for circular reference
193
- if (visited.has(value)) {
194
- return exports.REDACTION_TOKENS.REDACTED;
195
- }
196
- visited.add(value);
197
- return value.map((item, index) => sanitizeValue(String(index), item, [...path, String(index)], options, depth + 1, visited));
198
- }
199
- // Handle objects
200
- if (typeof value === 'object') {
201
- // Check for circular reference
202
- if (visited.has(value)) {
203
- return exports.REDACTION_TOKENS.REDACTED;
204
- }
205
- visited.add(value);
206
- const result = {};
207
- for (const [k, v] of Object.entries(value)) {
208
- result[k] = sanitizeValue(k, v, [...path, k], options, depth + 1, visited);
209
- }
210
- return result;
211
- }
212
- // Return primitives as-is
213
- return value;
214
- }
215
- /**
216
- * Sanitize input data by redacting PII.
217
- *
218
- * @param input - The input data to sanitize
219
- * @param mode - Sanitization mode:
220
- * - `true`: Auto-detect and redact common PII patterns
221
- * - `string[]`: Redact values in fields with these names
222
- * - `SanitizerFn`: Custom sanitizer function
223
- * @returns Sanitized copy of the input
224
- *
225
- * @example
226
- * ```typescript
227
- * // Auto-detect PII
228
- * sanitizeInput({ email: 'test@example.com' });
229
- * // { email: '[EMAIL]' }
230
- *
231
- * // Redact specific fields
232
- * sanitizeInput({ password: 'secret', name: 'John' }, ['password']);
233
- * // { password: '[REDACTED]', name: 'John' }
234
- *
235
- * // Custom sanitizer
236
- * sanitizeInput(data, (key, value) => key === 'token' ? '[TOKEN]' : value);
237
- * ```
238
- */
239
- function sanitizeInput(input, mode = true) {
240
- // Return empty object for invalid inputs to maintain type contract
241
- if (!input || typeof input !== 'object') {
242
- return {};
243
- }
244
- const options = {
245
- mode,
246
- maxDepth: 10,
247
- sanitizeInText: true,
248
- };
249
- const visited = new WeakSet();
250
- return sanitizeValue('', input, [], options, 0, visited);
251
- }
252
- /**
253
- * Create a reusable sanitizer function with preset options.
254
- *
255
- * @param mode - Sanitization mode
256
- * @returns Sanitizer function
257
- *
258
- * @example
259
- * ```typescript
260
- * const sanitizer = createSanitizer(['email', 'phone', 'ssn']);
261
- *
262
- * const clean1 = sanitizer(userData1);
263
- * const clean2 = sanitizer(userData2);
264
- * ```
265
- */
266
- function createSanitizer(mode = true) {
267
- return (input) => sanitizeInput(input, mode);
268
- }
269
- /**
270
- * Check if an object contains any detected PII.
271
- * Does not modify the input.
272
- *
273
- * @param input - The input to check
274
- * @param options - Optional configuration
275
- * @param options.maxDepth - Maximum recursion depth (default: 10)
276
- * @returns Object with boolean `hasPII` and `fields` array of field paths
277
- */
278
- function detectPII(input, options) {
279
- const maxDepth = options?.maxDepth ?? 10;
280
- const fields = [];
281
- const visited = new WeakSet();
282
- const check = (value, path, depth) => {
283
- // Prevent stack overflow on deeply nested structures
284
- if (depth > maxDepth)
285
- return;
286
- if (value === null || value === undefined)
287
- return;
288
- if (typeof value === 'string') {
289
- if (detectPIIType(value)) {
290
- fields.push(path.join('.'));
291
- }
292
- return;
293
- }
294
- if (Array.isArray(value)) {
295
- // Check for circular reference
296
- if (visited.has(value))
297
- return;
298
- visited.add(value);
299
- value.forEach((item, index) => check(item, [...path, String(index)], depth + 1));
300
- return;
301
- }
302
- if (typeof value === 'object') {
303
- // Check for circular reference
304
- if (visited.has(value))
305
- return;
306
- visited.add(value);
307
- for (const [k, v] of Object.entries(value)) {
308
- check(v, [...path, k], depth + 1);
309
- }
310
- }
311
- };
312
- check(input, [], 0);
313
- return {
314
- hasPII: fields.length > 0,
315
- fields,
316
- };
317
- }
318
- //# sourceMappingURL=sanitizer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sanitizer.js","sourceRoot":"","sources":["../../../src/runtime/sanitizer.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Input Sanitizer\n *\n * Provides PII detection and redaction for tool inputs before they are\n * exposed to widget code. This protects sensitive data from being\n * accidentally exposed in client-side widgets.\n *\n * Built-in patterns:\n * - Email addresses → [EMAIL]\n * - Phone numbers → [PHONE]\n * - Credit card numbers → [CARD]\n * - SSN / National IDs → [ID]\n * - IP addresses → [IP]\n *\n * @example\n * ```typescript\n * import { sanitizeInput, createSanitizer } from './sanitizer';\n *\n * // Auto-detect and redact PII\n * const sanitized = sanitizeInput({\n * user: 'john@example.com',\n * phone: '555-123-4567',\n * message: 'Hello world',\n * });\n * // Result: { user: '[EMAIL]', phone: '[PHONE]', message: 'Hello world' }\n *\n * // Redact specific fields\n * const sanitized2 = sanitizeInput(data, ['email', 'ssn']);\n *\n * // Custom sanitizer\n * const sanitized3 = sanitizeInput(data, (key, value) => {\n * if (key === 'secret') return '[REDACTED]';\n * return value;\n * });\n * ```\n */\n\n/**\n * Redaction placeholder tokens\n */\nexport const REDACTION_TOKENS = {\n EMAIL: '[EMAIL]',\n PHONE: '[PHONE]',\n CARD: '[CARD]',\n ID: '[ID]',\n IP: '[IP]',\n REDACTED: '[REDACTED]',\n} as const;\n\n/**\n * PII detection patterns\n */\nexport const PII_PATTERNS = {\n // Email: user@domain.tld\n email: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/,\n\n // Email embedded in text\n emailInText: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g,\n\n // Phone: Various formats (US-centric but flexible)\n phone: /^[+]?[(]?[0-9]{1,4}[)]?[-\\s.]?[0-9]{1,4}[-\\s.]?[0-9]{1,9}$/,\n\n // Phone embedded in text\n phoneInText: /(?:\\+?1[-.\\s]?)?\\(?[0-9]{3}\\)?[-.\\s]?[0-9]{3}[-.\\s]?[0-9]{4}/g,\n\n // Credit card: 13-19 digits (with optional separators)\n creditCard: /^(?:[0-9]{4}[-\\s]?){3,4}[0-9]{1,4}$/,\n\n // Credit card embedded in text\n creditCardInText: /\\b(?:[0-9]{4}[-\\s]?){3,4}[0-9]{1,4}\\b/g,\n\n // SSN: XXX-XX-XXXX\n ssn: /^[0-9]{3}[-]?[0-9]{2}[-]?[0-9]{4}$/,\n\n // SSN embedded in text\n ssnInText: /\\b[0-9]{3}[-]?[0-9]{2}[-]?[0-9]{4}\\b/g,\n\n // IPv4 address\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,\n\n // IPv4 embedded in text\n ipv4InText: /\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b/g,\n};\n\n/**\n * Custom sanitizer function type\n */\nexport type SanitizerFn = (key: string, value: unknown, path: string[]) => unknown;\n\n/**\n * Sanitizer options\n */\nexport interface SanitizeOptions {\n /**\n * How to handle PII detection:\n * - true: Auto-detect and redact common PII patterns\n * - string[]: Only redact values in fields with these names\n * - SanitizerFn: Custom sanitizer function\n */\n mode: true | string[] | SanitizerFn;\n\n /**\n * Maximum depth for recursive sanitization\n * @default 10\n */\n maxDepth?: number;\n\n /**\n * Whether to sanitize PII patterns within string values\n * @default true\n */\n sanitizeInText?: boolean;\n}\n\n/**\n * Check if a string matches an email pattern\n */\nexport function isEmail(value: string): boolean {\n return PII_PATTERNS.email.test(value);\n}\n\n/**\n * Check if a string matches a phone pattern\n */\nexport function isPhone(value: string): boolean {\n return PII_PATTERNS.phone.test(value);\n}\n\n/**\n * Check if a string matches a credit card pattern\n */\nexport function isCreditCard(value: string): boolean {\n // Remove separators for digit count check\n const digits = value.replace(/[-\\s]/g, '');\n return digits.length >= 13 && digits.length <= 19 && PII_PATTERNS.creditCard.test(value);\n}\n\n/**\n * Check if a string matches an SSN pattern\n */\nexport function isSSN(value: string): boolean {\n return PII_PATTERNS.ssn.test(value);\n}\n\n/**\n * Check if a string matches an IPv4 pattern\n */\nexport function isIPv4(value: string): boolean {\n return PII_PATTERNS.ipv4.test(value);\n}\n\n/**\n * Detect PII type in a string value\n */\nexport function detectPIIType(value: string): keyof typeof REDACTION_TOKENS | null {\n if (isEmail(value)) return 'EMAIL';\n if (isCreditCard(value)) return 'CARD';\n if (isSSN(value)) return 'ID';\n if (isPhone(value)) return 'PHONE';\n if (isIPv4(value)) return 'IP';\n return null;\n}\n\n/**\n * Redact PII patterns from text\n */\nexport function redactPIIFromText(text: string): string {\n let result = text;\n\n // Order matters - more specific patterns first\n result = result.replace(PII_PATTERNS.creditCardInText, REDACTION_TOKENS.CARD);\n result = result.replace(PII_PATTERNS.ssnInText, REDACTION_TOKENS.ID);\n result = result.replace(PII_PATTERNS.emailInText, REDACTION_TOKENS.EMAIL);\n result = result.replace(PII_PATTERNS.phoneInText, REDACTION_TOKENS.PHONE);\n result = result.replace(PII_PATTERNS.ipv4InText, REDACTION_TOKENS.IP);\n\n return result;\n}\n\n/**\n * Sanitize a value based on its type\n */\nfunction sanitizeValue(\n key: string,\n value: unknown,\n path: string[],\n options: SanitizeOptions,\n depth: number,\n visited: WeakSet<object>,\n): unknown {\n const maxDepth = options.maxDepth ?? 10;\n\n // Prevent infinite recursion\n if (depth > maxDepth) {\n return value;\n }\n\n // Handle null/undefined\n if (value === null || value === undefined) {\n return value;\n }\n\n // Handle custom sanitizer function\n if (typeof options.mode === 'function') {\n return options.mode(key, value, path);\n }\n\n // Handle field name list\n if (Array.isArray(options.mode)) {\n const lowerKey = key.toLowerCase();\n if (options.mode.some((f) => f.toLowerCase() === lowerKey)) {\n return REDACTION_TOKENS.REDACTED;\n }\n // Continue to recurse into objects/arrays\n }\n\n // Handle string values\n if (typeof value === 'string') {\n // Auto-detect mode: check if entire string is PII\n if (options.mode === true) {\n const piiType = detectPIIType(value);\n if (piiType) {\n return REDACTION_TOKENS[piiType];\n }\n\n // Check for PII patterns embedded in text\n if (options.sanitizeInText !== false) {\n const redacted = redactPIIFromText(value);\n if (redacted !== value) {\n return redacted;\n }\n }\n }\n\n return value;\n }\n\n // Handle arrays\n if (Array.isArray(value)) {\n // Check for circular reference\n if (visited.has(value)) {\n return REDACTION_TOKENS.REDACTED;\n }\n visited.add(value);\n return value.map((item, index) =>\n sanitizeValue(String(index), item, [...path, String(index)], options, depth + 1, visited),\n );\n }\n\n // Handle objects\n if (typeof value === 'object') {\n // Check for circular reference\n if (visited.has(value)) {\n return REDACTION_TOKENS.REDACTED;\n }\n visited.add(value);\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n result[k] = sanitizeValue(k, v, [...path, k], options, depth + 1, visited);\n }\n return result;\n }\n\n // Return primitives as-is\n return value;\n}\n\n/**\n * Sanitize input data by redacting PII.\n *\n * @param input - The input data to sanitize\n * @param mode - Sanitization mode:\n * - `true`: Auto-detect and redact common PII patterns\n * - `string[]`: Redact values in fields with these names\n * - `SanitizerFn`: Custom sanitizer function\n * @returns Sanitized copy of the input\n *\n * @example\n * ```typescript\n * // Auto-detect PII\n * sanitizeInput({ email: 'test@example.com' });\n * // { email: '[EMAIL]' }\n *\n * // Redact specific fields\n * sanitizeInput({ password: 'secret', name: 'John' }, ['password']);\n * // { password: '[REDACTED]', name: 'John' }\n *\n * // Custom sanitizer\n * sanitizeInput(data, (key, value) => key === 'token' ? '[TOKEN]' : value);\n * ```\n */\nexport function sanitizeInput(\n input: Record<string, unknown>,\n mode: true | string[] | SanitizerFn = true,\n): Record<string, unknown> {\n // Return empty object for invalid inputs to maintain type contract\n if (!input || typeof input !== 'object') {\n return {};\n }\n\n const options: SanitizeOptions = {\n mode,\n maxDepth: 10,\n sanitizeInText: true,\n };\n\n const visited = new WeakSet<object>();\n return sanitizeValue('', input, [], options, 0, visited) as Record<string, unknown>;\n}\n\n/**\n * Create a reusable sanitizer function with preset options.\n *\n * @param mode - Sanitization mode\n * @returns Sanitizer function\n *\n * @example\n * ```typescript\n * const sanitizer = createSanitizer(['email', 'phone', 'ssn']);\n *\n * const clean1 = sanitizer(userData1);\n * const clean2 = sanitizer(userData2);\n * ```\n */\nexport function createSanitizer(\n mode: true | string[] | SanitizerFn = true,\n): (input: Record<string, unknown>) => Record<string, unknown> {\n return (input) => sanitizeInput(input, mode);\n}\n\n/**\n * Check if an object contains any detected PII.\n * Does not modify the input.\n *\n * @param input - The input to check\n * @param options - Optional configuration\n * @param options.maxDepth - Maximum recursion depth (default: 10)\n * @returns Object with boolean `hasPII` and `fields` array of field paths\n */\nexport function detectPII(\n input: Record<string, unknown>,\n options?: { maxDepth?: number },\n): {\n hasPII: boolean;\n fields: string[];\n} {\n const maxDepth = options?.maxDepth ?? 10;\n const fields: string[] = [];\n const visited = new WeakSet<object>();\n\n const check = (value: unknown, path: string[], depth: number): void => {\n // Prevent stack overflow on deeply nested structures\n if (depth > maxDepth) return;\n\n if (value === null || value === undefined) return;\n\n if (typeof value === 'string') {\n if (detectPIIType(value)) {\n fields.push(path.join('.'));\n }\n return;\n }\n\n if (Array.isArray(value)) {\n // Check for circular reference\n if (visited.has(value)) return;\n visited.add(value);\n value.forEach((item, index) => check(item, [...path, String(index)], depth + 1));\n return;\n }\n\n if (typeof value === 'object') {\n // Check for circular reference\n if (visited.has(value)) return;\n visited.add(value);\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n check(v, [...path, k], depth + 1);\n }\n }\n };\n\n check(input, [], 0);\n\n return {\n hasPII: fields.length > 0,\n fields,\n };\n}\n"]}