@moneydevkit/better-auth 0.10.0-beta.2
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 +72 -0
- package/dist/client.d.ts +29 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +25 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +3 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +59 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
package/README.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# @moneydevkit/better-auth
|
|
2
|
+
|
|
3
|
+
Better Auth plugin for MoneyDevKit. Automatically links authenticated users to MDK customers.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @moneydevkit/better-auth better-auth
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
You'll also need a MoneyDevKit UI package for your framework:
|
|
12
|
+
- [Next.js](https://github.com/moneydevkit/mdk-checkout/tree/main/packages/nextjs)
|
|
13
|
+
- [Replit](https://github.com/moneydevkit/mdk-checkout/tree/main/packages/replit)
|
|
14
|
+
|
|
15
|
+
## Setup
|
|
16
|
+
|
|
17
|
+
### 1. Environment variables
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
MDK_ACCESS_TOKEN=your_api_key
|
|
21
|
+
MDK_MNEMONIC=your_wallet_mnemonic
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 2. Server plugin
|
|
25
|
+
|
|
26
|
+
```typescript
|
|
27
|
+
// lib/auth.ts
|
|
28
|
+
import { betterAuth } from "better-auth"
|
|
29
|
+
import { moneydevkit } from "@moneydevkit/better-auth"
|
|
30
|
+
|
|
31
|
+
export const auth = betterAuth({
|
|
32
|
+
// ... your config
|
|
33
|
+
plugins: [moneydevkit()]
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 3. Client plugin
|
|
38
|
+
|
|
39
|
+
```tsx
|
|
40
|
+
import { createAuthClient } from "better-auth/react"
|
|
41
|
+
import { moneydevkitClient } from "@moneydevkit/better-auth/client"
|
|
42
|
+
|
|
43
|
+
const authClient = createAuthClient({
|
|
44
|
+
plugins: [moneydevkitClient()]
|
|
45
|
+
})
|
|
46
|
+
|
|
47
|
+
// Same API as useCheckout().createCheckout from @moneydevkit/nextjs
|
|
48
|
+
const result = await authClient.createCheckout({
|
|
49
|
+
type: 'AMOUNT',
|
|
50
|
+
amount: 500,
|
|
51
|
+
currency: 'USD',
|
|
52
|
+
successUrl: '/checkout/success',
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
if (result.data) {
|
|
56
|
+
window.location.href = result.data.checkoutUrl
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 4. Framework setup
|
|
61
|
+
|
|
62
|
+
Follow the setup guide for your framework's MoneyDevKit package (route handler, checkout page, config):
|
|
63
|
+
- [Next.js setup](https://github.com/moneydevkit/mdk-checkout/tree/main/packages/nextjs#quick-start-nextjs-app-router)
|
|
64
|
+
- [Replit setup](https://github.com/moneydevkit/mdk-checkout/tree/main/packages/replit#setup)
|
|
65
|
+
|
|
66
|
+
## How it works
|
|
67
|
+
|
|
68
|
+
The plugin adds a `/moneydevkit/checkout` endpoint that:
|
|
69
|
+
- If user is authenticated: maps `user.id` → `customer.externalId`, auto-fills email/name
|
|
70
|
+
- If no session: creates checkout without customer info (guest checkout)
|
|
71
|
+
|
|
72
|
+
This links all checkouts to the same MDK customer record for returning users.
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { CreateCheckoutParams } from '@moneydevkit/core';
|
|
2
|
+
/**
|
|
3
|
+
* MoneyDevKit Client Plugin for Better Auth
|
|
4
|
+
*
|
|
5
|
+
* Provides `createCheckout` - same API as `useCheckout().createCheckout` from @moneydevkit/nextjs
|
|
6
|
+
*/
|
|
7
|
+
export declare const moneydevkitClient: () => {
|
|
8
|
+
id: "moneydevkit";
|
|
9
|
+
getActions: ($fetch: import("better-auth/client").BetterFetch) => {
|
|
10
|
+
/**
|
|
11
|
+
* Create a checkout and return the URL.
|
|
12
|
+
* Same API as useCheckout().createCheckout from @moneydevkit/nextjs
|
|
13
|
+
*/
|
|
14
|
+
createCheckout: (params: CreateCheckoutParams) => Promise<{
|
|
15
|
+
data: null;
|
|
16
|
+
error: {
|
|
17
|
+
message?: string | undefined;
|
|
18
|
+
status: number;
|
|
19
|
+
statusText: string;
|
|
20
|
+
};
|
|
21
|
+
} | {
|
|
22
|
+
data: {
|
|
23
|
+
checkoutUrl: string;
|
|
24
|
+
};
|
|
25
|
+
error: null;
|
|
26
|
+
}>;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AAG7D;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;QAIxB;;;WAGG;iCAC4B,oBAAoB;;;;;;;;;;;;;;CAcxD,CAAA"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CHECKOUT_ENDPOINT } from './constants';
|
|
2
|
+
/**
|
|
3
|
+
* MoneyDevKit Client Plugin for Better Auth
|
|
4
|
+
*
|
|
5
|
+
* Provides `createCheckout` - same API as `useCheckout().createCheckout` from @moneydevkit/nextjs
|
|
6
|
+
*/
|
|
7
|
+
export const moneydevkitClient = () => {
|
|
8
|
+
return {
|
|
9
|
+
id: 'moneydevkit',
|
|
10
|
+
getActions: ($fetch) => ({
|
|
11
|
+
/**
|
|
12
|
+
* Create a checkout and return the URL.
|
|
13
|
+
* Same API as useCheckout().createCheckout from @moneydevkit/nextjs
|
|
14
|
+
*/
|
|
15
|
+
createCheckout: async (params) => {
|
|
16
|
+
const response = await $fetch(CHECKOUT_ENDPOINT, { method: 'POST', body: params });
|
|
17
|
+
if (response.error || !response.data) {
|
|
18
|
+
return { data: null, error: response.error };
|
|
19
|
+
}
|
|
20
|
+
return { data: { checkoutUrl: response.data.redirectUrl }, error: null };
|
|
21
|
+
},
|
|
22
|
+
}),
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,EAAE;IACpC,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACvB;;;eAGG;YACH,cAAc,EAAE,KAAK,EAAE,MAA4B,EAAE,EAAE;gBACrD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAC3B,iBAAiB,EACjB,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CACjC,CAAA;gBAED,IAAI,QAAQ,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACrC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAA;gBAC9C,CAAC;gBAED,OAAO,EAAE,IAAI,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;YAC1E,CAAC;SACF,CAAC;KAC8B,CAAA;AACpC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,iBAAiB,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,MAAM,CAAC,MAAM,iBAAiB,GAAG,uBAAuB,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { BetterAuthPlugin } from 'better-auth';
|
|
2
|
+
export * from '@moneydevkit/core';
|
|
3
|
+
export { createUnifiedHandler, POST, GET } from '@moneydevkit/core/route';
|
|
4
|
+
export { CHECKOUT_ENDPOINT } from './constants';
|
|
5
|
+
/**
|
|
6
|
+
* MoneyDevKit Better Auth Plugin
|
|
7
|
+
*
|
|
8
|
+
* Thin wrapper around @moneydevkit/core that automatically injects
|
|
9
|
+
* authenticated user info into checkout customer data.
|
|
10
|
+
* If no user is authenticated, creates checkout without customer info.
|
|
11
|
+
*/
|
|
12
|
+
export declare const moneydevkit: () => BetterAuthPlugin;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAGnD,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAMzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,QAAO,gBAoD9B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { createAuthEndpoint, sessionMiddleware } from 'better-auth/api';
|
|
2
|
+
// Re-export everything from core - users only need @moneydevkit/better-auth
|
|
3
|
+
export * from '@moneydevkit/core';
|
|
4
|
+
export { createUnifiedHandler, POST, GET } from '@moneydevkit/core/route';
|
|
5
|
+
import { createCheckout } from '@moneydevkit/core';
|
|
6
|
+
import { CHECKOUT_ENDPOINT } from './constants';
|
|
7
|
+
export { CHECKOUT_ENDPOINT } from './constants';
|
|
8
|
+
/**
|
|
9
|
+
* MoneyDevKit Better Auth Plugin
|
|
10
|
+
*
|
|
11
|
+
* Thin wrapper around @moneydevkit/core that automatically injects
|
|
12
|
+
* authenticated user info into checkout customer data.
|
|
13
|
+
* If no user is authenticated, creates checkout without customer info.
|
|
14
|
+
*/
|
|
15
|
+
export const moneydevkit = () => {
|
|
16
|
+
return {
|
|
17
|
+
id: 'moneydevkit',
|
|
18
|
+
endpoints: {
|
|
19
|
+
createCheckout: createAuthEndpoint(CHECKOUT_ENDPOINT, {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
use: [sessionMiddleware],
|
|
22
|
+
}, async (ctx) => {
|
|
23
|
+
try {
|
|
24
|
+
// Better Auth already parses the body - access via ctx.body
|
|
25
|
+
const body = ctx.body;
|
|
26
|
+
const user = ctx.context.session?.user;
|
|
27
|
+
// If authenticated, inject user info into customer
|
|
28
|
+
const customer = user
|
|
29
|
+
? {
|
|
30
|
+
...body.customer,
|
|
31
|
+
externalId: user.id,
|
|
32
|
+
email: user.email ?? body.customer?.email,
|
|
33
|
+
name: user.name ?? body.customer?.name,
|
|
34
|
+
}
|
|
35
|
+
: body.customer;
|
|
36
|
+
const result = await createCheckout({
|
|
37
|
+
...body,
|
|
38
|
+
customer,
|
|
39
|
+
});
|
|
40
|
+
if (result.error) {
|
|
41
|
+
console.error('[MDK Better Auth] createCheckout error:', result.error);
|
|
42
|
+
throw new Error(result.error.message);
|
|
43
|
+
}
|
|
44
|
+
const checkoutPath = body.checkoutPath || '/checkout';
|
|
45
|
+
const redirectUrl = `${checkoutPath}/${result.data.checkout.id}`;
|
|
46
|
+
return ctx.json({
|
|
47
|
+
checkout: result.data.checkout,
|
|
48
|
+
redirectUrl,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
console.error('[MDK Better Auth] Checkout endpoint error:', err);
|
|
53
|
+
throw err;
|
|
54
|
+
}
|
|
55
|
+
}),
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAGvE,4EAA4E;AAC5E,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAEzE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAElD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAqB,EAAE;IAChD,OAAO;QACL,EAAE,EAAE,aAAa;QACjB,SAAS,EAAE;YACT,cAAc,EAAE,kBAAkB,CAChC,iBAAiB,EACjB;gBACE,MAAM,EAAE,MAAM;gBACd,GAAG,EAAE,CAAC,iBAAiB,CAAC;aACzB,EACD,KAAK,EAAE,GAAG,EAAE,EAAE;gBACZ,IAAI,CAAC;oBACH,4DAA4D;oBAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,IAA4B,CAAA;oBAE7C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAA;oBAEtC,mDAAmD;oBACnD,MAAM,QAAQ,GAAG,IAAI;wBACnB,CAAC,CAAC;4BACE,GAAG,IAAI,CAAC,QAAQ;4BAChB,UAAU,EAAE,IAAI,CAAC,EAAE;4BACnB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,KAAK;4BACzC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI;yBACvC;wBACH,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAA;oBAEjB,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;wBAClC,GAAG,IAAI;wBACP,QAAQ;qBACT,CAAC,CAAA;oBAEF,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;wBACjB,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAA;wBACtE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;oBACvC,CAAC;oBAED,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,WAAW,CAAA;oBACrD,MAAM,WAAW,GAAG,GAAG,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAA;oBAEhE,OAAO,GAAG,CAAC,IAAI,CAAC;wBACd,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ;wBAC9B,WAAW;qBACZ,CAAC,CAAA;gBACJ,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,GAAG,CAAC,CAAA;oBAChE,MAAM,GAAG,CAAA;gBACX,CAAC;YACH,CAAC,CACF;SACF;KACF,CAAA;AACH,CAAC,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@moneydevkit/better-auth",
|
|
3
|
+
"version": "0.10.0-beta.2",
|
|
4
|
+
"description": "Better Auth plugin for MoneyDevKit checkout integration",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/moneydevkit/mdk-checkout.git",
|
|
8
|
+
"directory": "packages/better-auth"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://github.com/moneydevkit/mdk-checkout/blob/main/packages/better-auth/README.md",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"types": "./dist/index.d.ts",
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"default": "./dist/index.js"
|
|
20
|
+
},
|
|
21
|
+
"./client": {
|
|
22
|
+
"types": "./dist/client.d.ts",
|
|
23
|
+
"import": "./dist/client.js",
|
|
24
|
+
"default": "./dist/client.js"
|
|
25
|
+
},
|
|
26
|
+
"./package.json": "./package.json"
|
|
27
|
+
},
|
|
28
|
+
"files": [
|
|
29
|
+
"dist"
|
|
30
|
+
],
|
|
31
|
+
"dependencies": {
|
|
32
|
+
"zod": "^3.25.42",
|
|
33
|
+
"@moneydevkit/api-contract": "0.1.21",
|
|
34
|
+
"@moneydevkit/core": "0.10.0-beta.2"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"better-auth": "^1.0.0"
|
|
38
|
+
},
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/node": "^20.10.5",
|
|
41
|
+
"better-auth": "^1.4.7",
|
|
42
|
+
"typescript": "^5.6.3"
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"prebuild": "npm --prefix ../core run build",
|
|
46
|
+
"build": "rm -rf dist && tsc -p tsconfig.json",
|
|
47
|
+
"clean": "rm -rf dist",
|
|
48
|
+
"typecheck": "tsc --noEmit"
|
|
49
|
+
}
|
|
50
|
+
}
|