diff --git a/.changeset/reject-empty-payment-option-network.md b/.changeset/reject-empty-payment-option-network.md new file mode 100644 index 0000000..c7e22ee --- /dev/null +++ b/.changeset/reject-empty-payment-option-network.md @@ -0,0 +1,5 @@ +--- +"@agentcommercekit/ack-pay": patch +--- + +Reject empty-string `network` values on payment options while still allowing the field to be omitted. diff --git a/packages/ack-pay/src/schemas/payment-option.test.ts b/packages/ack-pay/src/schemas/payment-option.test.ts index 166b449..90a9ec3 100644 --- a/packages/ack-pay/src/schemas/payment-option.test.ts +++ b/packages/ack-pay/src/schemas/payment-option.test.ts @@ -35,3 +35,23 @@ describe("paymentOptionSchema amount", () => { }, ) }) + +describe("paymentOptionSchema network", () => { + it("accepts omitted network", () => { + const value = { ...paymentOption, amount: 1 } + expect(v.safeParse(valibotPaymentOptionSchema, value).success).toBe(true) + expect(zodPaymentOptionSchema.safeParse(value).success).toBe(true) + }) + + it("accepts non-empty network", () => { + const value = { ...paymentOption, amount: 1, network: "eip155:84532" } + expect(v.safeParse(valibotPaymentOptionSchema, value).success).toBe(true) + expect(zodPaymentOptionSchema.safeParse(value).success).toBe(true) + }) + + it("rejects empty network", () => { + const value = { ...paymentOption, amount: 1, network: "" } + expect(v.safeParse(valibotPaymentOptionSchema, value).success).toBe(false) + expect(zodPaymentOptionSchema.safeParse(value).success).toBe(false) + }) +}) diff --git a/packages/ack-pay/src/schemas/valibot.ts b/packages/ack-pay/src/schemas/valibot.ts index 75fc980..40c8666 100644 --- a/packages/ack-pay/src/schemas/valibot.ts +++ b/packages/ack-pay/src/schemas/valibot.ts @@ -20,7 +20,7 @@ export const paymentOptionSchema = v.object({ decimals: v.pipe(v.number(), v.integer(), v.toMinValue(0)), currency: v.string(), recipient: v.string(), - network: v.optional(v.string()), + network: v.optional(v.pipe(v.string(), v.minLength(1))), paymentService: v.optional(urlOrDidUri), receiptService: v.optional(urlOrDidUri), }) diff --git a/packages/ack-pay/src/schemas/zod.ts b/packages/ack-pay/src/schemas/zod.ts index 05cfdca..1a5e4fa 100644 --- a/packages/ack-pay/src/schemas/zod.ts +++ b/packages/ack-pay/src/schemas/zod.ts @@ -27,7 +27,7 @@ export const paymentOptionSchema = z.object({ decimals: z.number().int().nonnegative(), currency: z.string(), recipient: z.string(), - network: z.string().optional(), + network: z.string().min(1).optional(), paymentService: urlOrDidUri.optional(), receiptService: urlOrDidUri.optional(), })