@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.
- package/README.md +27 -3
- package/README.zh.md +26 -3
- package/dist/classifier/model-manager.d.ts +43 -0
- package/dist/classifier/model-manager.d.ts.map +1 -0
- package/dist/classifier/model-manager.js +161 -0
- package/dist/classifier/model-manager.js.map +1 -0
- package/dist/classifier/onnx-provider.d.ts +22 -0
- package/dist/classifier/onnx-provider.d.ts.map +1 -0
- package/dist/classifier/onnx-provider.js +131 -0
- package/dist/classifier/onnx-provider.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +3 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +201 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +0 -18
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/paths.d.ts +0 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +0 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.d.ts +28 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +5 -0
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/dashboard/api-routes.d.ts.map +1 -1
- package/dist/dashboard/api-routes.js +91 -50
- package/dist/dashboard/api-routes.js.map +1 -1
- package/dist/dashboard/page.d.ts.map +1 -1
- package/dist/dashboard/page.js +122 -67
- package/dist/dashboard/page.js.map +1 -1
- package/dist/dlp/ai-validator.d.ts.map +1 -1
- package/dist/dlp/ai-validator.js +11 -13
- package/dist/dlp/ai-validator.js.map +1 -1
- package/dist/dlp/heuristic-validator.d.ts +24 -0
- package/dist/dlp/heuristic-validator.d.ts.map +1 -0
- package/dist/dlp/heuristic-validator.js +97 -0
- package/dist/dlp/heuristic-validator.js.map +1 -0
- package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -1
- package/dist/plugins/builtin/dlp-scanner.js +3 -0
- package/dist/plugins/builtin/dlp-scanner.js.map +1 -1
- package/dist/plugins/builtin/pi-classifier.d.ts +22 -0
- package/dist/plugins/builtin/pi-classifier.d.ts.map +1 -0
- package/dist/plugins/builtin/pi-classifier.js +177 -0
- package/dist/plugins/builtin/pi-classifier.js.map +1 -0
- package/dist/plugins/builtin/threat-scorer.d.ts +6 -0
- package/dist/plugins/builtin/threat-scorer.d.ts.map +1 -0
- package/dist/plugins/builtin/threat-scorer.js +266 -0
- package/dist/plugins/builtin/threat-scorer.js.map +1 -0
- package/dist/plugins/builtin/tool-guard.d.ts.map +1 -1
- package/dist/plugins/builtin/tool-guard.js +14 -43
- package/dist/plugins/builtin/tool-guard.js.map +1 -1
- package/dist/plugins/types.d.ts +3 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +43 -0
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/repositories/taint-marks.d.ts +26 -0
- package/dist/storage/repositories/taint-marks.d.ts.map +1 -0
- package/dist/storage/repositories/taint-marks.js +27 -0
- package/dist/storage/repositories/taint-marks.js.map +1 -0
- package/dist/storage/repositories/threat-score-events.d.ts +27 -0
- package/dist/storage/repositories/threat-score-events.d.ts.map +1 -0
- package/dist/storage/repositories/threat-score-events.js +24 -0
- package/dist/storage/repositories/threat-score-events.js.map +1 -0
- package/dist/storage/repositories/threat-scores.d.ts +26 -0
- package/dist/storage/repositories/threat-scores.d.ts.map +1 -0
- package/dist/storage/repositories/threat-scores.js +42 -0
- package/dist/storage/repositories/threat-scores.js.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts +24 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.js +27 -0
- package/dist/storage/repositories/tool-chain-detections.js.map +1 -0
- package/dist/tool-guard/chain-detector.d.ts +18 -0
- package/dist/tool-guard/chain-detector.d.ts.map +1 -0
- package/dist/tool-guard/chain-detector.js +55 -0
- package/dist/tool-guard/chain-detector.js.map +1 -0
- package/dist/tool-guard/chain-rules.d.ts +10 -0
- package/dist/tool-guard/chain-rules.d.ts.map +1 -0
- package/dist/tool-guard/chain-rules.js +30 -0
- package/dist/tool-guard/chain-rules.js.map +1 -0
- package/dist/tool-guard/taint-tracker.d.ts +24 -0
- package/dist/tool-guard/taint-tracker.d.ts.map +1 -0
- package/dist/tool-guard/taint-tracker.js +70 -0
- package/dist/tool-guard/taint-tracker.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/pro.d.ts +0 -3
- package/dist/cli/commands/pro.d.ts.map +0 -1
- package/dist/cli/commands/pro.js +0 -261
- package/dist/cli/commands/pro.js.map +0 -1
- package/dist/license/pro-license.d.ts +0 -11
- package/dist/license/pro-license.d.ts.map +0 -1
- package/dist/license/pro-license.js +0 -88
- package/dist/license/pro-license.js.map +0 -1
- package/dist/license/verify.d.ts +0 -18
- package/dist/license/verify.d.ts.map +0 -1
- package/dist/license/verify.js +0 -71
- package/dist/license/verify.js.map +0 -1
package/dist/cli/commands/pro.js
DELETED
|
@@ -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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"}
|
package/dist/license/verify.d.ts
DELETED
|
@@ -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"}
|
package/dist/license/verify.js
DELETED
|
@@ -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"}
|