@nsxbet/admin-sdk 0.1.0 → 0.2.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.
package/README.md CHANGED
@@ -511,6 +511,82 @@ function MyComponent() {
511
511
  }
512
512
  ```
513
513
 
514
+ ## Custom Mock Users for Development
515
+
516
+ During standalone development, the SDK uses an in-memory auth client with default mock users. You can customize these users to match your module's specific permission requirements.
517
+
518
+ ### Using `createMockUsersFromRoles()`
519
+
520
+ The simplest way to create custom mock users is with the `createMockUsersFromRoles()` factory:
521
+
522
+ ```typescript
523
+ import {
524
+ AdminShell,
525
+ createInMemoryAuthClient,
526
+ createMockUsersFromRoles,
527
+ } from "@nsxbet/admin-sdk";
528
+
529
+ // Define roles for your module
530
+ const mockUsers = createMockUsersFromRoles({
531
+ admin: [
532
+ "admin.payments.view",
533
+ "admin.payments.edit",
534
+ "admin.payments.delete",
535
+ ],
536
+ editor: ["admin.payments.view", "admin.payments.edit"],
537
+ viewer: ["admin.payments.view"],
538
+ noAccess: [],
539
+ });
540
+
541
+ // Create auth client with custom users
542
+ const authClient = createInMemoryAuthClient({ users: mockUsers });
543
+
544
+ // Use in standalone.tsx
545
+ ReactDOM.createRoot(document.getElementById("root")!).render(
546
+ <AdminShell authClient={authClient} modules={[manifest]}>
547
+ <App />
548
+ </AdminShell>
549
+ );
550
+ ```
551
+
552
+ This creates 4 standard user types with your custom roles:
553
+ - **Admin User** - Full access (all roles in `admin` array)
554
+ - **Editor User** - View/edit access (roles in `editor` array)
555
+ - **Viewer User** - View-only access (roles in `viewer` array)
556
+ - **No Access User** - No permissions (roles in `noAccess` array)
557
+
558
+ ### Using Custom Users Directly
559
+
560
+ For more control, pass custom `MockUser` objects directly:
561
+
562
+ ```typescript
563
+ import { createInMemoryAuthClient, type MockUser } from "@nsxbet/admin-sdk";
564
+
565
+ const customUsers: MockUser[] = [
566
+ {
567
+ id: "super-admin",
568
+ email: "superadmin@example.com",
569
+ displayName: "Super Admin",
570
+ roles: ["*"], // Wildcard: all permissions
571
+ },
572
+ {
573
+ id: "payments-admin",
574
+ email: "payments@example.com",
575
+ displayName: "Payments Admin",
576
+ roles: ["admin.payments.view", "admin.payments.edit"],
577
+ },
578
+ ];
579
+
580
+ const authClient = createInMemoryAuthClient({ users: customUsers });
581
+ ```
582
+
583
+ ### Options
584
+
585
+ | Option | Type | Default | Description |
586
+ |--------|------|---------|-------------|
587
+ | `users` | MockUser[] | **required** | Mock users available for selection |
588
+ | `storageKey` | string | `"@nsxbet/auth"` | localStorage key for persistence |
589
+
514
590
  ## DO NOT (Common Mistakes)
515
591
 
516
592
  ### ❌ DO NOT use MemoryRouter
@@ -5,21 +5,63 @@
5
5
  * Users can be selected from a predefined list or created custom.
6
6
  */
7
7
  import type { MockUser, InMemoryAuthClient } from './interface';
8
+ /**
9
+ * Role configuration for creating mock users
10
+ */
11
+ export interface MockUserRoles {
12
+ /** Roles for the admin user (full access) */
13
+ admin: string[];
14
+ /** Roles for the editor user (view/edit, no delete) */
15
+ editor: string[];
16
+ /** Roles for the viewer user (view only) */
17
+ viewer: string[];
18
+ /** Roles for the no-access user (typically empty) */
19
+ noAccess: string[];
20
+ }
21
+ /**
22
+ * Create mock users from a role configuration
23
+ *
24
+ * Generates the standard 4 user types (admin, editor, viewer, no-access)
25
+ * with custom roles. Use with `createInMemoryAuthClient({ users: ... })`.
26
+ *
27
+ * @example
28
+ * ```typescript
29
+ * const mockUsers = createMockUsersFromRoles({
30
+ * admin: ['admin.payments.view', 'admin.payments.edit', 'admin.payments.delete'],
31
+ * editor: ['admin.payments.view', 'admin.payments.edit'],
32
+ * viewer: ['admin.payments.view'],
33
+ * noAccess: [],
34
+ * });
35
+ *
36
+ * const authClient = createInMemoryAuthClient({ users: mockUsers });
37
+ * ```
38
+ */
39
+ export declare function createMockUsersFromRoles(roles: MockUserRoles): MockUser[];
8
40
  /**
9
41
  * Options for creating an in-memory auth client
10
42
  */
11
43
  export interface InMemoryAuthClientOptions {
12
- /** Custom mock users (merged with defaults) */
13
- users?: MockUser[];
14
- /** Replace default users instead of merging */
15
- replaceDefaults?: boolean;
44
+ /** Mock users available for selection (required) */
45
+ users: MockUser[];
16
46
  /** localStorage key prefix (defaults to '@nsxbet/auth') */
17
47
  storageKey?: string;
18
48
  }
19
49
  /**
20
50
  * Create an in-memory auth client for development/testing
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const mockUsers = createMockUsersFromRoles({
55
+ * admin: ['admin.tasks.view', 'admin.tasks.edit', 'admin.tasks.delete'],
56
+ * editor: ['admin.tasks.view', 'admin.tasks.edit'],
57
+ * viewer: ['admin.tasks.view'],
58
+ * noAccess: [],
59
+ * });
60
+ *
61
+ * const authClient = createInMemoryAuthClient({ users: mockUsers });
62
+ * ```
21
63
  */
