@oxprotocol/cli 0.1.0

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 (104) hide show
  1. package/LICENSE +189 -0
  2. package/README.md +73 -0
  3. package/dist/cli.d.ts +15 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +109 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/create.d.ts +6 -0
  8. package/dist/commands/create.d.ts.map +1 -0
  9. package/dist/commands/create.js +212 -0
  10. package/dist/commands/create.js.map +1 -0
  11. package/dist/commands/dev.d.ts +2 -0
  12. package/dist/commands/dev.d.ts.map +1 -0
  13. package/dist/commands/dev.js +191 -0
  14. package/dist/commands/dev.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +16 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +197 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/install-url.d.ts +20 -0
  20. package/dist/commands/install-url.d.ts.map +1 -0
  21. package/dist/commands/install-url.js +236 -0
  22. package/dist/commands/install-url.js.map +1 -0
  23. package/dist/commands/install.d.ts +13 -0
  24. package/dist/commands/install.d.ts.map +1 -0
  25. package/dist/commands/install.js +411 -0
  26. package/dist/commands/install.js.map +1 -0
  27. package/dist/commands/keygen.d.ts +13 -0
  28. package/dist/commands/keygen.d.ts.map +1 -0
  29. package/dist/commands/keygen.js +40 -0
  30. package/dist/commands/keygen.js.map +1 -0
  31. package/dist/commands/login.d.ts +21 -0
  32. package/dist/commands/login.d.ts.map +1 -0
  33. package/dist/commands/login.js +224 -0
  34. package/dist/commands/login.js.map +1 -0
  35. package/dist/commands/logout.d.ts +17 -0
  36. package/dist/commands/logout.d.ts.map +1 -0
  37. package/dist/commands/logout.js +70 -0
  38. package/dist/commands/logout.js.map +1 -0
  39. package/dist/commands/pack.d.ts +12 -0
  40. package/dist/commands/pack.d.ts.map +1 -0
  41. package/dist/commands/pack.js +94 -0
  42. package/dist/commands/pack.js.map +1 -0
  43. package/dist/commands/protocol-register.d.ts +29 -0
  44. package/dist/commands/protocol-register.d.ts.map +1 -0
  45. package/dist/commands/protocol-register.js +231 -0
  46. package/dist/commands/protocol-register.js.map +1 -0
  47. package/dist/commands/publish.d.ts +17 -0
  48. package/dist/commands/publish.d.ts.map +1 -0
  49. package/dist/commands/publish.js +188 -0
  50. package/dist/commands/publish.js.map +1 -0
  51. package/dist/commands/token.d.ts +17 -0
  52. package/dist/commands/token.d.ts.map +1 -0
  53. package/dist/commands/token.js +110 -0
  54. package/dist/commands/token.js.map +1 -0
  55. package/dist/commands/whoami.d.ts +13 -0
  56. package/dist/commands/whoami.d.ts.map +1 -0
  57. package/dist/commands/whoami.js +77 -0
  58. package/dist/commands/whoami.js.map +1 -0
  59. package/dist/index.d.ts +26 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +22 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/lib/broadcast.d.ts +41 -0
  64. package/dist/lib/broadcast.d.ts.map +1 -0
  65. package/dist/lib/broadcast.js +45 -0
  66. package/dist/lib/broadcast.js.map +1 -0
  67. package/dist/lib/host-adapter.d.ts +72 -0
  68. package/dist/lib/host-adapter.d.ts.map +1 -0
  69. package/dist/lib/host-adapter.js +193 -0
  70. package/dist/lib/host-adapter.js.map +1 -0
  71. package/dist/lib/host-detect.d.ts +60 -0
  72. package/dist/lib/host-detect.d.ts.map +1 -0
  73. package/dist/lib/host-detect.js +479 -0
  74. package/dist/lib/host-detect.js.map +1 -0
  75. package/dist/lib/oxp-url.d.ts +34 -0
  76. package/dist/lib/oxp-url.d.ts.map +1 -0
  77. package/dist/lib/oxp-url.js +74 -0
  78. package/dist/lib/oxp-url.js.map +1 -0
  79. package/dist/lib/vsx-install.d.ts +41 -0
  80. package/dist/lib/vsx-install.d.ts.map +1 -0
  81. package/dist/lib/vsx-install.js +74 -0
  82. package/dist/lib/vsx-install.js.map +1 -0
  83. package/dist/util.d.ts +10 -0
  84. package/dist/util.d.ts.map +1 -0
  85. package/dist/util.js +64 -0
  86. package/dist/util.js.map +1 -0
  87. package/package.json +48 -0
  88. package/templates/hello-code/README.md +39 -0
  89. package/templates/hello-code/oxp.json +14 -0
  90. package/templates/hello-code/package.json +18 -0
  91. package/templates/hello-code/src/extension.ts +17 -0
  92. package/templates/hello-code/tsconfig.json +20 -0
  93. package/templates/hello-html/README.md +18 -0
  94. package/templates/hello-html/oxp.json +14 -0
  95. package/templates/hello-html/ui/index.html +43 -0
  96. package/templates/hello-rust/Cargo.toml +19 -0
  97. package/templates/hello-rust/README.md +50 -0
  98. package/templates/hello-rust/oxp.json +22 -0
  99. package/templates/hello-rust/src/lib.rs +111 -0
  100. package/templates/hello-rust/wit/deps/oxp-host/oxp-host.wit +136 -0
  101. package/templates/hello-rust/wit/extension.wit +71 -0
  102. package/templates/hello-tree/README.md +15 -0
  103. package/templates/hello-tree/oxp.json +14 -0
  104. package/templates/hello-tree/ui/tree.json +27 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { type Ed25519KeyPair } from "@oxprotocol/bundle";
