paygate 5.1.0 → 5.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Ghost Pay — partner SDK.
3
+ *
4
+ * Strategic partners (e.g. Polymarket) use this helper to create payment links
5
+ * and verify Ghost Pay webhooks from their server-side integration.
6
+ *
7
+ * Example:
8
+ * const partner = new GhostPayPartner({ apiKey: process.env.ARISPAY_API_KEY });
9
+ * const link = await partner.createPaymentLink({ amountCents: 1000, reference: "order-123" });
10
+ * // In webhook handler:
11
+ * const payload = partner.verifyWebhook(sig, ts, rawBody);
12
+ */
13
+ import { createHmac, timingSafeEqual } from "node:crypto";
14
+ export class GhostPayPartner {
15
+ apiUrl;
16
+ apiKey;
17
+ webhookSecret;
18
+ constructor(config) {
19
+ this.apiUrl = (config.apiUrl ?? "https://api.arispay.app").replace(/\/$/, "");
20
+ this.apiKey = config.apiKey;
21
+ this.webhookSecret = config.webhookSecret;
22
+ }
23
+ async request(path, body) {
24
+ const url = `${this.apiUrl}${path}`;
25
+ const res = await fetch(url, {
26
+ method: body === undefined ? "GET" : "POST",
27
+ headers: {
28
+ Authorization: `Bearer ${this.apiKey}`,
29
+ Accept: "application/json",
30
+ ...(body !== undefined ? { "Content-Type": "application/json" } : {}),
31
+ },
32
+ body: body !== undefined ? JSON.stringify(body) : undefined,
33
+ });
34
+ if (!res.ok) {
35
+ let message = `ArisPay API error ${res.status}`;
36
+ try {
37
+ const json = (await res.json());
38
+ if (json.error?.message)
39
+ message = json.error.message;
40
+ if (json.error?.code)
41
+ message = `${json.error.code}: ${message}`;
42
+ }
43
+ catch {
44
+ // ignore non-JSON error bodies
45
+ }
46
+ throw new Error(message);
47
+ }
48
+ return (await res.json());
49
+ }
50
+ /**
51
+ * Create a Ghost Pay payment link for the configured merchant.
52
+ */
53
+ async createPaymentLink(input) {
54
+ return this.request("/v1/merchants/me/ghost/payment-links", {
55
+ amountCents: input.amountCents,
56
+ currency: input.currency ?? "USD",
57
+ memo: input.memo,
58
+ reference: input.reference,
59
+ expiresInMinutes: input.expiresInMinutes,
60
+ });
61
+ }
62
+ /**
63
+ * Verify the HMAC-SHA256 signature on a Ghost Pay webhook.
64
+ *
65
+ * Throws if the signature is missing, malformed, or does not match the
66
+ * configured webhook secret.
67
+ */
68
+ verifyWebhook(signatureHeader, timestampHeader, rawBody) {
69
+ if (!this.webhookSecret) {
70
+ throw new Error("GhostPayPartner webhookSecret is required to verify webhooks");
71
+ }
72
+ if (!signatureHeader || !timestampHeader) {
73
+ throw new Error("Missing Ghost webhook signature or timestamp header");
74
+ }
75
+ const timestamp = Number(timestampHeader);
76
+ if (!Number.isInteger(timestamp) || timestamp <= 0) {
77
+ throw new Error("Invalid Ghost webhook timestamp header");
78
+ }
79
+ // Reject webhooks older than 5 minutes to mitigate replay attacks.
80
+ const nowSeconds = Math.floor(Date.now() / 1000);
81
+ if (nowSeconds - timestamp > 300) {
82
+ throw new Error("Ghost webhook timestamp too old");
83
+ }
84
+ const expected = createHmac("sha256", this.webhookSecret)
85
+ .update(`${timestamp}.${rawBody}`)
86
+ .digest("hex");
87
+ const expectedBuf = Buffer.from(expected, "hex");
88
+ const actualBuf = Buffer.from(signatureHeader, "hex");
89
+ if (expectedBuf.length !== actualBuf.length || !timingSafeEqual(expectedBuf, actualBuf)) {
90
+ throw new Error("Invalid Ghost webhook signature");
91
+ }
92
+ return JSON.parse(rawBody);
93
+ }
94
+ }
95
+ //# sourceMappingURL=ghost-partner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost-partner.js","sourceRoot":"","sources":["../src/ghost-partner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ghost-partner.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost-partner.test.d.ts","sourceRoot":"","sources":["../src/ghost-partner.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Unit tests for the GhostPayPartner SDK helper.
3
+ */
4
+ import { createHmac } from "node:crypto";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { GhostPayPartner } from "./ghost-partner.js";
7
+ describe("GhostPayPartner", () => {
8
+ let fetchMock;
9
+ beforeEach(() => {
10
+ fetchMock = vi.fn();
11
+ vi.stubGlobal("fetch", fetchMock);
12
+ });
13
+ afterEach(() => {
14
+ vi.unstubAllGlobals();
15
+ });
16
+ describe("createPaymentLink", () => {
17
+ it("POSTs to the merchant payment-link endpoint", async () => {
18
+ fetchMock.mockResolvedValue({
19
+ ok: true,
20
+ json: async () => ({
21
+ linkId: "link_1",
22
+ token: "tok",
23
+ amountCents: 1000,
24
+ currency: "USD",
25
+ memo: null,
26
+ reference: "ref",
27
+ status: "open",
28
+ expiresAt: null,
29
+ url: "https://arispay.app/ghost/pay/tok",
30
+ }),
31
+ });
32
+ const partner = new GhostPayPartner({ apiKey: "mp_live_test" });
33
+ const link = await partner.createPaymentLink({
34
+ amountCents: 1000,
35
+ reference: "ref",
36
+ });
37
+ expect(link.url).toBe("https://arispay.app/ghost/pay/tok");
38
+ expect(fetchMock).toHaveBeenCalledWith("https://api.arispay.app/v1/merchants/me/ghost/payment-links", expect.objectContaining({
39
+ method: "POST",
40
+ headers: expect.objectContaining({
41
+ Authorization: "Bearer mp_live_test",
42
+ "Content-Type": "application/json",
43
+ }),
44
+ }));
45
+ });
46
+ it("throws on API error", async () => {
47
+ fetchMock.mockResolvedValue({
48
+ ok: false,
49
+ status: 400,
50
+ json: async () => ({ error: { code: "INVALID_REQUEST", message: "bad" } }),
51
+ });
52
+ const partner = new GhostPayPartner({ apiKey: "mp_live_test" });
53
+ await expect(partner.createPaymentLink({ amountCents: -1 })).rejects.toThrow("INVALID_REQUEST: bad");
54
+ });
55
+ });
56
+ describe("verifyWebhook", () => {
57
+ it("returns the payload when the signature is valid", () => {
58
+ const secret = "super-secret-webhook-key";
59
+ const partner = new GhostPayPartner({ apiKey: "mp_live_test", webhookSecret: secret });
60
+ const payload = {
61
+ type: "ghost.payment.succeeded",
62
+ data: {
63
+ paymentId: "gp_1",
64
+ merchantReference: "ref-1",
65
+ amountCents: 1000,
66
+ currency: "USD",
67
+ feeCents: 15,
68
+ settlementProvider: "usdc",
69
+ settlementTxRef: "0xabc",
70
+ reference: "order-123",
71
+ settledAt: "2026-06-17T00:00:00.000Z",
72
+ },
73
+ };
74
+ const body = JSON.stringify(payload);
75
+ const timestamp = Math.floor(Date.now() / 1000);
76
+ const signature = createHmac("sha256", secret)
77
+ .update(`${timestamp}.${body}`)
78
+ .digest("hex");
79
+ const result = partner.verifyWebhook(signature, String(timestamp), body);
80
+ expect(result.type).toBe("ghost.payment.succeeded");
81
+ expect(result.data.paymentId).toBe("gp_1");
82
+ });
83
+ it("throws when the signature is invalid", () => {
84
+ const partner = new GhostPayPartner({
85
+ apiKey: "mp_live_test",
86
+ webhookSecret: "secret",
87
+ });
88
+ const ts = String(Math.floor(Date.now() / 1000));
89
+ expect(() => partner.verifyWebhook("bad", ts, "{}")).toThrow("Invalid Ghost webhook signature");
90
+ });
91
+ it("throws when the timestamp is too old", () => {
92
+ const partner = new GhostPayPartner({
93
+ apiKey: "mp_live_test",
94
+ webhookSecret: "secret",
95
+ });
96
+ const oldTs = String(Math.floor(Date.now() / 1000) - 400);
97
+ expect(() => partner.verifyWebhook("a".repeat(64), oldTs, "{}")).toThrow("too old");
98
+ });
99
+ });
100
+ });
101
+ //# sourceMappingURL=ghost-partner.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ghost-partner.test.js","sourceRoot":"","sources":["../src/ghost-partner.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -19,9 +19,11 @@
19
19
  * shim; a deprecation warning fires on first use. The shim is removed
