@mostajs/auth 1.0.3 → 2.0.0

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.
@@ -0,0 +1,3 @@
1
+ export declare function hasPermission(userPermissions: string[], requiredPermission: string): boolean;
2
+ export declare function hasAllPermissions(userPermissions: string[], requiredPermissions: string[]): boolean;
3
+ export declare function hasAnyPermission(userPermissions: string[], requiredPermissions: string[]): boolean;
@@ -0,0 +1,16 @@
1
+ // Permission helpers — pure utility functions (zero dependencies)
2
+ // Originates from @mostajs/socle — inlined here to avoid the dependency
3
+ // Author: Dr Hamid MADANI drmdh@msn.com
4
+ export function hasPermission(userPermissions, requiredPermission) {
5
+ if (!userPermissions || userPermissions.length === 0)
6
+ return false;
7
+ if (userPermissions.includes('*'))
8
+ return true;
9
+ return userPermissions.includes(requiredPermission);
10
+ }
11
+ export function hasAllPermissions(userPermissions, requiredPermissions) {
12
+ return requiredPermissions.every(p => hasPermission(userPermissions, p));
13
+ }
14
+ export function hasAnyPermission(userPermissions, requiredPermissions) {
15
+ return requiredPermissions.some(p => hasPermission(userPermissions, p));
16
+ }
package/dist/index.d.ts CHANGED
@@ -1,14 +1,5 @@
1
- export { createAuthHandlers } from './lib/auth';
2
- export { createAuthChecks } from './lib/auth-check';
3
- export { createAuthMiddleware } from './middleware/auth-middleware';
4
- export type { AuthMiddlewareOptions } from './middleware/auth-middleware';
5
- export { hashPassword, comparePassword } from './lib/password';
6
- export { hasPermission, hasAllPermissions, hasAnyPermission } from '@mostajs/socle';
7
- export { getPermissionsForRoleFromDB } from '@mostajs/rbac/lib/permissions-server';
8
- export { seedRBAC } from '@mostajs/rbac/lib/rbac-seed';
9
- export type { SeedRBACOptions } from '@mostajs/rbac/lib/rbac-seed';
1
+ export { hasPermission, hasAllPermissions, hasAnyPermission } from './helpers/permissions';
10
2
  export { UserSchema, RoleSchema, PermissionSchema, PermissionCategorySchema } from '@mostajs/rbac';
11
- export { UserRepository, RoleRepository, PermissionRepository, PermissionCategoryRepository } from '@mostajs/rbac';
12
3
  export { usePermissions } from './hooks/usePermissions';
13
4
  export { default as PermissionGuard } from './components/PermissionGuard';
14
5
  export { default as SessionProvider } from './components/SessionProvider';
package/dist/index.js CHANGED
@@ -1,23 +1,10 @@
1
- // @mostajs/auth — Barrel exports
1
+ // @mostajs/auth — Client-safe barrel (NO ORM imports)
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
- // Phase 3: schemas/repos/seed moved to @mostajs/rbac.
4
- // Re-exported here for backwards compatibility.
5
- // Auth factory
6
- export { createAuthHandlers } from './lib/auth';
7
- export { createAuthChecks } from './lib/auth-check';
8
- export { createAuthMiddleware } from './middleware/auth-middleware';
9
- // Password utils (stays in auth — it's authentication)
10
- export { hashPassword, comparePassword } from './lib/password';
11
- // Permission helpers (hasPermission now lives in @mostajs/socle)
12
- export { hasPermission, hasAllPermissions, hasAnyPermission } from '@mostajs/socle';
13
- // Server-side permission DB lookup (re-export from rbac)
14
- export { getPermissionsForRoleFromDB } from '@mostajs/rbac/lib/permissions-server';
15
- // RBAC seed (re-export from rbac)
16
- export { seedRBAC } from '@mostajs/rbac/lib/rbac-seed';
17
- // Schemas (re-export from rbac)
3
+ // For server-side code (repos, seed, auth handlers), use '@mostajs/auth/server'
4
+ // Permission helpers (pure utilities — no external dependency)
5
+ export { hasPermission, hasAllPermissions, hasAnyPermission } from './helpers/permissions';
6
+ // Schemas (re-export from rbac pure data, no ORM)
18
7
  export { UserSchema, RoleSchema, PermissionSchema, PermissionCategorySchema } from '@mostajs/rbac';
