@effect-agent/platform-cloudflare 0.1.0-beta.84 → 0.1.0-beta.86

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 (81) hide show
  1. package/dist/Alarm.d.mts +4 -4
  2. package/dist/Alarm.mjs +6 -6
  3. package/dist/Alarm.mjs.map +1 -1
  4. package/dist/BrowserRestCapture.d.mts +3 -3
  5. package/dist/BrowserRestCapture.mjs +3 -3
  6. package/dist/BrowserRestCapture.mjs.map +1 -1
  7. package/dist/BrowserRestCrawl.d.mts +2 -2
  8. package/dist/BrowserRestCrawl.mjs +3 -3
  9. package/dist/BrowserRestCrawl.mjs.map +1 -1
  10. package/dist/CloudflareBindings.d.mts +2 -2
  11. package/dist/CloudflareBindings.mjs +2 -2
  12. package/dist/CloudflareBindings.mjs.map +1 -1
  13. package/dist/{CloudflareBrowser-D4YqaTAl.mjs → CloudflareBrowser-DV6kya1H.mjs} +4 -4
  14. package/dist/CloudflareBrowser-DV6kya1H.mjs.map +1 -0
  15. package/dist/{CloudflareBrowser-DJq53niJ.d.mts → CloudflareBrowser-Doe1M7R5.d.mts} +4 -4
  16. package/dist/CloudflareBrowser.d.mts +1 -1
  17. package/dist/CloudflareBrowser.mjs +1 -1
  18. package/dist/CloudflareCodeMode.d.mts +2 -2
  19. package/dist/CloudflareCodeMode.mjs +2 -2
  20. package/dist/CloudflareCodeMode.mjs.map +1 -1
  21. package/dist/CloudflareConfig.mjs +3 -3
  22. package/dist/CloudflareConfig.mjs.map +1 -1
  23. package/dist/CloudflareMemory.d.mts +26 -26
  24. package/dist/CloudflareMemory.mjs +16 -16
  25. package/dist/CloudflareMemory.mjs.map +1 -1
  26. package/dist/CloudflareScheduling.d.mts +3 -3
  27. package/dist/CloudflareScheduling.mjs +11 -11
  28. package/dist/CloudflareScheduling.mjs.map +1 -1
  29. package/dist/CloudflareSubscriptions.d.mts +5 -5
  30. package/dist/CloudflareSubscriptions.mjs +20 -14
  31. package/dist/CloudflareSubscriptions.mjs.map +1 -1
  32. package/dist/CloudflareThreadClient.d.mts +228 -18
  33. package/dist/CloudflareThreadClient.mjs +12 -12
  34. package/dist/CloudflareThreadClient.mjs.map +1 -1
  35. package/dist/InteractiveBrowser.d.mts +2 -2
  36. package/dist/InteractiveBrowser.mjs +18 -18
  37. package/dist/InteractiveBrowser.mjs.map +1 -1
  38. package/dist/ProtectedBrowser.d.mts +2 -2
  39. package/dist/ProtectedBrowser.mjs +14 -14
  40. package/dist/ProtectedBrowser.mjs.map +1 -1
  41. package/dist/{ThreadObject-mmWMMWdY.mjs → ThreadObject-B4gJ7t0d.mjs} +29 -27
  42. package/dist/ThreadObject-B4gJ7t0d.mjs.map +1 -0
  43. package/dist/{ThreadObject-BS1gRV0V.d.mts → ThreadObject-BT0c-_vx.d.mts} +61 -65
  44. package/dist/ThreadObject.d.mts +1 -1
  45. package/dist/ThreadObject.mjs +1 -1
  46. package/dist/WakeScheduler.d.mts +1 -1
  47. package/dist/WakeScheduler.mjs +2 -2
  48. package/dist/WakeScheduler.mjs.map +1 -1
  49. package/dist/{browser-session-lifecycle-CUbVfEgP.mjs → browser-session-lifecycle-CmbQABHC.mjs} +5 -5
  50. package/dist/browser-session-lifecycle-CmbQABHC.mjs.map +1 -0
  51. package/dist/index.d.mts +2 -2
  52. package/dist/index.mjs +2 -2
  53. package/dist/{prepared-admission-DSi55W-7.mjs → prepared-admission-DU0_T-ev.mjs} +7 -7
  54. package/dist/prepared-admission-DU0_T-ev.mjs.map +1 -0
  55. package/package.json +1 -1
  56. package/src/Alarm.ts +19 -19
  57. package/src/BrowserRestCapture.ts +3 -3
  58. package/src/BrowserRestCrawl.ts +13 -13
  59. package/src/CloudflareBindings.ts +2 -2
  60. package/src/CloudflareCodeMode.ts +4 -4
  61. package/src/CloudflareConfig.ts +3 -3
  62. package/src/CloudflareMemory.ts +29 -29
  63. package/src/CloudflareScheduling.ts +13 -13
  64. package/src/CloudflareSubscriptions.ts +28 -32
  65. package/src/CloudflareThreadClient.ts +14 -14
  66. package/src/InteractiveBrowser.ts +34 -37
  67. package/src/ThreadObject.ts +14 -14
  68. package/src/WakeScheduler.ts +2 -2
  69. package/src/internal/browser-quick-action.ts +4 -4
  70. package/src/internal/browser-session-lifecycle.ts +8 -8
  71. package/src/internal/layers.ts +47 -47
  72. package/src/internal/message-delivery.ts +9 -10
  73. package/src/internal/prepared-admission.ts +7 -7
  74. package/src/internal/transport.ts +1 -1
  75. package/src/protected-browser/binding.ts +3 -3
  76. package/src/protected-browser/native.ts +3 -3
  77. package/src/protected-browser/policy.ts +42 -44
  78. package/dist/CloudflareBrowser-D4YqaTAl.mjs.map +0 -1
  79. package/dist/ThreadObject-mmWMMWdY.mjs.map +0 -1
  80. package/dist/browser-session-lifecycle-CUbVfEgP.mjs.map +0 -1
  81. package/dist/prepared-admission-DSi55W-7.mjs.map +0 -1
