@porulle/core 0.64.0 → 0.65.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/email-render.d.ts +18 -0
- package/dist/adapters/email-render.d.ts.map +1 -0
- package/dist/adapters/email-render.js +37 -0
- package/dist/auth/actor.d.ts.map +1 -1
- package/dist/auth/actor.js +11 -0
- package/dist/auth/auth-failure.d.ts +0 -2
- package/dist/auth/auth-failure.d.ts.map +1 -1
- package/dist/auth/auth-failure.js +0 -4
- package/dist/auth/middleware.d.ts +0 -1
- package/dist/auth/middleware.d.ts.map +1 -1
- package/dist/auth/middleware.js +7 -6
- package/dist/auth/permissions.d.ts +2 -0
- package/dist/auth/permissions.d.ts.map +1 -1
- package/dist/auth/permissions.js +8 -6
- package/dist/auth/role-authority.d.ts +0 -1
- package/dist/auth/role-authority.d.ts.map +1 -1
- package/dist/auth/role-authority.js +1 -8
- package/dist/auth/setup.d.ts.map +1 -1
- package/dist/auth/setup.js +5 -0
- package/dist/auth/strict-org-resolution.d.ts +8 -1
- package/dist/auth/strict-org-resolution.d.ts.map +1 -1
- package/dist/auth/strict-org-resolution.js +9 -19
- package/dist/auth/system-actor.d.ts +3 -2
- package/dist/auth/system-actor.d.ts.map +1 -1
- package/dist/auth/system-actor.js +3 -3
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +3 -20
- package/dist/config/define-config.d.ts +2 -2
- package/dist/config/define-config.d.ts.map +1 -1
- package/dist/config/define-config.js +3 -2
- package/dist/config/types.d.ts +2 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/hooks/checkout.d.ts +2 -15
- package/dist/hooks/checkout.d.ts.map +1 -1
- package/dist/hooks/checkout.js +2 -51
- package/dist/index.d.ts +11 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -12
- package/dist/interfaces/rest/router.js +3 -3
- package/dist/interfaces/rest/routes/admin/compensation-failures.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/admin/compensation-failures.js +5 -5
- package/dist/interfaces/rest/routes/admin/entity-field-definitions.js +5 -5
- package/dist/interfaces/rest/routes/admin/staff.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/admin/staff.js +2 -3
- package/dist/interfaces/rest/routes/analytics.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/analytics.js +2 -2
- package/dist/interfaces/rest/routes/carts.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/carts.js +12 -12
- package/dist/interfaces/rest/routes/catalog.js +37 -37
- package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/checkout.js +9 -10
- package/dist/interfaces/rest/routes/customers.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/customers.js +12 -12
- package/dist/interfaces/rest/routes/documents.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/documents.js +9 -9
- package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/inventory.js +8 -8
- package/dist/interfaces/rest/routes/media.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/media.js +5 -5
- package/dist/interfaces/rest/routes/orders.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/orders.js +32 -32
- package/dist/interfaces/rest/routes/payments.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/payments.js +2 -2
- package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/pricing.js +8 -8
- package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/promotions.js +7 -7
- package/dist/interfaces/rest/routes/search.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/search.js +3 -3
- package/dist/interfaces/rest/routes/settings.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/settings.js +4 -4
- package/dist/interfaces/rest/routes/shipping.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/shipping.js +9 -9
- package/dist/interfaces/rest/routes/tax.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/tax.js +9 -9
- package/dist/interfaces/rest/routes/webhooks.d.ts.map +1 -1
- package/dist/interfaces/rest/routes/webhooks.js +4 -4
- package/dist/interfaces/rest/utils.d.ts +1 -1
- package/dist/interfaces/rest/utils.d.ts.map +1 -1
- package/dist/interfaces/rest/utils.js +4 -13
- package/dist/jobs.d.ts +1 -0
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js +1 -0
- package/dist/kernel/database/adapter.d.ts +9 -0
- package/dist/kernel/database/adapter.d.ts.map +1 -1
- package/dist/kernel/database/adapter.js +1 -1
- package/dist/kernel/database/migrate.d.ts +0 -4
- package/dist/kernel/database/migrate.d.ts.map +1 -1
- package/dist/kernel/database/migrate.js +2 -14
- package/dist/kernel/database/pglite-transaction.d.ts +28 -0
- package/dist/kernel/database/pglite-transaction.d.ts.map +1 -0
- package/dist/kernel/database/pglite-transaction.js +52 -0
- package/dist/kernel/database/tx-context.d.ts +0 -1
- package/dist/kernel/database/tx-context.d.ts.map +1 -1
- package/dist/kernel/database/tx-context.js +2 -14
- package/dist/kernel/database/unique-violation.d.ts +3 -0
- package/dist/kernel/database/unique-violation.d.ts.map +1 -0
- package/dist/kernel/database/unique-violation.js +9 -0
- package/dist/kernel/error-mapper.d.ts.map +1 -1
- package/dist/kernel/error-mapper.js +1 -0
- package/dist/kernel/errors.d.ts +12 -0
- package/dist/kernel/errors.d.ts.map +1 -1
- package/dist/kernel/errors.js +16 -0
- package/dist/kernel/hooks/create-context.d.ts +18 -9
- package/dist/kernel/hooks/create-context.d.ts.map +1 -1
- package/dist/kernel/hooks/create-context.js +24 -3
- package/dist/kernel/hooks/registry.d.ts +0 -19
- package/dist/kernel/hooks/registry.d.ts.map +1 -1
- package/dist/kernel/hooks/registry.js +0 -32
- package/dist/kernel/jobs/drizzle-adapter.d.ts.map +1 -1
- package/dist/kernel/jobs/drizzle-adapter.js +3 -10
- package/dist/kernel/jobs/prepare-enqueue.d.ts +20 -0
- package/dist/kernel/jobs/prepare-enqueue.d.ts.map +1 -0
- package/dist/kernel/jobs/prepare-enqueue.js +24 -0
- package/dist/kernel/jobs/types.d.ts +0 -4
- package/dist/kernel/jobs/types.d.ts.map +1 -1
- package/dist/kernel/jobs/types.js +0 -4
- package/dist/kernel/local-api.d.ts +0 -33
- package/dist/kernel/local-api.d.ts.map +1 -1
- package/dist/kernel/local-api.js +0 -36
- package/dist/kernel/plugin/manifest.d.ts +3 -5
- package/dist/kernel/plugin/manifest.d.ts.map +1 -1
- package/dist/modules/analytics/service.d.ts +0 -6
- package/dist/modules/analytics/service.d.ts.map +1 -1
- package/dist/modules/analytics/service.js +0 -32
- package/dist/modules/cart/service.d.ts.map +1 -1
- package/dist/modules/cart/service.js +5 -17
- package/dist/modules/catalog/entity-service.d.ts.map +1 -1
- package/dist/modules/catalog/entity-service.js +9 -17
- package/dist/modules/catalog/import-service.d.ts.map +1 -1
- package/dist/modules/catalog/import-service.js +4 -13
- package/dist/modules/catalog/service.d.ts +1 -81
- package/dist/modules/catalog/service.d.ts.map +1 -1
- package/dist/modules/catalog/service.js +1 -8
- package/dist/modules/customers/service.d.ts.map +1 -1
- package/dist/modules/customers/service.js +5 -17
- package/dist/modules/documents/render.d.ts +0 -3
- package/dist/modules/documents/render.d.ts.map +1 -1
- package/dist/modules/documents/render.js +2 -17
- package/dist/modules/fulfillment/service.d.ts.map +1 -1
- package/dist/modules/fulfillment/service.js +8 -26
- package/dist/modules/inventory/service.d.ts.map +1 -1
- package/dist/modules/inventory/service.js +3 -20
- package/dist/modules/media/service.d.ts.map +1 -1
- package/dist/modules/media/service.js +2 -10
- package/dist/modules/orders/quote.d.ts.map +1 -1
- package/dist/modules/orders/quote.js +1 -2
- package/dist/modules/orders/service.d.ts.map +1 -1
- package/dist/modules/orders/service.js +4 -17
- package/dist/modules/pricing/service.d.ts.map +1 -1
- package/dist/modules/pricing/service.js +7 -18
- package/dist/modules/promotions/service.d.ts.map +1 -1
- package/dist/modules/promotions/service.js +4 -16
- package/dist/modules/tax/service.d.ts +1 -3
- package/dist/modules/tax/service.d.ts.map +1 -1
- package/dist/modules/tax/service.js +16 -52
- package/dist/modules/webhooks/hook.d.ts.map +1 -1
- package/dist/modules/webhooks/hook.js +3 -2
- package/dist/modules/webhooks/service.d.ts.map +1 -1
- package/dist/modules/webhooks/service.js +1 -50
- package/dist/runtime/commerce.d.ts.map +1 -1
- package/dist/runtime/commerce.js +4 -11
- package/dist/runtime/kernel-modules.d.ts +38 -1799
- package/dist/runtime/kernel-modules.d.ts.map +1 -1
- package/dist/runtime/kernel-modules.js +160 -66
- package/dist/runtime/kernel-types.d.ts +3 -15
- package/dist/runtime/kernel-types.d.ts.map +1 -1
- package/dist/runtime/kernel-types.js +0 -10
- package/dist/runtime/kernel.d.ts +2 -3
- package/dist/runtime/kernel.d.ts.map +1 -1
- package/dist/runtime/kernel.js +10 -51
- package/dist/runtime/server.d.ts +1 -1
- package/dist/runtime/server.d.ts.map +1 -1
- package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -1
- package/dist/test-utils/create-pglite-adapter.js +5 -62
- package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -1
- package/dist/test-utils/create-plugin-test-app.js +13 -32
- package/dist/test-utils/rest-api-test-utils.d.ts +0 -12
- package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -1
- package/dist/test-utils/rest-api-test-utils.js +3 -70
- package/dist/test-utils/test-actors.d.ts +9 -0
- package/dist/test-utils/test-actors.d.ts.map +1 -1
- package/dist/test-utils/test-actors.js +62 -0
- package/dist/testing.d.ts +1 -4
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +1 -4
- package/dist/utils/escape-html.d.ts +3 -0
- package/dist/utils/escape-html.d.ts.map +1 -0
- package/dist/utils/escape-html.js +9 -0
- package/dist/utils/id.d.ts +0 -1
- package/dist/utils/id.d.ts.map +1 -1
- package/dist/utils/id.js +0 -3
- package/dist/utils/logger.d.ts +1 -1
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +1 -1
- package/dist/utils/money.d.ts +13 -0
- package/dist/utils/money.d.ts.map +1 -0
- package/dist/utils/money.js +58 -0
- package/package.json +26 -29
- package/src/adapters/email-render.ts +63 -0
- package/src/auth/actor.ts +14 -0
- package/src/auth/auth-failure.ts +0 -5
- package/src/auth/middleware.ts +7 -6
- package/src/auth/permissions.ts +12 -6
- package/src/auth/role-authority.ts +1 -10
- package/src/auth/setup.ts +8 -0
- package/src/auth/strict-org-resolution.ts +9 -16
- package/src/auth/system-actor.ts +3 -3
- package/src/config/defaults.ts +3 -20
- package/src/config/define-config.ts +5 -4
- package/src/config/types.ts +2 -2
- package/src/hooks/checkout.ts +2 -86
- package/src/index.ts +9 -36
- package/src/interfaces/rest/router.ts +3 -3
- package/src/interfaces/rest/routes/admin/compensation-failures.ts +5 -5
- package/src/interfaces/rest/routes/admin/entity-field-definitions.ts +5 -5
- package/src/interfaces/rest/routes/admin/staff.ts +2 -3
- package/src/interfaces/rest/routes/analytics.ts +2 -2
- package/src/interfaces/rest/routes/carts.ts +12 -12
- package/src/interfaces/rest/routes/catalog.ts +37 -37
- package/src/interfaces/rest/routes/checkout.ts +8 -10
- package/src/interfaces/rest/routes/customers.ts +12 -12
- package/src/interfaces/rest/routes/documents.ts +9 -9
- package/src/interfaces/rest/routes/inventory.ts +8 -8
- package/src/interfaces/rest/routes/media.ts +5 -5
- package/src/interfaces/rest/routes/orders.ts +32 -32
- package/src/interfaces/rest/routes/payments.ts +2 -2
- package/src/interfaces/rest/routes/pricing.ts +8 -8
- package/src/interfaces/rest/routes/promotions.ts +7 -7
- package/src/interfaces/rest/routes/search.ts +3 -3
- package/src/interfaces/rest/routes/settings.ts +4 -4
- package/src/interfaces/rest/routes/shipping.ts +9 -9
- package/src/interfaces/rest/routes/tax.ts +9 -9
- package/src/interfaces/rest/routes/webhooks.ts +4 -4
- package/src/interfaces/rest/utils.ts +4 -14
- package/src/jobs.ts +2 -1
- package/src/kernel/database/adapter.ts +1 -1
- package/src/kernel/database/migrate.ts +2 -17
- package/src/kernel/database/pglite-transaction.ts +61 -0
- package/src/kernel/database/tx-context.ts +2 -20
- package/src/kernel/database/unique-violation.ts +7 -0
- package/src/kernel/error-mapper.ts +1 -0
- package/src/kernel/errors.ts +18 -0
- package/src/kernel/hooks/create-context.ts +38 -8
- package/src/kernel/hooks/registry.ts +0 -37
- package/src/kernel/jobs/drizzle-adapter.ts +4 -15
- package/src/kernel/jobs/prepare-enqueue.ts +42 -0
- package/src/kernel/jobs/types.ts +0 -5
- package/src/kernel/local-api.ts +0 -44
- package/src/kernel/plugin/manifest.ts +3 -5
- package/src/modules/analytics/service.ts +0 -36
- package/src/modules/cart/service.ts +6 -29
- package/src/modules/catalog/entity-service.ts +9 -19
- package/src/modules/catalog/import-service.ts +4 -11
- package/src/modules/catalog/service.ts +2 -286
- package/src/modules/customers/service.ts +6 -27
- package/src/modules/documents/render.ts +2 -19
- package/src/modules/fulfillment/service.ts +8 -27
- package/src/modules/inventory/service.ts +3 -21
- package/src/modules/media/service.ts +2 -8
- package/src/modules/orders/quote.ts +1 -2
- package/src/modules/orders/service.ts +5 -30
- package/src/modules/pricing/service.ts +12 -30
- package/src/modules/promotions/service.ts +5 -28
- package/src/modules/tax/service.ts +20 -48
- package/src/modules/webhooks/hook.ts +3 -2
- package/src/modules/webhooks/service.ts +1 -42
- package/src/runtime/commerce.ts +4 -11
- package/src/runtime/kernel-modules.ts +191 -67
- package/src/runtime/kernel-types.ts +3 -26
- package/src/runtime/kernel.ts +11 -66
- package/src/runtime/server.ts +1 -3
- package/src/test-utils/create-pglite-adapter.ts +5 -67
- package/src/test-utils/create-plugin-test-app.ts +13 -52
- package/src/test-utils/rest-api-test-utils.ts +3 -70
- package/src/test-utils/test-actors.ts +66 -0
- package/src/testing.ts +1 -3
- package/src/utils/escape-html.ts +9 -0
- package/src/utils/id.ts +0 -4
- package/src/utils/logger.ts +1 -1
- package/src/utils/money.ts +62 -0
- package/dist/auth/access.d.ts +0 -101
- package/dist/auth/access.d.ts.map +0 -1
- package/dist/auth/access.js +0 -128
- package/dist/generated/plugin-manifest.d.ts +0 -51
- package/dist/generated/plugin-manifest.d.ts.map +0 -1
- package/dist/generated/plugin-manifest.js +0 -21
- package/dist/kernel/factory/repository-factory.d.ts +0 -71
- package/dist/kernel/factory/repository-factory.d.ts.map +0 -1
- package/dist/kernel/factory/repository-factory.js +0 -138
- package/dist/kernel/http-error.d.ts +0 -30
- package/dist/kernel/http-error.d.ts.map +0 -1
- package/dist/kernel/http-error.js +0 -35
- package/dist/kernel/jobs/builtin-job-tasks.d.ts +0 -3
- package/dist/kernel/jobs/builtin-job-tasks.d.ts.map +0 -1
- package/dist/kernel/jobs/builtin-job-tasks.js +0 -6
- package/dist/kernel/module/define.d.ts +0 -21
- package/dist/kernel/module/define.d.ts.map +0 -1
- package/dist/kernel/module/define.js +0 -3
- package/dist/kernel/module/index.d.ts +0 -4
- package/dist/kernel/module/index.d.ts.map +0 -1
- package/dist/kernel/module/index.js +0 -2
- package/dist/kernel/module/topo-sort.d.ts +0 -7
- package/dist/kernel/module/topo-sort.d.ts.map +0 -1
- package/dist/kernel/module/topo-sort.js +0 -89
- package/dist/kernel/query/executor.d.ts +0 -21
- package/dist/kernel/query/executor.d.ts.map +0 -1
- package/dist/kernel/query/executor.js +0 -128
- package/dist/kernel/query/registry.d.ts +0 -33
- package/dist/kernel/query/registry.d.ts.map +0 -1
- package/dist/kernel/query/registry.js +0 -20
- package/dist/kernel/service-registry.d.ts +0 -109
- package/dist/kernel/service-registry.d.ts.map +0 -1
- package/dist/kernel/service-registry.js +0 -26
- package/dist/modules/analytics/hooks.d.ts +0 -13
- package/dist/modules/analytics/hooks.d.ts.map +0 -1
- package/dist/modules/analytics/hooks.js +0 -12
- package/dist/modules/analytics/module.d.ts +0 -3
- package/dist/modules/analytics/module.d.ts.map +0 -1
- package/dist/modules/analytics/module.js +0 -24
- package/dist/modules/analytics/repository/index.d.ts +0 -5
- package/dist/modules/analytics/repository/index.d.ts.map +0 -1
- package/dist/modules/analytics/repository/index.js +0 -1
- package/dist/modules/audit/index.d.ts +0 -2
- package/dist/modules/audit/index.d.ts.map +0 -1
- package/dist/modules/audit/index.js +0 -1
- package/dist/modules/audit/module.d.ts +0 -180
- package/dist/modules/audit/module.d.ts.map +0 -1
- package/dist/modules/audit/module.js +0 -8
- package/dist/modules/cart/access.d.ts +0 -11
- package/dist/modules/cart/access.d.ts.map +0 -1
- package/dist/modules/cart/access.js +0 -18
- package/dist/modules/cart/module.d.ts +0 -14
- package/dist/modules/cart/module.d.ts.map +0 -1
- package/dist/modules/cart/module.js +0 -17
- package/dist/modules/catalog/module.d.ts +0 -26
- package/dist/modules/catalog/module.d.ts.map +0 -1
- package/dist/modules/catalog/module.js +0 -33
- package/dist/modules/customers/index.d.ts +0 -2
- package/dist/modules/customers/index.d.ts.map +0 -1
- package/dist/modules/customers/index.js +0 -1
- package/dist/modules/customers/module.d.ts +0 -563
- package/dist/modules/customers/module.d.ts.map +0 -1
- package/dist/modules/customers/module.js +0 -20
- package/dist/modules/documents/module.d.ts +0 -7
- package/dist/modules/documents/module.d.ts.map +0 -1
- package/dist/modules/documents/module.js +0 -13
- package/dist/modules/fulfillment/module.d.ts +0 -13
- package/dist/modules/fulfillment/module.d.ts.map +0 -1
- package/dist/modules/fulfillment/module.js +0 -23
- package/dist/modules/inventory/module.d.ts +0 -13
- package/dist/modules/inventory/module.d.ts.map +0 -1
- package/dist/modules/inventory/module.js +0 -20
- package/dist/modules/media/index.d.ts +0 -2
- package/dist/modules/media/index.d.ts.map +0 -1
- package/dist/modules/media/index.js +0 -1
- package/dist/modules/media/module.d.ts +0 -360
- package/dist/modules/media/module.d.ts.map +0 -1
- package/dist/modules/media/module.js +0 -24
- package/dist/modules/orders/module.d.ts +0 -25
- package/dist/modules/orders/module.d.ts.map +0 -1
- package/dist/modules/orders/module.js +0 -33
- package/dist/modules/organization/index.d.ts +0 -2
- package/dist/modules/organization/index.d.ts.map +0 -1
- package/dist/modules/organization/index.js +0 -1
- package/dist/modules/organization/module.d.ts +0 -205
- package/dist/modules/organization/module.d.ts.map +0 -1
- package/dist/modules/organization/module.js +0 -8
- package/dist/modules/payments/module.d.ts +0 -3
- package/dist/modules/payments/module.d.ts.map +0 -1
- package/dist/modules/payments/module.js +0 -7
- package/dist/modules/payments/repository/index.d.ts +0 -5
- package/dist/modules/payments/repository/index.d.ts.map +0 -1
- package/dist/modules/payments/repository/index.js +0 -1
- package/dist/modules/pricing/index.d.ts +0 -2
- package/dist/modules/pricing/index.d.ts.map +0 -1
- package/dist/modules/pricing/index.js +0 -1
- package/dist/modules/pricing/module.d.ts +0 -14
- package/dist/modules/pricing/module.d.ts.map +0 -1
- package/dist/modules/pricing/module.js +0 -17
- package/dist/modules/promotions/module.d.ts +0 -14
- package/dist/modules/promotions/module.d.ts.map +0 -1
- package/dist/modules/promotions/module.js +0 -19
- package/dist/modules/search/module.d.ts +0 -8
- package/dist/modules/search/module.d.ts.map +0 -1
- package/dist/modules/search/module.js +0 -22
- package/dist/modules/search/repository/index.d.ts +0 -5
- package/dist/modules/search/repository/index.d.ts.map +0 -1
- package/dist/modules/search/repository/index.js +0 -1
- package/dist/modules/settings/module.d.ts +0 -6
- package/dist/modules/settings/module.d.ts.map +0 -1
- package/dist/modules/settings/module.js +0 -12
- package/dist/modules/shipping/module.d.ts +0 -12
- package/dist/modules/shipping/module.d.ts.map +0 -1
- package/dist/modules/shipping/module.js +0 -14
- package/dist/modules/tax/module.d.ts +0 -7
- package/dist/modules/tax/module.d.ts.map +0 -1
- package/dist/modules/tax/module.js +0 -13
- package/dist/modules/webhooks/index.d.ts +0 -2
- package/dist/modules/webhooks/index.d.ts.map +0 -1
- package/dist/modules/webhooks/index.js +0 -1
- package/dist/modules/webhooks/module.d.ts +0 -403
- package/dist/modules/webhooks/module.d.ts.map +0 -1
- package/dist/modules/webhooks/module.js +0 -16
- package/dist/test-utils/create-repository-test-harness.d.ts +0 -8
- package/dist/test-utils/create-repository-test-harness.d.ts.map +0 -1
- package/dist/test-utils/create-repository-test-harness.js +0 -7
- package/dist/test-utils/create-test-plugin-context.d.ts +0 -38
- package/dist/test-utils/create-test-plugin-context.d.ts.map +0 -1
- package/dist/test-utils/create-test-plugin-context.js +0 -39
- package/dist/test-utils/typed-hooks.d.ts +0 -44
- package/dist/test-utils/typed-hooks.d.ts.map +0 -1
- package/dist/test-utils/typed-hooks.js +0 -36
- package/dist/types/commerce-types.d.ts +0 -34
- package/dist/types/commerce-types.d.ts.map +0 -1
- package/dist/types/commerce-types.js +0 -1
- package/src/auth/access.ts +0 -187
- package/src/generated/plugin-capabilities.d.ts +0 -21
- package/src/generated/plugin-manifest.ts +0 -24
- package/src/generated/plugin-repositories.d.ts +0 -21
- package/src/kernel/factory/repository-factory.ts +0 -244
- package/src/kernel/http-error.ts +0 -44
- package/src/kernel/jobs/builtin-job-tasks.ts +0 -17
- package/src/kernel/module/define.ts +0 -36
- package/src/kernel/module/index.ts +0 -3
- package/src/kernel/module/topo-sort.ts +0 -99
- package/src/kernel/query/executor.ts +0 -184
- package/src/kernel/query/registry.ts +0 -46
- package/src/kernel/service-registry.ts +0 -76
- package/src/modules/analytics/hooks.ts +0 -11
- package/src/modules/analytics/module.ts +0 -35
- package/src/modules/analytics/repository/index.ts +0 -5
- package/src/modules/audit/index.ts +0 -1
- package/src/modules/audit/module.ts +0 -11
- package/src/modules/cart/access.ts +0 -27
- package/src/modules/cart/module.ts +0 -32
- package/src/modules/catalog/module.ts +0 -80
- package/src/modules/customers/index.ts +0 -1
- package/src/modules/customers/module.ts +0 -29
- package/src/modules/documents/module.ts +0 -21
- package/src/modules/fulfillment/module.ts +0 -44
- package/src/modules/inventory/module.ts +0 -37
- package/src/modules/media/index.ts +0 -1
- package/src/modules/media/module.ts +0 -27
- package/src/modules/orders/module.ts +0 -67
- package/src/modules/organization/index.ts +0 -1
- package/src/modules/organization/module.ts +0 -11
- package/src/modules/payments/module.ts +0 -14
- package/src/modules/payments/repository/index.ts +0 -5
- package/src/modules/pricing/index.ts +0 -1
- package/src/modules/pricing/module.ts +0 -32
- package/src/modules/promotions/module.ts +0 -34
- package/src/modules/search/module.ts +0 -32
- package/src/modules/search/repository/index.ts +0 -5
- package/src/modules/settings/module.ts +0 -20
- package/src/modules/shipping/module.ts +0 -27
- package/src/modules/tax/module.ts +0 -21
- package/src/modules/webhooks/index.ts +0 -1
- package/src/modules/webhooks/module.ts +0 -24
- package/src/test-utils/create-repository-test-harness.ts +0 -16
- package/src/test-utils/create-test-plugin-context.ts +0 -66
- package/src/test-utils/typed-hooks.ts +0 -55
- package/src/types/commerce-types.ts +0 -34
|
@@ -2,7 +2,7 @@ import { OpenAPIHono } from "@hono/zod-openapi";
|
|
|
2
2
|
import type { Kernel } from "../../../runtime/kernel.js";
|
|
3
3
|
import type { CreateCartInput, AddCartItemInput } from "../../../modules/cart/schemas.js";
|
|
4
4
|
import { createCartRoute, addCartItemRoute, updateCartItemQuantityRoute, getCartRoute, removeCartItemRoute, listCartsRoute, recoverCartRoute } from "../schemas/carts.js";
|
|
5
|
-
import { type AppEnv,
|
|
5
|
+
import { type AppEnv, errorBody, mapErrorToStatus, parsePagination, requireMethodPerm, requirePerm } from "../utils.js";
|
|
6
6
|
|
|
7
7
|
export function cartRoutes(kernel: Kernel) {
|
|
8
8
|
const router = new OpenAPIHono<AppEnv>();
|
|
@@ -21,7 +21,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
21
21
|
const result = await kernel.services.cart.create(c.req.valid("json") as CreateCartInput, actor);
|
|
22
22
|
if (!result.ok)
|
|
23
23
|
return c.json(
|
|
24
|
-
|
|
24
|
+
errorBody(result.error),
|
|
25
25
|
mapErrorToStatus(result.error),
|
|
26
26
|
);
|
|
27
27
|
return c.json({ data: result.value }, 201);
|
|
@@ -57,7 +57,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
57
57
|
);
|
|
58
58
|
if (!result.ok)
|
|
59
59
|
return c.json(
|
|
60
|
-
|
|
60
|
+
errorBody(result.error),
|
|
61
61
|
mapErrorToStatus(result.error),
|
|
62
62
|
);
|
|
63
63
|
return c.json({
|
|
@@ -71,7 +71,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
71
71
|
const result = await kernel.services.cart.recover(c.req.param("id"), c.get("actor"));
|
|
72
72
|
if (!result.ok)
|
|
73
73
|
return c.json(
|
|
74
|
-
|
|
74
|
+
errorBody(result.error),
|
|
75
75
|
mapErrorToStatus(result.error),
|
|
76
76
|
);
|
|
77
77
|
return c.json({ data: result.value });
|
|
@@ -80,7 +80,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
80
80
|
// @ts-expect-error -- openapi handler union return type
|
|
81
81
|
router.openapi(getCartRoute, async (c) => {
|
|
82
82
|
const actor = c.get("actor");
|
|
83
|
-
const secretHeader = c.req.header("x-cart-secret")
|
|
83
|
+
const secretHeader = c.req.header("x-cart-secret");
|
|
84
84
|
const result = await kernel.services.cart.getById(
|
|
85
85
|
c.req.param("id"),
|
|
86
86
|
actor,
|
|
@@ -89,7 +89,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
89
89
|
);
|
|
90
90
|
if (!result.ok)
|
|
91
91
|
return c.json(
|
|
92
|
-
|
|
92
|
+
errorBody(result.error),
|
|
93
93
|
mapErrorToStatus(result.error),
|
|
94
94
|
);
|
|
95
95
|
return c.json({ data: result.value });
|
|
@@ -99,7 +99,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
99
99
|
// returns union responses (201 | 400 | 422). The route definition documents the
|
|
100
100
|
// contract; the handler returns dynamic status.
|
|
101
101
|
router.openapi(addCartItemRoute, async (c) => {
|
|
102
|
-
const secret = c.req.header("x-cart-secret") ??
|
|
102
|
+
const secret = c.req.header("x-cart-secret") ?? undefined;
|
|
103
103
|
const result = await kernel.services.cart.addItem(
|
|
104
104
|
{ ...c.req.valid("json"), cartId: c.req.param("id") } as AddCartItemInput,
|
|
105
105
|
c.get("actor"),
|
|
@@ -108,7 +108,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
108
108
|
);
|
|
109
109
|
if (!result.ok)
|
|
110
110
|
return c.json(
|
|
111
|
-
|
|
111
|
+
errorBody(result.error),
|
|
112
112
|
mapErrorToStatus(result.error),
|
|
113
113
|
);
|
|
114
114
|
return c.json({ data: result.value }, 201);
|
|
@@ -119,7 +119,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
119
119
|
// contract; the handler returns dynamic status.
|
|
120
120
|
router.openapi(updateCartItemQuantityRoute, async (c) => {
|
|
121
121
|
const body = c.req.valid("json");
|
|
122
|
-
const secret = c.req.header("x-cart-secret") ??
|
|
122
|
+
const secret = c.req.header("x-cart-secret") ?? undefined;
|
|
123
123
|
const result = await kernel.services.cart.updateQuantity(
|
|
124
124
|
{
|
|
125
125
|
cartId: c.req.param("id"),
|
|
@@ -132,7 +132,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
132
132
|
);
|
|
133
133
|
if (!result.ok)
|
|
134
134
|
return c.json(
|
|
135
|
-
|
|
135
|
+
errorBody(result.error),
|
|
136
136
|
mapErrorToStatus(result.error),
|
|
137
137
|
);
|
|
138
138
|
return c.json({ data: result.value });
|
|
@@ -140,7 +140,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
140
140
|
|
|
141
141
|
// @ts-expect-error -- openapi handler union return type
|
|
142
142
|
router.openapi(removeCartItemRoute, async (c) => {
|
|
143
|
-
const secret = c.req.header("x-cart-secret") ??
|
|
143
|
+
const secret = c.req.header("x-cart-secret") ?? undefined;
|
|
144
144
|
const result = await kernel.services.cart.removeItem(
|
|
145
145
|
c.req.param("id"),
|
|
146
146
|
c.req.param("itemId"),
|
|
@@ -150,7 +150,7 @@ export function cartRoutes(kernel: Kernel) {
|
|
|
150
150
|
);
|
|
151
151
|
if (!result.ok)
|
|
152
152
|
return c.json(
|
|
153
|
-
|
|
153
|
+
errorBody(result.error),
|
|
154
154
|
mapErrorToStatus(result.error),
|
|
155
155
|
);
|
|
156
156
|
return c.json({ data: { deleted: true } });
|
|
@@ -53,7 +53,7 @@ import {
|
|
|
53
53
|
} from "../schemas/catalog.js";
|
|
54
54
|
import {
|
|
55
55
|
type AppEnv,
|
|
56
|
-
|
|
56
|
+
errorBody,
|
|
57
57
|
mapErrorToStatus,
|
|
58
58
|
parseInclude,
|
|
59
59
|
parsePagination,
|
|
@@ -86,7 +86,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
86
86
|
);
|
|
87
87
|
if (!result.ok) {
|
|
88
88
|
return c.json(
|
|
89
|
-
|
|
89
|
+
errorBody(result.error),
|
|
90
90
|
mapErrorToStatus(result.error),
|
|
91
91
|
);
|
|
92
92
|
}
|
|
@@ -112,7 +112,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
112
112
|
);
|
|
113
113
|
if (!result.ok) {
|
|
114
114
|
return c.json(
|
|
115
|
-
|
|
115
|
+
errorBody(result.error),
|
|
116
116
|
mapErrorToStatus(result.error),
|
|
117
117
|
);
|
|
118
118
|
}
|
|
@@ -145,7 +145,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
145
145
|
|
|
146
146
|
if (!result.ok) {
|
|
147
147
|
return c.json(
|
|
148
|
-
|
|
148
|
+
errorBody(result.error),
|
|
149
149
|
mapErrorToStatus(result.error),
|
|
150
150
|
);
|
|
151
151
|
}
|
|
@@ -184,7 +184,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
184
184
|
});
|
|
185
185
|
} catch (error) {
|
|
186
186
|
console.error("[catalog] List failed:", error instanceof Error ? error.message : error);
|
|
187
|
-
return c.json(
|
|
187
|
+
return c.json(errorBody(error), mapErrorToStatus(error));
|
|
188
188
|
}
|
|
189
189
|
});
|
|
190
190
|
|
|
@@ -215,7 +215,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
215
215
|
|
|
216
216
|
if (!result.ok) {
|
|
217
217
|
return c.json(
|
|
218
|
-
|
|
218
|
+
errorBody(result.error),
|
|
219
219
|
mapErrorToStatus(result.error),
|
|
220
220
|
);
|
|
221
221
|
}
|
|
@@ -223,7 +223,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
223
223
|
return c.json({ data: result.value });
|
|
224
224
|
} catch (error) {
|
|
225
225
|
console.error("[catalog] Get entity failed:", error instanceof Error ? error.message : error);
|
|
226
|
-
return c.json(
|
|
226
|
+
return c.json(errorBody(error), mapErrorToStatus(error));
|
|
227
227
|
}
|
|
228
228
|
});
|
|
229
229
|
|
|
@@ -235,7 +235,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
235
235
|
);
|
|
236
236
|
if (!result.ok) {
|
|
237
237
|
return c.json(
|
|
238
|
-
|
|
238
|
+
errorBody(result.error),
|
|
239
239
|
mapErrorToStatus(result.error),
|
|
240
240
|
);
|
|
241
241
|
}
|
|
@@ -251,7 +251,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
251
251
|
);
|
|
252
252
|
if (!result.ok) {
|
|
253
253
|
return c.json(
|
|
254
|
-
|
|
254
|
+
errorBody(result.error),
|
|
255
255
|
mapErrorToStatus(result.error),
|
|
256
256
|
);
|
|
257
257
|
}
|
|
@@ -266,7 +266,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
266
266
|
);
|
|
267
267
|
if (!result.ok) {
|
|
268
268
|
return c.json(
|
|
269
|
-
|
|
269
|
+
errorBody(result.error),
|
|
270
270
|
mapErrorToStatus(result.error),
|
|
271
271
|
);
|
|
272
272
|
}
|
|
@@ -281,7 +281,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
281
281
|
);
|
|
282
282
|
if (!result.ok)
|
|
283
283
|
return c.json(
|
|
284
|
-
|
|
284
|
+
errorBody(result.error),
|
|
285
285
|
mapErrorToStatus(result.error),
|
|
286
286
|
);
|
|
287
287
|
return c.json({ data: result.value });
|
|
@@ -295,7 +295,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
295
295
|
);
|
|
296
296
|
if (!result.ok)
|
|
297
297
|
return c.json(
|
|
298
|
-
|
|
298
|
+
errorBody(result.error),
|
|
299
299
|
mapErrorToStatus(result.error),
|
|
300
300
|
);
|
|
301
301
|
return c.json({ data: result.value });
|
|
@@ -309,7 +309,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
309
309
|
);
|
|
310
310
|
if (!result.ok)
|
|
311
311
|
return c.json(
|
|
312
|
-
|
|
312
|
+
errorBody(result.error),
|
|
313
313
|
mapErrorToStatus(result.error),
|
|
314
314
|
);
|
|
315
315
|
return c.json({ data: result.value });
|
|
@@ -325,7 +325,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
325
325
|
);
|
|
326
326
|
if (!result.ok)
|
|
327
327
|
return c.json(
|
|
328
|
-
|
|
328
|
+
errorBody(result.error),
|
|
329
329
|
mapErrorToStatus(result.error),
|
|
330
330
|
);
|
|
331
331
|
return c.json({ data: { updated: true } });
|
|
@@ -341,7 +341,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
341
341
|
);
|
|
342
342
|
if (!result.ok)
|
|
343
343
|
return c.json(
|
|
344
|
-
|
|
344
|
+
errorBody(result.error),
|
|
345
345
|
mapErrorToStatus(result.error),
|
|
346
346
|
);
|
|
347
347
|
return c.json({ data: result.value });
|
|
@@ -357,7 +357,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
357
357
|
);
|
|
358
358
|
if (!result.ok)
|
|
359
359
|
return c.json(
|
|
360
|
-
|
|
360
|
+
errorBody(result.error),
|
|
361
361
|
mapErrorToStatus(result.error),
|
|
362
362
|
);
|
|
363
363
|
return c.json({ data: result.value });
|
|
@@ -372,7 +372,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
372
372
|
);
|
|
373
373
|
if (!result.ok)
|
|
374
374
|
return c.json(
|
|
375
|
-
|
|
375
|
+
errorBody(result.error),
|
|
376
376
|
mapErrorToStatus(result.error),
|
|
377
377
|
);
|
|
378
378
|
return c.json({ data: result.value });
|
|
@@ -387,7 +387,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
387
387
|
);
|
|
388
388
|
if (!result.ok)
|
|
389
389
|
return c.json(
|
|
390
|
-
|
|
390
|
+
errorBody(result.error),
|
|
391
391
|
mapErrorToStatus(result.error),
|
|
392
392
|
);
|
|
393
393
|
return c.json({ data: result.value });
|
|
@@ -396,14 +396,14 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
396
396
|
// @ts-expect-error -- openapi handler union return type
|
|
397
397
|
router.openapi(archiveCategoryRoute, async (c) => {
|
|
398
398
|
const result = await kernel.services.catalog.archiveCategory(c.req.param("categoryId"), c.get("actor"));
|
|
399
|
-
if (!result.ok) return c.json(
|
|
399
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
400
400
|
return c.json({ data: result.value });
|
|
401
401
|
});
|
|
402
402
|
|
|
403
403
|
// @ts-expect-error -- openapi handler union return type
|
|
404
404
|
router.openapi(restoreCategoryRoute, async (c) => {
|
|
405
405
|
const result = await kernel.services.catalog.restoreCategory(c.req.param("categoryId"), c.get("actor"));
|
|
406
|
-
if (!result.ok) return c.json(
|
|
406
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
407
407
|
return c.json({ data: result.value });
|
|
408
408
|
});
|
|
409
409
|
|
|
@@ -415,7 +415,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
415
415
|
);
|
|
416
416
|
if (!result.ok)
|
|
417
417
|
return c.json(
|
|
418
|
-
|
|
418
|
+
errorBody(result.error),
|
|
419
419
|
mapErrorToStatus(result.error),
|
|
420
420
|
);
|
|
421
421
|
return c.json({ data: result.value }, 201);
|
|
@@ -430,7 +430,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
430
430
|
);
|
|
431
431
|
if (!result.ok)
|
|
432
432
|
return c.json(
|
|
433
|
-
|
|
433
|
+
errorBody(result.error),
|
|
434
434
|
mapErrorToStatus(result.error),
|
|
435
435
|
);
|
|
436
436
|
return c.json({ data: result.value });
|
|
@@ -444,7 +444,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
444
444
|
);
|
|
445
445
|
if (!result.ok)
|
|
446
446
|
return c.json(
|
|
447
|
-
|
|
447
|
+
errorBody(result.error),
|
|
448
448
|
mapErrorToStatus(result.error),
|
|
449
449
|
);
|
|
450
450
|
return c.json({ data: { deleted: true } });
|
|
@@ -459,7 +459,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
459
459
|
);
|
|
460
460
|
if (!result.ok)
|
|
461
461
|
return c.json(
|
|
462
|
-
|
|
462
|
+
errorBody(result.error),
|
|
463
463
|
mapErrorToStatus(result.error),
|
|
464
464
|
);
|
|
465
465
|
return c.json({ data: { linked: true } });
|
|
@@ -474,7 +474,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
474
474
|
);
|
|
475
475
|
if (!result.ok)
|
|
476
476
|
return c.json(
|
|
477
|
-
|
|
477
|
+
errorBody(result.error),
|
|
478
478
|
mapErrorToStatus(result.error),
|
|
479
479
|
);
|
|
480
480
|
return c.json({ data: { unlinked: true } });
|
|
@@ -485,7 +485,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
485
485
|
const result = await kernel.services.catalog.listBrands({ actor: c.get("actor"), tx: null, requestId: "" });
|
|
486
486
|
if (!result.ok)
|
|
487
487
|
return c.json(
|
|
488
|
-
|
|
488
|
+
errorBody(result.error),
|
|
489
489
|
mapErrorToStatus(result.error),
|
|
490
490
|
);
|
|
491
491
|
return c.json({ data: result.value });
|
|
@@ -499,7 +499,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
499
499
|
);
|
|
500
500
|
if (!result.ok)
|
|
501
501
|
return c.json(
|
|
502
|
-
|
|
502
|
+
errorBody(result.error),
|
|
503
503
|
mapErrorToStatus(result.error),
|
|
504
504
|
);
|
|
505
505
|
return c.json({ data: result.value }, 201);
|
|
@@ -514,7 +514,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
514
514
|
);
|
|
515
515
|
if (!result.ok)
|
|
516
516
|
return c.json(
|
|
517
|
-
|
|
517
|
+
errorBody(result.error),
|
|
518
518
|
mapErrorToStatus(result.error),
|
|
519
519
|
);
|
|
520
520
|
return c.json({ data: result.value });
|
|
@@ -528,7 +528,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
528
528
|
);
|
|
529
529
|
if (!result.ok)
|
|
530
530
|
return c.json(
|
|
531
|
-
|
|
531
|
+
errorBody(result.error),
|
|
532
532
|
mapErrorToStatus(result.error),
|
|
533
533
|
);
|
|
534
534
|
return c.json({ data: { deleted: true } });
|
|
@@ -543,7 +543,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
543
543
|
);
|
|
544
544
|
if (!result.ok)
|
|
545
545
|
return c.json(
|
|
546
|
-
|
|
546
|
+
errorBody(result.error),
|
|
547
547
|
mapErrorToStatus(result.error),
|
|
548
548
|
);
|
|
549
549
|
return c.json({ data: { linked: true } });
|
|
@@ -558,7 +558,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
558
558
|
);
|
|
559
559
|
if (!result.ok)
|
|
560
560
|
return c.json(
|
|
561
|
-
|
|
561
|
+
errorBody(result.error),
|
|
562
562
|
mapErrorToStatus(result.error),
|
|
563
563
|
);
|
|
564
564
|
return c.json({ data: { unlinked: true } });
|
|
@@ -572,7 +572,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
572
572
|
);
|
|
573
573
|
if (!result.ok)
|
|
574
574
|
return c.json(
|
|
575
|
-
|
|
575
|
+
errorBody(result.error),
|
|
576
576
|
mapErrorToStatus(result.error),
|
|
577
577
|
);
|
|
578
578
|
return c.json({ data: result.value }, 201);
|
|
@@ -586,7 +586,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
586
586
|
);
|
|
587
587
|
if (!result.ok)
|
|
588
588
|
return c.json(
|
|
589
|
-
|
|
589
|
+
errorBody(result.error),
|
|
590
590
|
mapErrorToStatus(result.error),
|
|
591
591
|
);
|
|
592
592
|
return c.json({ data: result.value }, 201);
|
|
@@ -600,7 +600,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
600
600
|
);
|
|
601
601
|
if (!result.ok)
|
|
602
602
|
return c.json(
|
|
603
|
-
|
|
603
|
+
errorBody(result.error),
|
|
604
604
|
mapErrorToStatus(result.error),
|
|
605
605
|
);
|
|
606
606
|
return c.json({ data: result.value }, 201);
|
|
@@ -616,7 +616,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
616
616
|
);
|
|
617
617
|
if (!result.ok)
|
|
618
618
|
return c.json(
|
|
619
|
-
|
|
619
|
+
errorBody(result.error),
|
|
620
620
|
mapErrorToStatus(result.error),
|
|
621
621
|
);
|
|
622
622
|
return c.json({ data: result.value }, result.value.created ? 201 : 200);
|
|
@@ -632,7 +632,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
632
632
|
);
|
|
633
633
|
if (!result.ok)
|
|
634
634
|
return c.json(
|
|
635
|
-
|
|
635
|
+
errorBody(result.error),
|
|
636
636
|
mapErrorToStatus(result.error),
|
|
637
637
|
);
|
|
638
638
|
return c.json({ data: result.value }, 201);
|
|
@@ -648,7 +648,7 @@ export function catalogRoutes(kernel: Kernel) {
|
|
|
648
648
|
);
|
|
649
649
|
if (!result.ok)
|
|
650
650
|
return c.json(
|
|
651
|
-
|
|
651
|
+
errorBody(result.error),
|
|
652
652
|
mapErrorToStatus(result.error),
|
|
653
653
|
);
|
|
654
654
|
return c.json({ data: result.value }, 201);
|
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
calculateTax,
|
|
9
9
|
checkInventoryAvailability,
|
|
10
10
|
completeCheckout,
|
|
11
|
-
recordAnalyticsEvent,
|
|
12
11
|
resolveCurrentPrices,
|
|
13
12
|
validateCartNotEmpty,
|
|
14
13
|
validatePaymentMethod,
|
|
@@ -19,11 +18,11 @@ import { runAfterHooks, runBeforeHooks } from "../../../kernel/hooks/executor.js
|
|
|
19
18
|
import { createHookContext } from "../../../kernel/hooks/create-context.js";
|
|
20
19
|
import type { AfterHook, BeforeHook, ServiceContainer } from "../../../kernel/hooks/types.js";
|
|
21
20
|
import type { PluginDb } from "../../../kernel/database/plugin-types.js";
|
|
22
|
-
import { type AppEnv,
|
|
21
|
+
import { type AppEnv, errorBody, mapErrorToStatus } from "../utils.js";
|
|
23
22
|
import { isCommerceError } from "../../../kernel/errors.js";
|
|
24
23
|
import { assertPermission } from "../../../auth/permissions.js";
|
|
25
24
|
import { resolveOrgIdForCommerce } from "../../../auth/org.js";
|
|
26
|
-
import { makeDeterministicId,
|
|
25
|
+
import { makeDeterministicId, makeIdempotencyScope } from "../../../utils/id.js";
|
|
27
26
|
import type { ShippingAddress } from "../../../modules/shipping/calculator.js";
|
|
28
27
|
import type { Actor } from "../../../auth/types.js";
|
|
29
28
|
|
|
@@ -85,7 +84,7 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
85
84
|
const body = c.req.valid("json");
|
|
86
85
|
|
|
87
86
|
const actor = c.get("actor");
|
|
88
|
-
const cartSecret = c.req.header("x-cart-secret") ??
|
|
87
|
+
const cartSecret = c.req.header("x-cart-secret") ?? undefined;
|
|
89
88
|
|
|
90
89
|
// Idempotent replay is authorized by the order service before payment runs.
|
|
91
90
|
// This preflight only preserves the no-double-payment fast path; the create
|
|
@@ -99,7 +98,7 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
99
98
|
cartSecret,
|
|
100
99
|
);
|
|
101
100
|
if (!replay.ok) {
|
|
102
|
-
return c.json(
|
|
101
|
+
return c.json(errorBody(replay.error), mapErrorToStatus(replay.error));
|
|
103
102
|
}
|
|
104
103
|
if (replay.value) return c.json({ data: replay.value }, 201);
|
|
105
104
|
}
|
|
@@ -116,7 +115,7 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
116
115
|
);
|
|
117
116
|
if (!cartAccess.ok) {
|
|
118
117
|
return c.json(
|
|
119
|
-
|
|
118
|
+
errorBody(cartAccess.error),
|
|
120
119
|
mapErrorToStatus(cartAccess.error),
|
|
121
120
|
);
|
|
122
121
|
}
|
|
@@ -127,9 +126,9 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
127
126
|
? await makeDeterministicId(
|
|
128
127
|
`checkout:${resolveOrgIdForCommerce(actor, kernel.config)}:${idempotencyScope}:${body.idempotencyKey}`,
|
|
129
128
|
)
|
|
130
|
-
:
|
|
129
|
+
: crypto.randomUUID();
|
|
131
130
|
const checkoutData: CheckoutData = {
|
|
132
|
-
checkoutId:
|
|
131
|
+
checkoutId: crypto.randomUUID(),
|
|
133
132
|
orderId,
|
|
134
133
|
cartId: body.cartId,
|
|
135
134
|
currency: body.currency ?? "USD",
|
|
@@ -192,7 +191,6 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
192
191
|
|
|
193
192
|
const afterHooks: AfterHook<OrderResult>[] = [
|
|
194
193
|
completeCheckout,
|
|
195
|
-
recordAnalyticsEvent,
|
|
196
194
|
...(kernel.hooks.resolve("checkout.afterCreate") as AfterHook<OrderResult>[]),
|
|
197
195
|
];
|
|
198
196
|
|
|
@@ -299,7 +297,7 @@ export function checkoutRoutes(kernel: Kernel) {
|
|
|
299
297
|
|
|
300
298
|
if (!order.ok) {
|
|
301
299
|
return c.json(
|
|
302
|
-
|
|
300
|
+
errorBody(order.error),
|
|
303
301
|
mapErrorToStatus(order.error),
|
|
304
302
|
);
|
|
305
303
|
}
|
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
updateInteractionRoute,
|
|
13
13
|
deleteInteractionRoute,
|
|
14
14
|
} from "../schemas/customers.js";
|
|
15
|
-
import { type AppEnv,
|
|
15
|
+
import { type AppEnv, errorBody, mapErrorToStatus, parsePagination, parseInclude, requirePerm } from "../utils.js";
|
|
16
16
|
|
|
17
17
|
export function customerRoutes(kernel: Kernel) {
|
|
18
18
|
const router = new OpenAPIHono<AppEnv>();
|
|
@@ -27,7 +27,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
27
27
|
const { page, limit } = parsePagination(c.req.query());
|
|
28
28
|
|
|
29
29
|
const result = await kernel.services.customers.list(actor);
|
|
30
|
-
if (!result.ok) return c.json(
|
|
30
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
31
31
|
|
|
32
32
|
const all = result.value;
|
|
33
33
|
const total = all.length;
|
|
@@ -46,7 +46,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
46
46
|
router.openapi(createCustomerRoute, async (c) => {
|
|
47
47
|
const body = c.req.valid("json");
|
|
48
48
|
const result = await kernel.services.customers.createWalkIn(body, c.get("actor"));
|
|
49
|
-
if (!result.ok) return c.json(
|
|
49
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
50
50
|
return c.json({ data: result.value }, 201);
|
|
51
51
|
});
|
|
52
52
|
|
|
@@ -55,7 +55,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
55
55
|
const { id } = c.req.valid("param");
|
|
56
56
|
const actor = c.get("actor");
|
|
57
57
|
const result = await kernel.services.customers.getById(id, actor);
|
|
58
|
-
if (!result.ok) return c.json(
|
|
58
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
59
59
|
return c.json({ data: result.value });
|
|
60
60
|
});
|
|
61
61
|
|
|
@@ -75,7 +75,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
75
75
|
const result = await kernel.services.customers.update(id, updates, actor, undefined, {
|
|
76
76
|
replaceMetadata,
|
|
77
77
|
});
|
|
78
|
-
if (!result.ok) return c.json(
|
|
78
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
79
79
|
return c.json({ data: result.value });
|
|
80
80
|
});
|
|
81
81
|
|
|
@@ -92,7 +92,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
92
92
|
{ page, limit, ...(status ? { status } : {}), ...(includeTotals ? { includeTotals: true } : {}) },
|
|
93
93
|
actor,
|
|
94
94
|
);
|
|
95
|
-
if (!result.ok) return c.json(
|
|
95
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
96
96
|
if (includeTotals) {
|
|
97
97
|
// Wrapped shape: { data: { items, totals } } (+ pagination meta).
|
|
98
98
|
return c.json({
|
|
@@ -111,13 +111,13 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
111
111
|
|
|
112
112
|
// Get customer first, then use their userId for address lookup
|
|
113
113
|
const customerResult = await kernel.services.customers.getById(id, actor);
|
|
114
|
-
if (!customerResult.ok) return c.json(
|
|
114
|
+
if (!customerResult.ok) return c.json(errorBody(customerResult.error), mapErrorToStatus(customerResult.error));
|
|
115
115
|
|
|
116
116
|
const addressResult = await kernel.services.customers.getAddresses(
|
|
117
117
|
customerResult.value.userId,
|
|
118
118
|
actor,
|
|
119
119
|
);
|
|
120
|
-
if (!addressResult.ok) return c.json(
|
|
120
|
+
if (!addressResult.ok) return c.json(errorBody(addressResult.error), mapErrorToStatus(addressResult.error));
|
|
121
121
|
return c.json({ data: addressResult.value });
|
|
122
122
|
});
|
|
123
123
|
|
|
@@ -127,7 +127,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
127
127
|
router.openapi(listInteractionsRoute, async (c) => {
|
|
128
128
|
const { id } = c.req.valid("param");
|
|
129
129
|
const result = await kernel.services.customers.listInteractions(id, c.get("actor"));
|
|
130
|
-
if (!result.ok) return c.json(
|
|
130
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
131
131
|
return c.json({ data: result.value });
|
|
132
132
|
});
|
|
133
133
|
|
|
@@ -136,7 +136,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
136
136
|
const { id } = c.req.valid("param");
|
|
137
137
|
const body = c.req.valid("json");
|
|
138
138
|
const result = await kernel.services.customers.createInteraction(id, body, c.get("actor"));
|
|
139
|
-
if (!result.ok) return c.json(
|
|
139
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
140
140
|
return c.json({ data: result.value }, 201);
|
|
141
141
|
});
|
|
142
142
|
|
|
@@ -145,7 +145,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
145
145
|
const { id, iid } = c.req.valid("param");
|
|
146
146
|
const body = c.req.valid("json");
|
|
147
147
|
const result = await kernel.services.customers.updateInteraction(id, iid, body, c.get("actor"));
|
|
148
|
-
if (!result.ok) return c.json(
|
|
148
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
149
149
|
return c.json({ data: result.value });
|
|
150
150
|
});
|
|
151
151
|
|
|
@@ -153,7 +153,7 @@ export function customerRoutes(kernel: Kernel) {
|
|
|
153
153
|
router.openapi(deleteInteractionRoute, async (c) => {
|
|
154
154
|
const { id, iid } = c.req.valid("param");
|
|
155
155
|
const result = await kernel.services.customers.deleteInteraction(id, iid, c.get("actor"));
|
|
156
|
-
if (!result.ok) return c.json(
|
|
156
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
157
157
|
return c.json({ data: { deleted: true } });
|
|
158
158
|
});
|
|
159
159
|
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
invoicePdfRoute,
|
|
7
7
|
receiptHtmlRoute,
|
|
8
8
|
} from "../schemas/documents.js";
|
|
9
|
-
import { type AppEnv,
|
|
9
|
+
import { type AppEnv, errorBody, mapErrorToStatus, requireAnyPerm } from "../utils.js";
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Order document rendering (issue #47). Mounted under /orders. Access
|
|
@@ -19,14 +19,14 @@ export function documentRoutes(kernel: Kernel) {
|
|
|
19
19
|
router.use("/*", requireAnyPerm(["orders:read", "orders:read:own"]));
|
|
20
20
|
|
|
21
21
|
router.openapi(invoicePdfRoute, async (c) => {
|
|
22
|
-
const guestCredential = c.req.header("x-cart-secret") ??
|
|
22
|
+
const guestCredential = c.req.header("x-cart-secret") ?? undefined;
|
|
23
23
|
const result = await kernel.services.documents.renderInvoicePdf(
|
|
24
24
|
c.req.param("id"),
|
|
25
25
|
c.get("actor"),
|
|
26
26
|
undefined,
|
|
27
27
|
guestCredential,
|
|
28
28
|
);
|
|
29
|
-
if (!result.ok) return c.json(
|
|
29
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
30
30
|
return c.body(result.value.pdf.slice().buffer as ArrayBuffer, 200, {
|
|
31
31
|
"content-type": "application/pdf",
|
|
32
32
|
"content-disposition": `inline; filename="invoice-${result.value.invoiceNumber}.pdf"`,
|
|
@@ -34,32 +34,32 @@ export function documentRoutes(kernel: Kernel) {
|
|
|
34
34
|
});
|
|
35
35
|
|
|
36
36
|
router.openapi(invoiceHtmlRoute, async (c) => {
|
|
37
|
-
const guestCredential = c.req.header("x-cart-secret") ??
|
|
37
|
+
const guestCredential = c.req.header("x-cart-secret") ?? undefined;
|
|
38
38
|
const result = await kernel.services.documents.renderInvoiceHtml(
|
|
39
39
|
c.req.param("id"),
|
|
40
40
|
c.get("actor"),
|
|
41
41
|
undefined,
|
|
42
42
|
guestCredential,
|
|
43
43
|
);
|
|
44
|
-
if (!result.ok) return c.json(
|
|
44
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
45
45
|
return c.html(result.value.html);
|
|
46
46
|
});
|
|
47
47
|
|
|
48
48
|
router.openapi(receiptHtmlRoute, async (c) => {
|
|
49
|
-
const guestCredential = c.req.header("x-cart-secret") ??
|
|
49
|
+
const guestCredential = c.req.header("x-cart-secret") ?? undefined;
|
|
50
50
|
const result = await kernel.services.documents.renderReceiptHtml(
|
|
51
51
|
c.req.param("id"),
|
|
52
52
|
c.get("actor"),
|
|
53
53
|
undefined,
|
|
54
54
|
guestCredential,
|
|
55
55
|
);
|
|
56
|
-
if (!result.ok) return c.json(
|
|
56
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
57
57
|
return c.html(result.value.html);
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
// @ts-expect-error -- openapi handler union return type
|
|
61
61
|
router.openapi(emailInvoiceRoute, async (c) => {
|
|
62
|
-
const guestCredential = c.req.header("x-cart-secret") ??
|
|
62
|
+
const guestCredential = c.req.header("x-cart-secret") ?? undefined;
|
|
63
63
|
const result = await kernel.services.documents.emailInvoice(
|
|
64
64
|
c.req.param("id"),
|
|
65
65
|
c.req.valid("json").to,
|
|
@@ -67,7 +67,7 @@ export function documentRoutes(kernel: Kernel) {
|
|
|
67
67
|
undefined,
|
|
68
68
|
guestCredential,
|
|
69
69
|
);
|
|
70
|
-
if (!result.ok) return c.json(
|
|
70
|
+
if (!result.ok) return c.json(errorBody(result.error), mapErrorToStatus(result.error));
|
|
71
71
|
return c.json({ data: result.value });
|
|
72
72
|
});
|
|
73
73
|
|