20
20
  * in v4.
21
21
  */
22
- export { handlePaywall, DEFAULT_FACILITATOR, DEFAULT_API_URL } from './core.js';
23
- export type { PaygateConfig, RoutePrice, PaywallResult, DiscoveryRateLimitConfig } from './core.js';
24
- export { paygate } from './express.js';
25
- export { paygatePlugin } from './fastify.js';
26
- export { default as paygatePluginDefault } from './fastify.js';
22
+ export { handlePaywall, DEFAULT_FACILITATOR, DEFAULT_API_URL } from "./core.js";
23
+ export type { PaygateConfig, PaygateCurrency, RoutePrice, PaywallResult, DiscoveryRateLimitConfig, } from "./core.js";
24
+ export { paygate } from "./express.js";
25
+ export { paygatePlugin } from "./fastify.js";
26
+ export { default as paygatePluginDefault } from "./fastify.js";
27
+ export { GhostPayPartner } from "./ghost-partner.js";
28
+ export type { GhostPayPartnerConfig, GhostPaymentLink, GhostWebhookPayload, } from "./ghost-partner.js";
27
29
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAC;AAGpG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAChF,YAAY,EACV,aAAa,EACb,eAAe,EACf,UAAU,EACV,aAAa,EACb,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAGvC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,oBAAoB,CAAC"}
package/dist/index.js CHANGED
@@ -20,10 +20,12 @@
20
20
  * in v4.
