@amaster.ai/client 1.1.0-beta.21 → 1.1.0-beta.23

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@amaster.ai/client",
3
- "version": "1.1.0-beta.21",
3
+ "version": "1.1.0-beta.23",
4
4
  "description": "Unified API client for Amaster platform - All services in one package",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -72,17 +72,17 @@
72
72
  "registry": "https://registry.npmjs.org/"
73
73
  },
74
74
  "dependencies": {
75
- "@amaster.ai/auth-client": "1.1.0-beta.21",
76
- "@amaster.ai/entity-client": "1.1.0-beta.21",
77
- "@amaster.ai/bpm-client": "1.1.0-beta.21",
78
- "@amaster.ai/http-client": "1.1.0-beta.21",
79
- "@amaster.ai/function-client": "1.1.0-beta.21",
80
- "@amaster.ai/s3-client": "1.1.0-beta.21",
81
- "@amaster.ai/copilot-client": "1.1.0-beta.21",
82
- "@amaster.ai/asr-client": "1.1.0-beta.21",
83
- "@amaster.ai/workflow-client": "1.1.0-beta.21",
84
- "@amaster.ai/tts-client": "1.1.0-beta.21",
85
- "@amaster.ai/asr-http-client": "1.1.0-beta.21"
75
+ "@amaster.ai/asr-client": "1.1.0-beta.23",
76
+ "@amaster.ai/asr-http-client": "1.1.0-beta.23",
77
+ "@amaster.ai/copilot-client": "1.1.0-beta.23",
78
+ "@amaster.ai/auth-client": "1.1.0-beta.23",
79
+ "@amaster.ai/entity-client": "1.1.0-beta.23",
80
+ "@amaster.ai/http-client": "1.1.0-beta.23",
81
+ "@amaster.ai/function-client": "1.1.0-beta.23",
82
+ "@amaster.ai/bpm-client": "1.1.0-beta.23",
83
+ "@amaster.ai/tts-client": "1.1.0-beta.23",
84
+ "@amaster.ai/s3-client": "1.1.0-beta.23",
85
+ "@amaster.ai/workflow-client": "1.1.0-beta.23"
86
86
  },