22
- export declare function createInMemoryAuthClient(options?: InMemoryAuthClientOptions): InMemoryAuthClient;
64
+ export declare function createInMemoryAuthClient(options: InMemoryAuthClientOptions): InMemoryAuthClient;
23
65
  /**
24
66
  * Clear in-memory auth storage (useful for tests)
25
67
  */
@@ -1 +1 @@
1
- {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/auth/client/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAgC,MAAM,aAAa,CAAC;AAoD9F;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,+CAA+C;IAC/C,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,+CAA+C;IAC/C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,yBAA8B,GAAG,kBAAkB,CAiNpG;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,SAAsB,GAAG,IAAI,CAExE"}
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/auth/client/in-memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAgC,MAAM,aAAa,CAAC;AAE9F;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,uDAAuD;IACvD,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,aAAa,GAAG,QAAQ,EAAE,CA2BzE;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,oDAAoD;IACpD,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAYD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CA6M/F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,SAAsB,GAAG,IAAI,CAExE"}
@@ -5,62 +5,71 @@
5
5
  * Users can be selected from a predefined list or created custom.
6
6
  */
7
7
  /**
8
- * Default mock users
8
+ * Create mock users from a role configuration
9
+ *
10
+ * Generates the standard 4 user types (admin, editor, viewer, no-access)
11
+ * with custom roles. Use with `createInMemoryAuthClient({ users: ... })`.
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const mockUsers = createMockUsersFromRoles({
16
+ * admin: ['admin.payments.view', 'admin.payments.edit', 'admin.payments.delete'],
17
+ * editor: ['admin.payments.view', 'admin.payments.edit'],
18
+ * viewer: ['admin.payments.view'],
19
+ * noAccess: [],
20
+ * });
21
+ *
22
+ * const authClient = createInMemoryAuthClient({ users: mockUsers });
23
+ * ```
9
24
  */
10
- const DEFAULT_MOCK_USERS = [
11
- {
12
- id: 'admin-user',
13
- email: 'admin@example.com',
14
- displayName: 'Admin User',
15
- roles: [
16
- 'admin',
17
- // Tasks - full access
18
- 'admin.tasks.view',
19
- 'admin.tasks.edit',
20
- 'admin.tasks.delete',
21
- // Users - full access
22
- 'admin.users.view',
23
- 'admin.users.edit',
24
- 'admin.users.delete',
25
- ],
26
- },
27
- {
28
- id: 'editor-user',
29
- email: 'editor@example.com',
30
- displayName: 'Editor User',
31
- roles: [
32
- // Tasks - can create/edit, no delete
33
- 'admin.tasks.view',
34
- 'admin.tasks.edit',
35
- // Users - view only
36
- 'admin.users.view',
37
- ],
38
- },
39
- {
40
- id: 'viewer-user',
41
- email: 'viewer@example.com',
42
- displayName: 'Viewer User',
43
- roles: [
44
- // View only - no edit or delete
45
- 'admin.tasks.view',
46
- 'admin.users.view',
47
- ],
48
- },
49
- {
50
- id: 'no-access-user',
51
- email: 'noaccess@example.com',
52
- displayName: 'No Access User',
53
- roles: [],
54
- },
55
- ];
25
+ export function createMockUsersFromRoles(roles) {
26
+ return [
27
+ {
28
+ id: 'admin-user',
29
+ email: 'admin@example.com',
30
+ displayName: 'Admin User',
31
+ roles: roles.admin,
32
+ },
33
+ {
34
+ id: 'editor-user',
35
+ email: 'editor@example.com',
36
+ displayName: 'Editor User',
37
+ roles: roles.editor,
38
+ },
39
+ {
40
+ id: 'viewer-user',
41
+ email: 'viewer@example.com',
42
+ displayName: 'Viewer User',
43
+ roles: roles.viewer,
44
+ },
45
+ {
46
+ id: 'no-access-user',
47
+ email: 'noaccess@example.com',
48
+ displayName: 'No Access User',
49
+ roles: roles.noAccess,
50
+ },
51
+ ];
52
+ }
56
53
  const DEFAULT_STORAGE_KEY = '@nsxbet/auth';
57
54
  /**
58
55
  * Create an in-memory auth client for development/testing
56
+ *
57
+ * @example
58
+ * ```typescript
59
+ * const mockUsers = createMockUsersFromRoles({
60
+ * admin: ['admin.tasks.view', 'admin.tasks.edit', 'admin.tasks.delete'],
61
+ * editor: ['admin.tasks.view', 'admin.tasks.edit'],
62
+ * viewer: ['admin.tasks.view'],
63
+ * noAccess: [],
64
+ * });
65
+ *
66
+ * const authClient = createInMemoryAuthClient({ users: mockUsers });
67
+ * ```
59
68
  */
60
- export function createInMemoryAuthClient(options = {}) {
61
- const { users: customUsers = [], replaceDefaults = false, storageKey = DEFAULT_STORAGE_KEY, } = options;
62
- // Merge users
63
- const predefinedUsers = replaceDefaults ? customUsers : [...DEFAULT_MOCK_USERS, ...customUsers];
69
+ export function createInMemoryAuthClient(options) {
70
+ const { users, storageKey = DEFAULT_STORAGE_KEY } = options;
71
+ // Use provided users
72
+ const predefinedUsers = users;
64
73
  // State
65
74
  let selectedUser = null;
66
75
  const subscribers = new Set();
@@ -2,6 +2,6 @@
2
2
  * Auth Client exports
3
3
  */
4
4
  export type { AuthClient, InMemoryAuthClient, MockUser, AuthState, AuthStateCallback, } from './interface';
5
- export { createInMemoryAuthClient, clearInMemoryAuth, type InMemoryAuthClientOptions, } from './in-memory';
5
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, type InMemoryAuthClientOptions, type MockUserRoles, } from './in-memory';
6
6
  export { createKeycloakAuthClient, type KeycloakAuthClientOptions, } from './keycloak';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,KAAK,yBAAyB,GAC/B,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/auth/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AAGrB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,YAAY,CAAC"}
@@ -2,6 +2,6 @@
2
2
  * Auth Client exports
3
3
  */
4
4
  // In-memory client
5
- export { createInMemoryAuthClient, clearInMemoryAuth, } from './in-memory';
5
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, } from './in-memory';
6
6
  // Keycloak client
7
7
  export { createKeycloakAuthClient, } from './keycloak';
@@ -1 +1 @@
1
- {"version":3,"file":"UserSelector.d.ts","sourceRoot":"","sources":["../../../src/auth/components/UserSelector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAY,MAAM,qBAAqB,CAAC;AAExE,UAAU,iBAAiB;IACzB,gCAAgC;IAChC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AA2ND;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,iBAAiB,2CAqF7E"}
1
+ {"version":3,"file":"UserSelector.d.ts","sourceRoot":"","sources":["../../../src/auth/components/UserSelector.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,kBAAkB,EAAY,MAAM,qBAAqB,CAAC;AAExE,UAAU,iBAAiB;IACzB,gCAAgC;IAChC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;CAC7B;AA4OD;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,iBAAiB,2CAqF7E"}
@@ -12,13 +12,24 @@ import { Crown, Ban, Eye, User, Users, Sparkles, Wrench, Trash2, Plus, ChevronRi
12
12
  */
13
13
  function getUserIcon(roles) {
14
14
  const iconClass = "h-7 w-7";
15
- if (roles.includes('admin') || roles.includes('*')) {
16
- return _jsx(Crown, { className: `${iconClass} text-amber-500` });
17
- }
15
+ // No roles = no access
18
16
  if (roles.length === 0) {
19
17
  return _jsx(Ban, { className: `${iconClass} text-destructive` });
20
18
  }
21
- if (roles.some((r) => r.includes('view') && !r.includes('edit'))) {
19
+ // Wildcard or 'admin' role = full admin
20
+ if (roles.includes('*') || roles.includes('admin')) {
21
+ return _jsx(Crown, { className: `${iconClass} text-amber-500` });
22
+ }
23
+ // Has delete permission = admin level
24
+ if (roles.some((r) => r.includes('.delete'))) {
25
+ return _jsx(Crown, { className: `${iconClass} text-amber-500` });
26
+ }
27
+ // Has edit permission = editor level
28
+ if (roles.some((r) => r.includes('.edit'))) {
29
+ return _jsx(User, { className: `${iconClass} text-success` });
30
+ }
31
+ // View only
32
+ if (roles.some((r) => r.includes('.view'))) {
22
33
  return _jsx(Eye, { className: `${iconClass} text-info` });
23
34
  }
24
35
  return _jsx(User, { className: `${iconClass} text-muted-foreground` });
@@ -2,6 +2,6 @@
2
2
  * Authentication module exports
3
3
  */
4
4
  export type { AuthClient, InMemoryAuthClient, MockUser, AuthState, AuthStateCallback, } from './client';
5
- export { createInMemoryAuthClient, clearInMemoryAuth, createKeycloakAuthClient, type InMemoryAuthClientOptions, type KeycloakAuthClientOptions, } from './client';
5
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, createKeycloakAuthClient, type InMemoryAuthClientOptions, type MockUserRoles, type KeycloakAuthClientOptions, } from './client';
6
6
  export { UserSelector } from './components';
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,GAC/B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/auth/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
@@ -2,6 +2,6 @@
2
2
  * Authentication module exports
3
3
  */
4
4
  // Auth client factories
5
- export { createInMemoryAuthClient, clearInMemoryAuth, createKeycloakAuthClient, } from './client';
5
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, createKeycloakAuthClient, } from './client';
6
6
  // Auth components
7
7
  export { UserSelector } from './components';
package/dist/index.d.ts CHANGED
@@ -10,8 +10,8 @@ export { usePlatformAPI } from './hooks/usePlatformAPI';
10
10
  export { useFetch } from './hooks/useFetch';
11
11
  export { useTelemetry } from './hooks/useTelemetry';
12
12
  export { useI18n } from './hooks/useI18n';
13
- export { createInMemoryAuthClient, clearInMemoryAuth, createKeycloakAuthClient, UserSelector, } from './auth';
14
- export type { AuthClient, InMemoryAuthClient, MockUser, AuthState, AuthStateCallback, InMemoryAuthClientOptions, KeycloakAuthClientOptions, } from './auth';
13
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, createKeycloakAuthClient, UserSelector, } from './auth';
14
+ export type { AuthClient, InMemoryAuthClient, MockUser, MockUserRoles, AuthState, AuthStateCallback, InMemoryAuthClientOptions, KeycloakAuthClientOptions, } from './auth';
15
15
  export type { PlatformAPI, Breadcrumb, User } from './types/platform';
16
16
  export type { KeycloakConfig } from './types/keycloak';
17
17
  export type { UseAuthResult } from './hooks/useAuth';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGjG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,YAAY,GACb,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,SAAS,EACT,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,QAAQ,CAAC;AAGhB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,QAAQ,CAAC;AAEhB,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAEL,4BAA4B,EAC5B,qBAAqB,EACrB,wBAAwB,EAExB,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAEV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,aAAa,IAAI,qBAAqB,EACtC,iBAAiB,EACjB,YAAY,EACZ,YAAY,IAAI,oBAAoB,EAEpC,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,OAAO,IAAI,eAAe,EAC1B,aAAa,EACb,SAAS,IAAI,iBAAiB,EAE9B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,MAAM,EACN,OAAO,EACP,WAAW,EACX,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,YAAY,EACZ,OAAO,EACP,SAAS,EACT,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGjG,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAG1C,OAAO,EACL,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,wBAAwB,EACxB,YAAY,GACb,MAAM,QAAQ,CAAC;AAEhB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,QAAQ,CAAC;AAGhB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACtE,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGrD,OAAO,EACL,QAAQ,EACR,UAAU,EACV,iBAAiB,EACjB,IAAI,EACJ,iBAAiB,EACjB,YAAY,EACZ,YAAY,GACb,MAAM,QAAQ,CAAC;AAEhB,YAAY,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AAG9C,OAAO,EAEL,4BAA4B,EAC5B,qBAAqB,EACrB,wBAAwB,EAExB,gBAAgB,EAChB,aAAa,EAEb,kBAAkB,EAClB,WAAW,EACX,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAEV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,uBAAuB,EACvB,mBAAmB,EACnB,mBAAmB,EAEnB,mBAAmB,EACnB,aAAa,IAAI,qBAAqB,EACtC,iBAAiB,EACjB,YAAY,EACZ,YAAY,IAAI,oBAAoB,EAEpC,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,OAAO,IAAI,eAAe,EAC1B,aAAa,EACb,SAAS,IAAI,iBAAiB,EAE9B,oBAAoB,EACpB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,UAAU,EACV,MAAM,EACN,OAAO,EACP,WAAW,EACX,cAAc,EACd,aAAa,EACb,QAAQ,EACR,aAAa,EACb,KAAK,EACL,UAAU,EACV,WAAW,GACZ,MAAM,SAAS,CAAC;AAGjB,OAAO,EACL,aAAa,EACb,aAAa,EACb,mBAAmB,GACpB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,YAAY,EACZ,OAAO,EACP,SAAS,EACT,cAAc,EACd,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -13,7 +13,7 @@ export { useFetch } from './hooks/useFetch';
13
13
  export { useTelemetry } from './hooks/useTelemetry';
14
14
  export { useI18n } from './hooks/useI18n';
15
15
  // Auth Client
16
- export { createInMemoryAuthClient, clearInMemoryAuth, createKeycloakAuthClient, UserSelector, } from './auth';
16
+ export { createInMemoryAuthClient, clearInMemoryAuth, createMockUsersFromRoles, createKeycloakAuthClient, UserSelector, } from './auth';
17
17
  // i18n
18
18
  export { initI18n, saveLocale, isSupportedLocale, i18n, SUPPORTED_LOCALES, LOCALE_FLAGS, LOCALE_NAMES, } from './i18n';
19
19
  // Registry
@@ -1 +1 @@
1
- {"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../src/shell/AdminShell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8RD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,SAAc,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EACd,MAAM,EACN,gBAAuB,EACvB,WAAqB,GACtB,EAAE,eAAe,2CAsLjB"}
1
+ {"version":3,"file":"AdminShell.d.ts","sourceRoot":"","sources":["../../src/shell/AdminShell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8RD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,SAAc,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EACd,MAAM,EACN,gBAAuB,EACvB,WAAqB,GACtB,EAAE,eAAe,2CA4LjB"}
@@ -204,7 +204,13 @@ export function AdminShell({ modules: manifests = [], children, keycloak, authCl
204
204
  const useMockAuth = typeof window !== 'undefined' &&
205
205
  (import.meta.env.VITE_MOCK_AUTH === 'true' || !keycloak);
206
206
  if (useMockAuth) {
207
- return createInMemoryAuthClient();
207
+ // Create default mock users with wildcard permissions for shell development
208
+ return createInMemoryAuthClient({
209
+ users: [
210
+ { id: 'admin-user', email: 'admin@example.com', displayName: 'Admin User', roles: ['*'] },
211
+ { id: 'viewer-user', email: 'viewer@example.com', displayName: 'Viewer User', roles: [] },
212
+ ],
213
+ });
208
214
  }
209
215
  // Use Keycloak
210
216
  return createKeycloakAuthClient({
@@ -1 +1 @@
1
- {"version":3,"file":"BackofficeShell.d.ts","sourceRoot":"","sources":["../../src/shell/BackofficeShell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8RD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,SAAc,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EACd,MAAM,EACN,gBAAuB,EACvB,WAAqB,GACtB,EAAE,eAAe,2CAsLjB"}
1
+ {"version":3,"file":"BackofficeShell.d.ts","sourceRoot":"","sources":["../../src/shell/BackofficeShell.tsx"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAC;AAMtF,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,EAAE;QACT,GAAG,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,oDAAoD;IACpD,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oFAAoF;IACpF,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA8RD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EAAE,SAAc,EACvB,QAAQ,EACR,QAAQ,EACR,UAAU,EAAE,kBAAkB,EAC9B,cAAc,EACd,MAAM,EACN,gBAAuB,EACvB,WAAqB,GACtB,EAAE,eAAe,2CA4LjB"}
@@ -204,7 +204,13 @@ export function AdminShell({ modules: manifests = [], children, keycloak, authCl
204
204
  const useMockAuth = typeof window !== 'undefined' &&
205
205
  (import.meta.env.VITE_MOCK_AUTH === 'true' || !keycloak);
206
206
  if (useMockAuth) {
207
- return createInMemoryAuthClient();
207
+ // Create default mock users with wildcard permissions for shell development
208
+ return createInMemoryAuthClient({
209
+ users: [
210
+ { id: 'admin-user', email: 'admin@example.com', displayName: 'Admin User', roles: ['*'] },
211
+ { id: 'viewer-user', email: 'viewer@example.com', displayName: 'Viewer User', roles: [] },
212
+ ],
213
+ });
208
214
  }
209
215
  // Use Keycloak
210
216
  return createKeycloakAuthClient({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nsxbet/admin-sdk",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "SDK for building NSX Admin modules with integrated shell",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",