21
21
  */
22
22
  // Core (framework-agnostic)
23
- export { handlePaywall, DEFAULT_FACILITATOR, DEFAULT_API_URL } from './core.js';
23
+ export { handlePaywall, DEFAULT_FACILITATOR, DEFAULT_API_URL } from "./core.js";
24
24
  // Express
25
- export { paygate } from './express.js';
25
+ export { paygate } from "./express.js";
26
26
  // Fastify
27
- export { paygatePlugin } from './fastify.js';
28
- export { default as paygatePluginDefault } from './fastify.js';
27
+ export { paygatePlugin } from "./fastify.js";
28
+ export { default as paygatePluginDefault } from "./fastify.js";
29
+ // Ghost Pay — strategic partner SDK
30
+ export { GhostPayPartner } from "./ghost-partner.js";
29
31
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAGhF,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAShF,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,UAAU;AACV,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAE/D,oCAAoC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "paygate",
3
- "version": "5.1.0",
4
- "description": "Accept payment from AI agents in two lines of code. Gate any Express or Fastify route with an x402 paywall backed by ArisPay merchants don't hold keys, agents pay per-request, USDC settles in seconds on Base mainnet.",
3
+ "version": "5.3.1",
4
+ "description": "Accept payment from AI agents in two lines of code. Gate any Express or Fastify route with an x402 paywall — USD (USDC) or EUR (EURC) pricing, settled on Base mainnet via ArisPay's facilitator.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "types": "./dist/index.d.ts",
@@ -23,14 +23,19 @@
23
23
  "build": "tsc",
24
24
  "dev": "tsc --watch",
25
25
  "type-check": "tsc --noEmit",
26
+ "test": "vitest run --root ../.. packages/paygate/src/ghost-partner.test.ts",
26
27
  "prepublishOnly": "pnpm build"
27
28
  },
28
29
  "dependencies": {},
29
30
  "peerDependencies": {
31
+ "ethers": ">=6.0.0",
30
32
  "express": ">=4.0.0",
31
33
  "fastify": ">=4.0.0"
32
34
  },
33
35
  "peerDependenciesMeta": {
36
+ "ethers": {
37
+ "optional": true
38
+ },
34
39
  "express": {
35
40
  "optional": true
36
41
  },
@@ -41,8 +46,9 @@
41
46
  "devDependencies": {
42
47
  "@types/express": "^5.0.0",
43
48
  "@types/node": "^22.0.0",
49
+ "ethers": "^6.16.0",
44
50
  "express": "^5.0.0",
45
- "fastify": "^5.0.0",
51
+ "fastify": "^5.8.5",
46
52
  "typescript": "^5.7.0"
47
53
  },
48
54
  "files": [
@@ -67,11 +73,18 @@
67
73
  "polygon",
68
74
  "web3",
69
75
  "eip-3009",
70
- "payment-gateway"
76
+ "payment-gateway",
77
+ "eur",
78
+ "eurc",
79
+ "euro",
80
+ "agentic-commerce",
81
+ "agent-payments",
82
+ "monetize-api"
71
83
  ],
72
84
  "homepage": "https://arispay.app",
73
85
  "repository": {
74
86
  "type": "git",
75
87
  "url": "https://github.com/arispay-inc/ArisPay"
76
- }
88
+ },
89
+ "private": false
77
90
  }