@aion0/bastion 0.1.12 → 0.1.14

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 (101) hide show
  1. package/README.md +27 -3
  2. package/README.zh.md +26 -3
  3. package/dist/classifier/model-manager.d.ts +43 -0
  4. package/dist/classifier/model-manager.d.ts.map +1 -0
  5. package/dist/classifier/model-manager.js +161 -0
  6. package/dist/classifier/model-manager.js.map +1 -0
  7. package/dist/classifier/onnx-provider.d.ts +22 -0
  8. package/dist/classifier/onnx-provider.d.ts.map +1 -0
  9. package/dist/classifier/onnx-provider.js +131 -0
  10. package/dist/classifier/onnx-provider.js.map +1 -0
  11. package/dist/cli/commands/plugins.d.ts +3 -0
  12. package/dist/cli/commands/plugins.d.ts.map +1 -0
  13. package/dist/cli/commands/plugins.js +201 -0
  14. package/dist/cli/commands/plugins.js.map +1 -0
  15. package/dist/cli/commands/start.d.ts.map +1 -1
  16. package/dist/cli/commands/start.js +0 -18
  17. package/dist/cli/commands/start.js.map +1 -1
  18. package/dist/cli/index.js +2 -2
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/config/paths.d.ts +0 -1
  21. package/dist/config/paths.d.ts.map +1 -1
  22. package/dist/config/paths.js +0 -1
  23. package/dist/config/paths.js.map +1 -1
  24. package/dist/config/schema.d.ts +28 -0
  25. package/dist/config/schema.d.ts.map +1 -1
  26. package/dist/core/bootstrap.d.ts.map +1 -1
  27. package/dist/core/bootstrap.js +5 -0
  28. package/dist/core/bootstrap.js.map +1 -1
  29. package/dist/dashboard/api-routes.d.ts.map +1 -1
  30. package/dist/dashboard/api-routes.js +91 -50
  31. package/dist/dashboard/api-routes.js.map +1 -1
  32. package/dist/dashboard/page.d.ts.map +1 -1
  33. package/dist/dashboard/page.js +122 -67
  34. package/dist/dashboard/page.js.map +1 -1
  35. package/dist/dlp/ai-validator.d.ts.map +1 -1
  36. package/dist/dlp/ai-validator.js +11 -13
  37. package/dist/dlp/ai-validator.js.map +1 -1
  38. package/dist/dlp/heuristic-validator.d.ts +24 -0
  39. package/dist/dlp/heuristic-validator.d.ts.map +1 -0
  40. package/dist/dlp/heuristic-validator.js +97 -0
  41. package/dist/dlp/heuristic-validator.js.map +1 -0
  42. package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -1
  43. package/dist/plugins/builtin/dlp-scanner.js +3 -0
  44. package/dist/plugins/builtin/dlp-scanner.js.map +1 -1
  45. package/dist/plugins/builtin/pi-classifier.d.ts +22 -0
  46. package/dist/plugins/builtin/pi-classifier.d.ts.map +1 -0
  47. package/dist/plugins/builtin/pi-classifier.js +177 -0
  48. package/dist/plugins/builtin/pi-classifier.js.map +1 -0
  49. package/dist/plugins/builtin/threat-scorer.d.ts +6 -0
  50. package/dist/plugins/builtin/threat-scorer.d.ts.map +1 -0
  51. package/dist/plugins/builtin/threat-scorer.js +266 -0
  52. package/dist/plugins/builtin/threat-scorer.js.map +1 -0
  53. package/dist/plugins/builtin/tool-guard.d.ts.map +1 -1
  54. package/dist/plugins/builtin/tool-guard.js +14 -43
  55. package/dist/plugins/builtin/tool-guard.js.map +1 -1
  56. package/dist/plugins/types.d.ts +3 -0
  57. package/dist/plugins/types.d.ts.map +1 -1
  58. package/dist/storage/migrations.d.ts.map +1 -1
  59. package/dist/storage/migrations.js +43 -0
  60. package/dist/storage/migrations.js.map +1 -1
  61. package/dist/storage/repositories/taint-marks.d.ts +26 -0
  62. package/dist/storage/repositories/taint-marks.d.ts.map +1 -0
  63. package/dist/storage/repositories/taint-marks.js +27 -0
  64. package/dist/storage/repositories/taint-marks.js.map +1 -0
  65. package/dist/storage/repositories/threat-score-events.d.ts +27 -0
  66. package/dist/storage/repositories/threat-score-events.d.ts.map +1 -0
  67. package/dist/storage/repositories/threat-score-events.js +24 -0
  68. package/dist/storage/repositories/threat-score-events.js.map +1 -0
  69. package/dist/storage/repositories/threat-scores.d.ts +26 -0
  70. package/dist/storage/repositories/threat-scores.d.ts.map +1 -0
  71. package/dist/storage/repositories/threat-scores.js +42 -0
  72. package/dist/storage/repositories/threat-scores.js.map +1 -0
  73. package/dist/storage/repositories/tool-chain-detections.d.ts +24 -0
  74. package/dist/storage/repositories/tool-chain-detections.d.ts.map +1 -0
  75. package/dist/storage/repositories/tool-chain-detections.js +27 -0
  76. package/dist/storage/repositories/tool-chain-detections.js.map +1 -0
  77. package/dist/tool-guard/chain-detector.d.ts +18 -0
  78. package/dist/tool-guard/chain-detector.d.ts.map +1 -0
  79. package/dist/tool-guard/chain-detector.js +55 -0
  80. package/dist/tool-guard/chain-detector.js.map +1 -0
  81. package/dist/tool-guard/chain-rules.d.ts +10 -0
  82. package/dist/tool-guard/chain-rules.d.ts.map +1 -0
  83. package/dist/tool-guard/chain-rules.js +30 -0
  84. package/dist/tool-guard/chain-rules.js.map +1 -0
  85. package/dist/tool-guard/taint-tracker.d.ts +24 -0
  86. package/dist/tool-guard/taint-tracker.d.ts.map +1 -0
  87. package/dist/tool-guard/taint-tracker.js +70 -0
  88. package/dist/tool-guard/taint-tracker.js.map +1 -0
  89. package/package.json +1 -1
  90. package/dist/cli/commands/pro.d.ts +0 -3
  91. package/dist/cli/commands/pro.d.ts.map +0 -1
  92. package/dist/cli/commands/pro.js +0 -261
  93. package/dist/cli/commands/pro.js.map +0 -1
  94. package/dist/license/pro-license.d.ts +0 -11
  95. package/dist/license/pro-license.d.ts.map +0 -1
  96. package/dist/license/pro-license.js +0 -88
  97. package/dist/license/pro-license.js.map +0 -1
  98. package/dist/license/verify.d.ts +0 -18
  99. package/dist/license/verify.d.ts.map +0 -1
  100. package/dist/license/verify.js +0 -71
  101. package/dist/license/verify.js.map +0 -1
