brix-runtime-sdk-api-web 1.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.
Files changed (135) hide show
  1. package/dist/index.js +190 -0
  2. package/dist/types/api-exports.test.d.ts +33 -0
  3. package/dist/types/api-exports.test.d.ts.map +1 -0
  4. package/dist/types/context/RuntimeContext.d.ts +69 -0
  5. package/dist/types/context/RuntimeContext.d.ts.map +1 -0
  6. package/dist/types/context/index.d.ts +23 -0
  7. package/dist/types/context/index.d.ts.map +1 -0
  8. package/dist/types/index.d.ts +52 -0
  9. package/dist/types/index.d.ts.map +1 -0
  10. package/dist/types/types/auth.d.ts +405 -0
  11. package/dist/types/types/auth.d.ts.map +1 -0
  12. package/dist/types/types/capability.d.ts +218 -0
  13. package/dist/types/types/capability.d.ts.map +1 -0
  14. package/dist/types/types/common.d.ts +99 -0
  15. package/dist/types/types/common.d.ts.map +1 -0
  16. package/dist/types/types/config.d.ts +85 -0
  17. package/dist/types/types/config.d.ts.map +1 -0
  18. package/dist/types/types/event.d.ts +658 -0
  19. package/dist/types/types/event.d.ts.map +1 -0
  20. package/dist/types/types/http.d.ts +132 -0
  21. package/dist/types/types/http.d.ts.map +1 -0
  22. package/dist/types/types/i18n.d.ts +327 -0
  23. package/dist/types/types/i18n.d.ts.map +1 -0
  24. package/dist/types/types/index.d.ts +61 -0
  25. package/dist/types/types/index.d.ts.map +1 -0
  26. package/dist/types/types/layout.d.ts +301 -0
  27. package/dist/types/types/layout.d.ts.map +1 -0
  28. package/dist/types/types/module.d.ts +78 -0
  29. package/dist/types/types/module.d.ts.map +1 -0
  30. package/dist/types/types/navigation.d.ts +295 -0
  31. package/dist/types/types/navigation.d.ts.map +1 -0
  32. package/dist/types/types/plugin-loader-capability.d.ts +142 -0
  33. package/dist/types/types/plugin-loader-capability.d.ts.map +1 -0
  34. package/dist/types/types/plugin.d.ts +250 -0
  35. package/dist/types/types/plugin.d.ts.map +1 -0
  36. package/dist/types/types/state.d.ts +306 -0
  37. package/dist/types/types/state.d.ts.map +1 -0
  38. package/dist/types/types/theme.d.ts +279 -0
  39. package/dist/types/types/theme.d.ts.map +1 -0
  40. package/dist/types/types/ui/adapter.d.ts +181 -0
  41. package/dist/types/types/ui/adapter.d.ts.map +1 -0
  42. package/dist/types/types/ui/avatar.d.ts +102 -0
  43. package/dist/types/types/ui/avatar.d.ts.map +1 -0
  44. package/dist/types/types/ui/badge.d.ts +101 -0
  45. package/dist/types/types/ui/badge.d.ts.map +1 -0
  46. package/dist/types/types/ui/button.d.ts +135 -0
  47. package/dist/types/types/ui/button.d.ts.map +1 -0
  48. package/dist/types/types/ui/card.d.ts +105 -0
  49. package/dist/types/types/ui/card.d.ts.map +1 -0
  50. package/dist/types/types/ui/common.d.ts +29 -0
  51. package/dist/types/types/ui/common.d.ts.map +1 -0
  52. package/dist/types/types/ui/icon.d.ts +78 -0
  53. package/dist/types/types/ui/icon.d.ts.map +1 -0
  54. package/dist/types/types/ui/index.d.ts +59 -0
  55. package/dist/types/types/ui/index.d.ts.map +1 -0
  56. package/dist/types/types/ui/input.d.ts +200 -0
  57. package/dist/types/types/ui/input.d.ts.map +1 -0
  58. package/dist/types/types/ui/menu.d.ts +211 -0
  59. package/dist/types/types/ui/menu.d.ts.map +1 -0
  60. package/dist/types/types/ui/message.d.ts +121 -0
  61. package/dist/types/types/ui/message.d.ts.map +1 -0
  62. package/dist/types/types/ui/modal.d.ts +167 -0
  63. package/dist/types/types/ui/modal.d.ts.map +1 -0
  64. package/dist/types/types/ui/select.d.ts +213 -0
  65. package/dist/types/types/ui/select.d.ts.map +1 -0
  66. package/dist/types/types/ui/theme-tokens.d.ts +226 -0
  67. package/dist/types/types/ui/theme-tokens.d.ts.map +1 -0
  68. package/dist/types/types/ui/tooltip.d.ts +98 -0
  69. package/dist/types/types/ui/tooltip.d.ts.map +1 -0
  70. package/dist/types/types/ui.d.ts +49 -0
  71. package/dist/types/types/ui.d.ts.map +1 -0
  72. package/package.json +34 -0
  73. package/src/api-exports.test.ts +199 -0
  74. package/src/context/RuntimeContext.d.ts +69 -0
  75. package/src/context/RuntimeContext.d.ts.map +1 -0
  76. package/src/context/RuntimeContext.ts +75 -0
  77. package/src/context/index.d.ts +23 -0
  78. package/src/context/index.d.ts.map +1 -0
  79. package/src/context/index.ts +23 -0
  80. package/src/index.d.ts +52 -0
  81. package/src/index.d.ts.map +1 -0
  82. package/src/index.ts +59 -0
  83. package/src/types/auth.d.ts +146 -0
  84. package/src/types/auth.d.ts.map +1 -0
  85. package/src/types/auth.ts +479 -0
  86. package/src/types/capability.d.ts +218 -0
  87. package/src/types/capability.d.ts.map +1 -0
  88. package/src/types/capability.ts +302 -0
  89. package/src/types/common.d.ts +99 -0
  90. package/src/types/common.d.ts.map +1 -0
  91. package/src/types/common.ts +115 -0
  92. package/src/types/config.d.ts +64 -0
  93. package/src/types/config.d.ts.map +1 -0
  94. package/src/types/config.ts +96 -0
  95. package/src/types/event.d.ts +206 -0
  96. package/src/types/event.d.ts.map +1 -0
  97. package/src/types/event.ts +776 -0
  98. package/src/types/http.d.ts +132 -0
  99. package/src/types/http.d.ts.map +1 -0
  100. package/src/types/http.ts +156 -0
  101. package/src/types/i18n.ts +420 -0
  102. package/src/types/index.d.ts +50 -0
  103. package/src/types/index.d.ts.map +1 -0
  104. package/src/types/index.ts +120 -0
  105. package/src/types/layout.ts +394 -0
  106. package/src/types/module.d.ts +78 -0
  107. package/src/types/module.d.ts.map +1 -0
  108. package/src/types/module.ts +92 -0
  109. package/src/types/navigation.d.ts +101 -0
  110. package/src/types/navigation.d.ts.map +1 -0
  111. package/src/types/navigation.ts +361 -0
  112. package/src/types/plugin-loader-capability.ts +159 -0
  113. package/src/types/plugin.d.ts +250 -0
  114. package/src/types/plugin.d.ts.map +1 -0
  115. package/src/types/plugin.ts +344 -0
  116. package/src/types/state.d.ts +119 -0
  117. package/src/types/state.d.ts.map +1 -0
  118. package/src/types/state.ts +366 -0
  119. package/src/types/theme.ts +378 -0
  120. package/src/types/ui/adapter.ts +222 -0
  121. package/src/types/ui/avatar.ts +113 -0
  122. package/src/types/ui/badge.ts +112 -0
  123. package/src/types/ui/button.ts +148 -0
  124. package/src/types/ui/card.ts +116 -0
  125. package/src/types/ui/common.ts +29 -0
  126. package/src/types/ui/icon.ts +85 -0
  127. package/src/types/ui/index.ts +78 -0
  128. package/src/types/ui/input.ts +225 -0
  129. package/src/types/ui/menu.ts +237 -0
  130. package/src/types/ui/message.ts +135 -0
  131. package/src/types/ui/modal.ts +188 -0
  132. package/src/types/ui/select.ts +239 -0
  133. package/src/types/ui/theme-tokens.ts +357 -0
  134. package/src/types/ui/tooltip.ts +120 -0
  135. package/src/types/ui.ts +49 -0
