palaryn 0.1.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 +21 -0
- package/README.md +716 -0
- package/dist/sdk/typescript/src/client.d.ts +71 -0
- package/dist/sdk/typescript/src/client.d.ts.map +1 -0
- package/dist/sdk/typescript/src/client.js +176 -0
- package/dist/sdk/typescript/src/client.js.map +1 -0
- package/dist/sdk/typescript/src/errors.d.ts +50 -0
- package/dist/sdk/typescript/src/errors.d.ts.map +1 -0
- package/dist/sdk/typescript/src/errors.js +103 -0
- package/dist/sdk/typescript/src/errors.js.map +1 -0
- package/dist/sdk/typescript/src/index.d.ts +4 -0
- package/dist/sdk/typescript/src/index.d.ts.map +1 -0
- package/dist/sdk/typescript/src/index.js +15 -0
- package/dist/sdk/typescript/src/index.js.map +1 -0
- package/dist/sdk/typescript/src/types.d.ts +101 -0
- package/dist/sdk/typescript/src/types.d.ts.map +1 -0
- package/dist/sdk/typescript/src/types.js +6 -0
- package/dist/sdk/typescript/src/types.js.map +1 -0
- package/dist/src/admin/index.d.ts +2 -0
- package/dist/src/admin/index.d.ts.map +1 -0
- package/dist/src/admin/index.js +6 -0
- package/dist/src/admin/index.js.map +1 -0
- package/dist/src/admin/routes.d.ts +5 -0
- package/dist/src/admin/routes.d.ts.map +1 -0
- package/dist/src/admin/routes.js +471 -0
- package/dist/src/admin/routes.js.map +1 -0
- package/dist/src/admin/templates.d.ts +51 -0
- package/dist/src/admin/templates.d.ts.map +1 -0
- package/dist/src/admin/templates.js +500 -0
- package/dist/src/admin/templates.js.map +1 -0
- package/dist/src/anomaly/detector.d.ts +141 -0
- package/dist/src/anomaly/detector.d.ts.map +1 -0
- package/dist/src/anomaly/detector.js +554 -0
- package/dist/src/anomaly/detector.js.map +1 -0
- package/dist/src/anomaly/index.d.ts +2 -0
- package/dist/src/anomaly/index.d.ts.map +1 -0
- package/dist/src/anomaly/index.js +7 -0
- package/dist/src/anomaly/index.js.map +1 -0
- package/dist/src/approval/manager.d.ts +147 -0
- package/dist/src/approval/manager.d.ts.map +1 -0
- package/dist/src/approval/manager.js +511 -0
- package/dist/src/approval/manager.js.map +1 -0
- package/dist/src/approval/webhook.d.ts +36 -0
- package/dist/src/approval/webhook.d.ts.map +1 -0
- package/dist/src/approval/webhook.js +135 -0
- package/dist/src/approval/webhook.js.map +1 -0
- package/dist/src/audit/logger.d.ts +70 -0
- package/dist/src/audit/logger.d.ts.map +1 -0
- package/dist/src/audit/logger.js +440 -0
- package/dist/src/audit/logger.js.map +1 -0
- package/dist/src/auth/index.d.ts +6 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/index.js +22 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/auth/password.d.ts +3 -0
- package/dist/src/auth/password.d.ts.map +1 -0
- package/dist/src/auth/password.js +25 -0
- package/dist/src/auth/password.js.map +1 -0
- package/dist/src/auth/pkce.d.ts +13 -0
- package/dist/src/auth/pkce.d.ts.map +1 -0
- package/dist/src/auth/pkce.js +58 -0
- package/dist/src/auth/pkce.js.map +1 -0
- package/dist/src/auth/providers.d.ts +28 -0
- package/dist/src/auth/providers.d.ts.map +1 -0
- package/dist/src/auth/providers.js +198 -0
- package/dist/src/auth/providers.js.map +1 -0
- package/dist/src/auth/routes.d.ts +14 -0
- package/dist/src/auth/routes.d.ts.map +1 -0
- package/dist/src/auth/routes.js +431 -0
- package/dist/src/auth/routes.js.map +1 -0
- package/dist/src/auth/session.d.ts +24 -0
- package/dist/src/auth/session.d.ts.map +1 -0
- package/dist/src/auth/session.js +105 -0
- package/dist/src/auth/session.js.map +1 -0
- package/dist/src/billing/index.d.ts +7 -0
- package/dist/src/billing/index.d.ts.map +1 -0
- package/dist/src/billing/index.js +14 -0
- package/dist/src/billing/index.js.map +1 -0
- package/dist/src/billing/plan-enforcer.d.ts +44 -0
- package/dist/src/billing/plan-enforcer.d.ts.map +1 -0
- package/dist/src/billing/plan-enforcer.js +110 -0
- package/dist/src/billing/plan-enforcer.js.map +1 -0
- package/dist/src/billing/routes.d.ts +15 -0
- package/dist/src/billing/routes.d.ts.map +1 -0
- package/dist/src/billing/routes.js +193 -0
- package/dist/src/billing/routes.js.map +1 -0
- package/dist/src/billing/stripe-client.d.ts +14 -0
- package/dist/src/billing/stripe-client.d.ts.map +1 -0
- package/dist/src/billing/stripe-client.js +51 -0
- package/dist/src/billing/stripe-client.js.map +1 -0
- package/dist/src/billing/webhook-handler.d.ts +19 -0
- package/dist/src/billing/webhook-handler.d.ts.map +1 -0
- package/dist/src/billing/webhook-handler.js +169 -0
- package/dist/src/billing/webhook-handler.js.map +1 -0
- package/dist/src/billing/webhook-routes.d.ts +5 -0
- package/dist/src/billing/webhook-routes.d.ts.map +1 -0
- package/dist/src/billing/webhook-routes.js +30 -0
- package/dist/src/billing/webhook-routes.js.map +1 -0
- package/dist/src/budget/manager.d.ts +95 -0
- package/dist/src/budget/manager.d.ts.map +1 -0
- package/dist/src/budget/manager.js +547 -0
- package/dist/src/budget/manager.js.map +1 -0
- package/dist/src/budget/usage-extractor.d.ts +38 -0
- package/dist/src/budget/usage-extractor.d.ts.map +1 -0
- package/dist/src/budget/usage-extractor.js +165 -0
- package/dist/src/budget/usage-extractor.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +115 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/config/defaults.d.ts +3 -0
- package/dist/src/config/defaults.d.ts.map +1 -0
- package/dist/src/config/defaults.js +243 -0
- package/dist/src/config/defaults.js.map +1 -0
- package/dist/src/config/validate.d.ts +15 -0
- package/dist/src/config/validate.d.ts.map +1 -0
- package/dist/src/config/validate.js +105 -0
- package/dist/src/config/validate.js.map +1 -0
- package/dist/src/dlp/composite-scanner.d.ts +47 -0
- package/dist/src/dlp/composite-scanner.d.ts.map +1 -0
- package/dist/src/dlp/composite-scanner.js +186 -0
- package/dist/src/dlp/composite-scanner.js.map +1 -0
- package/dist/src/dlp/index.d.ts +10 -0
- package/dist/src/dlp/index.d.ts.map +1 -0
- package/dist/src/dlp/index.js +26 -0
- package/dist/src/dlp/index.js.map +1 -0
- package/dist/src/dlp/interfaces.d.ts +33 -0
- package/dist/src/dlp/interfaces.d.ts.map +1 -0
- package/dist/src/dlp/interfaces.js +3 -0
- package/dist/src/dlp/interfaces.js.map +1 -0
- package/dist/src/dlp/patterns.d.ts +9 -0
- package/dist/src/dlp/patterns.d.ts.map +1 -0
- package/dist/src/dlp/patterns.js +25 -0
- package/dist/src/dlp/patterns.js.map +1 -0
- package/dist/src/dlp/prompt-injection-backend.d.ts +68 -0
- package/dist/src/dlp/prompt-injection-backend.d.ts.map +1 -0
- package/dist/src/dlp/prompt-injection-backend.js +148 -0
- package/dist/src/dlp/prompt-injection-backend.js.map +1 -0
- package/dist/src/dlp/prompt-injection-patterns.d.ts +32 -0
- package/dist/src/dlp/prompt-injection-patterns.d.ts.map +1 -0
- package/dist/src/dlp/prompt-injection-patterns.js +290 -0
- package/dist/src/dlp/prompt-injection-patterns.js.map +1 -0
- package/dist/src/dlp/regex-backend.d.ts +32 -0
- package/dist/src/dlp/regex-backend.d.ts.map +1 -0
- package/dist/src/dlp/regex-backend.js +153 -0
- package/dist/src/dlp/regex-backend.js.map +1 -0
- package/dist/src/dlp/scanner.d.ts +122 -0
- package/dist/src/dlp/scanner.d.ts.map +1 -0
- package/dist/src/dlp/scanner.js +444 -0
- package/dist/src/dlp/scanner.js.map +1 -0
- package/dist/src/dlp/text-normalizer.d.ts +41 -0
- package/dist/src/dlp/text-normalizer.d.ts.map +1 -0
- package/dist/src/dlp/text-normalizer.js +203 -0
- package/dist/src/dlp/text-normalizer.js.map +1 -0
- package/dist/src/dlp/trufflehog-backend.d.ts +64 -0
- package/dist/src/dlp/trufflehog-backend.d.ts.map +1 -0
- package/dist/src/dlp/trufflehog-backend.js +151 -0
- package/dist/src/dlp/trufflehog-backend.js.map +1 -0
- package/dist/src/executor/http-executor.d.ts +25 -0
- package/dist/src/executor/http-executor.d.ts.map +1 -0
- package/dist/src/executor/http-executor.js +333 -0
- package/dist/src/executor/http-executor.js.map +1 -0
- package/dist/src/executor/index.d.ts +6 -0
- package/dist/src/executor/index.d.ts.map +1 -0
- package/dist/src/executor/index.js +12 -0
- package/dist/src/executor/index.js.map +1 -0
- package/dist/src/executor/interfaces.d.ts +11 -0
- package/dist/src/executor/interfaces.d.ts.map +1 -0
- package/dist/src/executor/interfaces.js +3 -0
- package/dist/src/executor/interfaces.js.map +1 -0
- package/dist/src/executor/noop-executor.d.ts +13 -0
- package/dist/src/executor/noop-executor.d.ts.map +1 -0
- package/dist/src/executor/noop-executor.js +21 -0
- package/dist/src/executor/noop-executor.js.map +1 -0
- package/dist/src/executor/registry.d.ts +30 -0
- package/dist/src/executor/registry.d.ts.map +1 -0
- package/dist/src/executor/registry.js +62 -0
- package/dist/src/executor/registry.js.map +1 -0
- package/dist/src/executor/slack-executor.d.ts +24 -0
- package/dist/src/executor/slack-executor.d.ts.map +1 -0
- package/dist/src/executor/slack-executor.js +147 -0
- package/dist/src/executor/slack-executor.js.map +1 -0
- package/dist/src/index.d.ts +25 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +74 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/auth-verifier.d.ts +23 -0
- package/dist/src/mcp/auth-verifier.d.ts.map +1 -0
- package/dist/src/mcp/auth-verifier.js +162 -0
- package/dist/src/mcp/auth-verifier.js.map +1 -0
- package/dist/src/mcp/bridge.d.ts +132 -0
- package/dist/src/mcp/bridge.d.ts.map +1 -0
- package/dist/src/mcp/bridge.js +734 -0
- package/dist/src/mcp/bridge.js.map +1 -0
- package/dist/src/mcp/http-transport.d.ts +32 -0
- package/dist/src/mcp/http-transport.d.ts.map +1 -0
- package/dist/src/mcp/http-transport.js +538 -0
- package/dist/src/mcp/http-transport.js.map +1 -0
- package/dist/src/mcp/index.d.ts +10 -0
- package/dist/src/mcp/index.d.ts.map +1 -0
- package/dist/src/mcp/index.js +17 -0
- package/dist/src/mcp/index.js.map +1 -0
- package/dist/src/mcp/oauth-pages.d.ts +23 -0
- package/dist/src/mcp/oauth-pages.d.ts.map +1 -0
- package/dist/src/mcp/oauth-pages.js +121 -0
- package/dist/src/mcp/oauth-pages.js.map +1 -0
- package/dist/src/mcp/oauth-postgres-stores.d.ts +55 -0
- package/dist/src/mcp/oauth-postgres-stores.d.ts.map +1 -0
- package/dist/src/mcp/oauth-postgres-stores.js +226 -0
- package/dist/src/mcp/oauth-postgres-stores.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +95 -0
- package/dist/src/mcp/oauth-provider.d.ts.map +1 -0
- package/dist/src/mcp/oauth-provider.js +360 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-stores.d.ts +62 -0
- package/dist/src/mcp/oauth-stores.d.ts.map +1 -0
- package/dist/src/mcp/oauth-stores.js +154 -0
- package/dist/src/mcp/oauth-stores.js.map +1 -0
- package/dist/src/mcp/server.d.ts +18 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +51 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/metrics/collector.d.ts +106 -0
- package/dist/src/metrics/collector.d.ts.map +1 -0
- package/dist/src/metrics/collector.js +311 -0
- package/dist/src/metrics/collector.js.map +1 -0
- package/dist/src/metrics/index.d.ts +2 -0
- package/dist/src/metrics/index.d.ts.map +1 -0
- package/dist/src/metrics/index.js +6 -0
- package/dist/src/metrics/index.js.map +1 -0
- package/dist/src/middleware/auth.d.ts +77 -0
- package/dist/src/middleware/auth.d.ts.map +1 -0
- package/dist/src/middleware/auth.js +720 -0
- package/dist/src/middleware/auth.js.map +1 -0
- package/dist/src/middleware/session.d.ts +18 -0
- package/dist/src/middleware/session.d.ts.map +1 -0
- package/dist/src/middleware/session.js +67 -0
- package/dist/src/middleware/session.js.map +1 -0
- package/dist/src/middleware/validate.d.ts +3 -0
- package/dist/src/middleware/validate.d.ts.map +1 -0
- package/dist/src/middleware/validate.js +85 -0
- package/dist/src/middleware/validate.js.map +1 -0
- package/dist/src/policy/engine.d.ts +107 -0
- package/dist/src/policy/engine.d.ts.map +1 -0
- package/dist/src/policy/engine.js +646 -0
- package/dist/src/policy/engine.js.map +1 -0
- package/dist/src/policy/index.d.ts +3 -0
- package/dist/src/policy/index.d.ts.map +1 -0
- package/dist/src/policy/index.js +8 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/opa-engine.d.ts +176 -0
- package/dist/src/policy/opa-engine.d.ts.map +1 -0
- package/dist/src/policy/opa-engine.js +790 -0
- package/dist/src/policy/opa-engine.js.map +1 -0
- package/dist/src/proxy/forward-proxy.d.ts +30 -0
- package/dist/src/proxy/forward-proxy.d.ts.map +1 -0
- package/dist/src/proxy/forward-proxy.js +580 -0
- package/dist/src/proxy/forward-proxy.js.map +1 -0
- package/dist/src/proxy/index.d.ts +2 -0
- package/dist/src/proxy/index.d.ts.map +1 -0
- package/dist/src/proxy/index.js +8 -0
- package/dist/src/proxy/index.js.map +1 -0
- package/dist/src/ratelimit/limiter.d.ts +45 -0
- package/dist/src/ratelimit/limiter.d.ts.map +1 -0
- package/dist/src/ratelimit/limiter.js +158 -0
- package/dist/src/ratelimit/limiter.js.map +1 -0
- package/dist/src/replay/engine.d.ts +40 -0
- package/dist/src/replay/engine.d.ts.map +1 -0
- package/dist/src/replay/engine.js +106 -0
- package/dist/src/replay/engine.js.map +1 -0
- package/dist/src/replay/index.d.ts +2 -0
- package/dist/src/replay/index.d.ts.map +1 -0
- package/dist/src/replay/index.js +6 -0
- package/dist/src/replay/index.js.map +1 -0
- package/dist/src/saas/index.d.ts +2 -0
- package/dist/src/saas/index.d.ts.map +1 -0
- package/dist/src/saas/index.js +18 -0
- package/dist/src/saas/index.js.map +1 -0
- package/dist/src/saas/routes.d.ts +18 -0
- package/dist/src/saas/routes.d.ts.map +1 -0
- package/dist/src/saas/routes.js +1566 -0
- package/dist/src/saas/routes.js.map +1 -0
- package/dist/src/server/app.d.ts +44 -0
- package/dist/src/server/app.d.ts.map +1 -0
- package/dist/src/server/app.js +854 -0
- package/dist/src/server/app.js.map +1 -0
- package/dist/src/server/errors.d.ts +32 -0
- package/dist/src/server/errors.d.ts.map +1 -0
- package/dist/src/server/errors.js +39 -0
- package/dist/src/server/errors.js.map +1 -0
- package/dist/src/server/gateway.d.ts +165 -0
- package/dist/src/server/gateway.d.ts.map +1 -0
- package/dist/src/server/gateway.js +964 -0
- package/dist/src/server/gateway.js.map +1 -0
- package/dist/src/server/index.d.ts +2 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +295 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/logger.d.ts +33 -0
- package/dist/src/server/logger.d.ts.map +1 -0
- package/dist/src/server/logger.js +230 -0
- package/dist/src/server/logger.js.map +1 -0
- package/dist/src/server/stream-proxy.d.ts +32 -0
- package/dist/src/server/stream-proxy.d.ts.map +1 -0
- package/dist/src/server/stream-proxy.js +184 -0
- package/dist/src/server/stream-proxy.js.map +1 -0
- package/dist/src/storage/file-persistence.d.ts +48 -0
- package/dist/src/storage/file-persistence.d.ts.map +1 -0
- package/dist/src/storage/file-persistence.js +280 -0
- package/dist/src/storage/file-persistence.js.map +1 -0
- package/dist/src/storage/index.d.ts +5 -0
- package/dist/src/storage/index.d.ts.map +1 -0
- package/dist/src/storage/index.js +21 -0
- package/dist/src/storage/index.js.map +1 -0
- package/dist/src/storage/interfaces.d.ts +237 -0
- package/dist/src/storage/interfaces.d.ts.map +1 -0
- package/dist/src/storage/interfaces.js +3 -0
- package/dist/src/storage/interfaces.js.map +1 -0
- package/dist/src/storage/memory.d.ts +162 -0
- package/dist/src/storage/memory.d.ts.map +1 -0
- package/dist/src/storage/memory.js +603 -0
- package/dist/src/storage/memory.js.map +1 -0
- package/dist/src/storage/postgres.d.ts +267 -0
- package/dist/src/storage/postgres.d.ts.map +1 -0
- package/dist/src/storage/postgres.js +1555 -0
- package/dist/src/storage/postgres.js.map +1 -0
- package/dist/src/storage/redis.d.ts +202 -0
- package/dist/src/storage/redis.d.ts.map +1 -0
- package/dist/src/storage/redis.js +629 -0
- package/dist/src/storage/redis.js.map +1 -0
- package/dist/src/tracing/index.d.ts +2 -0
- package/dist/src/tracing/index.d.ts.map +1 -0
- package/dist/src/tracing/index.js +6 -0
- package/dist/src/tracing/index.js.map +1 -0
- package/dist/src/tracing/provider.d.ts +43 -0
- package/dist/src/tracing/provider.d.ts.map +1 -0
- package/dist/src/tracing/provider.js +74 -0
- package/dist/src/tracing/provider.js.map +1 -0
- package/dist/src/trust/calculator.d.ts +54 -0
- package/dist/src/trust/calculator.d.ts.map +1 -0
- package/dist/src/trust/calculator.js +102 -0
- package/dist/src/trust/calculator.js.map +1 -0
- package/dist/src/trust/index.d.ts +2 -0
- package/dist/src/trust/index.d.ts.map +1 -0
- package/dist/src/trust/index.js +7 -0
- package/dist/src/trust/index.js.map +1 -0
- package/dist/src/types/budget.d.ts +30 -0
- package/dist/src/types/budget.d.ts.map +1 -0
- package/dist/src/types/budget.js +3 -0
- package/dist/src/types/budget.js.map +1 -0
- package/dist/src/types/config.d.ts +176 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +3 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/events.d.ts +24 -0
- package/dist/src/types/events.d.ts.map +1 -0
- package/dist/src/types/events.js +3 -0
- package/dist/src/types/events.js.map +1 -0
- package/dist/src/types/index.d.ts +8 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +24 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/policy.d.ts +60 -0
- package/dist/src/types/policy.d.ts.map +1 -0
- package/dist/src/types/policy.js +3 -0
- package/dist/src/types/policy.js.map +1 -0
- package/dist/src/types/stripe-config.d.ts +12 -0
- package/dist/src/types/stripe-config.d.ts.map +1 -0
- package/dist/src/types/stripe-config.js +3 -0
- package/dist/src/types/stripe-config.js.map +1 -0
- package/dist/src/types/subscription.d.ts +24 -0
- package/dist/src/types/subscription.d.ts.map +1 -0
- package/dist/src/types/subscription.js +38 -0
- package/dist/src/types/subscription.js.map +1 -0
- package/dist/src/types/tool-call.d.ts +42 -0
- package/dist/src/types/tool-call.d.ts.map +1 -0
- package/dist/src/types/tool-call.js +3 -0
- package/dist/src/types/tool-call.js.map +1 -0
- package/dist/src/types/tool-result.d.ts +58 -0
- package/dist/src/types/tool-result.d.ts.map +1 -0
- package/dist/src/types/tool-result.js +3 -0
- package/dist/src/types/tool-result.js.map +1 -0
- package/dist/src/types/user.d.ts +101 -0
- package/dist/src/types/user.d.ts.map +1 -0
- package/dist/src/types/user.js +6 -0
- package/dist/src/types/user.js.map +1 -0
- package/dist/tests/integration/api.test.d.ts +2 -0
- package/dist/tests/integration/api.test.d.ts.map +1 -0
- package/dist/tests/integration/api.test.js +1199 -0
- package/dist/tests/integration/api.test.js.map +1 -0
- package/dist/tests/integration/proxy.test.d.ts +2 -0
- package/dist/tests/integration/proxy.test.d.ts.map +1 -0
- package/dist/tests/integration/proxy.test.js +251 -0
- package/dist/tests/integration/proxy.test.js.map +1 -0
- package/dist/tests/integration/storage.test.d.ts +16 -0
- package/dist/tests/integration/storage.test.d.ts.map +1 -0
- package/dist/tests/integration/storage.test.js +826 -0
- package/dist/tests/integration/storage.test.js.map +1 -0
- package/dist/tests/unit/admin.test.d.ts +2 -0
- package/dist/tests/unit/admin.test.d.ts.map +1 -0
- package/dist/tests/unit/admin.test.js +698 -0
- package/dist/tests/unit/admin.test.js.map +1 -0
- package/dist/tests/unit/anomaly-detector.test.d.ts +2 -0
- package/dist/tests/unit/anomaly-detector.test.d.ts.map +1 -0
- package/dist/tests/unit/anomaly-detector.test.js +903 -0
- package/dist/tests/unit/anomaly-detector.test.js.map +1 -0
- package/dist/tests/unit/approval-manager.test.d.ts +2 -0
- package/dist/tests/unit/approval-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/approval-manager.test.js +528 -0
- package/dist/tests/unit/approval-manager.test.js.map +1 -0
- package/dist/tests/unit/approval-webhook.test.d.ts +2 -0
- package/dist/tests/unit/approval-webhook.test.d.ts.map +1 -0
- package/dist/tests/unit/approval-webhook.test.js +355 -0
- package/dist/tests/unit/approval-webhook.test.js.map +1 -0
- package/dist/tests/unit/audit-logger.test.d.ts +2 -0
- package/dist/tests/unit/audit-logger.test.d.ts.map +1 -0
- package/dist/tests/unit/audit-logger.test.js +635 -0
- package/dist/tests/unit/audit-logger.test.js.map +1 -0
- package/dist/tests/unit/auth-routes.test.d.ts +2 -0
- package/dist/tests/unit/auth-routes.test.d.ts.map +1 -0
- package/dist/tests/unit/auth-routes.test.js +281 -0
- package/dist/tests/unit/auth-routes.test.js.map +1 -0
- package/dist/tests/unit/auth.test.d.ts +2 -0
- package/dist/tests/unit/auth.test.d.ts.map +1 -0
- package/dist/tests/unit/auth.test.js +1382 -0
- package/dist/tests/unit/auth.test.js.map +1 -0
- package/dist/tests/unit/billing.test.d.ts +2 -0
- package/dist/tests/unit/billing.test.d.ts.map +1 -0
- package/dist/tests/unit/billing.test.js +579 -0
- package/dist/tests/unit/billing.test.js.map +1 -0
- package/dist/tests/unit/budget-manager.test.d.ts +2 -0
- package/dist/tests/unit/budget-manager.test.d.ts.map +1 -0
- package/dist/tests/unit/budget-manager.test.js +778 -0
- package/dist/tests/unit/budget-manager.test.js.map +1 -0
- package/dist/tests/unit/budget-race.test.d.ts +2 -0
- package/dist/tests/unit/budget-race.test.d.ts.map +1 -0
- package/dist/tests/unit/budget-race.test.js +58 -0
- package/dist/tests/unit/budget-race.test.js.map +1 -0
- package/dist/tests/unit/cli.test.d.ts +2 -0
- package/dist/tests/unit/cli.test.d.ts.map +1 -0
- package/dist/tests/unit/cli.test.js +93 -0
- package/dist/tests/unit/cli.test.js.map +1 -0
- package/dist/tests/unit/concurrency.test.d.ts +2 -0
- package/dist/tests/unit/concurrency.test.d.ts.map +1 -0
- package/dist/tests/unit/concurrency.test.js +1270 -0
- package/dist/tests/unit/concurrency.test.js.map +1 -0
- package/dist/tests/unit/config-validate.test.d.ts +2 -0
- package/dist/tests/unit/config-validate.test.d.ts.map +1 -0
- package/dist/tests/unit/config-validate.test.js +230 -0
- package/dist/tests/unit/config-validate.test.js.map +1 -0
- package/dist/tests/unit/defaults.test.d.ts +2 -0
- package/dist/tests/unit/defaults.test.d.ts.map +1 -0
- package/dist/tests/unit/defaults.test.js +364 -0
- package/dist/tests/unit/defaults.test.js.map +1 -0
- package/dist/tests/unit/dlp-backends.test.d.ts +2 -0
- package/dist/tests/unit/dlp-backends.test.d.ts.map +1 -0
- package/dist/tests/unit/dlp-backends.test.js +563 -0
- package/dist/tests/unit/dlp-backends.test.js.map +1 -0
- package/dist/tests/unit/dlp-scanner.test.d.ts +2 -0
- package/dist/tests/unit/dlp-scanner.test.d.ts.map +1 -0
- package/dist/tests/unit/dlp-scanner.test.js +739 -0
- package/dist/tests/unit/dlp-scanner.test.js.map +1 -0
- package/dist/tests/unit/error-responses.test.d.ts +2 -0
- package/dist/tests/unit/error-responses.test.d.ts.map +1 -0
- package/dist/tests/unit/error-responses.test.js +101 -0
- package/dist/tests/unit/error-responses.test.js.map +1 -0
- package/dist/tests/unit/executor-registry.test.d.ts +2 -0
- package/dist/tests/unit/executor-registry.test.d.ts.map +1 -0
- package/dist/tests/unit/executor-registry.test.js +390 -0
- package/dist/tests/unit/executor-registry.test.js.map +1 -0
- package/dist/tests/unit/forward-proxy.test.d.ts +2 -0
- package/dist/tests/unit/forward-proxy.test.d.ts.map +1 -0
- package/dist/tests/unit/forward-proxy.test.js +621 -0
- package/dist/tests/unit/forward-proxy.test.js.map +1 -0
- package/dist/tests/unit/gateway-features.test.d.ts +2 -0
- package/dist/tests/unit/gateway-features.test.d.ts.map +1 -0
- package/dist/tests/unit/gateway-features.test.js +753 -0
- package/dist/tests/unit/gateway-features.test.js.map +1 -0
- package/dist/tests/unit/http-executor.test.d.ts +2 -0
- package/dist/tests/unit/http-executor.test.d.ts.map +1 -0
- package/dist/tests/unit/http-executor.test.js +310 -0
- package/dist/tests/unit/http-executor.test.js.map +1 -0
- package/dist/tests/unit/mcp-bridge.test.d.ts +2 -0
- package/dist/tests/unit/mcp-bridge.test.d.ts.map +1 -0
- package/dist/tests/unit/mcp-bridge.test.js +1136 -0
- package/dist/tests/unit/mcp-bridge.test.js.map +1 -0
- package/dist/tests/unit/mcp-http-transport.test.d.ts +2 -0
- package/dist/tests/unit/mcp-http-transport.test.d.ts.map +1 -0
- package/dist/tests/unit/mcp-http-transport.test.js +899 -0
- package/dist/tests/unit/mcp-http-transport.test.js.map +1 -0
- package/dist/tests/unit/mcp-oauth.test.d.ts +2 -0
- package/dist/tests/unit/mcp-oauth.test.d.ts.map +1 -0
- package/dist/tests/unit/mcp-oauth.test.js +759 -0
- package/dist/tests/unit/mcp-oauth.test.js.map +1 -0
- package/dist/tests/unit/mcp-server.test.d.ts +15 -0
- package/dist/tests/unit/mcp-server.test.d.ts.map +1 -0
- package/dist/tests/unit/mcp-server.test.js +158 -0
- package/dist/tests/unit/mcp-server.test.js.map +1 -0
- package/dist/tests/unit/metrics.test.d.ts +2 -0
- package/dist/tests/unit/metrics.test.d.ts.map +1 -0
- package/dist/tests/unit/metrics.test.js +208 -0
- package/dist/tests/unit/metrics.test.js.map +1 -0
- package/dist/tests/unit/oauth.test.d.ts +2 -0
- package/dist/tests/unit/oauth.test.d.ts.map +1 -0
- package/dist/tests/unit/oauth.test.js +281 -0
- package/dist/tests/unit/oauth.test.js.map +1 -0
- package/dist/tests/unit/opa-circuit-breaker.test.d.ts +2 -0
- package/dist/tests/unit/opa-circuit-breaker.test.d.ts.map +1 -0
- package/dist/tests/unit/opa-circuit-breaker.test.js +297 -0
- package/dist/tests/unit/opa-circuit-breaker.test.js.map +1 -0
- package/dist/tests/unit/opa-engine.test.d.ts +2 -0
- package/dist/tests/unit/opa-engine.test.d.ts.map +1 -0
- package/dist/tests/unit/opa-engine.test.js +1813 -0
- package/dist/tests/unit/opa-engine.test.js.map +1 -0
- package/dist/tests/unit/pipeline-timing.test.d.ts +2 -0
- package/dist/tests/unit/pipeline-timing.test.d.ts.map +1 -0
- package/dist/tests/unit/pipeline-timing.test.js +528 -0
- package/dist/tests/unit/pipeline-timing.test.js.map +1 -0
- package/dist/tests/unit/policy-engine.test.d.ts +2 -0
- package/dist/tests/unit/policy-engine.test.d.ts.map +1 -0
- package/dist/tests/unit/policy-engine.test.js +1345 -0
- package/dist/tests/unit/policy-engine.test.js.map +1 -0
- package/dist/tests/unit/policy-store.test.d.ts +2 -0
- package/dist/tests/unit/policy-store.test.d.ts.map +1 -0
- package/dist/tests/unit/policy-store.test.js +60 -0
- package/dist/tests/unit/policy-store.test.js.map +1 -0
- package/dist/tests/unit/postgres-storage.test.d.ts +2 -0
- package/dist/tests/unit/postgres-storage.test.d.ts.map +1 -0
- package/dist/tests/unit/postgres-storage.test.js +614 -0
- package/dist/tests/unit/postgres-storage.test.js.map +1 -0
- package/dist/tests/unit/prompt-injection-backend.test.d.ts +2 -0
- package/dist/tests/unit/prompt-injection-backend.test.d.ts.map +1 -0
- package/dist/tests/unit/prompt-injection-backend.test.js +621 -0
- package/dist/tests/unit/prompt-injection-backend.test.js.map +1 -0
- package/dist/tests/unit/proxy-hardening.test.d.ts +2 -0
- package/dist/tests/unit/proxy-hardening.test.d.ts.map +1 -0
- package/dist/tests/unit/proxy-hardening.test.js +166 -0
- package/dist/tests/unit/proxy-hardening.test.js.map +1 -0
- package/dist/tests/unit/rate-limiter.test.d.ts +2 -0
- package/dist/tests/unit/rate-limiter.test.d.ts.map +1 -0
- package/dist/tests/unit/rate-limiter.test.js +443 -0
- package/dist/tests/unit/rate-limiter.test.js.map +1 -0
- package/dist/tests/unit/redis-storage.test.d.ts +2 -0
- package/dist/tests/unit/redis-storage.test.d.ts.map +1 -0
- package/dist/tests/unit/redis-storage.test.js +766 -0
- package/dist/tests/unit/redis-storage.test.js.map +1 -0
- package/dist/tests/unit/replay-engine.test.d.ts +2 -0
- package/dist/tests/unit/replay-engine.test.d.ts.map +1 -0
- package/dist/tests/unit/replay-engine.test.js +371 -0
- package/dist/tests/unit/replay-engine.test.js.map +1 -0
- package/dist/tests/unit/saas-routes.test.d.ts +2 -0
- package/dist/tests/unit/saas-routes.test.d.ts.map +1 -0
- package/dist/tests/unit/saas-routes.test.js +1399 -0
- package/dist/tests/unit/saas-routes.test.js.map +1 -0
- package/dist/tests/unit/session.test.d.ts +2 -0
- package/dist/tests/unit/session.test.d.ts.map +1 -0
- package/dist/tests/unit/session.test.js +532 -0
- package/dist/tests/unit/session.test.js.map +1 -0
- package/dist/tests/unit/slack-executor.test.d.ts +2 -0
- package/dist/tests/unit/slack-executor.test.d.ts.map +1 -0
- package/dist/tests/unit/slack-executor.test.js +209 -0
- package/dist/tests/unit/slack-executor.test.js.map +1 -0
- package/dist/tests/unit/storage-hardening.test.d.ts +2 -0
- package/dist/tests/unit/storage-hardening.test.d.ts.map +1 -0
- package/dist/tests/unit/storage-hardening.test.js +165 -0
- package/dist/tests/unit/storage-hardening.test.js.map +1 -0
- package/dist/tests/unit/storage.test.d.ts +2 -0
- package/dist/tests/unit/storage.test.d.ts.map +1 -0
- package/dist/tests/unit/storage.test.js +698 -0
- package/dist/tests/unit/storage.test.js.map +1 -0
- package/dist/tests/unit/text-normalizer.test.d.ts +2 -0
- package/dist/tests/unit/text-normalizer.test.d.ts.map +1 -0
- package/dist/tests/unit/text-normalizer.test.js +229 -0
- package/dist/tests/unit/text-normalizer.test.js.map +1 -0
- package/dist/tests/unit/tracing.test.d.ts +2 -0
- package/dist/tests/unit/tracing.test.d.ts.map +1 -0
- package/dist/tests/unit/tracing.test.js +611 -0
- package/dist/tests/unit/tracing.test.js.map +1 -0
- package/dist/tests/unit/trust-calculator.test.d.ts +2 -0
- package/dist/tests/unit/trust-calculator.test.d.ts.map +1 -0
- package/dist/tests/unit/trust-calculator.test.js +497 -0
- package/dist/tests/unit/trust-calculator.test.js.map +1 -0
- package/dist/tests/unit/ts-sdk.test.d.ts +2 -0
- package/dist/tests/unit/ts-sdk.test.d.ts.map +1 -0
- package/dist/tests/unit/ts-sdk.test.js +421 -0
- package/dist/tests/unit/ts-sdk.test.js.map +1 -0
- package/dist/tests/unit/usage-extractor-llm.test.d.ts +2 -0
- package/dist/tests/unit/usage-extractor-llm.test.d.ts.map +1 -0
- package/dist/tests/unit/usage-extractor-llm.test.js +139 -0
- package/dist/tests/unit/usage-extractor-llm.test.js.map +1 -0
- package/dist/tests/unit/usage-extractor.test.d.ts +2 -0
- package/dist/tests/unit/usage-extractor.test.d.ts.map +1 -0
- package/dist/tests/unit/usage-extractor.test.js +271 -0
- package/dist/tests/unit/usage-extractor.test.js.map +1 -0
- package/dist/tests/unit/user-stores.test.d.ts +2 -0
- package/dist/tests/unit/user-stores.test.d.ts.map +1 -0
- package/dist/tests/unit/user-stores.test.js +687 -0
- package/dist/tests/unit/user-stores.test.js.map +1 -0
- package/dist/tests/unit/validate.test.d.ts +2 -0
- package/dist/tests/unit/validate.test.d.ts.map +1 -0
- package/dist/tests/unit/validate.test.js +545 -0
- package/dist/tests/unit/validate.test.js.map +1 -0
- package/package.json +86 -0
- package/policy-packs/README.md +42 -0
- package/policy-packs/default.yaml +46 -0
- package/policy-packs/dev_fast.yaml +54 -0
- package/policy-packs/prod_strict.yaml +83 -0
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Text normalizer for bypass-resistant prompt injection detection.
|
|
4
|
+
*
|
|
5
|
+
* Applies a series of transformations to collapse evasion techniques
|
|
6
|
+
* (zero-width chars, HTML entities, homoglyphs, leetspeak, etc.)
|
|
7
|
+
* into canonical ASCII text before pattern matching.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.LEETSPEAK_MAP = exports.HOMOGLYPH_MAP = exports.ZERO_WIDTH_REGEX = void 0;
|
|
11
|
+
exports.normalizeText = normalizeText;
|
|
12
|
+
exports.normalizeLeetspeak = normalizeLeetspeak;
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// Zero-width character stripping
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
/** Regex matching zero-width and invisible Unicode characters. */
|
|
17
|
+
exports.ZERO_WIDTH_REGEX = /[\u200B\u200C\u200D\u00AD\uFEFF\u200E\u200F\u2060\u2061\u2062\u2063\u2064\u180E]/g;
|
|
18
|
+
// ---------------------------------------------------------------------------
|
|
19
|
+
// Homoglyph map (visually similar characters -> ASCII equivalents)
|
|
20
|
+
// ---------------------------------------------------------------------------
|
|
21
|
+
/** Map of Unicode homoglyphs to their ASCII equivalents. */
|
|
22
|
+
exports.HOMOGLYPH_MAP = {
|
|
23
|
+
// Cyrillic -> Latin
|
|
24
|
+
'\u0430': 'a', // а
|
|
25
|
+
'\u0435': 'e', // е
|
|
26
|
+
'\u043E': 'o', // о
|
|
27
|
+
'\u0440': 'p', // р
|
|
28
|
+
'\u0441': 'c', // с
|
|
29
|
+
'\u0443': 'y', // у
|
|
30
|
+
'\u0445': 'x', // х
|
|
31
|
+
'\u0456': 'i', // і
|
|
32
|
+
'\u0458': 'j', // ј
|
|
33
|
+
'\u04BB': 'h', // һ
|
|
34
|
+
'\u0410': 'A', // А
|
|
35
|
+
'\u0412': 'B', // В
|
|
36
|
+
'\u0415': 'E', // Е
|
|
37
|
+
'\u041A': 'K', // К
|
|
38
|
+
'\u041C': 'M', // М
|
|
39
|
+
'\u041D': 'H', // Н
|
|
40
|
+
'\u041E': 'O', // О
|
|
41
|
+
'\u0420': 'P', // Р
|
|
42
|
+
'\u0421': 'C', // С
|
|
43
|
+
'\u0422': 'T', // Т
|
|
44
|
+
'\u0425': 'X', // Х
|
|
45
|
+
// Greek -> Latin
|
|
46
|
+
'\u03B1': 'a', // α
|
|
47
|
+
'\u03BF': 'o', // ο
|
|
48
|
+
'\u03C1': 'p', // ρ
|
|
49
|
+
'\u0391': 'A', // Α
|
|
50
|
+
'\u0392': 'B', // Β
|
|
51
|
+
'\u0395': 'E', // Ε
|
|
52
|
+
'\u0397': 'H', // Η
|
|
53
|
+
'\u0399': 'I', // Ι
|
|
54
|
+
'\u039A': 'K', // Κ
|
|
55
|
+
'\u039C': 'M', // Μ
|
|
56
|
+
'\u039D': 'N', // Ν
|
|
57
|
+
'\u039F': 'O', // Ο
|
|
58
|
+
'\u03A1': 'P', // Ρ
|
|
59
|
+
'\u03A4': 'T', // Τ
|
|
60
|
+
'\u03A7': 'X', // Χ
|
|
61
|
+
'\u03A5': 'Y', // Υ
|
|
62
|
+
'\u0396': 'Z', // Ζ
|
|
63
|
+
// Fullwidth -> ASCII (supplemental to NFKC — belt and suspenders)
|
|
64
|
+
'\uFF41': 'a',
|
|
65
|
+
'\uFF42': 'b',
|
|
66
|
+
'\uFF43': 'c',
|
|
67
|
+
'\uFF49': 'i',
|
|
68
|
+
'\uFF4E': 'n',
|
|
69
|
+
'\uFF4F': 'o',
|
|
70
|
+
'\uFF50': 'p',
|
|
71
|
+
'\uFF52': 'r',
|
|
72
|
+
'\uFF53': 's',
|
|
73
|
+
'\uFF54': 't',
|
|
74
|
+
'\uFF55': 'u',
|
|
75
|
+
// Common lookalikes
|
|
76
|
+
'\u0131': 'i', // ı (dotless i)
|
|
77
|
+
'\u0237': 'j', // ȷ (dotless j)
|
|
78
|
+
'\u01C0': 'l', // ǀ (dental click -> l)
|
|
79
|
+
};
|
|
80
|
+
// Build reverse lookup for efficiency
|
|
81
|
+
const homoglyphRegex = new RegExp('[' + Object.keys(exports.HOMOGLYPH_MAP).join('') + ']', 'g');
|
|
82
|
+
// ---------------------------------------------------------------------------
|
|
83
|
+
// Leetspeak map
|
|
84
|
+
// ---------------------------------------------------------------------------
|
|
85
|
+
/** Map of common leetspeak substitutions to their letter equivalents. */
|
|
86
|
+
exports.LEETSPEAK_MAP = {
|
|
87
|
+
'0': 'o',
|
|
88
|
+
'1': 'i',
|
|
89
|
+
'3': 'e',
|
|
90
|
+
'4': 'a',
|
|
91
|
+
'5': 's',
|
|
92
|
+
'7': 't',
|
|
93
|
+
'@': 'a',
|
|
94
|
+
'$': 's',
|
|
95
|
+
'!': 'i',
|
|
96
|
+
};
|
|
97
|
+
const leetspeakRegex = /[013457@$!]/g;
|
|
98
|
+
// ---------------------------------------------------------------------------
|
|
99
|
+
// HTML entity decoding
|
|
100
|
+
// ---------------------------------------------------------------------------
|
|
101
|
+
/** Named HTML entities most commonly used for evasion. */
|
|
102
|
+
const NAMED_ENTITIES = {
|
|
103
|
+
'<': '<',
|
|
104
|
+
'>': '>',
|
|
105
|
+
'&': '&',
|
|
106
|
+
'"': '"',
|
|
107
|
+
''': "'",
|
|
108
|
+
' ': ' ',
|
|
109
|
+
'&tab;': '\t',
|
|
110
|
+
};
|
|
111
|
+
/** Decode HTML entities (named + numeric decimal + numeric hex). */
|
|
112
|
+
function decodeHTMLEntities(input) {
|
|
113
|
+
// Named entities
|
|
114
|
+
let result = input;
|
|
115
|
+
for (const [entity, char] of Object.entries(NAMED_ENTITIES)) {
|
|
116
|
+
// Case-insensitive replacement for named entities
|
|
117
|
+
const re = new RegExp(entity.replace(/[&;]/g, (c) => '\\' + c), 'gi');
|
|
118
|
+
result = result.replace(re, char);
|
|
119
|
+
}
|
|
120
|
+
// Decimal numeric entities: i -> 'i'
|
|
121
|
+
result = result.replace(/&#(\d+);/g, (_match, digits) => {
|
|
122
|
+
const code = parseInt(digits, 10);
|
|
123
|
+
if (code > 0 && code <= 0x10FFFF) {
|
|
124
|
+
return String.fromCodePoint(code);
|
|
125
|
+
}
|
|
126
|
+
return _match;
|
|
127
|
+
});
|
|
128
|
+
// Hex numeric entities: i -> 'i'
|
|
129
|
+
result = result.replace(/&#x([0-9a-fA-F]+);/g, (_match, hex) => {
|
|
130
|
+
const code = parseInt(hex, 16);
|
|
131
|
+
if (code > 0 && code <= 0x10FFFF) {
|
|
132
|
+
return String.fromCodePoint(code);
|
|
133
|
+
}
|
|
134
|
+
return _match;
|
|
135
|
+
});
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
// ---------------------------------------------------------------------------
|
|
139
|
+
// URL decoding
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
/** Decode percent-encoded sequences (%69 -> 'i'). */
|
|
142
|
+
function decodeURLEncoding(input) {
|
|
143
|
+
try {
|
|
144
|
+
return decodeURIComponent(input);
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// If decoding fails (malformed sequences), apply partial decoding
|
|
148
|
+
return input.replace(/%([0-9a-fA-F]{2})/g, (_match, hex) => {
|
|
149
|
+
return String.fromCharCode(parseInt(hex, 16));
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Main normalizer
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
/**
|
|
157
|
+
* Normalize text for bypass-resistant pattern matching.
|
|
158
|
+
*
|
|
159
|
+
* Applies transformations in order:
|
|
160
|
+
* 1. Strip zero-width / invisible Unicode characters
|
|
161
|
+
* 2. Unicode NFKC normalization (collapses fullwidth, ligatures, etc.)
|
|
162
|
+
* 3. Decode HTML entities (named + numeric)
|
|
163
|
+
* 4. Decode URL percent-encoding
|
|
164
|
+
* 5. Collapse homoglyphs (Cyrillic/Greek lookalikes -> ASCII)
|
|
165
|
+
* 6. Collapse repeated whitespace to single space
|
|
166
|
+
*
|
|
167
|
+
* @param input - The raw text to normalize.
|
|
168
|
+
* @returns The normalized text suitable for pattern matching.
|
|
169
|
+
*/
|
|
170
|
+
function normalizeText(input) {
|
|
171
|
+
// Early exit for very short strings
|
|
172
|
+
if (input.length === 0)
|
|
173
|
+
return input;
|
|
174
|
+
let text = input;
|
|
175
|
+
// 1. Strip zero-width characters
|
|
176
|
+
text = text.replace(exports.ZERO_WIDTH_REGEX, '');
|
|
177
|
+
// 2. NFKC normalization (fullwidth -> ASCII, ligatures -> components, etc.)
|
|
178
|
+
text = text.normalize('NFKC');
|
|
179
|
+
// 3. Decode HTML entities
|
|
180
|
+
text = decodeHTMLEntities(text);
|
|
181
|
+
// 4. Decode URL percent-encoding
|
|
182
|
+
text = decodeURLEncoding(text);
|
|
183
|
+
// 5. Collapse homoglyphs
|
|
184
|
+
text = text.replace(homoglyphRegex, (ch) => exports.HOMOGLYPH_MAP[ch] || ch);
|
|
185
|
+
// 6. Collapse whitespace (spaces, tabs, newlines) to single space and trim
|
|
186
|
+
text = text.replace(/\s+/g, ' ').trim();
|
|
187
|
+
return text;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Apply leetspeak normalization on top of standard normalization.
|
|
191
|
+
*
|
|
192
|
+
* Returns the leet-decoded version of the text. Callers should match
|
|
193
|
+
* patterns against BOTH the standard-normalized and leet-normalized text
|
|
194
|
+
* to catch leet evasions without causing false positives on normal text
|
|
195
|
+
* containing digits.
|
|
196
|
+
*
|
|
197
|
+
* @param normalizedInput - Text already passed through normalizeText().
|
|
198
|
+
* @returns The leet-decoded text.
|
|
199
|
+
*/
|
|
200
|
+
function normalizeLeetspeak(normalizedInput) {
|
|
201
|
+
return normalizedInput.replace(leetspeakRegex, (ch) => exports.LEETSPEAK_MAP[ch] || ch);
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=text-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-normalizer.js","sourceRoot":"","sources":["../../../src/dlp/text-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { DLPBackend, DLPDetection } from './interfaces';
|
|
2
|
+
/**
|
|
3
|
+
* Configuration for the TruffleHog DLP backend.
|
|
4
|
+
*/
|
|
5
|
+
export interface TruffleHogConfig {
|
|
6
|
+
/** Path to the trufflehog binary. Defaults to 'trufflehog' (resolved via PATH). */
|
|
7
|
+
binaryPath?: string;
|
|
8
|
+
/** Execution timeout in milliseconds. Defaults to 10000 (10s). */
|
|
9
|
+
timeout?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* DLP backend that delegates secret scanning to the TruffleHog binary.
|
|
13
|
+
*
|
|
14
|
+
* TruffleHog is a comprehensive secret scanner that supports 700+ detector
|
|
15
|
+
* types including verified credential checks against live services.
|
|
16
|
+
*
|
|
17
|
+
* This backend writes the input string to a temporary file, runs
|
|
18
|
+
* `trufflehog filesystem --json --no-update <tmpfile>`, and parses the
|
|
19
|
+
* line-delimited JSON output into DLPDetection objects.
|
|
20
|
+
*
|
|
21
|
+
* Graceful degradation: if the trufflehog binary is not installed or the
|
|
22
|
+
* process fails for any reason, the backend logs a warning and returns an
|
|
23
|
+
* empty array (no detections). This allows it to be safely composed with
|
|
24
|
+
* other backends without breaking the pipeline.
|
|
25
|
+
*/
|
|
26
|
+
export declare class TruffleHogBackend implements DLPBackend {
|
|
27
|
+
readonly name = "trufflehog";
|
|
28
|
+
private readonly binaryPath;
|
|
29
|
+
private readonly timeout;
|
|
30
|
+
constructor(config?: TruffleHogConfig);
|
|
31
|
+
/**
|
|
32
|
+
* Scan a string for secrets using trufflehog.
|
|
33
|
+
*
|
|
34
|
+
* 1. Writes the value to a temp file
|
|
35
|
+
* 2. Runs trufflehog filesystem in JSON mode
|
|
36
|
+
* 3. Parses each JSON line into a DLPDetection
|
|
37
|
+
* 4. Cleans up the temp file
|
|
38
|
+
*
|
|
39
|
+
* Returns an empty array if trufflehog is not available or fails.
|
|
40
|
+
*/
|
|
41
|
+
scanString(value: string): DLPDetection[];
|
|
42
|
+
/**
|
|
43
|
+
* Parse trufflehog JSON output (one JSON object per line) into DLPDetection[].
|
|
44
|
+
*
|
|
45
|
+
* Each line is an independent JSON object representing a single finding.
|
|
46
|
+
*/
|
|
47
|
+
private parseOutput;
|
|
48
|
+
/**
|
|
49
|
+
* Convert a single trufflehog finding to a DLPDetection.
|
|
50
|
+
*
|
|
51
|
+
* Severity mapping:
|
|
52
|
+
* - Verified findings -> 'high' (credential confirmed active)
|
|
53
|
+
* - Unverified findings -> 'medium' (potential secret)
|
|
54
|
+
*/
|
|
55
|
+
private findingToDetection;
|
|
56
|
+
/**
|
|
57
|
+
* Check if the error is simply a "no findings" situation rather than a real failure.
|
|
58
|
+
*
|
|
59
|
+
* TruffleHog may exit with code 0 and empty output, or in some versions
|
|
60
|
+
* it may produce an error-like message when there are no findings.
|
|
61
|
+
*/
|
|
62
|
+
private isNoFindingsError;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=trufflehog-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehog-backend.d.ts","sourceRoot":"","sources":["../../../src/dlp/trufflehog-backend.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,mFAAmF;IACnF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAiBD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,iBAAkB,YAAW,UAAU;IAClD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,CAAC,EAAE,gBAAgB;IAKrC;;;;;;;;;OASG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE;IAqCzC;;;;OAIG;IACH,OAAO,CAAC,WAAW;IA2BnB;;;;;;OAMG;IACH,OAAO,CAAC,kBAAkB;IAiC1B;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;CAK1B"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TruffleHogBackend = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const os_1 = require("os");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const crypto_1 = require("crypto");
|
|
9
|
+
/**
|
|
10
|
+
* DLP backend that delegates secret scanning to the TruffleHog binary.
|
|
11
|
+
*
|
|
12
|
+
* TruffleHog is a comprehensive secret scanner that supports 700+ detector
|
|
13
|
+
* types including verified credential checks against live services.
|
|
14
|
+
*
|
|
15
|
+
* This backend writes the input string to a temporary file, runs
|
|
16
|
+
* `trufflehog filesystem --json --no-update <tmpfile>`, and parses the
|
|
17
|
+
* line-delimited JSON output into DLPDetection objects.
|
|
18
|
+
*
|
|
19
|
+
* Graceful degradation: if the trufflehog binary is not installed or the
|
|
20
|
+
* process fails for any reason, the backend logs a warning and returns an
|
|
21
|
+
* empty array (no detections). This allows it to be safely composed with
|
|
22
|
+
* other backends without breaking the pipeline.
|
|
23
|
+
*/
|
|
24
|
+
class TruffleHogBackend {
|
|
25
|
+
constructor(config) {
|
|
26
|
+
this.name = 'trufflehog';
|
|
27
|
+
this.binaryPath = config?.binaryPath ?? 'trufflehog';
|
|
28
|
+
this.timeout = config?.timeout ?? 10000;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Scan a string for secrets using trufflehog.
|
|
32
|
+
*
|
|
33
|
+
* 1. Writes the value to a temp file
|
|
34
|
+
* 2. Runs trufflehog filesystem in JSON mode
|
|
35
|
+
* 3. Parses each JSON line into a DLPDetection
|
|
36
|
+
* 4. Cleans up the temp file
|
|
37
|
+
*
|
|
38
|
+
* Returns an empty array if trufflehog is not available or fails.
|
|
39
|
+
*/
|
|
40
|
+
scanString(value) {
|
|
41
|
+
const tmpFile = (0, path_1.join)((0, os_1.tmpdir)(), `palaryn-dlp-${(0, crypto_1.randomUUID)()}.tmp`);
|
|
42
|
+
try {
|
|
43
|
+
// Write input to temp file for trufflehog to scan
|
|
44
|
+
(0, fs_1.writeFileSync)(tmpFile, value, 'utf-8');
|
|
45
|
+
// Execute trufflehog
|
|
46
|
+
const stdout = (0, child_process_1.execFileSync)(this.binaryPath, ['filesystem', '--json', '--no-update', tmpFile], {
|
|
47
|
+
timeout: this.timeout,
|
|
48
|
+
encoding: 'utf-8',
|
|
49
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
50
|
+
});
|
|
51
|
+
return this.parseOutput(stdout, value);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
// Graceful degradation: log and return empty
|
|
55
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
56
|
+
// Only log if it's not a "no findings" exit (trufflehog exits 0 with no output when clean)
|
|
57
|
+
if (!this.isNoFindingsError(message)) {
|
|
58
|
+
console.warn(`[TruffleHogBackend] scan failed: ${message}`);
|
|
59
|
+
}
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
finally {
|
|
63
|
+
// Always clean up the temp file
|
|
64
|
+
try {
|
|
65
|
+
(0, fs_1.unlinkSync)(tmpFile);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// Ignore cleanup errors
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Parse trufflehog JSON output (one JSON object per line) into DLPDetection[].
|
|
74
|
+
*
|
|
75
|
+
* Each line is an independent JSON object representing a single finding.
|
|
76
|
+
*/
|
|
77
|
+
parseOutput(stdout, originalValue) {
|
|
78
|
+
if (!stdout || !stdout.trim()) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const detections = [];
|
|
82
|
+
const lines = stdout.trim().split('\n');
|
|
83
|
+
for (const line of lines) {
|
|
84
|
+
const trimmed = line.trim();
|
|
85
|
+
if (!trimmed)
|
|
86
|
+
continue;
|
|
87
|
+
try {
|
|
88
|
+
const finding = JSON.parse(trimmed);
|
|
89
|
+
const detection = this.findingToDetection(finding, originalValue);
|
|
90
|
+
if (detection) {
|
|
91
|
+
detections.push(detection);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Skip malformed JSON lines
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return detections;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Convert a single trufflehog finding to a DLPDetection.
|
|
103
|
+
*
|
|
104
|
+
* Severity mapping:
|
|
105
|
+
* - Verified findings -> 'high' (credential confirmed active)
|
|
106
|
+
* - Unverified findings -> 'medium' (potential secret)
|
|
107
|
+
*/
|
|
108
|
+
findingToDetection(finding, originalValue) {
|
|
109
|
+
const detectorName = finding.DetectorName;
|
|
110
|
+
if (!detectorName) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const raw = finding.Raw || finding.RawV2 || '';
|
|
114
|
+
const severity = finding.Verified ? 'high' : 'medium';
|
|
115
|
+
// Locate the raw finding within the original string
|
|
116
|
+
let start = 0;
|
|
117
|
+
let end = 0;
|
|
118
|
+
if (raw) {
|
|
119
|
+
const idx = originalValue.indexOf(raw);
|
|
120
|
+
if (idx !== -1) {
|
|
121
|
+
start = idx;
|
|
122
|
+
end = idx + raw.length;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// If we can't locate the raw match, use the full string range
|
|
126
|
+
start = 0;
|
|
127
|
+
end = originalValue.length;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return {
|
|
131
|
+
pattern_name: `trufflehog:${detectorName}`,
|
|
132
|
+
severity,
|
|
133
|
+
match: raw || originalValue,
|
|
134
|
+
start,
|
|
135
|
+
end,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if the error is simply a "no findings" situation rather than a real failure.
|
|
140
|
+
*
|
|
141
|
+
* TruffleHog may exit with code 0 and empty output, or in some versions
|
|
142
|
+
* it may produce an error-like message when there are no findings.
|
|
143
|
+
*/
|
|
144
|
+
isNoFindingsError(message) {
|
|
145
|
+
// execFileSync throws if the process exits with non-zero or produces no output
|
|
146
|
+
// for an empty scan. Check for common benign patterns.
|
|
147
|
+
return message.includes('ENOENT') === false && message.includes('ETIMEDOUT') === false;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.TruffleHogBackend = TruffleHogBackend;
|
|
151
|
+
//# sourceMappingURL=trufflehog-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trufflehog-backend.js","sourceRoot":"","sources":["../../../src/dlp/trufflehog-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ToolCall } from '../types/tool-call';
|
|
2
|
+
import { ToolOutput } from '../types/tool-result';
|
|
3
|
+
import { ExecutorConfig } from '../types/config';
|
|
4
|
+
import { ToolExecutor } from './interfaces';
|
|
5
|
+
/**
|
|
6
|
+
* Check whether an IP address belongs to a private/reserved range.
|
|
7
|
+
* Blocks: loopback, link-local, private (RFC 1918), metadata endpoints,
|
|
8
|
+
* broadcast, multicast, and IPv6 equivalents.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isPrivateIP(ip: string): boolean;
|
|
11
|
+
export declare class HttpExecutor implements ToolExecutor {
|
|
12
|
+
private config;
|
|
13
|
+
private cache;
|
|
14
|
+
/** Set to false to disable SSRF protection (for testing only). */
|
|
15
|
+
ssrfProtectionEnabled: boolean;
|
|
16
|
+
constructor(config: ExecutorConfig);
|
|
17
|
+
execute(toolCall: ToolCall): Promise<ToolOutput>;
|
|
18
|
+
private makeRequest;
|
|
19
|
+
private getCacheKey;
|
|
20
|
+
private getFromCache;
|
|
21
|
+
private setCache;
|
|
22
|
+
clearCache(): void;
|
|
23
|
+
private sleep;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=http-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-executor.d.ts","sourceRoot":"","sources":["../../../src/executor/http-executor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAK5C;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CA0C/C;AAwCD,qBAAa,YAAa,YAAW,YAAY;IAC/C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAA0B;IACvC,kEAAkE;IAC3D,qBAAqB,EAAE,OAAO,CAAQ;gBAEjC,MAAM,EAAE,cAAc;IAM5B,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAmEtD,OAAO,CAAC,WAAW;IAwGnB,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,QAAQ;IAahB,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,KAAK;CAGd"}
|