@embeddables/cli 0.14.4 → 0.15.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/.prompts/custom/build-funnel.md +1 -1
- package/.prompts/embeddables-cli.md +79 -39
- package/.prompts/short-rule-body.md +15 -0
- package/README.md +42 -0
- package/dist/auth/index.d.ts +27 -0
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +44 -0
- package/dist/auth/index.js.map +1 -1
- package/dist/cli.js +29 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -253
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/login.d.ts +2 -0
- package/dist/commands/login.d.ts.map +1 -1
- package/dist/commands/login.js +41 -1
- package/dist/commands/login.js.map +1 -1
- package/dist/commands/provide-otp.d.ts +11 -0
- package/dist/commands/provide-otp.d.ts.map +1 -0
- package/dist/commands/provide-otp.js +102 -0
- package/dist/commands/provide-otp.js.map +1 -0
- package/dist/commands/update-project-files.d.ts +8 -0
- package/dist/commands/update-project-files.d.ts.map +1 -0
- package/dist/commands/update-project-files.js +236 -0
- package/dist/commands/update-project-files.js.map +1 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +16 -0
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/compiler/parsePage.js +14 -9
- package/dist/compiler/parsePage.js.map +1 -1
- package/dist/compiler/reverse.d.ts.map +1 -1
- package/dist/compiler/reverse.js +17 -8
- package/dist/compiler/reverse.js.map +1 -1
- package/dist/components/primitives/CustomHTML.d.ts +2 -1
- package/dist/components/primitives/CustomHTML.d.ts.map +1 -1
- package/dist/components/primitives/CustomHTML.js +11 -2
- package/dist/components/primitives/CustomHTML.js.map +1 -1
- package/dist/helpers/json.d.ts.map +1 -1
- package/dist/helpers/json.js +132 -17
- package/dist/helpers/json.js.map +1 -1
- package/dist/prompts/branches.d.ts.map +1 -1
- package/dist/prompts/branches.js +2 -0
- package/dist/prompts/branches.js.map +1 -1
- package/dist/types-builder.d.ts +5 -2
- package/dist/types-builder.d.ts.map +1 -1
- package/dist/workbench/AutofillPanel.d.ts.map +1 -1
- package/dist/workbench/AutofillPanel.js +52 -14
- package/dist/workbench/AutofillPanel.js.map +1 -1
- package/package.json +1 -1
package/dist/commands/init.js
CHANGED
|
@@ -1,41 +1,11 @@
|
|
|
1
|
-
import fs from 'node:fs';
|
|
2
|
-
import path from 'node:path';
|
|
3
|
-
import { fileURLToPath } from 'node:url';
|
|
4
1
|
import * as Sentry from '@sentry/node';
|
|
5
2
|
import pc from 'picocolors';
|
|
6
3
|
import { writeProjectConfig, readProjectConfig } from '../config/index.js';
|
|
7
4
|
import { isLoggedIn } from '../auth/index.js';
|
|
8
5
|
import { captureException, createLogger, exit } from '../logger.js';
|
|
9
6
|
import { promptForProject } from '../prompts/index.js';
|
|
10
|
-
import { writeTypeStubs } from '../helpers/typeStubs.js';
|
|
11
|
-
import { renderDefaultTagStylesCss } from '../constants/defaultTagStylesV4.js';
|
|
12
7
|
import * as stdout from '../stdout.js';
|
|
13
|
-
|
|
14
|
-
const __dirname = path.dirname(__filename);
|
|
15
|
-
/** Strip the first YAML frontmatter block (--- ... ---) from content. Returns body only, or full content if no frontmatter. */
|
|
16
|
-
function stripFrontmatter(content) {
|
|
17
|
-
const open = content.startsWith('---\n');
|
|
18
|
-
if (!open)
|
|
19
|
-
return content;
|
|
20
|
-
const afterFirst = content.indexOf('\n---', 4);
|
|
21
|
-
if (afterFirst === -1)
|
|
22
|
-
return content;
|
|
23
|
-
return content.slice(afterFirst + 4).replace(/^\n/, '');
|
|
24
|
-
}
|
|
25
|
-
/** Recursively copy a directory, creating target dirs as needed. */
|
|
26
|
-
function copyDirSync(src, dest) {
|
|
27
|
-
fs.mkdirSync(dest, { recursive: true });
|
|
28
|
-
for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
|
|
29
|
-
const srcPath = path.join(src, entry.name);
|
|
30
|
-
const destPath = path.join(dest, entry.name);
|
|
31
|
-
if (entry.isDirectory()) {
|
|
32
|
-
copyDirSync(srcPath, destPath);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
fs.copyFileSync(srcPath, destPath);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
8
|
+
import { updateProjectFiles } from './update-project-files.js';
|
|
39
9
|
export async function runInit(opts) {
|
|
40
10
|
const logger = createLogger('runInit');
|
|
41
11
|
logger.info('init started');
|
|
@@ -61,8 +31,6 @@ export async function runInit(opts) {
|
|
|
61
31
|
}
|
|
62
32
|
async function runInitInner(opts) {
|
|
63
33
|
const cwd = process.cwd();
|
|
64
|
-
const gitignorePath = path.join(cwd, '.gitignore');
|
|
65
|
-
const embeddablesDir = path.join(cwd, 'embeddables');
|
|
66
34
|
stdout.header(`${stdout.symbols.rocket} Your Embeddables Project is Ready!`);
|
|
67
35
|
const existingConfig = readProjectConfig();
|
|
68
36
|
// Step 1: Get Embeddables project
|
|
@@ -125,226 +93,8 @@ async function runInitInner(opts) {
|
|
|
125
93
|
infoParts.unshift(['Project Title', selectedProjectTitle]);
|
|
126
94
|
stdout.infoBox(infoParts.map(([k, v]) => `${k}: ${v}`).join(' · '));
|
|
127
95
|
}
|
|
128
|
-
//
|
|
129
|
-
|
|
130
|
-
const embeddablesBlock = `# Embeddables\n${gitignoreEntries.join('\n')}\n`;
|
|
131
|
-
let existingGitignore = '';
|
|
132
|
-
if (fs.existsSync(gitignorePath)) {
|
|
133
|
-
existingGitignore = fs.readFileSync(gitignorePath, 'utf8');
|
|
134
|
-
}
|
|
135
|
-
const embeddablesSectionRegex = /# Embeddables\n(?:[^\n]*\n)*?(?=\n#|\n\n|$)/;
|
|
136
|
-
if (embeddablesSectionRegex.test(existingGitignore)) {
|
|
137
|
-
const updated = existingGitignore.replace(embeddablesSectionRegex, embeddablesBlock);
|
|
138
|
-
if (updated !== existingGitignore) {
|
|
139
|
-
fs.writeFileSync(gitignorePath, updated, 'utf8');
|
|
140
|
-
stdout.success('Updated .gitignore');
|
|
141
|
-
}
|
|
142
|
-
else {
|
|
143
|
-
stdout.dim(' ✓ .gitignore already configured');
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
const separator = existingGitignore && !existingGitignore.endsWith('\n') ? '\n' : '';
|
|
148
|
-
const content = existingGitignore
|
|
149
|
-
? `${existingGitignore}${separator}\n${embeddablesBlock}`
|
|
150
|
-
: embeddablesBlock;
|
|
151
|
-
fs.writeFileSync(gitignorePath, content, 'utf8');
|
|
152
|
-
stdout.success(existingGitignore ? 'Updated .gitignore' : 'Created .gitignore');
|
|
153
|
-
}
|
|
154
|
-
// Create embeddables directory
|
|
155
|
-
if (!fs.existsSync(embeddablesDir)) {
|
|
156
|
-
fs.mkdirSync(embeddablesDir, { recursive: true });
|
|
157
|
-
stdout.success('Created embeddables/ directory');
|
|
158
|
-
}
|
|
159
|
-
else {
|
|
160
|
-
stdout.dim(' ✓ embeddables/ directory exists');
|
|
161
|
-
}
|
|
162
|
-
// Create default-styles.css in project root for standard tag defaults
|
|
163
|
-
const defaultStylesPath = path.join(cwd, 'default-styles.css');
|
|
164
|
-
if (!fs.existsSync(defaultStylesPath)) {
|
|
165
|
-
fs.writeFileSync(defaultStylesPath, renderDefaultTagStylesCss(), 'utf8');
|
|
166
|
-
stdout.success('Created default-styles.css');
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
stdout.dim(' ✓ default-styles.css already exists');
|
|
170
|
-
}
|
|
171
|
-
// Remove old .claudefiles folder (replaced by .cursor/ and .claude/)
|
|
172
|
-
const claudefilesDir = path.join(cwd, '.claudefiles');
|
|
173
|
-
if (fs.existsSync(claudefilesDir)) {
|
|
174
|
-
fs.rmSync(claudefilesDir, { recursive: true });
|
|
175
|
-
stdout.success('Removed old .claudefiles/');
|
|
176
|
-
}
|
|
177
|
-
// Inject .cursor/ and .claude/ from source .prompts/embeddables-cli.md (or copy if pre-built dirs exist)
|
|
178
|
-
const packageRoot = path.resolve(__dirname, '..', '..');
|
|
179
|
-
const promptsSource = path.join(packageRoot, '.prompts', 'embeddables-cli.md');
|
|
180
|
-
const sourceCursorDir = path.join(packageRoot, '.cursor');
|
|
181
|
-
const sourceClaudeDir = path.join(packageRoot, '.claude');
|
|
182
|
-
const sourceAgentDir = path.join(packageRoot, '.agent');
|
|
183
|
-
if (fs.existsSync(promptsSource)) {
|
|
184
|
-
const content = fs.readFileSync(promptsSource, 'utf8');
|
|
185
|
-
const cursorFrontmatter = `---
|
|
186
|
-
globs:
|
|
187
|
-
alwaysApply: true
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
`;
|
|
191
|
-
const antigravityFrontmatter = `---
|
|
192
|
-
globs:
|
|
193
|
-
alwaysOn: true
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
`;
|
|
197
|
-
const claudeIntro = `# Embeddables project (Claude Code)
|
|
198
|
-
|
|
199
|
-
This is an Embeddables project managed by the Embeddables CLI. The CLI transforms Embeddable JSON into a local file structure for development, then compiles it back to JSON for saving.
|
|
200
|
-
|
|
201
|
-
For full context when editing embeddables (pages, components, styles, actions, computed fields), see:
|
|
202
|
-
|
|
203
|
-
- **.claude/embeddables-cli.md** — Embeddables CLI structure, types, file layout, and conventions.
|
|
204
|
-
|
|
205
|
-
All TypeScript types are in \`.types/\` (generated by \`embeddables init\`). Use \`embeddables dev\` to run the dev server and \`embeddables pull\` / \`embeddables save\` to sync with the project.
|
|
206
|
-
`;
|
|
207
|
-
const codexIntro = `# Embeddables project (Codex)
|
|
208
|
-
|
|
209
|
-
This is an Embeddables project managed by the Embeddables CLI. The CLI transforms Embeddable JSON into a local file structure for development, then compiles it back to JSON for saving.
|
|
210
|
-
|
|
211
|
-
All TypeScript types are in \`.types/\` (generated by \`embeddables init\`). Use \`embeddables dev\` to run the dev server and \`embeddables pull\` / \`embeddables save\` to sync with the project.
|
|
212
|
-
|
|
213
|
-
`;
|
|
214
|
-
const cursorRulesDir = path.join(cwd, '.cursor', 'rules');
|
|
215
|
-
const claudeDir = path.join(cwd, '.claude');
|
|
216
|
-
const agentRulesDir = path.join(cwd, '.agent', 'rules');
|
|
217
|
-
fs.mkdirSync(cursorRulesDir, { recursive: true });
|
|
218
|
-
fs.mkdirSync(claudeDir, { recursive: true });
|
|
219
|
-
fs.mkdirSync(agentRulesDir, { recursive: true });
|
|
220
|
-
fs.writeFileSync(path.join(cursorRulesDir, 'embeddables-cli.md'), cursorFrontmatter + content, 'utf8');
|
|
221
|
-
fs.writeFileSync(path.join(claudeDir, 'CLAUDE.md'), claudeIntro, 'utf8');
|
|
222
|
-
fs.writeFileSync(path.join(claudeDir, 'embeddables-cli.md'), content, 'utf8');
|
|
223
|
-
fs.writeFileSync(path.join(cwd, 'AGENTS.md'), codexIntro + content, 'utf8');
|
|
224
|
-
fs.writeFileSync(path.join(agentRulesDir, 'embeddables-cli.md'), antigravityFrontmatter + stripFrontmatter(content), 'utf8');
|
|
225
|
-
stdout.success('Injected .cursor/ rules');
|
|
226
|
-
stdout.success('Injected .claude/');
|
|
227
|
-
stdout.success('Injected AGENTS.md (Codex)');
|
|
228
|
-
stdout.success('Injected .agent/ rules (Antigravity)');
|
|
229
|
-
}
|
|
230
|
-
else if (fs.existsSync(sourceCursorDir) || fs.existsSync(sourceClaudeDir) || fs.existsSync(sourceAgentDir)) {
|
|
231
|
-
if (fs.existsSync(sourceCursorDir)) {
|
|
232
|
-
copyDirSync(sourceCursorDir, path.join(cwd, '.cursor'));
|
|
233
|
-
stdout.success('Injected .cursor/ rules');
|
|
234
|
-
}
|
|
235
|
-
if (fs.existsSync(sourceClaudeDir)) {
|
|
236
|
-
copyDirSync(sourceClaudeDir, path.join(cwd, '.claude'));
|
|
237
|
-
stdout.success('Injected .claude/');
|
|
238
|
-
}
|
|
239
|
-
if (fs.existsSync(sourceAgentDir)) {
|
|
240
|
-
copyDirSync(sourceAgentDir, path.join(cwd, '.agent'));
|
|
241
|
-
stdout.success('Injected .agent/ rules (Antigravity)');
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// Create tsconfig.json for editor support (JSX, type checking)
|
|
245
|
-
const tsconfigPath = path.join(cwd, 'tsconfig.json');
|
|
246
|
-
if (!fs.existsSync(tsconfigPath)) {
|
|
247
|
-
const tsconfig = {
|
|
248
|
-
compilerOptions: {
|
|
249
|
-
target: 'esnext',
|
|
250
|
-
module: 'esnext',
|
|
251
|
-
moduleResolution: 'bundler',
|
|
252
|
-
jsx: 'react-jsx',
|
|
253
|
-
noEmit: true,
|
|
254
|
-
strict: false,
|
|
255
|
-
skipLibCheck: true,
|
|
256
|
-
esModuleInterop: true,
|
|
257
|
-
baseUrl: '.',
|
|
258
|
-
paths: {
|
|
259
|
-
'react/jsx-runtime': ['./.types/react-jsx-runtime.d.ts'],
|
|
260
|
-
'@embeddables/cli/components': ['./.types/components.d.ts'],
|
|
261
|
-
'@embeddables/cli/types': ['./.types/types.d.ts'],
|
|
262
|
-
},
|
|
263
|
-
},
|
|
264
|
-
include: ['embeddables'],
|
|
265
|
-
};
|
|
266
|
-
fs.writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2) + '\n', 'utf8');
|
|
267
|
-
stdout.success('Created tsconfig.json');
|
|
268
|
-
}
|
|
269
|
-
else {
|
|
270
|
-
stdout.dim(' ✓ tsconfig.json already exists');
|
|
271
|
-
}
|
|
272
|
-
// Migrate .types from old location (embeddables/.types/) to project root (.types/)
|
|
273
|
-
const oldTypesDir = path.join(embeddablesDir, '.types');
|
|
274
|
-
if (fs.existsSync(oldTypesDir)) {
|
|
275
|
-
fs.rmSync(oldTypesDir, { recursive: true });
|
|
276
|
-
stdout.success('Removed old embeddables/.types/');
|
|
277
|
-
}
|
|
278
|
-
// Ensure tsconfig has baseUrl and paths for type resolution
|
|
279
|
-
if (fs.existsSync(tsconfigPath)) {
|
|
280
|
-
let tsconfigContent = fs.readFileSync(tsconfigPath, 'utf8');
|
|
281
|
-
let updated = false;
|
|
282
|
-
// Migrate old embeddables/.types/ location → .types/
|
|
283
|
-
if (tsconfigContent.includes('./embeddables/.types/')) {
|
|
284
|
-
tsconfigContent = tsconfigContent.replaceAll('./embeddables/.types/', './.types/');
|
|
285
|
-
updated = true;
|
|
286
|
-
}
|
|
287
|
-
// Migrate old .types/types-builder → .types/types
|
|
288
|
-
if (tsconfigContent.includes('./.types/types-builder')) {
|
|
289
|
-
tsconfigContent = tsconfigContent.replace(/\.\/\.types\/types-builder(\.d\.ts)?"/g, './.types/types.d.ts"');
|
|
290
|
-
updated = true;
|
|
291
|
-
}
|
|
292
|
-
// Migrate paths without .d.ts extension → with .d.ts
|
|
293
|
-
const extensionless = [
|
|
294
|
-
['./.types/react-jsx-runtime"', './.types/react-jsx-runtime.d.ts"'],
|
|
295
|
-
['./.types/components"', './.types/components.d.ts"'],
|
|
296
|
-
['./.types/types"', './.types/types.d.ts"'],
|
|
297
|
-
];
|
|
298
|
-
for (const [old, replacement] of extensionless) {
|
|
299
|
-
if (tsconfigContent.includes(old) && !tsconfigContent.includes(replacement)) {
|
|
300
|
-
tsconfigContent = tsconfigContent.replaceAll(old, replacement);
|
|
301
|
-
updated = true;
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
// Add baseUrl and paths if missing entirely
|
|
305
|
-
try {
|
|
306
|
-
const tsconfig = JSON.parse(tsconfigContent);
|
|
307
|
-
const co = tsconfig.compilerOptions ?? {};
|
|
308
|
-
let coUpdated = false;
|
|
309
|
-
if (!co.baseUrl) {
|
|
310
|
-
co.baseUrl = '.';
|
|
311
|
-
coUpdated = true;
|
|
312
|
-
}
|
|
313
|
-
const requiredPaths = {
|
|
314
|
-
'react/jsx-runtime': ['./.types/react-jsx-runtime.d.ts'],
|
|
315
|
-
'@embeddables/cli/components': ['./.types/components.d.ts'],
|
|
316
|
-
'@embeddables/cli/types': ['./.types/types.d.ts'],
|
|
317
|
-
};
|
|
318
|
-
if (!co.paths)
|
|
319
|
-
co.paths = {};
|
|
320
|
-
for (const [key, value] of Object.entries(requiredPaths)) {
|
|
321
|
-
if (!co.paths[key]) {
|
|
322
|
-
co.paths[key] = value;
|
|
323
|
-
coUpdated = true;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
if (coUpdated) {
|
|
327
|
-
tsconfig.compilerOptions = co;
|
|
328
|
-
tsconfigContent = JSON.stringify(tsconfig, null, 2) + '\n';
|
|
329
|
-
updated = true;
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
catch {
|
|
333
|
-
// If tsconfig isn't valid JSON (e.g. has comments), fall through to string-based updates above
|
|
334
|
-
}
|
|
335
|
-
if (updated) {
|
|
336
|
-
fs.writeFileSync(tsconfigPath, tsconfigContent, 'utf8');
|
|
337
|
-
stdout.success('Updated tsconfig.json');
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
// Remove old .types/types-builder.d.ts (now named .types/types.d.ts)
|
|
341
|
-
const legacyTypesBuilderDts = path.join(cwd, '.types', 'types-builder.d.ts');
|
|
342
|
-
if (fs.existsSync(legacyTypesBuilderDts)) {
|
|
343
|
-
fs.rmSync(legacyTypesBuilderDts);
|
|
344
|
-
}
|
|
345
|
-
// Generate type declaration stubs for editor support (no npm install needed)
|
|
346
|
-
writeTypeStubs(cwd);
|
|
347
|
-
stdout.success('Generated type declarations');
|
|
96
|
+
// Update all project scaffold files (gitignore, AI rules, type stubs, tsconfig, etc.)
|
|
97
|
+
updateProjectFiles(cwd);
|
|
348
98
|
// Next steps in a compact box
|
|
349
99
|
stdout.gap();
|
|
350
100
|
const nextStepsLines = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
export interface RunLoginOptions {
|
|
3
3
|
/** When set, skip OTP flow and store this token directly (non-interactive). */
|
|
4
4
|
token?: string;
|
|
5
|
+
/** When set, send OTP to this email and exit (non-interactive mode, step 1 of 2). */
|
|
6
|
+
email?: string;
|
|
5
7
|
}
|
|
6
8
|
export declare function runLogin(opts?: RunLoginOptions): Promise<void>;
|
|
7
9
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAgBA,qCAAqC;AACrC,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qFAAqF;IACrF,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAmBD,wBAAsB,QAAQ,CAAC,IAAI,GAAE,eAAoB,iBAqOxD"}
|
package/dist/commands/login.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as Sentry from '@sentry/node';
|
|
2
|
-
import { getSupabaseClient, writeAuthConfig, readAuthConfig, SUPABASE_URL, SUPABASE_ANON_KEY, } from '../auth/index.js';
|
|
2
|
+
import { getSupabaseClient, writeAuthConfig, readAuthConfig, writePendingOtpState, SUPABASE_URL, SUPABASE_ANON_KEY, } from '../auth/index.js';
|
|
3
3
|
import { prompt } from '../helpers/prompt.js';
|
|
4
4
|
import { captureException, createLogger, exit } from '../logger.js';
|
|
5
5
|
import { setSentryContext } from '../sentry-context.js';
|
|
@@ -54,6 +54,46 @@ export async function runLogin(opts = {}) {
|
|
|
54
54
|
logger.info('login complete (token)');
|
|
55
55
|
return;
|
|
56
56
|
}
|
|
57
|
+
// Non-interactive email login: send OTP and save pending state
|
|
58
|
+
if (opts.email) {
|
|
59
|
+
const email = opts.email.trim();
|
|
60
|
+
if (!email) {
|
|
61
|
+
stdout.error('Email cannot be empty.');
|
|
62
|
+
await exit(1);
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
// Validate email format
|
|
66
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
|
67
|
+
stdout.error('Please enter a valid email address.');
|
|
68
|
+
await exit(1);
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
const supabase = getSupabaseClient();
|
|
72
|
+
// Send OTP code
|
|
73
|
+
const sendSpinner = stdout.spinner('Sending verification code…');
|
|
74
|
+
const { error: sendError } = await withSpan('auth.send_otp', 'cli.auth', () => supabase.auth.signInWithOtp({ email }));
|
|
75
|
+
if (sendError) {
|
|
76
|
+
sendSpinner.fail('Failed to send verification code');
|
|
77
|
+
stdout.error(`Error sending verification code: ${sendError.message}`);
|
|
78
|
+
logger.error('failed to send OTP', { message: sendError.message });
|
|
79
|
+
await exit(1);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
// Save pending OTP state
|
|
83
|
+
const pendingState = {
|
|
84
|
+
email,
|
|
85
|
+
requestedAt: Math.floor(Date.now() / 1000),
|
|
86
|
+
};
|
|
87
|
+
writePendingOtpState(pendingState);
|
|
88
|
+
sendSpinner.succeed('Verification code sent!');
|
|
89
|
+
stdout.gap();
|
|
90
|
+
stdout.success(`OTP sent to ${email}`);
|
|
91
|
+
stdout.dim('Use "embeddables provide-otp --code <code>" to complete login.');
|
|
92
|
+
stdout.dim('The code will expire in 10 minutes.');
|
|
93
|
+
stdout.gap();
|
|
94
|
+
logger.info('OTP sent, pending verification');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
57
97
|
const supabase = getSupabaseClient();
|
|
58
98
|
// Check if already logged in
|
|
59
99
|
const existingConfig = readAuthConfig();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAEtC,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,GAClB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAUxC;;;GAGG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAC9B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC7D,CAAA;QACrB,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB,EAAE;IACvD,MAAM,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAA;IACvC,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IACpC,IAAI,CAAC;QACH,8DAA8D;QAC9D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBACtC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;gBACb,OAAM;YACR,CAAC;YAED,MAAM,SAAS,GACb,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,IAAI,CAAA,CAAC,mBAAmB;YAE/F,MAAM,MAAM,GAAG;gBACb,YAAY,EAAE,KAAK;gBACnB,aAAa,EAAE,KAAK,EAAE,wDAAwD;gBAC9E,UAAU,EAAE,SAAS;gBACrB,YAAY,EAAE,YAAY;gBAC1B,iBAAiB,EAAE,iBAAiB;aACrC,CAAA;YAED,eAAe,CAAC,MAAM,CAAC,CAAA;YACvB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;YAC9C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE;gBAChF,IAAI,EAAE,aAAa;aACpB,CAAC,CAAA;YACF,MAAM,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAA;YACvC,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;YACvD,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;YAC7D,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,MAAM,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;YACrC,OAAM;QACR,CAAC;QAED,+DAA+D;QAC/D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;YAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAA;gBACtC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;gBACb,OAAM;YACR,CAAC;YAED,wBAAwB;YACxB,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAA;gBACnD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;gBACb,OAAM;YACR,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;YAEpC,gBAAgB;YAChB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAA;YAChE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,CAC5E,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CACvC,CAAA;YAED,IAAI,SAAS,EAAE,CAAC;gBACd,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;gBACpD,MAAM,CAAC,KAAK,CAAC,oCAAoC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;gBACrE,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;gBAClE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;gBACb,OAAM;YACR,CAAC;YAED,yBAAyB;YACzB,MAAM,YAAY,GAAG;gBACnB,KAAK;gBACL,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;aAC3C,CAAA;YACD,oBAAoB,CAAC,YAAY,CAAC,CAAA;YAElC,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;YAC9C,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,MAAM,CAAC,OAAO,CAAC,eAAe,KAAK,EAAE,CAAC,CAAA;YACtC,MAAM,CAAC,GAAG,CAAC,gEAAgE,CAAC,CAAA;YAC5E,MAAM,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAA;YACjD,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,MAAM,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;YAC7C,OAAM;QACR,CAAC;QAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;QAEpC,6BAA6B;QAC7B,MAAM,cAAc,GAAG,cAAc,EAAE,CAAA;QACvC,IAAI,cAAc,EAAE,YAAY,EAAE,CAAC;YACjC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC;gBACjC,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE,yDAAyD;gBAClE,OAAO,EAAE,KAAK;aACf,CAAC,CAAA;YAEF,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;gBAC9B,OAAM;YACR,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC;YAC7B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,2BAA2B;YACpC,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK;oBAAE,OAAO,mBAAmB,CAAA;gBACtC,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,OAAO,oCAAoC,CAAA;gBAC7C,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAED,gBAAgB;QAChB,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAA;QAChE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,UAAU,EAAE,GAAG,EAAE,CAC5E,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,CACvC,CAAA;QAED,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;YACpD,MAAM,CAAC,KAAK,CAAC,oCAAoC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YACrE,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAA;YAClE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QAED,WAAW,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAA;QAC9C,MAAM,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAA;QAC5C,MAAM,CAAC,GAAG,EAAE,CAAA;QAEZ,sBAAsB;QACtB,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC;YAC5B,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,8CAA8C;YACvD,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK;oBAAE,OAAO,+BAA+B,CAAA;gBAClD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;oBAClC,OAAO,mCAAmC,CAAA;gBAC5C,CAAC;gBACD,OAAO,IAAI,CAAA;YACb,CAAC;SACF,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QAED,kBAAkB;QAClB,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAA;QACvD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,GAAG,EAAE,CACtF,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACtB,KAAK;YACL,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE;YAClB,IAAI,EAAE,OAAO;SACd,CAAC,CACH,CAAA;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;YACzC,MAAM,CAAC,KAAK,CAAC,yBAAyB,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;YAC5D,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC,CAAA;YACtE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAA;YACzC,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;YACrD,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAA;YACrD,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;YACb,OAAM;QACR,CAAC;QAED,oEAAoE;QACpE,MAAM,MAAM,GAAG;YACb,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa;YACzC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI;YAC3E,YAAY,EAAE,YAAY;YAC1B,iBAAiB,EAAE,iBAAiB;YACpC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE;YACtB,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK;SAC7B,CAAA;QAED,eAAe,CAAC,MAAM,CAAC,CAAA;QAEvB,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC;YAClB,gBAAgB,CAAC;gBACf,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE;aAC3D,CAAC,CAAA;QACJ,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAA;QAC9C,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,oBAAoB,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE;YAChF,IAAI,EAAE,aAAa;SACpB,CAAC,CAAA;QAEF,aAAa,CAAC,OAAO,CAAC,cAAc,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QACpE,MAAM,CAAC,GAAG,EAAE,CAAA;QACZ,MAAM,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAA;QACvD,MAAM,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAA;QAC7D,MAAM,CAAC,GAAG,EAAE,CAAA;QACZ,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAC1D,MAAM,CAAC,GAAG,EAAE,CAAA;YACZ,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;YAC9B,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAA;YAC3C,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;YACvC,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YACtE,MAAM,CAAC,KAAK,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAA;YAC9C,MAAM,CAAC,KAAK,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,CAAC,CAAA;YACzC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAA;QACf,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Options for the provide-otp command. */
|
|
2
|
+
export interface RunProvideOtpOptions {
|
|
3
|
+
/** The OTP code received via email (required). */
|
|
4
|
+
code: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Verifies an OTP code and completes the non-interactive login flow.
|
|
8
|
+
* Requires a pending OTP request initiated by `embeddables login --email`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function runProvideOtp(opts: RunProvideOtpOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=provide-otp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provide-otp.d.ts","sourceRoot":"","sources":["../../src/commands/provide-otp.ts"],"names":[],"mappings":"AAeA,2CAA2C;AAC3C,MAAM,WAAW,oBAAoB;IACnC,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,iBA0G7D"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import * as Sentry from '@sentry/node';
|
|
2
|
+
import { getSupabaseClient, writeAuthConfig, readPendingOtpState, deletePendingOtpState, hasPendingOtp, SUPABASE_URL, SUPABASE_ANON_KEY, } from '../auth/index.js';
|
|
3
|
+
import { captureException, createLogger, exit } from '../logger.js';
|
|
4
|
+
import { setSentryContext } from '../sentry-context.js';
|
|
5
|
+
import * as stdout from '../stdout.js';
|
|
6
|
+
import { withSpan } from '../tracing.js';
|
|
7
|
+
/**
|
|
8
|
+
* Verifies an OTP code and completes the non-interactive login flow.
|
|
9
|
+
* Requires a pending OTP request initiated by `embeddables login --email`.
|
|
10
|
+
*/
|
|
11
|
+
export async function runProvideOtp(opts) {
|
|
12
|
+
const logger = createLogger('runProvideOtp');
|
|
13
|
+
const otpStart = performance.now();
|
|
14
|
+
try {
|
|
15
|
+
// Validate code is provided
|
|
16
|
+
if (!opts.code) {
|
|
17
|
+
stdout.error('OTP code is required.');
|
|
18
|
+
stdout.dim('Usage: embeddables provide-otp --code <code>');
|
|
19
|
+
await exit(1);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
const code = opts.code.trim();
|
|
23
|
+
// Validate code format (6 digits)
|
|
24
|
+
if (!/^\d{6}$/.test(code)) {
|
|
25
|
+
stdout.error('Invalid OTP code format. Expected a 6-digit code.');
|
|
26
|
+
await exit(1);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Check for pending OTP request
|
|
30
|
+
if (!hasPendingOtp()) {
|
|
31
|
+
stdout.error('No pending OTP request found or the request has expired.');
|
|
32
|
+
stdout.dim('First run: embeddables login --email <your-email>');
|
|
33
|
+
await exit(1);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const pendingState = readPendingOtpState();
|
|
37
|
+
if (!pendingState) {
|
|
38
|
+
stdout.error('Failed to read pending OTP state.');
|
|
39
|
+
await exit(1);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const supabase = getSupabaseClient();
|
|
43
|
+
// Verify OTP code
|
|
44
|
+
const verifySpinner = stdout.spinner('Verifying code…');
|
|
45
|
+
const { data, error: verifyError } = await withSpan('auth.verify_otp', 'cli.auth', () => supabase.auth.verifyOtp({
|
|
46
|
+
email: pendingState.email,
|
|
47
|
+
token: code,
|
|
48
|
+
type: 'email',
|
|
49
|
+
}));
|
|
50
|
+
if (verifyError) {
|
|
51
|
+
verifySpinner.fail('Verification failed');
|
|
52
|
+
stdout.error(`Error verifying code: ${verifyError.message}`);
|
|
53
|
+
logger.error('failed to verify OTP', { message: verifyError.message });
|
|
54
|
+
await exit(1);
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (!data.session) {
|
|
58
|
+
verifySpinner.fail('No session returned');
|
|
59
|
+
stdout.error('No session returned from verification');
|
|
60
|
+
logger.error('no session returned from verification');
|
|
61
|
+
await exit(1);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
// Store auth config (including cached user info for Sentry context)
|
|
65
|
+
const config = {
|
|
66
|
+
access_token: data.session.access_token,
|
|
67
|
+
refresh_token: data.session.refresh_token,
|
|
68
|
+
expires_at: data.session.expires_at || Math.floor(Date.now() / 1000) + 3600,
|
|
69
|
+
supabase_url: SUPABASE_URL,
|
|
70
|
+
supabase_anon_key: SUPABASE_ANON_KEY,
|
|
71
|
+
user_id: data.user?.id,
|
|
72
|
+
user_email: data.user?.email,
|
|
73
|
+
};
|
|
74
|
+
writeAuthConfig(config);
|
|
75
|
+
// Clean up pending OTP state
|
|
76
|
+
deletePendingOtpState();
|
|
77
|
+
if (data.user?.id) {
|
|
78
|
+
setSentryContext({
|
|
79
|
+
user: { id: data.user.id, email: data.user.email ?? null },
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
Sentry.metrics.count('cli.provide_otp.completed', 1);
|
|
83
|
+
Sentry.metrics.distribution('cli.provide_otp.duration', performance.now() - otpStart, {
|
|
84
|
+
unit: 'millisecond',
|
|
85
|
+
});
|
|
86
|
+
verifySpinner.succeed(`Logged in! ${stdout.randomMessage('login')}`);
|
|
87
|
+
stdout.gap();
|
|
88
|
+
stdout.dim('The Embeddables CLI is currently in beta.');
|
|
89
|
+
stdout.dim('Docs: https://docs.embeddables.com/cli/overview');
|
|
90
|
+
stdout.gap();
|
|
91
|
+
logger.info('OTP verification complete');
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
Sentry.metrics.count('cli.provide_otp.failed', 1);
|
|
95
|
+
captureException(error, 'OTP verification failed');
|
|
96
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
97
|
+
stdout.error(`Error during OTP verification: ${message}`);
|
|
98
|
+
logger.error('OTP verification failed', { message });
|
|
99
|
+
await exit(1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=provide-otp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provide-otp.js","sourceRoot":"","sources":["../../src/commands/provide-otp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Updates all project scaffold files (gitignore, AI/editor rules, type stubs, tsconfig, etc.)
|
|
3
|
+
* without touching project configuration (embeddables.json).
|
|
4
|
+
*
|
|
5
|
+
* Called by both `init` (full project setup) and `upgrade` (refresh files after CLI update).
|
|
6
|
+
*/
|
|
7
|
+
export declare function updateProjectFiles(cwd: string): void;
|
|
8
|
+
//# sourceMappingURL=update-project-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-project-files.d.ts","sourceRoot":"","sources":["../../src/commands/update-project-files.ts"],"names":[],"mappings":"AAoBA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAkPpD"}
|