@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.
- package/dist/bridge/live-handler.d.ts.map +1 -1
- package/dist/bridge/live-handler.js +9 -0
- package/dist/bridge/live-handler.js.map +1 -1
- package/dist/bridge/mock-handler.d.ts +2 -0
- package/dist/bridge/mock-handler.d.ts.map +1 -1
- package/dist/bridge/mock-handler.js +120 -0
- package/dist/bridge/mock-handler.js.map +1 -1
- package/dist/cli/dev.d.ts.map +1 -1
- package/dist/cli/dev.js +12 -1
- package/dist/cli/dev.js.map +1 -1
- package/dist/cli/dev.test.js +19 -0
- package/dist/cli/dev.test.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +2 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/index.test.js +11 -4
- package/dist/cli/index.test.js.map +1 -1
- package/dist/cli/submit.d.ts.map +1 -1
- package/dist/cli/submit.js +11 -5
- package/dist/cli/submit.js.map +1 -1
- package/dist/cli/submit.test.js +9 -5
- package/dist/cli/submit.test.js.map +1 -1
- package/dist/cli/sync.d.ts.map +1 -1
- package/dist/cli/sync.js +5 -8
- package/dist/cli/sync.js.map +1 -1
- package/dist/cli/sync.test.d.ts +2 -0
- package/dist/cli/sync.test.d.ts.map +1 -0
- package/dist/cli/sync.test.js +75 -0
- package/dist/cli/sync.test.js.map +1 -0
- package/dist/cli/update-checker.d.ts +29 -0
- package/dist/cli/update-checker.d.ts.map +1 -0
- package/dist/cli/update-checker.js +186 -0
- package/dist/cli/update-checker.js.map +1 -0
- package/dist/cli/update-checker.test.d.ts +2 -0
- package/dist/cli/update-checker.test.d.ts.map +1 -0
- package/dist/cli/update-checker.test.js +170 -0
- package/dist/cli/update-checker.test.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/server/harness-server.d.ts +4 -0
- package/dist/server/harness-server.d.ts.map +1 -1
- package/dist/server/harness-server.js +55 -6
- package/dist/server/harness-server.js.map +1 -1
- package/dist/server/harness-server.test.js +6 -0
- package/dist/server/harness-server.test.js.map +1 -1
- package/dist/server/static/harness.css +53 -12
- package/dist/server/static/harness.html +11 -23
- package/dist/server/static/harness.js +140 -54
- package/package.json +2 -2
package/dist/cli/sync.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
67
|
-
|
|
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;
|
package/dist/cli/sync.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/cli/sync.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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;
|
|
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"}
|