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:
parent
e573bd1c11
commit
24778df592
3 changed files with 148 additions and 8 deletions
|
@ -16,6 +16,9 @@ describe("SaleorAsyncWebhook", () => {
|
||||||
? {
|
? {
|
||||||
domain: "example.com",
|
domain: "example.com",
|
||||||
token: "mock-token",
|
token: "mock-token",
|
||||||
|
jwks: "",
|
||||||
|
saleorApiUrl: "https://example.com/graphql/",
|
||||||
|
appId: "12345",
|
||||||
}
|
}
|
||||||
: undefined,
|
: undefined,
|
||||||
set: vi.fn(),
|
set: vi.fn(),
|
||||||
|
@ -34,7 +37,7 @@ describe("SaleorAsyncWebhook", () => {
|
||||||
asyncEvent: "PRODUCT_UPDATED",
|
asyncEvent: "PRODUCT_UPDATED",
|
||||||
webhookPath,
|
webhookPath,
|
||||||
query: "subscription { event { ... on ProductUpdated { product { id }}}}",
|
query: "subscription { event { ... on ProductUpdated { product { id }}}}",
|
||||||
};
|
} as const;
|
||||||
|
|
||||||
const saleorAsyncWebhook = new SaleorAsyncWebhook(validAsyncWebhookConfiguration);
|
const saleorAsyncWebhook = new SaleorAsyncWebhook(validAsyncWebhookConfiguration);
|
||||||
|
|
||||||
|
@ -83,7 +86,13 @@ describe("SaleorAsyncWebhook", () => {
|
||||||
baseUrl: "example.com",
|
baseUrl: "example.com",
|
||||||
event: "product_updated",
|
event: "product_updated",
|
||||||
payload: { data: "test_payload" },
|
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
|
// Test handler - will throw error if mocked context is not passed to it
|
||||||
|
|
|
@ -4,7 +4,7 @@ import { NextApiHandler, NextApiRequest, NextApiResponse } from "next";
|
||||||
import { APL } from "../../APL";
|
import { APL } from "../../APL";
|
||||||
import { createDebug } from "../../debug";
|
import { createDebug } from "../../debug";
|
||||||
import { gqlAstToString } from "../../gql-ast-to-string";
|
import { gqlAstToString } from "../../gql-ast-to-string";
|
||||||
import { WebhookEvent, WebhookManifest } from "../../types";
|
import { AsyncWebhookEventType, WebhookManifest } from "../../types";
|
||||||
import {
|
import {
|
||||||
processAsyncSaleorWebhook,
|
processAsyncSaleorWebhook,
|
||||||
SaleorWebhookError,
|
SaleorWebhookError,
|
||||||
|
@ -17,7 +17,7 @@ const debug = createDebug("SaleorAsyncWebhook");
|
||||||
interface WebhookManifestConfigurationBase {
|
interface WebhookManifestConfigurationBase {
|
||||||
name?: string;
|
name?: string;
|
||||||
webhookPath: string;
|
webhookPath: string;
|
||||||
asyncEvent: WebhookEvent;
|
asyncEvent: AsyncWebhookEventType;
|
||||||
isActive?: boolean;
|
isActive?: boolean;
|
||||||
apl: APL;
|
apl: APL;
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,7 @@ export class SaleorAsyncWebhook<TPayload = unknown> {
|
||||||
|
|
||||||
query?: string;
|
query?: string;
|
||||||
|
|
||||||
asyncEvent: WebhookEvent;
|
asyncEvent: AsyncWebhookEventType;
|
||||||
|
|
||||||
isActive?: boolean;
|
isActive?: boolean;
|
||||||
|
|
||||||
|
|
137
src/types.ts
137
src/types.ts
|
@ -45,7 +45,138 @@ export type Permission =
|
||||||
|
|
||||||
export type AppPermission = 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 {
|
export interface AppExtension {
|
||||||
/** Name which will be displayed in the dashboard */
|
/** Name which will be displayed in the dashboard */
|
||||||
|
@ -69,8 +200,8 @@ export interface AppExtension {
|
||||||
|
|
||||||
export interface WebhookManifest {
|
export interface WebhookManifest {
|
||||||
name: string;
|
name: string;
|
||||||
asyncEvents?: WebhookEvent[];
|
asyncEvents?: AsyncWebhookEventType[];
|
||||||
syncEvents?: WebhookEvent[];
|
syncEvents?: SyncWebhookEventType[];
|
||||||
/** If query is not provided, the default webhook payload will be used */
|
/** If query is not provided, the default webhook payload will be used */
|
||||||
query?: string;
|
query?: string;
|
||||||
/** The full URL of the endpoint where request will be sent */
|
/** The full URL of the endpoint where request will be sent */
|
||||||
|
|
Loading…
Reference in a new issue