@usenaive-sdk/cli 0.15.0 → 1.0.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 (278) hide show
  1. package/README.md +43 -354
  2. package/dist/index.js +51775 -502
  3. package/package.json +22 -18
  4. package/dist/client.d.ts +0 -108
  5. package/dist/client.js +0 -458
  6. package/dist/client.js.map +0 -1
  7. package/dist/commands/account-kits.d.ts +0 -2
  8. package/dist/commands/account-kits.js +0 -71
  9. package/dist/commands/account-kits.js.map +0 -1
  10. package/dist/commands/aeo.d.ts +0 -2
  11. package/dist/commands/aeo.js +0 -451
  12. package/dist/commands/aeo.js.map +0 -1
  13. package/dist/commands/agent-profiles.d.ts +0 -11
  14. package/dist/commands/agent-profiles.js +0 -120
  15. package/dist/commands/agent-profiles.js.map +0 -1
  16. package/dist/commands/agents.d.ts +0 -2
  17. package/dist/commands/agents.js +0 -916
  18. package/dist/commands/agents.js.map +0 -1
  19. package/dist/commands/app-data.d.ts +0 -2
  20. package/dist/commands/app-data.js +0 -445
  21. package/dist/commands/app-data.js.map +0 -1
  22. package/dist/commands/approvals.d.ts +0 -2
  23. package/dist/commands/approvals.js +0 -242
  24. package/dist/commands/approvals.js.map +0 -1
  25. package/dist/commands/apps.d.ts +0 -9
  26. package/dist/commands/apps.js +0 -844
  27. package/dist/commands/apps.js.map +0 -1
  28. package/dist/commands/audio.d.ts +0 -9
  29. package/dist/commands/audio.js +0 -391
  30. package/dist/commands/audio.js.map +0 -1
  31. package/dist/commands/auth.d.ts +0 -31
  32. package/dist/commands/auth.js +0 -428
  33. package/dist/commands/auth.js.map +0 -1
  34. package/dist/commands/billing.d.ts +0 -2
  35. package/dist/commands/billing.js +0 -245
  36. package/dist/commands/billing.js.map +0 -1
  37. package/dist/commands/brain.d.ts +0 -2
  38. package/dist/commands/brain.js +0 -1300
  39. package/dist/commands/brain.js.map +0 -1
  40. package/dist/commands/browser.d.ts +0 -2
  41. package/dist/commands/browser.js +0 -378
  42. package/dist/commands/browser.js.map +0 -1
  43. package/dist/commands/business.d.ts +0 -2
  44. package/dist/commands/business.js +0 -566
  45. package/dist/commands/business.js.map +0 -1
  46. package/dist/commands/cards.d.ts +0 -2
  47. package/dist/commands/cards.js +0 -419
  48. package/dist/commands/cards.js.map +0 -1
  49. package/dist/commands/ceo.d.ts +0 -2
  50. package/dist/commands/ceo.js +0 -369
  51. package/dist/commands/ceo.js.map +0 -1
  52. package/dist/commands/clone.d.ts +0 -2
  53. package/dist/commands/clone.js +0 -203
  54. package/dist/commands/clone.js.map +0 -1
  55. package/dist/commands/companies.d.ts +0 -10
  56. package/dist/commands/companies.js +0 -283
  57. package/dist/commands/companies.js.map +0 -1
  58. package/dist/commands/company-data.d.ts +0 -2
  59. package/dist/commands/company-data.js +0 -168
  60. package/dist/commands/company-data.js.map +0 -1
  61. package/dist/commands/compute.d.ts +0 -2
  62. package/dist/commands/compute.js +0 -498
  63. package/dist/commands/compute.js.map +0 -1
  64. package/dist/commands/config.d.ts +0 -2
  65. package/dist/commands/config.js +0 -36
  66. package/dist/commands/config.js.map +0 -1
  67. package/dist/commands/connections.d.ts +0 -8
  68. package/dist/commands/connections.js +0 -137
  69. package/dist/commands/connections.js.map +0 -1
  70. package/dist/commands/cron-jobs.d.ts +0 -2
  71. package/dist/commands/cron-jobs.js +0 -245
  72. package/dist/commands/cron-jobs.js.map +0 -1
  73. package/dist/commands/domains.d.ts +0 -2
  74. package/dist/commands/domains.js +0 -474
  75. package/dist/commands/domains.js.map +0 -1
  76. package/dist/commands/ecommerce.d.ts +0 -2
  77. package/dist/commands/ecommerce.js +0 -277
  78. package/dist/commands/ecommerce.js.map +0 -1
  79. package/dist/commands/email.d.ts +0 -2
  80. package/dist/commands/email.js +0 -336
  81. package/dist/commands/email.js.map +0 -1
  82. package/dist/commands/employees.d.ts +0 -2
  83. package/dist/commands/employees.js +0 -190
  84. package/dist/commands/employees.js.map +0 -1
  85. package/dist/commands/env.d.ts +0 -7
  86. package/dist/commands/env.js +0 -112
  87. package/dist/commands/env.js.map +0 -1
  88. package/dist/commands/formation.d.ts +0 -2
  89. package/dist/commands/formation.js +0 -273
  90. package/dist/commands/formation.js.map +0 -1
  91. package/dist/commands/identity.d.ts +0 -2
  92. package/dist/commands/identity.js +0 -110
  93. package/dist/commands/identity.js.map +0 -1
  94. package/dist/commands/images.d.ts +0 -2
  95. package/dist/commands/images.js +0 -371
  96. package/dist/commands/images.js.map +0 -1
  97. package/dist/commands/init.d.ts +0 -5
  98. package/dist/commands/init.js +0 -43
  99. package/dist/commands/init.js.map +0 -1
  100. package/dist/commands/jobs.d.ts +0 -2
  101. package/dist/commands/jobs.js +0 -144
  102. package/dist/commands/jobs.js.map +0 -1
  103. package/dist/commands/keys.d.ts +0 -2
  104. package/dist/commands/keys.js +0 -156
  105. package/dist/commands/keys.js.map +0 -1
  106. package/dist/commands/legacy-auth.d.ts +0 -27
  107. package/dist/commands/legacy-auth.js +0 -64
  108. package/dist/commands/legacy-auth.js.map +0 -1
  109. package/dist/commands/llm.d.ts +0 -2
  110. package/dist/commands/llm.js +0 -106
  111. package/dist/commands/llm.js.map +0 -1
  112. package/dist/commands/login.d.ts +0 -2
  113. package/dist/commands/login.js +0 -65
  114. package/dist/commands/login.js.map +0 -1
  115. package/dist/commands/logout.d.ts +0 -7
  116. package/dist/commands/logout.js +0 -55
  117. package/dist/commands/logout.js.map +0 -1
  118. package/dist/commands/logs.d.ts +0 -2
  119. package/dist/commands/logs.js +0 -42
  120. package/dist/commands/logs.js.map +0 -1
  121. package/dist/commands/loops.d.ts +0 -2
  122. package/dist/commands/loops.js +0 -260
  123. package/dist/commands/loops.js.map +0 -1
  124. package/dist/commands/media.d.ts +0 -2
  125. package/dist/commands/media.js +0 -183
  126. package/dist/commands/media.js.map +0 -1
  127. package/dist/commands/memory.d.ts +0 -2
  128. package/dist/commands/memory.js +0 -151
  129. package/dist/commands/memory.js.map +0 -1
  130. package/dist/commands/mobile.d.ts +0 -4
  131. package/dist/commands/mobile.js +0 -382
  132. package/dist/commands/mobile.js.map +0 -1
  133. package/dist/commands/module.d.ts +0 -8
  134. package/dist/commands/module.js +0 -48
  135. package/dist/commands/module.js.map +0 -1
  136. package/dist/commands/objectives.d.ts +0 -2
  137. package/dist/commands/objectives.js +0 -243
  138. package/dist/commands/objectives.js.map +0 -1
  139. package/dist/commands/payments.d.ts +0 -2
  140. package/dist/commands/payments.js +0 -131
  141. package/dist/commands/payments.js.map +0 -1
  142. package/dist/commands/people.d.ts +0 -2
  143. package/dist/commands/people.js +0 -197
  144. package/dist/commands/people.js.map +0 -1
  145. package/dist/commands/phone.d.ts +0 -2
  146. package/dist/commands/phone.js +0 -289
  147. package/dist/commands/phone.js.map +0 -1
  148. package/dist/commands/projects.d.ts +0 -13
  149. package/dist/commands/projects.js +0 -220
  150. package/dist/commands/projects.js.map +0 -1
  151. package/dist/commands/queue.d.ts +0 -2
  152. package/dist/commands/queue.js +0 -121
  153. package/dist/commands/queue.js.map +0 -1
  154. package/dist/commands/register.d.ts +0 -2
  155. package/dist/commands/register.js +0 -80
  156. package/dist/commands/register.js.map +0 -1
  157. package/dist/commands/report.d.ts +0 -17
  158. package/dist/commands/report.js +0 -109
  159. package/dist/commands/report.js.map +0 -1
  160. package/dist/commands/sandbox.d.ts +0 -2
  161. package/dist/commands/sandbox.js +0 -558
  162. package/dist/commands/sandbox.js.map +0 -1
  163. package/dist/commands/search.d.ts +0 -2
  164. package/dist/commands/search.js +0 -223
  165. package/dist/commands/search.js.map +0 -1
  166. package/dist/commands/seo.d.ts +0 -2
  167. package/dist/commands/seo.js +0 -528
  168. package/dist/commands/seo.js.map +0 -1
  169. package/dist/commands/sessions.d.ts +0 -6
  170. package/dist/commands/sessions.js +0 -109
  171. package/dist/commands/sessions.js.map +0 -1
  172. package/dist/commands/social-data.d.ts +0 -2
  173. package/dist/commands/social-data.js +0 -245
  174. package/dist/commands/social-data.js.map +0 -1
  175. package/dist/commands/social.d.ts +0 -2
  176. package/dist/commands/social.js +0 -407
  177. package/dist/commands/social.js.map +0 -1
  178. package/dist/commands/status.d.ts +0 -2
  179. package/dist/commands/status.js +0 -73
  180. package/dist/commands/status.js.map +0 -1
  181. package/dist/commands/support.d.ts +0 -2
  182. package/dist/commands/support.js +0 -134
  183. package/dist/commands/support.js.map +0 -1
  184. package/dist/commands/tasks.d.ts +0 -2
  185. package/dist/commands/tasks.js +0 -409
  186. package/dist/commands/tasks.js.map +0 -1
  187. package/dist/commands/teams.d.ts +0 -69
  188. package/dist/commands/teams.js +0 -503
  189. package/dist/commands/teams.js.map +0 -1
  190. package/dist/commands/trading.d.ts +0 -2
  191. package/dist/commands/trading.js +0 -333
  192. package/dist/commands/trading.js.map +0 -1
  193. package/dist/commands/up.d.ts +0 -551
  194. package/dist/commands/up.js +0 -1149
  195. package/dist/commands/up.js.map +0 -1
  196. package/dist/commands/usage.d.ts +0 -2
  197. package/dist/commands/usage.js +0 -73
  198. package/dist/commands/usage.js.map +0 -1
  199. package/dist/commands/use.d.ts +0 -12
  200. package/dist/commands/use.js +0 -96
  201. package/dist/commands/use.js.map +0 -1
  202. package/dist/commands/users.d.ts +0 -10
  203. package/dist/commands/users.js +0 -82
  204. package/dist/commands/users.js.map +0 -1
  205. package/dist/commands/vault.d.ts +0 -2
  206. package/dist/commands/vault.js +0 -101
  207. package/dist/commands/vault.js.map +0 -1
  208. package/dist/commands/verification.d.ts +0 -2
  209. package/dist/commands/verification.js +0 -152
  210. package/dist/commands/verification.js.map +0 -1
  211. package/dist/commands/verify-email.d.ts +0 -19
  212. package/dist/commands/verify-email.js +0 -112
  213. package/dist/commands/verify-email.js.map +0 -1
  214. package/dist/commands/video.d.ts +0 -2
  215. package/dist/commands/video.js +0 -417
  216. package/dist/commands/video.js.map +0 -1
  217. package/dist/commands/voice.d.ts +0 -2
  218. package/dist/commands/voice.js +0 -516
  219. package/dist/commands/voice.js.map +0 -1
  220. package/dist/commands/wallet.d.ts +0 -2
  221. package/dist/commands/wallet.js +0 -244
  222. package/dist/commands/wallet.js.map +0 -1
  223. package/dist/commands/webhooks.d.ts +0 -13
  224. package/dist/commands/webhooks.js +0 -119
  225. package/dist/commands/webhooks.js.map +0 -1
  226. package/dist/commands/whoami.d.ts +0 -2
  227. package/dist/commands/whoami.js +0 -53
  228. package/dist/commands/whoami.js.map +0 -1
  229. package/dist/config.d.ts +0 -42
  230. package/dist/config.js +0 -83
  231. package/dist/config.js.map +0 -1
  232. package/dist/index.d.ts +0 -3
  233. package/dist/index.js.map +0 -1
  234. package/dist/lib/brain-select.d.ts +0 -193
  235. package/dist/lib/brain-select.js +0 -403
  236. package/dist/lib/brain-select.js.map +0 -1
  237. package/dist/lib/cli-validation.d.ts +0 -12
  238. package/dist/lib/cli-validation.js +0 -46
  239. package/dist/lib/cli-validation.js.map +0 -1
  240. package/dist/lib/config-errors.d.ts +0 -4
  241. package/dist/lib/config-errors.js +0 -13
  242. package/dist/lib/config-errors.js.map +0 -1
  243. package/dist/lib/deprecation.d.ts +0 -158
  244. package/dist/lib/deprecation.js +0 -140
  245. package/dist/lib/deprecation.js.map +0 -1
  246. package/dist/lib/duration.d.ts +0 -8
  247. package/dist/lib/duration.js +0 -11
  248. package/dist/lib/duration.js.map +0 -1
  249. package/dist/lib/http-response.d.ts +0 -11
  250. package/dist/lib/http-response.js +0 -96
  251. package/dist/lib/http-response.js.map +0 -1
  252. package/dist/lib/pricing.d.ts +0 -132
  253. package/dist/lib/pricing.js +0 -148
  254. package/dist/lib/pricing.js.map +0 -1
  255. package/dist/lib/starter-config.d.ts +0 -13
  256. package/dist/lib/starter-config.js +0 -71
  257. package/dist/lib/starter-config.js.map +0 -1
  258. package/dist/lib/stream-frames.d.ts +0 -114
  259. package/dist/lib/stream-frames.js +0 -169
  260. package/dist/lib/stream-frames.js.map +0 -1
  261. package/dist/lib/teams-catalog.d.ts +0 -141
  262. package/dist/lib/teams-catalog.js +0 -841
  263. package/dist/lib/teams-catalog.js.map +0 -1
  264. package/dist/lib/unknown-command.d.ts +0 -71
  265. package/dist/lib/unknown-command.js +0 -132
  266. package/dist/lib/unknown-command.js.map +0 -1
  267. package/dist/lib/version-check.d.ts +0 -26
  268. package/dist/lib/version-check.js +0 -21
  269. package/dist/lib/version-check.js.map +0 -1
  270. package/dist/output.d.ts +0 -174
  271. package/dist/output.js +0 -435
  272. package/dist/output.js.map +0 -1
  273. package/dist/prompt.d.ts +0 -17
  274. package/dist/prompt.js +0 -70
  275. package/dist/prompt.js.map +0 -1
  276. package/dist/version.d.ts +0 -2
  277. package/dist/version.js +0 -14
  278. package/dist/version.js.map +0 -1
