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,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UK Postal Code Recognizer
|
|
3
|
+
* Detects syntactically valid UK unit postcodes.
|
|
4
|
+
*/
|
|
5
|
+
export declare const UK_POSTAL_CODE_PATTERN: RegExp;
|
|
6
|
+
/**
|
|
7
|
+
* Checks UK postcode syntax. This does not verify that Royal Mail currently
|
|
8
|
+
* assigns the postcode.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isValidUKPostalCode(postalCode: string): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Converts a UK postcode to uppercase with one space before the inward code.
|
|
13
|
+
*/
|
|
14
|
+
export declare function normalizeUKPostalCode(postalCode: string): string;
|
|
15
|
+
export declare const ukPostalCodeRecognizer: import("./base.js").Recognizer;
|
|
16
|
+
//# sourceMappingURL=postal-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postal-code.d.ts","sourceRoot":"","sources":["../../src/recognizers/postal-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,eAAO,MAAM,sBAAsB,QAGlC,CAAC;AAOF;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED,eAAO,MAAM,sBAAsB,gCAOjC,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UK Postal Code Recognizer
|
|
3
|
+
* Detects syntactically valid UK unit postcodes.
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType } from '../types/index.js';
|
|
6
|
+
import { createRegexRecognizer } from './base.js';
|
|
7
|
+
/**
|
|
8
|
+
* UK postcode syntax, including the exceptional GIR 0AA postcode.
|
|
9
|
+
*
|
|
10
|
+
* The outward code uses the letter restrictions from UK government postcode
|
|
11
|
+
* validation guidance. The inward code excludes C, I, K, M, O, and V.
|
|
12
|
+
* Horizontal whitespace is optional so normalized forms such as N164HY are
|
|
13
|
+
* detected without allowing a match to cross a line boundary.
|
|
14
|
+
*/
|
|
15
|
+
const UK_POSTAL_CODE_BODY = '(?:GIR[\\t ]*0AA|(?:[A-PR-UWYZ][0-9]{1,2}|[A-PR-UWYZ][A-HK-Y][0-9]{1,2}|[A-PR-UWYZ][0-9][A-HJKPSTUW]|[A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY])[\\t ]*[0-9][ABD-HJLNP-UW-Z]{2})';
|
|
16
|
+
export const UK_POSTAL_CODE_PATTERN = new RegExp(`(?<![A-Z0-9])${UK_POSTAL_CODE_BODY}(?![A-Z0-9])`, 'gi');
|
|
17
|
+
const UK_POSTAL_CODE_VALIDATION_PATTERN = new RegExp(`^${UK_POSTAL_CODE_BODY}$`, 'i');
|
|
18
|
+
/**
|
|
19
|
+
* Checks UK postcode syntax. This does not verify that Royal Mail currently
|
|
20
|
+
* assigns the postcode.
|
|
21
|
+
*/
|
|
22
|
+
export function isValidUKPostalCode(postalCode) {
|
|
23
|
+
return UK_POSTAL_CODE_VALIDATION_PATTERN.test(postalCode.trim());
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Converts a UK postcode to uppercase with one space before the inward code.
|
|
27
|
+
*/
|
|
28
|
+
export function normalizeUKPostalCode(postalCode) {
|
|
29
|
+
const compact = postalCode.trim().replace(/[\t ]+/g, '').toUpperCase();
|
|
30
|
+
if (compact.length <= 3)
|
|
31
|
+
return compact;
|
|
32
|
+
return `${compact.slice(0, -3)} ${compact.slice(-3)}`;
|
|
33
|
+
}
|
|
34
|
+
export const ukPostalCodeRecognizer = createRegexRecognizer({
|
|
35
|
+
type: PIIType.POSTAL_CODE,
|
|
36
|
+
name: 'UK Postal Code',
|
|
37
|
+
patterns: [UK_POSTAL_CODE_PATTERN],
|
|
38
|
+
defaultConfidence: 0.95,
|
|
39
|
+
validate: isValidUKPostalCode,
|
|
40
|
+
normalize: normalizeUKPostalCode,
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=postal-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postal-code.js","sourceRoot":"","sources":["../../src/recognizers/postal-code.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,mBAAmB,GACvB,8KAA8K,CAAC;AAEjL,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,MAAM,CAC9C,gBAAgB,mBAAmB,cAAc,EACjD,IAAI,CACL,CAAC;AAEF,MAAM,iCAAiC,GAAG,IAAI,MAAM,CAClD,IAAI,mBAAmB,GAAG,EAC1B,GAAG,CACJ,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO,iCAAiC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,MAAM,OAAO,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,OAAO,CAAC;IACxC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;IAC1D,IAAI,EAAE,OAAO,CAAC,WAAW;IACzB,IAAI,EAAE,gBAAgB;IACtB,QAAQ,EAAE,CAAC,sBAAsB,CAAC;IAClC,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,qBAAqB;CACjC,CAAC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recognizer Registry
|
|
3
|
+
* Central registry for all PII recognizers
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, SpanMatch, AnonymizationPolicy } from '../types/index.js';
|
|
6
|
+
import type { Recognizer } from './base.js';
|
|
7
|
+
/**
|
|
8
|
+
* Registry for managing PII recognizers
|
|
9
|
+
*/
|
|
10
|
+
export declare class RecognizerRegistry {
|
|
11
|
+
private recognizers;
|
|
12
|
+
/**
|
|
13
|
+
* Registers a recognizer for a PII type
|
|
14
|
+
*/
|
|
15
|
+
register(recognizer: Recognizer): void;
|
|
16
|
+
/**
|
|
17
|
+
* Registers multiple recognizers
|
|
18
|
+
*/
|
|
19
|
+
registerAll(recognizers: Recognizer[]): void;
|
|
20
|
+
/**
|
|
21
|
+
* Gets all recognizers for a specific type
|
|
22
|
+
*/
|
|
23
|
+
getRecognizers(type: PIIType): Recognizer[];
|
|
24
|
+
/**
|
|
25
|
+
* Gets all registered recognizers
|
|
26
|
+
*/
|
|
27
|
+
getAllRecognizers(): Recognizer[];
|
|
28
|
+
/**
|
|
29
|
+
* Gets all registered PII types
|
|
30
|
+
*/
|
|
31
|
+
getRegisteredTypes(): PIIType[];
|
|
32
|
+
/**
|
|
33
|
+
* Checks if a recognizer is registered for a type
|
|
34
|
+
*/
|
|
35
|
+
hasRecognizer(type: PIIType): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Removes all recognizers for a type
|
|
38
|
+
*/
|
|
39
|
+
unregister(type: PIIType): void;
|
|
40
|
+
/**
|
|
41
|
+
* Clears all recognizers
|
|
42
|
+
*/
|
|
43
|
+
clear(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Runs all enabled recognizers on text and returns matches
|
|
46
|
+
* @param text - Text to analyze
|
|
47
|
+
* @param policy - Anonymization policy to determine which types to detect
|
|
48
|
+
*/
|
|
49
|
+
findAll(text: string, policy: AnonymizationPolicy): SpanMatch[];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Gets the global recognizer registry (singleton)
|
|
53
|
+
*/
|
|
54
|
+
export declare function getGlobalRegistry(): RecognizerRegistry;
|
|
55
|
+
/**
|
|
56
|
+
* Creates a new isolated registry (useful for testing)
|
|
57
|
+
*/
|
|
58
|
+
export declare function createRegistry(): RecognizerRegistry;
|
|
59
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C;;GAEG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAyC;IAE5D;;OAEG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAMtC;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,EAAE;IAI3C;;OAEG;IACH,iBAAiB,IAAI,UAAU,EAAE;IAQjC;;OAEG;IACH,kBAAkB,IAAI,OAAO,EAAE;IAI/B;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO;IAKrC;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,SAAS,EAAE;CA0BhE;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,kBAAkB,CAKtD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAEnD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Recognizer Registry
|
|
3
|
+
* Central registry for all PII recognizers
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Registry for managing PII recognizers
|
|
7
|
+
*/
|
|
8
|
+
export class RecognizerRegistry {
|
|
9
|
+
recognizers = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Registers a recognizer for a PII type
|
|
12
|
+
*/
|
|
13
|
+
register(recognizer) {
|
|
14
|
+
const existing = this.recognizers.get(recognizer.type) ?? [];
|
|
15
|
+
existing.push(recognizer);
|
|
16
|
+
this.recognizers.set(recognizer.type, existing);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Registers multiple recognizers
|
|
20
|
+
*/
|
|
21
|
+
registerAll(recognizers) {
|
|
22
|
+
for (const recognizer of recognizers) {
|
|
23
|
+
this.register(recognizer);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Gets all recognizers for a specific type
|
|
28
|
+
*/
|
|
29
|
+
getRecognizers(type) {
|
|
30
|
+
return this.recognizers.get(type) ?? [];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Gets all registered recognizers
|
|
34
|
+
*/
|
|
35
|
+
getAllRecognizers() {
|
|
36
|
+
const all = [];
|
|
37
|
+
for (const recognizers of this.recognizers.values()) {
|
|
38
|
+
all.push(...recognizers);
|
|
39
|
+
}
|
|
40
|
+
return all;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Gets all registered PII types
|
|
44
|
+
*/
|
|
45
|
+
getRegisteredTypes() {
|
|
46
|
+
return Array.from(this.recognizers.keys());
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Checks if a recognizer is registered for a type
|
|
50
|
+
*/
|
|
51
|
+
hasRecognizer(type) {
|
|
52
|
+
const recognizers = this.recognizers.get(type);
|
|
53
|
+
return recognizers !== undefined && recognizers.length > 0;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Removes all recognizers for a type
|
|
57
|
+
*/
|
|
58
|
+
unregister(type) {
|
|
59
|
+
this.recognizers.delete(type);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Clears all recognizers
|
|
63
|
+
*/
|
|
64
|
+
clear() {
|
|
65
|
+
this.recognizers.clear();
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Runs all enabled recognizers on text and returns matches
|
|
69
|
+
* @param text - Text to analyze
|
|
70
|
+
* @param policy - Anonymization policy to determine which types to detect
|
|
71
|
+
*/
|
|
72
|
+
findAll(text, policy) {
|
|
73
|
+
const matches = [];
|
|
74
|
+
for (const [type, recognizers] of this.recognizers) {
|
|
75
|
+
// Skip types not enabled in policy
|
|
76
|
+
if (!policy.enabledTypes.has(type) || !policy.regexEnabledTypes.has(type)) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
// Get confidence threshold for this type
|
|
80
|
+
const threshold = policy.confidenceThresholds.get(type) ?? 0.5;
|
|
81
|
+
for (const recognizer of recognizers) {
|
|
82
|
+
const typeMatches = recognizer.find(text);
|
|
83
|
+
// Filter by confidence threshold
|
|
84
|
+
for (const match of typeMatches) {
|
|
85
|
+
if (match.confidence >= threshold) {
|
|
86
|
+
matches.push(match);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return matches;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Global singleton registry instance
|
|
96
|
+
*/
|
|
97
|
+
let globalRegistry = null;
|
|
98
|
+
/**
|
|
99
|
+
* Gets the global recognizer registry (singleton)
|
|
100
|
+
*/
|
|
101
|
+
export function getGlobalRegistry() {
|
|
102
|
+
if (globalRegistry === null) {
|
|
103
|
+
globalRegistry = new RecognizerRegistry();
|
|
104
|
+
}
|
|
105
|
+
return globalRegistry;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Creates a new isolated registry (useful for testing)
|
|
109
|
+
*/
|
|
110
|
+
export function createRegistry() {
|
|
111
|
+
return new RecognizerRegistry();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/recognizers/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,gBAAgB,iCA+B3B,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* API Key Recognizer
|
|
3
|
+
* Detects provider-specific API key patterns
|
|
4
|
+
*/
|
|
5
|
+
import { createRegexRecognizer } from "../base.js";
|
|
6
|
+
import { PIIType } from "../../types/index.js";
|
|
7
|
+
export const apiKeyRecognizer = createRegexRecognizer({
|
|
8
|
+
type: PIIType.API_KEY,
|
|
9
|
+
name: "API Key",
|
|
10
|
+
defaultConfidence: 0.97,
|
|
11
|
+
patterns: [
|
|
12
|
+
// OpenAI
|
|
13
|
+
/\bsk-proj-[A-Za-z0-9_-]{20,}\b/g,
|
|
14
|
+
/\bsk-[A-Za-z0-9]{20,}\b/g,
|
|
15
|
+
// Anthropic
|
|
16
|
+
/\bsk-ant-[A-Za-z0-9_-]{20,}\b/g,
|
|
17
|
+
// GitHub (PAT, OAuth, App, Installation, Refresh)
|
|
18
|
+
/\bgh[pousr]_[A-Za-z0-9]{36,}\b/g,
|
|
19
|
+
// Stripe
|
|
20
|
+
/\b[sr]k_(?:live|test)_[A-Za-z0-9]{24,}\b/g,
|
|
21
|
+
// Slack bot/user tokens
|
|
22
|
+
/\bxox[bpas]-[0-9]{10,}-[A-Za-z0-9-]+/g,
|
|
23
|
+
// SendGrid
|
|
24
|
+
/\bSG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}\b/g,
|
|
25
|
+
// Twilio
|
|
26
|
+
/\bSK[a-f0-9]{32}\b/g,
|
|
27
|
+
// Mailgun
|
|
28
|
+
/\bkey-[a-f0-9]{32}\b/g,
|
|
29
|
+
// Heroku
|
|
30
|
+
/\b[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}\b/g,
|
|
31
|
+
],
|
|
32
|
+
validate(match) {
|
|
33
|
+
// Heroku-style UUIDs are too generic without context — skip them
|
|
34
|
+
if (/^[a-f0-9]{8}-[a-f0-9]{4}-/.test(match))
|
|
35
|
+
return false;
|
|
36
|
+
// Must be at least 20 chars for non-prefixed patterns
|
|
37
|
+
return match.length >= 20;
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=api-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/api-key.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;IACpD,IAAI,EAAE,OAAO,CAAC,OAAO;IACrB,IAAI,EAAE,SAAS;IACf,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE;QACR,SAAS;QACT,iCAAiC;QACjC,0BAA0B;QAC1B,YAAY;QACZ,gCAAgC;QAChC,kDAAkD;QAClD,iCAAiC;QACjC,SAAS;QACT,2CAA2C;QAC3C,wBAAwB;QACxB,uCAAuC;QACvC,WAAW;QACX,+CAA+C;QAC/C,SAAS;QACT,qBAAqB;QACrB,UAAU;QACV,uBAAuB;QACvB,SAAS;QACT,mEAAmE;KACpE;IACD,QAAQ,CAAC,KAAa;QACpB,iEAAiE;QACjE,IAAI,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1D,sDAAsD;QACtD,OAAO,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Credentials Recognizer
|
|
3
|
+
* Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export declare const awsCredentialsRecognizer: Recognizer;
|
|
7
|
+
//# sourceMappingURL=aws-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-credentials.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,eAAO,MAAM,wBAAwB,EAAE,UA2DtC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Credentials Recognizer
|
|
3
|
+
* Detects AWS access key IDs (AKIA prefix) and context-dependent secret keys
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from "../../types/index.js";
|
|
6
|
+
const AWS_ACCESS_KEY_PATTERN = /\bAKIA[A-Z0-9]{16}\b/g;
|
|
7
|
+
const AWS_SECRET_CONTEXT_KEYWORDS = /(?:aws_secret_access_key|secret_access_key|aws_secret|secretaccesskey)/i;
|
|
8
|
+
const AWS_SECRET_KEY_PATTERN = /\b[A-Za-z0-9/+=]{40}\b/g;
|
|
9
|
+
export const awsCredentialsRecognizer = {
|
|
10
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
11
|
+
name: "AWS Credentials",
|
|
12
|
+
defaultConfidence: 0.98,
|
|
13
|
+
find(text) {
|
|
14
|
+
const matches = [];
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
// Always detect AKIA access key IDs (high confidence, distinctive prefix)
|
|
17
|
+
for (const match of text.matchAll(AWS_ACCESS_KEY_PATTERN)) {
|
|
18
|
+
if (match.index === undefined)
|
|
19
|
+
continue;
|
|
20
|
+
const key = `${match.index}:${match.index + match[0].length}`;
|
|
21
|
+
if (seen.has(key))
|
|
22
|
+
continue;
|
|
23
|
+
seen.add(key);
|
|
24
|
+
matches.push({
|
|
25
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
26
|
+
start: match.index,
|
|
27
|
+
end: match.index + match[0].length,
|
|
28
|
+
confidence: 0.98,
|
|
29
|
+
source: DetectionSource.REGEX,
|
|
30
|
+
text: match[0],
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
// Only scan for 40-char secret keys if there's context suggesting AWS secrets
|
|
34
|
+
if (AWS_SECRET_CONTEXT_KEYWORDS.test(text)) {
|
|
35
|
+
for (const match of text.matchAll(AWS_SECRET_KEY_PATTERN)) {
|
|
36
|
+
if (match.index === undefined)
|
|
37
|
+
continue;
|
|
38
|
+
const matchText = match[0];
|
|
39
|
+
const key = `${match.index}:${match.index + matchText.length}`;
|
|
40
|
+
if (seen.has(key))
|
|
41
|
+
continue;
|
|
42
|
+
// Must contain mixed case + digits/special to look like a secret
|
|
43
|
+
if (!/[a-z]/.test(matchText) || !/[A-Z]/.test(matchText))
|
|
44
|
+
continue;
|
|
45
|
+
if (!/[0-9/+=]/.test(matchText))
|
|
46
|
+
continue;
|
|
47
|
+
seen.add(key);
|
|
48
|
+
matches.push({
|
|
49
|
+
type: PIIType.AWS_CREDENTIALS,
|
|
50
|
+
start: match.index,
|
|
51
|
+
end: match.index + matchText.length,
|
|
52
|
+
confidence: 0.85,
|
|
53
|
+
source: DetectionSource.REGEX,
|
|
54
|
+
text: matchText,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return matches;
|
|
59
|
+
},
|
|
60
|
+
validate(match) {
|
|
61
|
+
// AKIA keys are always valid
|
|
62
|
+
if (match.startsWith("AKIA") && match.length === 20)
|
|
63
|
+
return true;
|
|
64
|
+
// Secret keys must be exactly 40 chars
|
|
65
|
+
return match.length === 40;
|
|
66
|
+
},
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=aws-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aws-credentials.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/aws-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Secret Recognizer
|
|
3
|
+
* Detects key-value secrets in JSON, YAML, and TOML
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export declare function createConfigSecretRecognizer(minValueLength?: number, extraKeyPatterns?: RegExp[]): Recognizer;
|
|
7
|
+
export declare const configSecretRecognizer: Recognizer;
|
|
8
|
+
//# sourceMappingURL=config-secret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-secret.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/config-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAc7C,wBAAgB,4BAA4B,CAC1C,cAAc,GAAE,MAA2B,EAC3C,gBAAgB,GAAE,MAAM,EAAO,GAC9B,UAAU,CA8CZ;AAED,eAAO,MAAM,sBAAsB,YAAiC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config Secret Recognizer
|
|
3
|
+
* Detects key-value secrets in JSON, YAML, and TOML
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from "../../types/index.js";
|
|
6
|
+
import { isSecretKeyName } from "./key-patterns.js";
|
|
7
|
+
// JSON: "key": "value" or 'key': 'value'
|
|
8
|
+
const JSON_SECRET = /["']([a-zA-Z_][a-zA-Z0-9_.-]*)["']\s*:\s*["']([^"'\n]{4,})["']/g;
|
|
9
|
+
// YAML: key: value (unquoted or quoted)
|
|
10
|
+
const YAML_SECRET = /^[ \t]*([a-zA-Z_][a-zA-Z0-9_.-]*)\s*:\s*["']?([^\n"'#]{4,})["']?$/gm;
|
|
11
|
+
// TOML: key = "value"
|
|
12
|
+
const TOML_SECRET = /^[ \t]*([a-zA-Z_][a-zA-Z0-9_.-]*)\s*=\s*["']([^"'\n]{4,})["']$/gm;
|
|
13
|
+
const DEFAULT_MIN_LENGTH = 4;
|
|
14
|
+
export function createConfigSecretRecognizer(minValueLength = DEFAULT_MIN_LENGTH, extraKeyPatterns = []) {
|
|
15
|
+
return {
|
|
16
|
+
type: PIIType.CONFIG_SECRET,
|
|
17
|
+
name: "Config Secret",
|
|
18
|
+
defaultConfidence: 0.85,
|
|
19
|
+
find(text) {
|
|
20
|
+
const matches = [];
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
const patterns = [JSON_SECRET, YAML_SECRET, TOML_SECRET];
|
|
23
|
+
for (const pattern of patterns) {
|
|
24
|
+
const p = new RegExp(pattern.source, pattern.flags);
|
|
25
|
+
for (const match of text.matchAll(p)) {
|
|
26
|
+
if (match.index === undefined)
|
|
27
|
+
continue;
|
|
28
|
+
const key = match[1];
|
|
29
|
+
const value = match[2].trim();
|
|
30
|
+
const keyIsSecret = isSecretKeyName(key)
|
|
31
|
+
|| extraKeyPatterns.some((pat) => pat.test(key));
|
|
32
|
+
if (!keyIsSecret)
|
|
33
|
+
continue;
|
|
34
|
+
if (value.length < minValueLength)
|
|
35
|
+
continue;
|
|
36
|
+
// Find exact position of value in the matched text
|
|
37
|
+
const fullMatch = match[0];
|
|
38
|
+
const valueStartInMatch = fullMatch.lastIndexOf(value);
|
|
39
|
+
const valueStart = match.index + valueStartInMatch;
|
|
40
|
+
const spanKey = `${valueStart}:${valueStart + value.length}`;
|
|
41
|
+
if (seen.has(spanKey))
|
|
42
|
+
continue;
|
|
43
|
+
seen.add(spanKey);
|
|
44
|
+
matches.push({
|
|
45
|
+
type: PIIType.CONFIG_SECRET,
|
|
46
|
+
start: valueStart,
|
|
47
|
+
end: valueStart + value.length,
|
|
48
|
+
confidence: 0.85,
|
|
49
|
+
source: DetectionSource.REGEX,
|
|
50
|
+
text: value,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return matches;
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export const configSecretRecognizer = createConfigSecretRecognizer();
|
|
59
|
+
//# sourceMappingURL=config-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-secret.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/config-secret.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,yCAAyC;AACzC,MAAM,WAAW,GAAG,iEAAiE,CAAC;AAEtF,wCAAwC;AACxC,MAAM,WAAW,GAAG,qEAAqE,CAAC;AAE1F,sBAAsB;AACtB,MAAM,WAAW,GAAG,kEAAkE,CAAC;AAEvF,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,4BAA4B,CAC1C,iBAAyB,kBAAkB,EAC3C,mBAA6B,EAAE;IAE/B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,aAAa;QAC3B,IAAI,EAAE,eAAe;QACrB,iBAAiB,EAAE,IAAI;QAEvB,IAAI,CAAC,IAAY;YACf,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAE/B,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;YAEzD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;gBACpD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;oBACrC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;wBAAE,SAAS;oBACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;oBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,EAAE,CAAC;oBAE/B,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC;2BACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;oBACnD,IAAI,CAAC,WAAW;wBAAE,SAAS;oBAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc;wBAAE,SAAS;oBAE5C,mDAAmD;oBACnD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC3B,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;oBACvD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,iBAAiB,CAAC;oBACnD,MAAM,OAAO,GAAG,GAAG,UAAU,IAAI,UAAU,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;wBAAE,SAAS;oBAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAElB,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,OAAO,CAAC,aAAa;wBAC3B,KAAK,EAAE,UAAU;wBACjB,GAAG,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM;wBAC9B,UAAU,EAAE,IAAI;wBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;wBAC7B,IAAI,EAAE,KAAK;qBACZ,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-string.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/connection-string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,eAAO,MAAM,0BAA0B,iCA2BrC,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection String Recognizer
|
|
3
|
+
* Detects database/service URIs with embedded credentials
|
|
4
|
+
*/
|
|
5
|
+
import { createRegexRecognizer } from "../base.js";
|
|
6
|
+
import { PIIType } from "../../types/index.js";
|
|
7
|
+
const PLACEHOLDER_PASSWORDS = new Set([
|
|
8
|
+
"password", "pass", "changeme", "secret", "xxx", "yyy",
|
|
9
|
+
"your-password", "your_password", "example", "<password>",
|
|
10
|
+
]);
|
|
11
|
+
export const connectionStringRecognizer = createRegexRecognizer({
|
|
12
|
+
type: PIIType.CONNECTION_STRING,
|
|
13
|
+
name: "Connection String",
|
|
14
|
+
defaultConfidence: 0.93,
|
|
15
|
+
patterns: [
|
|
16
|
+
// postgres://user:password@host/db
|
|
17
|
+
/\b(?:postgres(?:ql)?|mysql|mariadb):\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
|
|
18
|
+
// mongodb+srv://user:password@host/db
|
|
19
|
+
/\bmongodb(?:\+srv)?:\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
|
|
20
|
+
// redis://user:password@host:port or redis://:password@host:port
|
|
21
|
+
/\brediss?:\/\/(?:[^\s:]*:)?[^\s@]+@[^\s]+/g,
|
|
22
|
+
// amqp://user:password@host:port
|
|
23
|
+
/\bamqps?:\/\/[^\s:]+:[^\s@]+@[^\s]+/g,
|
|
24
|
+
],
|
|
25
|
+
validate(match) {
|
|
26
|
+
// Extract password portion (between first : after // and @)
|
|
27
|
+
const credMatch = match.match(/:\/\/[^:]*:([^@]+)@/);
|
|
28
|
+
if (credMatch === null)
|
|
29
|
+
return false;
|
|
30
|
+
const password = credMatch[1];
|
|
31
|
+
// Reject placeholder passwords
|
|
32
|
+
if (PLACEHOLDER_PASSWORDS.has(password.toLowerCase()))
|
|
33
|
+
return false;
|
|
34
|
+
// Reject very short passwords (likely placeholders)
|
|
35
|
+
if (password.length < 4)
|
|
36
|
+
return false;
|
|
37
|
+
return true;
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
//# sourceMappingURL=connection-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection-string.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/connection-string.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IACpC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK;IACtD,eAAe,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY;CAC1D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;IAC9D,IAAI,EAAE,OAAO,CAAC,iBAAiB;IAC/B,IAAI,EAAE,mBAAmB;IACzB,iBAAiB,EAAE,IAAI;IACvB,QAAQ,EAAE;QACR,mCAAmC;QACnC,iEAAiE;QACjE,sCAAsC;QACtC,iDAAiD;QACjD,iEAAiE;QACjE,4CAA4C;QAC5C,iCAAiC;QACjC,sCAAsC;KACvC;IACD,QAAQ,CAAC,KAAa;QACpB,4DAA4D;QAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAI,SAAS,KAAK,IAAI;YAAE,OAAO,KAAK,CAAC;QAErC,MAAM,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAC/B,+BAA+B;QAC/B,IAAI,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACpE,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QAEtC,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Variable Secret Recognizer
|
|
3
|
+
* Detects secrets in .env-style KEY=VALUE lines
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export declare function createEnvVarSecretRecognizer(minValueLength?: number, extraKeyPatterns?: RegExp[]): Recognizer;
|
|
7
|
+
export declare const envVarSecretRecognizer: Recognizer;
|
|
8
|
+
//# sourceMappingURL=env-var.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-var.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/env-var.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa7C,wBAAgB,4BAA4B,CAC1C,cAAc,GAAE,MAA2B,EAC3C,gBAAgB,GAAE,MAAM,EAAO,GAC9B,UAAU,CAyCZ;AAED,eAAO,MAAM,sBAAsB,YAAiC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment Variable Secret Recognizer
|
|
3
|
+
* Detects secrets in .env-style KEY=VALUE lines
|
|
4
|
+
*/
|
|
5
|
+
import { PIIType, DetectionSource } from "../../types/index.js";
|
|
6
|
+
import { isSecretKeyName } from "./key-patterns.js";
|
|
7
|
+
const ENV_VAR_LINE = /^[ \t]*(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)[ \t]*=[ \t]*["']?(.+?)["']?$/gm;
|
|
8
|
+
const PLACEHOLDER_VALUES = new Set([
|
|
9
|
+
"changeme", "your-api-key-here", "your_api_key_here",
|
|
10
|
+
"xxx", "yyy", "zzz", "todo", "fixme", "replace_me",
|
|
11
|
+
"example", "test", "dummy", "placeholder",
|
|
12
|
+
]);
|
|
13
|
+
const DEFAULT_MIN_LENGTH = 4;
|
|
14
|
+
export function createEnvVarSecretRecognizer(minValueLength = DEFAULT_MIN_LENGTH, extraKeyPatterns = []) {
|
|
15
|
+
return {
|
|
16
|
+
type: PIIType.ENV_VAR_SECRET,
|
|
17
|
+
name: "Environment Variable Secret",
|
|
18
|
+
defaultConfidence: 0.88,
|
|
19
|
+
find(text) {
|
|
20
|
+
const matches = [];
|
|
21
|
+
for (const match of text.matchAll(ENV_VAR_LINE)) {
|
|
22
|
+
if (match.index === undefined)
|
|
23
|
+
continue;
|
|
24
|
+
const key = match[1];
|
|
25
|
+
const value = match[2];
|
|
26
|
+
// Check if key name suggests a secret
|
|
27
|
+
const keyIsSecret = isSecretKeyName(key)
|
|
28
|
+
|| extraKeyPatterns.some((p) => p.test(key));
|
|
29
|
+
if (!keyIsSecret)
|
|
30
|
+
continue;
|
|
31
|
+
// Filter out short or placeholder values
|
|
32
|
+
if (value.length < minValueLength)
|
|
33
|
+
continue;
|
|
34
|
+
if (PLACEHOLDER_VALUES.has(value.toLowerCase()))
|
|
35
|
+
continue;
|
|
36
|
+
// Span covers the VALUE portion only
|
|
37
|
+
const fullLine = match[0];
|
|
38
|
+
const valueStartInLine = fullLine.lastIndexOf(value);
|
|
39
|
+
const valueStart = match.index + valueStartInLine;
|
|
40
|
+
matches.push({
|
|
41
|
+
type: PIIType.ENV_VAR_SECRET,
|
|
42
|
+
start: valueStart,
|
|
43
|
+
end: valueStart + value.length,
|
|
44
|
+
confidence: 0.88,
|
|
45
|
+
source: DetectionSource.REGEX,
|
|
46
|
+
text: value,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
return matches;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export const envVarSecretRecognizer = createEnvVarSecretRecognizer();
|
|
54
|
+
//# sourceMappingURL=env-var.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-var.js","sourceRoot":"","sources":["../../../src/recognizers/secrets/env-var.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAkB,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEhF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,YAAY,GAAG,8EAA8E,CAAC;AAEpG,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,UAAU,EAAE,mBAAmB,EAAE,mBAAmB;IACpD,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY;IAClD,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;CAC1C,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAE7B,MAAM,UAAU,4BAA4B,CAC1C,iBAAyB,kBAAkB,EAC3C,mBAA6B,EAAE;IAE/B,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,cAAc;QAC5B,IAAI,EAAE,6BAA6B;QACnC,iBAAiB,EAAE,IAAI;QAEvB,IAAI,CAAC,IAAY;YACf,MAAM,OAAO,GAAgB,EAAE,CAAC;YAEhC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;oBAAE,SAAS;gBACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;gBAExB,sCAAsC;gBACtC,MAAM,WAAW,GAAG,eAAe,CAAC,GAAG,CAAC;uBACnC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC/C,IAAI,CAAC,WAAW;oBAAE,SAAS;gBAE3B,yCAAyC;gBACzC,IAAI,KAAK,CAAC,MAAM,GAAG,cAAc;oBAAE,SAAS;gBAC5C,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;oBAAE,SAAS;gBAE1D,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC1B,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,GAAG,gBAAgB,CAAC;gBAElD,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,OAAO,CAAC,cAAc;oBAC5B,KAAK,EAAE,UAAU;oBACjB,GAAG,EAAE,UAAU,GAAG,KAAK,CAAC,MAAM;oBAC9B,UAAU,EAAE,IAAI;oBAChB,MAAM,EAAE,eAAe,CAAC,KAAK;oBAC7B,IAAI,EAAE,KAAK;iBACZ,CAAC,CAAC;YACL,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,4BAA4B,EAAE,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Recognizers Module
|
|
3
|
+
* Exports all secret/credential recognizers
|
|
4
|
+
*/
|
|
5
|
+
import type { Recognizer } from "../base.js";
|
|
6
|
+
export { apiKeyRecognizer } from "./api-key.js";
|
|
7
|
+
export { privateKeyRecognizer } from "./private-key.js";
|
|
8
|
+
export { jwtRecognizer } from "./jwt.js";
|
|
9
|
+
export { connectionStringRecognizer } from "./connection-string.js";
|
|
10
|
+
export { awsCredentialsRecognizer } from "./aws-credentials.js";
|
|
11
|
+
export { envVarSecretRecognizer, createEnvVarSecretRecognizer } from "./env-var.js";
|
|
12
|
+
export { configSecretRecognizer, createConfigSecretRecognizer } from "./config-secret.js";
|
|
13
|
+
export { createLiteralValueRecognizer } from "./literal-value.js";
|
|
14
|
+
export { isSecretKeyName } from "./key-patterns.js";
|
|
15
|
+
/**
|
|
16
|
+
* Creates all secret recognizers
|
|
17
|
+
*/
|
|
18
|
+
export declare function createSecretRecognizers(options?: {
|
|
19
|
+
secretKeyPatterns?: RegExp[];
|
|
20
|
+
minValueLength?: number;
|
|
21
|
+
}): Recognizer[];
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/recognizers/secrets/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,0BAA0B,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,cAAc,CAAC;AACpF,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,4BAA4B,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,CAAC,EAAE;IAChD,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,UAAU,EAAE,CAkBf"}
|