@payez/next-mvp 4.0.41 → 4.0.43

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.
@@ -22,13 +22,29 @@ export interface BetterAuthSocialProvider {
22
22
  * Build Better Auth social providers from IDP config.
23
23
  */
24
24
  export declare function buildBetterAuthProviders(config: IDPClientConfig): Record<string, BetterAuthSocialProvider>;
25
+ /**
26
+ * Optional extra plugins for createBetterAuthInstance.
27
+ * Use to add credentials/custom signin endpoints from the host app.
28
+ */
29
+ export type BetterAuthExtraPlugins = any[];
30
+ /**
31
+ * Optional overrides for createBetterAuthInstance.
32
+ */
33
+ export interface BetterAuthInstanceOptions {
34
+ /** Path suffix for the BA mount (default: '/api/auth'). Use '/api/ba-auth' for migration scenarios. */
35
+ basePath?: string;
36
+ }
25
37
  /**
26
38
  * Create Better Auth instance from IDP config.
27
39
  *
28
40
  * No database — runs in stateless mode with JWE cookie cache.
29
41
  * Call after getIDPClientConfig() resolves.
42
+ *
43
+ * @param idpConfig IDP client config (from getIDPClientConfig)
44
+ * @param extraPlugins Optional plugins to add (e.g., credentials plugin from host app)
45
+ * @param options Optional overrides (e.g., basePath for migration scenarios)
30
46
  */
31
- export declare function createBetterAuthInstance(idpConfig: IDPClientConfig): import("better-auth").Auth<{
47
+ export declare function createBetterAuthInstance(idpConfig: IDPClientConfig, extraPlugins?: BetterAuthExtraPlugins, options?: BetterAuthInstanceOptions): import("better-auth").Auth<{
32
48
  baseURL: string;
33
49
  secret: string;
34
50
  socialProviders: Record<string, BetterAuthSocialProvider>;
@@ -53,7 +69,7 @@ export declare function createBetterAuthInstance(idpConfig: IDPClientConfig): im
53
69
  };
54
70
  };
55
71
  };