@@ -1,9 +1,9 @@
1
- import { n as BrowserRunSessionLifecycle, t as BrowserRunCleanupError } from "./browser-session-lifecycle-CUbVfEgP.mjs";
2
- import { Clock, Context, Duration, Effect, Layer, Option, Redacted, Ref, Schema, Semaphore } from "effect";
3
- import { PageScreenshotResult } from "@effect-agent/sandbox/PageScreenshot";
4
- import { SandboxImplementation } from "@effect-agent/sandbox/Sandbox";
1
+ import { n as BrowserRunSessionLifecycle, t as BrowserRunCleanupError } from "./browser-session-lifecycle-CmbQABHC.mjs";
2
+ import { Clock, Context, Duration, Effect, Layer, Redacted, Ref, Schema, Semaphore } from "effect";
3
+ import { PageScreenshotResult } from "effect-agent/page-screenshot";
4
+ import { SandboxImplementation } from "effect-agent/sandbox";
5
5
  import puppeteer from "@cloudflare/puppeteer";
6
- import { BrowserActionResult, BrowserNavigationResult, BrowserScreenshotRequest, BrowserScrollRequest, BrowserTextResult, InteractiveBrowser, InteractiveBrowserActionError, InteractiveBrowserBusyError, InteractiveBrowserCapacityError, InteractiveBrowserExpiredError, InteractiveBrowserLimitError, InteractiveBrowserPolicy, InteractiveBrowserPolicyDeniedError, InteractiveBrowserProtocolError, InteractiveBrowserTargetUrl, InteractiveBrowserUnsupportedError } from "@effect-agent/sandbox/InteractiveBrowser";
6
+ import { BrowserActionResult, BrowserNavigationResult, BrowserScreenshotRequest, BrowserScrollRequest, BrowserTextResult, InteractiveBrowser, InteractiveBrowserActionError, InteractiveBrowserBusyError, InteractiveBrowserCapacityError, InteractiveBrowserExpiredError, InteractiveBrowserLimitError, InteractiveBrowserPolicy, InteractiveBrowserPolicyDeniedError, InteractiveBrowserProtocolError, InteractiveBrowserTargetUrl, InteractiveBrowserUnsupportedError } from "effect-agent/interactive-browser";
7
7
  //#region src/InteractiveBrowser.ts