19
- // Repositories (re-export from rbac)
20
- export { UserRepository, RoleRepository, PermissionRepository, PermissionCategoryRepository } from '@mostajs/rbac';
21
8
  // Hooks
22
9
  export { usePermissions } from './hooks/usePermissions';
23
10
  // Components
@@ -1,7 +1,7 @@
1
1
  // @mosta/auth — Server-side auth guards
2
2
  // Author: Dr Hamid MADANI drmdh@msn.com
3
3
  import { NextResponse } from 'next/server';
4
- import { hasPermission } from '@mostajs/socle';
4
+ import { hasPermission } from '../helpers/permissions';
5
5
  import { getPermissionsForRoleFromDB } from '@mostajs/rbac/lib/permissions-server';
6
6
  /**
7
7
  * Create server-side guard functions bound to your auth() instance.
package/dist/lib/auth.js CHANGED
@@ -3,13 +3,8 @@
3
3
  // Phase 3: schemas/repos imported from @mostajs/rbac
4
4
  import NextAuth from 'next-auth';
5
5
  import CredentialsProvider from 'next-auth/providers/credentials';
6
- import { getDialect, registerSchemas } from '@mostajs/orm';
7
- import { UserRepository, RoleRepository } from '@mostajs/rbac';
8
- import { UserSchema, RoleSchema, PermissionSchema, PermissionCategorySchema } from '@mostajs/rbac';
6
+ import { getRbacRepos } from '@mostajs/rbac/lib/repos-factory';
9
7
  import { comparePassword } from './password';
10
- // Auto-register RBAC schemas into ORM registry (idempotent)
11
- // Must run before getDialect() to ensure relations are resolvable
12
- registerSchemas([UserSchema, RoleSchema, PermissionSchema, PermissionCategorySchema]);
13
8
  /**
14
9
  * Create NextAuth handlers configured for MostaAuth RBAC.
15
10
  *
@@ -38,8 +33,8 @@ export function createAuthHandlers(rolePermissions, config) {
38
33
  async authorize(credentials) {
39
34
  if (!credentials?.email || !credentials?.password)
40
35
  return null;
41
- const uRepo = new UserRepository(await getDialect());
42
- const user = await uRepo.findByEmail(credentials.email);
36
+ const { users } = await getRbacRepos();
37
+ const user = await users.findByEmail(credentials.email);
43
38
  if (!user)
44
39
  return null;
45
40
  if (user.status !== 'active')
@@ -47,7 +42,7 @@ export function createAuthHandlers(rolePermissions, config) {
47
42
  const valid = await comparePassword(credentials.password, user.password);
48
43
  if (!valid)
49
44
  return null;
50
- await uRepo.updateLastLogin(user.id);
45
+ await users.updateLastLogin(user.id);
51
46
  const { roleNames, permissions } = await resolveUserPermissions(user.id, rolePermissions);
52
47
  return {
53
48
  id: user.id,
@@ -100,9 +95,8 @@ export function createAuthHandlers(rolePermissions, config) {
100
95
  // ─── Internal: resolve user→roles→permissions ─────────────────
101
96
  async function resolveUserPermissions(userId, fallbackMap) {
102
97
  try {
103
- const uRepo = new UserRepository(await getDialect());
104
- const rRepo = new RoleRepository(await getDialect());
105
- const userWithRoles = await uRepo.findByIdWithRoles(userId);
98
+ const { users, roles: rolesRepo } = await getRbacRepos();
99
+ const userWithRoles = await users.findByIdWithRoles(userId);
106
100
  if (userWithRoles?.roles?.length) {
107
101
  const roleNames = [];
108
102
  const permissions = [];
@@ -112,7 +106,7 @@ async function resolveUserPermissions(userId, fallbackMap) {
112
106
  if (roleName)
113
107
  roleNames.push(roleName);
114
108
  if (roleId) {
115
- const roleWithPerms = await rRepo.findByIdWithPermissions(roleId);
109
+ const roleWithPerms = await rolesRepo.findByIdWithPermissions(roleId);
116
110
  if (roleWithPerms?.permissions) {
117
111
  for (const perm of roleWithPerms.permissions) {
118
112
  const permName = typeof perm === 'string' ? perm : perm?.name;
@@ -1,4 +1,9 @@
1
- import type { ModuleRegistration } from '@mostajs/socle';
1
+ /** Minimal registration shape avoids hard dependency on @mostajs/socle */
2
+ interface ModuleRegistrationLike {
3
+ manifest: Record<string, unknown>;
4
+ [key: string]: unknown;
5
+ }
2
6
  export declare function register(registry: {
3
- register(r: ModuleRegistration): void;
7
+ register(r: ModuleRegistrationLike): void;
4
8
  }): void;
