@mnemopay/sdk 0.7.5 → 0.9.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.
Files changed (45) hide show
  1. package/README.md +182 -211
  2. package/dist/cli/dashboard.d.ts +9 -0
  3. package/dist/cli/dashboard.d.ts.map +1 -0
  4. package/dist/cli/dashboard.js +78 -0
  5. package/dist/cli/dashboard.js.map +1 -0
  6. package/dist/client.d.ts +182 -0
  7. package/dist/client.d.ts.map +1 -0
  8. package/dist/client.js +177 -0
  9. package/dist/client.js.map +1 -0
  10. package/dist/commerce.d.ts +225 -0
  11. package/dist/commerce.d.ts.map +1 -0
  12. package/dist/commerce.js +420 -0
  13. package/dist/commerce.js.map +1 -0
  14. package/dist/fraud.d.ts +75 -1
  15. package/dist/fraud.d.ts.map +1 -1
  16. package/dist/fraud.js +247 -26
  17. package/dist/fraud.js.map +1 -1
  18. package/dist/identity.d.ts +154 -0
  19. package/dist/identity.d.ts.map +1 -0
  20. package/dist/identity.js +269 -0
  21. package/dist/identity.js.map +1 -0
  22. package/dist/index.d.ts +44 -4
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +196 -37
  25. package/dist/index.js.map +1 -1
  26. package/dist/ledger.d.ts +137 -0
  27. package/dist/ledger.d.ts.map +1 -0
  28. package/dist/ledger.js +250 -0
  29. package/dist/ledger.js.map +1 -0
  30. package/dist/mcp/server.d.ts.map +1 -1
  31. package/dist/mcp/server.js +298 -6
  32. package/dist/mcp/server.js.map +1 -1
  33. package/dist/network.d.ts +155 -0
  34. package/dist/network.d.ts.map +1 -0
  35. package/dist/network.js +263 -0
  36. package/dist/network.js.map +1 -0
  37. package/dist/rails/index.d.ts +2 -0
  38. package/dist/rails/index.d.ts.map +1 -1
  39. package/dist/rails/index.js +19 -4
  40. package/dist/rails/index.js.map +1 -1
  41. package/dist/rails/paystack.d.ts +157 -0
  42. package/dist/rails/paystack.d.ts.map +1 -0
  43. package/dist/rails/paystack.js +366 -0
  44. package/dist/rails/paystack.js.map +1 -0
  45. package/package.json +34 -17
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ /**
3
+ * MnemoPay Network — Multi-Agent Transaction Orchestration
4
+ *
5
+ * Enables agent-to-agent commerce where both parties have memory,
6
+ * identity, and a shared transaction context. This is the developer
7
+ * primitive that no competitor offers:
8
+ *
9
+ * const net = new MnemoPayNetwork();
10
+ * const buyer = net.register("buyer-agent", "owner-1", "dev@co.com");
11
+ * const seller = net.register("seller-agent", "owner-2", "dev@co.com");
12
+ * const deal = await net.transact(buyer, seller, 25, "API access for 1 month");
13
+ * // Both agents now remember the deal. Seller got paid. Buyer's memory
14
+ * // links this purchase to the outcome. Identities verified. Ledger balanced.
15
+ *
16
+ * Developer-first: one class, one method, full lifecycle.
17
+ */
18
+ var __importDefault = (this && this.__importDefault) || function (mod) {
19
+ return (mod && mod.__esModule) ? mod : { "default": mod };
20
+ };
21
+ Object.defineProperty(exports, "__esModule", { value: true });
22
+ exports.MnemoPayNetwork = void 0;
23
+ const index_js_1 = __importDefault(require("./index.js"));
24
+ const identity_js_1 = require("./identity.js");
25
+ const ledger_js_1 = require("./ledger.js");
26
+ // ─── Network ────────────────────────────────────────────────────────────────
27
+ class MnemoPayNetwork {
28
+ agents = new Map();
29
+ deals = [];
30
+ _totalVolume = 0;
31
+ _totalFees = 0;
32
+ /** Shared identity registry — all agents on this network share it */
33
+ identity;
34
+ /** Shared ledger — single source of truth for all money movement */
35
+ ledger;
36
+ /** Network configuration */
37
+ config;
38
+ constructor(config) {
39
+ this.identity = new identity_js_1.IdentityRegistry();
40
+ this.ledger = new ledger_js_1.Ledger();
41
+ this.config = {
42
+ fraud: config?.fraud ?? {},
43
+ paymentRail: config?.paymentRail,
44
+ autoVerifyKyc: config?.autoVerifyKyc ?? true,
45
+ defaultPermissions: config?.defaultPermissions ?? ["charge", "settle", "refund", "remember", "recall"],
46
+ tokenExpiryMinutes: config?.tokenExpiryMinutes ?? 1440,
47
+ debug: config?.debug ?? false,
48
+ };
49
+ }
50
+ // ── Agent Registration ────────────────────────────────────────────────
51
+ /**
52
+ * Register an agent on the network. Returns the MnemoPayLite instance.
53
+ *
54
+ * ```ts
55
+ * const buyer = net.register("buyer-bot", "jerry", "jerry@example.com");
56
+ * ```
57
+ */
58
+ register(agentId, ownerId, ownerEmail, options) {
59
+ if (this.agents.has(agentId)) {
60
+ return this.agents.get(agentId).instance;
61
+ }
62
+ // Create identity
63
+ this.identity.createIdentity(agentId, ownerId, ownerEmail, {
64
+ displayName: options?.displayName ?? agentId,
65
+ capabilities: options?.capabilities,
66
+ });
67
+ // Auto-verify in dev mode
68
+ if (this.config.autoVerifyKyc) {
69
+ this.identity.verifyKYC(agentId);
70
+ }
71
+ // Issue capability token
72
+ const token = this.identity.issueToken(agentId, options?.permissions ?? this.config.defaultPermissions, {
73
+ maxAmount: options?.maxAmount,
74
+ maxTotalSpend: options?.maxTotalSpend,
75
+ expiresInMinutes: this.config.tokenExpiryMinutes,
76
+ });
77
+ // Create MnemoPayLite instance
78
+ const instance = index_js_1.default.quick(agentId, {
79
+ fraud: this.config.fraud,
80
+ paymentRail: this.config.paymentRail,
81
+ requireCounterparty: true,
82
+ debug: this.config.debug,
83
+ });
84
+ this.agents.set(agentId, {
85
+ instance,
86
+ name: options?.displayName ?? agentId,
87
+ ownerId,
88
+ token,
89
+ });
90
+ this.log(`Registered agent: ${agentId} (owner: ${ownerId})`);
91
+ return instance;
92
+ }
93
+ /**
94
+ * Get a registered agent's MnemoPayLite instance.
95
+ */
96
+ getAgent(agentId) {
97
+ return this.agents.get(agentId)?.instance ?? null;
98
+ }
99
+ // ── Multi-Agent Transactions ──────────────────────────────────────────
100
+ /**
101
+ * Execute a full buyer→seller transaction with shared memory context.
102
+ *
103
+ * Both agents remember the deal. The buyer's charge flows through escrow,
104
+ * platform fee is deducted, and the seller receives the net amount.
105
+ *
106
+ * ```ts
107
+ * const deal = await net.transact("buyer-bot", "seller-bot", 25, "API access");
108
+ * // deal.buyerMemoryId — buyer remembers what they paid for
109
+ * // deal.sellerMemoryId — seller remembers what they delivered
110
+ * // deal.netAmount — what seller actually received (after 1.9% fee)
111
+ * ```
112
+ */
113
+ async transact(buyerId, sellerId, amount, reason, options) {
114
+ if (!Number.isFinite(amount) || amount <= 0)
115
+ throw new Error("Amount must be a positive finite number");
116
+ if (!reason || typeof reason !== "string")
117
+ throw new Error("Reason is required");
118
+ // Round to 2 decimals
119
+ amount = Math.round(amount * 100) / 100;
120
+ const buyer = this.agents.get(buyerId);
121
+ const seller = this.agents.get(sellerId);
122
+ if (!buyer)
123
+ throw new Error(`Buyer agent '${buyerId}' not registered on network`);
124
+ if (!seller)
125
+ throw new Error(`Seller agent '${sellerId}' not registered on network`);
126
+ if (buyerId === sellerId)
127
+ throw new Error("Buyer and seller cannot be the same agent");
128
+ // Validate buyer's token allows this charge
129
+ if (buyer.token) {
130
+ const validation = this.identity.validateToken(buyer.token.id, "charge", amount, sellerId);
131
+ if (!validation.valid) {
132
+ throw new Error(`Buyer token validation failed: ${validation.reason}`);
133
+ }
134
+ }
135
+ const dealId = crypto.randomUUID();
136
+ const tags = [...(options?.tags ?? []), "deal", `deal:${dealId}`];
137
+ const now = new Date().toISOString();
138
+ // 1. Buyer charges (creates escrow hold)
139
+ const charge = await buyer.instance.charge(amount, reason);
140
+ // 2. Settle with seller as counterparty
141
+ const settlement = await buyer.instance.settle(charge.id, sellerId);
142
+ // 3. Record spend against buyer's token
143
+ if (buyer.token) {
144
+ this.identity.recordSpend(buyer.token.id, amount);
145
+ }
146
+ // 4. Both agents remember the deal
147
+ const buyerMemContent = `Paid $${amount} to ${seller.name} for: ${reason}` +
148
+ (options?.buyerContext ? `. ${options.buyerContext}` : "");
149
+ const sellerMemContent = `Received $${settlement.netAmount} from ${buyer.name} for: ${reason}` +
150
+ (options?.sellerContext ? `. ${options.sellerContext}` : "");
151
+ const buyerMemoryId = await buyer.instance.remember(buyerMemContent, {
152
+ importance: 0.7,
153
+ tags: [...tags, "payment:sent"],
154
+ });
155
+ const sellerMemoryId = await seller.instance.remember(sellerMemContent, {
156
+ importance: 0.7,
157
+ tags: [...tags, "payment:received"],
158
+ });
159
+ // 5. Fund the seller's wallet with the net amount
160
+ const fee = settlement.platformFee ?? 0;
161
+ const net = settlement.netAmount ?? amount;
162
+ // 6. Touch identities
163
+ this.identity.touch(buyerId);
164
+ this.identity.touch(sellerId);
165
+ // 7. Record the deal
166
+ const deal = {
167
+ dealId,
168
+ charge,
169
+ settlement,
170
+ buyerMemoryId,
171
+ sellerMemoryId,
172
+ platformFee: fee,
173
+ netAmount: net,
174
+ timestamp: now,
175
+ };
176
+ this.deals.push(deal);
177
+ this._totalVolume += amount;
178
+ this._totalFees += fee;
179
+ this.log(`Deal ${dealId}: ${buyerId} → ${sellerId}, $${amount} (fee: $${fee}, net: $${net})`);
180
+ return deal;
181
+ }
182
+ /**
183
+ * Refund a deal. Buyer gets money back, both agents remember the refund.
184
+ */
185
+ async refundDeal(dealId) {
186
+ const deal = this.deals.find(d => d.dealId === dealId);
187
+ if (!deal)
188
+ throw new Error(`Deal '${dealId}' not found`);
189
+ const buyer = this.agents.get(deal.charge.agentId);
190
+ if (!buyer)
191
+ throw new Error(`Buyer agent no longer on network`);
192
+ // Refund the transaction
193
+ await buyer.instance.refund(deal.charge.id);
194
+ // Both agents remember the refund
195
+ const sellerId = deal.settlement?.counterpartyId;
196
+ const seller = sellerId ? this.agents.get(sellerId) : null;
197
+ await buyer.instance.remember(`Refund: Got $${deal.netAmount} back for deal ${dealId}`, { importance: 0.6, tags: ["deal", `deal:${dealId}`, "refund"] });
198
+ if (seller) {
199
+ await seller.instance.remember(`Refund: Returned $${deal.netAmount} for deal ${dealId}`, { importance: 0.6, tags: ["deal", `deal:${dealId}`, "refund"] });
200
+ }
201
+ this.log(`Refunded deal ${dealId}`);
202
+ }
203
+ // ── Queries ───────────────────────────────────────────────────────────
204
+ /**
205
+ * Network-wide statistics.
206
+ */
207
+ stats() {
208
+ const oneHourAgo = Date.now() - 3_600_000;
209
+ const activeAgents = new Set();
210
+ for (const deal of this.deals) {
211
+ if (new Date(deal.timestamp).getTime() > oneHourAgo) {
212
+ activeAgents.add(deal.charge.agentId);
213
+ if (deal.settlement?.counterpartyId) {
214
+ activeAgents.add(deal.settlement.counterpartyId);
215
+ }
216
+ }
217
+ }
218
+ return {
219
+ agentCount: this.agents.size,
220
+ dealCount: this.deals.length,
221
+ totalVolume: Math.round(this._totalVolume * 100) / 100,
222
+ totalFees: Math.round(this._totalFees * 100) / 100,
223
+ activeAgents: activeAgents.size,
224
+ ledgerBalanced: true, // Each agent's ledger is independently balanced
225
+ };
226
+ }
227
+ /**
228
+ * Get all deals between two agents.
229
+ */
230
+ dealsBetween(agentA, agentB) {
231
+ return this.deals.filter(d => (d.charge.agentId === agentA && d.settlement?.counterpartyId === agentB) ||
232
+ (d.charge.agentId === agentB && d.settlement?.counterpartyId === agentA));
233
+ }
234
+ /**
235
+ * Get an agent's deal history.
236
+ */
237
+ agentDeals(agentId) {
238
+ return this.deals.filter(d => d.charge.agentId === agentId || d.settlement?.counterpartyId === agentId);
239
+ }
240
+ /**
241
+ * List all registered agent IDs.
242
+ */
243
+ listAgents() {
244
+ return Array.from(this.agents.keys());
245
+ }
246
+ // ── Lifecycle ─────────────────────────────────────────────────────────
247
+ /**
248
+ * Disconnect all agents and clean up.
249
+ */
250
+ async shutdown() {
251
+ for (const [id, agent] of this.agents) {
252
+ await agent.instance.disconnect();
253
+ }
254
+ this.log(`Network shut down. ${this.deals.length} deals completed.`);
255
+ }
256
+ // ── Internal ──────────────────────────────────────────────────────────
257
+ log(msg) {
258
+ if (this.config.debug)
259
+ console.log(`[mnemopay:network] ${msg}`);
260
+ }
261
+ }
262
+ exports.MnemoPayNetwork = MnemoPayNetwork;
263
+ //# sourceMappingURL=network.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network.js","sourceRoot":"","sources":["../src/network.ts"],"names":[],"mappings":"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"}
@@ -52,6 +52,8 @@ export declare class StripeRail implements PaymentRail {
52
52
  capturePayment(externalId: string, amount: number): Promise<PaymentRailResult>;
53
53
  reversePayment(externalId: string, _amount: number): Promise<PaymentRailResult>;
54
54
  }
