@rebasepro/server-core 0.0.1-canary.f81da60 → 0.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.
Files changed (108) hide show
  1. package/app/frontend/node_modules/esbuild/LICENSE.md +21 -0
  2. package/app/frontend/node_modules/esbuild/README.md +3 -0
  3. package/app/frontend/node_modules/esbuild/bin/esbuild +220 -0
  4. package/app/frontend/node_modules/esbuild/install.js +285 -0
  5. package/app/frontend/node_modules/esbuild/lib/main.d.ts +705 -0
  6. package/app/frontend/node_modules/esbuild/lib/main.js +2239 -0
  7. package/app/frontend/node_modules/esbuild/package.json +46 -0
  8. package/dist/index.es.js +140 -28
  9. package/dist/index.es.js.map +1 -1
  10. package/dist/index.umd.js +140 -28
  11. package/dist/index.umd.js.map +1 -1
  12. package/dist/server-core/src/auth/google-oauth.d.ts +33 -3
  13. package/dist/server-core/src/auth/index.d.ts +1 -0
  14. package/dist/server-core/src/init.d.ts +1 -0
  15. package/dist/types/src/controllers/auth.d.ts +8 -2
  16. package/dist/types/src/controllers/client.d.ts +13 -0
  17. package/dist/types/src/controllers/navigation.d.ts +18 -6
  18. package/dist/types/src/controllers/registry.d.ts +9 -1
  19. package/dist/types/src/controllers/side_entity_controller.d.ts +7 -0
  20. package/dist/types/src/rebase_context.d.ts +17 -0
  21. package/dist/types/src/types/collections.d.ts +20 -1
  22. package/dist/types/src/types/component_ref.d.ts +47 -0
  23. package/dist/types/src/types/entity_views.d.ts +2 -1
  24. package/dist/types/src/types/index.d.ts +1 -0
  25. package/dist/types/src/types/properties.d.ts +15 -3
  26. package/dist/types/src/types/translations.d.ts +2 -0
  27. package/examples/firebase/node_modules/esbuild/LICENSE.md +21 -0
  28. package/examples/firebase/node_modules/esbuild/README.md +3 -0
  29. package/examples/firebase/node_modules/esbuild/bin/esbuild +220 -0
  30. package/examples/firebase/node_modules/esbuild/install.js +285 -0
  31. package/examples/firebase/node_modules/esbuild/lib/main.d.ts +705 -0
  32. package/examples/firebase/node_modules/esbuild/lib/main.js +2239 -0
  33. package/examples/firebase/node_modules/esbuild/package.json +46 -0
  34. package/examples/medmot-staging/frontend/node_modules/esbuild/LICENSE.md +21 -0
  35. package/examples/medmot-staging/frontend/node_modules/esbuild/README.md +3 -0
  36. package/examples/medmot-staging/frontend/node_modules/esbuild/bin/esbuild +220 -0
  37. package/examples/medmot-staging/frontend/node_modules/esbuild/install.js +285 -0
  38. package/examples/medmot-staging/frontend/node_modules/esbuild/lib/main.d.ts +705 -0
  39. package/examples/medmot-staging/frontend/node_modules/esbuild/lib/main.js +2239 -0
  40. package/examples/medmot-staging/frontend/node_modules/esbuild/package.json +46 -0
  41. package/examples/sdk-demo/node_modules/esbuild/LICENSE.md +21 -0
  42. package/examples/sdk-demo/node_modules/esbuild/README.md +3 -0
  43. package/examples/sdk-demo/node_modules/esbuild/bin/esbuild +223 -0
  44. package/examples/sdk-demo/node_modules/esbuild/install.js +289 -0
  45. package/examples/sdk-demo/node_modules/esbuild/lib/main.d.ts +716 -0
  46. package/examples/sdk-demo/node_modules/esbuild/lib/main.js +2242 -0
  47. package/examples/sdk-demo/node_modules/esbuild/package.json +49 -0
  48. package/package.json +7 -7
  49. package/packages/client/node_modules/esbuild/LICENSE.md +21 -0
  50. package/packages/client/node_modules/esbuild/README.md +3 -0
  51. package/packages/client/node_modules/esbuild/bin/esbuild +220 -0
  52. package/packages/client/node_modules/esbuild/install.js +285 -0
  53. package/packages/client/node_modules/esbuild/lib/main.d.ts +705 -0
  54. package/packages/client/node_modules/esbuild/lib/main.js +2239 -0
  55. package/packages/client/node_modules/esbuild/package.json +46 -0
  56. package/packages/client-postgresql/node_modules/esbuild/LICENSE.md +21 -0
  57. package/packages/client-postgresql/node_modules/esbuild/README.md +3 -0
  58. package/packages/client-postgresql/node_modules/esbuild/bin/esbuild +220 -0
  59. package/packages/client-postgresql/node_modules/esbuild/install.js +285 -0
  60. package/packages/client-postgresql/node_modules/esbuild/lib/main.d.ts +705 -0
  61. package/packages/client-postgresql/node_modules/esbuild/lib/main.js +2239 -0
  62. package/packages/client-postgresql/node_modules/esbuild/package.json +46 -0
  63. package/packages/common/node_modules/esbuild/LICENSE.md +21 -0
  64. package/packages/common/node_modules/esbuild/README.md +3 -0
  65. package/packages/common/node_modules/esbuild/bin/esbuild +220 -0
  66. package/packages/common/node_modules/esbuild/install.js +285 -0
  67. package/packages/common/node_modules/esbuild/lib/main.d.ts +705 -0
  68. package/packages/common/node_modules/esbuild/lib/main.js +2239 -0
  69. package/packages/common/node_modules/esbuild/package.json +46 -0
  70. package/packages/server-mongodb/node_modules/esbuild/LICENSE.md +21 -0
  71. package/packages/server-mongodb/node_modules/esbuild/README.md +3 -0
  72. package/packages/server-mongodb/node_modules/esbuild/bin/esbuild +220 -0
  73. package/packages/server-mongodb/node_modules/esbuild/install.js +285 -0
  74. package/packages/server-mongodb/node_modules/esbuild/lib/main.d.ts +705 -0
  75. package/packages/server-mongodb/node_modules/esbuild/lib/main.js +2239 -0
  76. package/packages/server-mongodb/node_modules/esbuild/package.json +46 -0
  77. package/packages/server-postgresql/node_modules/esbuild/LICENSE.md +21 -0
  78. package/packages/server-postgresql/node_modules/esbuild/README.md +3 -0
  79. package/packages/server-postgresql/node_modules/esbuild/bin/esbuild +220 -0
  80. package/packages/server-postgresql/node_modules/esbuild/install.js +285 -0
  81. package/packages/server-postgresql/node_modules/esbuild/lib/main.d.ts +705 -0
  82. package/packages/server-postgresql/node_modules/esbuild/lib/main.js +2239 -0
  83. package/packages/server-postgresql/node_modules/esbuild/package.json +46 -0
  84. package/packages/types/node_modules/esbuild/LICENSE.md +21 -0
  85. package/packages/types/node_modules/esbuild/README.md +3 -0
  86. package/packages/types/node_modules/esbuild/bin/esbuild +220 -0
  87. package/packages/types/node_modules/esbuild/install.js +285 -0
  88. package/packages/types/node_modules/esbuild/lib/main.d.ts +705 -0
  89. package/packages/types/node_modules/esbuild/lib/main.js +2239 -0
  90. package/packages/types/node_modules/esbuild/package.json +46 -0
  91. package/packages/utils/node_modules/esbuild/LICENSE.md +21 -0
  92. package/packages/utils/node_modules/esbuild/README.md +3 -0
  93. package/packages/utils/node_modules/esbuild/bin/esbuild +220 -0
  94. package/packages/utils/node_modules/esbuild/install.js +285 -0
  95. package/packages/utils/node_modules/esbuild/lib/main.d.ts +705 -0
  96. package/packages/utils/node_modules/esbuild/lib/main.js +2239 -0
  97. package/packages/utils/node_modules/esbuild/package.json +46 -0
  98. package/src/api/errors.ts +3 -2
  99. package/src/api/server.ts +5 -2
  100. package/src/auth/google-oauth.ts +148 -17
  101. package/src/auth/index.ts +1 -0
  102. package/src/auth/routes.ts +25 -5
  103. package/src/collections/loader.ts +3 -3
  104. package/src/init.ts +14 -2
  105. package/history_diff.log +0 -385
  106. package/scratch.ts +0 -9
  107. package/test-ast.ts +0 -28
  108. package/test_output.txt +0 -1133
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "esbuild",
3
+ "version": "0.21.5",
4
+ "description": "An extremely fast JavaScript and CSS bundler and minifier.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/evanw/esbuild.git"
8
+ },
9
+ "scripts": {
10
+ "postinstall": "node install.js"
11
+ },
12
+ "main": "lib/main.js",
13
+ "types": "lib/main.d.ts",
14
+ "engines": {
15
+ "node": ">=12"
16
+ },
17
+ "bin": {
18
+ "esbuild": "bin/esbuild"
19
+ },
20
+ "optionalDependencies": {
21
+ "@esbuild/aix-ppc64": "0.21.5",
22
+ "@esbuild/android-arm": "0.21.5",
23
+ "@esbuild/android-arm64": "0.21.5",
24
+ "@esbuild/android-x64": "0.21.5",
25
+ "@esbuild/darwin-arm64": "0.21.5",
26
+ "@esbuild/darwin-x64": "0.21.5",
27
+ "@esbuild/freebsd-arm64": "0.21.5",
28
+ "@esbuild/freebsd-x64": "0.21.5",
29
+ "@esbuild/linux-arm": "0.21.5",
30
+ "@esbuild/linux-arm64": "0.21.5",
31
+ "@esbuild/linux-ia32": "0.21.5",
32
+ "@esbuild/linux-loong64": "0.21.5",
33
+ "@esbuild/linux-mips64el": "0.21.5",
34
+ "@esbuild/linux-ppc64": "0.21.5",
35
+ "@esbuild/linux-riscv64": "0.21.5",
36
+ "@esbuild/linux-s390x": "0.21.5",
37
+ "@esbuild/linux-x64": "0.21.5",
38
+ "@esbuild/netbsd-x64": "0.21.5",
39
+ "@esbuild/openbsd-x64": "0.21.5",
40
+ "@esbuild/sunos-x64": "0.21.5",
41
+ "@esbuild/win32-arm64": "0.21.5",
42
+ "@esbuild/win32-ia32": "0.21.5",
43
+ "@esbuild/win32-x64": "0.21.5"
44
+ },
45
+ "license": "MIT"
46
+ }
package/dist/index.es.js CHANGED
@@ -1020,7 +1020,8 @@ var object_hash = { exports: {} };
1020
1020
  }, { buffer: 3, lYpoI2: 11 }] }, {}, [1])(1);
