@enactprotocol/shared 1.2.13 → 2.0.1

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 (207) hide show
  1. package/README.md +44 -0
  2. package/dist/config.d.ts +164 -0
  3. package/dist/config.d.ts.map +1 -0
  4. package/dist/config.js +386 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/constants.d.ts +15 -5
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +24 -8
  9. package/dist/constants.js.map +1 -0
  10. package/dist/execution/command.d.ts +102 -0
  11. package/dist/execution/command.d.ts.map +1 -0
  12. package/dist/execution/command.js +262 -0
  13. package/dist/execution/command.js.map +1 -0
  14. package/dist/execution/index.d.ts +12 -0
  15. package/dist/execution/index.d.ts.map +1 -0
  16. package/dist/execution/index.js +17 -0
  17. package/dist/execution/index.js.map +1 -0
  18. package/dist/execution/runtime.d.ts +82 -0
  19. package/dist/execution/runtime.d.ts.map +1 -0
  20. package/dist/execution/runtime.js +273 -0
  21. package/dist/execution/runtime.js.map +1 -0
  22. package/dist/execution/types.d.ts +306 -0
  23. package/dist/execution/types.d.ts.map +1 -0
  24. package/dist/execution/types.js +14 -0
  25. package/dist/execution/types.js.map +1 -0
  26. package/dist/execution/validation.d.ts +43 -0
  27. package/dist/execution/validation.d.ts.map +1 -0
  28. package/dist/execution/validation.js +430 -0
  29. package/dist/execution/validation.js.map +1 -0
  30. package/dist/index.d.ts +21 -21
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +49 -25
  33. package/dist/index.js.map +1 -0
  34. package/dist/manifest/index.d.ts +7 -0
  35. package/dist/manifest/index.d.ts.map +1 -0
  36. package/dist/manifest/index.js +10 -0
  37. package/dist/manifest/index.js.map +1 -0
  38. package/dist/manifest/loader.d.ts +76 -0
  39. package/dist/manifest/loader.d.ts.map +1 -0
  40. package/dist/manifest/loader.js +146 -0
  41. package/dist/manifest/loader.js.map +1 -0
  42. package/dist/manifest/parser.d.ts +64 -0
  43. package/dist/manifest/parser.d.ts.map +1 -0
  44. package/dist/manifest/parser.js +135 -0
  45. package/dist/manifest/parser.js.map +1 -0
  46. package/dist/manifest/validator.d.ts +95 -0
  47. package/dist/manifest/validator.d.ts.map +1 -0
  48. package/dist/manifest/validator.js +258 -0
  49. package/dist/manifest/validator.js.map +1 -0
  50. package/dist/paths.d.ts +57 -0
  51. package/dist/paths.d.ts.map +1 -0
  52. package/dist/paths.js +93 -0
  53. package/dist/paths.js.map +1 -0
  54. package/dist/registry.d.ts +73 -0
  55. package/dist/registry.d.ts.map +1 -0
  56. package/dist/registry.js +147 -0
  57. package/dist/registry.js.map +1 -0
  58. package/dist/resolver.d.ts +89 -0
  59. package/dist/resolver.d.ts.map +1 -0
  60. package/dist/resolver.js +282 -0
  61. package/dist/resolver.js.map +1 -0
  62. package/dist/types/index.d.ts +6 -0
  63. package/dist/types/index.d.ts.map +1 -0
  64. package/dist/types/index.js +5 -0
  65. package/dist/types/index.js.map +1 -0
  66. package/dist/types/manifest.d.ts +201 -0
  67. package/dist/types/manifest.d.ts.map +1 -0
  68. package/dist/types/manifest.js +13 -0
  69. package/dist/types/manifest.js.map +1 -0
  70. package/dist/types.d.ts +5 -132
  71. package/dist/types.d.ts.map +1 -0
  72. package/dist/types.js +5 -3
  73. package/dist/types.js.map +1 -0
  74. package/dist/utils/fs.d.ts +105 -0
  75. package/dist/utils/fs.d.ts.map +1 -0
  76. package/dist/utils/fs.js +233 -0
  77. package/dist/utils/fs.js.map +1 -0
  78. package/dist/utils/logger.d.ts +102 -25
  79. package/dist/utils/logger.d.ts.map +1 -0
  80. package/dist/utils/logger.js +214 -57
  81. package/dist/utils/logger.js.map +1 -0
  82. package/dist/utils/version.d.ts +60 -2
  83. package/dist/utils/version.d.ts.map +1 -0
  84. package/dist/utils/version.js +255 -31
  85. package/dist/utils/version.js.map +1 -0
  86. package/package.json +16 -58
  87. package/src/config.ts +510 -0
  88. package/src/constants.ts +36 -0
  89. package/src/execution/command.ts +314 -0
  90. package/src/execution/index.ts +73 -0
  91. package/src/execution/runtime.ts +308 -0
  92. package/src/execution/types.ts +379 -0
  93. package/src/execution/validation.ts +508 -0
  94. package/src/index.ts +238 -30
  95. package/src/manifest/index.ts +36 -0
  96. package/src/manifest/loader.ts +187 -0
  97. package/src/manifest/parser.ts +173 -0
  98. package/src/manifest/validator.ts +309 -0
  99. package/src/paths.ts +108 -0
  100. package/src/registry.ts +219 -0
  101. package/src/resolver.ts +345 -0
  102. package/src/types/index.ts +30 -0
  103. package/src/types/manifest.ts +255 -0
  104. package/src/types.ts +5 -188
  105. package/src/utils/fs.ts +281 -0
  106. package/src/utils/logger.ts +270 -59
  107. package/src/utils/version.ts +304 -36
  108. package/tests/config.test.ts +515 -0
  109. package/tests/execution/command.test.ts +317 -0
  110. package/tests/execution/validation.test.ts +384 -0
  111. package/tests/fixtures/invalid-tool.yaml +4 -0
  112. package/tests/fixtures/valid-tool.md +62 -0
  113. package/tests/fixtures/valid-tool.yaml +40 -0
  114. package/tests/index.test.ts +8 -0
  115. package/tests/manifest/loader.test.ts +291 -0
  116. package/tests/manifest/parser.test.ts +345 -0
  117. package/tests/manifest/validator.test.ts +394 -0
  118. package/tests/manifest-types.test.ts +358 -0
  119. package/tests/paths.test.ts +153 -0
  120. package/tests/registry.test.ts +231 -0
  121. package/tests/resolver.test.ts +272 -0
  122. package/tests/utils/fs.test.ts +388 -0
  123. package/tests/utils/logger.test.ts +480 -0
  124. package/tests/utils/version.test.ts +390 -0
  125. package/tsconfig.json +12 -0
  126. package/dist/LocalToolResolver.d.ts +0 -84
  127. package/dist/LocalToolResolver.js +0 -353
  128. package/dist/api/enact-api.d.ts +0 -130
  129. package/dist/api/enact-api.js +0 -428
  130. package/dist/api/index.d.ts +0 -2
  131. package/dist/api/index.js +0 -2
  132. package/dist/api/types.d.ts +0 -103
  133. package/dist/api/types.js +0 -1
  134. package/dist/core/DaggerExecutionProvider.d.ts +0 -169
  135. package/dist/core/DaggerExecutionProvider.js +0 -1029
  136. package/dist/core/DirectExecutionProvider.d.ts +0 -23
  137. package/dist/core/DirectExecutionProvider.js +0 -406
  138. package/dist/core/EnactCore.d.ts +0 -162
  139. package/dist/core/EnactCore.js +0 -597
  140. package/dist/core/NativeExecutionProvider.d.ts +0 -9
  141. package/dist/core/NativeExecutionProvider.js +0 -16
  142. package/dist/core/index.d.ts +0 -3
  143. package/dist/core/index.js +0 -3
  144. package/dist/exec/index.d.ts +0 -3
  145. package/dist/exec/index.js +0 -3
  146. package/dist/exec/logger.d.ts +0 -11
  147. package/dist/exec/logger.js +0 -57
  148. package/dist/exec/validate.d.ts +0 -5
  149. package/dist/exec/validate.js +0 -167
  150. package/dist/lib/enact-direct.d.ts +0 -150
  151. package/dist/lib/enact-direct.js +0 -159
  152. package/dist/lib/index.d.ts +0 -1
  153. package/dist/lib/index.js +0 -1
  154. package/dist/security/index.d.ts +0 -3
  155. package/dist/security/index.js +0 -3
  156. package/dist/security/security.d.ts +0 -23
  157. package/dist/security/security.js +0 -137
  158. package/dist/security/sign.d.ts +0 -103
  159. package/dist/security/sign.js +0 -666
  160. package/dist/security/verification-enforcer.d.ts +0 -53
  161. package/dist/security/verification-enforcer.js +0 -204
  162. package/dist/services/McpCoreService.d.ts +0 -98
  163. package/dist/services/McpCoreService.js +0 -124
  164. package/dist/services/index.d.ts +0 -1
  165. package/dist/services/index.js +0 -1
  166. package/dist/utils/config.d.ts +0 -111
  167. package/dist/utils/config.js +0 -342
  168. package/dist/utils/env-loader.d.ts +0 -54
  169. package/dist/utils/env-loader.js +0 -270
  170. package/dist/utils/help.d.ts +0 -36
  171. package/dist/utils/help.js +0 -248
  172. package/dist/utils/index.d.ts +0 -7
  173. package/dist/utils/index.js +0 -7
  174. package/dist/utils/silent-monitor.d.ts +0 -67
  175. package/dist/utils/silent-monitor.js +0 -242
  176. package/dist/utils/timeout.d.ts +0 -5
  177. package/dist/utils/timeout.js +0 -23
  178. package/dist/web/env-manager-server.d.ts +0 -29
  179. package/dist/web/env-manager-server.js +0 -367
  180. package/dist/web/index.d.ts +0 -1
  181. package/dist/web/index.js +0 -1
  182. package/src/LocalToolResolver.ts +0 -424
  183. package/src/api/enact-api.ts +0 -604
  184. package/src/api/index.ts +0 -2
  185. package/src/api/types.ts +0 -114
  186. package/src/core/DaggerExecutionProvider.ts +0 -1357
  187. package/src/core/DirectExecutionProvider.ts +0 -484
  188. package/src/core/EnactCore.ts +0 -847
  189. package/src/core/index.ts +0 -3
  190. package/src/exec/index.ts +0 -3
  191. package/src/exec/logger.ts +0 -63
  192. package/src/exec/validate.ts +0 -238
  193. package/src/lib/enact-direct.ts +0 -254
  194. package/src/lib/index.ts +0 -1
  195. package/src/services/McpCoreService.ts +0 -201
  196. package/src/services/index.ts +0 -1
  197. package/src/utils/config.ts +0 -438
  198. package/src/utils/env-loader.ts +0 -370
  199. package/src/utils/help.ts +0 -257
  200. package/src/utils/index.ts +0 -7
  201. package/src/utils/silent-monitor.ts +0 -328
  202. package/src/utils/timeout.ts +0 -26
  203. package/src/web/env-manager-server.ts +0 -465
  204. package/src/web/index.ts +0 -1
  205. package/src/web/static/app.js +0 -663
  206. package/src/web/static/index.html +0 -117
  207. package/src/web/static/style.css +0 -291
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @enactprotocol/shared
2
+
3
+ Core business logic and utilities for Enact.
4
+
5
+ ## Overview
6
+
7
+ This package provides:
8
+ - Manifest parsing (enact.yaml and enact.md)
9
+ - Configuration management (~/.enact/config.yaml)
10
+ - Environment variable management (package-scoped)
11
+ - Tool resolution (local, user-level, registry)
12
+ - Trust store and policy enforcement
13
+ - Execution engine interfaces
14
+ - Registry client
15
+
16
+ ## Status
17
+
18
+ Currently in Phase 1 (scaffolding). Full implementation will be completed in Phase 3.
19
+
20
+ ## Dependencies
21
+
22
+ - `@enactprotocol/security` - For cryptographic operations
23
+
24
+ ## Development
25
+
26
+ ```bash
27
+ # Build
28
+ bun run build
29
+
30
+ # Test
31
+ bun test
32
+
33
+ # Type check
34
+ bun run typecheck
35
+ ```
36
+
37
+ ## Planned Features (Phase 3)
38
+
39
+ - [ ] Configuration system (paths, config, env, trust)
40
+ - [ ] Manifest parser with YAML/Markdown support
41
+ - [ ] Tool resolution with caching strategy
42
+ - [ ] Execution providers (Dagger and Direct)
43
+ - [ ] Registry HTTP client
44
+ - [ ] Comprehensive utilities (logger, tarball, version, fs)
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Configuration manager for Enact CLI
3
+ * Handles reading and writing ~/.enact/config.yaml
4
+ */
5
+ /**
6
+ * Trust configuration for attestation verification
7
+ *
8
+ * Uses a unified model: all trust is based on cryptographic attestations.
9
+ * Publishers who want their tools trusted should self-sign them.
10
+ * Third-party reviewers can add additional attestations.
11
+ */
12
+ export interface TrustConfig {
13
+ /**
14
+ * List of trusted auditor identities (provider:identity format, e.g., github:alice)
15
+ * Anyone who signs with these identities is trusted - whether they authored
16
+ * the tool (self-attestation) or reviewed it (third-party audit).
17
+ */
18
+ auditors?: string[];
19
+ /** Trust policy: 'require_attestation' blocks without trust, 'prompt' asks user, 'allow' installs anyway */
20
+ policy?: "require_attestation" | "prompt" | "allow";
21
+ /** Minimum number of trusted attestations required */
22
+ minimum_attestations?: number;
23
+ }
24
+ /**
25
+ * Cache configuration
26
+ */
27
+ export interface CacheConfig {
28
+ /** Maximum cache size in megabytes */
29
+ maxSizeMb?: number;
30
+ /** Cache TTL in seconds */
31
+ ttlSeconds?: number;
32
+ }
33
+ /**
34
+ * Execution configuration
35
+ */
36
+ export interface ExecutionConfig {
37
+ /** Default timeout for tool execution (e.g., "30s", "5m") */
38
+ defaultTimeout?: string;
39
+ /** Whether to run in verbose mode */
40
+ verbose?: boolean;
41
+ }
42
+ /**
43
+ * Registry configuration
44
+ */
45
+ export interface RegistryConfig {
46
+ /** Default registry URL */
47
+ url?: string;
48
+ /** Authentication token for registry (stored reference, not actual token) */
49
+ authTokenRef?: string;
50
+ /** Direct authentication token (for local development) */
51
+ authToken?: string;
52
+ }
53
+ /**
54
+ * Complete Enact configuration
55
+ */
56
+ export interface EnactConfig {
57
+ /** Configuration file version */
58
+ version?: string;
59
+ /** Trust settings for verification */
60
+ trust?: TrustConfig;
61
+ /** Cache settings */
62
+ cache?: CacheConfig;
63
+ /** Execution defaults */
64
+ execution?: ExecutionConfig;
65
+ /** Registry settings */
66
+ registry?: RegistryConfig;
67
+ }
68
+ /**
69
+ * Default configuration values
70
+ */
71
+ export declare const DEFAULT_CONFIG: EnactConfig;
72
+ /**
73
+ * Load configuration from ~/.enact/config.yaml
74
+ * Returns default config if file doesn't exist or is invalid
75
+ * @returns The loaded configuration merged with defaults
76
+ */
77
+ export declare function loadConfig(): EnactConfig;
78
+ /**
79
+ * Save configuration to ~/.enact/config.yaml
80
+ * Creates the ~/.enact/ directory if it doesn't exist
81
+ * @param config - The configuration to save
82
+ */
83
+ export declare function saveConfig(config: EnactConfig): void;
84
+ /**
85
+ * Get a configuration value by dot-notation key path
86
+ * @param key - Dot-notation path (e.g., "trust.policy", "cache.maxSizeMb")
87
+ * @param defaultValue - Default value if key doesn't exist
88
+ * @returns The configuration value or default
89
+ */
90
+ export declare function getConfigValue<T>(key: string, defaultValue: T): T;
91
+ /**
92
+ * Set a configuration value by dot-notation key path and persist
93
+ * @param key - Dot-notation path (e.g., "trust.policy", "cache.maxSizeMb")
94
+ * @param value - The value to set
95
+ */
96
+ export declare function setConfigValue<T>(key: string, value: T): void;
97
+ /**
98
+ * Reset configuration to defaults
99
+ * This will overwrite the existing config file
100
+ */
101
+ export declare function resetConfig(): void;
102
+ /**
103
+ * Check if a configuration file exists
104
+ * @returns true if ~/.enact/config.yaml exists
105
+ */
106
+ export declare function configExists(): boolean;
107
+ /**
108
+ * Ensure global setup is complete
109
+ * Creates ~/.enact/ directory structure and default config if they don't exist.
110
+ * This is a non-interactive initialization that runs silently.
111
+ * @returns true if setup was performed, false if already initialized
112
+ */
113
+ export declare function ensureGlobalSetup(): boolean;
114
+ /**
115
+ * Get list of trusted identities from local config
116
+ * @returns Array of identities in provider:identity format
117
+ */
118
+ export declare function getTrustedIdentities(): string[];
119
+ /**
120
+ * Add an identity to the local trusted list
121
+ * @param identity - Identity in provider:identity format (e.g., github:alice)
122
+ * @returns true if added, false if already exists
123
+ */
124
+ export declare function addTrustedIdentity(identity: string): boolean;
125
+ /**
126
+ * Remove an identity from the local trusted list
127
+ * @param identity - Identity in provider:identity format
128
+ * @returns true if removed, false if not found
129
+ */
130
+ export declare function removeTrustedIdentity(identity: string): boolean;
131
+ /**
132
+ * Check if an identity is in the local trusted list
133
+ * Supports wildcards like github:my-org/* and *@company.com
134
+ * @param identity - Identity to check
135
+ * @returns true if trusted
136
+ */
137
+ export declare function isIdentityTrusted(identity: string): boolean;
138
+ /** @deprecated Use getTrustedIdentities instead */
139
+ export declare const getTrustedAuditors: typeof getTrustedIdentities;
140
+ /** @deprecated Use addTrustedIdentity instead */
141
+ export declare const addTrustedAuditor: typeof addTrustedIdentity;
142
+ /** @deprecated Use removeTrustedIdentity instead */
143
+ export declare const removeTrustedAuditor: typeof removeTrustedIdentity;
144
+ /** @deprecated Use isIdentityTrusted instead */
145
+ export declare const isAuditorTrusted: typeof isIdentityTrusted;
146
+ /**
147
+ * Convert OIDC identity to provider:identity format
148
+ * @param email - Email from Sigstore certificate
149
+ * @param issuer - OIDC issuer URL (optional, improves accuracy)
150
+ * @param username - Provider username if known (optional)
151
+ * @returns Identity in provider:identity format (e.g., github:keithagroves)
152
+ */
153
+ export declare function emailToProviderIdentity(email: string, issuer?: string, username?: string): string;
154
+ /**
155
+ * Get minimum required attestations from config
156
+ * @returns Minimum number of trusted attestations required
157
+ */
158
+ export declare function getMinimumAttestations(): number;
159
+ /**
160
+ * Get trust policy from config
161
+ * @returns Trust policy: 'require_attestation', 'prompt', or 'allow'
162
+ */
163
+ export declare function getTrustPolicy(): "require_attestation" | "prompt" | "allow";
164
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/dist/config.js ADDED
@@ -0,0 +1,386 @@
1
+ /**
2
+ * Configuration manager for Enact CLI
3
+ * Handles reading and writing ~/.enact/config.yaml
4
+ */
5
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
6
+ import { dirname, join } from "node:path";
7
+ import yaml from "js-yaml";
8
+ import { getConfigPath, getEnactHome } from "./paths";
9
+ /**
10
+ * Default configuration values
11
+ */
12
+ export const DEFAULT_CONFIG = {
13
+ version: "1.0.0",
14
+ trust: {
15
+ auditors: [],
16
+ policy: "prompt",
17
+ minimum_attestations: 1,
18
+ },
19
+ cache: {
20
+ maxSizeMb: 1024, // 1GB
21
+ ttlSeconds: 86400 * 7, // 7 days
22
+ },
23
+ execution: {
24
+ defaultTimeout: "30s",
25
+ verbose: false,
26
+ },
27
+ registry: {
28
+ url: "https://siikwkfgsmouioodghho.supabase.co/functions/v1",
29
+ },
30
+ };
31
+ /**
32
+ * Deep merge two objects, with source values overwriting target values
33
+ */
34
+ function deepMerge(target, source) {
35
+ const result = { ...target };
36
+ // Merge trust config
37
+ if (source.trust !== undefined) {
38
+ result.trust = { ...target.trust, ...source.trust };
39
+ }
40
+ // Merge cache config
41
+ if (source.cache !== undefined) {
42
+ result.cache = { ...target.cache, ...source.cache };
43
+ }
44
+ // Merge execution config
45
+ if (source.execution !== undefined) {
46
+ result.execution = { ...target.execution, ...source.execution };
47
+ }
48
+ // Merge registry config
49
+ if (source.registry !== undefined) {
50
+ result.registry = { ...target.registry, ...source.registry };
51
+ }
52
+ // Copy top-level primitives
53
+ if (source.version !== undefined) {
54
+ result.version = source.version;
55
+ }
56
+ return result;
57
+ }
58
+ /**
59
+ * Load configuration from ~/.enact/config.yaml
60
+ * Returns default config if file doesn't exist or is invalid
61
+ * @returns The loaded configuration merged with defaults
62
+ */
63
+ export function loadConfig() {
64
+ const configPath = getConfigPath();
65
+ if (!existsSync(configPath)) {
66
+ return { ...DEFAULT_CONFIG };
67
+ }
68
+ try {
69
+ const content = readFileSync(configPath, "utf-8");
70
+ const parsed = yaml.load(content);
71
+ if (!parsed || typeof parsed !== "object") {
72
+ return { ...DEFAULT_CONFIG };
73
+ }
74
+ // Merge with defaults to ensure all fields exist
75
+ return deepMerge(DEFAULT_CONFIG, parsed);
76
+ }
77
+ catch {
78
+ // Return defaults on any error (parse error, read error, etc.)
79
+ return { ...DEFAULT_CONFIG };
80
+ }
81
+ }
82
+ /**
83
+ * Save configuration to ~/.enact/config.yaml
84
+ * Creates the ~/.enact/ directory if it doesn't exist
85
+ * @param config - The configuration to save
86
+ */
87
+ export function saveConfig(config) {
88
+ const configPath = getConfigPath();
89
+ const enactHome = getEnactHome();
90
+ // Ensure ~/.enact/ directory exists
91
+ if (!existsSync(enactHome)) {
92
+ mkdirSync(enactHome, { recursive: true });
93
+ }
94
+ // Ensure parent directory exists (should be ~/.enact/ but be safe)
95
+ const parentDir = dirname(configPath);
96
+ if (!existsSync(parentDir)) {
97
+ mkdirSync(parentDir, { recursive: true });
98
+ }
99
+ const yamlContent = yaml.dump(config, {
100
+ indent: 2,
101
+ lineWidth: 120,
102
+ noRefs: true,
103
+ });
104
+ writeFileSync(configPath, yamlContent, "utf-8");
105
+ }
106
+ /**
107
+ * Get a configuration value by dot-notation key path
108
+ * @param key - Dot-notation path (e.g., "trust.policy", "cache.maxSizeMb")
109
+ * @param defaultValue - Default value if key doesn't exist
110
+ * @returns The configuration value or default
111
+ */
112
+ export function getConfigValue(key, defaultValue) {
113
+ const config = loadConfig();
114
+ const keys = key.split(".");
115
+ let current = config;
116
+ for (const k of keys) {
117
+ if (current === null || current === undefined || typeof current !== "object") {
118
+ return defaultValue;
119
+ }
120
+ current = current[k];
121
+ }
122
+ return current === undefined ? defaultValue : current;
123
+ }
124
+ /**
125
+ * Set a configuration value by dot-notation key path and persist
126
+ * @param key - Dot-notation path (e.g., "trust.policy", "cache.maxSizeMb")
127
+ * @param value - The value to set
128
+ */
129
+ export function setConfigValue(key, value) {
130
+ const config = loadConfig();
131
+ const keys = key.split(".");
132
+ const lastKey = keys.pop();
133
+ if (!lastKey) {
134
+ throw new Error("Invalid configuration key");
135
+ }
136
+ // Navigate to parent object, creating intermediate objects as needed
137
+ let current = config;
138
+ for (const k of keys) {
139
+ if (current[k] === undefined || current[k] === null || typeof current[k] !== "object") {
140
+ current[k] = {};
141
+ }
142
+ current = current[k];
143
+ }
144
+ // Set the value
145
+ current[lastKey] = value;
146
+ // Persist
147
+ saveConfig(config);
148
+ }
149
+ /**
150
+ * Reset configuration to defaults
151
+ * This will overwrite the existing config file
152
+ */
153
+ export function resetConfig() {
154
+ saveConfig({ ...DEFAULT_CONFIG });
155
+ }
156
+ /**
157
+ * Check if a configuration file exists
158
+ * @returns true if ~/.enact/config.yaml exists
159
+ */
160
+ export function configExists() {
161
+ return existsSync(getConfigPath());
162
+ }
163
+ /**
164
+ * Ensure global setup is complete
165
+ * Creates ~/.enact/ directory structure and default config if they don't exist.
166
+ * This is a non-interactive initialization that runs silently.
167
+ * @returns true if setup was performed, false if already initialized
168
+ */
169
+ export function ensureGlobalSetup() {
170
+ const enactHome = getEnactHome();
171
+ const configPath = getConfigPath();
172
+ const cacheDir = join(enactHome, "cache");
173
+ let performedSetup = false;
174
+ // Ensure ~/.enact/ directory exists
175
+ if (!existsSync(enactHome)) {
176
+ mkdirSync(enactHome, { recursive: true });
177
+ performedSetup = true;
178
+ }
179
+ // Ensure ~/.enact/cache/ directory exists
180
+ if (!existsSync(cacheDir)) {
181
+ mkdirSync(cacheDir, { recursive: true });
182
+ performedSetup = true;
183
+ }
184
+ // Create default config if it doesn't exist
185
+ if (!existsSync(configPath)) {
186
+ saveConfig({ ...DEFAULT_CONFIG });
187
+ performedSetup = true;
188
+ }
189
+ return performedSetup;
190
+ }
191
+ // =============================================================================
192
+ // Local Trust Management
193
+ // =============================================================================
194
+ /**
195
+ * Get list of trusted identities from local config
196
+ * @returns Array of identities in provider:identity format
197
+ */
198
+ export function getTrustedIdentities() {
199
+ const config = loadConfig();
200
+ return config.trust?.auditors ?? [];
201
+ }
202
+ /**
203
+ * Add an identity to the local trusted list
204
+ * @param identity - Identity in provider:identity format (e.g., github:alice)
205
+ * @returns true if added, false if already exists
206
+ */
207
+ export function addTrustedIdentity(identity) {
208
+ const config = loadConfig();
209
+ const auditors = config.trust?.auditors ?? [];
210
+ // Check if already exists
211
+ if (auditors.includes(identity)) {
212
+ return false;
213
+ }
214
+ // Add to list
215
+ auditors.push(identity);
216
+ // Update config
217
+ if (!config.trust) {
218
+ config.trust = { ...DEFAULT_CONFIG.trust };
219
+ }
220
+ config.trust.auditors = auditors;
221
+ saveConfig(config);
222
+ return true;
223
+ }
224
+ /**
225
+ * Remove an identity from the local trusted list
226
+ * @param identity - Identity in provider:identity format
227
+ * @returns true if removed, false if not found
228
+ */
229
+ export function removeTrustedIdentity(identity) {
230
+ const config = loadConfig();
231
+ const auditors = config.trust?.auditors ?? [];
232
+ const index = auditors.indexOf(identity);
233
+ if (index === -1) {
234
+ return false;
235
+ }
236
+ // Remove from list
237
+ auditors.splice(index, 1);
238
+ // Update config
239
+ if (!config.trust) {
240
+ config.trust = { ...DEFAULT_CONFIG.trust };
241
+ }
242
+ config.trust.auditors = auditors;
243
+ saveConfig(config);
244
+ return true;
245
+ }
246
+ /**
247
+ * Check if an identity is in the local trusted list
248
+ * Supports wildcards like github:my-org/* and *@company.com
249
+ * @param identity - Identity to check
250
+ * @returns true if trusted
251
+ */
252
+ export function isIdentityTrusted(identity) {
253
+ const trustedIdentities = getTrustedIdentities();
254
+ // Check exact match first
255
+ if (trustedIdentities.includes(identity)) {
256
+ return true;
257
+ }
258
+ // Check wildcard matches (e.g., github:my-org/* matches github:my-org/alice)
259
+ for (const trusted of trustedIdentities) {
260
+ if (trusted.endsWith("/*")) {
261
+ const prefix = trusted.slice(0, -2); // Remove /*
262
+ if (identity.startsWith(`${prefix}/`)) {
263
+ return true;
264
+ }
265
+ }
266
+ // Check email wildcards (e.g., *@company.com)
267
+ if (trusted.includes("*@")) {
268
+ const domainPart = trusted.split("*@")[1];
269
+ if (identity.endsWith(`@${domainPart}`)) {
270
+ return true;
271
+ }
272
+ }
273
+ }
274
+ return false;
275
+ }
276
+ // Legacy aliases for backward compatibility
277
+ /** @deprecated Use getTrustedIdentities instead */
278
+ export const getTrustedAuditors = getTrustedIdentities;
279
+ /** @deprecated Use addTrustedIdentity instead */
280
+ export const addTrustedAuditor = addTrustedIdentity;
281
+ /** @deprecated Use removeTrustedIdentity instead */
282
+ export const removeTrustedAuditor = removeTrustedIdentity;
283
+ /** @deprecated Use isIdentityTrusted instead */
284
+ export const isAuditorTrusted = isIdentityTrusted;
285
+ /**
286
+ * Convert OIDC identity to provider:identity format
287
+ * @param email - Email from Sigstore certificate
288
+ * @param issuer - OIDC issuer URL (optional, improves accuracy)
289
+ * @param username - Provider username if known (optional)
290
+ * @returns Identity in provider:identity format (e.g., github:keithagroves)
291
+ */
292
+ export function emailToProviderIdentity(email, issuer, username) {
293
+ // If we have a username and can determine the provider, use that
294
+ if (username && issuer) {
295
+ const provider = issuerToProvider(issuer);
296
+ if (provider) {
297
+ return `${provider}:${username}`;
298
+ }
299
+ }
300
+ // Determine provider from issuer URL if available
301
+ if (issuer) {
302
+ const provider = issuerToProvider(issuer);
303
+ if (provider) {
304
+ // Try to extract username from email for GitHub
305
+ if (provider === "github" && email.endsWith("@users.noreply.github.com")) {
306
+ // GitHub noreply format: "123456+username@users.noreply.github.com"
307
+ // or just "username@users.noreply.github.com"
308
+ const localPart = email.replace("@users.noreply.github.com", "");
309
+ const plusIndex = localPart.indexOf("+");
310
+ const extractedUsername = plusIndex >= 0 ? localPart.slice(plusIndex + 1) : localPart;
311
+ return `github:${extractedUsername}`;
312
+ }
313
+ // Use email as the identity since we don't have username
314
+ return `${provider}:${email}`;
315
+ }
316
+ }
317
+ // Common OIDC providers and their email domains (fallback)
318
+ const providerMap = {
319
+ "@users.noreply.github.com": "github",
320
+ "@github.com": "github",
321
+ "@gmail.com": "google",
322
+ "@googlemail.com": "google",
323
+ "@outlook.com": "microsoft",
324
+ "@hotmail.com": "microsoft",
325
+ "@live.com": "microsoft",
326
+ };
327
+ // Try to match provider by email domain
328
+ for (const [domain, provider] of Object.entries(providerMap)) {
329
+ if (email.endsWith(domain)) {
330
+ let extractedUsername = email.substring(0, email.length - domain.length);
331
+ // Handle GitHub noreply format: "123456+username@users.noreply.github.com"
332
+ if (provider === "github" && domain === "@users.noreply.github.com") {
333
+ const plusIndex = extractedUsername.indexOf("+");
334
+ if (plusIndex >= 0) {
335
+ extractedUsername = extractedUsername.slice(plusIndex + 1);
336
+ }
337
+ }
338
+ return `${provider}:${extractedUsername}`;
339
+ }
340
+ }
341
+ // If no match, check for GitHub workflow identity
342
+ // Format: https://github.com/{org}/{workflow}
343
+ if (email.startsWith("https://github.com/")) {
344
+ const path = email.replace("https://github.com/", "");
345
+ return `github:${path}`;
346
+ }
347
+ // Fall back to email as-is
348
+ return email;
349
+ }
350
+ /**
351
+ * Convert OIDC issuer URL to provider name
352
+ */
353
+ function issuerToProvider(issuer) {
354
+ if (issuer.includes("github.com"))
355
+ return "github";
356
+ if (issuer.includes("accounts.google.com"))
357
+ return "google";
358
+ if (issuer.includes("login.microsoftonline.com"))
359
+ return "microsoft";
360
+ if (issuer.includes("gitlab.com"))
361
+ return "gitlab";
362
+ return undefined;
363
+ }
364
+ /**
365
+ * Get minimum required attestations from config
366
+ * @returns Minimum number of trusted attestations required
367
+ */
368
+ export function getMinimumAttestations() {
369
+ const config = loadConfig();
370
+ return config.trust?.minimum_attestations ?? 1;
371
+ }
372
+ /**
373
+ * Get trust policy from config
374
+ * @returns Trust policy: 'require_attestation', 'prompt', or 'allow'
375
+ */
376
+ export function getTrustPolicy() {
377
+ const config = loadConfig();
378
+ // Handle legacy 'require_audit' value (cast to string for comparison)
379
+ const policy = config.trust?.policy;
380
+ if (policy === "require_audit") {
381
+ return "require_attestation";
382
+ }
383
+ // Default to require_attestation - trust must be explicit
384
+ return policy ?? "require_attestation";
385
+ }
386
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,17 @@
1
1
  /**
2
- * Shared constants for Enact CLI
2
+ * Enact Constants
3
+ *
4
+ * Centralized configuration for Enact URLs and identifiers.
5
+ * This ensures consistency across all packages.
6
+ *
7
+ * Note: Attestation type constants (ENACT_TOOL_TYPE, ENACT_AUDIT_TYPE, etc.)
8
+ * are defined in @enactprotocol/trust and re-exported here for convenience.
3
9
  */
