@unifiedcommerce/core 0.5.2 → 0.5.4
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/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +50 -5
- package/dist/auth/org.d.ts +13 -11
- package/dist/auth/org.d.ts.map +1 -1
- package/dist/auth/org.js +23 -11
- package/dist/config/types.d.ts +44 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/hooks/checkout.d.ts.map +1 -1
- package/dist/hooks/checkout.js +3 -2
- package/dist/runtime/commerce.d.ts.map +1 -1
- package/dist/runtime/commerce.js +6 -1
- package/package.json +1 -1
- package/src/auth/middleware.ts +49 -5
- package/src/auth/org.ts +26 -11
- package/src/config/types.ts +44 -0
- package/src/hooks/checkout.ts +3 -2
- package/src/runtime/commerce.ts +7 -1
|
@@ -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,EAAmB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0B/C,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACrB,iBAAiB,
|
|
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,EAAmB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAE1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0B/C,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACrB,iBAAiB,CAkLnB"}
|
package/dist/auth/middleware.js
CHANGED
|
@@ -18,6 +18,8 @@ function resolvePermissions(session, config) {
|
|
|
18
18
|
}
|
|
19
19
|
export function authMiddleware(auth, config) {
|
|
20
20
|
return async (c, next) => {
|
|
21
|
+
// Resolve the default org from config, falling back to deprecated constant
|
|
22
|
+
const defaultOrgId = config.auth?.defaultOrganizationId ?? DEFAULT_ORG_ID;
|
|
21
23
|
const session = (await auth.api.getSession({
|
|
22
24
|
headers: c.req.raw.headers,
|
|
23
25
|
}));
|
|
@@ -33,14 +35,14 @@ export function authMiddleware(auth, config) {
|
|
|
33
35
|
if (!role && auth.api.getFullOrganization) {
|
|
34
36
|
try {
|
|
35
37
|
const org = await auth.api.getFullOrganization({
|
|
36
|
-
query: { organizationId: orgId ??
|
|
38
|
+
query: { organizationId: orgId ?? defaultOrgId },
|
|
37
39
|
headers: c.req.raw.headers,
|
|
38
40
|
});
|
|
39
41
|
if (org?.members) {
|
|
40
42
|
const membership = org.members.find((m) => m.userId === session.user.id);
|
|
41
43
|
if (membership) {
|
|
42
44
|
role = membership.role;
|
|
43
|
-
orgId = orgId ??
|
|
45
|
+
orgId = orgId ?? defaultOrgId;
|
|
44
46
|
}
|
|
45
47
|
}
|
|
46
48
|
}
|
|
@@ -60,6 +62,18 @@ export function authMiddleware(auth, config) {
|
|
|
60
62
|
// fall through — treat as customer
|
|
61
63
|
}
|
|
62
64
|
}
|
|
65
|
+
// For customers without org membership, resolve the store from the request.
|
|
66
|
+
// This enables multi-store SaaS where each storefront is a different org.
|
|
67
|
+
if (!orgId && config.auth?.storeResolver) {
|
|
68
|
+
try {
|
|
69
|
+
const resolved = await config.auth.storeResolver(c.req.raw);
|
|
70
|
+
if (resolved)
|
|
71
|
+
orgId = resolved;
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// fall through — use defaultOrgId
|
|
75
|
+
}
|
|
76
|
+
}
|
|
63
77
|
const enrichedSession = {
|
|
64
78
|
...session,
|
|
65
79
|
session: { ...session.session, activeOrganizationRole: role ?? null },
|
|
@@ -70,7 +84,7 @@ export function authMiddleware(auth, config) {
|
|
|
70
84
|
email: session.user.email ?? null,
|
|
71
85
|
name: session.user.name ?? "User",
|
|
72
86
|
vendorId: session.user.vendorId ?? null,
|
|
73
|
-
organizationId: orgId ??
|
|
87
|
+
organizationId: orgId ?? defaultOrgId,
|
|
74
88
|
role: role ?? "customer",
|
|
75
89
|
permissions: resolvePermissions(enrichedSession, config),
|
|
76
90
|
});
|
|
@@ -95,7 +109,7 @@ export function authMiddleware(auth, config) {
|
|
|
95
109
|
// v1.5+ renamed userId → referenceId on the apikey table.
|
|
96
110
|
const userId = (apiKey.referenceId ?? "");
|
|
97
111
|
const name = (apiKey.name ?? "API Key");
|
|
98
|
-
const orgId = (apiKey.organizationId ??
|
|
112
|
+
const orgId = (apiKey.organizationId ?? defaultOrgId);
|
|
99
113
|
// Better Auth stores permissions as Record<string, string[]>
|
|
100
114
|
// (e.g. {"catalog":["read","create"]}). Flatten to the
|
|
101
115
|
// "resource:action" string[] format the engine expects.
|
|
@@ -134,7 +148,38 @@ export function authMiddleware(auth, config) {
|
|
|
134
148
|
}
|
|
135
149
|
}
|
|
136
150
|
if (!c.get("actor")) {
|
|
137
|
-
|
|
151
|
+
// For anonymous requests in multi-store deployments, resolve the
|
|
152
|
+
// store so catalog/search queries return the right store's data.
|
|
153
|
+
if (config.auth?.storeResolver) {
|
|
154
|
+
try {
|
|
155
|
+
const resolved = await config.auth.storeResolver(c.req.raw);
|
|
156
|
+
if (resolved) {
|
|
157
|
+
// Set a minimal anonymous actor with the resolved org so
|
|
158
|
+
// services can scope queries correctly.
|
|
159
|
+
c.set("actor", {
|
|
160
|
+
type: "user",
|
|
161
|
+
userId: "anonymous",
|
|
162
|
+
email: null,
|
|
163
|
+
name: "Anonymous",
|
|
164
|
+
vendorId: null,
|
|
165
|
+
organizationId: resolved,
|
|
166
|
+
role: "customer",
|
|
167
|
+
permissions: config.auth?.customerPermissions ?? [
|
|
168
|
+
"catalog:read",
|
|
169
|
+
"cart:create", "cart:read", "cart:update",
|
|
170
|
+
"orders:create", "orders:read:own",
|
|
171
|
+
"customers:read:self", "customers:update:self",
|
|
172
|
+
],
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
// fall through — no actor
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
if (!c.get("actor")) {
|
|
181
|
+
c.set("actor", null);
|
|
182
|
+
}
|
|
138
183
|
}
|
|
139
184
|
await next();
|
|
140
185
|
};
|
package/dist/auth/org.d.ts
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
2
|
+
* @deprecated Use `config.auth.defaultOrganizationId` instead.
|
|
3
|
+
* This constant will be removed in the next major version.
|
|
4
|
+
* See RFC-060 for migration details.
|
|
4
5
|
*/
|
|
5
6
|
export declare const DEFAULT_ORG_ID = "org_default";
|
|
6
7
|
/**
|
|
7
8
|
* Extracts the organization ID from an actor.
|
|
8
|
-
*
|
|
9
|
+
*
|
|
10
|
+
* Resolution order:
|
|
11
|
+
* 1. Actor's organizationId (set by middleware from session/API key)
|
|
12
|
+
* 2. Explicit defaultOrgId parameter (from config.auth.defaultOrganizationId)
|
|
13
|
+
* 3. Deprecated fallback to "org_default" (logs warning once)
|
|
9
14
|
*/
|
|
10
|
-
export declare function resolveOrgId(actor: unknown): string;
|
|
15
|
+
export declare function resolveOrgId(actor: unknown, defaultOrgId?: string): string;
|
|
11
16
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
17
|
+
* @deprecated Use seed script with `auth.api.createOrganization()` instead.
|
|
18
|
+
* This function will be removed in the next major version. See RFC-060.
|
|
14
19
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* Accepts `unknown` so callers never need casts — the function
|
|
19
|
-
* handles the Drizzle type narrowing internally.
|
|
20
|
+
* Ensures the default organization row exists in the database.
|
|
21
|
+
* Idempotent — safe to call multiple times.
|
|
20
22
|
*/
|
|
21
23
|
export declare function ensureDefaultOrg(db: unknown, storeName?: string): Promise<void>;
|
|
22
24
|
//# sourceMappingURL=org.d.ts.map
|
package/dist/auth/org.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/auth/org.ts"],"names":[],"mappings":"AAEA
|
|
1
|
+
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/auth/org.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAI5C;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAiB1E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,OAAO,EACX,SAAS,SAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
package/dist/auth/org.js
CHANGED
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
import { OrganizationService } from "../modules/organization/service.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
3
|
+
* @deprecated Use `config.auth.defaultOrganizationId` instead.
|
|
4
|
+
* This constant will be removed in the next major version.
|
|
5
|
+
* See RFC-060 for migration details.
|
|
5
6
|
*/
|
|
6
7
|
export const DEFAULT_ORG_ID = "org_default";
|
|
8
|
+
let hasLoggedDeprecation = false;
|
|
7
9
|
/**
|
|
8
10
|
* Extracts the organization ID from an actor.
|
|
9
|
-
*
|
|
11
|
+
*
|
|
12
|
+
* Resolution order:
|
|
13
|
+
* 1. Actor's organizationId (set by middleware from session/API key)
|
|
14
|
+
* 2. Explicit defaultOrgId parameter (from config.auth.defaultOrganizationId)
|
|
15
|
+
* 3. Deprecated fallback to "org_default" (logs warning once)
|
|
10
16
|
*/
|
|
11
|
-
export function resolveOrgId(actor) {
|
|
17
|
+
export function resolveOrgId(actor, defaultOrgId) {
|
|
12
18
|
if (actor != null && typeof actor === "object" && "organizationId" in actor) {
|
|
13
19
|
const orgId = actor.organizationId;
|
|
14
20
|
if (typeof orgId === "string")
|
|
15
21
|
return orgId;
|
|
16
22
|
}
|
|
23
|
+
if (defaultOrgId)
|
|
24
|
+
return defaultOrgId;
|
|
25
|
+
// Deprecated fallback — will become an error in next major version
|
|
26
|
+
if (!hasLoggedDeprecation) {
|
|
27
|
+
hasLoggedDeprecation = true;
|
|
28
|
+
console.warn("[UC DEPRECATION] resolveOrgId() fell back to 'org_default'. " +
|
|
29
|
+
"Set auth.defaultOrganizationId in your commerce config. " +
|
|
30
|
+
"This fallback will be removed in the next major version. See RFC-060.");
|
|
31
|
+
}
|
|
17
32
|
return DEFAULT_ORG_ID;
|
|
18
33
|
}
|
|
19
34
|
/**
|
|
20
|
-
*
|
|
21
|
-
*
|
|
35
|
+
* @deprecated Use seed script with `auth.api.createOrganization()` instead.
|
|
36
|
+
* This function will be removed in the next major version. See RFC-060.
|
|
22
37
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* Accepts `unknown` so callers never need casts — the function
|
|
27
|
-
* handles the Drizzle type narrowing internally.
|
|
38
|
+
* Ensures the default organization row exists in the database.
|
|
39
|
+
* Idempotent — safe to call multiple times.
|
|
28
40
|
*/
|
|
29
41
|
export async function ensureDefaultOrg(db, storeName = "Default Store") {
|
|
30
42
|
const orgService = new OrganizationService(db);
|
package/dist/config/types.d.ts
CHANGED
|
@@ -66,6 +66,19 @@ export interface ApiKeyScopeDefinition {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
export interface AuthConfig {
|
|
69
|
+
/**
|
|
70
|
+
* The default organization ID for single-store deployments.
|
|
71
|
+
* Created by the seed script via `auth.api.createOrganization()`.
|
|
72
|
+
* Used as fallback when a request has no org context (no session org,
|
|
73
|
+
* no storeResolver match). If not set and no storeResolver is configured,
|
|
74
|
+
* falls back to `"org_default"` with a deprecation warning.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```ts
|
|
78
|
+
* defaultOrganizationId: process.env.UC_ORG_ID,
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
defaultOrganizationId?: string;
|
|
69
82
|
requireEmailVerification?: boolean;
|
|
70
83
|
sessionDuration?: number;
|
|
71
84
|
socialProviders?: Record<string, {
|
|
@@ -95,6 +108,37 @@ export interface AuthConfig {
|
|
|
95
108
|
* Better Auth's API key plugin is configured with one config per scope.
|
|
96
109
|
*/
|
|
97
110
|
apiKeyScopes?: Record<string, ApiKeyScopeDefinition>;
|
|
111
|
+
/**
|
|
112
|
+
* Resolves which organization (store) a request belongs to.
|
|
113
|
+
*
|
|
114
|
+
* Used in multi-store SaaS deployments where each store is a separate
|
|
115
|
+
* organization. The resolver runs when a customer has no org membership
|
|
116
|
+
* (i.e., they're not an admin/staff/vendor).
|
|
117
|
+
*
|
|
118
|
+
* Common patterns:
|
|
119
|
+
* - Header-based: read `x-store-id` header set by the frontend
|
|
120
|
+
* - Domain-based: resolve org from request origin/host
|
|
121
|
+
* - Path-based: extract org slug from URL prefix
|
|
122
|
+
*
|
|
123
|
+
* Single-store and marketplace deployments don't need this — all data
|
|
124
|
+
* is scoped to org_default automatically.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* storeResolver: async (request) => {
|
|
129
|
+
* // Header-based: frontend sends x-store-id
|
|
130
|
+
* const storeId = request.headers.get("x-store-id");
|
|
131
|
+
* if (storeId) return storeId;
|
|
132
|
+
*
|
|
133
|
+
* // Domain-based: resolve from origin
|
|
134
|
+
* const origin = request.headers.get("origin");
|
|
135
|
+
* if (origin) return await lookupOrgByDomain(origin);
|
|
136
|
+
*
|
|
137
|
+
* return null; // falls back to org_default
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
storeResolver?: (request: Request) => string | null | Promise<string | null>;
|
|
98
142
|
/**
|
|
99
143
|
* Phone number OTP authentication via Better Auth's phoneNumber plugin.
|
|
100
144
|
* When configured, users can sign in/up with phone + OTP instead of email/password.
|
|
@@ -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,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AAEhG,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,UAAU,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;IACnC,SAAS,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAChC,QAAQ,EAAE,mBAAmB,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,6NAA6N;IAC7N,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAC;IACpB,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,sDAAsD;IACtD,SAAS,CAAC,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,mCAAmC;QACnC,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7E,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9D,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,qEAAqE;QACrE,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IACrD;;;;;OAKG;IACH,SAAS,CAAC,EAAE;QACV,wFAAwF;QACxF,OAAO,EAAE,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/F,wFAAwF;QACxF,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE;YAAE,WAAW,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,EAAE,GAAG,EAAE,OAAO,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QACxG,8BAA8B;QAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,uDAAuD;QACvD,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,4FAA4F;QAC5F,oBAAoB,CAAC,EAAE;YACrB,YAAY,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;YAC9C,WAAW,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;SAC/C,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACtC,YAAY,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACpC,gBAAgB,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,eAAe,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,oBAAoB,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,mBAAmB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;KAC5C,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE;QACN,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACnC,kBAAkB,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,iBAAiB,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,QAAQ,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,YAAY,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;KACtC,CAAC;IACF;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;KACpC,CAAC;CACH;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB,kBAAkB,CAAC,EAAE;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAChD;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,OAAO,CAAC;QAAE,OAAO,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5E;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,MAAM,EAAE,cAAc,KACnB,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE;QACR,QAAQ,EAAE,YAAY,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC,CAAC;IACF,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACxC,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,KAAK,EAAE;YACV,QAAQ,EAAE,MAAM,CAAC;YACjB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SAChC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE,SAAS,CAAC;IAChB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,GAAG,CAAC,EAAE;QACJ,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,yDAAyD;QACzD,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;KACjC,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,WAAW,CAAC;QACtB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;QACzB,OAAO,CAAC,EAAE;YACR,OAAO,EAAE,OAAO,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC;SACrB,CAAC;KACH,CAAC;IACF;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACxC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,EAAE,cAAc,EAAE,CAAC;IAC3B,UAAU,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACjC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;IAC1C,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;IACnE;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,+BAA+B;IAC/B,UAAU,CAAC,EAAE;QACX,yDAAyD;QACzD,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,2DAA2D;QAC3D,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,oDAAoD;QACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,iBAAkB,SAAQ,cAAc;CAAG;AAE5D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,OAAO,EAAE;QACP,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACxC,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/checkout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkout.d.ts","sourceRoot":"","sources":["../../src/hooks/checkout.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/checkout.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CommerceValidationError } from "../kernel/errors.js";
|
|
2
|
+
import { resolveOrgId } from "../auth/org.js";
|
|
2
3
|
import { runCompensationChain } from "../kernel/compensation/executor.js";
|
|
3
4
|
import { reserveInventoryStep, capturePaymentStep, initiateFulfillmentStep, sendConfirmationStep, } from "./checkout-completion.js";
|
|
4
5
|
function recalculateTotals(data) {
|
|
@@ -18,7 +19,7 @@ export const validateCartNotEmpty = async ({ data, context, }) => {
|
|
|
18
19
|
throw new CommerceValidationError("Cannot checkout an empty cart.");
|
|
19
20
|
}
|
|
20
21
|
// Cross-org guard: prevent org B from checking out org A's cart
|
|
21
|
-
const actorOrgId = context.actor
|
|
22
|
+
const actorOrgId = resolveOrgId(context.actor);
|
|
22
23
|
if (cart.value.organizationId && cart.value.organizationId !== actorOrgId) {
|
|
23
24
|
throw new CommerceValidationError("Cart does not belong to this organization.");
|
|
24
25
|
}
|
|
@@ -89,7 +90,7 @@ export const checkInventoryAvailability = async ({ data, context, }) => {
|
|
|
89
90
|
export const applyPromotionCodes = async ({ data, context, }) => {
|
|
90
91
|
const promotions = context.services.promotions;
|
|
91
92
|
const result = await promotions.applyPromotions({
|
|
92
|
-
orgId: context.actor
|
|
93
|
+
orgId: resolveOrgId(context.actor),
|
|
93
94
|
cartId: data.cartId,
|
|
94
95
|
currency: data.currency,
|
|
95
96
|
subtotal: data.subtotal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../../src/runtime/commerce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkB,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,GAAG,EAAE,gBAAgB,CAAC;IAEtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,EAAE,EAAE,OAAO,CAAC;IAEZ,yDAAyD;IACzD,IAAI,EAAE,YAAY,CAAC;IAEnB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAC;CACtE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../../src/runtime/commerce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkB,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,GAAG,EAAE,gBAAgB,CAAC;IAEtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,EAAE,EAAE,OAAO,CAAC;IAEZ,yDAAyD;IACzD,IAAI,EAAE,YAAY,CAAC;IAEnB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAC;CACtE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CA+B3B"}
|
package/dist/runtime/commerce.js
CHANGED
|
@@ -16,7 +16,12 @@ import { createLocalAPI } from "../kernel/local-api.js";
|
|
|
16
16
|
*/
|
|
17
17
|
export async function createCommerce(config) {
|
|
18
18
|
const kernel = createKernel(config);
|
|
19
|
-
|
|
19
|
+
// If no explicit org ID is configured, fall back to legacy ensureDefaultOrg behavior
|
|
20
|
+
// with a deprecation warning. New deployments should use seed scripts with
|
|
21
|
+
// auth.api.createOrganization() and set config.auth.defaultOrganizationId.
|
|
22
|
+
if (!config.auth?.defaultOrganizationId) {
|
|
23
|
+
await ensureDefaultOrg(kernel.database.db, config.storeName);
|
|
24
|
+
}
|
|
20
25
|
const auth = createAuth(kernel.database, config);
|
|
21
26
|
const logger = createLogger(config);
|
|
22
27
|
// Default API: no actor (public access), no transaction
|
package/package.json
CHANGED
package/src/auth/middleware.ts
CHANGED
|
@@ -32,6 +32,9 @@ export function authMiddleware(
|
|
|
32
32
|
config: CommerceConfig,
|
|
33
33
|
): MiddlewareHandler {
|
|
34
34
|
return async (c, next) => {
|
|
35
|
+
// Resolve the default org from config, falling back to deprecated constant
|
|
36
|
+
const defaultOrgId = config.auth?.defaultOrganizationId ?? DEFAULT_ORG_ID;
|
|
37
|
+
|
|
35
38
|
const session = (await auth.api.getSession({
|
|
36
39
|
headers: c.req.raw.headers,
|
|
37
40
|
})) as AuthSessionLike | null;
|
|
@@ -49,7 +52,7 @@ export function authMiddleware(
|
|
|
49
52
|
if (!role && auth.api.getFullOrganization) {
|
|
50
53
|
try {
|
|
51
54
|
const org = await auth.api.getFullOrganization({
|
|
52
|
-
query: { organizationId: orgId ??
|
|
55
|
+
query: { organizationId: orgId ?? defaultOrgId },
|
|
53
56
|
headers: c.req.raw.headers,
|
|
54
57
|
});
|
|
55
58
|
if (org?.members) {
|
|
@@ -58,7 +61,7 @@ export function authMiddleware(
|
|
|
58
61
|
);
|
|
59
62
|
if (membership) {
|
|
60
63
|
role = membership.role;
|
|
61
|
-
orgId = orgId ??
|
|
64
|
+
orgId = orgId ?? defaultOrgId;
|
|
62
65
|
}
|
|
63
66
|
}
|
|
64
67
|
} catch {
|
|
@@ -78,6 +81,17 @@ export function authMiddleware(
|
|
|
78
81
|
}
|
|
79
82
|
}
|
|
80
83
|
|
|
84
|
+
// For customers without org membership, resolve the store from the request.
|
|
85
|
+
// This enables multi-store SaaS where each storefront is a different org.
|
|
86
|
+
if (!orgId && config.auth?.storeResolver) {
|
|
87
|
+
try {
|
|
88
|
+
const resolved = await config.auth.storeResolver(c.req.raw);
|
|
89
|
+
if (resolved) orgId = resolved;
|
|
90
|
+
} catch {
|
|
91
|
+
// fall through — use defaultOrgId
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
81
95
|
const enrichedSession = {
|
|
82
96
|
...session,
|
|
83
97
|
session: { ...session.session, activeOrganizationRole: role ?? null },
|
|
@@ -88,7 +102,7 @@ export function authMiddleware(
|
|
|
88
102
|
email: session.user.email ?? null,
|
|
89
103
|
name: session.user.name ?? "User",
|
|
90
104
|
vendorId: session.user.vendorId ?? null,
|
|
91
|
-
organizationId: orgId ??
|
|
105
|
+
organizationId: orgId ?? defaultOrgId,
|
|
92
106
|
role: role ?? "customer",
|
|
93
107
|
permissions: resolvePermissions(enrichedSession, config),
|
|
94
108
|
} satisfies Actor);
|
|
@@ -119,7 +133,7 @@ export function authMiddleware(
|
|
|
119
133
|
// v1.5+ renamed userId → referenceId on the apikey table.
|
|
120
134
|
const userId = (apiKey.referenceId ?? "") as string;
|
|
121
135
|
const name = (apiKey.name ?? "API Key") as string;
|
|
122
|
-
const orgId = (apiKey.organizationId ??
|
|
136
|
+
const orgId = (apiKey.organizationId ?? defaultOrgId) as string;
|
|
123
137
|
|
|
124
138
|
// Better Auth stores permissions as Record<string, string[]>
|
|
125
139
|
// (e.g. {"catalog":["read","create"]}). Flatten to the
|
|
@@ -160,7 +174,37 @@ export function authMiddleware(
|
|
|
160
174
|
}
|
|
161
175
|
|
|
162
176
|
if (!c.get("actor")) {
|
|
163
|
-
|
|
177
|
+
// For anonymous requests in multi-store deployments, resolve the
|
|
178
|
+
// store so catalog/search queries return the right store's data.
|
|
179
|
+
if (config.auth?.storeResolver) {
|
|
180
|
+
try {
|
|
181
|
+
const resolved = await config.auth.storeResolver(c.req.raw);
|
|
182
|
+
if (resolved) {
|
|
183
|
+
// Set a minimal anonymous actor with the resolved org so
|
|
184
|
+
// services can scope queries correctly.
|
|
185
|
+
c.set("actor", {
|
|
186
|
+
type: "user",
|
|
187
|
+
userId: "anonymous",
|
|
188
|
+
email: null,
|
|
189
|
+
name: "Anonymous",
|
|
190
|
+
vendorId: null,
|
|
191
|
+
organizationId: resolved,
|
|
192
|
+
role: "customer",
|
|
193
|
+
permissions: config.auth?.customerPermissions ?? [
|
|
194
|
+
"catalog:read",
|
|
195
|
+
"cart:create", "cart:read", "cart:update",
|
|
196
|
+
"orders:create", "orders:read:own",
|
|
197
|
+
"customers:read:self", "customers:update:self",
|
|
198
|
+
],
|
|
199
|
+
} satisfies Actor);
|
|
200
|
+
}
|
|
201
|
+
} catch {
|
|
202
|
+
// fall through — no actor
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (!c.get("actor")) {
|
|
206
|
+
c.set("actor", null);
|
|
207
|
+
}
|
|
164
208
|
}
|
|
165
209
|
await next();
|
|
166
210
|
};
|
package/src/auth/org.ts
CHANGED
|
@@ -1,32 +1,47 @@
|
|
|
1
1
|
import { OrganizationService } from "../modules/organization/service.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* @deprecated Use `config.auth.defaultOrganizationId` instead.
|
|
5
|
+
* This constant will be removed in the next major version.
|
|
6
|
+
* See RFC-060 for migration details.
|
|
6
7
|
*/
|
|
7
8
|
export const DEFAULT_ORG_ID = "org_default";
|
|
8
9
|
|
|
10
|
+
let hasLoggedDeprecation = false;
|
|
11
|
+
|
|
9
12
|
/**
|
|
10
13
|
* Extracts the organization ID from an actor.
|
|
11
|
-
*
|
|
14
|
+
*
|
|
15
|
+
* Resolution order:
|
|
16
|
+
* 1. Actor's organizationId (set by middleware from session/API key)
|
|
17
|
+
* 2. Explicit defaultOrgId parameter (from config.auth.defaultOrganizationId)
|
|
18
|
+
* 3. Deprecated fallback to "org_default" (logs warning once)
|
|
12
19
|
*/
|
|
13
|
-
export function resolveOrgId(actor: unknown): string {
|
|
20
|
+
export function resolveOrgId(actor: unknown, defaultOrgId?: string): string {
|
|
14
21
|
if (actor != null && typeof actor === "object" && "organizationId" in actor) {
|
|
15
22
|
const orgId = (actor as { organizationId: unknown }).organizationId;
|
|
16
23
|
if (typeof orgId === "string") return orgId;
|
|
17
24
|
}
|
|
25
|
+
if (defaultOrgId) return defaultOrgId;
|
|
26
|
+
|
|
27
|
+
// Deprecated fallback — will become an error in next major version
|
|
28
|
+
if (!hasLoggedDeprecation) {
|
|
29
|
+
hasLoggedDeprecation = true;
|
|
30
|
+
console.warn(
|
|
31
|
+
"[UC DEPRECATION] resolveOrgId() fell back to 'org_default'. " +
|
|
32
|
+
"Set auth.defaultOrganizationId in your commerce config. " +
|
|
33
|
+
"This fallback will be removed in the next major version. See RFC-060.",
|
|
34
|
+
);
|
|
35
|
+
}
|
|
18
36
|
return DEFAULT_ORG_ID;
|
|
19
37
|
}
|
|
20
38
|
|
|
21
39
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
* Uses OrganizationService which creates both the org row and
|
|
26
|
-
* (when auth is available) a member record for the creator.
|
|
40
|
+
* @deprecated Use seed script with `auth.api.createOrganization()` instead.
|
|
41
|
+
* This function will be removed in the next major version. See RFC-060.
|
|
27
42
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
43
|
+
* Ensures the default organization row exists in the database.
|
|
44
|
+
* Idempotent — safe to call multiple times.
|
|
30
45
|
*/
|
|
31
46
|
export async function ensureDefaultOrg(
|
|
32
47
|
db: unknown,
|
package/src/config/types.ts
CHANGED
|
@@ -74,6 +74,19 @@ export interface ApiKeyScopeDefinition {
|
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
export interface AuthConfig {
|
|
77
|
+
/**
|
|
78
|
+
* The default organization ID for single-store deployments.
|
|
79
|
+
* Created by the seed script via `auth.api.createOrganization()`.
|
|
80
|
+
* Used as fallback when a request has no org context (no session org,
|
|
81
|
+
* no storeResolver match). If not set and no storeResolver is configured,
|
|
82
|
+
* falls back to `"org_default"` with a deprecation warning.
|
|
83
|
+
*
|
|
84
|
+
* @example
|
|
85
|
+
* ```ts
|
|
86
|
+
* defaultOrganizationId: process.env.UC_ORG_ID,
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
defaultOrganizationId?: string;
|
|
77
90
|
requireEmailVerification?: boolean;
|
|
78
91
|
sessionDuration?: number;
|
|
79
92
|
socialProviders?: Record<string, { clientId: string; clientSecret: string }>;
|
|
@@ -95,6 +108,37 @@ export interface AuthConfig {
|
|
|
95
108
|
* Better Auth's API key plugin is configured with one config per scope.
|
|
96
109
|
*/
|
|
97
110
|
apiKeyScopes?: Record<string, ApiKeyScopeDefinition>;
|
|
111
|
+
/**
|
|
112
|
+
* Resolves which organization (store) a request belongs to.
|
|
113
|
+
*
|
|
114
|
+
* Used in multi-store SaaS deployments where each store is a separate
|
|
115
|
+
* organization. The resolver runs when a customer has no org membership
|
|
116
|
+
* (i.e., they're not an admin/staff/vendor).
|
|
117
|
+
*
|
|
118
|
+
* Common patterns:
|
|
119
|
+
* - Header-based: read `x-store-id` header set by the frontend
|
|
120
|
+
* - Domain-based: resolve org from request origin/host
|
|
121
|
+
* - Path-based: extract org slug from URL prefix
|
|
122
|
+
*
|
|
123
|
+
* Single-store and marketplace deployments don't need this — all data
|
|
124
|
+
* is scoped to org_default automatically.
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```ts
|
|
128
|
+
* storeResolver: async (request) => {
|
|
129
|
+
* // Header-based: frontend sends x-store-id
|
|
130
|
+
* const storeId = request.headers.get("x-store-id");
|
|
131
|
+
* if (storeId) return storeId;
|
|
132
|
+
*
|
|
133
|
+
* // Domain-based: resolve from origin
|
|
134
|
+
* const origin = request.headers.get("origin");
|
|
135
|
+
* if (origin) return await lookupOrgByDomain(origin);
|
|
136
|
+
*
|
|
137
|
+
* return null; // falls back to org_default
|
|
138
|
+
* }
|
|
139
|
+
* ```
|
|
140
|
+
*/
|
|
141
|
+
storeResolver?: (request: Request) => string | null | Promise<string | null>;
|
|
98
142
|
/**
|
|
99
143
|
* Phone number OTP authentication via Better Auth's phoneNumber plugin.
|
|
100
144
|
* When configured, users can sign in/up with phone + OTP instead of email/password.
|
package/src/hooks/checkout.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CommerceValidationError } from "../kernel/errors.js";
|
|
2
|
+
import { resolveOrgId } from "../auth/org.js";
|
|
2
3
|
import type { AfterHook, BeforeHook } from "../kernel/hooks/types.js";
|
|
3
4
|
import type { ShippingAddress } from "../modules/shipping/calculator.js";
|
|
4
5
|
import type { AppliedPromotion } from "../modules/promotions/service.js";
|
|
@@ -141,7 +142,7 @@ export const validateCartNotEmpty: BeforeHook<CheckoutData> = async ({
|
|
|
141
142
|
}
|
|
142
143
|
|
|
143
144
|
// Cross-org guard: prevent org B from checking out org A's cart
|
|
144
|
-
const actorOrgId = context.actor
|
|
145
|
+
const actorOrgId = resolveOrgId(context.actor);
|
|
145
146
|
if (cart.value.organizationId && cart.value.organizationId !== actorOrgId) {
|
|
146
147
|
throw new CommerceValidationError("Cart does not belong to this organization.");
|
|
147
148
|
}
|
|
@@ -306,7 +307,7 @@ export const applyPromotionCodes: BeforeHook<CheckoutData> = async ({
|
|
|
306
307
|
};
|
|
307
308
|
|
|
308
309
|
const result = await promotions.applyPromotions({
|
|
309
|
-
orgId: context.actor
|
|
310
|
+
orgId: resolveOrgId(context.actor),
|
|
310
311
|
cartId: data.cartId,
|
|
311
312
|
currency: data.currency,
|
|
312
313
|
subtotal: data.subtotal,
|
package/src/runtime/commerce.ts
CHANGED
|
@@ -120,7 +120,13 @@ export async function createCommerce(
|
|
|
120
120
|
config: CommerceConfig,
|
|
121
121
|
): Promise<CommerceInstance> {
|
|
122
122
|
const kernel = createKernel(config);
|
|
123
|
-
|
|
123
|
+
|
|
124
|
+
// If no explicit org ID is configured, fall back to legacy ensureDefaultOrg behavior
|
|
125
|
+
// with a deprecation warning. New deployments should use seed scripts with
|
|
126
|
+
// auth.api.createOrganization() and set config.auth.defaultOrganizationId.
|
|
127
|
+
if (!config.auth?.defaultOrganizationId) {
|
|
128
|
+
await ensureDefaultOrg(kernel.database.db, config.storeName);
|
|
129
|
+
}
|
|
124
130
|
|
|
125
131
|
const auth = createAuth(kernel.database, config);
|
|
126
132
|
const logger = createLogger(config);
|