@infuro/cms-core 1.0.46 → 1.0.50

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 (65) hide show
  1. package/README.md +30 -16
  2. package/dist/admin.cjs +4568 -2716
  3. package/dist/admin.d.cts +18 -4
  4. package/dist/admin.d.ts +18 -4
  5. package/dist/admin.js +3475 -1625
  6. package/dist/api.cjs +38 -39
  7. package/dist/api.d.cts +9 -3
  8. package/dist/api.d.ts +9 -3
  9. package/dist/api.js +6 -7
  10. package/dist/auth.cjs +84 -51
  11. package/dist/auth.d.cts +105 -4
  12. package/dist/auth.d.ts +105 -4
  13. package/dist/auth.js +4 -3
  14. package/dist/chunk-2IAXTKQN.cjs +19 -0
  15. package/dist/chunk-3EOM4V2M.cjs +452 -0
  16. package/dist/{chunk-X6UQFV4X.cjs → chunk-77NUXO6A.cjs} +14 -12
  17. package/dist/{chunk-KFFB6EMZ.js → chunk-AYERBA7I.js} +3 -7
  18. package/dist/chunk-EIZKW2PF.js +13 -0
  19. package/dist/{chunk-CRYKVJTO.js → chunk-IPDHT2UV.js} +1420 -3
  20. package/dist/{chunk-UDVLFVEC.cjs → chunk-JCMOOPNX.cjs} +3820 -2907
  21. package/dist/{chunk-X47PBV4I.js → chunk-JE22VP6S.js} +1 -0
  22. package/dist/{chunk-DN65KDIA.js → chunk-JIWUVQ6B.js} +14 -13
  23. package/dist/{chunk-HT5DI3XW.cjs → chunk-KOTXDSQB.cjs} +1 -0
  24. package/dist/{chunk-UKC3HYXI.js → chunk-LT2WOPKA.js} +3733 -2813
  25. package/dist/chunk-RK5ETF2I.js +434 -0
  26. package/dist/{chunk-SPQFNIYJ.cjs → chunk-TJ2MIQUT.cjs} +3 -7
  27. package/dist/{chunk-TCSGFAWB.cjs → chunk-UUWAUHUW.cjs} +1451 -3
  28. package/dist/{chunk-57O3HZPG.js → chunk-WRKV6MHB.js} +415 -3
  29. package/dist/{chunk-FBKDMRQL.cjs → chunk-YV5PK4JW.cjs} +427 -7
  30. package/dist/cli.cjs +13 -22
  31. package/dist/cli.js +13 -22
  32. package/dist/{emit-order-notification-trigger-IVLWKKJL.js → emit-order-notification-trigger-6XX7LSC4.js} +1 -1
  33. package/dist/{emit-order-notification-trigger-D2N3KFHL.cjs → emit-order-notification-trigger-NASG7ZEO.cjs} +3 -3
  34. package/dist/{event-order-defaults-EMWBIGL3.cjs → event-order-defaults-DU7V3YND.cjs} +9 -9
  35. package/dist/{event-order-defaults-SDRNAZHC.js → event-order-defaults-H4RT7NMR.js} +1 -1
  36. package/dist/hooks.cjs +43 -0
  37. package/dist/hooks.d.cts +10 -1
  38. package/dist/hooks.d.ts +10 -1
  39. package/dist/hooks.js +39 -1
  40. package/dist/index.cjs +479 -339
  41. package/dist/index.d.cts +181 -20
  42. package/dist/index.d.ts +181 -20
  43. package/dist/index.js +115 -13
  44. package/dist/migrations/1782200000000-VendorTeamProfiles.ts +233 -0
  45. package/dist/migrations/1782300000000-AddTypeToOrderNotificationBindings.ts +75 -0
  46. package/dist/migrations/1782400000000-CreateUserDeviceTokens.ts +36 -0
  47. package/dist/migrations/1782500000000-AddPushToOrderNotificationBindingsChannelEnum.ts +15 -0
  48. package/dist/{order-notification-dispatcher-ZJZB2HUN.js → order-notification-dispatcher-3TA4ETYJ.js} +1 -2
  49. package/dist/{order-notification-dispatcher-SBQAMM5V.cjs → order-notification-dispatcher-ZEAZ5SHV.cjs} +7 -4
  50. package/dist/{rbac-debug-db-2SGNLANF.js → rbac-debug-db-6EMIVMGF.js} +1 -1
  51. package/dist/{rbac-debug-db-4Z6A425H.cjs → rbac-debug-db-6PWTLBEL.cjs} +2 -2
  52. package/dist/theme.cjs +6 -1
  53. package/dist/theme.d.cts +4 -1
  54. package/dist/theme.d.ts +4 -1
  55. package/dist/theme.js +3 -1
  56. package/package.json +1 -1
  57. package/src/admin/admin.css +7 -0
  58. package/dist/chunk-7PMHZRF3.cjs +0 -872
  59. package/dist/chunk-CQHXW4TR.js +0 -107
  60. package/dist/chunk-GUSHM5HN.js +0 -862
  61. package/dist/chunk-NBY4NVTY.cjs +0 -182
  62. package/dist/chunk-SF2XKMCI.js +0 -171
  63. package/dist/chunk-XMRMZ6NQ.cjs +0 -109
  64. package/dist/send-order-placed-emails-B5ZVJT7T.cjs +0 -15
  65. package/dist/send-order-placed-emails-WPI37KRZ.js +0 -6
