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.
- package/LICENSE +22 -0
- package/README.en.md +191 -0
- package/README.md +191 -0
- package/dist/browser.d.ts +54 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +74 -0
- package/dist/browser.js.map +1 -0
- package/dist/core/anonymizer.d.ts +309 -0
- package/dist/core/anonymizer.d.ts.map +1 -0
- package/dist/core/anonymizer.js +555 -0
- package/dist/core/anonymizer.js.map +1 -0
- package/dist/core/index.d.ts +6 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +6 -0
- package/dist/core/index.js.map +1 -0
- package/dist/crypto/index.d.ts +6 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +6 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/pii-map-crypto.d.ts +114 -0
- package/dist/crypto/pii-map-crypto.d.ts.map +1 -0
- package/dist/crypto/pii-map-crypto.js +228 -0
- package/dist/crypto/pii-map-crypto.js.map +1 -0
- package/dist/index.d.ts +53 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/ner/bio-decoder.d.ts +64 -0
- package/dist/ner/bio-decoder.d.ts.map +1 -0
- package/dist/ner/bio-decoder.js +218 -0
- package/dist/ner/bio-decoder.js.map +1 -0
- package/dist/ner/index.d.ts +12 -0
- package/dist/ner/index.d.ts.map +1 -0
- package/dist/ner/index.js +12 -0
- package/dist/ner/index.js.map +1 -0
- package/dist/ner/inference-server-client.d.ts +81 -0
- package/dist/ner/inference-server-client.d.ts.map +1 -0
- package/dist/ner/inference-server-client.js +120 -0
- package/dist/ner/inference-server-client.js.map +1 -0
- package/dist/ner/inference-server-ner-model.d.ts +43 -0
- package/dist/ner/inference-server-ner-model.d.ts.map +1 -0
- package/dist/ner/inference-server-ner-model.js +119 -0
- package/dist/ner/inference-server-ner-model.js.map +1 -0
- package/dist/ner/model-manager.d.ts +111 -0
- package/dist/ner/model-manager.d.ts.map +1 -0
- package/dist/ner/model-manager.js +334 -0
- package/dist/ner/model-manager.js.map +1 -0
- package/dist/ner/ner-model.d.ts +172 -0
- package/dist/ner/ner-model.d.ts.map +1 -0
- package/dist/ner/ner-model.js +514 -0
- package/dist/ner/ner-model.js.map +1 -0
- package/dist/ner/onnx-runtime.browser.d.ts +46 -0
- package/dist/ner/onnx-runtime.browser.d.ts.map +1 -0
- package/dist/ner/onnx-runtime.browser.js +90 -0
- package/dist/ner/onnx-runtime.browser.js.map +1 -0
- package/dist/ner/onnx-runtime.d.ts +72 -0
- package/dist/ner/onnx-runtime.d.ts.map +1 -0
- package/dist/ner/onnx-runtime.js +132 -0
- package/dist/ner/onnx-runtime.js.map +1 -0
- package/dist/ner/token-window.d.ts +19 -0
- package/dist/ner/token-window.d.ts.map +1 -0
- package/dist/ner/token-window.js +101 -0
- package/dist/ner/token-window.js.map +1 -0
- package/dist/ner/tokenizer.d.ts +142 -0
- package/dist/ner/tokenizer.d.ts.map +1 -0
- package/dist/ner/tokenizer.js +362 -0
- package/dist/ner/tokenizer.js.map +1 -0
- package/dist/opencode-plugin/git-identity.d.ts +3 -0
- package/dist/opencode-plugin/git-identity.d.ts.map +1 -0
- package/dist/opencode-plugin/git-identity.js +37 -0
- package/dist/opencode-plugin/git-identity.js.map +1 -0
- package/dist/opencode-plugin/github-username.d.ts +3 -0
- package/dist/opencode-plugin/github-username.d.ts.map +1 -0
- package/dist/opencode-plugin/github-username.js +41 -0
- package/dist/opencode-plugin/github-username.js.map +1 -0
- package/dist/opencode-plugin/identity-recognizer.d.ts +5 -0
- package/dist/opencode-plugin/identity-recognizer.d.ts.map +1 -0
- package/dist/opencode-plugin/identity-recognizer.js +21 -0
- package/dist/opencode-plugin/identity-recognizer.js.map +1 -0
- package/dist/opencode-plugin/index.d.ts +7 -0
- package/dist/opencode-plugin/index.d.ts.map +1 -0
- package/dist/opencode-plugin/index.js +6 -0
- package/dist/opencode-plugin/index.js.map +1 -0
- package/dist/opencode-plugin/plugin.d.ts +39 -0
- package/dist/opencode-plugin/plugin.d.ts.map +1 -0
- package/dist/opencode-plugin/plugin.js +294 -0
- package/dist/opencode-plugin/plugin.js.map +1 -0
- package/dist/opencode-plugin/types.d.ts +33 -0
- package/dist/opencode-plugin/types.d.ts.map +1 -0
- package/dist/opencode-plugin/types.js +5 -0
- package/dist/opencode-plugin/types.js.map +1 -0
- package/dist/opencode-plugin/v2/anon-state.d.ts +12 -0
- package/dist/opencode-plugin/v2/anon-state.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/anon-state.js +14 -0
- package/dist/opencode-plugin/v2/anon-state.js.map +1 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.d.ts +13 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.js +33 -0
- package/dist/opencode-plugin/v2/deep-rehydrate.js.map +1 -0
- package/dist/opencode-plugin/v2/index.d.ts +17 -0
- package/dist/opencode-plugin/v2/index.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/index.js +17 -0
- package/dist/opencode-plugin/v2/index.js.map +1 -0
- package/dist/opencode-plugin/v2/logger.d.ts +24 -0
- package/dist/opencode-plugin/v2/logger.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/logger.js +73 -0
- package/dist/opencode-plugin/v2/logger.js.map +1 -0
- package/dist/opencode-plugin/v2/options.d.ts +40 -0
- package/dist/opencode-plugin/v2/options.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/options.js +132 -0
- package/dist/opencode-plugin/v2/options.js.map +1 -0
- package/dist/opencode-plugin/v2/register-hooks.d.ts +43 -0
- package/dist/opencode-plugin/v2/register-hooks.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/register-hooks.js +160 -0
- package/dist/opencode-plugin/v2/register-hooks.js.map +1 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.d.ts +101 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.js +147 -0
- package/dist/opencode-plugin/v2/rehydrate-tail.js.map +1 -0
- package/dist/opencode-plugin/v2/response-rehydrate.d.ts +78 -0
- package/dist/opencode-plugin/v2/response-rehydrate.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/response-rehydrate.js +210 -0
- package/dist/opencode-plugin/v2/response-rehydrate.js.map +1 -0
- package/dist/opencode-plugin/v2/scrub-messages.d.ts +39 -0
- package/dist/opencode-plugin/v2/scrub-messages.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/scrub-messages.js +260 -0
- package/dist/opencode-plugin/v2/scrub-messages.js.map +1 -0
- package/dist/opencode-plugin/v2/sessions.d.ts +17 -0
- package/dist/opencode-plugin/v2/sessions.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/sessions.js +23 -0
- package/dist/opencode-plugin/v2/sessions.js.map +1 -0
- package/dist/opencode-plugin/v2/sse.d.ts +101 -0
- package/dist/opencode-plugin/v2/sse.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/sse.js +235 -0
- package/dist/opencode-plugin/v2/sse.js.map +1 -0
- package/dist/opencode-plugin/v2/types.d.ts +188 -0
- package/dist/opencode-plugin/v2/types.d.ts.map +1 -0
- package/dist/opencode-plugin/v2/types.js +10 -0
- package/dist/opencode-plugin/v2/types.js.map +1 -0
- package/dist/opencode-plugin/vcs-command.d.ts +3 -0
- package/dist/opencode-plugin/vcs-command.d.ts.map +1 -0
- package/dist/opencode-plugin/vcs-command.js +34 -0
- package/dist/opencode-plugin/vcs-command.js.map +1 -0
- package/dist/pipeline/index.d.ts +12 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +12 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/prenormalize.d.ts +48 -0
- package/dist/pipeline/prenormalize.d.ts.map +1 -0
- package/dist/pipeline/prenormalize.js +94 -0
- package/dist/pipeline/prenormalize.js.map +1 -0
- package/dist/pipeline/resolver.d.ts +56 -0
- package/dist/pipeline/resolver.d.ts.map +1 -0
- package/dist/pipeline/resolver.js +239 -0
- package/dist/pipeline/resolver.js.map +1 -0
- package/dist/pipeline/semantic-data-loader.d.ts +171 -0
- package/dist/pipeline/semantic-data-loader.d.ts.map +1 -0
- package/dist/pipeline/semantic-data-loader.js +677 -0
- package/dist/pipeline/semantic-data-loader.js.map +1 -0
- package/dist/pipeline/semantic-enricher.d.ts +112 -0
- package/dist/pipeline/semantic-enricher.d.ts.map +1 -0
- package/dist/pipeline/semantic-enricher.js +322 -0
- package/dist/pipeline/semantic-enricher.js.map +1 -0
- package/dist/pipeline/tagger.d.ts +121 -0
- package/dist/pipeline/tagger.d.ts.map +1 -0
- package/dist/pipeline/tagger.js +545 -0
- package/dist/pipeline/tagger.js.map +1 -0
- package/dist/pipeline/title-extractor.d.ts +79 -0
- package/dist/pipeline/title-extractor.d.ts.map +1 -0
- package/dist/pipeline/title-extractor.js +801 -0
- package/dist/pipeline/title-extractor.js.map +1 -0
- package/dist/pipeline/validator.d.ts +65 -0
- package/dist/pipeline/validator.d.ts.map +1 -0
- package/dist/pipeline/validator.js +292 -0
- package/dist/pipeline/validator.js.map +1 -0
- package/dist/proxy/index.d.ts +13 -0
- package/dist/proxy/index.d.ts.map +1 -0
- package/dist/proxy/index.js +12 -0
- package/dist/proxy/index.js.map +1 -0
- package/dist/proxy/providers/anthropic.d.ts +28 -0
- package/dist/proxy/providers/anthropic.d.ts.map +1 -0
- package/dist/proxy/providers/anthropic.js +265 -0
- package/dist/proxy/providers/anthropic.js.map +1 -0
- package/dist/proxy/providers/index.d.ts +19 -0
- package/dist/proxy/providers/index.d.ts.map +1 -0
- package/dist/proxy/providers/index.js +41 -0
- package/dist/proxy/providers/index.js.map +1 -0
- package/dist/proxy/providers/openai.d.ts +27 -0
- package/dist/proxy/providers/openai.d.ts.map +1 -0
- package/dist/proxy/providers/openai.js +203 -0
- package/dist/proxy/providers/openai.js.map +1 -0
- package/dist/proxy/providers/streaming-tool-loop.d.ts +12 -0
- package/dist/proxy/providers/streaming-tool-loop.d.ts.map +1 -0
- package/dist/proxy/providers/streaming-tool-loop.js +223 -0
- package/dist/proxy/providers/streaming-tool-loop.js.map +1 -0
- package/dist/proxy/providers/types.d.ts +109 -0
- package/dist/proxy/providers/types.d.ts.map +1 -0
- package/dist/proxy/providers/types.js +2 -0
- package/dist/proxy/providers/types.js.map +1 -0
- package/dist/proxy/proxy-server.d.ts +61 -0
- package/dist/proxy/proxy-server.d.ts.map +1 -0
- package/dist/proxy/proxy-server.js +146 -0
- package/dist/proxy/proxy-server.js.map +1 -0
- package/dist/proxy/rehydra-fetch.d.ts +35 -0
- package/dist/proxy/rehydra-fetch.d.ts.map +1 -0
- package/dist/proxy/rehydra-fetch.js +631 -0
- package/dist/proxy/rehydra-fetch.js.map +1 -0
- package/dist/proxy/rehydra-proxy.d.ts +40 -0
- package/dist/proxy/rehydra-proxy.d.ts.map +1 -0
- package/dist/proxy/rehydra-proxy.js +150 -0
- package/dist/proxy/rehydra-proxy.js.map +1 -0
- package/dist/proxy/sse-parser.d.ts +59 -0
- package/dist/proxy/sse-parser.d.ts.map +1 -0
- package/dist/proxy/sse-parser.js +112 -0
- package/dist/proxy/sse-parser.js.map +1 -0
- package/dist/proxy/system-instruction.d.ts +19 -0
- package/dist/proxy/system-instruction.d.ts.map +1 -0
- package/dist/proxy/system-instruction.js +33 -0
- package/dist/proxy/system-instruction.js.map +1 -0
- package/dist/proxy/tool-loop-stream.d.ts +7 -0
- package/dist/proxy/tool-loop-stream.d.ts.map +1 -0
- package/dist/proxy/tool-loop-stream.js +65 -0
- package/dist/proxy/tool-loop-stream.js.map +1 -0
- package/dist/proxy/types.d.ts +138 -0
- package/dist/proxy/types.d.ts.map +1 -0
- package/dist/proxy/types.js +5 -0
- package/dist/proxy/types.js.map +1 -0
- package/dist/proxy/wrap-client.d.ts +47 -0
- package/dist/proxy/wrap-client.d.ts.map +1 -0
- package/dist/proxy/wrap-client.js +70 -0
- package/dist/proxy/wrap-client.js.map +1 -0
- package/dist/recognizers/address.d.ts +2 -0
- package/dist/recognizers/address.d.ts.map +1 -0
- package/dist/recognizers/address.js +23 -0
- package/dist/recognizers/address.js.map +1 -0
- package/dist/recognizers/base.d.ts +78 -0
- package/dist/recognizers/base.d.ts.map +1 -0
- package/dist/recognizers/base.js +100 -0
- package/dist/recognizers/base.js.map +1 -0
- package/dist/recognizers/bic-swift.d.ts +10 -0
- package/dist/recognizers/bic-swift.d.ts.map +1 -0
- package/dist/recognizers/bic-swift.js +107 -0
- package/dist/recognizers/bic-swift.js.map +1 -0
- package/dist/recognizers/credit-card.d.ts +32 -0
- package/dist/recognizers/credit-card.d.ts.map +1 -0
- package/dist/recognizers/credit-card.js +160 -0
- package/dist/recognizers/credit-card.js.map +1 -0
- package/dist/recognizers/custom-id.d.ts +28 -0
- package/dist/recognizers/custom-id.d.ts.map +1 -0
- package/dist/recognizers/custom-id.js +116 -0
- package/dist/recognizers/custom-id.js.map +1 -0
- package/dist/recognizers/date.d.ts +10 -0
- package/dist/recognizers/date.d.ts.map +1 -0
- package/dist/recognizers/date.js +228 -0
- package/dist/recognizers/date.js.map +1 -0
- package/dist/recognizers/email.d.ts +10 -0
- package/dist/recognizers/email.d.ts.map +1 -0
- package/dist/recognizers/email.js +75 -0
- package/dist/recognizers/email.js.map +1 -0
- package/dist/recognizers/iban.d.ts +14 -0
- package/dist/recognizers/iban.d.ts.map +1 -0
- package/dist/recognizers/iban.js +67 -0
- package/dist/recognizers/iban.js.map +1 -0
- package/dist/recognizers/index.d.ts +25 -0
- package/dist/recognizers/index.d.ts.map +1 -0
- package/dist/recognizers/index.js +53 -0
- package/dist/recognizers/index.js.map +1 -0
- package/dist/recognizers/ip-address.d.ts +14 -0
- package/dist/recognizers/ip-address.d.ts.map +1 -0
- package/dist/recognizers/ip-address.js +183 -0
- package/dist/recognizers/ip-address.js.map +1 -0
- package/dist/recognizers/phone.d.ts +10 -0
- package/dist/recognizers/phone.d.ts.map +1 -0
- package/dist/recognizers/phone.js +145 -0
- package/dist/recognizers/phone.js.map +1 -0
- package/dist/recognizers/postal-code.d.ts +16 -0
- package/dist/recognizers/postal-code.d.ts.map +1 -0
- package/dist/recognizers/postal-code.js +42 -0
- package/dist/recognizers/postal-code.js.map +1 -0
- package/dist/recognizers/registry.d.ts +59 -0
- package/dist/recognizers/registry.d.ts.map +1 -0
- package/dist/recognizers/registry.js +113 -0
- package/dist/recognizers/registry.js.map +1 -0
- package/dist/recognizers/secrets/api-key.d.ts +6 -0
- package/dist/recognizers/secrets/api-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/api-key.js +40 -0
- package/dist/recognizers/secrets/api-key.js.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts +7 -0
- package/dist/recognizers/secrets/aws-credentials.d.ts.map +1 -0
- package/dist/recognizers/secrets/aws-credentials.js +68 -0
- package/dist/recognizers/secrets/aws-credentials.js.map +1 -0
- package/dist/recognizers/secrets/config-secret.d.ts +8 -0
- package/dist/recognizers/secrets/config-secret.d.ts.map +1 -0
- package/dist/recognizers/secrets/config-secret.js +59 -0
- package/dist/recognizers/secrets/config-secret.js.map +1 -0
- package/dist/recognizers/secrets/connection-string.d.ts +6 -0
- package/dist/recognizers/secrets/connection-string.d.ts.map +1 -0
- package/dist/recognizers/secrets/connection-string.js +40 -0
- package/dist/recognizers/secrets/connection-string.js.map +1 -0
- package/dist/recognizers/secrets/env-var.d.ts +8 -0
- package/dist/recognizers/secrets/env-var.d.ts.map +1 -0
- package/dist/recognizers/secrets/env-var.js +54 -0
- package/dist/recognizers/secrets/env-var.js.map +1 -0
- package/dist/recognizers/secrets/index.d.ts +22 -0
- package/dist/recognizers/secrets/index.d.ts.map +1 -0
- package/dist/recognizers/secrets/index.js +41 -0
- package/dist/recognizers/secrets/index.js.map +1 -0
- package/dist/recognizers/secrets/jwt.d.ts +6 -0
- package/dist/recognizers/secrets/jwt.d.ts.map +1 -0
- package/dist/recognizers/secrets/jwt.js +47 -0
- package/dist/recognizers/secrets/jwt.js.map +1 -0
- package/dist/recognizers/secrets/key-patterns.d.ts +10 -0
- package/dist/recognizers/secrets/key-patterns.d.ts.map +1 -0
- package/dist/recognizers/secrets/key-patterns.js +15 -0
- package/dist/recognizers/secrets/key-patterns.js.map +1 -0
- package/dist/recognizers/secrets/literal-value.d.ts +10 -0
- package/dist/recognizers/secrets/literal-value.d.ts.map +1 -0
- package/dist/recognizers/secrets/literal-value.js +48 -0
- package/dist/recognizers/secrets/literal-value.js.map +1 -0
- package/dist/recognizers/secrets/private-key.d.ts +6 -0
- package/dist/recognizers/secrets/private-key.d.ts.map +1 -0
- package/dist/recognizers/secrets/private-key.js +16 -0
- package/dist/recognizers/secrets/private-key.js.map +1 -0
- package/dist/recognizers/url.d.ts +14 -0
- package/dist/recognizers/url.d.ts.map +1 -0
- package/dist/recognizers/url.js +121 -0
- package/dist/recognizers/url.js.map +1 -0
- package/dist/storage/browser.d.ts +13 -0
- package/dist/storage/browser.d.ts.map +1 -0
- package/dist/storage/browser.js +13 -0
- package/dist/storage/browser.js.map +1 -0
- package/dist/storage/in-memory.d.ts +60 -0
- package/dist/storage/in-memory.d.ts.map +1 -0
- package/dist/storage/in-memory.js +108 -0
- package/dist/storage/in-memory.js.map +1 -0
- package/dist/storage/index.d.ts +11 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/indexeddb.d.ts +69 -0
- package/dist/storage/indexeddb.d.ts.map +1 -0
- package/dist/storage/indexeddb.js +274 -0
- package/dist/storage/indexeddb.js.map +1 -0
- package/dist/storage/session-base.d.ts +34 -0
- package/dist/storage/session-base.d.ts.map +1 -0
- package/dist/storage/session-base.js +122 -0
- package/dist/storage/session-base.js.map +1 -0
- package/dist/storage/session.d.ts +19 -0
- package/dist/storage/session.d.ts.map +1 -0
- package/dist/storage/session.js +31 -0
- package/dist/storage/session.js.map +1 -0
- package/dist/storage/sqlite.d.ts +80 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +255 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/types.d.ts +208 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +6 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/streaming/anonymizer-stream.d.ts +63 -0
- package/dist/streaming/anonymizer-stream.d.ts.map +1 -0
- package/dist/streaming/anonymizer-stream.js +184 -0
- package/dist/streaming/anonymizer-stream.js.map +1 -0
- package/dist/streaming/index.d.ts +9 -0
- package/dist/streaming/index.d.ts.map +1 -0
- package/dist/streaming/index.js +8 -0
- package/dist/streaming/index.js.map +1 -0
- package/dist/streaming/sentence-buffer.d.ts +78 -0
- package/dist/streaming/sentence-buffer.d.ts.map +1 -0
- package/dist/streaming/sentence-buffer.js +239 -0
- package/dist/streaming/sentence-buffer.js.map +1 -0
- package/dist/streaming/stream-factory.d.ts +38 -0
- package/dist/streaming/stream-factory.d.ts.map +1 -0
- package/dist/streaming/stream-factory.js +69 -0
- package/dist/streaming/stream-factory.js.map +1 -0
- package/dist/streaming/types.d.ts +121 -0
- package/dist/streaming/types.d.ts.map +1 -0
- package/dist/streaming/types.js +5 -0
- package/dist/streaming/types.js.map +1 -0
- package/dist/types/index.d.ts +269 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +95 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/pii-types.d.ts +64 -0
- package/dist/types/pii-types.d.ts.map +1 -0
- package/dist/types/pii-types.js +153 -0
- package/dist/types/pii-types.js.map +1 -0
- package/dist/utils/iban-checksum.d.ts +23 -0
- package/dist/utils/iban-checksum.d.ts.map +1 -0
- package/dist/utils/iban-checksum.js +106 -0
- package/dist/utils/iban-checksum.js.map +1 -0
- package/dist/utils/index.d.ts +11 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +11 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/json-walk.d.ts +21 -0
- package/dist/utils/json-walk.d.ts.map +1 -0
- package/dist/utils/json-walk.js +44 -0
- package/dist/utils/json-walk.js.map +1 -0
- package/dist/utils/luhn.d.ts +17 -0
- package/dist/utils/luhn.d.ts.map +1 -0
- package/dist/utils/luhn.js +55 -0
- package/dist/utils/luhn.js.map +1 -0
- package/dist/utils/offsets.d.ts +86 -0
- package/dist/utils/offsets.d.ts.map +1 -0
- package/dist/utils/offsets.js +124 -0
- package/dist/utils/offsets.js.map +1 -0
- package/dist/utils/path.d.ts +34 -0
- package/dist/utils/path.d.ts.map +1 -0
- package/dist/utils/path.js +96 -0
- package/dist/utils/path.js.map +1 -0
- package/dist/utils/regex.d.ts +11 -0
- package/dist/utils/regex.d.ts.map +1 -0
- package/dist/utils/regex.js +14 -0
- package/dist/utils/regex.js.map +1 -0
- package/dist/utils/storage-browser.d.ts +51 -0
- package/dist/utils/storage-browser.d.ts.map +1 -0
- package/dist/utils/storage-browser.js +381 -0
- package/dist/utils/storage-browser.js.map +1 -0
- package/dist/utils/storage-node.d.ts +51 -0
- package/dist/utils/storage-node.d.ts.map +1 -0
- package/dist/utils/storage-node.js +153 -0
- package/dist/utils/storage-node.js.map +1 -0
- package/dist/utils/storage.browser.d.ts +75 -0
- package/dist/utils/storage.browser.d.ts.map +1 -0
- package/dist/utils/storage.browser.js +69 -0
- package/dist/utils/storage.browser.js.map +1 -0
- package/dist/utils/storage.d.ts +73 -0
- package/dist/utils/storage.d.ts.map +1 -0
- package/dist/utils/storage.js +69 -0
- package/dist/utils/storage.js.map +1 -0
- package/package.json +148 -0
|
@@ -0,0 +1,555 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Anonymizer Module
|
|
3
|
+
* Shared implementation for both browser and Node.js entry points
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DEFAULT_TAG_FORMAT, createDefaultPolicy, SECRET_PII_TYPES, } from "../types/index.js";
|
|
6
|
+
import { createDefaultRegistry, createSecretRecognizers, } from "../recognizers/index.js";
|
|
7
|
+
import { createLiteralValueRecognizer } from "../recognizers/secrets/literal-value.js";
|
|
8
|
+
import { NERModelStub, createNERModel, createInferenceServerNERModel, } from "../ner/index.js";
|
|
9
|
+
import { ensureModel, loadLabelMap, } from "../ner/model-manager.js";
|
|
10
|
+
import { prenormalize } from "../pipeline/prenormalize.js";
|
|
11
|
+
import { resolveEntities } from "../pipeline/resolver.js";
|
|
12
|
+
import { tagEntities, countEntitiesByType, } from "../pipeline/tagger.js";
|
|
13
|
+
import { validateOutput } from "../pipeline/validator.js";
|
|
14
|
+
import { enrichSemantics } from "../pipeline/semantic-enricher.js";
|
|
15
|
+
import { ensureSemanticData, isSemanticDataAvailable, loadSemanticData, } from "../pipeline/semantic-data-loader.js";
|
|
16
|
+
import { extractTitlesFromSpans, mergeAdjacentTitleSpans, } from "../pipeline/title-extractor.js";
|
|
17
|
+
import { encryptPIIMap, generateKey, } from "../crypto/index.js";
|
|
18
|
+
import { getStorageProvider } from "#storage";
|
|
19
|
+
/**
|
|
20
|
+
* Merges a partial policy with a base policy (deep merge for Maps/Sets)
|
|
21
|
+
* Unlike the exported mergePolicy, this uses a custom base instead of global defaults
|
|
22
|
+
*/
|
|
23
|
+
function mergePolicyWithBase(base, partial) {
|
|
24
|
+
// Deep merge confidenceThresholds Map
|
|
25
|
+
let confidenceThresholds = base.confidenceThresholds;
|
|
26
|
+
if (partial.confidenceThresholds !== undefined) {
|
|
27
|
+
confidenceThresholds = new Map(base.confidenceThresholds);
|
|
28
|
+
for (const [type, threshold] of partial.confidenceThresholds) {
|
|
29
|
+
confidenceThresholds.set(type, threshold);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
enabledTypes: partial.enabledTypes ?? base.enabledTypes,
|
|
34
|
+
regexEnabledTypes: partial.regexEnabledTypes ?? base.regexEnabledTypes,
|
|
35
|
+
nerEnabledTypes: partial.nerEnabledTypes ?? base.nerEnabledTypes,
|
|
36
|
+
typePriority: partial.typePriority ?? base.typePriority,
|
|
37
|
+
confidenceThresholds,
|
|
38
|
+
customIdPatterns: partial.customIdPatterns ?? base.customIdPatterns,
|
|
39
|
+
allowlistTerms: partial.allowlistTerms ?? base.allowlistTerms,
|
|
40
|
+
denylistPatterns: partial.denylistPatterns ?? base.denylistPatterns,
|
|
41
|
+
reuseIdsForRepeatedPII: partial.reuseIdsForRepeatedPII ?? base.reuseIdsForRepeatedPII,
|
|
42
|
+
enableLeakScan: partial.enableLeakScan ?? base.enableLeakScan,
|
|
43
|
+
enableSemanticMasking: partial.enableSemanticMasking ?? base.enableSemanticMasking,
|
|
44
|
+
excludeLocationScopes: partial.excludeLocationScopes ?? base.excludeLocationScopes,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Anonymizer instance
|
|
49
|
+
* Main class for performing PII anonymization
|
|
50
|
+
*/
|
|
51
|
+
export class Anonymizer {
|
|
52
|
+
registry;
|
|
53
|
+
nerModel = null;
|
|
54
|
+
nerConfig;
|
|
55
|
+
semanticConfig;
|
|
56
|
+
secretsConfig;
|
|
57
|
+
mode;
|
|
58
|
+
keyProvider;
|
|
59
|
+
piiStorageProvider;
|
|
60
|
+
defaultPolicy;
|
|
61
|
+
modelVersion;
|
|
62
|
+
policyVersion;
|
|
63
|
+
initialized = false;
|
|
64
|
+
semanticDataReady = false;
|
|
65
|
+
sessionFactory;
|
|
66
|
+
onValidationWarning;
|
|
67
|
+
tagFormat;
|
|
68
|
+
constructor(config = {}, sessionFactory) {
|
|
69
|
+
this.registry = config.registry ?? createDefaultRegistry();
|
|
70
|
+
this.mode = config.mode ?? "pseudonymize";
|
|
71
|
+
this.keyProvider = config.keyProvider ?? null;
|
|
72
|
+
this.piiStorageProvider = config.piiStorageProvider ?? null;
|
|
73
|
+
this.defaultPolicy = config.defaultPolicy
|
|
74
|
+
? mergePolicyWithBase(createDefaultPolicy(), config.defaultPolicy)
|
|
75
|
+
: createDefaultPolicy();
|
|
76
|
+
this.policyVersion = config.policyVersion ?? "1.0.0";
|
|
77
|
+
this.sessionFactory = sessionFactory ?? null;
|
|
78
|
+
this.onValidationWarning = config.onValidationWarning ?? null;
|
|
79
|
+
this.tagFormat = config.tagFormat ?? DEFAULT_TAG_FORMAT;
|
|
80
|
+
// Validate tag format fields
|
|
81
|
+
if (!this.tagFormat.open || !this.tagFormat.close) {
|
|
82
|
+
throw new Error("TagFormat: open and close delimiters must be non-empty strings");
|
|
83
|
+
}
|
|
84
|
+
// Handle NER configuration
|
|
85
|
+
this.nerConfig = config.ner ?? { mode: "disabled" };
|
|
86
|
+
this.modelVersion = config.modelVersion ?? "1.0.0";
|
|
87
|
+
// Merge NER thresholds into default policy if provided
|
|
88
|
+
if (this.nerConfig.thresholds !== undefined) {
|
|
89
|
+
const thresholdsMap = new Map(this.defaultPolicy.confidenceThresholds);
|
|
90
|
+
for (const [type, threshold] of Object.entries(this.nerConfig.thresholds)) {
|
|
91
|
+
if (threshold !== undefined) {
|
|
92
|
+
thresholdsMap.set(type, threshold);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
this.defaultPolicy = {
|
|
96
|
+
...this.defaultPolicy,
|
|
97
|
+
confidenceThresholds: thresholdsMap,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// Handle semantic configuration
|
|
101
|
+
this.semanticConfig = config.semantic ?? { enabled: false };
|
|
102
|
+
// If semantic is enabled, also enable it in the default policy
|
|
103
|
+
if (this.semanticConfig.enabled) {
|
|
104
|
+
this.defaultPolicy = {
|
|
105
|
+
...this.defaultPolicy,
|
|
106
|
+
enableSemanticMasking: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Handle secrets configuration
|
|
110
|
+
this.secretsConfig = config.secrets ?? { enabled: false };
|
|
111
|
+
if (this.secretsConfig.enabled) {
|
|
112
|
+
// Add secret types to enabled types and regex enabled types
|
|
113
|
+
const enabledTypes = new Set(this.defaultPolicy.enabledTypes);
|
|
114
|
+
const regexEnabledTypes = new Set(this.defaultPolicy.regexEnabledTypes);
|
|
115
|
+
for (const secretType of SECRET_PII_TYPES) {
|
|
116
|
+
enabledTypes.add(secretType);
|
|
117
|
+
regexEnabledTypes.add(secretType);
|
|
118
|
+
}
|
|
119
|
+
this.defaultPolicy = {
|
|
120
|
+
...this.defaultPolicy,
|
|
121
|
+
enabledTypes,
|
|
122
|
+
regexEnabledTypes,
|
|
123
|
+
};
|
|
124
|
+
// Register secret recognizers
|
|
125
|
+
for (const recognizer of createSecretRecognizers({
|
|
126
|
+
secretKeyPatterns: this.secretsConfig.secretKeyPatterns,
|
|
127
|
+
minValueLength: this.secretsConfig.minValueLength,
|
|
128
|
+
})) {
|
|
129
|
+
this.registry.register(recognizer);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Returns the resolved tag format configuration
|
|
135
|
+
*/
|
|
136
|
+
get resolvedTagFormat() {
|
|
137
|
+
return this.tagFormat;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Initializes the anonymizer
|
|
141
|
+
* Downloads NER model and semantic data if needed and loads them
|
|
142
|
+
*/
|
|
143
|
+
async initialize() {
|
|
144
|
+
if (this.initialized)
|
|
145
|
+
return;
|
|
146
|
+
// Handle NER model setup based on mode and backend
|
|
147
|
+
if (this.nerConfig.mode === "disabled") {
|
|
148
|
+
this.nerModel = new NERModelStub();
|
|
149
|
+
}
|
|
150
|
+
else if (this.nerConfig.backend === "inference-server") {
|
|
151
|
+
// Inference server backend - use remote GPU inference
|
|
152
|
+
if (this.nerConfig.inferenceServerUrl === undefined ||
|
|
153
|
+
this.nerConfig.inferenceServerUrl === "") {
|
|
154
|
+
throw new Error("NER backend 'inference-server' requires inferenceServerUrl to be set.\n\n" +
|
|
155
|
+
"Example:\n" +
|
|
156
|
+
" createAnonymizer({\n" +
|
|
157
|
+
" ner: {\n" +
|
|
158
|
+
" mode: 'quantized',\n" +
|
|
159
|
+
" backend: 'inference-server',\n" +
|
|
160
|
+
" inferenceServerUrl: 'http://localhost:8080',\n" +
|
|
161
|
+
" }\n" +
|
|
162
|
+
" })");
|
|
163
|
+
}
|
|
164
|
+
this.nerModel = createInferenceServerNERModel({
|
|
165
|
+
serverUrl: this.nerConfig.inferenceServerUrl,
|
|
166
|
+
timeout: this.nerConfig.inferenceServerTimeout,
|
|
167
|
+
modelVersion: this.modelVersion,
|
|
168
|
+
onStatus: this.nerConfig.onStatus,
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
else if (this.nerConfig.mode === "custom") {
|
|
172
|
+
// Custom ONNX model paths
|
|
173
|
+
if (this.nerConfig.modelPath === undefined ||
|
|
174
|
+
this.nerConfig.modelPath === "" ||
|
|
175
|
+
this.nerConfig.vocabPath === undefined ||
|
|
176
|
+
this.nerConfig.vocabPath === "") {
|
|
177
|
+
throw new Error("NER mode 'custom' requires modelPath and vocabPath");
|
|
178
|
+
}
|
|
179
|
+
this.nerModel = createNERModel({
|
|
180
|
+
modelPath: this.nerConfig.modelPath,
|
|
181
|
+
vocabPath: this.nerConfig.vocabPath,
|
|
182
|
+
modelVersion: this.modelVersion,
|
|
183
|
+
sessionOptions: this.nerConfig.sessionOptions,
|
|
184
|
+
caseFallback: this.nerConfig.caseFallback,
|
|
185
|
+
caseFallbackPenalty: this.nerConfig.caseFallbackPenalty,
|
|
186
|
+
windowOverlapTokens: this.nerConfig.windowOverlapTokens,
|
|
187
|
+
maxWindowsPerInput: this.nerConfig.maxWindowsPerInput,
|
|
188
|
+
onWindowCap: this.nerConfig.onWindowCap,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
// 'standard' or 'quantized' - use model manager with local ONNX
|
|
193
|
+
const { modelPath, vocabPath, labelMapPath } = await ensureModel(this.nerConfig.mode, {
|
|
194
|
+
autoDownload: this.nerConfig.autoDownload ?? true,
|
|
195
|
+
onProgress: this.nerConfig.onDownloadProgress,
|
|
196
|
+
onStatus: this.nerConfig.onStatus,
|
|
197
|
+
});
|
|
198
|
+
// Load label map (falls back to the registry map for this mode, which
|
|
199
|
+
// matches the model head — never a generic default)
|
|
200
|
+
const labelMap = await loadLabelMap(this.nerConfig.mode, labelMapPath);
|
|
201
|
+
this.nerModel = createNERModel({
|
|
202
|
+
modelPath,
|
|
203
|
+
vocabPath,
|
|
204
|
+
labelMap,
|
|
205
|
+
modelVersion: this.modelVersion,
|
|
206
|
+
sessionOptions: this.nerConfig.sessionOptions,
|
|
207
|
+
caseFallback: this.nerConfig.caseFallback,
|
|
208
|
+
caseFallbackPenalty: this.nerConfig.caseFallbackPenalty,
|
|
209
|
+
windowOverlapTokens: this.nerConfig.windowOverlapTokens,
|
|
210
|
+
maxWindowsPerInput: this.nerConfig.maxWindowsPerInput,
|
|
211
|
+
onWindowCap: this.nerConfig.onWindowCap,
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Load the NER model
|
|
215
|
+
if (!this.nerModel.loaded) {
|
|
216
|
+
this.nerConfig.onStatus?.("Loading NER model...");
|
|
217
|
+
await this.nerModel.load();
|
|
218
|
+
this.nerConfig.onStatus?.("NER model loaded!");
|
|
219
|
+
}
|
|
220
|
+
// Handle semantic data setup if enabled
|
|
221
|
+
if (this.semanticConfig.enabled) {
|
|
222
|
+
const autoDownload = this.semanticConfig.autoDownload ?? true;
|
|
223
|
+
// Check if data is already available
|
|
224
|
+
const dataAvailable = await isSemanticDataAvailable();
|
|
225
|
+
if (!dataAvailable) {
|
|
226
|
+
if (!autoDownload) {
|
|
227
|
+
throw new Error("Semantic masking is enabled but data files are not available.\n\n" +
|
|
228
|
+
"To download automatically, use:\n" +
|
|
229
|
+
" createAnonymizer({ semantic: { enabled: true, autoDownload: true } })\n\n" +
|
|
230
|
+
"Or disable semantic masking:\n" +
|
|
231
|
+
" createAnonymizer({ semantic: { enabled: false } })");
|
|
232
|
+
}
|
|
233
|
+
// Download semantic data
|
|
234
|
+
await ensureSemanticData({
|
|
235
|
+
autoDownload: true,
|
|
236
|
+
onProgress: this.semanticConfig.onDownloadProgress,
|
|
237
|
+
onStatus: this.semanticConfig.onStatus,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
this.semanticConfig.onStatus?.("Semantic data already cached");
|
|
242
|
+
}
|
|
243
|
+
// Load data into memory for synchronous access during enrichment
|
|
244
|
+
await loadSemanticData();
|
|
245
|
+
this.semanticDataReady = true;
|
|
246
|
+
}
|
|
247
|
+
// Handle secrets .env file loading and literal value matching
|
|
248
|
+
if (this.secretsConfig.enabled) {
|
|
249
|
+
const literalValues = [
|
|
250
|
+
...(this.secretsConfig.redactValues ?? []),
|
|
251
|
+
];
|
|
252
|
+
const minLength = this.secretsConfig.minValueLength ?? 4;
|
|
253
|
+
// Parse .env files if provided
|
|
254
|
+
if (this.secretsConfig.envFiles !== undefined && this.secretsConfig.envFiles.length > 0) {
|
|
255
|
+
const storage = await getStorageProvider();
|
|
256
|
+
const envFiles = storage.resolveFiles !== undefined
|
|
257
|
+
? await storage.resolveFiles(this.secretsConfig.envFiles, this.secretsConfig.envBaseDirectory)
|
|
258
|
+
: this.secretsConfig.envFiles;
|
|
259
|
+
for (const envFile of envFiles) {
|
|
260
|
+
try {
|
|
261
|
+
const content = await storage.readTextFile(envFile);
|
|
262
|
+
const parsed = parseEnvFile(content);
|
|
263
|
+
literalValues.push(...parsed);
|
|
264
|
+
}
|
|
265
|
+
catch {
|
|
266
|
+
// Skip files that can't be read
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
// Register literal value recognizer if we have values
|
|
271
|
+
if (literalValues.length > 0) {
|
|
272
|
+
this.registry.register(createLiteralValueRecognizer(literalValues, minLength));
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
this.modelVersion = this.nerModel.version;
|
|
276
|
+
this.initialized = true;
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* Anonymizes text, replacing PII with placeholder tags
|
|
280
|
+
* @param text - Input text to anonymize
|
|
281
|
+
* @param locale - Optional locale hint (e.g., 'de-DE', 'en-US')
|
|
282
|
+
* @param policy - Optional policy override
|
|
283
|
+
* @param existingPiiMap - Optional existing PII map for session-level ID reuse
|
|
284
|
+
* @returns Anonymization result with anonymized text and encrypted PII map
|
|
285
|
+
*/
|
|
286
|
+
async anonymize(text, locale, policy, existingPiiMap) {
|
|
287
|
+
if (!this.initialized) {
|
|
288
|
+
await this.initialize();
|
|
289
|
+
}
|
|
290
|
+
const startTime = performance.now();
|
|
291
|
+
// Merge policy with instance defaults (not global defaults)
|
|
292
|
+
// This ensures semantic config from constructor is preserved
|
|
293
|
+
// Uses deep merge for Maps (confidenceThresholds) and Sets
|
|
294
|
+
const effectivePolicy = policy !== undefined
|
|
295
|
+
? mergePolicyWithBase(this.defaultPolicy, policy)
|
|
296
|
+
: this.defaultPolicy;
|
|
297
|
+
// Step 1: Pre-normalize text
|
|
298
|
+
const normalizedText = prenormalize(text);
|
|
299
|
+
// Step 2: Run regex recognizers
|
|
300
|
+
const regexMatches = this.registry.findAll(normalizedText, effectivePolicy);
|
|
301
|
+
// Step 3: Run NER model
|
|
302
|
+
const nerResult = await this.nerModel.predict(normalizedText, effectivePolicy);
|
|
303
|
+
const nerMatches = nerResult.spans;
|
|
304
|
+
// Step 4: Resolve and merge entities
|
|
305
|
+
const resolvedMatches = resolveEntities(regexMatches, nerMatches, effectivePolicy, normalizedText);
|
|
306
|
+
// Step 4.5: Merge adjacent title+name PERSON spans (if semantic masking enabled)
|
|
307
|
+
// This fixes NER models that split "Mrs. Smith" into two entities
|
|
308
|
+
const mergedMatches = effectivePolicy.enableSemanticMasking === true
|
|
309
|
+
? mergeAdjacentTitleSpans(resolvedMatches, normalizedText)
|
|
310
|
+
: resolvedMatches;
|
|
311
|
+
// Step 4.6: Extract titles from PERSON entities (if semantic masking enabled)
|
|
312
|
+
// This strips honorific titles (Dr., Mrs., etc.) so they remain visible for translation
|
|
313
|
+
const titleExtractedMatches = effectivePolicy.enableSemanticMasking
|
|
314
|
+
? extractTitlesFromSpans(mergedMatches, normalizedText)
|
|
315
|
+
: mergedMatches;
|
|
316
|
+
// Step 4.6: Enrich with semantic attributes (if enabled)
|
|
317
|
+
// This adds gender for PERSON and scope for LOCATION entities
|
|
318
|
+
const enrichedMatches = effectivePolicy.enableSemanticMasking
|
|
319
|
+
? enrichSemantics(titleExtractedMatches, {
|
|
320
|
+
locale: locale !== undefined ? locale.split("-")[0] : undefined, // Extract language code
|
|
321
|
+
})
|
|
322
|
+
: titleExtractedMatches;
|
|
323
|
+
// Step 4.7: Filter out LOCATION spans whose scope is excluded
|
|
324
|
+
const scopeFilteredMatches = effectivePolicy.enableSemanticMasking &&
|
|
325
|
+
effectivePolicy.excludeLocationScopes.size > 0
|
|
326
|
+
? enrichedMatches.filter((span) => span.type !== PIIType.LOCATION ||
|
|
327
|
+
!effectivePolicy.excludeLocationScopes.has(span.semantic?.scope ?? "unknown"))
|
|
328
|
+
: enrichedMatches;
|
|
329
|
+
// Step 5: Tag entities and build PII map
|
|
330
|
+
const { anonymizedText, entities, piiMap } = tagEntities(normalizedText, scopeFilteredMatches, effectivePolicy, existingPiiMap, this.tagFormat);
|
|
331
|
+
// Step 6: Validate output
|
|
332
|
+
const validation = validateOutput(anonymizedText, entities, Array.from(piiMap.keys()), effectivePolicy, this.tagFormat);
|
|
333
|
+
if (!validation.valid && this.onValidationWarning) {
|
|
334
|
+
const safeErrors = validation.errors.map((e) => ({
|
|
335
|
+
code: e.code,
|
|
336
|
+
message: e.message,
|
|
337
|
+
}));
|
|
338
|
+
this.onValidationWarning(safeErrors);
|
|
339
|
+
}
|
|
340
|
+
// Step 7: Build stats
|
|
341
|
+
const endTime = performance.now();
|
|
342
|
+
const stats = {
|
|
343
|
+
countsByType: countEntitiesByType(entities),
|
|
344
|
+
totalEntities: entities.length,
|
|
345
|
+
modelVersion: this.modelVersion,
|
|
346
|
+
policyVersion: this.policyVersion,
|
|
347
|
+
processingTimeMs: endTime - startTime,
|
|
348
|
+
leakScanPassed: validation.leakScanPassed,
|
|
349
|
+
nerTruncated: nerResult.truncated,
|
|
350
|
+
nerCoverageChars: nerResult.coverageChars,
|
|
351
|
+
};
|
|
352
|
+
// Step 8: Build result (without original text in entities)
|
|
353
|
+
const safeEntities = entities.map(({ original: _original, ...rest }) => rest);
|
|
354
|
+
// Step 9: Encrypt PII map (only in pseudonymize mode)
|
|
355
|
+
if (this.mode === "anonymize") {
|
|
356
|
+
// Pure anonymization mode - no PII map returned
|
|
357
|
+
return {
|
|
358
|
+
anonymizedText,
|
|
359
|
+
entities: safeEntities,
|
|
360
|
+
stats,
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
// Pseudonymize mode - encrypt and return PII map
|
|
364
|
+
const encryptionKey = this.keyProvider !== null
|
|
365
|
+
? await this.keyProvider.getKey()
|
|
366
|
+
: generateKey();
|
|
367
|
+
const encryptedPiiMap = await encryptPIIMap(piiMap, encryptionKey);
|
|
368
|
+
return {
|
|
369
|
+
anonymizedText,
|
|
370
|
+
entities: safeEntities,
|
|
371
|
+
piiMap: encryptedPiiMap,
|
|
372
|
+
stats,
|
|
373
|
+
};
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Disposes of resources
|
|
377
|
+
*/
|
|
378
|
+
async dispose() {
|
|
379
|
+
if (this.nerModel) {
|
|
380
|
+
await this.nerModel.dispose();
|
|
381
|
+
}
|
|
382
|
+
this.initialized = false;
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Gets the recognizer registry
|
|
386
|
+
*/
|
|
387
|
+
getRegistry() {
|
|
388
|
+
return this.registry;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Gets the NER model
|
|
392
|
+
*/
|
|
393
|
+
getNERModel() {
|
|
394
|
+
return this.nerModel;
|
|
395
|
+
}
|
|
396
|
+
/**
|
|
397
|
+
* Whether the anonymizer is initialized
|
|
398
|
+
*/
|
|
399
|
+
get isInitialized() {
|
|
400
|
+
return this.initialized;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Creates a session-bound interface for automatic PII map storage
|
|
404
|
+
*
|
|
405
|
+
* @param sessionId - Unique identifier for this session/conversation
|
|
406
|
+
* @returns AnonymizerSession that auto-saves on anonymize and auto-loads on rehydrate
|
|
407
|
+
* @throws Error if piiStorageProvider was not configured
|
|
408
|
+
*
|
|
409
|
+
* @example
|
|
410
|
+
* ```typescript
|
|
411
|
+
* const session = anonymizer.session('chat-123');
|
|
412
|
+
*
|
|
413
|
+
* // Anonymize - auto-saves to storage
|
|
414
|
+
* const result = await session.anonymize('Hello John Smith!');
|
|
415
|
+
*
|
|
416
|
+
* // Rehydrate - auto-loads and decrypts
|
|
417
|
+
* const original = await session.rehydrate(translatedText);
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
session(sessionId) {
|
|
421
|
+
if (this.mode === "anonymize") {
|
|
422
|
+
throw new Error("Cannot create session: anonymizer is in 'anonymize' mode.\n\n" +
|
|
423
|
+
"Sessions require PII map storage for rehydration, which is not available " +
|
|
424
|
+
"in pure anonymization mode.\n\n" +
|
|
425
|
+
"To use sessions, configure the anonymizer with 'pseudonymize' mode (default):\n" +
|
|
426
|
+
" const anonymizer = createAnonymizer({\n" +
|
|
427
|
+
" mode: 'pseudonymize',\n" +
|
|
428
|
+
" piiStorageProvider: new InMemoryPIIStorageProvider(),\n" +
|
|
429
|
+
" keyProvider: new InMemoryKeyProvider(),\n" +
|
|
430
|
+
" });");
|
|
431
|
+
}
|
|
432
|
+
if (this.piiStorageProvider === null) {
|
|
433
|
+
throw new Error("Cannot create session: piiStorageProvider not configured.\n\n" +
|
|
434
|
+
"Configure storage when creating the anonymizer:\n" +
|
|
435
|
+
" const anonymizer = createAnonymizer({\n" +
|
|
436
|
+
" piiStorageProvider: new InMemoryPIIStorageProvider(),\n" +
|
|
437
|
+
" keyProvider: new InMemoryKeyProvider(),\n" +
|
|
438
|
+
" });");
|
|
439
|
+
}
|
|
440
|
+
if (this.keyProvider === null) {
|
|
441
|
+
throw new Error("Cannot create session: keyProvider not configured.\n\n" +
|
|
442
|
+
"A key provider is required for session-based storage to decrypt PII maps.\n" +
|
|
443
|
+
"Configure it when creating the anonymizer:\n" +
|
|
444
|
+
" const anonymizer = createAnonymizer({\n" +
|
|
445
|
+
" piiStorageProvider: storage,\n" +
|
|
446
|
+
" keyProvider: new InMemoryKeyProvider(),\n" +
|
|
447
|
+
" });");
|
|
448
|
+
}
|
|
449
|
+
if (this.sessionFactory === null) {
|
|
450
|
+
throw new Error("Session factory not configured. This is an internal error.");
|
|
451
|
+
}
|
|
452
|
+
return this.sessionFactory(this, sessionId, this.piiStorageProvider, this.keyProvider);
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Creates an anonymizer with the specified configuration
|
|
457
|
+
*
|
|
458
|
+
* @example
|
|
459
|
+
* ```typescript
|
|
460
|
+
* // Regex-only (no NER)
|
|
461
|
+
* const anonymizer = createAnonymizer();
|
|
462
|
+
*
|
|
463
|
+
* // With NER (auto-downloads model on first use)
|
|
464
|
+
* const anonymizer = createAnonymizer({
|
|
465
|
+
* ner: { mode: 'quantized' }
|
|
466
|
+
* });
|
|
467
|
+
*
|
|
468
|
+
* // With NER and progress callback
|
|
469
|
+
* const anonymizer = createAnonymizer({
|
|
470
|
+
* ner: {
|
|
471
|
+
* mode: 'standard',
|
|
472
|
+
* onStatus: (status) => console.log(status),
|
|
473
|
+
* onDownloadProgress: (p) => console.log(`${p.file}: ${p.percent}%`)
|
|
474
|
+
* }
|
|
475
|
+
* });
|
|
476
|
+
* ```
|
|
477
|
+
*/
|
|
478
|
+
export function createAnonymizer(config, sessionFactory) {
|
|
479
|
+
return new Anonymizer(config, sessionFactory);
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Convenience function for one-off anonymization
|
|
483
|
+
* Creates a temporary anonymizer with default settings (regex-only)
|
|
484
|
+
*/
|
|
485
|
+
export async function anonymize(text, locale, policy) {
|
|
486
|
+
const anonymizer = createAnonymizer();
|
|
487
|
+
await anonymizer.initialize();
|
|
488
|
+
try {
|
|
489
|
+
return await anonymizer.anonymize(text, locale, policy);
|
|
490
|
+
}
|
|
491
|
+
finally {
|
|
492
|
+
await anonymizer.dispose();
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Quick regex-only anonymization (no NER, faster)
|
|
497
|
+
*/
|
|
498
|
+
export async function anonymizeRegexOnly(text, policy) {
|
|
499
|
+
// Create policy with NER disabled
|
|
500
|
+
const regexOnlyPolicy = {
|
|
501
|
+
...policy,
|
|
502
|
+
nerEnabledTypes: new Set(), // Disable all NER types
|
|
503
|
+
};
|
|
504
|
+
return anonymize(text, undefined, regexOnlyPolicy);
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Full anonymization with NER
|
|
508
|
+
* Auto-downloads the quantized model on first use
|
|
509
|
+
*
|
|
510
|
+
* @example
|
|
511
|
+
* ```typescript
|
|
512
|
+
* const result = await anonymizeWithNER(
|
|
513
|
+
* 'Contact John Smith at john@example.com',
|
|
514
|
+
* {
|
|
515
|
+
* mode: 'quantized',
|
|
516
|
+
* onStatus: console.log
|
|
517
|
+
* }
|
|
518
|
+
* );
|
|
519
|
+
* ```
|
|
520
|
+
*/
|
|
521
|
+
export async function anonymizeWithNER(text, nerConfig, policy) {
|
|
522
|
+
const anonymizer = createAnonymizer({
|
|
523
|
+
ner: {
|
|
524
|
+
mode: nerConfig.mode ?? "quantized",
|
|
525
|
+
...nerConfig,
|
|
526
|
+
},
|
|
527
|
+
});
|
|
528
|
+
await anonymizer.initialize();
|
|
529
|
+
try {
|
|
530
|
+
return await anonymizer.anonymize(text, undefined, policy);
|
|
531
|
+
}
|
|
532
|
+
finally {
|
|
533
|
+
await anonymizer.dispose();
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
/**
|
|
537
|
+
* Parses a .env file content and returns values
|
|
538
|
+
*/
|
|
539
|
+
function parseEnvFile(content) {
|
|
540
|
+
const values = [];
|
|
541
|
+
const lines = content.split("\n");
|
|
542
|
+
for (const line of lines) {
|
|
543
|
+
const trimmed = line.trim();
|
|
544
|
+
// Skip comments and empty lines
|
|
545
|
+
if (trimmed === "" || trimmed.startsWith("#"))
|
|
546
|
+
continue;
|
|
547
|
+
// Match KEY=VALUE (with optional export prefix and quotes)
|
|
548
|
+
const match = trimmed.match(/^(?:export\s+)?[A-Za-z_][A-Za-z0-9_]*\s*=\s*["']?(.*?)["']?$/);
|
|
549
|
+
if (match !== null && match[1] !== undefined && match[1] !== "") {
|
|
550
|
+
values.push(match[1]);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
return values;
|
|
554
|
+
}
|
|
555
|
+
//# sourceMappingURL=anonymizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anonymizer.js","sourceRoot":"","sources":["../../src/core/anonymizer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EASL,OAAO,EAEP,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,qBAAqB,EAErB,uBAAuB,GACxB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AAEvF,OAAO,EAEL,YAAY,EACZ,cAAc,EACd,6BAA6B,GAE9B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAEL,WAAW,EACX,YAAY,GAEb,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,mBAAmB,GAEpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,aAAa,EACb,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAc9C;;;GAGG;AACH,SAAS,mBAAmB,CAC1B,IAAyB,EACzB,OAAqC;IAErC,sCAAsC;IACtC,IAAI,oBAAoB,GAAG,IAAI,CAAC,oBAAoB,CAAC;IACrD,IAAI,OAAO,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;QAC/C,oBAAoB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC7D,oBAAoB,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;QACvD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB;QACtE,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe;QAChE,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY;QACvD,oBAAoB;QACpB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB;QACnE,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAC7D,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAC,gBAAgB;QACnE,sBAAsB,EACpB,OAAO,CAAC,sBAAsB,IAAI,IAAI,CAAC,sBAAsB;QAC/D,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc;QAC7D,qBAAqB,EACnB,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB;QAC7D,qBAAqB,EACnB,OAAO,CAAC,qBAAqB,IAAI,IAAI,CAAC,qBAAqB;KAC9D,CAAC;AACJ,CAAC;AAsMD;;;GAGG;AACH,MAAM,OAAO,UAAU;IACb,QAAQ,CAAqB;IAC7B,QAAQ,GAAqB,IAAI,CAAC;IAClC,SAAS,CAAY;IACrB,cAAc,CAAiB;IAC/B,aAAa,CAAgB;IAC7B,IAAI,CAAoB;IACxB,WAAW,CAAqB;IAChC,kBAAkB,CAA4B;IAC9C,aAAa,CAAsB;IACnC,YAAY,CAAS;IACrB,aAAa,CAAS;IACtB,WAAW,GAAG,KAAK,CAAC;IACpB,iBAAiB,GAAG,KAAK,CAAC;IAC1B,cAAc,CAAwB;IACtC,mBAAmB,CAAwE;IAC3F,SAAS,CAAY;IAE7B,YAAY,SAA2B,EAAE,EAAE,cAA+B;QACxE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,qBAAqB,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,cAAc,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,IAAI,CAAC;QAC9C,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,IAAI,CAAC;QAC5D,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa;YACvC,CAAC,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,EAAE,MAAM,CAAC,aAAa,CAAC;YAClE,CAAC,CAAC,mBAAmB,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,OAAO,CAAC;QACrD,IAAI,CAAC,cAAc,GAAG,cAAc,IAAI,IAAI,CAAC;QAC7C,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,kBAAkB,CAAC;QAExD,6BAA6B;QAC7B,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QAED,2BAA2B;QAC3B,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,OAAO,CAAC;QAEnD,uDAAuD;QACvD,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,CAAC;YACvE,KAAK,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAC5C,IAAI,CAAC,SAAS,CAAC,UAAU,CAC1B,EAAE,CAAC;gBACF,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,aAAa,CAAC,GAAG,CAAC,IAAe,EAAE,SAAS,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI,CAAC,aAAa;gBACrB,oBAAoB,EAAE,aAAa;aACpC,CAAC;QACJ,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAE5D,+DAA+D;QAC/D,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAChC,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI,CAAC,aAAa;gBACrB,qBAAqB,EAAE,IAAI;aAC5B,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAE1D,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC/B,4DAA4D;YAC5D,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;YACxE,KAAK,MAAM,UAAU,IAAI,gBAAgB,EAAE,CAAC;gBAC1C,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC7B,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACpC,CAAC;YACD,IAAI,CAAC,aAAa,GAAG;gBACnB,GAAG,IAAI,CAAC,aAAa;gBACrB,YAAY;gBACZ,iBAAiB;aAClB,CAAC;YAEF,8BAA8B;YAC9B,KAAK,MAAM,UAAU,IAAI,uBAAuB,CAAC;gBAC/C,iBAAiB,EAAE,IAAI,CAAC,aAAa,CAAC,iBAAiB;gBACvD,cAAc,EAAE,IAAI,CAAC,aAAa,CAAC,cAAc;aAClD,CAAC,EAAE,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,WAAW;YAAE,OAAO;QAE7B,mDAAmD;QACnD,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;QACrC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,KAAK,kBAAkB,EAAE,CAAC;YACzD,sDAAsD;YACtD,IACE,IAAI,CAAC,SAAS,CAAC,kBAAkB,KAAK,SAAS;gBAC/C,IAAI,CAAC,SAAS,CAAC,kBAAkB,KAAK,EAAE,EACxC,CAAC;gBACD,MAAM,IAAI,KAAK,CACb,2EAA2E;oBACzE,YAAY;oBACZ,wBAAwB;oBACxB,cAAc;oBACd,4BAA4B;oBAC5B,sCAAsC;oBACtC,sDAAsD;oBACtD,SAAS;oBACT,MAAM,CACT,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,6BAA6B,CAAC;gBAC5C,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB;gBAC5C,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB;gBAC9C,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;aAClC,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,0BAA0B;YAC1B,IACE,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;gBACtC,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,EAAE;gBAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,SAAS;gBACtC,IAAI,CAAC,SAAS,CAAC,SAAS,KAAK,EAAE,EAC/B,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACxE,CAAC;YAED,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;gBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;gBACnC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS;gBACnC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc;gBAC7C,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;gBACzC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB;gBACvD,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB;gBACvD,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB;gBACrD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;aACxC,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,gEAAgE;YAChE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,GAAG,MAAM,WAAW,CAC9D,IAAI,CAAC,SAAS,CAAC,IAAI,EACnB;gBACE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,IAAI;gBACjD,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB;gBAC7C,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ;aAClC,CACF,CAAC;YAEF,sEAAsE;YACtE,oDAAoD;YACpD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;YAEvE,IAAI,CAAC,QAAQ,GAAG,cAAc,CAAC;gBAC7B,SAAS;gBACT,SAAS;gBACT,QAAQ;gBACR,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc;gBAC7C,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY;gBACzC,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB;gBACvD,mBAAmB,EAAE,IAAI,CAAC,SAAS,CAAC,mBAAmB;gBACvD,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,kBAAkB;gBACrD,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW;aACxC,CAAC,CAAC;QACL,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,sBAAsB,CAAC,CAAC;YAClD,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,mBAAmB,CAAC,CAAC;QACjD,CAAC;QAED,wCAAwC;QACxC,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAChC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,IAAI,IAAI,CAAC;YAE9D,qCAAqC;YACrC,MAAM,aAAa,GAAG,MAAM,uBAAuB,EAAE,CAAC;YACtD,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnB,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CACb,mEAAmE;wBACjE,mCAAmC;wBACnC,6EAA6E;wBAC7E,gCAAgC;wBAChC,sDAAsD,CACzD,CAAC;gBACJ,CAAC;gBAED,yBAAyB;gBACzB,MAAM,kBAAkB,CAAC;oBACvB,YAAY,EAAE,IAAI;oBAClB,UAAU,EAAE,IAAI,CAAC,cAAc,CAAC,kBAAkB;oBAClD,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,QAAQ;iBACvC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,8BAA8B,CAAC,CAAC;YACjE,CAAC;YAED,iEAAiE;YACjE,MAAM,gBAAgB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;QAED,8DAA8D;QAC9D,IAAI,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YAC/B,MAAM,aAAa,GAAa;gBAC9B,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,YAAY,IAAI,EAAE,CAAC;aAC3C,CAAC;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,cAAc,IAAI,CAAC,CAAC;YAEzD,+BAA+B;YAC/B,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxF,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;gBAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,KAAK,SAAS;oBACjD,CAAC,CAAC,MAAM,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;oBAC9F,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBAChC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;wBACpD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;wBACrC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC;oBAChC,CAAC;oBAAC,MAAM,CAAC;wBACP,gCAAgC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC;YAED,sDAAsD;YACtD,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CACpB,4BAA4B,CAAC,aAAa,EAAE,SAAS,CAAC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,SAAS,CACb,IAAY,EACZ,MAAe,EACf,MAAqC,EACrC,cAA0B;QAE1B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,CAAC;QAED,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAEpC,4DAA4D;QAC5D,6DAA6D;QAC7D,2DAA2D;QAC3D,MAAM,eAAe,GACnB,MAAM,KAAK,SAAS;YAClB,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;QAEzB,6BAA6B;QAC7B,MAAM,cAAc,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAE1C,gCAAgC;QAChC,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;QAE5E,wBAAwB;QACxB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAS,CAAC,OAAO,CAC5C,cAAc,EACd,eAAe,CAChB,CAAC;QACF,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC;QAEnC,qCAAqC;QACrC,MAAM,eAAe,GAAG,eAAe,CACrC,YAAY,EACZ,UAAU,EACV,eAAe,EACf,cAAc,CACf,CAAC;QAEF,iFAAiF;QACjF,kEAAkE;QAClE,MAAM,aAAa,GACjB,eAAe,CAAC,qBAAqB,KAAK,IAAI;YAC5C,CAAC,CAAC,uBAAuB,CAAC,eAAe,EAAE,cAAc,CAAC;YAC1D,CAAC,CAAC,eAAe,CAAC;QAEtB,8EAA8E;QAC9E,wFAAwF;QACxF,MAAM,qBAAqB,GAAG,eAAe,CAAC,qBAAqB;YACjE,CAAC,CAAC,sBAAsB,CAAC,aAAa,EAAE,cAAc,CAAC;YACvD,CAAC,CAAC,aAAa,CAAC;QAElB,yDAAyD;QACzD,8DAA8D;QAC9D,MAAM,eAAe,GAAG,eAAe,CAAC,qBAAqB;YAC3D,CAAC,CAAC,eAAe,CAAC,qBAAqB,EAAE;gBACrC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,wBAAwB;aAC1F,CAAC;YACJ,CAAC,CAAC,qBAAqB,CAAC;QAE1B,8DAA8D;QAC9D,MAAM,oBAAoB,GACxB,eAAe,CAAC,qBAAqB;YACrC,eAAe,CAAC,qBAAqB,CAAC,IAAI,GAAG,CAAC;YAC5C,CAAC,CAAC,eAAe,CAAC,MAAM,CACpB,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ;gBAC9B,CAAC,eAAe,CAAC,qBAAqB,CAAC,GAAG,CACxC,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,SAAS,CAClC,CACJ;YACH,CAAC,CAAC,eAAe,CAAC;QAEtB,yCAAyC;QACzC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,WAAW,CACtD,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EACd,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,0BAA0B;QAC1B,MAAM,UAAU,GAAG,cAAc,CAC/B,cAAc,EACd,QAAQ,EACR,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EACzB,eAAe,EACf,IAAI,CAAC,SAAS,CACf,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC/C,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CAAC;YACJ,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;QAED,sBAAsB;QACtB,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAClC,MAAM,KAAK,GAAuB;YAChC,YAAY,EAAE,mBAAmB,CAAC,QAAQ,CAAC;YAC3C,aAAa,EAAE,QAAQ,CAAC,MAAM;YAC9B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,gBAAgB,EAAE,OAAO,GAAG,SAAS;YACrC,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,YAAY,EAAE,SAAS,CAAC,SAAS;YACjC,gBAAgB,EAAE,SAAS,CAAC,aAAa;SAC1C,CAAC;QAEF,2DAA2D;QAC3D,MAAM,YAAY,GAAuC,QAAQ,CAAC,GAAG,CACnE,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAC3C,CAAC;QAEF,sDAAsD;QACtD,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,gDAAgD;YAChD,OAAO;gBACL,cAAc;gBACd,QAAQ,EAAE,YAAY;gBACtB,KAAK;aACN,CAAC;QACJ,CAAC;QAED,iDAAiD;QACjD,MAAM,aAAa,GACjB,IAAI,CAAC,WAAW,KAAK,IAAI;YACvB,CAAC,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE;YACjC,CAAC,CAAC,WAAW,EAAE,CAAC;QAEpB,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAEnE,OAAO;YACL,cAAc;YACd,QAAQ,EAAE,YAAY;YACtB,MAAM,EAAE,eAAe;YACvB,KAAK;SACN,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAChC,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,SAAiB;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,+DAA+D;gBAC7D,2EAA2E;gBAC3E,iCAAiC;gBACjC,iFAAiF;gBACjF,2CAA2C;gBAC3C,6BAA6B;gBAC7B,6DAA6D;gBAC7D,+CAA+C;gBAC/C,OAAO,CACV,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CACb,+DAA+D;gBAC7D,mDAAmD;gBACnD,2CAA2C;gBAC3C,6DAA6D;gBAC7D,+CAA+C;gBAC/C,OAAO,CACV,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,wDAAwD;gBACtD,6EAA6E;gBAC7E,8CAA8C;gBAC9C,2CAA2C;gBAC3C,oCAAoC;gBACpC,+CAA+C;gBAC/C,OAAO,CACV,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,cAAc,CACxB,IAAI,EACJ,SAAS,EACT,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,WAAW,CACjB,CAAC;IACJ,CAAC;CACF;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,gBAAgB,CAC9B,MAAyB,EACzB,cAA+B;IAE/B,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,IAAY,EACZ,MAAe,EACf,MAAqC;IAErC,MAAM,UAAU,GAAG,gBAAgB,EAAE,CAAC;IACtC,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,MAAqC;IAErC,kCAAkC;IAClC,MAAM,eAAe,GAAiC;QACpD,GAAG,MAAM;QACT,eAAe,EAAE,IAAI,GAAG,EAAE,EAAE,wBAAwB;KACrD,CAAC;IAEF,OAAO,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,SAAwE,EACxE,MAAqC;IAErC,MAAM,UAAU,GAAG,gBAAgB,CAAC;QAClC,GAAG,EAAE;YACH,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,WAAW;YACnC,GAAG,SAAS;SACb;KACF,CAAC,CAAC;IAEH,MAAM,UAAU,CAAC,UAAU,EAAE,CAAC;IAE9B,IAAI,CAAC;QACH,OAAO,MAAM,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC7D,CAAC;YAAS,CAAC;QACT,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,OAAe;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,gCAAgC;QAChC,IAAI,OAAO,KAAK,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAExD,2DAA2D;QAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CACzB,8DAA8D,CAC/D,CAAC;QACF,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC;YAChE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Core Module Exports
|
|
3
|
+
* Shared anonymization logic for both browser and Node.js entry points
|
|
4
|
+
*/
|
|
5
|
+
export { Anonymizer, createAnonymizer, anonymize, anonymizeRegexOnly, anonymizeWithNER, type AnonymizerConfig, type NERConfig, type PIIStorageProvider, type AnonymizerSession, type SessionFactory, type RawPIIMap, } from "./anonymizer.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,SAAS,GACf,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,SAAS,EACT,kBAAkB,EAClB,gBAAgB,GAOjB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/crypto/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,qBAAqB,CAAC"}
|