@porulle/core 0.10.8 → 0.13.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/auth-schema-guard.d.ts +2444 -0
- package/dist/auth/auth-schema-guard.d.ts.map +1 -0
- package/dist/auth/auth-schema-guard.js +113 -0
- package/dist/auth/auth-schema.d.ts +228 -0
- package/dist/auth/auth-schema.d.ts.map +1 -1
- package/dist/auth/auth-schema.js +24 -2
- package/dist/auth/middleware.d.ts +1 -0
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +13 -5
- package/dist/auth/org.d.ts +8 -2
- package/dist/auth/org.d.ts.map +1 -1
- package/dist/auth/org.js +12 -4
- package/dist/auth/organization-guard.d.ts +5 -0
- package/dist/auth/organization-guard.d.ts.map +1 -0
- package/dist/auth/organization-guard.js +124 -0
- package/dist/auth/permissions.d.ts +10 -0
- package/dist/auth/permissions.d.ts.map +1 -1
- package/dist/auth/permissions.js +31 -7
- package/dist/auth/role-authority.d.ts +44 -0
- package/dist/auth/role-authority.d.ts.map +1 -0
- package/dist/auth/role-authority.js +85 -0
- package/dist/auth/setup.d.ts.map +1 -1
- package/dist/auth/setup.js +17 -0
- package/dist/auth/strict-org-resolution.d.ts.map +1 -1
- package/dist/auth/strict-org-resolution.js +9 -1
- package/dist/auth/types.d.ts +1 -1
- package/dist/auth/types.d.ts.map +1 -1
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +2 -0
- package/dist/config/types.d.ts +33 -4
- package/dist/config/types.d.ts.map +1 -1
- package/dist/hooks/checkout.d.ts.map +1 -1
- package/dist/hooks/checkout.js +10 -9
- package/dist/index.d.ts +9 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/interfaces/rest/audit-middleware.d.ts.map +1 -1
- package/dist/interfaces/rest/audit-middleware.js +2 -0
- package/dist/interfaces/rest/customer-portal.d.ts.map +1 -1
- package/dist/interfaces/rest/customer-portal.js +9 -8
- package/dist/interfaces/rest/index.d.ts.map +1 -1
- package/dist/interfaces/rest/index.js +4 -0
- package/dist/interfaces/rest/route-coverage.d.ts +14 -0
- package/dist/interfaces/rest/route-coverage.d.ts.map +1 -0
- package/dist/interfaces/rest/route-coverage.js +81 -0
- package/dist/interfaces/rest/router.d.ts +7 -2
- package/dist/interfaces/rest/router.d.ts.map +1 -1
- package/dist/interfaces/rest/router.js +8 -4
- package/dist/interfaces/rest/routes/admin/compensation-failures.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/admin/compensation-failures.js +7 -5
- package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts +5 -0
- package/dist/interfaces/rest/routes/admin/custom-field-proposals.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/admin/custom-field-proposals.js +22 -0
- package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts +5 -0
- package/dist/interfaces/rest/routes/admin/entity-field-definitions.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/admin/entity-field-definitions.js +39 -0
- package/dist/interfaces/rest/routes/admin/permissions.d.ts +1 -1
- package/dist/interfaces/rest/routes/admin/permissions.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/admin/permissions.js +2 -0
- package/dist/interfaces/rest/routes/admin/staff.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/admin/staff.js +126 -66
- package/dist/interfaces/rest/routes/admin-jobs.js +3 -3
- package/dist/interfaces/rest/routes/audit.js +3 -3
- package/dist/interfaces/rest/routes/carts.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/carts.js +13 -10
- package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/catalog.js +47 -4
- package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/checkout.js +30 -35
- package/dist/interfaces/rest/routes/documents.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/documents.js +10 -5
- package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/inventory.js +2 -0
- package/dist/interfaces/rest/routes/media.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/media.js +7 -3
- package/dist/interfaces/rest/routes/orders.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/orders.js +26 -8
- package/dist/interfaces/rest/routes/pricing.js +2 -2
- package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/promotions.js +13 -10
- package/dist/interfaces/rest/routes/search.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/search.js +14 -1
- package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts +134 -0
- package/dist/interfaces/rest/schemas/admin-custom-field-proposals.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/admin-custom-field-proposals.js +26 -0
- package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts +592 -0
- package/dist/interfaces/rest/schemas/admin-entity-field-definitions.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/admin-entity-field-definitions.js +109 -0
- package/dist/interfaces/rest/schemas/carts.d.ts +7 -0
- package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/catalog.d.ts +1364 -401
- package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/catalog.js +86 -0
- package/dist/interfaces/rest/schemas/customer-portal.d.ts +35 -0
- package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/orders.d.ts +204 -0
- package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/pricing.d.ts +1 -0
- package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/responses.d.ts +71 -0
- package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/search.d.ts +1 -0
- package/dist/interfaces/rest/schemas/search.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/search.js +1 -0
- package/dist/interfaces/rest/utils.d.ts +15 -0
- package/dist/interfaces/rest/utils.d.ts.map +1 -1
- package/dist/interfaces/rest/utils.js +45 -2
- package/dist/kernel/compensation/executor.js +2 -2
- package/dist/kernel/database/tx-context.d.ts +8 -0
- package/dist/kernel/database/tx-context.d.ts.map +1 -1
- package/dist/kernel/database/tx-context.js +13 -0
- package/dist/kernel/hooks/create-context.d.ts +2 -0
- package/dist/kernel/hooks/create-context.d.ts.map +1 -1
- package/dist/kernel/hooks/create-context.js +1 -0
- package/dist/kernel/hooks/types.d.ts +2 -0
- package/dist/kernel/hooks/types.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.js +9 -5
- package/dist/modules/analytics/service.js +2 -2
- package/dist/modules/audit/service.js +3 -3
- package/dist/modules/cart/repository/index.d.ts +13 -7
- package/dist/modules/cart/repository/index.d.ts.map +1 -1
- package/dist/modules/cart/repository/index.js +16 -10
- package/dist/modules/cart/schema.d.ts +17 -0
- package/dist/modules/cart/schema.d.ts.map +1 -1
- package/dist/modules/cart/schema.js +4 -0
- package/dist/modules/cart/service.d.ts +22 -9
- package/dist/modules/cart/service.d.ts.map +1 -1
- package/dist/modules/cart/service.js +57 -33
- package/dist/modules/catalog/brand-service.js +7 -7
- package/dist/modules/catalog/category-service.js +7 -7
- package/dist/modules/catalog/entity-service.d.ts +19 -10
- package/dist/modules/catalog/entity-service.d.ts.map +1 -1
- package/dist/modules/catalog/entity-service.js +180 -51
- package/dist/modules/catalog/module.d.ts +6 -1
- package/dist/modules/catalog/module.d.ts.map +1 -1
- package/dist/modules/catalog/module.js +6 -1
- package/dist/modules/catalog/ownership.d.ts +5 -0
- package/dist/modules/catalog/ownership.d.ts.map +1 -0
- package/dist/modules/catalog/ownership.js +11 -0
- package/dist/modules/catalog/read-policy.d.ts +9 -0
- package/dist/modules/catalog/read-policy.d.ts.map +1 -0
- package/dist/modules/catalog/read-policy.js +8 -0
- package/dist/modules/catalog/repository/index.d.ts +55 -3
- package/dist/modules/catalog/repository/index.d.ts.map +1 -1
- package/dist/modules/catalog/repository/index.js +335 -6
- package/dist/modules/catalog/revision.d.ts +4 -0
- package/dist/modules/catalog/revision.d.ts.map +1 -0
- package/dist/modules/catalog/revision.js +33 -0
- package/dist/modules/catalog/schema.d.ts +979 -110
- package/dist/modules/catalog/schema.d.ts.map +1 -1
- package/dist/modules/catalog/schema.js +112 -2
- package/dist/modules/catalog/schemas.d.ts +2 -0
- package/dist/modules/catalog/schemas.d.ts.map +1 -1
- package/dist/modules/catalog/schemas.js +2 -0
- package/dist/modules/catalog/service.d.ts +80 -15
- package/dist/modules/catalog/service.d.ts.map +1 -1
- package/dist/modules/catalog/service.js +522 -14
- package/dist/modules/channels/adapter.d.ts +85 -0
- package/dist/modules/channels/adapter.d.ts.map +1 -1
- package/dist/modules/channels/adapter.js +9 -1
- package/dist/modules/customers/module.d.ts.map +1 -1
- package/dist/modules/customers/module.js +1 -0
- package/dist/modules/customers/service.d.ts +2 -0
- package/dist/modules/customers/service.d.ts.map +1 -1
- package/dist/modules/customers/service.js +21 -20
- package/dist/modules/documents/module.d.ts.map +1 -1
- package/dist/modules/documents/module.js +1 -0
- package/dist/modules/documents/service.d.ts +18 -4
- package/dist/modules/documents/service.d.ts.map +1 -1
- package/dist/modules/documents/service.js +54 -16
- package/dist/modules/fulfillment/module.d.ts.map +1 -1
- package/dist/modules/fulfillment/module.js +1 -0
- package/dist/modules/fulfillment/service.d.ts +2 -0
- package/dist/modules/fulfillment/service.d.ts.map +1 -1
- package/dist/modules/fulfillment/service.js +15 -6
- package/dist/modules/inventory/service.d.ts.map +1 -1
- package/dist/modules/inventory/service.js +15 -14
- package/dist/modules/media/module.d.ts +68 -0
- package/dist/modules/media/module.d.ts.map +1 -1
- package/dist/modules/media/module.js +2 -0
- package/dist/modules/media/schema.d.ts +70 -0
- package/dist/modules/media/schema.d.ts.map +1 -1
- package/dist/modules/media/schema.js +20 -2
- package/dist/modules/media/service.d.ts +8 -1
- package/dist/modules/media/service.d.ts.map +1 -1
- package/dist/modules/media/service.js +71 -23
- package/dist/modules/orders/guest-access.d.ts +27 -0
- package/dist/modules/orders/guest-access.d.ts.map +1 -0
- package/dist/modules/orders/guest-access.js +46 -0
- package/dist/modules/orders/module.d.ts.map +1 -1
- package/dist/modules/orders/module.js +1 -0
- package/dist/modules/orders/quote.d.ts.map +1 -1
- package/dist/modules/orders/quote.js +1 -0
- package/dist/modules/orders/repository/index.d.ts +1 -1
- package/dist/modules/orders/repository/index.d.ts.map +1 -1
- package/dist/modules/orders/repository/index.js +2 -2
- package/dist/modules/orders/schema.d.ts +17 -0
- package/dist/modules/orders/schema.d.ts.map +1 -1
- package/dist/modules/orders/schema.js +5 -3
- package/dist/modules/orders/service.d.ts +16 -7
- package/dist/modules/orders/service.d.ts.map +1 -1
- package/dist/modules/orders/service.js +184 -55
- package/dist/modules/pricing/module.d.ts.map +1 -1
- package/dist/modules/pricing/module.js +1 -0
- package/dist/modules/pricing/schema.d.ts +17 -0
- package/dist/modules/pricing/schema.d.ts.map +1 -1
- package/dist/modules/pricing/schema.js +1 -0
- package/dist/modules/pricing/schemas.d.ts +1 -0
- package/dist/modules/pricing/schemas.d.ts.map +1 -1
- package/dist/modules/pricing/schemas.js +1 -0
- package/dist/modules/pricing/service.d.ts +2 -0
- package/dist/modules/pricing/service.d.ts.map +1 -1
- package/dist/modules/pricing/service.js +18 -12
- package/dist/modules/promotions/module.d.ts.map +1 -1
- package/dist/modules/promotions/module.js +1 -0
- package/dist/modules/promotions/service.d.ts +3 -0
- package/dist/modules/promotions/service.d.ts.map +1 -1
- package/dist/modules/promotions/service.js +19 -11
- package/dist/modules/search/adapter.d.ts +8 -0
- package/dist/modules/search/adapter.d.ts.map +1 -1
- package/dist/modules/search/module.d.ts.map +1 -1
- package/dist/modules/search/module.js +3 -0
- package/dist/modules/search/service.d.ts +5 -0
- package/dist/modules/search/service.d.ts.map +1 -1
- package/dist/modules/search/service.js +131 -11
- package/dist/modules/settings/module.d.ts.map +1 -1
- package/dist/modules/settings/module.js +1 -0
- package/dist/modules/settings/service.d.ts +3 -0
- package/dist/modules/settings/service.d.ts.map +1 -1
- package/dist/modules/settings/service.js +6 -4
- package/dist/modules/shipping/service.js +9 -9
- package/dist/modules/tax/module.d.ts.map +1 -1
- package/dist/modules/tax/module.js +1 -0
- package/dist/modules/tax/service.d.ts +3 -0
- package/dist/modules/tax/service.d.ts.map +1 -1
- package/dist/modules/tax/service.js +11 -9
- package/dist/modules/webhooks/hook.js +2 -2
- package/dist/modules/webhooks/module.d.ts.map +1 -1
- package/dist/modules/webhooks/module.js +1 -0
- package/dist/modules/webhooks/service.d.ts +2 -0
- package/dist/modules/webhooks/service.d.ts.map +1 -1
- package/dist/modules/webhooks/service.js +4 -4
- package/dist/runtime/kernel-modules.d.ts +73 -0
- package/dist/runtime/kernel-modules.d.ts.map +1 -1
- package/dist/runtime/server.d.ts.map +1 -1
- package/dist/runtime/server.js +10 -2
- package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -1
- package/dist/test-utils/create-pglite-adapter.js +35 -13
- package/dist/test-utils/create-test-config.d.ts.map +1 -1
- package/dist/test-utils/create-test-config.js +4 -0
- package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -1
- package/dist/test-utils/rest-api-test-utils.js +2 -0
- package/dist/test-utils/test-actors.js +2 -2
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +11 -0
- package/package.json +6 -5
- package/src/auth/auth-schema-guard.ts +143 -0
- package/src/auth/auth-schema.ts +50 -19
- package/src/auth/middleware.ts +17 -5
- package/src/auth/org.ts +15 -3
- package/src/auth/organization-guard.ts +158 -0
- package/src/auth/permissions.ts +31 -8
- package/src/auth/role-authority.ts +107 -0
- package/src/auth/setup.ts +17 -0
- package/src/auth/strict-org-resolution.ts +7 -1
- package/src/auth/types.ts +1 -1
- package/src/config/defaults.ts +2 -0
- package/src/config/types.ts +32 -4
- package/src/hooks/checkout.ts +19 -12
- package/src/index.ts +30 -6
- package/src/interfaces/rest/audit-middleware.ts +2 -0
- package/src/interfaces/rest/customer-portal.ts +31 -24
- package/src/interfaces/rest/index.ts +4 -0
- package/src/interfaces/rest/route-coverage.ts +103 -0
- package/src/interfaces/rest/router.ts +16 -10
- package/src/interfaces/rest/routes/admin/compensation-failures.ts +8 -5
- package/src/interfaces/rest/routes/admin/custom-field-proposals.ts +37 -0
- package/src/interfaces/rest/routes/admin/entity-field-definitions.ts +89 -0
- package/src/interfaces/rest/routes/admin/permissions.ts +3 -1
- package/src/interfaces/rest/routes/admin/staff.ts +161 -72
- package/src/interfaces/rest/routes/admin-jobs.ts +3 -3
- package/src/interfaces/rest/routes/audit.ts +3 -3
- package/src/interfaces/rest/routes/carts.ts +17 -7
- package/src/interfaces/rest/routes/catalog.ts +96 -0
- package/src/interfaces/rest/routes/checkout.ts +41 -38
- package/src/interfaces/rest/routes/documents.ts +15 -1
- package/src/interfaces/rest/routes/inventory.ts +2 -0
- package/src/interfaces/rest/routes/media.ts +8 -3
- package/src/interfaces/rest/routes/orders.ts +27 -8
- package/src/interfaces/rest/routes/pricing.ts +2 -2
- package/src/interfaces/rest/routes/promotions.ts +12 -9
- package/src/interfaces/rest/routes/search.ts +19 -1
- package/src/interfaces/rest/schemas/admin-custom-field-proposals.ts +29 -0
- package/src/interfaces/rest/schemas/admin-entity-field-definitions.ts +120 -0
- package/src/interfaces/rest/schemas/catalog.ts +92 -0
- package/src/interfaces/rest/schemas/search.ts +2 -0
- package/src/interfaces/rest/utils.ts +61 -2
- package/src/kernel/compensation/executor.ts +2 -2
- package/src/kernel/database/tx-context.ts +25 -0
- package/src/kernel/hooks/create-context.ts +3 -0
- package/src/kernel/hooks/types.ts +2 -0
- package/src/kernel/plugin/manifest.ts +9 -5
- package/src/modules/analytics/service.ts +2 -2
- package/src/modules/audit/service.ts +3 -3
- package/src/modules/cart/repository/index.ts +22 -8
- package/src/modules/cart/schema.ts +4 -0
- package/src/modules/cart/service.ts +62 -27
- package/src/modules/catalog/brand-service.ts +7 -7
- package/src/modules/catalog/category-service.ts +7 -7
- package/src/modules/catalog/entity-service.ts +188 -53
- package/src/modules/catalog/module.ts +15 -0
- package/src/modules/catalog/ownership.ts +17 -0
- package/src/modules/catalog/read-policy.ts +16 -0
- package/src/modules/catalog/repository/index.ts +566 -4
- package/src/modules/catalog/revision.ts +35 -0
- package/src/modules/catalog/schema.ts +169 -1
- package/src/modules/catalog/schemas.ts +2 -0
- package/src/modules/catalog/service.ts +766 -26
- package/src/modules/channels/adapter.ts +107 -1
- package/src/modules/customers/module.ts +2 -0
- package/src/modules/customers/service.ts +23 -22
- package/src/modules/documents/module.ts +2 -0
- package/src/modules/documents/service.ts +74 -11
- package/src/modules/fulfillment/module.ts +2 -0
- package/src/modules/fulfillment/service.ts +17 -6
- package/src/modules/inventory/service.ts +15 -24
- package/src/modules/media/module.ts +2 -0
- package/src/modules/media/schema.ts +23 -2
- package/src/modules/media/service.ts +89 -28
- package/src/modules/orders/guest-access.ts +55 -0
- package/src/modules/orders/module.ts +1 -0
- package/src/modules/orders/quote.ts +1 -0
- package/src/modules/orders/repository/index.ts +2 -0
- package/src/modules/orders/schema.ts +5 -3
- package/src/modules/orders/service.ts +302 -52
- package/src/modules/pricing/module.ts +2 -0
- package/src/modules/pricing/schema.ts +1 -0
- package/src/modules/pricing/schemas.ts +1 -0
- package/src/modules/pricing/service.ts +21 -18
- package/src/modules/promotions/module.ts +2 -0
- package/src/modules/promotions/service.ts +25 -16
- package/src/modules/search/adapter.ts +8 -0
- package/src/modules/search/module.ts +3 -0
- package/src/modules/search/service.ts +142 -12
- package/src/modules/settings/module.ts +2 -0
- package/src/modules/settings/service.ts +8 -4
- package/src/modules/shipping/service.ts +9 -9
- package/src/modules/tax/module.ts +1 -0
- package/src/modules/tax/service.ts +13 -9
- package/src/modules/webhooks/hook.ts +2 -2
- package/src/modules/webhooks/module.ts +2 -0
- package/src/modules/webhooks/service.ts +6 -4
- package/src/runtime/server.ts +16 -2
- package/src/test-utils/create-pglite-adapter.ts +34 -12
- package/src/test-utils/create-test-config.ts +10 -6
- package/src/test-utils/rest-api-test-utils.ts +2 -0
- package/src/test-utils/test-actors.ts +2 -2
- package/src/utils/id.ts +20 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-schema-guard.d.ts","sourceRoot":"","sources":["../../src/auth/auth-schema-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compares Porulle's Drizzle auth tables against better-auth's canonical
|
|
3
|
+
* {@link getAuthTables} output so a dependency minor bump cannot add a column
|
|
4
|
+
* the declared schema omits.
|
|
5
|
+
*/
|
|
6
|
+
import { getTableColumns, getTableName } from "drizzle-orm";
|
|
7
|
+
import { getAuthTables } from "better-auth/db";
|
|
8
|
+
import { apiKey } from "@better-auth/api-key";
|
|
9
|
+
import { organization, twoFactor, phoneNumber, jwt, bearer } from "better-auth/plugins";
|
|
10
|
+
import * as authSchema from "./auth-schema.js";
|
|
11
|
+
/**
|
|
12
|
+
* Every plugin {@link createAuth} can enable, not only the ones it enables by
|
|
13
|
+
* default. The shipped schema has to satisfy any configuration a merchant
|
|
14
|
+
* chooses, so the guard compares against the maximal table set: a column that
|
|
15
|
+
* only `twoFactor` needs is still a column this package must declare.
|
|
16
|
+
*/
|
|
17
|
+
export const AUTH_SCHEMA_GUARD_OPTIONS = {
|
|
18
|
+
plugins: [
|
|
19
|
+
organization({ roles: {} }),
|
|
20
|
+
bearer(),
|
|
21
|
+
jwt(),
|
|
22
|
+
twoFactor({ issuer: "porulle-auth-schema-guard" }),
|
|
23
|
+
apiKey(),
|
|
24
|
+
phoneNumber(),
|
|
25
|
+
],
|
|
26
|
+
user: {
|
|
27
|
+
additionalFields: {
|
|
28
|
+
vendorId: { type: "string", required: false },
|
|
29
|
+
posOperatorPin: { type: "string", required: false },
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Drizzle tables keyed by the SQL table name they declare, so the guard walks
|
|
35
|
+
* whatever models better-auth reports rather than a list someone has to
|
|
36
|
+
* remember to extend. A hand-maintained model list is how `jwks.alg` shipped
|
|
37
|
+
* missing while this guard passed.
|
|
38
|
+
*/
|
|
39
|
+
function drizzleTablesByName() {
|
|
40
|
+
const byName = new Map();
|
|
41
|
+
for (const value of Object.values(authSchema)) {
|
|
42
|
+
try {
|
|
43
|
+
byName.set(getTableName(value), value);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// Not a Drizzle table (type export, index helper) — skip.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return byName;
|
|
50
|
+
}
|
|
51
|
+
function drizzleColumnForField(table, fieldKey, fieldName) {
|
|
52
|
+
const columns = getTableColumns(table);
|
|
53
|
+
if (fieldKey in columns) {
|
|
54
|
+
return columns[fieldKey];
|
|
55
|
+
}
|
|
56
|
+
for (const column of Object.values(columns)) {
|
|
57
|
+
if (column.name === fieldName) {
|
|
58
|
+
return column;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Returns every mismatch between better-auth's expected auth tables and the
|
|
65
|
+
* Drizzle definitions Porulle ships. An empty array means parity holds.
|
|
66
|
+
*/
|
|
67
|
+
export function findAuthSchemaParityMismatches(options = AUTH_SCHEMA_GUARD_OPTIONS) {
|
|
68
|
+
const mismatches = [];
|
|
69
|
+
const authTables = getAuthTables(options);
|
|
70
|
+
const byName = drizzleTablesByName();
|
|
71
|
+
for (const [model, tableDef] of Object.entries(authTables)) {
|
|
72
|
+
if (!tableDef)
|
|
73
|
+
continue;
|
|
74
|
+
const drizzleTable = byName.get(tableDef.modelName);
|
|
75
|
+
if (!drizzleTable) {
|
|
76
|
+
mismatches.push({
|
|
77
|
+
model,
|
|
78
|
+
field: "*",
|
|
79
|
+
issue: `no drizzle table declares better-auth model "${tableDef.modelName}"`,
|
|
80
|
+
});
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
for (const [fieldKey, fieldAttr] of Object.entries(tableDef.fields)) {
|
|
84
|
+
const column = drizzleColumnForField(drizzleTable, fieldKey, fieldAttr.fieldName ?? fieldKey);
|
|
85
|
+
if (!column) {
|
|
86
|
+
mismatches.push({
|
|
87
|
+
model,
|
|
88
|
+
field: fieldKey,
|
|
89
|
+
issue: `drizzle column missing for better-auth field "${fieldKey}"`,
|
|
90
|
+
});
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const required = fieldAttr.required !== false;
|
|
94
|
+
if (required && !column.notNull) {
|
|
95
|
+
mismatches.push({
|
|
96
|
+
model,
|
|
97
|
+
field: fieldKey,
|
|
98
|
+
issue: `column "${column.name}" must be NOT NULL (better-auth required)`,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return mismatches;
|
|
104
|
+
}
|
|
105
|
+
export function assertAuthSchemaParity(options = AUTH_SCHEMA_GUARD_OPTIONS) {
|
|
106
|
+
const mismatches = findAuthSchemaParityMismatches(options);
|
|
107
|
+
if (mismatches.length === 0)
|
|
108
|
+
return;
|
|
109
|
+
const detail = mismatches
|
|
110
|
+
.map((m) => ` ${m.model}.${m.field}: ${m.issue}`)
|
|
111
|
+
.join("\n");
|
|
112
|
+
throw new Error(`Porulle auth-schema.ts is out of sync with installed better-auth:\n${detail}`);
|
|
113
|
+
}
|
|
@@ -155,6 +155,57 @@ export declare const user: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
155
155
|
identity: undefined;
|
|
156
156
|
generated: undefined;
|
|
157
157
|
}, {}, {}>;
|
|
158
|
+
twoFactorEnabled: import("drizzle-orm/pg-core").PgColumn<{
|
|
159
|
+
name: "two_factor_enabled";
|
|
160
|
+
tableName: "user";
|
|
161
|
+
dataType: "boolean";
|
|
162
|
+
columnType: "PgBoolean";
|
|
163
|
+
data: boolean;
|
|
164
|
+
driverParam: boolean;
|
|
165
|
+
notNull: false;
|
|
166
|
+
hasDefault: true;
|
|
167
|
+
isPrimaryKey: false;
|
|
168
|
+
isAutoincrement: false;
|
|
169
|
+
hasRuntimeDefault: false;
|
|
170
|
+
enumValues: undefined;
|
|
171
|
+
baseColumn: never;
|
|
172
|
+
identity: undefined;
|
|
173
|
+
generated: undefined;
|
|
174
|
+
}, {}, {}>;
|
|
175
|
+
phoneNumber: import("drizzle-orm/pg-core").PgColumn<{
|
|
176
|
+
name: "phone_number";
|
|
177
|
+
tableName: "user";
|
|
178
|
+
dataType: "string";
|
|
179
|
+
columnType: "PgText";
|
|
180
|
+
data: string;
|
|
181
|
+
driverParam: string;
|
|
182
|
+
notNull: false;
|
|
183
|
+
hasDefault: false;
|
|
184
|
+
isPrimaryKey: false;
|
|
185
|
+
isAutoincrement: false;
|
|
186
|
+
hasRuntimeDefault: false;
|
|
187
|
+
enumValues: [string, ...string[]];
|
|
188
|
+
baseColumn: never;
|
|
189
|
+
identity: undefined;
|
|
190
|
+
generated: undefined;
|
|
191
|
+
}, {}, {}>;
|
|
192
|
+
phoneNumberVerified: import("drizzle-orm/pg-core").PgColumn<{
|
|
193
|
+
name: "phone_number_verified";
|
|
194
|
+
tableName: "user";
|
|
195
|
+
dataType: "boolean";
|
|
196
|
+
columnType: "PgBoolean";
|
|
197
|
+
data: boolean;
|
|
198
|
+
driverParam: boolean;
|
|
199
|
+
notNull: false;
|
|
200
|
+
hasDefault: true;
|
|
201
|
+
isPrimaryKey: false;
|
|
202
|
+
isAutoincrement: false;
|
|
203
|
+
hasRuntimeDefault: false;
|
|
204
|
+
enumValues: undefined;
|
|
205
|
+
baseColumn: never;
|
|
206
|
+
identity: undefined;
|
|
207
|
+
generated: undefined;
|
|
208
|
+
}, {}, {}>;
|
|
158
209
|
};
|
|
159
210
|
dialect: "pg";
|
|
160
211
|
}>;
|
|
@@ -339,6 +390,23 @@ export declare const account: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
339
390
|
identity: undefined;
|
|
340
391
|
generated: undefined;
|
|
341
392
|
}, {}, {}>;
|
|
393
|
+
issuer: import("drizzle-orm/pg-core").PgColumn<{
|
|
394
|
+
name: "issuer";
|
|
395
|
+
tableName: "account";
|
|
396
|
+
dataType: "string";
|
|
397
|
+
columnType: "PgText";
|
|
398
|
+
data: string;
|
|
399
|
+
driverParam: string;
|
|
400
|
+
notNull: true;
|
|
401
|
+
hasDefault: false;
|
|
402
|
+
isPrimaryKey: false;
|
|
403
|
+
isAutoincrement: false;
|
|
404
|
+
hasRuntimeDefault: false;
|
|
405
|
+
enumValues: [string, ...string[]];
|
|
406
|
+
baseColumn: never;
|
|
407
|
+
identity: undefined;
|
|
408
|
+
generated: undefined;
|
|
409
|
+
}, {}, {}>;
|
|
342
410
|
accountId: import("drizzle-orm/pg-core").PgColumn<{
|
|
343
411
|
name: "account_id";
|
|
344
412
|
tableName: "account";
|
|
@@ -1469,6 +1537,166 @@ export declare const jwks: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
|
1469
1537
|
identity: undefined;
|
|
1470
1538
|
generated: undefined;
|
|
1471
1539
|
}, {}, {}>;
|
|
1540
|
+
alg: import("drizzle-orm/pg-core").PgColumn<{
|
|
1541
|
+
name: "alg";
|
|
1542
|
+
tableName: "jwks";
|
|
1543
|
+
dataType: "string";
|
|
1544
|
+
columnType: "PgText";
|
|
1545
|
+
data: string;
|
|
1546
|
+
driverParam: string;
|
|
1547
|
+
notNull: false;
|
|
1548
|
+
hasDefault: false;
|
|
1549
|
+
isPrimaryKey: false;
|
|
1550
|
+
isAutoincrement: false;
|
|
1551
|
+
hasRuntimeDefault: false;
|
|
1552
|
+
enumValues: [string, ...string[]];
|
|
1553
|
+
baseColumn: never;
|
|
1554
|
+
identity: undefined;
|
|
1555
|
+
generated: undefined;
|
|
1556
|
+
}, {}, {}>;
|
|
1557
|
+
crv: import("drizzle-orm/pg-core").PgColumn<{
|
|
1558
|
+
name: "crv";
|
|
1559
|
+
tableName: "jwks";
|
|
1560
|
+
dataType: "string";
|
|
1561
|
+
columnType: "PgText";
|
|
1562
|
+
data: string;
|
|
1563
|
+
driverParam: string;
|
|
1564
|
+
notNull: false;
|
|
1565
|
+
hasDefault: false;
|
|
1566
|
+
isPrimaryKey: false;
|
|
1567
|
+
isAutoincrement: false;
|
|
1568
|
+
hasRuntimeDefault: false;
|
|
1569
|
+
enumValues: [string, ...string[]];
|
|
1570
|
+
baseColumn: never;
|
|
1571
|
+
identity: undefined;
|
|
1572
|
+
generated: undefined;
|
|
1573
|
+
}, {}, {}>;
|
|
1574
|
+
};
|
|
1575
|
+
dialect: "pg";
|
|
1576
|
+
}>;
|
|
1577
|
+
export declare const twoFactor: import("drizzle-orm/pg-core").PgTableWithColumns<{
|
|
1578
|
+
name: "twoFactor";
|
|
1579
|
+
schema: undefined;
|
|
1580
|
+
columns: {
|
|
1581
|
+
id: import("drizzle-orm/pg-core").PgColumn<{
|
|
1582
|
+
name: "id";
|
|
1583
|
+
tableName: "twoFactor";
|
|
1584
|
+
dataType: "string";
|
|
1585
|
+
columnType: "PgText";
|
|
1586
|
+
data: string;
|
|
1587
|
+
driverParam: string;
|
|
1588
|
+
notNull: true;
|
|
1589
|
+
hasDefault: false;
|
|
1590
|
+
isPrimaryKey: true;
|
|
1591
|
+
isAutoincrement: false;
|
|
1592
|
+
hasRuntimeDefault: false;
|
|
1593
|
+
enumValues: [string, ...string[]];
|
|
1594
|
+
baseColumn: never;
|
|
1595
|
+
identity: undefined;
|
|
1596
|
+
generated: undefined;
|
|
1597
|
+
}, {}, {}>;
|
|
1598
|
+
secret: import("drizzle-orm/pg-core").PgColumn<{
|
|
1599
|
+
name: "secret";
|
|
1600
|
+
tableName: "twoFactor";
|
|
1601
|
+
dataType: "string";
|
|
1602
|
+
columnType: "PgText";
|
|
1603
|
+
data: string;
|
|
1604
|
+
driverParam: string;
|
|
1605
|
+
notNull: true;
|
|
1606
|
+
hasDefault: false;
|
|
1607
|
+
isPrimaryKey: false;
|
|
1608
|
+
isAutoincrement: false;
|
|
1609
|
+
hasRuntimeDefault: false;
|
|
1610
|
+
enumValues: [string, ...string[]];
|
|
1611
|
+
baseColumn: never;
|
|
1612
|
+
identity: undefined;
|
|
1613
|
+
generated: undefined;
|
|
1614
|
+
}, {}, {}>;
|
|
1615
|
+
backupCodes: import("drizzle-orm/pg-core").PgColumn<{
|
|
1616
|
+
name: "backup_codes";
|
|
1617
|
+
tableName: "twoFactor";
|
|
1618
|
+
dataType: "string";
|
|
1619
|
+
columnType: "PgText";
|
|
1620
|
+
data: string;
|
|
1621
|
+
driverParam: string;
|
|
1622
|
+
notNull: true;
|
|
1623
|
+
hasDefault: false;
|
|
1624
|
+
isPrimaryKey: false;
|
|
1625
|
+
isAutoincrement: false;
|
|
1626
|
+
hasRuntimeDefault: false;
|
|
1627
|
+
enumValues: [string, ...string[]];
|
|
1628
|
+
baseColumn: never;
|
|
1629
|
+
identity: undefined;
|
|
1630
|
+
generated: undefined;
|
|
1631
|
+
}, {}, {}>;
|
|
1632
|
+
userId: import("drizzle-orm/pg-core").PgColumn<{
|
|
1633
|
+
name: "user_id";
|
|
1634
|
+
tableName: "twoFactor";
|
|
1635
|
+
dataType: "string";
|
|
1636
|
+
columnType: "PgText";
|
|
1637
|
+
data: string;
|
|
1638
|
+
driverParam: string;
|
|
1639
|
+
notNull: true;
|
|
1640
|
+
hasDefault: false;
|
|
1641
|
+
isPrimaryKey: false;
|
|
1642
|
+
isAutoincrement: false;
|
|
1643
|
+
hasRuntimeDefault: false;
|
|
1644
|
+
enumValues: [string, ...string[]];
|
|
1645
|
+
baseColumn: never;
|
|
1646
|
+
identity: undefined;
|
|
1647
|
+
generated: undefined;
|
|
1648
|
+
}, {}, {}>;
|
|
1649
|
+
verified: import("drizzle-orm/pg-core").PgColumn<{
|
|
1650
|
+
name: "verified";
|
|
1651
|
+
tableName: "twoFactor";
|
|
1652
|
+
dataType: "boolean";
|
|
1653
|
+
columnType: "PgBoolean";
|
|
1654
|
+
data: boolean;
|
|
1655
|
+
driverParam: boolean;
|
|
1656
|
+
notNull: false;
|
|
1657
|
+
hasDefault: true;
|
|
1658
|
+
isPrimaryKey: false;
|
|
1659
|
+
isAutoincrement: false;
|
|
1660
|
+
hasRuntimeDefault: false;
|
|
1661
|
+
enumValues: undefined;
|
|
1662
|
+
baseColumn: never;
|
|
1663
|
+
identity: undefined;
|
|
1664
|
+
generated: undefined;
|
|
1665
|
+
}, {}, {}>;
|
|
1666
|
+
failedVerificationCount: import("drizzle-orm/pg-core").PgColumn<{
|
|
1667
|
+
name: "failed_verification_count";
|
|
1668
|
+
tableName: "twoFactor";
|
|
1669
|
+
dataType: "number";
|
|
1670
|
+
columnType: "PgInteger";
|
|
1671
|
+
data: number;
|
|
1672
|
+
driverParam: string | number;
|
|
1673
|
+
notNull: false;
|
|
1674
|
+
hasDefault: true;
|
|
1675
|
+
isPrimaryKey: false;
|
|
1676
|
+
isAutoincrement: false;
|
|
1677
|
+
hasRuntimeDefault: false;
|
|
1678
|
+
enumValues: undefined;
|
|
1679
|
+
baseColumn: never;
|
|
1680
|
+
identity: undefined;
|
|
1681
|
+
generated: undefined;
|
|
1682
|
+
}, {}, {}>;
|
|
1683
|
+
lockedUntil: import("drizzle-orm/pg-core").PgColumn<{
|
|
1684
|
+
name: "locked_until";
|
|
1685
|
+
tableName: "twoFactor";
|
|
1686
|
+
dataType: "date";
|
|
1687
|
+
columnType: "PgTimestamp";
|
|
1688
|
+
data: Date;
|
|
1689
|
+
driverParam: string;
|
|
1690
|
+
notNull: false;
|
|
1691
|
+
hasDefault: false;
|
|
1692
|
+
isPrimaryKey: false;
|
|
1693
|
+
isAutoincrement: false;
|
|
1694
|
+
hasRuntimeDefault: false;
|
|
1695
|
+
enumValues: undefined;
|
|
1696
|
+
baseColumn: never;
|
|
1697
|
+
identity: undefined;
|
|
1698
|
+
generated: undefined;
|
|
1699
|
+
}, {}, {}>;
|
|
1472
1700
|
};
|
|
1473
1701
|
dialect: "pg";
|
|
1474
1702
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-schema.d.ts","sourceRoot":"","sources":["../../src/auth/auth-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth-schema.d.ts","sourceRoot":"","sources":["../../src/auth/auth-schema.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmBf,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAclB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4BnB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUvB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOvB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUjB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAarB,CAAC;AAEH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuBjB,CAAC;AAEH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQf,CAAC;AAEH,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpB,CAAC"}
|
package/dist/auth/auth-schema.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { pgTable, text, timestamp, boolean, integer, } from "drizzle-orm/pg-core";
|
|
1
|
+
import { pgTable, text, timestamp, boolean, integer, uniqueIndex, } from "drizzle-orm/pg-core";
|
|
2
2
|
export const user = pgTable("user", {
|
|
3
3
|
id: text("id").primaryKey(),
|
|
4
4
|
name: text("name").notNull(),
|
|
@@ -12,6 +12,12 @@ export const user = pgTable("user", {
|
|
|
12
12
|
.notNull(),
|
|
13
13
|
vendorId: text("vendor_id"),
|
|
14
14
|
posOperatorPin: text("pos_operator_pin"),
|
|
15
|
+
// Contributed by the twoFactor and phoneNumber plugins. Declared
|
|
16
|
+
// unconditionally: the plugins are config-gated, but one shipped schema has
|
|
17
|
+
// to satisfy every configuration a merchant can choose.
|
|
18
|
+
twoFactorEnabled: boolean("two_factor_enabled").default(false),
|
|
19
|
+
phoneNumber: text("phone_number").unique(),
|
|
20
|
+
phoneNumberVerified: boolean("phone_number_verified").default(false),
|
|
15
21
|
});
|
|
16
22
|
export const session = pgTable("session", {
|
|
17
23
|
id: text("id").primaryKey(),
|
|
@@ -30,6 +36,7 @@ export const session = pgTable("session", {
|
|
|
30
36
|
});
|
|
31
37
|
export const account = pgTable("account", {
|
|
32
38
|
id: text("id").primaryKey(),
|
|
39
|
+
issuer: text("issuer").notNull(),
|
|
33
40
|
accountId: text("account_id").notNull(),
|
|
34
41
|
providerId: text("provider_id").notNull(),
|
|
35
42
|
userId: text("user_id")
|
|
@@ -46,7 +53,9 @@ export const account = pgTable("account", {
|
|
|
46
53
|
updatedAt: timestamp("updated_at")
|
|
47
54
|
.$onUpdate(() => /* @__PURE__ */ new Date())
|
|
48
55
|
.notNull(),
|
|
49
|
-
})
|
|
56
|
+
}, (table) => [
|
|
57
|
+
uniqueIndex("account_issuer_account_id_unique").on(table.issuer, table.accountId),
|
|
58
|
+
]);
|
|
50
59
|
export const verification = pgTable("verification", {
|
|
51
60
|
id: text("id").primaryKey(),
|
|
52
61
|
identifier: text("identifier").notNull(),
|
|
@@ -121,4 +130,17 @@ export const jwks = pgTable("jwks", {
|
|
|
121
130
|
privateKey: text("private_key").notNull(),
|
|
122
131
|
createdAt: timestamp("created_at").notNull(),
|
|
123
132
|
expiresAt: timestamp("expires_at"),
|
|
133
|
+
alg: text("alg"),
|
|
134
|
+
crv: text("crv"),
|
|
135
|
+
});
|
|
136
|
+
export const twoFactor = pgTable("twoFactor", {
|
|
137
|
+
id: text("id").primaryKey(),
|
|
138
|
+
secret: text("secret").notNull(),
|
|
139
|
+
backupCodes: text("backup_codes").notNull(),
|
|
140
|
+
userId: text("user_id")
|
|
141
|
+
.notNull()
|
|
142
|
+
.references(() => user.id, { onDelete: "cascade" }),
|
|
143
|
+
verified: boolean("verified").default(false),
|
|
144
|
+
failedVerificationCount: integer("failed_verification_count").default(0),
|
|
145
|
+
lockedUntil: timestamp("locked_until"),
|
|
124
146
|
});
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
2
|
import type { CommerceConfig } from "../config/types.js";
|
|
3
3
|
import type { AuthInstance } from "./setup.js";
|
|
4
|
+
export declare const DEFAULT_CUSTOMER_PERMISSIONS: readonly ["catalog:read", "cart:create", "cart:read", "cart:update", "orders:create", "orders:read:own", "customers:read:self", "customers:update:self"];
|
|
4
5
|
export declare function authMiddleware(auth: AuthInstance, config: CommerceConfig): MiddlewareHandler;
|
|
5
6
|
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -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;
|
|
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;AAY/C,eAAO,MAAM,4BAA4B,0JAS/B,CAAC;AAqBX,wBAAgB,cAAc,CAC5B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,cAAc,GACrB,iBAAiB,CAgQnB"}
|
package/dist/auth/middleware.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { DEFAULT_ORG_ID } from "./org.js";
|
|
2
2
|
import { isStrictOrgResolution } from "./strict-org-resolution.js";
|
|
3
|
-
|
|
3
|
+
function emptyToNull(value) {
|
|
4
|
+
return value == null || value === "" ? null : value;
|
|
5
|
+
}
|
|
6
|
+
// Exported so the storefront contract can be pinned by a test: an anonymous
|
|
7
|
+
// visitor resolved by `storeResolver` gets these permissions, so dropping
|
|
8
|
+
// `catalog:read` here would 401 every public storefront read.
|
|
9
|
+
export const DEFAULT_CUSTOMER_PERMISSIONS = [
|
|
4
10
|
"catalog:read",
|
|
5
11
|
"cart:create",
|
|
6
12
|
"cart:read",
|
|
@@ -166,9 +172,11 @@ export function authMiddleware(auth, config) {
|
|
|
166
172
|
: null;
|
|
167
173
|
const metaOrg = typeof meta?.organizationId === "string" ? meta.organizationId : undefined;
|
|
168
174
|
const orgId = (metaOrg ?? apiKey.organizationId ?? defaultOrgId);
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
175
|
+
// No operator and no reference means the key carries no user
|
|
176
|
+
// identity. Leave it absent rather than substituting a shared
|
|
177
|
+
// placeholder, which would make every such key look like one person.
|
|
178
|
+
const userId = emptyToNull((typeof meta?.operatorId === "string" ? meta.operatorId : undefined) ??
|
|
179
|
+
(typeof apiKey.referenceId === "string" ? apiKey.referenceId : undefined));
|
|
172
180
|
// Better Auth stores permissions as Record<string, string[]>
|
|
173
181
|
// (e.g. {"catalog":["read","create"]}). Flatten to the
|
|
174
182
|
// "resource:action" string[] format the engine expects.
|
|
@@ -217,7 +225,7 @@ export function authMiddleware(auth, config) {
|
|
|
217
225
|
// services can scope queries correctly.
|
|
218
226
|
c.set("actor", {
|
|
219
227
|
type: "user",
|
|
220
|
-
userId:
|
|
228
|
+
userId: null,
|
|
221
229
|
email: null,
|
|
222
230
|
name: "Anonymous",
|
|
223
231
|
vendorId: null,
|
package/dist/auth/org.d.ts
CHANGED
|
@@ -10,14 +10,20 @@ export declare const DEFAULT_ORG_ID = "org_default";
|
|
|
10
10
|
* config (available at boot) and services (which don't have config access).
|
|
11
11
|
*/
|
|
12
12
|
export declare function setBootDefaultOrgId(orgId: string): void;
|
|
13
|
+
/**
|
|
14
|
+
* Resolves org using an explicit config default — not ambient boot state.
|
|
15
|
+
* Use when the caller holds CommerceConfig and may lack an actor organizationId.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveOrgIdForCommerce(actor: unknown, config?: CommerceConfig | null): string;
|
|
13
18
|
/**
|
|
14
19
|
* Extracts the organization ID from an actor.
|
|
15
20
|
*
|
|
16
21
|
* Resolution order:
|
|
17
22
|
* 1. Actor's organizationId (set by middleware from session/API key/storeResolver)
|
|
18
23
|
* 2. Explicit defaultOrgId parameter (caller override)
|
|
19
|
-
* 3.
|
|
20
|
-
* 4.
|
|
24
|
+
* 3. Strict check — throw OrgResolutionError when enabled
|
|
25
|
+
* 4. Boot-time default (from config.auth.defaultOrganizationId via setBootDefaultOrgId)
|
|
26
|
+
* 5. Deprecated fallback to DEFAULT_ORG_ID (will be removed)
|
|
21
27
|
*/
|
|
22
28
|
export declare function resolveOrgId(actor: unknown, defaultOrgId?: string, commerceConfig?: CommerceConfig): string;
|
|
23
29
|
/**
|
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":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAS5C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED
|
|
1
|
+
{"version":3,"file":"org.d.ts","sourceRoot":"","sources":["../../src/auth/org.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAiBzD;;;GAGG;AACH,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAS5C;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEvD;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE,cAAc,GAAG,IAAI,GAC7B,MAAM,CAER;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,OAAO,EACd,YAAY,CAAC,EAAE,MAAM,EACrB,cAAc,CAAC,EAAE,cAAc,GAC9B,MAAM,CAcR;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,OAAO,EACX,SAAS,SAAkB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
package/dist/auth/org.js
CHANGED
|
@@ -29,14 +29,22 @@ let _bootDefaultOrgId;
|
|
|
29
29
|
export function setBootDefaultOrgId(orgId) {
|
|
30
30
|
_bootDefaultOrgId = orgId;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* Resolves org using an explicit config default — not ambient boot state.
|
|
34
|
+
* Use when the caller holds CommerceConfig and may lack an actor organizationId.
|
|
35
|
+
*/
|
|
36
|
+
export function resolveOrgIdForCommerce(actor, config) {
|
|
37
|
+
return resolveOrgId(actor, config?.auth?.defaultOrganizationId, config ?? undefined);
|
|
38
|
+
}
|
|
32
39
|
/**
|
|
33
40
|
* Extracts the organization ID from an actor.
|
|
34
41
|
*
|
|
35
42
|
* Resolution order:
|
|
36
43
|
* 1. Actor's organizationId (set by middleware from session/API key/storeResolver)
|
|
37
44
|
* 2. Explicit defaultOrgId parameter (caller override)
|
|
38
|
-
* 3.
|
|
39
|
-
* 4.
|
|
45
|
+
* 3. Strict check — throw OrgResolutionError when enabled
|
|
46
|
+
* 4. Boot-time default (from config.auth.defaultOrganizationId via setBootDefaultOrgId)
|
|
47
|
+
* 5. Deprecated fallback to DEFAULT_ORG_ID (will be removed)
|
|
40
48
|
*/
|
|
41
49
|
export function resolveOrgId(actor, defaultOrgId, commerceConfig) {
|
|
42
50
|
if (actor != null && typeof actor === "object" && "organizationId" in actor) {
|
|
@@ -46,11 +54,11 @@ export function resolveOrgId(actor, defaultOrgId, commerceConfig) {
|
|
|
46
54
|
}
|
|
47
55
|
if (defaultOrgId)
|
|
48
56
|
return defaultOrgId;
|
|
49
|
-
if (_bootDefaultOrgId)
|
|
50
|
-
return _bootDefaultOrgId;
|
|
51
57
|
if (isStrictOrgResolution(commerceConfig)) {
|
|
52
58
|
throw new OrgResolutionError("Organization could not be resolved: no actor organizationId, no defaultOrgId, and no configured default organization.");
|
|
53
59
|
}
|
|
60
|
+
if (_bootDefaultOrgId)
|
|
61
|
+
return _bootDefaultOrgId;
|
|
54
62
|
warnDeprecatedOrgDefaultFallback();
|
|
55
63
|
return DEFAULT_ORG_ID;
|
|
56
64
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
import type { CommerceConfig } from "../config/types.js";
|
|
3
|
+
import type { DrizzleDatabase } from "../kernel/database/drizzle-db.js";
|
|
4
|
+
export declare function organizationGuard(db: DrizzleDatabase, config: CommerceConfig): MiddlewareHandler;
|
|
5
|
+
//# sourceMappingURL=organization-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"organization-guard.d.ts","sourceRoot":"","sources":["../../src/auth/organization-guard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAE9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AA+DxE,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,eAAe,EACnB,MAAM,EAAE,cAAc,GACrB,iBAAiB,CAwFnB"}
|