@moneydevkit/replit 0.7.0-beta.7 → 0.7.0-beta.9
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 +14 -0
- package/dist/server/express.d.ts +3 -0
- package/dist/server/express.js +23 -1
- package/dist/server/express.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -179,6 +179,20 @@ function ProductPage() {
|
|
|
179
179
|
- **`type: 'AMOUNT'`** - For donations, tips, or custom amounts. Requires `amount` field.
|
|
180
180
|
- **`type: 'PRODUCTS'`** - For selling products. Requires `products` array with product IDs. Amount is calculated from product prices.
|
|
181
181
|
|
|
182
|
+
### Pay What You Want (CUSTOM prices)
|
|
183
|
+
Products can have CUSTOM prices that let customers choose their own amount. When a checkout includes a product with a CUSTOM price, the checkout UI automatically shows an amount input field:
|
|
184
|
+
|
|
185
|
+
```tsx
|
|
186
|
+
// Create a checkout for a product with CUSTOM pricing
|
|
187
|
+
const result = await createCheckout({
|
|
188
|
+
type: 'PRODUCTS',
|
|
189
|
+
products: [customPriceProductId], // Product configured with CUSTOM price in dashboard
|
|
190
|
+
successUrl: '/checkout/success',
|
|
191
|
+
})
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
The customer enters their desired amount during checkout. For USD, amounts are in dollars (converted to cents internally). For SAT, amounts are in satoshis.
|
|
195
|
+
|
|
182
196
|
## Verify successful payments
|
|
183
197
|
```tsx
|
|
184
198
|
import { useCheckoutSuccess } from '@moneydevkit/replit'
|
package/dist/server/express.d.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import type { RequestHandler, Router } from 'express';
|
|
2
|
+
export { createCheckoutUrl } from '@moneydevkit/core/route';
|
|
3
|
+
export type { CreateCheckoutUrlOptions } from '@moneydevkit/core/route';
|
|
2
4
|
export declare const mdkExpressHandler: RequestHandler;
|
|
5
|
+
export declare const mdkExpressGetHandler: RequestHandler;
|
|
3
6
|
export declare function createMdkExpressRouter(): Router;
|
|
4
7
|
export default createMdkExpressRouter;
|
package/dist/server/express.js
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import express from 'express';
|
|
2
|
-
import { createUnifiedHandler } from '@moneydevkit/core/route';
|
|
2
|
+
import { createUnifiedHandler, GET as getHandler } from '@moneydevkit/core/route';
|
|
3
|
+
// Re-export createCheckoutUrl for server-side URL generation
|
|
4
|
+
export { createCheckoutUrl } from '@moneydevkit/core/route';
|
|
3
5
|
const unifiedHandler = createUnifiedHandler();
|
|
4
6
|
function toFetchRequest(req) {
|
|
5
7
|
const protocol = req.protocol || 'http';
|
|
@@ -46,9 +48,29 @@ export const mdkExpressHandler = async (req, res) => {
|
|
|
46
48
|
res.status(500).send('Internal Server Error');
|
|
47
49
|
}
|
|
48
50
|
};
|
|
51
|
+
export const mdkExpressGetHandler = async (req, res) => {
|
|
52
|
+
try {
|
|
53
|
+
const request = toFetchRequest(req);
|
|
54
|
+
const response = await getHandler(request);
|
|
55
|
+
// Handle redirects specially for Express
|
|
56
|
+
if (response.status >= 300 && response.status < 400) {
|
|
57
|
+
const location = response.headers.get('location');
|
|
58
|
+
if (location) {
|
|
59
|
+
res.redirect(response.status, location);
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
await sendFetchResponse(res, response);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
console.error('MDK Express GET handler error', error);
|
|
67
|
+
res.status(500).send('Internal Server Error');
|
|
68
|
+
}
|
|
69
|
+
};
|
|
49
70
|
export function createMdkExpressRouter() {
|
|
50
71
|
const router = express.Router();
|
|
51
72
|
router.use(express.json());
|
|
73
|
+
router.get('/', mdkExpressGetHandler);
|
|
52
74
|
router.post('/', mdkExpressHandler);
|
|
53
75
|
return router;
|
|
54
76
|
}
|
|
@@ -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,MAAM,yBAAyB,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.7.0-beta.
|
|
3
|
+
"version": "0.7.0-beta.9",
|
|
4
4
|
"description": "Money Dev Kit checkout package for Replit (Vite + Express).",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"react-dom": "^18 || ^19"
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
|
-
"@moneydevkit/core": "0.7.0-beta.
|
|
43
|
+
"@moneydevkit/core": "0.7.0-beta.9"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/express": "^4.17.21",
|