-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathsaleor-webhook.ts
More file actions
47 lines (39 loc) · 1.51 KB
/
saleor-webhook.ts
File metadata and controls
47 lines (39 loc) · 1.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { NextRequest } from "next/server.js";
import { createDebug } from "@/debug";
import { WebApiWebhookHandler } from "@/handlers/platforms/fetch-api";
import {
GenericSaleorWebhook,
GenericWebhookConfig,
} from "@/handlers/shared/generic-saleor-webhook";
import { AsyncWebhookEventType, SyncWebhookEventType } from "@/types";
import {
NextAppRouterAdapter,
NextAppRouterHandler,
NextAppRouterHandlerInput,
} from "../platform-adapter";
const debug = createDebug("SaleorWebhook");
export type WebhookConfig<Event = AsyncWebhookEventType | SyncWebhookEventType> =
GenericWebhookConfig<NextAppRouterHandlerInput, Event>;
export type NextAppRouterWebhookHandler<
TPayload = unknown,
TRequest extends NextRequest = NextRequest,
TResponse extends Response = Response,
> = WebApiWebhookHandler<TPayload, TRequest, TResponse>;
export abstract class SaleorNextAppRouterWebhook<TPayload = unknown> extends GenericSaleorWebhook<
NextAppRouterHandlerInput,
TPayload
> {
createHandler(handlerFn: NextAppRouterWebhookHandler<TPayload>): NextAppRouterHandler {
return async (req): Promise<Response> => {
const adapter = new NextAppRouterAdapter(req);
const prepareRequestResult = await super.prepareRequest<NextAppRouterAdapter>(adapter);
if (prepareRequestResult.result === "sendResponse") {
return prepareRequestResult.response;
}
debug("Incoming request validated. Call handlerFn");
return handlerFn(req, {
...prepareRequestResult.context,
});
};
}
}