Events
Storecraft boasts an event system called pub-sub. You can subscribe to events and dispatch events.
Each Storecraft App call, dispatches events, that you can listen to.
Quick Example
import { App } from '@storecraft/core'import type { CollectionType, AuthUserType } from '@storecraft/core/api'const app = new App(config).withPlatform(new NodePlatform()).withDatabase(new MongoDB()).withStorage(new GoogleStorage()).on('collections/upsert',async (event) => {const previous: CollectionType = event.payload.previous;const current: CollectionType = event.payload.current;}).on('auth/signup',async (event) => {const user: Partial<AuthUserType> = event.payload;// Here you can send an onboarding email for exampleconsole.log(user.email);}).on('orders/checkout/complete',async (event) => {const order_data: OrderData = event.payload.current;// Here send an email with order details to customer}).on('orders/fulfillment/shipped',async (event) => {const order_data: OrderData = event.payload.current;// Here send an email with order shipping}).init();
Events Rundown
auth
event | dispatches |
---|---|
auth/signup | Partial<AuthUserType> |
auth/signin | Partial<AuthUserType> |
auth/refresh | Partial<ApiAuthResult> |
auth/remove | Partial<AuthUserType> |
auth/upsert | Partial<AuthUserType> |
auth/apikey-created | Partial<AuthUserType> |
auth/change-password | Partial<AuthUserType> |
auth/confirm-email-token-generated | { auth_user: Partial<AuthUserType>, token: string } |
auth/confirm-email-token-confirmed | Partial<AuthUserType> |
auth/forgot-password-token-generated | { auth_user: Partial<AuthUserType>, token: string } |
auth/forgot-password-token-confirmed | Partial<AuthUserType> |
event | dispatches |
---|---|
email/before-send | Partial<MailObject> |
email/after-send | { mail_object: Partial<MailObject>, mail_response: Partial<MailResponse> } |
orders
event | dispatches |
---|---|
orders/upsert | { previous: OrderData, current: OrderData } |
orders/remove | { previous: OrderData, success: boolean } |
orders/get | { current: OrderData, } |
orders/list | { current: OrderData[], } |
orders/checkout/created | { previous: OrderData, current: OrderData } |
orders/checkout/complete | { previous: OrderData, current: OrderData } |
orders/checkout/requires_action | { previous: OrderData, current: OrderData } |
orders/checkout/failed | { previous: OrderData, current: OrderData } |
orders/checkout/unknown | { previous: OrderData, current: OrderData } |
orders/checkout/update | { previous: OrderData, current: OrderData } |
orders/fulfillment/draft | { previous: OrderData, current: OrderData } |
orders/fulfillment/processing | { previous: OrderData, current: OrderData } |
orders/fulfillment/shipped | { previous: OrderData, current: OrderData } |
orders/fulfillment/fulfilled | { previous: OrderData, current: OrderData } |
orders/fulfillment/cancelled | { previous: OrderData, current: OrderData } |
orders/fulfillment/update | { previous: OrderData, current: OrderData } |
orders/payments/unpaid | { previous: OrderData, current: OrderData } |
orders/payments/authorized | { previous: OrderData, current: OrderData } |
orders/payments/captured | { previous: OrderData, current: OrderData } |
orders/payments/requires_auth | { previous: OrderData, current: OrderData } |
orders/payments/voided | { previous: OrderData, current: OrderData } |
orders/payments/failed | { previous: OrderData, current: OrderData } |
orders/payments/partially_paid | { previous: OrderData, current: OrderData } |
orders/payments/partially_refunded | { previous: OrderData, current: OrderData } |
orders/payments/cancelled | { previous: OrderData, current: OrderData } |
orders/payments/update | { previous: OrderData, current: OrderData } |
storefronts
event | dispatches |
---|---|
storefronts/upsert | { previous: StorefrontType, current: StorefrontType } |
storefronts/remove | { previous: StorefrontType, success: boolean } |
storefronts/get | { current: StorefrontType, } |
storefronts/list | { current: StorefrontType[], } |
customers
event | dispatches |
---|---|
customers/upsert | { previous: CustomerType, current: CustomerType } |
customers/remove | { previous: CustomerType, success: boolean } |
customers/get | { current: CustomerType, } |
customers/list | { current: CustomerType[], } |
products
event | dispatches |
---|---|
products/upsert | { previous: ProductType, current: ProductType } |
products/remove | { previous: ProductType, success: boolean } |
products/get | { current: ProductType, } |
products/list | { current: ProductType[], } |
collections
event | dispatches |
---|---|
collections/upsert | { previous: CollectionType, current: CollectionType } |
collections/remove | { previous: CollectionType, success: boolean } |
collections/get | { current: CollectionType, } |
collections/list | { current: CollectionType[], } |
discounts
event | dispatches |
---|---|
discounts/upsert | { previous: DiscountType, current: DiscountType } |
discounts/remove | { previous: DiscountType, success: boolean } |
discounts/get | { current: DiscountType, } |
discounts/list | { current: DiscountType[], } |
tags
event | dispatches |
---|---|
tags/upsert | { previous: TagType, current: TagType } |
tags/remove | { previous: TagType, success: boolean } |
tags/get | { current: TagType, } |
tags/list | { current: TagType[], } |
shipping
event | dispatches |
---|---|
shipping/upsert | { previous: ShippingMethodType, current: ShippingMethodType } |
shipping/remove | { previous: ShippingMethodType, success: boolean } |
shipping/get | { current: ShippingMethodType, } |
shipping/list | { current: ShippingMethodType[], } |
posts
event | dispatches |
---|---|
posts/upsert | { previous: PostType, current: PostType } |
posts/remove | { previous: PostType, success: boolean } |
posts/get | { current: PostType, } |
posts/list | { current: PostType[], } |
images
event | dispatches |
---|---|
images/upsert | { previous: ImageType, current: ImageType } |
images/remove | { previous: ImageType, success: boolean } |
images/get | { current: ImageType, } |
images/list | { current: ImageType[], } |
templates
event | dispatches |
---|---|
templates/upsert | { previous: TemplateType, current: TemplateType } |
templates/remove | { previous: TemplateType, success: boolean } |
templates/get | { current: TemplateType, } |
templates/list | { current: TemplateType[], } |
All Rights Reserved, storecraft, (2025)