@fias/plugin-dev-harness 1.6.4 → 1.6.6

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 (48) hide show
  1. package/dist/bridge/live-handler.d.ts.map +1 -1
  2. package/dist/bridge/live-handler.js +9 -0
  3. package/dist/bridge/live-handler.js.map +1 -1
  4. package/dist/bridge/mock-handler.d.ts +2 -0
  5. package/dist/bridge/mock-handler.d.ts.map +1 -1
  6. package/dist/bridge/mock-handler.js +120 -0
  7. package/dist/bridge/mock-handler.js.map +1 -1
  8. package/dist/cli/dev.d.ts.map +1 -1
  9. package/dist/cli/dev.js +12 -1
  10. package/dist/cli/dev.js.map +1 -1
  11. package/dist/cli/dev.test.js +19 -0
  12. package/dist/cli/dev.test.js.map +1 -1
  13. package/dist/cli/index.d.ts.map +1 -1
  14. package/dist/cli/index.js +2 -1
  15. package/dist/cli/index.js.map +1 -1
  16. package/dist/cli/index.test.js +11 -4
  17. package/dist/cli/index.test.js.map +1 -1
  18. package/dist/cli/submit.d.ts.map +1 -1
  19. package/dist/cli/submit.js +11 -5
  20. package/dist/cli/submit.js.map +1 -1
  21. package/dist/cli/submit.test.js +9 -5
  22. package/dist/cli/submit.test.js.map +1 -1
  23. package/dist/cli/sync.d.ts.map +1 -1
  24. package/dist/cli/sync.js +5 -8
  25. package/dist/cli/sync.js.map +1 -1
  26. package/dist/cli/sync.test.d.ts +2 -0
  27. package/dist/cli/sync.test.d.ts.map +1 -0
  28. package/dist/cli/sync.test.js +75 -0
  29. package/dist/cli/sync.test.js.map +1 -0
  30. package/dist/cli/update-checker.d.ts +29 -0
  31. package/dist/cli/update-checker.d.ts.map +1 -0
  32. package/dist/cli/update-checker.js +186 -0
  33. package/dist/cli/update-checker.js.map +1 -0
  34. package/dist/cli/update-checker.test.d.ts +2 -0
  35. package/dist/cli/update-checker.test.d.ts.map +1 -0
  36. package/dist/cli/update-checker.test.js +170 -0
  37. package/dist/cli/update-checker.test.js.map +1 -0
  38. package/dist/index.js +0 -0
  39. package/dist/server/harness-server.d.ts +4 -0
  40. package/dist/server/harness-server.d.ts.map +1 -1
  41. package/dist/server/harness-server.js +55 -6
  42. package/dist/server/harness-server.js.map +1 -1
  43. package/dist/server/harness-server.test.js +6 -0
  44. package/dist/server/harness-server.test.js.map +1 -1
  45. package/dist/server/static/harness.css +53 -12
  46. package/dist/server/static/harness.html +11 -23
  47. package/dist/server/static/harness.js +140 -54
  48. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8FpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E1D"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyFpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4E1D"}
package/dist/cli/sync.js CHANGED
@@ -53,18 +53,15 @@ const fs = __importStar(require("fs"));
53
53
  const path = __importStar(require("path"));
54
54
  const chalk_1 = __importDefault(require("chalk"));
55
55
  /** Files that are always safe to overwrite — pure reference material. */
56
- const ALWAYS_SYNC = [
57
- 'CLAUDE.md',
58
- 'AGENTS.md',
59
- '.cursorrules',
60
- '.github/copilot-instructions.md',
61
- ];
56
+ const ALWAYS_SYNC = ['CLAUDE.md', 'AGENTS.md', '.cursorrules', '.github/copilot-instructions.md'];
62
57
  /** Config files that are safe to sync but worth showing changes for. */
63
58
  const CONFIG_SYNC = ['tsconfig.json', 'vite.config.ts', 'index.html'];