package/README.md CHANGED
@@ -278,22 +278,24 @@ Create `src/app/api/auth/[...nextauth]/route.ts`:
278
278
 
279
279
  ```ts
280
280
  import NextAuth from 'next-auth';
281
- import { getNextAuthOptions } from '@infuro/cms-core/auth';
281
+ import { buildNextAuthOptions } from '@infuro/cms-core/auth';
282
282
  import { getDataSourceInitialized } from '@/lib/data-source';
283
- import { CMS_ENTITY_MAP } from '@infuro/cms-core';
283
+ import { CMS_ENTITY_MAP, enrichUserWithVendorContext } from '@infuro/cms-core';
284
284
  import bcrypt from 'bcryptjs';
285
285
 
286
286
  async function getOptions() {
287
287
  const dataSource = await getDataSourceInitialized();
288
288
  const userRepo = dataSource.getRepository(CMS_ENTITY_MAP.users);
289
- return getNextAuthOptions({
289
+ // Loads Google OAuth from Plugins → Authentication Provider (and GOOGLE_* env fallback)
290
+ return buildNextAuthOptions({
291
+ dataSource,
292
+ entityMap: CMS_ENTITY_MAP,
290
293
  getUserByEmail: async (email: string) => {
291
294
  const user = await userRepo.findOne({
292
295
  where: { email },
293
296
  relations: ['group', 'group.permissions'],
294
- select: ['id', 'email', 'name', 'password', 'blocked', 'deleted', 'groupId', 'adminAccess'],
297
+ select: ['id', 'email', 'name', 'password', 'blocked', 'inviteStatus', 'deleted', 'groupId', 'adminAccess'],
295
298
  });
296
- const { enrichUserWithVendorContext } = await import('@infuro/cms-core');
297
299
  return enrichUserWithVendorContext(dataSource, user as any);
298
300
  },
299
301
  comparePassword: (plain, hash) => Promise.resolve(bcrypt.compareSync(plain, hash)),
@@ -301,21 +303,29 @@ async function getOptions() {
301
303
  });
302
304
  }
303
305
 
304
- let handler: ReturnType<typeof NextAuth> | null = null;
305
-
306
- async function getHandler() {
307
- if (!handler) handler = NextAuth(await getOptions());
308
- return handler;
309
- }
306
+ type NextAuthContext = { params: Promise<{ nextauth?: string[] }> };
310
307
 
311
- export async function GET(req: Request) {
312
- return ((await getHandler()) as any).GET(req);
308
+ export async function GET(req: Request, context: NextAuthContext) {
309
+ return NextAuth(await getOptions())(req, context);
313
310
  }
314
- export async function POST(req: Request) {
315
- return ((await getHandler()) as any).POST(req);
311
+ export async function POST(req: Request, context: NextAuthContext) {
312
+ return NextAuth(await getOptions())(req, context);
316
313
  }
317
314
  ```
