@fias/plugin-dev-harness 1.5.1 → 1.5.2

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":"harness-server.d.ts","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,WAAW,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACjD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqWrF"}
1
+ {"version":3,"file":"harness-server.d.ts","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,WAAW,CAAC;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,QAAQ,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACzE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CACjD;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAykBrF"}
@@ -44,6 +44,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
44
44
  Object.defineProperty(exports, "__esModule", { value: true });
45
45
  exports.startHarnessServer = startHarnessServer;
46
46
  const express_1 = __importDefault(require("express"));
47
+ const child_process_1 = require("child_process");
47
48
  const path = __importStar(require("path"));
48
49
  const fs = __importStar(require("fs"));
49
50
  const chalk_1 = __importDefault(require("chalk"));
@@ -296,6 +297,208 @@ async function startHarnessServer(options) {
296
297
  .json({ error: err instanceof Error ? err.message : 'Failed to fetch credits' });
297
298
  }
298
299
  });
300
+ // ────────────────────────────────────────────────────────────────
301
+ // Publish Wizard Endpoints
302
+ // ────────────────────────────────────────────────────────────────
303
+ // Read fias-plugin.json from plugin project
304
+ app.get('/api/manifest', (_req, res) => {
305
+ const manifestPath = path.resolve('fias-plugin.json');
306
+ if (!fs.existsSync(manifestPath)) {
307
+ res.status(404).json({ error: 'fias-plugin.json not found in project directory' });
308
+ return;
309
+ }
310
+ try {
311
+ const content = fs.readFileSync(manifestPath, 'utf-8');
312
+ res.json(JSON.parse(content));
313
+ }
314
+ catch (err) {
315
+ res
316
+ .status(400)
317
+ .json({ error: err instanceof Error ? err.message : 'Failed to read manifest' });
318
+ }
319
+ });
320
+ // Save updated manifest to disk
321
+ app.put('/api/manifest', (req, res) => {
322
+ try {
323
+ const manifestPath = path.resolve('fias-plugin.json');
324
+ fs.writeFileSync(manifestPath, JSON.stringify(req.body, null, 2) + '\n');
325
+ res.json({ success: true });
326
+ }
327
+ catch (err) {
328
+ res
329
+ .status(500)
330
+ .json({ error: err instanceof Error ? err.message : 'Failed to save manifest' });
331
+ }
332
+ });
333
+ // Validate manifest via platform API
334
+ app.post('/api/publish/validate', async (req, res) => {
335
+ if (currentMode !== 'live' || !currentAuthToken) {
336
+ res.status(400).json({ error: 'Switch to live mode to publish' });
337
+ return;
338
+ }
339
+ await ensureValidToken();
340
+ try {
341
+ const manifestPath = path.resolve('fias-plugin.json');
342
+ const manifest = JSON.parse(fs.readFileSync(manifestPath, 'utf-8'));
343
+ const response = await fetch(`${getCurrentApiUrl()}/developer/validate`, {
344
+ method: 'POST',
345
+ headers: {
346
+ 'Content-Type': 'application/json',
347
+ Authorization: `Bearer ${currentAuthToken}`,
348
+ },
349
+ body: JSON.stringify({ manifest }),
350
+ });
351
+ res.json(await response.json());
352
+ }
353
+ catch (err) {
354
+ res.status(500).json({ error: err instanceof Error ? err.message : 'Validation failed' });
355
+ }
356
+ });
357
+ // Build plugin via npm run build — streams output via SSE
358
+ app.post('/api/publish/build', (_req, res) => {
359
+ res.writeHead(200, {
360
+ 'Content-Type': 'text/event-stream',
361
+ 'Cache-Control': 'no-cache',
362
+ Connection: 'keep-alive',
363
+ });
364
+ const child = (0, child_process_1.spawn)('npm', ['run', 'build'], {
365
+ cwd: process.cwd(),
366
+ shell: true,
367
+ stdio: ['ignore', 'pipe', 'pipe'],
368
+ });
369
+ child.stdout.on('data', (data) => {
370
+ const lines = data.toString().split('\n').filter(Boolean);
371
+ for (const line of lines) {
372
+ res.write(`data: ${JSON.stringify({ line, stream: 'stdout' })}\n\n`);
373
+ }
374
+ });
375
+ child.stderr.on('data', (data) => {
376
+ const lines = data.toString().split('\n').filter(Boolean);
377
+ for (const line of lines) {
378
+ res.write(`data: ${JSON.stringify({ line, stream: 'stderr' })}\n\n`);
379
+ }
380
+ });
381
+ child.on('close', (code) => {
382
+ res.write(`data: ${JSON.stringify({ done: true, code: code ?? 1 })}\n\n`);
383
+ res.end();
384
+ });
385
+ child.on('error', (err) => {
386
+ res.write(`data: ${JSON.stringify({ done: true, code: 1, error: err.message })}\n\n`);
387
+ res.end();
388
+ });
389
+ });
390
+ // Package dist/ + fias-plugin.json into tarball
391
+ app.post('/api/publish/package', (_req, res) => {
392
+ try {
393
+ const distDir = path.resolve('dist');
394
+ if (!fs.existsSync(distDir)) {
395
+ res.status(400).json({ error: 'dist/ directory not found. Did the build succeed?' });
396
+ return;
397
+ }
398
+ const tarball = 'plugin-submission.tar.gz';
399
+ (0, child_process_1.execSync)(`tar -czf ${tarball} dist/ fias-plugin.json`, { cwd: process.cwd() });
400
+ const stats = fs.statSync(path.resolve(tarball));
401
+ res.json({ success: true, sizeBytes: stats.size });
402
+ }
403
+ catch (err) {
404
+ res.status(500).json({ error: err instanceof Error ? err.message : 'Packaging failed' });
405
+ }
406
+ });
407
+ // Submit: get upload URL → upload tarball → create submission
408
+ app.post('/api/publish/submit', async (req, res) => {
409
+ if (currentMode !== 'live' || !currentAuthToken) {
410
+ res.status(400).json({ error: 'Switch to live mode to publish' });
411
+ return;
412
+ }
413
+ await ensureValidToken();
414
+ const apiUrl = getCurrentApiUrl();
415
+ const headers = {
416
+ 'Content-Type': 'application/json',
417
+ Authorization: `Bearer ${currentAuthToken}`,
418
+ };
419
+ try {
420
+ // Read tarball and manifest
421
+ const tarballPath = path.resolve('plugin-submission.tar.gz');
422
+ if (!fs.existsSync(tarballPath)) {
423
+ res.status(400).json({ error: 'No packaged tarball found. Build and package first.' });
424
+ return;
425
+ }
426
+ const tarball = fs.readFileSync(tarballPath);
427
+ const manifest = JSON.parse(fs.readFileSync(path.resolve('fias-plugin.json'), 'utf-8'));
428
+ // 1. Get upload URL
429
+ const uploadResp = await fetch(`${apiUrl}/plugins/submissions/upload-url`, {
430
+ method: 'POST',
431
+ headers,
432
+ body: JSON.stringify({
433
+ fileName: 'plugin-submission.tar.gz',
434
+ sizeBytes: tarball.length,
435
+ }),
436
+ });
437
+ if (!uploadResp.ok) {
438
+ const err = await uploadResp.json().catch(() => ({}));
439
+ throw new Error(err.error?.message || 'Failed to get upload URL');
440
+ }
441
+ const { uploadUrl, submissionId, s3Key } = (await uploadResp.json());
442
+ // 2. Upload to S3
443
+ const s3Resp = await fetch(uploadUrl, {
444
+ method: 'PUT',
445
+ headers: { 'Content-Type': 'application/gzip' },
446
+ body: tarball,
447
+ });
448
+ if (!s3Resp.ok) {
449
+ throw new Error(`S3 upload failed: ${s3Resp.status}`);
450
+ }
451
+ // 3. Create submission
452
+ const submitResp = await fetch(`${apiUrl}/plugins/submissions`, {
453
+ method: 'POST',
454
+ headers,
455
+ body: JSON.stringify({
456
+ submissionId,
457
+ sourceRef: s3Key,
458
+ manifest,
459
+ ...(req.body?.archId ? { archId: req.body.archId } : {}),
460
+ }),
461
+ });
462
+ if (!submitResp.ok) {
463
+ const err = await submitResp.json().catch(() => ({}));
464
+ throw new Error(err.error?.message || 'Submission failed');
465
+ }
466
+ // Clean up tarball
467
+ try {
468
+ fs.unlinkSync(tarballPath);
469
+ }
470
+ catch {
471
+ /* ignore */
472
+ }
473
+ const result = await submitResp.json();
474
+ console.log(chalk_1.default.green(` Submission created: ${submissionId}`));
475
+ res.json(result);
476
+ }
477
+ catch (err) {
478
+ res.status(500).json({ error: err instanceof Error ? err.message : 'Submission failed' });
479
+ }
480
+ });
481
+ // Poll submission status
482
+ app.get('/api/publish/status/:id', async (req, res) => {
483
+ if (currentMode !== 'live' || !currentAuthToken) {
484
+ res.status(400).json({ error: 'Not in live mode' });
485
+ return;
486
+ }
487
+ await ensureValidToken();
488
+ try {
489
+ const response = await fetch(`${getCurrentApiUrl()}/plugins/submissions/${req.params.id}`, {
490
+ headers: { Authorization: `Bearer ${currentAuthToken}` },
491
+ });
492
+ if (!response.ok) {
493
+ res.status(response.status).json({ error: 'Failed to fetch status' });
494
+ return;
495
+ }
496
+ res.json(await response.json());
497
+ }
498
+ catch (err) {
499
+ res.status(500).json({ error: err instanceof Error ? err.message : 'Status check failed' });
500
+ }
501
+ });
299
502
  // Plugin reachability check
