opencode-rehydar 0.14.2 → 0.14.3

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 (430) hide show
  1. package/dist/browser.d.ts +54 -0
  2. package/dist/browser.d.ts.map +1 -0
  3. package/dist/browser.js +74 -0
  4. package/dist/browser.js.map +1 -0
  5. package/dist/core/anonymizer.d.ts +309 -0
  6. package/dist/core/anonymizer.d.ts.map +1 -0
  7. package/dist/core/anonymizer.js +555 -0
  8. package/dist/core/anonymizer.js.map +1 -0
  9. package/dist/core/index.d.ts +6 -0
  10. package/dist/core/index.d.ts.map +1 -0
  11. package/dist/core/index.js +6 -0
  12. package/dist/core/index.js.map +1 -0
  13. package/dist/crypto/index.d.ts +6 -0
  14. package/dist/crypto/index.d.ts.map +1 -0
  15. package/dist/crypto/index.js +6 -0
  16. package/dist/crypto/index.js.map +1 -0
  17. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  18. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  19. package/dist/crypto/pii-map-crypto.js +228 -0
  20. package/dist/crypto/pii-map-crypto.js.map +1 -0
  21. package/dist/index.d.ts +53 -0
  22. package/dist/index.d.ts.map +1 -0
  23. package/dist/index.js +72 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/ner/bio-decoder.d.ts +64 -0
  26. package/dist/ner/bio-decoder.d.ts.map +1 -0
  27. package/dist/ner/bio-decoder.js +218 -0
  28. package/dist/ner/bio-decoder.js.map +1 -0
  29. package/dist/ner/index.d.ts +12 -0
  30. package/dist/ner/index.d.ts.map +1 -0
  31. package/dist/ner/index.js +12 -0
  32. package/dist/ner/index.js.map +1 -0
  33. package/dist/ner/inference-server-client.d.ts +81 -0
  34. package/dist/ner/inference-server-client.d.ts.map +1 -0
  35. package/dist/ner/inference-server-client.js +120 -0
  36. package/dist/ner/inference-server-client.js.map +1 -0
  37. package/dist/ner/inference-server-ner-model.d.ts +43 -0
  38. package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
  39. package/dist/ner/inference-server-ner-model.js +119 -0
  40. package/dist/ner/inference-server-ner-model.js.map +1 -0
  41. package/dist/ner/model-manager.d.ts +111 -0
  42. package/dist/ner/model-manager.d.ts.map +1 -0
  43. package/dist/ner/model-manager.js +334 -0
  44. package/dist/ner/model-manager.js.map +1 -0
  45. package/dist/ner/ner-model.d.ts +172 -0
  46. package/dist/ner/ner-model.d.ts.map +1 -0
  47. package/dist/ner/ner-model.js +514 -0
  48. package/dist/ner/ner-model.js.map +1 -0
  49. package/dist/ner/onnx-runtime.browser.d.ts +46 -0
  50. package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
  51. package/dist/ner/onnx-runtime.browser.js +90 -0
  52. package/dist/ner/onnx-runtime.browser.js.map +1 -0
  53. package/dist/ner/onnx-runtime.d.ts +72 -0
  54. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  55. package/dist/ner/onnx-runtime.js +132 -0
  56. package/dist/ner/onnx-runtime.js.map +1 -0
  57. package/dist/ner/token-window.d.ts +19 -0
  58. package/dist/ner/token-window.d.ts.map +1 -0
  59. package/dist/ner/token-window.js +101 -0
  60. package/dist/ner/token-window.js.map +1 -0
  61. package/dist/ner/tokenizer.d.ts +142 -0
  62. package/dist/ner/tokenizer.d.ts.map +1 -0
  63. package/dist/ner/tokenizer.js +362 -0
  64. package/dist/ner/tokenizer.js.map +1 -0
  65. package/dist/opencode-plugin/git-identity.d.ts +3 -0
  66. package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
  67. package/dist/opencode-plugin/git-identity.js +37 -0
  68. package/dist/opencode-plugin/git-identity.js.map +1 -0
  69. package/dist/opencode-plugin/github-username.d.ts +3 -0
  70. package/dist/opencode-plugin/github-username.d.ts.map +1 -0
  71. package/dist/opencode-plugin/github-username.js +41 -0
  72. package/dist/opencode-plugin/github-username.js.map +1 -0
  73. package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
  74. package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
  75. package/dist/opencode-plugin/identity-recognizer.js +21 -0
  76. package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
  77. package/dist/opencode-plugin/index.d.ts +7 -0
  78. package/dist/opencode-plugin/index.d.ts.map +1 -0
  79. package/dist/opencode-plugin/index.js +6 -0
  80. package/dist/opencode-plugin/index.js.map +1 -0
  81. package/dist/opencode-plugin/plugin.d.ts +39 -0
  82. package/dist/opencode-plugin/plugin.d.ts.map +1 -0
  83. package/dist/opencode-plugin/plugin.js +294 -0
  84. package/dist/opencode-plugin/plugin.js.map +1 -0
  85. package/dist/opencode-plugin/types.d.ts +33 -0
  86. package/dist/opencode-plugin/types.d.ts.map +1 -0
  87. package/dist/opencode-plugin/types.js +5 -0
  88. package/dist/opencode-plugin/types.js.map +1 -0
  89. package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
  90. package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
  91. package/dist/opencode-plugin/v2/anon-state.js +14 -0
  92. package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
  93. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
  94. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
  95. package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
  96. package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
  97. package/dist/opencode-plugin/v2/index.d.ts +17 -0
  98. package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
  99. package/dist/opencode-plugin/v2/index.js +17 -0
  100. package/dist/opencode-plugin/v2/index.js.map +1 -0
  101. package/dist/opencode-plugin/v2/logger.d.ts +24 -0
  102. package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
  103. package/dist/opencode-plugin/v2/logger.js +73 -0
  104. package/dist/opencode-plugin/v2/logger.js.map +1 -0
  105. package/dist/opencode-plugin/v2/options.d.ts +63 -0
  106. package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
  107. package/dist/opencode-plugin/v2/options.js +183 -0
  108. package/dist/opencode-plugin/v2/options.js.map +1 -0
  109. package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
  110. package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
  111. package/dist/opencode-plugin/v2/register-hooks.js +160 -0
  112. package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
  113. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
  114. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
  115. package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
  116. package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
  117. package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
  118. package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
  119. package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
  120. package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
  121. package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
  122. package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
  123. package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
  124. package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
  125. package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
  126. package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
  127. package/dist/opencode-plugin/v2/sessions.js +23 -0
  128. package/dist/opencode-plugin/v2/sessions.js.map +1 -0
  129. package/dist/opencode-plugin/v2/sse.d.ts +101 -0
  130. package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
  131. package/dist/opencode-plugin/v2/sse.js +235 -0
  132. package/dist/opencode-plugin/v2/sse.js.map +1 -0
  133. package/dist/opencode-plugin/v2/types.d.ts +188 -0
  134. package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
  135. package/dist/opencode-plugin/v2/types.js +10 -0
  136. package/dist/opencode-plugin/v2/types.js.map +1 -0
  137. package/dist/opencode-plugin/vcs-command.d.ts +3 -0
  138. package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
  139. package/dist/opencode-plugin/vcs-command.js +34 -0
  140. package/dist/opencode-plugin/vcs-command.js.map +1 -0
  141. package/dist/pipeline/index.d.ts +12 -0
  142. package/dist/pipeline/index.d.ts.map +1 -0
  143. package/dist/pipeline/index.js +12 -0
  144. package/dist/pipeline/index.js.map +1 -0
  145. package/dist/pipeline/prenormalize.d.ts +48 -0
  146. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  147. package/dist/pipeline/prenormalize.js +94 -0
  148. package/dist/pipeline/prenormalize.js.map +1 -0
  149. package/dist/pipeline/resolver.d.ts +56 -0
  150. package/dist/pipeline/resolver.d.ts.map +1 -0
  151. package/dist/pipeline/resolver.js +239 -0
  152. package/dist/pipeline/resolver.js.map +1 -0
  153. package/dist/pipeline/semantic-data-loader.d.ts +171 -0
  154. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  155. package/dist/pipeline/semantic-data-loader.js +677 -0
  156. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  157. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  158. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  159. package/dist/pipeline/semantic-enricher.js +322 -0
  160. package/dist/pipeline/semantic-enricher.js.map +1 -0
  161. package/dist/pipeline/tagger.d.ts +121 -0
  162. package/dist/pipeline/tagger.d.ts.map +1 -0
  163. package/dist/pipeline/tagger.js +545 -0
  164. package/dist/pipeline/tagger.js.map +1 -0
  165. package/dist/pipeline/title-extractor.d.ts +79 -0
  166. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  167. package/dist/pipeline/title-extractor.js +801 -0
  168. package/dist/pipeline/title-extractor.js.map +1 -0
  169. package/dist/pipeline/validator.d.ts +65 -0
  170. package/dist/pipeline/validator.d.ts.map +1 -0
  171. package/dist/pipeline/validator.js +292 -0
  172. package/dist/pipeline/validator.js.map +1 -0
  173. package/dist/proxy/index.d.ts +13 -0
  174. package/dist/proxy/index.d.ts.map +1 -0
  175. package/dist/proxy/index.js +12 -0
  176. package/dist/proxy/index.js.map +1 -0
  177. package/dist/proxy/providers/anthropic.d.ts +28 -0
  178. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  179. package/dist/proxy/providers/anthropic.js +265 -0
  180. package/dist/proxy/providers/anthropic.js.map +1 -0
  181. package/dist/proxy/providers/index.d.ts +19 -0
  182. package/dist/proxy/providers/index.d.ts.map +1 -0
  183. package/dist/proxy/providers/index.js +41 -0
  184. package/dist/proxy/providers/index.js.map +1 -0
  185. package/dist/proxy/providers/openai.d.ts +27 -0
  186. package/dist/proxy/providers/openai.d.ts.map +1 -0
  187. package/dist/proxy/providers/openai.js +203 -0
  188. package/dist/proxy/providers/openai.js.map +1 -0
  189. package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
  190. package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
  191. package/dist/proxy/providers/streaming-tool-loop.js +223 -0
  192. package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
  193. package/dist/proxy/providers/types.d.ts +109 -0
  194. package/dist/proxy/providers/types.d.ts.map +1 -0
  195. package/dist/proxy/providers/types.js +2 -0
  196. package/dist/proxy/providers/types.js.map +1 -0
  197. package/dist/proxy/proxy-server.d.ts +61 -0
  198. package/dist/proxy/proxy-server.d.ts.map +1 -0
  199. package/dist/proxy/proxy-server.js +146 -0
  200. package/dist/proxy/proxy-server.js.map +1 -0
  201. package/dist/proxy/rehydra-fetch.d.ts +35 -0
  202. package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
  203. package/dist/proxy/rehydra-fetch.js +631 -0
  204. package/dist/proxy/rehydra-fetch.js.map +1 -0
  205. package/dist/proxy/rehydra-proxy.d.ts +40 -0
  206. package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
  207. package/dist/proxy/rehydra-proxy.js +150 -0
  208. package/dist/proxy/rehydra-proxy.js.map +1 -0
  209. package/dist/proxy/sse-parser.d.ts +59 -0
  210. package/dist/proxy/sse-parser.d.ts.map +1 -0
  211. package/dist/proxy/sse-parser.js +112 -0
  212. package/dist/proxy/sse-parser.js.map +1 -0
  213. package/dist/proxy/system-instruction.d.ts +19 -0
  214. package/dist/proxy/system-instruction.d.ts.map +1 -0
  215. package/dist/proxy/system-instruction.js +33 -0
  216. package/dist/proxy/system-instruction.js.map +1 -0
  217. package/dist/proxy/tool-loop-stream.d.ts +7 -0
  218. package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
  219. package/dist/proxy/tool-loop-stream.js +65 -0
  220. package/dist/proxy/tool-loop-stream.js.map +1 -0
  221. package/dist/proxy/types.d.ts +138 -0
  222. package/dist/proxy/types.d.ts.map +1 -0
  223. package/dist/proxy/types.js +5 -0
  224. package/dist/proxy/types.js.map +1 -0
  225. package/dist/proxy/wrap-client.d.ts +47 -0
  226. package/dist/proxy/wrap-client.d.ts.map +1 -0
  227. package/dist/proxy/wrap-client.js +70 -0
  228. package/dist/proxy/wrap-client.js.map +1 -0
  229. package/dist/recognizers/address.d.ts +2 -0
  230. package/dist/recognizers/address.d.ts.map +1 -0
  231. package/dist/recognizers/address.js +23 -0
  232. package/dist/recognizers/address.js.map +1 -0
  233. package/dist/recognizers/base.d.ts +78 -0
  234. package/dist/recognizers/base.d.ts.map +1 -0
  235. package/dist/recognizers/base.js +100 -0
  236. package/dist/recognizers/base.js.map +1 -0
  237. package/dist/recognizers/bic-swift.d.ts +10 -0
  238. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  239. package/dist/recognizers/bic-swift.js +107 -0
  240. package/dist/recognizers/bic-swift.js.map +1 -0
  241. package/dist/recognizers/credit-card.d.ts +32 -0
  242. package/dist/recognizers/credit-card.d.ts.map +1 -0
  243. package/dist/recognizers/credit-card.js +160 -0
  244. package/dist/recognizers/credit-card.js.map +1 -0
  245. package/dist/recognizers/custom-id.d.ts +28 -0
  246. package/dist/recognizers/custom-id.d.ts.map +1 -0
  247. package/dist/recognizers/custom-id.js +116 -0
  248. package/dist/recognizers/custom-id.js.map +1 -0
  249. package/dist/recognizers/date.d.ts +10 -0
  250. package/dist/recognizers/date.d.ts.map +1 -0
  251. package/dist/recognizers/date.js +228 -0
  252. package/dist/recognizers/date.js.map +1 -0
  253. package/dist/recognizers/email.d.ts +10 -0
  254. package/dist/recognizers/email.d.ts.map +1 -0
  255. package/dist/recognizers/email.js +75 -0
  256. package/dist/recognizers/email.js.map +1 -0
  257. package/dist/recognizers/iban.d.ts +14 -0
  258. package/dist/recognizers/iban.d.ts.map +1 -0
  259. package/dist/recognizers/iban.js +67 -0
  260. package/dist/recognizers/iban.js.map +1 -0
  261. package/dist/recognizers/index.d.ts +25 -0
  262. package/dist/recognizers/index.d.ts.map +1 -0
  263. package/dist/recognizers/index.js +53 -0
  264. package/dist/recognizers/index.js.map +1 -0
  265. package/dist/recognizers/ip-address.d.ts +14 -0
  266. package/dist/recognizers/ip-address.d.ts.map +1 -0
  267. package/dist/recognizers/ip-address.js +183 -0
  268. package/dist/recognizers/ip-address.js.map +1 -0
  269. package/dist/recognizers/phone.d.ts +10 -0
  270. package/dist/recognizers/phone.d.ts.map +1 -0
  271. package/dist/recognizers/phone.js +145 -0
  272. package/dist/recognizers/phone.js.map +1 -0
  273. package/dist/recognizers/postal-code.d.ts +16 -0
  274. package/dist/recognizers/postal-code.d.ts.map +1 -0
  275. package/dist/recognizers/postal-code.js +42 -0
  276. package/dist/recognizers/postal-code.js.map +1 -0
  277. package/dist/recognizers/registry.d.ts +59 -0
  278. package/dist/recognizers/registry.d.ts.map +1 -0
  279. package/dist/recognizers/registry.js +113 -0
  280. package/dist/recognizers/registry.js.map +1 -0
  281. package/dist/recognizers/secrets/api-key.d.ts +6 -0
  282. package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
  283. package/dist/recognizers/secrets/api-key.js +40 -0
  284. package/dist/recognizers/secrets/api-key.js.map +1 -0
  285. package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
  286. package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
  287. package/dist/recognizers/secrets/aws-credentials.js +68 -0
  288. package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
  289. package/dist/recognizers/secrets/config-secret.d.ts +8 -0
  290. package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
  291. package/dist/recognizers/secrets/config-secret.js +59 -0
  292. package/dist/recognizers/secrets/config-secret.js.map +1 -0
  293. package/dist/recognizers/secrets/connection-string.d.ts +6 -0
  294. package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
  295. package/dist/recognizers/secrets/connection-string.js +40 -0
  296. package/dist/recognizers/secrets/connection-string.js.map +1 -0
  297. package/dist/recognizers/secrets/env-var.d.ts +8 -0
  298. package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
  299. package/dist/recognizers/secrets/env-var.js +54 -0
  300. package/dist/recognizers/secrets/env-var.js.map +1 -0
  301. package/dist/recognizers/secrets/index.d.ts +22 -0
  302. package/dist/recognizers/secrets/index.d.ts.map +1 -0
  303. package/dist/recognizers/secrets/index.js +41 -0
  304. package/dist/recognizers/secrets/index.js.map +1 -0
  305. package/dist/recognizers/secrets/jwt.d.ts +6 -0
  306. package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
  307. package/dist/recognizers/secrets/jwt.js +47 -0
  308. package/dist/recognizers/secrets/jwt.js.map +1 -0
  309. package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
  310. package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
  311. package/dist/recognizers/secrets/key-patterns.js +15 -0
  312. package/dist/recognizers/secrets/key-patterns.js.map +1 -0
  313. package/dist/recognizers/secrets/literal-value.d.ts +10 -0
  314. package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
  315. package/dist/recognizers/secrets/literal-value.js +48 -0
  316. package/dist/recognizers/secrets/literal-value.js.map +1 -0
  317. package/dist/recognizers/secrets/private-key.d.ts +6 -0
  318. package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
  319. package/dist/recognizers/secrets/private-key.js +16 -0
  320. package/dist/recognizers/secrets/private-key.js.map +1 -0
  321. package/dist/recognizers/url.d.ts +14 -0
  322. package/dist/recognizers/url.d.ts.map +1 -0
  323. package/dist/recognizers/url.js +121 -0
  324. package/dist/recognizers/url.js.map +1 -0
  325. package/dist/storage/browser.d.ts +13 -0
  326. package/dist/storage/browser.d.ts.map +1 -0
  327. package/dist/storage/browser.js +13 -0
  328. package/dist/storage/browser.js.map +1 -0
  329. package/dist/storage/in-memory.d.ts +60 -0
  330. package/dist/storage/in-memory.d.ts.map +1 -0
  331. package/dist/storage/in-memory.js +108 -0
  332. package/dist/storage/in-memory.js.map +1 -0
  333. package/dist/storage/index.d.ts +11 -0
  334. package/dist/storage/index.d.ts.map +1 -0
  335. package/dist/storage/index.js +11 -0
  336. package/dist/storage/index.js.map +1 -0
  337. package/dist/storage/indexeddb.d.ts +69 -0
  338. package/dist/storage/indexeddb.d.ts.map +1 -0
  339. package/dist/storage/indexeddb.js +274 -0
  340. package/dist/storage/indexeddb.js.map +1 -0
  341. package/dist/storage/session-base.d.ts +34 -0
  342. package/dist/storage/session-base.d.ts.map +1 -0
  343. package/dist/storage/session-base.js +122 -0
  344. package/dist/storage/session-base.js.map +1 -0
  345. package/dist/storage/session.d.ts +19 -0
  346. package/dist/storage/session.d.ts.map +1 -0
  347. package/dist/storage/session.js +31 -0
  348. package/dist/storage/session.js.map +1 -0
  349. package/dist/storage/sqlite.d.ts +80 -0
  350. package/dist/storage/sqlite.d.ts.map +1 -0
  351. package/dist/storage/sqlite.js +255 -0
  352. package/dist/storage/sqlite.js.map +1 -0
  353. package/dist/storage/types.d.ts +208 -0
  354. package/dist/storage/types.d.ts.map +1 -0
  355. package/dist/storage/types.js +6 -0
  356. package/dist/storage/types.js.map +1 -0
  357. package/dist/streaming/anonymizer-stream.d.ts +63 -0
  358. package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
  359. package/dist/streaming/anonymizer-stream.js +184 -0
  360. package/dist/streaming/anonymizer-stream.js.map +1 -0
  361. package/dist/streaming/index.d.ts +9 -0
  362. package/dist/streaming/index.d.ts.map +1 -0
  363. package/dist/streaming/index.js +8 -0
  364. package/dist/streaming/index.js.map +1 -0
  365. package/dist/streaming/sentence-buffer.d.ts +78 -0
  366. package/dist/streaming/sentence-buffer.d.ts.map +1 -0
  367. package/dist/streaming/sentence-buffer.js +239 -0
  368. package/dist/streaming/sentence-buffer.js.map +1 -0
  369. package/dist/streaming/stream-factory.d.ts +38 -0
  370. package/dist/streaming/stream-factory.d.ts.map +1 -0
  371. package/dist/streaming/stream-factory.js +69 -0
  372. package/dist/streaming/stream-factory.js.map +1 -0
  373. package/dist/streaming/types.d.ts +121 -0
  374. package/dist/streaming/types.d.ts.map +1 -0
  375. package/dist/streaming/types.js +5 -0
  376. package/dist/streaming/types.js.map +1 -0
  377. package/dist/types/index.d.ts +269 -0
  378. package/dist/types/index.d.ts.map +1 -0
  379. package/dist/types/index.js +95 -0
  380. package/dist/types/index.js.map +1 -0
  381. package/dist/types/pii-types.d.ts +64 -0
  382. package/dist/types/pii-types.d.ts.map +1 -0
  383. package/dist/types/pii-types.js +153 -0
  384. package/dist/types/pii-types.js.map +1 -0
  385. package/dist/utils/iban-checksum.d.ts +23 -0
  386. package/dist/utils/iban-checksum.d.ts.map +1 -0
  387. package/dist/utils/iban-checksum.js +106 -0
  388. package/dist/utils/iban-checksum.js.map +1 -0
  389. package/dist/utils/index.d.ts +11 -0
  390. package/dist/utils/index.d.ts.map +1 -0
  391. package/dist/utils/index.js +11 -0
  392. package/dist/utils/index.js.map +1 -0
  393. package/dist/utils/json-walk.d.ts +21 -0
  394. package/dist/utils/json-walk.d.ts.map +1 -0
  395. package/dist/utils/json-walk.js +44 -0
  396. package/dist/utils/json-walk.js.map +1 -0
  397. package/dist/utils/luhn.d.ts +17 -0
  398. package/dist/utils/luhn.d.ts.map +1 -0
  399. package/dist/utils/luhn.js +55 -0
  400. package/dist/utils/luhn.js.map +1 -0
  401. package/dist/utils/offsets.d.ts +86 -0
  402. package/dist/utils/offsets.d.ts.map +1 -0
  403. package/dist/utils/offsets.js +124 -0
  404. package/dist/utils/offsets.js.map +1 -0
  405. package/dist/utils/path.d.ts +34 -0
  406. package/dist/utils/path.d.ts.map +1 -0
  407. package/dist/utils/path.js +96 -0
  408. package/dist/utils/path.js.map +1 -0
  409. package/dist/utils/regex.d.ts +11 -0
  410. package/dist/utils/regex.d.ts.map +1 -0
  411. package/dist/utils/regex.js +14 -0
  412. package/dist/utils/regex.js.map +1 -0
  413. package/dist/utils/storage-browser.d.ts +51 -0
  414. package/dist/utils/storage-browser.d.ts.map +1 -0
  415. package/dist/utils/storage-browser.js +381 -0
  416. package/dist/utils/storage-browser.js.map +1 -0
  417. package/dist/utils/storage-node.d.ts +51 -0
  418. package/dist/utils/storage-node.d.ts.map +1 -0
  419. package/dist/utils/storage-node.js +153 -0
  420. package/dist/utils/storage-node.js.map +1 -0
  421. package/dist/utils/storage.browser.d.ts +75 -0
  422. package/dist/utils/storage.browser.d.ts.map +1 -0
  423. package/dist/utils/storage.browser.js +69 -0
  424. package/dist/utils/storage.browser.js.map +1 -0
  425. package/dist/utils/storage.d.ts +73 -0
  426. package/dist/utils/storage.d.ts.map +1 -0
  427. package/dist/utils/storage.js +69 -0
  428. package/dist/utils/storage.js.map +1 -0
  429. package/index.js +6 -4
  430. package/package.json +19 -5
