yeow-api 0.2.7 → 0.2.8

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "yeow-api",
3
- "version": "0.2.7",
4
- "description": "Yeow API �?TypeScript OOP wrappers over the task protocol",
3
+ "version": "0.2.8",
4
+ "description": "Yeow API �?TypeScript OOP wrappers over the task protocol",
5
5
  "type": "module",
6
6
  "main": "./src/index.ts",
7
7
  "types": "./src/index.ts",
@@ -9,5 +9,4 @@
9
9
  "src/"
10
10
  ],
11
11
  "license": "MIT"
12
- }
13
-
12
+ }
package/src/fs.ts CHANGED
@@ -1,33 +1,52 @@
1
- import { call } from './task.js';
1
+ function _sendFs(payload) {
2
+ const raw = $send('fs', JSON.stringify(payload));
3
+ if (!raw) return undefined;
4
+ const r = JSON.parse(raw);
5
+ if (r.err) throw new Error(r.err);
6
+ return r;
7
+ }
8
+
9
+ export function readFile(path) {
10
+ return new Promise((resolve, reject) => {
11
+ try { const r = _sendFs({ t: 'readFile', p: { path } }); resolve(r.data); } catch(e) { reject(e); }
12
+ });
13
+ }
2
14
 
3
- /**
4
- * Async file system operations. Paths are resolved relative to the server root.
5
- * All sync variants have the `Sync` suffix.
6
- */
15
+ export function readFileSync(path) {
16
+ return _sendFs({ t: 'readFile', p: { path } }).data;
17
+ }
18
+
19
+ export function writeFile(path, data) {
20
+ return new Promise((resolve, reject) => {
21
+ try { _sendFs({ t: 'writeFile', p: { path, data } }); resolve(); } catch(e) { reject(e); }
22
+ });
23
+ }
7
24
 