@@ -0,0 +1,405 @@
1
+ /**
2
+ * Copyright 2026 Brix Platform Authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * @file Authentication Capability Type Definitions
18
+ * @description Defines core types for the authentication system, including user info, auth info, permission verification, etc.
19
+ * @module @brix/runtime-sdk-api-web/types/auth
20
+ * @version 3.2.0
21
+ *
22
+ * [v3.2 Changes]
23
+ * Extracted from index.ts into a standalone type file.
24
+ *
25
+ * [v3.2.0 Phase 1 Contract Layer Fix]
26
+ * Added types required by AuthCapabilityImpl:
27
+ * - User: Complete user info (including permissions and roles)
28
+ * - Tenant: Tenant info
29
+ * - AuthChangeEvent: Authentication state change event
30
+ * - DataScope: Data scope
31
+ * - LoginCredentials: Login credentials
32
+ * - LoginResult: Login result
33
+ * - AuthState: Authentication state
34
+ */
35
+ import type { Unsubscribe } from './event';
36
+ /**
37
+ * Authentication Capability Type Identifier
38
+ */
39
+ export declare const AuthCapabilityType: unique symbol;
40
+ /**
41
+ * Basic User Information
42
+ */
43
+ export interface BaseUser {
44
+ /** User ID */
45
+ readonly id: string;
46
+ /** Username */
47
+ readonly username: string;
48
+ /** Email */
49
+ readonly email?: string;
50
+ /** Display Name */
51
+ readonly displayName?: string;
52
+ /** Avatar URL */
53
+ readonly avatar?: string;
54
+ /** Created At */
55
+ readonly createdAt: string;
56
+ /** Updated At */
57
+ readonly updatedAt?: string;
58
+ }
59
+ /**
60
+ * Authenticated User Information
61
+ *
62
+ * <p>User object containing roles and permissions.</p>
63
+ */
64
+ export interface AuthUser {
65
+ /** User ID */
66
+ id: string;
67
+ /** Username */
68
+ username: string;
69
+ /** Email */
70
+ email?: string;
71
+ /** Display Name */
72
+ displayName?: string;
73
+ /** Role List */
74
+ roles: string[];
75
+ /** Permission List */
76
+ permissions: string[];
77
+ }
78
+ /**
79
+ * Complete User Information
80
+ *
81
+ * <p>User object containing roles, permissions, and extended attributes.
82
+ * This is the type returned by AuthCapability.getCurrentUser().</p>
83
+ *
84
+ * @since 3.2.0
85
+ */
86
+ export interface User {
87
+ /** User ID */
88
+ readonly id: string;
89
+ /** Username */
90
+ readonly username: string;
91
+ /** Email */
92
+ readonly email?: string;
93
+ /** Display Name */
94
+ readonly displayName?: string;
95
+ /** Avatar URL */
96
+ readonly avatar?: string;
97
+ /** Role List */
98
+ readonly roles: string[];
99
+ /** Permission List */
100
+ readonly permissions: string[];
101
+ /** Created At */
102
+ readonly createdAt?: string;
103
+ /** Updated At */
104
+ readonly updatedAt?: string;
105
+ /** Extended Attributes */
106
+ readonly [key: string]: unknown;
107
+ }
108
+ /**
109
+ * Tenant Information
110
+ *
111
+ * <p>Tenant object in a multi-tenant system.</p>
112
+ *
113
+ * @since 3.2.0
114
+ */
115
+ export interface Tenant {
116
+ /** Tenant ID */
117
+ readonly id: string;
118
+ /** Tenant Name */
119
+ readonly name: string;
120
+ /** Tenant Code (Unique Identifier) */
121
+ readonly code?: string;
122
+ /** Tenant Type */
123
+ readonly type?: string;
124
+ /** Tenant Status */
125
+ readonly status?: 'active' | 'inactive' | 'suspended';
126
+ /** Tenant Configuration */
127
+ readonly config?: Record<string, unknown>;
128
+ }
129
+ /**
130
+ * Data Scope
131
+ *
132
+ * <p>Describes the scope of user's data access permissions.</p>
133
+ *
134
+ * @since 3.2.0
135
+ */
136
+ export interface DataScope {
137
+ /** Data Scope ID */
138
+ readonly id: string;
139
+ /** Scope Type (e.g., 'org', 'dept', 'self', etc.) */
140
+ readonly type: string;
141
+ /** Scope Value (e.g., organization ID list) */
142
+ readonly value: string | string[];
143
+ /** Resource Type (optional, restricts applicable resources) */
144
+ readonly resource?: string;
145
+ }
146
+ /**
147
+ * Login Credentials
148
+ *
149
+ * <p>Credential information submitted during user login.</p>
150
+ *
151
+ * @since 3.2.0
152
+ */
153
+ export interface LoginCredentials {
154
+ /** Username or Email */
155
+ readonly username?: string;
156
+ /** Password */
157
+ readonly password?: string;
158
+ /** Captcha */
159
+ readonly captcha?: string;
160
+ /** Remember Login State */
161
+ readonly rememberMe?: boolean;
162
+ /** Third-party Login Provider */
163
+ readonly provider?: string;
164
+ /** Third-party Login Authorization Code */
165
+ readonly authorizationCode?: string;
166
+ /** Extended Fields */
167
+ readonly [key: string]: unknown;
168
+ }
169
+ /**
170
+ * Login Result
171
+ *
172
+ * <p>Result returned from a login request.</p>
173
+ *
174
+ * @since 3.2.0
175
+ */
176
+ export interface LoginResult {
177
+ /** Whether Login Succeeded */
178
+ readonly success: boolean;
179
+ /** User Info (on success) */
180
+ readonly user?: User;
181
+ /** Access Token (on success) */
182
+ readonly token?: string;
183
+ /** Refresh Token (on success) */
184
+ readonly refreshToken?: string;
185
+ /** Token Expiration Time (seconds) */
186
+ readonly expiresIn?: number;
187
+ /** Error Code (on failure) */
188
+ readonly errorCode?: string;
189
+ /** Error Message (on failure) */
190
+ readonly errorMessage?: string;
191
+ /** Whether MFA is Required */
192
+ readonly requireMfa?: boolean;
193
+ /** MFA Session Identifier */
194
+ readonly mfaSession?: string;
195
+ }
196
+ /**
197
+ * Authentication State
198
+ *
199
+ * <p>Describes the complete state of the current authentication context.</p>
200
+ *
201
+ * @since 3.2.0
202
+ */
203
+ export interface AuthState {
204
+ /** Whether Authenticated */
205
+ readonly isAuthenticated: boolean;
206
+ /** Current User */
207
+ readonly user: User | null;
208
+ /** Current Tenant */
209
+ readonly tenant: Tenant | null;
210
+ /** Whether Loading */
211
+ readonly loading: boolean;
212
+ /** Data Scope List */
213
+ readonly dataScopes: DataScope[];
214
+ }
215
+ /**
216
+ * Authentication State Change Event
217
+ *
218
+ * <p>Event triggered when authentication state changes.</p>
219
+ *
220
+ * @since 3.2.0
221
+ */
222
+ export interface AuthChangeEvent {
223
+ /** Event Type */
224
+ readonly type: 'login' | 'logout' | 'token_refresh' | 'user_update' | 'tenant_switch';
225
+ /** Current User (quick access) */
226
+ readonly user?: User | null;
227
+ /** New Authentication State */
228
+ readonly state: AuthState;
229
+ /** Previous Authentication State */
230
+ readonly previousState?: AuthState;
231
+ /** Event Timestamp */
232
+ readonly timestamp: number;
233
+ }
234
+ /**
235
+ * Authentication Information
236
+ *
237
+ * <p>Contains access token and refresh token.</p>
238
+ */
239
+ export interface AuthInfo {
240
+ /** Access Token */
241
+ readonly accessToken: string;
242
+ /** Refresh Token */
243
+ readonly refreshToken?: string;
244
+ /** Token Expiration Time (seconds) */
245
+ readonly expiresIn: number;
246
+ /** Token Type */
247
+ readonly tokenType: string;
248
+ }
249
+ /**
250
+ * Authentication Capability Contract
251
+ *
252
+ * <p>Provides user identity verification and permission checking capabilities for plugins.</p>
253
+ *
254
+ * <h3>Usage Example</h3>
255
+ * ```typescript
256
+ * const auth = context.getCapability<AuthCapability>(AuthCapabilityType);
257
+ *
258
+ * if (auth.isAuthenticated()) {
259
+ * const user = auth.getCurrentUser();
260
+ * if (auth.hasPermission('booking:create')) {
261
+ * // Create booking
262
+ * }
263
+ * }
264
+ * ```
265
+ *
266
+ * @since 3.2.0 Extended methods: getCurrentTenant, getTenantId, getDataScopes, getState, onAuthChange
267
+ */
268
+ export interface AuthCapability {
269
+ /**
270
+ * Get current logged-in user
271
+ *
272
+ * @returns Current user, returns null if not logged in
273
+ */
274
+ getCurrentUser(): User | null;
275
+ /**
276
+ * Check if authenticated
277
+ *
278
+ * @returns Whether logged in
279
+ */
280
+ isAuthenticated(): boolean;
281
+ /**
282
+ * User login
283
+ *
284
+ * @param credentials Login credentials
285
+ * @returns Login result
286
+ */
287
+ login(credentials: LoginCredentials): Promise<LoginResult>;
288
+ /**
289
+ * User logout
290
+ *
291
+ * @returns Promise, resolved when logout succeeds
292
+ */
293
+ logout(): Promise<void>;
294
+ /**
295
+ * Check if has specified permission
296
+ *
297
+ * @param permission Permission identifier
298
+ * @returns Whether has permission
299
+ */
300
+ hasPermission(permission: string): boolean;
301
+ /**
302
+ * Check if has any of the specified permissions
303
+ *
304
+ * @param permissions Permission identifier array
305
+ * @returns Whether has any permission
306
+ * @since 3.2.0
307
+ */
308
+ hasAnyPermission?(permissions: string[]): boolean;
309
+ /**
310
+ * Check if has all specified permissions
311
+ *
312
+ * @param permissions Permission identifier array
313
+ * @returns Whether has all permissions
314
+ * @since 3.2.0
315
+ */
316
+ hasAllPermissions?(permissions: string[]): boolean;
317
+ /**
318
+ * Check if has specified role
319
+ *
320
+ * @param role Role identifier
321
+ * @returns Whether has role
322
+ */
323
+ hasRole(role: string): boolean;
324
+ /**
325
+ * Check if has any of the specified roles
326
+ *
327
+ * @param roles Role identifier array
328
+ * @returns Whether has any role
329
+ * @since 3.2.0
330
+ */
331
+ hasAnyRole?(roles: string[]): boolean;
332
+ /**
333
+ * Check if has all specified roles
334
+ *
335
+ * @param roles Role identifier array
336
+ * @returns Whether has all roles
337
+ * @since 3.2.0
338
+ */
339
+ hasAllRoles?(roles: string[]): boolean;
340
+ /**
341
+ * Get current access token
342
+ *
343
+ * @returns Access token, returns null if not logged in
344
+ */
345
+ getToken(): string | null;
346
+ /**
347
+ * Get current tenant
348
+ *
349
+ * @returns Current tenant, returns null if not set
350
+ * @since 3.2.0
351
+ */
352
+ getCurrentTenant?(): Tenant | null;
353
+ /**
354
+ * Get tenant ID
355
+ *
356
+ * @returns Tenant ID, returns empty string if no tenant
357
+ * @since 3.2.0
358
+ */
359
+ getTenantId?(): string;
360
+ /**
361
+ * Get data scopes
362
+ *
363
+ * @param resource Resource type (optional)
364
+ * @returns Data scope list
365
+ * @since 3.2.0
366
+ */
367
+ getDataScopes?(resource?: string): DataScope[];
368
+ /**
369
+ * Get authentication state
370
+ *
371
+ * @returns Current authentication state
372
+ * @since 3.2.0
373
+ */
374
+ getState?(): AuthState;
375
+ /**
376
+ * Subscribe to authentication state changes
377
+ *
378
+ * @param listener Change listener
379
+ * @returns Unsubscribe function
380
+ * @since 3.2.0
381
+ */
382
+ onAuthChange?(listener: (event: AuthChangeEvent) => void): Unsubscribe;
383
+ /**
384
+ * Check if Feature Flag is enabled
385
+ *
386
+ * @param featureKey Feature Flag key name
387
+ * @returns Whether enabled
388
+ * @since 3.2.0
389
+ */
390
+ isFeatureEnabled?(featureKey: string): boolean;
391
+ /**
392
+ * Refresh access token
393
+ *
394
+ * @returns New access token
395
+ * @since 3.2.0
396
+ */
397
+ refreshToken?(): Promise<string>;
398
+ /**
399
+ * Destroy capability instance
400
+ *
401
+ * @since 3.2.0
402
+ */
403
+ destroy?(): void;
404
+ }
405
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/types/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Copyright 2026 Brix Platform Authors
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+ /**
17
+ * @file Capability Related Type Definitions
18
+ * @description Defines core types for the capability system, including capability metadata, status, registry, etc.
19
+ * @module @brix/runtime-sdk-api-web/types/capability
20
+ * @version 3.2.0
21
+ *
22
+ * [v3.2 Changes]
23
+ * Extracted from index.ts into a standalone type file to keep the contract layer clean.
24
+ *
25
+ * [Design Principles]
26
+ * - All type definitions use readonly properties
27
+ * - Use Symbol as capability unique identifier (type-safe)
28
+ * - Support lazy initialization and scope control for capabilities
29
+ */
30
+ /**
31
+ * Capability Priority Enum
32
+ *
33
+ * <p>Used to determine which implementation to use when multiple capability providers conflict.</p>
34
+ */
35
+ export declare enum CapabilityPriority {
36
+ /** Low Priority (fallback implementation) */
37
+ LOW = 0,
38
+ /** Normal Priority (default) */
39
+ NORMAL = 50,
40
+ /** High Priority (overrides default implementation) */
41
+ HIGH = 100
42
+ }
43
+ /**
44
+ * Capability Metadata (Simplified)
45
+ */
46
+ export interface CapabilityMetadata {
47
+ /** Capability Name */
48
+ readonly name: string;
49
+ /** Capability Version */
50
+ readonly version: string;
51
+ /** Priority */
52
+ readonly priority: CapabilityPriority;
53
+ /** Whether Required */
54
+ readonly required: boolean;
55
+ }
56
+ /**
57
+ * Capability ID Type
58
+ *
59
+ * <p>Supports string or Symbol, recommend using Symbol.for() to ensure uniqueness.</p>
60
+ */
61
+ export type CapabilityId = string | symbol;
62
+ /**
63
+ * Capability Meta Information (Full Version)
64
+ *
65
+ * <p>Contains complete metadata for capability registration and discovery.</p>
66
+ */
67
+ export interface CapabilityMeta {
68
+ /** Capability Unique Identifier */
69
+ readonly id: CapabilityId;
70
+ /** Capability Name (Human-readable) */
71
+ readonly name: string;
72
+ /** Capability Description */
73
+ readonly description?: string;
74
+ /** Capability Version */
75
+ readonly version?: string;
76
+ /** Dependent Capability ID List */
77
+ readonly dependencies?: CapabilityId[];
78
+ /** Tags (for filtering and categorization) */
79
+ readonly tags?: string[];
80
+ }
81
+ /**
82
+ * Capability Status
83
+ *
84
+ * <p>Describes the current status of a capability in its lifecycle.</p>
85
+ */
86
+ export type CapabilityStatus = 'registered' | 'initializing' | 'ready' | 'error' | 'disposed';
87
+ /**
88
+ * Capability Type Identifier (Generic Interface)
89
+ *
90
+ * <p>Used to identify and create capability instances, containing capability metadata.
91
+ * Uses phantom property `_phantom` for type inference.</p>
92
+ *
93
+ * @example
94
+ * ```typescript
95
+ * interface MyCapability {
96
+ * doSomething(): void;
97
+ * }
98
+ *
99
+ * const MyCapabilityType = createCapabilityType<MyCapability>({
100
+ * id: 'my-capability',
101
+ * name: 'My Capability',
102
+ * });
103
+ * ```
104
+ */
105
+ export interface CapabilityType<T = unknown> extends CapabilityMeta {
106
+ /**
107
+ * Phantom property for type inference
108
+ * Does not exist at runtime, only for TypeScript type system
109
+ */
110
+ readonly _phantom?: T;
111
+ }
112
+ /**
113
+ * Create Capability Type Identifier
114
+ *
115
+ * @param meta - Capability meta information
116
+ * @returns Capability type identifier object
117
+ */
118
+ export declare function createCapabilityType<T>(meta: Omit<CapabilityMeta, 'id'> & {
119
+ id: string;
120
+ }): CapabilityType<T>;
121
+ /**
122
+ * Capability Provider Interface
123
+ *
124
+ * <p>Encapsulates the creation and disposal logic of capability instances.</p>
125
+ */
126
+ export interface CapabilityProvider<T = unknown> {
127
+ /** Get capability instance */
128
+ provide(): T;
129
+ /** Dispose capability instance (optional) */
130
+ dispose?(): void;
131
+ }
132
+ /**
133
+ * Simple Capability Provider
134
+ *
135
+ * <p>Can be the capability instance itself, or a factory function that returns the capability instance.</p>
136
+ */
137
+ export type SimpleCapabilityProvider<T> = T | (() => T);
138
+ /**
139
+ * Capability Registration Options
140
+ */
141
+ export interface CapabilityRegisterOptions {
142
+ /**
143
+ * Whether to override existing capability
144
+ */
145
+ override?: boolean;
146
+ /**
147
+ * Capability priority
148
+ */
149
+ priority?: CapabilityPriority;
150
+ /**
151
+ * Capability scope
152
+ * - 'global': Global scope, shared by all modules
153
+ * - 'module': Module scope, only available in current module
154
+ * @default 'global'
155
+ */
156
+ scope?: 'global' | 'module';
157
+ /**
158
+ * Lazy initialization
159
+ * When true, capability is instantiated on first use
160
+ * @default false
161
+ */
162
+ lazy?: boolean;
163
+ }
164
+ /**
165
+ * Capability Runtime Information
166
+ *
167
+ * <p>Describes the detailed status of a capability at runtime.</p>
168
+ */
169
+ export interface CapabilityRuntimeInfo {
170
+ /** Capability Metadata */
171
+ readonly meta: CapabilityMeta;
172
+ /** Current Status */
173
+ readonly status: CapabilityStatus;
174
+ /** Registration Timestamp */
175
+ readonly registeredAt: number;
176
+ /** Initialization Timestamp */
177
+ readonly initializedAt?: number;
178
+ /** Error Information (when status is error) */
179
+ readonly error?: Error;
180
+ /** Invocation Count Statistics */
181
+ readonly invocationCount: number;
182
+ }
183
+ /**
184
+ * Capability Registry Interface
185
+ *
186
+ * <p>Manages registration, retrieval, initialization, and disposal of capabilities.</p>
187
+ */
188
+ export interface CapabilityRegistry {
189
+ /** Get capability instance */
190
+ get<T>(capabilityType: CapabilityType<T>): T | undefined;
191
+ /** Get required capability (throws exception if not found) */
192
+ getRequired<T>(capabilityType: CapabilityType<T>): T;
193
+ /** Register capability */
194
+ register<T>(capabilityType: CapabilityType<T>, provider: CapabilityProvider<T>, options?: CapabilityRegisterOptions): void;
195
+ /** Unregister capability */
196
+ unregister<T>(capabilityType: CapabilityType<T>): boolean;
197
+ /** Check if capability is registered */
198
+ has<T>(capabilityType: CapabilityType<T>): boolean;
199
+ /** Check if capability is ready */
200
+ isReady<T>(capabilityType: CapabilityType<T>): boolean;
201
+ /** Get capability runtime information */
202
+ getInfo<T>(capabilityType: CapabilityType<T>): CapabilityRuntimeInfo | undefined;
203
+ /** Get all registered capability IDs */
204
+ getRegisteredIds(): CapabilityId[];
205
+ /** Get runtime information for all capabilities */
206
+ getAllInfo(): Map<CapabilityId, CapabilityRuntimeInfo>;
207
+ /** Filter capabilities by status */
208
+ getByStatus(status: CapabilityStatus): CapabilityId[];
209
+ /** Filter capabilities by tag */
210
+ getByTag(tag: string): CapabilityId[];
211
+ /** Initialize all registered capabilities */
212
+ initializeAll(): Promise<boolean>;
213
+ /** Dispose all capabilities */
214
+ disposeAll(): Promise<void>;
215
+ /** Reset registry */
216
+ reset(): void;
217
+ }
218
+ //# sourceMappingURL=capability.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../../src/types/capability.ts"],"names":[],"mappings":"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"}