300
503
  app.get('/api/check-plugin', async (_req, res) => {
301
504
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"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"}
@@ -388,3 +388,255 @@ body {
388
388
  color: #fbbf24;
389
389
  margin-left: 8px;
390
390
  }
391
+
392
+ /* Publish Wizard */
393
+ .publish-modal {
394
+ width: 600px;
395
+ max-height: 85vh;
396
+ display: flex;
397
+ flex-direction: column;
398
+ }
399
+
400
+ .publish-steps {
401
+ display: flex;
402
+ gap: 4px;
403
+ margin-bottom: 16px;
404
+ }
405
+
406
+ .publish-step {
407
+ flex: 1;
408
+ padding: 6px 8px;
409
+ font-size: 11px;
410
+ font-weight: 600;
411
+ color: #6b7280;
412
+ background: #18181b;
413
+ border-radius: 4px;
414
+ text-align: center;
415
+ }
416
+
417
+ .publish-step.active {
418
+ color: #a78bfa;
419
+ background: #1e1b2e;
420
+ }
421
+
422
+ .publish-step.completed {
423
+ color: #86efac;
424
+ background: #0f291e;
425
+ }
426
+
427
+ .publish-content {
428
+ flex: 1;
429
+ overflow-y: auto;
430
+ max-height: 55vh;
431
+ padding: 4px 0;
432
+ }
433
+
434
+ .publish-form label {
435
+ display: block;
436
+ font-size: 12px;
437
+ color: #a1a1aa;
438
+ margin: 8px 0 4px;
439
+ }
440
+
441
+ .pub-textarea {
442
+ resize: vertical;
443
+ font-family: inherit;
444
+ min-height: 40px;
445
+ }
446
+
447
+ .pub-tags-container {
448
+ margin-bottom: 8px;
449
+ }
450
+
451
+ .pub-tags-list {
452
+ display: flex;
453
+ flex-wrap: wrap;
454
+ gap: 4px;
455
+ margin-bottom: 4px;
456
+ }
457
+
458
+ .pub-tag {
459
+ display: inline-flex;
460
+ align-items: center;
461
+ gap: 4px;
462
+ background: #3f3f46;
463
+ color: #e4e4e7;
464
+ padding: 2px 8px;
465
+ border-radius: 4px;
466
+ font-size: 11px;
467
+ }
468
+
469
+ .pub-tag-remove {
470
+ cursor: pointer;
471
+ color: #a1a1aa;
472
+ border: none;
473
+ background: none;
474
+ font-size: 14px;
475
+ padding: 0 2px;
476
+ }
477
+
478
+ .pub-permissions {
479
+ display: flex;
480
+ flex-direction: column;
481
+ gap: 6px;
482
+ margin-bottom: 12px;
483
+ }
484
+
485
+ .pub-checkbox {
486
+ display: flex;
487
+ align-items: center;
488
+ gap: 6px;
489
+ font-size: 12px;
490
+ color: #e4e4e7;
491
+ cursor: pointer;
492
+ }
493
+
494
+ .pub-checkbox input {
495
+ accent-color: #a78bfa;
496
+ }
497
+
498
+ .pub-loading {
499
+ display: flex;
500
+ flex-direction: column;
501
+ align-items: center;
502
+ gap: 12px;
503
+ padding: 32px 0;
504
+ color: #a1a1aa;
505
+ }
506
+
507
+ .pub-error-item {
508
+ color: #fca5a5;
509
+ font-size: 12px;
510
+ padding: 4px 0;
511
+ }
512
+
513
+ .pub-error-item::before {
514
+ content: '\2715 ';
515
+ }
516
+
517
+ .pub-warn-item {
518
+ color: #fde047;
519
+ font-size: 12px;
520
+ padding: 4px 0;
521
+ }
522
+
523
+ .pub-warn-item::before {
524
+ content: '\26A0 ';
525
+ }
526
+
527
+ .pub-valid {
528
+ color: #86efac;
529
+ font-size: 13px;
530
+ font-weight: 500;
531
+ margin-bottom: 12px;
532
+ }
533
+
534
+ .pub-listing-preview {
535
+ background: #18181b;
536
+ border: 1px solid #3f3f46;
537
+ border-radius: 8px;
538
+ padding: 16px;
539
+ margin-top: 12px;
540
+ }
541
+
542
+ .pub-listing-name {
543
+ font-size: 15px;
544
+ font-weight: 600;
545
+ color: #e4e4e7;
546
+ }
547
+
548
+ .pub-listing-desc {
549
+ font-size: 12px;
550
+ color: #a1a1aa;
551
+ margin-top: 4px;
552
+ }
553
+
554
+ .pub-listing-meta {
555
+ font-size: 11px;
556
+ color: #6b7280;
557
+ margin-top: 8px;
558
+ display: flex;
559
+ gap: 12px;
560
+ }
561
+
562
+ .pub-cost-info {
563
+ background: #1e1b2e;
564
+ border: 1px solid #3b3370;
565
+ border-radius: 8px;
566
+ padding: 12px;
567
+ margin-bottom: 12px;
568
+ font-size: 13px;
569
+ color: #e4e4e7;
570
+ }
571
+
572
+ .pub-cost-info strong {
573
+ color: #fde047;
574
+ }
575
+
576
+ .pub-build-output {
577
+ background: #0a0a0f;
578
+ border: 1px solid #3f3f46;
579
+ border-radius: 4px;
580
+ padding: 8px 12px;
581
+ font-family: 'SF Mono', 'Fira Code', monospace;
582
+ font-size: 11px;
583
+ max-height: 200px;
584
+ overflow-y: auto;
585
+ color: #a1a1aa;
586
+ white-space: pre-wrap;
587
+ display: none;
588
+ }
589
+
590
+ .pub-phase {
591
+ padding: 4px 0;
592
+ font-size: 12px;
593
+ color: #a1a1aa;
594
+ }
595
+
596
+ .pub-phase.active {
597
+ color: #e4e4e7;
598
+ }
599
+
600
+ .pub-phase.done {
601
+ color: #86efac;
602
+ }
603
+
604
+ .pub-phase.error {
605
+ color: #fca5a5;
606
+ }
607
+
608
+ .pub-phase::before {
609
+ content: '\25CB ';
610
+ }
611
+
612
+ .pub-phase.active::before {
613
+ content: '\25C9 ';
614
+ }
615
+
616
+ .pub-phase.done::before {
617
+ content: '\2713 ';
618
+ }
619
+
620
+ .pub-phase.error::before {
621
+ content: '\2715 ';
622
+ }
623
+
624
+ .pub-review-status {
625
+ text-align: center;
626
+ padding: 24px 0;
627
+ }
628
+
629
+ .pub-congrats {
630
+ color: #86efac;
631
+ font-size: 16px;
632
+ font-weight: 600;
633
+ text-align: center;
634
+ margin-bottom: 12px;
635
+ }
636
+
637
+ .pub-rejected {
638
+ color: #fca5a5;
639
+ font-size: 14px;
640
+ font-weight: 500;
641
+ margin-bottom: 8px;
642
+ }
@@ -17,6 +17,7 @@
17
17
  <button id="mode-badge" class="mode-badge mode-mock" title="Click to switch mode">MOCK &#8646;</button>
18
18
  </div>
19
19
  <div class="toolbar-right">
20
+ <button id="publish-btn" class="btn-icon" title="Publish plugin">&#9650;</button>
20
21
  <span id="credit-balance" class="credit-balance" style="display: none"></span>
21
22
  <span id="theme-badge" class="theme-badge theme-dark">DARK</span>
22
23
  <button id="theme-toggle" class="btn-icon" title="Toggle theme">&#9788;/&#9790;</button>
@@ -37,6 +38,87 @@
37
38
  </div>
38
39
  </div>
39
40
  </div>
41
+ <!-- Publish wizard modal -->
42
+ <div id="publish-modal" class="modal-overlay" style="display: none">
43
+ <div class="modal publish-modal">
44
+ <div class="publish-steps">
45
+ <span class="publish-step active" data-step="1">1. Configure</span>
46
+ <span class="publish-step" data-step="2">2. Validate</span>
47
+ <span class="publish-step" data-step="3">3. Build &amp; Submit</span>
48
+ <span class="publish-step" data-step="4">4. Status</span>
49
+ </div>
50
+ <div id="publish-step-1" class="publish-content">
51
+ <div class="publish-form">
52
+ <label>Name</label>
53
+ <input id="pub-name" class="modal-input" type="text" />
54
+ <label>Version</label>
55
+ <input id="pub-version" class="modal-input" type="text" placeholder="1.0.0" />
56
+ <label>Description</label>
57
+ <textarea id="pub-description" class="modal-input pub-textarea" rows="2"></textarea>
58
+ <label>About (optional)</label>
59
+ <textarea id="pub-expanded-desc" class="modal-input pub-textarea" rows="3"></textarea>
60
+ <label>Type</label>
61
+ <select id="pub-archetype" class="modal-input">
62
+ <option value="tool">Tool</option>
63
+ <option value="site">Site</option>
64
+ </select>
65
+ <label>Tags</label>
66
+ <div class="pub-tags-container">
67
+ <div id="pub-tags-list" class="pub-tags-list"></div>
68
+ <input id="pub-tags-input" class="modal-input" type="text" placeholder="Add tag, press Enter" />
69
+ </div>
70
+ <label>Pricing</label>
71
+ <select id="pub-pricing-model" class="modal-input">
72
+ <option value="free">Free</option>
73
+ <option value="fixed">Fixed Price</option>
74
+ <option value="per_use">Per Use</option>
75
+ </select>
76
+ <div id="pub-price-row" style="display:none">
77
+ <label>Price (cents)</label>
78
+ <input id="pub-price" class="modal-input" type="number" min="0" />
79
+ </div>
80
+ <label>Permissions</label>
81
+ <div class="pub-permissions" id="pub-permissions">
82
+ <label class="pub-checkbox"><input type="checkbox" value="theme:read" /> theme:read</label>
83
+ <label class="pub-checkbox"><input type="checkbox" value="user:profile:read" /> user:profile:read</label>
84
+ <label class="pub-checkbox"><input type="checkbox" value="storage:sandbox" /> storage:sandbox</label>
85
+ <label class="pub-checkbox"><input type="checkbox" value="entities:invoke" /> entities:invoke</label>
86
+ <label class="pub-checkbox"><input type="checkbox" value="entities:image_generate" /> entities:image_generate</label>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ <div id="publish-step-2" class="publish-content" style="display:none">
91
+ <div id="pub-validate-loading" class="pub-loading">
92
+ <div class="status-spinner"></div>
93
+ <p>Validating manifest...</p>
94
+ </div>
95
+ <div id="pub-validate-results" style="display:none">
96
+ <div id="pub-validate-status"></div>
97
+ <div id="pub-validate-errors"></div>
98
+ <div id="pub-validate-warnings"></div>
99
+ <div id="pub-listing-preview" class="pub-listing-preview"></div>
100
+ </div>
101
+ </div>
102
+ <div id="publish-step-3" class="publish-content" style="display:none">
103
+ <div id="pub-cost-info" class="pub-cost-info"></div>
104
+ <div id="pub-build-output" class="pub-build-output"></div>
105
+ <div id="pub-submit-progress"></div>
106
+ </div>
107
+ <div id="publish-step-4" class="publish-content" style="display:none">
108
+ <div id="pub-review-status" class="pub-review-status">
109
+ <div class="status-spinner"></div>
110
+ <p>Waiting for review...</p>
111
+ </div>
112
+ <div id="pub-review-result" style="display:none"></div>
113
+ </div>
114
+ <div id="pub-error" class="modal-error" style="display:none"></div>
115
+ <div class="modal-actions">
116
+ <button id="pub-cancel" class="btn-secondary">Cancel</button>
117
+ <button id="pub-back" class="btn-secondary" style="display:none">Back</button>
118
+ <button id="pub-next" class="btn-primary">Next</button>
119
+ </div>
120
+ </div>
121
+ </div>
40
122
  <div id="plugin-status" class="plugin-status">
41
123
  <div class="status-spinner"></div>
42
124
  <p>Connecting to plugin server...</p>
@@ -477,6 +477,388 @@
477
477
  });
