@pocketcoder/host 0.0.5 → 0.0.7

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.
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"AA8DA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,yDAAyD;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAsH7D"}
1
+ {"version":3,"file":"oauth-server.d.ts","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"AA2hBA,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,eAAe,EAAE,MAAM,OAAO,CAAC,mBAAmB,CAAC,CAAC;IACpD,yDAAyD;IACzD,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,CAAC,CAsH7D"}
@@ -2,19 +2,303 @@ import { createServer } from "node:http";
2
2
  /** Timeout for waiting for the OAuth callback (5 minutes). */
3
3
  const OAUTH_TIMEOUT_MS = 5 * 60 * 1000;
4
4
  const SUCCESS_HTML = `<!DOCTYPE html>
5
- <html>
6
- <head><title>PocketCoder</title></head>
5
+ <html lang="en">
6
+ <head>
7
+ <meta charset="UTF-8">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+ <title>PocketCoder - Success</title>
10
+ <link rel="preconnect" href="https://fonts.googleapis.com">
11
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Inter:wght@600;700&display=swap" rel="stylesheet">
13
+ <style>
14
+ :root {
15
+ --bg-primary: #000000;
16
+ --text-primary: #ffffff;
17
+ --text-secondary: #a1a1a6;
18
+ --accent: #c9a87c;
19
+ --success: #34c759;
20
+ }
21
+ * { margin: 0; padding: 0; box-sizing: border-box; }
22
+ html, body {
23
+ height: 100%;
24
+ font-family: "DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;
25
+ background: var(--bg-primary);
26
+ color: var(--text-primary);
27
+ -webkit-font-smoothing: antialiased;
28
+ }
29
+ .container {
30
+ display: flex;
31
+ flex-direction: column;
32
+ align-items: center;
33
+ justify-content: center;
34
+ min-height: 100vh;
35
+ padding: 24px;
36
+ position: relative;
37
+ overflow: hidden;
38
+ }
39
+ .stars, .stars-near {
40
+ position: absolute;
41
+ top: 0; left: 0;
42
+ width: 100%; height: 100%;
43
+ pointer-events: none;
44
+ }
45
+ .stars::before {
46
+ content: "";
47
+ position: absolute;
48
+ top: 30%; left: 50%;
49
+ width: 2px; height: 2px;
50
+ background: transparent;
51
+ border-radius: 50%;
52
+ box-shadow:
53
+ -180px -120px 0 0 rgba(186, 85, 211, 0.6),
54
+ 160px -100px 0 0 rgba(135, 206, 250, 0.65),
55
+ -220px 80px 0 0 rgba(255, 182, 193, 0.6),
56
+ 200px 120px 0 0 rgba(255, 160, 122, 0.55),
57
+ -120px 180px 0 0 rgba(147, 112, 219, 0.65),
58
+ 140px 200px 0 0 rgba(135, 206, 250, 0.6),
59
+ -280px -60px 0 0 rgba(255, 182, 193, 0.55),
60
+ 260px -80px 0 0 rgba(186, 85, 211, 0.65),
61
+ -160px -200px 0 0 rgba(255, 160, 122, 0.6),
62
+ 180px -180px 0 0 rgba(147, 112, 219, 0.55);
63
+ animation: twinkle 3.5s ease-in-out infinite;
64
+ }
65
+ .stars-near::before {
66
+ content: "";
67
+ position: absolute;
68
+ top: 30%; left: 50%;
69
+ width: 2px; height: 2px;
70
+ background: transparent;
71
+ border-radius: 50%;
72
+ box-shadow:
73
+ -80px -60px 0 0 rgba(186, 85, 211, 0.9),
74
+ 70px -50px 0 1px rgba(255, 160, 122, 1),
75
+ -90px 40px 0 0 rgba(135, 206, 250, 0.85),
76
+ 85px 55px 0 1px rgba(255, 182, 193, 0.9),
77
+ -50px 80px 0 0 rgba(147, 112, 219, 0.95),
78
+ 60px 90px 0 1px rgba(186, 85, 211, 0.85),
79
+ -110px -30px 0 0 rgba(255, 160, 122, 0.9),
80
+ 105px -35px 0 1px rgba(135, 206, 250, 0.95);
81
+ animation: twinkle 2s ease-in-out infinite;
82
+ }
83
+ @keyframes twinkle {
84
+ 0%, 100% { opacity: 1; }
85
+ 50% { opacity: 0.6; }
86
+ }
87
+ .content {
88
+ text-align: center;
89
+ position: relative;
90
+ z-index: 10;
91
+ }
92
+ .icon-wrapper {
93
+ width: 80px; height: 80px;
94
+ margin: 0 auto 24px;
95
+ position: relative;
96
+ display: flex;
97
+ align-items: center;
98
+ justify-content: center;
99
+ }
100
+ .icon-glow {
101
+ position: absolute;
102
+ width: 100%; height: 100%;
103
+ border-radius: 50%;
104
+ background: radial-gradient(circle, rgba(52, 199, 89, 0.4) 0%, transparent 70%);
105
+ animation: iconGlow 2s ease-in-out infinite;
106
+ }
107
+ @keyframes iconGlow {
108
+ 0%, 100% { transform: scale(1); opacity: 0.8; }
109
+ 50% { transform: scale(1.2); opacity: 1; }
110
+ }
111
+ .icon {
112
+ width: 48px; height: 48px;
113
+ color: var(--success);
114
+ position: relative;
115
+ z-index: 1;
116
+ }
117
+ .app-name {
118
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
119
+ font-size: 24px;
120
+ font-weight: 700;
121
+ letter-spacing: -0.5px;
122
+ margin-bottom: 8px;
123
+ }
124
+ .title {
125
+ font-size: 20px;
126
+ font-weight: 600;
127
+ margin-bottom: 8px;
128
+ color: var(--success);
129
+ }
130
+ .subtitle {
131
+ font-size: 16px;
132
+ color: var(--text-secondary);
133
+ }
134
+ </style>
135
+ </head>
7
136
  <body>
8
- <h1>Authentication successful!</h1>
9
- <p>You can close this window.</p>
137
+ <div class="container">
138
+ <div class="stars"></div>
139
+ <div class="stars-near"></div>
140
+ <div class="content">
141
+ <div class="icon-wrapper">
142
+ <div class="icon-glow"></div>
143
+ <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
144
+ <polyline points="20 6 9 17 4 12"></polyline>
145
+ </svg>
146
+ </div>
147
+ <h1 class="app-name">PocketCoder</h1>
148
+ <p class="title">Authentication successful!</p>
149
+ <p class="subtitle">You can close this window.</p>
150
+ </div>
151
+ </div>
10
152
  </body>
11
153
  </html>`;
12
154
  const ERROR_HTML = `<!DOCTYPE html>
13
- <html>
14
- <head><title>PocketCoder</title></head>
155
+ <html lang="en">
156
+ <head>
157
+ <meta charset="UTF-8">
158
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
159
+ <title>PocketCoder - Error</title>
160
+ <link rel="preconnect" href="https://fonts.googleapis.com">
161
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
162
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Inter:wght@600;700&display=swap" rel="stylesheet">
163
+ <style>
164
+ :root {
165
+ --bg-primary: #000000;
166
+ --text-primary: #ffffff;
167
+ --text-secondary: #a1a1a6;
168
+ --error: #ff3b30;
169
+ }
170
+ * { margin: 0; padding: 0; box-sizing: border-box; }
171
+ html, body {
172
+ height: 100%;
173
+ font-family: "DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;
174
+ background: var(--bg-primary);
175
+ color: var(--text-primary);
176
+ -webkit-font-smoothing: antialiased;
177
+ }
178
+ .container {
179
+ display: flex;
180
+ flex-direction: column;
181
+ align-items: center;
182
+ justify-content: center;
183
+ min-height: 100vh;
184
+ padding: 24px;
185
+ position: relative;
186
+ overflow: hidden;
187
+ }
188
+ .stars, .stars-near {
189
+ position: absolute;
190
+ top: 0; left: 0;
191
+ width: 100%; height: 100%;
192
+ pointer-events: none;
193
+ }
194
+ .stars::before {
195
+ content: "";
196
+ position: absolute;
197
+ top: 30%; left: 50%;
198
+ width: 2px; height: 2px;
199
+ background: transparent;
200
+ border-radius: 50%;
201
+ box-shadow:
202
+ -180px -120px 0 0 rgba(186, 85, 211, 0.6),
203
+ 160px -100px 0 0 rgba(135, 206, 250, 0.65),
204
+ -220px 80px 0 0 rgba(255, 182, 193, 0.6),
205
+ 200px 120px 0 0 rgba(255, 160, 122, 0.55),
206
+ -120px 180px 0 0 rgba(147, 112, 219, 0.65),
207
+ 140px 200px 0 0 rgba(135, 206, 250, 0.6),
208
+ -280px -60px 0 0 rgba(255, 182, 193, 0.55),
209
+ 260px -80px 0 0 rgba(186, 85, 211, 0.65),
210
+ -160px -200px 0 0 rgba(255, 160, 122, 0.6),
211
+ 180px -180px 0 0 rgba(147, 112, 219, 0.55);
212
+ animation: twinkle 3.5s ease-in-out infinite;
213
+ }
214
+ .stars-near::before {
215
+ content: "";
216
+ position: absolute;
217
+ top: 30%; left: 50%;
218
+ width: 2px; height: 2px;
219
+ background: transparent;
220
+ border-radius: 50%;
221
+ box-shadow:
222
+ -80px -60px 0 0 rgba(186, 85, 211, 0.9),
223
+ 70px -50px 0 1px rgba(255, 160, 122, 1),
224
+ -90px 40px 0 0 rgba(135, 206, 250, 0.85),
225
+ 85px 55px 0 1px rgba(255, 182, 193, 0.9),
226
+ -50px 80px 0 0 rgba(147, 112, 219, 0.95),
227
+ 60px 90px 0 1px rgba(186, 85, 211, 0.85),
228
+ -110px -30px 0 0 rgba(255, 160, 122, 0.9),
229
+ 105px -35px 0 1px rgba(135, 206, 250, 0.95);
230
+ animation: twinkle 2s ease-in-out infinite;
231
+ }
232
+ @keyframes twinkle {
233
+ 0%, 100% { opacity: 1; }
234
+ 50% { opacity: 0.6; }
235
+ }
236
+ .content {
237
+ text-align: center;
238
+ position: relative;
239
+ z-index: 10;
240
+ }
241
+ .icon-wrapper {
242
+ width: 80px; height: 80px;
243
+ margin: 0 auto 24px;
244
+ position: relative;
245
+ display: flex;
246
+ align-items: center;
247
+ justify-content: center;
248
+ }
249
+ .icon-glow {
250
+ position: absolute;
251
+ width: 100%; height: 100%;
252
+ border-radius: 50%;
253
+ background: radial-gradient(circle, rgba(255, 59, 48, 0.4) 0%, transparent 70%);
254
+ animation: iconGlow 2s ease-in-out infinite;
255
+ }
256
+ @keyframes iconGlow {
257
+ 0%, 100% { transform: scale(1); opacity: 0.8; }
258
+ 50% { transform: scale(1.2); opacity: 1; }
259
+ }
260
+ .icon {
261
+ width: 48px; height: 48px;
262
+ color: var(--error);
263
+ position: relative;
264
+ z-index: 1;
265
+ }
266
+ .app-name {
267
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
268
+ font-size: 24px;
269
+ font-weight: 700;
270
+ letter-spacing: -0.5px;
271
+ margin-bottom: 8px;
272
+ }
273
+ .title {
274
+ font-size: 20px;
275
+ font-weight: 600;
276
+ margin-bottom: 8px;
277
+ color: var(--error);
278
+ }
279
+ .subtitle {
280
+ font-size: 16px;
281
+ color: var(--text-secondary);
282
+ }
283
+ </style>
284
+ </head>
15
285
  <body>
16
- <h1>Login Failed</h1>
17
- <p>You can close this window.</p>
286
+ <div class="container">
287
+ <div class="stars"></div>
288
+ <div class="stars-near"></div>
289
+ <div class="content">
290
+ <div class="icon-wrapper">
291
+ <div class="icon-glow"></div>
292
+ <svg class="icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
293
+ <line x1="18" y1="6" x2="6" y2="18"></line>
294
+ <line x1="6" y1="6" x2="18" y2="18"></line>
295
+ </svg>
296
+ </div>
297
+ <h1 class="app-name">PocketCoder</h1>
298
+ <p class="title">Login Failed</p>
299
+ <p class="subtitle">You can close this window.</p>
300
+ </div>
301
+ </div>
18
302
  </body>
19
303
  </html>`;
20
304
  /**
@@ -22,12 +306,205 @@ const ERROR_HTML = `<!DOCTYPE html>
22
306
  * Supabase implicit flow returns tokens in the fragment (#access_token=...).
23
307
  */
24
308
  const FRAGMENT_EXTRACTOR_HTML = `<!DOCTYPE html>
25
- <html>
26
- <head><title>PocketCoder - Completing Login...</title></head>
309
+ <html lang="en">
310
+ <head>
311
+ <meta charset="UTF-8">
312
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
313
+ <title>PocketCoder - Completing Login...</title>
314
+ <link rel="preconnect" href="https://fonts.googleapis.com">
315
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
316
+ <link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Inter:wght@600;700&display=swap" rel="stylesheet">
317
+ <style>
318
+ :root {
319
+ --bg-primary: #000000;
320
+ --text-primary: #ffffff;
321
+ --text-secondary: #a1a1a6;
322
+ --accent: #c9a87c;
323
+ --success: #34c759;
324
+ --error: #ff3b30;
325
+ }
326
+ * { margin: 0; padding: 0; box-sizing: border-box; }
327
+ html, body {
328
+ height: 100%;
329
+ font-family: "DM Sans", -apple-system, BlinkMacSystemFont, sans-serif;
330
+ background: var(--bg-primary);
331
+ color: var(--text-primary);
332
+ -webkit-font-smoothing: antialiased;
333
+ }
334
+ .container {
335
+ display: flex;
336
+ flex-direction: column;
337
+ align-items: center;
338
+ justify-content: center;
339
+ min-height: 100vh;
340
+ padding: 24px;
341
+ position: relative;
342
+ overflow: hidden;
343
+ }
344
+ .stars, .stars-near {
345
+ position: absolute;
346
+ top: 0; left: 0;
347
+ width: 100%; height: 100%;
348
+ pointer-events: none;
349
+ }
350
+ .stars::before {
351
+ content: "";
352
+ position: absolute;
353
+ top: 30%; left: 50%;
354
+ width: 2px; height: 2px;
355
+ background: transparent;
356
+ border-radius: 50%;
357
+ box-shadow:
358
+ -180px -120px 0 0 rgba(186, 85, 211, 0.6),
359
+ 160px -100px 0 0 rgba(135, 206, 250, 0.65),
360
+ -220px 80px 0 0 rgba(255, 182, 193, 0.6),
361
+ 200px 120px 0 0 rgba(255, 160, 122, 0.55),
362
+ -120px 180px 0 0 rgba(147, 112, 219, 0.65),
363
+ 140px 200px 0 0 rgba(135, 206, 250, 0.6),
364
+ -280px -60px 0 0 rgba(255, 182, 193, 0.55),
365
+ 260px -80px 0 0 rgba(186, 85, 211, 0.65),
366
+ -160px -200px 0 0 rgba(255, 160, 122, 0.6),
367
+ 180px -180px 0 0 rgba(147, 112, 219, 0.55);
368
+ animation: twinkle 3.5s ease-in-out infinite;
369
+ }
370
+ .stars-near::before {
371
+ content: "";
372
+ position: absolute;
373
+ top: 30%; left: 50%;
374
+ width: 2px; height: 2px;
375
+ background: transparent;
376
+ border-radius: 50%;
377
+ box-shadow:
378
+ -80px -60px 0 0 rgba(186, 85, 211, 0.9),
379
+ 70px -50px 0 1px rgba(255, 160, 122, 1),
380
+ -90px 40px 0 0 rgba(135, 206, 250, 0.85),
381
+ 85px 55px 0 1px rgba(255, 182, 193, 0.9),
382
+ -50px 80px 0 0 rgba(147, 112, 219, 0.95),
383
+ 60px 90px 0 1px rgba(186, 85, 211, 0.85),
384
+ -110px -30px 0 0 rgba(255, 160, 122, 0.9),
385
+ 105px -35px 0 1px rgba(135, 206, 250, 0.95);
386
+ animation: twinkle 2s ease-in-out infinite;
387
+ }
388
+ @keyframes twinkle {
389
+ 0%, 100% { opacity: 1; }
390
+ 50% { opacity: 0.6; }
391
+ }
392
+ .content {
393
+ text-align: center;
394
+ position: relative;
395
+ z-index: 10;
396
+ }
397
+ .icon-wrapper {
398
+ width: 80px; height: 80px;
399
+ margin: 0 auto 24px;
400
+ position: relative;
401
+ display: flex;
402
+ align-items: center;
403
+ justify-content: center;
404
+ }
405
+ .icon-glow {
406
+ position: absolute;
407
+ width: 100%; height: 100%;
408
+ border-radius: 50%;
409
+ background: radial-gradient(circle, rgba(201, 168, 124, 0.4) 0%, transparent 70%);
410
+ animation: iconGlow 2s ease-in-out infinite;
411
+ }
412
+ .icon-glow.success {
413
+ background: radial-gradient(circle, rgba(52, 199, 89, 0.4) 0%, transparent 70%);
414
+ }
415
+ .icon-glow.error {
416
+ background: radial-gradient(circle, rgba(255, 59, 48, 0.4) 0%, transparent 70%);
417
+ }
418
+ @keyframes iconGlow {
419
+ 0%, 100% { transform: scale(1); opacity: 0.8; }
420
+ 50% { transform: scale(1.2); opacity: 1; }
421
+ }
422
+ .spinner {
423
+ width: 48px; height: 48px;
424
+ border: 3px solid rgba(201, 168, 124, 0.2);
425
+ border-top-color: var(--accent);
426
+ border-radius: 50%;
427
+ animation: spin 1s linear infinite;
428
+ }
429
+ @keyframes spin {
430
+ to { transform: rotate(360deg); }
431
+ }
432
+ .icon {
433
+ width: 48px; height: 48px;
434
+ position: relative;
435
+ z-index: 1;
436
+ display: none;
437
+ }
438
+ .icon.success { color: var(--success); }
439
+ .icon.error { color: var(--error); }
440
+ .app-name {
441
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
442
+ font-size: 24px;
443
+ font-weight: 700;
444
+ letter-spacing: -0.5px;
445
+ margin-bottom: 8px;
446
+ }
447
+ .title {
448
+ font-size: 20px;
449
+ font-weight: 600;
450
+ margin-bottom: 8px;
451
+ color: var(--accent);
452
+ }
453
+ .title.success { color: var(--success); }
454
+ .title.error { color: var(--error); }
455
+ .subtitle {
456
+ font-size: 16px;
457
+ color: var(--text-secondary);
458
+ }
459
+ </style>
460
+ </head>
27
461
  <body>
28
- <h1>Completing login...</h1>
29
- <p>Please wait...</p>
462
+ <div class="container">
463
+ <div class="stars"></div>
464
+ <div class="stars-near"></div>
465
+ <div class="content">
466
+ <div class="icon-wrapper">
467
+ <div class="icon-glow" id="iconGlow"></div>
468
+ <div class="spinner" id="spinner"></div>
469
+ <svg class="icon success" id="successIcon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
470
+ <polyline points="20 6 9 17 4 12"></polyline>
471
+ </svg>
472
+ <svg class="icon error" id="errorIcon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
473
+ <line x1="18" y1="6" x2="6" y2="18"></line>
474
+ <line x1="6" y1="6" x2="18" y2="18"></line>
475
+ </svg>
476
+ </div>
477
+ <h1 class="app-name">PocketCoder</h1>
478
+ <p class="title" id="title">Completing login...</p>
479
+ <p class="subtitle" id="subtitle">Please wait</p>
480
+ </div>
481
+ </div>
30
482
  <script>
483
+ const iconGlow = document.getElementById('iconGlow');
484
+ const spinner = document.getElementById('spinner');
485
+ const successIcon = document.getElementById('successIcon');
486
+ const errorIcon = document.getElementById('errorIcon');
487
+ const title = document.getElementById('title');
488
+ const subtitle = document.getElementById('subtitle');
489
+
490
+ function showSuccess() {
491
+ spinner.style.display = 'none';
492
+ iconGlow.classList.add('success');
493
+ successIcon.style.display = 'block';
494
+ title.textContent = 'Authentication successful!';
495
+ title.classList.add('success');
496
+ subtitle.textContent = 'You can close this window.';
497
+ }
498
+
499
+ function showError(message) {
500
+ spinner.style.display = 'none';
501
+ iconGlow.classList.add('error');
502
+ errorIcon.style.display = 'block';
503
+ title.textContent = 'Login Failed';
504
+ title.classList.add('error');
505
+ subtitle.textContent = message || 'You can close this window.';
506
+ }
507
+
31
508
  const hash = window.location.hash.substring(1);
32
509
  const params = new URLSearchParams(hash);
33
510
  const accessToken = params.get('access_token');
@@ -35,19 +512,19 @@ const FRAGMENT_EXTRACTOR_HTML = `<!DOCTYPE html>
35
512
  const error = params.get('error');
36
513
 
37
514
  if (error) {
38
- document.body.innerHTML = '<h1>Login Failed</h1><p>' + error + '</p>';
515
+ showError(error);
39
516
  } else if (accessToken && refreshToken) {
40
517
  fetch('/auth/tokens', {
41
518
  method: 'POST',
42
519
  headers: { 'Content-Type': 'application/json' },
43
520
  body: JSON.stringify({ access_token: accessToken, refresh_token: refreshToken })
44
521
  }).then(() => {
45
- document.body.innerHTML = '<h1>Authentication successful!</h1><p>You can close this window.</p>';
522
+ showSuccess();
46
523
  }).catch(err => {
47
- document.body.innerHTML = '<h1>Error</h1><p>' + err.message + '</p>';
524
+ showError(err.message);
48
525
  });
49
526
  } else {
50
- document.body.innerHTML = '<h1>Error</h1><p>Missing tokens in response</p>';
527
+ showError('Missing tokens in response');
51
528
  }
52
529
  </script>
53
530
  </body>
@@ -1 +1 @@
1
- {"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
2
  vi.mock("../../../utils/pid.js", () => ({
3
3
  readPidFile: vi.fn(),
4
4
  isProcessRunning: vi.fn(),
@@ -7,24 +7,55 @@ vi.mock("../../../utils/pid.js", () => ({
7
7
  vi.mock("node:child_process", () => ({
8
8
  spawn: vi.fn(),
9
9
  }));
10
+ // Mock token storage for auth check
11
+ vi.mock("../../../auth/token-storage.js", () => ({
12
+ loadTokens: vi.fn(),
13
+ }));
14
+ // Mock login module
15
+ vi.mock("../../../auth/login.js", () => ({
16
+ login: vi.fn(),
17
+ setGetOAuthUrlFn: vi.fn(),
18
+ }));
19
+ // Mock env module
20
+ vi.mock("../../../env.js", () => ({
21
+ getEnv: vi.fn(() => ({ supabaseUrl: "https://test.supabase.co", gatewayUrl: "wss://test" })),
22
+ }));
10
23
  import { readPidFile, isProcessRunning } from "../../../utils/pid.js";
11
24
  import { spawn } from "node:child_process";
25
+ import { loadTokens } from "../../../auth/token-storage.js";
26
+ import { login } from "../../../auth/login.js";
12
27
  import { startCommand, isDaemonRunning } from "../start.js";
13
28
  import { stopCommand } from "../stop.js";
14
29
  const mockReadPidFile = vi.mocked(readPidFile);
15
30
  const mockIsProcessRunning = vi.mocked(isProcessRunning);
16
31
  const mockSpawn = vi.mocked(spawn);
32
+ const mockLoadTokens = vi.mocked(loadTokens);
33
+ const mockLogin = vi.mocked(login);
17
34
  describe("start command", () => {
18
35
  beforeEach(() => {
19
36
  vi.restoreAllMocks();
37
+ vi.useFakeTimers();
20
38
  mockSpawn.mockReset();
39
+ mockLoadTokens.mockReset();
40
+ mockLogin.mockReset();
21
41
  process.exitCode = undefined;
22
42
  // Reset fetch mock
23
43
  globalThis.fetch = vi.fn();
24
44
  });
45
+ afterEach(() => {
46
+ vi.useRealTimers();
47
+ });
25
48
  it("should check for existing daemon", async () => {
26
49
  // No PID file means daemon is not running
27
50
  mockReadPidFile.mockResolvedValue(null);
51
+ // Mock existing tokens (user already logged in)
52
+ mockLoadTokens.mockResolvedValue({
53
+ machine_key: "test-key",
54
+ access_token: "test-access",
55
+ refresh_token: "test-refresh",
56
+ expires_at: Math.floor(Date.now() / 1000) + 3600,
57
+ user_id: "test-user",
58
+ });
28
59
  // Mock spawn for daemonize
29
60
  mockSpawn.mockReturnValue({
30
61
  pid: 12345,
@@ -36,6 +67,53 @@ describe("start command", () => {
36
67
  expect(consoleSpy).toHaveBeenCalledWith("Daemon started (PID: 12345)");
37
68
  consoleSpy.mockRestore();
38
69
  });
70
+ it("should run login flow when no tokens exist", async () => {
71
+ // No PID file means daemon is not running
72
+ mockReadPidFile.mockResolvedValue(null);
73
+ // No existing tokens - login needed
74
+ mockLoadTokens.mockResolvedValue(null);
75
+ // Mock successful login
76
+ mockLogin.mockResolvedValue({
77
+ user_id: "test-user",
78
+ email: "test@example.com",
79
+ machine_key: "test-key",
80
+ });
81
+ // Mock spawn for daemonize
82
+ mockSpawn.mockReturnValue({
83
+ pid: 12345,
84
+ unref: vi.fn(),
85
+ });
86
+ const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
87
+ // Start the command and advance timers to skip the 5-second delay
88
+ const commandPromise = startCommand({});
89
+ await vi.advanceTimersByTimeAsync(5000);
90
+ await commandPromise;
91
+ expect(consoleSpy).toHaveBeenCalledWith("No session found. Starting login...");
92
+ expect(consoleSpy).toHaveBeenCalledWith("Opening browser for GitHub authentication in 5 seconds...");
93
+ expect(mockLogin).toHaveBeenCalled();
94
+ expect(consoleSpy).toHaveBeenCalledWith("Logged in as test@example.com");
95
+ expect(consoleSpy).toHaveBeenCalledWith("Daemon started (PID: 12345)");
96
+ consoleSpy.mockRestore();
97
+ });
98
+ it("should handle login failure gracefully", async () => {
99
+ // No PID file means daemon is not running
100
+ mockReadPidFile.mockResolvedValue(null);
101
+ // No existing tokens - login needed
102
+ mockLoadTokens.mockResolvedValue(null);
103
+ // Mock failed login
104
+ mockLogin.mockRejectedValue(new Error("OAuth timeout"));
105
+ const consoleSpy = vi.spyOn(console, "log").mockImplementation(() => { });
106
+ const consoleErrorSpy = vi.spyOn(console, "error").mockImplementation(() => { });
107
+ // Start the command and advance timers to skip the 5-second delay
108
+ const commandPromise = startCommand({});
109
+ await vi.advanceTimersByTimeAsync(5000);
110
+ await commandPromise;
111
+ expect(consoleErrorSpy).toHaveBeenCalledWith("Login failed: OAuth timeout");
112
+ expect(process.exitCode).toBe(1);
113
+ expect(mockSpawn).not.toHaveBeenCalled(); // Should not spawn daemon on login failure
114
+ consoleSpy.mockRestore();
115
+ consoleErrorSpy.mockRestore();
116
+ });
39
117
  it("should not start if daemon is already running", async () => {
40
118
  mockReadPidFile.mockResolvedValue(9999);
41
119
  mockIsProcessRunning.mockReturnValue(true);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-daemon.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/__tests__/cli-daemon.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAE9D,EAAE,CAAC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;IACpB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;CAC1B,CAAC,CAAC,CAAC;AAEJ,8CAA8C;AAC9C,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC,CAAC,CAAC;AAEJ,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACtE,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,eAAe,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC/C,MAAM,oBAAoB,GAAG,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACzD,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAEnC,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,SAAS,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,mBAAmB;QACnB,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,0CAA0C;QAC1C,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,2BAA2B;QAC3B,SAAS,CAAC,eAAe,CAAC;YACxB,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;SACwB,CAAC,CAAC;QAE1C,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QAEvB,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,6BAA6B,CAAC,CAAC;QACvE,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;YAC5C,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC,CAAC;QAEf,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,YAAY,CAAC,EAAE,CAAC,CAAC;QAEvB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,2BAA2B,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACzE,MAAM,eAAe,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEhF,iEAAiE;QACjE,MAAM,YAAY,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,kCAAkC,CAAC,CAAC;QAC5E,2EAA2E;QAC3E,MAAM,CAAC,eAAe,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAC3C,UAAU,CAAC,WAAW,EAAE,CAAC;QACzB,eAAe,CAAC,WAAW,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC;YAC5C,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC,CAAC;QACf,MAAM,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC/E,MAAM,CAAC,MAAM,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,UAAU,CAAC,GAAG,EAAE;QACd,EAAE,CAAC,eAAe,EAAE,CAAC;QACrB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC7B,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QACzC,8CAA8C;QAC9C,0BAA0B;QAC1B,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;aACxB,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC;aACb,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;SACxC,CAAC,CAAC;QAEjB,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,WAAW,EAAE,CAAC;QAEpB,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;QACjE,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAEzE,MAAM,WAAW,EAAE,CAAC;QAEpB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;QACjE,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;QACnD,eAAe,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;aACxB,qBAAqB,CAAC;YACrB,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SAClC,CAAC;aACb,qBAAqB,CAAC,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAExD,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAE3E,MAAM,WAAW,EAAE,CAAC;QAEpB,MAAM,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,yCAAyC,CAAC,CAAC;QACnF,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,UAAU,CAAC,WAAW,EAAE,CAAC;IAC3B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli-daemon.test.js","sourceRoot":"","sources":["../../../../src/cli/commands/__tests__/cli-daemon.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAQA;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBxD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkCnF"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"AAWA;;;;GAIG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC,CAkBxD;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEnF"}
@@ -3,6 +3,9 @@ import { fileURLToPath } from "node:url";
3
3
  import { dirname, join } from "node:path";
4
4
  import { CONTROL_PLANE_HOST, CONTROL_PLANE_PORT } from "@pocketcoder/shared";
5
5
  import { readPidFile, isProcessRunning } from "../../utils/pid.js";
6
+ import { loadTokens } from "../../auth/token-storage.js";
7
+ import { login, setGetOAuthUrlFn } from "../../auth/login.js";
8
+ import { getEnv } from "../../env.js";
6
9
  /**
7
10
  * Check if the daemon is already running by:
8
11
  * 1. Reading the PID file and checking if the process exists
@@ -54,6 +57,34 @@ export async function startCommand(options) {
54
57
  }
55
58
  }
56
59
  else {
60
+ // In background mode, check auth before spawning daemon
61
+ // This provides interactive login with user feedback
62
+ const tokens = await loadTokens();
63
+ if (!tokens) {
64
+ console.log("No session found. Starting login...");
65
+ // Configure OAuth URL provider
66
+ const { supabaseUrl } = getEnv();
67
+ setGetOAuthUrlFn(async (redirectTo) => {
68
+ const url = new URL(`${supabaseUrl}/auth/v1/authorize`);
69
+ url.searchParams.set("provider", "github");
70
+ url.searchParams.set("redirect_to", redirectTo);
71
+ url.searchParams.set("response_type", "code");
72
+ return url.toString();
73
+ });
74
+ console.log("Opening browser for GitHub authentication in 5 seconds...");
75
+ await new Promise((resolve) => setTimeout(resolve, 5000));
76
+ try {
77
+ const result = await login();
78
+ const displayName = result.email ?? result.user_id;
79
+ console.log(`Logged in as ${displayName}`);
80
+ }
81
+ catch (err) {
82
+ const message = err instanceof Error ? err.message : String(err);
83
+ console.error(`Login failed: ${message}`);
84
+ process.exitCode = 1;
85
+ return;
86
+ }
87
+ }
57
88
  console.log("Starting daemon...");
58
89
  // Daemonize: spawn a detached child process running in foreground mode
59
90
  const cliPath = join(dirname(fileURLToPath(import.meta.url)), "..", "index.js");
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../../src/cli/commands/start.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pocketcoder/host",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "description": "PocketCoder host daemon - connects your local machine to PocketCoder cloud",
5
5
  "type": "module",
6
6
  "license": "Elastic-2.0",
@@ -26,7 +26,7 @@
26
26
  "README.md"
27
27
  ],
28
28
  "dependencies": {
29
- "@pocketcoder/shared": "^0.0.5",
29
+ "@pocketcoder/shared": "^0.0.7",
30
30
  "better-sqlite3": "^11.8.1",
31
31
  "chokidar": "^4.0.3",
32
32
  "commander": "^13.1.0",