opencode-rehydra-core 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (432) hide show
  1. package/LICENSE +22 -0
  2. package/README.en.md +191 -0
  3. package/README.md +191 -0
  4. package/dist/browser.d.ts +54 -0
  5. package/dist/browser.d.ts.map +1 -0
  6. package/dist/browser.js +74 -0
  7. package/dist/browser.js.map +1 -0
  8. package/dist/core/anonymizer.d.ts +309 -0
  9. package/dist/core/anonymizer.d.ts.map +1 -0
  10. package/dist/core/anonymizer.js +555 -0
  11. package/dist/core/anonymizer.js.map +1 -0
  12. package/dist/core/index.d.ts +6 -0
  13. package/dist/core/index.d.ts.map +1 -0
  14. package/dist/core/index.js +6 -0
  15. package/dist/core/index.js.map +1 -0
  16. package/dist/crypto/index.d.ts +6 -0
  17. package/dist/crypto/index.d.ts.map +1 -0
  18. package/dist/crypto/index.js +6 -0
  19. package/dist/crypto/index.js.map +1 -0
  20. package/dist/crypto/pii-map-crypto.d.ts +114 -0
  21. package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
  22. package/dist/crypto/pii-map-crypto.js +228 -0
  23. package/dist/crypto/pii-map-crypto.js.map +1 -0
  24. package/dist/index.d.ts +53 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +72 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/ner/bio-decoder.d.ts +64 -0
  29. package/dist/ner/bio-decoder.d.ts.map +1 -0
  30. package/dist/ner/bio-decoder.js +218 -0
  31. package/dist/ner/bio-decoder.js.map +1 -0
  32. package/dist/ner/index.d.ts +12 -0
  33. package/dist/ner/index.d.ts.map +1 -0
  34. package/dist/ner/index.js +12 -0
  35. package/dist/ner/index.js.map +1 -0
  36. package/dist/ner/inference-server-client.d.ts +81 -0
  37. package/dist/ner/inference-server-client.d.ts.map +1 -0
  38. package/dist/ner/inference-server-client.js +120 -0
  39. package/dist/ner/inference-server-client.js.map +1 -0
  40. package/dist/ner/inference-server-ner-model.d.ts +43 -0
  41. package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
  42. package/dist/ner/inference-server-ner-model.js +119 -0
  43. package/dist/ner/inference-server-ner-model.js.map +1 -0
  44. package/dist/ner/model-manager.d.ts +111 -0
  45. package/dist/ner/model-manager.d.ts.map +1 -0
  46. package/dist/ner/model-manager.js +334 -0
  47. package/dist/ner/model-manager.js.map +1 -0
  48. package/dist/ner/ner-model.d.ts +172 -0
  49. package/dist/ner/ner-model.d.ts.map +1 -0
  50. package/dist/ner/ner-model.js +514 -0
  51. package/dist/ner/ner-model.js.map +1 -0
  52. package/dist/ner/onnx-runtime.browser.d.ts +46 -0
  53. package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
  54. package/dist/ner/onnx-runtime.browser.js +90 -0
  55. package/dist/ner/onnx-runtime.browser.js.map +1 -0
  56. package/dist/ner/onnx-runtime.d.ts +72 -0
  57. package/dist/ner/onnx-runtime.d.ts.map +1 -0
  58. package/dist/ner/onnx-runtime.js +132 -0
  59. package/dist/ner/onnx-runtime.js.map +1 -0
  60. package/dist/ner/token-window.d.ts +19 -0
  61. package/dist/ner/token-window.d.ts.map +1 -0
  62. package/dist/ner/token-window.js +101 -0
  63. package/dist/ner/token-window.js.map +1 -0
  64. package/dist/ner/tokenizer.d.ts +142 -0
  65. package/dist/ner/tokenizer.d.ts.map +1 -0
  66. package/dist/ner/tokenizer.js +362 -0
  67. package/dist/ner/tokenizer.js.map +1 -0
  68. package/dist/opencode-plugin/git-identity.d.ts +3 -0
  69. package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
  70. package/dist/opencode-plugin/git-identity.js +37 -0
  71. package/dist/opencode-plugin/git-identity.js.map +1 -0
  72. package/dist/opencode-plugin/github-username.d.ts +3 -0
  73. package/dist/opencode-plugin/github-username.d.ts.map +1 -0
  74. package/dist/opencode-plugin/github-username.js +41 -0
  75. package/dist/opencode-plugin/github-username.js.map +1 -0
  76. package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
  77. package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
  78. package/dist/opencode-plugin/identity-recognizer.js +21 -0
  79. package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
  80. package/dist/opencode-plugin/index.d.ts +7 -0
  81. package/dist/opencode-plugin/index.d.ts.map +1 -0
  82. package/dist/opencode-plugin/index.js +6 -0
  83. package/dist/opencode-plugin/index.js.map +1 -0
  84. package/dist/opencode-plugin/plugin.d.ts +39 -0
  85. package/dist/opencode-plugin/plugin.d.ts.map +1 -0
  86. package/dist/opencode-plugin/plugin.js +294 -0
  87. package/dist/opencode-plugin/plugin.js.map +1 -0
  88. package/dist/opencode-plugin/types.d.ts +33 -0
  89. package/dist/opencode-plugin/types.d.ts.map +1 -0
  90. package/dist/opencode-plugin/types.js +5 -0
  91. package/dist/opencode-plugin/types.js.map +1 -0
  92. package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
  93. package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
  94. package/dist/opencode-plugin/v2/anon-state.js +14 -0
  95. package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
  96. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
  97. package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
  98. package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
  99. package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
  100. package/dist/opencode-plugin/v2/index.d.ts +17 -0
  101. package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
  102. package/dist/opencode-plugin/v2/index.js +17 -0
  103. package/dist/opencode-plugin/v2/index.js.map +1 -0
  104. package/dist/opencode-plugin/v2/logger.d.ts +24 -0
  105. package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
  106. package/dist/opencode-plugin/v2/logger.js +73 -0
  107. package/dist/opencode-plugin/v2/logger.js.map +1 -0
  108. package/dist/opencode-plugin/v2/options.d.ts +40 -0
  109. package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
  110. package/dist/opencode-plugin/v2/options.js +132 -0
  111. package/dist/opencode-plugin/v2/options.js.map +1 -0
  112. package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
  113. package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
  114. package/dist/opencode-plugin/v2/register-hooks.js +160 -0
  115. package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
  116. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
  117. package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
  118. package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
  119. package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
  120. package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
  121. package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
  122. package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
  123. package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
  124. package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
  125. package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
  126. package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
  127. package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
  128. package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
  129. package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
  130. package/dist/opencode-plugin/v2/sessions.js +23 -0
  131. package/dist/opencode-plugin/v2/sessions.js.map +1 -0
  132. package/dist/opencode-plugin/v2/sse.d.ts +101 -0
  133. package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
  134. package/dist/opencode-plugin/v2/sse.js +235 -0
  135. package/dist/opencode-plugin/v2/sse.js.map +1 -0
  136. package/dist/opencode-plugin/v2/types.d.ts +188 -0
  137. package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
  138. package/dist/opencode-plugin/v2/types.js +10 -0
  139. package/dist/opencode-plugin/v2/types.js.map +1 -0
  140. package/dist/opencode-plugin/vcs-command.d.ts +3 -0
  141. package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
  142. package/dist/opencode-plugin/vcs-command.js +34 -0
  143. package/dist/opencode-plugin/vcs-command.js.map +1 -0
  144. package/dist/pipeline/index.d.ts +12 -0
  145. package/dist/pipeline/index.d.ts.map +1 -0
  146. package/dist/pipeline/index.js +12 -0
  147. package/dist/pipeline/index.js.map +1 -0
  148. package/dist/pipeline/prenormalize.d.ts +48 -0
  149. package/dist/pipeline/prenormalize.d.ts.map +1 -0
  150. package/dist/pipeline/prenormalize.js +94 -0
  151. package/dist/pipeline/prenormalize.js.map +1 -0
  152. package/dist/pipeline/resolver.d.ts +56 -0
  153. package/dist/pipeline/resolver.d.ts.map +1 -0
  154. package/dist/pipeline/resolver.js +239 -0
  155. package/dist/pipeline/resolver.js.map +1 -0
  156. package/dist/pipeline/semantic-data-loader.d.ts +171 -0
  157. package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
  158. package/dist/pipeline/semantic-data-loader.js +677 -0
  159. package/dist/pipeline/semantic-data-loader.js.map +1 -0
  160. package/dist/pipeline/semantic-enricher.d.ts +112 -0
  161. package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
  162. package/dist/pipeline/semantic-enricher.js +322 -0
  163. package/dist/pipeline/semantic-enricher.js.map +1 -0
  164. package/dist/pipeline/tagger.d.ts +121 -0
  165. package/dist/pipeline/tagger.d.ts.map +1 -0
  166. package/dist/pipeline/tagger.js +545 -0
  167. package/dist/pipeline/tagger.js.map +1 -0
  168. package/dist/pipeline/title-extractor.d.ts +79 -0
  169. package/dist/pipeline/title-extractor.d.ts.map +1 -0
  170. package/dist/pipeline/title-extractor.js +801 -0
  171. package/dist/pipeline/title-extractor.js.map +1 -0
  172. package/dist/pipeline/validator.d.ts +65 -0
  173. package/dist/pipeline/validator.d.ts.map +1 -0
  174. package/dist/pipeline/validator.js +292 -0
  175. package/dist/pipeline/validator.js.map +1 -0
  176. package/dist/proxy/index.d.ts +13 -0
  177. package/dist/proxy/index.d.ts.map +1 -0
  178. package/dist/proxy/index.js +12 -0
  179. package/dist/proxy/index.js.map +1 -0
  180. package/dist/proxy/providers/anthropic.d.ts +28 -0
  181. package/dist/proxy/providers/anthropic.d.ts.map +1 -0
  182. package/dist/proxy/providers/anthropic.js +265 -0
  183. package/dist/proxy/providers/anthropic.js.map +1 -0
  184. package/dist/proxy/providers/index.d.ts +19 -0
  185. package/dist/proxy/providers/index.d.ts.map +1 -0
  186. package/dist/proxy/providers/index.js +41 -0
  187. package/dist/proxy/providers/index.js.map +1 -0
  188. package/dist/proxy/providers/openai.d.ts +27 -0
  189. package/dist/proxy/providers/openai.d.ts.map +1 -0
  190. package/dist/proxy/providers/openai.js +203 -0
  191. package/dist/proxy/providers/openai.js.map +1 -0
  192. package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
  193. package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
  194. package/dist/proxy/providers/streaming-tool-loop.js +223 -0
  195. package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
  196. package/dist/proxy/providers/types.d.ts +109 -0
  197. package/dist/proxy/providers/types.d.ts.map +1 -0
  198. package/dist/proxy/providers/types.js +2 -0
  199. package/dist/proxy/providers/types.js.map +1 -0
  200. package/dist/proxy/proxy-server.d.ts +61 -0
  201. package/dist/proxy/proxy-server.d.ts.map +1 -0
  202. package/dist/proxy/proxy-server.js +146 -0
  203. package/dist/proxy/proxy-server.js.map +1 -0
  204. package/dist/proxy/rehydra-fetch.d.ts +35 -0
  205. package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
  206. package/dist/proxy/rehydra-fetch.js +631 -0
  207. package/dist/proxy/rehydra-fetch.js.map +1 -0
  208. package/dist/proxy/rehydra-proxy.d.ts +40 -0
  209. package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
  210. package/dist/proxy/rehydra-proxy.js +150 -0
  211. package/dist/proxy/rehydra-proxy.js.map +1 -0
  212. package/dist/proxy/sse-parser.d.ts +59 -0
  213. package/dist/proxy/sse-parser.d.ts.map +1 -0
  214. package/dist/proxy/sse-parser.js +112 -0
  215. package/dist/proxy/sse-parser.js.map +1 -0
  216. package/dist/proxy/system-instruction.d.ts +19 -0
  217. package/dist/proxy/system-instruction.d.ts.map +1 -0
  218. package/dist/proxy/system-instruction.js +33 -0
  219. package/dist/proxy/system-instruction.js.map +1 -0
  220. package/dist/proxy/tool-loop-stream.d.ts +7 -0
  221. package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
  222. package/dist/proxy/tool-loop-stream.js +65 -0
  223. package/dist/proxy/tool-loop-stream.js.map +1 -0
  224. package/dist/proxy/types.d.ts +138 -0
  225. package/dist/proxy/types.d.ts.map +1 -0
  226. package/dist/proxy/types.js +5 -0
  227. package/dist/proxy/types.js.map +1 -0
  228. package/dist/proxy/wrap-client.d.ts +47 -0
  229. package/dist/proxy/wrap-client.d.ts.map +1 -0
  230. package/dist/proxy/wrap-client.js +70 -0
  231. package/dist/proxy/wrap-client.js.map +1 -0
  232. package/dist/recognizers/address.d.ts +2 -0
  233. package/dist/recognizers/address.d.ts.map +1 -0
  234. package/dist/recognizers/address.js +23 -0
  235. package/dist/recognizers/address.js.map +1 -0
  236. package/dist/recognizers/base.d.ts +78 -0
  237. package/dist/recognizers/base.d.ts.map +1 -0
  238. package/dist/recognizers/base.js +100 -0
  239. package/dist/recognizers/base.js.map +1 -0
  240. package/dist/recognizers/bic-swift.d.ts +10 -0
  241. package/dist/recognizers/bic-swift.d.ts.map +1 -0
  242. package/dist/recognizers/bic-swift.js +107 -0
  243. package/dist/recognizers/bic-swift.js.map +1 -0
  244. package/dist/recognizers/credit-card.d.ts +32 -0
  245. package/dist/recognizers/credit-card.d.ts.map +1 -0
  246. package/dist/recognizers/credit-card.js +160 -0
  247. package/dist/recognizers/credit-card.js.map +1 -0
  248. package/dist/recognizers/custom-id.d.ts +28 -0
  249. package/dist/recognizers/custom-id.d.ts.map +1 -0
  250. package/dist/recognizers/custom-id.js +116 -0
  251. package/dist/recognizers/custom-id.js.map +1 -0
  252. package/dist/recognizers/date.d.ts +10 -0
  253. package/dist/recognizers/date.d.ts.map +1 -0
  254. package/dist/recognizers/date.js +228 -0
  255. package/dist/recognizers/date.js.map +1 -0
  256. package/dist/recognizers/email.d.ts +10 -0
  257. package/dist/recognizers/email.d.ts.map +1 -0
  258. package/dist/recognizers/email.js +75 -0
  259. package/dist/recognizers/email.js.map +1 -0
  260. package/dist/recognizers/iban.d.ts +14 -0
  261. package/dist/recognizers/iban.d.ts.map +1 -0
  262. package/dist/recognizers/iban.js +67 -0
  263. package/dist/recognizers/iban.js.map +1 -0
  264. package/dist/recognizers/index.d.ts +25 -0
  265. package/dist/recognizers/index.d.ts.map +1 -0
  266. package/dist/recognizers/index.js +53 -0
  267. package/dist/recognizers/index.js.map +1 -0
  268. package/dist/recognizers/ip-address.d.ts +14 -0
  269. package/dist/recognizers/ip-address.d.ts.map +1 -0
  270. package/dist/recognizers/ip-address.js +183 -0
  271. package/dist/recognizers/ip-address.js.map +1 -0
  272. package/dist/recognizers/phone.d.ts +10 -0
  273. package/dist/recognizers/phone.d.ts.map +1 -0
  274. package/dist/recognizers/phone.js +145 -0
  275. package/dist/recognizers/phone.js.map +1 -0
  276. package/dist/recognizers/postal-code.d.ts +16 -0
  277. package/dist/recognizers/postal-code.d.ts.map +1 -0
  278. package/dist/recognizers/postal-code.js +42 -0
  279. package/dist/recognizers/postal-code.js.map +1 -0
  280. package/dist/recognizers/registry.d.ts +59 -0
  281. package/dist/recognizers/registry.d.ts.map +1 -0
  282. package/dist/recognizers/registry.js +113 -0
  283. package/dist/recognizers/registry.js.map +1 -0
  284. package/dist/recognizers/secrets/api-key.d.ts +6 -0
  285. package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
  286. package/dist/recognizers/secrets/api-key.js +40 -0
  287. package/dist/recognizers/secrets/api-key.js.map +1 -0
  288. package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
  289. package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
  290. package/dist/recognizers/secrets/aws-credentials.js +68 -0
  291. package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
  292. package/dist/recognizers/secrets/config-secret.d.ts +8 -0
  293. package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
  294. package/dist/recognizers/secrets/config-secret.js +59 -0
  295. package/dist/recognizers/secrets/config-secret.js.map +1 -0
  296. package/dist/recognizers/secrets/connection-string.d.ts +6 -0
  297. package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
  298. package/dist/recognizers/secrets/connection-string.js +40 -0
  299. package/dist/recognizers/secrets/connection-string.js.map +1 -0
  300. package/dist/recognizers/secrets/env-var.d.ts +8 -0
  301. package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
  302. package/dist/recognizers/secrets/env-var.js +54 -0
  303. package/dist/recognizers/secrets/env-var.js.map +1 -0
  304. package/dist/recognizers/secrets/index.d.ts +22 -0
  305. package/dist/recognizers/secrets/index.d.ts.map +1 -0
  306. package/dist/recognizers/secrets/index.js +41 -0
  307. package/dist/recognizers/secrets/index.js.map +1 -0
  308. package/dist/recognizers/secrets/jwt.d.ts +6 -0
  309. package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
  310. package/dist/recognizers/secrets/jwt.js +47 -0
  311. package/dist/recognizers/secrets/jwt.js.map +1 -0
  312. package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
  313. package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
  314. package/dist/recognizers/secrets/key-patterns.js +15 -0
  315. package/dist/recognizers/secrets/key-patterns.js.map +1 -0
  316. package/dist/recognizers/secrets/literal-value.d.ts +10 -0
  317. package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
  318. package/dist/recognizers/secrets/literal-value.js +48 -0
  319. package/dist/recognizers/secrets/literal-value.js.map +1 -0
  320. package/dist/recognizers/secrets/private-key.d.ts +6 -0
  321. package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
  322. package/dist/recognizers/secrets/private-key.js +16 -0
  323. package/dist/recognizers/secrets/private-key.js.map +1 -0
  324. package/dist/recognizers/url.d.ts +14 -0
  325. package/dist/recognizers/url.d.ts.map +1 -0
  326. package/dist/recognizers/url.js +121 -0
  327. package/dist/recognizers/url.js.map +1 -0
  328. package/dist/storage/browser.d.ts +13 -0
  329. package/dist/storage/browser.d.ts.map +1 -0
  330. package/dist/storage/browser.js +13 -0
  331. package/dist/storage/browser.js.map +1 -0
  332. package/dist/storage/in-memory.d.ts +60 -0
  333. package/dist/storage/in-memory.d.ts.map +1 -0
  334. package/dist/storage/in-memory.js +108 -0
  335. package/dist/storage/in-memory.js.map +1 -0
  336. package/dist/storage/index.d.ts +11 -0
  337. package/dist/storage/index.d.ts.map +1 -0
  338. package/dist/storage/index.js +11 -0
  339. package/dist/storage/index.js.map +1 -0
  340. package/dist/storage/indexeddb.d.ts +69 -0
  341. package/dist/storage/indexeddb.d.ts.map +1 -0
  342. package/dist/storage/indexeddb.js +274 -0
  343. package/dist/storage/indexeddb.js.map +1 -0
  344. package/dist/storage/session-base.d.ts +34 -0
  345. package/dist/storage/session-base.d.ts.map +1 -0
  346. package/dist/storage/session-base.js +122 -0
  347. package/dist/storage/session-base.js.map +1 -0
  348. package/dist/storage/session.d.ts +19 -0
  349. package/dist/storage/session.d.ts.map +1 -0
  350. package/dist/storage/session.js +31 -0
  351. package/dist/storage/session.js.map +1 -0
  352. package/dist/storage/sqlite.d.ts +80 -0
  353. package/dist/storage/sqlite.d.ts.map +1 -0
  354. package/dist/storage/sqlite.js +255 -0
  355. package/dist/storage/sqlite.js.map +1 -0
  356. package/dist/storage/types.d.ts +208 -0
  357. package/dist/storage/types.d.ts.map +1 -0
  358. package/dist/storage/types.js +6 -0
  359. package/dist/storage/types.js.map +1 -0
  360. package/dist/streaming/anonymizer-stream.d.ts +63 -0
  361. package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
  362. package/dist/streaming/anonymizer-stream.js +184 -0
  363. package/dist/streaming/anonymizer-stream.js.map +1 -0
  364. package/dist/streaming/index.d.ts +9 -0
  365. package/dist/streaming/index.d.ts.map +1 -0
  366. package/dist/streaming/index.js +8 -0
  367. package/dist/streaming/index.js.map +1 -0
  368. package/dist/streaming/sentence-buffer.d.ts +78 -0
  369. package/dist/streaming/sentence-buffer.d.ts.map +1 -0
  370. package/dist/streaming/sentence-buffer.js +239 -0
  371. package/dist/streaming/sentence-buffer.js.map +1 -0
  372. package/dist/streaming/stream-factory.d.ts +38 -0
  373. package/dist/streaming/stream-factory.d.ts.map +1 -0
  374. package/dist/streaming/stream-factory.js +69 -0
  375. package/dist/streaming/stream-factory.js.map +1 -0
  376. package/dist/streaming/types.d.ts +121 -0
  377. package/dist/streaming/types.d.ts.map +1 -0
  378. package/dist/streaming/types.js +5 -0
  379. package/dist/streaming/types.js.map +1 -0
  380. package/dist/types/index.d.ts +269 -0
  381. package/dist/types/index.d.ts.map +1 -0
  382. package/dist/types/index.js +95 -0
  383. package/dist/types/index.js.map +1 -0
  384. package/dist/types/pii-types.d.ts +64 -0
  385. package/dist/types/pii-types.d.ts.map +1 -0
  386. package/dist/types/pii-types.js +153 -0
  387. package/dist/types/pii-types.js.map +1 -0
  388. package/dist/utils/iban-checksum.d.ts +23 -0
  389. package/dist/utils/iban-checksum.d.ts.map +1 -0
  390. package/dist/utils/iban-checksum.js +106 -0
  391. package/dist/utils/iban-checksum.js.map +1 -0
  392. package/dist/utils/index.d.ts +11 -0
  393. package/dist/utils/index.d.ts.map +1 -0
  394. package/dist/utils/index.js +11 -0
  395. package/dist/utils/index.js.map +1 -0
  396. package/dist/utils/json-walk.d.ts +21 -0
  397. package/dist/utils/json-walk.d.ts.map +1 -0
  398. package/dist/utils/json-walk.js +44 -0
  399. package/dist/utils/json-walk.js.map +1 -0
  400. package/dist/utils/luhn.d.ts +17 -0
  401. package/dist/utils/luhn.d.ts.map +1 -0
  402. package/dist/utils/luhn.js +55 -0
  403. package/dist/utils/luhn.js.map +1 -0
  404. package/dist/utils/offsets.d.ts +86 -0
  405. package/dist/utils/offsets.d.ts.map +1 -0
  406. package/dist/utils/offsets.js +124 -0
  407. package/dist/utils/offsets.js.map +1 -0
  408. package/dist/utils/path.d.ts +34 -0
  409. package/dist/utils/path.d.ts.map +1 -0
  410. package/dist/utils/path.js +96 -0
  411. package/dist/utils/path.js.map +1 -0
  412. package/dist/utils/regex.d.ts +11 -0
  413. package/dist/utils/regex.d.ts.map +1 -0
  414. package/dist/utils/regex.js +14 -0
  415. package/dist/utils/regex.js.map +1 -0
  416. package/dist/utils/storage-browser.d.ts +51 -0
  417. package/dist/utils/storage-browser.d.ts.map +1 -0
  418. package/dist/utils/storage-browser.js +381 -0
  419. package/dist/utils/storage-browser.js.map +1 -0
  420. package/dist/utils/storage-node.d.ts +51 -0
  421. package/dist/utils/storage-node.d.ts.map +1 -0
  422. package/dist/utils/storage-node.js +153 -0
  423. package/dist/utils/storage-node.js.map +1 -0
  424. package/dist/utils/storage.browser.d.ts +75 -0
  425. package/dist/utils/storage.browser.d.ts.map +1 -0
  426. package/dist/utils/storage.browser.js +69 -0
  427. package/dist/utils/storage.browser.js.map +1 -0
  428. package/dist/utils/storage.d.ts +73 -0
  429. package/dist/utils/storage.d.ts.map +1 -0
  430. package/dist/utils/storage.js +69 -0
  431. package/dist/utils/storage.js.map +1 -0
  432. package/package.json +148 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH,yBAAyB;AACzB,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,2BAA2B,EAAE,MAAM,gBAAgB,CAAC;AAE7D,gCAAgC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * IndexedDB PII Storage Provider