8
8
  const browserRunInteractiveImplementation = SandboxImplementation.make({
9
9
  isolation: "isolated",
@@ -122,7 +122,7 @@ var BrowserRunViewport = class extends Schema.Class("BrowserRunViewport")(Schema
122
122
  maximum: 2
123
123
  })))
124
124
  }).check(Schema.makeFilter((viewport) => Math.max(viewport.width, viewport.height) * (viewport.deviceScaleFactor ?? 1) <= 2048, { title: "a viewport with scaled dimensions no larger than 2048 pixels" }))) {};
125
- const decodeViewport = (input) => Schema.decodeUnknownEffect(BrowserRunViewport)(input, { onExcessProperty: "error" }).pipe(Effect.mapError(() => policyError("The browser viewport is malformed")), Effect.map((viewport) => ({
125
+ const decodeViewport = (input) => Schema.decodeEffect(BrowserRunViewport)(input, { onExcessProperty: "error" }).pipe(Effect.mapError(() => policyError("The browser viewport is malformed")), Effect.map((viewport) => ({
126
126
  width: viewport.width,
127
127
  height: viewport.height,
128
128
  deviceScaleFactor: viewport.deviceScaleFactor ?? 1
@@ -511,7 +511,7 @@ const makeProductionPage = (page) => {
511
511
  text
512
512
  };
513
513
  }, selector, maximumBytes, MAX_OBSERVED_CONTROLS));
514
- if (observation._tag === "Text") Schema.decodeUnknownSync(PageObservation)(observation.text);
514
+ if (observation._tag === "Text") Schema.decodeSync(PageObservation)(observation.text);
515
515
  return observation;
516
516
  },
517
517
  fill: (selector, value, signal, onDispatch) => runObservedPageAction(page, selector, signal, onDispatch, (element) => element.evaluate((element, nextValue) => {
@@ -601,7 +601,7 @@ const causeText = (cause) => {
601
601
  const isCapacityRefusal = (cause) => /(^|\D)429(\D|$)|browser time limit|capacity|too many concurrent/i.test(causeText(cause));
602
602
  const isRemoteClosure = (cause) => /target closed|browser.*closed|session.*closed|connection.*closed|not connected|websocket.*closed/i.test(causeText(cause));
603
603
  const snapshotPolicy = Effect.fn("BrowserRunInteractive.snapshotPolicy")(function* (input) {
604
- const decoded = yield* Schema.decodeUnknownEffect(InteractiveBrowserPolicy)(input).pipe(Effect.mapError(() => policyError("The interactive browser policy is malformed")));
604
+ const decoded = yield* Schema.decodeEffect(InteractiveBrowserPolicy)(input).pipe(Effect.mapError(() => policyError("The interactive browser policy is malformed")));
605
605
  if (decoded.network._tag === "PublicWeb") return yield* InteractiveBrowserUnsupportedError.make({
606
606
  implementation: browserRunInteractiveImplementation,
607
607
  feature: "policy",
@@ -819,7 +819,7 @@ const makeHandle = Effect.fn("BrowserRunInteractive.makeHandle")(function* (page
819
819
  if (Schema.is(InteractiveBrowserActionError)(error) && !isBrowserRunUndispatchedActionError(error)) state.uncertain.value = true;
820
820
  return Effect.fail(failure ?? error);
821
821
  }));
822
- })).pipe(Effect.flatMap((result) => Option.isSome(result) ? Effect.succeed(result.value) : Effect.fail(InteractiveBrowserBusyError.make({
822
+ })).pipe(Effect.flatMap(Effect.fromOption(() => InteractiveBrowserBusyError.make({
823
823
  implementation: browserRunInteractiveImplementation,
824
824
  message: "The browser handle already has an operation in flight"
825
825
  }))));
@@ -848,7 +848,7 @@ const makeHandle = Effect.fn("BrowserRunInteractive.makeHandle")(function* (page
848
848
  observed,
849
849
  message: "The browser returned-text limit was reached"
850
850
  });
851
- return yield* Schema.decodeUnknownEffect(BrowserTextResult)({ text: observation.text }).pipe(Effect.mapError((cause) => protocolError("The browser returned malformed page text", cause)));
851
+ return yield* Schema.decodeEffect(BrowserTextResult)({ text: observation.text }).pipe(Effect.mapError((cause) => protocolError("The browser returned malformed page text", cause)));
852
852
  })),
853
853
  fill: (request) => run(Effect.gen(function* () {
854
854
  const observation = yield* observedAction("fill", (signal, onDispatch) => page.fill(request.selector, request.value, signal, onDispatch)).pipe(Effect.flatMap(decodeActionObservation));
@@ -860,7 +860,7 @@ const makeHandle = Effect.fn("BrowserRunInteractive.makeHandle")(function* (page
860
860
  yield* logActionObservation("click", observation);
861
861
  return yield* decodeActionResult(page, policy);
862
862
  })),
863
- screenshot: (request) => Schema.decodeUnknownEffect(BrowserScreenshotRequest)(request).pipe(Effect.mapError(() => policyError("The browser screenshot request is malformed")), Effect.flatMap((decoded) => run(Effect.gen(function* () {
863
+ screenshot: (request) => Schema.decodeEffect(BrowserScreenshotRequest)(request).pipe(Effect.mapError(() => policyError("The browser screenshot request is malformed")), Effect.flatMap((decoded) => run(Effect.gen(function* () {
864
864
  const raw = yield* remote("screenshot", () => page.screenshot(decoded.fullPage));
865
865
  const bytes = yield* Schema.decodeUnknownEffect(PngBytes)(raw).pipe(Effect.mapError(() => protocolError("The browser returned a malformed PNG screenshot")));
866
866
  if (bytes.length > policy.maxReturnedBytes) return yield* InteractiveBrowserLimitError.make({
@@ -870,13 +870,13 @@ const makeHandle = Effect.fn("BrowserRunInteractive.makeHandle")(function* (page
870
870
  observed: bytes.length,
871
871
  message: "The browser screenshot byte limit was reached"
872
872
  });
873
- return yield* Schema.decodeUnknownEffect(PageScreenshotResult)({
873
+ return yield* Schema.decodeEffect(PageScreenshotResult)({
874
874
  implementation: browserRunInteractiveImplementation,
875
875
  mediaType: "image/png",
876
876
  bytes: new Uint8Array(bytes)
877
877
  }).pipe(Effect.mapError(() => protocolError("The browser returned a malformed PNG screenshot")));
878
878
  }), decodeActionResult(page, policy).pipe(Effect.asVoid)))),
879
- scroll: (request) => Schema.decodeUnknownEffect(BrowserScrollRequest)(request).pipe(Effect.mapError(() => policyError("The browser scroll request is malformed")), Effect.flatMap((decoded) => run(remote("scroll", () => page.scroll(decoded.deltaX, decoded.deltaY)).pipe(Effect.andThen(decodeActionResult(page, policy))), decodeActionResult(page, policy).pipe(Effect.asVoid)))),
879
+ scroll: (request) => Schema.decodeEffect(BrowserScrollRequest)(request).pipe(Effect.mapError(() => policyError("The browser scroll request is malformed")), Effect.flatMap((decoded) => run(remote("scroll", () => page.scroll(decoded.deltaX, decoded.deltaY)).pipe(Effect.andThen(decodeActionResult(page, policy))), decodeActionResult(page, policy).pipe(Effect.asVoid)))),
880
880
  close
881
881
  },
882
882
  run
@@ -1040,15 +1040,15 @@ const makeHostService = (binding) => {
1040
1040
  return protocolError("Resizing the browser viewport failed", cause);
1041
1041
  }
1042
1042
  }), currentPagePreflight, false))),
1043
- getLiveView: (request) => Schema.decodeUnknownEffect(BrowserRunLiveViewRequest)(request).pipe(Effect.mapError(() => policyError("The Live View request is malformed")), Effect.flatMap((decoded) => runtime.run(cdpCommand(page, state, "Cloudflare.getLiveView", {
1043
+ getLiveView: (request) => Schema.decodeEffect(BrowserRunLiveViewRequest)(request).pipe(Effect.mapError(() => policyError("The Live View request is malformed")), Effect.flatMap((decoded) => runtime.run(cdpCommand(page, state, "Cloudflare.getLiveView", {
1044
1044
  mode: decoded.mode,
1045
1045
  expiresInMs: decoded.expiresInMs
1046
- }, LiveViewObservation, "Cloudflare returned a malformed Live View response").pipe(Effect.flatMap((observation) => Schema.decodeUnknownEffect(BrowserRunLiveViewResult)({ devtoolsFrontendUrl: Redacted.make(observation.devtoolsFrontendUrl) }).pipe(Effect.mapError(() => protocolError("Cloudflare returned a malformed Live View response"))))), currentPagePreflight.pipe(Effect.andThen(requestFitsSession(decoded.expiresInMs)))))),
1047
- handoff: (request) => Schema.decodeUnknownEffect(BrowserRunHandoffRequest)(request).pipe(Effect.mapError(() => policyError("The browser handoff request is malformed")), Effect.flatMap((decoded) => runtime.run(cdpCommand(page, state, "Cloudflare.handoff", {
1046
+ }, LiveViewObservation, "Cloudflare returned a malformed Live View response").pipe(Effect.flatMap((observation) => Schema.decodeEffect(BrowserRunLiveViewResult)({ devtoolsFrontendUrl: Redacted.make(observation.devtoolsFrontendUrl) }).pipe(Effect.mapError(() => protocolError("Cloudflare returned a malformed Live View response"))))), currentPagePreflight.pipe(Effect.andThen(requestFitsSession(decoded.expiresInMs)))))),
1047
+ handoff: (request) => Schema.decodeEffect(BrowserRunHandoffRequest)(request).pipe(Effect.mapError(() => policyError("The browser handoff request is malformed")), Effect.flatMap((decoded) => runtime.run(cdpCommand(page, state, "Cloudflare.handoff", {
1048
1048
  instructions: decoded.instructions,
1049
1049
  timeout: decoded.timeout
1050
- }, HandoffObservation, "Cloudflare returned a malformed browser handoff response").pipe(Effect.flatMap((observation) => Schema.decodeUnknownEffect(BrowserRunHandoffResult)({ handoffId: Redacted.make(observation.handoffId) }).pipe(Effect.mapError(() => protocolError("Cloudflare returned a malformed browser handoff response"))))), currentPagePreflight.pipe(Effect.andThen(requestFitsSession(decoded.timeout)))))),
1051
- getHandoffState: runtime.run(cdpCommand(page, state, "Cloudflare.getHandoffState", {}, HandoffStateObservation, "Cloudflare returned a malformed browser handoff state").pipe(Effect.flatMap((observation) => Schema.decodeUnknownEffect(BrowserRunHandoffState)({
1050
+ }, HandoffObservation, "Cloudflare returned a malformed browser handoff response").pipe(Effect.flatMap((observation) => Schema.decodeEffect(BrowserRunHandoffResult)({ handoffId: Redacted.make(observation.handoffId) }).pipe(Effect.mapError(() => protocolError("Cloudflare returned a malformed browser handoff response"))))), currentPagePreflight.pipe(Effect.andThen(requestFitsSession(decoded.timeout)))))),
1051
+ getHandoffState: runtime.run(cdpCommand(page, state, "Cloudflare.getHandoffState", {}, HandoffStateObservation, "Cloudflare returned a malformed browser handoff state").pipe(Effect.flatMap((observation) => Schema.decodeEffect(BrowserRunHandoffState)({
1052
1052
  active: observation.active,
1053
1053
  ...observation.handoffId === void 0 ? {} : { handoffId: Redacted.make(observation.handoffId) },
1054
1054
  ...observation.durationMs === void 0 ? {} : { durationMs: observation.durationMs }