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.
- package/README.md +509 -0
- package/dist/cli/index.d.ts +17 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +118 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init.d.ts +25 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +100 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/login.d.ts +52 -0
- package/dist/cli/login.d.ts.map +1 -0
- package/dist/cli/login.js +571 -0
- package/dist/cli/login.js.map +1 -0
- package/dist/cli/publish.d.ts +27 -0
- package/dist/cli/publish.d.ts.map +1 -0
- package/dist/cli/publish.js +531 -0
- package/dist/cli/publish.js.map +1 -0
- package/dist/cli/scaffold.d.ts +18 -0
- package/dist/cli/scaffold.d.ts.map +1 -0
- package/dist/cli/scaffold.js +252 -0
- package/dist/cli/scaffold.js.map +1 -0
- package/dist/cli/ui.d.ts +57 -0
- package/dist/cli/ui.d.ts.map +1 -0
- package/dist/cli/ui.js +339 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/validate.d.ts +28 -0
- package/dist/cli/validate.d.ts.map +1 -0
- package/dist/cli/validate.js +1270 -0
- package/dist/cli/validate.js.map +1 -0
- package/dist/compat/legacy-adapter.d.ts +198 -0
- package/dist/compat/legacy-adapter.d.ts.map +1 -0
- package/dist/compat/legacy-adapter.js +318 -0
- package/dist/compat/legacy-adapter.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/client.d.ts +370 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +470 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/index.d.ts +8 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/types/api.d.ts +564 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +11 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +10 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/manifest.d.ts +412 -0
- package/dist/types/manifest.d.ts.map +1 -0
- package/dist/types/manifest.js +42 -0
- package/dist/types/manifest.js.map +1 -0
- package/dist/types/marketplace-categories.d.ts +9 -0
- package/dist/types/marketplace-categories.d.ts.map +1 -0
- package/dist/types/marketplace-categories.js +16 -0
- package/dist/types/marketplace-categories.js.map +1 -0
- package/dist/types/permissions.d.ts +86 -0
- package/dist/types/permissions.d.ts.map +1 -0
- package/dist/types/permissions.js +295 -0
- package/dist/types/permissions.js.map +1 -0
- package/dist/types/theme/index.d.ts +7 -0
- package/dist/types/theme/index.d.ts.map +1 -0
- package/dist/types/theme/index.js +7 -0
- package/dist/types/theme/index.js.map +1 -0
- package/dist/types/theme/schema.d.ts +1205 -0
- package/dist/types/theme/schema.d.ts.map +1 -0
- package/dist/types/theme/schema.js +325 -0
- package/dist/types/theme/schema.js.map +1 -0
- package/dist/types/theme/types.d.ts +648 -0
- package/dist/types/theme/types.d.ts.map +1 -0
- package/dist/types/theme/types.js +8 -0
- package/dist/types/theme/types.js.map +1 -0
- package/package.json +75 -0
- package/templates/extension/README.md +254 -0
- package/templates/extension/icon.png +0 -0
- package/templates/extension/index.html +42 -0
- package/templates/extension/manifest.json +57 -0
- package/templates/extension/package.json +24 -0
- package/templates/extension/src/App.tsx +252 -0
- package/templates/extension/src/components/OnboardingComplete.tsx +190 -0
- package/templates/extension/src/components/OnboardingProgress.tsx +82 -0
- package/templates/extension/src/components/OnboardingWelcome.tsx +166 -0
- package/templates/extension/src/components/StepContainer.tsx +217 -0
- package/templates/extension/src/components/playground/CanvasTab.tsx +24 -0
- package/templates/extension/src/components/playground/ConfigTab.tsx +24 -0
- package/templates/extension/src/components/playground/EventsTab.tsx +24 -0
- package/templates/extension/src/components/playground/InfoTab.tsx +89 -0
- package/templates/extension/src/components/playground/NetworkTab.tsx +24 -0
- package/templates/extension/src/components/playground/PlaygroundContainer.tsx +184 -0
- package/templates/extension/src/components/playground/ResultDisplay.tsx +30 -0
- package/templates/extension/src/components/playground/StorageTab.tsx +24 -0
- package/templates/extension/src/components/playground/UITab.tsx +24 -0
- package/templates/extension/src/components/shared/CanvasControls.tsx +130 -0
- package/templates/extension/src/components/shared/ConfigControls.tsx +154 -0
- package/templates/extension/src/components/shared/EventsControls.tsx +232 -0
- package/templates/extension/src/components/shared/InfoControls.tsx +281 -0
- package/templates/extension/src/components/shared/NetworkControls.tsx +328 -0
- package/templates/extension/src/components/shared/StorageControls.tsx +203 -0
- package/templates/extension/src/components/shared/UIControls.tsx +199 -0
- package/templates/extension/src/components/shared/index.ts +15 -0
- package/templates/extension/src/components/steps/CanvasStep.tsx +67 -0
- package/templates/extension/src/components/steps/ClipboardStep.tsx +167 -0
- package/templates/extension/src/components/steps/ConfigStep.tsx +63 -0
- package/templates/extension/src/components/steps/EventsStep.tsx +69 -0
- package/templates/extension/src/components/steps/InfoStep.tsx +70 -0
- package/templates/extension/src/components/steps/NetworkStep.tsx +70 -0
- package/templates/extension/src/components/steps/StorageStep.tsx +61 -0
- package/templates/extension/src/components/steps/UIStep.tsx +70 -0
- package/templates/extension/src/hooks/useDoe.ts +93 -0
- package/templates/extension/src/hooks/useOnboarding.ts +264 -0
- package/templates/extension/src/hooks/usePointerHandlers.ts +105 -0
- package/templates/extension/src/main.tsx +18 -0
- package/templates/extension/src/styles.ts +265 -0
- package/templates/extension/tsconfig.json +28 -0
- package/templates/extension/vite.config.ts +32 -0
- package/templates/theme/README.md +132 -0
- package/templates/theme/manifest.json +19 -0
- package/templates/theme/package.json +16 -0
- package/templates/theme/styles/.gitkeep +2 -0
- package/templates/theme/themes/theme.json +32 -0
- package/templates/theme/vite-plugin-doe-theme.ts +53 -0
- 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">✓</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">✗</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":"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"}
|
|
@@ -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"}
|