2
+ /**
3
+ * Get (or lazily create) the local Ed25519 publisher key pair.
4
+ *
5
+ * Stored under `${OXP_HOME}/keys/default.{key,pub}.pem` — one shared key
6
+ * per workstation for the MVP. Future versions will support per-publisher
7
+ * keys + Sigstore.
8
+ */
9
+ export declare function loadOrCreateKey(): Promise<Ed25519KeyPair & {
10
+ keyId: string;
11
+ }>;
12
+ export declare function keygen(_args: string[]): Promise<number>;
13
+ //# sourceMappingURL=keygen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.d.ts","sourceRoot":"","sources":["../../src/commands/keygen.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,cAAc,EACpB,MAAM,oBAAoB,CAAC;AAG5B;;;;;;GAMG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAC9C,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CACnC,CAuBA;AAED,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAI7D"}
@@ -0,0 +1,40 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { generateEd25519KeyPair, keyIdOf, } from "@oxprotocol/bundle";
4
+ import { oxpHome, info } from "../util.js";
5
+ /**
6
+ * Get (or lazily create) the local Ed25519 publisher key pair.
7
+ *
8
+ * Stored under `${OXP_HOME}/keys/default.{key,pub}.pem` — one shared key
9
+ * per workstation for the MVP. Future versions will support per-publisher
10
+ * keys + Sigstore.
11
+ */
12
+ export async function loadOrCreateKey() {
13
+ const dir = join(oxpHome(), "keys");
14
+ const privPath = join(dir, "default.key.pem");
15
+ const pubPath = join(dir, "default.pub.pem");
16
+ try {
17
+ const [privateKeyPem, publicKeyPem] = await Promise.all([
18
+ fs.readFile(privPath, "utf8"),
19
+ fs.readFile(pubPath, "utf8"),
20
+ ]);
21
+ return { privateKeyPem, publicKeyPem, keyId: keyIdOf(publicKeyPem) };
22
+ }
23
+ catch {
24
+ // create
25
+ }
26
+ await fs.mkdir(dir, { recursive: true, mode: 0o700 });
27
+ const kp = generateEd25519KeyPair();
28
+ await fs.writeFile(privPath, kp.privateKeyPem, { mode: 0o600 });
29
+ await fs.writeFile(pubPath, kp.publicKeyPem, { mode: 0o644 });
30
+ info(`generated Ed25519 key: ${keyIdOf(kp.publicKeyPem)}`);
31
+ info(` private: ${privPath}`);
32
+ info(` public: ${pubPath}`);
33
+ return { ...kp, keyId: keyIdOf(kp.publicKeyPem) };
34
+ }
35
+ export async function keygen(_args) {
36
+ const k = await loadOrCreateKey();
37
+ info(k.keyId);
38
+ return 0;
39
+ }
40
+ //# sourceMappingURL=keygen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keygen.js","sourceRoot":"","sources":["../../src/commands/keygen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EACL,sBAAsB,EACtB,OAAO,GAER,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IAGnC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACtD,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;YAC7B,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;SAC7B,CAAC,CAAC;QACH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,SAAS;IACX,CAAC;IAED,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACtD,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAAC;IACpC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,0BAA0B,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,CAAC,cAAc,QAAQ,EAAE,CAAC,CAAC;IAC/B,IAAI,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;IAC9B,OAAO,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;AACpD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,KAAe;IAC1C,MAAM,CAAC,GAAG,MAAM,eAAe,EAAE,CAAC;IAClC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACd,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * `oxp login` — sign in to the registry.
3
+ *
4
+ * Two flows, picked by flag:
5
+ *
6
+ * oxp login → terminal flow (Expo / npm style)
7
+ * prompts for email + password right here, POSTs
8
+ * to /api/v1/auth/login, gets back an API token.
9
+ *
10
+ * oxp login --browser → device-flow (OAuth 2.0 RFC 8628)
11
+ * shows a short code, opens /auth/device in a
12
+ * real browser, polls /api/v1/auth/device/token
13
+ * until the user clicks Approve. Use this when
14
+ * you SSO / WebAuthn / don't want the password
15
+ * on this machine at all.
16
+ *
17
+ * Either way, the resulting raw token is written to `~/.oxp/credentials`
18
+ * (chmod 0600). The CLI sends it as `Authorization: Bearer <raw>`.
19
+ */
20
+ export declare function login(args: string[]): Promise<number>;
21
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAG3D"}
@@ -0,0 +1,224 @@
1
+ import { spawn } from "node:child_process";
2
+ import { setTimeout as sleep } from "node:timers/promises";
3
+ import { createInterface } from "node:readline";
4
+ import { stdin, stdout } from "node:process";
5
+ import { writeCredentials, registryUrl, info } from "../util.js";
6
+ /**
7
+ * `oxp login` — sign in to the registry.
8
+ *
9
+ * Two flows, picked by flag:
10
+ *
11
+ * oxp login → terminal flow (Expo / npm style)
12
+ * prompts for email + password right here, POSTs
13
+ * to /api/v1/auth/login, gets back an API token.
14
+ *
15
+ * oxp login --browser → device-flow (OAuth 2.0 RFC 8628)
16
+ * shows a short code, opens /auth/device in a
17
+ * real browser, polls /api/v1/auth/device/token
18
+ * until the user clicks Approve. Use this when
19
+ * you SSO / WebAuthn / don't want the password
20
+ * on this machine at all.
21
+ *
22
+ * Either way, the resulting raw token is written to `~/.oxp/credentials`
23
+ * (chmod 0600). The CLI sends it as `Authorization: Bearer <raw>`.
24
+ */
25
+ export async function login(args) {
26
+ const useBrowser = args.includes("--browser");
27
+ return useBrowser ? loginBrowser(args) : loginTerminal(args);
28
+ }
29
+ // ── terminal flow ──────────────────────────────────────────────────────────
30
+ async function loginTerminal(_args) {
31
+ const url = registryUrl();
32
+ info(`Registry: ${url}`);
33
+ info("Sign in with your OXP email + password.");
34
+ info("(use `oxp login --browser` to sign in via the web instead)\n");
35
+ const rl = createInterface({ input: stdin, output: stdout });
36
+ try {
37
+ const email = (await question(rl, "Email: ")).trim().toLowerCase();
38
+ if (!email) {
39
+ process.stderr.write("oxp: no email entered\n");
40
+ return 1;
41
+ }
42
+ const password = await questionMasked(rl, "Password: ");
43
+ if (!password) {
44
+ process.stderr.write("oxp: no password entered\n");
45
+ return 1;
46
+ }
47
+ const res = await fetch(`${url}/api/v1/auth/login`, {
48
+ method: "POST",
49
+ headers: { "content-type": "application/json" },
50
+ body: JSON.stringify({ email, password }),
51
+ });
52
+ if (res.status === 401) {
53
+ process.stderr.write("oxp: invalid email or password\n");
54
+ return 1;
55
+ }
56
+ if (!res.ok) {
57
+ const txt = await safeText(res);
58
+ process.stderr.write(`oxp: login failed (${res.status}): ${txt}\n`);
59
+ return 1;
60
+ }
61
+ const body = (await res.json());
62
+ await writeCredentials(body.token);
63
+ const who = body.handle ? `@${body.handle}` : "your account";
64
+ info(`✓ Signed in as ${who}`);
65
+ info(` scopes: ${body.scopes.join(", ") || "(none)"}`);
66
+ info(` expires: ${body.expiresAt}`);
67
+ return 0;
68
+ }
69
+ finally {
70
+ rl.close();
71
+ }
72
+ }
73
+ function question(rl, prompt) {
74
+ return new Promise((resolve) => rl.question(prompt, resolve));
75
+ }
76
+ /**
77
+ * Read a line of input without echoing it. We can't use rl.question directly
78
+ * because readline echoes back; instead we attach our own keypress reader,
79
+ * collect bytes until newline, and emit asterisks (or nothing) for feedback.
80
+ *
81
+ * Falls back to plain question() when stdin isn't a TTY (CI, piped input).
82
+ */
83
+ function questionMasked(rl, prompt) {
84
+ if (!stdin.isTTY)
85
+ return question(rl, prompt);
86
+ return new Promise((resolve) => {
87
+ stdout.write(prompt);
88
+ const wasRaw = stdin.isRaw;
89
+ stdin.setRawMode(true);
90
+ stdin.resume();
91
+ stdin.setEncoding("utf8");
92
+ let buf = "";
93
+ const onData = (data) => {
94
+ for (const ch of data) {
95
+ const code = ch.charCodeAt(0);
96
+ if (ch === "\n" || ch === "\r" || code === 4 /* ^D */) {
97
+ stdout.write("\n");
98
+ cleanup();
99
+ resolve(buf);
100
+ return;
101
+ }
102
+ if (code === 3 /* ^C */) {
103
+ cleanup();
104
+ stdout.write("\n");
105
+ process.exit(130);
106
+ }
107
+ if (code === 127 || code === 8 /* backspace */) {
108
+ if (buf.length > 0) {
109
+ buf = buf.slice(0, -1);
110
+ stdout.write("\b \b");
111
+ }
112
+ continue;
113
+ }
114
+ if (code < 32)
115
+ continue; // ignore other control chars
116
+ buf += ch;
117
+ stdout.write("*");
118
+ }
119
+ };
120
+ function cleanup() {
121
+ stdin.removeListener("data", onData);
122
+ stdin.setRawMode(wasRaw);
123
+ stdin.pause();
124
+ }
125
+ stdin.on("data", onData);
126
+ });
127
+ }
128
+ async function loginBrowser(args) {
129
+ const noBrowser = args.includes("--no-browser");
130
+ const url = registryUrl();
131
+ info(`Registry: ${url}`);
132
+ const startRes = await fetch(`${url}/api/v1/auth/device`, {
133
+ method: "POST",
134
+ headers: { "content-type": "application/json" },
135
+ body: JSON.stringify({}),
136
+ });
137
+ if (!startRes.ok) {
138
+ const txt = await safeText(startRes);
139
+ process.stderr.write(`oxp: failed to start device flow (${startRes.status}): ${txt}\n`);
140
+ return 1;
141
+ }
142
+ const start = (await startRes.json());
143
+ process.stdout.write("\n");
144
+ process.stdout.write(` ${bold("Code:")} ${bold(start.userCode)}\n`);
145
+ process.stdout.write(` Open: ${start.verificationUriComplete}\n\n`);
146
+ process.stdout.write(` Waiting for approval (Ctrl+C to cancel)...\n`);
147
+ if (!noBrowser) {
148
+ tryOpenBrowser(start.verificationUriComplete);
149
+ }
150
+ const deadline = Date.now() + start.expiresIn * 1000;
151
+ let interval = Math.max(1, start.interval) * 1000;
152
+ while (Date.now() < deadline) {
153
+ await sleep(interval);
154
+ const pollRes = await fetch(`${url}/api/v1/auth/device/token`, {
155
+ method: "POST",
156
+ headers: { "content-type": "application/json" },
157
+ body: JSON.stringify({ deviceCode: start.deviceCode }),
158
+ });
159
+ let body = null;
160
+ try {
161
+ body = (await pollRes.json());
162
+ }
163
+ catch {
164
+ continue;
165
+ }
166
+ if (pollRes.ok && body && "ok" in body && body.ok) {
167
+ await writeCredentials(body.token);
168
+ const who = body.handle ? `@${body.handle}` : "your account";
169
+ info(`\n✓ Signed in as ${who}`);
170
+ info(` scopes: ${body.scopes.join(", ") || "(none)"}`);
171
+ info(` expires: ${body.expiresAt}`);
172
+ return 0;
173
+ }
174
+ const err = body && "error" in body ? body.error : "unknown_error";
175
+ if (err === "authorization_pending")
176
+ continue;
177
+ if (err === "slow_down") {
178
+ interval += 1000;
179
+ continue;
180
+ }
181
+ if (err === "access_denied") {
182
+ process.stderr.write("\noxp: access denied in browser\n");
183
+ return 1;
184
+ }
185
+ if (err === "expired_token" || err === "already_consumed") {
186
+ process.stderr.write(`\noxp: session ${err.replace("_", " ")}\n`);
187
+ return 1;
188
+ }
189
+ process.stderr.write(`\noxp: device flow error: ${err}\n`);
190
+ return 1;
191
+ }
192
+ process.stderr.write("\noxp: timed out waiting for approval\n");
193
+ return 1;
194
+ }
195
+ function bold(s) {
196
+ return process.stdout.isTTY ? `\x1b[1m${s}\x1b[0m` : s;
197
+ }
198
+ async function safeText(res) {
199
+ try {
200
+ return (await res.text()).slice(0, 500);
201
+ }
202
+ catch {
203
+ return "";
204
+ }
205
+ }
206
+ function tryOpenBrowser(target) {
207
+ const opener = process.platform === "darwin"
208
+ ? { cmd: "open", args: [target] }
209
+ : process.platform === "win32"
210
+ ? { cmd: "cmd", args: ["/c", "start", "", target] }
211
+ : { cmd: "xdg-open", args: [target] };
212
+ try {
213
+ const child = spawn(opener.cmd, opener.args, {
214
+ stdio: "ignore",
215
+ detached: true,
216
+ });
217
+ child.on("error", () => { });
218
+ child.unref();
219
+ }
220
+ catch {
221
+ /* swallow */
222
+ }
223
+ }
224
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `oxp logout [--keep-server]` — sign out of the registry on this machine.
3
+ *
4
+ * Default behaviour:
5
+ * 1. Hit POST /api/v1/auth/logout to revoke the token server-side.
6
+ * 2. Delete `~/.oxp/credentials`.
7
+ *
8
+ * With `--keep-server` the local file is removed but the token stays valid
9
+ * on the registry — useful when rotating laptops without invalidating CI
10
+ * jobs that share the same token.
11
+ *
12
+ * With `--local-only` (alias) only step 2 runs and no network call is made.
13
+ *
14
+ * Idempotent: succeeds (exit 0) even if no credentials file exists.
15
+ */
16
+ export declare function logout(args: string[]): Promise<number>;
17
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CA6D5D"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * `oxp logout [--keep-server]` — sign out of the registry on this machine.
3
+ *
4
+ * Default behaviour:
5
+ * 1. Hit POST /api/v1/auth/logout to revoke the token server-side.
6
+ * 2. Delete `~/.oxp/credentials`.
7
+ *
8
+ * With `--keep-server` the local file is removed but the token stays valid
9
+ * on the registry — useful when rotating laptops without invalidating CI
10
+ * jobs that share the same token.
11
+ *
12
+ * With `--local-only` (alias) only step 2 runs and no network call is made.
13
+ *
14
+ * Idempotent: succeeds (exit 0) even if no credentials file exists.
15
+ */
16
+ import { promises as fs } from "node:fs";
17
+ import { join } from "node:path";
18
+ import { info, oxpHome, readCredentials, registryUrl } from "../util.js";
19
+ export async function logout(args) {
20
+ const json = args.includes("--json");
21
+ const localOnly = args.includes("--local-only") || args.includes("--keep-server");
22
+ const token = await readCredentials();
23
+ if (!token) {
24
+ if (json) {
25
+ process.stdout.write(JSON.stringify({ ok: true, alreadyLoggedOut: true }) + "\n");
26
+ }
27
+ else {
28
+ info("Already logged out.");
29
+ }
30
+ return 0;
31
+ }
32
+ let serverRevoked = "skipped";
33
+ if (!localOnly) {
34
+ try {
35
+ const res = await fetch(`${registryUrl()}/api/v1/auth/logout`, {
36
+ method: "POST",
37
+ headers: { authorization: `Bearer ${token}` },
38
+ });
39
+ serverRevoked = res.ok ? "yes" : "failed";
40
+ if (!res.ok && !json) {
41
+ process.stderr.write(`oxp: server revoke returned ${res.status}; deleting local credentials anyway\n`);
42
+ }
43
+ }
44
+ catch (err) {
45
+ serverRevoked = "failed";
46
+ if (!json) {
47
+ process.stderr.write(`oxp: could not reach registry (${err.message}); deleting local credentials anyway\n`);
48
+ }
49
+ }
50
+ }
51
+ // Always remove the local file last so a partial failure still leaves the
52
+ // user in a consistent "not logged in" state on this machine.
53
+ try {
54
+ await fs.unlink(join(oxpHome(), "credentials"));
55
+ }
56
+ catch {
57
+ // already gone — fine
58
+ }
59
+ if (json) {
60
+ process.stdout.write(JSON.stringify({ ok: true, serverRevoked, localRemoved: true }) + "\n");
61
+ }
62
+ else {
63
+ info("✓ Logged out.");
64
+ if (serverRevoked === "failed") {
65
+ info(" (server token may still be valid — revoke it from /dashboard/tokens)");
66
+ }
67
+ }
68
+ return 0;
69
+ }
70
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAc;IACzC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAElE,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;IACtC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CAC5D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,aAAa,GAAiC,SAAS,CAAC;IAC5D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,WAAW,EAAE,qBAAqB,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;aAC9C,CAAC,CAAC;YACH,aAAa,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;gBACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,+BAA+B,GAAG,CAAC,MAAM,uCAAuC,CACjF,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,aAAa,GAAG,QAAQ,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,kCAAmC,GAAa,CAAC,OAAO,wCAAwC,CACjG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,8DAA8D;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;IAED,IAAI,IAAI,EAAE,CAAC;QACT,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,IAAI,CACvE,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,CAAC,CAAC;QACtB,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CACF,wEAAwE,CACzE,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * `oxp pack [dir]` — build a deterministic .oxp bundle from the project at
3
+ * <dir> (default: cwd). Writes:
4
+ * dist/<slug>-<version>.oxp — zstd-compressed deterministic tar
5
+ * dist/<slug>-<version>.sig.json — Ed25519 signature payload
6
+ * dist/<slug>-<version>.pub.pem — copy of the publisher public key
7
+ *
8
+ * Build hook: if `oxp.json#scripts.build` is set, it is executed via
9
+ * `sh -c` with the project root as cwd before packing. Skip with --no-build.
10
+ */
11
+ export declare function pack(args: string[]): Promise<number>;
12
+ //# sourceMappingURL=pack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.d.ts","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"AAOA;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAmD1D"}
@@ -0,0 +1,94 @@
1
+ import { promises as fs } from "node:fs";
2
+ import { spawn } from "node:child_process";
3
+ import { join, resolve } from "node:path";
4
+ import { packBundle, signEd25519 } from "@oxprotocol/bundle";
5
+ import { findProjectRoot, fail, info } from "../util.js";
6
+ import { loadOrCreateKey } from "./keygen.js";
7
+ /**
8
+ * `oxp pack [dir]` — build a deterministic .oxp bundle from the project at
9
+ * <dir> (default: cwd). Writes:
10
+ * dist/<slug>-<version>.oxp — zstd-compressed deterministic tar
11
+ * dist/<slug>-<version>.sig.json — Ed25519 signature payload
12
+ * dist/<slug>-<version>.pub.pem — copy of the publisher public key
13
+ *
14
+ * Build hook: if `oxp.json#scripts.build` is set, it is executed via
15
+ * `sh -c` with the project root as cwd before packing. Skip with --no-build.
16
+ */
17
+ export async function pack(args) {
18
+ const noBuild = args.includes("--no-build");
19
+ const positional = args.filter((a) => a !== "--no-build");
20
+ const startDir = resolve(positional[0] ?? process.cwd());
21
+ const root = await findProjectRoot(startDir);
22
+ if (!root)
23
+ fail(`no oxp.json found at or above ${startDir}`);
24
+ // Run scripts.build before packing (npm-style: always on, opt-out via --no-build).
25
+ if (!noBuild) {
26
+ const buildCmd = await readBuildScript(root);
27
+ if (buildCmd) {
28
+ info(`▶ scripts.build: ${buildCmd}`);
29
+ const code = await runShell(buildCmd, root);
30
+ if (code !== 0) {
31
+ fail(`scripts.build exited with code ${code}`);
32
+ }
33
+ }
34
+ }
35
+ const result = await packBundle(root, {});
36
+ const slug = result.manifest.id.split("/")[1];
37
+ const distDir = join(root, "dist");
38
+ await fs.mkdir(distDir, { recursive: true });
39
+ const base = `${slug}-${result.manifest.version}`;
40
+ const oxpPath = join(distDir, `${base}.oxp`);
41
+ const sigPath = join(distDir, `${base}.sig.json`);
42
+ const pubPath = join(distDir, `${base}.pub.pem`);
43
+ // Sign the digest with the local key
44
+ const key = await loadOrCreateKey();
45
+ const signature = signEd25519(result.bundleSha256, key.privateKeyPem, key.publicKeyPem);
46
+ await Promise.all([
47
+ fs.writeFile(oxpPath, new Uint8Array(result.oxp)),
48
+ fs.writeFile(sigPath, JSON.stringify(signature, null, 2) + "\n"),
49
+ fs.writeFile(pubPath, key.publicKeyPem),
50
+ ]);
51
+ info(`packed ${result.manifest.id}@${result.manifest.version}`);
52
+ info(` bundle: ${oxpPath} (${result.oxp.byteLength} bytes)`);
53
+ info(` digest: sha256:${result.bundleSha256}`);
54
+ info(` signature: ${sigPath}`);
55
+ info(` publicKey: ${pubPath}`);
56
+ info(` keyId: ${signature.keyId}`);
57
+ return 0;
58
+ }
59
+ /**
60
+ * Read `scripts.build` from the project's `oxp.json`. Returns null if the
61
+ * file is missing, malformed, or doesn't define a build hook. Errors are
62
+ * deferred to `packBundle()` which re-parses and validates the manifest.
63
+ */
64
+ async function readBuildScript(root) {
65
+ try {
66
+ const txt = await fs.readFile(join(root, "oxp.json"), "utf8");
67
+ const parsed = JSON.parse(txt);
68
+ const cmd = parsed.scripts?.build;
69
+ return typeof cmd === "string" && cmd.trim().length > 0 ? cmd.trim() : null;
70
+ }
71
+ catch {
72
+ return null;
73
+ }
74
+ }
75
+ /**
76
+ * Run a shell command and stream its stdio to our parent. Returns the exit
77
+ * code. We use `sh -c <cmd>` for shell features (&&, pipes) — the manifest
78
+ * has already been parsed from a trusted on-disk file the user controls.
79
+ */
80
+ function runShell(cmd, cwd) {
81
+ return new Promise((resolveExit) => {
82
+ const child = spawn("sh", ["-c", cmd], {
83
+ cwd,
84
+ stdio: "inherit",
85
+ env: process.env,
86
+ });
87
+ child.on("exit", (code) => resolveExit(code ?? 1));
88
+ child.on("error", (err) => {
89
+ process.stderr.write(`oxp pack: build hook failed to start: ${err.message}\n`);
90
+ resolveExit(1);
91
+ });
92
+ });
93
+ }
94
+ //# sourceMappingURL=pack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.js","sourceRoot":"","sources":["../../src/commands/pack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * `oxp protocol-register` — register the `oxp://` URL scheme so clicks
3
+ * in the browser open `oxp install --from <url>` automatically.
4
+ *
5
+ * Per-OS strategy:
6
+ *
7
+ * macOS Generate a tiny `.app` bundle at
8
+ * `~/Applications/OXP Helper.app` whose Info.plist declares
9
+ * the `oxp` scheme. Its main binary is a shell script that
10
+ * runs `oxp install --from "$1"`. Then ask Launch Services
11
+ * to register it.
12
+ *
13
+ * Linux Drop a `.desktop` file in
14
+ * `~/.local/share/applications/oxp-handler.desktop` with
15
+ * `MimeType=x-scheme-handler/oxp;` and run `xdg-mime default`.
16
+ *
17
+ * Windows Write registry keys under `HKCU\Software\Classes\oxp`
18
+ * pointing at the `oxp.cmd` shim.
19
+ *
20
+ * The command is **idempotent**: running it twice is safe and silent.
21
+ * It's also reversible — `oxp protocol-register --uninstall` removes
22
+ * everything it created.
23
+ *
24
+ * No network calls, no admin/sudo prompt. The handler simply re-invokes
25
+ * the user's installed `oxp` binary, so security stays inside the
26
+ * existing install pipeline (signature, TOFU, permission prompt).
27
+ */
28
+ export declare function protocolRegister(args: string[]): Promise<number>;
29
+ //# sourceMappingURL=protocol-register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-register.d.ts","sourceRoot":"","sources":["../../src/commands/protocol-register.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AA+CH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAetE"}