87
87
  "peerDependencies": {
88
88
  "axios": "^1.11.0"
@@ -10,7 +10,6 @@
10
10
  * - `@amaster.ai/client/auth/password-auth` - Password login/register
11
11
  * - `@amaster.ai/client/auth/code-auth` - Verification code login
12
12
  * - `@amaster.ai/client/auth/oauth` - OAuth & social login
13
- * - `@amaster.ai/client/auth/permissions` - Permission checking helpers
14
13
  * - `@amaster.ai/client/auth/profile` - User profile management
15
14
  *
16
15
  * @example
@@ -23,7 +22,6 @@
23
22
  * Import specific types (recommended for AI):
24
23
  * ```typescript
25
24
  * import type { LoginParams, User } from '@amaster.ai/client/auth/password-auth';
26
- * import type { hasPermission } from '@amaster.ai/client/auth/permissions';
27
25
  * import type { OAuthProvider } from '@amaster.ai/client/auth/oauth';
28
26
  * ```
29
27
  *
@@ -37,7 +35,6 @@ export * from './user';
37
35
  export * from './password-auth';
38
36
  export * from './code-auth';
39
37
  export * from './oauth';
40
- export * from './permissions';
41
38
  export * from './profile';
42
39
 
43
40
  // Import for unified API
@@ -177,4 +174,111 @@ export interface AuthClientAPI
177
174
  * ```
178
175
  */
179
176
  refreshToken(): Promise<ClientResult<RefreshTokenResponse>>;
177
+
178
+ // ==================== Permission Checks ====================
179
+
180
+ /**
181
+ * Check if current user has a specific role (local check, fast)
182
+ *
183
+ * Works for both authenticated and anonymous users.
184
+ * Checks against locally cached user roles.
185
+ *
186
+ * @param roleCode - Role code to check (e.g., "admin", "user", "anonymous")
187
+ * @returns True if user has the role
188
+ *
189
+ * @example
190
+ * Check admin role:
191
+ * ```typescript
192
+ * if (client.auth.hasRole('admin')) {
193
+ * showAdminPanel();
194
+ * }
195
+ * ```
196
+ *
197
+ * @example
198
+ * Check anonymous user:
199
+ * ```typescript
200
+ * if (client.auth.hasRole('anonymous')) {
201
+ * showLoginPrompt();
202
+ * }
203
+ * ```
204
+ */
205
+ hasRole(roleCode: string): boolean;
206
+
207
+ /**
208
+ * Check if current user has a specific permission (local check, fast)
209
+ *
210
+ * Works for both authenticated and anonymous users.
211
+ * Checks against locally cached user permissions.
212
+ *
213
+ * @param resource - Resource name (e.g., "user", "order")
214
+ * @param action - Action name (e.g., "read", "write", "delete")
215
+ * @returns True if user has the permission
216
+ *
217
+ * @example
218
+ * Check permission for authenticated users:
219
+ * ```typescript
220
+ * if (client.auth.hasPermission('user', 'delete')) {
221
+ * showDeleteButton();
222
+ * }
223
+ * ```
224
+ *
225
+ * @example
226
+ * Check permission for anonymous users:
227
+ * ```typescript
228
+ * // If backend configured anonymous role with article:read permission
229
+ * if (client.auth.hasPermission('article', 'read')) {
230
+ * showArticleList();
231
+ * }
232
+ * ```
233
+ *
234
+ * @example
235
+ * Control UI elements:
236
+ * ```typescript
237
+ * const canEdit = client.auth.hasPermission('post', 'write');
238
+ * const canDelete = client.auth.hasPermission('post', 'delete');
239
+ *
240
+ * return (
241
+ * <div>
242
+ * {canEdit && <button>Edit</button>}
243
+ * {canDelete && <button>Delete</button>}
244
+ * </div>
245
+ * );
246
+ * ```
247
+ */
248
+ hasPermission(resource: string, action: string): boolean;
249
+
250
+ /**
251
+ * Check if current user is anonymous (not authenticated)
252
+ *
253
+ * Convenience method equivalent to `hasRole('anonymous')`.
254
+ * Returns true if user has the 'anonymous' role.
255
+ *
256
+ * @returns True if user is anonymous
257
+ *
258
+ * @example
259
+ * Show login prompt for anonymous users:
260
+ * ```typescript
261
+ * if (client.auth.isAnonymous()) {
262
+ * showLoginButton();
263
+ * showLimitedFeatures();
264
+ * } else {
265
+ * showFullFeatures();
266
+ * }
267
+ * ```
268
+ *
269
+ * @example
270
+ * Conditional rendering:
271
+ * ```typescript
272
+ * return (
273
+ * <div>
274
+ * {client.auth.isAnonymous() ? (
275
+ * <button onClick={handleLogin}>Login to continue</button>
276
+ * ) : (
277
+ * <UserDashboard />
278
+ * )}
279
+ * </div>
280
+ * );
281
+ * ```
282
+ */
283
+ isAnonymous(): boolean;
180
284
  }
@@ -77,8 +77,14 @@ export interface User {
77
77
  phoneVerifiedAt: string | null;
78
78
 
79
79
  /**
80
- * Role codes assigned to user
80
+ * Role codes assigned to user
81
+ *
82
+ * Includes system roles and custom roles:
83
+ * - System roles: "anonymous" (unauthenticated), "member" (default), "admin"
84
+ * - Custom roles: defined in app.settings.yml
85
+ *
81
86
  * @example ["admin", "user", "manager"]
87
+ * @example ["anonymous"] // For unauthenticated users
82
88
  */
83
89
  roles: string[];
84
90
 
@@ -1,254 +0,0 @@
1
- /**
2
- * ============================================================================
3
- * Permission Checking - Type Definitions & Helpers
4
- * ============================================================================
5
- *
6
- * Permission and role checking utilities:
7
- * - Type-safe permission checking
8
- * - Role validation
9
- * - Permission helpers
10
- *
11
- * @module auth/permissions
12
- */
13
-
14
- import type { User } from './user';
15
-
16
- /**
17
- * Permission check result
18
- */
19
- export interface PermissionCheckResult {
20
- /** Whether the permission check passed */
21
- granted: boolean;
22
-
23
- /** Optional reason if denied */
24
- reason?: string;
25
- }
26
-
27
- /**
28
- * Permission checking helpers
29
- *
30
- * @example
31
- * Check single permission:
32
- * ```typescript
33
- * import { hasPermission } from '@amaster.ai/client/auth/permissions';
34
- *
35
- * const user = await client.auth.getMe().then(r => r.data);
36
- *
37
- * if (hasPermission(user, 'user:delete')) {
38
- * showDeleteButton();
39
- * }
40
- * ```
41
- *
42
- * @example
43
- * Check role:
44
- * ```typescript
45
- * import { hasRole } from '@amaster.ai/client/auth/permissions';
46
- *
47
- * if (hasRole(user, 'admin')) {
48
- * showAdminPanel();
49
- * }
50
- * ```
51
- *
52
- * @example
53
- * Check any of multiple permissions:
54
- * ```typescript
55
- * import { hasAnyPermission } from '@amaster.ai/client/auth/permissions';
56
- *
57
- * if (hasAnyPermission(user, ['user:read', 'user:write', 'user:delete'])) {
58
- * showUserManagement();
59
- * }
60
- * ```
61
- */
62
- export namespace PermissionHelpers {
63
- /**
64
- * Check if user has a specific permission
65
- *
66
- * @param user - User object with permissions
67
- * @param permission - Permission to check (format: "resource:action")
68
- * @returns True if user has the permission
69
- *
70
- * @example
71
- * ```typescript
72
- * const canDelete = hasPermission(user, 'user:delete');
73
- * const canRead = hasPermission(user, 'order:read');
74
- * ```
75
- */
76
- export function hasPermission(user: User | null | undefined, permission: string): boolean;
77
-
78
- /**
79
- * Check if user has a specific role
80
- *
81
- * @param user - User object with roles
82
- * @param role - Role code to check
83
- * @returns True if user has the role
84
- *
85
- * @example
86
- * ```typescript
87
- * const isAdmin = hasRole(user, 'admin');
88
- * const isManager = hasRole(user, 'manager');
89
- * ```
90
- */
91
- export function hasRole(user: User | null | undefined, role: string): boolean;
92
-
93
- /**
94
- * Check if user has ANY of the specified permissions
95
- *
96
- * @param user - User object with permissions
97
- * @param permissions - Array of permissions to check
98
- * @returns True if user has at least one permission
99
- *
100
- * @example
101
- * ```typescript
102
- * // User can access if they have ANY of these permissions
103
- * const canAccessUsers = hasAnyPermission(user, [
104
- * 'user:read',
105
- * 'user:write',
106
- * 'user:delete'
107
- * ]);
108
- * ```
109
- */
110
- export function hasAnyPermission(user: User | null | undefined, permissions: string[]): boolean;
111
-
112
- /**
113
- * Check if user has ALL of the specified permissions
114
- *
115
- * @param user - User object with permissions
116
- * @param permissions - Array of permissions to check
117
- * @returns True if user has all permissions
118
- *
119
- * @example
120
- * ```typescript
121
- * // User needs ALL of these permissions
122
- * const canManageUsers = hasAllPermissions(user, [
123
- * 'user:read',
124
- * 'user:write',
125
- * 'user:delete'
126
- * ]);
127
- * ```
128
- */
129
- export function hasAllPermissions(user: User | null | undefined, permissions: string[]): boolean;
130
-
131
- /**
132
- * Check if user has ANY of the specified roles
133
- *
134
- * @param user - User object with roles
135
- * @param roles - Array of role codes to check
136
- * @returns True if user has at least one role
137
- *
138
- * @example
139
- * ```typescript
140
- * const isStaff = hasAnyRole(user, ['admin', 'moderator', 'support']);
141
- * ```
142
- */
143
- export function hasAnyRole(user: User | null | undefined, roles: string[]): boolean;
144
-
145
- /**
146
- * Check if user has ALL of the specified roles
147
- *
148
- * @param user - User object with roles
149
- * @param roles - Array of role codes to check
150
- * @returns True if user has all roles
151
- *
152
- * @example
153
- * ```typescript
154
- * const isSuperAdmin = hasAllRoles(user, ['admin', 'superuser']);
155
- * ```
156
- */
157
- export function hasAllRoles(user: User | null | undefined, roles: string[]): boolean;
158
- }
159
-
160
- /**
161
- * Re-export helpers as individual functions for convenience
162
- *
163
- * @example
164
- * ```typescript
165
- * import { hasPermission, hasRole } from '@amaster.ai/client/auth/permissions';
166
- *
167
- * const canDelete = hasPermission(user, 'user:delete');
168
- * const isAdmin = hasRole(user, 'admin');
169
- * ```
170
- */
171
-
172
- /**
173
- * Check if user has a specific permission
174
- *
175
- * @param user - User object with permissions
176
- * @param permission - Permission to check (format: "resource:action")
177
- * @returns True if user has the permission
178
- *
179
- * @example
180
- * ```typescript
181
- * const canDelete = hasPermission(user, 'user:delete');
182
- * ```
183
- */
184
- export declare function hasPermission(user: User | null | undefined, permission: string): boolean;
185
-
186
- /**
187
- * Check if user has a specific role
188
- *
189
- * @param user - User object with roles
190
- * @param role - Role code to check
191
- * @returns True if user has the role
192
- *
193
- * @example
194
- * ```typescript
195
- * const isAdmin = hasRole(user, 'admin');
196
- * ```
197
- */
198
- export declare function hasRole(user: User | null | undefined, role: string): boolean;
199
-
200
- /**
201
- * Check if user has ANY of the specified permissions
202
- *
203
- * @param user - User object with permissions
204
- * @param permissions - Array of permissions to check
205
- * @returns True if user has at least one permission
206
- *
207
- * @example
208
- * ```typescript
209
- * const canAccessUsers = hasAnyPermission(user, ['user:read', 'user:write']);
210
- * ```
211
- */
212
- export declare function hasAnyPermission(user: User | null | undefined, permissions: string[]): boolean;
213
-
214
- /**
215
- * Check if user has ALL of the specified permissions
216
- *
217
- * @param user - User object with permissions
218
- * @param permissions - Array of permissions to check
219
- * @returns True if user has all permissions
220
- *
221
- * @example
222
- * ```typescript
223
- * const canManageUsers = hasAllPermissions(user, ['user:read', 'user:write', 'user:delete']);
224
- * ```
225
- */
226
- export declare function hasAllPermissions(user: User | null | undefined, permissions: string[]): boolean;
227
-
228
- /**
229
- * Check if user has ANY of the specified roles
230
- *
231
- * @param user - User object with roles
232
- * @param roles - Array of role codes to check
233
- * @returns True if user has at least one role
234
- *
235
- * @example
236
- * ```typescript
237
- * const isStaff = hasAnyRole(user, ['admin', 'moderator']);
238
- * ```
239
- */
240
- export declare function hasAnyRole(user: User | null | undefined, roles: string[]): boolean;
241
-
242
- /**
243
- * Check if user has ALL of the specified roles
244
- *
245
- * @param user - User object with roles
246
- * @param roles - Array of role codes to check
247
- * @returns True if user has all roles
248
- *
249
- * @example
250
- * ```typescript
251
- * const isSuperAdmin = hasAllRoles(user, ['admin', 'superuser']);
252
- * ```
253
- */
254
- export declare function hasAllRoles(user: User | null | undefined, roles: string[]): boolean;