@moneydevkit/replit 0.14.0 → 0.15.0-beta.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.
- package/README.md +52 -0
- package/dist/server/express.d.ts +2 -2
- package/dist/server/express.js +1 -1
- package/dist/server/express.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -212,3 +212,55 @@ export function SuccessPage() {
|
|
|
212
212
|
```
|
|
213
213
|
|
|
214
214
|
This wiring keeps the client pointed at `/api/mdk`, which the Express route handles by delegating to the shared Money Dev Kit core logic.
|
|
215
|
+
|
|
216
|
+
## L402: Pay-per-call API Endpoints
|
|
217
|
+
|
|
218
|
+
Gate any Express route behind a Lightning payment. See the [Next.js README L402 section](../nextjs/README.md#l402-pay-per-call-api-endpoints) for the full protocol explanation and client integration examples.
|
|
219
|
+
|
|
220
|
+
### Basic usage
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
import express from 'express'
|
|
224
|
+
import { withPayment } from '@moneydevkit/replit/server/express'
|
|
225
|
+
|
|
226
|
+
const app = express()
|
|
227
|
+
|
|
228
|
+
// withPayment wraps a fetch-style handler (Request -> Response)
|
|
229
|
+
const handler = async (req: Request) => {
|
|
230
|
+
return Response.json({ content: 'Premium data' })
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
// Mount it on an Express route by converting the Express req/res yourself,
|
|
234
|
+
// or use it directly in a fetch-compatible server.
|
|
235
|
+
app.all('/api/premium', async (req, res) => {
|
|
236
|
+
const fetchReq = new Request(`${req.protocol}://${req.get('host')}${req.url}`, {
|
|
237
|
+
method: req.method,
|
|
238
|
+
headers: new Headers(req.headers as Record<string, string>),
|
|
239
|
+
})
|
|
240
|
+
const response = await withPayment({ amount: 100, currency: 'SAT' }, handler)(fetchReq)
|
|
241
|
+
response.headers.forEach((v, k) => res.setHeader(k, v))
|
|
242
|
+
res.status(response.status).send(Buffer.from(await response.arrayBuffer()))
|
|
243
|
+
})
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
### Deferred settlement
|
|
247
|
+
|
|
248
|
+
Use `withDeferredSettlement` when your service delivery might fail and you want the payer to be able to retry:
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
import { withDeferredSettlement, type SettleResult } from '@moneydevkit/replit/server/express'
|
|
252
|
+
|
|
253
|
+
const handler = async (req: Request, settle: () => Promise<SettleResult>) => {
|
|
254
|
+
const result = await doExpensiveWork()
|
|
255
|
+
|
|
256
|
+
// Only mark as used after successful delivery
|
|
257
|
+
const { settled } = await settle()
|
|
258
|
+
if (!settled) {
|
|
259
|
+
return Response.json({ error: 'settlement_failed' }, { status: 500 })
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
return Response.json({ result })
|
|
263
|
+
}
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
If your handler returns without calling `settle()`, the credential stays valid and the payer can retry.
|
package/dist/server/express.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { RequestHandler, Router } from 'express';
|
|
2
2
|
export { createCheckoutUrl } from '@moneydevkit/core/route';
|
|
3
3
|
export type { CreateCheckoutUrlOptions } from '@moneydevkit/core/route';
|
|
4
|
-
export { withPayment } from '@moneydevkit/core/mdk402';
|
|
5
|
-
export type { PaymentConfig } from '@moneydevkit/core/mdk402';
|
|
4
|
+
export { withPayment, withDeferredSettlement } from '@moneydevkit/core/mdk402';
|
|
5
|
+
export type { PaymentConfig, SettleResult } from '@moneydevkit/core/mdk402';
|
|
6
6
|
export declare const mdkExpressHandler: RequestHandler;
|
|
7
7
|
export declare const mdkExpressGetHandler: RequestHandler;
|
|
8
8
|
export declare function createMdkExpressRouter(): Router;
|
package/dist/server/express.js
CHANGED
|
@@ -2,7 +2,7 @@ import express from 'express';
|
|
|
2
2
|
import { createUnifiedHandler, GET as getHandler } from '@moneydevkit/core/route';
|
|
3
3
|
// Re-export createCheckoutUrl for server-side URL generation
|
|
4
4
|
export { createCheckoutUrl } from '@moneydevkit/core/route';
|
|
5
|
-
export { withPayment } from '@moneydevkit/core/mdk402';
|
|
5
|
+
export { withPayment, withDeferredSettlement } from '@moneydevkit/core/mdk402';
|
|
6
6
|
const unifiedHandler = createUnifiedHandler();
|
|
7
7
|
function toFetchRequest(req) {
|
|
8
8
|
const protocol = req.protocol || 'http';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/server/express.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAG7B,OAAO,EAAE,oBAAoB,EAAE,GAAG,IAAI,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAEjF,6DAA6D;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAG3D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"express.js","sourceRoot":"","sources":["../../src/server/express.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moneydevkit/replit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0-beta.1",
|
|
4
4
|
"description": "Money Dev Kit checkout package for Replit (Vite + Express).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"react-dom": "^18 || ^19"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@moneydevkit/core": "0.
|
|
36
|
+
"@moneydevkit/core": "0.15.0-beta.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@types/express": "^4.17.21",
|