@nodetool-ai/config 0.7.0-rc.23 → 0.8.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.
Files changed (94) hide show
  1. package/README.md +50 -0
  2. package/dist/.nodetool-build-stamp +1 -0
  3. package/dist/__tests__/credit-policy.test.d.ts +2 -0
  4. package/dist/__tests__/credit-policy.test.d.ts.map +1 -0
  5. package/dist/__tests__/credit-policy.test.js +48 -0
  6. package/dist/__tests__/credit-policy.test.js.map +1 -0
  7. package/dist/__tests__/env-file.test.d.ts +2 -0
  8. package/dist/__tests__/env-file.test.d.ts.map +1 -0
  9. package/dist/__tests__/env-file.test.js +100 -0
  10. package/dist/__tests__/env-file.test.js.map +1 -0
  11. package/dist/__tests__/google-workspace.test.d.ts +2 -0
  12. package/dist/__tests__/google-workspace.test.d.ts.map +1 -0
  13. package/dist/__tests__/google-workspace.test.js +40 -0
  14. package/dist/__tests__/google-workspace.test.js.map +1 -0
  15. package/dist/__tests__/retention.test.d.ts +2 -0
  16. package/dist/__tests__/retention.test.d.ts.map +1 -0
  17. package/dist/__tests__/retention.test.js +21 -0
  18. package/dist/__tests__/retention.test.js.map +1 -0
  19. package/dist/byte-limits.d.ts +13 -0
  20. package/dist/byte-limits.d.ts.map +1 -0
  21. package/dist/byte-limits.js +28 -0
  22. package/dist/byte-limits.js.map +1 -0
  23. package/dist/credit-policy.d.ts +25 -0
  24. package/dist/credit-policy.d.ts.map +1 -0
  25. package/dist/credit-policy.js +63 -0
  26. package/dist/credit-policy.js.map +1 -0
  27. package/dist/deployment.d.ts +8 -0
  28. package/dist/deployment.d.ts.map +1 -0
  29. package/dist/deployment.js +19 -0
  30. package/dist/deployment.js.map +1 -0
  31. package/dist/env-file.d.ts +33 -0
  32. package/dist/env-file.d.ts.map +1 -0
  33. package/dist/env-file.js +83 -0
  34. package/dist/env-file.js.map +1 -0
  35. package/dist/environment.d.ts.map +1 -1
  36. package/dist/environment.js +20 -17
  37. package/dist/environment.js.map +1 -1
  38. package/dist/google-workspace.d.ts +3 -0
  39. package/dist/google-workspace.d.ts.map +1 -0
  40. package/dist/google-workspace.js +23 -0
  41. package/dist/google-workspace.js.map +1 -0
  42. package/dist/index.d.ts +14 -4
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +14 -4
  45. package/dist/index.js.map +1 -1
  46. package/dist/logging.d.ts +12 -0
  47. package/dist/logging.d.ts.map +1 -1
  48. package/dist/logging.js +65 -28
  49. package/dist/logging.js.map +1 -1
  50. package/dist/node-import.d.ts +37 -0
  51. package/dist/node-import.d.ts.map +1 -0
  52. package/dist/node-import.js +119 -0
  53. package/dist/node-import.js.map +1 -0
  54. package/dist/optional-modules.d.ts +10 -0
  55. package/dist/optional-modules.d.ts.map +1 -0
  56. package/dist/optional-modules.js +58 -0
  57. package/dist/optional-modules.js.map +1 -0
  58. package/dist/package-asset-registry.d.ts +102 -0
  59. package/dist/package-asset-registry.d.ts.map +1 -0
  60. package/dist/package-asset-registry.js +157 -0
  61. package/dist/package-asset-registry.js.map +1 -0
  62. package/dist/package-assets.d.ts +52 -0
  63. package/dist/package-assets.d.ts.map +1 -0
  64. package/dist/package-assets.js +98 -0
  65. package/dist/package-assets.js.map +1 -0
  66. package/dist/paths.d.ts +52 -23
  67. package/dist/paths.d.ts.map +1 -1
  68. package/dist/paths.js +166 -47
  69. package/dist/paths.js.map +1 -1
  70. package/dist/retention.d.ts +3 -0
  71. package/dist/retention.d.ts.map +1 -0
  72. package/dist/retention.js +19 -0
  73. package/dist/retention.js.map +1 -0
  74. package/dist/setting-catalog.d.ts +28 -0
  75. package/dist/setting-catalog.d.ts.map +1 -0
  76. package/dist/setting-catalog.js +167 -0
  77. package/dist/setting-catalog.js.map +1 -0
  78. package/dist/storage-config.d.ts +45 -0
  79. package/dist/storage-config.d.ts.map +1 -0
  80. package/dist/storage-config.js +62 -0
  81. package/dist/storage-config.js.map +1 -0
  82. package/dist/trace-redaction.d.ts +5 -0
  83. package/dist/trace-redaction.d.ts.map +1 -0
  84. package/dist/trace-redaction.js +51 -0
  85. package/dist/trace-redaction.js.map +1 -0
  86. package/package.json +23 -8
  87. package/dist/diagnostics.d.ts +0 -27
  88. package/dist/diagnostics.d.ts.map +0 -1
  89. package/dist/diagnostics.js +0 -42
  90. package/dist/diagnostics.js.map +0 -1
  91. package/dist/settings.d.ts +0 -29
  92. package/dist/settings.d.ts.map +0 -1
  93. package/dist/settings.js +0 -29
  94. package/dist/settings.js.map +0 -1