478
478
  }
479
479
 
480
+ // ────────────────────────────────────────────────────────────────
481
+ // Publish Wizard
482
+ // ────────────────────────────────────────────────────────────────
483
+
484
+ var publishBtn = document.getElementById('publish-btn');
485
+ var publishModal = document.getElementById('publish-modal');
486
+ var pubCancel = document.getElementById('pub-cancel');
487
+ var pubBack = document.getElementById('pub-back');
488
+ var pubNext = document.getElementById('pub-next');
489
+ var pubError = document.getElementById('pub-error');
490
+ var pubStep = 1;
491
+ var pubManifest = null;
492
+ var pubSubmissionId = null;
493
+ var pubPollTimer = null;
494
+ var pubValidationPassed = false;
495
+
496
+ publishBtn.addEventListener('click', function () {
497
+ if (currentMode !== 'live' || !hasCredentials) {
498
+ pubError.textContent = 'Switch to live mode and sign in to publish.';
499
+ pubError.style.display = 'block';
500
+ publishModal.style.display = 'flex';
501
+ showPublishStep(1);
502
+ return;
503
+ }
504
+ pubError.style.display = 'none';
505
+ fetch('/api/manifest')
506
+ .then(function (r) {
507
+ if (!r.ok) throw new Error('fias-plugin.json not found');
508
+ return r.json();
509
+ })
510
+ .then(function (manifest) {
511
+ pubManifest = manifest;
512
+ populatePublishForm(manifest);
513
+ publishModal.style.display = 'flex';
514
+ showPublishStep(1);
515
+ })
516
+ .catch(function (err) {
517
+ pubError.textContent = err.message;
518
+ pubError.style.display = 'block';
519
+ publishModal.style.display = 'flex';
520
+ showPublishStep(1);
521
+ });
522
+ });
523
+
524
+ pubCancel.addEventListener('click', closePublishModal);
525
+ publishModal.addEventListener('click', function (e) {
526
+ if (e.target === publishModal) closePublishModal();
527
+ });
528
+
529
+ function closePublishModal() {
530
+ publishModal.style.display = 'none';
531
+ if (pubPollTimer) { clearInterval(pubPollTimer); pubPollTimer = null; }
532
+ pubStep = 1;
533
+ }
534
+
535
+ pubBack.addEventListener('click', function () {
536
+ if (pubStep > 1) showPublishStep(pubStep - 1);
537
+ });
538
+
539
+ pubNext.addEventListener('click', function () {
540
+ pubError.style.display = 'none';
541
+ if (pubStep === 1) {
542
+ collectAndSaveManifest().then(function () { showPublishStep(2); startValidation(); });
543
+ } else if (pubStep === 2 && pubValidationPassed) {
544
+ showPublishStep(3);
545
+ showCostInfo();
546
+ } else if (pubStep === 3) {
547
+ startBuildAndSubmit();
548
+ } else if (pubStep === 4) {
549
+ closePublishModal();
550
+ }
551
+ });
552
+
553
+ function showPublishStep(step) {
554
+ pubStep = step;
555
+ for (var i = 1; i <= 4; i++) {
556
+ var el = document.getElementById('publish-step-' + i);
557
+ if (el) el.style.display = i === step ? 'block' : 'none';
558
+ }
559
+ var steps = document.querySelectorAll('.publish-step');
560
+ steps.forEach(function (s, idx) {
561
+ s.className = 'publish-step' + (idx + 1 === step ? ' active' : idx + 1 < step ? ' completed' : '');
562
+ });
563
+ pubBack.style.display = step > 1 && step < 4 ? 'inline-block' : 'none';
564
+ if (step === 1) { pubNext.textContent = 'Validate'; pubNext.style.display = 'inline-block'; }
565
+ else if (step === 2) { pubNext.textContent = 'Build & Submit'; pubNext.style.display = 'inline-block'; pubNext.disabled = !pubValidationPassed; }
566
+ else if (step === 3) { pubNext.textContent = 'Confirm & Build'; pubNext.style.display = 'inline-block'; }
567
+ else if (step === 4) { pubNext.textContent = 'Close'; pubNext.style.display = 'inline-block'; }
568
+ }
569
+
570
+ function populatePublishForm(m) {
571
+ document.getElementById('pub-name').value = m.name || '';
572
+ document.getElementById('pub-version').value = m.version || '1.0.0';
573
+ document.getElementById('pub-description').value = m.description || '';
574
+ document.getElementById('pub-expanded-desc').value = m.expandedDescription || '';
575
+ document.getElementById('pub-archetype').value = m.archeType || 'tool';
576
+ document.getElementById('pub-pricing-model').value = m.pricing?.model || 'free';
577
+ document.getElementById('pub-price').value = m.pricing?.priceCents || '';
578
+ document.getElementById('pub-price-row').style.display = m.pricing?.model === 'free' ? 'none' : 'block';
579
+
580
+ // Tags
581
+ var tagsList = document.getElementById('pub-tags-list');
582
+ tagsList.innerHTML = '';
583
+ (m.tags || []).forEach(function (t) { addPublishTag(t); });
584
+
585
+ // Permissions
586
+ var checkboxes = document.querySelectorAll('#pub-permissions input[type="checkbox"]');
587
+ var perms = m.permissions || [];
588
+ checkboxes.forEach(function (cb) { cb.checked = perms.indexOf(cb.value) !== -1; });
589
+ }
590
+
591
+ // Tag management
592
+ document.getElementById('pub-tags-input').addEventListener('keydown', function (e) {
593
+ if (e.key === 'Enter' || e.key === ',') {
594
+ e.preventDefault();
595
+ var val = this.value.trim().replace(/,/g, '');
596
+ if (val) { addPublishTag(val); this.value = ''; }
597
+ }
598
+ });
599
+
600
+ function addPublishTag(text) {
601
+ var tag = document.createElement('span');
602
+ tag.className = 'pub-tag';
603
+ tag.innerHTML = escapeHtml(text) + ' <button class="pub-tag-remove">&times;</button>';
604
+ tag.querySelector('.pub-tag-remove').addEventListener('click', function () { tag.remove(); });
605
+ document.getElementById('pub-tags-list').appendChild(tag);
606
+ }
607
+
608
+ // Pricing model change
609
+ document.getElementById('pub-pricing-model').addEventListener('change', function () {
610
+ document.getElementById('pub-price-row').style.display = this.value === 'free' ? 'none' : 'block';
611
+ });
612
+
613
+ function collectManifest() {
614
+ var tags = [];
615
+ document.querySelectorAll('#pub-tags-list .pub-tag').forEach(function (t) {
616
+ tags.push(t.textContent.replace('\u00d7', '').trim());
617
+ });
618
+ var perms = [];
619
+ document.querySelectorAll('#pub-permissions input:checked').forEach(function (cb) { perms.push(cb.value); });
620
+ var pricingModel = document.getElementById('pub-pricing-model').value;
621
+ var pricing = { model: pricingModel, currency: 'usd' };
622
+ if (pricingModel !== 'free') pricing.priceCents = parseInt(document.getElementById('pub-price').value, 10) || 0;
623
+
624
+ return {
625
+ name: document.getElementById('pub-name').value.trim(),
626
+ version: document.getElementById('pub-version').value.trim(),
627
+ description: document.getElementById('pub-description').value.trim(),
628
+ expandedDescription: document.getElementById('pub-expanded-desc').value.trim() || undefined,
629
+ main: (pubManifest && pubManifest.main) || 'src/index.tsx',
630
+ archeType: document.getElementById('pub-archetype').value,
631
+ tags: tags,
632
+ pricing: pricing,
633
+ permissions: perms,
634
+ sdk: (pubManifest && pubManifest.sdk) || '^1.0.0',
635
+ dependencies: pubManifest && pubManifest.dependencies,
636
+ };
637
+ }
638
+
639
+ function collectAndSaveManifest() {
640
+ var manifest = collectManifest();
641
+ pubManifest = manifest;
642
+ return fetch('/api/manifest', {
643
+ method: 'PUT',
644
+ headers: { 'Content-Type': 'application/json' },
645
+ body: JSON.stringify(manifest),
646
+ }).then(function (r) {
647
+ if (!r.ok) throw new Error('Failed to save manifest');
648
+ });
649
+ }
650
+
651
+ function startValidation() {
652
+ pubValidationPassed = false;
653
+ pubNext.disabled = true;
654
+ document.getElementById('pub-validate-loading').style.display = 'flex';
655
+ document.getElementById('pub-validate-results').style.display = 'none';
656
+
657
+ fetch('/api/publish/validate', { method: 'POST' })
658
+ .then(function (r) { return r.json(); })
659
+ .then(function (data) {
660
+ document.getElementById('pub-validate-loading').style.display = 'none';
661
+ document.getElementById('pub-validate-results').style.display = 'block';
662
+
663
+ var statusEl = document.getElementById('pub-validate-status');
664
+ var errorsEl = document.getElementById('pub-validate-errors');
665
+ var warningsEl = document.getElementById('pub-validate-warnings');
666
+ errorsEl.innerHTML = '';
667
+ warningsEl.innerHTML = '';
668
+
669
+ if (data.valid && (!data.errors || data.errors.length === 0)) {
670
+ statusEl.innerHTML = '<div class="pub-valid">Manifest is valid</div>';
671
+ pubValidationPassed = true;
672
+ pubNext.disabled = false;
673
+ } else {
674
+ statusEl.innerHTML = '<div style="color:#fca5a5;font-weight:500;margin-bottom:8px">Validation failed</div>';
675
+ }
676
+
677
+ if (data.errors) {
678
+ data.errors.forEach(function (e) {
679
+ var div = document.createElement('div');
680
+ div.className = 'pub-error-item';
681
+ div.textContent = e;
682
+ errorsEl.appendChild(div);
683
+ });
684
+ }
685
+ if (data.warnings) {
686
+ data.warnings.forEach(function (w) {
687
+ var div = document.createElement('div');
688
+ div.className = 'pub-warn-item';
689
+ div.textContent = w;
690
+ warningsEl.appendChild(div);
691
+ });
692
+ }
693
+
694
+ // Listing preview
695
+ var preview = document.getElementById('pub-listing-preview');
696
+ var m = pubManifest;
697
+ preview.innerHTML =
698
+ '<div class="pub-listing-name">' + escapeHtml(m.name) + '</div>' +
699
+ '<div class="pub-listing-desc">' + escapeHtml(m.description) + '</div>' +
700
+ '<div class="pub-listing-meta">' +
701
+ '<span>v' + escapeHtml(m.version) + '</span>' +
702
+ '<span>' + escapeHtml(m.archeType) + '</span>' +
703
+ '<span>' + escapeHtml(m.pricing.model) + '</span>' +
704
+ '</div>';
705
+ })
706
+ .catch(function (err) {
707
+ document.getElementById('pub-validate-loading').style.display = 'none';
708
+ pubError.textContent = err.message;
709
+ pubError.style.display = 'block';
710
+ });
711
+ }
712
+
713
+ function showCostInfo() {
714
+ var costEl = document.getElementById('pub-cost-info');
715
+ costEl.innerHTML = '<p>Submission cost: <strong>5,000 credits ($50.00)</strong> for first listing, <strong>100 credits ($1.00)</strong> for updates.</p>';
716
+ fetch('/api/credits').then(function (r) { return r.json(); }).then(function (d) {
717
+ if (d.balance != null && isFinite(d.balance)) {
718
+ costEl.innerHTML += '<p style="margin-top:8px">Your balance: <strong>' + d.balance.toFixed(2) + ' credits</strong></p>';
719
+ }
720
+ }).catch(function () {});
721
+ document.getElementById('pub-build-output').style.display = 'none';
722
+ document.getElementById('pub-build-output').textContent = '';
723
+ document.getElementById('pub-submit-progress').innerHTML = '';
724
+ }
725
+
726
+ function startBuildAndSubmit() {
727
+ pubNext.style.display = 'none';
728
+ pubBack.style.display = 'none';
729
+ var outputEl = document.getElementById('pub-build-output');
730
+ var progressEl = document.getElementById('pub-submit-progress');
731
+ outputEl.style.display = 'block';
732
+ outputEl.textContent = '';
733
+ progressEl.innerHTML = '<div class="pub-phase active" id="phase-build">Building...</div>' +
734
+ '<div class="pub-phase" id="phase-package">Packaging...</div>' +
735
+ '<div class="pub-phase" id="phase-submit">Uploading & submitting...</div>';
736
+
737
+ // SSE build
738
+ fetch('/api/publish/build', { method: 'POST' })
739
+ .then(function (response) {
740
+ var reader = response.body.getReader();
741
+ var decoder = new TextDecoder();
742
+ var buffer = '';
743
+
744
+ function pump() {
745
+ return reader.read().then(function (chunk) {
746
+ if (chunk.done) return;
747
+ buffer += decoder.decode(chunk.value, { stream: true });
748
+ var lines = buffer.split('\n');
749
+ buffer = lines.pop() || '';
750
+ for (var i = 0; i < lines.length; i++) {
751
+ if (lines[i].indexOf('data: ') !== 0) continue;
752
+ try {
753
+ var parsed = JSON.parse(lines[i].slice(6));
754
+ if (parsed.line) {
755
+ outputEl.textContent += parsed.line + '\n';
756
+ outputEl.scrollTop = outputEl.scrollHeight;
757
+ }
758
+ if (parsed.done) {
759
+ if (parsed.code !== 0) throw new Error('Build failed (exit code ' + parsed.code + ')');
760
+ document.getElementById('phase-build').className = 'pub-phase done';
761
+ document.getElementById('phase-build').textContent = 'Build complete';
762
+ return doPackageAndSubmit();
763
+ }
764
+ } catch (e) {
765
+ if (e instanceof SyntaxError) continue;
766
+ throw e;
767
+ }
768
+ }
769
+ return pump();
770
+ });
771
+ }
772
+ return pump();
773
+ })
774
+ .catch(function (err) {
775
+ document.getElementById('phase-build').className = 'pub-phase error';
776
+ document.getElementById('phase-build').textContent = 'Build failed: ' + err.message;
777
+ pubBack.style.display = 'inline-block';
778
+ });
779
+ }
780
+
781
+ function doPackageAndSubmit() {
782
+ var progressPhase = document.getElementById('phase-package');
783
+ progressPhase.className = 'pub-phase active';
784
+
785
+ return fetch('/api/publish/package', { method: 'POST' })
786
+ .then(function (r) {
787
+ if (!r.ok) return r.json().then(function (e) { throw new Error(e.error); });
788
+ return r.json();
789
+ })
790
+ .then(function (data) {
791
+ progressPhase.className = 'pub-phase done';
792
+ progressPhase.textContent = 'Packaged (' + Math.round(data.sizeBytes / 1024) + ' KB)';
793
+ document.getElementById('phase-submit').className = 'pub-phase active';
794
+
795
+ return fetch('/api/publish/submit', {
796
+ method: 'POST',
797
+ headers: { 'Content-Type': 'application/json' },
798
+ body: JSON.stringify({}),
799
+ });
800
+ })
801
+ .then(function (r) {
802
+ if (!r.ok) return r.json().then(function (e) { throw new Error(e.error); });
803
+ return r.json();
804
+ })
805
+ .then(function (data) {
806
+ document.getElementById('phase-submit').className = 'pub-phase done';
807
+ document.getElementById('phase-submit').textContent = 'Submitted for review';
808
+ pubSubmissionId = data.submissionId;
809
+ logMessage('info', 'Submitted: ' + pubSubmissionId);
810
+ setTimeout(function () { showPublishStep(4); startStatusPolling(); }, 1000);
811
+ })
812
+ .catch(function (err) {
813
+ var active = document.querySelector('.pub-phase.active');
814
+ if (active) { active.className = 'pub-phase error'; active.textContent += ' — ' + err.message; }
815
+ pubBack.style.display = 'inline-block';
816
+ });
817
+ }
818
+
819
+ function startStatusPolling() {
820
+ if (pubPollTimer) clearInterval(pubPollTimer);
821
+ document.getElementById('pub-review-status').style.display = 'block';
822
+ document.getElementById('pub-review-result').style.display = 'none';
823
+
824
+ pubPollTimer = setInterval(function () {
825
+ fetch('/api/publish/status/' + pubSubmissionId)
826
+ .then(function (r) { return r.json(); })
827
+ .then(function (data) {
828
+ var sub = data.submission || data;
829
+ var status = sub.status;
830
+ var statusEl = document.getElementById('pub-review-status');
831
+
832
+ if (status === 'reviewing') {
833
+ statusEl.innerHTML = '<div class="status-spinner"></div><p>AI is reviewing your plugin...</p>';
834
+ } else if (status === 'building') {
835
+ statusEl.innerHTML = '<div class="status-spinner"></div><p>Building your plugin...</p>';
836
+ } else if (status === 'published') {
837
+ clearInterval(pubPollTimer);
838
+ pubPollTimer = null;
839
+ statusEl.style.display = 'none';
840
+ document.getElementById('pub-review-result').style.display = 'block';
841
+ document.getElementById('pub-review-result').innerHTML =
842
+ '<div class="pub-congrats">Published!</div>' +
843
+ '<p style="text-align:center;color:#a1a1aa;font-size:13px">Your plugin is now live on the Fias marketplace.</p>';
844
+ logMessage('info', 'Plugin published!');
845
+ } else if (status === 'rejected') {
846
+ clearInterval(pubPollTimer);
847
+ pubPollTimer = null;
848
+ statusEl.style.display = 'none';
849
+ document.getElementById('pub-review-result').style.display = 'block';
850
+ var html = '<div class="pub-rejected">Submission Rejected</div>';
851
+ if (sub.errorMessage) html += '<p style="color:#a1a1aa;font-size:12px;margin-bottom:8px">' + escapeHtml(sub.errorMessage) + '</p>';
852
+ if (data.review) {
853
+ html += '<p style="color:#6b7280;font-size:11px">Risk score: ' + (data.review.riskScore || 'N/A') + '</p>';
854
+ }
855
+ document.getElementById('pub-review-result').innerHTML = html;
856
+ }
857
+ })
858
+ .catch(function () {});
859
+ }, 3000);
860
+ }
861
+
480
862
  // ────────────────────────────────────────────────────────────────
481
863
  // Iframe Init
482
864
  // ────────────────────────────────────────────────────────────────
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fias/plugin-dev-harness",
3
- "version": "1.5.1",
3
+ "version": "1.5.2",
4
4
  "description": "Development harness for building and testing FIAS plugin arches locally",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",