@@ -0,0 +1,138 @@
1
+ /**
2
+ * Proxy Middleware Types
3
+ */
4
+ import type { AnonymizerConfig } from "../core/anonymizer.js";
5
+ import type { AnonymizationPolicy } from "../types/index.js";
6
+ import type { KeyProvider } from "../crypto/index.js";
7
+ import type { PIIStorageProvider } from "../storage/types.js";
8
+ /**
9
+ * Callback invoked when the LLM requests a tool call during an agentic loop.
10
+ * Receives rehydrated (real PII) arguments. The return value will be
11
+ * automatically anonymized before being sent back to the LLM.
12
+ *
13
+ * @param name - The function/tool name
14
+ * @param args - Parsed tool arguments with real PII values restored
15
+ * @param toolCallId - The unique tool call ID from the LLM
16
+ * @returns The tool execution result (will be JSON-stringified and anonymized)
17
+ */
18
+ export type OnToolCallFn = (name: string, args: Record<string, unknown>, toolCallId: string) => unknown;
19
+ /**
20
+ * Summary of what an intercepted request anonymized. Passed to the
21
+ * {@link RehydraFetchConfig.onAnonymize} hook for logging/observability.
22
+ *
23
+ * Contains only PII *types* and counts — never the raw PII values.
24
+ */
25
+ export interface AnonymizeInfo {
26
+ /** HTTP method of the intercepted request (always "POST" in practice) */
27
+ method: string;
28
+ /** Upstream request URL */
29
+ url: string;
30
+ /** Detected entity count per PII type (only types with count > 0) */
31
+ countsByType: Record<string, number>;
32
+ /** Total entities detected across the whole request */
33
+ totalEntities: number;
34
+ }
35
+ /**
36
+ * Configuration for the Rehydra fetch wrapper
37
+ */
38
+ export interface RehydraFetchConfig {
39
+ /** Anonymizer configuration */
40
+ anonymizer?: AnonymizerConfig;
41
+ /** Policy override */
42
+ policy?: Partial<AnonymizationPolicy>;
43
+ /** Key provider for encryption (required) */
44
+ keyProvider: KeyProvider;
45
+ /** Storage provider for PII map persistence (required) */
46
+ piiStorageProvider: PIIStorageProvider;
47
+ /** LLM provider name or 'auto' for auto-detection */
48
+ provider?: "openai" | "anthropic" | "auto";
49
+ /**
50
+ * Function to derive session ID from a request.
51
+ * Defaults to a UUID per request.
52
+ */
53
+ getSessionId?: (request: Request) => string | Promise<string>;
54
+ /**
55
+ * Whether to handle streaming SSE responses.
56
+ * @default true
57
+ */
58
+ handleStreaming?: boolean;
59
+ /** Locale hint for anonymization */
60
+ locale?: string;
61
+ /**
62
+ * System instruction injected when PII is detected, telling the model
63
+ * to treat PII placeholders as opaque pass-through values.
64
+ *
65
+ * - `undefined` (default): uses the built-in instruction
66
+ * - `string`: uses your custom instruction text
67
+ * - `false`: disables injection entirely
68
+ */
69
+ systemInstruction?: string | false;
70
+ /**
71
+ * Callback for executing tool calls in an agentic loop.
72
+ * When provided and the LLM returns tool calls, the proxy will:
73
+ * 1. Rehydrate tool call arguments (restore real PII)
74
+ * 2. Call this callback for each tool call
75
+ * 3. Anonymize the return value
76
+ * 4. Send the result back to the LLM in the next round
77
+ * 5. Repeat until the LLM returns a final response (no tool calls)
78
+ *
79
+ * The callback receives real PII values — it runs on your server, not the LLM.
80
+ * OpenAI and Anthropic streaming responses are buffered before tools run.
81
+ * Later rounds use JSON; the final result is emitted as provider-compatible SSE.
82
+ * Single-completion requests only. Cancellation prevents further tool calls.
83
+ */
84
+ onToolCall?: OnToolCallFn;
85
+ /**
86
+ * Maximum number of tool execution rounds before returning.
87
+ * Prevents infinite loops. Only used when onToolCall is set.
88
+ * @default 10
89
+ */
90
+ maxToolRounds?: number;
91
+ /** Maximum bytes buffered per response in a tool loop. Default: 8 MiB. */
92
+ maxToolResponseBytes?: number;
93
+ /**
94
+ * Hook invoked once per intercepted request, after anonymization and
95
+ * before forwarding upstream. Receives a summary of detected PII
96
+ * (types and counts only — never the raw values). Useful for verbose
97
+ * logging and observability.
98
+ */
99
+ onAnonymize?: (info: AnonymizeInfo) => void;
100
+ }
101
+ /**
102
+ * Reported when the upstream base path and the incoming request path share segments
103
+ */
104
+ export interface PathOverlapWarning {
105
+ /** Configured upstream base URL with its trailing slash removed. */
106
+ upstreamBaseUrl: string;
107
+ /**
108
+ * Segments duplicated between the configured upstream suffix and the
109
+ * incoming request prefix, e.g. ["api", "v1"].
110
+ */
111
+ overlappingSegments: string[];
112
+ }
113
+ /**
114
+ * Configuration for the Rehydra proxy middleware
115
+ */
116
+ export interface RehydraProxyConfig extends RehydraFetchConfig {
117
+ /** Upstream LLM API base URL */
118
+ upstream: string;
119
+ /**
120
+ * Headers to forward to upstream.
121
+ * @default ["authorization", "content-type", "x-api-key", "anthropic-version"]
122
+ */
123
+ forwardHeaders?: string[];
124
+ /** Path prefix to strip before forwarding to upstream */
125
+ stripPrefix?: string;
126
+ /**
127
+ * API key to inject on upstream requests, replacing any client-sent
128
+ * auth headers. Useful when the client uses OAuth (e.g. Claude Code
129
+ * with Max) but the upstream requires API key auth.
130
+ *
131
+ * For Anthropic: sent as `x-api-key`
132
+ * For OpenAI: sent as `Authorization: Bearer <key>`
133
+ */
134
+ apiKey?: string;
135
+ /** Hook invoked for each request whose forwarded path overlaps the upstream base path */
136
+ onPathOverlapWarning?: (warning: PathOverlapWarning) => void | Promise<void>;
137
+ }
138
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D;;;;;;;;;GASG;AACH,MAAM,MAAM,YAAY,GAAG,CACzB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,UAAU,EAAE,MAAM,KACf,OAAO,CAAC;AAEb;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,qEAAqE;IACrE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,uDAAuD;IACvD,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,+BAA+B;IAC/B,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAE9B,sBAAsB;IACtB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAEtC,6CAA6C;IAC7C,WAAW,EAAE,WAAW,CAAC;IAEzB,0DAA0D;IAC1D,kBAAkB,EAAE,kBAAkB,CAAC;IAEvC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IAE3C;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9D;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAEnC;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,YAAY,CAAC;IAE1B;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,0EAA0E;IAC1E,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,IAAI,CAAC;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oEAAoE;IACpE,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAE1B,yDAAyD;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,yFAAyF;IACzF,oBAAoB,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9E"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Proxy Middleware Types
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/proxy/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * LLM Client Wrapper
3
+ * Convenience function to wrap OpenAI/Anthropic SDK clients
4
+ * with automatic PII anonymization and rehydration.
5
+ */
6
+ import type { RehydraFetchConfig } from "./types.js";
7
+ /**
8
+ * Wraps an LLM client (OpenAI, Anthropic, or any SDK that accepts a custom fetch)
9
+ * to automatically anonymize outgoing PII and rehydrate responses.
10
+ *
11
+ * Works by replacing the client's internal fetch with a Rehydra-wrapped version.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import OpenAI from 'openai';
16
+ * import { wrapLLMClient, InMemoryKeyProvider, InMemoryPIIStorageProvider } from 'rehydra';
17
+ *
18
+ * const openai = wrapLLMClient(
19
+ * new OpenAI(),
20
+ * {
21
+ * keyProvider: new InMemoryKeyProvider(),
22
+ * piiStorageProvider: new InMemoryPIIStorageProvider(),
23
+ * },
24
+ * );
25
+ *
26
+ * // PII is now automatically anonymized/rehydrated
27
+ * const response = await openai.chat.completions.create({ ... });
28
+ * ```
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import Anthropic from '@anthropic-ai/sdk';
33
+ * import { wrapLLMClient, ConfigKeyProvider, SQLitePIIStorageProvider } from 'rehydra';
34
+ *
35
+ * const anthropic = wrapLLMClient(
36
+ * new Anthropic(),
37
+ * {
38
+ * keyProvider: new ConfigKeyProvider(process.env.PII_KEY!),
39
+ * piiStorageProvider: new SQLitePIIStorageProvider('pii.db'),
40
+ * },
41
+ * );
42
+ *
43
+ * const message = await anthropic.messages.create({ ... });
44
+ * ```
45
+ */
46
+ export declare function wrapLLMClient<T>(client: T, config: Omit<RehydraFetchConfig, "provider">): T;
47
+ //# sourceMappingURL=wrap-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-client.d.ts","sourceRoot":"","sources":["../../src/proxy/wrap-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,GAC3C,CAAC,CAwBH"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * LLM Client Wrapper
3
+ * Convenience function to wrap OpenAI/Anthropic SDK clients
4
+ * with automatic PII anonymization and rehydration.
5
+ */
6
+ import { createRehydraFetch } from "./rehydra-fetch.js";
7
+ /**
8
+ * Wraps an LLM client (OpenAI, Anthropic, or any SDK that accepts a custom fetch)
9
+ * to automatically anonymize outgoing PII and rehydrate responses.
10
+ *
11
+ * Works by replacing the client's internal fetch with a Rehydra-wrapped version.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * import OpenAI from 'openai';
16
+ * import { wrapLLMClient, InMemoryKeyProvider, InMemoryPIIStorageProvider } from 'rehydra';
17
+ *
18
+ * const openai = wrapLLMClient(
19
+ * new OpenAI(),
20
+ * {
21
+ * keyProvider: new InMemoryKeyProvider(),
22
+ * piiStorageProvider: new InMemoryPIIStorageProvider(),
23
+ * },
24
+ * );
25
+ *
26
+ * // PII is now automatically anonymized/rehydrated
27
+ * const response = await openai.chat.completions.create({ ... });
28
+ * ```
29
+ *
30
+ * @example
31
+ * ```typescript
32
+ * import Anthropic from '@anthropic-ai/sdk';
33
+ * import { wrapLLMClient, ConfigKeyProvider, SQLitePIIStorageProvider } from 'rehydra';
34
+ *
35
+ * const anthropic = wrapLLMClient(
36
+ * new Anthropic(),
37
+ * {
38
+ * keyProvider: new ConfigKeyProvider(process.env.PII_KEY!),
39
+ * piiStorageProvider: new SQLitePIIStorageProvider('pii.db'),
40
+ * },
41
+ * );
42
+ *
43
+ * const message = await anthropic.messages.create({ ... });
44
+ * ```
45
+ */
46
+ export function wrapLLMClient(client, config) {
47
+ const rehydraFetch = createRehydraFetch({
48
+ ...config,
49
+ provider: "auto",
50
+ });
51
+ // Both OpenAI and Anthropic SDKs store fetch as a property.
52
+ // OpenAI uses `_fetch`, Anthropic uses `fetch`.
53
+ // We try both, and also support any client with a `fetch` property.
54
+ const clientObj = client;
55
+ if ("_fetch" in clientObj) {
56
+ // OpenAI SDK pattern
57
+ clientObj._fetch = rehydraFetch;
58
+ }
59
+ else if ("fetch" in clientObj) {
60
+ // Anthropic SDK pattern (or generic)
61
+ clientObj.fetch = rehydraFetch;
62
+ }
63
+ else {
64
+ // Fallback: set both common patterns
65
+ clientObj._fetch = rehydraFetch;
66
+ clientObj.fetch = rehydraFetch;
67
+ }
68
+ return client;
69
+ }
70
+ //# sourceMappingURL=wrap-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrap-client.js","sourceRoot":"","sources":["../../src/proxy/wrap-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAS,EACT,MAA4C;IAE5C,MAAM,YAAY,GAAG,kBAAkB,CAAC;QACtC,GAAG,MAAM;QACT,QAAQ,EAAE,MAAM;KACjB,CAAC,CAAC;IAEH,4DAA4D;IAC5D,gDAAgD;IAChD,oEAAoE;IACpE,MAAM,SAAS,GAAG,MAAiC,CAAC;IAEpD,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;QAC1B,qBAAqB;QACrB,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;IAClC,CAAC;SAAM,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,qCAAqC;QACrC,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,qCAAqC;QACrC,SAAS,CAAC,MAAM,GAAG,YAAY,CAAC;QAChC,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;IACjC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const streetAddressRecognizer: import("./base.js").Recognizer;
2
+ //# sourceMappingURL=address.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.d.ts","sourceRoot":"","sources":["../../src/recognizers/address.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,uBAAuB,gCAOlC,CAAC"}
@@ -0,0 +1,23 @@
1
+ /** Conservative detection of numbered, English-language street addresses. */
2
+ import { PIIType } from '../types/index.js';
3
+ import { createRegexRecognizer } from './base.js';
4
+ import { UK_POSTAL_CODE_PATTERN } from './postal-code.js';
5
+ const NUMBER = String.raw `[0-9]{1,5}[a-z]?(?:[-/][0-9]{1,5}[a-z]?)?`;
6
+ const WORD = String.raw `[\p{L}][\p{L}.'’\-]*`;
7
+ const STREET = String.raw `${NUMBER}[\t ]+(?:${WORD}[\t ]+){1,6}(?:Road|Rd|Street|St|Avenue|Ave|Lane|Ln|Drive|Dr|Close|Court|Ct|Crescent|Way|Place|Pl|Terrace|Gardens|Grove|Square|Sq|Mews|Row|Hill|Park|Walk|Rise|Green)\b`;
8
+ // An apartment number alone is ambiguous. Require an adjacent numbered street.
9
+ const UNIT = String.raw `(?:(?:Flat|Apartment|Apt|Unit|Suite)[\t ]+${NUMBER}[\t ]*(?:,[\t ]*|\r?\n[\t ]*|[\t ]+))?`;
10
+ // Include locality lines only when a UK postcode terminates the address block.
11
+ // Bounded line/word counts keep prose and separate paragraphs out of the match.
12
+ const LOCALITY = String.raw `(?:${WORD}[\t ]+){0,4}${WORD}`;
13
+ const SEPARATOR = String.raw `[\t ]*(?:,[\t ]*|\r?\n[\t ]*)`;
14
+ const POSTAL_TAIL = String.raw `(?:${SEPARATOR}(?:${LOCALITY}${SEPARATOR}){0,3}${UK_POSTAL_CODE_PATTERN.source})?`;
15
+ export const streetAddressRecognizer = createRegexRecognizer({
16
+ type: PIIType.ADDRESS,
17
+ name: 'Numbered Street Address',
18
+ patterns: [new RegExp(String.raw `(?<![\p{L}\p{N}])${UNIT}${STREET}${POSTAL_TAIL}`, 'giu')],
19
+ defaultConfidence: 0.95,
20
+ // Travel directions describe distances rather than a street number.
21
+ validate: (text) => !/^[0-9]+[\t ]+(?:steps?|miles?|metres?|meters?|kilometres?|kilometers?|blocks?)[\t ]/i.test(text),
22
+ });
23
+ //# sourceMappingURL=address.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/recognizers/address.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,2CAA2C,CAAC;AACrE,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,sBAAsB,CAAC;AAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAA,GAAG,MAAM,YAAY,IAAI,yKAAyK,CAAC;AAC5N,+EAA+E;AAC/E,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAA,6CAA6C,MAAM,wCAAwC,CAAC;AACnH,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAA,MAAM,IAAI,eAAe,IAAI,EAAE,CAAC;AAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAA,+BAA+B,CAAC;AAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,GAAG,CAAA,MAAM,SAAS,MAAM,QAAQ,GAAG,SAAS,SAAS,sBAAsB,CAAC,MAAM,IAAI,CAAC;AAElH,MAAM,CAAC,MAAM,uBAAuB,GAAG,qBAAqB,CAAC;IAC3D,IAAI,EAAE,OAAO,CAAC,OAAO;IACrB,IAAI,EAAE,yBAAyB;IAC/B,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,CAAA,oBAAoB,IAAI,GAAG,MAAM,GAAG,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC;IAC1F,iBAAiB,EAAE,IAAI;IACvB,oEAAoE;IACpE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,sFAAsF,CAAC,IAAI,CAAC,IAAI,CAAC;CACvH,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Base Recognizer Interface
3
+ * Defines the contract for all PII recognizers (regex-based)
4
+ */
5
+ import { PIIType, SpanMatch } from '../types/index.js';
6
+ /**
7
+ * Base interface for all PII recognizers
8
+ */
9
+ export interface Recognizer {
10
+ /** The PII type this recognizer detects */
11
+ readonly type: PIIType;
12
+ /** Human-readable name for logging/debugging */
13
+ readonly name: string;
14
+ /** Default confidence score for matches (0.0 to 1.0) */
15
+ readonly defaultConfidence: number;
16
+ /**
17
+ * Finds all matches of this PII type in the given text
18
+ * @param text - The text to search
19
+ * @returns Array of span matches
20
+ */
21
+ find(text: string): SpanMatch[];
22
+ /**
23
+ * Optional validation of a match (e.g., checksum validation)
24
+ * @param match - The matched text
25
+ * @returns true if the match is valid
26
+ */
27
+ validate?(match: string): boolean;
28
+ /**
29
+ * Optional normalization of a match for storage
30
+ * @param match - The matched text
31
+ * @returns Normalized version of the match
32
+ */
33
+ normalize?(match: string): string;
34
+ }
35
+ /**
36
+ * Base class for regex-based recognizers
37
+ */
38
+ export declare abstract class RegexRecognizer implements Recognizer {
39
+ abstract readonly type: PIIType;
40
+ abstract readonly name: string;
41
+ readonly defaultConfidence: number;
42
+ /** Compiled regex pattern(s) for matching */
43
+ protected abstract readonly patterns: RegExp[];
44
+ /**
45
+ * Finds all matches using the configured patterns
46
+ */
47
+ find(text: string): SpanMatch[];
48
+ /**
49
+ * Removes duplicate matches (same span matched by multiple patterns)
50
+ */
51
+ protected deduplicateMatches(matches: SpanMatch[]): SpanMatch[];
52
+ /**
53
+ * Default validation (always passes)
54
+ * Override in subclasses for checksum validation etc.
55
+ */
56
+ validate?(match: string): boolean;
57
+ /**
58
+ * Default normalization (returns as-is)
59
+ * Override in subclasses for specific normalization
60
+ */
61
+ normalize?(match: string): string;
62
+ }
63
+ /**
64
+ * Configuration for a regex recognizer created from patterns
65
+ */
66
+ export interface RegexRecognizerConfig {
67
+ type: PIIType;
68
+ name: string;
69
+ patterns: RegExp[];
70
+ defaultConfidence?: number;
71
+ validate?: (match: string) => boolean;
72
+ normalize?: (match: string) => string;
73
+ }
74
+ /**
75
+ * Creates a simple regex recognizer from configuration
76
+ */
77
+ export declare function createRegexRecognizer(config: RegexRecognizerConfig): Recognizer;
78
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/recognizers/base.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAmB,MAAM,mBAAmB,CAAC;AAExE;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB,gDAAgD;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,wDAAwD;IACxD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IAEnC;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;IAEhC;;;;OAIG;IACH,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAElC;;;;OAIG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;CACnC;AAED;;GAEG;AACH,8BAAsB,eAAgB,YAAW,UAAU;IACzD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAQ;IAE1C,6CAA6C;IAC7C,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC;IAE/C;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,EAAE;IAiC/B;;OAEG;IACH,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAe/D;;;OAGG;IACH,QAAQ,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAEjC;;;OAGG;IACH,SAAS,CAAC,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,qBAAqB,GAAG,UAAU,CA8C/E"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Base Recognizer Interface
3
+ * Defines the contract for all PII recognizers (regex-based)
4
+ */
5
+ import { DetectionSource } from '../types/index.js';
6
+ /**
7
+ * Base class for regex-based recognizers
8
+ */
9
+ export class RegexRecognizer {
10
+ defaultConfidence = 0.95;
11
+ /**
12
+ * Finds all matches using the configured patterns
13
+ */
14
+ find(text) {
15
+ const matches = [];
16
+ for (const pattern of this.patterns) {
17
+ // Ensure pattern has global flag for matchAll
18
+ const globalPattern = pattern.global
19
+ ? pattern
20
+ : new RegExp(pattern.source, pattern.flags + 'g');
21
+ for (const match of text.matchAll(globalPattern)) {
22
+ if (match.index === undefined)
23
+ continue;
24
+ const matchText = match[0];
25
+ // Skip if validation fails
26
+ if (this.validate !== undefined && !this.validate(matchText)) {
27
+ continue;
28
+ }
29
+ matches.push({
30
+ type: this.type,
31
+ start: match.index,
32
+ end: match.index + matchText.length,
33
+ confidence: this.defaultConfidence,
34
+ source: DetectionSource.REGEX,
35
+ text: matchText,
36
+ });
37
+ }
38
+ }
39
+ return this.deduplicateMatches(matches);
40
+ }
41
+ /**
42
+ * Removes duplicate matches (same span matched by multiple patterns)
43
+ */
44
+ deduplicateMatches(matches) {
45
+ const seen = new Set();
46
+ const unique = [];
47
+ for (const match of matches) {
48
+ const key = `${match.start}:${match.end}`;
49
+ if (!seen.has(key)) {
50
+ seen.add(key);
51
+ unique.push(match);
52
+ }
53
+ }
54
+ return unique;
55
+ }
56
+ }
57
+ /**
58
+ * Creates a simple regex recognizer from configuration
59
+ */
60
+ export function createRegexRecognizer(config) {
61
+ return {
62
+ type: config.type,
63
+ name: config.name,
64
+ defaultConfidence: config.defaultConfidence ?? 0.95,
65
+ find(text) {
66
+ const matches = [];
67
+ const seen = new Set();
68
+ for (const pattern of config.patterns) {
69
+ const globalPattern = pattern.global
70
+ ? pattern
71
+ : new RegExp(pattern.source, pattern.flags + 'g');
72
+ for (const match of text.matchAll(globalPattern)) {
73
+ if (match.index === undefined)
74
+ continue;
75
+ const matchText = match[0];
76
+ const key = `${match.index}:${match.index + matchText.length}`;
77
+ if (seen.has(key))
78
+ continue;
79
+ // Skip if validation fails
80
+ if (config.validate !== undefined && !config.validate(matchText)) {
81
+ continue;
82
+ }
83
+ seen.add(key);
84
+ matches.push({
85
+ type: config.type,
86
+ start: match.index,
87
+ end: match.index + matchText.length,
88
+ confidence: config.defaultConfidence ?? 0.95,
89
+ source: DetectionSource.REGEX,
90
+ text: matchText,
91
+ });
92
+ }
93
+ }
94
+ return matches;
95
+ },
96
+ validate: config.validate,
97
+ normalize: config.normalize,
98
+ };
99
+ }
100
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/recognizers/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * BIC/SWIFT Code Recognizer
3
+ * Bank Identifier Code (ISO 9362)
4
+ */
5
+ import type { Recognizer } from './base.js';
6
+ /**
7
+ * BIC/SWIFT code recognizer
8
+ */
9
+ export declare const bicSwiftRecognizer: Recognizer;
10
+ //# sourceMappingURL=bic-swift.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bic-swift.d.ts","sourceRoot":"","sources":["../../src/recognizers/bic-swift.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AA2C5C;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,UAsEhC,CAAC"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * BIC/SWIFT Code Recognizer
3
+ * Bank Identifier Code (ISO 9362)
4
+ */
5
+ import { PIIType, DetectionSource } from '../types/index.js';
6
+ /**
7
+ * BIC/SWIFT code pattern
8
+ * Format: AAAA BB CC DDD (8 or 11 characters)
9
+ * - AAAA: Bank code (4 letters)
10
+ * - BB: Country code (2 letters, ISO 3166-1)
11
+ * - CC: Location code (2 alphanumeric)
12
+ * - DDD: Branch code (3 alphanumeric, optional)
13
+ */
14
+ const BIC_PATTERN = /\b[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}(?:[A-Z0-9]{3})?\b/g;
15
+ /**
16
+ * Valid ISO 3166-1 alpha-2 country codes (common subset)
17
+ */
18
+ const VALID_COUNTRY_CODES = new Set([
19
+ 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AR', 'AS', 'AT', 'AU', 'AW', 'AZ',
20
+ 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BM', 'BN', 'BO', 'BR', 'BS', 'BT', 'BW', 'BY', 'BZ',
21
+ 'CA', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN', 'CO', 'CR', 'CU', 'CV', 'CY', 'CZ',
22
+ 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ',
23
+ 'EC', 'EE', 'EG', 'ER', 'ES', 'ET',
24
+ 'FI', 'FJ', 'FK', 'FM', 'FO', 'FR',
25
+ 'GA', 'GB', 'GD', 'GE', 'GF', 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GT', 'GU', 'GW', 'GY',
26
+ 'HK', 'HN', 'HR', 'HT', 'HU',
27
+ 'ID', 'IE', 'IL', 'IN', 'IQ', 'IR', 'IS', 'IT',
28
+ 'JM', 'JO', 'JP',
29
+ 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ',
30
+ 'LA', 'LB', 'LC', 'LI', 'LK', 'LR', 'LS', 'LT', 'LU', 'LV', 'LY',
31
+ 'MA', 'MC', 'MD', 'ME', 'MG', 'MH', 'MK', 'ML', 'MM', 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ',
32
+ 'NA', 'NC', 'NE', 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ',
33
+ 'OM',
34
+ 'PA', 'PE', 'PF', 'PG', 'PH', 'PK', 'PL', 'PM', 'PN', 'PR', 'PS', 'PT', 'PW', 'PY',
35
+ 'QA',
36
+ 'RE', 'RO', 'RS', 'RU', 'RW',
37
+ 'SA', 'SB', 'SC', 'SD', 'SE', 'SG', 'SH', 'SI', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SY', 'SZ',
38
+ 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV', 'TW', 'TZ',
39
+ 'UA', 'UG', 'US', 'UY', 'UZ',
40
+ 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU',
41
+ 'WF', 'WS',
42
+ 'YE', 'YT',
43
+ 'ZA', 'ZM', 'ZW',
44
+ ]);
45
+ /**
46
+ * BIC/SWIFT code recognizer
47
+ */
48
+ export const bicSwiftRecognizer = {
49
+ type: PIIType.BIC_SWIFT,
50
+ name: 'BIC/SWIFT Code',
51
+ defaultConfidence: 0.95,
52
+ find(text) {
53
+ const matches = [];
54
+ const pattern = new RegExp(BIC_PATTERN.source, 'g');
55
+ for (const match of text.matchAll(pattern)) {
56
+ if (match.index === undefined)
57
+ continue;
58
+ const bic = match[0];
59
+ // Validate the BIC code
60
+ if (!this.validate(bic))
61
+ continue;
62
+ matches.push({
63
+ type: PIIType.BIC_SWIFT,
64
+ start: match.index,
65
+ end: match.index + bic.length,
66
+ confidence: this.defaultConfidence,
67
+ source: DetectionSource.REGEX,
68
+ text: bic,
69
+ });
70
+ }
71
+ return matches;
72
+ },
73
+ validate(bic) {
74
+ const normalized = bic.toUpperCase();
75
+ // Check length (8 or 11 characters)
76
+ if (normalized.length !== 8 && normalized.length !== 11) {
77
+ return false;
78
+ }
79
+ // Extract and validate country code (characters 5-6)
80
+ const countryCode = normalized.slice(4, 6);
81
+ if (!VALID_COUNTRY_CODES.has(countryCode)) {
82
+ return false;
83
+ }
84
+ // Bank code should be letters only
85
+ const bankCode = normalized.slice(0, 4);
86
+ if (!/^[A-Z]{4}$/.test(bankCode)) {
87
+ return false;
88
+ }
89
+ // Location code should be alphanumeric
90
+ const locationCode = normalized.slice(6, 8);
91
+ if (!/^[A-Z0-9]{2}$/.test(locationCode)) {
92
+ return false;
93
+ }
94
+ // Branch code (if present) should be alphanumeric
95
+ if (normalized.length === 11) {
96
+ const branchCode = normalized.slice(8, 11);
97
+ if (!/^[A-Z0-9]{3}$/.test(branchCode)) {
98
+ return false;
99
+ }
100
+ }
101
+ return true;
102
+ },
103
+ normalize(bic) {
104
+ return bic.toUpperCase().trim();
105
+ },
106
+ };
107
+ //# sourceMappingURL=bic-swift.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bic-swift.js","sourceRoot":"","sources":["../../src/recognizers/bic-swift.ts"],"names":[],"mappings":"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"}