doe-sdk 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 (127) hide show
  1. package/README.md +509 -0
  2. package/dist/cli/index.d.ts +17 -0
  3. package/dist/cli/index.d.ts.map +1 -0
  4. package/dist/cli/index.js +118 -0
  5. package/dist/cli/index.js.map +1 -0
  6. package/dist/cli/init.d.ts +25 -0
  7. package/dist/cli/init.d.ts.map +1 -0
  8. package/dist/cli/init.js +100 -0
  9. package/dist/cli/init.js.map +1 -0
  10. package/dist/cli/login.d.ts +52 -0
  11. package/dist/cli/login.d.ts.map +1 -0
  12. package/dist/cli/login.js +571 -0
  13. package/dist/cli/login.js.map +1 -0
  14. package/dist/cli/publish.d.ts +27 -0
  15. package/dist/cli/publish.d.ts.map +1 -0
  16. package/dist/cli/publish.js +531 -0
  17. package/dist/cli/publish.js.map +1 -0
  18. package/dist/cli/scaffold.d.ts +18 -0
  19. package/dist/cli/scaffold.d.ts.map +1 -0
  20. package/dist/cli/scaffold.js +252 -0
  21. package/dist/cli/scaffold.js.map +1 -0
  22. package/dist/cli/ui.d.ts +57 -0
  23. package/dist/cli/ui.d.ts.map +1 -0
  24. package/dist/cli/ui.js +339 -0
  25. package/dist/cli/ui.js.map +1 -0
  26. package/dist/cli/validate.d.ts +28 -0
  27. package/dist/cli/validate.d.ts.map +1 -0
  28. package/dist/cli/validate.js +1270 -0
  29. package/dist/cli/validate.js.map +1 -0
  30. package/dist/compat/legacy-adapter.d.ts +198 -0
  31. package/dist/compat/legacy-adapter.d.ts.map +1 -0
  32. package/dist/compat/legacy-adapter.js +318 -0
  33. package/dist/compat/legacy-adapter.js.map +1 -0
  34. package/dist/index.d.ts +14 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +16 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/runtime/client.d.ts +370 -0
  39. package/dist/runtime/client.d.ts.map +1 -0
  40. package/dist/runtime/client.js +470 -0
  41. package/dist/runtime/client.js.map +1 -0
  42. package/dist/runtime/index.d.ts +8 -0
  43. package/dist/runtime/index.d.ts.map +1 -0
  44. package/dist/runtime/index.js +7 -0
  45. package/dist/runtime/index.js.map +1 -0
  46. package/dist/types/api.d.ts +564 -0
  47. package/dist/types/api.d.ts.map +1 -0
  48. package/dist/types/api.js +11 -0
  49. package/dist/types/api.js.map +1 -0
  50. package/dist/types/index.d.ts +12 -0
  51. package/dist/types/index.d.ts.map +1 -0
  52. package/dist/types/index.js +10 -0
  53. package/dist/types/index.js.map +1 -0
  54. package/dist/types/manifest.d.ts +412 -0
  55. package/dist/types/manifest.d.ts.map +1 -0
  56. package/dist/types/manifest.js +42 -0
  57. package/dist/types/manifest.js.map +1 -0
  58. package/dist/types/marketplace-categories.d.ts +9 -0
  59. package/dist/types/marketplace-categories.d.ts.map +1 -0
  60. package/dist/types/marketplace-categories.js +16 -0
  61. package/dist/types/marketplace-categories.js.map +1 -0
  62. package/dist/types/permissions.d.ts +86 -0
  63. package/dist/types/permissions.d.ts.map +1 -0
  64. package/dist/types/permissions.js +295 -0
  65. package/dist/types/permissions.js.map +1 -0
  66. package/dist/types/theme/index.d.ts +7 -0
  67. package/dist/types/theme/index.d.ts.map +1 -0
  68. package/dist/types/theme/index.js +7 -0
  69. package/dist/types/theme/index.js.map +1 -0
  70. package/dist/types/theme/schema.d.ts +1205 -0
  71. package/dist/types/theme/schema.d.ts.map +1 -0
  72. package/dist/types/theme/schema.js +325 -0
  73. package/dist/types/theme/schema.js.map +1 -0
  74. package/dist/types/theme/types.d.ts +648 -0
  75. package/dist/types/theme/types.d.ts.map +1 -0
  76. package/dist/types/theme/types.js +8 -0
  77. package/dist/types/theme/types.js.map +1 -0
  78. package/package.json +75 -0
  79. package/templates/extension/README.md +254 -0
  80. package/templates/extension/icon.png +0 -0
  81. package/templates/extension/index.html +42 -0
  82. package/templates/extension/manifest.json +57 -0
  83. package/templates/extension/package.json +24 -0
  84. package/templates/extension/src/App.tsx +252 -0
  85. package/templates/extension/src/components/OnboardingComplete.tsx +190 -0
  86. package/templates/extension/src/components/OnboardingProgress.tsx +82 -0
  87. package/templates/extension/src/components/OnboardingWelcome.tsx +166 -0
  88. package/templates/extension/src/components/StepContainer.tsx +217 -0
  89. package/templates/extension/src/components/playground/CanvasTab.tsx +24 -0
  90. package/templates/extension/src/components/playground/ConfigTab.tsx +24 -0
  91. package/templates/extension/src/components/playground/EventsTab.tsx +24 -0
  92. package/templates/extension/src/components/playground/InfoTab.tsx +89 -0
  93. package/templates/extension/src/components/playground/NetworkTab.tsx +24 -0
  94. package/templates/extension/src/components/playground/PlaygroundContainer.tsx +184 -0
  95. package/templates/extension/src/components/playground/ResultDisplay.tsx +30 -0
  96. package/templates/extension/src/components/playground/StorageTab.tsx +24 -0
  97. package/templates/extension/src/components/playground/UITab.tsx +24 -0
  98. package/templates/extension/src/components/shared/CanvasControls.tsx +130 -0
  99. package/templates/extension/src/components/shared/ConfigControls.tsx +154 -0
  100. package/templates/extension/src/components/shared/EventsControls.tsx +232 -0
  101. package/templates/extension/src/components/shared/InfoControls.tsx +281 -0
  102. package/templates/extension/src/components/shared/NetworkControls.tsx +328 -0
  103. package/templates/extension/src/components/shared/StorageControls.tsx +203 -0
  104. package/templates/extension/src/components/shared/UIControls.tsx +199 -0
  105. package/templates/extension/src/components/shared/index.ts +15 -0
  106. package/templates/extension/src/components/steps/CanvasStep.tsx +67 -0
  107. package/templates/extension/src/components/steps/ClipboardStep.tsx +167 -0
  108. package/templates/extension/src/components/steps/ConfigStep.tsx +63 -0
  109. package/templates/extension/src/components/steps/EventsStep.tsx +69 -0
  110. package/templates/extension/src/components/steps/InfoStep.tsx +70 -0
  111. package/templates/extension/src/components/steps/NetworkStep.tsx +70 -0
  112. package/templates/extension/src/components/steps/StorageStep.tsx +61 -0
  113. package/templates/extension/src/components/steps/UIStep.tsx +70 -0
  114. package/templates/extension/src/hooks/useDoe.ts +93 -0
  115. package/templates/extension/src/hooks/useOnboarding.ts +264 -0
  116. package/templates/extension/src/hooks/usePointerHandlers.ts +105 -0
  117. package/templates/extension/src/main.tsx +18 -0
  118. package/templates/extension/src/styles.ts +265 -0
  119. package/templates/extension/tsconfig.json +28 -0
  120. package/templates/extension/vite.config.ts +32 -0
  121. package/templates/theme/README.md +132 -0
  122. package/templates/theme/manifest.json +19 -0
  123. package/templates/theme/package.json +16 -0
  124. package/templates/theme/styles/.gitkeep +2 -0
  125. package/templates/theme/themes/theme.json +32 -0
  126. package/templates/theme/vite-plugin-doe-theme.ts +53 -0
  127. package/templates/theme/vite.config.ts +10 -0