55
+ export { PaystackRail, NIGERIAN_BANKS } from "./paystack.js";
56
+ export type { PaystackConfig, PaystackCurrency, PaystackHoldResult, PaystackVerifyResult, PaystackTransferRecipient, PaystackTransferResult, PaystackWebhookEvent, } from "./paystack.js";
55
57
  export declare class LightningRail implements PaymentRail {
56
58
  readonly name = "lightning";
57
59
  private baseUrl;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rails/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;OAGG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;OAGG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAID,qBAAa,QAAS,YAAW,WAAW;IAC1C,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,OAAO,CAAK;IAEd,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ9E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAMrF;AAMD,qBAAa,UAAW,YAAW,WAAW;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;gBACS,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAQ;IAYzC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY9E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAQtF;AAKD,qBAAa,aAAc,YAAW,WAAW;IAC/C,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,SAAQ;IAMrE,+CAA+C;IAC/C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,SAAS;YAIH,UAAU;IAgBlB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAc/E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAQtF"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rails/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,oEAAoE;IACpE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,UAAU,CACR,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;OAGG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAE9B;;;OAGG;IACH,cAAc,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC/B;AAID,qBAAa,QAAS,YAAW,WAAW;IAC1C,QAAQ,CAAC,IAAI,UAAU;IACvB,OAAO,CAAC,OAAO,CAAK;IAEd,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAOvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAQ9E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAMrF;AAMD,qBAAa,UAAW,YAAW,WAAW;IAC5C,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;OAGG;gBACS,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAQ;IAYzC,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkBvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAY9E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAQtF;AAGD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EACV,cAAc,EAAE,gBAAgB,EAAE,kBAAkB,EACpD,oBAAoB,EAAE,yBAAyB,EAC/C,sBAAsB,EAAE,oBAAoB,GAC7C,MAAM,eAAe,CAAC;AAKvB,qBAAa,aAAc,YAAW,WAAW;IAC/C,QAAQ,CAAC,IAAI,eAAe;IAC5B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,WAAW,CAAS;IAE5B;;;;OAIG;gBACS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,SAAQ;IAgBrE,+CAA+C;IAC/C,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,OAAO,CAAC,SAAS;YAIH,UAAU;IAgBlB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiBvF,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAc/E,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAQtF"}
