@enactprotocol/cli 2.0.0 → 2.0.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 (119) hide show
  1. package/dist/commands/auth/index.d.ts +12 -0
  2. package/dist/commands/auth/index.d.ts.map +1 -0
  3. package/dist/commands/auth/index.js +743 -0
  4. package/dist/commands/auth/index.js.map +1 -0
  5. package/dist/commands/cache/index.d.ts +11 -0
  6. package/dist/commands/cache/index.d.ts.map +1 -0
  7. package/dist/commands/cache/index.js +304 -0
  8. package/dist/commands/cache/index.js.map +1 -0
  9. package/dist/commands/config/index.d.ts +11 -0
  10. package/dist/commands/config/index.d.ts.map +1 -0
  11. package/dist/commands/config/index.js +138 -0
  12. package/dist/commands/config/index.js.map +1 -0
  13. package/dist/commands/env/index.d.ts +11 -0
  14. package/dist/commands/env/index.d.ts.map +1 -0
  15. package/dist/commands/env/index.js +303 -0
  16. package/dist/commands/env/index.js.map +1 -0
  17. package/dist/commands/exec/index.d.ts +12 -0
  18. package/dist/commands/exec/index.d.ts.map +1 -0
  19. package/dist/commands/exec/index.js +154 -0
  20. package/dist/commands/exec/index.js.map +1 -0
  21. package/dist/commands/get/index.d.ts +11 -0
  22. package/dist/commands/get/index.d.ts.map +1 -0
  23. package/dist/commands/get/index.js +151 -0
  24. package/dist/commands/get/index.js.map +1 -0
  25. package/dist/commands/index.d.ts +25 -0
  26. package/dist/commands/index.d.ts.map +1 -0
  27. package/dist/commands/index.js +28 -0
  28. package/dist/commands/index.js.map +1 -0
  29. package/dist/commands/init/index.d.ts +11 -0
  30. package/dist/commands/init/index.d.ts.map +1 -0
  31. package/dist/commands/init/index.js +192 -0
  32. package/dist/commands/init/index.js.map +1 -0
  33. package/dist/commands/inspect/index.d.ts +13 -0
  34. package/dist/commands/inspect/index.d.ts.map +1 -0
  35. package/dist/commands/inspect/index.js +199 -0
  36. package/dist/commands/inspect/index.js.map +1 -0
  37. package/dist/commands/install/index.d.ts +16 -0
  38. package/dist/commands/install/index.d.ts.map +1 -0
  39. package/dist/commands/install/index.js +520 -0
  40. package/dist/commands/install/index.js.map +1 -0
  41. package/dist/commands/list/index.d.ts +15 -0
  42. package/dist/commands/list/index.d.ts.map +1 -0
  43. package/dist/commands/list/index.js +103 -0
  44. package/dist/commands/list/index.js.map +1 -0
  45. package/dist/commands/publish/index.d.ts +11 -0
  46. package/dist/commands/publish/index.d.ts.map +1 -0
  47. package/dist/commands/publish/index.js +274 -0
  48. package/dist/commands/publish/index.js.map +1 -0
  49. package/dist/commands/report/index.d.ts +12 -0
  50. package/dist/commands/report/index.d.ts.map +1 -0
  51. package/dist/commands/report/index.js +279 -0
  52. package/dist/commands/report/index.js.map +1 -0
  53. package/dist/commands/run/index.d.ts +16 -0
  54. package/dist/commands/run/index.d.ts.map +1 -0
  55. package/dist/commands/run/index.js +525 -0
  56. package/dist/commands/run/index.js.map +1 -0
  57. package/dist/commands/search/index.d.ts +12 -0
  58. package/dist/commands/search/index.d.ts.map +1 -0
  59. package/dist/commands/search/index.js +275 -0
  60. package/dist/commands/search/index.js.map +1 -0
  61. package/dist/commands/setup/index.d.ts +11 -0
  62. package/dist/commands/setup/index.d.ts.map +1 -0
  63. package/dist/commands/setup/index.js +241 -0
  64. package/dist/commands/setup/index.js.map +1 -0
  65. package/dist/commands/sign/index.d.ts +17 -0
  66. package/dist/commands/sign/index.d.ts.map +1 -0
  67. package/dist/commands/sign/index.js +507 -0
  68. package/dist/commands/sign/index.js.map +1 -0
  69. package/dist/commands/trust/index.d.ts +13 -0
  70. package/dist/commands/trust/index.d.ts.map +1 -0
  71. package/dist/commands/trust/index.js +366 -0
  72. package/dist/commands/trust/index.js.map +1 -0
  73. package/dist/commands/unyank/index.d.ts +11 -0
  74. package/dist/commands/unyank/index.d.ts.map +1 -0
  75. package/dist/commands/unyank/index.js +87 -0
  76. package/dist/commands/unyank/index.js.map +1 -0
  77. package/dist/commands/yank/index.d.ts +13 -0
  78. package/dist/commands/yank/index.d.ts.map +1 -0
  79. package/dist/commands/yank/index.js +109 -0
  80. package/dist/commands/yank/index.js.map +1 -0
  81. package/dist/index.d.ts +10 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +68 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/types.d.ts +69 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +15 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/utils/errors.d.ts +159 -0
  90. package/dist/utils/errors.d.ts.map +1 -0
  91. package/dist/utils/errors.js +321 -0
  92. package/dist/utils/errors.js.map +1 -0
  93. package/dist/utils/exit-codes.d.ts +83 -0
  94. package/dist/utils/exit-codes.d.ts.map +1 -0
  95. package/dist/utils/exit-codes.js +126 -0
  96. package/dist/utils/exit-codes.js.map +1 -0
  97. package/dist/utils/ignore.d.ts +25 -0
  98. package/dist/utils/ignore.d.ts.map +1 -0
  99. package/dist/utils/ignore.js +123 -0
  100. package/dist/utils/ignore.js.map +1 -0
  101. package/dist/utils/index.d.ts +8 -0
  102. package/dist/utils/index.d.ts.map +1 -0
  103. package/dist/utils/index.js +12 -0
  104. package/dist/utils/index.js.map +1 -0
  105. package/dist/utils/output.d.ts +103 -0
  106. package/dist/utils/output.d.ts.map +1 -0
  107. package/dist/utils/output.js +201 -0
  108. package/dist/utils/output.js.map +1 -0
  109. package/dist/utils/spinner.d.ts +83 -0
  110. package/dist/utils/spinner.d.ts.map +1 -0
  111. package/dist/utils/spinner.js +162 -0
  112. package/dist/utils/spinner.js.map +1 -0
  113. package/package.json +5 -5
  114. package/src/commands/index.ts +1 -0
  115. package/src/commands/init/index.ts +231 -0
  116. package/src/index.ts +7 -1
  117. package/tests/index.test.ts +1 -1
  118. package/tsconfig.json +1 -0
  119. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,507 @@