56
- plugins: [{
72
+ plugins: [...any[], {
57
73
  id: "next-cookies";
58
74
  hooks: {
59
75
  before: {
@@ -77,7 +93,7 @@ export declare function isBetterAuthEnabled(): boolean;
77
93
  */
78
94
  declare let cachedInstance: any;
79
95
  export { cachedInstance as __betterAuthInstance };
80
- export declare function getBetterAuthInstance(): Promise<any>;
96
+ export declare function getBetterAuthInstance(extraPlugins?: BetterAuthExtraPlugins): Promise<any>;
81
97
  /**
82
98
  * Get flag-gated auth handler for Next.js route.
83
99
  *
@@ -80,15 +80,20 @@ function buildBetterAuthProviders(config) {
80
80
  *
81
81
  * No database — runs in stateless mode with JWE cookie cache.
82
82
  * Call after getIDPClientConfig() resolves.
83
+ *
84
+ * @param idpConfig IDP client config (from getIDPClientConfig)
85
+ * @param extraPlugins Optional plugins to add (e.g., credentials plugin from host app)
86
+ * @param options Optional overrides (e.g., basePath for migration scenarios)
83
87
  */
84
- function createBetterAuthInstance(idpConfig) {
88
+ function createBetterAuthInstance(idpConfig, extraPlugins = [], options = {}) {
85
89
  const appSlug = idpConfig.clientSlug || (0, app_slug_1.getAppSlug)();
90
+ const basePath = options.basePath || '/api/auth';
86
91
  // Resolve base URL: BETTER_AUTH_URL env > IDP config > localhost fallback
87
- // Must include /api/auth since that's where the catch-all route is mounted
92
+ // basePath defaults to /api/auth but can be overridden via options for migration scenarios
88
93
  const rawBaseURL = process.env.BETTER_AUTH_URL
89
94
  || idpConfig.baseClientUrl
90
95
  || `http://localhost:${process.env.PORT || '3000'}`;
91
- const baseURL = rawBaseURL.replace(/\/+$/, '') + '/api/auth';
96
+ const baseURL = rawBaseURL.replace(/\/+$/, '') + basePath;
92
97
  return (0, better_auth_1.betterAuth)({
93
98
  baseURL,
94
99
  secret: idpConfig.nextAuthSecret,
@@ -148,6 +153,7 @@ function createBetterAuthInstance(idpConfig) {
148
153
  },
149
154
  },
150
155
  plugins: [
156
+ ...extraPlugins,
151
157
  (0, next_js_1.nextCookies)(),
152
158
  ],
153
159
  });
@@ -167,12 +173,12 @@ let cachedInstance = null;
167
173
  exports.__betterAuthInstance = cachedInstance;
168
174
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
169
175
  let initPromise = null;
170
- async function getBetterAuthInstance() {
176
+ async function getBetterAuthInstance(extraPlugins = []) {
171
177
  if (cachedInstance)
172
178
  return cachedInstance;
173
179
  if (!initPromise) {
174
180
  initPromise = (0, idp_client_config_1.getIDPClientConfig)(true).then(config => {
175
- const instance = createBetterAuthInstance(config);
181
+ const instance = createBetterAuthInstance(config, extraPlugins);
176
182
  exports.__betterAuthInstance = cachedInstance = instance;
177
183
  console.log('[BETTER_AUTH] Instance created for', config.clientSlug || config.clientId);
178
184
  return instance;
@@ -36,7 +36,7 @@ export declare function getAuthInstance(): Promise<import("better-auth/types").A
36
36
  };
37
37
  };
38
38
  };
39
- plugins: [{
39
+ plugins: [...any[], {
40
40
  id: "next-cookies";
41
41
  hooks: {
42
42
  before: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payez/next-mvp",
3
- "version": "4.0.41",
3
+ "version": "4.0.43",
4
4
  "sideEffects": false,
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -48,21 +48,45 @@ export function buildBetterAuthProviders(
48
48
  return providers;
49
49
  }
50
50
 
51
+ /**
52
+ * Optional extra plugins for createBetterAuthInstance.
53
+ * Use to add credentials/custom signin endpoints from the host app.
54
+ */
55
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
+ export type BetterAuthExtraPlugins = any[];
57
+
58
+ /**
59
+ * Optional overrides for createBetterAuthInstance.
60
+ */
61
+ export interface BetterAuthInstanceOptions {
62
+ /** Path suffix for the BA mount (default: '/api/auth'). Use '/api/ba-auth' for migration scenarios. */
63
+ basePath?: string;
64
+ }
65
+
51
66
  /**
52
67
  * Create Better Auth instance from IDP config.
53
68
  *
54
69
  * No database — runs in stateless mode with JWE cookie cache.
55
70
  * Call after getIDPClientConfig() resolves.
71
+ *
72
+ * @param idpConfig IDP client config (from getIDPClientConfig)
73
+ * @param extraPlugins Optional plugins to add (e.g., credentials plugin from host app)
74
+ * @param options Optional overrides (e.g., basePath for migration scenarios)
56
75
  */
57
- export function createBetterAuthInstance(idpConfig: IDPClientConfig) {
76
+ export function createBetterAuthInstance(
77
+ idpConfig: IDPClientConfig,
78
+ extraPlugins: BetterAuthExtraPlugins = [],
79
+ options: BetterAuthInstanceOptions = {}
80
+ ) {
58
81
  const appSlug = idpConfig.clientSlug || getAppSlug();
82
+ const basePath = options.basePath || '/api/auth';
59
83
 
60
84
  // Resolve base URL: BETTER_AUTH_URL env > IDP config > localhost fallback
61
- // Must include /api/auth since that's where the catch-all route is mounted
85
+ // basePath defaults to /api/auth but can be overridden via options for migration scenarios
62
86
  const rawBaseURL = process.env.BETTER_AUTH_URL
63
87
  || idpConfig.baseClientUrl
64
88
  || `http://localhost:${process.env.PORT || '3000'}`;
65
- const baseURL = rawBaseURL.replace(/\/+$/, '') + '/api/auth';
89
+ const baseURL = rawBaseURL.replace(/\/+$/, '') + basePath;
66
90
 
67
91
  return betterAuth({
68
92
  baseURL,
@@ -123,6 +147,7 @@ export function createBetterAuthInstance(idpConfig: IDPClientConfig) {
123
147
  },
124
148
 
125
149
  plugins: [
150
+ ...extraPlugins,
126
151
  nextCookies(),
127
152
  ],
128
153
  });
@@ -148,12 +173,12 @@ let initPromise: Promise<any> | null = null;
148
173
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
174
  export { cachedInstance as __betterAuthInstance };
150
175
 
151
- export async function getBetterAuthInstance() {
176
+ export async function getBetterAuthInstance(extraPlugins: BetterAuthExtraPlugins = []) {
152
177
  if (cachedInstance) return cachedInstance;
153
178
 
154
179
  if (!initPromise) {
155
180
  initPromise = getIDPClientConfig(true).then(config => {
156
- const instance = createBetterAuthInstance(config);
181
+ const instance = createBetterAuthInstance(config, extraPlugins);
157
182
  cachedInstance = instance;
158
183
  console.log('[BETTER_AUTH] Instance created for', config.clientSlug || config.clientId);
159
184
  return instance;