3
+ * Browser-side persistence using IndexedDB
4
+ */
5
+ import type { EncryptedPIIMap } from "../types/index.js";
6
+ import type { PIIStorageProvider, PIIMapMetadata, StoredPIIMap, ListOptions } from "./types.js";
7
+ /**
8
+ * IndexedDB implementation of PIIStorageProvider
9
+ *
10
+ * For browser-side persistence. Data persists across sessions and page reloads.
11
+ *
12
+ * @example
13
+ * ```typescript
14
+ * const storage = new IndexedDBPIIStorageProvider('my-app');
15
+ *
16
+ * await storage.save('conv-123', encryptedPiiMap, {
17
+ * createdAt: Date.now(),
18
+ * entityCounts: { PERSON: 2 }
19
+ * });
20
+ *
21
+ * const stored = await storage.load('conv-123');
22
+ * ```
23
+ */
24
+ export declare class IndexedDBPIIStorageProvider implements PIIStorageProvider {
25
+ private readonly dbName;
26
+ private db;
27
+ /**
28
+ * Create a new IndexedDB storage provider
29
+ * @param dbName - Database name (defaults to 'rehydra-pii-storage')
30
+ */
31
+ constructor(dbName?: string);
32
+ /**
33
+ * Open the IndexedDB database
34
+ */
35
+ private openDatabase;
36
+ /**
37
+ * Save an encrypted PII map
38
+ */
39
+ save(conversationId: string, piiMap: EncryptedPIIMap, metadata?: Partial<PIIMapMetadata>): Promise<void>;
40
+ /**
41
+ * Load an encrypted PII map
42
+ */
43
+ load(conversationId: string): Promise<StoredPIIMap | null>;
44
+ /**
45
+ * Delete a PII map
46
+ */
47
+ delete(conversationId: string): Promise<boolean>;
48
+ /**
49
+ * Check if a PII map exists
50
+ */
51
+ exists(conversationId: string): Promise<boolean>;
52
+ /**
53
+ * List stored conversation IDs
54
+ */
55
+ list(options?: ListOptions): Promise<string[]>;
56
+ /**
57
+ * Delete entries older than the specified date
58
+ */
59
+ cleanup(olderThan: Date): Promise<number>;
60
+ /**
61
+ * Close the database connection
62
+ */
63
+ close(): void;
64
+ /**
65
+ * Delete the entire database (useful for testing)
66
+ */
67
+ deleteDatabase(): Promise<void>;
68
+ }
69
+ //# sourceMappingURL=indexeddb.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb.d.ts","sourceRoot":"","sources":["../../src/storage/indexeddb.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,KAAK,EACV,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,WAAW,EACZ,MAAM,YAAY,CAAC;AAgCpB;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,2BAA4B,YAAW,kBAAkB;IACpE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,EAAE,CAA4B;IAEtC;;;OAGG;gBACS,MAAM,GAAE,MAAwB;IAI5C;;OAEG;YACW,YAAY;IAiC1B;;OAEG;IACG,IAAI,CACR,cAAc,EAAE,MAAM,EACtB,MAAM,EAAE,eAAe,EACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GACjC,OAAO,CAAC,IAAI,CAAC;IAqChB;;OAEG;IACG,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAuChE;;OAEG;IACG,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BtD;;OAEG;IACG,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAoBtD;;OAEG;IACG,IAAI,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsDpD;;OAEG;IACG,OAAO,CAAC,SAAS,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC;IAsC/C;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;CAmBtC"}
@@ -0,0 +1,274 @@
1
+ /**
2
+ * IndexedDB PII Storage Provider
3
+ * Browser-side persistence using IndexedDB
4
+ */
5
+ // ============================================================================
6
+ // Constants
7
+ // ============================================================================
8
+ const DEFAULT_DB_NAME = "rehydra-pii-storage";
9
+ const DB_VERSION = 1;
10
+ const STORE_NAME = "pii_maps";
11
+ // ============================================================================
12
+ // IndexedDB Storage Provider
13
+ // ============================================================================
14
+ /**
15
+ * IndexedDB implementation of PIIStorageProvider
16
+ *
17
+ * For browser-side persistence. Data persists across sessions and page reloads.
18
+ *
19
+ * @example
20
+ * ```typescript
21
+ * const storage = new IndexedDBPIIStorageProvider('my-app');
22
+ *
23
+ * await storage.save('conv-123', encryptedPiiMap, {
24
+ * createdAt: Date.now(),
25
+ * entityCounts: { PERSON: 2 }
26
+ * });
27
+ *
28
+ * const stored = await storage.load('conv-123');
29
+ * ```
30
+ */
31
+ export class IndexedDBPIIStorageProvider {
32
+ dbName;
33
+ db = null;
34
+ /**
35
+ * Create a new IndexedDB storage provider
36
+ * @param dbName - Database name (defaults to 'rehydra-pii-storage')
37
+ */
38
+ constructor(dbName = DEFAULT_DB_NAME) {
39
+ this.dbName = dbName;
40
+ }
41
+ /**
42
+ * Open the IndexedDB database
43
+ */
44
+ async openDatabase() {
45
+ if (this.db !== null) {
46
+ return this.db;
47
+ }
48
+ return new Promise((resolve, reject) => {
49
+ const request = indexedDB.open(this.dbName, DB_VERSION);
50
+ request.onerror = () => {
51
+ reject(new Error(`Failed to open IndexedDB: ${request.error?.message}`));
52
+ };
53
+ request.onsuccess = () => {
54
+ this.db = request.result;
55
+ resolve(this.db);
56
+ };
57
+ request.onupgradeneeded = (event) => {
58
+ const db = event.target.result;
59
+ if (!db.objectStoreNames.contains(STORE_NAME)) {
60
+ const store = db.createObjectStore(STORE_NAME, {
61
+ keyPath: "conversationId",
62
+ });
63
+ // Create index on createdAt for efficient cleanup queries
64
+ store.createIndex("createdAt", "createdAt", { unique: false });
65
+ }
66
+ };
67
+ });
68
+ }
69
+ /**
70
+ * Save an encrypted PII map
71
+ */
72
+ async save(conversationId, piiMap, metadata) {
73
+ const db = await this.openDatabase();
74
+ const now = Date.now();
75
+ // Check if entry exists to preserve createdAt
76
+ const existing = await this.load(conversationId);
77
+ const record = {
78
+ conversationId,
79
+ ciphertext: piiMap.ciphertext,
80
+ iv: piiMap.iv,
81
+ authTag: piiMap.authTag,
82
+ entityCounts: metadata?.entityCounts ?? existing?.metadata.entityCounts ?? {},
83
+ modelVersion: metadata?.modelVersion ?? existing?.metadata.modelVersion ?? undefined,
84
+ createdAt: existing?.metadata.createdAt ?? metadata?.createdAt ?? now,
85
+ updatedAt: now,
86
+ };
87
+ return new Promise((resolve, reject) => {
88
+ const transaction = db.transaction(STORE_NAME, "readwrite");
89
+ const store = transaction.objectStore(STORE_NAME);
90
+ const request = store.put(record);
91
+ request.onerror = () => {
92
+ reject(new Error(`Failed to save to IndexedDB: ${request.error?.message}`));
93
+ };
94
+ transaction.oncomplete = () => {
95
+ resolve();
96
+ };
97
+ });
98
+ }
99
+ /**
100
+ * Load an encrypted PII map
101
+ */
102
+ async load(conversationId) {
103
+ const db = await this.openDatabase();
104
+ return new Promise((resolve, reject) => {
105
+ const transaction = db.transaction(STORE_NAME, "readonly");
106
+ const store = transaction.objectStore(STORE_NAME);
107
+ const request = store.get(conversationId);
108
+ request.onerror = () => {
109
+ reject(new Error(`Failed to load from IndexedDB: ${request.error?.message}`));
110
+ };
111
+ request.onsuccess = () => {
112
+ const record = request.result;
113
+ if (!record) {
114
+ resolve(null);
115
+ return;
116
+ }
117
+ resolve({
118
+ piiMap: {
119
+ ciphertext: record.ciphertext,
120
+ iv: record.iv,
121
+ authTag: record.authTag,
122
+ },
123
+ metadata: {
124
+ createdAt: record.createdAt,
125
+ updatedAt: record.updatedAt,
126
+ entityCounts: record.entityCounts,
127
+ modelVersion: record.modelVersion,
128
+ },
129
+ });
130
+ };
131
+ });
132
+ }
133
+ /**
134
+ * Delete a PII map
135
+ */
136
+ async delete(conversationId) {
137
+ const db = await this.openDatabase();
138
+ // Check if exists first
139
+ const exists = await this.exists(conversationId);
140
+ if (!exists)
141
+ return false;
142
+ return new Promise((resolve, reject) => {
143
+ const transaction = db.transaction(STORE_NAME, "readwrite");
144
+ const store = transaction.objectStore(STORE_NAME);
145
+ const request = store.delete(conversationId);
146
+ request.onerror = () => {
147
+ reject(new Error(`Failed to delete from IndexedDB: ${request.error?.message}`));
148
+ };
149
+ transaction.oncomplete = () => {
150
+ resolve(true);
151
+ };
152
+ });
153
+ }
154
+ /**
155
+ * Check if a PII map exists
156
+ */
157
+ async exists(conversationId) {
158
+ const db = await this.openDatabase();
159
+ return new Promise((resolve, reject) => {
160
+ const transaction = db.transaction(STORE_NAME, "readonly");
161
+ const store = transaction.objectStore(STORE_NAME);
162
+ const request = store.getKey(conversationId);
163
+ request.onerror = () => {
164
+ reject(new Error(`Failed to check IndexedDB: ${request.error?.message}`));
165
+ };
166
+ request.onsuccess = () => {
167
+ resolve(request.result !== undefined);
168
+ };
169
+ });
170
+ }
171
+ /**
172
+ * List stored conversation IDs
173
+ */
174
+ async list(options) {
175
+ const db = await this.openDatabase();
176
+ return new Promise((resolve, reject) => {
177
+ const transaction = db.transaction(STORE_NAME, "readonly");
178
+ const store = transaction.objectStore(STORE_NAME);
179
+ const index = store.index("createdAt");
180
+ // Use cursor to iterate in descending order (most recent first)
181
+ const request = index.openCursor(null, "prev");
182
+ const results = [];
183
+ request.onerror = () => {
184
+ reject(new Error(`Failed to list from IndexedDB: ${request.error?.message}`));
185
+ };
186
+ request.onsuccess = () => {
187
+ const cursor = request.result;
188
+ if (cursor) {
189
+ const record = cursor.value;
190
+ // Filter by olderThan if specified
191
+ if (options?.olderThan !== undefined) {
192
+ if (record.createdAt < options.olderThan.getTime()) {
193
+ results.push({
194
+ id: record.conversationId,
195
+ createdAt: record.createdAt,
196
+ });
197
+ }
198
+ }
199
+ else {
200
+ results.push({
201
+ id: record.conversationId,
202
+ createdAt: record.createdAt,
203
+ });
204
+ }
205
+ // Check limit
206
+ if (options?.limit !== undefined && results.length >= options.limit) {
207
+ resolve(results.map((r) => r.id));
208
+ return;
209
+ }
210
+ cursor.continue();
211
+ }
212
+ else {
213
+ // End of cursor
214
+ resolve(results.map((r) => r.id));
215
+ }
216
+ };
217
+ });
218
+ }
219
+ /**
220
+ * Delete entries older than the specified date
221
+ */
222
+ async cleanup(olderThan) {
223
+ const db = await this.openDatabase();
224
+ const cutoff = olderThan.getTime();
225
+ return new Promise((resolve, reject) => {
226
+ const transaction = db.transaction(STORE_NAME, "readwrite");
227
+ const store = transaction.objectStore(STORE_NAME);
228
+ const index = store.index("createdAt");
229
+ // Find all records with createdAt < cutoff
230
+ const range = IDBKeyRange.upperBound(cutoff, true);
231
+ const request = index.openCursor(range);
232
+ let deleted = 0;
233
+ request.onerror = () => {
234
+ reject(new Error(`Failed to cleanup IndexedDB: ${request.error?.message}`));
235
+ };
236
+ request.onsuccess = () => {
237
+ const cursor = request.result;
238
+ if (cursor) {
239
+ cursor.delete();
240
+ deleted++;
241
+ cursor.continue();
242
+ }
243
+ };
244
+ transaction.oncomplete = () => {
245
+ resolve(deleted);
246
+ };
247
+ });
248
+ }
249
+ /**
250
+ * Close the database connection
251
+ */
252
+ close() {
253
+ if (this.db !== null) {
254
+ this.db.close();
255
+ this.db = null;
256
+ }
257
+ }
258
+ /**
259
+ * Delete the entire database (useful for testing)
260
+ */
261
+ async deleteDatabase() {
262
+ this.close();
263
+ return new Promise((resolve, reject) => {
264
+ const request = indexedDB.deleteDatabase(this.dbName);
265
+ request.onerror = () => {
266
+ reject(new Error(`Failed to delete IndexedDB database: ${request.error?.message}`));
267
+ };
268
+ request.onsuccess = () => {
269
+ resolve();
270
+ };
271
+ });
272
+ }
273
+ }
274
+ //# sourceMappingURL=indexeddb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexeddb.js","sourceRoot":"","sources":["../../src/storage/indexeddb.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Anonymizer Session Base Implementation
3
+ * Browser-safe session wrapper for automatic PII map storage.
4
+ * Does NOT include createStream() to avoid pulling in node:stream.
5
+ */
6
+ import type { AnonymizationResult, AnonymizationPolicy, TagFormat } from "../types/index.js";
7
+ import type { KeyProvider } from "../crypto/index.js";
8
+ import type { RawPIIMap } from "../pipeline/tagger.js";
9
+ import type { AnonymizerSession, PIIStorageProvider, StoredPIIMap } from "./types.js";
10
+ /**
11
+ * Interface for the parent Anonymizer (to avoid circular dependency)
12
+ */
13
+ export interface IAnonymizer {
14
+ anonymize(text: string, locale?: string, policy?: Partial<AnonymizationPolicy>, existingPiiMap?: RawPIIMap): Promise<AnonymizationResult>;
15
+ readonly resolvedTagFormat: TagFormat;
16
+ }
17
+ /**
18
+ * Session implementation that wraps an Anonymizer with automatic storage
19
+ */
20
+ export declare class AnonymizerSessionImpl implements AnonymizerSession {
21
+ protected readonly anonymizer: IAnonymizer;
22
+ protected readonly storage: PIIStorageProvider;
23
+ protected readonly keyProvider: KeyProvider;
24
+ readonly sessionId: string;
25
+ constructor(anonymizer: IAnonymizer, sessionId: string, storage: PIIStorageProvider, keyProvider: KeyProvider);
26
+ anonymize(text: string, locale?: string, policy?: Partial<AnonymizationPolicy>): Promise<AnonymizationResult>;
27
+ rehydrate(text: string): Promise<string>;
28
+ anonymizeJson<T>(value: T, locale?: string, policy?: Partial<AnonymizationPolicy>): Promise<T>;
29
+ rehydrateJson<T>(value: T): Promise<T>;
30
+ load(): Promise<StoredPIIMap | null>;
31
+ delete(): Promise<boolean>;
32
+ exists(): Promise<boolean>;
33
+ }
34
+ //# sourceMappingURL=session-base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-base.d.ts","sourceRoot":"","sources":["../../src/storage/session-base.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,EACrC,cAAc,CAAC,EAAE,SAAS,GACzB,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,CAAC;CACvC;AAED;;GAEG;AACH,qBAAa,qBAAsB,YAAW,iBAAiB;IAI3D,SAAS,CAAC,QAAQ,CAAC,UAAU,EAAE,WAAW;IAE1C,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,kBAAkB;IAC9C,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW;IAN7C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAGN,UAAU,EAAE,WAAW,EAC1C,SAAS,EAAE,MAAM,EACE,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,WAAW;IAKvC,SAAS,CACb,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,OAAO,CAAC,mBAAmB,CAAC;IAuFzB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBxC,aAAa,CAAC,CAAC,EACnB,KAAK,EAAE,CAAC,EACR,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,GACpC,OAAO,CAAC,CAAC,CAAC;IAOP,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAItC,IAAI,IAAI,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAIpC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;CAGjC"}
@@ -0,0 +1,122 @@
1
+ /**
2
+ * Anonymizer Session Base Implementation
3
+ * Browser-safe session wrapper for automatic PII map storage.
4
+ * Does NOT include createStream() to avoid pulling in node:stream.
5
+ */
6
+ import { walkJson } from "../utils/json-walk.js";
7
+ import { decryptPIIMap, encryptPIIMap } from "../crypto/index.js";
8
+ import { rehydrate as rehydrateText } from "../pipeline/tagger.js";
9
+ /**
10
+ * Session implementation that wraps an Anonymizer with automatic storage
11
+ */
12
+ export class AnonymizerSessionImpl {
13
+ anonymizer;
14
+ storage;
15
+ keyProvider;
16
+ sessionId;
17
+ constructor(anonymizer, sessionId, storage, keyProvider) {
18
+ this.anonymizer = anonymizer;
19
+ this.storage = storage;
20
+ this.keyProvider = keyProvider;
21
+ this.sessionId = sessionId;
22
+ }
23
+ async anonymize(text, locale, policy) {
24
+ // Get the encryption key
25
+ const key = await this.keyProvider.getKey();
26
+ // Load existing PII map for ID reuse (before calling anonymizer)
27
+ const existing = await this.storage.load(this.sessionId);
28
+ let existingPiiMap;
29
+ let createdAt;
30
+ let existingEntityCounts;
31
+ if (existing !== null) {
32
+ try {
33
+ existingPiiMap = await decryptPIIMap(existing.piiMap, key);
34
+ createdAt = existing.metadata.createdAt;
35
+ existingEntityCounts = existing.metadata.entityCounts;
36
+ }
37
+ catch (error) {
38
+ // Decryption failed - likely key mismatch
39
+ const isKeyMismatch = error instanceof Error &&
40
+ (error.name === "OperationError" ||
41
+ error.message.includes("decrypt"));
42
+ if (isKeyMismatch) {
43
+ throw new Error(`Failed to decrypt existing session data for "${this.sessionId}". ` +
44
+ `The encryption key may have changed since this session was created.\n\n` +
45
+ `To fix this, either:\n` +
46
+ ` 1. Use the same key that was used to create the session\n` +
47
+ ` 2. Delete the old session: await session.delete()\n` +
48
+ ` 3. Use a persistent key provider (e.g., ConfigKeyProvider)`);
49
+ }
50
+ throw error;
51
+ }
52
+ }
53
+ else {
54
+ existingPiiMap = undefined;
55
+ createdAt = Date.now();
56
+ existingEntityCounts = {};
57
+ }
58
+ // Call the parent anonymizer with existing PII map for ID reuse
59
+ const result = await this.anonymizer.anonymize(text, locale, policy, existingPiiMap);
60
+ // Sessions require a PII map (only available in pseudonymize mode)
61
+ if (result.piiMap === undefined) {
62
+ throw new Error("Session anonymize() failed: no PII map returned.\n\n" +
63
+ "This can happen if the anonymizer is in 'anonymize' mode.\n" +
64
+ "Sessions require 'pseudonymize' mode for PII map storage.");
65
+ }
66
+ // Decrypt the new PII map
67
+ const newPiiMap = await decryptPIIMap(result.piiMap, key);
68
+ // Merge maps: start with existing (if any), add new entries
69
+ const mergedPiiMap = existingPiiMap
70
+ ? new Map(existingPiiMap)
71
+ : new Map();
72
+ for (const [k, v] of newPiiMap) {
73
+ mergedPiiMap.set(k, v);
74
+ }
75
+ // Merge entity counts
76
+ const mergedEntityCounts = { ...existingEntityCounts };
77
+ for (const [type, count] of Object.entries(result.stats.countsByType)) {
78
+ mergedEntityCounts[type] = (mergedEntityCounts[type] ?? 0) + count;
79
+ }
80
+ // Re-encrypt the merged PII map
81
+ const encryptedMergedMap = await encryptPIIMap(mergedPiiMap, key);
82
+ // Save the merged PII map to storage
83
+ await this.storage.save(this.sessionId, encryptedMergedMap, {
84
+ createdAt,
85
+ entityCounts: mergedEntityCounts,
86
+ modelVersion: result.stats.modelVersion,
87
+ });
88
+ return result;
89
+ }
90
+ async rehydrate(text) {
91
+ // Load from storage
92
+ const stored = await this.storage.load(this.sessionId);
93
+ if (stored === null) {
94
+ throw new Error(`No PII map found for session: ${this.sessionId}. ` +
95
+ `Make sure to call anonymize() before rehydrate().`);
96
+ }
97
+ // Decrypt the PII map
98
+ const key = await this.keyProvider.getKey();
99
+ const piiMap = await decryptPIIMap(stored.piiMap, key);
100
+ // Rehydrate the text
101
+ return rehydrateText(text, piiMap, false, this.anonymizer.resolvedTagFormat);
102
+ }
103
+ async anonymizeJson(value, locale, policy) {
104
+ return walkJson(value, async (s) => {
105
+ const result = await this.anonymize(s, locale, policy);
106
+ return result.anonymizedText;
107
+ });
108
+ }
109
+ async rehydrateJson(value) {
110
+ return walkJson(value, (s) => this.rehydrate(s));
111
+ }
112
+ async load() {
113
+ return this.storage.load(this.sessionId);
114
+ }
115
+ async delete() {
116
+ return this.storage.delete(this.sessionId);
117
+ }
118
+ async exists() {
119
+ return this.storage.exists(this.sessionId);
120
+ }
121
+ }
122
+ //# sourceMappingURL=session-base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-base.js","sourceRoot":"","sources":["../../src/storage/session-base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Anonymizer Session Implementation (Node.js)
3
+ * Extends the base session with streaming support (requires node:stream).
4
+ */
5
+ export { type IAnonymizer } from "./session-base.js";
6
+ import { AnonymizerSessionImpl as BaseSessionImpl } from "./session-base.js";
7
+ import type { KeyProvider } from "../crypto/index.js";
8
+ import type { PIIStorageProvider } from "./types.js";
9
+ import { AnonymizerStream } from "../streaming/anonymizer-stream.js";
10
+ import type { StreamConfig } from "../streaming/types.js";
11
+ import type { IAnonymizer } from "./session-base.js";
12
+ /**
13
+ * Node.js session implementation with streaming support
14
+ */
15
+ export declare class AnonymizerSessionImpl extends BaseSessionImpl {
16
+ constructor(anonymizer: IAnonymizer, sessionId: string, storage: PIIStorageProvider, keyProvider: KeyProvider);
17
+ createStream(config?: Partial<StreamConfig>): Promise<AnonymizerStream>;
18
+ }
19
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/storage/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,qBAAqB,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,eAAe;gBAEtD,UAAU,EAAE,WAAW,EACvB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,EAC3B,WAAW,EAAE,WAAW;IAKpB,YAAY,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAoB9E"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Anonymizer Session Implementation (Node.js)
3
+ * Extends the base session with streaming support (requires node:stream).
4
+ */
5
+ import { AnonymizerSessionImpl as BaseSessionImpl } from "./session-base.js";
6
+ import { decryptPIIMap } from "../crypto/index.js";
7
+ import { AnonymizerStream } from "../streaming/anonymizer-stream.js";
8
+ /**
9
+ * Node.js session implementation with streaming support
10
+ */
11
+ export class AnonymizerSessionImpl extends BaseSessionImpl {
12
+ constructor(anonymizer, sessionId, storage, keyProvider) {
13
+ super(anonymizer, sessionId, storage, keyProvider);
14
+ }
15
+ async createStream(config) {
16
+ // Load existing PII map to seed the stream for ID continuity
17
+ let initialPiiMap;
18
+ const existing = await this.storage.load(this.sessionId);
19
+ if (existing !== null) {
20
+ const key = await this.keyProvider.getKey();
21
+ initialPiiMap = await decryptPIIMap(existing.piiMap, key);
22
+ }
23
+ return new AnonymizerStream(this.anonymizer, {
24
+ ...config,
25
+ sessionId: this.sessionId,
26
+ piiStorageProvider: this.storage,
27
+ keyProvider: this.keyProvider,
28
+ }, initialPiiMap);
29
+ }
30
+ }
31
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/storage/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,qBAAqB,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAIrE;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,eAAe;IACxD,YACE,UAAuB,EACvB,SAAiB,EACjB,OAA2B,EAC3B,WAAwB;QAExB,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAA8B;QAC/C,6DAA6D;QAC7D,IAAI,aAAoC,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YAC5C,aAAa,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,IAAI,gBAAgB,CACzB,IAAI,CAAC,UAAU,EACf;YACE,GAAG,MAAM;YACT,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,kBAAkB,EAAE,IAAI,CAAC,OAAO;YAChC,WAAW,EAAE,IAAI,CAAC,WAAW;SAC9B,EACD,aAAa,CACd,CAAC;IACJ,CAAC;CACF"}