specforge-cli 0.1.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.
- package/dist/commands/access.d.ts +3 -0
- package/dist/commands/access.d.ts.map +1 -0
- package/dist/commands/access.js +98 -0
- package/dist/commands/access.js.map +1 -0
- package/dist/commands/amendments.d.ts +3 -0
- package/dist/commands/amendments.d.ts.map +1 -0
- package/dist/commands/amendments.js +61 -0
- package/dist/commands/amendments.js.map +1 -0
- package/dist/commands/audit.d.ts +3 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +73 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/auth.d.ts +3 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +275 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +66 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/diff.d.ts +3 -0
- package/dist/commands/diff.d.ts.map +1 -0
- package/dist/commands/diff.js +85 -0
- package/dist/commands/diff.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +162 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/features.d.ts +3 -0
- package/dist/commands/features.d.ts.map +1 -0
- package/dist/commands/features.js +134 -0
- package/dist/commands/features.js.map +1 -0
- package/dist/commands/media.d.ts +3 -0
- package/dist/commands/media.d.ts.map +1 -0
- package/dist/commands/media.js +142 -0
- package/dist/commands/media.js.map +1 -0
- package/dist/commands/notifications.d.ts +3 -0
- package/dist/commands/notifications.d.ts.map +1 -0
- package/dist/commands/notifications.js +75 -0
- package/dist/commands/notifications.js.map +1 -0
- package/dist/commands/org.d.ts +3 -0
- package/dist/commands/org.d.ts.map +1 -0
- package/dist/commands/org.js +145 -0
- package/dist/commands/org.js.map +1 -0
- package/dist/commands/project.d.ts +3 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +205 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/review.d.ts +3 -0
- package/dist/commands/review.d.ts.map +1 -0
- package/dist/commands/review.js +102 -0
- package/dist/commands/review.js.map +1 -0
- package/dist/commands/sign.d.ts +3 -0
- package/dist/commands/sign.d.ts.map +1 -0
- package/dist/commands/sign.js +152 -0
- package/dist/commands/sign.js.map +1 -0
- package/dist/commands/spec.d.ts +3 -0
- package/dist/commands/spec.d.ts.map +1 -0
- package/dist/commands/spec.js +157 -0
- package/dist/commands/spec.js.map +1 -0
- package/dist/commands/user.d.ts +3 -0
- package/dist/commands/user.d.ts.map +1 -0
- package/dist/commands/user.js +117 -0
- package/dist/commands/user.js.map +1 -0
- package/dist/commands/verify.d.ts +3 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +59 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/version.d.ts +3 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +167 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/commands/webhook.d.ts +3 -0
- package/dist/commands/webhook.d.ts.map +1 -0
- package/dist/commands/webhook.js +201 -0
- package/dist/commands/webhook.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +82 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/auth.d.ts +24 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +92 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/client.d.ts +6 -0
- package/dist/lib/client.d.ts.map +1 -0
- package/dist/lib/client.js +8 -0
- package/dist/lib/client.js.map +1 -0
- package/dist/lib/config.d.ts +15 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +41 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/errors.d.ts +21 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +41 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/exit-codes.d.ts +30 -0
- package/dist/lib/exit-codes.d.ts.map +1 -0
- package/dist/lib/exit-codes.js +41 -0
- package/dist/lib/exit-codes.js.map +1 -0
- package/dist/lib/output.d.ts +7 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +60 -0
- package/dist/lib/output.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { createClient } from "specforge-sdk";
|
|
3
|
+
import { loadConfig, requireAuth } from "../lib/config";
|
|
4
|
+
import { handleApiResult, handleError } from "../lib/errors";
|
|
5
|
+
import { outputResult } from "../lib/output";
|
|
6
|
+
function getClient() {
|
|
7
|
+
const config = loadConfig();
|
|
8
|
+
const token = requireAuth(config);
|
|
9
|
+
return createClient({ baseUrl: config.baseUrl, auth: { accessToken: token } });
|
|
10
|
+
}
|
|
11
|
+
export default defineCommand({
|
|
12
|
+
meta: { name: "verify", description: "Verification and certificate commands" },
|
|
13
|
+
subCommands: {
|
|
14
|
+
verify: defineCommand({
|
|
15
|
+
meta: { name: "verify", description: "Verify a specification's integrity" },
|
|
16
|
+
args: {
|
|
17
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
18
|
+
quiet: {
|
|
19
|
+
type: "boolean",
|
|
20
|
+
description: "Suppress output",
|
|
21
|
+
alias: "q",
|
|
22
|
+
default: false,
|
|
23
|
+
},
|
|
24
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
25
|
+
},
|
|
26
|
+
async run({ args }) {
|
|
27
|
+
try {
|
|
28
|
+
const client = getClient();
|
|
29
|
+
const result = await client.verify(args["spec-id"]);
|
|
30
|
+
if (!args.quiet) {
|
|
31
|
+
outputResult(handleApiResult(result), args.json);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
handleError(error);
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
}),
|
|
39
|
+
certificate: defineCommand({
|
|
40
|
+
meta: { name: "certificate", description: "Get verification certificate" },
|
|
41
|
+
args: {
|
|
42
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
43
|
+
output: { type: "string", description: "Output file path", alias: "o" },
|
|
44
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
45
|
+
},
|
|
46
|
+
async run({ args }) {
|
|
47
|
+
try {
|
|
48
|
+
const client = getClient();
|
|
49
|
+
const result = await client.certificate(args["spec-id"]);
|
|
50
|
+
outputResult(handleApiResult(result), args.json);
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
handleError(error);
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
}),
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=verify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/commands/verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":";AAaA,wBAgKG"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { writeFileSync } from "node:fs";
|
|
2
|
+
import { defineCommand } from "citty";
|
|
3
|
+
import { createClient } from "specforge-sdk";
|
|
4
|
+
import { loadConfig, requireAuth } from "../lib/config";
|
|
5
|
+
import { handleApiResult, handleError } from "../lib/errors";
|
|
6
|
+
import { outputResult } from "../lib/output";
|
|
7
|
+
function getClient() {
|
|
8
|
+
const config = loadConfig();
|
|
9
|
+
const token = requireAuth(config);
|
|
10
|
+
return createClient({ baseUrl: config.baseUrl, auth: { accessToken: token } });
|
|
11
|
+
}
|
|
12
|
+
export default defineCommand({
|
|
13
|
+
meta: { name: "version", description: "Version management" },
|
|
14
|
+
subCommands: {
|
|
15
|
+
list: defineCommand({
|
|
16
|
+
meta: { name: "list", description: "List versions of a specification" },
|
|
17
|
+
args: {
|
|
18
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
19
|
+
format: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Output format (json, table, yaml)",
|
|
22
|
+
default: "table",
|
|
23
|
+
},
|
|
24
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
25
|
+
},
|
|
26
|
+
async run({ args }) {
|
|
27
|
+
try {
|
|
28
|
+
const client = getClient();
|
|
29
|
+
const result = await client.versions.list(args["spec-id"]);
|
|
30
|
+
const isJson = args.json || args.format === "json";
|
|
31
|
+
outputResult(handleApiResult(result), isJson, [
|
|
32
|
+
"id",
|
|
33
|
+
"versionNumber",
|
|
34
|
+
"changeSummary",
|
|
35
|
+
"createdAt",
|
|
36
|
+
]);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
handleError(error);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
show: defineCommand({
|
|
44
|
+
meta: { name: "show", description: "Show version details" },
|
|
45
|
+
args: {
|
|
46
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
47
|
+
"version-id": { type: "string", description: "Version ID", required: true },
|
|
48
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
49
|
+
},
|
|
50
|
+
async run({ args }) {
|
|
51
|
+
try {
|
|
52
|
+
const client = getClient();
|
|
53
|
+
const result = await client.versions.get(args["spec-id"], args["version-id"]);
|
|
54
|
+
outputResult(handleApiResult(result), args.json);
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
handleError(error);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
|
+
delete: defineCommand({
|
|
62
|
+
meta: { name: "delete", description: "Delete a version" },
|
|
63
|
+
args: {
|
|
64
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
65
|
+
"version-id": { type: "string", description: "Version ID", required: true },
|
|
66
|
+
yes: {
|
|
67
|
+
type: "boolean",
|
|
68
|
+
description: "Skip confirmation prompt",
|
|
69
|
+
alias: "y",
|
|
70
|
+
default: false,
|
|
71
|
+
},
|
|
72
|
+
quiet: {
|
|
73
|
+
type: "boolean",
|
|
74
|
+
description: "Suppress output",
|
|
75
|
+
alias: "q",
|
|
76
|
+
default: false,
|
|
77
|
+
},
|
|
78
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
79
|
+
},
|
|
80
|
+
async run({ args }) {
|
|
81
|
+
try {
|
|
82
|
+
const client = getClient();
|
|
83
|
+
const versionId = args["version-id"];
|
|
84
|
+
const result = await client.versions.delete(args["spec-id"], versionId);
|
|
85
|
+
handleApiResult(result);
|
|
86
|
+
if (!args.quiet) {
|
|
87
|
+
outputResult({ message: `Version ${versionId} deleted.` }, args.json);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
handleError(error);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
}),
|
|
95
|
+
restore: defineCommand({
|
|
96
|
+
meta: { name: "restore", description: "Restore a previous version" },
|
|
97
|
+
args: {
|
|
98
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
99
|
+
"version-id": { type: "string", description: "Version ID", required: true },
|
|
100
|
+
quiet: {
|
|
101
|
+
type: "boolean",
|
|
102
|
+
description: "Suppress output",
|
|
103
|
+
alias: "q",
|
|
104
|
+
default: false,
|
|
105
|
+
},
|
|
106
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
107
|
+
},
|
|
108
|
+
async run({ args }) {
|
|
109
|
+
try {
|
|
110
|
+
const client = getClient();
|
|
111
|
+
const result = await client.versions.restore(args["spec-id"], args["version-id"]);
|
|
112
|
+
if (!args.quiet) {
|
|
113
|
+
outputResult(handleApiResult(result), args.json);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
handleError(error);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
}),
|
|
121
|
+
download: defineCommand({
|
|
122
|
+
meta: { name: "download", description: "Download version as Markdown" },
|
|
123
|
+
args: {
|
|
124
|
+
"spec-id": { type: "string", description: "Specification ID", required: true },
|
|
125
|
+
"version-id": { type: "string", description: "Version ID", required: true },
|
|
126
|
+
output: { type: "string", description: "Output file path", alias: "o" },
|
|
127
|
+
quiet: {
|
|
128
|
+
type: "boolean",
|
|
129
|
+
description: "Suppress output",
|
|
130
|
+
alias: "q",
|
|
131
|
+
default: false,
|
|
132
|
+
},
|
|
133
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
134
|
+
},
|
|
135
|
+
async run({ args }) {
|
|
136
|
+
try {
|
|
137
|
+
const client = getClient();
|
|
138
|
+
const result = await client.versions.downloadMarkdown(args["spec-id"], args["version-id"]);
|
|
139
|
+
const data = handleApiResult(result);
|
|
140
|
+
const outputPath = args.output;
|
|
141
|
+
const content = typeof data === "string"
|
|
142
|
+
? data
|
|
143
|
+
: (data.content ?? JSON.stringify(data));
|
|
144
|
+
if (outputPath) {
|
|
145
|
+
writeFileSync(outputPath, content, "utf-8");
|
|
146
|
+
if (!args.quiet) {
|
|
147
|
+
outputResult({ message: `Downloaded to ${outputPath}` }, args.json);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
else if (args.quiet) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
else if (args.json) {
|
|
154
|
+
outputResult(data, true);
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
console.log(content);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
handleError(error);
|
|
162
|
+
}
|
|
163
|
+
},
|
|
164
|
+
}),
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":";AAYA,wBAgMG"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { defineCommand } from "citty";
|
|
2
|
+
import { createClient } from "specforge-sdk";
|
|
3
|
+
import { loadConfig, requireAuth } from "../lib/config";
|
|
4
|
+
import { handleApiResult, handleError } from "../lib/errors";
|
|
5
|
+
import { outputResult } from "../lib/output";
|
|
6
|
+
function getClient() {
|
|
7
|
+
const config = loadConfig();
|
|
8
|
+
const token = requireAuth(config);
|
|
9
|
+
return createClient({ baseUrl: config.baseUrl, auth: { accessToken: token } });
|
|
10
|
+
}
|
|
11
|
+
export default defineCommand({
|
|
12
|
+
meta: { name: "webhook", description: "Webhook management" },
|
|
13
|
+
subCommands: {
|
|
14
|
+
create: defineCommand({
|
|
15
|
+
meta: { name: "create", description: "Create a webhook" },
|
|
16
|
+
args: {
|
|
17
|
+
url: { type: "string", description: "Endpoint URL", required: true },
|
|
18
|
+
events: {
|
|
19
|
+
type: "string",
|
|
20
|
+
description: "Event types (comma-separated)",
|
|
21
|
+
required: true,
|
|
22
|
+
},
|
|
23
|
+
quiet: {
|
|
24
|
+
type: "boolean",
|
|
25
|
+
description: "Suppress output",
|
|
26
|
+
alias: "q",
|
|
27
|
+
default: false,
|
|
28
|
+
},
|
|
29
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
30
|
+
},
|
|
31
|
+
async run({ args }) {
|
|
32
|
+
try {
|
|
33
|
+
const client = getClient();
|
|
34
|
+
const result = await client.webhooks.create({
|
|
35
|
+
endpointUrl: args.url,
|
|
36
|
+
eventTypes: args.events.split(",").map((e) => e.trim()),
|
|
37
|
+
});
|
|
38
|
+
if (!args.quiet) {
|
|
39
|
+
outputResult(handleApiResult(result), args.json);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
handleError(error);
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
list: defineCommand({
|
|
48
|
+
meta: { name: "list", description: "List webhooks" },
|
|
49
|
+
args: {
|
|
50
|
+
format: {
|
|
51
|
+
type: "string",
|
|
52
|
+
description: "Output format (json, table, yaml)",
|
|
53
|
+
default: "table",
|
|
54
|
+
},
|
|
55
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
56
|
+
},
|
|
57
|
+
async run({ args }) {
|
|
58
|
+
try {
|
|
59
|
+
const client = getClient();
|
|
60
|
+
const result = await client.webhooks.list();
|
|
61
|
+
const isJson = args.json || args.format === "json";
|
|
62
|
+
outputResult(handleApiResult(result), isJson, [
|
|
63
|
+
"id",
|
|
64
|
+
"endpointUrl",
|
|
65
|
+
"enabled",
|
|
66
|
+
"createdAt",
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
handleError(error);
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
}),
|
|
74
|
+
update: defineCommand({
|
|
75
|
+
meta: { name: "update", description: "Update a webhook" },
|
|
76
|
+
args: {
|
|
77
|
+
id: { type: "string", description: "Webhook ID", required: true },
|
|
78
|
+
url: { type: "string", description: "New endpoint URL" },
|
|
79
|
+
events: { type: "string", description: "New event types (comma-separated)" },
|
|
80
|
+
enabled: { type: "string", description: "Enable/disable (true/false)" },
|
|
81
|
+
quiet: {
|
|
82
|
+
type: "boolean",
|
|
83
|
+
description: "Suppress output",
|
|
84
|
+
alias: "q",
|
|
85
|
+
default: false,
|
|
86
|
+
},
|
|
87
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
88
|
+
},
|
|
89
|
+
async run({ args }) {
|
|
90
|
+
try {
|
|
91
|
+
const client = getClient();
|
|
92
|
+
const data = {};
|
|
93
|
+
const url = args.url;
|
|
94
|
+
const events = args.events;
|
|
95
|
+
const enabled = args.enabled;
|
|
96
|
+
if (url)
|
|
97
|
+
data.endpointUrl = url;
|
|
98
|
+
if (events)
|
|
99
|
+
data.eventTypes = events.split(",").map((e) => e.trim());
|
|
100
|
+
if (enabled)
|
|
101
|
+
data.enabled = enabled === "true";
|
|
102
|
+
const result = await client.webhooks.update(args.id, data);
|
|
103
|
+
if (!args.quiet) {
|
|
104
|
+
outputResult(handleApiResult(result), args.json);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
handleError(error);
|
|
109
|
+
}
|
|
110
|
+
},
|
|
111
|
+
}),
|
|
112
|
+
delete: defineCommand({
|
|
113
|
+
meta: { name: "delete", description: "Delete a webhook" },
|
|
114
|
+
args: {
|
|
115
|
+
id: { type: "string", description: "Webhook ID", required: true },
|
|
116
|
+
yes: {
|
|
117
|
+
type: "boolean",
|
|
118
|
+
description: "Skip confirmation prompt",
|
|
119
|
+
alias: "y",
|
|
120
|
+
default: false,
|
|
121
|
+
},
|
|
122
|
+
quiet: {
|
|
123
|
+
type: "boolean",
|
|
124
|
+
description: "Suppress output",
|
|
125
|
+
alias: "q",
|
|
126
|
+
default: false,
|
|
127
|
+
},
|
|
128
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
129
|
+
},
|
|
130
|
+
async run({ args }) {
|
|
131
|
+
try {
|
|
132
|
+
const client = getClient();
|
|
133
|
+
const id = args.id;
|
|
134
|
+
const result = await client.webhooks.delete(id);
|
|
135
|
+
handleApiResult(result);
|
|
136
|
+
if (!args.quiet) {
|
|
137
|
+
outputResult({ message: `Webhook ${id} deleted.` }, args.json);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
handleError(error);
|
|
142
|
+
}
|
|
143
|
+
},
|
|
144
|
+
}),
|
|
145
|
+
deliveries: defineCommand({
|
|
146
|
+
meta: { name: "deliveries", description: "List webhook deliveries" },
|
|
147
|
+
args: {
|
|
148
|
+
id: { type: "string", description: "Webhook ID", required: true },
|
|
149
|
+
format: {
|
|
150
|
+
type: "string",
|
|
151
|
+
description: "Output format (json, table, yaml)",
|
|
152
|
+
default: "table",
|
|
153
|
+
},
|
|
154
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
155
|
+
},
|
|
156
|
+
async run({ args }) {
|
|
157
|
+
try {
|
|
158
|
+
const client = getClient();
|
|
159
|
+
const result = await client.webhooks.listDeliveries(args.id);
|
|
160
|
+
const isJson = args.json || args.format === "json";
|
|
161
|
+
outputResult(handleApiResult(result), isJson, [
|
|
162
|
+
"id",
|
|
163
|
+
"status",
|
|
164
|
+
"httpStatus",
|
|
165
|
+
"createdAt",
|
|
166
|
+
]);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
handleError(error);
|
|
170
|
+
}
|
|
171
|
+
},
|
|
172
|
+
}),
|
|
173
|
+
retry: defineCommand({
|
|
174
|
+
meta: { name: "retry", description: "Retry a webhook delivery" },
|
|
175
|
+
args: {
|
|
176
|
+
id: { type: "string", description: "Webhook ID", required: true },
|
|
177
|
+
"delivery-id": { type: "string", description: "Delivery ID", required: true },
|
|
178
|
+
quiet: {
|
|
179
|
+
type: "boolean",
|
|
180
|
+
description: "Suppress output",
|
|
181
|
+
alias: "q",
|
|
182
|
+
default: false,
|
|
183
|
+
},
|
|
184
|
+
json: { type: "boolean", description: "Output as JSON", default: false },
|
|
185
|
+
},
|
|
186
|
+
async run({ args }) {
|
|
187
|
+
try {
|
|
188
|
+
const client = getClient();
|
|
189
|
+
const result = await client.webhooks.retryDelivery(args.id, args["delivery-id"]);
|
|
190
|
+
if (!args.quiet) {
|
|
191
|
+
outputResult(handleApiResult(result), args.json);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
handleError(error);
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
}),
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/commands/webhook.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
export declare const main: import("citty").CommandDef<{
|
|
3
|
+
json: {
|
|
4
|
+
type: "boolean";
|
|
5
|
+
description: string;
|
|
6
|
+
default: false;
|
|
7
|
+
};
|
|
8
|
+
verbose: {
|
|
9
|
+
type: "boolean";
|
|
10
|
+
description: string;
|
|
11
|
+
default: false;
|
|
12
|
+
};
|
|
13
|
+
quiet: {
|
|
14
|
+
type: "boolean";
|
|
15
|
+
description: string;
|
|
16
|
+
alias: string;
|
|
17
|
+
default: false;
|
|
18
|
+
};
|
|
19
|
+
format: {
|
|
20
|
+
type: "string";
|
|
21
|
+
description: string;
|
|
22
|
+
};
|
|
23
|
+
}>;
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAuBA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;EAyDf,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { defineCommand, runMain } from "citty";
|
|
3
|
+
import access from "./commands/access";
|
|
4
|
+
import amendments from "./commands/amendments";
|
|
5
|
+
import audit from "./commands/audit";
|
|
6
|
+
import auth from "./commands/auth";
|
|
7
|
+
import config from "./commands/config";
|
|
8
|
+
import diff from "./commands/diff";
|
|
9
|
+
import exportCmd from "./commands/export";
|
|
10
|
+
import features from "./commands/features";
|
|
11
|
+
import media from "./commands/media";
|
|
12
|
+
import notifications from "./commands/notifications";
|
|
13
|
+
import org from "./commands/org";
|
|
14
|
+
import project from "./commands/project";
|
|
15
|
+
import review from "./commands/review";
|
|
16
|
+
import sign from "./commands/sign";
|
|
17
|
+
import spec from "./commands/spec";
|
|
18
|
+
import user from "./commands/user";
|
|
19
|
+
import verify from "./commands/verify";
|
|
20
|
+
import version from "./commands/version";
|
|
21
|
+
import webhook from "./commands/webhook";
|
|
22
|
+
export const main = defineCommand({
|
|
23
|
+
meta: {
|
|
24
|
+
name: "specforge",
|
|
25
|
+
version: "0.1.0",
|
|
26
|
+
description: "SpecForge — Specification versioning and signing CLI",
|
|
27
|
+
},
|
|
28
|
+
args: {
|
|
29
|
+
json: {
|
|
30
|
+
type: "boolean",
|
|
31
|
+
description: "Output as JSON",
|
|
32
|
+
default: false,
|
|
33
|
+
},
|
|
34
|
+
verbose: {
|
|
35
|
+
type: "boolean",
|
|
36
|
+
description: "Enable verbose output",
|
|
37
|
+
default: false,
|
|
38
|
+
},
|
|
39
|
+
quiet: {
|
|
40
|
+
type: "boolean",
|
|
41
|
+
description: "Suppress output",
|
|
42
|
+
alias: "q",
|
|
43
|
+
default: false,
|
|
44
|
+
},
|
|
45
|
+
format: {
|
|
46
|
+
type: "string",
|
|
47
|
+
description: "Output format (json, table, yaml)",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
subCommands: {
|
|
51
|
+
access,
|
|
52
|
+
amendments,
|
|
53
|
+
audit,
|
|
54
|
+
auth,
|
|
55
|
+
config,
|
|
56
|
+
diff,
|
|
57
|
+
export: exportCmd,
|
|
58
|
+
features,
|
|
59
|
+
media,
|
|
60
|
+
notifications,
|
|
61
|
+
org,
|
|
62
|
+
project,
|
|
63
|
+
review,
|
|
64
|
+
sign,
|
|
65
|
+
spec,
|
|
66
|
+
user,
|
|
67
|
+
verify,
|
|
68
|
+
version,
|
|
69
|
+
webhook,
|
|
70
|
+
},
|
|
71
|
+
run({ args }) {
|
|
72
|
+
if (args.json) {
|
|
73
|
+
console.log(JSON.stringify({ name: "specforge", version: "0.1.0" }));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log("specforge v0.1.0 — SpecForge: Specification versioning and signing CLI");
|
|
77
|
+
console.log("Run specforge --help for available commands.");
|
|
78
|
+
}
|
|
79
|
+
},
|
|
80
|
+
});
|
|
81
|
+
runMain(main);
|
|
82
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,QAAQ,MAAM,qBAAqB,CAAC;AAC3C,OAAO,KAAK,MAAM,kBAAkB,CAAC;AACrC,OAAO,aAAa,MAAM,0BAA0B,CAAC;AACrD,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AACzC,OAAO,OAAO,MAAM,oBAAoB,CAAC;AAEzC,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC;IACjC,IAAI,EAAE;QACL,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,OAAO;QAChB,WAAW,EAAE,sDAAsD;KACnE;IACD,IAAI,EAAE;QACL,IAAI,EAAE;YACL,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,gBAAgB;YAC7B,OAAO,EAAE,KAAK;SACd;QACD,OAAO,EAAE;YACR,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,uBAAuB;YACpC,OAAO,EAAE,KAAK;SACd;QACD,KAAK,EAAE;YACN,IAAI,EAAE,SAAS;YACf,WAAW,EAAE,iBAAiB;YAC9B,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,KAAK;SACd;QACD,MAAM,EAAE;YACP,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mCAAmC;SAChD;KACD;IACD,WAAW,EAAE;QACZ,MAAM;QACN,UAAU;QACV,KAAK;QACL,IAAI;QACJ,MAAM;QACN,IAAI;QACJ,MAAM,EAAE,SAAS;QACjB,QAAQ;QACR,KAAK;QACL,aAAa;QACb,GAAG;QACH,OAAO;QACP,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,MAAM;QACN,OAAO;QACP,OAAO;KACP;IACD,GAAG,CAAC,EAAE,IAAI,EAAE;QACX,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,wEAAwE,CAAC,CAAC;YACtF,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC7D,CAAC;IACF,CAAC;CACD,CAAC,CAAC;AAEH,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export type AuthSource = "env" | "api-key" | "oauth";
|
|
2
|
+
export type AuthCredential = {
|
|
3
|
+
readonly token: string;
|
|
4
|
+
readonly source: AuthSource;
|
|
5
|
+
readonly expiresAt: string | null;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Resolve auth credentials by priority:
|
|
9
|
+
* 1. SPECFORGE_API_KEY env var
|
|
10
|
+
* 2. --api-key CLI flag
|
|
11
|
+
* 3. Config file credential
|
|
12
|
+
* 4. Legacy config accessToken (auto-migrate)
|
|
13
|
+
* 5. None → error + exit
|
|
14
|
+
*/
|
|
15
|
+
export declare function resolveAuth(args?: {
|
|
16
|
+
apiKey?: string;
|
|
17
|
+
}): AuthCredential;
|
|
18
|
+
export declare function saveCredential(credential: AuthCredential): void;
|
|
19
|
+
export declare function clearCredential(): void;
|
|
20
|
+
export declare function getAuthStatus(): {
|
|
21
|
+
authenticated: boolean;
|
|
22
|
+
credential?: AuthCredential;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAuCtE;AAED,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,IAAI,CAQ/D;AAED,wBAAgB,eAAe,IAAI,IAAI,CAMtC;AAED,wBAAgB,aAAa,IAAI;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,cAAc,CAAC;CAC5B,CAiCA"}
|