@giselles-ai/browser-tool 0.1.8 → 0.1.10

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.
@@ -3,6 +3,7 @@ import Redis from 'ioredis';
3
3
  declare function createRelayHandler(): {
4
4
  GET: (request: Request) => Promise<Response>;
5
5
  POST: (request: Request) => Promise<Response>;
6
+ OPTIONS: (request: Request) => Response;
6
7
  };
7
8
 
8
9
  type RelayErrorCode = "UNAUTHORIZED" | "NO_BROWSER" | "TIMEOUT" | "INVALID_RESPONSE" | "NOT_FOUND" | "INTERNAL";
@@ -532,6 +532,15 @@ function toRelayError(error) {
532
532
 
533
533
  // src/relay/relay-handler.ts
534
534
  var LOG_PREFIX = "[relay-handler]";
535
+ function corsHeaders(request) {
536
+ const origin = request.headers.get("origin");
537
+ return {
538
+ "Access-Control-Allow-Origin": origin || "*",
539
+ "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
540
+ "Access-Control-Allow-Headers": "Content-Type, Authorization, x-vercel-protection-bypass, x-giselle-protection-bypass",
541
+ "Access-Control-Max-Age": "86400"
542
+ };
543
+ }
535
544
  var dispatchSchema = z2.object({
536
545
  type: z2.literal("relay.dispatch"),
537
546
  sessionId: z2.string().min(1),
@@ -549,10 +558,8 @@ var postBodySchema = z2.discriminatedUnion("type", [
549
558
  dispatchSchema,
550
559
  respondSchema
551
560
  ]);
552
- function createSafeError(code, message, status) {
553
- return Response.json({ ok: false, errorCode: code, message }, { status });
554
- }
555
561
  function createRelayEventsRoute(request) {
562
+ const cors = corsHeaders(request);
556
563
  const url = new URL(request.url);
557
564
  const sessionId = url.searchParams.get("sessionId") ?? "";
558
565
  const token = url.searchParams.get("token") ?? "";
@@ -563,7 +570,7 @@ function createRelayEventsRoute(request) {
563
570
  errorCode: "UNAUTHORIZED",
564
571
  message: "sessionId and token are required."
565
572
  },
566
- { status: 401 }
573
+ { status: 401, headers: cors }
567
574
  )
568
575
  );
569
576
  }
@@ -687,7 +694,8 @@ data: ${rawJson}
687
694
  "Cache-Control": "no-cache, no-transform",
688
695
  Connection: "keep-alive",
689
696
  "X-Accel-Buffering": "no",
690
- "Content-Encoding": "none"
697
+ "Content-Encoding": "none",
698
+ ...cors
691
699
  }
692
700
  });
693
701
  }).catch((error) => {
@@ -701,15 +709,23 @@ data: ${rawJson}
701
709
  errorCode: relayError.code,
702
710
  message: relayError.message
703
711
  },
704
- { status: relayError.status }
712
+ { status: relayError.status, headers: cors }
705
713
  );
706
714
  });
707
715
  }
708
716
  async function createRelayPostRoute(request) {
717
+ const cors = corsHeaders(request);
709
718
  const payload = await request.json().catch(() => null);
710
719
  const parsed = postBodySchema.safeParse(payload);
711
720
  if (!parsed.success) {
712
- return createSafeError("INVALID_RESPONSE", "Invalid request payload.", 400);
721
+ return Response.json(
722
+ {
723
+ ok: false,
724
+ errorCode: "INVALID_RESPONSE",
725
+ message: "Invalid request payload."
726
+ },
727
+ { status: 400, headers: cors }
728
+ );
713
729
  }
714
730
  if (parsed.data.type === "relay.dispatch") {
715
731
  try {
@@ -719,13 +735,12 @@ async function createRelayPostRoute(request) {
719
735
  request: parsed.data.request,
720
736
  timeoutMs: parsed.data.timeoutMs
721
737
  });
722
- return Response.json({ ok: true, response });
738
+ return Response.json({ ok: true, response }, { headers: cors });
723
739
  } catch (error) {
724
740
  const relayError = toRelayError(error);
725
- return createSafeError(
726
- relayError.code,
727
- relayError.message,
728
- relayError.status
741
+ return Response.json(
742
+ { ok: false, errorCode: relayError.code, message: relayError.message },
743
+ { status: relayError.status, headers: cors }
729
744
  );
730
745
  }
731
746
  }
@@ -735,20 +750,20 @@ async function createRelayPostRoute(request) {
735
750
  token: parsed.data.token,
736
751
  response: parsed.data.response
737
752
  });
738
- return Response.json({ ok: true });
753
+ return Response.json({ ok: true }, { headers: cors });
739
754
  } catch (error) {
740
755
  const relayError = toRelayError(error);
741
- return createSafeError(
742
- relayError.code,
743
- relayError.message,
744
- relayError.status
756
+ return Response.json(
757
+ { ok: false, errorCode: relayError.code, message: relayError.message },
758
+ { status: relayError.status, headers: cors }
745
759
  );
746
760
  }
747
761
  }
748
762
  function createRelayHandler() {
749
763
  return {
750
764
  GET: async (request) => createRelayEventsRoute(request),
751
- POST: createRelayPostRoute
765
+ POST: createRelayPostRoute,
766
+ OPTIONS: (request) => new Response(null, { status: 204, headers: corsHeaders(request) })
752
767
  };
753
768
  }
754
769
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@giselles-ai/browser-tool",
3
- "version": "0.1.8",
3
+ "version": "0.1.10",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "license": "Apache-2.0",