1
+ /**
2
+ * enact sign command
3
+ *
4
+ * Cryptographically sign a tool using Sigstore keyless signing.
5
+ * Creates an in-toto attestation, logs to Rekor transparency log,
6
+ * and submits the attestation to the Enact registry.
7
+ *
8
+ * Supports both local paths and remote tool references:
9
+ * - Local: enact sign ./my-tool
10
+ * - Remote: enact sign author/tool@1.0.0
11
+ */
12
+ import { readFileSync, writeFileSync } from "node:fs";
13
+ import { dirname, join, resolve } from "node:path";
14
+ import { createApiClient, getToolVersion, submitAttestation as submitAttestationToRegistry, } from "@enactprotocol/api";
15
+ import { getSecret } from "@enactprotocol/secrets";
16
+ import { addTrustedAuditor, emailToProviderIdentity, getTrustedAuditors, loadConfig, loadManifestFromDir, tryLoadManifest, validateManifest, } from "@enactprotocol/shared";
17
+ import { createEnactToolStatement, signAttestation, } from "@enactprotocol/trust";
18
+ import { colors, confirm, dim, error, formatError, info, json, keyValue, newline, success, symbols, warning, withSpinner, } from "../../utils";
19
+ /** Auth namespace for token storage */
20
+ const AUTH_NAMESPACE = "enact:auth";
21
+ const ACCESS_TOKEN_KEY = "access_token";
22
+ /** Default output filename for the signature bundle */
23
+ const DEFAULT_BUNDLE_FILENAME = ".sigstore-bundle.json";
24
+ /**
25
+ * Parse a remote tool reference like "author/tool@1.0.0"
26
+ * Returns null if not a valid remote reference
27
+ */
28
+ function parseRemoteToolRef(ref) {
29
+ // Remote refs look like: author/tool@version or org/author/tool@version
30
+ // They don't start with . or / and contain @ for version
31
+ if (ref.startsWith(".") || ref.startsWith("/") || ref.startsWith("~")) {
32
+ return null;
33
+ }
34
+ const atIndex = ref.lastIndexOf("@");
35
+ if (atIndex === -1 || atIndex === 0) {
36
+ return null;
37
+ }
38
+ const name = ref.substring(0, atIndex);
39
+ const version = ref.substring(atIndex + 1);
40
+ // Must have at least one / in the name (author/tool)
41
+ if (!name.includes("/") || !version) {
42
+ return null;
43
+ }
44
+ return { name, version };
45
+ }
46
+ /**
47
+ * Find the manifest file in a directory or at a path
48
+ */
49
+ function findManifestPath(pathArg) {
50
+ const absolutePath = resolve(pathArg);
51
+ // Check if it's a directory or file
52
+ try {
53
+ // Try loading from directory first
54
+ const loaded = loadManifestFromDir(absolutePath);
55
+ return {
56
+ manifestPath: loaded.filePath,
57
+ manifestDir: absolutePath,
58
+ };
59
+ }
60
+ catch {
61
+ // Try as a direct file path
62
+ const loaded = tryLoadManifest(absolutePath);
63
+ if (loaded) {
64
+ return {
65
+ manifestPath: absolutePath,
66
+ manifestDir: dirname(absolutePath),
67
+ };
68
+ }
69
+ throw new Error(`No manifest found at: ${pathArg}`);
70
+ }
71
+ }
72
+ /**
73
+ * Display signing preview (dry run)
74
+ */
75
+ function displayDryRun(manifestPath, manifest, outputPath, options) {
76
+ newline();
77
+ info(colors.bold("Dry Run Preview - Signing"));
78
+ newline();
79
+ keyValue("Tool", manifest.name);
80
+ keyValue("Version", manifest.version ?? "unversioned");
81
+ keyValue("Manifest", manifestPath);
82
+ keyValue("Output", outputPath);
83
+ keyValue("Submit to registry", options.local ? "No (local only)" : "Yes");
84
+ newline();
85
+ info("Actions that would be performed:");
86
+ dim(" 1. Authenticate via OIDC (browser-based OAuth flow)");
87
+ dim(" 2. Create in-toto attestation for tool manifest");
88
+ dim(" 3. Request signing certificate from Fulcio");
89
+ dim(" 4. Sign attestation with ephemeral keypair");
90
+ dim(" 5. Log signature to Rekor transparency log");
91
+ dim(` 6. Write bundle to ${outputPath}`);
92
+ if (!options.local) {
93
+ dim(" 7. Submit attestation to Enact registry");
94
+ }
95
+ newline();
96
+ warning("Note: Actual signing requires OIDC authentication.");
97
+ dim("You will be prompted to authenticate in your browser.");
98
+ }
99
+ /**
100
+ * Prompt user to add themselves to trusted auditors list (local config)
101
+ */
102
+ async function promptAddToTrustList(auditorEmail, isInteractive) {
103
+ if (!isInteractive) {
104
+ return false;
105
+ }
106
+ try {
107
+ // Convert email to provider:identity format (e.g., github:alice)
108
+ const providerIdentity = emailToProviderIdentity(auditorEmail);
109
+ // Check if already in local trust list
110
+ const trustedAuditors = getTrustedAuditors();
111
+ if (trustedAuditors.includes(providerIdentity)) {
112
+ // Already trusted
113
+ return false;
114
+ }
115
+ newline();
116
+ info(colors.command("Trust Configuration"));
117
+ newline();
118
+ dim(`You signed this tool with: ${colors.bold(auditorEmail)}`);
119
+ dim(`Identity format: ${colors.bold(providerIdentity)}`);
120
+ dim("This identity is not currently in your local trusted auditors list.");
121
+ newline();
122
+ const shouldAdd = await confirm("Would you like to add this identity to ~/.enact/config.yaml?", true);
123
+ if (!shouldAdd) {
124
+ return false;
125
+ }
126
+ // Add to local config file
127
+ const added = addTrustedAuditor(providerIdentity);
128
+ if (added) {
129
+ newline();
130
+ success(`Added ${providerIdentity} to ~/.enact/config.yaml`);
131
+ dim("This tool (and others you sign) will now be automatically trusted");
132
+ return true;
133
+ }
134
+ return false;
135
+ }
136
+ catch (err) {
137
+ // Silently fail if trust update fails - don't block signing
138
+ if (err instanceof Error) {
139
+ dim(`Note: Could not update trust list: ${err.message}`);
140
+ }
141
+ return false;
142
+ }
143
+ }
144
+ /**
145
+ * Display signing result
146
+ */
147
+ function displayResult(bundle, outputPath, manifest, options, registryResult) {
148
+ if (options.json) {
149
+ json({
150
+ success: true,
151
+ tool: manifest.name,
152
+ version: manifest.version ?? "unversioned",
153
+ bundlePath: outputPath,
154
+ bundle,
155
+ registry: registryResult
156
+ ? {
157
+ submitted: true,
158
+ auditor: registryResult.auditor,
159
+ rekorLogIndex: registryResult.rekorLogIndex,
160
+ }
161
+ : { submitted: false },
162
+ });
163
+ return;
164
+ }
165
+ newline();
166
+ success(`Successfully signed ${manifest.name}@${manifest.version ?? "unversioned"}`);
167
+ newline();
168
+ keyValue("Bundle saved to", outputPath);
169
+ // Show some bundle details
170
+ if (bundle.verificationMaterial?.tlogEntries?.[0]) {
171
+ const entry = bundle.verificationMaterial.tlogEntries[0];
172
+ if (entry.logIndex !== undefined) {
173
+ keyValue("Rekor log index", String(entry.logIndex));
174
+ }
175
+ }
176
+ // Show registry submission result
177
+ if (registryResult) {
178
+ newline();
179
+ success("Attestation submitted to registry");
180
+ keyValue("Auditor identity", registryResult.auditor);
181
+ }
182
+ else if (!options.local) {
183
+ newline();
184
+ warning("Attestation was not submitted to registry (use --local to suppress this warning)");
185
+ }
186
+ newline();
187
+ if (options.local) {
188
+ info("Note: Attestation saved locally only (--local flag)");
189
+ dim(" • Run 'enact sign .' without --local to submit to registry");
190
+ }
191
+ }
192
+ /**
193
+ * Sign a remote tool from the registry
194
+ */
195
+ async function signRemoteTool(toolRef, options, _ctx) {
196
+ const config = loadConfig();
197
+ const registryUrl = process.env.ENACT_REGISTRY_URL ??
198
+ config.registry?.url ??
199
+ "https://siikwkfgsmouioodghho.supabase.co/functions/v1";
200
+ const client = createApiClient({ baseUrl: registryUrl });
201
+ // Fetch tool info from registry
202
+ info(`Fetching ${toolRef.name}@${toolRef.version} from registry...`);
203
+ let toolInfo;
204
+ try {
205
+ toolInfo = await getToolVersion(client, toolRef.name, toolRef.version);
206
+ }
207
+ catch (err) {
208
+ error(`Tool not found: ${toolRef.name}@${toolRef.version}`);
209
+ if (err instanceof Error) {
210
+ dim(` ${err.message}`);
211
+ }
212
+ process.exit(1);
213
+ }
214
+ newline();
215
+ keyValue("Tool", toolInfo.name);
216
+ keyValue("Version", toolInfo.version);
217
+ keyValue("Bundle hash", toolInfo.bundle.hash);
218
+ keyValue("Published by", toolInfo.publishedBy.username);
219
+ // Show existing attestations
220
+ if (toolInfo.attestations.length > 0) {
221
+ newline();
222
+ info("Existing attestations:");
223
+ for (const att of toolInfo.attestations) {
224
+ dim(` • ${att.auditor} (${att.auditorProvider})`);
225
+ }
226
+ }
227
+ // Dry run mode
228
+ if (options.dryRun) {
229
+ newline();
230
+ info(colors.bold("Dry Run - Would perform:"));
231
+ dim(" 1. Authenticate via OIDC (browser-based OAuth flow)");
232
+ dim(" 2. Create in-toto attestation for bundle hash");
233
+ dim(" 3. Request signing certificate from Fulcio");
234
+ dim(" 4. Sign attestation with ephemeral keypair");
235
+ dim(" 5. Log signature to Rekor transparency log");
236
+ dim(" 6. Submit attestation to registry");
237
+ newline();
238
+ warning("Note: Actual signing requires OIDC authentication.");
239
+ return;
240
+ }
241
+ // Check auth before doing anything - remote signing always submits to registry
242
+ const authToken = await getSecret(AUTH_NAMESPACE, ACCESS_TOKEN_KEY);
243
+ if (!authToken) {
244
+ error("Not authenticated with registry");
245
+ dim("Run 'enact auth login' to authenticate before signing remote tools");
246
+ process.exit(1);
247
+ }
248
+ // Confirm signing
249
+ if (_ctx.isInteractive) {
250
+ newline();
251
+ const shouldSign = await confirm(`Sign ${toolInfo.name}@${toolInfo.version} with your identity?`, true);
252
+ if (!shouldSign) {
253
+ info("Signing cancelled");
254
+ return;
255
+ }
256
+ }
257
+ // Sign the attestation (using bundle hash as the artifact)
258
+ const attestationOptions = {
259
+ name: toolInfo.name,
260
+ version: toolInfo.version,
261
+ publisher: options.identity ?? "unknown",
262
+ description: toolInfo.description,
263
+ buildTimestamp: new Date(),
264
+ bundleHash: toolInfo.bundle.hash,
265
+ };
266
+ // Create the in-toto statement - use bundle hash as the "content" for remote tools
267
+ const statement = createEnactToolStatement(toolInfo.bundle.hash, attestationOptions);
268
+ // Sign it
269
+ const result = await withSpinner("Signing attestation...", async () => {
270
+ try {
271
+ return await signAttestation(statement, {
272
+ timeout: 120000, // 2 minutes for OIDC flow
273
+ });
274
+ }
275
+ catch (err) {
276
+ if (err instanceof Error && err.message.includes("cancelled")) {
277
+ throw new Error("Signing cancelled by user");
278
+ }
279
+ throw err;
280
+ }
281
+ });
282
+ // Submit to registry
283
+ client.setAuthToken(authToken);
284
+ try {
285
+ const attestationResult = await withSpinner("Submitting attestation to registry...", async () => {
286
+ return await submitAttestationToRegistry(client, {
287
+ name: toolInfo.name,
288
+ version: toolInfo.version,
289
+ sigstoreBundle: result.bundle,
290
+ });
291
+ });
292
+ newline();
293
+ success(`Signed ${toolInfo.name}@${toolInfo.version}`);
294
+ keyValue("Auditor identity", attestationResult.auditor);
295
+ if (attestationResult.rekorLogIndex) {
296
+ keyValue("Rekor log index", String(attestationResult.rekorLogIndex));
297
+ }
298
+ // Prompt to add to trust list
299
+ if (_ctx.isInteractive && !options.json) {
300
+ await promptAddToTrustList(attestationResult.auditor, _ctx.isInteractive);
301
+ }
302
+ if (options.json) {
303
+ json({
304
+ success: true,
305
+ tool: toolInfo.name,
306
+ version: toolInfo.version,
307
+ auditor: attestationResult.auditor,
308
+ rekorLogIndex: attestationResult.rekorLogIndex,
309
+ });
310
+ }
311
+ }
312
+ catch (err) {
313
+ error("Failed to submit attestation to registry");
314
+ if (err instanceof Error) {
315
+ dim(` ${err.message}`);
316
+ }
317
+ process.exit(1);
318
+ }
319
+ }
320
+ /**
321
+ * Sign command handler (local files)
322
+ */
323
+ async function signLocalTool(pathArg, options, _ctx) {
324
+ // Find manifest
325
+ const { manifestPath, manifestDir } = findManifestPath(pathArg);
326
+ const manifestContent = readFileSync(manifestPath, "utf-8");
327
+ // Load and validate manifest
328
+ const loaded = tryLoadManifest(manifestPath);
329
+ if (!loaded) {
330
+ error(`Failed to load manifest from: ${manifestPath}`);
331
+ process.exit(1);
332
+ }
333
+ const manifest = loaded.manifest;
334
+ // Validate manifest
335
+ const validation = validateManifest(manifest);
336
+ if (!validation.valid && validation.errors) {
337
+ error("Manifest validation failed:");
338
+ for (const err of validation.errors) {
339
+ dim(` ${symbols.cross} ${err.path}: ${err.message}`);
340
+ }
341
+ process.exit(1);
342
+ }
343
+ // Determine output path
344
+ const outputPath = options.output
345
+ ? resolve(options.output)
346
+ : join(manifestDir, DEFAULT_BUNDLE_FILENAME);
347
+ // Dry run mode
348
+ if (options.dryRun) {
349
+ displayDryRun(manifestPath, manifest, outputPath, options);
350
+ return;
351
+ }
352
+ // Prepare attestation options
353
+ const attestationOptions = {
354
+ name: manifest.name,
355
+ version: manifest.version ?? "1.0.0",
356
+ publisher: options.identity ?? "unknown",
357
+ description: manifest.description,
358
+ buildTimestamp: new Date(),
359
+ };
360
+ // Check for git repository for source info
361
+ try {
362
+ const { execSync } = await import("node:child_process");
363
+ const gitCommit = execSync("git rev-parse HEAD", {
364
+ cwd: manifestDir,
365
+ encoding: "utf-8",
366
+ }).trim();
367
+ attestationOptions.sourceCommit = gitCommit;
368
+ const remoteUrl = execSync("git remote get-url origin", {
369
+ cwd: manifestDir,
370
+ encoding: "utf-8",
371
+ }).trim();
372
+ attestationOptions.repository = remoteUrl;
373
+ }
374
+ catch {
375
+ // Not a git repository or git not available
376
+ if (options.verbose) {
377
+ dim("Note: Not a git repository, skipping source commit info");
378
+ }
379
+ }
380
+ // Create in-toto attestation statement
381
+ const statement = createEnactToolStatement(manifestContent, attestationOptions);
382
+ if (options.verbose) {
383
+ info("Created attestation statement:");
384
+ dim(JSON.stringify(statement, null, 2));
385
+ newline();
386
+ }
387
+ // Sign the attestation
388
+ info("Starting OIDC signing flow...");
389
+ dim("A browser window will open for authentication.");
390
+ newline();
391
+ const result = await withSpinner("Signing attestation...", async () => {
392
+ try {
393
+ // Cast statement to Record<string, unknown> for signAttestation
394
+ return await signAttestation(statement, {
395
+ timeout: 120000, // 2 minutes for OIDC flow
396
+ });
397
+ }
398
+ catch (err) {
399
+ // Re-throw with more context
400
+ if (err instanceof Error) {
401
+ if (err.message.includes("OIDC") || err.message.includes("token")) {
402
+ throw new Error(`OIDC authentication failed: ${err.message}\nMake sure you complete the browser authentication flow.`);
403
+ }
404
+ if (err.message.includes("Fulcio") || err.message.includes("certificate")) {
405
+ throw new Error(`Certificate issuance failed: ${err.message}\nThis may be a temporary issue with the Sigstore infrastructure.`);
406
+ }
407
+ if (err.message.includes("Rekor") || err.message.includes("transparency")) {
408
+ throw new Error(`Transparency log failed: ${err.message}\nThis may be a temporary issue with the Sigstore infrastructure.`);
409
+ }
410
+ }
411
+ throw err;
412
+ }
413
+ });
414
+ // Save the bundle locally
415
+ writeFileSync(outputPath, JSON.stringify(result.bundle, null, 2));
416
+ // Submit attestation to registry (unless --local)
417
+ let registryResult;
418
+ if (!options.local) {
419
+ // Check for auth token from keyring
420
+ const authToken = await getSecret(AUTH_NAMESPACE, ACCESS_TOKEN_KEY);
421
+ if (!authToken) {
422
+ warning("Not authenticated with registry - attestation saved locally only");
423
+ dim("Run 'enact auth login' to authenticate, then sign again to submit");
424
+ }
425
+ else {
426
+ const client = createApiClient();
427
+ client.setAuthToken(authToken);
428
+ try {
429
+ const attestationResult = await withSpinner("Submitting attestation to registry...", async () => {
430
+ // Submit the Sigstore bundle directly (v2 API)
431
+ return await submitAttestationToRegistry(client, {
432
+ name: manifest.name,
433
+ version: manifest.version ?? "1.0.0",
434
+ sigstoreBundle: result.bundle,
435
+ });
436
+ });
437
+ registryResult = {
438
+ auditor: attestationResult.auditor,
439
+ rekorLogIndex: attestationResult.rekorLogIndex,
440
+ };
441
+ // Prompt to add auditor to trust list (if interactive and not in JSON mode)
442
+ if (!options.json && _ctx.isInteractive) {
443
+ await promptAddToTrustList(attestationResult.auditor, _ctx.isInteractive);
444
+ }
445
+ }
446
+ catch (err) {
447
+ warning("Failed to submit attestation to registry");
448
+ if (err instanceof Error) {
449
+ dim(` ${err.message}`);
450
+ }
451
+ dim("The attestation was saved locally and logged to Rekor.");
452
+ dim("You can try submitting again later.");
453
+ }
454
+ }
455
+ }
456
+ // Display result
457
+ displayResult(result.bundle, outputPath, manifest, options, registryResult);
458
+ }
459
+ /**
460
+ * Main sign command handler - routes to local or remote
461
+ */
462
+ async function signHandler(pathArg, options, ctx) {
463
+ // Check if this is a remote tool reference (author/tool@version)
464
+ const remoteRef = parseRemoteToolRef(pathArg);
465
+ if (remoteRef) {
466
+ // Sign remote tool from registry
467
+ await signRemoteTool(remoteRef, options, ctx);
468
+ }
469
+ else {
470
+ // Sign local tool
471
+ await signLocalTool(pathArg, options, ctx);
472
+ }
473
+ }
474
+ /**
475
+ * Configure the sign command
476
+ */
477
+ export function configureSignCommand(program) {
478
+ program
479
+ .command("sign")
480
+ .description("Cryptographically sign a tool and submit attestation to registry")
481
+ .argument("<path>", "Path to tool directory, manifest file, or remote tool (author/tool@version)")
482
+ .option("-i, --identity <email>", "Sign with specific identity (uses OAuth)")
483
+ .option("-o, --output <path>", "Output path for signature bundle (local only)")
484
+ .option("--dry-run", "Show what would be signed without signing")
485
+ .option("--local", "Save signature locally only, do not submit to registry")
486
+ .option("-v, --verbose", "Show detailed output")
487
+ .option("--json", "Output result as JSON")
488
+ .action(async (pathArg, options) => {
489
+ const ctx = {
490
+ cwd: process.cwd(),
491
+ options,
492
+ isCI: Boolean(process.env.CI),
493
+ isInteractive: process.stdout.isTTY ?? false,
494
+ };
495
+ try {
496
+ await signHandler(pathArg, options, ctx);
497
+ }
498
+ catch (err) {
499
+ error(formatError(err));
500
+ if (options.verbose && err instanceof Error && err.stack) {
501
+ dim(err.stack);
502
+ }
503
+ process.exit(1);
504
+ }
505
+ });
506
+ }
507
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sign/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * enact trust command
3
+ *
4
+ * Manage trusted identities for attestation verification.
5
+ * Uses a unified model: all trust is based on cryptographic attestations.
6
+ * Publishers who want their tools trusted should self-sign them.
7
+ */
8
+ import type { Command } from "commander";
9
+ /**
10
+ * Configure the trust command
11
+ */
12
+ export declare function configureTrustCommand(program: Command): void;
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/trust/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoBH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+VzC;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwE5D"}