@jakuta-inc/worker-proxy 1.0.0 → 2.1.0

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/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export type { WorkerProxyConfig, ProxyOutcome, ProxyHandler } from "./same-origin-proxy.js";
1
+ export type { WorkerProxyConfig, ProxyOutcome, ProxyHandler, ProxyError } from "./same-origin-proxy.js";
2
2
  export { ADMIN_API_BASE, createProxyHandler } from "./same-origin-proxy.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACxG,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -13,6 +13,16 @@ export type ProxyOutcome = {
13
13
  } | {
14
14
  readonly proxied: false;
15
15
  };
16
+ /**
17
+ * @field kind - Discriminant tag for the error variant
18
+ * @field target - Full URL that the proxy attempted to reach
19
+ * @field backendName - Which backend was unreachable
20
+ */
21
+ export type ProxyError = {
22
+ kind: "backend_unreachable";
23
+ target: string;
24
+ backendName: "venture" | "admin";
25
+ };
16
26
  /**
17
27
  * @field handleRequest - Route an incoming worker request through the proxy, returning a proxied response or fall-through signal
18
28
  */
@@ -1 +1 @@
1
- {"version":3,"file":"same-origin-proxy.d.ts","sourceRoot":"","sources":["../src/same-origin-proxy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,qCAAqC,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAEhC;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9D;AAsED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,YAAY,CA+C/E"}
1
+ {"version":3,"file":"same-origin-proxy.d.ts","sourceRoot":"","sources":["../src/same-origin-proxy.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,cAAc,qCAAqC,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,YAAY,GACpB;IAAE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAA;CAAE,GAC9D;IAAE,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;AAEhC;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,aAAa,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9D;AA8FD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,iBAAiB,GAAG,YAAY,CAiD/E"}
@@ -10,33 +10,48 @@ function jsonErrorResponse(errorInput) {
10
10
  });
11
11
  }
