diff --git a/.changeset/tolerate-null-swap-approval-fields.md b/.changeset/tolerate-null-swap-approval-fields.md new file mode 100644 index 0000000..2688206 --- /dev/null +++ b/.changeset/tolerate-null-swap-approval-fields.md @@ -0,0 +1,5 @@ +--- +"@across-protocol/app-sdk": patch +--- + +Accept `null` (in addition to `undefined`) for optional fields in `swapApprovalResponseSchema`: `approvalTxns`, `steps.originSwap`, `steps.destinationSwap`, and `swapTx`. The `/swap/approval` endpoint now serializes these as explicit `null` for cases where they don't apply (e.g. `bridgeableToBridgeable` routes), which previously caused `getSwapQuote` to throw `Invalid swap approval response`. Consumers already coerce to truthy, so behavior is unchanged. diff --git a/packages/sdk/src/api/swap-approval.ts b/packages/sdk/src/api/swap-approval.ts index 37f92ec..2bbef0e 100644 --- a/packages/sdk/src/api/swap-approval.ts +++ b/packages/sdk/src/api/swap-approval.ts @@ -201,11 +201,11 @@ export const swapApprovalResponseSchema = z.object({ data: z.string(), }), ) - .optional(), + .nullish(), steps: z.object({ - originSwap: swapStepSchema.optional(), + originSwap: swapStepSchema.nullish(), bridge: bridgeStepSchema, - destinationSwap: swapStepSchema.optional(), + destinationSwap: swapStepSchema.nullish(), }), inputToken: z.object({ address: anyChainAddress, @@ -280,7 +280,7 @@ export const swapApprovalResponseSchema = z.object({ expectedOutputAmount: bigNumberString, minOutputAmount: bigNumberString, expectedFillTime: positiveInteger, - swapTx: z.union([swapTxSchema, permitSwapTxSchema]).optional(), + swapTx: z.union([swapTxSchema, permitSwapTxSchema]).nullish(), id: z.string().optional(), }); diff --git a/packages/sdk/test/common/sdk.ts b/packages/sdk/test/common/sdk.ts index 21abac6..c5ddf43 100644 --- a/packages/sdk/test/common/sdk.ts +++ b/packages/sdk/test/common/sdk.ts @@ -7,7 +7,6 @@ import { polygon, linea, lisk, - scroll, zora, sepolia, } from "viem/chains"; @@ -22,7 +21,6 @@ export const MAINNET_SUPPORTED_CHAINS = [ polygon, linea, lisk, - scroll, zora, ] as const;