@xodn348/clawpay 0.1.0

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 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import Stripe from "stripe";
2
+ import type { PaymentRequest, PaymentResult, BalanceInfo, Transaction, RefundResult } from "./types.js";
3
+ /**
4
+ * Returns a singleton Stripe client.
5
+ * Reads STRIPE_SECRET_KEY from the environment at call time, not at module load time.
6
+ */
7
+ export declare function getStripe(): Stripe;
8
+ /**
9
+ * Resets the cached Stripe client.
10
+ * Useful in tests or after rotating the API key.
11
+ */
12
+ export declare function resetStripe(): void;
13
+ /**
14
+ * Checks that the Stripe key is valid by calling the balance endpoint.
15
+ * Returns the account object name on success, or an error message on failure.
16
+ */
17
+ export declare function verifyConnection(): Promise<{
18
+ valid: boolean;
19
+ accountName?: string;
20
+ error?: string;
21
+ }>;
22
+ /**
23
+ * Creates a PaymentIntent and immediately confirms it (off-session).
24
+ * Guardrail checks run before any Stripe call so no partial state is left on rejection.
25
+ */
26
+ export declare function createPayment(request: PaymentRequest): Promise<PaymentResult>;
27
+ /**
28
+ * Returns the current Stripe account balance split into available and pending funds.
29
+ */
30
+ export declare function getBalance(): Promise<BalanceInfo>;
31
+ /**
32
+ * Lists recent PaymentIntents ordered by creation time (newest first).
33
+ * Capped at 100 per Stripe API limits.
34
+ */
35
+ export declare function listTransactions(limit?: number): Promise<Transaction[]>;
36
+ /**
37
+ * Issues a full refund for an existing PaymentIntent.
38
+ * Partial refunds are not supported by design — keep the surface area minimal.
39
+ */
40
+ export declare function refundPayment(paymentIntentId: string): Promise<RefundResult>;
41
+ //# sourceMappingURL=stripe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.d.ts","sourceRoot":"","sources":["../src/stripe.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAKxG;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAWlC;AAED;;;GAGG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC;IAChD,KAAK,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CASD;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA4EnF;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,CAOvD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,SAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAWzE;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAgBlF"}
package/dist/stripe.js ADDED
@@ -0,0 +1,164 @@
1
+ import Stripe from "stripe";
2
+ import { loadConfig, checkGuardrails, recordSpend } from "./config.js";
3
+ import { auditPayment, auditRefund } from "./guardrails.js";
4
+ // Lazily-initialized Stripe client — avoids crashing at import time when the key is absent.
5
+ let _stripe = null;
6
+ /**
7
+ * Returns a singleton Stripe client.
8
+ * Reads STRIPE_SECRET_KEY from the environment at call time, not at module load time.
9
+ */
10
+ export function getStripe() {
11
+ if (_stripe)
12
+ return _stripe;
13
+ const key = process.env["STRIPE_SECRET_KEY"];
14
+ if (!key) {
15
+ throw new Error("STRIPE_SECRET_KEY environment variable is not set. " +
16
+ "Run 'clawpay install' to configure or set it manually.");
17
+ }
18
+ _stripe = new Stripe(key);
19
+ return _stripe;
20
+ }
21
+ /**
22
+ * Resets the cached Stripe client.
23
+ * Useful in tests or after rotating the API key.
24
+ */
25
+ export function resetStripe() {
26
+ _stripe = null;
27
+ }
28
+ /**
29
+ * Checks that the Stripe key is valid by calling the balance endpoint.
30
+ * Returns the account object name on success, or an error message on failure.
31
+ */
32
+ export async function verifyConnection() {
33
+ try {
34
+ const stripe = getStripe();
35
+ const balance = await stripe.balance.retrieve();
36
+ return { valid: true, accountName: balance.object };
37
+ }
38
+ catch (err) {
39
+ const message = err instanceof Error ? err.message : "Unknown error";
40
+ return { valid: false, error: message };
41
+ }
42
+ }
43
+ /**
44
+ * Creates a PaymentIntent and immediately confirms it (off-session).
45
+ * Guardrail checks run before any Stripe call so no partial state is left on rejection.
46
+ */
47
+ export async function createPayment(request) {
48
+ const guardrail = checkGuardrails(request.amount, request.currency);
49
+ if (!guardrail.allowed) {
50
+ auditPayment({
51
+ amount: request.amount,
52
+ currency: request.currency,
53
+ status: "blocked",
54
+ reason: guardrail.reason,
55
+ });
56
+ return { success: false, error: `Payment blocked: ${guardrail.reason}` };
57
+ }
58
+ const config = loadConfig();
59
+ if (!config.stripe.customerId || !config.stripe.paymentMethodId) {
60
+ return {
61
+ success: false,
62
+ error: "Payment method not configured. Call setup_payment tool first.",
63
+ };
64
+ }
65
+ try {
66
+ const stripe = getStripe();
67
+ // Idempotency key prevents duplicate charges when the network retries a request.
68
+ const idempotencyKey = request.idempotencyKey ??
69
+ `clawpay-${Date.now()}-${Math.random().toString(36).slice(2)}`;
70
+ const intent = await stripe.paymentIntents.create({
71
+ amount: request.amount,
72
+ currency: request.currency.toLowerCase(),
73
+ customer: config.stripe.customerId,
74
+ payment_method: config.stripe.paymentMethodId,
75
+ description: request.description,
76
+ confirm: true,
77
+ // off_session is required: agent payments happen without the user present.
78
+ off_session: true,
79
+ metadata: {
80
+ source: "clawpay",
81
+ ...request.metadata,
82
+ },
83
+ }, { idempotencyKey });
84
+ const succeeded = intent.status === "succeeded";
85
+ if (succeeded) {
86
+ recordSpend(request.amount);
87
+ }
88
+ auditPayment({
89
+ amount: request.amount,
90
+ currency: request.currency,
91
+ paymentIntentId: intent.id,
92
+ status: succeeded ? "success" : "failed",
93
+ reason: succeeded ? undefined : `Stripe status: ${intent.status}`,
94
+ });
95
+ return {
96
+ success: succeeded,
97
+ paymentIntentId: intent.id,
98
+ amount: intent.amount,
99
+ currency: intent.currency,
100
+ status: intent.status,
101
+ error: succeeded ? undefined : `Payment status: ${intent.status}`,
102
+ };
103
+ }
104
+ catch (err) {
105
+ const message = err instanceof Error ? err.message : "Payment failed";
106
+ auditPayment({
107
+ amount: request.amount,
108
+ currency: request.currency,
109
+ status: "failed",
110
+ reason: message,
111
+ });
112
+ return { success: false, error: message };
113
+ }
114
+ }
115
+ /**
116
+ * Returns the current Stripe account balance split into available and pending funds.
117
+ */
118
+ export async function getBalance() {
119
+ const stripe = getStripe();
120
+ const balance = await stripe.balance.retrieve();
121
+ return {
122
+ available: balance.available.map((b) => ({ amount: b.amount, currency: b.currency })),
123
+ pending: balance.pending.map((b) => ({ amount: b.amount, currency: b.currency })),
124
+ };
125
+ }
126
+ /**
127
+ * Lists recent PaymentIntents ordered by creation time (newest first).
128
+ * Capped at 100 per Stripe API limits.
129
+ */
130
+ export async function listTransactions(limit = 10) {
131
+ const stripe = getStripe();
132
+ const intents = await stripe.paymentIntents.list({ limit: Math.min(limit, 100) });
133
+ return intents.data.map((pi) => ({
134
+ id: pi.id,
135
+ amount: pi.amount,
136
+ currency: pi.currency,
137
+ description: pi.description ?? "",
138
+ status: pi.status,
139
+ created: pi.created,
140
+ }));
141
+ }
142
+ /**
143
+ * Issues a full refund for an existing PaymentIntent.
144
+ * Partial refunds are not supported by design — keep the surface area minimal.
145
+ */
146
+ export async function refundPayment(paymentIntentId) {
147
+ try {
148
+ const stripe = getStripe();
149
+ const refund = await stripe.refunds.create({ payment_intent: paymentIntentId });
150
+ auditRefund({ refundId: refund.id, amount: refund.amount, status: "success" });
151
+ return {
152
+ success: true,
153
+ refundId: refund.id,
154
+ amount: refund.amount,
155
+ status: refund.status ?? "unknown",
156
+ };
157
+ }
158
+ catch (err) {
159
+ const message = err instanceof Error ? err.message : "Refund failed";
160
+ auditRefund({ status: "failed", reason: message });
161
+ return { success: false, error: message };
162
+ }
163
+ }
164
+ //# sourceMappingURL=stripe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe.js","sourceRoot":"","sources":["../src/stripe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ export interface ClawPayConfig {
2
+ stripe: {
3
+ customerId?: string;
4
+ paymentMethodId?: string;
5
+ };
6
+ server: {
7
+ port: number;
8
+ };
9
+ guardrails: {
10
+ maxAmountPerTransactionCents: number;
11
+ maxDailySpendCents: number;
12
+ allowedCurrencies: string[];
13
+ requireConfirmation: boolean;
14
+ };
15
+ }
16
+ export declare const DEFAULT_CONFIG: ClawPayConfig;
17
+ export interface PaymentRequest {
18
+ amount: number;
19
+ currency: string;
20
+ description: string;
21
+ metadata?: Record<string, string>;
22
+ idempotencyKey?: string;
23
+ }
24
+ export interface PaymentResult {
25
+ success: boolean;
26
+ paymentIntentId?: string;
27
+ amount?: number;
28
+ currency?: string;
29
+ status?: string;
30
+ error?: string;
31
+ }
32
+ export interface Transaction {
33
+ id: string;
34
+ amount: number;
35
+ currency: string;
36
+ description: string;
37
+ status: string;
38
+ created: number;
39
+ }
40
+ export interface BalanceInfo {
41
+ available: Array<{
42
+ amount: number;
43
+ currency: string;
44
+ }>;
45
+ pending: Array<{
46
+ amount: number;
47
+ currency: string;
48
+ }>;
49
+ }
50
+ export interface GuardrailCheck {
51
+ allowed: boolean;
52
+ reason?: string;
53
+ }
54
+ export interface RefundResult {
55
+ success: boolean;
56
+ refundId?: string;
57
+ amount?: number;
58
+ status?: string;
59
+ error?: string;
60
+ }
61
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,UAAU,EAAE;QACV,4BAA4B,EAAE,MAAM,CAAC;QACrC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,EAAE,CAAC;QAC5B,mBAAmB,EAAE,OAAO,CAAC;KAC9B,CAAC;CACH;AAED,eAAO,MAAM,cAAc,EAAE,aAS5B,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,OAAO,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACtD;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
package/dist/types.js ADDED
@@ -0,0 +1,11 @@
1
+ export const DEFAULT_CONFIG = {
2
+ stripe: {},
3
+ server: { port: 3100 },
4
+ guardrails: {
5
+ maxAmountPerTransactionCents: 10000,
6
+ maxDailySpendCents: 50000,
7
+ allowedCurrencies: ["usd"],
8
+ requireConfirmation: false,
9
+ },
10
+ };
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;IACtB,UAAU,EAAE;QACV,4BAA4B,EAAE,KAAK;QACnC,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,CAAC,KAAK,CAAC;QAC1B,mBAAmB,EAAE,KAAK;KAC3B;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,55 @@
1
+ {
2
+ "name": "@xodn348/clawpay",
3
+ "version": "0.1.0",
4
+ "description": "Open-source Stripe MCP Server for AI agents",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "clawpay": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "LICENSE",
13
+ "README.md",
14
+ "DISCLAIMER.md",
15
+ "Formula"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc",
19
+ "dev": "tsx src/index.ts",
20
+ "typecheck": "tsc --noEmit",
21
+ "test": "node --import tsx --test 'test/integration.test.ts'",
22
+ "test:coverage": "c8 --reporter=lcov --reporter=text node --import tsx --test 'test/integration.test.ts'",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "keywords": [
26
+ "stripe",
27
+ "mcp",
28
+ "ai",
29
+ "payment"
30
+ ],
31
+ "author": "ClawPay Contributors",
32
+ "license": "Apache-2.0",
33
+ "dependencies": {
34
+ "@modelcontextprotocol/sdk": "^1.0.0",
35
+ "qrcode-terminal": "^0.12.0",
36
+ "stripe": "^17.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/node": "^22.0.0",
40
+ "@types/qrcode-terminal": "^0.12.2",
41
+ "c8": "^11.0.0",
42
+ "tsx": "^4.0.0",
43
+ "typescript": "^5.7.0"
44
+ },
45
+ "engines": {
46
+ "node": ">=18.0.0"
47
+ },
48
+ "publishConfig": {
49
+ "access": "public"
50
+ },
51
+ "repository": {
52
+ "type": "git",
53
+ "url": "git+https://github.com/xodn348/clawpay.git"
54
+ }
55
+ }