@heossi/qnsi 0.3.2
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/CHANGELOG.md +67 -0
- package/LICENSE.md +8 -0
- package/README.md +200 -0
- package/dist/_activation/activation-client.d.ts +65 -0
- package/dist/_activation/activation-client.d.ts.map +1 -0
- package/dist/_activation/activation-client.js +164 -0
- package/dist/_activation/activation-client.js.map +1 -0
- package/dist/_activation/index.d.ts +10 -0
- package/dist/_activation/index.d.ts.map +1 -0
- package/dist/_activation/index.js +10 -0
- package/dist/_activation/index.js.map +1 -0
- package/dist/_activation/types.d.ts +128 -0
- package/dist/_activation/types.d.ts.map +1 -0
- package/dist/_activation/types.js +94 -0
- package/dist/_activation/types.js.map +1 -0
- package/dist/_internal.d.ts +52 -0
- package/dist/_internal.d.ts.map +1 -0
- package/dist/_internal.js +235 -0
- package/dist/_internal.js.map +1 -0
- package/dist/access.d.ts +32 -0
- package/dist/access.d.ts.map +1 -0
- package/dist/access.js +33 -0
- package/dist/access.js.map +1 -0
- package/dist/ai.d.ts +51 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +53 -0
- package/dist/ai.js.map +1 -0
- package/dist/audit.d.ts +18 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +21 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth.d.ts +31 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +69 -0
- package/dist/auth.js.map +1 -0
- package/dist/autogen/executor.d.ts +200 -0
- package/dist/autogen/executor.d.ts.map +1 -0
- package/dist/autogen/executor.js +277 -0
- package/dist/autogen/executor.js.map +1 -0
- package/dist/autogen/index.d.ts +18 -0
- package/dist/autogen/index.d.ts.map +1 -0
- package/dist/autogen/index.js +17 -0
- package/dist/autogen/index.js.map +1 -0
- package/dist/billing.d.ts +22 -0
- package/dist/billing.d.ts.map +1 -0
- package/dist/billing.js +33 -0
- package/dist/billing.js.map +1 -0
- package/dist/browser/encrypt.d.ts +68 -0
- package/dist/browser/encrypt.d.ts.map +1 -0
- package/dist/browser/encrypt.js +191 -0
- package/dist/browser/encrypt.js.map +1 -0
- package/dist/browser/index.d.ts +39 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +41 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/noble-provider.d.ts +10 -0
- package/dist/browser/noble-provider.d.ts.map +1 -0
- package/dist/browser/noble-provider.js +130 -0
- package/dist/browser/noble-provider.js.map +1 -0
- package/dist/browser/pqc-types.d.ts +40 -0
- package/dist/browser/pqc-types.d.ts.map +1 -0
- package/dist/browser/pqc-types.js +2 -0
- package/dist/browser/pqc-types.js.map +1 -0
- package/dist/browser/provider-setup.d.ts +70 -0
- package/dist/browser/provider-setup.d.ts.map +1 -0
- package/dist/browser/provider-setup.js +101 -0
- package/dist/browser/provider-setup.js.map +1 -0
- package/dist/browser/sdk-package-version.d.ts +12 -0
- package/dist/browser/sdk-package-version.d.ts.map +1 -0
- package/dist/browser/sdk-package-version.js +12 -0
- package/dist/browser/sdk-package-version.js.map +1 -0
- package/dist/browser/sign.d.ts +65 -0
- package/dist/browser/sign.d.ts.map +1 -0
- package/dist/browser/sign.js +124 -0
- package/dist/browser/sign.js.map +1 -0
- package/dist/browser/telemetry.d.ts +98 -0
- package/dist/browser/telemetry.d.ts.map +1 -0
- package/dist/browser/telemetry.js +93 -0
- package/dist/browser/telemetry.js.map +1 -0
- package/dist/cli/commands/access-control.d.ts +4 -0
- package/dist/cli/commands/access-control.d.ts.map +1 -0
- package/dist/cli/commands/access-control.js +183 -0
- package/dist/cli/commands/access-control.js.map +1 -0
- package/dist/cli/commands/audit.d.ts +4 -0
- package/dist/cli/commands/audit.d.ts.map +1 -0
- package/dist/cli/commands/audit.js +70 -0
- package/dist/cli/commands/audit.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +4 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +46 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/billing.d.ts +4 -0
- package/dist/cli/commands/billing.d.ts.map +1 -0
- package/dist/cli/commands/billing.js +179 -0
- package/dist/cli/commands/billing.js.map +1 -0
- package/dist/cli/commands/crypto-policy.d.ts +4 -0
- package/dist/cli/commands/crypto-policy.d.ts.map +1 -0
- package/dist/cli/commands/crypto-policy.js +130 -0
- package/dist/cli/commands/crypto-policy.js.map +1 -0
- package/dist/cli/commands/kms.d.ts +4 -0
- package/dist/cli/commands/kms.d.ts.map +1 -0
- package/dist/cli/commands/kms.js +153 -0
- package/dist/cli/commands/kms.js.map +1 -0
- package/dist/cli/commands/observability.d.ts +4 -0
- package/dist/cli/commands/observability.d.ts.map +1 -0
- package/dist/cli/commands/observability.js +97 -0
- package/dist/cli/commands/observability.js.map +1 -0
- package/dist/cli/commands/search.d.ts +4 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +66 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/security.d.ts +4 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +136 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/storage.d.ts +4 -0
- package/dist/cli/commands/storage.d.ts.map +1 -0
- package/dist/cli/commands/storage.js +85 -0
- package/dist/cli/commands/storage.js.map +1 -0
- package/dist/cli/commands/tenant.d.ts +4 -0
- package/dist/cli/commands/tenant.d.ts.map +1 -0
- package/dist/cli/commands/tenant.js +82 -0
- package/dist/cli/commands/tenant.js.map +1 -0
- package/dist/cli/commands/test-utils.d.ts +15 -0
- package/dist/cli/commands/test-utils.d.ts.map +1 -0
- package/dist/cli/commands/test-utils.js +72 -0
- package/dist/cli/commands/test-utils.js.map +1 -0
- package/dist/cli/commands/vault.d.ts +4 -0
- package/dist/cli/commands/vault.d.ts.map +1 -0
- package/dist/cli/commands/vault.js +111 -0
- package/dist/cli/commands/vault.js.map +1 -0
- package/dist/cli/config.d.ts +32 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +105 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +54 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/audit-logger.d.ts +17 -0
- package/dist/cli/utils/audit-logger.d.ts.map +1 -0
- package/dist/cli/utils/audit-logger.js +52 -0
- package/dist/cli/utils/audit-logger.js.map +1 -0
- package/dist/cli/utils/auth.d.ts +4 -0
- package/dist/cli/utils/auth.d.ts.map +1 -0
- package/dist/cli/utils/auth.js +100 -0
- package/dist/cli/utils/auth.js.map +1 -0
- package/dist/cli/utils/backend-validator.d.ts +19 -0
- package/dist/cli/utils/backend-validator.d.ts.map +1 -0
- package/dist/cli/utils/backend-validator.js +72 -0
- package/dist/cli/utils/backend-validator.js.map +1 -0
- package/dist/cli/utils/command-config.d.ts +4 -0
- package/dist/cli/utils/command-config.d.ts.map +1 -0
- package/dist/cli/utils/command-config.js +29 -0
- package/dist/cli/utils/command-config.js.map +1 -0
- package/dist/cli/utils/fetcher.d.ts +3 -0
- package/dist/cli/utils/fetcher.d.ts.map +1 -0
- package/dist/cli/utils/fetcher.js +30 -0
- package/dist/cli/utils/fetcher.js.map +1 -0
- package/dist/cli/utils/https-validator.d.ts +9 -0
- package/dist/cli/utils/https-validator.d.ts.map +1 -0
- package/dist/cli/utils/https-validator.js +35 -0
- package/dist/cli/utils/https-validator.js.map +1 -0
- package/dist/cli/utils/output.d.ts +6 -0
- package/dist/cli/utils/output.d.ts.map +1 -0
- package/dist/cli/utils/output.js +29 -0
- package/dist/cli/utils/output.js.map +1 -0
- package/dist/cli/utils/pqc-validator.d.ts +17 -0
- package/dist/cli/utils/pqc-validator.d.ts.map +1 -0
- package/dist/cli/utils/pqc-validator.js +62 -0
- package/dist/cli/utils/pqc-validator.js.map +1 -0
- package/dist/cli/utils/prompt.d.ts +4 -0
- package/dist/cli/utils/prompt.d.ts.map +1 -0
- package/dist/cli/utils/prompt.js +30 -0
- package/dist/cli/utils/prompt.js.map +1 -0
- package/dist/cli/utils/rate-limiter.d.ts +15 -0
- package/dist/cli/utils/rate-limiter.d.ts.map +1 -0
- package/dist/cli/utils/rate-limiter.js +46 -0
- package/dist/cli/utils/rate-limiter.js.map +1 -0
- package/dist/cli/utils/sanitize.d.ts +3 -0
- package/dist/cli/utils/sanitize.d.ts.map +1 -0
- package/dist/cli/utils/sanitize.js +44 -0
- package/dist/cli/utils/sanitize.js.map +1 -0
- package/dist/cli/utils/security-headers.d.ts +18 -0
- package/dist/cli/utils/security-headers.d.ts.map +1 -0
- package/dist/cli/utils/security-headers.js +32 -0
- package/dist/cli/utils/security-headers.js.map +1 -0
- package/dist/cli/utils/token-cache.d.ts +4 -0
- package/dist/cli/utils/token-cache.d.ts.map +1 -0
- package/dist/cli/utils/token-cache.js +22 -0
- package/dist/cli/utils/token-cache.js.map +1 -0
- package/dist/client.d.ts +52 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +78 -0
- package/dist/client.js.map +1 -0
- package/dist/crypto-inventory.d.ts +21 -0
- package/dist/crypto-inventory.d.ts.map +1 -0
- package/dist/crypto-inventory.js +28 -0
- package/dist/crypto-inventory.js.map +1 -0
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +64 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +50 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +51 -0
- package/dist/index.js.map +1 -0
- package/dist/kms.d.ts +30 -0
- package/dist/kms.d.ts.map +1 -0
- package/dist/kms.js +92 -0
- package/dist/kms.js.map +1 -0
- package/dist/langchain/index.d.ts +22 -0
- package/dist/langchain/index.d.ts.map +1 -0
- package/dist/langchain/index.js +23 -0
- package/dist/langchain/index.js.map +1 -0
- package/dist/langchain/toolkit.d.ts +85 -0
- package/dist/langchain/toolkit.d.ts.map +1 -0
- package/dist/langchain/toolkit.js +146 -0
- package/dist/langchain/toolkit.js.map +1 -0
- package/dist/langchain/tools/audit.d.ts +43 -0
- package/dist/langchain/tools/audit.d.ts.map +1 -0
- package/dist/langchain/tools/audit.js +78 -0
- package/dist/langchain/tools/audit.js.map +1 -0
- package/dist/langchain/tools/kms.d.ts +62 -0
- package/dist/langchain/tools/kms.d.ts.map +1 -0
- package/dist/langchain/tools/kms.js +120 -0
- package/dist/langchain/tools/kms.js.map +1 -0
- package/dist/langchain/tools/vault.d.ts +69 -0
- package/dist/langchain/tools/vault.d.ts.map +1 -0
- package/dist/langchain/tools/vault.js +107 -0
- package/dist/langchain/tools/vault.js.map +1 -0
- package/dist/langchain/vault-client.d.ts +82 -0
- package/dist/langchain/vault-client.d.ts.map +1 -0
- package/dist/langchain/vault-client.js +133 -0
- package/dist/langchain/vault-client.js.map +1 -0
- package/dist/llamaindex/index.d.ts +16 -0
- package/dist/llamaindex/index.d.ts.map +1 -0
- package/dist/llamaindex/index.js +15 -0
- package/dist/llamaindex/index.js.map +1 -0
- package/dist/llamaindex/sse.d.ts +36 -0
- package/dist/llamaindex/sse.d.ts.map +1 -0
- package/dist/llamaindex/sse.js +151 -0
- package/dist/llamaindex/sse.js.map +1 -0
- package/dist/llamaindex/vector-store.d.ts +101 -0
- package/dist/llamaindex/vector-store.d.ts.map +1 -0
- package/dist/llamaindex/vector-store.js +348 -0
- package/dist/llamaindex/vector-store.js.map +1 -0
- package/dist/search.d.ts +32 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +27 -0
- package/dist/search.js.map +1 -0
- package/dist/storage.d.ts +32 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +58 -0
- package/dist/storage.js.map +1 -0
- package/dist/tenant.d.ts +25 -0
- package/dist/tenant.d.ts.map +1 -0
- package/dist/tenant.js +36 -0
- package/dist/tenant.js.map +1 -0
- package/dist/vault.d.ts +22 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +43 -0
- package/dist/vault.js.map +1 -0
- package/dist/webhooks.d.ts +32 -0
- package/dist/webhooks.d.ts.map +1 -0
- package/dist/webhooks.js +77 -0
- package/dist/webhooks.js.map +1 -0
- package/package.json +118 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { EXIT_CODES } from "../config.js";
|
|
2
|
+
import { printError } from "./output.js";
|
|
3
|
+
const CLOUD_PORTAL_URL = process.env["QNSP_CLOUD_PORTAL_URL"] ?? "https://cloud.qnsp.cuilabs.io";
|
|
4
|
+
export function handleBackendError(response, body) {
|
|
5
|
+
const error = body;
|
|
6
|
+
switch (response.status) {
|
|
7
|
+
case 429: // Rate Limited
|
|
8
|
+
printError(`🚫 Rate limit exceeded for your tier (${error.tier || "unknown"}).\n` +
|
|
9
|
+
`Limit: ${error.limit || "N/A"} requests per minute\n` +
|
|
10
|
+
`Remaining: ${error.remaining || 0}\n` +
|
|
11
|
+
`Retry after: ${error.retryAfter || 60}s\n\n` +
|
|
12
|
+
`💡 Upgrade your tier for higher limits: ${CLOUD_PORTAL_URL}/billing/upgrade`);
|
|
13
|
+
process.exit(EXIT_CODES.RATE_LIMITED);
|
|
14
|
+
return;
|
|
15
|
+
case 402: // Payment Required
|
|
16
|
+
printError(`💳 Payment required: ${error.message}\n\n` +
|
|
17
|
+
`This feature requires a paid tier or add-on.\n` +
|
|
18
|
+
`Current tier: ${error.tier || "unknown"}\n` +
|
|
19
|
+
`Required: ${error.requiredTier || error.requiredAddOn || "unknown"}\n\n` +
|
|
20
|
+
`💡 Upgrade at: ${CLOUD_PORTAL_URL}/billing`);
|
|
21
|
+
process.exit(EXIT_CODES.AUTHORIZATION_ERROR);
|
|
22
|
+
return;
|
|
23
|
+
case 403: // Forbidden - Feature not enabled
|
|
24
|
+
if (error.requiredAddOn) {
|
|
25
|
+
printError(`🔒 Feature not enabled: ${error.message}\n\n` +
|
|
26
|
+
`This requires the "${error.requiredAddOn}" add-on.\n` +
|
|
27
|
+
`Current tier: ${error.tier || "unknown"}\n\n` +
|
|
28
|
+
`💡 Enable add-ons at: ${CLOUD_PORTAL_URL}/billing/addons\n` +
|
|
29
|
+
`⚠️ Note: Some add-ons require sales approval for security/compliance.`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
printError(`🔒 Access denied: ${error.message}\n\n` +
|
|
33
|
+
`You don't have permission for this operation.\n` +
|
|
34
|
+
`Current tier: ${error.tier || "unknown"}\n` +
|
|
35
|
+
`Required tier: ${error.requiredTier || "higher"}\n\n` +
|
|
36
|
+
`💡 Upgrade at: ${CLOUD_PORTAL_URL}/billing/upgrade`);
|
|
37
|
+
}
|
|
38
|
+
process.exit(EXIT_CODES.AUTHORIZATION_ERROR);
|
|
39
|
+
return;
|
|
40
|
+
case 507: // Insufficient Storage / Quota Exceeded
|
|
41
|
+
printError(`📊 Quota exceeded: ${error.message}\n\n` +
|
|
42
|
+
`You've reached your tier limit.\n` +
|
|
43
|
+
`Current tier: ${error.tier || "unknown"}\n\n` +
|
|
44
|
+
`💡 Options:\n` +
|
|
45
|
+
` 1. Upgrade your tier: ${CLOUD_PORTAL_URL}/billing/upgrade\n` +
|
|
46
|
+
` 2. Delete unused resources\n` +
|
|
47
|
+
` 3. Purchase additional capacity: ${CLOUD_PORTAL_URL}/billing/addons`);
|
|
48
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
49
|
+
return;
|
|
50
|
+
default:
|
|
51
|
+
printError(`❌ Backend error (${response.status}): ${error.message || "Unknown error"}`);
|
|
52
|
+
process.exit(EXIT_CODES.GENERAL_ERROR);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function parseRateLimitHeaders(headers) {
|
|
57
|
+
const limitRaw = headers.get("x-ratelimit-limit");
|
|
58
|
+
const remainingRaw = headers.get("x-ratelimit-remaining");
|
|
59
|
+
const resetRaw = headers.get("x-ratelimit-reset");
|
|
60
|
+
return {
|
|
61
|
+
limit: limitRaw ? Number.parseInt(limitRaw, 10) : null,
|
|
62
|
+
remaining: remainingRaw ? Number.parseInt(remainingRaw, 10) : null,
|
|
63
|
+
reset: resetRaw ? Number.parseInt(resetRaw, 10) : null,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export function warnIfLowQuota(remaining, limit) {
|
|
67
|
+
if (remaining !== null && limit !== null && remaining < limit * 0.1) {
|
|
68
|
+
console.warn(`⚠️ Warning: Low quota remaining (${remaining}/${limit}).\n` +
|
|
69
|
+
`Consider upgrading your tier or purchasing add-ons to avoid service interruption.`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=backend-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-validator.js","sourceRoot":"","sources":["../../../src/cli/utils/backend-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-config.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/command-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAG9C,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,SAAS,CAqCrF"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { loadConfig } from "../config.js";
|
|
2
|
+
export function getEffectiveConfig(baseConfig, command) {
|
|
3
|
+
const globals = command.optsWithGlobals();
|
|
4
|
+
return loadConfig({
|
|
5
|
+
...baseConfig,
|
|
6
|
+
edgeGatewayUrl: globals["edgeGatewayUrl"] ?? baseConfig.edgeGatewayUrl,
|
|
7
|
+
cloudPortalUrl: globals["cloudPortalUrl"] ?? baseConfig.cloudPortalUrl,
|
|
8
|
+
authServiceUrl: globals["authServiceUrl"] ?? baseConfig.authServiceUrl,
|
|
9
|
+
serviceId: globals["serviceId"] ?? baseConfig.serviceId,
|
|
10
|
+
serviceSecret: globals["serviceSecret"] ?? baseConfig.serviceSecret,
|
|
11
|
+
tenantId: globals["tenantId"] ?? baseConfig.tenantId,
|
|
12
|
+
kmsServiceUrl: globals["kmsServiceUrl"] ?? baseConfig.kmsServiceUrl,
|
|
13
|
+
vaultServiceUrl: globals["vaultServiceUrl"] ?? baseConfig.vaultServiceUrl,
|
|
14
|
+
auditServiceUrl: globals["auditServiceUrl"] ?? baseConfig.auditServiceUrl,
|
|
15
|
+
tenantServiceUrl: globals["tenantServiceUrl"] ?? baseConfig.tenantServiceUrl,
|
|
16
|
+
billingServiceUrl: globals["billingServiceUrl"] ?? baseConfig.billingServiceUrl,
|
|
17
|
+
accessControlServiceUrl: globals["accessControlServiceUrl"] ??
|
|
18
|
+
baseConfig.accessControlServiceUrl,
|
|
19
|
+
securityMonitoringServiceUrl: globals["securityMonitoringServiceUrl"] ??
|
|
20
|
+
baseConfig.securityMonitoringServiceUrl,
|
|
21
|
+
storageServiceUrl: globals["storageServiceUrl"] ?? baseConfig.storageServiceUrl,
|
|
22
|
+
searchServiceUrl: globals["searchServiceUrl"] ?? baseConfig.searchServiceUrl,
|
|
23
|
+
observabilityServiceUrl: globals["observabilityServiceUrl"] ??
|
|
24
|
+
baseConfig.observabilityServiceUrl,
|
|
25
|
+
outputFormat: globals["output"] ?? baseConfig.outputFormat,
|
|
26
|
+
verbose: globals["verbose"] ?? baseConfig.verbose,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=command-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"command-config.js","sourceRoot":"","sources":["../../../src/cli/utils/command-config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,kBAAkB,CAAC,UAAqB,EAAE,OAAgB;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,EAA6B,CAAC;IAErE,OAAO,UAAU,CAAC;QACjB,GAAG,UAAU;QACb,cAAc,EAAG,OAAO,CAAC,gBAAgB,CAAwB,IAAI,UAAU,CAAC,cAAc;QAC9F,cAAc,EAAG,OAAO,CAAC,gBAAgB,CAAwB,IAAI,UAAU,CAAC,cAAc;QAC9F,cAAc,EAAG,OAAO,CAAC,gBAAgB,CAAwB,IAAI,UAAU,CAAC,cAAc;QAC9F,SAAS,EAAG,OAAO,CAAC,WAAW,CAAwB,IAAI,UAAU,CAAC,SAAS;QAC/E,aAAa,EAAG,OAAO,CAAC,eAAe,CAAwB,IAAI,UAAU,CAAC,aAAa;QAC3F,QAAQ,EAAG,OAAO,CAAC,UAAU,CAAwB,IAAI,UAAU,CAAC,QAAQ;QAC5E,aAAa,EAAG,OAAO,CAAC,eAAe,CAAwB,IAAI,UAAU,CAAC,aAAa;QAC3F,eAAe,EACb,OAAO,CAAC,iBAAiB,CAAwB,IAAI,UAAU,CAAC,eAAe;QACjF,eAAe,EACb,OAAO,CAAC,iBAAiB,CAAwB,IAAI,UAAU,CAAC,eAAe;QACjF,gBAAgB,EACd,OAAO,CAAC,kBAAkB,CAAwB,IAAI,UAAU,CAAC,gBAAgB;QACnF,iBAAiB,EACf,OAAO,CAAC,mBAAmB,CAAwB,IAAI,UAAU,CAAC,iBAAiB;QACrF,uBAAuB,EACrB,OAAO,CAAC,yBAAyB,CAAwB;YAC1D,UAAU,CAAC,uBAAuB;QACnC,4BAA4B,EAC1B,OAAO,CAAC,8BAA8B,CAAwB;YAC/D,UAAU,CAAC,4BAA4B;QACxC,iBAAiB,EACf,OAAO,CAAC,mBAAmB,CAAwB,IAAI,UAAU,CAAC,iBAAiB;QACrF,gBAAgB,EACd,OAAO,CAAC,kBAAkB,CAAwB,IAAI,UAAU,CAAC,gBAAgB;QACnF,uBAAuB,EACrB,OAAO,CAAC,yBAAyB,CAAwB;YAC1D,UAAU,CAAC,uBAAuB;QACnC,YAAY,EACV,OAAO,CAAC,QAAQ,CAA2C,IAAI,UAAU,CAAC,YAAY;QACxF,OAAO,EAAG,OAAO,CAAC,SAAS,CAAyB,IAAI,UAAU,CAAC,OAAO;KAC1E,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAM9C,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,SAAS,EAClB,KAAK,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,EAClC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,GAChC,OAAO,CAAC,QAAQ,CAAC,CA4BnB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { handleBackendError, parseRateLimitHeaders, warnIfLowQuota } from "./backend-validator.js";
|
|
2
|
+
const ENFORCEMENT_STATUSES = new Set([429, 402, 403, 507]);
|
|
3
|
+
export async function fetchWithBackendHandling(_config, input, init) {
|
|
4
|
+
const response = await fetch(input, init);
|
|
5
|
+
if (!response.ok && ENFORCEMENT_STATUSES.has(response.status)) {
|
|
6
|
+
const errorText = typeof response.clone === "function"
|
|
7
|
+
? await response.clone().text()
|
|
8
|
+
: await response.text();
|
|
9
|
+
let errorBody;
|
|
10
|
+
try {
|
|
11
|
+
errorBody = JSON.parse(errorText);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
errorBody = { error: "unknown", message: errorText };
|
|
15
|
+
}
|
|
16
|
+
handleBackendError(response, errorBody);
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
const headers = response.headers;
|
|
20
|
+
if (headers && typeof headers.get === "function") {
|
|
21
|
+
const rateLimits = parseRateLimitHeaders(headers);
|
|
22
|
+
warnIfLowQuota(rateLimits.remaining, rateLimits.limit);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// ignore non-standard/mocked responses
|
|
27
|
+
}
|
|
28
|
+
return response;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=fetcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/cli/utils/fetcher.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEnG,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAE3D,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,OAAkB,EAClB,KAAkC,EAClC,IAAkC;IAElC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/D,MAAM,SAAS,GACd,OAAQ,QAAqB,CAAC,KAAK,KAAK,UAAU;YACjD,CAAC,CAAC,MAAO,QAAqB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE;YAC7C,CAAC,CAAC,MAAO,QAAqB,CAAC,IAAI,EAAE,CAAC;QACxC,IAAI,SAAkB,CAAC;QACvB,IAAI,CAAC;YACJ,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACR,SAAS,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QACtD,CAAC;QACD,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,CAAC;QACJ,MAAM,OAAO,GAAI,QAAkC,CAAC,OAAO,CAAC;QAC5D,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,UAAU,EAAE,CAAC;YAClD,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAClD,cAAc,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;QACxD,CAAC;IACF,CAAC;IAAC,MAAM,CAAC;QACR,uCAAuC;IACxC,CAAC;IAED,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function validateHttpsUrl(url: string, context: string, nodeEnv?: string): void;
|
|
2
|
+
export declare function isLocalhostUrl(url: string): boolean;
|
|
3
|
+
export declare function validateAllServiceUrls(config: {
|
|
4
|
+
authServiceUrl: string;
|
|
5
|
+
kmsServiceUrl: string;
|
|
6
|
+
vaultServiceUrl: string;
|
|
7
|
+
auditServiceUrl: string;
|
|
8
|
+
}): void;
|
|
9
|
+
//# sourceMappingURL=https-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"https-validator.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/https-validator.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,SAAe,GAAG,IAAI,CAiB3F;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAYnD;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC9C,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CAOP"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { EXIT_CODES } from "../config.js";
|
|
2
|
+
import { printError } from "./output.js";
|
|
3
|
+
export function validateHttpsUrl(url, context, nodeEnv = "production") {
|
|
4
|
+
if (nodeEnv === "production" && !url.startsWith("https://")) {
|
|
5
|
+
printError(`${context} requires an https:// URL when NODE_ENV=production. Got: ${url}\n` +
|
|
6
|
+
"Use --auth-service-url with https:// or set NODE_ENV=development for testing.");
|
|
7
|
+
process.exit(EXIT_CODES.INVALID_ARGUMENTS);
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (url.startsWith("http://") && !isLocalhostUrl(url) && nodeEnv !== "development") {
|
|
11
|
+
printError(`Warning: ${context} is using unencrypted HTTP. This is insecure.\n` +
|
|
12
|
+
`URL: ${url}\n` +
|
|
13
|
+
"Consider using HTTPS or set NODE_ENV=development to suppress this warning.");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function isLocalhostUrl(url) {
|
|
17
|
+
try {
|
|
18
|
+
const parsed = new URL(url);
|
|
19
|
+
return (parsed.hostname === "localhost" ||
|
|
20
|
+
parsed.hostname === "127.0.0.1" ||
|
|
21
|
+
parsed.hostname === "::1" ||
|
|
22
|
+
parsed.hostname.endsWith(".local"));
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function validateAllServiceUrls(config) {
|
|
29
|
+
const nodeEnv = process.env["NODE_ENV"] ?? "production";
|
|
30
|
+
validateHttpsUrl(config.authServiceUrl, "Auth service URL", nodeEnv);
|
|
31
|
+
validateHttpsUrl(config.kmsServiceUrl, "KMS service URL", nodeEnv);
|
|
32
|
+
validateHttpsUrl(config.vaultServiceUrl, "Vault service URL", nodeEnv);
|
|
33
|
+
validateHttpsUrl(config.auditServiceUrl, "Audit service URL", nodeEnv);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=https-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"https-validator.js","sourceRoot":"","sources":["../../../src/cli/utils/https-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,gBAAgB,CAAC,GAAW,EAAE,OAAe,EAAE,OAAO,GAAG,YAAY;IACpF,IAAI,OAAO,KAAK,YAAY,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7D,UAAU,CACT,GAAG,OAAO,4DAA4D,GAAG,IAAI;YAC5E,+EAA+E,CAChF,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;QAC3C,OAAO;IACR,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QACpF,UAAU,CACT,YAAY,OAAO,iDAAiD;YACnE,QAAQ,GAAG,IAAI;YACf,4EAA4E,CAC7E,CAAC;IACH,CAAC;AACF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACzC,IAAI,CAAC;QACJ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,OAAO,CACN,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC/B,MAAM,CAAC,QAAQ,KAAK,WAAW;YAC/B,MAAM,CAAC,QAAQ,KAAK,KAAK;YACzB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAKtC;IACA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC;IAExD,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,EAAE,OAAO,CAAC,CAAC;IACrE,gBAAgB,CAAC,MAAM,CAAC,aAAa,EAAE,iBAAiB,EAAE,OAAO,CAAC,CAAC;IACnE,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;IACvE,gBAAgB,CAAC,MAAM,CAAC,eAAe,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function printJson(data: unknown): void;
|
|
2
|
+
export declare function printTable(data: Record<string, unknown>[] | Record<string, unknown>): void;
|
|
3
|
+
export declare function printError(message: string): void;
|
|
4
|
+
export declare function printSuccess(message: string): void;
|
|
5
|
+
export declare function printVerbose(message: string, verbose: boolean): void;
|
|
6
|
+
//# sourceMappingURL=output.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/output.ts"],"names":[],"mappings":"AAEA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAU1F;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAKpE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { sanitizeOutput } from "./sanitize.js";
|
|
2
|
+
export function printJson(data) {
|
|
3
|
+
console.log(JSON.stringify(data, null, 2));
|
|
4
|
+
}
|
|
5
|
+
export function printTable(data) {
|
|
6
|
+
if (Array.isArray(data)) {
|
|
7
|
+
if (data.length === 0) {
|
|
8
|
+
console.log("No results");
|
|
9
|
+
return;
|
|
10
|
+
}
|
|
11
|
+
console.table(data);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.table([data]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function printError(message) {
|
|
18
|
+
console.error(`Error: ${message}`);
|
|
19
|
+
}
|
|
20
|
+
export function printSuccess(message) {
|
|
21
|
+
console.log(`✓ ${message}`);
|
|
22
|
+
}
|
|
23
|
+
export function printVerbose(message, verbose) {
|
|
24
|
+
if (verbose) {
|
|
25
|
+
const sanitized = sanitizeOutput(message);
|
|
26
|
+
console.log(`[DEBUG] ${sanitized}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=output.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/cli/utils/output.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,UAAU,SAAS,CAAC,IAAa;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAyD;IACnF,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACR,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvB,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACzC,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC3C,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe,EAAE,OAAgB;IAC7D,IAAI,OAAO,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;IACrC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const APPROVED_PQC_ALGORITHMS: {
|
|
2
|
+
readonly signature: readonly ["dilithium-2", "dilithium-3", "dilithium-5", "falcon-512", "falcon-1024", "sphincs-sha2-128f"];
|
|
3
|
+
readonly kem: readonly ["kyber-512", "kyber-768", "kyber-1024"];
|
|
4
|
+
};
|
|
5
|
+
export type ApprovedSignatureAlgorithm = (typeof APPROVED_PQC_ALGORITHMS.signature)[number];
|
|
6
|
+
export type ApprovedKemAlgorithm = (typeof APPROVED_PQC_ALGORITHMS.kem)[number];
|
|
7
|
+
export declare function validatePqcAlgorithm(algorithm: string, type: "signature" | "kem"): algorithm is ApprovedSignatureAlgorithm | ApprovedKemAlgorithm;
|
|
8
|
+
export declare function getRecommendedPqcAlgorithm(securityLevel: 1 | 3 | 5, type: "signature" | "kem"): string;
|
|
9
|
+
export interface PqcSecurityProfile {
|
|
10
|
+
readonly signatureAlgorithm: ApprovedSignatureAlgorithm;
|
|
11
|
+
readonly kemAlgorithm: ApprovedKemAlgorithm;
|
|
12
|
+
readonly securityLevel: 1 | 3 | 5;
|
|
13
|
+
readonly hybridMode: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function getDefaultSecurityProfile(): PqcSecurityProfile;
|
|
16
|
+
export declare function validateSecurityProfile(profile: Partial<PqcSecurityProfile>): string[];
|
|
17
|
+
//# sourceMappingURL=pqc-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pqc-validator.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/pqc-validator.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;;;CAU1B,CAAC;AAEX,MAAM,MAAM,0BAA0B,GAAG,CAAC,OAAO,uBAAuB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAC5F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,uBAAuB,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AAEhF,wBAAgB,oBAAoB,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,WAAW,GAAG,KAAK,GACvB,SAAS,IAAI,0BAA0B,GAAG,oBAAoB,CAGhE;AAED,wBAAgB,0BAA0B,CACzC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EACxB,IAAI,EAAE,WAAW,GAAG,KAAK,GACvB,MAAM,CAoBR;AAED,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,kBAAkB,EAAE,0BAA0B,CAAC;IACxD,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,IAAI,kBAAkB,CAO9D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,MAAM,EAAE,CAyBtF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
export const APPROVED_PQC_ALGORITHMS = {
|
|
2
|
+
signature: [
|
|
3
|
+
"dilithium-2",
|
|
4
|
+
"dilithium-3",
|
|
5
|
+
"dilithium-5",
|
|
6
|
+
"falcon-512",
|
|
7
|
+
"falcon-1024",
|
|
8
|
+
"sphincs-sha2-128f",
|
|
9
|
+
],
|
|
10
|
+
kem: ["kyber-512", "kyber-768", "kyber-1024"],
|
|
11
|
+
};
|
|
12
|
+
export function validatePqcAlgorithm(algorithm, type) {
|
|
13
|
+
const approved = APPROVED_PQC_ALGORITHMS[type];
|
|
14
|
+
return approved.includes(algorithm);
|
|
15
|
+
}
|
|
16
|
+
export function getRecommendedPqcAlgorithm(securityLevel, type) {
|
|
17
|
+
if (type === "signature") {
|
|
18
|
+
switch (securityLevel) {
|
|
19
|
+
case 1:
|
|
20
|
+
return "dilithium-2";
|
|
21
|
+
case 3:
|
|
22
|
+
return "dilithium-3";
|
|
23
|
+
case 5:
|
|
24
|
+
return "dilithium-5";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
switch (securityLevel) {
|
|
29
|
+
case 1:
|
|
30
|
+
return "kyber-512";
|
|
31
|
+
case 3:
|
|
32
|
+
return "kyber-768";
|
|
33
|
+
case 5:
|
|
34
|
+
return "kyber-1024";
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export function getDefaultSecurityProfile() {
|
|
39
|
+
return {
|
|
40
|
+
signatureAlgorithm: "dilithium-2",
|
|
41
|
+
kemAlgorithm: "kyber-768",
|
|
42
|
+
securityLevel: 3,
|
|
43
|
+
hybridMode: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function validateSecurityProfile(profile) {
|
|
47
|
+
const errors = [];
|
|
48
|
+
if (profile.signatureAlgorithm &&
|
|
49
|
+
!validatePqcAlgorithm(profile.signatureAlgorithm, "signature")) {
|
|
50
|
+
errors.push(`Invalid signature algorithm: ${profile.signatureAlgorithm}. ` +
|
|
51
|
+
`Approved: ${APPROVED_PQC_ALGORITHMS.signature.join(", ")}`);
|
|
52
|
+
}
|
|
53
|
+
if (profile.kemAlgorithm && !validatePqcAlgorithm(profile.kemAlgorithm, "kem")) {
|
|
54
|
+
errors.push(`Invalid KEM algorithm: ${profile.kemAlgorithm}. ` +
|
|
55
|
+
`Approved: ${APPROVED_PQC_ALGORITHMS.kem.join(", ")}`);
|
|
56
|
+
}
|
|
57
|
+
if (profile.securityLevel && ![1, 3, 5].includes(profile.securityLevel)) {
|
|
58
|
+
errors.push(`Invalid security level: ${profile.securityLevel}. Must be 1, 3, or 5.`);
|
|
59
|
+
}
|
|
60
|
+
return errors;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=pqc-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pqc-validator.js","sourceRoot":"","sources":["../../../src/cli/utils/pqc-validator.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACtC,SAAS,EAAE;QACV,aAAa;QACb,aAAa;QACb,aAAa;QACb,YAAY;QACZ,aAAa;QACb,mBAAmB;KACnB;IACD,GAAG,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;CACpC,CAAC;AAKX,MAAM,UAAU,oBAAoB,CACnC,SAAiB,EACjB,IAAyB;IAEzB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;IAC/C,OAAO,QAAQ,CAAC,QAAQ,CAAC,SAAkB,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,0BAA0B,CACzC,aAAwB,EACxB,IAAyB;IAEzB,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QAC1B,QAAQ,aAAa,EAAE,CAAC;YACvB,KAAK,CAAC;gBACL,OAAO,aAAa,CAAC;YACtB,KAAK,CAAC;gBACL,OAAO,aAAa,CAAC;YACtB,KAAK,CAAC;gBACL,OAAO,aAAa,CAAC;QACvB,CAAC;IACF,CAAC;SAAM,CAAC;QACP,QAAQ,aAAa,EAAE,CAAC;YACvB,KAAK,CAAC;gBACL,OAAO,WAAW,CAAC;YACpB,KAAK,CAAC;gBACL,OAAO,WAAW,CAAC;YACpB,KAAK,CAAC;gBACL,OAAO,YAAY,CAAC;QACtB,CAAC;IACF,CAAC;AACF,CAAC;AASD,MAAM,UAAU,yBAAyB;IACxC,OAAO;QACN,kBAAkB,EAAE,aAAa;QACjC,YAAY,EAAE,WAAW;QACzB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,IAAI;KAChB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAAoC;IAC3E,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,IACC,OAAO,CAAC,kBAAkB;QAC1B,CAAC,oBAAoB,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAC7D,CAAC;QACF,MAAM,CAAC,IAAI,CACV,gCAAgC,OAAO,CAAC,kBAAkB,IAAI;YAC7D,aAAa,uBAAuB,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC5D,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,YAAY,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;QAChF,MAAM,CAAC,IAAI,CACV,0BAA0B,OAAO,CAAC,YAAY,IAAI;YACjD,aAAa,uBAAuB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtD,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,aAAa,uBAAuB,CAAC,CAAC;IACtF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function promptForSecret(promptText?: string): Promise<string>;
|
|
2
|
+
export declare function promptForInput(promptText: string): Promise<string>;
|
|
3
|
+
export declare function promptForConfirmation(promptText: string): Promise<boolean>;
|
|
4
|
+
//# sourceMappingURL=prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/prompt.ts"],"names":[],"mappings":"AAEA,wBAAsB,eAAe,CAAC,UAAU,SAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAYtF;AAED,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYxE;AAED,wBAAsB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGhF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createInterface } from "node:readline";
|
|
2
|
+
export async function promptForSecret(promptText = "Service secret: ") {
|
|
3
|
+
return new Promise((resolve) => {
|
|
4
|
+
const rl = createInterface({
|
|
5
|
+
input: process.stdin,
|
|
6
|
+
output: process.stdout,
|
|
7
|
+
});
|
|
8
|
+
rl.question(promptText, (answer) => {
|
|
9
|
+
rl.close();
|
|
10
|
+
resolve(answer.trim());
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export async function promptForInput(promptText) {
|
|
15
|
+
return new Promise((resolve) => {
|
|
16
|
+
const rl = createInterface({
|
|
17
|
+
input: process.stdin,
|
|
18
|
+
output: process.stdout,
|
|
19
|
+
});
|
|
20
|
+
rl.question(promptText, (answer) => {
|
|
21
|
+
rl.close();
|
|
22
|
+
resolve(answer.trim());
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
export async function promptForConfirmation(promptText) {
|
|
27
|
+
const answer = await promptForInput(`${promptText} (y/N): `);
|
|
28
|
+
return answer.toLowerCase() === "y" || answer.toLowerCase() === "yes";
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/cli/utils/prompt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAU,GAAG,kBAAkB;IACpE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,eAAe,CAAC;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YAClC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,UAAkB;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,EAAE,GAAG,eAAe,CAAC;YAC1B,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACtB,CAAC,CAAC;QAEH,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YAClC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACxB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,UAAkB;IAC7D,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,GAAG,UAAU,UAAU,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export declare class RateLimiter {
|
|
2
|
+
private requests;
|
|
3
|
+
private readonly maxRequests;
|
|
4
|
+
private readonly windowMs;
|
|
5
|
+
private hasWarned;
|
|
6
|
+
constructor(maxRequests?: number, windowMs?: number);
|
|
7
|
+
checkLimit(): Promise<void>;
|
|
8
|
+
reset(): void;
|
|
9
|
+
getRemaining(): number;
|
|
10
|
+
}
|
|
11
|
+
export declare class RateLimitError extends Error {
|
|
12
|
+
readonly retryAfterMs: number;
|
|
13
|
+
constructor(message: string, retryAfterMs: number);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=rate-limiter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,SAAS,CAAS;gBAEd,WAAW,SAAM,EAAE,QAAQ,SAAQ;IAKzC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,KAAK,IAAI,IAAI;IAIb,YAAY,IAAI,MAAM;CAKtB;AAED,qBAAa,cAAe,SAAQ,KAAK;aAGvB,YAAY,EAAE,MAAM;gBADpC,OAAO,EAAE,MAAM,EACC,YAAY,EAAE,MAAM;CAKrC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export class RateLimiter {
|
|
2
|
+
requests = [];
|
|
3
|
+
maxRequests;
|
|
4
|
+
windowMs;
|
|
5
|
+
hasWarned = false;
|
|
6
|
+
constructor(maxRequests = 100, windowMs = 60000) {
|
|
7
|
+
this.maxRequests = maxRequests;
|
|
8
|
+
this.windowMs = windowMs;
|
|
9
|
+
}
|
|
10
|
+
async checkLimit() {
|
|
11
|
+
const now = Date.now();
|
|
12
|
+
this.requests = this.requests.filter((timestamp) => now - timestamp < this.windowMs);
|
|
13
|
+
if (this.requests.length >= this.maxRequests * 0.8 && !this.hasWarned) {
|
|
14
|
+
console.warn(`⚠️ Warning: Approaching CLI rate limit (${this.requests.length}/${this.maxRequests} requests).\n` +
|
|
15
|
+
`This is a defensive limit to prevent accidental self-DoS.\n` +
|
|
16
|
+
`Your tier-based limits are enforced by backend services.`);
|
|
17
|
+
this.hasWarned = true;
|
|
18
|
+
}
|
|
19
|
+
if (this.requests.length >= this.maxRequests) {
|
|
20
|
+
const oldestRequest = this.requests[0];
|
|
21
|
+
const waitMs = this.windowMs - (now - (oldestRequest ?? now));
|
|
22
|
+
throw new RateLimitError(`🛡️ Defensive rate limit exceeded: ${this.maxRequests} requests per ${this.windowMs / 1000}s.\n` +
|
|
23
|
+
`This protects against runaway scripts and bugs.\n` +
|
|
24
|
+
`Your tier-based limits are enforced by backend services.\n` +
|
|
25
|
+
`Retry after ${Math.ceil(waitMs / 1000)}s`, waitMs);
|
|
26
|
+
}
|
|
27
|
+
this.requests.push(now);
|
|
28
|
+
}
|
|
29
|
+
reset() {
|
|
30
|
+
this.requests = [];
|
|
31
|
+
}
|
|
32
|
+
getRemaining() {
|
|
33
|
+
const now = Date.now();
|
|
34
|
+
this.requests = this.requests.filter((timestamp) => now - timestamp < this.windowMs);
|
|
35
|
+
return Math.max(0, this.maxRequests - this.requests.length);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class RateLimitError extends Error {
|
|
39
|
+
retryAfterMs;
|
|
40
|
+
constructor(message, retryAfterMs) {
|
|
41
|
+
super(message);
|
|
42
|
+
this.retryAfterMs = retryAfterMs;
|
|
43
|
+
this.name = "RateLimitError";
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../../src/cli/utils/rate-limiter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,WAAW;IACf,QAAQ,GAAa,EAAE,CAAC;IACf,WAAW,CAAS;IACpB,QAAQ,CAAS;IAC1B,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,WAAW,GAAG,GAAG,EAAE,QAAQ,GAAG,KAAK;QAC9C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,UAAU;QACf,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACvE,OAAO,CAAC,IAAI,CACX,4CAA4C,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,eAAe;gBAClG,6DAA6D;gBAC7D,0DAA0D,CAC3D,CAAC;YACF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,GAAG,GAAG,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC,CAAC;YAC9D,MAAM,IAAI,cAAc,CACvB,uCAAuC,IAAI,CAAC,WAAW,iBAAiB,IAAI,CAAC,QAAQ,GAAG,IAAI,MAAM;gBACjG,mDAAmD;gBACnD,4DAA4D;gBAC5D,eAAe,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAC3C,MAAM,CACN,CAAC;QACH,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;IACpB,CAAC;IAED,YAAY;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,GAAG,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;CACD;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IAGvB;IAFjB,YACC,OAAe,EACC,YAAoB;QAEpC,KAAK,CAAC,OAAO,CAAC,CAAC;QAFC,iBAAY,GAAZ,YAAY,CAAQ;QAGpC,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC9B,CAAC;CACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/sanitize.ts"],"names":[],"mappings":"AAWA,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAetD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAiBvF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
const SENSITIVE_PATTERNS = [
|
|
2
|
+
/Bearer\s+[A-Za-z0-9._-]+/gi,
|
|
3
|
+
/"accessToken"\s*:\s*"[^"]+"/gi,
|
|
4
|
+
/"token"\s*:\s*"[^"]+"/gi,
|
|
5
|
+
/"secret"\s*:\s*"[^"]+"/gi,
|
|
6
|
+
/"password"\s*:\s*"[^"]+"/gi,
|
|
7
|
+
/"apiKey"\s*:\s*"[^"]+"/gi,
|
|
8
|
+
/Authorization:\s*Bearer\s+[A-Za-z0-9._-]+/gi,
|
|
9
|
+
/x-api-key:\s*[A-Za-z0-9._-]+/gi,
|
|
10
|
+
];
|
|
11
|
+
export function sanitizeOutput(message) {
|
|
12
|
+
let sanitized = message;
|
|
13
|
+
for (const pattern of SENSITIVE_PATTERNS) {
|
|
14
|
+
sanitized = sanitized.replace(pattern, (match) => {
|
|
15
|
+
if (match.includes(":")) {
|
|
16
|
+
const [key] = match.split(":");
|
|
17
|
+
return `${key}: [REDACTED]`;
|
|
18
|
+
}
|
|
19
|
+
if (match.includes("Bearer")) {
|
|
20
|
+
return "Bearer [REDACTED]";
|
|
21
|
+
}
|
|
22
|
+
return match.replace(/"[^"]+"/g, '"[REDACTED]"');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return sanitized;
|
|
26
|
+
}
|
|
27
|
+
export function sanitizeHeaders(headers) {
|
|
28
|
+
const sanitized = {};
|
|
29
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
30
|
+
const lowerKey = key.toLowerCase();
|
|
31
|
+
if (lowerKey.includes("authorization") ||
|
|
32
|
+
lowerKey.includes("token") ||
|
|
33
|
+
lowerKey.includes("secret") ||
|
|
34
|
+
lowerKey.includes("api-key") ||
|
|
35
|
+
lowerKey.includes("password")) {
|
|
36
|
+
sanitized[key] = "[REDACTED]";
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
sanitized[key] = value;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return sanitized;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/cli/utils/sanitize.ts"],"names":[],"mappings":"AAAA,MAAM,kBAAkB,GAAG;IAC1B,4BAA4B;IAC5B,+BAA+B;IAC/B,yBAAyB;IACzB,0BAA0B;IAC1B,4BAA4B;IAC5B,0BAA0B;IAC1B,6CAA6C;IAC7C,gCAAgC;CAChC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,OAAe;IAC7C,IAAI,SAAS,GAAG,OAAO,CAAC;IACxB,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAC1C,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAChD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC/B,OAAO,GAAG,GAAG,cAAc,CAAC;YAC7B,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9B,OAAO,mBAAmB,CAAC;YAC5B,CAAC;YACD,OAAO,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAA+B;IAC9D,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IACC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC;YAClC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5B,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAC5B,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACxB,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SecurityHeaders {
|
|
2
|
+
readonly "Strict-Transport-Security"?: string;
|
|
3
|
+
readonly "X-Content-Type-Options"?: string;
|
|
4
|
+
readonly "X-Frame-Options"?: string;
|
|
5
|
+
readonly "X-XSS-Protection"?: string;
|
|
6
|
+
readonly "Content-Security-Policy"?: string;
|
|
7
|
+
readonly "Referrer-Policy"?: string;
|
|
8
|
+
readonly "Permissions-Policy"?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function getRecommendedSecurityHeaders(): SecurityHeaders;
|
|
11
|
+
export declare function validateSecurityHeaders(headers: Record<string, string>): {
|
|
12
|
+
missing: string[];
|
|
13
|
+
weak: Array<{
|
|
14
|
+
header: string;
|
|
15
|
+
issue: string;
|
|
16
|
+
}>;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=security-headers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-headers.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/security-headers.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC/B,QAAQ,CAAC,2BAA2B,CAAC,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAC3C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IAC5C,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CACvC;AAED,wBAAgB,6BAA6B,IAAI,eAAe,CAW/D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;IACzE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C,CAoBA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export function getRecommendedSecurityHeaders() {
|
|
2
|
+
return {
|
|
3
|
+
"Strict-Transport-Security": "max-age=31536000; includeSubDomains; preload",
|
|
4
|
+
"X-Content-Type-Options": "nosniff",
|
|
5
|
+
"X-Frame-Options": "DENY",
|
|
6
|
+
"X-XSS-Protection": "1; mode=block",
|
|
7
|
+
"Content-Security-Policy": "default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self';",
|
|
8
|
+
"Referrer-Policy": "strict-origin-when-cross-origin",
|
|
9
|
+
"Permissions-Policy": "geolocation=(), microphone=(), camera=()",
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
export function validateSecurityHeaders(headers) {
|
|
13
|
+
const recommended = getRecommendedSecurityHeaders();
|
|
14
|
+
const missing = [];
|
|
15
|
+
const weak = [];
|
|
16
|
+
for (const header of Object.keys(recommended)) {
|
|
17
|
+
if (!headers[header]) {
|
|
18
|
+
missing.push(header);
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const value = headers[header];
|
|
22
|
+
if (header === "Strict-Transport-Security" && !value?.includes("max-age")) {
|
|
23
|
+
weak.push({ header, issue: "Missing max-age directive" });
|
|
24
|
+
}
|
|
25
|
+
if (header === "Content-Security-Policy" && value === "default-src *") {
|
|
26
|
+
weak.push({ header, issue: "Too permissive - allows all sources" });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return { missing, weak };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=security-headers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-headers.js","sourceRoot":"","sources":["../../../src/cli/utils/security-headers.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,6BAA6B;IAC5C,OAAO;QACN,2BAA2B,EAAE,8CAA8C;QAC3E,wBAAwB,EAAE,SAAS;QACnC,iBAAiB,EAAE,MAAM;QACzB,kBAAkB,EAAE,eAAe;QACnC,yBAAyB,EACxB,4EAA4E;QAC7E,iBAAiB,EAAE,iCAAiC;QACpD,oBAAoB,EAAE,0CAA0C;KAChE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,OAA+B;IAItE,MAAM,WAAW,GAAG,6BAA6B,EAAE,CAAC;IACpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,IAAI,GAA6C,EAAE,CAAC;IAE1D,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACP,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,MAAM,KAAK,2BAA2B,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3E,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,MAAM,KAAK,yBAAyB,IAAI,KAAK,KAAK,eAAe,EAAE,CAAC;gBACvE,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;YACrE,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-cache.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/token-cache.ts"],"names":[],"mappings":"AASA,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAS/D;AAED,wBAAgB,cAAc,CAC7B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,KAAK,SAAuB,GAC1B,IAAI,CAKN;AAED,wBAAgB,eAAe,IAAI,IAAI,CAEtC"}
|