cloudflare-next-intl 0.9.63 → 0.10.1

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/README.md CHANGED
@@ -807,6 +807,21 @@ export default setIntlConfig({
807
807
  - `disconnectTimeoutMs` — **deprecated, ignored since 0.8.23.** Client
808
808
  teardown is awaited or deferred to `ctx.waitUntil` without a timeout.
809
809
 
810
+ #### Service role (`withServiceDb`)
811
+
812
+ `withServiceDb` runs a query as the **service role** — it bypasses RLS
813
+ entirely (`db.supabase.serviceRoleKey` in Supabase mode; no role downgrade in
814
+ connection-string mode) and adds no auth wiring, since the service role isn't
815
+ a signed-in user. Use it only on trusted server-side paths a request/user
816
+ can't influence — admin actions, cron jobs, webhooks — never behind an
817
+ ordinary request handler:
818
+
819
+ ```typescript
820
+ import { withServiceDb } from "cloudflare-next-intl/db";
821
+
822
+ const rows = await withServiceDb((db) => db.select().from(profiles));
823
+ ```
824
+
810
825
  #### Choosing a transport
811
826
 
812
827
  `db` reaches Postgres one of two ways, decided by which fields you set. The
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
- // Re-exec shim: `cfni-db-codegen` now lives in cloudflare-next-intl-db,
2
+ // Re-exec shim: `cfni-db-codegen` now lives in cloudflare-next-intl-db-codegen,
3
3
  // installed as this package's dependency. Kept here so existing consumers'
4
4
  // `npx cfni-db-codegen` invocations keep working with no changes needed.
5
+ import { createRequire } from 'node:module';
5
6
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
7
  import { dirname, join } from 'node:path';
7
8
 
8
- // Resolve via the package's root export (".") its exports map doesn't
9
- // declare "./package.json", so that can't be resolved directly. The root
10
- // export ("dist/src/index.js") sits two directories below the package root.
11
- const indexPath = fileURLToPath(import.meta.resolve('cloudflare-next-intl-db'));
12
- const dbPackageRoot = join(dirname(indexPath), '..', '..');
13
- await import(pathToFileURL(join(dbPackageRoot, 'bin', 'db_codegen.mjs')).href);
9
+ // cloudflare-next-intl-db-codegen declares no "exports" map, so its
10
+ // package.json (and therefore its package root) resolves directly
11
+ // unlike the runtime db package, this one isn't trying to restrict its
12
+ // public surface to a curated set of subpaths.
13
+ const pkgPath = createRequire(import.meta.url).resolve('cloudflare-next-intl-db-codegen/package.json');
14
+ const codegenPackageRoot = dirname(fileURLToPath(pathToFileURL(pkgPath)));
15
+ await import(pathToFileURL(join(codegenPackageRoot, 'bin', 'db_codegen.mjs')).href);
@@ -1,13 +1,15 @@
1
1
  #!/usr/bin/env node
2
- // Re-exec shim: `cfni-db-install-exec` now lives in cloudflare-next-intl-db,
2
+ // Re-exec shim: `cfni-db-install-exec` now lives in cloudflare-next-intl-db-codegen,
3
3
  // installed as this package's dependency. Kept here so existing consumers'
4
4
  // `npx cfni-db-install-exec` invocations keep working with no changes needed.
5
+ import { createRequire } from 'node:module';
5
6
  import { fileURLToPath, pathToFileURL } from 'node:url';
6
7
  import { dirname, join } from 'node:path';
7
8
 
8
- // Resolve via the package's root export (".") its exports map doesn't
9
- // declare "./package.json", so that can't be resolved directly. The root
10
- // export ("dist/src/index.js") sits two directories below the package root.
11
- const indexPath = fileURLToPath(import.meta.resolve('cloudflare-next-intl-db'));
12
- const dbPackageRoot = join(dirname(indexPath), '..', '..');
13
- await import(pathToFileURL(join(dbPackageRoot, 'bin', 'db_install_exec.mjs')).href);
9
+ // cloudflare-next-intl-db-codegen declares no "exports" map, so its
10
+ // package.json (and therefore its package root) resolves directly
11
+ // unlike the runtime db package, this one isn't trying to restrict its
12
+ // public surface to a curated set of subpaths.
13
+ const pkgPath = createRequire(import.meta.url).resolve('cloudflare-next-intl-db-codegen/package.json');
14
+ const codegenPackageRoot = dirname(fileURLToPath(pathToFileURL(pkgPath)));
15
+ await import(pathToFileURL(join(codegenPackageRoot, 'bin', 'db_install_exec.mjs')).href);
@@ -2,4 +2,5 @@ import type { DbRoutingConfig, DrizzleDb, TransactionResult, UserDbCredentials }
2
2
  export type { DrizzleDb, TransactionResult, UserDbCredentials };
3
3
  export declare function withPublicDb<T>(fn: (db: DrizzleDb) => Promise<T>, dbOverride?: DbRoutingConfig): Promise<T>;
4
4
  export declare function withUserDb<T>(fn: (db: DrizzleDb) => Promise<T>, auth?: string | null | UserDbCredentials, dbOverride?: DbRoutingConfig): Promise<T>;
5
+ export declare function withServiceDb<T>(fn: (db: DrizzleDb) => Promise<T>, dbOverride?: DbRoutingConfig): Promise<T>;
5
6
  export declare function resolveUserDbCredentials(dbOverride?: DbRoutingConfig): Promise<UserDbCredentials>;
@@ -1,4 +1,4 @@
1
- import { withPublicDb as withPublicDbImpl, withUserDb as withUserDbImpl, resolveUserDbCredentials as resolveUserDbCredentialsImpl, } from 'cloudflare-next-intl-db';
1
+ import { withPublicDb as withPublicDbImpl, withUserDb as withUserDbImpl, withServiceDb as withServiceDbImpl, resolveUserDbCredentials as resolveUserDbCredentialsImpl, } from 'cloudflare-next-intl-db';
2
2
  import resolveDbConfig from './resolve_db_config.js';
3
3
  export async function withPublicDb(fn, dbOverride) {
4
4
  const config = await resolveDbConfig(dbOverride);
@@ -8,6 +8,10 @@ export async function withUserDb(fn, auth, dbOverride) {
8
8
  const config = await resolveDbConfig(dbOverride);
9
9
  return withUserDbImpl(fn, auth, config);
10
10
  }
11
+ export async function withServiceDb(fn, dbOverride) {
12
+ const config = await resolveDbConfig(dbOverride);
13
+ return withServiceDbImpl(fn, config);
14
+ }
11
15
  export async function resolveUserDbCredentials(dbOverride) {
12
16
  const config = await resolveDbConfig(dbOverride);
13
17
  return resolveUserDbCredentialsImpl(config);
@@ -1,4 +1,4 @@
1
- export { withPublicDb, withUserDb, resolveUserDbCredentials } from './context.js';
1
+ export { withPublicDb, withUserDb, withServiceDb, resolveUserDbCredentials } from './context.js';
2
2
  export type { UserDbCredentials } from './context.js';
3
3
  export type { DrizzleDb, TransactionResult } from './context.js';
4
4
  export { withDbClient, connectToPostgres, disconnectPostgres, resetConnectionState } from './connection.js';
@@ -1,2 +1,2 @@
1
- export { withPublicDb, withUserDb, resolveUserDbCredentials } from './context.js';
1
+ export { withPublicDb, withUserDb, withServiceDb, resolveUserDbCredentials } from './context.js';
2
2
  export { withDbClient, connectToPostgres, disconnectPostgres, resetConnectionState } from './connection.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cloudflare-next-intl",
3
- "version": "0.9.63",
3
+ "version": "0.10.1",
4
4
  "description": "Optimized Next Intl Package Special for App Router and Cloudflare",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -358,7 +358,8 @@
358
358
  "homepage": "https://github.com/demian-ilnytskyi/cloudflare-next-intl#readme",
359
359
  "dependencies": {
360
360
  "@microsoft/clarity": "^1.0.2",
361
- "cloudflare-next-intl-db": "^0.1.0",
361
+ "cloudflare-next-intl-db": "^0.2.0",
362
+ "cloudflare-next-intl-db-codegen": "^0.1.1",
362
363
  "jose": "^6.2.8",
363
364
  "sharp": "^0.34.5 || ^0.35.0"
364
365
  },