64
59
  function resolveTemplateDir() {
65
60
  try {
66
- const sdkPkg = require.resolve('@fias/arche-sdk/package.json');
67
- return path.join(path.dirname(sdkPkg), 'templates', 'default');
61
+ // Resolve the SDK main entry (dist/index.js), then navigate up to package root
62
+ const sdkMain = require.resolve('@fias/arche-sdk');
63
+ const sdkRoot = path.resolve(path.dirname(sdkMain), '..');
64
+ return path.join(sdkRoot, 'templates', 'default');
68
65
  }
69
66
  catch {
70
67
  return null;
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.test.d.ts","sourceRoot":"","sources":["../../src/cli/sync.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const index_1 = require("./index");
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const LOCAL_TEMPLATE_DIR = path.resolve(__dirname, '../../../arche-sdk/templates/default');
40
+ describe('cli/sync', () => {
41
+ it('registers the sync command', () => {
42
+ const program = (0, index_1.createCli)();
43
+ const names = program.commands.map((c) => c.name());
44
+ expect(names).toContain('sync');
45
+ });
46
+ describe('template files', () => {
47
+ it('template directory exists', () => {
48
+ expect(fs.existsSync(LOCAL_TEMPLATE_DIR)).toBe(true);
49
+ });
50
+ it('contains expected always-sync files', () => {
51
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, 'CLAUDE.md'))).toBe(true);
52
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, 'AGENTS.md'))).toBe(true);
53
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, '.cursorrules'))).toBe(true);
54
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, '.github/copilot-instructions.md'))).toBe(true);
55
+ });
56
+ it('contains expected config-sync files', () => {
57
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, 'tsconfig.json'))).toBe(true);
58
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, 'vite.config.ts'))).toBe(true);
59
+ expect(fs.existsSync(path.join(LOCAL_TEMPLATE_DIR, 'index.html'))).toBe(true);
60
+ });
61
+ it('CLAUDE.md and AGENTS.md match except cross-reference line', () => {
62
+ const claude = fs.readFileSync(path.join(LOCAL_TEMPLATE_DIR, 'CLAUDE.md'), 'utf-8');
63
+ const agents = fs.readFileSync(path.join(LOCAL_TEMPLATE_DIR, 'AGENTS.md'), 'utf-8');
64
+ const normalizedClaude = claude.replace(/see `AGENTS\.md`/, 'see OTHER');
65
+ const normalizedAgents = agents.replace(/see `CLAUDE\.md`/, 'see OTHER');
66
+ expect(normalizedClaude).toBe(normalizedAgents);
67
+ });
68
+ it('templates contain update check instructions', () => {
69
+ const claude = fs.readFileSync(path.join(LOCAL_TEMPLATE_DIR, 'CLAUDE.md'), 'utf-8');
70
+ expect(claude).toContain('Check for Updates');
71
+ expect(claude).toContain('fias-dev sync');
72
+ });
73
+ });
74
+ });
75
+ //# sourceMappingURL=sync.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.test.js","sourceRoot":"","sources":["../../src/cli/sync.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mCAAoC;AACpC,uCAAyB;AACzB,2CAA6B;AAE7B,MAAM,kBAAkB,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,sCAAsC,CAAC,CAAC;AAE3F,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACpC,MAAM,OAAO,GAAG,IAAA,iBAAS,GAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7E,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChF,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,iCAAiC,CAAC,CAAC,CAAC,CAAC,IAAI,CAC1F,IAAI,CACL,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjF,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClF,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;YACnE,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YACpF,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;YACzE,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;YACzE,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACrD,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;YACpF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Harness UI Update Checker
3
+ *
4
+ * Fetches the latest harness UI files (HTML, JS, CSS) from the platform CDN
5
+ * and caches them locally. The harness server serves from the cache, falling
6
+ * back to the bundled npm copy when offline or the cache is empty.
7
+ *
8
+ * This decouples UI updates (form fields, pricing options, wizard changes)
9
+ * from npm package releases — deploying to S3 is all that's needed.
10
+ */
11
+ /**
12
+ * Read the installed package version from package.json.
13
+ * Works from both src/cli/ (dev) and dist/cli/ (published).
14
+ */
15
+ export declare function getInstalledVersion(): string;
16
+ /**
17
+ * Fetch latest harness UI files from the CDN and cache locally.
18
+ * Uses ETags for efficient conditional requests (304 Not Modified).
19
+ *
20
+ * @returns true if all files were fetched/cached successfully, false otherwise
21
+ */
22
+ export declare function fetchHarnessUI(): Promise<boolean>;
23
+ /**
24
+ * Returns the cached static dir path if all harness files exist and are valid.
25
+ * Returns null if the cache is incomplete, missing, or contains invalid content
26
+ * (e.g., SPA catch-all responses).
27
+ */
28
+ export declare function getCachedStaticDir(): string | null;
29
+ //# sourceMappingURL=update-checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../../src/cli/update-checker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAkBH;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAS5C;AAkFD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAavD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAclD"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ /**
3
+ * Harness UI Update Checker
4
+ *
5
+ * Fetches the latest harness UI files (HTML, JS, CSS) from the platform CDN
6
+ * and caches them locally. The harness server serves from the cache, falling
7
+ * back to the bundled npm copy when offline or the cache is empty.
8
+ *
9
+ * This decouples UI updates (form fields, pricing options, wizard changes)
10
+ * from npm package releases — deploying to S3 is all that's needed.
11
+ */
12
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ var desc = Object.getOwnPropertyDescriptor(m, k);
15
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
16
+ desc = { enumerable: true, get: function() { return m[k]; } };
17
+ }
18
+ Object.defineProperty(o, k2, desc);
19
+ }) : (function(o, m, k, k2) {
20
+ if (k2 === undefined) k2 = k;
21
+ o[k2] = m[k];
22
+ }));
23
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
24
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
25
+ }) : function(o, v) {
26
+ o["default"] = v;
27
+ });
28
+ var __importStar = (this && this.__importStar) || (function () {
29
+ var ownKeys = function(o) {
30
+ ownKeys = Object.getOwnPropertyNames || function (o) {
31
+ var ar = [];
32
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
33
+ return ar;
34
+ };
35
+ return ownKeys(o);
36
+ };
37
+ return function (mod) {
38
+ if (mod && mod.__esModule) return mod;
39
+ var result = {};
40
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
41
+ __setModuleDefault(result, mod);
42
+ return result;
43
+ };
44
+ })();
45
+ Object.defineProperty(exports, "__esModule", { value: true });
46
+ exports.getInstalledVersion = getInstalledVersion;
47
+ exports.fetchHarnessUI = fetchHarnessUI;
48
+ exports.getCachedStaticDir = getCachedStaticDir;
49
+ const fs = __importStar(require("fs"));
50
+ const path = __importStar(require("path"));
51
+ const os = __importStar(require("os"));
52
+ const HARNESS_FILES = ['harness.html', 'harness.js', 'harness.css'];
53
+ const CACHE_DIR = path.join(os.homedir(), '.fias', 'harness-cache');
54
+ const ETAG_FILE = path.join(CACHE_DIR, '.etags.json');
55
+ const FETCH_TIMEOUT_MS = 3000;
56
+ /** Default CDN base URL. Overridable via FIAS_HARNESS_CDN_URL env var. */
57
+ const DEFAULT_CDN_URL = 'https://staging.fias.io/harness';
58
+ function getCdnBaseUrl() {
59
+ return (process.env.FIAS_HARNESS_CDN_URL || DEFAULT_CDN_URL).replace(/\/$/, '');
60
+ }
61
+ /**
62
+ * Read the installed package version from package.json.
63
+ * Works from both src/cli/ (dev) and dist/cli/ (published).
64
+ */
65
+ function getInstalledVersion() {
66
+ try {
67
+ // From dist/cli/ or src/cli/, package.json is two levels up
68
+ const pkgPath = path.resolve(__dirname, '..', '..', 'package.json');
69
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
70
+ return pkg.version || 'unknown';
71
+ }
72
+ catch {
73
+ return 'unknown';
74
+ }
75
+ }
76
+ /** Load saved ETags from disk. */
77
+ function loadEtags() {
78
+ try {
79
+ return JSON.parse(fs.readFileSync(ETAG_FILE, 'utf-8'));
80
+ }
81
+ catch {
82
+ return {};
83
+ }
84
+ }
85
+ /** Save ETags to disk. */
86
+ function saveEtags(etags) {
87
+ try {
88
+ fs.writeFileSync(ETAG_FILE, JSON.stringify(etags, null, 2));
89
+ }
90
+ catch {
91
+ // Non-critical — next fetch will just re-download
92
+ }
93
+ }
94
+ /** Content-type signatures to reject SPA catch-all responses. */
95
+ const EXPECTED_SIGNATURES = {
96
+ 'harness.html': (c) => c.includes('id="plugin-iframe"'),
97
+ 'harness.js': (c) => !c.trimStart().startsWith('<!') && (c.includes('postMessage') || c.includes('iframe')),
98
+ 'harness.css': (c) => !c.trimStart().startsWith('<!') && c.includes('{'),
99
+ };
100
+ /**
101
+ * Fetch a single file from the CDN, using ETag for conditional requests.
102
+ * Returns true if the file was downloaded (or already cached via 304).
103
+ * Rejects responses that look like SPA catch-all HTML (e.g., the main
104
+ * Fias app index.html served for unknown paths).
105
+ */
106
+ async function fetchFile(fileName, etags) {
107
+ const url = `${getCdnBaseUrl()}/${fileName}`;
108
+ const headers = {};
109
+ if (etags[fileName]) {
110
+ headers['If-None-Match'] = etags[fileName];
111
+ }
112
+ const controller = new AbortController();
113
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
114
+ try {
115
+ const response = await fetch(url, { headers, signal: controller.signal });
116
+ if (response.status === 304) {
117
+ // File unchanged — cached version is current
118
+ return true;
119
+ }
120
+ if (!response.ok) {
121
+ return false;
122
+ }
123
+ const content = await response.text();
124
+ // Validate that the response is actually the harness file, not a
125
+ // SPA catch-all response (e.g., the main Fias app's index.html).
126
+ const validate = EXPECTED_SIGNATURES[fileName];
127
+ if (validate && !validate(content)) {
128
+ return false;
129
+ }
130
+ const filePath = path.join(CACHE_DIR, fileName);
131
+ fs.writeFileSync(filePath, content, 'utf-8');
132
+ // Save ETag for next conditional request
133
+ const etag = response.headers.get('etag');
134
+ if (etag) {
135
+ etags[fileName] = etag;
136
+ }
137
+ return true;
138
+ }
139
+ catch {
140
+ return false;
141
+ }
142
+ finally {
143
+ clearTimeout(timer);
144
+ }
145
+ }
146
+ /**
147
+ * Fetch latest harness UI files from the CDN and cache locally.
148
+ * Uses ETags for efficient conditional requests (304 Not Modified).
149
+ *
150
+ * @returns true if all files were fetched/cached successfully, false otherwise
151
+ */
152
+ async function fetchHarnessUI() {
153
+ // Ensure cache directory exists
154
+ try {
155
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
156
+ }
157
+ catch {
158
+ return false;
159
+ }
160
+ const etags = loadEtags();
161
+ const results = await Promise.all(HARNESS_FILES.map((f) => fetchFile(f, etags)));
162
+ saveEtags(etags);
163
+ return results.every(Boolean);
164
+ }
165
+ /**
166
+ * Returns the cached static dir path if all harness files exist and are valid.
167
+ * Returns null if the cache is incomplete, missing, or contains invalid content
168
+ * (e.g., SPA catch-all responses).
169
+ */
170
+ function getCachedStaticDir() {
171
+ const allValid = HARNESS_FILES.every((f) => {
172
+ try {
173
+ const filePath = path.join(CACHE_DIR, f);
174
+ if (!fs.statSync(filePath).isFile())
175
+ return false;
176
+ const content = fs.readFileSync(filePath, 'utf-8');
177
+ const validate = EXPECTED_SIGNATURES[f];
178
+ return !validate || validate(content);
179
+ }
180
+ catch {
181
+ return false;
182
+ }
183
+ });
184
+ return allValid ? CACHE_DIR : null;
185
+ }
186
+ //# sourceMappingURL=update-checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../../src/cli/update-checker.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBH,kDASC;AAwFD,wCAaC;AAOD,gDAcC;AAvJD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,aAAa,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;AACpE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;AACtD,MAAM,gBAAgB,GAAG,IAAI,CAAC;AAE9B,0EAA0E;AAC1E,MAAM,eAAe,GAAG,iCAAiC,CAAC;AAE1D,SAAS,aAAa;IACpB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AAClF,CAAC;AAED;;;GAGG;AACH,SAAgB,mBAAmB;IACjC,IAAI,CAAC;QACH,4DAA4D;QAC5D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC,OAAO,IAAI,SAAS,CAAC;IAClC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,kCAAkC;AAClC,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,SAAS,SAAS,CAAC,KAA6B;IAC9C,IAAI,CAAC;QACH,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,kDAAkD;IACpD,CAAC;AACH,CAAC;AAED,iEAAiE;AACjE,MAAM,mBAAmB,GAAiD;IACxE,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IACvD,YAAY,EAAE,CAAC,CAAC,EAAE,EAAE,CAClB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxF,aAAa,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;CACzE,CAAC;AAEF;;;;;GAKG;AACH,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,KAA6B;IACtE,MAAM,GAAG,GAAG,GAAG,aAAa,EAAE,IAAI,QAAQ,EAAE,CAAC;IAC7C,MAAM,OAAO,GAA2B,EAAE,CAAC;IAC3C,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAE1E,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,6CAA6C;YAC7C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEtC,iEAAiE;QACjE,iEAAiE;QACjE,MAAM,QAAQ,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAE7C,yCAAyC;QACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,IAAI,EAAE,CAAC;YACT,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACzB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,cAAc;IAClC,gCAAgC;IAChC,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IACjF,SAAS,CAAC,KAAK,CAAC,CAAC;IAEjB,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB;IAChC,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACzC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE;gBAAE,OAAO,KAAK,CAAC;YAClD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;AACrC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=update-checker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.test.d.ts","sourceRoot":"","sources":["../../src/cli/update-checker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ const fs = __importStar(require("fs"));
37
+ const path = __importStar(require("path"));
38
+ const os = __importStar(require("os"));
39
+ const update_checker_1 = require("./update-checker");
40
+ const CACHE_DIR = path.join(os.homedir(), '.fias', 'harness-cache');
41
+ // Mock fetch globally
42
+ const mockFetch = jest.fn();
43
+ global.fetch = mockFetch;
44
+ describe('update-checker', () => {
45
+ beforeEach(() => {
46
+ jest.clearAllMocks();
47
+ });
48
+ describe('getInstalledVersion', () => {
49
+ it('returns the version from package.json', () => {
50
+ const version = (0, update_checker_1.getInstalledVersion)();
51
+ // Should match the actual package version
52
+ expect(version).toMatch(/^\d+\.\d+\.\d+/);
53
+ });
54
+ });
55
+ // Valid harness file content that passes signature validation
56
+ const VALID_HTML = '<html><iframe id="plugin-iframe"></iframe></html>';
57
+ const VALID_JS = '(function(){ var iframe = document.getElementById("plugin-iframe"); iframe.contentWindow.postMessage({},"*"); })();';
58
+ const VALID_CSS = '.toolbar { display: flex; }';
59
+ describe('fetchHarnessUI', () => {
60
+ it('returns true when all files are fetched successfully', async () => {
61
+ const responses = {
62
+ 'harness.html': VALID_HTML,
63
+ 'harness.js': VALID_JS,
64
+ 'harness.css': VALID_CSS,
65
+ };
66
+ mockFetch.mockImplementation((url) => {
67
+ const fileName = url.split('/').pop() || '';
68
+ return Promise.resolve({
69
+ ok: true,
70
+ status: 200,
71
+ text: () => Promise.resolve(responses[fileName] || ''),
72
+ headers: new Map([['etag', '"abc123"']]),
73
+ });
74
+ });
75
+ // Ensure cache dir exists
76
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
77
+ const result = await (0, update_checker_1.fetchHarnessUI)();
78
+ expect(result).toBe(true);
79
+ expect(mockFetch).toHaveBeenCalledTimes(3); // html, js, css
80
+ });
81
+ it('returns false when CDN serves SPA catch-all instead of harness files', async () => {
82
+ const spaHtml = '<!doctype html><html><head><title>Fias</title></head><body><div id="root"></div></body></html>';
83
+ mockFetch.mockResolvedValue({
84
+ ok: true,
85
+ status: 200,
86
+ text: () => Promise.resolve(spaHtml),
87
+ headers: new Map(),
88
+ });
89
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
90
+ const result = await (0, update_checker_1.fetchHarnessUI)();
91
+ expect(result).toBe(false);
92
+ });
93
+ it('returns true when server responds with 304 Not Modified', async () => {
94
+ mockFetch.mockResolvedValue({
95
+ ok: false,
96
+ status: 304,
97
+ text: () => Promise.resolve(''),
98
+ headers: new Map(),
99
+ });
100
+ // Pre-populate cache with valid content
101
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
102
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.html'), VALID_HTML);
103
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.js'), VALID_JS);
104
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.css'), VALID_CSS);
105
+ const result = await (0, update_checker_1.fetchHarnessUI)();
106
+ expect(result).toBe(true);
107
+ });
108
+ it('returns false when fetch fails (network error)', async () => {
109
+ mockFetch.mockRejectedValue(new Error('Network error'));
110
+ const result = await (0, update_checker_1.fetchHarnessUI)();
111
+ expect(result).toBe(false);
112
+ });
113
+ it('returns false when server returns error status', async () => {
114
+ mockFetch.mockResolvedValue({
115
+ ok: false,
116
+ status: 500,
117
+ text: () => Promise.resolve('Server error'),
118
+ headers: new Map(),
119
+ });
120
+ const result = await (0, update_checker_1.fetchHarnessUI)();
121
+ expect(result).toBe(false);
122
+ });
123
+ });
124
+ describe('getCachedStaticDir', () => {
125
+ it('returns cache dir when all files exist and are valid', () => {
126
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
127
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.html'), VALID_HTML);
128
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.js'), VALID_JS);
129
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.css'), VALID_CSS);
130
+ expect((0, update_checker_1.getCachedStaticDir)()).toBe(CACHE_DIR);
131
+ });
132
+ it('returns null when cache dir does not exist', () => {
133
+ // Remove cache dir if it exists
134
+ try {
135
+ fs.rmSync(CACHE_DIR, { recursive: true });
136
+ }
137
+ catch {
138
+ // ignore
139
+ }
140
+ expect((0, update_checker_1.getCachedStaticDir)()).toBeNull();
141
+ });
142
+ it('returns null when some files are missing', () => {
143
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
144
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.html'), VALID_HTML);
145
+ // Missing harness.js and harness.css
146
+ try {
147
+ fs.unlinkSync(path.join(CACHE_DIR, 'harness.js'));
148
+ }
149
+ catch {
150
+ // ignore
151
+ }
152
+ try {
153
+ fs.unlinkSync(path.join(CACHE_DIR, 'harness.css'));
154
+ }
155
+ catch {
156
+ // ignore
157
+ }
158
+ expect((0, update_checker_1.getCachedStaticDir)()).toBeNull();
159
+ });
160
+ it('returns null when cached files contain SPA catch-all HTML', () => {
161
+ const spaHtml = '<!doctype html><html><head><title>Fias</title></head><body><div id="root"></div></body></html>';
162
+ fs.mkdirSync(CACHE_DIR, { recursive: true });
163
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.html'), spaHtml);
164
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.js'), spaHtml);
165
+ fs.writeFileSync(path.join(CACHE_DIR, 'harness.css'), spaHtml);
166
+ expect((0, update_checker_1.getCachedStaticDir)()).toBeNull();
167
+ });
168
+ });
169
+ });
170
+ //# sourceMappingURL=update-checker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update-checker.test.js","sourceRoot":"","sources":["../../src/cli/update-checker.test.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
File without changes
@@ -18,6 +18,10 @@ export interface HarnessServerOptions {
18
18
  };
19
19
  mockTheme: 'light' | 'dark';
20
20
  mockEntities?: Record<string, MockEntityConfig>;
21
+ /** Override the static files directory (e.g., CDN-cached files). */
22
+ staticDirOverride?: string;
23
+ /** Package version string for display in the UI. */
24
+ harnessVersion?: string;
21
25
  }
22
26
  export declare function startHarnessServer(options: HarnessServerOptions): Promise<void>;
23
27
  //# sourceMappingURL=harness-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-server.d.ts","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,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,CAuwBrF"}
1
+ {"version":3,"file":"harness-server.d.ts","sourceRoot":"","sources":["../../src/server/harness-server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,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;IAChD,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuzBrF"}