@@ -0,0 +1,62 @@
1
+ import { getDefaultAssetsPath } from "./paths.js";
2
+ function requireEnv(key, backend) {
3
+ const value = process.env[key];
4
+ if (!value) {
5
+ throw new Error(`Missing required env var ${key} for NODETOOL_STORAGE_BACKEND=${backend}`);
6
+ }
7
+ return value;
8
+ }
9
+ function buildConfig(backend, bucketEnv) {
10
+ switch (backend) {
11
+ case "file":
12
+ return { kind: "file", rootDir: getDefaultAssetsPath() };
13
+ case "s3":
14
+ return {
15
+ kind: "s3",
16
+ bucket: requireEnv(bucketEnv, "s3"),
17
+ region: process.env.S3_REGION,
18
+ endpoint: process.env.S3_ENDPOINT ?? process.env.S3_ENDPOINT_URL
19
+ };
20
+ case "supabase":
21
+ return {
22
+ kind: "supabase",
23
+ url: requireEnv("SUPABASE_URL", "supabase"),
24
+ apiKey: requireEnv("SUPABASE_KEY", "supabase"),
25
+ bucket: requireEnv(bucketEnv, "supabase")
26
+ };
27
+ default:
28
+ throw new Error(`Unknown NODETOOL_STORAGE_BACKEND: "${backend}". Expected file|s3|supabase.`);
29
+ }
30
+ }
31
+ /** 7 days — S3/Supabase maximum. Long enough that no browser or CDN cache
32
+ * will hold a redirect past expiry. */
33
+ export const SIGNED_URL_TTL = 604800;
34
+ const backend = () => (process.env.NODETOOL_STORAGE_BACKEND ?? "file").toLowerCase();
35
+ /**
36
+ * Asset storage config — permanent user files.
37
+ *
38
+ * Env vars:
39
+ * NODETOOL_STORAGE_BACKEND file | s3 | supabase (default: file)
40
+ * ASSET_BUCKET bucket name (s3 / supabase)
41
+ * SUPABASE_URL Supabase project URL
42
+ * SUPABASE_KEY Supabase API key
43
+ * S3_REGION AWS region (s3)
44
+ * S3_ENDPOINT custom S3 endpoint (s3, optional)
45
+ */
46
+ export function loadAssetStorageConfig() {
47
+ return buildConfig(backend(), "ASSET_BUCKET");
48
+ }
49
+ /**
50
+ * Temp storage config — ephemeral workflow outputs.
51
+ *
52
+ * Same backend as assets; uses a separate bucket so temp files can have
53
+ * different retention / access policies.
54
+ *
55
+ * Env vars:
56
+ * TEMP_BUCKET bucket name (s3 / supabase)
57
+ * (all other vars shared with loadAssetStorageConfig)
58
+ */
59
+ export function loadTempStorageConfig() {
60
+ return buildConfig(backend(), "TEMP_BUCKET");
61
+ }
62
+ //# sourceMappingURL=storage-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage-config.js","sourceRoot":"","sources":["../src/storage-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAWlD,SAAS,UAAU,CAAC,GAAW,EAAE,OAAe;IAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,4BAA4B,GAAG,iCAAiC,OAAO,EAAE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,SAAiB;IACrD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,CAAC;QAC3D,KAAK,IAAI;YACP,OAAO;gBACL,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC;gBACnC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS;gBAC7B,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe;aACjE,CAAC;QACJ,KAAK,UAAU;YACb,OAAO;gBACL,IAAI,EAAE,UAAU;gBAChB,GAAG,EAAE,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC;gBAC3C,MAAM,EAAE,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC;gBAC9C,MAAM,EAAE,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC;aAC1C,CAAC;QACJ;YACE,MAAM,IAAI,KAAK,CACb,sCAAsC,OAAO,+BAA+B,CAC7E,CAAC;IACN,CAAC;AACH,CAAC;AAED;wCACwC;AACxC,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC;AAErC,MAAM,OAAO,GAAG,GAAW,EAAE,CAC3B,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;AAEjE;;;;;;;;;;GAUG;AACH,MAAM,UAAU,sBAAsB;IACpC,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,cAAc,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB;IACnC,OAAO,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** Mask PEM private keys in one pass, including unfinished blocks. */
2
+ export declare function redactPrivateKeys(text: string): string;
3
+ /** Credential-only fallback used before a database-backed trace sanitizer is installed. */
4
+ export declare function redactTraceText(text: string, secretValues?: ReadonlySet<string>): string;
5
+ //# sourceMappingURL=trace-redaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-redaction.d.ts","sourceRoot":"","sources":["../src/trace-redaction.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBtD;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,GAAE,WAAW,CAAC,MAAM,CAAa,GAAG,MAAM,CAiBnG"}
@@ -0,0 +1,51 @@
1
+ import { safeProcessEnv } from "./node-import.js";
2
+ /** Mask PEM private keys in one pass, including unfinished blocks. */
3
+ export function redactPrivateKeys(text) {
4
+ const parts = [];
5
+ let cursor = 0;
6
+ let start = -1;
7
+ for (const marker of text.matchAll(/-----(BEGIN|END) [A-Z ]*PRIVATE KEY-----/g)) {
8
+ if (marker[1] === "BEGIN") {
9
+ if (start < 0) {
10
+ start = marker.index;
11
+ }
12
+ }
13
+ else if (start >= 0) {
14
+ parts.push(text.slice(cursor, start), "[REDACTED:private-key]");
15
+ cursor = marker.index + marker[0].length;
16
+ start = -1;
17
+ }
18
+ }
19
+ // A missing closing marker must not expose the remaining key material.
20
+ if (start >= 0) {
21
+ parts.push(text.slice(cursor, start), "[REDACTED:private-key]");
22
+ }
23
+ else {
24
+ parts.push(text.slice(cursor));
25
+ }
26
+ return parts.join("");
27
+ }
28
+ /** Credential-only fallback used before a database-backed trace sanitizer is installed. */
29
+ export function redactTraceText(text, secretValues = new Set()) {
30
+ let value = text;
31
+ const secrets = new Set(secretValues);
32
+ for (const [key, secret] of Object.entries(safeProcessEnv())) {
33
+ if (secret && secret.length >= 8 && /(?:KEY|TOKEN|SECRET|PASSWORD|PASS|CREDENTIALS?|DATABASE_URL|_DSN)$/i.test(key)) {
34
+ secrets.add(secret);
35
+ }
36
+ }
37
+ for (const secret of [...secrets].sort((a, b) => b.length - a.length)) {
38
+ if (secret.length > 0) {
39
+ value = value.split(secret).join("[REDACTED:secret]");
40
+ }
41
+ }
42
+ return redactPrivateKeys(value)
43
+ .replace(/\b(?:Bearer|Basic|Token)\s+[A-Za-z0-9._~+/=-]{8,}/gi, "[REDACTED:authorization]")
44
+ .replace(/\b(?:sk-[A-Za-z0-9_-]{16,}|(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{20,}|github_pat_[A-Za-z0-9_]{20,}|hf_[A-Za-z0-9]{20,}|r8_[A-Za-z0-9]{20,}|AIza[0-9A-Za-z_-]{35}|(?:AKIA|ASIA)[A-Z0-9]{16})\b/g, "[REDACTED:api-key]")
45
+ .replace(/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/g, "[REDACTED:jwt]")
46
+ .replace(/([a-z][a-z0-9+.-]*:\/\/)[^\s/@:]+:[^\s/@]+@/gi, "$1[REDACTED]@")
47
+ .replace(/(["']?[\w.-]*(?:api[_-]?key|token|secret|password|authorization|cookie|signature)[\w.-]*["']?\s*[:=]\s*)["']?[^\s,;}"']+["']?/gi, "$1[REDACTED:credential]")
48
+ .replace(/data:[^\s"']+/gi, "[REDACTED:media]")
49
+ .replace(/\b[A-Za-z0-9_+/=-]{100,}\b/g, "[REDACTED:blob]");
50
+ }
51
+ //# sourceMappingURL=trace-redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-redaction.js","sourceRoot":"","sources":["../src/trace-redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,sEAAsE;AACtE,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;IACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,2CAA2C,CAAC,EAAE,CAAC;QAChF,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC;YAC1B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAChE,MAAM,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,KAAK,GAAG,CAAC,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,uEAAuE;IACvE,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC;IAClE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,YAAY,GAAwB,IAAI,GAAG,EAAE;IACzF,IAAI,KAAK,GAAG,IAAI,CAAC;IACjB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,CAAC;QAC7D,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,qEAAqE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;IAC/I,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAAC,CAAC;IACnF,CAAC;IACD,OAAO,iBAAiB,CAAC,KAAK,CAAC;SAC5B,OAAO,CAAC,qDAAqD,EAAE,0BAA0B,CAAC;SAC1F,OAAO,CAAC,8LAA8L,EAAE,oBAAoB,CAAC;SAC7N,OAAO,CAAC,+DAA+D,EAAE,gBAAgB,CAAC;SAC1F,OAAO,CAAC,+CAA+C,EAAE,eAAe,CAAC;SACzE,OAAO,CAAC,iIAAiI,EAAE,yBAAyB,CAAC;SACrK,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;SAC9C,OAAO,CAAC,6BAA6B,EAAE,iBAAiB,CAAC,CAAC;AAC/D,CAAC"}
package/package.json CHANGED
@@ -1,20 +1,23 @@
1
1
  {
2
2
  "name": "@nodetool-ai/config",
3
- "version": "0.7.0-rc.23",
3
+ "version": "0.8.2",
4
4
  "type": "module",
5
+ "engines": {
6
+ "node": ">=22.0.0"
7
+ },
5
8
  "main": "dist/index.js",
6
9
  "types": "dist/index.d.ts",
7
10
  "scripts": {
8
11
  "build": "node ../../scripts/build-typescript-workspace.mjs",
9
- "test": "vitest run",
10
- "lint": "tsc --noEmit"
11
- },
12
- "dependencies": {
13
- "dotenv": "^16.4.0"
12
+ "test": "node ../../scripts/run-vitest.mjs run",
13
+ "test:mutation": "stryker run",
14
+ "lint": "node ../../scripts/run-tsc.mjs --noEmit"
14
15
  },
15
16
  "devDependencies": {
16
- "vitest": "^4.1.2",
17
- "typescript": "^5.7.2"
17
+ "@stryker-mutator/core": "^9.6.1",
18
+ "@stryker-mutator/vitest-runner": "^9.6.1",
19
+ "typescript": "npm:@typescript/typescript6@6.0.2",
20
+ "vitest": "^5.0.1"
18
21
  },
19
22
  "exports": {
20
23
  ".": {
@@ -40,5 +43,17 @@
40
43
  "files": [
41
44
  "dist",
42
45
  "README.md"
46
+ ],
47
+ "description": "Configuration and environment loading for NodeTool — settings, paths, logging, byte limits, and cross-runtime module loading",
48
+ "keywords": [
49
+ "nodetool",
50
+ "ai",
51
+ "workflow",
52
+ "workflow-automation",
53
+ "typescript",
54
+ "configuration",
55
+ "settings",
56
+ "environment",
57
+ "logging"
43
58
  ]
44
59
  }
@@ -1,27 +0,0 @@
1
- /**
2
- * Environment diagnostics — T-CFG-4.
3
- *
4
- * Enumerates registered settings and reports their status with
5
- * masked values for secrets.
6
- */
7
- import { type SettingStatus } from "./settings.js";
8
- export interface DiagnosticResult {
9
- key: string;
10
- group: string;
11
- isSet: boolean;
12
- isSecret: boolean;
13
- maskedValue: string | null;
14
- description: string;
15
- }
16
- /**
17
- * Mask a secret value: show first 4 + last 4 chars with `***` in between.
18
- * For short values (<=8 chars), mask entirely as `***`.
19
- */
20
- export declare function maskSecret(value: string): string;
21
- /**
22
- * Diagnose the current environment by checking all registered settings.
23
- *
24
- * @param settings Optional override — defaults to `getSettings()`.
25
- */
26
- export declare function diagnoseEnvironment(settings?: SettingStatus[]): DiagnosticResult[];
27
- //# sourceMappingURL=diagnostics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAe,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKhD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,CAAC,EAAE,aAAa,EAAE,GACzB,gBAAgB,EAAE,CAqBpB"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Environment diagnostics — T-CFG-4.
3
- *
4
- * Enumerates registered settings and reports their status with
5
- * masked values for secrets.
6
- */
7
- import { getSettings } from "./settings.js";
8
- /**
9
- * Mask a secret value: show first 4 + last 4 chars with `***` in between.
10
- * For short values (<=8 chars), mask entirely as `***`.
11
- */
12
- export function maskSecret(value) {
13
- if (value.length <= 8) {
14
- return "***";
15
- }
16
- return `${value.slice(0, 4)}***${value.slice(-4)}`;
17
- }
18
- /**
19
- * Diagnose the current environment by checking all registered settings.
20
- *
21
- * @param settings Optional override — defaults to `getSettings()`.
22
- */
23
- export function diagnoseEnvironment(settings) {
24
- const resolved = settings ?? getSettings();
25
- return resolved.map((setting) => {
26
- const envValue = process.env[setting.envVar];
27
- const isSet = !!envValue;
28
- let maskedValue = null;
29
- if (isSet && envValue) {
30
- maskedValue = setting.isSecret ? maskSecret(envValue) : envValue;
31
- }
32
- return {
33
- key: setting.envVar,
34
- group: setting.group,
35
- isSet,
36
- isSecret: setting.isSecret,
37
- maskedValue,
38
- description: setting.description
39
- };
40
- });
41
- }
42
- //# sourceMappingURL=diagnostics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../src/diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAsB,MAAM,eAAe,CAAC;AAWhE;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAA0B;IAE1B,MAAM,QAAQ,GAAG,QAAQ,IAAI,WAAW,EAAE,CAAC;IAE3C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC9B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC;QAEzB,IAAI,WAAW,GAAkB,IAAI,CAAC;QACtC,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QACnE,CAAC;QAED,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,MAAM;YACnB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW;YACX,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Settings registry — T-CFG-2.
3
- *
4
- * Registers configuration settings and reports their configured status.
5
- */
6
- export interface SettingDefinition {
7
- package: string;
8
- envVar: string;
9
- group: string;
10
- description: string;
11
- isSecret: boolean;
12
- }
13
- export interface SettingStatus extends SettingDefinition {
14
- configured: boolean;
15
- }
16
- /**
17
- * Register a configuration setting.
18
- */
19
- export declare function registerSetting(definition: SettingDefinition): void;
20
- /**
21
- * Get all registered settings with their configured status.
22
- * A setting is configured if its env var has a non-empty value.
23
- */
24
- export declare function getSettings(): SettingStatus[];
25
- /**
26
- * Clear all registered settings (for testing).
27
- */
28
- export declare function clearSettings(): void;
29
- //# sourceMappingURL=settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,UAAU,EAAE,OAAO,CAAC;CACrB;AAID;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,iBAAiB,GAAG,IAAI,CAEnE;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,aAAa,EAAE,CAK7C;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
package/dist/settings.js DELETED
@@ -1,29 +0,0 @@
1
- /**
2
- * Settings registry — T-CFG-2.
3
- *
4
- * Registers configuration settings and reports their configured status.
5
- */
6
- const registry = new Map();
7
- /**
8
- * Register a configuration setting.
9
- */
10
- export function registerSetting(definition) {
11
- registry.set(definition.envVar, definition);
12
- }
13
- /**
14
- * Get all registered settings with their configured status.
15
- * A setting is configured if its env var has a non-empty value.
16
- */
17
- export function getSettings() {
18
- return Array.from(registry.values()).map((def) => ({
19
- ...def,
20
- configured: !!process.env[def.envVar]
21
- }));
22
- }
23
- /**
24
- * Clear all registered settings (for testing).
25
- */
26
- export function clearSettings() {
27
- registry.clear();
28
- }
29
- //# sourceMappingURL=settings.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../src/settings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAcH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEtD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAA6B;IAC3D,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjD,GAAG,GAAG;QACN,UAAU,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;KACtC,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,QAAQ,CAAC,KAAK,EAAE,CAAC;AACnB,CAAC"}