1021
1021
  });
1022
1022
  })(object_hash);
1023
- const snakeCaseRegex = /[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g;
1023
+ const tokenizeRegex = /[A-Z]{2,}(?=[A-Z][a-z]|\b)|[A-Z]?[a-z]+|[0-9]+(?:[a-z](?![a-z]))?|[A-Z]/g;
1024
+ const snakeCaseRegex = tokenizeRegex;
1024
1025
  const toSnakeCase = (str) => {
1025
1026
  const regExpMatchArray = str.match(snakeCaseRegex);
1026
1027
  if (!regExpMatchArray) return "";
@@ -3474,8 +3475,7 @@ async function loadCollectionsFromDirectory(directory) {
3474
3475
  const filePath = path$3.join(directory, file);
3475
3476
  try {
3476
3477
  const fileUrl = pathToFileURL(filePath).href;
3477
- const dynamicImport = new Function("url", "return import(url)");
3478
- const module = await dynamicImport(fileUrl);
3478
+ const module = await import(fileUrl);
3479
3479
  if (module && module.default) {
3480
3480
  collections.push(module.default);
3481
3481
  } else {
@@ -3633,7 +3633,8 @@ const errorHandler = (err, c) => {
3633
3633
  console.error(`❌ [API] ${c.req.method} ${c.req.path} → ${statusCode} ${code2}: ${logMessage}`);
3634
3634
  const causePg = error2.cause && typeof error2.cause === "object" ? error2.cause : void 0;
3635
3635
  const pgErrorCode = causePg?.code || error2.code;
3636
- if (pgErrorCode !== "42703" && pgErrorCode !== "42P01") {
3636
+ const suppressStack = pgErrorCode === "42703" || pgErrorCode === "42P01" || statusCode < 500 && code2 === "BAD_REQUEST";
3637
+ if (!suppressStack) {
3637
3638
  console.error(error2.stack || error2);
3638
3639
  }
3639
3640
  let clientMessage = "An unexpected error occurred";
@@ -21632,15 +21633,19 @@ ZodEnum.create;
21632
21633
  ZodPromise.create;
21633
21634
  ZodOptional.create;
21634
21635
  ZodNullable.create;
21635
- function createGoogleProvider(clientId) {
21636
- const googleClient = new src$4.OAuth2Client(clientId);
21636
+ function createGoogleProvider(config) {
21637
+ const clientId = typeof config === "string" ? config : config.clientId;
21638
+ const clientSecret = typeof config === "string" ? void 0 : config.clientSecret;
21639
+ const googleClient = new src$4.OAuth2Client(clientId, clientSecret);
21637
21640
  return {
21638
21641
  id: "google",
21639
21642
  schema: objectType({
21640
21643
  idToken: stringType().min(1).optional(),
21641
- accessToken: stringType().min(1).optional()
21642
- }).refine((data) => data.idToken || data.accessToken, {
21643
- message: "Either idToken or accessToken is required"
21644
+ accessToken: stringType().min(1).optional(),
21645
+ code: stringType().min(1).optional(),
21646
+ redirectUri: stringType().min(1).optional()
21647
+ }).refine((data) => data.idToken || data.accessToken || data.code && data.redirectUri, {
21648
+ message: "One of idToken, accessToken, or code+redirectUri is required"
21644
21649
  }),
21645
21650
  verify: async (payload) => {
21646
21651
  try {
@@ -21651,7 +21656,7 @@ function createGoogleProvider(clientId) {
21651
21656
  });
21652
21657
  const content = ticket.getPayload();
21653
21658
  if (!content) {
21654
- return null;
21659
+ throw new Error("Google ID token payload was empty");
21655
21660
  }
21656
21661
  return {
21657
21662
  providerId: content.sub,
@@ -21667,12 +21672,11 @@ function createGoogleProvider(clientId) {
21667
21672
  }
21668
21673
  });
21669
21674
  if (!res.ok) {
21670
- console.error("Google userinfo request failed:", res.status);
21671
- return null;
21675
+ throw new Error(`Google userinfo request failed with status ${res.status}`);
21672
21676
  }
21673
21677
  const info = await res.json();
21674
21678
  if (!info.sub || !info.email) {
21675
- return null;
21679
+ throw new Error("Google userinfo response missing sub or email");
21676
21680
  }
21677
21681
  return {
21678
21682
  providerId: info.sub,
@@ -21681,10 +21685,73 @@ function createGoogleProvider(clientId) {
21681
21685
  photoUrl: info.picture || null
21682
21686
  };
21683
21687
  }
21684
- return null;
21688
+ if (payload.code && payload.redirectUri) {
21689
+ if (!clientSecret) {
21690
+ throw new Error("Google authorization code flow requires clientSecret. Configure GOOGLE_CLIENT_SECRET in your environment.");
21691
+ }
21692
+ const tokenResponse = await fetch("https://oauth2.googleapis.com/token", {
21693
+ method: "POST",
21694
+ headers: {
21695
+ "Content-Type": "application/x-www-form-urlencoded"
21696
+ },
21697
+ body: new URLSearchParams({
21698
+ code: payload.code,
21699
+ client_id: clientId,
21700
+ client_secret: clientSecret,
21701
+ redirect_uri: payload.redirectUri,
21702
+ grant_type: "authorization_code"
21703
+ })
21704
+ });
21705
+ if (!tokenResponse.ok) {
21706
+ const errorBody = await tokenResponse.text();
21707
+ throw new Error(`Google token exchange failed (${tokenResponse.status}): ${errorBody}`);
21708
+ }
21709
+ const tokenData = await tokenResponse.json();
21710
+ if (tokenData.error) {
21711
+ throw new Error(`Google token exchange error: ${tokenData.error} – ${tokenData.error_description || "no details"}`);
21712
+ }
21713
+ if (tokenData.id_token) {
21714
+ const ticket = await googleClient.verifyIdToken({
21715
+ idToken: tokenData.id_token,
21716
+ audience: clientId
21717
+ });
21718
+ const content = ticket.getPayload();
21719
+ if (!content) {
21720
+ throw new Error("Google ID token payload was empty after code exchange");
21721
+ }
21722
+ return {
21723
+ providerId: content.sub,
21724
+ email: content.email || "",
21725
+ displayName: content.name || null,
21726
+ photoUrl: content.picture || null
21727
+ };
21728
+ }
21729
+ if (tokenData.access_token) {
21730
+ const userInfoRes = await fetch("https://www.googleapis.com/oauth2/v3/userinfo", {
21731
+ headers: {
21732
+ Authorization: `Bearer ${tokenData.access_token}`
21733
+ }
21734
+ });
21735
+ if (!userInfoRes.ok) {
21736
+ throw new Error(`Google userinfo request failed after code exchange (${userInfoRes.status})`);
21737
+ }
21738
+ const info = await userInfoRes.json();
21739
+ if (!info.sub || !info.email) {
21740
+ return null;
21741
+ }
21742
+ return {
21743
+ providerId: info.sub,
21744
+ email: info.email,
21745
+ displayName: info.name || null,
21746
+ photoUrl: info.picture || null
21747
+ };
21748
+ }
21749
+ throw new Error("Google token exchange returned neither id_token nor access_token");
21750
+ }
21751
+ throw new Error("No valid Google credential provided (expected idToken, accessToken, or code+redirectUri)");
21685
21752
  } catch (error2) {
21686
- console.error("Failed to verify Google token:", error2);
21687
- return null;
21753
+ console.error("Google OAuth verification failed:", error2);
21754
+ throw error2;
21688
21755
  }
21689
21756
  }
21690
21757
  };
@@ -22892,7 +22959,11 @@ function createAuthRoutes(config) {
22892
22959
  passwordHash,
22893
22960
  displayName: displayName || void 0
22894
22961
  });
22895
- if (config.defaultRole) {
22962
+ const existingUsers = await authRepo.listUsers();
22963
+ const isFirstUser = existingUsers.length === 1 && existingUsers[0].id === user.id;
22964
+ if (isFirstUser) {
22965
+ await authRepo.setUserRoles(user.id, ["admin"]);
22966
+ } else if (config.defaultRole) {
22896
22967
  await authRepo.assignDefaultRole(user.id, config.defaultRole);
22897
22968
  }
22898
22969
  const {
@@ -22933,7 +23004,13 @@ function createAuthRoutes(config) {
22933
23004
  for (const provider of config.oauthProviders) {
22934
23005
  router.post(`/${provider.id}`, defaultAuthLimiter, async (c) => {
22935
23006
  const payload = parseBody2(provider.schema, await c.req.json());
22936
- const externalUser = await provider.verify(payload);
23007
+ let externalUser;
23008
+ try {
23009
+ externalUser = await provider.verify(payload);
23010
+ } catch (err) {
23011
+ const msg = err instanceof Error ? err.message : String(err);
23012
+ throw ApiError.unauthorized(`${provider.id} login failed: ${msg}`, "OAUTH_ERROR");
23013
+ }
22937
23014
  if (!externalUser) {
22938
23015
  throw ApiError.unauthorized(`Invalid ${provider.id} credentials`, "INVALID_TOKEN");
22939
23016
  }
@@ -22957,7 +23034,11 @@ function createAuthRoutes(config) {
22957
23034
  await authRepo.linkUserIdentity(user.id, provider.id, externalUser.providerId, {
22958
23035
  email: externalUser.email
22959
23036
  });
22960
- if (config.defaultRole) {
23037
+ const allUsers = await authRepo.listUsers();
23038
+ const isFirstUser = allUsers.length === 1 && allUsers[0].id === user.id;
23039
+ if (isFirstUser) {
23040
+ await authRepo.setUserRoles(user.id, ["admin"]);
23041
+ } else if (config.defaultRole) {
22961
23042
  await authRepo.assignDefaultRole(user.id, config.defaultRole);
22962
23043
  }
22963
23044
  sendWelcomeEmail({
@@ -24950,20 +25031,21 @@ function createAuth(transport, options2) {
24950
25031
  refreshToken: session.refreshToken
24951
25032
  };
24952
25033
  }
24953
- async function signInWithGoogle(idToken) {
25034
+ async function signInWithGoogle(tokenOrPayload) {
24954
25035
  const fetchFn = getFetch();
25036
+ const body = typeof tokenOrPayload === "string" ? {
25037
+ idToken: tokenOrPayload
25038
+ } : tokenOrPayload;
24955
25039
  const res = await fetchFn(authUrl("/google"), {
24956
25040
  method: "POST",
24957
25041
  headers: {
24958
25042
  "Content-Type": "application/json"
24959
25043
  },
24960
- body: JSON.stringify({
24961
- idToken
24962
- })
25044
+ body: JSON.stringify(body)
24963
25045
  });
24964
- const body = await res.json().catch(() => ({}));
24965
- if (!res.ok) throwApiError(res.status, body, res.statusText);
24966
- const session = handleAuthResponse(body, "SIGNED_IN");
25046
+ const responseBody = await res.json().catch(() => ({}));
25047
+ if (!res.ok) throwApiError(res.status, responseBody, res.statusText);
25048
+ const session = handleAuthResponse(responseBody, "SIGNED_IN");
24967
25049
  return {
24968
25050
  user: session.user,
24969
25051
  accessToken: session.accessToken,
@@ -25625,6 +25707,25 @@ function createCollectionClient(transport, slug, ws) {
25625
25707
  };
25626
25708
  return client;
25627
25709
  }
25710
+ function createFunctionsClient(transport) {
25711
+ return {
25712
+ async invoke(name2, payload, options2) {
25713
+ const method = options2?.method ?? "POST";
25714
+ const subPath = options2?.path ? `/${options2.path.replace(/^\//, "")}` : "";
25715
+ const routePath = `/functions/${encodeURIComponent(name2)}${subPath}`;
25716
+ const init = {
25717
+ method
25718
+ };
25719
+ if (payload !== void 0 && method !== "GET") {
25720
+ init.body = JSON.stringify(payload);
25721
+ }
25722
+ if (options2?.headers) {
25723
+ init.headers = options2.headers;
25724
+ }
25725
+ return transport.request(routePath, init);
25726
+ }
25727
+ };
25728
+ }
25628
25729
  function createStorage(transport) {
25629
25730
  const urlsCache = /* @__PURE__ */ new Map();
25630
25731
  async function putObject({
@@ -25758,6 +25859,7 @@ function createRebaseClient(options2) {
25758
25859
  const admin = createAdmin(transport, options2.admin);
25759
25860
  const cron = createCron(transport, options2.cron);
25760
25861
  const storage = createStorage(transport);
25862
+ const functions = createFunctionsClient(transport);
25761
25863
  let ws;
25762
25864
  if (!options2.onUnauthorized) {
25763
25865
  transport.setOnUnauthorized(async () => {
@@ -25796,6 +25898,7 @@ function createRebaseClient(options2) {
25796
25898
  auth,
25797
25899
  admin,
25798
25900
  cron,
25901
+ functions,
25799
25902
  storage,
25800
25903
  ws,
25801
25904
  setToken: transport.setToken,
@@ -37123,7 +37226,7 @@ async function _initializeRebaseBackend(config) {
37123
37226
  const {
37124
37227
  createGoogleProvider: createGoogleProvider2
37125
37228
  } = await import("./index-DXVBFp5V.js");
37126
- oauthProviders.push(createGoogleProvider2(config.auth.google.clientId));
37229
+ oauthProviders.push(createGoogleProvider2(config.auth.google));
37127
37230
  }
37128
37231
  if (config.auth.linkedin?.clientId && config.auth.linkedin?.clientSecret) {
37129
37232
  const {
@@ -37324,6 +37427,13 @@ async function _initializeRebaseBackend(config) {
37324
37427
  }
37325
37428
  _initRebase(serverClient);
37326
37429
  logger.info("Rebase singleton initialized");
37430
+ if (defaultDriverResult.internals) {
37431
+ const internals = defaultDriverResult.internals;
37432
+ const driver = internals.driver;
37433
+ if (driver && "client" in driver) {
37434
+ driver.client = serverClient;
37435
+ }
37436
+ }
37327
37437
  if (config.functionsDir) {
37328
37438
  const {
37329
37439
  loadFunctionsFromDirectory: loadFunctionsFromDirectory2
@@ -48194,7 +48304,9 @@ class RebaseApiServer {
48194
48304
  * Setup Hono middleware
48195
48305
  */
48196
48306
  setupMiddleware() {
48197
- this.router.use("/*", secureHeaders());
48307
+ this.router.use("/*", secureHeaders({
48308
+ crossOriginOpenerPolicy: "same-origin-allow-popups"
48309
+ }));
48198
48310
  if (this.config.cors) {
48199
48311
  const origin = this.config.cors.origin;
48200
48312
  this.router.use("/*", cors({