@@ -0,0 +1,571 @@
1
+ /**
2
+ * Login Command - Authenticate developer account
3
+ *
4
+ * Uses existing DOE auth flow:
5
+ * 1. Opens browser to /auth page with redirect_to parameter
6
+ * 2. User logs in with Google
7
+ * 3. Auth callback redirects to local server with tokens
8
+ * 4. Stores credentials locally
9
+ */
10
+ import * as fs from "node:fs/promises";
11
+ import * as path from "node:path";
12
+ import * as os from "node:os";
13
+ import * as http from "node:http";
14
+ import * as crypto from "node:crypto";
15
+ // Configuration - can be overridden by environment variables
16
+ const AUTH_BASE_URL = process.env.DOE_AUTH_URL ?? "https://deskofeinstein.com";
17
+ const API_BASE_URL = process.env.DOE_API_URL ?? "https://deskofeinstein.com";
18
+ const CALLBACK_PORT = 9876;
19
+ const CALLBACK_HOST = "127.0.0.1";
20
+ /**
21
+ * Login to DOE account using existing auth flow
22
+ */
23
+ export async function login() {
24
+ console.log("DOE Developer Login\n");
25
+ // Check for existing valid auth
26
+ const existingAuth = await getAuthConfig();
27
+ if (existingAuth) {
28
+ const expiresAt = new Date(existingAuth.expiresAt);
29
+ if (expiresAt > new Date()) {
30
+ console.log(`Already logged in${existingAuth.email ? ` as ${existingAuth.email}` : ""}`);
31
+ console.log(`Token expires: ${expiresAt.toLocaleDateString()}\n`);
32
+ console.log("To login with a different account, run: doe-sdk logout");
33
+ return;
34
+ }
35
+ }
36
+ // Generate state for CSRF protection
37
+ const state = crypto.randomBytes(16).toString("hex");
38
+ // Build auth URL - uses existing DOE auth page
39
+ const callbackUrl = `http://${CALLBACK_HOST}:${CALLBACK_PORT}/callback`;
40
+ const authUrl = `${AUTH_BASE_URL}/auth?redirect_to=${encodeURIComponent(callbackUrl)}&state=${state}`;
41
+ console.log("Opening browser for authentication...\n");
42
+ console.log("If browser doesn't open, visit this URL:");
43
+ console.log(authUrl);
44
+ console.log();
45
+ // Open browser
46
+ await openBrowser(authUrl);
47
+ // Start local server to receive callback with tokens
48
+ const tokens = await waitForTokens(state);
49
+ // Fetch user info (user is the publisher - no separate publisher entity needed)
50
+ const userInfo = await fetchUserInfo(tokens.accessToken);
51
+ // Save auth config
52
+ const authConfig = {
53
+ accessToken: tokens.accessToken,
54
+ refreshToken: tokens.refreshToken,
55
+ expiresAt: tokens.expiresAt,
56
+ };
57
+ if (userInfo) {
58
+ authConfig.userId = userInfo.id;
59
+ authConfig.email = userInfo.email;
60
+ authConfig.slug = userInfo.slug;
61
+ }
62
+ await saveAuthConfig(authConfig);
63
+ console.log(`✅ Login successful!`);
64
+ console.log();
65
+ if (authConfig.email) {
66
+ console.log(`Logged in as: ${authConfig.email}`);
67
+ }
68
+ if (authConfig.slug) {
69
+ console.log(`Publisher slug: @${authConfig.slug}`);
70
+ }
71
+ console.log();
72
+ console.log("You can now publish extensions with: doe-sdk publish");
73
+ }
74
+ /**
75
+ * Wait for OAuth callback with tokens
76
+ */
77
+ function waitForTokens(_expectedState) {
78
+ return new Promise((resolve, reject) => {
79
+ let timeout;
80
+ const server = http.createServer((req, res) => {
81
+ const url = new URL(req.url ?? "/", `http://${CALLBACK_HOST}:${CALLBACK_PORT}`);
82
+ if (url.pathname === "/callback") {
83
+ // Parse tokens from query params (sent by /api/auth/callback deep link)
84
+ const accessToken = url.searchParams.get("access_token");
85
+ const refreshToken = url.searchParams.get("refresh_token");
86
+ const expiresAt = url.searchParams.get("expires_at");
87
+ const expiresIn = url.searchParams.get("expires_in");
88
+ const error = url.searchParams.get("error");
89
+ if (error) {
90
+ res.writeHead(400, { "Content-Type": "text/html" });
91
+ res.end(getErrorHtml(error));
92
+ clearTimeout(timeout);
93
+ server.close();
94
+ reject(new Error(`Auth error: ${error}`));
95
+ return;
96
+ }
97
+ if (!accessToken || !refreshToken) {
98
+ res.writeHead(400, { "Content-Type": "text/html" });
99
+ res.end(getErrorHtml("Missing tokens"));
100
+ clearTimeout(timeout);
101
+ server.close();
102
+ reject(new Error("Missing access_token or refresh_token"));
103
+ return;
104
+ }
105
+ // Calculate expiration time
106
+ let expirationTime;
107
+ if (expiresAt) {
108
+ expirationTime = new Date(parseInt(expiresAt, 10) * 1000).toISOString();
109
+ }
110
+ else if (expiresIn) {
111
+ expirationTime = new Date(Date.now() + parseInt(expiresIn, 10) * 1000).toISOString();
112
+ }
113
+ else {
114
+ // Default to 1 hour
115
+ expirationTime = new Date(Date.now() + 3600 * 1000).toISOString();
116
+ }
117
+ res.writeHead(200, { "Content-Type": "text/html" });
118
+ res.end(getSuccessHtml());
119
+ clearTimeout(timeout);
120
+ server.close();
121
+ resolve({
122
+ accessToken,
123
+ refreshToken,
124
+ expiresAt: expirationTime,
125
+ });
126
+ }
127
+ else {
128
+ res.writeHead(404);
129
+ res.end("Not found");
130
+ }
131
+ });
132
+ server.listen(CALLBACK_PORT, CALLBACK_HOST, () => {
133
+ console.log(`Waiting for authentication...`);
134
+ });
135
+ server.on("error", (err) => {
136
+ clearTimeout(timeout);
137
+ if (err.code === "EADDRINUSE") {
138
+ reject(new Error(`Port ${CALLBACK_PORT} is already in use. Please close the conflicting application and try again.`));
139
+ }
140
+ else {
141
+ reject(err);
142
+ }
143
+ });
144
+ // Timeout after 5 minutes
145
+ timeout = setTimeout(() => {
146
+ server.close();
147
+ reject(new Error("Authentication timed out. Please try again."));
148
+ }, 5 * 60 * 1000);
149
+ });
150
+ }
151
+ /**
152
+ * Fetch user info from API
153
+ */
154
+ async function fetchUserInfo(accessToken) {
155
+ try {
156
+ const response = await fetch(`${API_BASE_URL}/api/trpc/profile.get`, {
157
+ headers: {
158
+ Authorization: `Bearer ${accessToken}`,
159
+ },
160
+ });
161
+ if (!response.ok) {
162
+ return null;
163
+ }
164
+ // tRPC returns nested format: { result: { data: { json: ... } } }
165
+ const raw = await response.json();
166
+ const data = raw.result?.data?.json ?? raw.result?.data ?? null;
167
+ if (data) {
168
+ return {
169
+ id: data.id,
170
+ email: data.email ?? data.full_name ?? "",
171
+ slug: data.slug,
172
+ };
173
+ }
174
+ return null;
175
+ }
176
+ catch {
177
+ return null;
178
+ }
179
+ }
180
+ /**
181
+ * Open URL in default browser
182
+ */
183
+ async function openBrowser(url) {
184
+ const { exec } = await import("node:child_process");
185
+ const { promisify } = await import("node:util");
186
+ const execAsync = promisify(exec);
187
+ const platform = process.platform;
188
+ let command;
189
+ switch (platform) {
190
+ case "darwin":
191
+ command = `open "${url}"`;
192
+ break;
193
+ case "win32":
194
+ command = `start "" "${url}"`;
195
+ break;
196
+ default:
197
+ command = `xdg-open "${url}"`;
198
+ }
199
+ try {
200
+ await execAsync(command);
201
+ }
202
+ catch {
203
+ // Silently fail - user can open URL manually
204
+ }
205
+ }
206
+ /**
207
+ * Get the auth config file path
208
+ */
209
+ function getAuthConfigPath() {
210
+ return path.join(os.homedir(), ".doe", "auth.json");
211
+ }
212
+ /**
213
+ * Get existing auth config
214
+ */
215
+ async function getAuthConfig() {
216
+ try {
217
+ const configPath = getAuthConfigPath();
218
+ const content = await fs.readFile(configPath, "utf-8");
219
+ return JSON.parse(content);
220
+ }
221
+ catch {
222
+ return null;
223
+ }
224
+ }
225
+ /**
226
+ * Save auth config
227
+ */
228
+ async function saveAuthConfig(config) {
229
+ const configPath = getAuthConfigPath();
230
+ const configDir = path.dirname(configPath);
231
+ await fs.mkdir(configDir, { recursive: true });
232
+ await fs.writeFile(configPath, JSON.stringify(config, null, 2), {
233
+ mode: 0o600, // Owner read/write only
234
+ });
235
+ }
236
+ /**
237
+ * Get auth token for API calls (exported for use by other commands)
238
+ */
239
+ export async function getAuthToken() {
240
+ const config = await getAuthConfig();
241
+ if (!config)
242
+ return null;
243
+ const expiresAt = new Date(config.expiresAt);
244
+ if (expiresAt < new Date()) {
245
+ // TODO: Implement token refresh using refreshToken
246
+ console.warn("Auth token has expired. Please run: doe-sdk login");
247
+ return null;
248
+ }
249
+ return config.accessToken;
250
+ }
251
+ /**
252
+ * Get full auth config (exported for use by other commands)
253
+ */
254
+ export async function getAuth() {
255
+ const config = await getAuthConfig();
256
+ if (!config)
257
+ return null;
258
+ const expiresAt = new Date(config.expiresAt);
259
+ if (expiresAt < new Date()) {
260
+ return null;
261
+ }
262
+ return config;
263
+ }
264
+ /**
265
+ * Logout - remove stored credentials
266
+ */
267
+ export async function logout() {
268
+ const configPath = getAuthConfigPath();
269
+ try {
270
+ await fs.unlink(configPath);
271
+ console.log("✅ Logged out successfully.");
272
+ console.log();
273
+ console.log("To login again, run: doe-sdk login");
274
+ }
275
+ catch (err) {
276
+ if (err.code === "ENOENT") {
277
+ console.log("Already logged out (no stored credentials).");
278
+ }
279
+ else {
280
+ console.error("Failed to logout:", err);
281
+ throw err;
282
+ }
283
+ }
284
+ }
285
+ /**
286
+ * Get API URL (exported for use by other commands)
287
+ */
288
+ export function getApiUrl() {
289
+ return API_BASE_URL;
290
+ }
291
+ /**
292
+ * Get Worker URL (exported for use by other commands)
293
+ */
294
+ export function getWorkerUrl() {
295
+ return process.env.DOE_WORKER_URL ?? "https://doe-worker.desk-of-einstein.workers.dev";
296
+ }
297
+ /**
298
+ * HTML for successful authentication
299
+ * Matches DOE landing page brutalist design
300
+ */
301
+ function getSuccessHtml() {
302
+ return `
303
+ <!DOCTYPE html>
304
+ <html>
305
+ <head>
306
+ <title>DOE SDK - Login Successful</title>
307
+ <style>
308
+ @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400&display=swap');
309
+
310
+ :root {
311
+ --color-bg: #141414;
312
+ --color-surface: #1a1a1a;
313
+ --color-border: rgba(255, 255, 255, 0.12);
314
+ --color-text: #ffffff;
315
+ --color-text-secondary: #a0a0a0;
316
+ --font-mono: 'IBM Plex Mono', 'Courier New', monospace;
317
+ --font-display: Georgia, 'Times New Roman', serif;
318
+ }
319
+
320
+ * { box-sizing: border-box; margin: 0; padding: 0; }
321
+
322
+ body {
323
+ font-family: var(--font-mono);
324
+ display: flex;
325
+ justify-content: center;
326
+ align-items: center;
327
+ min-height: 100vh;
328
+ background: var(--color-bg);
329
+ color: var(--color-text);
330
+ }
331
+
332
+ .container {
333
+ background: var(--color-surface);
334
+ border: 1px solid var(--color-border);
335
+ padding: 48px 40px;
336
+ text-align: center;
337
+ max-width: 400px;
338
+ }
339
+
340
+ .logo {
341
+ width: 56px;
342
+ height: 56px;
343
+ border: 1px solid var(--color-border);
344
+ display: flex;
345
+ align-items: center;
346
+ justify-content: center;
347
+ margin: 0 auto 24px;
348
+ font-size: 24px;
349
+ }
350
+
351
+ h1 {
352
+ font-family: var(--font-display);
353
+ font-size: 1.5rem;
354
+ font-weight: normal;
355
+ color: var(--color-text);
356
+ margin-bottom: 8px;
357
+ }
358
+
359
+ .tagline {
360
+ font-family: var(--font-mono);
361
+ color: var(--color-text-secondary);
362
+ font-size: 0.85rem;
363
+ margin-bottom: 32px;
364
+ }
365
+
366
+ .status {
367
+ display: inline-block;
368
+ padding: 8px 16px;
369
+ background: rgba(34, 197, 94, 0.1);
370
+ border: 1px solid rgba(34, 197, 94, 0.3);
371
+ color: #22c55e;
372
+ font-family: var(--font-mono);
373
+ font-size: 0.8rem;
374
+ text-transform: uppercase;
375
+ letter-spacing: 0.05em;
376
+ margin-bottom: 24px;
377
+ }
378
+
379
+ p {
380
+ color: var(--color-text-secondary);
381
+ font-size: 0.9rem;
382
+ line-height: 1.6;
383
+ }
384
+
385
+ .footer {
386
+ margin-top: 32px;
387
+ padding-top: 24px;
388
+ border-top: 1px solid var(--color-border);
389
+ font-size: 0.75rem;
390
+ color: #666;
391
+ }
392
+ </style>
393
+ </head>
394
+ <body>
395
+ <div class="container">
396
+ <div class="logo">&#10003;</div>
397
+ <h1>Desk of Einstein</h1>
398
+ <p class="tagline">Developer SDK</p>
399
+ <div class="status">Authentication Complete</div>
400
+ <p>You can close this window and return to the terminal.</p>
401
+ <p class="footer">doe-sdk login</p>
402
+ </div>
403
+ </body>
404
+ </html>`;
405
+ }
406
+ /**
407
+ * HTML for authentication error
408
+ * Matches DOE landing page brutalist design
409
+ */
410
+ function getErrorHtml(error) {
411
+ return `
412
+ <!DOCTYPE html>
413
+ <html>
414
+ <head>
415
+ <title>DOE SDK - Login Failed</title>
416
+ <style>
417
+ @import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400&display=swap');
418
+
419
+ :root {
420
+ --color-bg: #141414;
421
+ --color-surface: #1a1a1a;
422
+ --color-border: rgba(255, 255, 255, 0.12);
423
+ --color-text: #ffffff;
424
+ --color-text-secondary: #a0a0a0;
425
+ --font-mono: 'IBM Plex Mono', 'Courier New', monospace;
426
+ --font-display: Georgia, 'Times New Roman', serif;
427
+ }
428
+
429
+ * { box-sizing: border-box; margin: 0; padding: 0; }
430
+
431
+ body {
432
+ font-family: var(--font-mono);
433
+ display: flex;
434
+ justify-content: center;
435
+ align-items: center;
436
+ min-height: 100vh;
437
+ background: var(--color-bg);
438
+ color: var(--color-text);
439
+ }
440
+
441
+ .container {
442
+ background: var(--color-surface);
443
+ border: 1px solid var(--color-border);
444
+ padding: 48px 40px;
445
+ text-align: center;
446
+ max-width: 400px;
447
+ }
448
+
449
+ .logo {
450
+ width: 56px;
451
+ height: 56px;
452
+ border: 1px solid rgba(239, 68, 68, 0.3);
453
+ display: flex;
454
+ align-items: center;
455
+ justify-content: center;
456
+ margin: 0 auto 24px;
457
+ font-size: 24px;
458
+ color: #ef4444;
459
+ }
460
+
461
+ h1 {
462
+ font-family: var(--font-display);
463
+ font-size: 1.5rem;
464
+ font-weight: normal;
465
+ color: var(--color-text);
466
+ margin-bottom: 8px;
467
+ }
468
+
469
+ .tagline {
470
+ font-family: var(--font-mono);
471
+ color: var(--color-text-secondary);
472
+ font-size: 0.85rem;
473
+ margin-bottom: 32px;
474
+ }
475
+
476
+ .status {
477
+ display: inline-block;
478
+ padding: 8px 16px;
479
+ background: rgba(239, 68, 68, 0.1);
480
+ border: 1px solid rgba(239, 68, 68, 0.3);
481
+ color: #ef4444;
482
+ font-family: var(--font-mono);
483
+ font-size: 0.8rem;
484
+ text-transform: uppercase;
485
+ letter-spacing: 0.05em;
486
+ margin-bottom: 24px;
487
+ }
488
+
489
+ p {
490
+ color: var(--color-text-secondary);
491
+ font-size: 0.9rem;
492
+ line-height: 1.6;
493
+ }
494
+
495
+ code {
496
+ display: block;
497
+ margin-top: 16px;
498
+ padding: 12px 16px;
499
+ background: rgba(255, 255, 255, 0.05);
500
+ border: 1px solid var(--color-border);
501
+ font-family: var(--font-mono);
502
+ font-size: 0.8rem;
503
+ color: var(--color-text-secondary);
504
+ word-break: break-all;
505
+ }
506
+
507
+ .footer {
508
+ margin-top: 32px;
509
+ padding-top: 24px;
510
+ border-top: 1px solid var(--color-border);
511
+ font-size: 0.75rem;
512
+ color: #666;
513
+ }
514
+ </style>
515
+ </head>
516
+ <body>
517
+ <div class="container">
518
+ <div class="logo">&#10007;</div>
519
+ <h1>Desk of Einstein</h1>
520
+ <p class="tagline">Developer SDK</p>
521
+ <div class="status">Authentication Failed</div>
522
+ <p>Something went wrong during login.</p>
523
+ <code>${error}</code>
524
+ <p class="footer">Try again: doe-sdk login</p>
525
+ </div>
526
+ </body>
527
+ </html>`;
528
+ }
529
+ /**
530
+ * Show current authentication status
531
+ */
532
+ export async function whoami() {
533
+ const config = await getAuthConfig();
534
+ if (!config) {
535
+ console.log("Not logged in. Run: doe-ext login");
536
+ return;
537
+ }
538
+ const expiresAt = new Date(config.expiresAt);
539
+ const isExpired = expiresAt < new Date();
540
+ if (isExpired) {
541
+ console.log(`
542
+ Logged in as: ${config.email}
543
+ Publisher slug: @${config.slug ?? "unknown"}
544
+ Status: EXPIRED (token expired on ${expiresAt.toLocaleDateString()})
545
+
546
+ Run: doe-ext login to refresh your credentials.
547
+ `);
548
+ }
549
+ else {
550
+ const daysUntilExpiry = Math.ceil((expiresAt.getTime() - Date.now()) / (1000 * 60 * 60 * 24));
551
+ console.log(`
552
+ Logged in as: ${config.email}
553
+ Publisher slug: @${config.slug ?? "unknown"}
554
+ Token expires: ${expiresAt.toLocaleDateString()} (in ${daysUntilExpiry} days)
555
+ `);
556
+ }
557
+ }
558
+ /**
559
+ * Get publisher slug from auth config
560
+ */
561
+ export async function getPublisherSlug() {
562
+ const config = await getAuthConfig();
563
+ if (!config)
564
+ return null;
565
+ const expiresAt = new Date(config.expiresAt);
566
+ if (expiresAt < new Date()) {
567
+ return null;
568
+ }
569
+ return config.slug ?? null;
570
+ }
571
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/cli/login.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,6DAA6D;AAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,4BAA4B,CAAC;AAC/E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,4BAA4B,CAAC;AAC7E,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,aAAa,GAAG,WAAW,CAAC;AAYlC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,KAAK;IACzB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAErC,gCAAgC;IAChC,MAAM,YAAY,GAAG,MAAM,aAAa,EAAE,CAAC;IAC3C,IAAI,YAAY,EAAE,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzF,OAAO,CAAC,GAAG,CAAC,kBAAkB,SAAS,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;YACtE,OAAO;QACT,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAErD,+CAA+C;IAC/C,MAAM,WAAW,GAAG,UAAU,aAAa,IAAI,aAAa,WAAW,CAAC;IACxE,MAAM,OAAO,GAAG,GAAG,aAAa,qBAAqB,kBAAkB,CAAC,WAAW,CAAC,UAAU,KAAK,EAAE,CAAC;IAEtG,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,EAAE,CAAC;IAEd,eAAe;IACf,MAAM,WAAW,CAAC,OAAO,CAAC,CAAC;IAE3B,qDAAqD;IACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;IAE1C,gFAAgF;IAChF,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAEzD,mBAAmB;IACnB,MAAM,UAAU,GAAe;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,SAAS,EAAE,MAAM,CAAC,SAAS;KAC5B,CAAC;IAEF,IAAI,QAAQ,EAAE,CAAC;QACb,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC;QAChC,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QAClC,UAAU,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;IAClC,CAAC;IAED,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,iBAAiB,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;AACtE,CAAC;AAQD;;GAEG;AACH,SAAS,aAAa,CAAC,cAAsB;IAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,IAAI,OAAsC,CAAC;QAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,UAAU,aAAa,IAAI,aAAa,EAAE,CAAC,CAAC;YAEhF,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,wEAAwE;gBACxE,MAAM,WAAW,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;gBACzD,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;gBAC3D,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACrD,MAAM,SAAS,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;gBACrD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAE5C,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC7B,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,EAAE,CAAC,CAAC,CAAC;oBAC1C,OAAO;gBACT,CAAC;gBAED,IAAI,CAAC,WAAW,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;oBACpD,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACxC,YAAY,CAAC,OAAO,CAAC,CAAC;oBACtB,MAAM,CAAC,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC,CAAC;oBAC3D,OAAO;gBACT,CAAC;gBAED,4BAA4B;gBAC5B,IAAI,cAAsB,CAAC;gBAC3B,IAAI,SAAS,EAAE,CAAC;oBACd,cAAc,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBAC1E,CAAC;qBAAM,IAAI,SAAS,EAAE,CAAC;oBACrB,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACvF,CAAC;qBAAM,CAAC;oBACN,oBAAoB;oBACpB,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpE,CAAC;gBAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;gBAC1B,YAAY,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,CAAC,KAAK,EAAE,CAAC;gBAEf,OAAO,CAAC;oBACN,WAAW;oBACX,YAAY;oBACZ,SAAS,EAAE,cAAc;iBAC1B,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,aAAa,EAAE,GAAG,EAAE;YAC/C,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAChD,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC9B,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,aAAa,6EAA6E,CAAC,CAAC,CAAC;YACxH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,0BAA0B;QAC1B,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YACxB,MAAM,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACnE,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAC1B,WAAmB;IAEnB,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,YAAY,uBAAuB,EAAE;YACnE,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;aACvC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,kEAAkE;QAClE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC;QAChE,IAAI,IAAI,EAAE,CAAC;YACT,OAAO;gBACL,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE;gBACzC,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,WAAW,CAAC,GAAW;IACpC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,IAAI,OAAe,CAAC;IAEpB,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,GAAG,SAAS,GAAG,GAAG,CAAC;YAC1B,MAAM;QACR,KAAK,OAAO;YACV,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;YAC9B,MAAM;QACR;YACE,OAAO,GAAG,aAAa,GAAG,GAAG,CAAC;IAClC,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACP,6CAA6C;IAC/C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAe,CAAC;IAC3C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,MAAkB;IAC9C,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE3C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,MAAM,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;QAC9D,IAAI,EAAE,KAAK,EAAE,wBAAwB;KACtC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3B,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,WAAW,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,UAAU,GAAG,iBAAiB,EAAE,CAAC;IAEvC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,mBAAmB,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS;IACvB,OAAO,YAAY,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,iDAAiD,CAAC;AACzF,CAAC;AAED;;;GAGG;AACH,SAAS,cAAc;IACrB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAsGD,CAAC;AACT,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YAgHG,KAAK;;;;QAIT,CAAC;AACT,CAAC;AAGD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IAErC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QACjD,OAAO;IACT,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAEzC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC;gBACA,MAAM,CAAC,KAAK;mBACT,MAAM,CAAC,IAAI,IAAI,SAAS;oCACP,SAAS,CAAC,kBAAkB,EAAE;;;CAGjE,CAAC,CAAC;IACD,CAAC;SAAM,CAAC;QACN,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAC/B,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAC3D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC;gBACA,MAAM,CAAC,KAAK;mBACT,MAAM,CAAC,IAAI,IAAI,SAAS;iBAC1B,SAAS,CAAC,kBAAkB,EAAE,QAAQ,eAAe;CACrE,CAAC,CAAC;IACD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IAEzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7C,IAAI,SAAS,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Publish Command - Submit extension to marketplace
3
+ *
4
+ * 1. Validates extension (manifest + code)
5
+ * 2. Collects release files from dist/
6
+ * 3. Uploads release files to R2
7
+ * 4. Calls marketplace.submit tRPC
8
+ *
9
+ * Includes theme-specific handling:
10
+ * - Themes are auto-approved (no security review)
11
+ * - Theme bundles must be < 500KB
12
+ * - Theme bundles are loaded as JSON (not executed as JS)
13
+ */
14
+ interface PublishOptions {
15
+ checkSecurity: boolean;
16
+ dryRun: boolean;
17
+ }
18
+ /**
19
+ * Publish extension to marketplace
20
+ */
21
+ export declare function publish(options: PublishOptions): Promise<void>;
22
+ /**
23
+ * Check the status of a submission
24
+ */
25
+ export declare function checkStatus(submissionId?: string): Promise<void>;
26
+ export {};
27
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/cli/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,UAAU,cAAc;IACtB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC;CACjB;AA2DD;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA4KpE;AAwXD;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0CtE"}