nivii 0.3.1 → 0.3.3

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 (57) hide show
  1. package/README.md +142 -215
  2. package/dist/cli.js +48 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/fullstack.d.ts +12 -0
  5. package/dist/commands/fullstack.d.ts.map +1 -0
  6. package/dist/commands/fullstack.js +173 -0
  7. package/dist/commands/fullstack.js.map +1 -0
  8. package/dist/commands/pro.d.ts +2 -0
  9. package/dist/commands/pro.d.ts.map +1 -0
  10. package/dist/commands/pro.js +174 -0
  11. package/dist/commands/pro.js.map +1 -0
  12. package/dist/commands/share.d.ts.map +1 -1
  13. package/dist/commands/share.js +5 -4
  14. package/dist/commands/share.js.map +1 -1
  15. package/dist/core/backend.d.ts +26 -0
  16. package/dist/core/backend.d.ts.map +1 -0
  17. package/dist/core/backend.js +185 -0
  18. package/dist/core/backend.js.map +1 -0
  19. package/dist/core/env.d.ts +27 -0
  20. package/dist/core/env.d.ts.map +1 -0
  21. package/dist/core/env.js +164 -0
  22. package/dist/core/env.js.map +1 -0
  23. package/dist/core/fullstack.d.ts +29 -0
  24. package/dist/core/fullstack.d.ts.map +1 -0
  25. package/dist/core/fullstack.js +126 -0
  26. package/dist/core/fullstack.js.map +1 -0
  27. package/dist/core/upload.d.ts +2 -1
  28. package/dist/core/upload.d.ts.map +1 -1
  29. package/dist/core/upload.js +2 -0
  30. package/dist/core/upload.js.map +1 -1
  31. package/dist/ui/spinner.d.ts +1 -0
  32. package/dist/ui/spinner.d.ts.map +1 -1
  33. package/dist/ui/spinner.js +3 -0
  34. package/dist/ui/spinner.js.map +1 -1
  35. package/dist/ui/welcome.d.ts.map +1 -1
  36. package/dist/ui/welcome.js +6 -3
  37. package/dist/ui/welcome.js.map +1 -1
  38. package/dist/utils/config.d.ts +3 -0
  39. package/dist/utils/config.d.ts.map +1 -1
  40. package/dist/utils/config.js.map +1 -1
  41. package/package.json +9 -4
  42. package/src/cli.ts +0 -118
  43. package/src/commands/config.ts +0 -33
  44. package/src/commands/share.ts +0 -159
  45. package/src/commands/whoami.ts +0 -16
  46. package/src/core/analytics.ts +0 -64
  47. package/src/core/build.ts +0 -46
  48. package/src/core/detect.ts +0 -159
  49. package/src/core/qr.ts +0 -30
  50. package/src/core/tunnel.ts +0 -70
  51. package/src/core/upload.ts +0 -95
  52. package/src/ui/spinner.ts +0 -36
  53. package/src/ui/theme.ts +0 -35
  54. package/src/ui/welcome.ts +0 -104
  55. package/src/utils/config.ts +0 -47
  56. package/src/utils/hash.ts +0 -11
  57. package/src/utils/zip.ts +0 -22
