diff --git a/.changeset/tender-bags-give.md b/.changeset/tender-bags-give.md new file mode 100644 index 0000000..3e10f6f --- /dev/null +++ b/.changeset/tender-bags-give.md @@ -0,0 +1,6 @@ +--- +"agentcommercekit": patch +"@agentcommercekit/ack-pay": patch +--- + +Allow providing string value for payment option amount. diff --git a/demos/e2e/src/agent.ts b/demos/e2e/src/agent.ts index 5fb9798..1bf9258 100644 --- a/demos/e2e/src/agent.ts +++ b/demos/e2e/src/agent.ts @@ -212,7 +212,7 @@ ${colors.bold(otherAgent.did)} paymentOptions: [ { id: crypto.randomUUID(), - amount: 500, + amount: BigInt(500).toString(), decimals: 2, currency: "USD", recipient: this.walletDid diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index c9007a1..8091d40 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -61,7 +61,7 @@ app.get("/", async (c): Promise> => { // USDC on Base { id: "usdc-base-sepolia", - amount: 50000, // 5 cents in USDC subunits + amount: BigInt(50000).toString(), // 5 cents in USDC subunits decimals: 6, currency: "USDC", recipient: serverIdentity.crypto.address, // This could be a did:pkh diff --git a/packages/ack-pay/README.md b/packages/ack-pay/README.md index fb6db8c..c14e895 100644 --- a/packages/ack-pay/README.md +++ b/packages/ack-pay/README.md @@ -34,9 +34,9 @@ const paymentRequest = { paymentOptions: [ { id: "option-1", - amount: 1000, - decimals: 2, - currency: "USD", + amount: new BigInt(100_000_000).toString(), // 100 USDC + decimals: 6, + currency: "USDC", recipient: "did:web:payment.example.com", paymentService: "https://pay.example.com" } diff --git a/packages/ack-pay/src/payment-request.test.ts b/packages/ack-pay/src/payment-request.test.ts index e2d3178..c2cec10 100644 --- a/packages/ack-pay/src/payment-request.test.ts +++ b/packages/ack-pay/src/payment-request.test.ts @@ -8,7 +8,7 @@ describe("isPaymentRequest", () => { paymentOptions: [ { id: "test-payment-option-id", - amount: 100, + amount: BigInt(100).toString(), decimals: 2, currency: "USD", recipient: "did:example:recipient" diff --git a/packages/ack-pay/src/schemas/valibot.ts b/packages/ack-pay/src/schemas/valibot.ts index 5e575ad..13882f8 100644 --- a/packages/ack-pay/src/schemas/valibot.ts +++ b/packages/ack-pay/src/schemas/valibot.ts @@ -5,7 +5,7 @@ const urlOrDidUri = v.union([v.pipe(v.string(), v.url()), didUriSchema]) export const paymentOptionSchema = v.object({ id: v.string(), - amount: v.pipe(v.number(), v.integer(), v.gtValue(0)), + amount: v.union([v.pipe(v.number(), v.integer(), v.gtValue(0)), v.string()]), decimals: v.pipe(v.number(), v.integer(), v.toMinValue(0)), currency: v.string(), recipient: v.string(), diff --git a/packages/ack-pay/src/schemas/zod/v3.ts b/packages/ack-pay/src/schemas/zod/v3.ts index 9f572fb..2c6dadc 100644 --- a/packages/ack-pay/src/schemas/zod/v3.ts +++ b/packages/ack-pay/src/schemas/zod/v3.ts @@ -5,7 +5,7 @@ const urlOrDidUri = z.union([z.string().url(), didUriSchema]) export const paymentOptionSchema = z.object({ id: z.string(), - amount: z.number().int().positive(), + amount: z.union([z.number().int().positive(), z.string()]), decimals: z.number().int().nonnegative(), currency: z.string(), recipient: z.string(), diff --git a/packages/ack-pay/src/schemas/zod/v4.ts b/packages/ack-pay/src/schemas/zod/v4.ts index e84bde1..e833934 100644 --- a/packages/ack-pay/src/schemas/zod/v4.ts +++ b/packages/ack-pay/src/schemas/zod/v4.ts @@ -5,7 +5,7 @@ const urlOrDidUri = z.union([z.url(), didUriSchema]) export const paymentOptionSchema = z.object({ id: z.string(), - amount: z.number().int().positive(), + amount: z.union([z.number().int().positive(), z.string()]), decimals: z.number().int().nonnegative(), currency: z.string(), recipient: z.string(), diff --git a/packages/agentcommercekit/README.md b/packages/agentcommercekit/README.md index 1158359..2a8582b 100644 --- a/packages/agentcommercekit/README.md +++ b/packages/agentcommercekit/README.md @@ -125,9 +125,9 @@ const paymentRequest = { paymentOptions: [ { id: "option-1", - amount: 1000, - decimals: 2, - currency: "USD", + amount: BigInt(100_000_000).toString(), // 100 USDC + decimals: 6, + currency: "USDC", recipient: "did:web:payment.example.com", paymentService: "https://pay.example.com" }