diff --git a/src/handlers/next/saleor-async-webhook.test.ts b/src/handlers/next/saleor-async-webhook.test.ts index b61bda5..3d03b41 100644 --- a/src/handlers/next/saleor-async-webhook.test.ts +++ b/src/handlers/next/saleor-async-webhook.test.ts @@ -16,6 +16,9 @@ describe("SaleorAsyncWebhook", () => { ? { domain: "example.com", token: "mock-token", + jwks: "", + saleorApiUrl: "https://example.com/graphql/", + appId: "12345", } : undefined, set: vi.fn(), @@ -34,7 +37,7 @@ describe("SaleorAsyncWebhook", () => { asyncEvent: "PRODUCT_UPDATED", webhookPath, query: "subscription { event { ... on ProductUpdated { product { id }}}}", - }; + } as const; const saleorAsyncWebhook = new SaleorAsyncWebhook(validAsyncWebhookConfiguration); @@ -83,7 +86,13 @@ describe("SaleorAsyncWebhook", () => { baseUrl: "example.com", event: "product_updated", payload: { data: "test_payload" }, - authData: { domain: "example.com", token: "token" }, + authData: { + domain: "example.com", + token: "token", + jwks: "", + saleorApiUrl: "https://example.com/graphql/", + appId: "12345", + }, })); // Test handler - will throw error if mocked context is not passed to it diff --git a/src/handlers/next/saleor-async-webhook.ts b/src/handlers/next/saleor-async-webhook.ts index 5a4c5b5..3781dc1 100644 --- a/src/handlers/next/saleor-async-webhook.ts +++ b/src/handlers/next/saleor-async-webhook.ts @@ -4,7 +4,7 @@ import { NextApiHandler, NextApiRequest, NextApiResponse } from "next"; import { APL } from "../../APL"; import { createDebug } from "../../debug"; import { gqlAstToString } from "../../gql-ast-to-string"; -import { WebhookEvent, WebhookManifest } from "../../types"; +import { AsyncWebhookEventType, WebhookManifest } from "../../types"; import { processAsyncSaleorWebhook, SaleorWebhookError, @@ -17,7 +17,7 @@ const debug = createDebug("SaleorAsyncWebhook"); interface WebhookManifestConfigurationBase { name?: string; webhookPath: string; - asyncEvent: WebhookEvent; + asyncEvent: AsyncWebhookEventType; isActive?: boolean; apl: APL; } @@ -66,7 +66,7 @@ export class SaleorAsyncWebhook { query?: string; - asyncEvent: WebhookEvent; + asyncEvent: AsyncWebhookEventType; isActive?: boolean; diff --git a/src/types.ts b/src/types.ts index 1f93a2c..0e38ac0 100644 --- a/src/types.ts +++ b/src/types.ts @@ -45,7 +45,138 @@ export type Permission = export type AppPermission = Permission; -export type WebhookEvent = string; +/** + * @see https://github.com/saleor/saleor/blob/main/saleor/graphql/schema.graphql#L1505 + */ +export type AsyncWebhookEventType = + | "ADDRESS_CREATED" + | "ADDRESS_UPDATED" + | "ADDRESS_DELETED" + | "APP_INSTALLED" + | "APP_UPDATED" + | "APP_DELETED" + | "APP_STATUS_CHANGED" + | "ATTRIBUTE_CREATED" + | "ATTRIBUTE_UPDATED" + | "ATTRIBUTE_DELETED" + | "ATTRIBUTE_VALUE_CREATED" + | "ATTRIBUTE_VALUE_UPDATED" + | "ATTRIBUTE_VALUE_DELETED" + | "CATEGORY_CREATED" + | "CATEGORY_UPDATED" + | "CATEGORY_DELETED" + | "CHANNEL_CREATED" + | "CHANNEL_UPDATED" + | "CHANNEL_DELETED" + | "CHANNEL_STATUS_CHANGED" + | "GIFT_CARD_CREATED" + | "GIFT_CARD_UPDATED" + | "GIFT_CARD_DELETED" + | "GIFT_CARD_STATUS_CHANGED" + | "GIFT_CARD_METADATA_UPDATED" + | "MENU_CREATED" + | "MENU_UPDATED" + | "MENU_DELETED" + | "MENU_ITEM_CREATED" + | "MENU_ITEM_UPDATED" + | "MENU_ITEM_DELETED" + | "ORDER_CREATED" + | "ORDER_CONFIRMED" + | "ORDER_FULLY_PAID" + | "ORDER_UPDATED" + | "ORDER_CANCELLED" + | "ORDER_FULFILLED" + | "ORDER_METADATA_UPDATED" + | "FULFILLMENT_CREATED" + | "FULFILLMENT_CANCELED" + | "FULFILLMENT_APPROVED" + | "FULFILLMENT_METADATA_UPDATED" + | "DRAFT_ORDER_CREATED" + | "DRAFT_ORDER_UPDATED" + | "DRAFT_ORDER_DELETED" + | "SALE_CREATED" + | "SALE_UPDATED" + | "SALE_DELETED" + | "SALE_TOGGLE" + | "INVOICE_REQUESTED" + | "INVOICE_DELETED" + | "INVOICE_SENT" + | "CUSTOMER_CREATED" + | "CUSTOMER_UPDATED" + | "CUSTOMER_DELETED" + | "CUSTOMER_METADATA_UPDATED" + | "COLLECTION_CREATED" + | "COLLECTION_UPDATED" + | "COLLECTION_DELETED" + | "COLLECTION_METADATA_UPDATED" + | "PRODUCT_CREATED" + | "PRODUCT_UPDATED" + | "PRODUCT_DELETED" + | "PRODUCT_METADATA_UPDATED" + | "PRODUCT_MEDIA_CREATED" + | "PRODUCT_MEDIA_UPDATED" + | "PRODUCT_MEDIA_DELETED" + | "PRODUCT_VARIANT_CREATED" + | "PRODUCT_VARIANT_UPDATED" + | "PRODUCT_VARIANT_DELETED" + | "PRODUCT_VARIANT_METADATA_UPDATED" + | "PRODUCT_VARIANT_OUT_OF_STOCK" + | "PRODUCT_VARIANT_BACK_IN_STOCK" + | "PRODUCT_VARIANT_STOCK_UPDATED" + | "CHECKOUT_CREATED" + | "CHECKOUT_UPDATED" + | "CHECKOUT_METADATA_UPDATED" + | "NOTIFY_USER" + | "PAGE_CREATED" + | "PAGE_UPDATED" + | "PAGE_DELETED" + | "PAGE_TYPE_CREATED" + | "PAGE_TYPE_UPDATED" + | "PAGE_TYPE_DELETED" + | "PERMISSION_GROUP_CREATED" + | "PERMISSION_GROUP_UPDATED" + | "PERMISSION_GROUP_DELETED" + | "SHIPPING_PRICE_CREATED" + | "SHIPPING_PRICE_UPDATED" + | "SHIPPING_PRICE_DELETED" + | "SHIPPING_ZONE_CREATED" + | "SHIPPING_ZONE_UPDATED" + | "SHIPPING_ZONE_DELETED" + | "SHIPPING_ZONE_METADATA_UPDATED" + | "STAFF_CREATED" + | "STAFF_UPDATED" + | "STAFF_DELETED" + | "TRANSACTION_ACTION_REQUEST" + | "TRANSACTION_ITEM_METADATA_UPDATED" + | "TRANSLATION_CREATED" + | "TRANSLATION_UPDATED" + | "WAREHOUSE_CREATED" + | "WAREHOUSE_UPDATED" + | "WAREHOUSE_DELETED" + | "WAREHOUSE_METADATA_UPDATED" + | "VOUCHER_CREATED" + | "VOUCHER_UPDATED" + | "VOUCHER_DELETED" + | "VOUCHER_METADATA_UPDATED" + | "OBSERVABILITY" + | "THUMBNAIL_CREATED"; + +/** + * @see https://github.com/saleor/saleor/blob/main/saleor/graphql/schema.graphql#L1995 + */ +export type SyncWebhookEventType = + | "PAYMENT_LIST_GATEWAYS" + | "PAYMENT_AUTHORIZE" + | "PAYMENT_CAPTURE" + | "PAYMENT_REFUND" + | "PAYMENT_VOID" + | "PAYMENT_CONFIRM" + | "PAYMENT_PROCESS" + | "CHECKOUT_CALCULATE_TAXES" + | "ORDER_CALCULATE_TAXES" + | "SHIPPING_LIST_METHODS_FOR_CHECKOUT" + | "CHECKOUT_FILTER_SHIPPING_METHODS" + | "ORDER_FILTER_SHIPPING_METHODS"; export interface AppExtension { /** Name which will be displayed in the dashboard */ @@ -69,8 +200,8 @@ export interface AppExtension { export interface WebhookManifest { name: string; - asyncEvents?: WebhookEvent[]; - syncEvents?: WebhookEvent[]; + asyncEvents?: AsyncWebhookEventType[]; + syncEvents?: SyncWebhookEventType[]; /** If query is not provided, the default webhook payload will be used */ query?: string; /** The full URL of the endpoint where request will be sent */