4
- export declare const DEFAULT_FRONTEND_URL = "https://enact.tools";
5
- export declare const DEFAULT_API_URL = "https://xjnhhxwxovjifdxdwzih.supabase.co";
6
- export declare const ENV_FRONTEND_URL = "ENACT_FRONTEND_URL";
7
- export declare const ENV_API_URL = "ENACT_API_URL";
10
+ export { ENACT_BASE_URL, ENACT_TOOL_TYPE, ENACT_AUDIT_TYPE, ENACT_BUILD_TYPE, INTOTO_STATEMENT_TYPE, SLSA_PROVENANCE_TYPE, } from "@enactprotocol/trust";
11
+ export declare const ENACT_API_URL: string;
12
+ /**
13
+ * The Enact web application URL
14
+ * Override with ENACT_WEB_URL environment variable
15
+ */
16
+ export declare const ENACT_WEB_URL: string;
17
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,cAAc,EACd,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,sBAAsB,CAAC;AAW9B,eAAO,MAAM,aAAa,QAAiD,CAAC;AAE5E;;;GAGG;AACH,eAAO,MAAM,aAAa,QAAwC,CAAC"}
package/dist/constants.js CHANGED
@@ -1,10 +1,26 @@
1
1
  /**
2
- * Shared constants for Enact CLI
2
+ * Enact Constants
3
+ *
4
+ * Centralized configuration for Enact URLs and identifiers.
5
+ * This ensures consistency across all packages.
6
+ *
7
+ * Note: Attestation type constants (ENACT_TOOL_TYPE, ENACT_AUDIT_TYPE, etc.)
8
+ * are defined in @enactprotocol/trust and re-exported here for convenience.
3
9
  */
