@porulle/core 0.7.0 → 0.9.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/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +26 -7
- package/dist/auth/setup.d.ts.map +1 -1
- package/dist/auth/setup.js +8 -5
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +7 -0
- package/dist/config/types.d.ts +26 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/generated/plugin-manifest.d.ts +3 -0
- package/dist/generated/plugin-manifest.d.ts.map +1 -1
- package/dist/generated/plugin-manifest.js +1 -0
- package/dist/hooks/checkout-completion.d.ts.map +1 -1
- package/dist/hooks/checkout-completion.js +2 -2
- package/dist/hooks/checkout.d.ts.map +1 -1
- package/dist/hooks/checkout.js +17 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/interfaces/rest/index.d.ts.map +1 -1
- package/dist/interfaces/rest/index.js +12 -0
- package/dist/interfaces/rest/routes/admin/staff.d.ts +12 -0
- package/dist/interfaces/rest/routes/admin/staff.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/admin/staff.js +206 -0
- package/dist/interfaces/rest/routes/analytics.d.ts +5 -0
- package/dist/interfaces/rest/routes/analytics.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/analytics.js +24 -0
- package/dist/interfaces/rest/routes/carts.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/carts.js +39 -2
- package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/catalog.js +17 -1
- package/dist/interfaces/rest/routes/checkout.d.ts +9 -0
- package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/checkout.js +97 -21
- package/dist/interfaces/rest/routes/documents.d.ts +10 -0
- package/dist/interfaces/rest/routes/documents.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/documents.js +40 -0
- package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/inventory.js +13 -0
- package/dist/interfaces/rest/routes/orders.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/orders.js +111 -1
- package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/pricing.js +36 -1
- package/dist/interfaces/rest/routes/settings.d.ts +5 -0
- package/dist/interfaces/rest/routes/settings.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/settings.js +50 -0
- package/dist/interfaces/rest/routes/shipping.d.ts +5 -0
- package/dist/interfaces/rest/routes/shipping.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/shipping.js +68 -0
- package/dist/interfaces/rest/routes/tax.d.ts +5 -0
- package/dist/interfaces/rest/routes/tax.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/tax.js +68 -0
- package/dist/interfaces/rest/schemas/admin-staff.d.ts +899 -0
- package/dist/interfaces/rest/schemas/admin-staff.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/admin-staff.js +98 -0
- package/dist/interfaces/rest/schemas/analytics.d.ts +252 -0
- package/dist/interfaces/rest/schemas/analytics.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/analytics.js +33 -0
- package/dist/interfaces/rest/schemas/carts.d.ts +656 -0
- package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/carts.js +38 -0
- package/dist/interfaces/rest/schemas/catalog.d.ts +1218 -1
- package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/catalog.js +48 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts +2 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/checkout.js +4 -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/documents.d.ts +509 -0
- package/dist/interfaces/rest/schemas/documents.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/documents.js +65 -0
- package/dist/interfaces/rest/schemas/orders.d.ts +3110 -43
- package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/orders.js +234 -1
- package/dist/interfaces/rest/schemas/pricing.d.ts +405 -0
- package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/pricing.js +70 -0
- package/dist/interfaces/rest/schemas/responses.d.ts +190 -0
- package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/search.d.ts +17 -0
- package/dist/interfaces/rest/schemas/search.d.ts.map +1 -1
- package/dist/interfaces/rest/schemas/settings.d.ts +397 -0
- package/dist/interfaces/rest/schemas/settings.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/settings.js +79 -0
- package/dist/interfaces/rest/schemas/shipping.d.ts +1093 -0
- package/dist/interfaces/rest/schemas/shipping.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/shipping.js +146 -0
- package/dist/interfaces/rest/schemas/tax.d.ts +1074 -0
- package/dist/interfaces/rest/schemas/tax.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/tax.js +132 -0
- package/dist/kernel/database/schema.d.ts +4 -0
- package/dist/kernel/database/schema.d.ts.map +1 -1
- package/dist/kernel/database/schema.js +8 -0
- package/dist/kernel/database/scoped-db.d.ts +2 -1
- package/dist/kernel/database/scoped-db.d.ts.map +1 -1
- package/dist/kernel/database/scoped-db.js +62 -1
- package/dist/kernel/hooks/types.d.ts +1 -1
- package/dist/kernel/hooks/types.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.d.ts +26 -0
- package/dist/kernel/plugin/manifest.d.ts.map +1 -1
- package/dist/kernel/plugin/manifest.js +17 -2
- package/dist/modules/analytics/drizzle-adapter.d.ts.map +1 -1
- package/dist/modules/analytics/drizzle-adapter.js +16 -3
- package/dist/modules/analytics/module.d.ts.map +1 -1
- package/dist/modules/analytics/module.js +6 -0
- package/dist/modules/analytics/reports.d.ts +58 -0
- package/dist/modules/analytics/reports.d.ts.map +1 -0
- package/dist/modules/analytics/reports.js +249 -0
- package/dist/modules/analytics/service.d.ts +10 -0
- package/dist/modules/analytics/service.d.ts.map +1 -1
- package/dist/modules/analytics/service.js +14 -0
- package/dist/modules/cart/repository/index.d.ts +7 -0
- package/dist/modules/cart/repository/index.d.ts.map +1 -1
- package/dist/modules/cart/repository/index.js +25 -1
- 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 +2 -0
- package/dist/modules/cart/schemas.d.ts +1 -0
- package/dist/modules/cart/schemas.d.ts.map +1 -1
- package/dist/modules/cart/schemas.js +1 -0
- package/dist/modules/cart/service.d.ts +32 -0
- package/dist/modules/cart/service.d.ts.map +1 -1
- package/dist/modules/cart/service.js +61 -2
- package/dist/modules/catalog/entity-service.d.ts +21 -0
- package/dist/modules/catalog/entity-service.d.ts.map +1 -1
- package/dist/modules/catalog/entity-service.js +166 -5
- package/dist/modules/catalog/schema.d.ts +34 -0
- package/dist/modules/catalog/schema.d.ts.map +1 -1
- package/dist/modules/catalog/schema.js +5 -0
- package/dist/modules/catalog/schemas.d.ts +3 -0
- package/dist/modules/catalog/schemas.d.ts.map +1 -1
- package/dist/modules/catalog/schemas.js +3 -0
- package/dist/modules/catalog/service.d.ts +36 -0
- package/dist/modules/catalog/service.d.ts.map +1 -1
- package/dist/modules/catalog/service.js +6 -0
- package/dist/modules/customers/service.d.ts.map +1 -1
- package/dist/modules/customers/service.js +6 -0
- package/dist/modules/documents/module.d.ts +7 -0
- package/dist/modules/documents/module.d.ts.map +1 -0
- package/dist/modules/documents/module.js +12 -0
- package/dist/modules/documents/pdf.d.ts +25 -0
- package/dist/modules/documents/pdf.d.ts.map +1 -0
- package/dist/modules/documents/pdf.js +80 -0
- package/dist/modules/documents/render.d.ts +32 -0
- package/dist/modules/documents/render.d.ts.map +1 -0
- package/dist/modules/documents/render.js +190 -0
- package/dist/modules/documents/repository/index.d.ts +25 -0
- package/dist/modules/documents/repository/index.d.ts.map +1 -0
- package/dist/modules/documents/repository/index.js +47 -0
- package/dist/modules/documents/schema.d.ts +214 -0
- package/dist/modules/documents/schema.d.ts.map +1 -0
- package/dist/modules/documents/schema.js +42 -0
- package/dist/modules/documents/service.d.ts +51 -0
- package/dist/modules/documents/service.d.ts.map +1 -0
- package/dist/modules/documents/service.js +119 -0
- package/dist/modules/fulfillment/service.d.ts +18 -0
- package/dist/modules/fulfillment/service.d.ts.map +1 -1
- package/dist/modules/fulfillment/service.js +85 -1
- package/dist/modules/orders/repository/index.d.ts +18 -1
- package/dist/modules/orders/repository/index.d.ts.map +1 -1
- package/dist/modules/orders/repository/index.js +86 -1
- package/dist/modules/orders/schema.d.ts +391 -0
- package/dist/modules/orders/schema.d.ts.map +1 -1
- package/dist/modules/orders/schema.js +56 -1
- package/dist/modules/orders/service.d.ts +102 -3
- package/dist/modules/orders/service.d.ts.map +1 -1
- package/dist/modules/orders/service.js +653 -29
- package/dist/modules/orders/stale-order-cleanup.d.ts.map +1 -1
- package/dist/modules/orders/stale-order-cleanup.js +13 -1
- package/dist/modules/pricing/repository/index.d.ts +5 -0
- package/dist/modules/pricing/repository/index.d.ts.map +1 -1
- package/dist/modules/pricing/repository/index.js +19 -0
- package/dist/modules/pricing/service.d.ts +18 -0
- package/dist/modules/pricing/service.d.ts.map +1 -1
- package/dist/modules/pricing/service.js +43 -5
- package/dist/modules/settings/module.d.ts +6 -0
- package/dist/modules/settings/module.d.ts.map +1 -0
- package/dist/modules/settings/module.js +11 -0
- package/dist/modules/settings/repository/index.d.ts +16 -0
- package/dist/modules/settings/repository/index.d.ts.map +1 -0
- package/dist/modules/settings/repository/index.js +41 -0
- package/dist/modules/settings/schema.d.ts +121 -0
- package/dist/modules/settings/schema.d.ts.map +1 -0
- package/dist/modules/settings/schema.js +24 -0
- package/dist/modules/settings/service.d.ts +26 -0
- package/dist/modules/settings/service.d.ts.map +1 -0
- package/dist/modules/settings/service.js +51 -0
- package/dist/modules/shipping/calculator.d.ts +5 -0
- package/dist/modules/shipping/calculator.d.ts.map +1 -1
- package/dist/modules/shipping/calculator.js +10 -0
- package/dist/modules/shipping/module.d.ts +5 -1
- package/dist/modules/shipping/module.d.ts.map +1 -1
- package/dist/modules/shipping/module.js +4 -1
- package/dist/modules/shipping/repository/index.d.ts +27 -2
- package/dist/modules/shipping/repository/index.d.ts.map +1 -1
- package/dist/modules/shipping/repository/index.js +105 -1
- package/dist/modules/shipping/schema.d.ts +419 -0
- package/dist/modules/shipping/schema.d.ts.map +1 -0
- package/dist/modules/shipping/schema.js +56 -0
- package/dist/modules/shipping/service.d.ts +54 -0
- package/dist/modules/shipping/service.d.ts.map +1 -1
- package/dist/modules/shipping/service.js +161 -2
- package/dist/modules/tax/adapter.d.ts +13 -0
- package/dist/modules/tax/adapter.d.ts.map +1 -1
- package/dist/modules/tax/module.d.ts +5 -1
- package/dist/modules/tax/module.d.ts.map +1 -1
- package/dist/modules/tax/module.js +4 -1
- package/dist/modules/tax/repository/index.d.ts +38 -2
- package/dist/modules/tax/repository/index.d.ts.map +1 -1
- package/dist/modules/tax/repository/index.js +138 -1
- package/dist/modules/tax/schema.d.ts +355 -0
- package/dist/modules/tax/schema.d.ts.map +1 -0
- package/dist/modules/tax/schema.js +55 -0
- package/dist/modules/tax/service.d.ts +60 -1
- package/dist/modules/tax/service.d.ts.map +1 -1
- package/dist/modules/tax/service.js +227 -2
- package/dist/runtime/kernel-modules.d.ts +15 -2
- package/dist/runtime/kernel-modules.d.ts.map +1 -1
- package/dist/runtime/kernel-modules.js +4 -0
- package/dist/runtime/kernel-types.d.ts +5 -1
- package/dist/runtime/kernel-types.d.ts.map +1 -1
- package/dist/runtime/kernel-types.js +2 -0
- package/dist/runtime/server.js +1 -1
- package/dist/test-utils/create-plugin-test-app.d.ts +3 -0
- package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -1
- package/dist/test-utils/create-plugin-test-app.js +15 -3
- package/dist/test-utils/create-test-config.d.ts.map +1 -1
- package/dist/test-utils/create-test-config.js +2 -0
- package/dist/test-utils/order-test-helpers.d.ts +12 -0
- package/dist/test-utils/order-test-helpers.d.ts.map +1 -0
- package/dist/test-utils/order-test-helpers.js +18 -0
- package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -1
- package/dist/test-utils/rest-api-test-utils.js +7 -0
- package/dist/test-utils/test-actors.js +1 -1
- package/dist/testing.d.ts +1 -0
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -0
- package/package.json +3 -3
- package/src/auth/middleware.ts +26 -7
- package/src/auth/setup.ts +11 -4
- package/src/config/defaults.ts +7 -0
- package/src/config/types.ts +26 -1
- package/src/generated/plugin-capabilities.d.ts +1 -0
- package/src/generated/plugin-manifest.ts +1 -0
- package/src/generated/plugin-repositories.d.ts +1 -0
- package/src/hooks/checkout-completion.ts +22 -16
- package/src/hooks/checkout.ts +36 -11
- package/src/index.ts +1 -0
- package/src/interfaces/rest/index.ts +12 -0
- package/src/interfaces/rest/routes/admin/staff.ts +260 -0
- package/src/interfaces/rest/routes/analytics.ts +33 -0
- package/src/interfaces/rest/routes/carts.ts +52 -2
- package/src/interfaces/rest/routes/catalog.ts +34 -0
- package/src/interfaces/rest/routes/checkout.ts +114 -27
- package/src/interfaces/rest/routes/documents.ts +61 -0
- package/src/interfaces/rest/routes/inventory.ts +14 -0
- package/src/interfaces/rest/routes/orders.ts +148 -1
- package/src/interfaces/rest/routes/pricing.ts +44 -1
- package/src/interfaces/rest/routes/settings.ts +61 -0
- package/src/interfaces/rest/routes/shipping.ts +92 -0
- package/src/interfaces/rest/routes/tax.ts +90 -0
- package/src/interfaces/rest/schemas/admin-staff.ts +110 -0
- package/src/interfaces/rest/schemas/analytics.ts +39 -0
- package/src/interfaces/rest/schemas/carts.ts +40 -0
- package/src/interfaces/rest/schemas/catalog.ts +53 -0
- package/src/interfaces/rest/schemas/checkout.ts +4 -0
- package/src/interfaces/rest/schemas/documents.ts +72 -0
- package/src/interfaces/rest/schemas/orders.ts +258 -1
- package/src/interfaces/rest/schemas/pricing.ts +75 -0
- package/src/interfaces/rest/schemas/settings.ts +93 -0
- package/src/interfaces/rest/schemas/shipping.ts +164 -0
- package/src/interfaces/rest/schemas/tax.ts +148 -0
- package/src/kernel/database/schema.ts +12 -0
- package/src/kernel/database/scoped-db.ts +70 -1
- package/src/kernel/hooks/types.ts +1 -0
- package/src/kernel/plugin/manifest.ts +41 -2
- package/src/modules/analytics/drizzle-adapter.ts +19 -3
- package/src/modules/analytics/module.ts +10 -0
- package/src/modules/analytics/reports.ts +311 -0
- package/src/modules/analytics/service.ts +23 -0
- package/src/modules/cart/repository/index.ts +30 -1
- package/src/modules/cart/schema.ts +2 -0
- package/src/modules/cart/schemas.ts +1 -0
- package/src/modules/cart/service.ts +104 -2
- package/src/modules/catalog/entity-service.ts +196 -4
- package/src/modules/catalog/schema.ts +5 -0
- package/src/modules/catalog/schemas.ts +3 -0
- package/src/modules/catalog/service.ts +30 -0
- package/src/modules/customers/service.ts +6 -0
- package/src/modules/documents/module.ts +19 -0
- package/src/modules/documents/pdf.ts +101 -0
- package/src/modules/documents/render.ts +231 -0
- package/src/modules/documents/repository/index.ts +68 -0
- package/src/modules/documents/schema.ts +44 -0
- package/src/modules/documents/service.ts +176 -0
- package/src/modules/fulfillment/service.ts +139 -1
- package/src/modules/orders/repository/index.ts +127 -1
- package/src/modules/orders/schema.ts +58 -1
- package/src/modules/orders/service.ts +1041 -65
- package/src/modules/orders/stale-order-cleanup.ts +18 -4
- package/src/modules/pricing/repository/index.ts +34 -0
- package/src/modules/pricing/service.ts +76 -6
- package/src/modules/settings/module.ts +18 -0
- package/src/modules/settings/repository/index.ts +59 -0
- package/src/modules/settings/schema.ts +25 -0
- package/src/modules/settings/service.ts +82 -0
- package/src/modules/shipping/calculator.ts +27 -0
- package/src/modules/shipping/module.ts +6 -2
- package/src/modules/shipping/repository/index.ts +136 -2
- package/src/modules/shipping/schema.ts +58 -0
- package/src/modules/shipping/service.ts +260 -1
- package/src/modules/tax/adapter.ts +9 -0
- package/src/modules/tax/module.ts +6 -2
- package/src/modules/tax/repository/index.ts +169 -2
- package/src/modules/tax/schema.ts +57 -0
- package/src/modules/tax/service.ts +313 -2
- package/src/runtime/kernel-modules.ts +4 -0
- package/src/runtime/kernel-types.ts +6 -0
- package/src/runtime/server.ts +1 -1
- package/src/test-utils/create-plugin-test-app.ts +17 -4
- package/src/test-utils/create-test-config.ts +2 -0
- package/src/test-utils/order-test-helpers.ts +26 -0
- package/src/test-utils/rest-api-test-utils.ts +7 -0
- package/src/test-utils/test-actors.ts +1 -1
- package/src/testing.ts +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tax.d.ts","sourceRoot":"","sources":["../../../../src/interfaces/rest/schemas/tax.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,mBAAmB,CAAC;AAGnD,eAAO,MAAM,uBAAuB;;;;;;;;iBAQF,CAAC;AAEnC,eAAO,MAAM,uBAAuB;;;;;;;;iBAQF,CAAC;AAQnC,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY7B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS5B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa7B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU7B,CAAC;AAIH,eAAO,MAAM,wBAAwB;;;;;iBAKF,CAAC;AAEpC,eAAO,MAAM,wBAAwB;;;;;iBAKF,CAAC;AAIpC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAa9B,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAU9B,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { z, createRoute } from "@hono/zod-openapi";
|
|
2
|
+
import { errorResponses } from "./shared.js";
|
|
3
|
+
export const CreateTaxRateBodySchema = z.object({
|
|
4
|
+
name: z.string().min(1).openapi({ example: "NY sales tax" }),
|
|
5
|
+
country: z.string().min(1).openapi({ example: "US", description: "ISO 3166-1 alpha-2; \"*\" matches any country" }),
|
|
6
|
+
state: z.string().min(1).optional().openapi({ example: "NY" }),
|
|
7
|
+
rateBps: z.number().int().nonnegative().openapi({ example: 500, description: "Basis points: 500 = 5%" }),
|
|
8
|
+
appliesToShipping: z.boolean().optional(),
|
|
9
|
+
priority: z.number().int().optional(),
|
|
10
|
+
isActive: z.boolean().optional(),
|
|
11
|
+
}).openapi("CreateTaxRateRequest");
|
|
12
|
+
export const UpdateTaxRateBodySchema = z.object({
|
|
13
|
+
name: z.string().min(1).optional(),
|
|
14
|
+
country: z.string().min(1).optional(),
|
|
15
|
+
state: z.string().min(1).nullable().optional(),
|
|
16
|
+
rateBps: z.number().int().nonnegative().optional(),
|
|
17
|
+
appliesToShipping: z.boolean().optional(),
|
|
18
|
+
priority: z.number().int().optional(),
|
|
19
|
+
isActive: z.boolean().optional(),
|
|
20
|
+
}).openapi("UpdateTaxRateRequest");
|
|
21
|
+
const IdParam = z.object({
|
|
22
|
+
id: z.uuid().openapi({ example: "550e8400-e29b-41d4-a716-446655440000" }),
|
|
23
|
+
});
|
|
24
|
+
const DataResponse = z.object({ data: z.any() }).openapi("TaxConfigResponse");
|
|
25
|
+
export const createTaxRateRoute = createRoute({
|
|
26
|
+
method: "post",
|
|
27
|
+
path: "/rates",
|
|
28
|
+
tags: ["Tax"],
|
|
29
|
+
summary: "Create a tax rate",
|
|
30
|
+
request: {
|
|
31
|
+
body: { content: { "application/json": { schema: CreateTaxRateBodySchema } }, required: true },
|
|
32
|
+
},
|
|
33
|
+
responses: {
|
|
34
|
+
201: { content: { "application/json": { schema: DataResponse } }, description: "Tax rate created." },
|
|
35
|
+
...errorResponses,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
export const listTaxRatesRoute = createRoute({
|
|
39
|
+
method: "get",
|
|
40
|
+
path: "/rates",
|
|
41
|
+
tags: ["Tax"],
|
|
42
|
+
summary: "List tax rates",
|
|
43
|
+
responses: {
|
|
44
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax rates" },
|
|
45
|
+
...errorResponses,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
export const updateTaxRateRoute = createRoute({
|
|
49
|
+
method: "patch",
|
|
50
|
+
path: "/rates/{id}",
|
|
51
|
+
tags: ["Tax"],
|
|
52
|
+
summary: "Update a tax rate",
|
|
53
|
+
request: {
|
|
54
|
+
params: IdParam,
|
|
55
|
+
body: { content: { "application/json": { schema: UpdateTaxRateBodySchema } }, required: true },
|
|
56
|
+
},
|
|
57
|
+
responses: {
|
|
58
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax rate updated." },
|
|
59
|
+
...errorResponses,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
export const deleteTaxRateRoute = createRoute({
|
|
63
|
+
method: "delete",
|
|
64
|
+
path: "/rates/{id}",
|
|
65
|
+
tags: ["Tax"],
|
|
66
|
+
summary: "Delete a tax rate",
|
|
67
|
+
request: { params: IdParam },
|
|
68
|
+
responses: {
|
|
69
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax rate deleted." },
|
|
70
|
+
...errorResponses,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
// ── Product tax classes (issue #57) ─────────────────────────────────────────
|
|
74
|
+
export const CreateTaxClassBodySchema = z.object({
|
|
75
|
+
name: z.string().min(1).regex(/^[a-z][a-z0-9_-]*$/, "lowercase slug (e.g. standard, zero)"),
|
|
76
|
+
rateBps: z.number().int().nonnegative().openapi({ example: 1800, description: "Basis points: 1800 = 18%" }),
|
|
77
|
+
isDefault: z.boolean().optional().openapi({ description: "Lines with no taxClass use the default class." }),
|
|
78
|
+
isActive: z.boolean().optional(),
|
|
79
|
+
}).openapi("CreateTaxClassRequest");
|
|
80
|
+
export const UpdateTaxClassBodySchema = z.object({
|
|
81
|
+
name: z.string().min(1).regex(/^[a-z][a-z0-9_-]*$/).optional(),
|
|
82
|
+
rateBps: z.number().int().nonnegative().optional(),
|
|
83
|
+
isDefault: z.boolean().optional(),
|
|
84
|
+
isActive: z.boolean().optional(),
|
|
85
|
+
}).openapi("UpdateTaxClassRequest");
|
|
86
|
+
const ClassIdParam = z.object({ id: z.uuid() });
|
|
87
|
+
export const createTaxClassRoute = createRoute({
|
|
88
|
+
method: "post",
|
|
89
|
+
path: "/classes",
|
|
90
|
+
tags: ["Tax"],
|
|
91
|
+
summary: "Create a product tax class",
|
|
92
|
+
request: { body: { content: { "application/json": { schema: CreateTaxClassBodySchema } }, required: true } },
|
|
93
|
+
responses: {
|
|
94
|
+
201: { content: { "application/json": { schema: DataResponse } }, description: "Tax class created." },
|
|
95
|
+
...errorResponses,
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
export const listTaxClassesRoute = createRoute({
|
|
99
|
+
method: "get",
|
|
100
|
+
path: "/classes",
|
|
101
|
+
tags: ["Tax"],
|
|
102
|
+
summary: "List product tax classes",
|
|
103
|
+
responses: {
|
|
104
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax classes." },
|
|
105
|
+
...errorResponses,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
export const updateTaxClassRoute = createRoute({
|
|
109
|
+
method: "patch",
|
|
110
|
+
path: "/classes/{id}",
|
|
111
|
+
tags: ["Tax"],
|
|
112
|
+
summary: "Update a product tax class",
|
|
113
|
+
request: {
|
|
114
|
+
params: ClassIdParam,
|
|
115
|
+
body: { content: { "application/json": { schema: UpdateTaxClassBodySchema } }, required: true },
|
|
116
|
+
},
|
|
117
|
+
responses: {
|
|
118
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax class updated." },
|
|
119
|
+
...errorResponses,
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
export const deleteTaxClassRoute = createRoute({
|
|
123
|
+
method: "delete",
|
|
124
|
+
path: "/classes/{id}",
|
|
125
|
+
tags: ["Tax"],
|
|
126
|
+
summary: "Delete a product tax class",
|
|
127
|
+
request: { params: ClassIdParam },
|
|
128
|
+
responses: {
|
|
129
|
+
200: { content: { "application/json": { schema: DataResponse } }, description: "Tax class deleted." },
|
|
130
|
+
...errorResponses,
|
|
131
|
+
},
|
|
132
|
+
});
|
|
@@ -20,6 +20,10 @@ export * from "../../modules/promotions/schema.js";
|
|
|
20
20
|
export * from "../../modules/media/schema.js";
|
|
21
21
|
export * from "../../modules/webhooks/schema.js";
|
|
22
22
|
export * from "../../modules/fulfillment/schema.js";
|
|
23
|
+
export * from "../../modules/shipping/schema.js";
|
|
24
|
+
export * from "../../modules/tax/schema.js";
|
|
25
|
+
export * from "../../modules/settings/schema.js";
|
|
26
|
+
export * from "../../modules/documents/schema.js";
|
|
23
27
|
export * from "../jobs/schema.js";
|
|
24
28
|
export * from "../compensation/schema.js";
|
|
25
29
|
export * from "../../modules/audit/schema.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,2BAA2B,CAAC;AAG1C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAGlD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,iCAAiC,CAAC;AAGhD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,qCAAqC,CAAC;AAGpD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,+BAA+B,CAAC"}
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,2BAA2B,CAAC;AAG1C,cAAc,iCAAiC,CAAC;AAGhD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,8BAA8B,CAAC;AAG7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mCAAmC,CAAC;AAGlD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,iCAAiC,CAAC;AAGhD,cAAc,oCAAoC,CAAC;AAGnD,cAAc,+BAA+B,CAAC;AAG9C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,qCAAqC,CAAC;AAGpD,cAAc,kCAAkC,CAAC;AAGjD,cAAc,6BAA6B,CAAC;AAG5C,cAAc,kCAAkC,CAAC;AAGjD,cAAc,mCAAmC,CAAC;AAGlD,cAAc,mBAAmB,CAAC;AAGlC,cAAc,2BAA2B,CAAC;AAG1C,cAAc,+BAA+B,CAAC"}
|
|
@@ -31,6 +31,14 @@ export * from "../../modules/media/schema.js";
|
|
|
31
31
|
export * from "../../modules/webhooks/schema.js";
|
|
32
32
|
// Fulfillment module
|
|
33
33
|
export * from "../../modules/fulfillment/schema.js";
|
|
34
|
+
// Shipping module (runtime zones & rates)
|
|
35
|
+
export * from "../../modules/shipping/schema.js";
|
|
36
|
+
// Tax module (runtime tax rates)
|
|
37
|
+
export * from "../../modules/tax/schema.js";
|
|
38
|
+
// Settings module (org-scoped runtime settings)
|
|
39
|
+
export * from "../../modules/settings/schema.js";
|
|
40
|
+
// Documents module (fiscal sequences + issued documents)
|
|
41
|
+
export * from "../../modules/documents/schema.js";
|
|
34
42
|
// Jobs (kernel)
|
|
35
43
|
export * from "../jobs/schema.js";
|
|
36
44
|
// Compensation failures (kernel)
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Wraps a Drizzle PgDatabase instance so that INSERT operations on
|
|
5
5
|
* org-scoped tables automatically include the actor's organizationId,
|
|
6
|
-
* and SELECT
|
|
6
|
+
* and SELECT / UPDATE / DELETE against org-scoped tables constrain rows to
|
|
7
|
+
* that organization — including when the caller supplies no WHERE clause.
|
|
7
8
|
*
|
|
8
9
|
* Plugin route handlers receive this scoped db via PluginContext.database.db
|
|
9
10
|
* (organization resolved per operation from AsyncLocalStorage when used from
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/scoped-db.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scoped-db.d.ts","sourceRoot":"","sources":["../../../src/kernel/database/scoped-db.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;AA2C3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,oBAAoB,GAAG,GAAG,CAwHpF"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Wraps a Drizzle PgDatabase instance so that INSERT operations on
|
|
5
5
|
* org-scoped tables automatically include the actor's organizationId,
|
|
6
|
-
* and SELECT
|
|
6
|
+
* and SELECT / UPDATE / DELETE against org-scoped tables constrain rows to
|
|
7
|
+
* that organization — including when the caller supplies no WHERE clause.
|
|
7
8
|
*
|
|
8
9
|
* Plugin route handlers receive this scoped db via PluginContext.database.db
|
|
9
10
|
* (organization resolved per operation from AsyncLocalStorage when used from
|
|
@@ -24,6 +25,29 @@ function tableHasOrganizationId(table) {
|
|
|
24
25
|
return false;
|
|
25
26
|
}
|
|
26
27
|
}
|
|
28
|
+
/**
|
|
29
|
+
* Pre-apply the org predicate to a WHERE-able builder (UPDATE/DELETE) and wrap
|
|
30
|
+
* its `.where()` so a caller-supplied condition is AND-ed with the org filter
|
|
31
|
+
* rather than replacing it. Pre-applying `orgEq` immediately means a builder
|
|
32
|
+
* executed with NO caller `.where()` (e.g. `update(t).set(...)`) is still
|
|
33
|
+
* constrained to the org — it can never touch another tenant's rows.
|
|
34
|
+
*/
|
|
35
|
+
function scopeWhereBuilder(builder, orgEq) {
|
|
36
|
+
const scoped = builder.where(orgEq);
|
|
37
|
+
return new Proxy(scoped, {
|
|
38
|
+
get(st, sp, sr) {
|
|
39
|
+
const sv = Reflect.get(st, sp, sr);
|
|
40
|
+
if (sp === "where" && typeof sv === "function") {
|
|
41
|
+
return (condition, ...wRest) => {
|
|
42
|
+
const c = condition;
|
|
43
|
+
const merged = c ? and(orgEq, c) : orgEq;
|
|
44
|
+
return sv.call(st, merged, ...wRest);
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
return typeof sv === "function" ? sv.bind(st) : sv;
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
27
51
|
export function createScopedDb(rawDb, orgSource) {
|
|
28
52
|
if (!rawDb || typeof rawDb !== "object")
|
|
29
53
|
return rawDb;
|
|
@@ -97,6 +121,43 @@ export function createScopedDb(rawDb, orgSource) {
|
|
|
97
121
|
});
|
|
98
122
|
};
|
|
99
123
|
}
|
|
124
|
+
if (prop === "update" && typeof value === "function") {
|
|
125
|
+
return (table) => {
|
|
126
|
+
const builder = value.call(target, table);
|
|
127
|
+
if (!tableHasOrganizationId(table))
|
|
128
|
+
return builder;
|
|
129
|
+
const orgCol = getTableColumns(table).organizationId;
|
|
130
|
+
if (!orgCol)
|
|
131
|
+
return builder;
|
|
132
|
+
const orgEq = eq(orgCol, resolveOrganizationId(orgSource));
|
|
133
|
+
// The org filter lives after `.set()`, so wrap `.set()` and scope the
|
|
134
|
+
// resulting WHERE-able builder.
|
|
135
|
+
return new Proxy(builder, {
|
|
136
|
+
get(t, p, r) {
|
|
137
|
+
const v = Reflect.get(t, p, r);
|
|
138
|
+
if (p === "set" && typeof v === "function") {
|
|
139
|
+
return (data) => {
|
|
140
|
+
const setBuilder = v.call(t, data);
|
|
141
|
+
return scopeWhereBuilder(setBuilder, orgEq);
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
return typeof v === "function" ? v.bind(t) : v;
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
if (prop === "delete" && typeof value === "function") {
|
|
150
|
+
return (table) => {
|
|
151
|
+
const builder = value.call(target, table);
|
|
152
|
+
if (!tableHasOrganizationId(table))
|
|
153
|
+
return builder;
|
|
154
|
+
const orgCol = getTableColumns(table).organizationId;
|
|
155
|
+
if (!orgCol)
|
|
156
|
+
return builder;
|
|
157
|
+
const orgEq = eq(orgCol, resolveOrganizationId(orgSource));
|
|
158
|
+
return scopeWhereBuilder(builder, orgEq);
|
|
159
|
+
};
|
|
160
|
+
}
|
|
100
161
|
return typeof value === "function" ? value.bind(target) : value;
|
|
101
162
|
},
|
|
102
163
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Actor } from "../../auth/types.js";
|
|
2
2
|
import type { JobsAdapter } from "../jobs/adapter.js";
|
|
3
3
|
import type { PluginDb } from "../database/plugin-types.js";
|
|
4
|
-
export type HookOperation = "create" | "update" | "delete" | "read" | "list" | "statusChange" | "addItem" | "removeItem" | "custom";
|
|
4
|
+
export type HookOperation = "create" | "update" | "delete" | "read" | "list" | "statusChange" | "addItem" | "removeItem" | "recover" | "custom";
|
|
5
5
|
export interface Logger {
|
|
6
6
|
info(message: string, data?: unknown): void;
|
|
7
7
|
warn(message: string, data?: unknown): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/kernel/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,cAAc,GACd,SAAS,GACT,YAAY,GACZ,QAAQ,CAAC;AAEb,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,EAAE,EAAE,QAAQ,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAE7B,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/kernel/hooks/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,MAAM,aAAa,GACrB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,MAAM,GACN,cAAc,GACd,SAAS,GACT,YAAY,GACZ,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,WAAW,CAAC;IAClB;;;OAGG;IACH,EAAE,EAAE,QAAQ,CAAC;CACd;AAED,MAAM,MAAM,UAAU,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;IACrC,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAE7B,MAAM,MAAM,SAAS,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE;IACpC,IAAI,EAAE,KAAK,GAAG,IAAI,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,OAAO,EAAE,WAAW,CAAC;CACtB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC"}
|
|
@@ -41,6 +41,14 @@ export interface PluginContext {
|
|
|
41
41
|
transaction<T>(fn: (tx: PluginDb) => Promise<T>): Promise<T>;
|
|
42
42
|
};
|
|
43
43
|
logger: PluginLogger;
|
|
44
|
+
/**
|
|
45
|
+
* The Better Auth instance (issue #51) — lets plugins mint/revoke
|
|
46
|
+
* credentials (e.g. per-shift API keys from a POS PIN login). Present when
|
|
47
|
+
* routes are mounted by createServer; may be absent in bare-kernel setups,
|
|
48
|
+
* so plugins must degrade gracefully. Typed loosely to avoid coupling every
|
|
49
|
+
* plugin to Better Auth's generics — cast to the narrow surface you use.
|
|
50
|
+
*/
|
|
51
|
+
auth?: unknown;
|
|
44
52
|
}
|
|
45
53
|
export type { PluginPermission };
|
|
46
54
|
export interface CommercePluginManifest {
|
|
@@ -68,6 +76,24 @@ export interface CommercePluginManifest {
|
|
|
68
76
|
hooks?: () => PluginHookRegistration[];
|
|
69
77
|
routes?: (ctx: PluginContext) => PluginRouteRegistration[];
|
|
70
78
|
analyticsModels?: () => unknown[];
|
|
79
|
+
/**
|
|
80
|
+
* Named API-key scopes this plugin mints credentials under (issue #51),
|
|
81
|
+
* merged into `config.auth.apiKeyScopes`. User-defined scopes with the
|
|
82
|
+
* same name win.
|
|
83
|
+
*/
|
|
84
|
+
apiKeyScopes?: () => Record<string, {
|
|
85
|
+
prefix?: string;
|
|
86
|
+
description?: string;
|
|
87
|
+
permissions?: Record<string, string[]>;
|
|
88
|
+
/** Expiry bounds in DAYS (fractions allowed — 1/24 = one hour). */
|
|
89
|
+
keyExpiration?: {
|
|
90
|
+
minExpiresIn?: number;
|
|
91
|
+
maxExpiresIn?: number;
|
|
92
|
+
};
|
|
93
|
+
/** Better Auth ownership model for keys minted under this scope. */
|
|
94
|
+
references?: "user" | "organization";
|
|
95
|
+
enableMetadata?: boolean;
|
|
96
|
+
}>;
|
|
71
97
|
}
|
|
72
98
|
export declare const _registeredPlugins: Set<string>;
|
|
73
99
|
/** @internal — called by defineConfig() before applying plugins */
|
|
@@ -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;AAS5D,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAI/B,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9C;AAID;;;;;;;;GAQG;AACH,MAAM,MAAM,uBAAuB,GAC/B;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;CAAE,GAC1E;IAAE,OAAO,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAA;CAAE,CAAC;AAEvE,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;CAC1C;AAID,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE;QACR,0EAA0E;QAC1E,EAAE,EAAE,QAAQ,CAAC;QACb;;;WAGG;QACH,QAAQ,EAAE,QAAQ,CAAC;QACnB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;KAC9D,CAAC;IACF,MAAM,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/kernel/plugin/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -83,6 +83,20 @@ export function defineCommercePlugin(manifest) {
|
|
|
83
83
|
pluginPermissions: [...(result.pluginPermissions ?? []), ...withPlugin],
|
|
84
84
|
};
|
|
85
85
|
}
|
|
86
|
+
// 0. API-key scopes — merge into auth.apiKeyScopes (user config wins)
|
|
87
|
+
if (manifest.apiKeyScopes) {
|
|
88
|
+
const scopes = manifest.apiKeyScopes();
|
|
89
|
+
result = {
|
|
90
|
+
...result,
|
|
91
|
+
auth: {
|
|
92
|
+
...(result.auth ?? {}),
|
|
93
|
+
apiKeyScopes: {
|
|
94
|
+
...scopes,
|
|
95
|
+
...(result.auth?.apiKeyScopes ?? {}),
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
}
|
|
86
100
|
// 1. Schema — push into customSchemas for kernel to register
|
|
87
101
|
if (manifest.schema) {
|
|
88
102
|
const schemas = manifest.schema();
|
|
@@ -108,8 +122,8 @@ export function defineCommercePlugin(manifest) {
|
|
|
108
122
|
const pluginRoutes = manifest.routes;
|
|
109
123
|
result = {
|
|
110
124
|
...result,
|
|
111
|
-
routes: (app, kernel) => {
|
|
112
|
-
existingRoutes?.(app, kernel);
|
|
125
|
+
routes: (app, kernel, auth) => {
|
|
126
|
+
existingRoutes?.(app, kernel, auth);
|
|
113
127
|
const k = kernel;
|
|
114
128
|
// Narrow DatabaseAdapter<unknown> → PluginContext.database once here.
|
|
115
129
|
// All plugin code receives typed PluginDb — no casts downstream.
|
|
@@ -118,6 +132,7 @@ export function defineCommercePlugin(manifest) {
|
|
|
118
132
|
services: k.services,
|
|
119
133
|
database: buildPluginContextDatabase(k.database.db, k.database.transaction, k.config, k.logger),
|
|
120
134
|
logger: k.logger,
|
|
135
|
+
...(auth !== undefined ? { auth } : {}),
|
|
121
136
|
});
|
|
122
137
|
for (const route of regs) {
|
|
123
138
|
// ── Error boundary: wrap handler with plugin context ──
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"drizzle-adapter.d.ts","sourceRoot":"","sources":["../../../src/modules/analytics/drizzle-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,gBAAgB,EAEhB,aAAa,EACb,cAAc,EAEd,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAC;AAiJpB,qBAAa,uBAAwB,YAAW,gBAAgB;IAGlD,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,MAAM,CAAqC;gBAE/B,EAAE,EAAE,eAAe;IAEvC,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIpC,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"drizzle-adapter.d.ts","sourceRoot":"","sources":["../../../src/modules/analytics/drizzle-adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EACV,gBAAgB,EAEhB,aAAa,EACb,cAAc,EAEd,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EAEf,MAAM,YAAY,CAAC;AAiJpB,qBAAa,uBAAwB,YAAW,gBAAgB;IAGlD,OAAO,CAAC,EAAE;IAFtB,OAAO,CAAC,MAAM,CAAqC;gBAE/B,EAAE,EAAE,eAAe;IAEvC,aAAa,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;IAIpC,KAAK,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IA2EjG,OAAO,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAyBvD,YAAY;CA6K3B"}
|
|
@@ -178,6 +178,14 @@ export class DrizzleAnalyticsAdapter {
|
|
|
178
178
|
return Err(new CommerceValidationError(`Unknown dimension: "${dim}". Available dimensions for ${cubeName}: ${available}`));
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
+
// Validate that requested time dimensions exist in the cube
|
|
182
|
+
for (const td of params.timeDimensions ?? []) {
|
|
183
|
+
const shortName = td.dimension.split(".")[1];
|
|
184
|
+
if (shortName && !cube.dimensions[shortName]) {
|
|
185
|
+
const available = Object.keys(cube.dimensions).map((d) => `${cubeName}.${d}`).join(", ");
|
|
186
|
+
return Err(new CommerceValidationError(`Unknown time dimension: "${td.dimension}". Available dimensions for ${cubeName}: ${available}`));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
181
189
|
try {
|
|
182
190
|
const rows = await this.executeQuery(cube, params, scope);
|
|
183
191
|
return Ok({
|
|
@@ -276,13 +284,16 @@ export class DrizzleAnalyticsAdapter {
|
|
|
276
284
|
const dimDef = cube.dimensions[shortName];
|
|
277
285
|
if (!dimDef)
|
|
278
286
|
continue;
|
|
279
|
-
|
|
287
|
+
const alias = `${cube.name}.${shortName}`;
|
|
288
|
+
selectParts.push(sql.raw(`${dimDef.sql} AS "${alias}"`));
|
|
280
289
|
groupByParts.push(sql.raw(dimDef.sql));
|
|
281
290
|
}
|
|
282
291
|
// Time dimensions → SELECT + GROUP BY + WHERE (dateRange)
|
|
283
292
|
for (const td of params.timeDimensions ?? []) {
|
|
293
|
+
const shortName = td.dimension.split(".")[1];
|
|
284
294
|
const selectExpr = compileTimeDimensionSelect(cube, td);
|
|
285
|
-
|
|
295
|
+
const alias = `${cube.name}.${shortName}`;
|
|
296
|
+
selectParts.push(sql `${selectExpr} AS ${sql.raw(`"${alias}"`)}`);
|
|
286
297
|
groupByParts.push(selectExpr);
|
|
287
298
|
// Date range filter
|
|
288
299
|
if (td.dateRange) {
|
|
@@ -298,7 +309,9 @@ export class DrizzleAnalyticsAdapter {
|
|
|
298
309
|
}
|
|
299
310
|
// Measures → SELECT
|
|
300
311
|
for (const measure of params.measures) {
|
|
301
|
-
|
|
312
|
+
const shortName = measure.split(".")[1];
|
|
313
|
+
const alias = `${cube.name}.${shortName}`;
|
|
314
|
+
selectParts.push(sql `${compileMeasure(cube, measure)} AS ${sql.raw(`"${alias}"`)}`);
|
|
302
315
|
}
|
|
303
316
|
// If no select parts (shouldn't happen with validation), bail
|
|
304
317
|
if (selectParts.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/analytics/module.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/modules/analytics/module.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,eAAO,MAAM,eAAe,mHAyB1B,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { defineModule } from "../../kernel/module/index.js";
|
|
2
2
|
import { DrizzleAnalyticsAdapter } from "./drizzle-adapter.js";
|
|
3
3
|
import { BUILTIN_ANALYTICS_MODELS } from "./models.js";
|
|
4
|
+
import { RetailReportsEngine } from "./reports.js";
|
|
4
5
|
import { AnalyticsService } from "./service.js";
|
|
5
6
|
export const analyticsModule = defineModule({
|
|
6
7
|
id: "analytics",
|
|
@@ -10,9 +11,14 @@ export const analyticsModule = defineModule({
|
|
|
10
11
|
for (const model of BUILTIN_ANALYTICS_MODELS) {
|
|
11
12
|
adapter.registerModel(model);
|
|
12
13
|
}
|
|
14
|
+
// Settings is resolved lazily from the shared service container — the
|
|
15
|
+
// settings module may instantiate after analytics.
|
|
16
|
+
const services = deps.services;
|
|
17
|
+
const reports = new RetailReportsEngine(deps.db.db, (orgId, group) => services.settings.read(orgId, group));
|
|
13
18
|
return new AnalyticsService({
|
|
14
19
|
adapter,
|
|
15
20
|
config: deps.config,
|
|
21
|
+
reports,
|
|
16
22
|
});
|
|
17
23
|
},
|
|
18
24
|
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { DrizzleDatabase } from "../../kernel/database/drizzle-db.js";
|
|
2
|
+
import { type Result } from "../../kernel/result.js";
|
|
3
|
+
/**
|
|
4
|
+
* Canned retail reports (issue #48).
|
|
5
|
+
*
|
|
6
|
+
* Parameterized SQL over core tables, org-scoped, with all calendar math done
|
|
7
|
+
* by Postgres in the store's timezone (settings.general.timezone, default
|
|
8
|
+
* UTC). Range reports include a prior period of equal length with deltas.
|
|
9
|
+
*/
|
|
10
|
+
export interface ReportParams {
|
|
11
|
+
/** Local calendar date (YYYY-MM-DD) for single-day reports. Default: today in store tz. */
|
|
12
|
+
date?: string;
|
|
13
|
+
/** Local range start (YYYY-MM-DD, inclusive). Default: first of current month in store tz. */
|
|
14
|
+
from?: string;
|
|
15
|
+
/** Local range end (YYYY-MM-DD, inclusive). Default: today in store tz. */
|
|
16
|
+
to?: string;
|
|
17
|
+
}
|
|
18
|
+
export declare const RETAIL_REPORTS: readonly [{
|
|
19
|
+
readonly name: "daily-journal";
|
|
20
|
+
readonly description: "Per-day sales journal: order rows + summary with prior-day deltas.";
|
|
21
|
+
}, {
|
|
22
|
+
readonly name: "tax-summary";
|
|
23
|
+
readonly description: "Tax collected over a range, bucketed per local day, with prior-period deltas.";
|
|
24
|
+
}, {
|
|
25
|
+
readonly name: "inventory-aging";
|
|
26
|
+
readonly description: "On-hand stock bucketed by days since last restock (0-30/31-60/61-90/90+).";
|
|
27
|
+
}, {
|
|
28
|
+
readonly name: "sell-through";
|
|
29
|
+
readonly description: "Units sold in the range vs current on-hand, per entity.";
|
|
30
|
+
}, {
|
|
31
|
+
readonly name: "reorder-needed";
|
|
32
|
+
readonly description: "Inventory rows at or below their reorder threshold.";
|
|
33
|
+
}, {
|
|
34
|
+
readonly name: "staff-sales";
|
|
35
|
+
readonly description: "Orders and revenue grouped by orders.metadata.staffId.";
|
|
36
|
+
}];
|
|
37
|
+
export type RetailReportName = (typeof RETAIL_REPORTS)[number]["name"];
|
|
38
|
+
type SettingsReader = (orgId: string, group: string) => Promise<Record<string, unknown>>;
|
|
39
|
+
export declare class RetailReportsEngine {
|
|
40
|
+
private readonly db;
|
|
41
|
+
private readonly readSettings;
|
|
42
|
+
constructor(db: DrizzleDatabase, readSettings: SettingsReader);
|
|
43
|
+
run(name: string, params: ReportParams, orgId: string): Promise<Result<Record<string, unknown>>>;
|
|
44
|
+
private timezoneFor;
|
|
45
|
+
private rangeOrDefault;
|
|
46
|
+
private rows;
|
|
47
|
+
private journalSummary;
|
|
48
|
+
private dailyJournal;
|
|
49
|
+
private taxSummary;
|
|
50
|
+
private inventoryAging;
|
|
51
|
+
private sellThrough;
|
|
52
|
+
private reorderNeeded;
|
|
53
|
+
private staffSales;
|
|
54
|
+
}
|
|
55
|
+
/** Today's local calendar date (YYYY-MM-DD) in an IANA timezone. */
|
|
56
|
+
export declare function localToday(tz: string): string;
|
|
57
|
+
export {};
|
|
58
|
+
//# sourceMappingURL=reports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reports.d.ts","sourceRoot":"","sources":["../../../src/modules/analytics/reports.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAE3E,OAAO,EAAW,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;;GAMG;AAEH,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;EAOjB,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAMvE,KAAK,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAWzF,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY;gBADZ,EAAE,EAAE,eAAe,EACnB,YAAY,EAAE,cAAc;IAGzC,GAAG,CACP,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YAoC7B,WAAW;IAKzB,OAAO,CAAC,cAAc;YAKR,IAAI;YAcJ,cAAc;YAqBd,YAAY;YAyBZ,UAAU;YA8BV,cAAc;YA4Bd,WAAW;YA4BX,aAAa;YAmBb,UAAU;CAezB;AAID,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE7C"}
|