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
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare enum WorkerMessageType {
|
|
3
|
+
RPC_CALL = "RPC_CALL",
|
|
4
|
+
HOOK_CALL = "HOOK_CALL",
|
|
5
|
+
HOOK_RESULT = "HOOK_RESULT",
|
|
6
|
+
HOOK_ERROR = "HOOK_ERROR",
|
|
7
|
+
EVENT_EMIT = "EVENT_EMIT",
|
|
8
|
+
MANIFEST = "MANIFEST",
|
|
9
|
+
LOAD_SUCCESS = "LOAD_SUCCESS",
|
|
10
|
+
LOAD_ERROR = "LOAD_ERROR",
|
|
11
|
+
START_UP = "START_UP",
|
|
12
|
+
UNLOAD = "UNLOAD"
|
|
13
|
+
}
|
|
14
|
+
export declare enum PluginPermission {
|
|
15
|
+
Network = "network",
|
|
16
|
+
Filesystem = "filesystem",
|
|
17
|
+
Env = "env"
|
|
18
|
+
}
|
|
19
|
+
export declare enum RPCMethod {
|
|
20
|
+
StorageGet = "storage:get",
|
|
21
|
+
StorageSet = "storage:set",
|
|
22
|
+
StorageDelete = "storage:delete",
|
|
23
|
+
StorageClear = "storage:clear",
|
|
24
|
+
EventsEmit = "events:emit",
|
|
25
|
+
EventsOn = "events:on",
|
|
26
|
+
HooksRegister = "hooks:register",
|
|
27
|
+
ManagerGetPlugin = "manager:getPlugin",
|
|
28
|
+
Log = "log",
|
|
29
|
+
NetworkFetch = "network:fetch",
|
|
30
|
+
PermissionCheck = "perm:check"
|
|
31
|
+
}
|
|
32
|
+
export declare enum HookType {
|
|
33
|
+
ON_RESOLVE = "onResolve",
|
|
34
|
+
ON_LOAD = "onLoad"
|
|
35
|
+
}
|
|
36
|
+
export declare enum HookOrder {
|
|
37
|
+
PRE = "pre",
|
|
38
|
+
POST = "post"
|
|
39
|
+
}
|
|
40
|
+
export interface PluginResource {
|
|
41
|
+
workers: Worker[];
|
|
42
|
+
timers: {
|
|
43
|
+
id: number | Timer;
|
|
44
|
+
type: 'timeout' | 'interval';
|
|
45
|
+
}[];
|
|
46
|
+
eventListeners: {
|
|
47
|
+
event: string;
|
|
48
|
+
listener: Function;
|
|
49
|
+
}[];
|
|
50
|
+
}
|
|
51
|
+
export interface HookRegistry<T> {
|
|
52
|
+
filter: RegExp;
|
|
53
|
+
callback: T;
|
|
54
|
+
pluginName: string;
|
|
55
|
+
order?: HookOrder;
|
|
56
|
+
}
|
|
57
|
+
export interface AppEvents {
|
|
58
|
+
"log": {
|
|
59
|
+
level: "info" | "error" | "warn";
|
|
60
|
+
message: string;
|
|
61
|
+
};
|
|
62
|
+
"cmd:input": {
|
|
63
|
+
command: string;
|
|
64
|
+
args: string[];
|
|
65
|
+
};
|
|
66
|
+
[key: string]: any;
|
|
67
|
+
}
|
|
68
|
+
export type EventCallback<T> = (payload: T) => void | Promise<void>;
|
|
69
|
+
export interface IPluginStorage {
|
|
70
|
+
get<T>(key: string, defaultValue?: T): Promise<T | undefined>;
|
|
71
|
+
set<T>(key: string, value: T): Promise<void>;
|
|
72
|
+
delete(key: string): Promise<void>;
|
|
73
|
+
clear(): Promise<void>;
|
|
74
|
+
}
|
|
75
|
+
export interface Logger {
|
|
76
|
+
info(msg: string, ...args: any[]): void;
|
|
77
|
+
warn(msg: string, ...args: any[]): void;
|
|
78
|
+
error(msg: string, ...args: any[]): void;
|
|
79
|
+
}
|
|
80
|
+
export interface PluginContext {
|
|
81
|
+
emit<K extends keyof AppEvents>(event: K, payload: AppEvents[K]): void;
|
|
82
|
+
on<K extends keyof AppEvents>(event: K, callback: EventCallback<AppEvents[K]>): void;
|
|
83
|
+
events: {
|
|
84
|
+
emit<K extends keyof AppEvents>(event: K, payload: AppEvents[K]): void;
|
|
85
|
+
on<K extends keyof AppEvents>(event: K, callback: EventCallback<AppEvents[K]>): void;
|
|
86
|
+
};
|
|
87
|
+
storage: IPluginStorage;
|
|
88
|
+
config: Record<string, any>;
|
|
89
|
+
manager: any;
|
|
90
|
+
getPlugin(name: string): unknown | undefined;
|
|
91
|
+
log: Logger;
|
|
92
|
+
createWorker(url: string | URL, options?: BunWorkerOptions): BunWorker;
|
|
93
|
+
network: {
|
|
94
|
+
fetch: (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
95
|
+
};
|
|
96
|
+
file: (path: string) => any;
|
|
97
|
+
env: Record<string, string | undefined>;
|
|
98
|
+
setTimeout: (callback: (...args: any[]) => void, delay?: number, ...args: any[]) => number | Timer;
|
|
99
|
+
setInterval: (callback: (...args: any[]) => void, delay?: number, ...args: any[]) => number | Timer;
|
|
100
|
+
clearTimeout: (id: number | Timer) => void;
|
|
101
|
+
clearInterval: (id: number | Timer) => void;
|
|
102
|
+
}
|
|
103
|
+
export interface BunWorkerOptions extends WorkerOptions {
|
|
104
|
+
smol?: boolean;
|
|
105
|
+
preload?: string[] | string;
|
|
106
|
+
ref?: boolean;
|
|
107
|
+
env?: Record<string, string>;
|
|
108
|
+
}
|
|
109
|
+
export interface BunWorker extends Worker {
|
|
110
|
+
ref(): void;
|
|
111
|
+
unref(): void;
|
|
112
|
+
}
|
|
113
|
+
export declare class AccessDeniedError extends Error {
|
|
114
|
+
constructor(permission: string, pluginName: string);
|
|
115
|
+
}
|
|
116
|
+
export declare const BasicPluginSchema: z.ZodObject<{
|
|
117
|
+
name: z.ZodString;
|
|
118
|
+
version: z.ZodString;
|
|
119
|
+
}, z.core.$strip>;
|
|
120
|
+
export interface IPlugin {
|
|
121
|
+
name: string;
|
|
122
|
+
version: string;
|
|
123
|
+
description?: string;
|
|
124
|
+
author?: string;
|
|
125
|
+
engines?: {
|
|
126
|
+
host?: string;
|
|
127
|
+
};
|
|
128
|
+
configSchema?: z.ZodSchema;
|
|
129
|
+
defaultConfig?: Record<string, any>;
|
|
130
|
+
dependencies?: Record<string, string>;
|
|
131
|
+
permissions?: PluginPermission[];
|
|
132
|
+
allowedDomains?: string[];
|
|
133
|
+
onLoad(context: PluginContext): Promise<void> | void;
|
|
134
|
+
onStarted?: () => Promise<void> | void;
|
|
135
|
+
onUnload(): Promise<void> | void;
|
|
136
|
+
getSharedApi?: () => unknown;
|
|
137
|
+
setup?: (build: PluginBuilder) => void | Promise<void>;
|
|
138
|
+
}
|
|
139
|
+
export type OnResolveArgs = {
|
|
140
|
+
path: string;
|
|
141
|
+
importer?: string;
|
|
142
|
+
namespace?: string;
|
|
143
|
+
};
|
|
144
|
+
export type OnResolveResult = {
|
|
145
|
+
path: string;
|
|
146
|
+
namespace?: string;
|
|
147
|
+
} | undefined | null;
|
|
148
|
+
export type OnResolveCallback = (args: OnResolveArgs) => OnResolveResult | Promise<OnResolveResult>;
|
|
149
|
+
export type OnLoadArgs = {
|
|
150
|
+
path: string;
|
|
151
|
+
namespace?: string;
|
|
152
|
+
previousContents?: string;
|
|
153
|
+
};
|
|
154
|
+
export type OnLoadResult = {
|
|
155
|
+
contents: string;
|
|
156
|
+
loader?: string;
|
|
157
|
+
} | undefined | null;
|
|
158
|
+
export type OnLoadCallback = (args: OnLoadArgs) => OnLoadResult | Promise<OnLoadResult>;
|
|
159
|
+
export interface PluginBuilder {
|
|
160
|
+
onResolve(filter: RegExp, callback: OnResolveCallback, options?: {
|
|
161
|
+
order?: HookOrder;
|
|
162
|
+
}): void;
|
|
163
|
+
onLoad(filter: RegExp, callback: OnLoadCallback, options?: {
|
|
164
|
+
order?: HookOrder;
|
|
165
|
+
}): void;
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export var WorkerMessageType;
|
|
3
|
+
(function (WorkerMessageType) {
|
|
4
|
+
WorkerMessageType["RPC_CALL"] = "RPC_CALL";
|
|
5
|
+
WorkerMessageType["HOOK_CALL"] = "HOOK_CALL";
|
|
6
|
+
WorkerMessageType["HOOK_RESULT"] = "HOOK_RESULT";
|
|
7
|
+
WorkerMessageType["HOOK_ERROR"] = "HOOK_ERROR";
|
|
8
|
+
WorkerMessageType["EVENT_EMIT"] = "EVENT_EMIT";
|
|
9
|
+
WorkerMessageType["MANIFEST"] = "MANIFEST";
|
|
10
|
+
WorkerMessageType["LOAD_SUCCESS"] = "LOAD_SUCCESS";
|
|
11
|
+
WorkerMessageType["LOAD_ERROR"] = "LOAD_ERROR";
|
|
12
|
+
WorkerMessageType["START_UP"] = "START_UP";
|
|
13
|
+
WorkerMessageType["UNLOAD"] = "UNLOAD";
|
|
14
|
+
})(WorkerMessageType || (WorkerMessageType = {}));
|
|
15
|
+
export var PluginPermission;
|
|
16
|
+
(function (PluginPermission) {
|
|
17
|
+
PluginPermission["Network"] = "network";
|
|
18
|
+
PluginPermission["Filesystem"] = "filesystem";
|
|
19
|
+
PluginPermission["Env"] = "env";
|
|
20
|
+
})(PluginPermission || (PluginPermission = {}));
|
|
21
|
+
export var RPCMethod;
|
|
22
|
+
(function (RPCMethod) {
|
|
23
|
+
RPCMethod["StorageGet"] = "storage:get";
|
|
24
|
+
RPCMethod["StorageSet"] = "storage:set";
|
|
25
|
+
RPCMethod["StorageDelete"] = "storage:delete";
|
|
26
|
+
RPCMethod["StorageClear"] = "storage:clear";
|
|
27
|
+
RPCMethod["EventsEmit"] = "events:emit";
|
|
28
|
+
RPCMethod["EventsOn"] = "events:on";
|
|
29
|
+
RPCMethod["HooksRegister"] = "hooks:register";
|
|
30
|
+
RPCMethod["ManagerGetPlugin"] = "manager:getPlugin";
|
|
31
|
+
RPCMethod["Log"] = "log";
|
|
32
|
+
RPCMethod["NetworkFetch"] = "network:fetch";
|
|
33
|
+
RPCMethod["PermissionCheck"] = "perm:check";
|
|
34
|
+
})(RPCMethod || (RPCMethod = {}));
|
|
35
|
+
export var HookType;
|
|
36
|
+
(function (HookType) {
|
|
37
|
+
HookType["ON_RESOLVE"] = "onResolve";
|
|
38
|
+
HookType["ON_LOAD"] = "onLoad";
|
|
39
|
+
})(HookType || (HookType = {}));
|
|
40
|
+
export var HookOrder;
|
|
41
|
+
(function (HookOrder) {
|
|
42
|
+
HookOrder["PRE"] = "pre";
|
|
43
|
+
HookOrder["POST"] = "post";
|
|
44
|
+
})(HookOrder || (HookOrder = {}));
|
|
45
|
+
export class AccessDeniedError extends Error {
|
|
46
|
+
constructor(permission, pluginName) {
|
|
47
|
+
super(`Plugin '${pluginName}' tried to access '${permission}' but does not have permission.`);
|
|
48
|
+
this.name = "AccessDeniedError";
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
// Validation schema for a basic plugin structure if needed
|
|
52
|
+
export const BasicPluginSchema = z.object({
|
|
53
|
+
name: z.string(),
|
|
54
|
+
version: z.string(),
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAN,IAAY,iBAWX;AAXD,WAAY,iBAAiB;IACzB,0CAAqB,CAAA;IACrB,4CAAuB,CAAA;IACvB,gDAA2B,CAAA;IAC3B,8CAAyB,CAAA;IACzB,8CAAyB,CAAA;IACzB,0CAAqB,CAAA;IACrB,kDAA6B,CAAA;IAC7B,8CAAyB,CAAA;IACzB,0CAAqB,CAAA;IACrB,sCAAiB,CAAA;AACrB,CAAC,EAXW,iBAAiB,KAAjB,iBAAiB,QAW5B;AAED,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IACxB,uCAAmB,CAAA;IACnB,6CAAyB,CAAA;IACzB,+BAAW,CAAA;AACf,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED,MAAM,CAAN,IAAY,SAYX;AAZD,WAAY,SAAS;IACjB,uCAA0B,CAAA;IAC1B,uCAA0B,CAAA;IAC1B,6CAAgC,CAAA;IAChC,2CAA8B,CAAA;IAC9B,uCAA0B,CAAA;IAC1B,mCAAsB,CAAA;IACtB,6CAAgC,CAAA;IAChC,mDAAsC,CAAA;IACtC,wBAAW,CAAA;IACX,2CAA8B,CAAA;IAC9B,2CAA8B,CAAA;AAClC,CAAC,EAZW,SAAS,KAAT,SAAS,QAYpB;AAED,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAChB,oCAAwB,CAAA;IACxB,8BAAkB,CAAA;AACtB,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,MAAM,CAAN,IAAY,SAGX;AAHD,WAAY,SAAS;IACjB,wBAAW,CAAA;IACX,0BAAa,CAAA;AACjB,CAAC,EAHW,SAAS,KAAT,SAAS,QAGpB;AA0FD,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IACxC,YAAY,UAAkB,EAAE,UAAkB;QAC9C,KAAK,CAAC,WAAW,UAAU,sBAAsB,UAAU,iCAAiC,CAAC,CAAC;QAC9F,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IACpC,CAAC;CACJ;AAED,2DAA2D;AAC3D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;CACpB,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorParser.d.ts","sourceRoot":"","sources":["../../src/utils/errorParser.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAoBlE;AACD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function errorParser(error, prefix) {
|
|
2
|
+
let parsedError;
|
|
3
|
+
// Parse the error
|
|
4
|
+
if (error instanceof Error) {
|
|
5
|
+
parsedError = error;
|
|
6
|
+
}
|
|
7
|
+
else if (typeof error === "string") {
|
|
8
|
+
parsedError = new Error(error);
|
|
9
|
+
}
|
|
10
|
+
else if (error && typeof error === "object" && "message" in error) {
|
|
11
|
+
parsedError = new Error(String(error.message));
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
parsedError = new Error(String(error));
|
|
15
|
+
}
|
|
16
|
+
// Prepend prefix if provided
|
|
17
|
+
if (prefix) {
|
|
18
|
+
parsedError.message = `${prefix}: ${parsedError.message}`;
|
|
19
|
+
}
|
|
20
|
+
return parsedError;
|
|
21
|
+
}
|
|
22
|
+
export default errorParser;
|
|
23
|
+
//# sourceMappingURL=errorParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorParser.js","sourceRoot":"","sources":["../../src/utils/errorParser.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,KAAc,EAAE,MAAe;IACzD,IAAI,WAAkB,CAAC;IAEvB,kBAAkB;IAClB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACrC,WAAW,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QACpE,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACzC,CAAC;IAED,6BAA6B;IAC7B,IAAI,MAAM,EAAE,CAAC;QACX,WAAW,CAAC,OAAO,GAAG,GAAG,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AACD,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import type { IPlugin } from "../types";
|
|
3
|
+
export declare const PluginSchema: z.ZodObject<{
|
|
4
|
+
name: z.ZodString;
|
|
5
|
+
version: z.ZodDefault<z.ZodString>;
|
|
6
|
+
description: z.ZodOptional<z.ZodString>;
|
|
7
|
+
author: z.ZodOptional<z.ZodString>;
|
|
8
|
+
configSchema: z.ZodOptional<z.ZodAny>;
|
|
9
|
+
defaultConfig: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
10
|
+
dependencies: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
11
|
+
permissions: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
12
|
+
network: "network";
|
|
13
|
+
filesystem: "filesystem";
|
|
14
|
+
env: "env";
|
|
15
|
+
}>>>;
|
|
16
|
+
allowedDomains: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
17
|
+
engines: z.ZodOptional<z.ZodObject<{
|
|
18
|
+
host: z.ZodOptional<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
onLoad: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
21
|
+
onStarted: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
|
|
22
|
+
onUnload: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
|
|
23
|
+
getSharedApi: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
|
|
24
|
+
setup: z.ZodOptional<z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>>;
|
|
25
|
+
}, z.core.$strip>;
|
|
26
|
+
export declare const StrictPluginSchema: z.ZodObject<{
|
|
27
|
+
name: z.ZodString;
|
|
28
|
+
version: z.ZodString;
|
|
29
|
+
onLoad: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
30
|
+
onUnload: z.ZodFunction<z.core.$ZodFunctionArgs, z.core.$ZodFunctionOut>;
|
|
31
|
+
}, z.core.$strip>;
|
|
32
|
+
export type ValidationResult = {
|
|
33
|
+
valid: true;
|
|
34
|
+
plugin: IPlugin;
|
|
35
|
+
} | {
|
|
36
|
+
valid: false;
|
|
37
|
+
error: string;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Validates if an unknown object is a valid plugin.
|
|
41
|
+
* Handles:
|
|
42
|
+
* 1. Class instances (Standard)
|
|
43
|
+
* 2. Plain objects
|
|
44
|
+
* 3. Class Constructors (instantiates them) // TODO if we want to move that logic here
|
|
45
|
+
*/
|
|
46
|
+
export declare function validatePlugin(candidate: unknown): ValidationResult;
|
|
47
|
+
//# sourceMappingURL=pluginValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginValidator.d.ts","sourceRoot":"","sources":["../../src/utils/pluginValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAGxC,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;iBAsBvB,CAAC;AAGH,eAAO,MAAM,kBAAkB;;;;;iBAK7B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GACxB;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,OAAO,GAAG,gBAAgB,CAqBnE"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { errorParser } from "../utils/errorParser";
|
|
3
|
+
export const PluginSchema = z.object({
|
|
4
|
+
name: z.string().min(1, "Plugin name is required"),
|
|
5
|
+
version: z.string().min(1, "Plugin version is required").default("1.0.0"),
|
|
6
|
+
description: z.string().optional(),
|
|
7
|
+
author: z.string().optional(),
|
|
8
|
+
configSchema: z.any().optional(), // We accept any Zod-like object here
|
|
9
|
+
defaultConfig: z.record(z.string(), z.any()).optional(),
|
|
10
|
+
dependencies: z.record(z.string(), z.string()).optional(),
|
|
11
|
+
permissions: z.array(z.enum(['network', 'filesystem', 'env'])).optional(),
|
|
12
|
+
allowedDomains: z.array(z.string()).optional(),
|
|
13
|
+
engines: z.object({
|
|
14
|
+
host: z.string().optional(),
|
|
15
|
+
}).optional(),
|
|
16
|
+
onLoad: z.function(),
|
|
17
|
+
onStarted: z.function().optional(),
|
|
18
|
+
onUnload: z.function().optional(),
|
|
19
|
+
getSharedApi: z.function().optional(),
|
|
20
|
+
setup: z.function().optional(),
|
|
21
|
+
});
|
|
22
|
+
// We can have a stricter schema for the full IPlugin
|
|
23
|
+
export const StrictPluginSchema = z.object({
|
|
24
|
+
name: z.string(),
|
|
25
|
+
version: z.string(),
|
|
26
|
+
onLoad: z.function(),
|
|
27
|
+
onUnload: z.function(),
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Validates if an unknown object is a valid plugin.
|
|
31
|
+
* Handles:
|
|
32
|
+
* 1. Class instances (Standard)
|
|
33
|
+
* 2. Plain objects
|
|
34
|
+
* 3. Class Constructors (instantiates them) // TODO if we want to move that logic here
|
|
35
|
+
*/
|
|
36
|
+
export function validatePlugin(candidate) {
|
|
37
|
+
try {
|
|
38
|
+
// If it's a class constructor (function), try to instantiate it
|
|
39
|
+
if (typeof candidate === 'function' && candidate.prototype) {
|
|
40
|
+
// We can't easily instantiate it without knowing if it needs args,
|
|
41
|
+
// but our convention is 0-arg constructor for plugins.
|
|
42
|
+
try {
|
|
43
|
+
// @ts-ignore
|
|
44
|
+
const instance = new candidate();
|
|
45
|
+
return validatePluginInstance(instance);
|
|
46
|
+
}
|
|
47
|
+
catch (e) {
|
|
48
|
+
const errorplugin = errorParser(e, `Failed to instantiate plugin class:`);
|
|
49
|
+
return { valid: false, error: errorplugin.message };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return validatePluginInstance(candidate);
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
const errorplugin = errorParser(error, `Unexpected validation error:`);
|
|
56
|
+
return { valid: false, error: errorplugin.message };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function validatePluginInstance(obj) {
|
|
60
|
+
const result = PluginSchema.safeParse(obj);
|
|
61
|
+
if (!result.success) {
|
|
62
|
+
return {
|
|
63
|
+
valid: false,
|
|
64
|
+
error: result.error.issues.map((e) => `${e.path.join('.')}: ${e.message}`).join(', ')
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
// Cast to IPlugin (fill in missing optional methods if needed)
|
|
68
|
+
const plugin = result.data;
|
|
69
|
+
// Shim onUnload if missing (since we made it optional in schema but it is required in IPlugin interface usually,
|
|
70
|
+
// though we can be lenient)
|
|
71
|
+
if (!plugin.onUnload) {
|
|
72
|
+
plugin.onUnload = () => { };
|
|
73
|
+
}
|
|
74
|
+
return { valid: true, plugin };
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=pluginValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pluginValidator.js","sourceRoot":"","sources":["../../src/utils/pluginValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,yBAAyB,CAAC;IAClD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,4BAA4B,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACzE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,YAAY,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,EAAE,qCAAqC;IACvE,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE;IAEvD,YAAY,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACzD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACzE,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IAE9C,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B,CAAC,CAAC,QAAQ,EAAE;IAEb,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACjC,YAAY,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,qDAAqD;AACrD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvB,CAAC,CAAC;AAMH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,SAAkB;IAC/C,IAAI,CAAC;QACH,gEAAgE;QAChE,IAAI,OAAO,SAAS,KAAK,UAAU,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;YACzD,oEAAoE;YACpE,uDAAuD;YACvD,IAAI,CAAC;gBACD,aAAa;gBACb,MAAM,QAAQ,GAAG,IAAI,SAAS,EAAE,CAAC;gBACjC,OAAO,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAC5C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,EAAE,qCAAqC,CAAC,CAAC;gBAC1E,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;YACxD,CAAC;QACL,CAAC;QAED,OAAO,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,CAAC,OAAO,EAAE,CAAC;IACtD,CAAC;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAY;IAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAE3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO;YACH,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;SAC7F,CAAC;IACJ,CAAC;IAED,+DAA+D;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,IAAe,CAAC;IAEtC,kHAAkH;IAClH,4BAA4B;IAC5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,GAAE,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare function checkNetworkPermission(pluginName: string, permissions: string[] | undefined, allowedDomains: string[] | undefined, urlStr: string): void;
|
|
2
|
+
export declare function checkPermission(pluginName: string, permissions: string[] | undefined, perm: 'filesystem' | 'env'): void;
|
|
3
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA,wBAAgB,sBAAsB,CAClC,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EACjC,cAAc,EAAE,MAAM,EAAE,GAAG,SAAS,EACpC,MAAM,EAAE,MAAM,GACf,IAAI,CAuBN;AAED,wBAAgB,eAAe,CAC3B,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EAAE,GAAG,SAAS,EACjC,IAAI,EAAE,YAAY,GAAG,KAAK,GAC3B,IAAI,CAIN"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export function checkNetworkPermission(pluginName, permissions, allowedDomains, urlStr) {
|
|
2
|
+
if (!permissions?.includes('network')) {
|
|
3
|
+
throw new Error(`AccessDenied: Plugin '${pluginName}' requires 'network' permission.`);
|
|
4
|
+
}
|
|
5
|
+
if (allowedDomains && allowedDomains.length > 0) {
|
|
6
|
+
let url;
|
|
7
|
+
try {
|
|
8
|
+
url = new URL(urlStr);
|
|
9
|
+
}
|
|
10
|
+
catch (e) {
|
|
11
|
+
// If URL is invalid, we block it just in case
|
|
12
|
+
throw new Error(`AccessDenied: Invalid URL '${urlStr}' for plugin '${pluginName}'.`);
|
|
13
|
+
}
|
|
14
|
+
const hostname = url.hostname;
|
|
15
|
+
const isAllowed = allowedDomains.some(domain => hostname === domain || hostname.endsWith('.' + domain));
|
|
16
|
+
if (!isAllowed) {
|
|
17
|
+
throw new Error(`AccessDenied: Domain '${hostname}' is not in allowedDomains for plugin '${pluginName}'.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export function checkPermission(pluginName, permissions, perm) {
|
|
22
|
+
if (!permissions?.includes(perm)) {
|
|
23
|
+
throw new Error(`AccessDenied: Plugin '${pluginName}' requires '${perm}' permission.`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/utils/security.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,sBAAsB,CAClC,UAAkB,EAClB,WAAiC,EACjC,cAAoC,EACpC,MAAc;IAEd,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,kCAAkC,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9C,IAAI,GAAQ,CAAC;QACb,IAAI,CAAC;YACD,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,8CAA8C;YAC9C,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,iBAAiB,UAAU,IAAI,CAAC,CAAC;QACzF,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC9B,MAAM,SAAS,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAC3C,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,GAAG,MAAM,CAAC,CACzD,CAAC;QAEF,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,0CAA0C,UAAU,IAAI,CAAC,CAAC;QAC/G,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAC3B,UAAkB,EAClB,WAAiC,EACjC,IAA0B;IAE1B,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,eAAe,IAAI,eAAe,CAAC,CAAC;IAC3F,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerRunner.d.ts","sourceRoot":"","sources":["../../src/worker/WorkerRunner.ts"],"names":[],"mappings":""}
|