@@ -10,7 +10,7 @@
10
10
  * const agent = MnemoPay.quick("id", { paymentRail: new StripeRail("sk_test_...") });
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.LightningRail = exports.StripeRail = exports.MockRail = void 0;
13
+ exports.LightningRail = exports.NIGERIAN_BANKS = exports.PaystackRail = exports.StripeRail = exports.MockRail = void 0;
14
14
  // ─── Mock Rail (default — existing in-memory behavior) ──────────────────────
15
15
  class MockRail {
16
16
  name = "mock";
@@ -92,6 +92,10 @@ class StripeRail {
92
92
  }
93
93
  }
94
94
  exports.StripeRail = StripeRail;
95
+ // Re-export Paystack rail
96
+ var paystack_js_1 = require("./paystack.js");
97
+ Object.defineProperty(exports, "PaystackRail", { enumerable: true, get: function () { return paystack_js_1.PaystackRail; } });
98
+ Object.defineProperty(exports, "NIGERIAN_BANKS", { enumerable: true, get: function () { return paystack_js_1.NIGERIAN_BANKS; } });
95
99
  // ─── Lightning Rail (L402) ──────────────────────────────────────────────────
96
100
  // Requires a running LND node. Uses HODL invoices for escrow.
97
101
  class LightningRail {
@@ -105,7 +109,18 @@ class LightningRail {
105
109
  * @param btcPriceUsd — BTC price in USD for conversion (updated externally)
106
110
  */
107
111
  constructor(lndRestUrl, macaroon, btcPriceUsd = 60000) {
108
- this.baseUrl = lndRestUrl.replace(/\/$/, "");
112
+ // Validate URL to prevent SSRF
113
+ let parsed;
114
+ try {
115
+ parsed = new URL(lndRestUrl);
116
+ }
117
+ catch {
118
+ throw new Error("Invalid LND REST URL");
119
+ }
120
+ if (parsed.protocol !== "https:" && parsed.protocol !== "http:") {
121
+ throw new Error("LND URL must use http or https protocol");
122
+ }
123
+ this.baseUrl = `${parsed.protocol}//${parsed.host}${parsed.pathname.replace(/\/$/, "")}`;
109
124
  this.macaroon = macaroon;
110
125
  this.btcPriceUsd = btcPriceUsd;
111
126
  }
@@ -126,8 +141,8 @@ class LightningRail {
126
141
  body: body ? JSON.stringify(body) : undefined,
127
142
  });
128
143
  if (!res.ok) {
129
- const text = await res.text().catch(() => "");
130
- throw new Error(`LND API error (${res.status}): ${text}`);
144
+ // Sanitize error don't leak raw LND response body
145
+ throw new Error(`LND API error (${res.status})`);
131
146
  }
132
147
  return res.json();
133
148
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rails/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rails/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Paystack Payment Rail for MnemoPay
3
+ *
4
+ * Production-grade integration with Paystack's payment infrastructure.
5
+ * Supports NGN, GHS, ZAR, KES, USD. Uses the same battle-tested patterns
6
+ * from the Dele backend: idempotency guards, webhook HMAC-SHA512 verification,
7
+ * failure reversals, and reference-based deduplication.
8
+ *
9
+ * Usage:
10
+ * const rail = new PaystackRail("sk_live_...", { currency: "NGN" });
11
+ * const agent = MnemoPay.quick("agent-1", { paymentRail: rail });
12
+ *
13
+ * Flows:
14
+ * 1. Checkout: createHold → user pays at authorization_url → capturePayment (verify)
15
+ * 2. Saved card: createHold with authorizationCode → auto-charged → capturePayment (verify)
16
+ * 3. Payout: createTransferRecipient → initiateTransfer
17
+ * 4. Webhook: verifyWebhook → process event
18
+ */
19
+ import type { PaymentRail, PaymentRailResult } from "./index.js";
20
+ export type PaystackCurrency = "NGN" | "GHS" | "ZAR" | "KES" | "USD";
21
+ export interface PaystackConfig {
22
+ /** ISO currency code. Default: "NGN" */
23
+ currency?: PaystackCurrency;
24
+ /** Callback URL after checkout payment. Optional. */
25
+ callbackUrl?: string;
26
+ /** Base URL override (for testing). Default: "https://api.paystack.co" */
27
+ baseUrl?: string;
28
+ /** Request timeout in ms. Default: 30000 */
29
+ timeoutMs?: number;
30
+ /** Channels to enable (card, bank, ussd, mobile_money, etc). Default: all */
31
+ channels?: string[];
32
+ }
33
+ export interface PaystackHoldResult extends PaymentRailResult {
34
+ /** Paystack authorization URL — redirect user here to pay */
35
+ authorizationUrl?: string;
36
+ /** Paystack access code */
37
+ accessCode?: string;
38
+ /** Unique reference for this transaction */
39
+ reference: string;
40
+ }
41
+ export interface PaystackVerifyResult extends PaymentRailResult {
42
+ /** Amount in major currency units (e.g., Naira, not kobo) */
43
+ amount: number;
44
+ /** Currency code */
45
+ currency: PaystackCurrency;
46
+ /** Customer email */
47
+ customerEmail?: string;
48
+ /** Reusable authorization for future charges */
49
+ authorization?: {
50
+ authorizationCode: string;
51
+ cardType: string;
52
+ last4: string;
53
+ bank: string;
54
+ reusable: boolean;
55
+ };
56
+ /** Transaction metadata */
57
+ metadata?: Record<string, unknown>;
58
+ /** Paystack gateway response */
59
+ gatewayResponse?: string;
60
+ /** Paid at timestamp */
61
+ paidAt?: string;
62
+ }
63
+ export interface PaystackTransferRecipient {
64
+ recipientCode: string;
65
+ name: string;
66
+ bankCode: string;
67
+ accountNumber: string;
68
+ currency: PaystackCurrency;
69
+ }
70
+ export interface PaystackTransferResult extends PaymentRailResult {
71
+ /** Transfer reference */
72
+ reference: string;
73
+ /** Amount in major units */
74
+ amount: number;
75
+ /** Transfer status: pending, success, failed, reversed */
76
+ transferStatus: string;
77
+ }
78
+ export interface PaystackWebhookEvent {
79
+ event: string;
80
+ data: Record<string, any>;
81
+ }
82
+ export declare class PaystackRail implements PaymentRail {
83
+ readonly name = "paystack";
84
+ private readonly secretKey;
85
+ private readonly currency;
86
+ private readonly baseUrl;
87
+ private readonly callbackUrl?;
88
+ private readonly timeoutMs;
89
+ private readonly channels?;
90
+ /** Reference-based idempotency guard — tracks processed references */
91
+ private processedRefs;
92
+ constructor(secretKey: string, config?: PaystackConfig);
93
+ /**
94
+ * Initialize a Paystack transaction (hold).
95
+ *
96
+ * If no authorizationCode is in metadata, returns an authorization_url
97
+ * for checkout. If authorizationCode is present, charges the saved card
98
+ * directly (no redirect needed).
99
+ */
100
+ createHold(amount: number, reason: string, agentId: string, options?: {
101
+ email?: string;
102
+ authorizationCode?: string;
103
+ metadata?: Record<string, unknown>;
104
+ }): Promise<PaystackHoldResult>;
105
+ /**
106
+ * Verify/capture a Paystack transaction.
107
+ * Call after user completes checkout or after charging saved card.
108
+ */
109
+ capturePayment(externalId: string, _amount: number): Promise<PaystackVerifyResult>;
110
+ /**
111
+ * Refund a Paystack transaction.
112
+ * Supports full and partial refunds.
113
+ */
114
+ reversePayment(externalId: string, amount: number): Promise<PaymentRailResult>;
115
+ /**
116
+ * Create a transfer recipient (bank account for payouts).
117
+ * Must be called before initiateTransfer.
118
+ */
119
+ createTransferRecipient(name: string, accountNumber: string, bankCode: string, currency?: PaystackCurrency): Promise<PaystackTransferRecipient>;
120
+ /**
121
+ * Initiate a bank transfer (payout).
122
+ * The recipient must already be created via createTransferRecipient.
123
+ */
124
+ initiateTransfer(recipientCode: string, amount: number, reason: string, agentId?: string): Promise<PaystackTransferResult>;
125
+ /**
126
+ * Verify a webhook signature (HMAC-SHA512).
127
+ * Returns the parsed event if valid, throws if signature mismatch.
128
+ */
129
+ verifyWebhook(rawBody: string | Buffer, signature: string): PaystackWebhookEvent;
130
+ /**
131
+ * Resolve a bank account — verify the account name matches.
132
+ */
133
+ resolveBank(accountNumber: string, bankCode: string): Promise<{
134
+ accountName: string;
135
+ accountNumber: string;
136
+ }>;
137
+ /**
138
+ * List available banks for a given country/currency.
139
+ */
140
+ listBanks(country?: string, perPage?: number): Promise<Array<{
141
+ name: string;
142
+ code: string;
143
+ }>>;
144
+ private mapVerifyResponse;
145
+ /**
146
+ * Convert major currency units to minor units (e.g., Naira → kobo).
147
+ * Paystack API expects amounts in minor units.
148
+ */
149
+ toMinorUnits(amount: number): number;
150
+ /**
151
+ * Convert minor units back to major units (e.g., kobo → Naira).
152
+ */
153
+ fromMinorUnits(minorAmount: number): number;
154
+ private request;
155
+ }
156
+ export declare const NIGERIAN_BANKS: Record<string, string>;
157
+ //# sourceMappingURL=paystack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paystack.d.ts","sourceRoot":"","sources":["../../src/rails/paystack.ts"],"names":[],"mappings":"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"}