@elizaos/plugin-browser 2.0.0-alpha.9 → 2.0.11-beta.7

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 (256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +98 -83
  3. package/auto-enable.ts +24 -0
  4. package/dist/actions/browser-autofill-login.d.ts +43 -0
  5. package/dist/actions/browser-autofill-login.d.ts.map +1 -0
  6. package/dist/actions/browser-autofill-login.js +278 -0
  7. package/dist/actions/browser-autofill-login.js.map +1 -0
  8. package/dist/actions/browser.d.ts +11 -0
  9. package/dist/actions/browser.d.ts.map +1 -0
  10. package/dist/actions/browser.js +412 -0
  11. package/dist/actions/browser.js.map +1 -0
  12. package/dist/actions/manage-browser-bridge.d.ts +34 -0
  13. package/dist/actions/manage-browser-bridge.d.ts.map +1 -0
  14. package/dist/actions/manage-browser-bridge.js +572 -0
  15. package/dist/actions/manage-browser-bridge.js.map +1 -0
  16. package/dist/bridge-policy.d.ts +10 -0
  17. package/dist/bridge-policy.d.ts.map +1 -0
  18. package/dist/bridge-policy.js +37 -0
  19. package/dist/bridge-policy.js.map +1 -0
  20. package/dist/bridge-readiness.d.ts +16 -0
  21. package/dist/bridge-readiness.d.ts.map +1 -0
  22. package/dist/bridge-readiness.js +82 -0
  23. package/dist/bridge-readiness.js.map +1 -0
  24. package/dist/bridge-records.d.ts +9 -0
  25. package/dist/bridge-records.d.ts.map +1 -0
  26. package/dist/bridge-records.js +37 -0
  27. package/dist/bridge-records.js.map +1 -0
  28. package/dist/browser-capture-hooks.d.ts +9 -0
  29. package/dist/browser-capture-hooks.d.ts.map +1 -0
  30. package/dist/browser-capture-hooks.js +15 -0
  31. package/dist/browser-capture-hooks.js.map +1 -0
  32. package/dist/browser-service.d.ts +103 -0
  33. package/dist/browser-service.d.ts.map +1 -0
  34. package/dist/browser-service.js +186 -0
  35. package/dist/browser-service.js.map +1 -0
  36. package/dist/browser-workspace-hooks.d.ts +14 -0
  37. package/dist/browser-workspace-hooks.d.ts.map +1 -0
  38. package/dist/browser-workspace-hooks.js +15 -0
  39. package/dist/browser-workspace-hooks.js.map +1 -0
  40. package/dist/companion-auth.d.ts +34 -0
  41. package/dist/companion-auth.d.ts.map +1 -0
  42. package/dist/companion-auth.js +98 -0
  43. package/dist/companion-auth.js.map +1 -0
  44. package/dist/contracts.d.ts +284 -0
  45. package/dist/contracts.d.ts.map +1 -0
  46. package/dist/contracts.js +56 -0
  47. package/dist/contracts.js.map +1 -0
  48. package/dist/index.d.ts +30 -16
  49. package/dist/index.d.ts.map +1 -1
  50. package/dist/index.js +76 -90
  51. package/dist/index.js.map +1 -1
  52. package/dist/lifeops-session-contracts.d.ts +46 -0
  53. package/dist/lifeops-session-contracts.d.ts.map +1 -0
  54. package/dist/lifeops-session-contracts.js +1 -0
  55. package/dist/lifeops-session-contracts.js.map +1 -0
  56. package/dist/message-adapter.d.ts +9 -0
  57. package/dist/message-adapter.d.ts.map +1 -0
  58. package/dist/message-adapter.js +104 -0
  59. package/dist/message-adapter.js.map +1 -0
  60. package/dist/packaging.d.ts +27 -0
  61. package/dist/packaging.d.ts.map +1 -0
  62. package/dist/packaging.js +571 -0
  63. package/dist/packaging.js.map +1 -0
  64. package/dist/password-manager-bridge.d.ts +50 -0
  65. package/dist/password-manager-bridge.d.ts.map +1 -0
  66. package/dist/password-manager-bridge.js +437 -0
  67. package/dist/password-manager-bridge.js.map +1 -0
  68. package/dist/plugin.d.ts +10 -0
  69. package/dist/plugin.d.ts.map +1 -0
  70. package/dist/plugin.js +168 -0
  71. package/dist/plugin.js.map +1 -0
  72. package/dist/providers/workspace.d.ts +13 -0
  73. package/dist/providers/workspace.d.ts.map +1 -0
  74. package/dist/providers/workspace.js +64 -0
  75. package/dist/providers/workspace.js.map +1 -0
  76. package/dist/routes/bridge.d.ts +37 -0
  77. package/dist/routes/bridge.d.ts.map +1 -0
  78. package/dist/routes/bridge.js +844 -0
  79. package/dist/routes/bridge.js.map +1 -0
  80. package/dist/routes/workspace-account-gate.d.ts +29 -0
  81. package/dist/routes/workspace-account-gate.d.ts.map +1 -0
  82. package/dist/routes/workspace-account-gate.js +147 -0
  83. package/dist/routes/workspace-account-gate.js.map +1 -0
  84. package/dist/routes/workspace-setup.d.ts +10 -0
  85. package/dist/routes/workspace-setup.d.ts.map +1 -0
  86. package/dist/routes/workspace-setup.js +65 -0
  87. package/dist/routes/workspace-setup.js.map +1 -0
  88. package/dist/routes/workspace.d.ts +20 -0
  89. package/dist/routes/workspace.d.ts.map +1 -0
  90. package/dist/routes/workspace.js +276 -0
  91. package/dist/routes/workspace.js.map +1 -0
  92. package/dist/schema.d.ts +2326 -0
  93. package/dist/schema.d.ts.map +1 -0
  94. package/dist/schema.js +133 -0
  95. package/dist/schema.js.map +1 -0
  96. package/dist/service.d.ts +30 -0
  97. package/dist/service.d.ts.map +1 -0
  98. package/dist/service.js +5 -0
  99. package/dist/service.js.map +1 -0
  100. package/dist/targets/bridge-target.d.ts +31 -0
  101. package/dist/targets/bridge-target.d.ts.map +1 -0
  102. package/dist/targets/bridge-target.js +98 -0
  103. package/dist/targets/bridge-target.js.map +1 -0
  104. package/dist/targets/stagehand-target.d.ts +3 -0
  105. package/dist/targets/stagehand-target.d.ts.map +1 -0
  106. package/dist/targets/stagehand-target.js +187 -0
  107. package/dist/targets/stagehand-target.js.map +1 -0
  108. package/dist/workspace/browser-capture.d.ts +41 -0
  109. package/dist/workspace/browser-capture.d.ts.map +1 -0
  110. package/dist/workspace/browser-capture.js +159 -0
  111. package/dist/workspace/browser-capture.js.map +1 -0
  112. package/dist/workspace/browser-workspace-desktop.d.ts +19 -0
  113. package/dist/workspace/browser-workspace-desktop.d.ts.map +1 -0
  114. package/dist/workspace/browser-workspace-desktop.js +1578 -0
  115. package/dist/workspace/browser-workspace-desktop.js.map +1 -0
  116. package/dist/workspace/browser-workspace-elements.d.ts +42 -0
  117. package/dist/workspace/browser-workspace-elements.d.ts.map +1 -0
  118. package/dist/workspace/browser-workspace-elements.js +547 -0
  119. package/dist/workspace/browser-workspace-elements.js.map +1 -0
  120. package/dist/workspace/browser-workspace-forms.d.ts +19 -0
  121. package/dist/workspace/browser-workspace-forms.d.ts.map +1 -0
  122. package/dist/workspace/browser-workspace-forms.js +277 -0
  123. package/dist/workspace/browser-workspace-forms.js.map +1 -0
  124. package/dist/workspace/browser-workspace-helpers.d.ts +32 -0
  125. package/dist/workspace/browser-workspace-helpers.d.ts.map +1 -0
  126. package/dist/workspace/browser-workspace-helpers.js +232 -0
  127. package/dist/workspace/browser-workspace-helpers.js.map +1 -0
  128. package/dist/workspace/browser-workspace-jsdom.d.ts +16 -0
  129. package/dist/workspace/browser-workspace-jsdom.d.ts.map +1 -0
  130. package/dist/workspace/browser-workspace-jsdom.js +233 -0
  131. package/dist/workspace/browser-workspace-jsdom.js.map +1 -0
  132. package/dist/workspace/browser-workspace-network.d.ts +7 -0
  133. package/dist/workspace/browser-workspace-network.d.ts.map +1 -0
  134. package/dist/workspace/browser-workspace-network.js +145 -0
  135. package/dist/workspace/browser-workspace-network.js.map +1 -0
  136. package/dist/workspace/browser-workspace-snapshots.d.ts +14 -0
  137. package/dist/workspace/browser-workspace-snapshots.d.ts.map +1 -0
  138. package/dist/workspace/browser-workspace-snapshots.js +144 -0
  139. package/dist/workspace/browser-workspace-snapshots.js.map +1 -0
  140. package/dist/workspace/browser-workspace-state.d.ts +24 -0
  141. package/dist/workspace/browser-workspace-state.d.ts.map +1 -0
  142. package/dist/workspace/browser-workspace-state.js +155 -0
  143. package/dist/workspace/browser-workspace-state.js.map +1 -0
  144. package/dist/workspace/browser-workspace-types.d.ts +345 -0
  145. package/dist/workspace/browser-workspace-types.d.ts.map +1 -0
  146. package/dist/workspace/browser-workspace-types.js +11 -0
  147. package/dist/workspace/browser-workspace-types.js.map +1 -0
  148. package/dist/workspace/browser-workspace-web.d.ts +8 -0
  149. package/dist/workspace/browser-workspace-web.d.ts.map +1 -0
  150. package/dist/workspace/browser-workspace-web.js +1342 -0
  151. package/dist/workspace/browser-workspace-web.js.map +1 -0
  152. package/dist/workspace/browser-workspace.d.ts +39 -0
  153. package/dist/workspace/browser-workspace.d.ts.map +1 -0
  154. package/dist/workspace/browser-workspace.js +958 -0
  155. package/dist/workspace/browser-workspace.js.map +1 -0
  156. package/dist/workspace/index.d.ts +26 -0
  157. package/dist/workspace/index.d.ts.map +1 -0
  158. package/dist/workspace/index.js +3 -0
  159. package/dist/workspace/index.js.map +1 -0
  160. package/dist/workspace.d.ts +2 -0
  161. package/dist/workspace.d.ts.map +1 -0
  162. package/dist/workspace.js +2 -0
  163. package/dist/workspace.js.map +1 -0
  164. package/package.json +71 -110
  165. package/dist/actions/click.d.ts +0 -3
  166. package/dist/actions/click.d.ts.map +0 -1
  167. package/dist/actions/click.js +0 -158
  168. package/dist/actions/click.js.map +0 -1
  169. package/dist/actions/extract.d.ts +0 -3
  170. package/dist/actions/extract.d.ts.map +0 -1
  171. package/dist/actions/extract.js +0 -168
  172. package/dist/actions/extract.js.map +0 -1
  173. package/dist/actions/index.d.ts +0 -7
  174. package/dist/actions/index.d.ts.map +0 -1
  175. package/dist/actions/index.js +0 -7
  176. package/dist/actions/index.js.map +0 -1
  177. package/dist/actions/navigate.d.ts +0 -3
  178. package/dist/actions/navigate.d.ts.map +0 -1
  179. package/dist/actions/navigate.js +0 -187
  180. package/dist/actions/navigate.js.map +0 -1
  181. package/dist/actions/screenshot.d.ts +0 -3
  182. package/dist/actions/screenshot.d.ts.map +0 -1
  183. package/dist/actions/screenshot.js +0 -167
  184. package/dist/actions/screenshot.js.map +0 -1
  185. package/dist/actions/select.d.ts +0 -3
  186. package/dist/actions/select.d.ts.map +0 -1
  187. package/dist/actions/select.js +0 -167
  188. package/dist/actions/select.js.map +0 -1
  189. package/dist/actions/type.d.ts +0 -3
  190. package/dist/actions/type.d.ts.map +0 -1
  191. package/dist/actions/type.js +0 -167
  192. package/dist/actions/type.js.map +0 -1
  193. package/dist/cli/index.d.ts +0 -8
  194. package/dist/cli/index.d.ts.map +0 -1
  195. package/dist/cli/index.js +0 -13
  196. package/dist/cli/index.js.map +0 -1
  197. package/dist/cli/register.d.ts +0 -20
  198. package/dist/cli/register.d.ts.map +0 -1
  199. package/dist/cli/register.js +0 -403
  200. package/dist/cli/register.js.map +0 -1
  201. package/dist/providerRelevance.d.ts +0 -4
  202. package/dist/providerRelevance.d.ts.map +0 -1
  203. package/dist/providerRelevance.js +0 -33
  204. package/dist/providerRelevance.js.map +0 -1
  205. package/dist/providers/browser-state.d.ts +0 -3
  206. package/dist/providers/browser-state.d.ts.map +0 -1
  207. package/dist/providers/browser-state.js +0 -72
  208. package/dist/providers/browser-state.js.map +0 -1
  209. package/dist/providers/index.d.ts +0 -2
  210. package/dist/providers/index.d.ts.map +0 -1
  211. package/dist/providers/index.js +0 -2
  212. package/dist/providers/index.js.map +0 -1
  213. package/dist/services/browser-service.d.ts +0 -32
  214. package/dist/services/browser-service.d.ts.map +0 -1
  215. package/dist/services/browser-service.js +0 -213
  216. package/dist/services/browser-service.js.map +0 -1
  217. package/dist/services/index.d.ts +0 -4
  218. package/dist/services/index.d.ts.map +0 -1
  219. package/dist/services/index.js +0 -4
  220. package/dist/services/index.js.map +0 -1
  221. package/dist/services/process-manager.d.ts +0 -24
  222. package/dist/services/process-manager.d.ts.map +0 -1
  223. package/dist/services/process-manager.js +0 -270
  224. package/dist/services/process-manager.js.map +0 -1
  225. package/dist/services/websocket-client.d.ts +0 -35
  226. package/dist/services/websocket-client.d.ts.map +0 -1
  227. package/dist/services/websocket-client.js +0 -221
  228. package/dist/services/websocket-client.js.map +0 -1
  229. package/dist/types.d.ts +0 -101
  230. package/dist/types.d.ts.map +0 -1
  231. package/dist/types.js +0 -2
  232. package/dist/types.js.map +0 -1
  233. package/dist/utils/captcha.d.ts +0 -33
  234. package/dist/utils/captcha.d.ts.map +0 -1
  235. package/dist/utils/captcha.js +0 -219
  236. package/dist/utils/captcha.js.map +0 -1
  237. package/dist/utils/errors.d.ts +0 -37
  238. package/dist/utils/errors.d.ts.map +0 -1
  239. package/dist/utils/errors.js +0 -81
  240. package/dist/utils/errors.js.map +0 -1
  241. package/dist/utils/index.d.ts +0 -5
  242. package/dist/utils/index.d.ts.map +0 -1
  243. package/dist/utils/index.js +0 -5
  244. package/dist/utils/index.js.map +0 -1
  245. package/dist/utils/retry.d.ts +0 -26
  246. package/dist/utils/retry.d.ts.map +0 -1
  247. package/dist/utils/retry.js +0 -55
  248. package/dist/utils/retry.js.map +0 -1
  249. package/dist/utils/security.d.ts +0 -27
  250. package/dist/utils/security.d.ts.map +0 -1
  251. package/dist/utils/security.js +0 -139
  252. package/dist/utils/security.js.map +0 -1
  253. package/dist/utils/url.d.ts +0 -12
  254. package/dist/utils/url.d.ts.map +0 -1
  255. package/dist/utils/url.js +0 -39
  256. package/dist/utils/url.js.map +0 -1
package/dist/plugin.js ADDED
@@ -0,0 +1,168 @@
1
+ import { TLSSocket } from "node:tls";
2
+ import {
3
+ readJsonBody as httpReadJsonBody,
4
+ sendJson as httpSendJson,
5
+ sendJsonError as httpSendJsonError,
6
+ promoteSubactionsToActions,
7
+ resolveCanonicalOwnerId
8
+ } from "@elizaos/core";
9
+ import { browserAction } from "./actions/browser.js";
10
+ import { manageBrowserBridgeAction } from "./actions/manage-browser-bridge.js";
11
+ import { BrowserService } from "./browser-service.js";
12
+ import { browserWorkspaceProvider } from "./providers/workspace.js";
13
+ import {
14
+ handleBrowserBridgeRoutes
15
+ } from "./routes/bridge.js";
16
+ import { browserWorkspaceRoutes } from "./routes/workspace-setup.js";
17
+ import { browserBridgeSchema } from "./schema.js";
18
+ function json(res, data, status = 200) {
19
+ httpSendJson(res, data, status);
20
+ }
21
+ function error(res, message, status = 400) {
22
+ httpSendJsonError(res, message, status);
23
+ }
24
+ function httpDecodePathComponent(raw, res, fieldName) {
25
+ try {
26
+ return decodeURIComponent(raw);
27
+ } catch {
28
+ httpSendJsonError(res, `Invalid ${fieldName}: malformed URL encoding`, 400);
29
+ return null;
30
+ }
31
+ }
32
+ function firstHeaderValue(value) {
33
+ if (Array.isArray(value)) {
34
+ return firstHeaderValue(value[0]);
35
+ }
36
+ if (typeof value !== "string") {
37
+ return null;
38
+ }
39
+ const normalized = value.split(",")[0]?.trim();
40
+ return normalized ? normalized : null;
41
+ }
42
+ function requestBaseUrl(req) {
43
+ const headers = req.headers ?? {};
44
+ const protocol = firstHeaderValue(headers["x-forwarded-proto"]) ?? (req.socket instanceof TLSSocket && req.socket.encrypted ? "https" : "http");
45
+ const host = firstHeaderValue(headers["x-forwarded-host"]) ?? firstHeaderValue(headers.host) ?? "localhost";
46
+ return `${protocol}://${host}`;
47
+ }
48
+ function routeOwnerEntityId(runtime) {
49
+ const ownerId = runtime ? resolveCanonicalOwnerId(runtime) : null;
50
+ return typeof ownerId === "string" ? ownerId : null;
51
+ }
52
+ function buildRouteContext(req, res, runtime) {
53
+ const method = (req.method ?? "GET").toUpperCase();
54
+ const url = new URL(req.url ?? "/", requestBaseUrl(req));
55
+ return {
56
+ req,
57
+ res,
58
+ method,
59
+ pathname: url.pathname,
60
+ url,
61
+ state: {
62
+ runtime,
63
+ adminEntityId: routeOwnerEntityId(runtime)
64
+ },
65
+ json,
66
+ error,
67
+ readJsonBody: httpReadJsonBody,
68
+ decodePathComponent: httpDecodePathComponent
69
+ };
70
+ }
71
+ const STATIC_ROUTES = [
72
+ { type: "GET", path: "/api/browser-bridge/sessions" },
73
+ { type: "GET", path: "/api/browser-bridge/settings" },
74
+ { type: "POST", path: "/api/browser-bridge/settings" },
75
+ { type: "POST", path: "/api/browser-bridge/companions/pair" },
76
+ { type: "POST", path: "/api/browser-bridge/companions/auto-pair" },
77
+ { type: "GET", path: "/api/browser-bridge/companions" },
78
+ { type: "POST", path: "/api/browser-bridge/companions/revoke", public: true },
79
+ { type: "GET", path: "/api/browser-bridge/packages" },
80
+ { type: "POST", path: "/api/browser-bridge/packages/open-path" },
81
+ { type: "POST", path: "/api/browser-bridge/companions/sync", public: true },
82
+ { type: "GET", path: "/api/browser-bridge/tabs" },
83
+ { type: "GET", path: "/api/browser-bridge/current-page" },
84
+ { type: "POST", path: "/api/browser-bridge/sync" },
85
+ { type: "POST", path: "/api/browser-bridge/sessions" }
86
+ ];
87
+ const DYNAMIC_ROUTES = [
88
+ { type: "GET", path: "/api/browser-bridge/sessions/:id" },
89
+ { type: "POST", path: "/api/browser-bridge/sessions/:id/confirm" },
90
+ { type: "POST", path: "/api/browser-bridge/sessions/:id/progress" },
91
+ { type: "POST", path: "/api/browser-bridge/sessions/:id/complete" },
92
+ { type: "POST", path: "/api/browser-bridge/companions/:id/revoke" },
93
+ {
94
+ type: "POST",
95
+ path: "/api/browser-bridge/companions/sessions/:id/progress",
96
+ public: true
97
+ },
98
+ {
99
+ type: "POST",
100
+ path: "/api/browser-bridge/companions/sessions/:id/complete",
101
+ public: true
102
+ },
103
+ { type: "POST", path: "/api/browser-bridge/packages/:browser/build" },
104
+ {
105
+ type: "POST",
106
+ path: "/api/browser-bridge/packages/:browser/open-manager"
107
+ },
108
+ { type: "GET", path: "/api/browser-bridge/packages/:browser/download" }
109
+ ];
110
+ function routeHandler() {
111
+ return async (req, res, runtime) => {
112
+ const httpReq = req;
113
+ const httpRes = res;
114
+ const ctx = buildRouteContext(
115
+ httpReq,
116
+ httpRes,
117
+ runtime ?? null
118
+ );
119
+ await handleBrowserBridgeRoutes(ctx);
120
+ };
121
+ }
122
+ const browserBridgePluginRoutes = [
123
+ ...STATIC_ROUTES.map(
124
+ (r) => ({
125
+ type: r.type,
126
+ path: r.path,
127
+ rawPath: true,
128
+ ...r.public ? { public: true } : {},
129
+ handler: routeHandler()
130
+ })
131
+ ),
132
+ ...DYNAMIC_ROUTES.map(
133
+ (r) => ({
134
+ type: r.type,
135
+ path: r.path,
136
+ rawPath: true,
137
+ ...r.public ? { public: true } : {},
138
+ handler: routeHandler()
139
+ })
140
+ )
141
+ ];
142
+ const browserPlugin = {
143
+ name: "@elizaos/plugin-browser",
144
+ description: "Browser plugin: BROWSER (including action=autofill_login) + MANAGE_BROWSER_BRIDGE; workspace browser command router (electrobun-embedded BrowserView + JSDOM fallback) and Chrome/Safari companion bridge (settings, pairing, tab + page-context sync, packaging artifacts).",
145
+ schema: browserBridgeSchema,
146
+ routes: [...browserBridgePluginRoutes, ...browserWorkspaceRoutes],
147
+ services: [BrowserService],
148
+ providers: [browserWorkspaceProvider],
149
+ actions: [
150
+ ...promoteSubactionsToActions(browserAction),
151
+ ...promoteSubactionsToActions(manageBrowserBridgeAction)
152
+ ],
153
+ // Self-declared auto-enable: activate when features.browser is enabled.
154
+ autoEnable: {
155
+ shouldEnable: (_env, config) => {
156
+ const f = config?.features?.browser;
157
+ return f === true || typeof f === "object" && f !== null && f.enabled !== false;
158
+ }
159
+ },
160
+ async dispose(runtime) {
161
+ const svc = runtime.getService(BrowserService.serviceType);
162
+ await svc?.stop();
163
+ }
164
+ };
165
+ export {
166
+ browserPlugin
167
+ };
168
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/plugin.ts"],"sourcesContent":["/**\n * @elizaos/plugin-browser plugin export.\n *\n * plugin-collector discovers `routes` and `schema` at runtime. Eliza loads\n * this as a core plugin so the Browser Workspace UI and browser companion\n * extension share one route surface.\n */\n\nimport type http from \"node:http\";\nimport { TLSSocket } from \"node:tls\";\nimport type {\n AgentRuntime,\n LegacyRouteHandler,\n Plugin,\n Route,\n ServiceClass,\n UUID,\n} from \"@elizaos/core\";\nimport {\n readJsonBody as httpReadJsonBody,\n sendJson as httpSendJson,\n sendJsonError as httpSendJsonError,\n promoteSubactionsToActions,\n resolveCanonicalOwnerId,\n} from \"@elizaos/core\";\nimport { browserAction } from \"./actions/browser.js\";\nimport { manageBrowserBridgeAction } from \"./actions/manage-browser-bridge.js\";\nimport { BrowserService } from \"./browser-service.js\";\nimport { browserWorkspaceProvider } from \"./providers/workspace.js\";\nimport {\n type BrowserBridgeRouteContext,\n handleBrowserBridgeRoutes,\n} from \"./routes/bridge.js\";\nimport { browserWorkspaceRoutes } from \"./routes/workspace-setup.js\";\nimport { browserBridgeSchema } from \"./schema.js\";\n\nfunction json(res: http.ServerResponse, data: unknown, status = 200): void {\n httpSendJson(res, data, status);\n}\n\nfunction error(res: http.ServerResponse, message: string, status = 400): void {\n httpSendJsonError(res, message, status);\n}\n\nfunction httpDecodePathComponent(\n raw: string,\n res: http.ServerResponse,\n fieldName: string,\n): string | null {\n try {\n return decodeURIComponent(raw);\n } catch {\n httpSendJsonError(res, `Invalid ${fieldName}: malformed URL encoding`, 400);\n return null;\n }\n}\n\nfunction firstHeaderValue(value: string | string[] | undefined): string | null {\n if (Array.isArray(value)) {\n return firstHeaderValue(value[0]);\n }\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.split(\",\")[0]?.trim();\n return normalized ? normalized : null;\n}\n\nfunction requestBaseUrl(req: http.IncomingMessage): string {\n const headers = req.headers ?? {};\n const protocol =\n firstHeaderValue(headers[\"x-forwarded-proto\"]) ??\n (req.socket instanceof TLSSocket && req.socket.encrypted\n ? \"https\"\n : \"http\");\n const host =\n firstHeaderValue(headers[\"x-forwarded-host\"]) ??\n firstHeaderValue(headers.host) ??\n \"localhost\";\n return `${protocol}://${host}`;\n}\n\nfunction routeOwnerEntityId(runtime: AgentRuntime | null): UUID | null {\n const ownerId = runtime ? resolveCanonicalOwnerId(runtime) : null;\n return typeof ownerId === \"string\" ? (ownerId as UUID) : null;\n}\n\nfunction buildRouteContext(\n req: http.IncomingMessage,\n res: http.ServerResponse,\n runtime: AgentRuntime | null,\n): BrowserBridgeRouteContext {\n const method = (req.method ?? \"GET\").toUpperCase();\n const url = new URL(req.url ?? \"/\", requestBaseUrl(req));\n return {\n req,\n res,\n method,\n pathname: url.pathname,\n url,\n state: {\n runtime,\n adminEntityId: routeOwnerEntityId(runtime),\n },\n json,\n error,\n readJsonBody: httpReadJsonBody,\n decodePathComponent: httpDecodePathComponent,\n };\n}\n\nconst STATIC_ROUTES: Array<{ type: string; path: string; public?: boolean }> = [\n { type: \"GET\", path: \"/api/browser-bridge/sessions\" },\n { type: \"GET\", path: \"/api/browser-bridge/settings\" },\n { type: \"POST\", path: \"/api/browser-bridge/settings\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/pair\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/auto-pair\" },\n { type: \"GET\", path: \"/api/browser-bridge/companions\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/revoke\", public: true },\n { type: \"GET\", path: \"/api/browser-bridge/packages\" },\n { type: \"POST\", path: \"/api/browser-bridge/packages/open-path\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/sync\", public: true },\n { type: \"GET\", path: \"/api/browser-bridge/tabs\" },\n { type: \"GET\", path: \"/api/browser-bridge/current-page\" },\n { type: \"POST\", path: \"/api/browser-bridge/sync\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions\" },\n];\n\nconst DYNAMIC_ROUTES: Array<{ type: string; path: string; public?: boolean }> =\n [\n { type: \"GET\", path: \"/api/browser-bridge/sessions/:id\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/confirm\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/progress\" },\n { type: \"POST\", path: \"/api/browser-bridge/sessions/:id/complete\" },\n { type: \"POST\", path: \"/api/browser-bridge/companions/:id/revoke\" },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/companions/sessions/:id/progress\",\n public: true,\n },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/companions/sessions/:id/complete\",\n public: true,\n },\n { type: \"POST\", path: \"/api/browser-bridge/packages/:browser/build\" },\n {\n type: \"POST\",\n path: \"/api/browser-bridge/packages/:browser/open-manager\",\n },\n { type: \"GET\", path: \"/api/browser-bridge/packages/:browser/download\" },\n ];\n\nfunction routeHandler(): LegacyRouteHandler {\n return async (\n req: unknown,\n res: unknown,\n runtime: unknown,\n ): Promise<void> => {\n const httpReq = req as http.IncomingMessage;\n const httpRes = res as http.ServerResponse;\n const ctx = buildRouteContext(\n httpReq,\n httpRes,\n (runtime as AgentRuntime) ?? null,\n );\n await handleBrowserBridgeRoutes(ctx);\n };\n}\n\nconst browserBridgePluginRoutes: Route[] = [\n ...STATIC_ROUTES.map(\n (r) =>\n ({\n type: r.type as Route[\"type\"],\n path: r.path,\n rawPath: true as const,\n ...(r.public ? ({ public: true } as const) : {}),\n handler: routeHandler(),\n }) as Route,\n ),\n ...DYNAMIC_ROUTES.map(\n (r) =>\n ({\n type: r.type as Route[\"type\"],\n path: r.path,\n rawPath: true as const,\n ...(r.public ? ({ public: true } as const) : {}),\n handler: routeHandler(),\n }) as Route,\n ),\n];\n\nexport const browserPlugin: Plugin = {\n name: \"@elizaos/plugin-browser\",\n description:\n \"Browser plugin: BROWSER (including action=autofill_login) + MANAGE_BROWSER_BRIDGE; workspace browser command router (electrobun-embedded BrowserView + JSDOM fallback) and Chrome/Safari companion bridge (settings, pairing, tab + page-context sync, packaging artifacts).\",\n schema: browserBridgeSchema,\n routes: [...browserBridgePluginRoutes, ...browserWorkspaceRoutes],\n services: [BrowserService as ServiceClass],\n providers: [browserWorkspaceProvider],\n actions: [\n ...promoteSubactionsToActions(browserAction),\n ...promoteSubactionsToActions(manageBrowserBridgeAction),\n ],\n // Self-declared auto-enable: activate when features.browser is enabled.\n autoEnable: {\n shouldEnable: (_env, config) => {\n const f = (config?.features as Record<string, unknown> | undefined)\n ?.browser;\n return (\n f === true ||\n (typeof f === \"object\" &&\n f !== null &&\n (f as { enabled?: unknown }).enabled !== false)\n );\n },\n },\n async dispose(runtime) {\n const svc = runtime.getService<BrowserService>(BrowserService.serviceType);\n await svc?.stop();\n },\n};\n"],"mappings":"AASA,SAAS,iBAAiB;AAS1B;AAAA,EACE,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB;AAC9B,SAAS,iCAAiC;AAC1C,SAAS,sBAAsB;AAC/B,SAAS,gCAAgC;AACzC;AAAA,EAEE;AAAA,OACK;AACP,SAAS,8BAA8B;AACvC,SAAS,2BAA2B;AAEpC,SAAS,KAAK,KAA0B,MAAe,SAAS,KAAW;AACzE,eAAa,KAAK,MAAM,MAAM;AAChC;AAEA,SAAS,MAAM,KAA0B,SAAiB,SAAS,KAAW;AAC5E,oBAAkB,KAAK,SAAS,MAAM;AACxC;AAEA,SAAS,wBACP,KACA,KACA,WACe;AACf,MAAI;AACF,WAAO,mBAAmB,GAAG;AAAA,EAC/B,QAAQ;AACN,sBAAkB,KAAK,WAAW,SAAS,4BAA4B,GAAG;AAC1E,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,OAAqD;AAC7E,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,iBAAiB,MAAM,CAAC,CAAC;AAAA,EAClC;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO;AAAA,EACT;AACA,QAAM,aAAa,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,KAAK;AAC7C,SAAO,aAAa,aAAa;AACnC;AAEA,SAAS,eAAe,KAAmC;AACzD,QAAM,UAAU,IAAI,WAAW,CAAC;AAChC,QAAM,WACJ,iBAAiB,QAAQ,mBAAmB,CAAC,MAC5C,IAAI,kBAAkB,aAAa,IAAI,OAAO,YAC3C,UACA;AACN,QAAM,OACJ,iBAAiB,QAAQ,kBAAkB,CAAC,KAC5C,iBAAiB,QAAQ,IAAI,KAC7B;AACF,SAAO,GAAG,QAAQ,MAAM,IAAI;AAC9B;AAEA,SAAS,mBAAmB,SAA2C;AACrE,QAAM,UAAU,UAAU,wBAAwB,OAAO,IAAI;AAC7D,SAAO,OAAO,YAAY,WAAY,UAAmB;AAC3D;AAEA,SAAS,kBACP,KACA,KACA,SAC2B;AAC3B,QAAM,UAAU,IAAI,UAAU,OAAO,YAAY;AACjD,QAAM,MAAM,IAAI,IAAI,IAAI,OAAO,KAAK,eAAe,GAAG,CAAC;AACvD,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,UAAU,IAAI;AAAA,IACd;AAAA,IACA,OAAO;AAAA,MACL;AAAA,MACA,eAAe,mBAAmB,OAAO;AAAA,IAC3C;AAAA,IACA;AAAA,IACA;AAAA,IACA,cAAc;AAAA,IACd,qBAAqB;AAAA,EACvB;AACF;AAEA,MAAM,gBAAyE;AAAA,EAC7E,EAAE,MAAM,OAAO,MAAM,+BAA+B;AAAA,EACpD,EAAE,MAAM,OAAO,MAAM,+BAA+B;AAAA,EACpD,EAAE,MAAM,QAAQ,MAAM,+BAA+B;AAAA,EACrD,EAAE,MAAM,QAAQ,MAAM,sCAAsC;AAAA,EAC5D,EAAE,MAAM,QAAQ,MAAM,2CAA2C;AAAA,EACjE,EAAE,MAAM,OAAO,MAAM,iCAAiC;AAAA,EACtD,EAAE,MAAM,QAAQ,MAAM,yCAAyC,QAAQ,KAAK;AAAA,EAC5E,EAAE,MAAM,OAAO,MAAM,+BAA+B;AAAA,EACpD,EAAE,MAAM,QAAQ,MAAM,yCAAyC;AAAA,EAC/D,EAAE,MAAM,QAAQ,MAAM,uCAAuC,QAAQ,KAAK;AAAA,EAC1E,EAAE,MAAM,OAAO,MAAM,2BAA2B;AAAA,EAChD,EAAE,MAAM,OAAO,MAAM,mCAAmC;AAAA,EACxD,EAAE,MAAM,QAAQ,MAAM,2BAA2B;AAAA,EACjD,EAAE,MAAM,QAAQ,MAAM,+BAA+B;AACvD;AAEA,MAAM,iBACJ;AAAA,EACE,EAAE,MAAM,OAAO,MAAM,mCAAmC;AAAA,EACxD,EAAE,MAAM,QAAQ,MAAM,2CAA2C;AAAA,EACjE,EAAE,MAAM,QAAQ,MAAM,4CAA4C;AAAA,EAClE,EAAE,MAAM,QAAQ,MAAM,4CAA4C;AAAA,EAClE,EAAE,MAAM,QAAQ,MAAM,4CAA4C;AAAA,EAClE;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;AAAA,EACA,EAAE,MAAM,QAAQ,MAAM,8CAA8C;AAAA,EACpE;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA,EAAE,MAAM,OAAO,MAAM,iDAAiD;AACxE;AAEF,SAAS,eAAmC;AAC1C,SAAO,OACL,KACA,KACA,YACkB;AAClB,UAAM,UAAU;AAChB,UAAM,UAAU;AAChB,UAAM,MAAM;AAAA,MACV;AAAA,MACA;AAAA,MACC,WAA4B;AAAA,IAC/B;AACA,UAAM,0BAA0B,GAAG;AAAA,EACrC;AACF;AAEA,MAAM,4BAAqC;AAAA,EACzC,GAAG,cAAc;AAAA,IACf,CAAC,OACE;AAAA,MACC,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,SAAS;AAAA,MACT,GAAI,EAAE,SAAU,EAAE,QAAQ,KAAK,IAAc,CAAC;AAAA,MAC9C,SAAS,aAAa;AAAA,IACxB;AAAA,EACJ;AAAA,EACA,GAAG,eAAe;AAAA,IAChB,CAAC,OACE;AAAA,MACC,MAAM,EAAE;AAAA,MACR,MAAM,EAAE;AAAA,MACR,SAAS;AAAA,MACT,GAAI,EAAE,SAAU,EAAE,QAAQ,KAAK,IAAc,CAAC;AAAA,MAC9C,SAAS,aAAa;AAAA,IACxB;AAAA,EACJ;AACF;AAEO,MAAM,gBAAwB;AAAA,EACnC,MAAM;AAAA,EACN,aACE;AAAA,EACF,QAAQ;AAAA,EACR,QAAQ,CAAC,GAAG,2BAA2B,GAAG,sBAAsB;AAAA,EAChE,UAAU,CAAC,cAA8B;AAAA,EACzC,WAAW,CAAC,wBAAwB;AAAA,EACpC,SAAS;AAAA,IACP,GAAG,2BAA2B,aAAa;AAAA,IAC3C,GAAG,2BAA2B,yBAAyB;AAAA,EACzD;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,cAAc,CAAC,MAAM,WAAW;AAC9B,YAAM,IAAK,QAAQ,UACf;AACJ,aACE,MAAM,QACL,OAAO,MAAM,YACZ,MAAM,QACL,EAA4B,YAAY;AAAA,IAE/C;AAAA,EACF;AAAA,EACA,MAAM,QAAQ,SAAS;AACrB,UAAM,MAAM,QAAQ,WAA2B,eAAe,WAAW;AACzE,UAAM,KAAK,KAAK;AAAA,EAClB;AACF;","names":[]}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Browser workspace provider — surfaces the live browser-workspace tab list
3
+ * and current dispatch mode (`desktop` / `web`) into agent context whenever
4
+ * a `browser` or `web` context is selected.
5
+ *
6
+ * Does not include Steward wallet state — that lived in this provider while
7
+ * `@elizaos/app-browser` owned both surfaces. After consolidation, Steward
8
+ * exposes its own provider from `@elizaos/plugin-steward-app`; an agent that needs
9
+ * both contexts gets both providers, not a coupled one.
10
+ */
11
+ import type { Provider } from "@elizaos/core";
12
+ export declare const browserWorkspaceProvider: Provider;
13
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/providers/workspace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAS9C,eAAO,MAAM,wBAAwB,EAAE,QAsDtC,CAAC"}
@@ -0,0 +1,64 @@
1
+ import {
2
+ getBrowserWorkspaceMode,
3
+ listBrowserWorkspaceTabs
4
+ } from "../workspace/browser-workspace.js";
5
+ const PROVIDER_NAME = "browser_workspace";
6
+ const MAX_TABS_IN_SUMMARY = 8;
7
+ const browserWorkspaceProvider = {
8
+ name: PROVIDER_NAME,
9
+ description: "Live summary of the Eliza browser workspace \u2014 current dispatch mode and the open tab list, capped to the first 8 tabs.",
10
+ descriptionCompressed: "Browser workspace mode + open tab list.",
11
+ contexts: ["browser", "web"],
12
+ contextGate: { anyOf: ["browser", "web"] },
13
+ cacheStable: false,
14
+ cacheScope: "turn",
15
+ get: async () => {
16
+ try {
17
+ const mode = getBrowserWorkspaceMode();
18
+ const tabs = await listBrowserWorkspaceTabs();
19
+ const text = JSON.stringify(
20
+ {
21
+ [PROVIDER_NAME]: {
22
+ mode,
23
+ tabCount: tabs.length,
24
+ tabs: tabs.slice(0, MAX_TABS_IN_SUMMARY).map((tab) => ({
25
+ id: tab.id,
26
+ visible: tab.visible,
27
+ url: tab.url,
28
+ title: tab.title
29
+ }))
30
+ }
31
+ },
32
+ null,
33
+ 2
34
+ );
35
+ return {
36
+ text,
37
+ data: {
38
+ available: true,
39
+ mode,
40
+ tabs
41
+ }
42
+ };
43
+ } catch (error) {
44
+ const message = error instanceof Error ? error.message : String(error);
45
+ return {
46
+ text: JSON.stringify(
47
+ {
48
+ [PROVIDER_NAME]: {
49
+ available: false,
50
+ error: message
51
+ }
52
+ },
53
+ null,
54
+ 2
55
+ ),
56
+ data: { available: false, error: message }
57
+ };
58
+ }
59
+ }
60
+ };
61
+ export {
62
+ browserWorkspaceProvider
63
+ };
64
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/providers/workspace.ts"],"sourcesContent":["/**\n * Browser workspace provider — surfaces the live browser-workspace tab list\n * and current dispatch mode (`desktop` / `web`) into agent context whenever\n * a `browser` or `web` context is selected.\n *\n * Does not include Steward wallet state — that lived in this provider while\n * `@elizaos/app-browser` owned both surfaces. After consolidation, Steward\n * exposes its own provider from `@elizaos/plugin-steward-app`; an agent that needs\n * both contexts gets both providers, not a coupled one.\n */\n\nimport type { Provider } from \"@elizaos/core\";\nimport {\n getBrowserWorkspaceMode,\n listBrowserWorkspaceTabs,\n} from \"../workspace/browser-workspace.js\";\n\nconst PROVIDER_NAME = \"browser_workspace\";\nconst MAX_TABS_IN_SUMMARY = 8;\n\nexport const browserWorkspaceProvider: Provider = {\n name: PROVIDER_NAME,\n description:\n \"Live summary of the Eliza browser workspace — current dispatch mode and the open tab list, capped to the first 8 tabs.\",\n descriptionCompressed: \"Browser workspace mode + open tab list.\",\n contexts: [\"browser\", \"web\"],\n contextGate: { anyOf: [\"browser\", \"web\"] },\n cacheStable: false,\n cacheScope: \"turn\",\n get: async () => {\n try {\n const mode = getBrowserWorkspaceMode();\n const tabs = await listBrowserWorkspaceTabs();\n const text = JSON.stringify(\n {\n [PROVIDER_NAME]: {\n mode,\n tabCount: tabs.length,\n tabs: tabs.slice(0, MAX_TABS_IN_SUMMARY).map((tab) => ({\n id: tab.id,\n visible: tab.visible,\n url: tab.url,\n title: tab.title,\n })),\n },\n },\n null,\n 2,\n );\n return {\n text,\n data: {\n available: true,\n mode,\n tabs,\n },\n };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return {\n text: JSON.stringify(\n {\n [PROVIDER_NAME]: {\n available: false,\n error: message,\n },\n },\n null,\n 2,\n ),\n data: { available: false, error: message },\n };\n }\n },\n};\n"],"mappings":"AAYA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEP,MAAM,gBAAgB;AACtB,MAAM,sBAAsB;AAErB,MAAM,2BAAqC;AAAA,EAChD,MAAM;AAAA,EACN,aACE;AAAA,EACF,uBAAuB;AAAA,EACvB,UAAU,CAAC,WAAW,KAAK;AAAA,EAC3B,aAAa,EAAE,OAAO,CAAC,WAAW,KAAK,EAAE;AAAA,EACzC,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,KAAK,YAAY;AACf,QAAI;AACF,YAAM,OAAO,wBAAwB;AACrC,YAAM,OAAO,MAAM,yBAAyB;AAC5C,YAAM,OAAO,KAAK;AAAA,QAChB;AAAA,UACE,CAAC,aAAa,GAAG;AAAA,YACf;AAAA,YACA,UAAU,KAAK;AAAA,YACf,MAAM,KAAK,MAAM,GAAG,mBAAmB,EAAE,IAAI,CAAC,SAAS;AAAA,cACrD,IAAI,IAAI;AAAA,cACR,SAAS,IAAI;AAAA,cACb,KAAK,IAAI;AAAA,cACT,OAAO,IAAI;AAAA,YACb,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AACA,aAAO;AAAA,QACL;AAAA,QACA,MAAM;AAAA,UACJ,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,aAAO;AAAA,QACL,MAAM,KAAK;AAAA,UACT;AAAA,YACE,CAAC,aAAa,GAAG;AAAA,cACf,WAAW;AAAA,cACX,OAAO;AAAA,YACT;AAAA,UACF;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,QACA,MAAM,EAAE,WAAW,OAAO,OAAO,QAAQ;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Agent Browser Bridge HTTP routes.
3
+ *
4
+ * Mounted under `/api/browser-bridge/*` by the plugin-collector. Pair +
5
+ * settings + companion-sync + tabs + current-page + packaging endpoints
6
+ * are fully generic. Session endpoints (confirm/progress/complete) still
7
+ * operate on the LifeOps-owned `life_browser_sessions` table and therefore
8
+ * call into the LifeOps route service because that app owns workflow-scoped
9
+ * browser sessions.
10
+ *
11
+ * Companion/auto-pair/sync authentication uses the
12
+ * `X-Browser-Bridge-Companion-Id` header paired with a bearer pairing
13
+ * token. The old `X-LifeOps-Browser-Companion-Id` and legacy
14
+ * `x-eliza-browser-companion-id` aliases were deliberately removed.
15
+ */
16
+ import type http from "node:http";
17
+ import type { ReadJsonBodyOptions } from "@elizaos/core";
18
+ import { type AgentRuntime, type UUID } from "@elizaos/core";
19
+ export interface BrowserBridgeRouteContext {
20
+ req: http.IncomingMessage;
21
+ res: http.ServerResponse;
22
+ method: string;
23
+ pathname: string;
24
+ url: URL;
25
+ state: {
26
+ runtime: AgentRuntime | null;
27
+ adminEntityId: UUID | null;
28
+ };
29
+ json: (res: http.ServerResponse, data: unknown, status?: number) => void;
30
+ error: (res: http.ServerResponse, message: string, status?: number) => void;
31
+ readJsonBody: <T extends object>(req: http.IncomingMessage, res: http.ServerResponse, options?: ReadJsonBodyOptions) => Promise<T | null>;
32
+ decodePathComponent: (raw: string, res: http.ServerResponse, label: string) => string | null;
33
+ }
34
+ declare function rateLimitRequest(ctx: BrowserBridgeRouteContext, operation: string): boolean;
35
+ export declare function handleBrowserBridgeRoutes(ctx: BrowserBridgeRouteContext): Promise<boolean>;
36
+ export { rateLimitRequest };
37
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/routes/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,KAAK,YAAY,EAAU,KAAK,IAAI,EAAE,MAAM,eAAe,CAAC;AA2BrE,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC;IAC1B,GAAG,EAAE,IAAI,CAAC,cAAc,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE;QACL,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;QAC7B,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;KAC5B,CAAC;IACF,IAAI,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACzE,KAAK,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5E,YAAY,EAAE,CAAC,CAAC,SAAS,MAAM,EAC7B,GAAG,EAAE,IAAI,CAAC,eAAe,EACzB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,OAAO,CAAC,EAAE,mBAAmB,KAC1B,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,mBAAmB,EAAE,CACnB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,KAAK,EAAE,MAAM,KACV,MAAM,GAAG,IAAI,CAAC;CACpB;AA2ID,iBAAS,gBAAgB,CACvB,GAAG,EAAE,yBAAyB,EAC9B,SAAS,EAAE,MAAM,GAChB,OAAO,CAqBT;AA8QD,wBAAsB,yBAAyB,CAC7C,GAAG,EAAE,yBAAyB,GAC7B,OAAO,CAAC,OAAO,CAAC,CAmjBlB;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}