@@ -1,428 +0,0 @@
1
- import { Command } from "commander";
2
- import http from "node:http";
3
- import { randomBytes } from "node:crypto";
4
- import { spawn } from "node:child_process";
5
- import { apiRequest, sessionLogin, sessionRequest } from "../client.js";
6
- import { loadConfig, saveConfig, clearSession } from "../config.js";
7
- import { agentError, agentOutput } from "../output.js";
8
- /**
9
- * Build the server authorize URL for the CLI loopback Google flow.
10
- *
11
- * The `redirect` value is the bare loopback origin `http://127.0.0.1:<port>` with
12
- * NO trailing slash and NO query — the server re-validates this exact shape
13
- * (`isLoopbackRedirect`) before it will hand a code back, so any drift here is
14
- * rejected server-side. `URLSearchParams` percent-encodes the redirect and leaves
15
- * the base64url `cliState` untouched (it only uses `A-Za-z0-9-_`).
16
- */
17
- export function buildAuthorizeUrl(baseUrl, port, cliState) {
18
- const redirect = `http://127.0.0.1:${port}`;
19
- const params = new URLSearchParams({ mode: "cli", redirect, cli_state: cliState });
20
- return `${baseUrl.replace(/\/+$/, "")}/v1/auth/oauth/google?${params.toString()}`;
21
- }
22
- /**
23
- * Parse the request the server bounced back to our loopback listener.
24
- *
25
- * Order matters: the server's ERROR redirect carries `?error=...` with NO
26
- * `cli_state`, so `error` must be checked first or every error would surface as a
27
- * spurious `state_mismatch`. The `cli_state` check is the CSRF guard [D8] — a
28
- * mismatch means the callback wasn't initiated by this process, so we abort
29
- * without saving anything.
30
- */
31
- export function parseLoopbackRequest(reqUrl, expectedState) {
32
- let params;
33
- try {
34
- params = new URL(reqUrl, "http://127.0.0.1").searchParams;
35
- }
36
- catch {
37
- return { ok: false, reason: "invalid_request" };
38
- }
39
- const error = params.get("error");
40
- if (error)
41
- return { ok: false, reason: error };
42
- if (params.get("cli_state") !== expectedState)
43
- return { ok: false, reason: "state_mismatch" };
44
- const code = params.get("code");
45
- if (!code)
46
- return { ok: false, reason: "missing_code" };
47
- return { ok: true, code };
48
- }
49
- const TIMEOUT_MS = 180_000;
50
- const SUCCESS_PAGE = `<!doctype html><html lang="en"><head><meta charset="utf-8">` +
51
- `<meta name="viewport" content="width=device-width,initial-scale=1">` +
52
- `<meta name="referrer" content="no-referrer"><title>Naive CLI</title></head>` +
53
- `<body style="font-family:system-ui,-apple-system,sans-serif;text-align:center;padding:3rem;color:#111">` +
54
- `<h1>Signed in</h1><p>Signed in &mdash; you can close this tab and return to your terminal.</p></body></html>`;
55
- const FAILURE_PAGE = `<!doctype html><html lang="en"><head><meta charset="utf-8">` +
56
- `<meta name="viewport" content="width=device-width,initial-scale=1">` +
57
- `<meta name="referrer" content="no-referrer"><title>Naive CLI</title></head>` +
58
- `<body style="font-family:system-ui,-apple-system,sans-serif;text-align:center;padding:3rem;color:#111">` +
59
- `<h1>Sign-in failed</h1><p>Something went wrong. Return to your terminal for details.</p></body></html>`;
60
- /** Map an internal/raw reason to a human-facing message. */
61
- function describeReason(reason) {
62
- switch (reason) {
63
- case "state_mismatch":
64
- return "Sign-in state did not match the request that started this flow (possible CSRF). Aborted without saving.";
65
- case "missing_code":
66
- return "Sign-in did not return an authorization code.";
67
- case "invalid_request":
68
- return "The browser callback could not be parsed.";
69
- default:
70
- // A message the server bounced back (e.g. "access_denied").
71
- return reason;
72
- }
73
- }
74
- /**
75
- * Shared browser-loopback login used by BOTH `auth google` and `auth email`:
76
- * 1. start a one-shot loopback listener on a random 127.0.0.1 port,
77
- * 2. let the flow turn (port, cliState) into a URL to open (or an emailed-link
78
- * message, or an error),
79
- * 3. accept the single callback, exchange the one-time code for an API key at
80
- * POST /v1/auth/cli/exchange (identical for both flows),
81
- * 4. persist the key and print structured success — or fail loudly.
82
- *
83
- * The raw API key and the one-time code are NEVER written to stdout/stderr.
84
- */
85
- async function runLoopbackLogin(action, start) {
86
- const cliState = randomBytes(32).toString("base64url");
87
- await new Promise((resolve) => {
88
- let settled = false;
89
- let port = 0;
90
- let timer;
91
- const server = http.createServer(handler);
92
- function teardown() {
93
- clearTimeout(timer);
94
- server.close();
95
- server.closeAllConnections?.();
96
- }
97
- function succeed(data) {
98
- if (settled)
99
- return;
100
- settled = true;
101
- teardown();
102
- const companies = data.companies ?? [];
103
- const hasMultiple = companies.length > 1;
104
- agentOutput({
105
- action,
106
- result: {
107
- agent_id: data.agent_id,
108
- company_id: data.company_id,
109
- company_name: data.company_name,
110
- credentials_saved: "~/.naive/config.json",
111
- companies,
112
- },
113
- next_steps: [
114
- { command: "naive status", description: "Check current credits and resources" },
115
- { command: "naive identity", description: "View available resources for this company" },
116
- ...(hasMultiple
117
- ? [{ command: "naive companies select <id>", description: "Switch to a different company", when: "You want to operate under a different company" }]
118
- : []),
119
- ],
120
- hints: [
121
- "Signed in — API key saved to ~/.naive/config.json for automatic auth",
122
- ...(hasMultiple
123
- ? [`You have ${companies.length} companies. Currently using "${data.company_name}". Use 'naive companies' to see all.`]
124
- : []),
125
- ],
126
- related_commands: ["naive whoami", "naive companies", "naive status", "naive keys list"],
127
- });
128
- resolve();
129
- }
130
- function fail(error) {
131
- if (settled)
132
- return;
133
- settled = true;
134
- teardown();
135
- agentError({
136
- action,
137
- error,
138
- recovery_steps: [
139
- { command: "naive auth google", description: "Sign in with Google in the browser" },
140
- { command: "naive auth email <email>", description: "Sign in with an email magic link" },
141
- { command: "naive login --email <email> --password <pw>", description: "Sign in with email and password instead" },
142
- ],
143
- });
144
- }
145
- function writePage(res, status, body, onDone) {
146
- res.writeHead(status, {
147
- "Content-Type": "text/html; charset=utf-8",
148
- "Referrer-Policy": "no-referrer",
149
- Connection: "close",
150
- });
151
- res.end(body, onDone);
152
- }
153
- async function exchange(code, res) {
154
- let resp;
155
- try {
156
- resp = await apiRequest("POST", "/v1/auth/cli/exchange", { code }, { noAuth: true });
157
- }
158
- catch {
159
- writePage(res, 502, FAILURE_PAGE, () => fail({ code: "network_error", message: "Could not reach the Naive API to complete sign-in." }));
160
- return;
161
- }
162
- if (resp.status !== 200) {
163
- const err = resp.data?.error;
164
- writePage(res, 401, FAILURE_PAGE, () => fail({ code: err?.code ?? "unauthorized", message: err?.message ?? "Sign-in code exchange failed." }));
165
- return;
166
- }
167
- const data = resp.data;
168
- saveConfig({
169
- api_key: data.api_key,
170
- agent_id: data.agent_id,
171
- company_id: data.company_id,
172
- company_name: data.company_name,
173
- });
174
- writePage(res, 200, SUCCESS_PAGE, () => succeed(data));
175
- }
176
- function handler(req, res) {
177
- // Anti-DNS-rebind: a real browser hitting our loopback sends
178
- // `Host: 127.0.0.1:<port>`. Anything else is a rebind attempt [SEC-4].
179
- if (req.headers.host !== `127.0.0.1:${port}`) {
180
- writePage(res, 404, FAILURE_PAGE, () => { });
181
- return;
182
- }
183
- const path = (req.url ?? "").split("?")[0];
184
- if (path !== "/") {
185
- // Ignore incidental requests (favicon, etc.) without settling the flow.
186
- writePage(res, 404, FAILURE_PAGE, () => { });
187
- return;
188
- }
189
- const parsed = parseLoopbackRequest(req.url ?? "", cliState);
190
- if (!parsed.ok) {
191
- writePage(res, 400, FAILURE_PAGE, () => fail({ code: "oauth_failed", message: describeReason(parsed.reason) }));
192
- return;
193
- }
194
- void exchange(parsed.code, res);
195
- }
196
- server.listen(0, "127.0.0.1", () => {
197
- // The port is only known once listening, so the URL and browser open must
198
- // happen inside this callback [FAL-4/SEC-4].
199
- port = server.address().port;
200
- start(port, cliState)
201
- .then((result) => {
202
- if ("error" in result) {
203
- fail({ code: "start_failed", message: result.error });
204
- return;
205
- }
206
- if ("url" in result) {
207
- openBrowser(result.url);
208
- const copied = copyToClipboard(result.url);
209
- // ALWAYS surface the URL so a headless/locked-down environment can finish
210
- // the flow manually. Printed to stderr to keep stdout a single JSON doc.
211
- process.stderr.write(`Opening your browser to sign in...\nIf it didn't open${copied ? " (the link is also copied to your clipboard)" : ""}, visit:\n${result.url}\n`);
212
- }
213
- else {
214
- // No URL to open here (e.g. prod emailed the link) — tell the user.
215
- process.stderr.write(`${result.message}\n`);
216
- }
217
- })
218
- .catch((e) => fail({ code: "start_failed", message: e instanceof Error ? e.message : "Failed to start sign-in" }));
219
- });
220
- server.on("error", (err) => {
221
- fail({ code: "listen_failed", message: `Could not start the local sign-in listener: ${err.message}` });
222
- });
223
- timer = setTimeout(() => {
224
- fail({ code: "timeout", message: `Timed out after ${TIMEOUT_MS / 1000}s waiting for sign-in. Please try again.` });
225
- }, TIMEOUT_MS);
226
- });
227
- }
228
- /**
229
- * Open the system browser at `url`. Uses an argv array (never a shell string) so
230
- * the URL can't be interpreted as a shell command [SEC-5]. Best-effort: any failure
231
- * is swallowed because the URL is always printed as a fallback.
232
- */
233
- function openBrowser(url) {
234
- try {
235
- const { command, args } = process.platform === "darwin"
236
- ? { command: "open", args: [url] }
237
- : process.platform === "win32"
238
- ? { command: "cmd", args: ["/c", "start", "", url] }
239
- : { command: "xdg-open", args: [url] };
240
- const child = spawn(command, args, { stdio: "ignore", detached: true });
241
- child.on("error", () => { });
242
- child.unref();
243
- }
244
- catch {
245
- // Ignore — the URL was/will be printed as a manual fallback.
246
- }
247
- }
248
- /**
249
- * Best-effort copy of `text` to the system clipboard (argv array, never a shell
250
- * string). Returns whether the copy was attempted; failures are swallowed because
251
- * the URL is always printed too.
252
- */
253
- function copyToClipboard(text) {
254
- try {
255
- const { command, args } = process.platform === "darwin"
256
- ? { command: "pbcopy", args: [] }
257
- : process.platform === "win32"
258
- ? { command: "clip", args: [] }
259
- : { command: "xclip", args: ["-selection", "clipboard"] };
260
- const child = spawn(command, args, { stdio: ["pipe", "ignore", "ignore"] });
261
- child.on("error", () => { });
262
- child.stdin?.end(text);
263
- return true;
264
- }
265
- catch {
266
- return false;
267
- }
268
- }
269
- export async function runEmailLogin(email, action = "auth_email") {
270
- await runLoopbackLogin(action, async (port, cliState) => {
271
- let resp;
272
- try {
273
- resp = await apiRequest("POST", "/v1/auth/magic/start", { email, redirect: `http://127.0.0.1:${port}`, cli_state: cliState }, { noAuth: true });
274
- }
275
- catch {
276
- return { error: "Could not reach the Naive API to start email sign-in." };
277
- }
278
- if (resp.status !== 200) {
279
- const err = resp.data?.error;
280
- return { error: err?.message ?? "Could not start email sign-in." };
281
- }
282
- const data = resp.data;
283
- if (data.magic_url)
284
- return { url: data.magic_url };
285
- return { message: data.message ?? "Check your email for the sign-in link, then return here." };
286
- });
287
- }
288
- export const authCmd = new Command("auth")
289
- .description("Browser-based authentication (Google / email magic-link sign-in)")
290
- .addHelpText("after", `
291
- Subcommands:
292
- google Sign in or sign up with Google in your browser
293
- email <email> Sign in or sign up with an email magic link
294
-
295
- Examples:
296
- $ naive auth google
297
- $ naive auth email you@example.com
298
- `);
299
- authCmd
300
- .command("google")
301
- .description("Sign in or sign up with Google via your browser (no password)")
302
- .addHelpText("after", `
303
- What this does:
304
- 1. Opens your browser to Google's consent screen
305
- 2. Google redirects back to a one-time local listener on 127.0.0.1
306
- 3. Exchanges the returned code for an API key (signup provisions a new account)
307
- 4. Saves credentials to ~/.naive/config.json (mode 0600)
308
- `)
309
- .action(async () => {
310
- await runLoopbackLogin("auth_google", async (port, cliState) => ({
311
- url: buildAuthorizeUrl(loadConfig().base_url, port, cliState),
312
- }));
313
- });
314
- authCmd
315
- .command("email")
316
- .argument("<email>", "Email address to sign in / sign up with")
317
- .description("Sign in or sign up with an email magic link (no password)")
318
- .addHelpText("after", `
319
- What this does:
320
- 1. Asks the API for a one-time sign-in link for <email>
321
- 2. In dev the link is returned and opened automatically (and copied to your clipboard);
322
- in production it is emailed to you to click
323
- 3. Opening the link bounces a one-time code back to a local listener on 127.0.0.1
324
- 4. Exchanges it for an API key and saves it to ~/.naive/config.json (mode 0600)
325
-
326
- Notes:
327
- - New emails are provisioned a fresh account automatically; existing ones sign in
328
- - Respects NAIVE_BASE_URL for local/staging targets
329
- `)
330
- .action(async (email) => {
331
- await runEmailLogin(email);
332
- });
333
- // ── Human session auth (session-login / logout) — from the clone/voice branch ──
334
- // Distinct from the agent api_key and the browser sign-in above; needed for
335
- // human-only ops like `naive voice clone`/`revoke`.
336
- authCmd
337
- .command("session-login")
338
- .description("Log in as a human (session cookie) — needed for `naive voice clone`/`revoke`")
339
- .requiredOption("--email <email>", "Account email (same as the Studio dashboard)")
340
- .requiredOption("--password <password>", "Account password")
341
- .addHelpText("after", `
342
- What this does:
343
- 1. Authenticates as a HUMAN (not an agent key) and stores a session token (~/.naive/config.json, 0600)
344
- 2. Unlocks human-only commands: naive voice clone / naive voice revoke
345
- 3. The agent api_key (from 'naive login') is unaffected and still used for agent commands
346
-
347
- Note: this is separate from 'naive login'. Cloning a voice is a human-only action by design.
348
- `)
349
- .action(async (opts) => {
350
- const { token, data } = await sessionLogin(opts.email, opts.password);
351
- const user = (data.user ?? {});
352
- const company = (data.company ?? {});
353
- saveConfig({
354
- session_token: token,
355
- user_email: user.email,
356
- session_company_id: company.id,
357
- session_company_name: company.name,
358
- });
359
- agentOutput({
360
- action: "auth.session-login",
361
- result: {
362
- // deliberately NOT returning the token
363
- user_email: user.email,
364
- company_id: company.id,
365
- company_name: company.name,
366
- session_saved: "~/.naive/config.json (0600)",
367
- },
368
- next_steps: [
369
- { command: "naive voice clone <file> --name <name> --consent-type self --i-affirm --consenter-name <you> --attestation <text>", description: "Clone a voice you have consent for" },
370
- { command: "naive auth logout", description: "End the human session" },
371
- ],
372
- hints: ["Human session active — voice clone/revoke are now available."],
373
- });
374
- });
375
- authCmd
376
- .command("logout")
377
- .description("End the human session (server-side + local)")
378
- .action(async () => {
379
- const cfg = loadConfig();
380
- if (!cfg.session_token) {
381
- // Dogfood auth-32dd: agents ran `auth logout` after `naive register`/`login`
382
- // (agent key only) and got silent `no_session` while `whoami` still worked.
383
- agentOutput({
384
- action: "auth.logout",
385
- result: { status: "no_session" },
386
- next_steps: [
387
- { command: "naive auth session-login --email <e> --password <p>", description: "Start a human session" },
388
- ...(cfg.api_key
389
- ? [
390
- {
391
- command: "naive logout",
392
- description: "Clear the saved agent API key (auth logout only ends human sessions)",
393
- },
394
- ]
395
- : []),
396
- ],
397
- hints: cfg.api_key
398
- ? [
399
- "No human session was active. Agent commands still use the saved API key — run 'naive logout' to clear it.",
400
- ]
401
- : undefined,
402
- });
403
- return;
404
- }
405
- // Invalidate server-side first; clearing only the local file would leave the token
406
- // live for its full 30-day TTL.
407
- try {
408
- await sessionRequest("POST", "/v1/auth/session/logout");
409
- }
410
- catch {
411
- // even if the server call fails, still clear local state below
412
- }
413
- clearSession();
414
- agentOutput({
415
- action: "auth.logout",
416
- result: { status: "logged_out" },
417
- next_steps: [
418
- { command: "naive auth session-login --email <e> --password <p>", description: "Start a new human session" },
419
- ...(cfg.api_key
420
- ? [{ command: "naive logout", description: "Also clear the saved agent API key" }]
421
- : []),
422
- ],
423
- hints: cfg.api_key
424
- ? ["Human session ended. The agent API key is still saved — use 'naive logout' to clear it."]
425
- : undefined,
426
- });
427
- });
428
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { Command } from "commander";
2
- export declare const billingCmd: Command;