From 32e1a9b4faa33212ac107fe3ff70b983be5a58af Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 08:58:21 +0100 Subject: [PATCH 1/7] restore domain in SaleorCloudAPL to keep the API contract --- src/APL/saleor-cloud/saleor-cloud-apl.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/APL/saleor-cloud/saleor-cloud-apl.ts b/src/APL/saleor-cloud/saleor-cloud-apl.ts index be1218e2..c5909f81 100644 --- a/src/APL/saleor-cloud/saleor-cloud-apl.ts +++ b/src/APL/saleor-cloud/saleor-cloud-apl.ts @@ -52,6 +52,7 @@ const mapAuthDataToAPIBody = (authData: AuthData) => ({ saleor_api_url: authData.saleorApiUrl, jwks: authData.jwks, token: authData.token, + domain: new URL(authData.saleorApiUrl).hostname, }); const mapAPIResponseToAuthData = (response: CloudAPLAuthDataShape): AuthData => ({ From bdcef29ff49c3dfba04dfb193910ef93203e302f Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 09:02:44 +0100 Subject: [PATCH 2/7] fix test --- src/APL/saleor-cloud/saleor-cloud-apl.test.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/APL/saleor-cloud/saleor-cloud-apl.test.ts b/src/APL/saleor-cloud/saleor-cloud-apl.test.ts index fd07b93e..799b8eef 100644 --- a/src/APL/saleor-cloud/saleor-cloud-apl.test.ts +++ b/src/APL/saleor-cloud/saleor-cloud-apl.test.ts @@ -47,13 +47,17 @@ describe("APL", () => { saleor_api_url: "https://example.com/graphql/", jwks: "{}", token: "example-token", + /** + * Domain is appended to the request body, because APL requires it + */ + domain: "example.com", }), headers: { "Content-Type": "application/json", Authorization: "Bearer token", }, method: "POST", - } + }, ); }); @@ -66,7 +70,7 @@ describe("APL", () => { const apl = new SaleorCloudAPL(aplConfig); await expect(apl.set(stubAuthData)).rejects.toThrow( - "Fetch returned with non 200 status code 500" + "Fetch returned with non 200 status code 500", ); }); }); @@ -112,7 +116,7 @@ describe("APL", () => { expect(err.code).toEqual("RESPONSE_BODY_INVALID"); expect(err).toMatchInlineSnapshot( - "[SaleorCloudAplError: Cant parse response body: json error]" + "[SaleorCloudAplError: Cant parse response body: json error]", ); } }); @@ -143,7 +147,7 @@ describe("APL", () => { Authorization: "Bearer token", }, method: "GET", - } + }, ); }); @@ -190,7 +194,7 @@ describe("APL", () => { Authorization: "Bearer token", }, method: "GET", - } + }, ); }); }); From 91b9d69ad6f7d70c58780b7fddac85e071713cfe Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 09:27:26 +0100 Subject: [PATCH 3/7] fix export path --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index fc0b2588..ee205018 100644 --- a/package.json +++ b/package.json @@ -164,9 +164,9 @@ "require": "./handlers/fetch-api/index.js" }, "./handlers/next-app-router": { - "types": "./handlers/fetch-api/index.d.ts", - "import": "./handlers/fetch-api/index.mjs", - "require": "./handlers/fetch-api/index.js" + "types": "./handlers/next-app-router/index.d.ts", + "import": "./handlers/next-app-router/index.mjs", + "require": "./handlers/next-app-router/index.js" }, "./handlers/aws-lambda": { "types": "./handlers/aws-lambda/index.d.ts", From 1cfabfb7fa57dcf0e9277252a1f344263cea71c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20=C5=BBuraw?= <9116238+krzysztofzuraw@users.noreply.github.com> Date: Thu, 20 Mar 2025 09:41:46 +0100 Subject: [PATCH 4/7] add changeset for release --- .changeset/icy-cloths-look.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/icy-cloths-look.md diff --git a/.changeset/icy-cloths-look.md b/.changeset/icy-cloths-look.md new file mode 100644 index 00000000..1e25b8af --- /dev/null +++ b/.changeset/icy-cloths-look.md @@ -0,0 +1,5 @@ +--- +"@saleor/app-sdk": patch +--- + +Remove me after testing release dev From 96b72fe415c9bdb045d5ae63a01bfa7e5a62ac8d Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 11:20:58 +0100 Subject: [PATCH 5/7] Loose handler response to be Response, not NextResponse --- .../platforms/next-app-router/platform-adapter.ts | 8 ++++---- .../next-app-router/saleor-webhooks/saleor-webhook.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/handlers/platforms/next-app-router/platform-adapter.ts b/src/handlers/platforms/next-app-router/platform-adapter.ts index 7f94d61f..f2b398e7 100644 --- a/src/handlers/platforms/next-app-router/platform-adapter.ts +++ b/src/handlers/platforms/next-app-router/platform-adapter.ts @@ -1,12 +1,12 @@ -import { NextRequest, NextResponse } from "next/server"; +import { NextRequest } from "next/server"; import { WebApiAdapter } from "@/handlers/platforms/fetch-api"; export type NextAppRouterHandlerInput = NextRequest; -export type NextAppRouterHandler = (req: NextRequest) => NextResponse | Promise; +export type NextAppRouterHandler = (req: NextRequest) => Response | Promise; -export class NextAppRouterAdapter extends WebApiAdapter { +export class NextAppRouterAdapter extends WebApiAdapter { constructor(public request: NextRequest) { - super(request, NextResponse); + super(request, Response); } } diff --git a/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts index 568288ef..1a74a817 100644 --- a/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts +++ b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts @@ -22,7 +22,7 @@ export type WebhookConfig export type NextAppRouterWebhookHandler< TPayload = unknown, TRequest extends NextRequest = NextRequest, - TResponse extends NextResponse = NextResponse, + TResponse extends Response = NextResponse, > = WebApiWebhookHandler; export abstract class SaleorNextAppRouterWebhook extends GenericSaleorWebhook< @@ -30,7 +30,7 @@ export abstract class SaleorNextAppRouterWebhook extends Gen TPayload > { createHandler(handlerFn: NextAppRouterWebhookHandler): NextAppRouterHandler { - return async (req): Promise => { + return async (req): Promise => { const adapter = new NextAppRouterAdapter(req); const prepareRequestResult = await super.prepareRequest(adapter); From d4ffb6e1a2198179d5dd0ea8ead130867f26f664 Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 11:49:13 +0100 Subject: [PATCH 6/7] fix types --- .../create-protected-handler.ts | 2 +- .../saleor-sync-webhook.test.ts | 34 +++++++++++++++++++ .../saleor-webhooks/saleor-webhook.ts | 4 +-- 3 files changed, 37 insertions(+), 3 deletions(-) create mode 100644 src/handlers/platforms/next-app-router/saleor-webhooks/saleor-sync-webhook.test.ts diff --git a/src/handlers/platforms/next-app-router/create-protected-handler.ts b/src/handlers/platforms/next-app-router/create-protected-handler.ts index 6d36dd04..7329456b 100644 --- a/src/handlers/platforms/next-app-router/create-protected-handler.ts +++ b/src/handlers/platforms/next-app-router/create-protected-handler.ts @@ -12,7 +12,7 @@ import { NextAppRouterAdapter, NextAppRouterHandler } from "./platform-adapter"; export type NextAppRouterProtectedHandler = ( request: NextRequest, ctx: ProtectedHandlerContext, -) => NextResponse | Promise; +) => Response | Promise; export const createProtectedHandler = ( diff --git a/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-sync-webhook.test.ts b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-sync-webhook.test.ts new file mode 100644 index 00000000..67adc335 --- /dev/null +++ b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-sync-webhook.test.ts @@ -0,0 +1,34 @@ +import { NextResponse } from "next/server"; +import { describe, expect, it } from "vitest"; + +import { FileAPL } from "@/APL/file"; +import { SaleorSyncWebhook } from "@/handlers/platforms/next-app-router"; + +describe("SaleorSyncWebhook (Next App Router)", () => { + it("Constructs (and types are right)", () => { + /** + * This test doesn't test anything in the runtime. + * It's meant to ensure types are correct. If types are wrong, the project will not compile. + */ + expect.assertions(0); + + const handler = new SaleorSyncWebhook<{ foo: string }>({ + apl: new FileAPL(), + event: "CHECKOUT_CALCULATE_TAXES", + name: "asd", + query: "{}", + webhookPath: "/", + }); + + handler.createHandler((req, ctx) => { + const { body } = req; + + const { event } = ctx; + + return NextResponse.json({ + event, + body, + }); + }); + }); +}); diff --git a/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts index 1a74a817..225714c7 100644 --- a/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts +++ b/src/handlers/platforms/next-app-router/saleor-webhooks/saleor-webhook.ts @@ -1,4 +1,4 @@ -import { NextRequest, NextResponse } from "next/server"; +import { NextRequest } from "next/server"; import { createDebug } from "@/debug"; import { WebApiWebhookHandler } from "@/handlers/platforms/fetch-api"; @@ -22,7 +22,7 @@ export type WebhookConfig export type NextAppRouterWebhookHandler< TPayload = unknown, TRequest extends NextRequest = NextRequest, - TResponse extends Response = NextResponse, + TResponse extends Response = Response, > = WebApiWebhookHandler; export abstract class SaleorNextAppRouterWebhook extends GenericSaleorWebhook< From fa1d081fd4ea5cc17dd9b7c885c03950a2c2339b Mon Sep 17 00:00:00 2001 From: Lukasz Ostrowski Date: Thu, 20 Mar 2025 11:52:56 +0100 Subject: [PATCH 7/7] remove changeset --- .changeset/icy-cloths-look.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/icy-cloths-look.md diff --git a/.changeset/icy-cloths-look.md b/.changeset/icy-cloths-look.md deleted file mode 100644 index 1e25b8af..00000000 --- a/.changeset/icy-cloths-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@saleor/app-sdk": patch ---- - -Remove me after testing release dev