@producible/cereworker-browser 26.520.1

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.
Files changed (46) hide show
  1. package/LICENSE +21 -0
  2. package/dist/backend.d.ts +28 -0
  3. package/dist/backend.d.ts.map +1 -0
  4. package/dist/backend.js +2 -0
  5. package/dist/backend.js.map +1 -0
  6. package/dist/cdp.d.ts +29 -0
  7. package/dist/cdp.d.ts.map +1 -0
  8. package/dist/cdp.js +180 -0
  9. package/dist/cdp.js.map +1 -0
  10. package/dist/extension-backend.d.ts +23 -0
  11. package/dist/extension-backend.d.ts.map +1 -0
  12. package/dist/extension-backend.js +60 -0
  13. package/dist/extension-backend.js.map +1 -0
  14. package/dist/index.d.ts +7 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +6 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/puppeteer.d.ts +31 -0
  19. package/dist/puppeteer.d.ts.map +1 -0
  20. package/dist/puppeteer.js +182 -0
  21. package/dist/puppeteer.js.map +1 -0
  22. package/dist/relay.d.ts +32 -0
  23. package/dist/relay.d.ts.map +1 -0
  24. package/dist/relay.js +171 -0
  25. package/dist/relay.js.map +1 -0
  26. package/dist/relay.test.d.ts +2 -0
  27. package/dist/relay.test.d.ts.map +1 -0
  28. package/dist/relay.test.js +37 -0
  29. package/dist/relay.test.js.map +1 -0
  30. package/dist/tools.d.ts +179 -0
  31. package/dist/tools.d.ts.map +1 -0
  32. package/dist/tools.js +514 -0
  33. package/dist/tools.js.map +1 -0
  34. package/dist/tools.test.d.ts +2 -0
  35. package/dist/tools.test.d.ts.map +1 -0
  36. package/dist/tools.test.js +92 -0
  37. package/dist/tools.test.js.map +1 -0
  38. package/extension/background.js +444 -0
  39. package/extension/icons/icon128.png +0 -0
  40. package/extension/icons/icon16.png +0 -0
  41. package/extension/icons/icon32.png +0 -0
  42. package/extension/icons/icon48.png +0 -0
  43. package/extension/manifest.json +38 -0
  44. package/extension/options.html +34 -0
  45. package/extension/options.js +53 -0
  46. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"puppeteer.js","sourceRoot":"","sources":["../src/puppeteer.ts"],"names":[],"mappings":"AAAA,OAAO,SAAsC,MAAM,WAAW,CAAC;AAQ/D,MAAM,OAAO,gBAAgB;IACnB,OAAO,GAA0B,IAAI,CAAC;IACtC,QAAQ,CAAU;IAE1B,YAAY,OAAgC;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC;QACtC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC;gBACrC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;gBACzC,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC;aACnD,CAAC,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,IAAI,KAAK,CACb,yBAAyB,GAAG,KAAK;gBACjC,oFAAoF,CACrF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,QAAgC;QAC1D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,aAAa,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgC;QAChD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClE,MAAM,MAAM,GAAG,KAAK,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,IAAI,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAa,EAAE,QAAgC;QAC9D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,QAAQ,GAAG,IAAI,IAAI,8BAA8B,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;QACxE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7D,OAAO,uBAAuB,QAAQ,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,QAAgC;QAC5D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7B,OAAO,YAAY,QAAQ,EAAE,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,sBAAsB,QAAQ,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,IAAY,EAAE,IAAa,EAAE,QAAgC;QAC7E,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,4BAA4B,CAAC;YAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAW,EAAE,GAAW,EAAE,EAAE;gBACjE,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;wBAAE,EAAkB,CAAC,KAAK,EAAE,CAAC;wBAAC,OAAO,IAAI,CAAC;oBAAC,CAAC;gBACnF,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACnB,OAAO,OAAO,CAAC,CAAC,CAAC,+BAA+B,IAAI,GAAG,CAAC,CAAC,CAAC,0CAA0C,IAAI,GAAG,CAAC;QAC9G,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,0CAA0C,IAAI,GAAG,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,IAAY,EAAE,QAAgC;QACzE,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;YAClC,OAAO,eAAe,QAAQ,EAAE,CAAC;QACnC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,sBAAsB,QAAQ,EAAE,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,QAAgC;QAC3D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC3C,OAAO,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,QAAgB,EAAE,SAAS,GAAG,IAAI,EAAE,QAAgC;QACxF,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC/D,OAAO,UAAU,QAAQ,EAAE,CAAC;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,wBAAwB,QAAQ,EAAE,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,QAAgC;QAC/C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,QAAgC;QAC7C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAC1B,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;YACb,KAAK,EAAE,EAAE,EAAG,qCAAqC;YACjD,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE;YACZ,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI;SACrB,CAAC,CAAC,CAAC;IACN,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAa,EAAE,QAAgC;QAC7D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjD,OAAO,mBAAmB,KAAK,8CAA8C,CAAC;QAChF,CAAC;QACD,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QAC5B,OAAO,mBAAmB,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,GAAY,EAAE,QAAgC;QACzD,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;QACrD,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;QACtE,CAAC;QACD,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC;QACd,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,mBAAmB,KAAK,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACjF,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,KAAc,EAAE,QAAgC;QAC7D,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,4BAA4B,CAAC;QAE3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;gBACjD,OAAO,mBAAmB,KAAK,EAAE,CAAC;YACpC,CAAC;YACD,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;gBAC1C,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;YACnB,CAAC;YACD,OAAO,cAAc,GAAG,EAAE,CAAC;QAC7B,CAAC;QAED,oBAAoB;QACpB,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;QACvB,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC1C,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;QACjB,OAAO,+BAA+B,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgC;QAC5C,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,OAAO,+BAA+B,IAAI,CAAC,QAAQ,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;IACjE,CAAC;CACF"}