@@ -0,0 +1,173 @@
1
+ import path from 'path';
2
+ import chalk from 'chalk';
3
+ import { detectFullStack, printFullStackSummary, wireEnvVars } from '../core/fullstack.js';
4
+ import { runBuild } from '../core/build.js';
5
+ import { uploadDeploy } from '../core/upload.js';
6
+ import { deployBackend } from '../core/backend.js';
7
+ import { scanEnvFiles, filterBackendVars } from '../core/env.js';
8
+ import { generateSlug } from '../utils/hash.js';
9
+ import { loadConfig, updateConfig } from '../utils/config.js';
10
+ import { showQR, copyToClipboard, openBrowser } from '../core/qr.js';
11
+ import { showBanner } from '../ui/welcome.js';
12
+ import { step, success, warn } from '../ui/spinner.js';
13
+ import { theme } from '../ui/theme.js';
14
+ export async function runFullStack(opts) {
15
+ showBanner();
16
+ const cwd = opts.dir ? path.resolve(opts.dir) : process.cwd();
17
+ const config = loadConfig();
18
+ // ─── 1. Detect full-stack structure ────────────────────────────────────────
19
+ step('🔍', 'Scanning project structure…', cwd);
20
+ const project = detectFullStack(cwd);
21
+ printFullStackSummary(project);
22
+ const hasFrontend = !!project.frontend && !opts.skipFrontend;
23
+ const hasBackend = !!project.backend && !opts.skipBackend;
24
+ if (!hasFrontend && !hasBackend) {
25
+ console.log(chalk.red('\n ✗ Could not detect any frontend or backend project.\n'));
26
+ console.log(theme.muted(' Tip: run from your project root, or use --dir to specify a path'));
27
+ process.exit(1);
28
+ }
29
+ // ─── 2. Slug ───────────────────────────────────────────────────────────────
30
+ const slug = opts.slug || generateSlug(8);
31
+ const frontendUrl = `https://${slug}.nivii.app`;
32
+ const backendUrl = `https://nivii-${slug}-api.fly.dev`;
33
+ // ─── 3. Env vars ───────────────────────────────────────────────────────────
34
+ const envScanDir = project.frontend?.dir || project.backend?.dir || cwd;
35
+ const envResult = scanEnvFiles(envScanDir);
36
+ const backendEnv = filterBackendVars(envResult.vars);
37
+ if (envResult.vars.length > 0) {
38
+ step('🔒', 'Processing environment variables…');
39
+ console.log('');
40
+ const pub = envResult.vars.filter(v => v.isFrontendSafe);
41
+ const priv = envResult.vars.filter(v => !v.isFrontendSafe);
42
+ if (pub.length)
43
+ console.log(` ${chalk.green('✓')} ${pub.length} frontend-safe vars will be injected into build`);
44
+ if (priv.length)
45
+ console.log(` ${chalk.yellow('🔒')} ${priv.length} server-only vars will be sent to backend only`);
46
+ console.log('');
47
+ }
48
+ // ─── 4. Wire env: inject backend URL into frontend ─────────────────────────
49
+ if (hasFrontend && hasBackend && project.frontend) {
50
+ step('🔗', 'Wiring frontend → backend connection…');
51
+ wireEnvVars({
52
+ frontendDir: project.frontend.dir,
53
+ backendUrl,
54
+ frontendUrl,
55
+ existingVars: envResult.vars,
56
+ });
57
+ success(`Injected ${chalk.cyan('NEXT_PUBLIC_API_URL')} + ${chalk.cyan('VITE_API_URL')} → ${chalk.underline(backendUrl)}`);
58
+ }
59
+ // ─── 5. Build + deploy frontend ────────────────────────────────────────────
60
+ let frontendResult = null;
61
+ if (hasFrontend && project.frontend) {
62
+ console.log('');
63
+ console.log(chalk.hex('#A78BFA')(' ─── Frontend ───────────────────────────────'));
64
+ console.log('');
65
+ const { outputDir } = await runBuild({
66
+ cwd: project.frontend.dir,
67
+ detect: project.frontend.detect,
68
+ });
69
+ const fullOutputDir = path.resolve(project.frontend.dir, outputDir);
70
+ frontendResult = await uploadDeploy({
71
+ buildDir: fullOutputDir,
72
+ slug,
73
+ token: config.token,
74
+ expires: opts.expires || '48h',
75
+ });
76
+ console.log('');
77
+ success(`Frontend live → ${chalk.underline.cyan(frontendResult.url)}`);
78
+ }
79
+ // ─── 6. Deploy backend ─────────────────────────────────────────────────────
80
+ let backendResult = null;
81
+ if (hasBackend && project.backend) {
82
+ console.log('');
83
+ console.log(chalk.hex('#A78BFA')(' ─── Backend ────────────────────────────────'));
84
+ console.log('');
85
+ // Get Fly token
86
+ let flyToken = opts.flyToken || process.env.FLY_API_TOKEN || config.flyToken;
87
+ if (!flyToken) {
88
+ console.log(chalk.yellow('\n ⚠ No Fly.io token found.\n'));
89
+ console.log(' To deploy the backend, you need a free Fly.io account:');
90
+ console.log('');
91
+ console.log(` ${chalk.cyan('1.')} Sign up free: ${chalk.underline('https://fly.io/app/sign-up')}`);
92
+ console.log(` ${chalk.cyan('2.')} Install flyctl: ${chalk.dim('curl -L https://fly.io/install.sh | sh')}`);
93
+ console.log(` ${chalk.cyan('3.')} Login: ${chalk.dim('flyctl auth login')}`);
94
+ console.log(` ${chalk.cyan('4.')} Get token: ${chalk.dim('flyctl auth token')}`);
95
+ console.log(` ${chalk.cyan('5.')} Run: ${chalk.dim(`nivii fullstack --fly-token <token>`)}`);
96
+ console.log('');
97
+ console.log(theme.muted(' Or set FLY_API_TOKEN env var to skip this prompt.'));
98
+ console.log('');
99
+ // Still show frontend URL if deployed
100
+ if (frontendResult) {
101
+ showDeployCard({ frontendUrl: frontendResult.url, backendUrl: null, slug });
102
+ }
103
+ return;
104
+ }
105
+ try {
106
+ backendResult = await deployBackend({
107
+ projectDir: project.backend.dir,
108
+ slug,
109
+ envVars: backendEnv,
110
+ flyToken,
111
+ framework: project.backend.detect.framework,
112
+ port: project.backend.detect.port || 3000,
113
+ expiresIn: 48,
114
+ });
115
+ // Save fly token for future use
116
+ updateConfig({ flyToken });
117
+ success(`Backend live → ${chalk.underline.cyan(backendResult.url)}`);
118
+ }
119
+ catch (err) {
120
+ warn(`Backend deploy failed: ${err.message}`);
121
+ console.log(theme.muted(' Frontend is still live. Backend can be deployed separately.'));
122
+ }
123
+ }
124
+ // ─── 7. Final card ─────────────────────────────────────────────────────────
125
+ console.log('');
126
+ showDeployCard({
127
+ frontendUrl: frontendResult?.url || null,
128
+ backendUrl: backendResult?.url || null,
129
+ slug,
130
+ envInjected: hasFrontend && hasBackend,
131
+ });
132
+ // ─── 8. Save to config ─────────────────────────────────────────────────────
133
+ const deployments = config.deployments || [];
134
+ deployments.unshift({
135
+ slug,
136
+ url: frontendResult?.url || backendResult?.url,
137
+ createdAt: new Date().toISOString(),
138
+ expiresAt: frontendResult?.expiresAt,
139
+ type: 'fullstack',
140
+ });
141
+ updateConfig({ deployments: deployments.slice(0, 20) });
142
+ // ─── 9. Copy + QR + open ──────────────────────────────────────────────────
143
+ const primaryUrl = frontendResult?.url || backendResult?.url;
144
+ if (primaryUrl) {
145
+ const copied = await copyToClipboard(primaryUrl);
146
+ if (copied)
147
+ success('URL copied to clipboard');
148
+ if (!opts.noQr)
149
+ await showQR(primaryUrl);
150
+ if (!opts.noOpen)
151
+ await openBrowser(primaryUrl);
152
+ }
153
+ }
154
+ function showDeployCard(opts) {
155
+ const lines = [
156
+ theme.accent(' 🚀 Full-Stack Deployed!'),
157
+ '',
158
+ ];
159
+ if (opts.frontendUrl) {
160
+ lines.push(` ${theme.primary('Frontend:')} ${chalk.underline.cyan(opts.frontendUrl)}`);
161
+ }
162
+ if (opts.backendUrl) {
163
+ lines.push(` ${theme.primary('Backend: ')} ${chalk.underline.cyan(opts.backendUrl)}`);
164
+ }
165
+ if (opts.envInjected) {
166
+ lines.push('');
167
+ lines.push(` ${chalk.green('✓')} ${theme.muted('Env vars auto-wired — frontend knows backend URL')}`);
168
+ }
169
+ lines.push('');
170
+ lines.push(` ${theme.muted('Expires in 48 hours')}`);
171
+ console.log(theme.box(lines));
172
+ }
173
+ //# sourceMappingURL=fullstack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullstack.js","sourceRoot":"","sources":["../../src/commands/fullstack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runPro(subcommand?: string): Promise<void>;
2
+ //# sourceMappingURL=pro.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pro.d.ts","sourceRoot":"","sources":["../../src/commands/pro.ts"],"names":[],"mappings":"AAOA,wBAAsB,MAAM,CAAC,UAAU,CAAC,EAAE,MAAM,iBAc/C"}
@@ -0,0 +1,174 @@
1
+ import chalk from 'chalk';
2
+ import fetch from 'node-fetch';
3
+ import { API_BASE, loadConfig, updateConfig } from '../utils/config.js';
4
+ import { theme } from '../ui/theme.js';
5
+ import { success, warn } from '../ui/spinner.js';
6
+ import * as readline from 'readline';
7
+ export async function runPro(subcommand) {
8
+ if (!subcommand || subcommand === 'status') {
9
+ await showProStatus();
10
+ return;
11
+ }
12
+ if (subcommand === 'join') {
13
+ await joinPro();
14
+ return;
15
+ }
16
+ if (subcommand === 'verify') {
17
+ await verifyPro();
18
+ return;
19
+ }
20
+ console.log(theme.muted('\n Usage: nivii pro [join|verify|status]\n'));
21
+ }
22
+ async function showProStatus() {
23
+ const config = loadConfig();
24
+ // Check local first
25
+ if (config.proEmail) {
26
+ const res = await fetch(`${API_BASE}/pro/verify?email=${encodeURIComponent(config.proEmail)}`).catch(() => null);
27
+ if (res?.ok) {
28
+ const data = await res.json();
29
+ if (data.isPro) {
30
+ console.log('');
31
+ console.log(chalk.hex('#A78BFA')(' ⚡ Pro Status'));
32
+ console.log('');
33
+ console.log(` ${chalk.green('✓')} ${chalk.white('Active')} — You are Pro user #${chalk.cyan(data.position)}`);
34
+ console.log(` ${theme.muted('Email:')} ${chalk.white(config.proEmail)}`);
35
+ console.log(` ${theme.muted('Since:')} ${chalk.white(new Date(data.joinedAt).toLocaleDateString())}`);
36
+ console.log('');
37
+ console.log(` ${chalk.green('✓')} Custom slugs enabled`);
38
+ console.log(` ${chalk.green('✓')} Forever links enabled`);
39
+ console.log(` ${chalk.green('✓')} Live sync enabled`);
40
+ console.log(` ${chalk.green('✓')} Collab previews enabled`);
41
+ console.log(` ${chalk.green('✓')} Analytics enabled`);
42
+ console.log('');
43
+ return;
44
+ }
45
+ }
46
+ }
47
+ // Show slot counter
48
+ const res = await fetch(`${API_BASE}/pro/status`).catch(() => null);
49
+ console.log('');
50
+ console.log(chalk.hex('#A78BFA')(' ⚡ Nivii Pro — Early Access'));
51
+ console.log('');
52
+ if (res?.ok) {
53
+ const data = await res.json();
54
+ const bar = renderBar(data.taken, data.total);
55
+ console.log(` ${bar} ${chalk.white(data.taken + '/' + data.total)} spots taken`);
56
+ if (data.left > 0) {
57
+ console.log(` ${chalk.green(data.left + ' spots remaining')} — all Pro features free, forever`);
58
+ }
59
+ else {
60
+ console.log(` ${chalk.red('All spots taken')} — waitlist coming soon`);
61
+ }
62
+ }
63
+ console.log('');
64
+ console.log(` Run ${chalk.cyan('nivii pro join')} to claim your free Pro spot`);
65
+ console.log('');
66
+ }
67
+ async function joinPro() {
68
+ const config = loadConfig();
69
+ // Check if already pro
70
+ if (config.proEmail) {
71
+ const res = await fetch(`${API_BASE}/pro/verify?email=${encodeURIComponent(config.proEmail)}`).catch(() => null);
72
+ if (res?.ok) {
73
+ const data = await res.json();
74
+ if (data.isPro) {
75
+ console.log('');
76
+ success(`You're already Pro (#${data.position})! All features unlocked.`);
77
+ console.log('');
78
+ return;
79
+ }
80
+ }
81
+ }
82
+ // Check slots
83
+ const statusRes = await fetch(`${API_BASE}/pro/status`).catch(() => null);
84
+ if (statusRes?.ok) {
85
+ const status = await statusRes.json();
86
+ if (status.full) {
87
+ console.log('');
88
+ warn('All 50 early access spots are taken.');
89
+ console.log(` ${theme.muted('Email contact@nivii.app to get on the waitlist.')}`);
90
+ console.log('');
91
+ return;
92
+ }
93
+ console.log('');
94
+ console.log(chalk.hex('#A78BFA')(` ⚡ ${status.left} of ${status.total} spots remaining`));
95
+ }
96
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
97
+ const email = await new Promise(resolve => {
98
+ rl.question(chalk.white('\n Enter your email: '), resolve);
99
+ });
100
+ const name = await new Promise(resolve => {
101
+ rl.question(chalk.white(' Your name (optional): '), resolve);
102
+ });
103
+ rl.close();
104
+ if (!email || !email.includes('@')) {
105
+ warn('Invalid email address.');
106
+ return;
107
+ }
108
+ const spinner = (await import('../ui/spinner.js')).createSpinner('Claiming your Pro spot…');
109
+ spinner.start();
110
+ try {
111
+ const res = await fetch(`${API_BASE}/pro/signup`, {
112
+ method: 'POST',
113
+ headers: { 'Content-Type': 'application/json' },
114
+ body: JSON.stringify({ email: email.trim(), name: name.trim() }),
115
+ });
116
+ const data = await res.json();
117
+ spinner.stop();
118
+ if (data.success) {
119
+ updateConfig({ proEmail: email.trim(), plan: 'pro' });
120
+ console.log('');
121
+ console.log(theme.box([
122
+ chalk.hex('#10B981')(' 🎉 Welcome to Nivii Pro!'),
123
+ '',
124
+ ` ${theme.primary('Position:')} ${chalk.cyan('#' + data.position + ' of 50')}`,
125
+ ` ${theme.primary('Email:')} ${chalk.white(email.trim())}`,
126
+ '',
127
+ ` ${chalk.green('✓')} Custom slugs — ${chalk.dim('nivii share --slug my-name')}`,
128
+ ` ${chalk.green('✓')} Forever links — ${chalk.dim('--expires never')}`,
129
+ ` ${chalk.green('✓')} Live sync — ${chalk.dim('--live')}`,
130
+ ` ${chalk.green('✓')} Collab previews — ${chalk.dim('--collab')}`,
131
+ '',
132
+ ` ${theme.muted('Slots left: ' + data.slotsLeft)}`,
133
+ ]));
134
+ console.log('');
135
+ }
136
+ else {
137
+ warn(data.message || 'Something went wrong.');
138
+ }
139
+ }
140
+ catch (err) {
141
+ spinner.fail('Failed to connect');
142
+ throw err;
143
+ }
144
+ }
145
+ async function verifyPro() {
146
+ const config = loadConfig();
147
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
148
+ const email = await new Promise(resolve => {
149
+ rl.question(chalk.white('\n Enter your email to verify: '), resolve);
150
+ });
151
+ rl.close();
152
+ const res = await fetch(`${API_BASE}/pro/verify?email=${encodeURIComponent(email.trim())}`).catch(() => null);
153
+ if (!res?.ok) {
154
+ warn('Could not connect.');
155
+ return;
156
+ }
157
+ const data = await res.json();
158
+ console.log('');
159
+ if (data.isPro) {
160
+ updateConfig({ proEmail: email.trim(), plan: 'pro' });
161
+ success(`Verified! You're Pro user #${data.position} on this machine.`);
162
+ }
163
+ else {
164
+ warn('Email not found in Pro list. Run: nivii pro join');
165
+ }
166
+ console.log('');
167
+ }
168
+ function renderBar(taken, total) {
169
+ const width = 20;
170
+ const filled = Math.round((taken / total) * width);
171
+ const bar = '█'.repeat(filled) + '░'.repeat(width - filled);
172
+ return chalk.hex('#7C3AED')(bar);
173
+ }
174
+ //# sourceMappingURL=pro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pro.js","sourceRoot":"","sources":["../../src/commands/pro.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,iBAgIhD"}
1
+ {"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;CACd;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,YAAY,iBAiIhD"}
@@ -42,8 +42,8 @@ export async function runShare(opts) {
42
42
  if (!slug) {
43
43
  slug = generateSlug(8);
44
44
  }
45
- else if (config.plan !== 'pro') {
46
- warn('Custom slugs require Nivii Pro. Using random slug instead.');
45
+ else if (!config.proEmail) {
46
+ warn('Custom slugs require Pro. Run: nivii pro join');
47
47
  slug = generateSlug(8);
48
48
  }
49
49
  // ─── 4. Upload (files directly, no zip) ────────────────────────────────────
@@ -51,9 +51,10 @@ export async function runShare(opts) {
51
51
  buildDir: fullOutputDir,
52
52
  slug,
53
53
  token: config.token,
54
+ proEmail: config.proEmail,
54
55
  password: opts.pass,
55
56
  otp: opts.otp,
56
- expires: opts.expires || (config.plan === 'pro' ? undefined : '48h'),
57
+ expires: opts.expires || '48h',
57
58
  live: opts.live,
58
59
  collab: opts.collab,
59
60
  maxViews: opts.maxViews,
@@ -78,7 +79,7 @@ export async function runShare(opts) {
78
79
  ...(opts.pass ? [' ' + theme.muted('Protected:') + ' ' + theme.success('✓ Password')] : []),
79
80
  ...(opts.otp && deployResult.otpCode ? [' ' + theme.muted('OTP:') + ' ' + theme.warning(deployResult.otpCode)] : []),
80
81
  ...(opts.live ? [' ' + theme.muted('Live sync:') + ' ' + theme.success('✓ Active')] : []),
81
- ...(opts.collab ? [' ' + theme.muted('Collab:') + ' ' + theme.success('✓ Active')] : []),
82
+ ...(opts.collab && deployResult.collabId ? [' ' + theme.muted('Collab: ') + ' ' + theme.success('✓ Active — share URL for cursors')] : []),
82
83
  ]));
83
84
  console.log('');
84
85
  // ─── 7. Copy URL to clipboard ──────────────────────────────────────────────
@@ -1 +1 @@
1
- {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"share.js","sourceRoot":"","sources":["../../src/commands/share.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import { EnvVar } from './env.js';
2
+ export interface BackendDeployOptions {
3
+ projectDir: string;
4
+ slug: string;
5
+ envVars: EnvVar[];
6
+ flyToken: string;
7
+ port?: number;
8
+ framework: string;
9
+ expiresIn?: number;
10
+ }
11
+ export interface BackendDeployResult {
12
+ url: string;
13
+ appName: string;
14
+ machineId: string;
15
+ }
16
+ /** Generate a minimal Dockerfile for the backend */
17
+ export declare function generateDockerfile(framework: string, port: number): string;
18
+ /** Generate fly.toml for the app */
19
+ export declare function generateFlyToml(appName: string, port: number): string;
20
+ /** Deploy backend to Fly.io using flyctl via CLI subprocess */
21
+ export declare function deployBackend(opts: BackendDeployOptions): Promise<BackendDeployResult>;
22
+ /** Schedule auto-destruction of a Fly.io app after N hours */
23
+ export declare function scheduleBackendDestroy(appName: string, flyToken: string, afterHours?: number): Promise<void>;
24
+ /** Destroy a Fly.io app */
25
+ export declare function destroyBackend(appName: string, flyToken: string): Promise<void>;
26
+ //# sourceMappingURL=backend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backend.d.ts","sourceRoot":"","sources":["../../src/core/backend.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAKlC,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,oDAAoD;AACpD,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAuB1E;AAED,oCAAoC;AACpC,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAgBrE;AAoCD,+DAA+D;AAC/D,wBAAsB,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqE5F;AAED,8DAA8D;AAC9D,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC,IAAI,CAAC,CAaf;AAED,2BAA2B;AAC3B,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrF"}