9
+ export {};
@@ -0,0 +1,9 @@
1
+ export { createAuthHandlers } from './lib/auth';
2
+ export { createAuthChecks } from './lib/auth-check';
3
+ export { createAuthMiddleware } from './middleware/auth-middleware';
4
+ export type { AuthMiddlewareOptions } from './middleware/auth-middleware';
5
+ export { hashPassword, comparePassword } from './lib/password';
6
+ export { getPermissionsForRoleFromDB } from '@mostajs/rbac/lib/permissions-server';
7
+ export { seedRBAC } from '@mostajs/rbac/lib/rbac-seed';
8
+ export type { SeedRBACOptions } from '@mostajs/rbac/lib/rbac-seed';
9
+ export { UserRepository, RoleRepository, PermissionRepository, PermissionCategoryRepository } from '@mostajs/rbac/server';
package/dist/server.js ADDED
@@ -0,0 +1,15 @@
1
+ // @mostajs/auth/server — Server-side exports (ORM-dependent)
2
+ // Author: Dr Hamid MADANI drmdh@msn.com
3
+ // Import from '@mostajs/auth/server' in API routes and server code
4
+ // Auth handler factories (depend on ORM via rbac repos)
5
+ export { createAuthHandlers } from './lib/auth';
6
+ export { createAuthChecks } from './lib/auth-check';
7
+ export { createAuthMiddleware } from './middleware/auth-middleware';
8
+ // Password utils
9
+ export { hashPassword, comparePassword } from './lib/password';
10
+ // Server-side permission DB lookup (re-export from rbac/server)
11
+ export { getPermissionsForRoleFromDB } from '@mostajs/rbac/lib/permissions-server';
12
+ // RBAC seed (re-export from rbac/server)
13
+ export { seedRBAC } from '@mostajs/rbac/lib/rbac-seed';
14
+ // Repositories (re-export from rbac/server)
15
+ export { UserRepository, RoleRepository, PermissionRepository, PermissionCategoryRepository } from '@mostajs/rbac/server';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mostajs/auth",
3
- "version": "1.0.3",
3
+ "version": "2.0.0",
4
4
  "description": "Authentication — NextAuth, password hashing, session management",
5
5
  "author": "Dr Hamid MADANI <drmdh@msn.com>",
6
6
  "license": "MIT",
@@ -53,6 +53,11 @@
53
53
  "import": "./dist/middleware/auth-middleware.js",
54
54
  "default": "./dist/middleware/auth-middleware.js"
55
55
  },
56
+ "./server": {
57
+ "types": "./dist/server.d.ts",
58
+ "import": "./dist/server.js",
59
+ "default": "./dist/server.js"
60
+ },
56
61
  "./register": {
57
62
  "types": "./dist/register.d.ts",
58
63
  "import": "./dist/register.js",
@@ -88,19 +93,18 @@
88
93
  "prepublishOnly": "npm run build"
89
94
  },
90
95
  "dependencies": {
91
- "@mostajs/orm": "^1.0.0",
96
+ "@mostajs/net": "^2.0.0",
97
+ "@mostajs/orm": "^1.7.0",
92
98
  "bcryptjs": "^2.4.3"
93
99
  },
94
100
  "peerDependencies": {
95
101
  "@mostajs/rbac": ">=1.0.0",
96
- "@mostajs/socle": ">=2.0.0",
97
102
  "next": ">=14",
98
103
  "next-auth": ">=5.0.0-beta.25",
99
104
  "react": ">=18"
100
105
  },
101
106
  "devDependencies": {
102
- "@mostajs/rbac": "^1.0.4",
103
- "@mostajs/socle": "^2.0.0",
107
+ "@mostajs/rbac": "^2.0.1",
104
108
  "@types/bcryptjs": "^2.4.0",
105
109
  "@types/node": "^25.3.3",
106
110
  "@types/react": "^19.0.0",