@unifiedcommerce/core 0.4.4 → 0.5.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/adapters/console-email.d.ts +23 -0
- package/dist/adapters/console-email.d.ts.map +1 -0
- package/dist/adapters/console-email.js +38 -0
- package/dist/auth/access.d.ts +101 -0
- package/dist/auth/access.d.ts.map +1 -0
- package/dist/auth/access.js +128 -0
- package/dist/auth/auth-schema.d.ts +1475 -0
- package/dist/auth/auth-schema.d.ts.map +1 -0
- package/dist/auth/auth-schema.js +124 -0
- package/dist/auth/middleware.d.ts +5 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +141 -0
- package/dist/auth/org.d.ts +22 -0
- package/dist/auth/org.d.ts.map +1 -0
- package/dist/auth/org.js +36 -0
- package/dist/auth/permissions.d.ts +4 -0
- package/dist/auth/permissions.d.ts.map +1 -0
- package/dist/auth/permissions.js +24 -0
- package/dist/auth/setup.d.ts +29 -0
- package/dist/auth/setup.d.ts.map +1 -0
- package/dist/auth/setup.js +144 -0
- package/dist/auth/system-actor.d.ts +7 -0
- package/dist/auth/system-actor.d.ts.map +1 -0
- package/dist/auth/system-actor.js +17 -0
- package/dist/auth/types.d.ts +11 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +1 -0
- package/dist/config/defaults.d.ts +3 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +80 -0
- package/dist/config/define-config.d.ts +9 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +44 -0
- package/dist/config/types.d.ts +327 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +1 -0
- package/dist/generated/plugin-manifest.d.ts +48 -0
- package/dist/generated/plugin-manifest.d.ts.map +1 -0
- package/dist/generated/plugin-manifest.js +20 -0
- package/dist/hooks/checkout-completion.d.ts +58 -0
- package/dist/hooks/checkout-completion.d.ts.map +1 -0
- package/dist/hooks/checkout-completion.js +137 -0
- package/dist/hooks/checkout.d.ts +99 -0
- package/dist/hooks/checkout.d.ts.map +1 -0
- package/dist/hooks/checkout.js +317 -0
- package/dist/hooks/order-emails.d.ts +16 -0
- package/dist/hooks/order-emails.d.ts.map +1 -0
- package/dist/hooks/order-emails.js +44 -0
- package/dist/index.d.ts +77 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/interfaces/mcp/agent-prompt.d.ts +16 -0
- package/dist/interfaces/mcp/agent-prompt.d.ts.map +1 -0
- package/dist/interfaces/mcp/agent-prompt.js +172 -0
- package/dist/interfaces/mcp/context-enrichment.d.ts +39 -0
- package/dist/interfaces/mcp/context-enrichment.d.ts.map +1 -0
- package/dist/interfaces/mcp/context-enrichment.js +119 -0
- package/dist/interfaces/mcp/server.d.ts +5 -0
- package/dist/interfaces/mcp/server.d.ts.map +1 -0
- package/dist/interfaces/mcp/server.js +30 -0
- package/dist/interfaces/mcp/tool-builder.d.ts +120 -0
- package/dist/interfaces/mcp/tool-builder.d.ts.map +1 -0
- package/dist/interfaces/mcp/tool-builder.js +224 -0
- package/dist/interfaces/mcp/tools/analytics.d.ts +42 -0
- package/dist/interfaces/mcp/tools/analytics.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/analytics.js +70 -0
- package/dist/interfaces/mcp/tools/cart.d.ts +14 -0
- package/dist/interfaces/mcp/tools/cart.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/cart.js +47 -0
- package/dist/interfaces/mcp/tools/catalog.d.ts +53 -0
- package/dist/interfaces/mcp/tools/catalog.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/catalog.js +284 -0
- package/dist/interfaces/mcp/tools/index.d.ts +3 -0
- package/dist/interfaces/mcp/tools/index.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/index.js +20 -0
- package/dist/interfaces/mcp/tools/inventory.d.ts +27 -0
- package/dist/interfaces/mcp/tools/inventory.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/inventory.js +143 -0
- package/dist/interfaces/mcp/tools/orders.d.ts +18 -0
- package/dist/interfaces/mcp/tools/orders.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/orders.js +82 -0
- package/dist/interfaces/mcp/tools/pricing.d.ts +29 -0
- package/dist/interfaces/mcp/tools/pricing.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/pricing.js +90 -0
- package/dist/interfaces/mcp/tools/promotions.d.ts +44 -0
- package/dist/interfaces/mcp/tools/promotions.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/promotions.js +109 -0
- package/dist/interfaces/mcp/tools/registry.d.ts +32 -0
- package/dist/interfaces/mcp/tools/registry.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/registry.js +55 -0
- package/dist/interfaces/mcp/tools/search.d.ts +14 -0
- package/dist/interfaces/mcp/tools/search.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/search.js +39 -0
- package/dist/interfaces/mcp/tools/webhooks.d.ts +15 -0
- package/dist/interfaces/mcp/tools/webhooks.d.ts.map +1 -0
- package/dist/interfaces/mcp/tools/webhooks.js +48 -0
- package/dist/interfaces/mcp/transport.d.ts +20 -0
- package/dist/interfaces/mcp/transport.d.ts.map +1 -0
- package/dist/interfaces/mcp/transport.js +99 -0
- package/dist/interfaces/rest/customer-portal.d.ts +5 -0
- package/dist/interfaces/rest/customer-portal.d.ts.map +1 -0
- package/dist/interfaces/rest/customer-portal.js +206 -0
- package/dist/interfaces/rest/router.d.ts +164 -0
- package/dist/interfaces/rest/router.d.ts.map +1 -0
- package/dist/interfaces/rest/router.js +259 -0
- package/dist/interfaces/rest/routes/admin-jobs.d.ts +5 -0
- package/dist/interfaces/rest/routes/admin-jobs.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/admin-jobs.js +48 -0
- package/dist/interfaces/rest/routes/audit.d.ts +5 -0
- package/dist/interfaces/rest/routes/audit.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/audit.js +43 -0
- package/dist/interfaces/rest/routes/carts.d.ts +5 -0
- package/dist/interfaces/rest/routes/carts.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/carts.js +55 -0
- package/dist/interfaces/rest/routes/catalog.d.ts +5 -0
- package/dist/interfaces/rest/routes/catalog.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/catalog.js +256 -0
- package/dist/interfaces/rest/routes/checkout.d.ts +5 -0
- package/dist/interfaces/rest/routes/checkout.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/checkout.js +216 -0
- package/dist/interfaces/rest/routes/customers.d.ts +5 -0
- package/dist/interfaces/rest/routes/customers.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/customers.js +78 -0
- package/dist/interfaces/rest/routes/entity-aliases.d.ts +18 -0
- package/dist/interfaces/rest/routes/entity-aliases.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/entity-aliases.js +39 -0
- package/dist/interfaces/rest/routes/inventory.d.ts +5 -0
- package/dist/interfaces/rest/routes/inventory.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/inventory.js +74 -0
- package/dist/interfaces/rest/routes/media.d.ts +5 -0
- package/dist/interfaces/rest/routes/media.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/media.js +65 -0
- package/dist/interfaces/rest/routes/orders.d.ts +5 -0
- package/dist/interfaces/rest/routes/orders.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/orders.js +64 -0
- package/dist/interfaces/rest/routes/payments.d.ts +5 -0
- package/dist/interfaces/rest/routes/payments.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/payments.js +45 -0
- package/dist/interfaces/rest/routes/pricing.d.ts +5 -0
- package/dist/interfaces/rest/routes/pricing.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/pricing.js +48 -0
- package/dist/interfaces/rest/routes/promotions.d.ts +5 -0
- package/dist/interfaces/rest/routes/promotions.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/promotions.js +76 -0
- package/dist/interfaces/rest/routes/search.d.ts +5 -0
- package/dist/interfaces/rest/routes/search.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/search.js +60 -0
- package/dist/interfaces/rest/routes/webhooks.d.ts +5 -0
- package/dist/interfaces/rest/routes/webhooks.d.ts.map +1 -0
- package/dist/interfaces/rest/routes/webhooks.js +39 -0
- package/dist/interfaces/rest/schemas/admin-jobs.d.ts +327 -0
- package/dist/interfaces/rest/schemas/admin-jobs.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/admin-jobs.js +37 -0
- package/dist/interfaces/rest/schemas/audit.d.ts +59 -0
- package/dist/interfaces/rest/schemas/audit.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/audit.js +43 -0
- package/dist/interfaces/rest/schemas/carts.d.ts +1456 -0
- package/dist/interfaces/rest/schemas/carts.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/carts.js +109 -0
- package/dist/interfaces/rest/schemas/catalog.d.ts +5452 -0
- package/dist/interfaces/rest/schemas/catalog.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/catalog.js +397 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts +160 -0
- package/dist/interfaces/rest/schemas/checkout.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/checkout.js +60 -0
- package/dist/interfaces/rest/schemas/customer-portal.d.ts +2203 -0
- package/dist/interfaces/rest/schemas/customer-portal.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/customer-portal.js +177 -0
- package/dist/interfaces/rest/schemas/customers.d.ts +422 -0
- package/dist/interfaces/rest/schemas/customers.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/customers.js +150 -0
- package/dist/interfaces/rest/schemas/inventory.d.ts +561 -0
- package/dist/interfaces/rest/schemas/inventory.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/inventory.js +148 -0
- package/dist/interfaces/rest/schemas/media.d.ts +303 -0
- package/dist/interfaces/rest/schemas/media.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/media.js +69 -0
- package/dist/interfaces/rest/schemas/orders.d.ts +1792 -0
- package/dist/interfaces/rest/schemas/orders.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/orders.js +93 -0
- package/dist/interfaces/rest/schemas/pricing.d.ts +256 -0
- package/dist/interfaces/rest/schemas/pricing.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/pricing.js +72 -0
- package/dist/interfaces/rest/schemas/promotions.d.ts +374 -0
- package/dist/interfaces/rest/schemas/promotions.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/promotions.js +104 -0
- package/dist/interfaces/rest/schemas/responses.d.ts +4086 -0
- package/dist/interfaces/rest/schemas/responses.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/responses.js +74 -0
- package/dist/interfaces/rest/schemas/search.d.ts +247 -0
- package/dist/interfaces/rest/schemas/search.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/search.js +55 -0
- package/dist/interfaces/rest/schemas/shared.d.ts +95 -0
- package/dist/interfaces/rest/schemas/shared.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/shared.js +51 -0
- package/dist/interfaces/rest/schemas/webhooks.d.ts +221 -0
- package/dist/interfaces/rest/schemas/webhooks.d.ts.map +1 -0
- package/dist/interfaces/rest/schemas/webhooks.js +62 -0
- package/dist/interfaces/rest/utils.d.ts +45 -0
- package/dist/interfaces/rest/utils.d.ts.map +1 -0
- package/dist/interfaces/rest/utils.js +71 -0
- package/dist/interfaces/rest/webhook-router.d.ts +41 -0
- package/dist/interfaces/rest/webhook-router.d.ts.map +1 -0
- package/dist/interfaces/rest/webhook-router.js +36 -0
- package/dist/kernel/compensation/executor.d.ts +21 -0
- package/dist/kernel/compensation/executor.d.ts.map +1 -0
- package/dist/kernel/compensation/executor.js +36 -0
- package/dist/kernel/compensation/types.d.ts +25 -0
- package/dist/kernel/compensation/types.d.ts.map +1 -0
- package/dist/kernel/compensation/types.js +1 -0
- package/dist/kernel/database/adapter.d.ts +18 -0
- package/dist/kernel/database/adapter.d.ts.map +1 -0
- package/dist/kernel/database/adapter.js +3 -0
- package/dist/kernel/database/drizzle-db.d.ts +49 -0
- package/dist/kernel/database/drizzle-db.d.ts.map +1 -0
- package/dist/kernel/database/drizzle-db.js +20 -0
- package/dist/kernel/database/migrate.d.ts +38 -0
- package/dist/kernel/database/migrate.d.ts.map +1 -0
- package/dist/kernel/database/migrate.js +61 -0
- package/dist/kernel/database/plugin-types.d.ts +32 -0
- package/dist/kernel/database/plugin-types.d.ts.map +1 -0
- package/dist/kernel/database/plugin-types.js +10 -0
- package/dist/kernel/database/schema.d.ts +24 -0
- package/dist/kernel/database/schema.d.ts.map +1 -0
- package/dist/kernel/database/schema.js +36 -0
- package/dist/kernel/database/scoped-db.d.ts +20 -0
- package/dist/kernel/database/scoped-db.d.ts.map +1 -0
- package/dist/kernel/database/scoped-db.js +62 -0
- package/dist/kernel/database/tx-context.d.ts +15 -0
- package/dist/kernel/database/tx-context.d.ts.map +1 -0
- package/dist/kernel/database/tx-context.js +19 -0
- package/dist/kernel/error-mapper.d.ts +3 -0
- package/dist/kernel/error-mapper.d.ts.map +1 -0
- package/dist/kernel/error-mapper.js +12 -0
- package/dist/kernel/errors.d.ts +38 -0
- package/dist/kernel/errors.d.ts.map +1 -0
- package/dist/kernel/errors.js +69 -0
- package/dist/kernel/factory/repository-factory.d.ts +71 -0
- package/dist/kernel/factory/repository-factory.d.ts.map +1 -0
- package/dist/kernel/factory/repository-factory.js +138 -0
- package/dist/kernel/hooks/create-context.d.ts +25 -0
- package/dist/kernel/hooks/create-context.d.ts.map +1 -0
- package/dist/kernel/hooks/create-context.js +22 -0
- package/dist/kernel/hooks/executor.d.ts +12 -0
- package/dist/kernel/hooks/executor.d.ts.map +1 -0
- package/dist/kernel/hooks/executor.js +50 -0
- package/dist/kernel/hooks/registry.d.ts +28 -0
- package/dist/kernel/hooks/registry.d.ts.map +1 -0
- package/dist/kernel/hooks/registry.js +58 -0
- package/dist/kernel/hooks/types.d.ts +37 -0
- package/dist/kernel/hooks/types.d.ts.map +1 -0
- package/dist/kernel/hooks/types.js +1 -0
- package/dist/kernel/http-error.d.ts +30 -0
- package/dist/kernel/http-error.d.ts.map +1 -0
- package/dist/kernel/http-error.js +35 -0
- package/dist/kernel/jobs/adapter.d.ts +25 -0
- package/dist/kernel/jobs/adapter.d.ts.map +1 -0
- package/dist/kernel/jobs/adapter.js +9 -0
- package/dist/kernel/jobs/drizzle-adapter.d.ts +15 -0
- package/dist/kernel/jobs/drizzle-adapter.d.ts.map +1 -0
- package/dist/kernel/jobs/drizzle-adapter.js +42 -0
- package/dist/kernel/jobs/runner.d.ts +24 -0
- package/dist/kernel/jobs/runner.d.ts.map +1 -0
- package/dist/kernel/jobs/runner.js +114 -0
- package/dist/kernel/jobs/schema.d.ts +280 -0
- package/dist/kernel/jobs/schema.d.ts.map +1 -0
- package/dist/kernel/jobs/schema.js +37 -0
- package/dist/kernel/jobs/types.d.ts +30 -0
- package/dist/kernel/jobs/types.d.ts.map +1 -0
- package/dist/kernel/jobs/types.js +1 -0
- package/dist/kernel/local-api.d.ts +103 -0
- package/dist/kernel/local-api.d.ts.map +1 -0
- package/dist/kernel/local-api.js +89 -0
- package/dist/kernel/plugin/manifest.d.ts +90 -0
- package/dist/kernel/plugin/manifest.d.ts.map +1 -0
- package/dist/kernel/plugin/manifest.js +169 -0
- package/dist/kernel/query/executor.d.ts +21 -0
- package/dist/kernel/query/executor.d.ts.map +1 -0
- package/dist/kernel/query/executor.js +128 -0
- package/dist/kernel/query/registry.d.ts +33 -0
- package/dist/kernel/query/registry.d.ts.map +1 -0
- package/dist/kernel/query/registry.js +20 -0
- package/dist/kernel/result.d.ts +36 -0
- package/dist/kernel/result.d.ts.map +1 -0
- package/dist/kernel/result.js +16 -0
- package/dist/kernel/schema/extra-columns.d.ts +23 -0
- package/dist/kernel/schema/extra-columns.d.ts.map +1 -0
- package/dist/kernel/schema/extra-columns.js +10 -0
- package/dist/kernel/service-registry.d.ts +109 -0
- package/dist/kernel/service-registry.d.ts.map +1 -0
- package/dist/kernel/service-registry.js +26 -0
- package/dist/kernel/service-timing.d.ts +25 -0
- package/dist/kernel/service-timing.d.ts.map +1 -0
- package/dist/kernel/service-timing.js +62 -0
- package/dist/kernel/state-machine/machine.d.ts +24 -0
- package/dist/kernel/state-machine/machine.d.ts.map +1 -0
- package/dist/kernel/state-machine/machine.js +70 -0
- package/dist/modules/analytics/drizzle-adapter.d.ts +13 -0
- package/dist/modules/analytics/drizzle-adapter.d.ts.map +1 -0
- package/dist/modules/analytics/drizzle-adapter.js +358 -0
- package/dist/modules/analytics/hooks.d.ts +13 -0
- package/dist/modules/analytics/hooks.d.ts.map +1 -0
- package/dist/modules/analytics/hooks.js +12 -0
- package/dist/modules/analytics/models.d.ts +14 -0
- package/dist/modules/analytics/models.d.ts.map +1 -0
- package/dist/modules/analytics/models.js +118 -0
- package/dist/modules/analytics/repository/index.d.ts +5 -0
- package/dist/modules/analytics/repository/index.d.ts.map +1 -0
- package/dist/modules/analytics/repository/index.js +1 -0
- package/dist/modules/analytics/service.d.ts +45 -0
- package/dist/modules/analytics/service.d.ts.map +1 -0
- package/dist/modules/analytics/service.js +196 -0
- package/dist/modules/analytics/types.d.ts +119 -0
- package/dist/modules/analytics/types.d.ts.map +1 -0
- package/dist/modules/analytics/types.js +25 -0
- package/dist/modules/audit/hooks.d.ts +7 -0
- package/dist/modules/audit/hooks.d.ts.map +1 -0
- package/dist/modules/audit/hooks.js +67 -0
- package/dist/modules/audit/schema.d.ts +178 -0
- package/dist/modules/audit/schema.d.ts.map +1 -0
- package/dist/modules/audit/schema.js +21 -0
- package/dist/modules/audit/service.d.ts +38 -0
- package/dist/modules/audit/service.d.ts.map +1 -0
- package/dist/modules/audit/service.js +109 -0
- package/dist/modules/cart/access.d.ts +11 -0
- package/dist/modules/cart/access.d.ts.map +1 -0
- package/dist/modules/cart/access.js +18 -0
- package/dist/modules/cart/matcher.d.ts +20 -0
- package/dist/modules/cart/matcher.d.ts.map +1 -0
- package/dist/modules/cart/matcher.js +2 -0
- package/dist/modules/cart/repository/index.d.ts +45 -0
- package/dist/modules/cart/repository/index.d.ts.map +1 -0
- package/dist/modules/cart/repository/index.js +158 -0
- package/dist/modules/cart/schema.d.ts +359 -0
- package/dist/modules/cart/schema.d.ts.map +1 -0
- package/dist/modules/cart/schema.js +40 -0
- package/dist/modules/cart/schemas.d.ts +29 -0
- package/dist/modules/cart/schemas.d.ts.map +1 -0
- package/dist/modules/cart/schemas.js +14 -0
- package/dist/modules/cart/service.d.ts +63 -0
- package/dist/modules/cart/service.d.ts.map +1 -0
- package/dist/modules/cart/service.js +339 -0
- package/dist/modules/catalog/repository/index.d.ts +106 -0
- package/dist/modules/catalog/repository/index.d.ts.map +1 -0
- package/dist/modules/catalog/repository/index.js +455 -0
- package/dist/modules/catalog/schema.d.ts +1193 -0
- package/dist/modules/catalog/schema.d.ts.map +1 -0
- package/dist/modules/catalog/schema.js +149 -0
- package/dist/modules/catalog/schemas.d.ts +81 -0
- package/dist/modules/catalog/schemas.d.ts.map +1 -0
- package/dist/modules/catalog/schemas.js +62 -0
- package/dist/modules/catalog/service.d.ts +165 -0
- package/dist/modules/catalog/service.d.ts.map +1 -0
- package/dist/modules/catalog/service.js +775 -0
- package/dist/modules/customers/repository/index.d.ts +47 -0
- package/dist/modules/customers/repository/index.d.ts.map +1 -0
- package/dist/modules/customers/repository/index.js +206 -0
- package/dist/modules/customers/schema.d.ts +560 -0
- package/dist/modules/customers/schema.d.ts.map +1 -0
- package/dist/modules/customers/schema.js +60 -0
- package/dist/modules/customers/service.d.ts +27 -0
- package/dist/modules/customers/service.d.ts.map +1 -0
- package/dist/modules/customers/service.js +106 -0
- package/dist/modules/fulfillment/repository/index.d.ts +63 -0
- package/dist/modules/fulfillment/repository/index.d.ts.map +1 -0
- package/dist/modules/fulfillment/repository/index.js +268 -0
- package/dist/modules/fulfillment/schema.d.ts +655 -0
- package/dist/modules/fulfillment/schema.d.ts.map +1 -0
- package/dist/modules/fulfillment/schema.js +83 -0
- package/dist/modules/fulfillment/service.d.ts +58 -0
- package/dist/modules/fulfillment/service.d.ts.map +1 -0
- package/dist/modules/fulfillment/service.js +338 -0
- package/dist/modules/fulfillment/types.d.ts +44 -0
- package/dist/modules/fulfillment/types.d.ts.map +1 -0
- package/dist/modules/fulfillment/types.js +1 -0
- package/dist/modules/inventory/repository/index.d.ts +81 -0
- package/dist/modules/inventory/repository/index.d.ts.map +1 -0
- package/dist/modules/inventory/repository/index.js +310 -0
- package/dist/modules/inventory/schema.d.ts +570 -0
- package/dist/modules/inventory/schema.d.ts.map +1 -0
- package/dist/modules/inventory/schema.js +69 -0
- package/dist/modules/inventory/schemas.d.ts +31 -0
- package/dist/modules/inventory/schemas.d.ts.map +1 -0
- package/dist/modules/inventory/schemas.js +28 -0
- package/dist/modules/inventory/service.d.ts +69 -0
- package/dist/modules/inventory/service.d.ts.map +1 -0
- package/dist/modules/inventory/service.js +283 -0
- package/dist/modules/media/adapter.d.ts +16 -0
- package/dist/modules/media/adapter.d.ts.map +1 -0
- package/dist/modules/media/adapter.js +1 -0
- package/dist/modules/media/repository/index.d.ts +35 -0
- package/dist/modules/media/repository/index.d.ts.map +1 -0
- package/dist/modules/media/repository/index.js +176 -0
- package/dist/modules/media/schema.d.ts +289 -0
- package/dist/modules/media/schema.d.ts.map +1 -0
- package/dist/modules/media/schema.js +35 -0
- package/dist/modules/media/service.d.ts +42 -0
- package/dist/modules/media/service.d.ts.map +1 -0
- package/dist/modules/media/service.js +89 -0
- package/dist/modules/orders/repository/index.d.ts +48 -0
- package/dist/modules/orders/repository/index.d.ts.map +1 -0
- package/dist/modules/orders/repository/index.js +199 -0
- package/dist/modules/orders/schema.d.ts +672 -0
- package/dist/modules/orders/schema.d.ts.map +1 -0
- package/dist/modules/orders/schema.js +63 -0
- package/dist/modules/orders/service.d.ts +85 -0
- package/dist/modules/orders/service.d.ts.map +1 -0
- package/dist/modules/orders/service.js +313 -0
- package/dist/modules/orders/stale-order-cleanup.d.ts +27 -0
- package/dist/modules/orders/stale-order-cleanup.d.ts.map +1 -0
- package/dist/modules/orders/stale-order-cleanup.js +55 -0
- package/dist/modules/organization/service.d.ts +53 -0
- package/dist/modules/organization/service.d.ts.map +1 -0
- package/dist/modules/organization/service.js +151 -0
- package/dist/modules/payments/adapter.d.ts +42 -0
- package/dist/modules/payments/adapter.d.ts.map +1 -0
- package/dist/modules/payments/adapter.js +1 -0
- package/dist/modules/payments/repository/index.d.ts +5 -0
- package/dist/modules/payments/repository/index.d.ts.map +1 -0
- package/dist/modules/payments/repository/index.js +1 -0
- package/dist/modules/payments/service.d.ts +23 -0
- package/dist/modules/payments/service.d.ts.map +1 -0
- package/dist/modules/payments/service.js +72 -0
- package/dist/modules/pricing/repository/index.d.ts +34 -0
- package/dist/modules/pricing/repository/index.d.ts.map +1 -0
- package/dist/modules/pricing/repository/index.js +176 -0
- package/dist/modules/pricing/schema.d.ts +565 -0
- package/dist/modules/pricing/schema.d.ts.map +1 -0
- package/dist/modules/pricing/schema.js +57 -0
- package/dist/modules/pricing/schemas.d.ts +37 -0
- package/dist/modules/pricing/schemas.d.ts.map +1 -0
- package/dist/modules/pricing/schemas.js +30 -0
- package/dist/modules/pricing/service.d.ts +62 -0
- package/dist/modules/pricing/service.d.ts.map +1 -0
- package/dist/modules/pricing/service.js +308 -0
- package/dist/modules/promotions/repository/index.d.ts +41 -0
- package/dist/modules/promotions/repository/index.d.ts.map +1 -0
- package/dist/modules/promotions/repository/index.js +204 -0
- package/dist/modules/promotions/schema.d.ts +427 -0
- package/dist/modules/promotions/schema.d.ts.map +1 -0
- package/dist/modules/promotions/schema.js +52 -0
- package/dist/modules/promotions/schemas.d.ts +33 -0
- package/dist/modules/promotions/schemas.d.ts.map +1 -0
- package/dist/modules/promotions/schemas.js +32 -0
- package/dist/modules/promotions/service.d.ts +85 -0
- package/dist/modules/promotions/service.d.ts.map +1 -0
- package/dist/modules/promotions/service.js +368 -0
- package/dist/modules/search/adapter.d.ts +51 -0
- package/dist/modules/search/adapter.d.ts.map +1 -0
- package/dist/modules/search/adapter.js +1 -0
- package/dist/modules/search/hooks.d.ts +8 -0
- package/dist/modules/search/hooks.d.ts.map +1 -0
- package/dist/modules/search/hooks.js +6 -0
- package/dist/modules/search/repository/index.d.ts +5 -0
- package/dist/modules/search/repository/index.d.ts.map +1 -0
- package/dist/modules/search/repository/index.js +1 -0
- package/dist/modules/search/service.d.ts +24 -0
- package/dist/modules/search/service.d.ts.map +1 -0
- package/dist/modules/search/service.js +217 -0
- package/dist/modules/shipping/calculator.d.ts +42 -0
- package/dist/modules/shipping/calculator.d.ts.map +1 -0
- package/dist/modules/shipping/calculator.js +91 -0
- package/dist/modules/shipping/repository/index.d.ts +5 -0
- package/dist/modules/shipping/repository/index.d.ts.map +1 -0
- package/dist/modules/shipping/repository/index.js +1 -0
- package/dist/modules/shipping/service.d.ts +28 -0
- package/dist/modules/shipping/service.d.ts.map +1 -0
- package/dist/modules/shipping/service.js +20 -0
- package/dist/modules/tax/adapter.d.ts +58 -0
- package/dist/modules/tax/adapter.d.ts.map +1 -0
- package/dist/modules/tax/adapter.js +1 -0
- package/dist/modules/tax/repository/index.d.ts +5 -0
- package/dist/modules/tax/repository/index.d.ts.map +1 -0
- package/dist/modules/tax/repository/index.js +1 -0
- package/dist/modules/tax/service.d.ts +19 -0
- package/dist/modules/tax/service.d.ts.map +1 -0
- package/dist/modules/tax/service.js +34 -0
- package/dist/modules/webhooks/hook.d.ts +13 -0
- package/dist/modules/webhooks/hook.d.ts.map +1 -0
- package/dist/modules/webhooks/hook.js +29 -0
- package/dist/modules/webhooks/repository/index.d.ts +40 -0
- package/dist/modules/webhooks/repository/index.d.ts.map +1 -0
- package/dist/modules/webhooks/repository/index.js +175 -0
- package/dist/modules/webhooks/schema.d.ts +404 -0
- package/dist/modules/webhooks/schema.d.ts.map +1 -0
- package/dist/modules/webhooks/schema.js +40 -0
- package/dist/modules/webhooks/service.d.ts +23 -0
- package/dist/modules/webhooks/service.d.ts.map +1 -0
- package/dist/modules/webhooks/service.js +92 -0
- package/dist/modules/webhooks/signing.d.ts +2 -0
- package/dist/modules/webhooks/signing.d.ts.map +1 -0
- package/dist/modules/webhooks/signing.js +5 -0
- package/dist/modules/webhooks/ssrf-guard.d.ts +19 -0
- package/dist/modules/webhooks/ssrf-guard.d.ts.map +1 -0
- package/dist/modules/webhooks/ssrf-guard.js +79 -0
- package/dist/modules/webhooks/tasks.d.ts +16 -0
- package/dist/modules/webhooks/tasks.d.ts.map +1 -0
- package/dist/modules/webhooks/tasks.js +35 -0
- package/dist/modules/webhooks/worker.d.ts +21 -0
- package/dist/modules/webhooks/worker.d.ts.map +1 -0
- package/dist/modules/webhooks/worker.js +113 -0
- package/dist/runtime/commerce.d.ts +110 -0
- package/dist/runtime/commerce.d.ts.map +1 -0
- package/dist/runtime/commerce.js +37 -0
- package/dist/runtime/kernel.d.ts +71 -0
- package/dist/runtime/kernel.d.ts.map +1 -0
- package/dist/runtime/kernel.js +306 -0
- package/dist/runtime/logger.d.ts +11 -0
- package/dist/runtime/logger.d.ts.map +1 -0
- package/dist/runtime/logger.js +32 -0
- package/dist/runtime/shutdown.d.ts +15 -0
- package/dist/runtime/shutdown.d.ts.map +1 -0
- package/dist/runtime/shutdown.js +34 -0
- package/dist/test-utils/create-pglite-adapter.d.ts +32 -0
- package/dist/test-utils/create-pglite-adapter.d.ts.map +1 -0
- package/dist/test-utils/create-pglite-adapter.js +107 -0
- package/dist/test-utils/create-plugin-test-app.d.ts +50 -0
- package/dist/test-utils/create-plugin-test-app.d.ts.map +1 -0
- package/dist/test-utils/create-plugin-test-app.js +74 -0
- package/dist/test-utils/create-repository-test-harness.d.ts +8 -0
- package/dist/test-utils/create-repository-test-harness.d.ts.map +1 -0
- package/dist/test-utils/create-repository-test-harness.js +7 -0
- package/dist/test-utils/create-test-config.d.ts +18 -0
- package/dist/test-utils/create-test-config.d.ts.map +1 -0
- package/dist/test-utils/create-test-config.js +172 -0
- package/dist/test-utils/create-test-kernel.d.ts +3 -0
- package/dist/test-utils/create-test-kernel.d.ts.map +1 -0
- package/dist/test-utils/create-test-kernel.js +5 -0
- package/dist/test-utils/create-test-plugin-context.d.ts +42 -0
- package/dist/test-utils/create-test-plugin-context.d.ts.map +1 -0
- package/dist/test-utils/create-test-plugin-context.js +46 -0
- package/dist/test-utils/rest-api-test-utils.d.ts +64 -0
- package/dist/test-utils/rest-api-test-utils.d.ts.map +1 -0
- package/dist/test-utils/rest-api-test-utils.js +207 -0
- package/dist/test-utils/test-actors.d.ts +15 -0
- package/dist/test-utils/test-actors.d.ts.map +1 -0
- package/dist/test-utils/test-actors.js +57 -0
- package/dist/test-utils/typed-hooks.d.ts +43 -0
- package/dist/test-utils/typed-hooks.d.ts.map +1 -0
- package/dist/test-utils/typed-hooks.js +35 -0
- package/dist/testing.d.ts +14 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +13 -0
- package/dist/types/commerce-types.d.ts +34 -0
- package/dist/types/commerce-types.d.ts.map +1 -0
- package/dist/types/commerce-types.js +1 -0
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +3 -0
- package/dist/utils/logger.d.ts +3 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +16 -0
- package/dist/utils/pagination.d.ts +11 -0
- package/dist/utils/pagination.d.ts.map +1 -0
- package/dist/utils/pagination.js +15 -0
- package/package.json +2 -2
- package/src/auth/setup.ts +26 -0
- package/src/interfaces/rest/routes/customers.ts +7 -1
- package/src/interfaces/rest/routes/inventory.ts +4 -1
- package/src/interfaces/rest/routes/promotions.ts +12 -9
- package/src/interfaces/rest/schemas/promotions.ts +10 -4
- package/src/modules/catalog/service.ts +19 -0
- package/src/modules/promotions/service.ts +32 -0
- package/src/runtime/commerce.ts +1 -0
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { resolveOrgId } from "../../auth/org.js";
|
|
2
|
+
import { CommerceNotFoundError, CommerceValidationError } from "../../kernel/errors.js";
|
|
3
|
+
import { Err, Ok } from "../../kernel/result.js";
|
|
4
|
+
/**
|
|
5
|
+
* Checks whether a URL points to a private/internal IP address.
|
|
6
|
+
* Blocks: loopback (127.x), link-local (169.254.x), private (10.x, 172.16-31.x, 192.168.x),
|
|
7
|
+
* cloud metadata (169.254.169.254, metadata.google.internal), and localhost.
|
|
8
|
+
*/
|
|
9
|
+
function isPrivateUrl(urlStr) {
|
|
10
|
+
try {
|
|
11
|
+
const parsed = new URL(urlStr);
|
|
12
|
+
// Strip IPv6 brackets: URL.hostname returns "[::1]" not "::1"
|
|
13
|
+
const hostname = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, "");
|
|
14
|
+
// Loopback (IPv4 + IPv6)
|
|
15
|
+
if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1")
|
|
16
|
+
return true;
|
|
17
|
+
if (hostname.endsWith(".localhost"))
|
|
18
|
+
return true;
|
|
19
|
+
// IPv6 loopback and link-local patterns
|
|
20
|
+
if (hostname.startsWith("::ffff:"))
|
|
21
|
+
return true; // IPv6-mapped IPv4 (e.g., ::ffff:127.0.0.1)
|
|
22
|
+
if (hostname.startsWith("fe80:"))
|
|
23
|
+
return true; // IPv6 link-local
|
|
24
|
+
if (hostname === "::")
|
|
25
|
+
return true; // Unspecified address
|
|
26
|
+
// Cloud metadata endpoints
|
|
27
|
+
if (hostname === "169.254.169.254")
|
|
28
|
+
return true;
|
|
29
|
+
if (hostname === "metadata.google.internal")
|
|
30
|
+
return true;
|
|
31
|
+
// Private IP ranges (RFC 1918 + link-local)
|
|
32
|
+
const parts = hostname.split(".").map(Number);
|
|
33
|
+
if (parts.length === 4 && parts.every((n) => !isNaN(n))) {
|
|
34
|
+
const [a, b] = parts;
|
|
35
|
+
if (a === 10)
|
|
36
|
+
return true;
|
|
37
|
+
if (a === 172 && b !== undefined && b >= 16 && b <= 31)
|
|
38
|
+
return true;
|
|
39
|
+
if (a === 192 && b === 168)
|
|
40
|
+
return true;
|
|
41
|
+
if (a === 169 && b === 254)
|
|
42
|
+
return true;
|
|
43
|
+
if (a === 127)
|
|
44
|
+
return true; // Full 127.0.0.0/8 range
|
|
45
|
+
if (a === 0)
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return true; // Invalid URLs are blocked
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
export class WebhookService {
|
|
55
|
+
deps;
|
|
56
|
+
repo;
|
|
57
|
+
constructor(deps) {
|
|
58
|
+
this.deps = deps;
|
|
59
|
+
this.repo = deps.repository;
|
|
60
|
+
}
|
|
61
|
+
async createEndpoint(input, actor, ctx) {
|
|
62
|
+
if (isPrivateUrl(input.url)) {
|
|
63
|
+
return Err(new CommerceValidationError("Webhook URL must not point to a private or internal address."));
|
|
64
|
+
}
|
|
65
|
+
const orgId = resolveOrgId(actor ?? ctx?.actor ?? null);
|
|
66
|
+
const endpoint = await this.repo.createEndpoint({
|
|
67
|
+
organizationId: orgId,
|
|
68
|
+
url: input.url,
|
|
69
|
+
secret: input.secret,
|
|
70
|
+
events: input.events,
|
|
71
|
+
isActive: true,
|
|
72
|
+
metadata: input.metadata ?? {},
|
|
73
|
+
}, ctx);
|
|
74
|
+
return Ok(endpoint);
|
|
75
|
+
}
|
|
76
|
+
async listEndpoints(ctx) {
|
|
77
|
+
const endpoints = await this.repo.findAllEndpoints(ctx);
|
|
78
|
+
return Ok(endpoints);
|
|
79
|
+
}
|
|
80
|
+
async deleteEndpoint(id, ctx) {
|
|
81
|
+
const existing = await this.repo.findEndpointById(id, ctx);
|
|
82
|
+
if (!existing) {
|
|
83
|
+
return Err(new CommerceNotFoundError("Webhook endpoint not found."));
|
|
84
|
+
}
|
|
85
|
+
await this.repo.deleteEndpoint(id, ctx);
|
|
86
|
+
return Ok(undefined);
|
|
87
|
+
}
|
|
88
|
+
async getEndpointsForEvent(eventName, ctx) {
|
|
89
|
+
const endpoints = await this.repo.findEndpointsForEvent(eventName, ctx);
|
|
90
|
+
return Ok(endpoints);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/signing.ts"],"names":[],"mappings":"AAEA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAG3E"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared SSRF prevention utilities.
|
|
3
|
+
*
|
|
4
|
+
* Used by both webhook delivery (DNS rebinding check) and connector URL
|
|
5
|
+
* validation (store URL check) to reject private/internal IP addresses.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the given IP address falls within a private, loopback,
|
|
9
|
+
* link-local, or otherwise non-routable range.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isPrivateIp(ip: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Checks whether a URL string points to a private/internal IP address or
|
|
14
|
+
* hostname. This performs a string-level check only (no DNS resolution).
|
|
15
|
+
*
|
|
16
|
+
* For DNS rebinding protection, use `isPrivateIp` after resolving the hostname.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isPrivateUrl(urlStr: string): boolean;
|
|
19
|
+
//# sourceMappingURL=ssrf-guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssrf-guard.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/ssrf-guard.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAY/C;AAmBD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAsBpD"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared SSRF prevention utilities.
|
|
3
|
+
*
|
|
4
|
+
* Used by both webhook delivery (DNS rebinding check) and connector URL
|
|
5
|
+
* validation (store URL check) to reject private/internal IP addresses.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the given IP address falls within a private, loopback,
|
|
9
|
+
* link-local, or otherwise non-routable range.
|
|
10
|
+
*/
|
|
11
|
+
export function isPrivateIp(ip) {
|
|
12
|
+
// IPv6 loopback / link-local / mapped
|
|
13
|
+
if (ip === "::1" || ip === "::")
|
|
14
|
+
return true;
|
|
15
|
+
if (ip.startsWith("fe80:"))
|
|
16
|
+
return true;
|
|
17
|
+
// IPv6-mapped IPv4 (e.g. ::ffff:127.0.0.1) — extract the IPv4 portion
|
|
18
|
+
const mappedMatch = ip.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);
|
|
19
|
+
if (mappedMatch) {
|
|
20
|
+
return isPrivateIpv4(mappedMatch[1]);
|
|
21
|
+
}
|
|
22
|
+
return isPrivateIpv4(ip);
|
|
23
|
+
}
|
|
24
|
+
function isPrivateIpv4(ip) {
|
|
25
|
+
const parts = ip.split(".").map(Number);
|
|
26
|
+
if (parts.length !== 4 || parts.some((n) => isNaN(n)))
|
|
27
|
+
return false;
|
|
28
|
+
const [a, b] = parts;
|
|
29
|
+
if (a === undefined || b === undefined)
|
|
30
|
+
return false;
|
|
31
|
+
if (a === 127)
|
|
32
|
+
return true; // loopback 127.0.0.0/8
|
|
33
|
+
if (a === 10)
|
|
34
|
+
return true; // RFC 1918 class A
|
|
35
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
36
|
+
return true; // RFC 1918 class B
|
|
37
|
+
if (a === 192 && b === 168)
|
|
38
|
+
return true; // RFC 1918 class C
|
|
39
|
+
if (a === 169 && b === 254)
|
|
40
|
+
return true; // link-local / AWS IMDS
|
|
41
|
+
if (a === 0)
|
|
42
|
+
return true; // unspecified
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Checks whether a URL string points to a private/internal IP address or
|
|
47
|
+
* hostname. This performs a string-level check only (no DNS resolution).
|
|
48
|
+
*
|
|
49
|
+
* For DNS rebinding protection, use `isPrivateIp` after resolving the hostname.
|
|
50
|
+
*/
|
|
51
|
+
export function isPrivateUrl(urlStr) {
|
|
52
|
+
try {
|
|
53
|
+
const parsed = new URL(urlStr);
|
|
54
|
+
const hostname = parsed.hostname.toLowerCase().replace(/^\[|\]$/g, "");
|
|
55
|
+
// Direct hostname matches
|
|
56
|
+
if (hostname === "localhost" || hostname.endsWith(".localhost"))
|
|
57
|
+
return true;
|
|
58
|
+
if (hostname === "::1" || hostname === "::")
|
|
59
|
+
return true;
|
|
60
|
+
if (hostname.startsWith("::ffff:"))
|
|
61
|
+
return true;
|
|
62
|
+
if (hostname.startsWith("fe80:"))
|
|
63
|
+
return true;
|
|
64
|
+
if (hostname.endsWith(".local"))
|
|
65
|
+
return true;
|
|
66
|
+
if (hostname.endsWith(".internal"))
|
|
67
|
+
return true;
|
|
68
|
+
// Cloud metadata endpoints
|
|
69
|
+
if (hostname === "169.254.169.254")
|
|
70
|
+
return true;
|
|
71
|
+
if (hostname === "metadata.google.internal")
|
|
72
|
+
return true;
|
|
73
|
+
// Check if hostname is a raw IP in private ranges
|
|
74
|
+
return isPrivateIpv4(hostname);
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return true; // Invalid URLs are blocked
|
|
78
|
+
}
|
|
79
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { TaskDefinition } from "../../kernel/jobs/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Background task for async webhook delivery.
|
|
4
|
+
*
|
|
5
|
+
* Instead of blocking the HTTP response with inline webhook HTTP calls,
|
|
6
|
+
* the deliverWebhooks hook enqueues this task. The job runner picks it up
|
|
7
|
+
* and delivers asynchronously with retries.
|
|
8
|
+
*/
|
|
9
|
+
export declare const webhookDeliveryTask: TaskDefinition<{
|
|
10
|
+
endpointId: string;
|
|
11
|
+
endpointUrl: string;
|
|
12
|
+
endpointSecret: string;
|
|
13
|
+
eventName: string;
|
|
14
|
+
payload: unknown;
|
|
15
|
+
}>;
|
|
16
|
+
//# sourceMappingURL=tasks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,cAAc,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB,CAkCA,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { WebhookDeliveryWorker } from "./worker.js";
|
|
2
|
+
/**
|
|
3
|
+
* Background task for async webhook delivery.
|
|
4
|
+
*
|
|
5
|
+
* Instead of blocking the HTTP response with inline webhook HTTP calls,
|
|
6
|
+
* the deliverWebhooks hook enqueues this task. The job runner picks it up
|
|
7
|
+
* and delivers asynchronously with retries.
|
|
8
|
+
*/
|
|
9
|
+
export const webhookDeliveryTask = {
|
|
10
|
+
slug: "webhooks/deliver",
|
|
11
|
+
async handler({ input, ctx }) {
|
|
12
|
+
const webhooksService = ctx.services.webhooks;
|
|
13
|
+
// Build a minimal worker — the repository is needed for delivery tracking
|
|
14
|
+
const repository = webhooksService?.repository;
|
|
15
|
+
if (!repository) {
|
|
16
|
+
ctx.logger.warn("Webhook delivery skipped: no webhooks repository available");
|
|
17
|
+
return { output: {} };
|
|
18
|
+
}
|
|
19
|
+
const worker = new WebhookDeliveryWorker({ repository });
|
|
20
|
+
await worker.deliver({
|
|
21
|
+
endpoint: {
|
|
22
|
+
id: input.endpointId,
|
|
23
|
+
url: input.endpointUrl,
|
|
24
|
+
secret: input.endpointSecret,
|
|
25
|
+
},
|
|
26
|
+
eventName: input.eventName,
|
|
27
|
+
payload: input.payload,
|
|
28
|
+
});
|
|
29
|
+
return { output: {} };
|
|
30
|
+
},
|
|
31
|
+
retries: {
|
|
32
|
+
attempts: 5,
|
|
33
|
+
backoff: { type: "exponential", delay: 2000 },
|
|
34
|
+
},
|
|
35
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { WebhooksRepository } from "./repository/index.js";
|
|
2
|
+
interface WorkerDeps {
|
|
3
|
+
repository: WebhooksRepository;
|
|
4
|
+
fetchImpl?: typeof fetch;
|
|
5
|
+
}
|
|
6
|
+
export declare class WebhookDeliveryWorker {
|
|
7
|
+
private deps;
|
|
8
|
+
private fetchImpl;
|
|
9
|
+
constructor(deps: WorkerDeps);
|
|
10
|
+
deliver(args: {
|
|
11
|
+
endpoint: {
|
|
12
|
+
id: string;
|
|
13
|
+
url: string;
|
|
14
|
+
secret: string;
|
|
15
|
+
};
|
|
16
|
+
eventName: string;
|
|
17
|
+
payload: unknown;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../../src/modules/webhooks/worker.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AA+DhE,UAAU,UAAU;IAClB,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IAGpB,OAAO,CAAC,IAAI;IAFxB,OAAO,CAAC,SAAS,CAAe;gBAEZ,IAAI,EAAE,UAAU;IAI9B,OAAO,CAAC,IAAI,EAAE;QAClB,QAAQ,EAAE;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,CAAC;QACtD,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,IAAI,CAAC;CAoDlB"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { signWebhookPayload } from "./signing.js";
|
|
2
|
+
import { isPrivateIp } from "./ssrf-guard.js";
|
|
3
|
+
/**
|
|
4
|
+
* SSRF prevention: reject webhook URLs targeting private/internal hosts.
|
|
5
|
+
* Blocks RFC 1918, loopback, link-local, and common internal domains.
|
|
6
|
+
*/
|
|
7
|
+
const PRIVATE_HOST_PATTERNS = [
|
|
8
|
+
/^127\./, // loopback
|
|
9
|
+
/^10\./, // RFC 1918 class A
|
|
10
|
+
/^172\.(1[6-9]|2[0-9]|3[01])\./, // RFC 1918 class B
|
|
11
|
+
/^192\.168\./, // RFC 1918 class C
|
|
12
|
+
/^169\.254\./, // link-local / AWS IMDS
|
|
13
|
+
/^0\.0\.0\.0/, // unspecified
|
|
14
|
+
/^localhost$/i,
|
|
15
|
+
/\.local$/i,
|
|
16
|
+
/\.internal$/i,
|
|
17
|
+
];
|
|
18
|
+
function validateWebhookUrl(url) {
|
|
19
|
+
const parsed = new URL(url);
|
|
20
|
+
if (process.env.NODE_ENV === "production" && parsed.protocol !== "https:") {
|
|
21
|
+
throw new Error("Webhook URLs must use HTTPS in production.");
|
|
22
|
+
}
|
|
23
|
+
const hostname = parsed.hostname;
|
|
24
|
+
for (const pattern of PRIVATE_HOST_PATTERNS) {
|
|
25
|
+
if (pattern.test(hostname)) {
|
|
26
|
+
throw new Error(`Webhook URLs cannot target private hosts: ${hostname}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve the webhook URL hostname via DNS and verify the resolved IP is not
|
|
32
|
+
* private. This closes the DNS rebinding gap where a hostname initially
|
|
33
|
+
* resolves to a public IP but later rebinds to an internal address.
|
|
34
|
+
*/
|
|
35
|
+
async function validateResolvedIp(url) {
|
|
36
|
+
const { lookup } = await import("node:dns/promises");
|
|
37
|
+
const parsed = new URL(url);
|
|
38
|
+
const hostname = parsed.hostname.replace(/^\[|\]$/g, "");
|
|
39
|
+
// Skip DNS resolution for raw IP addresses — they are already checked
|
|
40
|
+
// by validateWebhookUrl via PRIVATE_HOST_PATTERNS.
|
|
41
|
+
const isIpLiteral = /^[\d.]+$/.test(hostname) || hostname.includes(":");
|
|
42
|
+
if (isIpLiteral)
|
|
43
|
+
return;
|
|
44
|
+
try {
|
|
45
|
+
const { address } = await lookup(hostname);
|
|
46
|
+
if (isPrivateIp(address)) {
|
|
47
|
+
throw new Error(`Webhook URL hostname "${hostname}" resolved to private IP ${address}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err instanceof Error && err.message.includes("resolved to private")) {
|
|
52
|
+
throw err;
|
|
53
|
+
}
|
|
54
|
+
throw new Error(`Failed to resolve webhook URL hostname "${hostname}": ${err}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class WebhookDeliveryWorker {
|
|
58
|
+
deps;
|
|
59
|
+
fetchImpl;
|
|
60
|
+
constructor(deps) {
|
|
61
|
+
this.deps = deps;
|
|
62
|
+
this.fetchImpl = deps.fetchImpl ?? fetch;
|
|
63
|
+
}
|
|
64
|
+
async deliver(args) {
|
|
65
|
+
// SSRF prevention: validate URL string patterns + resolved DNS IP
|
|
66
|
+
validateWebhookUrl(args.endpoint.url);
|
|
67
|
+
await validateResolvedIp(args.endpoint.url);
|
|
68
|
+
let attempt = 0;
|
|
69
|
+
const maxAttempts = 3;
|
|
70
|
+
while (attempt < maxAttempts) {
|
|
71
|
+
attempt += 1;
|
|
72
|
+
const signature = signWebhookPayload(args.endpoint.secret, args.payload);
|
|
73
|
+
try {
|
|
74
|
+
const response = await this.fetchImpl(args.endpoint.url, {
|
|
75
|
+
method: "POST",
|
|
76
|
+
headers: {
|
|
77
|
+
"content-type": "application/json",
|
|
78
|
+
"x-commerce-signature": signature,
|
|
79
|
+
"x-commerce-event": args.eventName,
|
|
80
|
+
},
|
|
81
|
+
body: JSON.stringify(args.payload),
|
|
82
|
+
signal: AbortSignal.timeout(10_000),
|
|
83
|
+
});
|
|
84
|
+
await this.deps.repository.createDelivery({
|
|
85
|
+
endpointId: args.endpoint.id,
|
|
86
|
+
eventName: args.eventName,
|
|
87
|
+
payload: args.payload,
|
|
88
|
+
statusCode: response.status,
|
|
89
|
+
attemptCount: attempt,
|
|
90
|
+
...(response.ok ? { deliveredAt: new Date() } : {}),
|
|
91
|
+
...(!response.ok ? { failedAt: new Date() } : {}),
|
|
92
|
+
...(!response.ok && attempt < maxAttempts
|
|
93
|
+
? { nextRetryAt: new Date(Date.now() + 2 ** attempt * 1000) }
|
|
94
|
+
: {}),
|
|
95
|
+
});
|
|
96
|
+
if (response.ok)
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
catch {
|
|
100
|
+
await this.deps.repository.createDelivery({
|
|
101
|
+
endpointId: args.endpoint.id,
|
|
102
|
+
eventName: args.eventName,
|
|
103
|
+
payload: args.payload,
|
|
104
|
+
attemptCount: attempt,
|
|
105
|
+
failedAt: new Date(),
|
|
106
|
+
...(attempt < maxAttempts
|
|
107
|
+
? { nextRetryAt: new Date(Date.now() + 2 ** attempt * 1000) }
|
|
108
|
+
: {}),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { Actor } from "../auth/types.js";
|
|
2
|
+
import type { CommerceConfig } from "../config/types.js";
|
|
3
|
+
import type { Kernel } from "./kernel.js";
|
|
4
|
+
import { type AuthInstance } from "../auth/setup.js";
|
|
5
|
+
import { type Logger } from "./logger.js";
|
|
6
|
+
import { type CommerceLocalAPI } from "../kernel/local-api.js";
|
|
7
|
+
/**
|
|
8
|
+
* The commerce instance returned by `createCommerce()`.
|
|
9
|
+
*
|
|
10
|
+
* This is the headless, framework-agnostic entry point.
|
|
11
|
+
* No HTTP server, no Hono — just typed services and a local API.
|
|
12
|
+
*
|
|
13
|
+
* ## Usage with Next.js App Router:
|
|
14
|
+
*
|
|
15
|
+
* ```typescript
|
|
16
|
+
* // lib/commerce.ts
|
|
17
|
+
* import { createCommerce } from "@unifiedcommerce/core";
|
|
18
|
+
* import config from "../commerce.config.js";
|
|
19
|
+
*
|
|
20
|
+
* export const commerce = await createCommerce(config);
|
|
21
|
+
*
|
|
22
|
+
* // app/products/page.tsx (Server Component)
|
|
23
|
+
* import { commerce } from "@/lib/commerce";
|
|
24
|
+
*
|
|
25
|
+
* export default async function ProductsPage() {
|
|
26
|
+
* const products = await commerce.api.catalog.list({ limit: 20 });
|
|
27
|
+
* if (!products.ok) return <div>Error</div>;
|
|
28
|
+
* return <ProductGrid items={products.value.items} />;
|
|
29
|
+
* }
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* ## Usage with TanStack Start:
|
|
33
|
+
*
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // app/routes/products.tsx
|
|
36
|
+
* import { createServerFn } from "@tanstack/start";
|
|
37
|
+
* import { commerce } from "../lib/commerce.js";
|
|
38
|
+
*
|
|
39
|
+
* const getProducts = createServerFn("GET", async () => {
|
|
40
|
+
* return commerce.api.catalog.list({ limit: 20 });
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* ## Usage with SvelteKit:
|
|
45
|
+
*
|
|
46
|
+
* ```typescript
|
|
47
|
+
* // src/lib/server/commerce.ts
|
|
48
|
+
* import { createCommerce } from "@unifiedcommerce/core";
|
|
49
|
+
* import config from "./commerce.config.js";
|
|
50
|
+
* export const commerce = await createCommerce(config);
|
|
51
|
+
*
|
|
52
|
+
* // src/routes/products/+page.server.ts
|
|
53
|
+
* import { commerce } from "$lib/server/commerce";
|
|
54
|
+
* export async function load() {
|
|
55
|
+
* const products = await commerce.api.catalog.list({ limit: 20 });
|
|
56
|
+
* return { products: products.ok ? products.value : { items: [] } };
|
|
57
|
+
* }
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export interface CommerceInstance {
|
|
61
|
+
/** Proxy-based local API — auto-injects actor/tx to every service call */
|
|
62
|
+
api: CommerceLocalAPI;
|
|
63
|
+
/** Raw kernel for advanced usage (hooks, database, config) */
|
|
64
|
+
kernel: Kernel;
|
|
65
|
+
/** Drizzle database instance for direct queries */
|
|
66
|
+
db: unknown;
|
|
67
|
+
/** Auth instance (Better Auth) for session management */
|
|
68
|
+
auth: AuthInstance;
|
|
69
|
+
/** Logger */
|
|
70
|
+
logger: Logger;
|
|
71
|
+
/**
|
|
72
|
+
* Create a scoped API for a specific user/actor.
|
|
73
|
+
* Use this in authenticated routes to scope data access.
|
|
74
|
+
*
|
|
75
|
+
* ```typescript
|
|
76
|
+
* // In a Next.js server action:
|
|
77
|
+
* const userApi = commerce.withActor({
|
|
78
|
+
* type: "user", userId: session.userId, ...
|
|
79
|
+
* });
|
|
80
|
+
* const orders = await userApi.orders.list({ limit: 10 });
|
|
81
|
+
* // Only returns orders for this user's org
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
withActor(actor: Actor): CommerceLocalAPI;
|
|
85
|
+
/**
|
|
86
|
+
* Create a scoped API within a database transaction.
|
|
87
|
+
*
|
|
88
|
+
* ```typescript
|
|
89
|
+
* await commerce.kernel.database.transaction(async (tx) => {
|
|
90
|
+
* const txApi = commerce.withTransaction(tx, actor);
|
|
91
|
+
* await txApi.inventory.adjust({ entityId, adjustment: -1, reason: "sold" });
|
|
92
|
+
* await txApi.orders.create({ ... });
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
withTransaction(tx: unknown, actor?: Actor | null): CommerceLocalAPI;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Create a headless commerce instance.
|
|
100
|
+
*
|
|
101
|
+
* This is the primary entry point for using UnifiedCommerce without an HTTP server.
|
|
102
|
+
* It initializes the kernel, database, auth, and returns a local API that works
|
|
103
|
+
* exactly like the REST API but without HTTP overhead.
|
|
104
|
+
*
|
|
105
|
+
* The Hono server (`createServer`) is optional — use it only when you need
|
|
106
|
+
* a standalone HTTP API. For Next.js, TanStack Start, SvelteKit, Nuxt, etc.,
|
|
107
|
+
* use `createCommerce()` directly.
|
|
108
|
+
*/
|
|
109
|
+
export declare function createCommerce(config: CommerceConfig): Promise<CommerceInstance>;
|
|
110
|
+
//# sourceMappingURL=commerce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commerce.d.ts","sourceRoot":"","sources":["../../src/runtime/commerce.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAc,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAkB,KAAK,gBAAgB,EAAwB,MAAM,wBAAwB,CAAC;AAErG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0EAA0E;IAC1E,GAAG,EAAE,gBAAgB,CAAC;IAEtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IAEf,mDAAmD;IACnD,EAAE,EAAE,OAAO,CAAC;IAEZ,yDAAyD;IACzD,IAAI,EAAE,YAAY,CAAC;IAEnB,aAAa;IACb,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;;;;;;OAYG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,gBAAgB,CAAC;IAE1C;;;;;;;;;;OAUG;IACH,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,gBAAgB,CAAC;CACtE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,cAAc,GACrB,OAAO,CAAC,gBAAgB,CAAC,CAyB3B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createKernel } from "./kernel.js";
|
|
2
|
+
import { ensureDefaultOrg } from "../auth/org.js";
|
|
3
|
+
import { createAuth } from "../auth/setup.js";
|
|
4
|
+
import { createLogger } from "./logger.js";
|
|
5
|
+
import { createLocalAPI } from "../kernel/local-api.js";
|
|
6
|
+
/**
|
|
7
|
+
* Create a headless commerce instance.
|
|
8
|
+
*
|
|
9
|
+
* This is the primary entry point for using UnifiedCommerce without an HTTP server.
|
|
10
|
+
* It initializes the kernel, database, auth, and returns a local API that works
|
|
11
|
+
* exactly like the REST API but without HTTP overhead.
|
|
12
|
+
*
|
|
13
|
+
* The Hono server (`createServer`) is optional — use it only when you need
|
|
14
|
+
* a standalone HTTP API. For Next.js, TanStack Start, SvelteKit, Nuxt, etc.,
|
|
15
|
+
* use `createCommerce()` directly.
|
|
16
|
+
*/
|
|
17
|
+
export async function createCommerce(config) {
|
|
18
|
+
const kernel = createKernel(config);
|
|
19
|
+
await ensureDefaultOrg(kernel.database.db);
|
|
20
|
+
const auth = createAuth(kernel.database, config);
|
|
21
|
+
const logger = createLogger(config);
|
|
22
|
+
// Default API: no actor (public access), no transaction
|
|
23
|
+
const api = createLocalAPI(kernel);
|
|
24
|
+
return {
|
|
25
|
+
api,
|
|
26
|
+
kernel,
|
|
27
|
+
db: kernel.database.db,
|
|
28
|
+
auth,
|
|
29
|
+
logger,
|
|
30
|
+
withActor(actor) {
|
|
31
|
+
return createLocalAPI(kernel, { actor });
|
|
32
|
+
},
|
|
33
|
+
withTransaction(tx, actor) {
|
|
34
|
+
return createLocalAPI(kernel, { actor: actor ?? null, tx });
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { CommerceConfig, MCPTool } from "../config/types.js";
|
|
2
|
+
import { HookRegistry } from "../kernel/hooks/registry.js";
|
|
3
|
+
import { type DatabaseAdapter } from "../kernel/database/adapter.js";
|
|
4
|
+
import { CatalogServiceImpl } from "../modules/catalog/service.js";
|
|
5
|
+
import { InventoryService } from "../modules/inventory/service.js";
|
|
6
|
+
import { MediaService } from "../modules/media/service.js";
|
|
7
|
+
import { CartService } from "../modules/cart/service.js";
|
|
8
|
+
import { OrderService } from "../modules/orders/service.js";
|
|
9
|
+
import { PaymentsService } from "../modules/payments/service.js";
|
|
10
|
+
import { FulfillmentService } from "../modules/fulfillment/service.js";
|
|
11
|
+
import { CustomerService } from "../modules/customers/service.js";
|
|
12
|
+
import { WebhookService } from "../modules/webhooks/service.js";
|
|
13
|
+
import { AnalyticsService } from "../modules/analytics/service.js";
|
|
14
|
+
import { PricingService } from "../modules/pricing/service.js";
|
|
15
|
+
import { PromotionService } from "../modules/promotions/service.js";
|
|
16
|
+
import { TaxService } from "../modules/tax/service.js";
|
|
17
|
+
import { ShippingService } from "../modules/shipping/service.js";
|
|
18
|
+
import { SearchService } from "../modules/search/service.js";
|
|
19
|
+
import { type AuditService } from "../modules/audit/service.js";
|
|
20
|
+
import { OrganizationService } from "../modules/organization/service.js";
|
|
21
|
+
import { createLogger } from "../utils/logger.js";
|
|
22
|
+
export interface WebhookDeliveryPayload {
|
|
23
|
+
endpoint: {
|
|
24
|
+
id: string;
|
|
25
|
+
url: string;
|
|
26
|
+
secret: string;
|
|
27
|
+
};
|
|
28
|
+
eventName: string;
|
|
29
|
+
payload: unknown;
|
|
30
|
+
}
|
|
31
|
+
export interface Kernel {
|
|
32
|
+
config: CommerceConfig;
|
|
33
|
+
hooks: HookRegistry;
|
|
34
|
+
database: DatabaseAdapter;
|
|
35
|
+
services: {
|
|
36
|
+
catalog: CatalogServiceImpl;
|
|
37
|
+
inventory: InventoryService;
|
|
38
|
+
media: MediaService;
|
|
39
|
+
cart: CartService;
|
|
40
|
+
orders: OrderService;
|
|
41
|
+
payments: PaymentsService;
|
|
42
|
+
fulfillment: FulfillmentService;
|
|
43
|
+
customers: CustomerService;
|
|
44
|
+
webhooks: WebhookService & {
|
|
45
|
+
enqueueDelivery(payload: WebhookDeliveryPayload): Promise<void>;
|
|
46
|
+
};
|
|
47
|
+
analytics: AnalyticsService;
|
|
48
|
+
pricing: PricingService;
|
|
49
|
+
promotions: PromotionService;
|
|
50
|
+
tax: TaxService;
|
|
51
|
+
shipping: ShippingService;
|
|
52
|
+
search: SearchService;
|
|
53
|
+
audit: AuditService;
|
|
54
|
+
email: CommerceConfig["email"];
|
|
55
|
+
organization: OrganizationService;
|
|
56
|
+
};
|
|
57
|
+
mcpTools: MCPTool[];
|
|
58
|
+
logger: ReturnType<typeof createLogger>;
|
|
59
|
+
getMCPActor(): {
|
|
60
|
+
type: "api_key";
|
|
61
|
+
userId: string;
|
|
62
|
+
email: null;
|
|
63
|
+
name: string;
|
|
64
|
+
vendorId: null;
|
|
65
|
+
organizationId: string;
|
|
66
|
+
role: string;
|
|
67
|
+
permissions: string[];
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export declare function createKernel(config: CommerceConfig): Kernel;
|
|
71
|
+
//# sourceMappingURL=kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/runtime/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,OAAO,EACR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAoB,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAYnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAYlD,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE;QACR,OAAO,EAAE,kBAAkB,CAAC;QAC5B,SAAS,EAAE,gBAAgB,CAAC;QAC5B,KAAK,EAAE,YAAY,CAAC;QACpB,IAAI,EAAE,WAAW,CAAC;QAClB,MAAM,EAAE,YAAY,CAAC;QACrB,QAAQ,EAAE,eAAe,CAAC;QAC1B,WAAW,EAAE,kBAAkB,CAAC;QAChC,SAAS,EAAE,eAAe,CAAC;QAC3B,QAAQ,EAAE,cAAc,GAAG;YACzB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;SACjE,CAAC;QACF,SAAS,EAAE,gBAAgB,CAAC;QAC5B,OAAO,EAAE,cAAc,CAAC;QACxB,UAAU,EAAE,gBAAgB,CAAC;QAC7B,GAAG,EAAE,UAAU,CAAC;QAChB,QAAQ,EAAE,eAAe,CAAC;QAC1B,MAAM,EAAE,aAAa,CAAC;QACtB,KAAK,EAAE,YAAY,CAAC;QACpB,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;QAC/B,YAAY,EAAE,mBAAmB,CAAC;KACnC,CAAC;IACF,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;IACxC,WAAW,IAAI;QACb,IAAI,EAAE,SAAS,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,IAAI,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,IAAI,CAAC;QACf,cAAc,EAAE,MAAM,CAAC;QACvB,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACH;AA8FD,wBAAgB,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAsO3D"}
|