12
12
  async function probeHealth(baseUrl) {
13
+ const probeUrl = new URL("/health", baseUrl).toString();
13
14
  try {
14
- const healthResponse = await fetch(new URL("/health", baseUrl), {
15
+ const healthResponse = await fetch(probeUrl, {
15
16
  signal: AbortSignal.timeout(HEALTH_TIMEOUT_MS),
16
17
  });
17
- return healthResponse.ok ? "ok" : "error";
18
+ return { status: healthResponse.ok ? "ok" : "error", probeUrl };
18
19
  }
19
20
  catch {
20
- return "error";
21
+ return { status: "error", probeUrl };
21
22
  }
22
23
  }
24
+ function stripCookieHeader(original) {
25
+ const stripped = new Headers(original);
26
+ stripped.delete("cookie");
27
+ return stripped;
28
+ }
23
29
  async function forwardToBackend(forwardInput) {
24
30
  const targetUrl = new URL(forwardInput.targetPath + forwardInput.originalUrl.search, forwardInput.targetBase);
31
+ const forwardedHeaders = forwardInput.backendName === "venture"
32
+ ? stripCookieHeader(forwardInput.originalRequest.headers)
33
+ : forwardInput.originalRequest.headers;
25
34
  try {
26
35
  return await fetch(new Request(targetUrl, {
27
36
  method: forwardInput.originalRequest.method,
28
- headers: forwardInput.originalRequest.headers,
37
+ headers: forwardedHeaders,
29
38
  body: forwardInput.originalRequest.body,
30
39
  redirect: "manual",
31
40
  }));
32
41
  }
33
42
  catch {
43
+ const proxyError = {
44
+ kind: "backend_unreachable",
45
+ target: targetUrl.toString(),
46
+ backendName: forwardInput.backendName,
47
+ };
34
48
  return jsonErrorResponse({
35
49
  httpStatus: 502,
36
50
  errorBody: {
37
- error: "proxy_error",
38
- message: "Backend unreachable",
39
- target: targetUrl.toString(),
51
+ error: proxyError.kind,
52
+ target: proxyError.target,
53
+ backend: proxyError.backendName,
54
+ message: `Proxy couldn't reach the ${proxyError.backendName} backend at ${proxyError.target}. Check /_proxy/health to verify both backends are reachable.`,
40
55
  },
41
56
  });
42
57
  }
@@ -58,7 +73,7 @@ export function createProxyHandler(proxyConfig) {
58
73
  probeHealth(adminBase),
59
74
  ]);
60
75
  const healthStatus = { venture, admin };
61
- const allOk = venture === "ok" && admin === "ok";
76
+ const allOk = venture.status === "ok" && admin.status === "ok";
62
77
  const proxiedResponse = new Response(JSON.stringify(healthStatus), {
63
78
  status: allOk ? 200 : 503,
64
79
  headers: { "content-type": "application/json" },
@@ -71,6 +86,7 @@ export function createProxyHandler(proxyConfig) {
71
86
  originalUrl: requestUrl,
72
87
  targetBase: ventureBase,
73
88
  targetPath: pathname,
89
+ backendName: "venture",
74
90
  });
75
91
  return { proxied: true, proxiedResponse };
76
92
  }
@@ -81,6 +97,7 @@ export function createProxyHandler(proxyConfig) {
81
97
  originalUrl: requestUrl,
82
98
  targetBase: adminBase,
83
99
  targetPath: adminPath,
100
+ backendName: "admin",
84
101
  });
85
102
  return { proxied: true, proxiedResponse };
86
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"same-origin-proxy.js","sourceRoot":"","sources":["../src/same-origin-proxy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AA2BjE,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAOD,SAAS,iBAAiB,CAAC,UAAkC;IAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACxD,MAAM,EAAE,UAAU,CAAC,UAAU;QAC7B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe;IACxC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;YAC9D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAC/C,CAAC,CAAC;QACH,OAAO,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AASD,KAAK,UAAU,gBAAgB,CAAC,YAA0B;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,EACzD,YAAY,CAAC,UAAU,CACxB,CAAC;IAEF,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAChB,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,MAAM;YAC3C,OAAO,EAAE,YAAY,CAAC,eAAe,CAAC,OAAO;YAC7C,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,IAAI;YACvC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,iBAAiB,CAAC;YACvB,UAAU,EAAE,GAAG;YACf,SAAS,EAAE;gBACT,KAAK,EAAE,aAAa;gBACpB,OAAO,EAAE,qBAAqB;gBAC9B,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE;aAC7B;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAA8B;IAC/D,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAE/D,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,aAAsB;YACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YAErC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBAClC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACzC,WAAW,CAAC,WAAW,CAAC;oBACxB,WAAW,CAAC,SAAS,CAAC;iBACvB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBACtD,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;gBACjD,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;oBACjE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;oBACzB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC;oBAC7C,eAAe,EAAE,aAAa;oBAC9B,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,QAAQ;iBACrB,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;gBACpC,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC;oBAC7C,eAAe,EAAE,aAAa;oBAC9B,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,SAAS;oBACrB,UAAU,EAAE,SAAS;iBACtB,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"same-origin-proxy.js","sourceRoot":"","sources":["../src/same-origin-proxy.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG,kCAAkC,CAAC;AA2CjE,MAAM,iBAAiB,GAAG,IAAI,CAAC;AAE/B,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AAOD,SAAS,iBAAiB,CAAC,UAAkC;IAC3D,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QACxD,MAAM,EAAE,UAAU,CAAC,UAAU;QAC7B,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;KAChD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,OAAe;IACxC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE;YAC3C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAC/C,CAAC,CAAC;QACH,OAAO,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;IAClE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IACvC,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAiB;IAC1C,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAUD,KAAK,UAAU,gBAAgB,CAAC,YAA0B;IACxD,MAAM,SAAS,GAAG,IAAI,GAAG,CACvB,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,MAAM,EACzD,YAAY,CAAC,UAAU,CACxB,CAAC;IAEF,MAAM,gBAAgB,GACpB,YAAY,CAAC,WAAW,KAAK,SAAS;QACpC,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC;QACzD,CAAC,CAAC,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC;IAE3C,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAChB,IAAI,OAAO,CAAC,SAAS,EAAE;YACrB,MAAM,EAAE,YAAY,CAAC,eAAe,CAAC,MAAM;YAC3C,OAAO,EAAE,gBAAgB;YACzB,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,IAAI;YACvC,QAAQ,EAAE,QAAQ;SACnB,CAAC,CACH,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,qBAAqB;YAC3B,MAAM,EAAE,SAAS,CAAC,QAAQ,EAAE;YAC5B,WAAW,EAAE,YAAY,CAAC,WAAW;SACtC,CAAC;QACF,OAAO,iBAAiB,CAAC;YACvB,UAAU,EAAE,GAAG;YACf,SAAS,EAAE;gBACT,KAAK,EAAE,UAAU,CAAC,IAAI;gBACtB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,UAAU,CAAC,WAAW;gBAC/B,OAAO,EAAE,4BAA4B,UAAU,CAAC,WAAW,eAAe,UAAU,CAAC,MAAM,+DAA+D;aAC3J;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAA8B;IAC/D,MAAM,WAAW,GAAG,kBAAkB,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IACnE,MAAM,SAAS,GAAG,kBAAkB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAE/D,OAAO;QACL,KAAK,CAAC,aAAa,CAAC,aAAsB;YACxC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;YAC9C,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC;YAErC,IAAI,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBAClC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;oBACzC,WAAW,CAAC,WAAW,CAAC;oBACxB,WAAW,CAAC,SAAS,CAAC;iBACvB,CAAC,CAAC;gBACH,MAAM,YAAY,GAAiB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;gBACtD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC;gBAC/D,MAAM,eAAe,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,EAAE;oBACjE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;oBACzB,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;iBAChD,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC;oBAC7C,eAAe,EAAE,aAAa;oBAC9B,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,WAAW;oBACvB,UAAU,EAAE,QAAQ;oBACpB,WAAW,EAAE,SAAS;iBACvB,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1D,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;gBACpC,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC;oBAC7C,eAAe,EAAE,aAAa;oBAC9B,WAAW,EAAE,UAAU;oBACvB,UAAU,EAAE,SAAS;oBACrB,UAAU,EAAE,SAAS;oBACrB,WAAW,EAAE,OAAO;iBACrB,CAAC,CAAC;gBACH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;YAC5C,CAAC;YAED,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=same-origin-proxy.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same-origin-proxy.test.d.ts","sourceRoot":"","sources":["../src/same-origin-proxy.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,194 @@
1
+ import { describe, it, expect, vi, beforeEach } from "vitest";
2
+ import { createProxyHandler } from "./same-origin-proxy";
3
+ const VENTURE_BASE = "https://venture.fly.dev";
4
+ const ADMIN_BASE = "https://admin.fly.dev";
5
+ function makeHandler() {
6
+ return createProxyHandler({
7
+ ventureApiBase: VENTURE_BASE,
8
+ adminApiBase: ADMIN_BASE,
9
+ });
10
+ }
11
+ function makeHandlerWithTrailingSlash() {
12
+ return createProxyHandler({
13
+ ventureApiBase: "https://venture.fly.dev/",
14
+ adminApiBase: ADMIN_BASE,
15
+ });
16
+ }
17
+ function stubFetchOk() {
18
+ const fetchSpy = vi.fn().mockResolvedValue(new Response("ok"));
19
+ vi.stubGlobal("fetch", fetchSpy);
20
+ return fetchSpy;
21
+ }
22
+ function stubFetchError() {
23
+ const fetchSpy = vi.fn().mockRejectedValue(new TypeError("fetch failed"));
24
+ vi.stubGlobal("fetch", fetchSpy);
25
+ return fetchSpy;
26
+ }
27
+ function stubFetchHealthOk() {
28
+ const fetchSpy = vi.fn().mockResolvedValue(new Response(JSON.stringify({ status: "ok" }), { status: 200 }));
29
+ vi.stubGlobal("fetch", fetchSpy);
30
+ return fetchSpy;
31
+ }
32
+ function extractForwardedUrl(fetchSpy) {
33
+ const firstCallFirstArg = fetchSpy.mock.calls[0][0];
34
+ return firstCallFirstArg.url;
35
+ }
36
+ beforeEach(() => {
37
+ vi.restoreAllMocks();
38
+ });
39
+ describe("venture backend routing (/api/*)", () => {
40
+ it("forwards /api/catalog to ventureApiBase/api/catalog", async () => {
41
+ const fetchSpy = stubFetchOk();
42
+ const handler = makeHandler();
43
+ const result = await handler.handleRequest(new Request("https://example.com/api/catalog"));
44
+ expect(result.proxied).toBe(true);
45
+ expect(fetchSpy).toHaveBeenCalledOnce();
46
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://venture.fly.dev/api/catalog");
47
+ });
48
+ it("forwards /api/admin/indices without double /api", async () => {
49
+ const fetchSpy = stubFetchOk();
50
+ const handler = makeHandler();
51
+ await handler.handleRequest(new Request("https://example.com/api/admin/indices"));
52
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://venture.fly.dev/api/admin/indices");
53
+ });
54
+ it("preserves query string on /api/* routes", async () => {
55
+ const fetchSpy = stubFetchOk();
56
+ const handler = makeHandler();
57
+ await handler.handleRequest(new Request("https://example.com/api/catalog?page=2"));
58
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://venture.fly.dev/api/catalog?page=2");
59
+ });
60
+ it("returns 502 with backend_unreachable when venture fetch throws", async () => {
61
+ stubFetchError();
62
+ const handler = makeHandler();
63
+ const result = await handler.handleRequest(new Request("https://example.com/api/catalog"));
64
+ expect(result.proxied).toBe(true);
65
+ if (!result.proxied)
66
+ return;
67
+ expect(result.proxiedResponse.status).toBe(502);
68
+ const body = await result.proxiedResponse.json();
69
+ expect(body.error).toBe("backend_unreachable");
70
+ expect(body.backend).toBe("venture");
71
+ });
72
+ });
73
+ describe("admin backend routing (/auth/*)", () => {
74
+ it("rewrites /auth/session to adminApiBase/api/auth/session", async () => {
75
+ const fetchSpy = stubFetchOk();
76
+ const handler = makeHandler();
77
+ await handler.handleRequest(new Request("https://example.com/auth/session"));
78
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://admin.fly.dev/api/auth/session");
79
+ });
80
+ it("rewrites /auth/login to adminApiBase/api/auth/login", async () => {
81
+ const fetchSpy = stubFetchOk();
82
+ const handler = makeHandler();
83
+ await handler.handleRequest(new Request("https://example.com/auth/login"));
84
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://admin.fly.dev/api/auth/login");
85
+ });
86
+ it("rewrites /auth/logout to adminApiBase/api/auth/logout", async () => {
87
+ const fetchSpy = stubFetchOk();
88
+ const handler = makeHandler();
89
+ await handler.handleRequest(new Request("https://example.com/auth/logout"));
90
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://admin.fly.dev/api/auth/logout");
91
+ });
92
+ it("preserves query string on /auth/* routes", async () => {
93
+ const fetchSpy = stubFetchOk();
94
+ const handler = makeHandler();
95
+ await handler.handleRequest(new Request("https://example.com/auth/session?foo=bar"));
96
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://admin.fly.dev/api/auth/session?foo=bar");
97
+ });
98
+ it("returns 502 with backend=admin when admin fetch throws", async () => {
99
+ stubFetchError();
100
+ const handler = makeHandler();
101
+ const result = await handler.handleRequest(new Request("https://example.com/auth/session"));
102
+ expect(result.proxied).toBe(true);
103
+ if (!result.proxied)
104
+ return;
105
+ expect(result.proxiedResponse.status).toBe(502);
106
+ const body = await result.proxiedResponse.json();
107
+ expect(body.error).toBe("backend_unreachable");
108
+ expect(body.backend).toBe("admin");
109
+ });
110
+ });
111
+ describe("trailing slash on config base URLs", () => {
112
+ it("strips trailing slash from ventureApiBase", async () => {
113
+ const fetchSpy = stubFetchOk();
114
+ const handler = makeHandlerWithTrailingSlash();
115
+ await handler.handleRequest(new Request("https://example.com/api/catalog"));
116
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://venture.fly.dev/api/catalog");
117
+ });
118
+ });
119
+ describe("non-proxied routes", () => {
120
+ it("returns proxied: false for /", async () => {
121
+ const handler = makeHandler();
122
+ const result = await handler.handleRequest(new Request("https://example.com/"));
123
+ expect(result.proxied).toBe(false);
124
+ });
125
+ it("returns proxied: false for /dashboard", async () => {
126
+ const handler = makeHandler();
127
+ const result = await handler.handleRequest(new Request("https://example.com/dashboard"));
128
+ expect(result.proxied).toBe(false);
129
+ });
130
+ });
131
+ describe("cookie stripping on venture requests", () => {
132
+ function extractForwardedRequest(fetchSpy) {
133
+ return fetchSpy.mock.calls[0][0];
134
+ }
135
+ it("strips the cookie header on venture /api/* requests", async () => {
136
+ const fetchSpy = stubFetchOk();
137
+ const handler = makeHandler();
138
+ await handler.handleRequest(new Request("https://example.com/api/catalog", {
139
+ headers: { cookie: "admin_session=abc123" },
140
+ }));
141
+ const forwardedRequest = extractForwardedRequest(fetchSpy);
142
+ expect(forwardedRequest.headers.has("cookie")).toBe(false);
143
+ });
144
+ it("preserves the cookie header on admin /auth/* requests", async () => {
145
+ const fetchSpy = stubFetchOk();
146
+ const handler = makeHandler();
147
+ await handler.handleRequest(new Request("https://example.com/auth/session", {
148
+ headers: { cookie: "admin_session=abc123" },
149
+ }));
150
+ const forwardedRequest = extractForwardedRequest(fetchSpy);
151
+ expect(forwardedRequest.headers.get("cookie")).toBe("admin_session=abc123");
152
+ });
153
+ it("strips cookie but preserves other headers on venture requests", async () => {
154
+ const fetchSpy = stubFetchOk();
155
+ const handler = makeHandler();
156
+ await handler.handleRequest(new Request("https://example.com/api/catalog", {
157
+ headers: {
158
+ cookie: "admin_session=abc123",
159
+ "x-request-id": "test-123",
160
+ "content-type": "application/json",
161
+ },
162
+ }));
163
+ const forwardedRequest = extractForwardedRequest(fetchSpy);
164
+ expect(forwardedRequest.headers.has("cookie")).toBe(false);
165
+ expect(forwardedRequest.headers.get("x-request-id")).toBe("test-123");
166
+ expect(forwardedRequest.headers.get("content-type")).toBe("application/json");
167
+ });
168
+ it("forwards venture requests without errors when no cookie header is present", async () => {
169
+ const fetchSpy = stubFetchOk();
170
+ const handler = makeHandler();
171
+ const result = await handler.handleRequest(new Request("https://example.com/api/catalog"));
172
+ expect(result.proxied).toBe(true);
173
+ expect(fetchSpy).toHaveBeenCalledOnce();
174
+ expect(extractForwardedUrl(fetchSpy)).toBe("https://venture.fly.dev/api/catalog");
175
+ const forwardedRequest = extractForwardedRequest(fetchSpy);
176
+ expect(forwardedRequest.headers.has("cookie")).toBe(false);
177
+ });
178
+ });
179
+ describe("/_proxy/health", () => {
180
+ it("returns proxied: true with health JSON", async () => {
181
+ stubFetchHealthOk();
182
+ const handler = makeHandler();
183
+ const result = await handler.handleRequest(new Request("https://example.com/_proxy/health"));
184
+ expect(result.proxied).toBe(true);
185
+ if (!result.proxied)
186
+ return;
187
+ const body = await result.proxiedResponse.json();
188
+ expect(body).toHaveProperty("venture");
189
+ expect(body).toHaveProperty("admin");
190
+ expect(body.venture.status).toBe("ok");
191
+ expect(body.admin.status).toBe("ok");
192
+ });
193
+ });
194
+ //# sourceMappingURL=same-origin-proxy.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"same-origin-proxy.test.js","sourceRoot":"","sources":["../src/same-origin-proxy.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,YAAY,GAAG,yBAAyB,CAAC;AAC/C,MAAM,UAAU,GAAG,uBAAuB,CAAC;AAE3C,SAAS,WAAW;IAClB,OAAO,kBAAkB,CAAC;QACxB,cAAc,EAAE,YAAY;QAC5B,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,4BAA4B;IACnC,OAAO,kBAAkB,CAAC;QACxB,cAAc,EAAE,0BAA0B;QAC1C,YAAY,EAAE,UAAU;KACzB,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;IAC/D,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1E,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,iBAAiB,CACxC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAChE,CAAC;IACF,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAkC;IAC7D,MAAM,iBAAiB,GAAY,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,iBAAiB,CAAC,GAAG,CAAC;AAC/B,CAAC;AAED,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,eAAe,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACxC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAElF,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;IAC1F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAEnF,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE3F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAC5B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE7E,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IACvF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE3E,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;IACtF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,0CAA0C,CAAC,CAAC,CAAC;QAErF,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IAC/F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAE5F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAC5B,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oCAAoC,EAAE,GAAG,EAAE;IAClD,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,4BAA4B,EAAE,CAAC;QAC/C,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC;QAE5E,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC;QAChF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACzF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;IACpD,SAAS,uBAAuB,CAAC,QAAkC;QACjE,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,EAAE,CAAC,qDAAqD,EAAE,KAAK,IAAI,EAAE;QACnE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CACzB,IAAI,OAAO,CAAC,iCAAiC,EAAE;YAC7C,OAAO,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE;SAC5C,CAAC,CACH,CAAC;QAEF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CACzB,IAAI,OAAO,CAAC,kCAAkC,EAAE;YAC9C,OAAO,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE;SAC5C,CAAC,CACH,CAAC;QAEF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,OAAO,CAAC,aAAa,CACzB,IAAI,OAAO,CAAC,iCAAiC,EAAE;YAC7C,OAAO,EAAE;gBACP,MAAM,EAAE,sBAAsB;gBAC9B,cAAc,EAAE,UAAU;gBAC1B,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CACH,CAAC;QAEF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CACxC,IAAI,OAAO,CAAC,iCAAiC,CAAC,CAC/C,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,EAAE,CAAC;QACxC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QAClF,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAC3D,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,iBAAiB,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAE7F,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO;QAC5B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jakuta-inc/worker-proxy",
3
- "version": "1.0.0",
3
+ "version": "2.1.0",
4
4
  "description": "Same-origin reverse proxy for Jakuta admin panel Cloudflare Workers",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -10,7 +10,8 @@
10
10
  ],
11
11
  "scripts": {
12
12
  "build": "tsc",
13
- "prepublishOnly": "tsc"
13
+ "prepublishOnly": "tsc",
14
+ "test": "vitest run"
14
15
  },
15
16
  "publishConfig": {
16
17
  "access": "restricted"