@droposs/plugin-sdk 0.1.0 → 0.3.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/dist/client-mock.d.ts +31 -1
- package/dist/client-mock.d.ts.map +1 -1
- package/dist/client-mock.js +51 -0
- package/dist/client-mock.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/rpc.d.ts +29 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +58 -0
- package/dist/rpc.js.map +1 -0
- package/dist/types.d.ts +40 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -3
- package/schema/drop-plugin.schema.json +225 -0
package/dist/client-mock.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { AntiCheatReport, ClientCapability, ClientPluginContext, ClientPluginStorage, ClientPluginWebSocket, GameMenuItem, LaunchHook, PlayAction, PluginLogger, ScopedGameFs, ScopedGameScanner, SidebarItem, TopBarItem, UISlotName, UISlotRegistration } from "./types.js";
|
|
1
|
+
import type { AntiCheatReport, ClientCapability, ClientPluginContext, ClientPluginStorage, ClientPluginSystem, ClientPluginWebSocket, CommandOptions, CommandResult, GameMenuItem, HttpMethod, LaunchHook, PlayAction, PluginLogger, ScopedGameFs, ScopedGameScanner, SidebarItem, TopBarItem, UISlotName, UISlotRegistration } from "./types.js";
|
|
2
2
|
export declare class MockClientPluginStorage implements ClientPluginStorage {
|
|
3
3
|
private store;
|
|
4
4
|
get<T>(key: string): Promise<T | null>;
|
|
@@ -44,6 +44,32 @@ export declare class MockClientPluginWebSocket implements ClientPluginWebSocket
|
|
|
44
44
|
subscribe(channel: string, listener: (data: unknown) => void): () => void;
|
|
45
45
|
simulateServerMessage(channel: string, data: unknown): void;
|
|
46
46
|
}
|
|
47
|
+
export declare class MockClientServerRequest {
|
|
48
|
+
calls: Array<{
|
|
49
|
+
method: HttpMethod;
|
|
50
|
+
path: string;
|
|
51
|
+
body?: unknown;
|
|
52
|
+
}>;
|
|
53
|
+
responses: Map<string, unknown>;
|
|
54
|
+
/** Value returned when no canned response is registered. */
|
|
55
|
+
fallback: unknown;
|
|
56
|
+
private key;
|
|
57
|
+
setResponse(method: HttpMethod, path: string, value: unknown): void;
|
|
58
|
+
request<T = unknown>(method: HttpMethod, path?: string, body?: unknown): Promise<T>;
|
|
59
|
+
}
|
|
60
|
+
export declare class MockSystemCommand implements ClientPluginSystem {
|
|
61
|
+
calls: Array<{
|
|
62
|
+
bin: string;
|
|
63
|
+
args: string[];
|
|
64
|
+
options?: CommandOptions;
|
|
65
|
+
}>;
|
|
66
|
+
responses: Map<string, CommandResult>;
|
|
67
|
+
/** Result returned when no canned response is registered. */
|
|
68
|
+
fallback: CommandResult;
|
|
69
|
+
private key;
|
|
70
|
+
setResponse(bin: string, args: string[], result: CommandResult): void;
|
|
71
|
+
run(bin: string, args?: string[], options?: CommandOptions): Promise<CommandResult>;
|
|
72
|
+
}
|
|
47
73
|
export declare class MockClientPluginContext implements ClientPluginContext {
|
|
48
74
|
id: string;
|
|
49
75
|
logger: PluginLogger;
|
|
@@ -58,6 +84,9 @@ export declare class MockClientPluginContext implements ClientPluginContext {
|
|
|
58
84
|
gameFs: MockScopedGameFs;
|
|
59
85
|
gameScanner: MockScopedGameScanner;
|
|
60
86
|
serverWs: MockClientPluginWebSocket;
|
|
87
|
+
serverRequestLog: MockClientServerRequest;
|
|
88
|
+
systemCommand: MockSystemCommand;
|
|
89
|
+
system: ClientPluginSystem;
|
|
61
90
|
constructor(id: string, capabilities?: ClientCapability[]);
|
|
62
91
|
registerSlot(slot: UISlotName, component: unknown, options?: {
|
|
63
92
|
order?: number;
|
|
@@ -69,6 +98,7 @@ export declare class MockClientPluginContext implements ClientPluginContext {
|
|
|
69
98
|
registerSidebarItem(item: SidebarItem): () => void;
|
|
70
99
|
registerTopBarItem(item: TopBarItem): () => void;
|
|
71
100
|
registerLaunchHook(hook: LaunchHook): () => void;
|
|
101
|
+
serverRequest<T = unknown>(method: HttpMethod, path?: string, body?: unknown): Promise<T>;
|
|
72
102
|
resolvePlayActions(gameId: string): Promise<PlayAction[]>;
|
|
73
103
|
private assertCapability;
|
|
74
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-mock.d.ts","sourceRoot":"","sources":["../src/client-mock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,YAAY,
|
|
1
|
+
{"version":3,"file":"client-mock.d.ts","sourceRoot":"","sources":["../src/client-mock.ts"],"names":[],"mappings":"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"}
|
package/dist/client-mock.js
CHANGED
|
@@ -97,6 +97,43 @@ export class MockClientPluginWebSocket {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
|
+
export class MockClientServerRequest {
|
|
101
|
+
calls = [];
|
|
102
|
+
responses = new Map();
|
|
103
|
+
/** Value returned when no canned response is registered. */
|
|
104
|
+
fallback = {};
|
|
105
|
+
key(method, path) {
|
|
106
|
+
const clean = path.startsWith("/") ? path : `/${path}`;
|
|
107
|
+
return `${method.toUpperCase()} ${clean}`;
|
|
108
|
+
}
|
|
109
|
+
setResponse(method, path, value) {
|
|
110
|
+
this.responses.set(this.key(method, path), value);
|
|
111
|
+
}
|
|
112
|
+
async request(method, path = "", body) {
|
|
113
|
+
this.calls.push({ method, path, body });
|
|
114
|
+
const value = this.responses.has(this.key(method, path))
|
|
115
|
+
? this.responses.get(this.key(method, path))
|
|
116
|
+
: this.fallback;
|
|
117
|
+
return value;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
export class MockSystemCommand {
|
|
121
|
+
calls = [];
|
|
122
|
+
responses = new Map();
|
|
123
|
+
/** Result returned when no canned response is registered. */
|
|
124
|
+
fallback = { code: 0, stdout: "", stderr: "" };
|
|
125
|
+
key(bin, args) {
|
|
126
|
+
return [bin, ...args].join(" ");
|
|
127
|
+
}
|
|
128
|
+
setResponse(bin, args, result) {
|
|
129
|
+
this.responses.set(this.key(bin, args), result);
|
|
130
|
+
}
|
|
131
|
+
async run(bin, args = [], options) {
|
|
132
|
+
this.calls.push({ bin, args, options });
|
|
133
|
+
const result = this.responses.get(this.key(bin, args)) ?? this.fallback;
|
|
134
|
+
return { ...result };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
100
137
|
export class MockClientPluginContext {
|
|
101
138
|
id;
|
|
102
139
|
logger;
|
|
@@ -111,6 +148,9 @@ export class MockClientPluginContext {
|
|
|
111
148
|
gameFs;
|
|
112
149
|
gameScanner;
|
|
113
150
|
serverWs;
|
|
151
|
+
serverRequestLog;
|
|
152
|
+
systemCommand;
|
|
153
|
+
system;
|
|
114
154
|
constructor(id, capabilities = [
|
|
115
155
|
"ui:slot",
|
|
116
156
|
"ui:play-action",
|
|
@@ -130,6 +170,14 @@ export class MockClientPluginContext {
|
|
|
130
170
|
this.gameFs = new MockScopedGameFs();
|
|
131
171
|
this.gameScanner = new MockScopedGameScanner();
|
|
132
172
|
this.serverWs = new MockClientPluginWebSocket();
|
|
173
|
+
this.serverRequestLog = new MockClientServerRequest();
|
|
174
|
+
this.systemCommand = new MockSystemCommand();
|
|
175
|
+
this.system = {
|
|
176
|
+
run: async (bin, args = [], options) => {
|
|
177
|
+
this.assertCapability("system:command");
|
|
178
|
+
return await this.systemCommand.run(bin, args, options);
|
|
179
|
+
},
|
|
180
|
+
};
|
|
133
181
|
}
|
|
134
182
|
registerSlot(slot, component, options = {}) {
|
|
135
183
|
this.assertCapability("ui:slot");
|
|
@@ -189,6 +237,9 @@ export class MockClientPluginContext {
|
|
|
189
237
|
this.launchHooks.splice(idx, 1);
|
|
190
238
|
};
|
|
191
239
|
}
|
|
240
|
+
async serverRequest(method, path = "", body) {
|
|
241
|
+
return this.serverRequestLog.request(method, path, body);
|
|
242
|
+
}
|
|
192
243
|
async resolvePlayActions(gameId) {
|
|
193
244
|
const actions = [];
|
|
194
245
|
for (const provider of this.playActionProviders) {
|
package/dist/client-mock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client-mock.js","sourceRoot":"","sources":["../src/client-mock.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"client-mock.js","sourceRoot":"","sources":["../src/client-mock.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC"}
|
package/dist/index.js
CHANGED
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,UAAU,CAAC"}
|
package/dist/rpc.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ClientPluginWebSocket } from "./types.js";
|
|
2
|
+
export interface PluginRpcOptions {
|
|
3
|
+
pluginId: string;
|
|
4
|
+
baseUrl?: string;
|
|
5
|
+
ws?: ClientPluginWebSocket;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Typed RPC helper client for interacting with server plugin HTTP routes and WebSocket channels.
|
|
9
|
+
*/
|
|
10
|
+
export declare class PluginRpcClient {
|
|
11
|
+
readonly pluginId: string;
|
|
12
|
+
readonly baseUrl: string;
|
|
13
|
+
private ws?;
|
|
14
|
+
constructor(options: PluginRpcOptions);
|
|
15
|
+
/**
|
|
16
|
+
* Send an HTTP request to the server plugin's registered route.
|
|
17
|
+
*/
|
|
18
|
+
request<T = unknown>(path: string, init?: RequestInit): Promise<T>;
|
|
19
|
+
/**
|
|
20
|
+
* Send a message to a plugin channel via WebSocket.
|
|
21
|
+
*/
|
|
22
|
+
sendWs<T = unknown>(channel: string, data: unknown): Promise<T>;
|
|
23
|
+
/**
|
|
24
|
+
* Subscribe to messages on a plugin channel via WebSocket.
|
|
25
|
+
*/
|
|
26
|
+
subscribeWs(channel: string, listener: (data: unknown) => void): () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare function createPluginRpcClient(options: PluginRpcOptions): PluginRpcClient;
|
|
29
|
+
//# sourceMappingURL=rpc.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.d.ts","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,EAAE,CAAC,EAAE,qBAAqB,CAAC;CAC5B;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,OAAO,EAAE,MAAM,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,CAAwB;gBAEvB,OAAO,EAAE,gBAAgB;IAMrC;;OAEG;IACG,OAAO,CAAC,CAAC,GAAG,OAAO,EACvB,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,WAAgB,GACrB,OAAO,CAAC,CAAC,CAAC;IAyBb;;OAEG;IACG,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IASrE;;OAEG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;CAQ5E;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAEhF"}
|
package/dist/rpc.js
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Typed RPC helper client for interacting with server plugin HTTP routes and WebSocket channels.
|
|
3
|
+
*/
|
|
4
|
+
export class PluginRpcClient {
|
|
5
|
+
pluginId;
|
|
6
|
+
baseUrl;
|
|
7
|
+
ws;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.pluginId = options.pluginId;
|
|
10
|
+
this.baseUrl = (options.baseUrl ?? "").replace(/\/+$/, "");
|
|
11
|
+
this.ws = options.ws;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Send an HTTP request to the server plugin's registered route.
|
|
15
|
+
*/
|
|
16
|
+
async request(path, init = {}) {
|
|
17
|
+
const cleanPath = path.startsWith("/") ? path : `/${path}`;
|
|
18
|
+
const url = `${this.baseUrl}/api/v1/plugins/${this.pluginId}${cleanPath}`;
|
|
19
|
+
const response = await fetch(url, {
|
|
20
|
+
...init,
|
|
21
|
+
headers: {
|
|
22
|
+
"Content-Type": "application/json",
|
|
23
|
+
...(init.headers || {}),
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
const errorText = await response.text().catch(() => "");
|
|
28
|
+
throw new Error(`Plugin '${this.pluginId}' request to ${cleanPath} failed with HTTP ${response.status}: ${errorText}`);
|
|
29
|
+
}
|
|
30
|
+
const contentType = response.headers.get("content-type");
|
|
31
|
+
if (contentType && contentType.includes("application/json")) {
|
|
32
|
+
return (await response.json());
|
|
33
|
+
}
|
|
34
|
+
return (await response.text());
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Send a message to a plugin channel via WebSocket.
|
|
38
|
+
*/
|
|
39
|
+
async sendWs(channel, data) {
|
|
40
|
+
if (!this.ws) {
|
|
41
|
+
throw new Error(`WebSocket client not initialized for plugin '${this.pluginId}'`);
|
|
42
|
+
}
|
|
43
|
+
return (await this.ws.send(channel, data));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Subscribe to messages on a plugin channel via WebSocket.
|
|
47
|
+
*/
|
|
48
|
+
subscribeWs(channel, listener) {
|
|
49
|
+
if (!this.ws) {
|
|
50
|
+
throw new Error(`WebSocket client not initialized for plugin '${this.pluginId}'`);
|
|
51
|
+
}
|
|
52
|
+
return this.ws.subscribe(channel, listener);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function createPluginRpcClient(options) {
|
|
56
|
+
return new PluginRpcClient(options);
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=rpc.js.map
|
package/dist/rpc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../src/rpc.ts"],"names":[],"mappings":"AAQA;;GAEG;AACH,MAAM,OAAO,eAAe;IACV,QAAQ,CAAS;IACjB,OAAO,CAAS;IACxB,EAAE,CAAyB;IAEnC,YAAY,OAAyB;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CACX,IAAY,EACZ,OAAoB,EAAE;QAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QAC3D,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,mBAAmB,IAAI,CAAC,QAAQ,GAAG,SAAS,EAAE,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,IAAI;YACP,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;aACxB;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,CAAC,QAAQ,gBAAgB,SAAS,qBAAqB,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CACtG,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAC5D,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAiB,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAc,OAAe,EAAE,IAAa;QACtD,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,gDAAgD,IAAI,CAAC,QAAQ,GAAG,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAM,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,OAAe,EAAE,QAAiC;QAC5D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACb,gDAAgD,IAAI,CAAC,QAAQ,GAAG,CACjE,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAyB;IAC7D,OAAO,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "ALL";
|
|
|
8
8
|
export type PluginTarget = "server" | "client";
|
|
9
9
|
export type PluginCategory = "generic" | "metadata" | "storage" | "multiplayer";
|
|
10
10
|
export type ServerCapability = "routes" | "storage" | "websocket" | "events" | "network";
|
|
11
|
-
export type ClientCapability = "ui:slot" | "ui:play-action" | "ui:context-menu" | "ui:sidebar" | "ui:topbar" | "game:launch-hook" | "game:fs" | "game:scan" | "client:storage" | "client:ws" | "system:sidecar";
|
|
11
|
+
export type ClientCapability = "ui:slot" | "ui:play-action" | "ui:context-menu" | "ui:sidebar" | "ui:topbar" | "game:launch-hook" | "game:fs" | "game:scan" | "client:storage" | "client:ws" | "system:sidecar" | "system:command";
|
|
12
12
|
export type PluginCapability = ServerCapability | ClientCapability;
|
|
13
13
|
/**
|
|
14
14
|
* Trust tier. Only `"trusted"` is supported today: plugins run in-process with
|
|
@@ -66,6 +66,12 @@ export interface PluginManifest extends PluginMetadata {
|
|
|
66
66
|
slot: UISlotName;
|
|
67
67
|
component: string;
|
|
68
68
|
}>;
|
|
69
|
+
/**
|
|
70
|
+
* Bare executable names the client plugin may run via `ctx.system.run`
|
|
71
|
+
* (requires the `system:command` capability). The desktop host rejects any
|
|
72
|
+
* binary not listed here.
|
|
73
|
+
*/
|
|
74
|
+
commands?: string[];
|
|
69
75
|
};
|
|
70
76
|
}
|
|
71
77
|
export type PluginManifestV2 = PluginManifest;
|
|
@@ -248,6 +254,29 @@ export interface ClientPluginWebSocket {
|
|
|
248
254
|
send(channel: string, data: unknown): Promise<unknown>;
|
|
249
255
|
subscribe(channel: string, listener: (data: unknown) => void): () => void;
|
|
250
256
|
}
|
|
257
|
+
/** Result of a native command run through the client host. */
|
|
258
|
+
export interface CommandResult {
|
|
259
|
+
/** Process exit code. Non-zero indicates failure. */
|
|
260
|
+
code: number;
|
|
261
|
+
stdout: string;
|
|
262
|
+
stderr: string;
|
|
263
|
+
}
|
|
264
|
+
export interface CommandOptions {
|
|
265
|
+
/** Working directory for the process. */
|
|
266
|
+
cwd?: string;
|
|
267
|
+
/** Hard timeout in milliseconds; the host kills the process when exceeded. */
|
|
268
|
+
timeoutMs?: number;
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Native command execution for client plugins.
|
|
272
|
+
*
|
|
273
|
+
* The host runs the binary directly (no shell) and enforces a per-plugin
|
|
274
|
+
* allowlist declared in the manifest (`client.commands`). Binaries that are
|
|
275
|
+
* not allowlisted are rejected; shell metacharacters are never interpreted.
|
|
276
|
+
*/
|
|
277
|
+
export interface ClientPluginSystem {
|
|
278
|
+
run(bin: string, args?: string[], options?: CommandOptions): Promise<CommandResult>;
|
|
279
|
+
}
|
|
251
280
|
export interface ClientPluginContext {
|
|
252
281
|
id: string;
|
|
253
282
|
logger: PluginLogger;
|
|
@@ -265,6 +294,16 @@ export interface ClientPluginContext {
|
|
|
265
294
|
gameFs: ScopedGameFs;
|
|
266
295
|
gameScanner: ScopedGameScanner;
|
|
267
296
|
serverWs: ClientPluginWebSocket;
|
|
297
|
+
/** Native command execution. Requires the `system:command` capability. */
|
|
298
|
+
system: ClientPluginSystem;
|
|
299
|
+
/**
|
|
300
|
+
* Call this plugin's own server-side REST routes through the desktop host.
|
|
301
|
+
*
|
|
302
|
+
* The Tauri webview cannot reach the Drop server directly (TLS/auth), so the
|
|
303
|
+
* host proxies the request and returns the decoded JSON response. `path` is
|
|
304
|
+
* relative to `/api/v1/plugins/<pluginId>` (e.g. `"/rooms"`).
|
|
305
|
+
*/
|
|
306
|
+
serverRequest<T = unknown>(method: HttpMethod, path?: string, body?: unknown): Promise<T>;
|
|
268
307
|
}
|
|
269
308
|
export interface ClientPlugin {
|
|
270
309
|
metadata?: PluginMetadata;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AAE7E,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE/C,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,CAAC;AAEhF,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,CAAC;AAEd,MAAM,MAAM,gBAAgB,GACxB,SAAS,GACT,gBAAgB,GAChB,iBAAiB,GACjB,YAAY,GACZ,WAAW,GACX,kBAAkB,GAClB,SAAS,GACT,WAAW,GACX,gBAAgB,GAChB,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAElD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,YAAY,CAAC;AAE1E,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,gEAAgE;IAChE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,cAAc;IACpD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,EAAE,gBAAgB,EAAE,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,YAAY,EAAE,gBAAgB,EAAE,CAAC;QACjC,KAAK,CAAC,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,UAAU,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@droposs/plugin-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Drop Plugin SDK contract, types, and mock testing harness for Drop OSS",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -9,10 +9,12 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"types": "./dist/index.d.ts",
|
|
11
11
|
"import": "./dist/index.js"
|
|
12
|
-
}
|
|
12
|
+
},
|
|
13
|
+
"./schema.json": "./schema/drop-plugin.schema.json"
|
|
13
14
|
},
|
|
14
15
|
"files": [
|
|
15
|
-
"dist"
|
|
16
|
+
"dist",
|
|
17
|
+
"schema"
|
|
16
18
|
],
|
|
17
19
|
"publishConfig": {
|
|
18
20
|
"access": "public"
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://droposs.org/schemas/drop-plugin.schema.json",
|
|
4
|
+
"title": "DropPluginManifest",
|
|
5
|
+
"description": "Schema for drop-plugin.json plugin manifests in Drop OSS",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["id", "name", "version"],
|
|
8
|
+
"additionalProperties": true,
|
|
9
|
+
"properties": {
|
|
10
|
+
"id": {
|
|
11
|
+
"type": "string",
|
|
12
|
+
"pattern": "^[a-z0-9][a-z0-9._-]*$",
|
|
13
|
+
"minLength": 1,
|
|
14
|
+
"maxLength": 64,
|
|
15
|
+
"description": "Unique plugin identifier containing only lowercase letters, digits, dots, underscores, or hyphens"
|
|
16
|
+
},
|
|
17
|
+
"name": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"minLength": 1,
|
|
20
|
+
"description": "Human-readable display name of the plugin"
|
|
21
|
+
},
|
|
22
|
+
"version": {
|
|
23
|
+
"type": "string",
|
|
24
|
+
"pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+",
|
|
25
|
+
"description": "Semver-compliant version string (e.g. 1.0.0)"
|
|
26
|
+
},
|
|
27
|
+
"description": {
|
|
28
|
+
"type": "string",
|
|
29
|
+
"description": "Summary of plugin features and purpose"
|
|
30
|
+
},
|
|
31
|
+
"author": {
|
|
32
|
+
"type": "string",
|
|
33
|
+
"description": "Author name or organization"
|
|
34
|
+
},
|
|
35
|
+
"homepage": {
|
|
36
|
+
"type": "string",
|
|
37
|
+
"description": "URL to plugin homepage, repository, or documentation"
|
|
38
|
+
},
|
|
39
|
+
"license": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"description": "SPDX license identifier (e.g. MIT, Apache-2.0)"
|
|
42
|
+
},
|
|
43
|
+
"builtin": {
|
|
44
|
+
"type": "boolean",
|
|
45
|
+
"default": false,
|
|
46
|
+
"description": "Whether the plugin is built into Drop core"
|
|
47
|
+
},
|
|
48
|
+
"apiVersion": {
|
|
49
|
+
"type": "integer",
|
|
50
|
+
"enum": [1, 2],
|
|
51
|
+
"default": 2,
|
|
52
|
+
"description": "Target Drop Plugin API version"
|
|
53
|
+
},
|
|
54
|
+
"trust": {
|
|
55
|
+
"type": "string",
|
|
56
|
+
"enum": ["trusted", "sandboxed"],
|
|
57
|
+
"default": "trusted",
|
|
58
|
+
"description": "Trust tier. Only 'trusted' is executed today"
|
|
59
|
+
},
|
|
60
|
+
"storageVersion": {
|
|
61
|
+
"type": "integer",
|
|
62
|
+
"minimum": 0,
|
|
63
|
+
"description": "Declared storage schema version for migrations"
|
|
64
|
+
},
|
|
65
|
+
"category": {
|
|
66
|
+
"type": "string",
|
|
67
|
+
"enum": ["generic", "metadata", "storage", "multiplayer"],
|
|
68
|
+
"default": "generic",
|
|
69
|
+
"description": "Functional category of the plugin"
|
|
70
|
+
},
|
|
71
|
+
"targets": {
|
|
72
|
+
"type": "array",
|
|
73
|
+
"items": {
|
|
74
|
+
"type": "string",
|
|
75
|
+
"enum": ["server", "client"]
|
|
76
|
+
},
|
|
77
|
+
"uniqueItems": true,
|
|
78
|
+
"description": "Execution targets supported by this plugin"
|
|
79
|
+
},
|
|
80
|
+
"capabilities": {
|
|
81
|
+
"type": "array",
|
|
82
|
+
"items": {
|
|
83
|
+
"type": "string",
|
|
84
|
+
"enum": [
|
|
85
|
+
"routes",
|
|
86
|
+
"storage",
|
|
87
|
+
"websocket",
|
|
88
|
+
"events",
|
|
89
|
+
"network",
|
|
90
|
+
"ui:slot",
|
|
91
|
+
"ui:play-action",
|
|
92
|
+
"ui:context-menu",
|
|
93
|
+
"ui:sidebar",
|
|
94
|
+
"ui:topbar",
|
|
95
|
+
"game:launch-hook",
|
|
96
|
+
"game:fs",
|
|
97
|
+
"game:scan",
|
|
98
|
+
"client:storage",
|
|
99
|
+
"client:ws",
|
|
100
|
+
"system:sidecar",
|
|
101
|
+
"system:command"
|
|
102
|
+
]
|
|
103
|
+
},
|
|
104
|
+
"uniqueItems": true,
|
|
105
|
+
"description": "Permissions required by the plugin"
|
|
106
|
+
},
|
|
107
|
+
"enabled": {
|
|
108
|
+
"type": "boolean",
|
|
109
|
+
"default": true,
|
|
110
|
+
"description": "Default enabled status upon installation"
|
|
111
|
+
},
|
|
112
|
+
"entry": {
|
|
113
|
+
"type": "string",
|
|
114
|
+
"description": "Relative path to the primary JavaScript entry point"
|
|
115
|
+
},
|
|
116
|
+
"clientEntry": {
|
|
117
|
+
"type": "string",
|
|
118
|
+
"description": "Relative path to the client JavaScript entry point (optional alias for client.entry)"
|
|
119
|
+
},
|
|
120
|
+
"checksum": {
|
|
121
|
+
"type": "string",
|
|
122
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
123
|
+
"description": "Hex SHA-256 digest of the primary entry point file"
|
|
124
|
+
},
|
|
125
|
+
"files": {
|
|
126
|
+
"type": "object",
|
|
127
|
+
"additionalProperties": {
|
|
128
|
+
"type": "string",
|
|
129
|
+
"pattern": "^[0-9a-f]{64}$"
|
|
130
|
+
},
|
|
131
|
+
"description": "Mapping of relative bundle file paths to their hex SHA-256 digests"
|
|
132
|
+
},
|
|
133
|
+
"signature": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"pattern": "^[0-9a-f]{64}$",
|
|
136
|
+
"description": "Hex HMAC-SHA256 signature covering the aggregate bundle digest"
|
|
137
|
+
},
|
|
138
|
+
"server": {
|
|
139
|
+
"type": "object",
|
|
140
|
+
"required": ["entry"],
|
|
141
|
+
"properties": {
|
|
142
|
+
"entry": {
|
|
143
|
+
"type": "string",
|
|
144
|
+
"description": "Relative path to server entry point"
|
|
145
|
+
},
|
|
146
|
+
"capabilities": {
|
|
147
|
+
"type": "array",
|
|
148
|
+
"items": {
|
|
149
|
+
"type": "string",
|
|
150
|
+
"enum": ["routes", "storage", "websocket", "events", "network"]
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
"storageVersion": {
|
|
154
|
+
"type": "integer",
|
|
155
|
+
"minimum": 0
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
},
|
|
159
|
+
"client": {
|
|
160
|
+
"type": "object",
|
|
161
|
+
"required": ["entry"],
|
|
162
|
+
"properties": {
|
|
163
|
+
"entry": {
|
|
164
|
+
"type": "string",
|
|
165
|
+
"description": "Relative path to client entry point"
|
|
166
|
+
},
|
|
167
|
+
"css": {
|
|
168
|
+
"type": "string",
|
|
169
|
+
"description": "Optional stylesheet associated with the client entry"
|
|
170
|
+
},
|
|
171
|
+
"capabilities": {
|
|
172
|
+
"type": "array",
|
|
173
|
+
"items": {
|
|
174
|
+
"type": "string",
|
|
175
|
+
"enum": [
|
|
176
|
+
"ui:slot",
|
|
177
|
+
"ui:play-action",
|
|
178
|
+
"ui:context-menu",
|
|
179
|
+
"ui:sidebar",
|
|
180
|
+
"ui:topbar",
|
|
181
|
+
"game:launch-hook",
|
|
182
|
+
"game:fs",
|
|
183
|
+
"game:scan",
|
|
184
|
+
"client:storage",
|
|
185
|
+
"client:ws",
|
|
186
|
+
"system:sidecar",
|
|
187
|
+
"system:command"
|
|
188
|
+
]
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
"commands": {
|
|
192
|
+
"type": "array",
|
|
193
|
+
"items": {
|
|
194
|
+
"type": "string"
|
|
195
|
+
},
|
|
196
|
+
"uniqueItems": true,
|
|
197
|
+
"description": "Allowlisted binaries the client plugin may run via ctx.system.run (requires system:command)"
|
|
198
|
+
},
|
|
199
|
+
"slots": {
|
|
200
|
+
"type": "array",
|
|
201
|
+
"items": {
|
|
202
|
+
"type": "object",
|
|
203
|
+
"required": ["slot", "component"],
|
|
204
|
+
"properties": {
|
|
205
|
+
"slot": {
|
|
206
|
+
"type": "string",
|
|
207
|
+
"enum": [
|
|
208
|
+
"game-detail:actions",
|
|
209
|
+
"game-detail:panels",
|
|
210
|
+
"game-detail:badges",
|
|
211
|
+
"settings:tabs",
|
|
212
|
+
"topbar:status",
|
|
213
|
+
"sidebar:nav"
|
|
214
|
+
]
|
|
215
|
+
},
|
|
216
|
+
"component": {
|
|
217
|
+
"type": "string"
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|