8
- export function readFile(path: string): Promise<string> {
9
- return call('fs.readFile', { path }) as Promise<string>;
25
+ export function writeFileSync(path, data) {
26
+ _sendFs({ t: 'writeFile', p: { path, data } });
10
27
  }
11
28
 
12
- export function readFileSync(path: string): string {
13
- return call('fs.readFile', { path }) as string;
29
+ export function existsSync(path) {
30
+ const r = _sendFs({ t: 'exists', p: { path } });
31
+ return r === true || String(r) === 'true';
14
32
  }
15
33
 
16
- export function writeFile(path: string, data: string): Promise<void> {
17
- return call('fs.writeFile', { path, data }) as Promise<void>;
34
+ export function deleteFile(path) {
35
+ return new Promise((resolve, reject) => {
36
+ try { const r = _sendFs({ t: 'delete', p: { path } }); resolve(r === true || String(r) === 'true'); } catch(e) { reject(e); }
37
+ });
18
38
  }
19
39
 
20
- export function writeFileSync(path: string, data: string): void {
21
- call('fs.writeFile', { path, data });
40
+ export function mkdir(path) {
41
+ return new Promise((resolve, reject) => {
42
+ try { _sendFs({ t: 'mkdir', p: { path } }); resolve(); } catch(e) { reject(e); }
43
+ });
22
44
  }
23
45
 
24
- export function existsSync(path: string): boolean {
25
- return call('fs.exists', { path }) as boolean;
46
+ export function list(path) {
47
+ return new Promise((resolve, reject) => {
48
+ try { const r = _sendFs({ t: 'list', p: { path } }); resolve(r); } catch(e) { reject(e); }
49
+ });
26
50
  }
27
51
 
28
- export const fs = {
29
- readFile, readFileSync,
30
- writeFile, writeFileSync,
31
- existsSync,
32
- // ... more to come
33
- };
52
+ export const fs = { readFile, readFileSync, writeFile, writeFileSync, existsSync, deleteFile, mkdir, list };
package/src/http.ts CHANGED
@@ -1,69 +1,63 @@
1
- import { call, post } from './task.js';
2
-
3
- const _servers: Set<string> = new Set();
1
+ const _servers = new Set();
2
+
3
+ function _sendHttp(payload) {
4
+ const raw = $send('http', JSON.stringify(payload));
5
+ if (!raw) return undefined;
6
+ const r = JSON.parse(raw);
7
+ if (r.err) throw new Error(r.err);
8
+ return r;
9
+ }
4
10
 
5
- /**
6
- * Start an HTTP server on a random available port.
7
- * The callback receives: { connId, serverId, method, path, query, headers, body }
8
- * Response is sent via http.respond(task: { serverId, connId, status?, headers?, body? })
9
- */
10
- export function listen(
11
- callback: (req: HttpRequest) => void,
12
- port?: number
13
- ): Promise<{ serverId: string; port: number }> {
11
+ export function listen(callback, port) {
14
12
  return new Promise((resolve, reject) => {
15
- const cbId = (globalThis as any)._registerCallback((payload: HttpRequest) => {
13
+ const cbId = _registerCallback((payload) => {
16
14
  callback(payload);
17
15
  }, { persistent: true });
18
16
 
19
- const result = call('http.listen', {
20
- pluginName: (globalThis as any).__plugin?.name || 'unknown',
21
- callbackId: String(cbId),
22
- port: port || 0,
23
- }) as { serverId: string; port: number };
24
-
25
- _servers.add(result.serverId);
26
- resolve(result);
17
+ try {
18
+ const result = _sendHttp({ t: 'listen', p: {
19
+ pluginName: __plugin?.name || 'unknown',
20
+ callbackId: String(cbId),
21
+ port: port || 0,
22
+ }});
23
+ _servers.add(result.serverId);
24
+ resolve(result);
25
+ } catch(e) { reject(e); }
27
26
  });
28
27
  }
29
28
 
30
- /**
31
- * Send an HTTP response to a pending connection.
32
- */
33
- export function respond(serverId: string, connId: string, options: {
34
- status?: number; headers?: Record<string, string>; body?: string;
35
- }): Promise<void> {
36
- return call('http.respond', {
37
- serverId,
38
- connId,
39
- status: options.status || 200,
40
- headers: options.headers || {},
41
- body: options.body || '',
42
- }) as Promise<void>;
29
+ export function respond(serverId, connId, opts = {}) {
30
+ return new Promise((resolve, reject) => {
31
+ try {
32
+ _sendHttp({ t: 'respond', p: { serverId, connId, ...opts }});
33
+ resolve();
34
+ } catch(e) { reject(e); }
35
+ });
43
36
  }
44
37
 
45
- /**
46
- * Stop an HTTP server and release its port.
47
- */
48
- export function close(serverId: string): Promise<void> {
38
+ export function close(serverId) {
49
39
  _servers.delete(serverId);
50
- return call('http.close', { serverId }) as Promise<void>;
40
+ return new Promise((resolve, reject) => {
41
+ try { _sendHttp({ t: 'close', p: { serverId }}); resolve(); } catch(e) { reject(e); }
42
+ });
51
43
  }
52
44
 
53
- /** Auto-close all servers when the plugin is disabled. */
54
- (globalThis as any)._registerCallback(() => {
45
+ _registerCallback(() => {
55
46
  for (const id of _servers) {
56
- try { call('http.close', { serverId: id }); } catch {}
47
+ try { _sendHttp({ t: 'close', p: { serverId: id }}); } catch {}
57
48
  }
58
49
  _servers.clear();
59
50
  }, { persistent: true });
60
51
 
61
- export interface HttpRequest {
62
- connId: string;
63
- serverId: string;
64
- method: string;
65
- path: string;
66
- query: string;
67
- headers: Record<string, string>;
68
- body: string;
52
+ export function request(url, opts = {}) {
53
+ return new Promise((resolve, reject) => {
54
+ try {
55
+ const result = _sendHttp({ t: 'request', p: { url, ...opts }});
56
+ resolve(result);
57
+ } catch(e) { reject(e); }
58
+ });
59
+ }
60
+
61
+ export function requestSync(url, opts = {}) {
62
+ return _sendHttp({ t: 'request', p: { url, ...opts }});
69
63
  }
package/src/index.ts CHANGED
@@ -5,3 +5,5 @@ export { registerCommand } from './command.js';
5
5
  export type { CommandOptions, CommandPayload, CommandSender } from './command.js';
6
6
  export { eventOn, eventOff } from './event.js';
7
7
  export { broadcast, getMotd, getVersion } from './server.js';
8
+ export { fs, readFile, readFileSync, writeFile, writeFileSync, existsSync, deleteFile, mkdir, list } from './fs.js';
9
+ export { listen, respond, close, request, requestSync } from './http.js';