bun_plugins 1.0.0
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 +81 -0
- package/dist/PluginManager.d.ts +62 -0
- package/dist/PluginManager.d.ts.map +1 -0
- package/dist/PluginManager.js +557 -0
- package/dist/PluginManager.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/managers/ContextFactory.d.ts +6 -0
- package/dist/managers/ContextFactory.d.ts.map +1 -0
- package/dist/managers/ContextFactory.js +109 -0
- package/dist/managers/ContextFactory.js.map +1 -0
- package/dist/managers/DependencyManager.d.ts +10 -0
- package/dist/managers/DependencyManager.d.ts.map +1 -0
- package/dist/managers/DependencyManager.js +94 -0
- package/dist/managers/DependencyManager.js.map +1 -0
- package/dist/managers/HooksManager.d.ts +21 -0
- package/dist/managers/HooksManager.d.ts.map +1 -0
- package/dist/managers/HooksManager.js +117 -0
- package/dist/managers/HooksManager.js.map +1 -0
- package/dist/managers/ResourceManager.d.ts +16 -0
- package/dist/managers/ResourceManager.d.ts.map +1 -0
- package/dist/managers/ResourceManager.js +50 -0
- package/dist/managers/ResourceManager.js.map +1 -0
- package/dist/storage/JsonPluginStorage.d.ts +14 -0
- package/dist/storage/JsonPluginStorage.d.ts.map +1 -0
- package/dist/storage/JsonPluginStorage.js +63 -0
- package/dist/storage/JsonPluginStorage.js.map +1 -0
- package/dist/types.d.ts +167 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +56 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/errorParser.d.ts +3 -0
- package/dist/utils/errorParser.d.ts.map +1 -0
- package/dist/utils/errorParser.js +23 -0
- package/dist/utils/errorParser.js.map +1 -0
- package/dist/utils/pluginValidator.d.ts +47 -0
- package/dist/utils/pluginValidator.d.ts.map +1 -0
- package/dist/utils/pluginValidator.js +76 -0
- package/dist/utils/pluginValidator.js.map +1 -0
- package/dist/utils/security.d.ts +3 -0
- package/dist/utils/security.d.ts.map +1 -0
- package/dist/utils/security.js +26 -0
- package/dist/utils/security.js.map +1 -0
- package/dist/worker/WorkerRunner.d.ts +2 -0
- package/dist/worker/WorkerRunner.d.ts.map +1 -0
- package/dist/worker/WorkerRunner.js +254 -0
- package/dist/worker/WorkerRunner.js.map +1 -0
- package/package.json +43 -0
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { readdir, mkdir } from "node:fs/promises";
|
|
3
|
+
import { join, dirname } from "node:path";
|
|
4
|
+
import { watch, existsSync } from "node:fs";
|
|
5
|
+
import { WorkerMessageType, PluginPermission, RPCMethod, HookType } from "./types";
|
|
6
|
+
import { validatePlugin } from "./utils/pluginValidator";
|
|
7
|
+
import { JsonPluginStorage } from "./storage/JsonPluginStorage";
|
|
8
|
+
import semver from "semver";
|
|
9
|
+
import { ResourceManager } from "./managers/ResourceManager";
|
|
10
|
+
import { DependencyManager } from "./managers/DependencyManager";
|
|
11
|
+
import { HooksManager } from "./managers/HooksManager";
|
|
12
|
+
import { createPluginContext } from "./managers/ContextFactory";
|
|
13
|
+
import { errorParser } from "./utils/errorParser";
|
|
14
|
+
import { checkNetworkPermission, checkPermission as checkGeneralPermission } from "./utils/security";
|
|
15
|
+
export class PluginManager extends EventEmitter {
|
|
16
|
+
plugins = new Map();
|
|
17
|
+
availablePlugins = new Map();
|
|
18
|
+
// Modules
|
|
19
|
+
resources;
|
|
20
|
+
dependencyManager;
|
|
21
|
+
hooksManager; // Public mainly for testing/bridge access if needed
|
|
22
|
+
storageRoot;
|
|
23
|
+
hostVersion = "1.0.0";
|
|
24
|
+
pluginLoadTimeout;
|
|
25
|
+
workerFactory;
|
|
26
|
+
workerRunnerPath;
|
|
27
|
+
constructor(storageRoot = join(process.cwd(), "storage"), options) {
|
|
28
|
+
super();
|
|
29
|
+
this.storageRoot = storageRoot;
|
|
30
|
+
this.pluginLoadTimeout = options?.pluginLoadTimeout ?? 5000;
|
|
31
|
+
this.workerFactory = options?.workerFactory ?? ((url, opts) => new Worker(url, opts));
|
|
32
|
+
// Resilient path detection
|
|
33
|
+
const currentDir = import.meta.dir;
|
|
34
|
+
const tsWorkerPath = join(currentDir, "worker", "WorkerRunner.ts");
|
|
35
|
+
const jsWorkerPath = join(currentDir, "worker", "WorkerRunner.js");
|
|
36
|
+
if (options?.workerRunnerPath) {
|
|
37
|
+
this.workerRunnerPath = options.workerRunnerPath;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Prefer TS if it exists (development), fallback to JS (production/dist)
|
|
41
|
+
this.workerRunnerPath = existsSync(tsWorkerPath) ? tsWorkerPath : jsWorkerPath;
|
|
42
|
+
}
|
|
43
|
+
// Initialize Sub-Managers
|
|
44
|
+
this.resources = new ResourceManager();
|
|
45
|
+
this.dependencyManager = new DependencyManager();
|
|
46
|
+
this.hooksManager = new HooksManager();
|
|
47
|
+
}
|
|
48
|
+
getWorkerFactory() {
|
|
49
|
+
return this.workerFactory;
|
|
50
|
+
}
|
|
51
|
+
async register(plugin) {
|
|
52
|
+
if (this.plugins.has(plugin.name)) {
|
|
53
|
+
throw new Error(`Plugin ${plugin.name} is already registered.`);
|
|
54
|
+
}
|
|
55
|
+
// 0. Dependency & Engine Check
|
|
56
|
+
this.dependencyManager.validateDependencies(plugin, this.plugins);
|
|
57
|
+
if (plugin.engines?.host) {
|
|
58
|
+
if (!semver.satisfies(this.hostVersion, plugin.engines.host)) {
|
|
59
|
+
throw new Error(`Plugin ${plugin.name} requires host version ${plugin.engines.host}, but found ${this.hostVersion}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
console.log(`Loading plugin: ${plugin.name} v${plugin.version}`);
|
|
63
|
+
// 1. Prepare Storage
|
|
64
|
+
const storage = new JsonPluginStorage(this.storageRoot, plugin.name);
|
|
65
|
+
// 2. Load & Validate Configuration
|
|
66
|
+
let config = plugin.defaultConfig || {};
|
|
67
|
+
if (plugin.configSchema) {
|
|
68
|
+
try {
|
|
69
|
+
config = plugin.configSchema.parse(config);
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
const error = errorParser(e, `Error in plugin ${plugin.name}`);
|
|
73
|
+
console.warn(`[SafeMode] Using default config, validation failed. Error: ${error.message}`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// 3. Initialize Resources
|
|
77
|
+
this.resources.init(plugin.name);
|
|
78
|
+
// Sanitize plugin name
|
|
79
|
+
if (plugin.name.includes("..") || plugin.name.includes("/") || plugin.name.includes("\\")) {
|
|
80
|
+
throw new Error(`Invalid plugin name: ${plugin.name}. Name cannot contain path traversal characters.`);
|
|
81
|
+
}
|
|
82
|
+
// 4. Context Creation
|
|
83
|
+
const context = createPluginContext(this, plugin, this.resources, storage, config);
|
|
84
|
+
// 5. Setup Hooks with Performance Monitoring (Delegated to HooksManager via Builder)
|
|
85
|
+
if (plugin.setup) {
|
|
86
|
+
try {
|
|
87
|
+
await plugin.setup(this.hooksManager.getBuilder(plugin.name));
|
|
88
|
+
}
|
|
89
|
+
catch (e) {
|
|
90
|
+
console.error(`Error during setup for ${plugin.name}:`, e);
|
|
91
|
+
throw errorParser(e, `Error during setup for ${plugin.name}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// 6. Lifecycle onLoad
|
|
95
|
+
try {
|
|
96
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Plugin ${plugin.name} timed out (${this.pluginLoadTimeout}ms)`)), this.pluginLoadTimeout));
|
|
97
|
+
const start = performance.now();
|
|
98
|
+
await Promise.race([plugin.onLoad(context), timeoutPromise]);
|
|
99
|
+
const duration = performance.now() - start;
|
|
100
|
+
this.plugins.set(plugin.name, plugin);
|
|
101
|
+
console.log(`Plugin ${plugin.name} loaded successfully in ${duration.toFixed(2)}ms.`);
|
|
102
|
+
// Trigger onStarted after registration if provided
|
|
103
|
+
if (plugin.onStarted) {
|
|
104
|
+
try {
|
|
105
|
+
await plugin.onStarted();
|
|
106
|
+
}
|
|
107
|
+
catch (e) {
|
|
108
|
+
console.error(`Error in onStarted for ${plugin.name}:`, e);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error(`Failed to load plugin ${plugin.name}:`, error);
|
|
114
|
+
// Cleanup resources directly since plugin is not in this.plugins yet
|
|
115
|
+
this.resources.cleanup(plugin.name, this);
|
|
116
|
+
this.hooksManager.cleanup(plugin.name);
|
|
117
|
+
throw errorParser(error, `Failed to load plugin ${plugin.name}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
async registerIsolated(pluginPath, pluginName) {
|
|
121
|
+
return new Promise((resolve, reject) => {
|
|
122
|
+
const workerScript = this.workerRunnerPath;
|
|
123
|
+
console.log("Worker Path:", workerScript);
|
|
124
|
+
const timeoutId = setTimeout(() => {
|
|
125
|
+
worker.terminate();
|
|
126
|
+
reject(new Error(`Isolated plugin ${pluginName} timed out during loading (${this.pluginLoadTimeout}ms)`));
|
|
127
|
+
}, this.pluginLoadTimeout);
|
|
128
|
+
const worker = this.workerFactory(workerScript, {
|
|
129
|
+
workerData: { pluginPath, pluginName }
|
|
130
|
+
});
|
|
131
|
+
// Sanitize plugin name for storage
|
|
132
|
+
if (pluginName.includes("..") || pluginName.includes("/") || pluginName.includes("\\")) {
|
|
133
|
+
clearTimeout(timeoutId);
|
|
134
|
+
worker.terminate();
|
|
135
|
+
return reject(new Error(`Invalid plugin name: ${pluginName}. Name cannot contain path traversal characters.`));
|
|
136
|
+
}
|
|
137
|
+
const storage = new JsonPluginStorage(this.storageRoot, pluginName);
|
|
138
|
+
const pendingHooks = new Map();
|
|
139
|
+
// Initialize resources
|
|
140
|
+
const res = this.resources.init(pluginName);
|
|
141
|
+
res.workers.push(worker);
|
|
142
|
+
// Cache permission checks
|
|
143
|
+
let pluginMetadata;
|
|
144
|
+
const checkPermission = (perm, url) => {
|
|
145
|
+
if (!pluginMetadata) {
|
|
146
|
+
throw new Error(`AccessDenied: Cannot perform '${perm}' operations before plugin metadata is initialized.`);
|
|
147
|
+
}
|
|
148
|
+
if (perm === PluginPermission.Network && url) {
|
|
149
|
+
checkNetworkPermission(pluginName, pluginMetadata.permissions, pluginMetadata.allowedDomains, url);
|
|
150
|
+
}
|
|
151
|
+
else if (perm === PluginPermission.Filesystem || perm === PluginPermission.Env) {
|
|
152
|
+
checkGeneralPermission(pluginName, pluginMetadata.permissions, perm);
|
|
153
|
+
}
|
|
154
|
+
return true;
|
|
155
|
+
};
|
|
156
|
+
const rpcHandler = async (msg) => {
|
|
157
|
+
if (msg.type === WorkerMessageType.RPC_CALL) {
|
|
158
|
+
const { id, method, args } = msg;
|
|
159
|
+
try {
|
|
160
|
+
let result;
|
|
161
|
+
if (method === RPCMethod.StorageGet)
|
|
162
|
+
result = await storage.get(args[0], args[1]);
|
|
163
|
+
else if (method === RPCMethod.StorageSet)
|
|
164
|
+
result = await storage.set(args[0], args[1]);
|
|
165
|
+
else if (method === RPCMethod.StorageDelete)
|
|
166
|
+
result = await storage.delete(args[0]);
|
|
167
|
+
else if (method === RPCMethod.StorageClear)
|
|
168
|
+
result = await storage.clear();
|
|
169
|
+
else if (method === RPCMethod.EventsEmit) {
|
|
170
|
+
this.emit(args[0], args[1]);
|
|
171
|
+
result = true;
|
|
172
|
+
}
|
|
173
|
+
else if (method === RPCMethod.EventsOn) {
|
|
174
|
+
const eventName = args[0];
|
|
175
|
+
const listener = (payload) => {
|
|
176
|
+
worker.postMessage({ type: WorkerMessageType.EVENT_EMIT, event: eventName, payload });
|
|
177
|
+
};
|
|
178
|
+
this.on(eventName, listener);
|
|
179
|
+
res.eventListeners.push({ event: eventName, listener });
|
|
180
|
+
result = true;
|
|
181
|
+
}
|
|
182
|
+
else if (method === RPCMethod.HooksRegister) {
|
|
183
|
+
const [type, { filter, id: hookId, options }] = args;
|
|
184
|
+
const filterRegExp = new RegExp(filter);
|
|
185
|
+
const proxyCallback = (hookArgs) => {
|
|
186
|
+
return new Promise((resolve, reject) => {
|
|
187
|
+
const requestId = Math.random().toString(36).substring(7);
|
|
188
|
+
pendingHooks.set(requestId, { resolve, reject });
|
|
189
|
+
worker.postMessage({ type: WorkerMessageType.HOOK_CALL, id: hookId, args: hookArgs, requestId });
|
|
190
|
+
setTimeout(() => {
|
|
191
|
+
if (pendingHooks.has(requestId)) {
|
|
192
|
+
pendingHooks.delete(requestId);
|
|
193
|
+
reject(new Error("Hook execution timed out"));
|
|
194
|
+
}
|
|
195
|
+
}, 5000);
|
|
196
|
+
});
|
|
197
|
+
};
|
|
198
|
+
if (type === HookType.ON_RESOLVE) {
|
|
199
|
+
this.hooksManager.registerOnResolve(filterRegExp, proxyCallback, pluginName, options?.order);
|
|
200
|
+
}
|
|
201
|
+
else if (type === HookType.ON_LOAD) {
|
|
202
|
+
this.hooksManager.registerOnLoad(filterRegExp, proxyCallback, pluginName, options?.order);
|
|
203
|
+
}
|
|
204
|
+
result = true;
|
|
205
|
+
}
|
|
206
|
+
else if (method === RPCMethod.ManagerGetPlugin) {
|
|
207
|
+
const targetName = args[0];
|
|
208
|
+
const p = this.getPlugin(targetName);
|
|
209
|
+
result = p?.getSharedApi ? p.getSharedApi() : undefined;
|
|
210
|
+
}
|
|
211
|
+
else if (method === RPCMethod.Log) {
|
|
212
|
+
const level = args[0];
|
|
213
|
+
console[level](`[${pluginName}]`, ...args.slice(1));
|
|
214
|
+
result = true;
|
|
215
|
+
}
|
|
216
|
+
else if (method === RPCMethod.PermissionCheck) {
|
|
217
|
+
const perm = args[0];
|
|
218
|
+
// Real permission check would go here, for now we assume
|
|
219
|
+
// we need to know the plugin's requested permissions.
|
|
220
|
+
// Since we don't have the full IPlugin object yet (it's in the worker),
|
|
221
|
+
// we might need a preliminary manifest read or a 'DECLARE' RPC.
|
|
222
|
+
result = true;
|
|
223
|
+
}
|
|
224
|
+
else if (method === RPCMethod.NetworkFetch) {
|
|
225
|
+
const [input, init] = args;
|
|
226
|
+
const urlStr = typeof input === 'string' ? input : input instanceof URL ? input.toString() : input.url;
|
|
227
|
+
checkPermission(PluginPermission.Network, urlStr);
|
|
228
|
+
const response = await fetch(input, init);
|
|
229
|
+
result = {
|
|
230
|
+
status: response.status,
|
|
231
|
+
statusText: response.statusText,
|
|
232
|
+
headers: Object.fromEntries(response.headers.entries()),
|
|
233
|
+
body: await response.text()
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
worker.postMessage({ id, result });
|
|
237
|
+
}
|
|
238
|
+
catch (e) {
|
|
239
|
+
const error = errorParser(e, `RPC Error in plugin ${pluginName}`);
|
|
240
|
+
worker.postMessage({ id, error: error.message });
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
else if (msg.type === WorkerMessageType.HOOK_RESULT) {
|
|
244
|
+
const { requestId, result } = msg;
|
|
245
|
+
const pending = pendingHooks.get(requestId);
|
|
246
|
+
if (pending) {
|
|
247
|
+
pendingHooks.delete(requestId);
|
|
248
|
+
pending.resolve(result);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
else if (msg.type === WorkerMessageType.HOOK_ERROR) {
|
|
252
|
+
const { requestId, error } = msg;
|
|
253
|
+
const pending = pendingHooks.get(requestId);
|
|
254
|
+
if (pending) {
|
|
255
|
+
pendingHooks.delete(requestId);
|
|
256
|
+
pending.reject(new Error(error));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
else if (msg.type === WorkerMessageType.MANIFEST) {
|
|
260
|
+
const { metadata } = msg;
|
|
261
|
+
pluginMetadata = metadata;
|
|
262
|
+
console.log(`Metadata received for isolated plugin: ${metadata.name}`);
|
|
263
|
+
}
|
|
264
|
+
else if (msg.type === WorkerMessageType.LOAD_SUCCESS) {
|
|
265
|
+
clearTimeout(timeoutId); // Success, clear global timeout
|
|
266
|
+
const { metadata } = msg;
|
|
267
|
+
pluginMetadata = metadata; // Update permission cache (redundant if MANIFEST sent but safe)
|
|
268
|
+
const proxyPlugin = {
|
|
269
|
+
name: metadata.name,
|
|
270
|
+
version: metadata.version || "0.0.0",
|
|
271
|
+
description: metadata.description,
|
|
272
|
+
author: metadata.author,
|
|
273
|
+
permissions: metadata.permissions,
|
|
274
|
+
allowedDomains: metadata.allowedDomains,
|
|
275
|
+
onLoad: () => { },
|
|
276
|
+
onStarted: () => {
|
|
277
|
+
worker.postMessage({ type: WorkerMessageType.START_UP });
|
|
278
|
+
},
|
|
279
|
+
onUnload: async () => {
|
|
280
|
+
worker.postMessage({ type: WorkerMessageType.UNLOAD });
|
|
281
|
+
// Give the worker some time to clean up
|
|
282
|
+
await new Promise(r => setTimeout(r, 200));
|
|
283
|
+
worker.terminate();
|
|
284
|
+
// Clear pending hooks on unload
|
|
285
|
+
for (const pending of pendingHooks.values()) {
|
|
286
|
+
pending.reject(new Error("Plugin unloaded"));
|
|
287
|
+
}
|
|
288
|
+
pendingHooks.clear();
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
this.plugins.set(metadata.name, proxyPlugin);
|
|
292
|
+
console.log(`Isolated Plugin ${metadata.name} loaded in worker.`);
|
|
293
|
+
resolve();
|
|
294
|
+
}
|
|
295
|
+
else if (msg.type === WorkerMessageType.LOAD_ERROR) {
|
|
296
|
+
clearTimeout(timeoutId);
|
|
297
|
+
// Cleanup pending hooks on load error
|
|
298
|
+
for (const pending of pendingHooks.values()) {
|
|
299
|
+
pending.reject(new Error(`Load error: ${msg.error}`));
|
|
300
|
+
}
|
|
301
|
+
pendingHooks.clear();
|
|
302
|
+
reject(new Error(msg.error));
|
|
303
|
+
worker.terminate();
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
worker.addEventListener("message", (event) => rpcHandler(event.data));
|
|
307
|
+
worker.addEventListener("error", (err) => {
|
|
308
|
+
clearTimeout(timeoutId);
|
|
309
|
+
console.error(`[Isolated:${pluginName}] Worker Error:`, err);
|
|
310
|
+
// Reject all pending hooks on crash
|
|
311
|
+
for (const pending of pendingHooks.values()) {
|
|
312
|
+
pending.reject(new Error("Worker terminated unexpectedly"));
|
|
313
|
+
}
|
|
314
|
+
pendingHooks.clear();
|
|
315
|
+
reject(err);
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
async unregister(pluginName) {
|
|
320
|
+
const plugin = this.plugins.get(pluginName);
|
|
321
|
+
if (!plugin)
|
|
322
|
+
return;
|
|
323
|
+
for (const [name, p] of this.plugins.entries()) {
|
|
324
|
+
if (p.dependencies && p.dependencies[pluginName]) {
|
|
325
|
+
console.warn(`Warning: Plugin ${name} depends on ${pluginName} which is being unloaded.`);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
try {
|
|
329
|
+
await plugin.onUnload();
|
|
330
|
+
}
|
|
331
|
+
catch (error) {
|
|
332
|
+
console.error(`Error unloading plugin ${pluginName}:`, error);
|
|
333
|
+
}
|
|
334
|
+
finally {
|
|
335
|
+
this.plugins.delete(pluginName);
|
|
336
|
+
this.resources.cleanup(pluginName, this);
|
|
337
|
+
this.hooksManager.cleanup(pluginName);
|
|
338
|
+
console.log(`Plugin ${pluginName} unloaded.`);
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
getPlugin(name) {
|
|
342
|
+
return this.plugins.get(name);
|
|
343
|
+
}
|
|
344
|
+
listPlugins() {
|
|
345
|
+
return Array.from(this.plugins.keys());
|
|
346
|
+
}
|
|
347
|
+
emit(eventName, ...args) {
|
|
348
|
+
return super.emit(eventName, ...args);
|
|
349
|
+
}
|
|
350
|
+
on(eventName, listener) {
|
|
351
|
+
return super.on(eventName, listener);
|
|
352
|
+
}
|
|
353
|
+
async loadPluginsFromDirectory(directoryPath = join(process.cwd(), "plugins")) {
|
|
354
|
+
try {
|
|
355
|
+
const globalConfigPath = join(this.storageRoot, "plugins.json");
|
|
356
|
+
let disabledPlugins = [];
|
|
357
|
+
try {
|
|
358
|
+
const file = Bun.file(globalConfigPath);
|
|
359
|
+
if (await file.exists()) {
|
|
360
|
+
const data = await file.json();
|
|
361
|
+
disabledPlugins = data.disabled || [];
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch (e) {
|
|
365
|
+
console.warn("Failed to load global plugin config", e);
|
|
366
|
+
}
|
|
367
|
+
const files = await readdir(directoryPath);
|
|
368
|
+
this.availablePlugins.clear();
|
|
369
|
+
for (const file of files) {
|
|
370
|
+
if ((file.endsWith(".ts") || file.endsWith(".js")) && !file.endsWith(".d.ts")) {
|
|
371
|
+
const fullPath = join(directoryPath, file);
|
|
372
|
+
try {
|
|
373
|
+
const module = await import(fullPath);
|
|
374
|
+
for (const key in module) {
|
|
375
|
+
const ExportedItem = module[key];
|
|
376
|
+
const validation = validatePlugin(ExportedItem);
|
|
377
|
+
if (validation.valid) {
|
|
378
|
+
this.availablePlugins.set(validation.plugin.name, validation.plugin);
|
|
379
|
+
}
|
|
380
|
+
else {
|
|
381
|
+
console.warn(`Skipping invalid plugin in ${file}: ${validation.error}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
catch (err) {
|
|
386
|
+
console.error(`Error importing ${fullPath}:`, err);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
const pluginsToLoad = [];
|
|
391
|
+
for (const plugin of this.availablePlugins.values()) {
|
|
392
|
+
if (!disabledPlugins.includes(plugin.name)) {
|
|
393
|
+
pluginsToLoad.push(plugin);
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
console.log(`Plugin ${plugin.name} is disabled.`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
try {
|
|
400
|
+
const sortedPlugins = this.dependencyManager.resolveLoadOrder(pluginsToLoad);
|
|
401
|
+
const loadedPlugins = [];
|
|
402
|
+
for (const plugin of sortedPlugins) {
|
|
403
|
+
let dependenciesOk = true;
|
|
404
|
+
if (plugin.dependencies) {
|
|
405
|
+
for (const dep of Object.keys(plugin.dependencies)) {
|
|
406
|
+
if (!this.plugins.has(dep)) {
|
|
407
|
+
console.warn(`Skipping ${plugin.name}: Dependency ${dep} failed to load or is missing.`);
|
|
408
|
+
dependenciesOk = false;
|
|
409
|
+
break;
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
if (!dependenciesOk)
|
|
414
|
+
continue;
|
|
415
|
+
try {
|
|
416
|
+
if (!this.plugins.has(plugin.name)) {
|
|
417
|
+
await this.register(plugin);
|
|
418
|
+
loadedPlugins.push(plugin);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
catch (e) {
|
|
422
|
+
console.error(`Failed to load ${plugin.name}:`, e);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
for (const plugin of loadedPlugins) {
|
|
426
|
+
if (plugin.onStarted) {
|
|
427
|
+
try {
|
|
428
|
+
await plugin.onStarted();
|
|
429
|
+
}
|
|
430
|
+
catch (e) {
|
|
431
|
+
console.error(`Error in onStarted for ${plugin.name}:`, e);
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
catch (e) {
|
|
437
|
+
console.error("Failed to resolve plugin dependencies or load plugins:", e);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
catch (error) {
|
|
441
|
+
console.error(`Failed to load plugins from ${directoryPath}`, error);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
async disablePlugin(name) {
|
|
445
|
+
await this.unregister(name);
|
|
446
|
+
await this.updatePluginState(name, true);
|
|
447
|
+
console.log(`Plugin ${name} disabled.`);
|
|
448
|
+
}
|
|
449
|
+
async enablePlugin(name) {
|
|
450
|
+
await this.updatePluginState(name, false);
|
|
451
|
+
if (!this.plugins.has(name)) {
|
|
452
|
+
const plugin = this.availablePlugins.get(name);
|
|
453
|
+
if (plugin) {
|
|
454
|
+
if (plugin.dependencies) {
|
|
455
|
+
for (const dep of Object.keys(plugin.dependencies)) {
|
|
456
|
+
if (!this.plugins.has(dep)) {
|
|
457
|
+
console.warn(`Cannot enable ${name}: Dependency ${dep} is not loaded.`);
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
}
|
|
462
|
+
await this.register(plugin);
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
console.warn(`Plugin ${name} enabled but not found in available plugins.`);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
async reloadPlugin(name) {
|
|
470
|
+
const plugin = this.plugins.get(name);
|
|
471
|
+
if (plugin) {
|
|
472
|
+
console.log(`Reloading plugin ${name}...`);
|
|
473
|
+
await this.unregister(name);
|
|
474
|
+
}
|
|
475
|
+
const definition = this.availablePlugins.get(name);
|
|
476
|
+
if (definition) {
|
|
477
|
+
await this.register(definition);
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
throw new Error(`Plugin ${name} not found in available plugins.`);
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
async updatePluginState(name, disabled) {
|
|
484
|
+
try {
|
|
485
|
+
const globalConfigPath = join(this.storageRoot, "plugins.json");
|
|
486
|
+
let config = { disabled: [] };
|
|
487
|
+
const file = Bun.file(globalConfigPath);
|
|
488
|
+
if (await file.exists()) {
|
|
489
|
+
config = await file.json();
|
|
490
|
+
}
|
|
491
|
+
const set = new Set(config.disabled);
|
|
492
|
+
if (disabled) {
|
|
493
|
+
set.add(name);
|
|
494
|
+
}
|
|
495
|
+
else {
|
|
496
|
+
set.delete(name);
|
|
497
|
+
}
|
|
498
|
+
config.disabled = Array.from(set);
|
|
499
|
+
await mkdir(this.storageRoot, { recursive: true });
|
|
500
|
+
await Bun.write(globalConfigPath, JSON.stringify(config, null, 2));
|
|
501
|
+
}
|
|
502
|
+
catch (e) {
|
|
503
|
+
console.error("Failed to update plugin state", e);
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
async runOnResolve(args) {
|
|
507
|
+
return this.hooksManager.runOnResolve(args);
|
|
508
|
+
}
|
|
509
|
+
async runOnLoad(args) {
|
|
510
|
+
return this.hooksManager.runOnLoad(args);
|
|
511
|
+
}
|
|
512
|
+
toBunPlugin() {
|
|
513
|
+
return this.hooksManager.toBunPlugin();
|
|
514
|
+
}
|
|
515
|
+
hotReloadTimer = null;
|
|
516
|
+
enableHotReload(pluginDir) {
|
|
517
|
+
console.log(`[HotReload] Watching ${pluginDir} for changes...`);
|
|
518
|
+
watch(pluginDir, { recursive: true }, async (event, filename) => {
|
|
519
|
+
if (!filename || (!filename.endsWith(".ts") && !filename.endsWith(".js")))
|
|
520
|
+
return;
|
|
521
|
+
if (this.hotReloadTimer)
|
|
522
|
+
clearTimeout(this.hotReloadTimer);
|
|
523
|
+
this.hotReloadTimer = setTimeout(async () => {
|
|
524
|
+
console.log(`[HotReload] Change detected in ${filename}. Re-scanning plugins...`);
|
|
525
|
+
await this.loadPluginsFromDirectory(pluginDir);
|
|
526
|
+
}, 300);
|
|
527
|
+
});
|
|
528
|
+
}
|
|
529
|
+
getMetrics() {
|
|
530
|
+
return {
|
|
531
|
+
totalPlugins: this.plugins.size,
|
|
532
|
+
activePlugins: Array.from(this.plugins.keys()),
|
|
533
|
+
resources: this.resources.getUsageSummary(),
|
|
534
|
+
hooks: {
|
|
535
|
+
onResolve: this.hooksManager.getHookCount(HookType.ON_RESOLVE),
|
|
536
|
+
onLoad: this.hooksManager.getHookCount(HookType.ON_LOAD)
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
}
|
|
540
|
+
getPluginStatus() {
|
|
541
|
+
const status = {};
|
|
542
|
+
for (const [name, plugin] of this.plugins) {
|
|
543
|
+
const resources = this.resources.get(name);
|
|
544
|
+
status[name] = {
|
|
545
|
+
version: plugin.version,
|
|
546
|
+
status: "active",
|
|
547
|
+
resources: {
|
|
548
|
+
workers: resources?.workers.length || 0,
|
|
549
|
+
timers: resources?.timers.length || 0,
|
|
550
|
+
listeners: resources?.eventListeners.length || 0
|
|
551
|
+
}
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
return status;
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
//# sourceMappingURL=PluginManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginManager.js","sourceRoot":"","sources":["../src/PluginManager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC;AACxC,mBAAmB,eAAe,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,6BAA6B,CAAC;AAC5C,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { PluginContext, IPlugin } from "../types";
|
|
2
|
+
import type { PluginManager } from "../PluginManager";
|
|
3
|
+
import type { ResourceManager } from "./ResourceManager";
|
|
4
|
+
import { type IPluginStorage } from "../types";
|
|
5
|
+
export declare function createPluginContext(manager: PluginManager, plugin: IPlugin, resources: ResourceManager, storage: IPluginStorage, config: any): PluginContext;
|
|
6
|
+
//# sourceMappingURL=ContextFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ContextFactory.d.ts","sourceRoot":"","sources":["../../src/managers/ContextFactory.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAA4B,MAAM,UAAU,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,UAAU,CAAC;AAG/C,wBAAgB,mBAAmB,CAC/B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,GAAG,GACZ,aAAa,CAgHf"}
|