Fix webhook legacy fields
This commit is contained in:
parent
4574178fff
commit
a17232632c
2 changed files with 56 additions and 3 deletions
|
@ -1,3 +1,4 @@
|
|||
import { ASTNode } from "graphql";
|
||||
import { createMocks } from "node-mocks-http";
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
|
@ -150,4 +151,37 @@ describe("SaleorAsyncWebhook", () => {
|
|||
*/
|
||||
expect(testHandler).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
/**
|
||||
* Pre 0.35.0 - then remove
|
||||
*/
|
||||
it("Allows legacy asyncEvent and subscriptionQueryAst fields, but fails if none provided", () => {
|
||||
expect(
|
||||
() =>
|
||||
new SaleorAsyncWebhook({
|
||||
asyncEvent: "ADDRESS_CREATED",
|
||||
subscriptionQueryAst: {} as unknown as ASTNode,
|
||||
apl: mockAPL,
|
||||
webhookPath: "",
|
||||
})
|
||||
).not.toThrowError();
|
||||
|
||||
expect(
|
||||
() =>
|
||||
new SaleorAsyncWebhook({
|
||||
subscriptionQueryAst: {} as unknown as ASTNode,
|
||||
apl: mockAPL,
|
||||
webhookPath: "",
|
||||
})
|
||||
).toThrowError();
|
||||
|
||||
expect(
|
||||
() =>
|
||||
new SaleorAsyncWebhook({
|
||||
asyncEvent: "ADDRESS_CREATED",
|
||||
apl: mockAPL,
|
||||
webhookPath: "",
|
||||
})
|
||||
).toThrowError();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import { ASTNode } from "graphql/index";
|
||||
import { NextApiHandler } from "next";
|
||||
|
||||
import { AsyncWebhookEventType } from "../../../types";
|
||||
|
@ -9,19 +10,37 @@ export class SaleorAsyncWebhook<TPayload = unknown> extends SaleorWebhook<TPaylo
|
|||
protected readonly eventType = "async" as const;
|
||||
|
||||
constructor(
|
||||
configuration: WebhookConfig<AsyncWebhookEventType> & {
|
||||
/**
|
||||
* Omit new required fields and make them optional. Validate in constructor.
|
||||
* In 0.35.0 remove old fields
|
||||
*/
|
||||
configuration: Omit<WebhookConfig<AsyncWebhookEventType>, "event" | "query"> & {
|
||||
/**
|
||||
* @deprecated - use `event` instead. Will be removed in 0.35.0
|
||||
*/
|
||||
asyncEvent?: AsyncWebhookEventType;
|
||||
event?: AsyncWebhookEventType;
|
||||
query?: string | ASTNode;
|
||||
}
|
||||
) {
|
||||
if (!configuration.event && !configuration.asyncEvent) {
|
||||
throw new Error("event or asyncEvent must be provided. asyncEvent is deprecated");
|
||||
}
|
||||
|
||||
if (!configuration.query && !configuration.subscriptionQueryAst) {
|
||||
throw new Error(
|
||||
"query or subscriptionQueryAst must be provided. subscriptionQueryAst is deprecated"
|
||||
);
|
||||
}
|
||||
|
||||
super({
|
||||
...configuration,
|
||||
event: configuration.event ?? configuration.asyncEvent,
|
||||
event: configuration.event! ?? configuration.asyncEvent!,
|
||||
query: configuration.query! ?? configuration.subscriptionQueryAst!,
|
||||
});
|
||||
|
||||
this.event = configuration.event ?? configuration.asyncEvent;
|
||||
this.event = configuration.event! ?? configuration.asyncEvent!;
|
||||
this.query = configuration.query! ?? configuration.subscriptionQueryAst!;
|
||||
}
|
||||
|
||||
createHandler(handlerFn: NextWebhookApiHandler<TPayload>): NextApiHandler {
|
||||
|
|
Loading…
Reference in a new issue