@@ -1,261 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.registerProCommand = registerProCommand;
7
- const node_fs_1 = require("node:fs");
8
- const node_path_1 = require("node:path");
9
- const node_child_process_1 = require("node:child_process");
10
- const js_yaml_1 = __importDefault(require("js-yaml"));
11
- const paths_js_1 = require("../../config/paths.js");
12
- const pro_license_js_1 = require("../../license/pro-license.js");
13
- const daemon_js_1 = require("../daemon.js");
14
- const PRO_PKG = '@aiwatching/bastion-pro';
15
- const PRO_DIR_NAME = 'bastion-pro';
16
- function proPluginDir() {
17
- return (0, node_path_1.join)(paths_js_1.paths.pluginsDir, PRO_DIR_NAME);
18
- }
19
- function info(msg) {
20
- process.stderr.write(msg + '\n');
21
- }
22
- function error(msg) {
23
- process.stderr.write(`Error: ${msg}\n`);
24
- }
25
- /** Read config.yaml as raw object (creates file if missing) */
26
- function readUserConfig() {
27
- if (!(0, node_fs_1.existsSync)(paths_js_1.paths.configFile))
28
- return {};
29
- const raw = (0, node_fs_1.readFileSync)(paths_js_1.paths.configFile, 'utf-8');
30
- return js_yaml_1.default.load(raw) ?? {};
31
- }
32
- /** Write config.yaml back */
33
- function writeUserConfig(config) {
34
- (0, node_fs_1.mkdirSync)(paths_js_1.paths.bastionDir, { recursive: true });
35
- (0, node_fs_1.writeFileSync)(paths_js_1.paths.configFile, js_yaml_1.default.dump(config, { lineWidth: 120 }), 'utf-8');
36
- }
37
- /** Add bastion-pro to plugins.external[] in config.yaml */
38
- function addProPluginConfig() {
39
- const config = readUserConfig();
40
- const plugins = config.plugins ?? {};
41
- const external = plugins.external ?? [];
42
- // Remove any old-path entries, then add/update with new path
43
- const cleanExternal = external.filter((e) => {
44
- const pkg = typeof e.package === 'string' ? e.package : '';
45
- return !pkg.endsWith('/bastion-pro');
46
- });
47
- cleanExternal.push({ package: proPluginDir(), enabled: true });
48
- info('Config: configured bastion-pro in plugins.external');
49
- plugins.external = cleanExternal;
50
- config.plugins = plugins;
51
- writeUserConfig(config);
52
- }
53
- /** Remove bastion-pro from plugins.external[] in config.yaml */
54
- function removeProPluginConfig() {
55
- const config = readUserConfig();
56
- const plugins = config.plugins ?? {};
57
- const external = plugins.external ?? [];
58
- const filtered = external.filter((e) => {
59
- const pkg = typeof e.package === 'string' ? e.package : '';
60
- return pkg !== proPluginDir() && !pkg.endsWith('/bastion-pro');
61
- });
62
- if (filtered.length !== external.length) {
63
- plugins.external = filtered.length > 0 ? filtered : undefined;
64
- config.plugins = plugins;
65
- writeUserConfig(config);
66
- info('Config: removed bastion-pro from plugins.external');
67
- }
68
- }
69
- /** Install from npm: pack + extract */
70
- function installFromNpm() {
71
- const dest = proPluginDir();
72
- (0, node_fs_1.mkdirSync)(dest, { recursive: true });
73
- info(`Downloading ${PRO_PKG} from npm...`);
74
- try {
75
- // Pack into plugins dir
76
- (0, node_child_process_1.execSync)(`npm pack ${PRO_PKG} --pack-destination .`, {
77
- cwd: paths_js_1.paths.pluginsDir,
78
- stdio: 'pipe',
79
- });
80
- }
81
- catch (e) {
82
- const msg = e instanceof Error ? e.message : String(e);
83
- if (msg.includes('404') || msg.includes('Not Found')) {
84
- error(`${PRO_PKG} not found on npm. Is it published?`);
85
- }
86
- else {
87
- error(`Failed to download ${PRO_PKG}: ${msg}`);
88
- }
89
- info('Tip: use --source <path> for local installation');
90
- process.exit(1);
91
- }
92
- // Find the tarball
93
- const tarballs = (0, node_fs_1.readdirSync)(paths_js_1.paths.pluginsDir).filter((f) => f.startsWith('aiwatching-bastion-pro-') && f.endsWith('.tgz'));
94
- if (tarballs.length === 0) {
95
- error('No tarball found after npm pack');
96
- process.exit(1);
97
- }
98
- const tarball = tarballs[tarballs.length - 1];
99
- const tarballPath = (0, node_path_1.join)(paths_js_1.paths.pluginsDir, tarball);
100
- info('Extracting...');
101
- // Extract to dest (tarball has a "package/" prefix)
102
- (0, node_child_process_1.execSync)(`tar xzf "${tarballPath}" --strip-components=1 -C "${dest}"`, { stdio: 'pipe' });
103
- // Cleanup tarball
104
- (0, node_fs_1.rmSync)(tarballPath, { force: true });
105
- // Install production deps
106
- info('Installing dependencies...');
107
- (0, node_child_process_1.execSync)('npm install --production --ignore-scripts', {
108
- cwd: dest,
109
- stdio: 'pipe',
110
- env: { ...process.env, NODE_ENV: 'production' },
111
- });
112
- info(`Installed ${PRO_PKG} → ${dest}`);
113
- }
114
- /** Install from local source: rsync + build */
115
- function installFromLocal(source) {
116
- if (!(0, node_fs_1.existsSync)(source)) {
117
- error(`Source path not found: ${source}`);
118
- process.exit(1);
119
- }
120
- const dest = proPluginDir();
121
- (0, node_fs_1.mkdirSync)(dest, { recursive: true });
122
- info(`Copying from ${source}...`);
123
- (0, node_child_process_1.execSync)(`rsync -a --exclude node_modules --exclude .git --exclude dist "${source}/" "${dest}/"`, { stdio: 'pipe' });
124
- // Rewrite bastion-plugin-api dep to npm version (was file: in dev)
125
- const pkgPath = (0, node_path_1.join)(dest, 'package.json');
126
- if ((0, node_fs_1.existsSync)(pkgPath)) {
127
- const pkg = JSON.parse((0, node_fs_1.readFileSync)(pkgPath, 'utf-8'));
128
- if (pkg.dependencies?.['@aiwatching/bastion-plugin-api']?.startsWith('file:')) {
129
- pkg.dependencies['@aiwatching/bastion-plugin-api'] = '^2.0.0';
130
- (0, node_fs_1.writeFileSync)(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
131
- info('Rewrote @aiwatching/bastion-plugin-api dependency to ^2.0.0');
132
- }
133
- }
134
- info('Installing dependencies...');
135
- (0, node_child_process_1.execSync)('npm install', { cwd: dest, stdio: 'pipe' });
136
- info('Building...');
137
- (0, node_child_process_1.execSync)('npm run build', { cwd: dest, stdio: 'pipe' });
138
- info(`Installed from local source → ${dest}`);
139
- }
140
- function registerProCommand(program) {
141
- const pro = program
142
- .command('pro')
143
- .description('Manage Bastion Pro plugin (activate, deactivate, status)');
144
- // ── bastion pro activate <key> ──
145
- pro
146
- .command('activate <key>')
147
- .description('Activate Pro features with a license key')
148
- .option('--source <path>', 'Install from local directory instead of npm')
149
- .action((key, options) => {
150
- // 1. Validate license
151
- const license = (0, pro_license_js_1.validateProLicense)(key);
152
- if (!license.valid) {
153
- error(`License validation failed: ${license.error}`);
154
- process.exit(1);
155
- }
156
- info(`License valid: ${license.plan} plan, expires ${license.expiresAt.toISOString().slice(0, 10)}`);
157
- // 2. Save license key
158
- (0, pro_license_js_1.saveLicenseKey)(key);
159
- info(`License key saved to ${paths_js_1.paths.licenseFile}`);
160
- // 3. Install plugin
161
- const dest = proPluginDir();
162
- const alreadyInstalled = (0, node_fs_1.existsSync)((0, node_path_1.join)(dest, 'package.json'));
163
- if (alreadyInstalled) {
164
- info('Pro plugin already installed, skipping installation');
165
- }
166
- else if (options.source) {
167
- installFromLocal(options.source);
168
- }
169
- else {
170
- installFromNpm();
171
- }
172
- // 4. Update config.yaml
173
- addProPluginConfig();
174
- // 5. Restart notice
175
- const daemon = (0, daemon_js_1.getDaemonStatus)();
176
- if (daemon.running) {
177
- info('');
178
- info(`Bastion is running (PID ${daemon.pid}). Restart required:`);
179
- info(' bastion stop && bastion start');
180
- }
181
- info('');
182
- info('Pro features activated successfully!');
183
- });
184
- // ── bastion pro deactivate ──
185
- pro
186
- .command('deactivate')
187
- .description('Deactivate Pro features and remove configuration')
188
- .option('--cleanup', 'Also delete installed plugin files and models')
189
- .action((options) => {
190
- // 1. Remove from config
191
- removeProPluginConfig();
192
- // 2. Remove license key
193
- (0, pro_license_js_1.removeLicenseKey)();
194
- info('License key removed');
195
- // 3. Cleanup installed files
196
- if (options.cleanup) {
197
- const dest = proPluginDir();
198
- if ((0, node_fs_1.existsSync)(dest)) {
199
- (0, node_fs_1.rmSync)(dest, { recursive: true, force: true });
200
- info(`Removed ${dest}`);
201
- }
202
- if ((0, node_fs_1.existsSync)(paths_js_1.paths.modelsDir)) {
203
- (0, node_fs_1.rmSync)(paths_js_1.paths.modelsDir, { recursive: true, force: true });
204
- info(`Removed ${paths_js_1.paths.modelsDir}`);
205
- }
206
- }
207
- info('');
208
- info('Pro features deactivated.');
209
- });
210
- // ── bastion pro status ──
211
- pro
212
- .command('status')
213
- .description('Show Pro plugin status')
214
- .action(() => {
215
- console.log('Bastion Pro Status');
216
- console.log('─'.repeat(40));
217
- // License
218
- const key = (0, pro_license_js_1.readLicenseKey)();
219
- if (key) {
220
- const license = (0, pro_license_js_1.validateProLicense)(key);
221
- if (license.valid) {
222
- const isDevMode = key === '__DEV__' || process.env.BASTION_DEV === '1';
223
- const planLabel = isDevMode ? `${license.plan} (dev mode)` : license.plan;
224
- console.log(` License: ${planLabel}`);
225
- console.log(` Expires: ${license.expiresAt.toISOString().slice(0, 10)}`);
226
- }
227
- else {
228
- console.log(` License: invalid (${license.error})`);
229
- }
230
- }
231
- else {
232
- console.log(' License: not activated');
233
- }
234
- // Plugin installed?
235
- const dest = proPluginDir();
236
- const pluginPkgPath = (0, node_path_1.join)(dest, 'package.json');
237
- if ((0, node_fs_1.existsSync)(pluginPkgPath)) {
238
- const pkg = JSON.parse((0, node_fs_1.readFileSync)(pluginPkgPath, 'utf-8'));
239
- console.log(` Plugin: installed (v${pkg.version ?? '?'})`);
240
- console.log(` Location: ${dest}`);
241
- }
242
- else {
243
- console.log(' Plugin: not installed');
244
- }
245
- // Config enabled?
246
- const config = readUserConfig();
247
- const plugins = config.plugins ?? {};
248
- const external = plugins.external ?? [];
249
- const entry = external.find((e) => e.package === dest);
250
- console.log(` Config: ${entry?.enabled ? 'enabled' : 'not configured'}`);
251
- // Models
252
- if ((0, node_fs_1.existsSync)(paths_js_1.paths.modelsDir)) {
253
- const models = (0, node_fs_1.readdirSync)(paths_js_1.paths.modelsDir).filter((f) => f.endsWith('.onnx'));
254
- console.log(` Models: ${models.length > 0 ? models.join(', ') : 'none'}`);
255
- }
256
- else {
257
- console.log(' Models: not downloaded');
258
- }
259
- });
260
- }
261
- //# sourceMappingURL=pro.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pro.js","sourceRoot":"","sources":["../../../src/cli/commands/pro.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- export interface ProLicenseInfo {
2
- valid: boolean;
3
- plan: 'pro' | 'enterprise' | null;
4
- expiresAt: Date | null;
5
- error?: string;
6
- }
7
- export declare function validateProLicense(key: string): ProLicenseInfo;
8
- export declare function saveLicenseKey(key: string): void;
9
- export declare function removeLicenseKey(): void;
10
- export declare function readLicenseKey(): string | null;
11
- //# sourceMappingURL=pro-license.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pro-license.d.ts","sourceRoot":"","sources":["../../src/license/pro-license.ts"],"names":[],"mappings":"AAYA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,KAAK,GAAG,YAAY,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AA2BD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CA0B9D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAa9C"}
@@ -1,88 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateProLicense = validateProLicense;
4
- exports.saveLicenseKey = saveLicenseKey;
5
- exports.removeLicenseKey = removeLicenseKey;
6
- exports.readLicenseKey = readLicenseKey;
7
- const node_crypto_1 = require("node:crypto");
8
- const node_fs_1 = require("node:fs");
9
- const node_path_1 = require("node:path");
10
- const paths_js_1 = require("../config/paths.js");
11
- const LICENSE_SECRET = 'bastion-pro-license-key-2026';
12
- const LICENSE_PREFIX = 'BST';
13
- const VALID_PLANS = new Map([
14
- ['PRO', 'pro'],
15
- ['ENT', 'enterprise'],
16
- ]);
17
- function computeSignature(plan, expiry) {
18
- return (0, node_crypto_1.createHmac)('sha256', LICENSE_SECRET)
19
- .update(plan + expiry)
20
- .digest('hex')
21
- .slice(0, 12);
22
- }
23
- function parseExpiry(raw) {
24
- if (raw.length !== 8)
25
- return null;
26
- const y = Number(raw.slice(0, 4));
27
- const m = Number(raw.slice(4, 6));
28
- const d = Number(raw.slice(6, 8));
29
- if (Number.isNaN(y) || Number.isNaN(m) || Number.isNaN(d))
30
- return null;
31
- const date = new Date(y, m - 1, d, 23, 59, 59, 999);
32
- if (date.getFullYear() !== y || date.getMonth() !== m - 1 || date.getDate() !== d)
33
- return null;
34
- return date;
35
- }
36
- const INVALID = (error) => ({
37
- valid: false,
38
- plan: null,
39
- expiresAt: null,
40
- error,
41
- });
42
- function validateProLicense(key) {
43
- if (!key)
44
- return INVALID('No license key provided');
45
- if (key === '__DEV__') {
46
- return { valid: true, plan: 'enterprise', expiresAt: new Date('2099-12-31') };
47
- }
48
- const parts = key.split('-');
49
- if (parts.length !== 4 || parts[0] !== LICENSE_PREFIX) {
50
- return INVALID('Invalid license format');
51
- }
52
- const [, planRaw, expiryRaw, signature] = parts;
53
- const plan = VALID_PLANS.get(planRaw);
54
- if (!plan)
55
- return INVALID(`Unknown plan: ${planRaw}`);
56
- const expiresAt = parseExpiry(expiryRaw);
57
- if (!expiresAt)
58
- return INVALID('Invalid expiry date');
59
- const expected = computeSignature(planRaw, expiryRaw);
60
- if (signature !== expected)
61
- return INVALID('Invalid signature');
62
- if (expiresAt.getTime() < Date.now())
63
- return INVALID('License expired');
64
- return { valid: true, plan, expiresAt };
65
- }
66
- function saveLicenseKey(key) {
67
- (0, node_fs_1.mkdirSync)((0, node_path_1.dirname)(paths_js_1.paths.licenseFile), { recursive: true });
68
- (0, node_fs_1.writeFileSync)(paths_js_1.paths.licenseFile, key.trim() + '\n', 'utf-8');
69
- }
70
- function removeLicenseKey() {
71
- if ((0, node_fs_1.existsSync)(paths_js_1.paths.licenseFile)) {
72
- (0, node_fs_1.unlinkSync)(paths_js_1.paths.licenseFile);
73
- }
74
- }
75
- function readLicenseKey() {
76
- // 1. Environment variable
77
- if (process.env.BASTION_LICENSE_KEY)
78
- return process.env.BASTION_LICENSE_KEY.trim();
79
- // 2. Dev mode
80
- if (process.env.BASTION_DEV === '1')
81
- return '__DEV__';
82
- // 3. License file
83
- if ((0, node_fs_1.existsSync)(paths_js_1.paths.licenseFile)) {
84
- return (0, node_fs_1.readFileSync)(paths_js_1.paths.licenseFile, 'utf-8').trim() || null;
85
- }
86
- return null;
87
- }
88
- //# sourceMappingURL=pro-license.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pro-license.js","sourceRoot":"","sources":["../../src/license/pro-license.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- export interface LicensePayload {
2
- plan: string;
3
- expiresAt: string;
4
- features: string[];
5
- }
6
- export interface LicenseResult {
7
- valid: boolean;
8
- payload?: LicensePayload;
9
- reason?: string;
10
- }
11
- /**
12
- * Verify a signed license token.
13
- *
14
- * Returns { valid: true, payload } on success,
15
- * or { valid: false, reason } on failure.
16
- */
17
- export declare function verifyLicenseToken(token: unknown): LicenseResult;
18
- //# sourceMappingURL=verify.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../src/license/verify.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAmDhE"}
@@ -1,71 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.verifyLicenseToken = verifyLicenseToken;
7
- const node_crypto_1 = __importDefault(require("node:crypto"));
8
- /**
9
- * Bastion Pro license verification.
10
- *
11
- * License token format: base64(JSON payload) + '.' + base64(Ed25519 signature)
12
- *
13
- * The Pro plugin sets a signed token; we verify it here with the embedded
14
- * public key so a forged plugin cannot simply claim `valid: true`.
15
- */
16
- // Ed25519 public key (PEM) — only Bastion can sign with the corresponding private key.
17
- // Replace this with the real production key before shipping.
18
- const LICENSE_PUBLIC_KEY = `-----BEGIN PUBLIC KEY-----
19
- MCowBQYDK2VwAyEAPlr2YjKxlMzVGOZ2WFmYOFCT3JHaFz8rECPFwbzVSXg=
20
- -----END PUBLIC KEY-----`;
21
- /**
22
- * Verify a signed license token.
23
- *
24
- * Returns { valid: true, payload } on success,
25
- * or { valid: false, reason } on failure.
26
- */
27
- function verifyLicenseToken(token) {
28
- if (typeof token !== 'string' || !token.includes('.')) {
29
- return { valid: false, reason: 'malformed token' };
30
- }
31
- const dotIndex = token.lastIndexOf('.');
32
- const payloadB64 = token.slice(0, dotIndex);
33
- const signatureB64 = token.slice(dotIndex + 1);
34
- // Verify signature
35
- let signatureValid;
36
- try {
37
- const key = node_crypto_1.default.createPublicKey(LICENSE_PUBLIC_KEY);
38
- signatureValid = node_crypto_1.default.verify(null, // Ed25519 does not use a separate hash algorithm
39
- Buffer.from(payloadB64, 'base64'), key, Buffer.from(signatureB64, 'base64'));
40
- }
41
- catch {
42
- return { valid: false, reason: 'signature verification error' };
43
- }
44
- if (!signatureValid) {
45
- return { valid: false, reason: 'invalid signature' };
46
- }
47
- // Decode payload
48
- let payload;
49
- try {
50
- payload = JSON.parse(Buffer.from(payloadB64, 'base64').toString('utf-8'));
51
- }
52
- catch {
53
- return { valid: false, reason: 'invalid payload' };
54
- }
55
- // Check expiry
56
- if (typeof payload.expiresAt === 'string') {
57
- const exp = new Date(payload.expiresAt);
58
- if (exp.getTime() < Date.now()) {
59
- return { valid: false, reason: 'license expired' };
60
- }
61
- }
62
- return {
63
- valid: true,
64
- payload: {
65
- plan: payload.plan ?? 'pro',
66
- expiresAt: payload.expiresAt ?? '',
67
- features: payload.features ?? [],
68
- },
69
- };
70
- }
71
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../src/license/verify.ts"],"names":[],"mappings":";;;;;AAmCA,gDAmDC;AAtFD,8DAAiC;AAEjC;;;;;;;GAOG;AAEH,uFAAuF;AACvF,6DAA6D;AAC7D,MAAM,kBAAkB,GAAG;;yBAEF,CAAC;AAc1B;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAE/C,mBAAmB;IACnB,IAAI,cAAuB,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,qBAAM,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;QACvD,cAAc,GAAG,qBAAM,CAAC,MAAM,CAC5B,IAAI,EAAE,iDAAiD;QACvD,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,EACjC,GAAG,EACH,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CACpC,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,8BAA8B,EAAE,CAAC;IAClE,CAAC;IAED,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mBAAmB,EAAE,CAAC;IACvD,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAgC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC;IAED,eAAe;IACf,IAAI,OAAO,OAAO,CAAC,SAAS,KAAK,QAAQ,EAAE,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,CAAC;QACrD,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,OAAO,EAAE;YACP,IAAI,EAAG,OAAO,CAAC,IAAe,IAAI,KAAK;YACvC,SAAS,EAAG,OAAO,CAAC,SAAoB,IAAI,EAAE;YAC9C,QAAQ,EAAG,OAAO,CAAC,QAAqB,IAAI,EAAE;SAC/C;KACF,CAAC;AACJ,CAAC"}