318
315
 
316
+ ### Google sign-in (Authentication Provider)
317
+
318
+ 1. In Google Cloud Console, create a **Web** OAuth client.
319
+ 2. Add authorized redirect URI: `{NEXTAUTH_URL}/api/auth/callback/google` (e.g. `http://localhost:3000/api/auth/callback/google`).
320
+ 3. In admin → **Plugins → Authentication Provider**, enable Google, paste Client ID and Client Secret, save.
321
+ 4. Ensure `NEXTAUTH_URL` matches the redirect host.
322
+ 5. Invite or create the user with the same email as their Google account (existing users only).
323
+ 6. On `/admin/signin`, use **Continue with Google**.
324
+
325
+ Optional env fallback (without Plugins UI): `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `GOOGLE_AUTH_ENABLED=true`.
326
+
327
+ Host apps already using a cached `getNextAuthOptions` handler should switch to `buildNextAuthOptions` (as above) so plugin settings apply without a process restart.
328
+
319
329
  ### 9. Mount the admin panel
320
330
 
321
331
  Create `src/app/admin/layout.tsx`:
@@ -387,6 +397,7 @@ const cmsMiddleware = createCmsMiddleware({
387
397
  '/api/users/forgot-password': ['POST'],
388
398
  '/api/users/set-password': ['POST'],
389
399
  '/api/users/invite': ['POST'],
400
+ '/api/settings/auth_providers': ['GET'],
390
401
  },
391
402
  });
392
403
 
@@ -596,7 +607,7 @@ const service = cms.getPlugin<MyService>('my-plugin');
596
607
  |-------------|----------|
597
608
  | `@infuro/cms-core` | Entities, plugins, registry, utilities |
598
609
  | `@infuro/cms-core/api` | `createCmsApiHandler`, CRUD handlers, auth handlers |
599
- | `@infuro/cms-core/auth` | `createAuthHelpers`, `createCmsMiddleware`, `getNextAuthOptions` |
610
+ | `@infuro/cms-core/auth` | `createAuthHelpers`, `createCmsMiddleware`, `getNextAuthOptions`, `buildNextAuthOptions`, Google auth helpers |
600
611
  | `@infuro/cms-core/admin` | Admin layout, pages, components (React, `'use client'`) |
601
612
  | `@infuro/cms-core/hooks` | `useIsMobile`, `useAnalytics`, `usePlugin` |
602
613
 
@@ -696,6 +707,9 @@ The CSS variables are injected by the admin layout at runtime. Your website's ow
696
707
  | `DATABASE_URL` | Yes | PostgreSQL connection string |
697
708
  | `NEXTAUTH_SECRET` | Yes | NextAuth JWT secret |
698
709
  | `NEXTAUTH_URL` | Yes | App base URL |
710
+ | `GOOGLE_CLIENT_ID` | If Google login (env) | Web OAuth client ID (or set via Plugins → Authentication Provider) |
711
+ | `GOOGLE_CLIENT_SECRET` | If Google login (env) | Web OAuth client secret |
712
+ | `GOOGLE_AUTH_ENABLED` | No | When using env credentials, set `true` to enable Google (defaults on if both ID/secret set) |
699
713
  | `STORAGE_TYPE` | No | `s3` or `local` (default: local) |
700
714
  | `AWS_BUCKET_NAME` | If S3 | S3 bucket name |
701
715
  | `AWS_REGION` | If S3 | Default AWS region |