@@ -0,0 +1,32 @@
1
+ import { EventEmitter } from 'node:events';
2
+ export interface RelayCommand {
3
+ type: 'command';
4
+ id: string;
5
+ method: string;
6
+ params?: Record<string, unknown>;
7
+ }
8
+ export interface RelayResult {
9
+ type: 'result';
10
+ id: string;
11
+ result?: string;
12
+ error?: string;
13
+ }
14
+ export interface RelayConfig {
15
+ port: number;
16
+ token?: string;
17
+ }
18
+ export declare class BrowserRelay extends EventEmitter {
19
+ private httpServer;
20
+ private wss;
21
+ private extensionWs;
22
+ private pending;
23
+ private commandId;
24
+ private config;
25
+ private pingTimer;
26
+ constructor(config: RelayConfig);
27
+ start(): Promise<void>;
28
+ stop(): Promise<void>;
29
+ isExtensionConnected(): boolean;
30
+ send(method: string, params?: Record<string, unknown>, timeoutMs?: number, abortSignal?: AbortSignal): Promise<string>;
31
+ }
32
+ //# sourceMappingURL=relay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAQD,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,SAAS,CAA+C;gBAEpD,MAAM,EAAE,WAAW;IAKzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyFtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB3B,oBAAoB,IAAI,OAAO;IAIzB,IAAI,CACR,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,SAAS,SAAS,EAClB,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,MAAM,CAAC;CAiDnB"}
package/dist/relay.js ADDED
@@ -0,0 +1,171 @@
1
+ import { WebSocketServer, WebSocket } from 'ws';
2
+ import { createServer } from 'node:http';
3
+ import { createLogger } from '@producible/cereworker-core';
4
+ import { EventEmitter } from 'node:events';
5
+ const log = createLogger('browser-relay');
6
+ export class BrowserRelay extends EventEmitter {
7
+ httpServer = null;
8
+ wss = null;
9
+ extensionWs = null;
10
+ pending = new Map();
11
+ commandId = 0;
12
+ config;
13
+ pingTimer = null;
14
+ constructor(config) {
15
+ super();
16
+ this.config = config;
17
+ }
18
+ async start() {
19
+ this.httpServer = createServer((_req, res) => {
20
+ res.writeHead(200, { 'Content-Type': 'application/json' });
21
+ res.end(JSON.stringify({ connected: this.isExtensionConnected() }));
22
+ });
23
+ this.wss = new WebSocketServer({ server: this.httpServer });
24
+ this.wss.on('connection', (ws, req) => {
25
+ const url = new URL(req.url ?? '/', `http://localhost:${this.config.port}`);
26
+ // Validate path
27
+ if (url.pathname !== '/extension') {
28
+ ws.close(4001, 'Invalid path');
29
+ return;
30
+ }
31
+ // Validate token
32
+ if (this.config.token) {
33
+ const token = url.searchParams.get('token');
34
+ if (token !== this.config.token) {
35
+ ws.close(4003, 'Invalid token');
36
+ return;
37
+ }
38
+ }
39
+ // Only allow one extension connection
40
+ if (this.extensionWs) {
41
+ this.extensionWs.close(4002, 'Replaced by new connection');
42
+ }
43
+ this.extensionWs = ws;
44
+ log.info('Extension connected');
45
+ this.emit('extension:connected');
46
+ ws.on('message', (data) => {
47
+ try {
48
+ const msg = JSON.parse(data.toString());
49
+ if (msg.type === 'result' && msg.id) {
50
+ const pending = this.pending.get(msg.id);
51
+ if (pending) {
52
+ this.pending.delete(msg.id);
53
+ clearTimeout(pending.timer);
54
+ if (msg.error) {
55
+ pending.reject(new Error(msg.error));
56
+ }
57
+ else {
58
+ pending.resolve(msg.result ?? '');
59
+ }
60
+ }
61
+ }
62
+ }
63
+ catch {
64
+ log.debug('Invalid message from extension');
65
+ }
66
+ });
67
+ ws.on('close', () => {
68
+ if (this.extensionWs === ws) {
69
+ this.extensionWs = null;
70
+ log.info('Extension disconnected');
71
+ this.emit('extension:disconnected');
72
+ // Reject all pending commands
73
+ for (const [id, pending] of this.pending) {
74
+ clearTimeout(pending.timer);
75
+ pending.reject(new Error('Extension disconnected'));
76
+ this.pending.delete(id);
77
+ }
78
+ }
79
+ });
80
+ ws.on('error', (err) => {
81
+ log.debug('Extension WebSocket error', { error: err.message });
82
+ });
83
+ });
84
+ // Keepalive ping every 30s
85
+ this.pingTimer = setInterval(() => {
86
+ if (this.extensionWs?.readyState === WebSocket.OPEN) {
87
+ this.extensionWs.ping();
88
+ }
89
+ }, 30_000);
90
+ await new Promise((resolve) => {
91
+ this.httpServer.listen(this.config.port, '127.0.0.1', () => {
92
+ log.info('Relay server listening', { port: this.config.port });
93
+ resolve();
94
+ });
95
+ });
96
+ }
97
+ async stop() {
98
+ if (this.pingTimer) {
99
+ clearInterval(this.pingTimer);
100
+ this.pingTimer = null;
101
+ }
102
+ if (this.extensionWs) {
103
+ this.extensionWs.close();
104
+ this.extensionWs = null;
105
+ }
106
+ for (const [id, pending] of this.pending) {
107
+ clearTimeout(pending.timer);
108
+ pending.reject(new Error('Relay stopped'));
109
+ this.pending.delete(id);
110
+ }
111
+ if (this.wss) {
112
+ this.wss.close();
113
+ this.wss = null;
114
+ }
115
+ if (this.httpServer) {
116
+ await new Promise((resolve) => this.httpServer.close(() => resolve()));
117
+ this.httpServer = null;
118
+ }
119
+ }
120
+ isExtensionConnected() {
121
+ return this.extensionWs?.readyState === WebSocket.OPEN;
122
+ }
123
+ async send(method, params, timeoutMs = 30_000, abortSignal) {
124
+ if (!this.extensionWs || this.extensionWs.readyState !== WebSocket.OPEN) {
125
+ throw new Error('Extension not connected. Load the CereWorker extension in Chrome and check the connection.');
126
+ }
127
+ const id = String(++this.commandId);
128
+ const command = { type: 'command', id, method, params };
129
+ return new Promise((resolve, reject) => {
130
+ const onAbort = () => {
131
+ cleanup();
132
+ this.pending.delete(id);
133
+ reject(createAbortError(`Command ${method} aborted`));
134
+ };
135
+ const cleanup = () => {
136
+ clearTimeout(timer);
137
+ abortSignal?.removeEventListener('abort', onAbort);
138
+ };
139
+ const timer = setTimeout(() => {
140
+ cleanup();
141
+ this.pending.delete(id);
142
+ reject(new Error(`Command ${method} timed out after ${timeoutMs}ms`));
143
+ }, timeoutMs);
144
+ if (abortSignal?.aborted) {
145
+ onAbort();
146
+ return;
147
+ }
148
+ if (abortSignal) {
149
+ abortSignal.addEventListener('abort', onAbort, { once: true });
150
+ }
151
+ this.pending.set(id, {
152
+ resolve: (result) => {
153
+ cleanup();
154
+ resolve(result);
155
+ },
156
+ reject: (error) => {
157
+ cleanup();
158
+ reject(error);
159
+ },
160
+ timer,
161
+ });
162
+ this.extensionWs.send(JSON.stringify(command));
163
+ });
164
+ }
165
+ }
166
+ function createAbortError(message) {
167
+ const error = new Error(message);
168
+ error.name = 'AbortError';
169
+ return error;
170
+ }
171
+ //# sourceMappingURL=relay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=relay.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.test.d.ts","sourceRoot":"","sources":["../src/relay.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ import { afterEach, describe, expect, it } from 'vitest';
2
+ import { WebSocket } from 'ws';
3
+ import { BrowserRelay } from './relay.js';
4
+ describe('BrowserRelay', () => {
5
+ let relay = null;
6
+ let extensionSocket = null;
7
+ afterEach(async () => {
8
+ if (extensionSocket) {
9
+ extensionSocket.close();
10
+ extensionSocket = null;
11
+ }
12
+ if (relay) {
13
+ await relay.stop();
14
+ relay = null;
15
+ }
16
+ });
17
+ it('rejects pending commands immediately when aborted and clears the pending entry', async () => {
18
+ relay = new BrowserRelay({ port: 0 });
19
+ await relay.start();
20
+ const port = (relay.httpServer.address()).port;
21
+ extensionSocket = await new Promise((resolve, reject) => {
22
+ const socket = new WebSocket(`ws://127.0.0.1:${port}/extension`);
23
+ socket.once('open', () => resolve(socket));
24
+ socket.once('error', reject);
25
+ });
26
+ const abortController = new AbortController();
27
+ const sendPromise = relay.send('navigate', { url: 'https://example.com' }, 30_000, abortController.signal);
28
+ expect(relay.pending.size).toBe(1);
29
+ abortController.abort();
30
+ await expect(sendPromise).rejects.toMatchObject({
31
+ name: 'AbortError',
32
+ message: 'Command navigate aborted',
33
+ });
34
+ expect(relay.pending.size).toBe(0);
35
+ });
36
+ });
37
+ //# sourceMappingURL=relay.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relay.test.js","sourceRoot":"","sources":["../src/relay.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAE/B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,KAAK,GAAwB,IAAI,CAAC;IACtC,IAAI,eAAe,GAAqB,IAAI,CAAC;IAE7C,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,IAAI,eAAe,EAAE,CAAC;YACpB,eAAe,CAAC,KAAK,EAAE,CAAC;YACxB,eAAe,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC9F,KAAK,GAAG,IAAI,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACtC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC;QAEpB,MAAM,IAAI,GAAI,CAAE,KAAsE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAiB,CAAC,IAAI,CAAC;QAClI,eAAe,GAAG,MAAM,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACjE,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,kBAAkB,IAAI,YAAY,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;QAC9C,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,EAAE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAE3G,MAAM,CAAE,KAAsD,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAErF,eAAe,CAAC,KAAK,EAAE,CAAC;QAExB,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;YAC9C,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,0BAA0B;SACpC,CAAC,CAAC;QACH,MAAM,CAAE,KAAsD,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,179 @@
1
+ import type { ToolExecutionValue } from '@producible/cereworker-core';
2
+ import { z } from 'zod';
3
+ import type { BrowserBackend } from './backend.js';
4
+ type ToolContext = {
5
+ abortSignal?: AbortSignal;
6
+ };
7
+ export declare function createBrowserTools(backend: BrowserBackend): {
8
+ browserNavigate: {
9
+ description: string;
10
+ parameters: z.ZodObject<{
11
+ url: z.ZodString;
12
+ }, "strip", z.ZodTypeAny, {
13
+ url: string;
14
+ }, {
15
+ url: string;
16
+ }>;
17
+ execute: (args: {
18
+ url: string;
19
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
20
+ };
21
+ browserGetText: {
22
+ description: string;
23
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
24
+ execute: (args: Record<string, never>, context?: ToolContext) => Promise<ToolExecutionValue>;
25
+ };
26
+ browserScreenshot: {
27
+ description: string;
28
+ parameters: z.ZodObject<{
29
+ path: z.ZodOptional<z.ZodString>;
30
+ }, "strip", z.ZodTypeAny, {
31
+ path?: string | undefined;
32
+ }, {
33
+ path?: string | undefined;
34
+ }>;
35
+ execute: (args: {
36
+ path?: string;
37
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
38
+ };
39
+ browserClick: {
40
+ description: string;
41
+ parameters: z.ZodObject<{
42
+ selector: z.ZodString;
43
+ }, "strip", z.ZodTypeAny, {
44
+ selector: string;
45
+ }, {
46
+ selector: string;
47
+ }>;
48
+ execute: (args: {
49
+ selector: string;
50
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
51
+ };
52
+ browserClickByText: {
53
+ description: string;
54
+ parameters: z.ZodObject<{
55
+ text: z.ZodString;
56
+ role: z.ZodOptional<z.ZodString>;
57
+ }, "strip", z.ZodTypeAny, {
58
+ text: string;
59
+ role?: string | undefined;
60
+ }, {
61
+ text: string;
62
+ role?: string | undefined;
63
+ }>;
64
+ execute: (args: {
65
+ text: string;
66
+ role?: string;
67
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
68
+ };
69
+ browserType: {
70
+ description: string;
71
+ parameters: z.ZodObject<{
72
+ selector: z.ZodString;
73
+ text: z.ZodString;
74
+ }, "strip", z.ZodTypeAny, {
75
+ text: string;
76
+ selector: string;
77
+ }, {
78
+ text: string;
79
+ selector: string;
80
+ }>;
81
+ execute: (args: {
82
+ selector: string;
83
+ text: string;
84
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
85
+ };
86
+ browserEval: {
87
+ description: string;
88
+ parameters: z.ZodObject<{
89
+ code: z.ZodString;
90
+ }, "strip", z.ZodTypeAny, {
91
+ code: string;
92
+ }, {
93
+ code: string;
94
+ }>;
95
+ execute: (args: {
96
+ code: string;
97
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
98
+ };
99
+ browserWait: {
100
+ description: string;
101
+ parameters: z.ZodObject<{
102
+ selector: z.ZodString;
103
+ timeout: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
104
+ }, "strip", z.ZodTypeAny, {
105
+ timeout: number;
106
+ selector: string;
107
+ }, {
108
+ selector: string;
109
+ timeout?: number | undefined;
110
+ }>;
111
+ execute: (args: {
112
+ selector: string;
113
+ timeout?: number;
114
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
115
+ };
116
+ browserGetUrl: {
117
+ description: string;
118
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
119
+ execute: (args: Record<string, never>, context?: ToolContext) => Promise<ToolExecutionValue>;
120
+ };
121
+ browserListTabs: {
122
+ description: string;
123
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
124
+ execute: (_args: Record<string, never>, context?: ToolContext) => Promise<ToolExecutionValue>;
125
+ };
126
+ browserSwitchTab: {
127
+ description: string;
128
+ parameters: z.ZodObject<{
129
+ tabId: z.ZodString;
130
+ }, "strip", z.ZodTypeAny, {
131
+ tabId: string;
132
+ }, {
133
+ tabId: string;
134
+ }>;
135
+ execute: (args: {
136
+ tabId: string;
137
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
138
+ };
139
+ browserNewTab: {
140
+ description: string;
141
+ parameters: z.ZodObject<{
142
+ url: z.ZodOptional<z.ZodString>;
143
+ }, "strip", z.ZodTypeAny, {
144
+ url?: string | undefined;
145
+ }, {
146
+ url?: string | undefined;
147
+ }>;
148
+ execute: (args: {
149
+ url?: string;
150
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
151
+ };
152
+ browserCloseTab: {
153
+ description: string;
154
+ parameters: z.ZodObject<{
155
+ tabId: z.ZodOptional<z.ZodString>;
156
+ }, "strip", z.ZodTypeAny, {
157
+ tabId?: string | undefined;
158
+ }, {
159
+ tabId?: string | undefined;
160
+ }>;
161
+ execute: (args: {
162
+ tabId?: string;
163
+ }, context?: ToolContext) => Promise<ToolExecutionValue>;
164
+ };
165
+ browserConnect: {
166
+ description: string;
167
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
168
+ execute: (args: Record<string, never>, context?: ToolContext) => Promise<ToolExecutionValue>;
169
+ };
170
+ browserDisconnect: {
171
+ description: string;
172
+ parameters: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
173
+ execute: (args: unknown, context?: ToolContext) => Promise<ToolExecutionValue>;
174
+ };
175
+ };
176
+ export type BrowserTools = ReturnType<typeof createBrowserTools>;
177
+ export type BrowserToolName = keyof BrowserTools;
178
+ export {};
179
+ //# sourceMappingURL=tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAW,MAAM,cAAc,CAAC;AAE5D,KAAK,WAAW,GAAG;IAAE,WAAW,CAAC,EAAE,WAAW,CAAA;CAAE,CAAC;AAuLjD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;iBAQpC,MAAM;qBAnKL,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;yDAA3C,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;mBAsNpC,MAAM;qBAtNb,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;sBA6OjC,MAAM;qBA7OhB,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;kBA+QrC,MAAM;mBAAS,MAAM;qBA/Q3B,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;sBAgTjC,MAAM;kBAAQ,MAAM;qBAhT9B,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;kBAgVrC,MAAM;qBAhVZ,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;;;;sBAiXjC,MAAM;sBAAY,MAAM;qBAjXlC,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;yDAA3C,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;yBA6ZrC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,YAAY,WAAW;;;;;;;;;;;;mBA6C3C,MAAM;qBA1cb,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;kBA2erC,MAAM;qBA3eZ,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;;;;;;;;oBA0gBnC,MAAM;qBA1gBd,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;yDAA3C,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;;;;2CAA3C,WAAW,KAAK,OAAO,CAAC,kBAAkB,CAAC;;EAmlBjE;AAED,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC;AACjE,MAAM,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC"}