@amaster.ai/client 1.1.0-beta.20 → 1.1.0-beta.22
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 +12 -12
- package/types/auth/index.d.ts +107 -3
- package/types/auth/user.d.ts +7 -1
- package/types/auth/permissions.d.ts +0 -254
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@amaster.ai/client",
|
|
3
|
-
"version": "1.1.0-beta.
|
|
3
|
+
"version": "1.1.0-beta.22",
|
|
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/
|
|
76
|
-
"@amaster.ai/asr-client": "1.1.0-beta.
|
|
77
|
-
"@amaster.ai/
|
|
78
|
-
"@amaster.ai/http-client": "1.1.0-beta.
|
|
79
|
-
"@amaster.ai/
|
|
80
|
-
"@amaster.ai/
|
|
81
|
-
"@amaster.ai/
|
|
82
|
-
"@amaster.ai/
|
|
83
|
-
"@amaster.ai/
|
|
84
|
-
"@amaster.ai/
|
|
85
|
-
"@amaster.ai/
|
|
75
|
+
"@amaster.ai/bpm-client": "1.1.0-beta.22",
|
|
76
|
+
"@amaster.ai/asr-client": "1.1.0-beta.22",
|
|
77
|
+
"@amaster.ai/copilot-client": "1.1.0-beta.22",
|
|
78
|
+
"@amaster.ai/http-client": "1.1.0-beta.22",
|
|
79
|
+
"@amaster.ai/auth-client": "1.1.0-beta.22",
|
|
80
|
+
"@amaster.ai/entity-client": "1.1.0-beta.22",
|
|
81
|
+
"@amaster.ai/s3-client": "1.1.0-beta.22",
|
|
82
|
+
"@amaster.ai/workflow-client": "1.1.0-beta.22",
|
|
83
|
+
"@amaster.ai/asr-http-client": "1.1.0-beta.22",
|
|
84
|
+
"@amaster.ai/tts-client": "1.1.0-beta.22",
|
|
85
|
+
"@amaster.ai/function-client": "1.1.0-beta.22"
|
|
86
86
|
},
|
|
87
87
|
"peerDependencies": {
|
|
88
88
|
"axios": "^1.11.0"
|
package/types/auth/index.d.ts
CHANGED
|
@@ -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
|
}
|
package/types/auth/user.d.ts
CHANGED
|
@@ -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;
|