@4ort/cli 0.7.0 → 0.8.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/README.md +212 -7
- package/dist/api-client.d.ts +9 -1
- package/dist/api-client.js +9 -2
- package/dist/api-client.js.map +1 -1
- package/dist/commands/docs.d.ts +17 -0
- package/dist/commands/docs.js +90 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/domain.d.ts +20 -0
- package/dist/commands/domain.js +179 -0
- package/dist/commands/domain.js.map +1 -0
- package/dist/commands/domains.d.ts +6 -0
- package/dist/commands/domains.js +91 -0
- package/dist/commands/domains.js.map +1 -0
- package/dist/commands/login-link.d.ts +1 -0
- package/dist/commands/login-link.js +18 -0
- package/dist/commands/login-link.js.map +1 -0
- package/dist/commands/mov.d.ts +1 -0
- package/dist/commands/mov.js +40 -4
- package/dist/commands/mov.js.map +1 -1
- package/dist/commands/register.d.ts +1 -0
- package/dist/commands/register.js +1 -1
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/repo.d.ts +9 -0
- package/dist/commands/repo.js +73 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/sheets.d.ts +17 -0
- package/dist/commands/sheets.js +90 -0
- package/dist/commands/sheets.js.map +1 -0
- package/dist/gitea-client.d.ts +41 -0
- package/dist/gitea-client.js +79 -0
- package/dist/gitea-client.js.map +1 -0
- package/dist/gitea-client.test.d.ts +1 -0
- package/dist/gitea-client.test.js +40 -0
- package/dist/gitea-client.test.js.map +1 -0
- package/dist/index.js +146 -1
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.js +204 -2
- package/dist/mcp-server.js.map +1 -1
- package/dist/namesilo-client.d.ts +31 -0
- package/dist/namesilo-client.js +85 -0
- package/dist/namesilo-client.js.map +1 -0
- package/dist/namesilo-client.test.d.ts +1 -0
- package/dist/namesilo-client.test.js +58 -0
- package/dist/namesilo-client.test.js.map +1 -0
- package/dist/office-client.d.ts +76 -0
- package/dist/office-client.js +110 -0
- package/dist/office-client.js.map +1 -0
- package/dist/office-client.test.d.ts +1 -0
- package/dist/office-client.test.js +53 -0
- package/dist/office-client.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `4ort domains` — map custom domains onto a 4ort.net-hosted site.
|
|
3
|
+
* Wraps /api/sites/:subdomain/domains (add → DNS instructions → verify →
|
|
4
|
+
* live with auto-HTTPS). The subdomain defaults to your agent name, which
|
|
5
|
+
* is the common single-site case.
|
|
6
|
+
*/
|
|
7
|
+
import { apiRequest } from "../api-client.js";
|
|
8
|
+
import { requireConfig } from "../config.js";
|
|
9
|
+
function siteFor(config, subdomain) {
|
|
10
|
+
const site = subdomain || config.agentName;
|
|
11
|
+
if (!site) {
|
|
12
|
+
console.error("No subdomain given and no agent name in config. Pass one: 4ort domains list <subdomain>");
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
return site;
|
|
16
|
+
}
|
|
17
|
+
function printDns(dns) {
|
|
18
|
+
console.log(` Set these DNS records:`);
|
|
19
|
+
console.log(` ${dns.a_record.type.padEnd(4)} ${dns.a_record.host} -> ${dns.a_record.value}`);
|
|
20
|
+
console.log(` ${dns.txt_record.type.padEnd(4)} ${dns.txt_record.host} -> ${dns.txt_record.value}`);
|
|
21
|
+
console.log(` ${dns.note}`);
|
|
22
|
+
}
|
|
23
|
+
export async function domainsList(subdomain, options) {
|
|
24
|
+
const config = requireConfig();
|
|
25
|
+
const site = siteFor(config, subdomain);
|
|
26
|
+
try {
|
|
27
|
+
const data = await apiRequest(config, "GET", `/api/sites/${encodeURIComponent(site)}/domains`);
|
|
28
|
+
if (options.json) {
|
|
29
|
+
console.log(JSON.stringify(data, null, 2));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (data.domains.length === 0) {
|
|
33
|
+
console.log(`No custom domains on ${site}.4ort.net. Add one: 4ort domains add example.com`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (const d of data.domains) {
|
|
37
|
+
console.log(`${d.verified ? "✓" : "…"} ${d.domain} (${d.verified ? `verified ${d.verified_at}` : "pending verification"})`);
|
|
38
|
+
if (!d.verified && d.dns)
|
|
39
|
+
printDns(d.dns);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error(`Failed: ${err.message}`);
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export async function domainsAdd(domain, subdomain) {
|
|
48
|
+
const config = requireConfig();
|
|
49
|
+
const site = siteFor(config, subdomain);
|
|
50
|
+
try {
|
|
51
|
+
const data = await apiRequest(config, "POST", `/api/sites/${encodeURIComponent(site)}/domains`, { domain });
|
|
52
|
+
if (data.verified) {
|
|
53
|
+
console.log(`${data.domain} is already verified and mapped to ${site}.4ort.net.`);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
console.log(`${data.domain} added to ${site}.4ort.net — pending verification.`);
|
|
57
|
+
printDns(data.dns);
|
|
58
|
+
console.log(`\nThen run: 4ort domains verify ${data.domain}${subdomain ? ` ${site}` : ""}`);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
console.error(`Failed: ${err.message}`);
|
|
62
|
+
process.exit(1);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
export async function domainsVerify(domain, subdomain) {
|
|
66
|
+
const config = requireConfig();
|
|
67
|
+
const site = siteFor(config, subdomain);
|
|
68
|
+
try {
|
|
69
|
+
const data = await apiRequest(config, "POST", `/api/sites/${encodeURIComponent(site)}/domains/${encodeURIComponent(domain)}/verify`);
|
|
70
|
+
console.log(data.message || `${data.domain} verified.`);
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
// The server's 422 includes the expected TXT record — apiRequest surfaces
|
|
74
|
+
// only error text, which already explains propagation. Keep it simple.
|
|
75
|
+
console.error(`Not verified yet: ${err.message}`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function domainsRemove(domain, subdomain) {
|
|
80
|
+
const config = requireConfig();
|
|
81
|
+
const site = siteFor(config, subdomain);
|
|
82
|
+
try {
|
|
83
|
+
const data = await apiRequest(config, "DELETE", `/api/sites/${encodeURIComponent(site)}/domains/${encodeURIComponent(domain)}`);
|
|
84
|
+
console.log(data.message);
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.error(`Failed: ${err.message}`);
|
|
88
|
+
process.exit(1);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/commands/domains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function loginLinkCommand(): Promise<void>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { requireConfig } from "../config.js";
|
|
2
|
+
import { loginLink } from "../api-client.js";
|
|
3
|
+
export async function loginLinkCommand() {
|
|
4
|
+
const config = requireConfig();
|
|
5
|
+
try {
|
|
6
|
+
const result = await loginLink(config);
|
|
7
|
+
const mins = Math.round(result.expiresInSeconds / 60);
|
|
8
|
+
console.log(`\nWeb login link for ${config.agentName}:\n`);
|
|
9
|
+
console.log(` ${result.url}\n`);
|
|
10
|
+
console.log(`Hand this to your human — clicking it logs them into 4ort.ai.`);
|
|
11
|
+
console.log(`Single-use, expires in ${mins} min. Re-run anytime for a fresh one.`);
|
|
12
|
+
}
|
|
13
|
+
catch (err) {
|
|
14
|
+
console.error(`Failed to mint login link: ${err.message}`);
|
|
15
|
+
process.exit(1);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=login-link.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-link.js","sourceRoot":"","sources":["../../src/commands/login-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,wBAAwB,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,uCAAuC,CAAC,CAAC;IACrF,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/dist/commands/mov.d.ts
CHANGED
package/dist/commands/mov.js
CHANGED
|
@@ -13,10 +13,26 @@ import { saveMovConfig, optionalMovConfig } from "../config.js";
|
|
|
13
13
|
import { getOAuthClient, getToken, uploadVideo, listMyChannels, createChannel, listMyVideos, deleteVideo, resolveChannelId, privacyToEnum, buildWatchUrl, } from "../peertube-client.js";
|
|
14
14
|
const DEFAULT_SERVER = "https://4ort.mov";
|
|
15
15
|
export async function movLogin(options) {
|
|
16
|
-
|
|
16
|
+
let server = options.server || DEFAULT_SERVER;
|
|
17
17
|
// Non-interactive (agents/CI): flags or env. Falls back to prompts for humans.
|
|
18
18
|
let username = options.username || process.env.FORT_MOV_USERNAME;
|
|
19
19
|
let password = options.password || process.env.FORT_MOV_PASSWORD;
|
|
20
|
+
// --provisioned: pull the account minted by `4ort provision run video`.
|
|
21
|
+
if (options.provisioned && (!username || !password)) {
|
|
22
|
+
const { requireConfig } = await import("../config.js");
|
|
23
|
+
const { apiRequest } = await import("../api-client.js");
|
|
24
|
+
const data = await apiRequest(requireConfig(), "GET", "/api/provision/credentials/video").catch((e) => {
|
|
25
|
+
console.error(`No provisioned video account: ${e.message}`);
|
|
26
|
+
console.error("Run: 4ort provision run video");
|
|
27
|
+
process.exit(1);
|
|
28
|
+
});
|
|
29
|
+
const byType = Object.fromEntries(data.credentials.map((c) => [c.type, c]));
|
|
30
|
+
username = username || byType.peertube_username?.value;
|
|
31
|
+
password = password || byType.peertube_password?.value;
|
|
32
|
+
if (!options.server && byType.peertube_username?.metadata?.server) {
|
|
33
|
+
server = byType.peertube_username.metadata.server;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
20
36
|
let rl;
|
|
21
37
|
try {
|
|
22
38
|
if (!username || !password) {
|
|
@@ -146,10 +162,30 @@ async function loadComposition(p) {
|
|
|
146
162
|
return { type: "tar", data };
|
|
147
163
|
}
|
|
148
164
|
export async function movRender(file, options) {
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
let server = options.server || process.env.FORT_FACTORY_URL || "https://factory.4ort.mov";
|
|
166
|
+
let key = options.key || process.env.FORT_FACTORY_KEY;
|
|
167
|
+
if (!key) {
|
|
168
|
+
// Fall back to the factory token minted by `4ort provision run video`.
|
|
169
|
+
try {
|
|
170
|
+
const { loadConfig } = await import("../config.js");
|
|
171
|
+
const { apiRequest } = await import("../api-client.js");
|
|
172
|
+
const config = loadConfig();
|
|
173
|
+
if (config?.apiKey) {
|
|
174
|
+
const data = await apiRequest(config, "GET", "/api/provision/credentials/video");
|
|
175
|
+
const cred = data.credentials.find((c) => c.type === "factory_key");
|
|
176
|
+
if (cred) {
|
|
177
|
+
key = cred.value;
|
|
178
|
+
if (!options.server && !process.env.FORT_FACTORY_URL && cred.metadata?.server)
|
|
179
|
+
server = cred.metadata.server;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// fall through to the error below
|
|
185
|
+
}
|
|
186
|
+
}
|
|
151
187
|
if (!key) {
|
|
152
|
-
console.error("
|
|
188
|
+
console.error("No factory token. Set --key / FORT_FACTORY_KEY, or run: 4ort provision run video");
|
|
153
189
|
process.exit(1);
|
|
154
190
|
}
|
|
155
191
|
const composition = await loadComposition(file);
|
package/dist/commands/mov.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mov.js","sourceRoot":"","sources":["../../src/commands/mov.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,QAAQ,MAAM,wBAAwB,CAAC;AAC9C,OAAO,EAAE,KAAK,IAAI,KAAK,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAChE,OAAO,EACL,cAAc,EACd,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,EACb,YAAY,EACZ,WAAW,EACX,gBAAgB,EAChB,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"mov.js","sourceRoot":"","sources":["../../src/commands/mov.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,7 +15,7 @@ export async function register(name, options) {
|
|
|
15
15
|
}
|
|
16
16
|
console.log(`Registering agent "${name}" on ${server}...`);
|
|
17
17
|
try {
|
|
18
|
-
const result = await registerAgent(server, name, metadata);
|
|
18
|
+
const result = await registerAgent(server, name, metadata, options.backupEmail);
|
|
19
19
|
saveConfig({
|
|
20
20
|
apiKey: result.apiKey,
|
|
21
21
|
recoveryCode: result.recoveryCode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,cAAc,GAAG,kBAAkB,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAY,EACZ,OAAqE;IAErE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,cAAc,CAAC;IAEhD,IAAI,QAAyC,CAAC;IAC9C,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,QAAQ,MAAM,KAAK,CAAC,CAAC;IAE3D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;QAEhF,UAAU,CAAC;YACT,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,MAAM;YACN,SAAS,EAAE,MAAM,CAAC,IAAI;SACvB,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IAC/D,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare function repoList(options: {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function repoCreate(name: string, options: {
|
|
5
|
+
description?: string;
|
|
6
|
+
private?: boolean;
|
|
7
|
+
}): Promise<void>;
|
|
8
|
+
export declare function repoDelete(name: string): Promise<void>;
|
|
9
|
+
export declare function repoUrl(name: string): Promise<void>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `4ort repo` — code repos on 4ort.dev (the Launchpad, self-hosted Gitea).
|
|
3
|
+
* Identity comes from `4ort provision run gitea` credentials, or
|
|
4
|
+
* FORT_GITEA_USER + FORT_GITEA_TOKEN env vars.
|
|
5
|
+
*/
|
|
6
|
+
import { loadConfig } from "../config.js";
|
|
7
|
+
import { GiteaClient, resolveGiteaIdentity } from "../gitea-client.js";
|
|
8
|
+
const NO_IDENTITY_HELP = [
|
|
9
|
+
"No 4ort.dev identity found. Either:",
|
|
10
|
+
" 4ort provision run gitea # auto-create your Launchpad account",
|
|
11
|
+
" FORT_GITEA_USER=... FORT_GITEA_TOKEN=... # or bring your own token",
|
|
12
|
+
].join("\n");
|
|
13
|
+
async function requireClient() {
|
|
14
|
+
const identity = await resolveGiteaIdentity(loadConfig());
|
|
15
|
+
if (!identity) {
|
|
16
|
+
console.error(NO_IDENTITY_HELP);
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
return new GiteaClient(identity);
|
|
20
|
+
}
|
|
21
|
+
export async function repoList(options) {
|
|
22
|
+
const client = await requireClient();
|
|
23
|
+
try {
|
|
24
|
+
const repos = await client.listRepos();
|
|
25
|
+
if (options.json) {
|
|
26
|
+
console.log(JSON.stringify(repos, null, 2));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (repos.length === 0) {
|
|
30
|
+
console.log("No repos yet. Create one: 4ort repo create my-project");
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
for (const r of repos) {
|
|
34
|
+
console.log(`${r.private ? "🔒" : " "} ${r.full_name} ${r.description || ""}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (err) {
|
|
38
|
+
console.error(`Failed: ${err.message}`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function repoCreate(name, options) {
|
|
43
|
+
const client = await requireClient();
|
|
44
|
+
try {
|
|
45
|
+
const repo = await client.createRepo(name, options);
|
|
46
|
+
console.log(`Created ${repo.full_name} on ${client.server}`);
|
|
47
|
+
console.log(`\nPush your code:`);
|
|
48
|
+
console.log(` git init && git add -A && git commit -m "initial"`);
|
|
49
|
+
console.log(` git remote add 4ort ${client.pushUrl(repo.name)}`);
|
|
50
|
+
console.log(` git push -u 4ort main`);
|
|
51
|
+
console.log(`\n(The remote URL embeds your token — it lives in .git/config, keep the repo dir private.)`);
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
console.error(`Failed: ${err.message}`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export async function repoDelete(name) {
|
|
59
|
+
const client = await requireClient();
|
|
60
|
+
try {
|
|
61
|
+
await client.deleteRepo(name);
|
|
62
|
+
console.log(`Deleted ${client.username}/${name}`);
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
console.error(`Failed: ${err.message}`);
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
export async function repoUrl(name) {
|
|
70
|
+
const client = await requireClient();
|
|
71
|
+
console.log(client.pushUrl(name));
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../src/commands/repo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare function sheetsList(options: {
|
|
2
|
+
json?: boolean;
|
|
3
|
+
}): Promise<void>;
|
|
4
|
+
export declare function sheetsRead(id: string, options: {
|
|
5
|
+
json?: boolean;
|
|
6
|
+
}): Promise<void>;
|
|
7
|
+
export declare function sheetsCreate(options: {
|
|
8
|
+
title?: string;
|
|
9
|
+
file?: string;
|
|
10
|
+
content?: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
export declare function sheetsUpdate(id: string, options: {
|
|
13
|
+
title?: string;
|
|
14
|
+
file?: string;
|
|
15
|
+
content?: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
export declare function sheetsDelete(id: string): Promise<void>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `4ort sheets` — manage spreadsheets on sheets.4ort.net.
|
|
3
|
+
* Content is CSV, from --file, --content, or piped stdin (in that order).
|
|
4
|
+
* `read` prints raw CSV so output pipes cleanly into other tools.
|
|
5
|
+
*/
|
|
6
|
+
import { requireConfig } from "../config.js";
|
|
7
|
+
import { sheetsClient, resolveContentInput } from "../office-client.js";
|
|
8
|
+
export async function sheetsList(options) {
|
|
9
|
+
const client = sheetsClient(requireConfig());
|
|
10
|
+
try {
|
|
11
|
+
const { sheets } = await client.list();
|
|
12
|
+
if (options.json) {
|
|
13
|
+
console.log(JSON.stringify(sheets, null, 2));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
if (sheets.length === 0) {
|
|
17
|
+
console.log("No sheets yet. Create one: 4ort sheets create --title 'Data' --file data.csv");
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
for (const s of sheets) {
|
|
21
|
+
console.log(`[${s.id}] ${s.title} (updated ${s.updatedAt})`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.error(`Failed: ${err.message}`);
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function sheetsRead(id, options) {
|
|
30
|
+
const client = sheetsClient(requireConfig());
|
|
31
|
+
try {
|
|
32
|
+
const sheet = await client.read(id);
|
|
33
|
+
if (options.json) {
|
|
34
|
+
console.log(JSON.stringify(sheet, null, 2));
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
console.log(sheet.csv);
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.error(`Failed: ${err.message}`);
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export async function sheetsCreate(options) {
|
|
45
|
+
const client = sheetsClient(requireConfig());
|
|
46
|
+
const csv = resolveContentInput(options);
|
|
47
|
+
if (csv === null) {
|
|
48
|
+
console.error("No content. Use --file <path>, --content <text>, or pipe CSV on stdin.");
|
|
49
|
+
process.exit(1);
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
const sheet = await client.create(csv, options.title);
|
|
53
|
+
console.log(`Created [${sheet.id}] ${sheet.title}`);
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
console.error(`Failed: ${err.message}`);
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export async function sheetsUpdate(id, options) {
|
|
61
|
+
const client = sheetsClient(requireConfig());
|
|
62
|
+
const csv = resolveContentInput(options);
|
|
63
|
+
if (csv === null && !options.title) {
|
|
64
|
+
console.error("Nothing to update. Pass --title and/or content (--file, --content, or stdin).");
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const sheet = await client.update(id, {
|
|
69
|
+
...(csv !== null ? { csv } : {}),
|
|
70
|
+
...(options.title ? { title: options.title } : {}),
|
|
71
|
+
});
|
|
72
|
+
console.log(`Updated [${sheet.id}] ${sheet.title} (${sheet.updatedAt})`);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
console.error(`Failed: ${err.message}`);
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function sheetsDelete(id) {
|
|
80
|
+
const client = sheetsClient(requireConfig());
|
|
81
|
+
try {
|
|
82
|
+
await client.remove(id);
|
|
83
|
+
console.log(`Deleted ${id}`);
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
console.error(`Failed: ${err.message}`);
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=sheets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sheets.js","sourceRoot":"","sources":["../../src/commands/sheets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client for 4ort.dev (the Launchpad — self-hosted Gitea).
|
|
3
|
+
* Auth: the agent's own access token (`Authorization: token <sha1>`),
|
|
4
|
+
* minted by `4ort provision run gitea` (or FORT_GITEA_TOKEN env).
|
|
5
|
+
*/
|
|
6
|
+
import { Config } from "./config.js";
|
|
7
|
+
export declare const GITEA_DEFAULT_URL = "https://4ort.dev";
|
|
8
|
+
export interface GiteaRepo {
|
|
9
|
+
name: string;
|
|
10
|
+
full_name: string;
|
|
11
|
+
private: boolean;
|
|
12
|
+
description: string;
|
|
13
|
+
clone_url: string;
|
|
14
|
+
updated_at: string;
|
|
15
|
+
}
|
|
16
|
+
export interface GiteaIdentity {
|
|
17
|
+
server: string;
|
|
18
|
+
username: string;
|
|
19
|
+
token: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class GiteaClient {
|
|
22
|
+
private identity;
|
|
23
|
+
private fetchFn;
|
|
24
|
+
constructor(identity: GiteaIdentity, fetchFn?: typeof fetch);
|
|
25
|
+
get username(): string;
|
|
26
|
+
get server(): string;
|
|
27
|
+
private req;
|
|
28
|
+
listRepos(): Promise<GiteaRepo[]>;
|
|
29
|
+
createRepo(name: string, opts?: {
|
|
30
|
+
description?: string;
|
|
31
|
+
private?: boolean;
|
|
32
|
+
}): Promise<GiteaRepo>;
|
|
33
|
+
deleteRepo(name: string): Promise<null>;
|
|
34
|
+
/** HTTPS push URL with embedded credentials — for `git remote add` / `git push`. */
|
|
35
|
+
pushUrl(repoName: string): string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Resolve the agent's Gitea identity: FORT_GITEA_USER/FORT_GITEA_TOKEN env
|
|
39
|
+
* first, then the credentials stored by `4ort provision run gitea`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveGiteaIdentity(config: Config | null): Promise<GiteaIdentity | null>;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { apiRequest } from "./api-client.js";
|
|
2
|
+
export const GITEA_DEFAULT_URL = "https://4ort.dev";
|
|
3
|
+
export class GiteaClient {
|
|
4
|
+
identity;
|
|
5
|
+
fetchFn;
|
|
6
|
+
constructor(identity, fetchFn = fetch) {
|
|
7
|
+
this.identity = identity;
|
|
8
|
+
this.fetchFn = fetchFn;
|
|
9
|
+
}
|
|
10
|
+
get username() {
|
|
11
|
+
return this.identity.username;
|
|
12
|
+
}
|
|
13
|
+
get server() {
|
|
14
|
+
return this.identity.server;
|
|
15
|
+
}
|
|
16
|
+
async req(path, init) {
|
|
17
|
+
const res = await this.fetchFn(`${this.identity.server}${path}`, {
|
|
18
|
+
...init,
|
|
19
|
+
headers: {
|
|
20
|
+
"Content-Type": "application/json",
|
|
21
|
+
Authorization: `token ${this.identity.token}`,
|
|
22
|
+
...(init?.headers || {}),
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
if (!res.ok) {
|
|
26
|
+
const body = await res.text().catch(() => "");
|
|
27
|
+
throw new Error(`${res.status} ${res.statusText}${body ? `: ${body.slice(0, 200)}` : ""}`);
|
|
28
|
+
}
|
|
29
|
+
return res.status === 204 ? null : res.json();
|
|
30
|
+
}
|
|
31
|
+
listRepos() {
|
|
32
|
+
return this.req("/api/v1/user/repos?limit=50");
|
|
33
|
+
}
|
|
34
|
+
createRepo(name, opts = {}) {
|
|
35
|
+
return this.req("/api/v1/user/repos", {
|
|
36
|
+
method: "POST",
|
|
37
|
+
body: JSON.stringify({
|
|
38
|
+
name,
|
|
39
|
+
description: opts.description ?? "",
|
|
40
|
+
private: opts.private ?? false,
|
|
41
|
+
auto_init: false,
|
|
42
|
+
}),
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
deleteRepo(name) {
|
|
46
|
+
return this.req(`/api/v1/repos/${encodeURIComponent(this.identity.username)}/${encodeURIComponent(name)}`, { method: "DELETE" });
|
|
47
|
+
}
|
|
48
|
+
/** HTTPS push URL with embedded credentials — for `git remote add` / `git push`. */
|
|
49
|
+
pushUrl(repoName) {
|
|
50
|
+
const host = this.identity.server.replace(/^https?:\/\//, "");
|
|
51
|
+
return `https://${this.identity.username}:${this.identity.token}@${host}/${this.identity.username}/${repoName}.git`;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Resolve the agent's Gitea identity: FORT_GITEA_USER/FORT_GITEA_TOKEN env
|
|
56
|
+
* first, then the credentials stored by `4ort provision run gitea`.
|
|
57
|
+
*/
|
|
58
|
+
export async function resolveGiteaIdentity(config) {
|
|
59
|
+
const envUser = process.env.FORT_GITEA_USER?.trim();
|
|
60
|
+
const envToken = process.env.FORT_GITEA_TOKEN?.trim();
|
|
61
|
+
if (envUser && envToken) {
|
|
62
|
+
return { server: process.env.FORT_GITEA_URL || GITEA_DEFAULT_URL, username: envUser, token: envToken };
|
|
63
|
+
}
|
|
64
|
+
if (!config?.apiKey)
|
|
65
|
+
return null;
|
|
66
|
+
try {
|
|
67
|
+
const data = await apiRequest(config, "GET", "/api/provision/credentials/gitea");
|
|
68
|
+
const byType = Object.fromEntries(data.credentials.map((c) => [c.type, c]));
|
|
69
|
+
const username = byType.gitea_username?.value;
|
|
70
|
+
const token = byType.gitea_token?.value;
|
|
71
|
+
if (!username || !token)
|
|
72
|
+
return null;
|
|
73
|
+
return { server: byType.gitea_token?.metadata?.server || GITEA_DEFAULT_URL, username, token };
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=gitea-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitea-client.js","sourceRoot":"","sources":["../src/gitea-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|