@porulle/core 0.14.0 → 0.16.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/auth/actor.d.ts.map +1 -1
- package/dist/auth/actor.js +8 -2
- package/dist/auth/auth-failure.d.ts +15 -0
- package/dist/auth/auth-failure.d.ts.map +1 -0
- package/dist/auth/auth-failure.js +19 -0
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +22 -3
- package/dist/config/types.d.ts +2 -2
- package/dist/config/types.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.d.ts +3 -0
- package/dist/kernel/plugin/manifest.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.js +35 -6
- package/dist/runtime/kernel-types.d.ts +7 -0
- package/dist/runtime/kernel-types.d.ts.map +1 -1
- package/dist/runtime/kernel.d.ts +1 -0
- package/dist/runtime/kernel.d.ts.map +1 -1
- package/dist/runtime/server.d.ts.map +1 -1
- package/dist/runtime/server.js +15 -1
- package/package.json +3 -3
- package/src/auth/actor.ts +7 -2
- package/src/auth/auth-failure.ts +18 -0
- package/src/auth/middleware.ts +25 -8
- package/src/config/types.ts +2 -2
- package/src/index.ts +1 -1
- package/src/kernel/plugin/manifest.ts +57 -12
- package/src/runtime/kernel-types.ts +9 -0
- package/src/runtime/kernel.ts +1 -0
- package/src/runtime/server.ts +14 -1
package/dist/auth/actor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/auth/actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"actor.d.ts","sourceRoot":"","sources":["../../src/auth/actor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C,eAAO,MAAM,kBAAkB,OAAO,CAAC;AACvC,eAAO,MAAM,mBAAmB,qBAAwC,CAAC;AAEzE,eAAO,MAAM,4BAA4B,0JAS/B,CAAC;AAEX,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,EAAE,CAEvE;AAYD,8EAA8E;AAC9E,wBAAsB,YAAY,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,EACtB,OAAO,GAAE,OAAsD,GAC9D,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CA0EvB"}
|
package/dist/auth/actor.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { DEFAULT_ORG_ID } from "./org.js";
|
|
2
|
+
import { isCredentialRejection } from "./auth-failure.js";
|
|
2
3
|
export const AUTH_COOKIE_PREFIX = "uc";
|
|
3
4
|
export const SESSION_COOKIE_NAME = `${AUTH_COOKIE_PREFIX}.session_token`;
|
|
4
5
|
export const DEFAULT_CUSTOMER_PERMISSIONS = [
|
|
@@ -29,8 +30,13 @@ export async function resolveActor(headers, auth, config, request = new Request(
|
|
|
29
30
|
headers,
|
|
30
31
|
}));
|
|
31
32
|
}
|
|
32
|
-
catch {
|
|
33
|
-
|
|
33
|
+
catch (err) {
|
|
34
|
+
// A rejected session is anonymous. A session store that could not answer is
|
|
35
|
+
// a fault: reporting it as "no session" downgrades a signed-in caller
|
|
36
|
+
// silently and leaves nothing to debug.
|
|
37
|
+
if (isCredentialRejection(err))
|
|
38
|
+
return null;
|
|
39
|
+
throw err;
|
|
34
40
|
}
|
|
35
41
|
if (!session)
|
|
36
42
|
return null;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Separates a credential better-auth evaluated and rejected from an auth check
|
|
3
|
+
* that failed to run. Only the first justifies telling a caller their
|
|
4
|
+
* credential is bad; the second is a fault and must surface as one.
|
|
5
|
+
*
|
|
6
|
+
* Matched structurally rather than with `instanceof APIError`. A cross-copy
|
|
7
|
+
* `instanceof` is false whenever two better-auth copies are resolved into one
|
|
8
|
+
* tree — which is precisely the fault this predicate has to stay honest about.
|
|
9
|
+
* `kernel/error-mapper.ts` reads `constructor?.name` for the same reason.
|
|
10
|
+
*
|
|
11
|
+
* better-call's `APIError` carries `name === "APIError"` and a numeric
|
|
12
|
+
* `statusCode`; its `status` is a string such as `"UNAUTHORIZED"`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isCredentialRejection(err: unknown): boolean;
|
|
15
|
+
//# sourceMappingURL=auth-failure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-failure.d.ts","sourceRoot":"","sources":["../../src/auth/auth-failure.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAI3D"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Separates a credential better-auth evaluated and rejected from an auth check
|
|
3
|
+
* that failed to run. Only the first justifies telling a caller their
|
|
4
|
+
* credential is bad; the second is a fault and must surface as one.
|
|
5
|
+
*
|
|
6
|
+
* Matched structurally rather than with `instanceof APIError`. A cross-copy
|
|
7
|
+
* `instanceof` is false whenever two better-auth copies are resolved into one
|
|
8
|
+
* tree — which is precisely the fault this predicate has to stay honest about.
|
|
9
|
+
* `kernel/error-mapper.ts` reads `constructor?.name` for the same reason.
|
|
10
|
+
*
|
|
11
|
+
* better-call's `APIError` carries `name === "APIError"` and a numeric
|
|
12
|
+
* `statusCode`; its `status` is a string such as `"UNAUTHORIZED"`.
|
|
13
|
+
*/
|
|
14
|
+
export function isCredentialRejection(err) {
|
|
15
|
+
if (typeof err !== "object" || err === null)
|
|
16
|
+
return false;
|
|
17
|
+
const { name, statusCode } = err;
|
|
18
|
+
return name === "APIError" && typeof statusCode === "number";
|
|
19
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../src/auth/middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAa/C,OAAO,EAAE,4BAA4B,EAAE,MAAM,YAAY,CAAC;AAK1D,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACrB,iBAAiB,CAiNnB"}
|
package/dist/auth/middleware.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getCustomerPermissions, resolveActor } from "./actor.js";
|
|
2
2
|
import { DEFAULT_ORG_ID } from "./org.js";
|
|
3
|
+
import { isCredentialRejection } from "./auth-failure.js";
|
|
3
4
|
import { isStrictOrgResolution } from "./strict-org-resolution.js";
|
|
4
5
|
function emptyToNull(value) {
|
|
5
6
|
return value == null || value === "" ? null : value;
|
|
@@ -31,7 +32,20 @@ export function authMiddleware(auth, config) {
|
|
|
31
32
|
}
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
// A caller told "Authentication required." goes and checks their
|
|
36
|
+
// credential. When the check never ran, that answer is a lie and there is
|
|
37
|
+
// nothing in the log to correct it. Report a fault as a fault.
|
|
38
|
+
const reportAuthCheckFault = (err, stage) => {
|
|
39
|
+
c.get("logger")?.error({ err, stage, path: c.req.path, method: c.req.method }, "auth check failed — the credential was never evaluated, so this is not an authentication failure");
|
|
40
|
+
};
|
|
41
|
+
let actor;
|
|
42
|
+
try {
|
|
43
|
+
actor = await resolveActor(c.req.raw.headers, auth, config, c.req.raw);
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
reportAuthCheckFault(err, "session");
|
|
47
|
+
throw err;
|
|
48
|
+
}
|
|
35
49
|
if (actor) {
|
|
36
50
|
c.set("actor", actor);
|
|
37
51
|
await next();
|
|
@@ -126,8 +140,13 @@ export function authMiddleware(auth, config) {
|
|
|
126
140
|
return;
|
|
127
141
|
}
|
|
128
142
|
}
|
|
129
|
-
catch {
|
|
130
|
-
// invalid, expired, or rate-limited key
|
|
143
|
+
catch (err) {
|
|
144
|
+
// An invalid, expired, or rate-limited key is a rejection: fall through
|
|
145
|
+
// to anonymous. Anything else means the key was never checked.
|
|
146
|
+
if (!isCredentialRejection(err)) {
|
|
147
|
+
reportAuthCheckFault(err, "api_key");
|
|
148
|
+
throw err;
|
|
149
|
+
}
|
|
131
150
|
}
|
|
132
151
|
}
|
|
133
152
|
if (!c.get("actor")) {
|
package/dist/config/types.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Actor } from "../auth/types.js";
|
|
|
3
3
|
import type { BeforeHook, AfterHook } from "../kernel/hooks/types.js";
|
|
4
4
|
import type { PaymentAdapter } from "../modules/payments/adapter.js";
|
|
5
5
|
import type { StorageAdapter } from "../modules/media/adapter.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type { ConfigRouteKernel } from "../runtime/kernel.js";
|
|
7
7
|
import type { AuthInstance } from "../auth/setup.js";
|
|
8
8
|
import type { DatabaseAdapter } from "../kernel/database/adapter.js";
|
|
9
9
|
import type { TaxAdapter } from "../modules/tax/adapter.js";
|
|
@@ -433,7 +433,7 @@ export interface CommerceConfig {
|
|
|
433
433
|
* third argument so integrations can mint/revoke API keys or call
|
|
434
434
|
* `auth.api.*` without module-global holder shims.
|
|
435
435
|
*/
|
|
436
|
-
routes?: (app: Hono<any>, kernel:
|
|
436
|
+
routes?: (app: Hono<any>, kernel: ConfigRouteKernel, auth?: AuthInstance) => void;
|
|
437
437
|
/** Log level for structured logging. Default: "info". */
|
|
438
438
|
logLevel?: "fatal" | "error" | "warn" | "info" | "debug" | "trace";
|
|
439
439
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AACpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,7 +13,7 @@ export { createLogger } from "./runtime/logger.js";
|
|
|
13
13
|
export type { Logger as PinoLogger } from "./runtime/logger.js";
|
|
14
14
|
export { setupGracefulShutdown } from "./runtime/shutdown.js";
|
|
15
15
|
export { createKernel } from "./runtime/kernel.js";
|
|
16
|
-
export type { Kernel } from "./runtime/kernel.js";
|
|
16
|
+
export type { Kernel, ConfigRouteKernel, ConfigRouteDatabase } from "./runtime/kernel.js";
|
|
17
17
|
export type { Actor } from "./auth/types.js";
|
|
18
18
|
export { AUTH_COOKIE_PREFIX, resolveActor, SESSION_COOKIE_NAME, } from "./auth/actor.js";
|
|
19
19
|
export { resolveOrgId, resolveOrgIdForCommerce, ensureDefaultOrg, DEFAULT_ORG_ID } from "./auth/org.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,YAAY,EACV,cAAc,EACd,cAAc,EACd,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACnE,YAAY,EACV,sBAAsB,EACtB,aAAa,EACb,sBAAsB,EACtB,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,KAAK,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC/F,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { RouteConfig } from "@hono/zod-openapi";
|
|
2
2
|
import type { PluginDb } from "../database/plugin-types.js";
|
|
3
|
+
import type { ConfigRouteKernel, Kernel } from "../../runtime/kernel.js";
|
|
3
4
|
import type { CommerceConfig, CommercePlugin, PluginPermission } from "../../config/types.js";
|
|
4
5
|
import type { TaskDefinition } from "../jobs/types.js";
|
|
5
6
|
export interface PluginLogger {
|
|
@@ -51,6 +52,8 @@ export interface PluginContext {
|
|
|
51
52
|
*/
|
|
52
53
|
auth?: unknown;
|
|
53
54
|
}
|
|
55
|
+
export declare function createRateLimitedUnscopedAccessWarning(logger: Pick<PluginLogger, "warn">, message: string): () => void;
|
|
56
|
+
export declare function buildConfigRoutesKernel(kernel: Kernel): ConfigRouteKernel;
|
|
54
57
|
export type { PluginPermission };
|
|
55
58
|
export interface CommercePluginManifest {
|
|
56
59
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/manifest.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { createScopedDb } from "../database/scoped-db.js";
|
|
|
4
4
|
import { getPluginDatabaseScopeOrganizationId, runWithPluginDatabaseScope, } from "../database/plugin-db-context.js";
|
|
5
5
|
const UNSCOPED_WARN_COOLDOWN_MS = 60_000;
|
|
6
6
|
const UNSCOPED_WARN_EVERY_N = 100;
|
|
7
|
-
|
|
7
|
+
const configRouteRawDatabases = new WeakMap();
|
|
8
|
+
export function createRateLimitedUnscopedAccessWarning(logger, message) {
|
|
8
9
|
let lastWarnAt = 0;
|
|
9
10
|
let accessCount = 0;
|
|
10
11
|
return () => {
|
|
@@ -14,14 +15,41 @@ function createRateLimitedUnscopedAccessWarning(logger) {
|
|
|
14
15
|
return;
|
|
15
16
|
}
|
|
16
17
|
lastWarnAt = now;
|
|
17
|
-
logger.warn(
|
|
18
|
+
logger.warn(message);
|
|
18
19
|
};
|
|
19
20
|
}
|
|
21
|
+
function getPluginDatabaseOrganizationId(commerceConfig) {
|
|
22
|
+
return (getPluginDatabaseScopeOrganizationId() ??
|
|
23
|
+
resolveOrgIdForCommerce(null, commerceConfig));
|
|
24
|
+
}
|
|
25
|
+
function getRawDatabaseForConfigRoutes(database) {
|
|
26
|
+
if (database && typeof database === "object") {
|
|
27
|
+
return configRouteRawDatabases.get(database) ?? database;
|
|
28
|
+
}
|
|
29
|
+
return database;
|
|
30
|
+
}
|
|
31
|
+
export function buildConfigRoutesKernel(kernel) {
|
|
32
|
+
const rawDatabase = getRawDatabaseForConfigRoutes(kernel.database);
|
|
33
|
+
const rawDb = rawDatabase.db;
|
|
34
|
+
const scopedDb = createScopedDb(rawDb, () => getPluginDatabaseOrganizationId(kernel.config));
|
|
35
|
+
const warnUnscoped = createRateLimitedUnscopedAccessWarning(kernel.logger, "[config:database] kernel.database.db is unscoped; prefer kernel.database.scoped for tenant-scoped access.");
|
|
36
|
+
const database = {
|
|
37
|
+
...rawDatabase,
|
|
38
|
+
get db() {
|
|
39
|
+
warnUnscoped();
|
|
40
|
+
return rawDatabase.db;
|
|
41
|
+
},
|
|
42
|
+
get scoped() {
|
|
43
|
+
return scopedDb;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
configRouteRawDatabases.set(database, rawDatabase);
|
|
47
|
+
return { ...kernel, database };
|
|
48
|
+
}
|
|
20
49
|
function buildPluginContextDatabase(rawDb, transactionFn, commerceConfig, logger) {
|
|
21
|
-
const orgGetter = () =>
|
|
22
|
-
resolveOrgIdForCommerce(null, commerceConfig);
|
|
50
|
+
const orgGetter = () => getPluginDatabaseOrganizationId(commerceConfig);
|
|
23
51
|
const scopedDb = createScopedDb(rawDb, orgGetter);
|
|
24
|
-
const warnUnscoped = createRateLimitedUnscopedAccessWarning(logger);
|
|
52
|
+
const warnUnscoped = createRateLimitedUnscopedAccessWarning(logger, "[plugin:database] PluginContext.database.unscoped is deprecated (MT-4 escape hatch); prefer ctx.database.db for tenant-scoped access.");
|
|
25
53
|
return {
|
|
26
54
|
get db() {
|
|
27
55
|
return scopedDb;
|
|
@@ -126,12 +154,13 @@ export function defineCommercePlugin(manifest) {
|
|
|
126
154
|
routes: (app, kernel, auth) => {
|
|
127
155
|
existingRoutes?.(app, kernel, auth);
|
|
128
156
|
const k = kernel;
|
|
157
|
+
const rawDatabase = getRawDatabaseForConfigRoutes(k.database);
|
|
129
158
|
// Narrow DatabaseAdapter<unknown> → PluginContext.database once here.
|
|
130
159
|
// All plugin code receives typed PluginDb — no casts downstream.
|
|
131
160
|
const regs = pluginRoutes({
|
|
132
161
|
config: k.config,
|
|
133
162
|
services: k.services,
|
|
134
|
-
database: buildPluginContextDatabase(
|
|
163
|
+
database: buildPluginContextDatabase(rawDatabase.db, rawDatabase.transaction, k.config, k.logger),
|
|
135
164
|
logger: k.logger,
|
|
136
165
|
...(auth !== undefined ? { auth } : {}),
|
|
137
166
|
});
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CommerceConfig, PluginPermission } from "../config/types.js";
|
|
2
2
|
import type { HookRegistry } from "../kernel/hooks/registry.js";
|
|
3
3
|
import type { DatabaseAdapter } from "../kernel/database/adapter.js";
|
|
4
|
+
import type { PluginDb } from "../kernel/database/plugin-types.js";
|
|
4
5
|
import { CatalogServiceImpl } from "../modules/catalog/service.js";
|
|
5
6
|
import { InventoryService } from "../modules/inventory/service.js";
|
|
6
7
|
import { MediaService } from "../modules/media/service.js";
|
|
@@ -63,6 +64,12 @@ export interface Kernel {
|
|
|
63
64
|
pluginPermissions: PluginPermission[];
|
|
64
65
|
logger: ReturnType<typeof createLogger>;
|
|
65
66
|
}
|
|
67
|
+
export interface ConfigRouteDatabase extends DatabaseAdapter {
|
|
68
|
+
readonly scoped: PluginDb;
|
|
69
|
+
}
|
|
70
|
+
export type ConfigRouteKernel = Omit<Kernel, "database"> & {
|
|
71
|
+
database: ConfigRouteDatabase;
|
|
72
|
+
};
|
|
66
73
|
export declare const KERNEL_REQUIRED_SERVICE_KEYS: ["catalog", "inventory", "media", "cart", "orders", "payments", "fulfillment", "customers", "webhooks", "analytics", "pricing", "promotions", "tax", "shipping", "search", "settings", "documents", "audit", "compensationFailures"];
|
|
67
74
|
export declare function assertKernelServicesReady(services: Partial<Kernel["services"]>): asserts services is Kernel["services"];
|
|
68
75
|
export declare function assertSortedBefore(topo: readonly string[], a: string, b: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel-types.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel-types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kernel-types.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel-types.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/kernel.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { CommerceConfig } from "../config/types.js";
|
|
2
2
|
import { type Kernel, type WebhookDeliveryPayload } from "./kernel-types.js";
|
|
3
3
|
export type { Kernel, WebhookDeliveryPayload };
|
|
4
|
+
export type { ConfigRouteKernel, ConfigRouteDatabase } from "./kernel-types.js";
|
|
4
5
|
export { KERNEL_ALL_MODULES, kernelModuleInstantiationOrder, } from "./kernel-modules.js";
|
|
5
6
|
export declare function createKernel(config: CommerceConfig): Kernel;
|
|
6
7
|
//# sourceMappingURL=kernel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqBzD,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0I3D"}
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAqBzD,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,sBAAsB,EAC5B,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC;AAC/C,YAAY,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EACL,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CA0I3D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/runtime/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/runtime/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQhD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUzD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAStE,KAAK,SAAS,GAAG;IACf,SAAS,EAAE;QACT,IAAI,EAAE,YAAY,CAAC;QACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAcvC;AAeD;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,cAAc;;;;;sBAkXxB,MAAM,UAAU,MAAM;GA8GtD"}
|
package/dist/runtime/server.js
CHANGED
|
@@ -7,6 +7,7 @@ import { rateLimiter } from "hono-rate-limiter";
|
|
|
7
7
|
import { createHash } from "node:crypto";
|
|
8
8
|
import { createClientIpResolver } from "./client-ip.js";
|
|
9
9
|
import { authMiddleware } from "../auth/middleware.js";
|
|
10
|
+
import { resolveOrgIdForCommerce } from "../auth/org.js";
|
|
10
11
|
import { organizationGuard } from "../auth/organization-guard.js";
|
|
11
12
|
import { CommerceCsrfError } from "../kernel/errors.js";
|
|
12
13
|
import { createRestRoutes } from "../interfaces/rest/index.js";
|
|
@@ -17,6 +18,8 @@ import { mapErrorToResponse } from "../kernel/error-mapper.js";
|
|
|
17
18
|
import { assertRouteCoverage } from "../interfaces/rest/route-coverage.js";
|
|
18
19
|
import { markRoutePermissionGuard } from "../interfaces/rest/utils.js";
|
|
19
20
|
import { isStrictOrgResolution } from "../auth/strict-org-resolution.js";
|
|
21
|
+
import { runWithPluginDatabaseScope } from "../kernel/database/plugin-db-context.js";
|
|
22
|
+
import { buildConfigRoutesKernel } from "../kernel/plugin/manifest.js";
|
|
20
23
|
/**
|
|
21
24
|
* Returns true if running in a Node-like runtime that supports
|
|
22
25
|
* `process.on()` + `process.exit()`. Edge runtimes (Cloudflare Workers,
|
|
@@ -287,6 +290,17 @@ export async function createServer(config) {
|
|
|
287
290
|
return auth.handler(c.req.raw);
|
|
288
291
|
});
|
|
289
292
|
app.use("*", authMiddleware(auth, config));
|
|
293
|
+
app.use("*", async (c, next) => {
|
|
294
|
+
let organizationId;
|
|
295
|
+
try {
|
|
296
|
+
organizationId = resolveOrgIdForCommerce(c.get("actor"), config);
|
|
297
|
+
}
|
|
298
|
+
catch {
|
|
299
|
+
await next();
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
await runWithPluginDatabaseScope(organizationId, next);
|
|
303
|
+
});
|
|
290
304
|
app.use("*", async (c, next) => {
|
|
291
305
|
c.set("auth", auth);
|
|
292
306
|
await next();
|
|
@@ -303,7 +317,7 @@ export async function createServer(config) {
|
|
|
303
317
|
// body-limit stack apply (all are scoped to /api/*).
|
|
304
318
|
app.route("/api/me", createCustomerPortalRoutes(kernel));
|
|
305
319
|
if (config.routes) {
|
|
306
|
-
config.routes(app, kernel, auth);
|
|
320
|
+
config.routes(app, buildConfigRoutesKernel(kernel), auth);
|
|
307
321
|
}
|
|
308
322
|
// OpenAPI spec — disabled in production unless explicitly enabled
|
|
309
323
|
const exposeSpec = config.exposeOpenApiSpec ?? !isProd;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@porulle/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.16.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"eslint": "^9.39.1",
|
|
57
57
|
"typescript": "5.9.2",
|
|
58
58
|
"vitest": "^3.2.4",
|
|
59
|
-
"@porulle/
|
|
60
|
-
"@porulle/
|
|
59
|
+
"@porulle/typescript-config": "0.1.0",
|
|
60
|
+
"@porulle/eslint-config": "0.1.0"
|
|
61
61
|
},
|
|
62
62
|
"publishConfig": {
|
|
63
63
|
"access": "public"
|
package/src/auth/actor.ts
CHANGED
|
@@ -2,6 +2,7 @@ import type { AuthSessionLike, CommerceConfig } from "../config/types.js";
|
|
|
2
2
|
import type { Actor } from "./types.js";
|
|
3
3
|
import type { AuthInstance } from "./setup.js";
|
|
4
4
|
import { DEFAULT_ORG_ID } from "./org.js";
|
|
5
|
+
import { isCredentialRejection } from "./auth-failure.js";
|
|
5
6
|
|
|
6
7
|
export const AUTH_COOKIE_PREFIX = "uc";
|
|
7
8
|
export const SESSION_COOKIE_NAME = `${AUTH_COOKIE_PREFIX}.session_token`;
|
|
@@ -43,8 +44,12 @@ export async function resolveActor(
|
|
|
43
44
|
session = (await auth.api.getSession({
|
|
44
45
|
headers,
|
|
45
46
|
})) as AuthSessionLike | null;
|
|
46
|
-
} catch {
|
|
47
|
-
|
|
47
|
+
} catch (err) {
|
|
48
|
+
// A rejected session is anonymous. A session store that could not answer is
|
|
49
|
+
// a fault: reporting it as "no session" downgrades a signed-in caller
|
|
50
|
+
// silently and leaves nothing to debug.
|
|
51
|
+
if (isCredentialRejection(err)) return null;
|
|
52
|
+
throw err;
|
|
48
53
|
}
|
|
49
54
|
|
|
50
55
|
if (!session) return null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Separates a credential better-auth evaluated and rejected from an auth check
|
|
3
|
+
* that failed to run. Only the first justifies telling a caller their
|
|
4
|
+
* credential is bad; the second is a fault and must surface as one.
|
|
5
|
+
*
|
|
6
|
+
* Matched structurally rather than with `instanceof APIError`. A cross-copy
|
|
7
|
+
* `instanceof` is false whenever two better-auth copies are resolved into one
|
|
8
|
+
* tree — which is precisely the fault this predicate has to stay honest about.
|
|
9
|
+
* `kernel/error-mapper.ts` reads `constructor?.name` for the same reason.
|
|
10
|
+
*
|
|
11
|
+
* better-call's `APIError` carries `name === "APIError"` and a numeric
|
|
12
|
+
* `statusCode`; its `status` is a string such as `"UNAUTHORIZED"`.
|
|
13
|
+
*/
|
|
14
|
+
export function isCredentialRejection(err: unknown): boolean {
|
|
15
|
+
if (typeof err !== "object" || err === null) return false;
|
|
16
|
+
const { name, statusCode } = err as { name?: unknown; statusCode?: unknown };
|
|
17
|
+
return name === "APIError" && typeof statusCode === "number";
|
|
18
|
+
}
|
package/src/auth/middleware.ts
CHANGED
|
@@ -4,6 +4,7 @@ import type { Actor } from "./types.js";
|
|
|
4
4
|
import type { AuthInstance } from "./setup.js";
|
|
5
5
|
import { getCustomerPermissions, resolveActor } from "./actor.js";
|
|
6
6
|
import { DEFAULT_ORG_ID } from "./org.js";
|
|
7
|
+
import { isCredentialRejection } from "./auth-failure.js";
|
|
7
8
|
import { isStrictOrgResolution } from "./strict-org-resolution.js";
|
|
8
9
|
|
|
9
10
|
function emptyToNull(value: string | null | undefined): string | null {
|
|
@@ -43,12 +44,23 @@ export function authMiddleware(
|
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
c.
|
|
51
|
-
|
|
47
|
+
// A caller told "Authentication required." goes and checks their
|
|
48
|
+
// credential. When the check never ran, that answer is a lie and there is
|
|
49
|
+
// nothing in the log to correct it. Report a fault as a fault.
|
|
50
|
+
const reportAuthCheckFault = (err: unknown, stage: string): void => {
|
|
51
|
+
c.get("logger")?.error(
|
|
52
|
+
{ err, stage, path: c.req.path, method: c.req.method },
|
|
53
|
+
"auth check failed — the credential was never evaluated, so this is not an authentication failure",
|
|
54
|
+
);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
let actor: Actor | null;
|
|
58
|
+
try {
|
|
59
|
+
actor = await resolveActor(c.req.raw.headers, auth, config, c.req.raw);
|
|
60
|
+
} catch (err) {
|
|
61
|
+
reportAuthCheckFault(err, "session");
|
|
62
|
+
throw err;
|
|
63
|
+
}
|
|
52
64
|
if (actor) {
|
|
53
65
|
c.set("actor", actor);
|
|
54
66
|
await next();
|
|
@@ -153,8 +165,13 @@ export function authMiddleware(
|
|
|
153
165
|
await next();
|
|
154
166
|
return;
|
|
155
167
|
}
|
|
156
|
-
} catch {
|
|
157
|
-
// invalid, expired, or rate-limited key
|
|
168
|
+
} catch (err) {
|
|
169
|
+
// An invalid, expired, or rate-limited key is a rejection: fall through
|
|
170
|
+
// to anonymous. Anything else means the key was never checked.
|
|
171
|
+
if (!isCredentialRejection(err)) {
|
|
172
|
+
reportAuthCheckFault(err, "api_key");
|
|
173
|
+
throw err;
|
|
174
|
+
}
|
|
158
175
|
}
|
|
159
176
|
}
|
|
160
177
|
|
package/src/config/types.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Actor } from "../auth/types.js";
|
|
|
3
3
|
import type { BeforeHook, AfterHook } from "../kernel/hooks/types.js";
|
|
4
4
|
import type { PaymentAdapter } from "../modules/payments/adapter.js";
|
|
5
5
|
import type { StorageAdapter } from "../modules/media/adapter.js";
|
|
6
|
-
import type {
|
|
6
|
+
import type { ConfigRouteKernel } from "../runtime/kernel.js";
|
|
7
7
|
import type { AuthInstance } from "../auth/setup.js";
|
|
8
8
|
import type { DatabaseAdapter } from "../kernel/database/adapter.js";
|
|
9
9
|
import type { TaxAdapter } from "../modules/tax/adapter.js";
|
|
@@ -439,7 +439,7 @@ export interface CommerceConfig {
|
|
|
439
439
|
* third argument so integrations can mint/revoke API keys or call
|
|
440
440
|
* `auth.api.*` without module-global holder shims.
|
|
441
441
|
*/
|
|
442
|
-
routes?: (app: Hono<any>, kernel:
|
|
442
|
+
routes?: (app: Hono<any>, kernel: ConfigRouteKernel, auth?: AuthInstance) => void;
|
|
443
443
|
/** Log level for structured logging. Default: "info". */
|
|
444
444
|
logLevel?: "fatal" | "error" | "warn" | "info" | "debug" | "trace";
|
|
445
445
|
/**
|
package/src/index.ts
CHANGED
|
@@ -26,7 +26,7 @@ export { createLogger } from "./runtime/logger.js";
|
|
|
26
26
|
export type { Logger as PinoLogger } from "./runtime/logger.js";
|
|
27
27
|
export { setupGracefulShutdown } from "./runtime/shutdown.js";
|
|
28
28
|
export { createKernel } from "./runtime/kernel.js";
|
|
29
|
-
export type { Kernel } from "./runtime/kernel.js";
|
|
29
|
+
export type { Kernel, ConfigRouteKernel, ConfigRouteDatabase } from "./runtime/kernel.js";
|
|
30
30
|
// Test utilities moved to @porulle/core/testing sub-path export.
|
|
31
31
|
// Import from "@porulle/core/testing" instead of "@porulle/core".
|
|
32
32
|
// This avoids pulling drizzle-kit/tsx/esbuild into Turbopack's bundle graph.
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
getPluginDatabaseScopeOrganizationId,
|
|
10
10
|
runWithPluginDatabaseScope,
|
|
11
11
|
} from "../database/plugin-db-context.js";
|
|
12
|
-
import type { Kernel } from "../../runtime/kernel.js";
|
|
12
|
+
import type { ConfigRouteKernel, Kernel } from "../../runtime/kernel.js";
|
|
13
13
|
import type {
|
|
14
14
|
CommerceConfig,
|
|
15
15
|
CommercePlugin,
|
|
@@ -73,8 +73,12 @@ export interface PluginContext {
|
|
|
73
73
|
|
|
74
74
|
const UNSCOPED_WARN_COOLDOWN_MS = 60_000;
|
|
75
75
|
const UNSCOPED_WARN_EVERY_N = 100;
|
|
76
|
+
const configRouteRawDatabases = new WeakMap<object, DatabaseAdapter>();
|
|
76
77
|
|
|
77
|
-
function createRateLimitedUnscopedAccessWarning(
|
|
78
|
+
export function createRateLimitedUnscopedAccessWarning(
|
|
79
|
+
logger: Pick<PluginLogger, "warn">,
|
|
80
|
+
message: string,
|
|
81
|
+
): () => void {
|
|
78
82
|
let lastWarnAt = 0;
|
|
79
83
|
let accessCount = 0;
|
|
80
84
|
return () => {
|
|
@@ -84,24 +88,64 @@ function createRateLimitedUnscopedAccessWarning(logger: PluginLogger): () => voi
|
|
|
84
88
|
return;
|
|
85
89
|
}
|
|
86
90
|
lastWarnAt = now;
|
|
87
|
-
logger.warn(
|
|
88
|
-
"[plugin:database] PluginContext.database.unscoped is deprecated (MT-4 escape hatch); prefer ctx.database.db for tenant-scoped access.",
|
|
89
|
-
);
|
|
91
|
+
logger.warn(message);
|
|
90
92
|
};
|
|
91
93
|
}
|
|
92
94
|
|
|
95
|
+
function getPluginDatabaseOrganizationId(commerceConfig: CommerceConfig): string {
|
|
96
|
+
return (
|
|
97
|
+
getPluginDatabaseScopeOrganizationId() ??
|
|
98
|
+
resolveOrgIdForCommerce(null, commerceConfig)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function getRawDatabaseForConfigRoutes(database: DatabaseAdapter): DatabaseAdapter {
|
|
103
|
+
if (database && typeof database === "object") {
|
|
104
|
+
return configRouteRawDatabases.get(database) ?? database;
|
|
105
|
+
}
|
|
106
|
+
return database;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
export function buildConfigRoutesKernel(kernel: Kernel): ConfigRouteKernel {
|
|
110
|
+
const rawDatabase = getRawDatabaseForConfigRoutes(kernel.database);
|
|
111
|
+
const rawDb = rawDatabase.db as PluginDb;
|
|
112
|
+
const scopedDb = createScopedDb(
|
|
113
|
+
rawDb,
|
|
114
|
+
() => getPluginDatabaseOrganizationId(kernel.config),
|
|
115
|
+
);
|
|
116
|
+
const warnUnscoped = createRateLimitedUnscopedAccessWarning(
|
|
117
|
+
kernel.logger,
|
|
118
|
+
"[config:database] kernel.database.db is unscoped; prefer kernel.database.scoped for tenant-scoped access.",
|
|
119
|
+
);
|
|
120
|
+
|
|
121
|
+
const database: ConfigRouteKernel["database"] = {
|
|
122
|
+
...rawDatabase,
|
|
123
|
+
get db(): unknown {
|
|
124
|
+
warnUnscoped();
|
|
125
|
+
return rawDatabase.db;
|
|
126
|
+
},
|
|
127
|
+
get scoped(): PluginDb {
|
|
128
|
+
return scopedDb;
|
|
129
|
+
},
|
|
130
|
+
};
|
|
131
|
+
configRouteRawDatabases.set(database, rawDatabase);
|
|
132
|
+
|
|
133
|
+
return { ...kernel, database };
|
|
134
|
+
}
|
|
135
|
+
|
|
93
136
|
function buildPluginContextDatabase(
|
|
94
137
|
rawDb: PluginDb,
|
|
95
138
|
transactionFn: PluginContext["database"]["transaction"],
|
|
96
139
|
commerceConfig: CommerceConfig,
|
|
97
140
|
logger: PluginLogger,
|
|
98
141
|
): PluginContext["database"] {
|
|
99
|
-
const orgGetter = () =>
|
|
100
|
-
getPluginDatabaseScopeOrganizationId() ??
|
|
101
|
-
resolveOrgIdForCommerce(null, commerceConfig);
|
|
142
|
+
const orgGetter = () => getPluginDatabaseOrganizationId(commerceConfig);
|
|
102
143
|
|
|
103
144
|
const scopedDb = createScopedDb(rawDb, orgGetter);
|
|
104
|
-
const warnUnscoped = createRateLimitedUnscopedAccessWarning(
|
|
145
|
+
const warnUnscoped = createRateLimitedUnscopedAccessWarning(
|
|
146
|
+
logger,
|
|
147
|
+
"[plugin:database] PluginContext.database.unscoped is deprecated (MT-4 escape hatch); prefer ctx.database.db for tenant-scoped access.",
|
|
148
|
+
);
|
|
105
149
|
|
|
106
150
|
return {
|
|
107
151
|
get db(): PluginDb {
|
|
@@ -261,7 +305,7 @@ export function defineCommercePlugin(
|
|
|
261
305
|
const pluginRoutes = manifest.routes;
|
|
262
306
|
result = {
|
|
263
307
|
...result,
|
|
264
|
-
routes: (app: Hono, kernel:
|
|
308
|
+
routes: (app: Hono, kernel: ConfigRouteKernel, auth?: unknown) => {
|
|
265
309
|
existingRoutes?.(app, kernel, auth as never);
|
|
266
310
|
const k = kernel as {
|
|
267
311
|
config: CommerceConfig;
|
|
@@ -269,14 +313,15 @@ export function defineCommercePlugin(
|
|
|
269
313
|
database: DatabaseAdapter;
|
|
270
314
|
logger: PluginLogger;
|
|
271
315
|
};
|
|
316
|
+
const rawDatabase = getRawDatabaseForConfigRoutes(k.database);
|
|
272
317
|
// Narrow DatabaseAdapter<unknown> → PluginContext.database once here.
|
|
273
318
|
// All plugin code receives typed PluginDb — no casts downstream.
|
|
274
319
|
const regs = pluginRoutes({
|
|
275
320
|
config: k.config,
|
|
276
321
|
services: k.services,
|
|
277
322
|
database: buildPluginContextDatabase(
|
|
278
|
-
|
|
279
|
-
|
|
323
|
+
rawDatabase.db as PluginDb,
|
|
324
|
+
rawDatabase.transaction as PluginContext["database"]["transaction"],
|
|
280
325
|
k.config,
|
|
281
326
|
k.logger,
|
|
282
327
|
),
|
|
@@ -4,6 +4,7 @@ import type {
|
|
|
4
4
|
} from "../config/types.js";
|
|
5
5
|
import type { HookRegistry } from "../kernel/hooks/registry.js";
|
|
6
6
|
import type { DatabaseAdapter } from "../kernel/database/adapter.js";
|
|
7
|
+
import type { PluginDb } from "../kernel/database/plugin-types.js";
|
|
7
8
|
import { CatalogServiceImpl } from "../modules/catalog/service.js";
|
|
8
9
|
import { InventoryService } from "../modules/inventory/service.js";
|
|
9
10
|
import { MediaService } from "../modules/media/service.js";
|
|
@@ -65,6 +66,14 @@ export interface Kernel {
|
|
|
65
66
|
logger: ReturnType<typeof createLogger>;
|
|
66
67
|
}
|
|
67
68
|
|
|
69
|
+
export interface ConfigRouteDatabase extends DatabaseAdapter {
|
|
70
|
+
readonly scoped: PluginDb;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type ConfigRouteKernel = Omit<Kernel, "database"> & {
|
|
74
|
+
database: ConfigRouteDatabase;
|
|
75
|
+
};
|
|
76
|
+
|
|
68
77
|
export const KERNEL_REQUIRED_SERVICE_KEYS = [
|
|
69
78
|
"catalog",
|
|
70
79
|
"inventory",
|
package/src/runtime/kernel.ts
CHANGED
package/src/runtime/server.ts
CHANGED
|
@@ -11,6 +11,7 @@ import type { Actor } from "../auth/types.js";
|
|
|
11
11
|
import type { AuthInstance } from "../auth/setup.js";
|
|
12
12
|
import type { CommerceConfig } from "../config/types.js";
|
|
13
13
|
import { authMiddleware } from "../auth/middleware.js";
|
|
14
|
+
import { resolveOrgIdForCommerce } from "../auth/org.js";
|
|
14
15
|
import { organizationGuard } from "../auth/organization-guard.js";
|
|
15
16
|
import type { DrizzleDatabase } from "../kernel/database/drizzle-db.js";
|
|
16
17
|
import { CommerceCsrfError } from "../kernel/errors.js";
|
|
@@ -25,6 +26,8 @@ import { mapErrorToResponse } from "../kernel/error-mapper.js";
|
|
|
25
26
|
import { assertRouteCoverage } from "../interfaces/rest/route-coverage.js";
|
|
26
27
|
import { markRoutePermissionGuard } from "../interfaces/rest/utils.js";
|
|
27
28
|
import { isStrictOrgResolution } from "../auth/strict-org-resolution.js";
|
|
29
|
+
import { runWithPluginDatabaseScope } from "../kernel/database/plugin-db-context.js";
|
|
30
|
+
import { buildConfigRoutesKernel } from "../kernel/plugin/manifest.js";
|
|
28
31
|
|
|
29
32
|
type ServerEnv = {
|
|
30
33
|
Variables: {
|
|
@@ -349,6 +352,16 @@ export async function createServer(config: CommerceConfig) {
|
|
|
349
352
|
});
|
|
350
353
|
|
|
351
354
|
app.use("*", authMiddleware(auth, config));
|
|
355
|
+
app.use("*", async (c, next) => {
|
|
356
|
+
let organizationId: string;
|
|
357
|
+
try {
|
|
358
|
+
organizationId = resolveOrgIdForCommerce(c.get("actor"), config);
|
|
359
|
+
} catch {
|
|
360
|
+
await next();
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
await runWithPluginDatabaseScope(organizationId, next);
|
|
364
|
+
});
|
|
352
365
|
app.use("*", async (c, next) => {
|
|
353
366
|
c.set("auth", auth);
|
|
354
367
|
await next();
|
|
@@ -368,7 +381,7 @@ export async function createServer(config: CommerceConfig) {
|
|
|
368
381
|
app.route("/api/me", createCustomerPortalRoutes(kernel));
|
|
369
382
|
|
|
370
383
|
if (config.routes) {
|
|
371
|
-
config.routes(app, kernel, auth);
|
|
384
|
+
config.routes(app, buildConfigRoutesKernel(kernel), auth);
|
|
372
385
|
}
|
|
373
386
|
|
|
374
387
|
// OpenAPI spec — disabled in production unless explicitly enabled
|