Add strict type literal unions for Sync and Async Events enums (#174)

* Add strict type literal unions for Sync and Async Events enums

* Fix manifest structure
This commit is contained in:
Lukasz Ostrowski 2023-02-14 12:46:29 +01:00 committed by GitHub
parent e573bd1c11
commit 24778df592
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 148 additions and 8 deletions

View file

@ -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

View file

@ -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<TPayload = unknown> {
query?: string;
asyncEvent: WebhookEvent;
asyncEvent: AsyncWebhookEventType;
isActive?: boolean;

View file

@ -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 */