4
- // Frontend URL - used for OAuth redirects, registry browsing, documentation links
5
- export const DEFAULT_FRONTEND_URL = "https://enact.tools";
6
- // Backend API URL - used for all API calls (search, publish, etc.)
7
- export const DEFAULT_API_URL = "https://xjnhhxwxovjifdxdwzih.supabase.co";
8
- // Environment variable names for overriding defaults
9
- export const ENV_FRONTEND_URL = "ENACT_FRONTEND_URL";
10
- export const ENV_API_URL = "ENACT_API_URL";
10
+ // Re-export attestation constants from trust package
11
+ export { ENACT_BASE_URL, ENACT_TOOL_TYPE, ENACT_AUDIT_TYPE, ENACT_BUILD_TYPE, INTOTO_STATEMENT_TYPE, SLSA_PROVENANCE_TYPE, } from "@enactprotocol/trust";
12
+ // ============================================================================
13
+ // Runtime URLs (can be overridden by environment)
14
+ // ============================================================================
15
+ /**
16
+ * The Enact API base URL (Supabase Edge Functions)
17
+ * Override with ENACT_API_URL environment variable
18
+ */
19
+ import { ENACT_BASE_URL as BASE_URL } from "@enactprotocol/trust";
20
+ export const ENACT_API_URL = process.env.ENACT_API_URL || `${BASE_URL}/api`;
21
+ /**
22
+ * The Enact web application URL
23
+ * Override with ENACT_WEB_URL environment variable
24
+ */
25
+ export const ENACT_WEB_URL = process.env.ENACT_WEB_URL || BASE_URL;
26
+ //# sourceMappingURL=constants.js.map