@nekutima/biome-sdk 0.16.0 → 0.18.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 (164) hide show
  1. package/README.md +6 -408
  2. package/dist/admin/admin.model.d.ts +24 -0
  3. package/dist/admin/admin.model.d.ts.map +1 -0
  4. package/dist/admin/admin.model.js +3 -0
  5. package/dist/admin/admin.model.js.map +1 -0
  6. package/dist/admin/admin.service.d.ts +4 -4
  7. package/dist/admin/admin.service.d.ts.map +1 -1
  8. package/dist/admin/admin.service.js +14 -14
  9. package/dist/admin/admin.service.js.map +1 -1
  10. package/dist/agents/agent.model.d.ts +30 -0
  11. package/dist/agents/agent.model.d.ts.map +1 -0
  12. package/dist/agents/agent.model.js +3 -0
  13. package/dist/agents/agent.model.js.map +1 -0
  14. package/dist/agents/agent.service.d.ts +14 -0
  15. package/dist/agents/agent.service.d.ts.map +1 -0
  16. package/dist/agents/agent.service.js +40 -0
  17. package/dist/agents/agent.service.js.map +1 -0
  18. package/dist/auth/auth.service.js +1 -1
  19. package/dist/auth/auth.service.js.map +1 -1
  20. package/dist/chat/chat.service.d.ts +2 -8
  21. package/dist/chat/chat.service.d.ts.map +1 -1
  22. package/dist/chat/chat.service.js +22 -19
  23. package/dist/chat/chat.service.js.map +1 -1
  24. package/dist/core/error-handler.js +1 -1
  25. package/dist/core/error-handler.js.map +1 -1
  26. package/dist/core/http-client.d.ts +3 -3
  27. package/dist/core/http-client.d.ts.map +1 -1
  28. package/dist/core/http-client.js +10 -1
  29. package/dist/core/http-client.js.map +1 -1
  30. package/dist/core/password-strength.js +1 -1
  31. package/dist/core/password-strength.js.map +1 -1
  32. package/dist/core/types/api.types.d.ts +3 -3
  33. package/dist/core/types/api.types.d.ts.map +1 -1
  34. package/dist/core/types/common.types.d.ts +1 -3
  35. package/dist/core/types/common.types.d.ts.map +1 -1
  36. package/dist/core/types/state-machine.types.d.ts +10 -10
  37. package/dist/core/types/state-machine.types.d.ts.map +1 -1
  38. package/dist/ecosystem/ecosystem.model.d.ts.map +1 -1
  39. package/dist/ecosystem/ecosystem.service.d.ts +5 -0
  40. package/dist/ecosystem/ecosystem.service.d.ts.map +1 -1
  41. package/dist/ecosystem/ecosystem.service.js +12 -0
  42. package/dist/ecosystem/ecosystem.service.js.map +1 -1
  43. package/dist/ecosystem/organization.model.d.ts +1 -0
  44. package/dist/ecosystem/organization.model.d.ts.map +1 -1
  45. package/dist/ecosystem/organization.service.d.ts.map +1 -1
  46. package/dist/ecosystem/organization.service.js.map +1 -1
  47. package/dist/ecosystem/schemas.d.ts +26 -26
  48. package/dist/ecosystem/schemas.d.ts.map +1 -1
  49. package/dist/ecosystem/schemas.js.map +1 -1
  50. package/dist/errors/error-codes.d.ts +1 -1
  51. package/dist/errors/error-codes.d.ts.map +1 -1
  52. package/dist/errors/error-codes.js +1 -1
  53. package/dist/errors/error-codes.js.map +1 -1
  54. package/dist/errors/task-state-errors.d.ts.map +1 -1
  55. package/dist/errors/task-state-errors.js.map +1 -1
  56. package/dist/events/event.model.d.ts +23 -0
  57. package/dist/events/event.model.d.ts.map +1 -0
  58. package/dist/events/event.model.js +3 -0
  59. package/dist/events/event.model.js.map +1 -0
  60. package/dist/events/event.service.d.ts +22 -0
  61. package/dist/events/event.service.d.ts.map +1 -0
  62. package/dist/events/event.service.js +104 -0
  63. package/dist/events/event.service.js.map +1 -0
  64. package/dist/files/file.model.d.ts.map +1 -1
  65. package/dist/guilds/guild.model.d.ts +60 -0
  66. package/dist/guilds/guild.model.d.ts.map +1 -0
  67. package/dist/guilds/guild.model.js +3 -0
  68. package/dist/guilds/guild.model.js.map +1 -0
  69. package/dist/guilds/guild.service.d.ts +19 -0
  70. package/dist/guilds/guild.service.d.ts.map +1 -0
  71. package/dist/guilds/guild.service.js +98 -0
  72. package/dist/guilds/guild.service.js.map +1 -0
  73. package/dist/index.d.ts +32 -8
  74. package/dist/index.d.ts.map +1 -1
  75. package/dist/index.js +48 -23
  76. package/dist/index.js.map +1 -1
  77. package/dist/missions/mission.model.d.ts +52 -0
  78. package/dist/missions/mission.model.d.ts.map +1 -0
  79. package/dist/missions/mission.model.js +3 -0
  80. package/dist/missions/mission.model.js.map +1 -0
  81. package/dist/missions/mission.service.d.ts +16 -0
  82. package/dist/missions/mission.service.d.ts.map +1 -0
  83. package/dist/missions/mission.service.js +72 -0
  84. package/dist/missions/mission.service.js.map +1 -0
  85. package/dist/notifications/notification.model.d.ts +0 -23
  86. package/dist/notifications/notification.model.d.ts.map +1 -1
  87. package/dist/notifications/notification.model.js +1 -14
  88. package/dist/notifications/notification.model.js.map +1 -1
  89. package/dist/notifications/notification.service.d.ts +13 -4
  90. package/dist/notifications/notification.service.d.ts.map +1 -1
  91. package/dist/notifications/notification.service.js +22 -13
  92. package/dist/notifications/notification.service.js.map +1 -1
  93. package/dist/openapi/decorators.d.ts +3 -3
  94. package/dist/openapi/decorators.d.ts.map +1 -1
  95. package/dist/openapi/decorators.js.map +1 -1
  96. package/dist/openapi/metadata.d.ts +8 -8
  97. package/dist/openapi/metadata.d.ts.map +1 -1
  98. package/dist/openapi/metadata.js.map +1 -1
  99. package/dist/profiles/person.model.d.ts +1 -1
  100. package/dist/profiles/person.model.d.ts.map +1 -1
  101. package/dist/profiles/profile.service.d.ts.map +1 -1
  102. package/dist/profiles/profile.service.js +1 -3
  103. package/dist/profiles/profile.service.js.map +1 -1
  104. package/dist/project/project.model.d.ts +15 -1
  105. package/dist/project/project.model.d.ts.map +1 -1
  106. package/dist/project/project.model.js.map +1 -1
  107. package/dist/project/schemas.d.ts +7 -7
  108. package/dist/project/schemas.d.ts.map +1 -1
  109. package/dist/project/schemas.js.map +1 -1
  110. package/dist/projects/project.service.d.ts +44 -0
  111. package/dist/projects/project.service.d.ts.map +1 -0
  112. package/dist/projects/project.service.js +98 -0
  113. package/dist/projects/project.service.js.map +1 -0
  114. package/dist/rewards/reward.model.d.ts +70 -0
  115. package/dist/rewards/reward.model.d.ts.map +1 -0
  116. package/dist/rewards/reward.model.js +3 -0
  117. package/dist/rewards/reward.model.js.map +1 -0
  118. package/dist/rewards/reward.service.d.ts +18 -0
  119. package/dist/rewards/reward.service.d.ts.map +1 -0
  120. package/dist/rewards/reward.service.js +115 -0
  121. package/dist/rewards/reward.service.js.map +1 -0
  122. package/dist/sdk-info.d.ts.map +1 -1
  123. package/dist/sdk-info.js.map +1 -1
  124. package/dist/tasks/schemas.d.ts +11 -11
  125. package/dist/tasks/schemas.d.ts.map +1 -1
  126. package/dist/tasks/schemas.js.map +1 -1
  127. package/dist/tasks/task-reference.model.d.ts +2 -0
  128. package/dist/tasks/task-reference.model.d.ts.map +1 -1
  129. package/dist/tasks/task-reference.model.js.map +1 -1
  130. package/dist/tasks/task.model.d.ts +10 -6
  131. package/dist/tasks/task.model.d.ts.map +1 -1
  132. package/dist/tasks/task.model.js +4 -0
  133. package/dist/tasks/task.model.js.map +1 -1
  134. package/dist/tasks/task.service.d.ts +5 -15
  135. package/dist/tasks/task.service.d.ts.map +1 -1
  136. package/dist/tasks/task.service.js +2 -25
  137. package/dist/tasks/task.service.js.map +1 -1
  138. package/dist/users/schemas.d.ts +5 -5
  139. package/dist/users/schemas.d.ts.map +1 -1
  140. package/dist/users/schemas.js.map +1 -1
  141. package/dist/users/user.model.d.ts +4 -19
  142. package/dist/users/user.model.d.ts.map +1 -1
  143. package/dist/users/user.model.js +1 -1
  144. package/dist/users/user.model.js.map +1 -1
  145. package/dist/users/user.service.d.ts.map +1 -1
  146. package/dist/users/user.service.js +13 -5
  147. package/dist/users/user.service.js.map +1 -1
  148. package/dist/utils/username-generator.d.ts.map +1 -1
  149. package/dist/utils/username-generator.js.map +1 -1
  150. package/dist/utils/validation.utils.d.ts +16 -16
  151. package/dist/utils/validation.utils.d.ts.map +1 -1
  152. package/dist/utils/validation.utils.js +4 -4
  153. package/dist/utils/validation.utils.js.map +1 -1
  154. package/dist/wallet/wallet.model.d.ts +19 -16
  155. package/dist/wallet/wallet.model.d.ts.map +1 -1
  156. package/dist/wallet/wallet.service.d.ts +3 -4
  157. package/dist/wallet/wallet.service.d.ts.map +1 -1
  158. package/dist/wallet/wallet.service.js +7 -12
  159. package/dist/wallet/wallet.service.js.map +1 -1
  160. package/package.json +18 -25
  161. package/dist/currency/currency.model.d.ts +0 -15
  162. package/dist/currency/currency.model.d.ts.map +0 -1
  163. package/dist/currency/currency.model.js +0 -15
  164. package/dist/currency/currency.model.js.map +0 -1
package/README.md CHANGED
@@ -1,413 +1,11 @@
1
- # Biome SDK
1
+ # biome-sdk
2
2
 
3
- Pure TypeScript SDK for Biome platform integration - authentication, task management, and blockchain interactions.
3
+ This library was generated with [Nx](https://nx.dev).
4
4
 
5
- ## Purpose
5
+ ## Building
6
6
 
7
- The Biome SDK is the **official contract** between frontend and backend teams, providing pure business logic, data models, and API communication without any UI concerns.
7
+ Run `nx build biome-sdk` to build the library.
8
8
 
9
- ## Features
9
+ ## Running unit tests
10
10
 
11
- - 🔄 **Authentication** - Login, logout, session management
12
- - 📋 **Task Management** - CRUD operations, state transitions, search
13
- - 👤 **Profile Management** - User profiles, updates, validation
14
- - 🔍 **User Lookup** - Search users by username/email with rate limiting and circuit breaker
15
- - 💬 **Chat System** - Context-agnostic messaging, file attachments, multi-user chats, SSE event delivery
16
- - 📁 **File Upload** - Image validation, upload, management
17
- - 🛡️ **CSRF Protection** - Auto-injection, token management
18
- - 🔧 **Utilities** - Sorting, validation, date manipulation
19
- - 📊 **Type Safety** - Complete TypeScript definitions
20
-
21
- ## Installation
22
-
23
- ### As Git Submodule (Current Biome Project)
24
- ```bash
25
- # The SDK is included as a git submodule in the main Biome project
26
- cd biome
27
- git submodule update --init --recursive
28
- npm install # Creates symlink for @biome/sdk
29
- npm run build:sdk
30
- npm run dev:sdk # Watch mode for development
31
- ```
32
-
33
- ### As NPM Package (Future External Use)
34
- ```bash
35
- npm install @biome/sdk
36
- ```
37
-
38
- ## Quick Start
39
-
40
- ```typescript
41
- import { BiomeSDK } from 'biome-sdk';
42
-
43
- // Initialize with CSRF protection (enabled by default)
44
- const biome = BiomeSDK.initialize({
45
- baseURL: 'https://api.biome.dev',
46
- timeout: 30000,
47
- csrf: {
48
- enabled: true,
49
- tokenUrl: '/api/csrf-token'
50
- }
51
- });
52
-
53
- // Authentication
54
- await biome.auth.login({ emailOrUsername: 'user@example.com', password: 'password' });
55
-
56
- // Task Management
57
- const tasks = await biome.tasks.getMyTasks();
58
- const newTask = await biome.tasks.create({
59
- title: 'New Task',
60
- description: 'Task description',
61
- assigneeId: 1
62
- });
63
-
64
- // Profile Management
65
- const profile = await biome.profiles.getMyProfile();
66
- await biome.profiles.updateProfile({ bio: 'Updated bio' });
67
- ```
68
-
69
- ## Task Retrieval (v0.9.0+)
70
-
71
- The SDK provides two resilient methods for retrieving tasks with automatic sorting, rate limiting, and circuit breaker protection.
72
-
73
- ### getMyTasks() - Assigned Tasks
74
-
75
- Retrieves tasks assigned to the current user with intelligent sorting.
76
-
77
- ```typescript
78
- // Basic usage - returns Task[] sorted by importance/urgency
79
- const myTasks = await biome.tasks.getMyTasks();
80
- // Returns: Task[] automatically sorted by:
81
- // 1. Important + Urgent first
82
- // 2. Important + Not Urgent
83
- // 3. Not Important + Urgent
84
- // 4. Not Important + Not Urgent
85
- // Then by nextTouchDate (ascending), createdAt (descending)
86
-
87
- // With filters
88
- const pendingTasks = await biome.tasks.getMyTasks({
89
- status: 'in-progress',
90
- search: 'bug fix',
91
- limit: 20,
92
- offset: 0,
93
- });
94
-
95
- // Check sorting fields
96
- myTasks.forEach(task => {
97
- console.log(task.isImportant, task.isUrgent, task.nextTouchDate);
98
- });
99
- ```
100
-
101
- ### getDelegatedTasks() - Delegated Tasks
102
-
103
- Retrieves tasks delegated by the current user (where user is requester, not assignee).
104
-
105
- ```typescript
106
- // Basic usage
107
- const delegatedTasks = await biome.tasks.getDelegatedTasks();
108
- // Returns: Task[] where current user is the requester
109
-
110
- // With filters
111
- const pendingDelegated = await biome.tasks.getDelegatedTasks({
112
- status: 'pending',
113
- search: 'review',
114
- });
115
- ```
116
-
117
- ### Resilience Features
118
-
119
- Both methods include automatic protection:
120
-
121
- | Feature | Configuration | Behavior |
122
- |---------|--------------|-----------|
123
- | Rate Limiter | 100 req/min per method | Returns 429 with retryAfter |
124
- | Circuit Breaker | 5 failures, 60s timeout | Returns 503 when open |
125
- | Auto-Sorting | TaskSorting.sortTasks() | Results sorted before returning |
126
-
127
- ### Error Handling
128
-
129
- ```typescript
130
- import { RateLimitExceededError, CircuitBreakerOpenError } from '@nekutima/biome-sdk';
131
-
132
- try {
133
- const tasks = await biome.tasks.getMyTasks();
134
- } catch (error) {
135
- if (error instanceof RateLimitExceededError) {
136
- console.log(`Rate limited. Retry after ${error.retryAfter}s`);
137
- // error.status = 429
138
- // error.retryAfter = seconds to wait
139
- } else if (error instanceof CircuitBreakerOpenError) {
140
- console.log('Service temporarily unavailable');
141
- // error.status = 503
142
- } else {
143
- console.log('Other error:', error.message);
144
- }
145
- }
146
- ```
147
-
148
- ### Performance
149
-
150
- The SDK processes task lists locally with overhead under 50ms for 1000 tasks (SC-004).
151
-
152
- See [docs/tasks-resilience-flow.md](./docs/tasks-resilience-flow.md) for sequence diagrams and detailed flow.
153
-
154
- ## Architecture
155
-
156
- ```
157
- Frontend (Angular/React/Vue)
158
- ↓ calls
159
- BiomeSDK (Pure TypeScript)
160
- ↓ HTTP
161
- Backend API (Node.js/Express)
162
- ```
163
-
164
- ## Folder Structure
165
-
166
- ```
167
- src/
168
- ├── auth/ # Authentication service
169
- ├── core/ # Core infrastructure
170
- │ ├── http-client.ts # HTTP client
171
- │ ├── configuration.ts # Configuration
172
- │ ├── state-manager.ts # State management
173
- │ ├── error-handler.ts # Error handling
174
- │ ├── password-strength.ts # Password validation
175
- │ └── types/ # Infrastructure types
176
- ├── tasks/ # Task domain
177
- │ ├── task.service.ts
178
- │ ├── task.model.ts
179
- │ ├── task-update.model.ts
180
- │ ├── task-url.model.ts
181
- │ ├── task-sorting.ts
182
- │ └── schemas.ts # Task validation
183
- ├── users/ # User domain
184
- │ ├── user.service.ts
185
- │ ├── user.model.ts
186
- │ └── schemas.ts # User validation
187
- ├── profiles/ # Profile domain
188
- │ ├── profile.service.ts
189
- │ └── person.model.ts
190
- ├── files/ # File domain
191
- │ ├── file-upload.ts
192
- │ └── file.model.ts
193
- ├── project/ # Project domain
194
- │ ├── project.model.ts
195
- │ └── schemas.ts # Project validation
196
- ├── ecosystem/ # Ecosystem domain
197
- │ ├── ecosystem.model.ts
198
- │ └── schemas.ts # Ecosystem validation
199
- ├── chat/ # Chat domain
200
- │ ├── chat.service.ts # Context-agnostic chat service
201
- │ └── __tests__/ # Chat service tests
202
- ├── models/ # Infrastructure models
203
- │ ├── api-response.model.ts
204
- │ ├── api-error.model.ts
205
- │ └── chat.model.ts # Chat data models
206
- ├── utils/ # Utilities
207
- └── index.ts # Main exports
208
- ```
209
-
210
- ## CSRF Protection
211
-
212
- The SDK includes built-in CSRF protection that is enabled by default.
213
-
214
- ### Configuration Options
215
-
216
- | Option | Type | Default | Description |
217
- |--------|------|---------|-------------|
218
- | `enabled` | boolean | `true` | Enable/disable CSRF protection |
219
- | `tokenUrl` | string | - | Endpoint to fetch CSRF token from server |
220
- | `headerName` | string | `X-CSRF-TOKEN` | Custom header name |
221
- | `cookieName` | string | `XSRF-TOKEN` | Cookie name to read token from |
222
-
223
- ### How It Works
224
-
225
- 1. If `tokenUrl` is provided, SDK fetches token on initialization
226
- 2. For mutating requests (POST, PUT, PATCH, DELETE), CSRF header is automatically added
227
- 3. Can also read token from cookie if set by server
228
-
229
- ### Examples
230
-
231
- ```typescript
232
- // Full CSRF configuration
233
- const biome = BiomeSDK.initialize({
234
- baseURL: 'https://api.biome.dev',
235
- csrf: {
236
- enabled: true,
237
- tokenUrl: '/api/csrf-token',
238
- headerName: 'X-CSRF-TOKEN',
239
- cookieName: 'XSRF-TOKEN'
240
- }
241
- });
242
-
243
- // Disable CSRF if not needed
244
- const biomeNoCsrf = BiomeSDK.initialize({
245
- baseURL: 'https://api.biome.dev',
246
- csrf: { enabled: false }
247
- });
248
- ```
249
-
250
- ## Session Management
251
-
252
- The SDK automatically detects session expiration and notifies your application via custom DOM events.
253
-
254
- ### Session Expiration Event
255
-
256
- When a 401 Unauthorized response is received, the SDK dispatches a `biome:session-expired` event:
257
-
258
- ```typescript
259
- import { BIOME_SESSION_EXPIRED_EVENT } from '@nekutima/biome-sdk';
260
-
261
- // Listen for session expiration
262
- window.addEventListener(BIOME_SESSION_EXPIRED_EVENT, () => {
263
- // Redirect to signin, show toast, etc.
264
- window.location.href = '/signin';
265
- });
266
- ```
267
-
268
- See [docs/session-management.md](./docs/session-management.md) for complete documentation including:
269
- - Framework-specific examples (Angular, React, Vue)
270
- - SSR compatibility
271
- - Best practices
272
- - Troubleshooting
273
-
274
- ### Quick Example (Angular)
275
-
276
- ```typescript
277
- @Injectable({ providedIn: 'root' })
278
- export class SessionExpiredService implements OnDestroy {
279
- constructor(private router: Router) {
280
- window.addEventListener('biome:session-expired', () => {
281
- this.router.navigate(['/signin']);
282
- });
283
- }
284
-
285
- ngOnDestroy() {
286
- window.removeEventListener('biome:session-expired', ...);
287
- }
288
- }
289
- ```
290
-
291
- ## Scope
292
-
293
- ### ✅ INCLUDED
294
- - Data models & interfaces
295
- - Business logic & validation
296
- - API communication
297
- - Pure algorithms
298
- - Error handling
299
-
300
- ### ❌ EXCLUDED
301
- - UI components
302
- - Framework dependencies
303
- - Visual state management
304
- - DOM manipulation
305
-
306
- ## Migration Guide
307
-
308
- ### User Lookup (v0.9.0+)
309
-
310
- The Biome SDK now provides two canonical methods for user lookup that replace legacy methods:
311
-
312
- #### 1. `findUsers()` - Multiple User Search (NEW)
313
-
314
- Replaces `getUsers()` and `searchUsers()` with a unified method featuring better defaults, rate limiting, and resilience patterns.
315
-
316
- ```typescript
317
- // ✅ NEW: Search multiple users by keyword (partial match on username OR email)
318
- const users = await sdk.users.findUsers('john');
319
- // Returns: [{username: 'johndoe', ...}, {username: 'johnson', ...}]
320
-
321
- // ✅ With custom limit (default: 20, max: 100)
322
- const users = await sdk.users.findUsers('@example.com', 50);
323
-
324
- // ✅ Always returns array (never null)
325
- const users = await sdk.users.findUsers('xyznonexistent');
326
- if (users.length === 0) {
327
- console.log('No users found');
328
- }
329
-
330
- // ❌ Deprecated - use findUsers instead
331
- const users = await sdk.users.getUsers('john', 10); // @deprecated
332
- const users = await sdk.users.searchUsers('john', 10); // @deprecated
333
- ```
334
-
335
- **Key Improvements:**
336
- - **Better defaults**: Default limit of 20 (previously unspecified)
337
- - **Enforced limits**: Maximum 100 results (client-side validation)
338
- - **Rate limiting**: 100 requests per minute (429 error when exceeded)
339
- - **Circuit breaker**: Fails fast when backend is unhealthy (503 error)
340
- - **Resilience**: Graceful degradation with automatic retries
341
- - **Whitespace handling**: Empty array returned immediately for whitespace-only input
342
- - **Avatar URLs**: Automatically populated for all results
343
-
344
- **Error Handling:**
345
- ```typescript
346
- import { RateLimitExceededError, CircuitBreakerOpenError } from '@nekutima/biome-sdk';
347
-
348
- try {
349
- const users = await sdk.users.findUsers('john');
350
- } catch (error) {
351
- if (error.code === 'RATE_LIMIT_EXCEEDED') {
352
- console.log(`Too many requests. Retry after ${error.retryAfter}s`);
353
- } else if (error.code === 'CIRCUIT_BREAKER_OPEN') {
354
- console.log('Service temporarily unavailable. Please try again later.');
355
- }
356
- }
357
- ```
358
-
359
- #### 2. `findUser()` - Single User Lookup
360
-
361
- The existing `findUser(identifier)` method (introduced v0.8.0) replaces `getUserByUsername()` as the canonical way to locate a single user. It accepts either username or email:
362
-
363
- ```typescript
364
- // ✅ Canonical approach - works with username OR email
365
- const user = await sdk.users.findUser('johndoe');
366
- const user = await sdk.users.findUser('john@example.com');
367
-
368
- // ❌ Deprecated - will show IDE warnings
369
- const user = await sdk.users.getUserByUsername('johndoe'); // @deprecated
370
-
371
- // ❌ Deprecated for single-user lookup
372
- const users = await sdk.users.getUsers('johndoe'); // Use findUser instead
373
- ```
374
-
375
- **Features:**
376
- - Single method for both username and email lookup
377
- - Case-insensitive email matching (RFC 5321 compliant)
378
- - Automatic avatar URL population
379
- - Returns `null` when user not found
380
- - Backward compatible - old methods still work
381
-
382
- ### Migration Summary
383
-
384
- | Old Method | New Method | Reason |
385
- |------------|------------|---------|
386
- | `getUsers(query?, limit?)` | `findUsers(keyword?, limit?)` | Better defaults, rate limiting, resilience |
387
- | `searchUsers(query, limit?)` | `findUsers(keyword?, limit?)` | Unified API, same functionality |
388
- | `getUserByUsername(username)` | `findUser(identifier)` | Supports both username and email |
389
-
390
- See [docs/user-lookup-flow.md](./docs/user-lookup-flow.md) for complete documentation including:
391
- - Flow diagrams with Mermaid charts
392
- - Complete API reference
393
- - Error handling patterns
394
- - Usage examples
395
-
396
- ## Documentation
397
-
398
- - [CONTRACT.md](./CONTRACT.md) - SDK contract and scope
399
- - [FRONTEND_INTEGRATION.md](./FRONTEND_INTEGRATION.md) - Frontend integration guide
400
- - [BACKEND_INTEGRATION.md](./BACKEND_INTEGRATION.md) - Backend integration guide
401
- - [docs/INDEX.md](./docs/INDEX.md) - Complete documentation index
402
- - [docs/chat-sdk.md](./docs/chat-sdk.md) - Comprehensive chat SDK documentation
403
- - [CHANGELOG.md](./CHANGELOG.md) - Version history and changes
404
-
405
- ## Version
406
-
407
- Current: **0.9.0**
408
- - Published to npm: `@nekutima/biome-sdk`
409
- - See [CHANGELOG.md](./CHANGELOG.md) for version history
410
-
411
- ## Support
412
-
413
- For SDK issues, integration help, or questions about scope and usage, see [CONTRACT.md](./CONTRACT.md) contact guidelines.
11
+ Run `nx test biome-sdk` to execute the unit tests via [Jest](https://jestjs.io).
@@ -0,0 +1,24 @@
1
+ export interface AdminUser {
2
+ id: number;
3
+ username: string;
4
+ email: string;
5
+ password?: string;
6
+ timezoneId?: number;
7
+ loginAttempts?: number;
8
+ emailConfirmedAt?: Date | null;
9
+ termsAcceptedAt?: Date | null;
10
+ lockedUntil?: Date | null;
11
+ lastLoginAt?: Date | null;
12
+ loginCount?: number;
13
+ hasActiveSubscription?: boolean;
14
+ nekTokensAvailable?: number;
15
+ isAdmin?: boolean;
16
+ isBetaTester?: boolean;
17
+ createdAt?: Date;
18
+ updatedAt?: Date;
19
+ isBlocked?: boolean;
20
+ bucksBalance?: number;
21
+ eurBalance: number;
22
+ bucksEquivalent: number;
23
+ }
24
+ //# sourceMappingURL=admin.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.model.d.ts","sourceRoot":"","sources":["../../src/admin/admin.model.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC9B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,WAAW,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=admin.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.model.js","sourceRoot":"","sources":["../../src/admin/admin.model.ts"],"names":[],"mappings":""}
@@ -1,10 +1,10 @@
1
- import { BiomeHttpClient } from '../core/http-client';
2
- import { AdminUser, UserMinimal } from '../users/user.model';
1
+ import { BiomeHttpClient } from "../core/http-client";
2
+ import { AdminUser } from "./admin.model";
3
3
  export declare class BiomeAdmin {
4
- private http;
4
+ private readonly http;
5
5
  constructor(http: BiomeHttpClient);
6
6
  getAllUsers(): Promise<AdminUser[]>;
7
- getBlockedUsers(): Promise<UserMinimal[]>;
7
+ getBlockedUsers(): Promise<AdminUser[]>;
8
8
  unblockUser(userId: number): Promise<void>;
9
9
  setUserBlocked(userId: number, blocked: boolean): Promise<void>;
10
10
  setUserBetaTester(userId: number, value: boolean): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"admin.service.d.ts","sourceRoot":"","sources":["../../src/admin/admin.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE7D,qBAAa,UAAU;IACP,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAEnC,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASnC,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IASzC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOzE"}
1
+ {"version":3,"file":"admin.service.d.ts","sourceRoot":"","sources":["../../src/admin/admin.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAkB;gBAE3B,IAAI,EAAE,eAAe;IAI3B,WAAW,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASnC,eAAe,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IASvC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1C,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQhE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ/D,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAOvE"}
@@ -8,60 +8,60 @@ class BiomeAdmin {
8
8
  }
9
9
  async getAllUsers() {
10
10
  try {
11
- const response = await this.http.get('/admin/users');
11
+ const response = await this.http.get("/admin/users");
12
12
  return response.payload;
13
13
  }
14
14
  catch (error) {
15
- throw (0, error_handler_1.createSdkError)(error, 'Failed to fetch all users');
15
+ throw (0, error_handler_1.createSdkError)(error, "Failed to get all users");
16
16
  }
17
17
  }
18
18
  async getBlockedUsers() {
19
19
  try {
20
- const response = await this.http.get('/admin/users?filter=blocked');
20
+ const response = await this.http.get("/admin/users/blocked");
21
21
  return response.payload;
22
22
  }
23
23
  catch (error) {
24
- throw (0, error_handler_1.createSdkError)(error, 'Failed to fetch blocked users');
24
+ throw (0, error_handler_1.createSdkError)(error, "Failed to get blocked users");
25
25
  }
26
26
  }
27
27
  async unblockUser(userId) {
28
28
  try {
29
- await this.http.patch(`/admin/users/${userId}/unblock`, {});
29
+ await this.http.post(`/admin/users/${userId}/unblock`, {});
30
30
  }
31
31
  catch (error) {
32
- throw (0, error_handler_1.createSdkError)(error, 'Failed to unblock user');
32
+ throw (0, error_handler_1.createSdkError)(error, "Failed to unblock user");
33
33
  }
34
34
  }
35
35
  async setUserBlocked(userId, blocked) {
36
36
  try {
37
- await this.http.patch(`/admin/users/${userId}/blocked`, { blocked });
37
+ await this.http.post(`/admin/users/${userId}/blocked`, { blocked });
38
38
  }
39
39
  catch (error) {
40
- throw (0, error_handler_1.createSdkError)(error, 'Failed to set user blocked status');
40
+ throw (0, error_handler_1.createSdkError)(error, "Failed to set user blocked status");
41
41
  }
42
42
  }
43
43
  async setUserBetaTester(userId, value) {
44
44
  try {
45
- await this.http.patch(`/admin/users/${userId}/beta-tester`, { isBetaTester: value });
45
+ await this.http.post(`/admin/users/${userId}/beta-tester`, { value });
46
46
  }
47
47
  catch (error) {
48
- throw (0, error_handler_1.createSdkError)(error, 'Failed to set beta tester status');
48
+ throw (0, error_handler_1.createSdkError)(error, "Failed to set user beta tester status");
49
49
  }
50
50
  }
51
51
  async setUserAdminFlag(userId, value) {
52
52
  try {
53
- await this.http.patch(`/admin/users/${userId}/admin-flag`, { isAdminFlagged: value });
53
+ await this.http.post(`/admin/users/${userId}/admin-flag`, { value });
54
54
  }
55
55
  catch (error) {
56
- throw (0, error_handler_1.createSdkError)(error, 'Failed to set admin flag');
56
+ throw (0, error_handler_1.createSdkError)(error, "Failed to set user admin flag");
57
57
  }
58
58
  }
59
59
  async grantUserBucks(userId, eurAmount) {
60
60
  try {
61
- await this.http.post(`/admin/users/${userId}/wallet/deposit`, { eurAmount });
61
+ await this.http.post(`/admin/users/${userId}/bucks`, { eurAmount });
62
62
  }
63
63
  catch (error) {
64
- throw (0, error_handler_1.createSdkError)(error, 'Failed to grant bucks to user');
64
+ throw (0, error_handler_1.createSdkError)(error, "Failed to grant bucks to user");
65
65
  }
66
66
  }
67
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"admin.service.js","sourceRoot":"","sources":["../../src/admin/admin.service.ts"],"names":[],"mappings":";;;AACA,yDAAuD;AAIvD,MAAa,UAAU;IACnB,YAAoB,IAAqB;QAArB,SAAI,GAAJ,IAAI,CAAiB;IAAG,CAAC;IAE7C,KAAK,CAAC,WAAW;QACb,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,cAAc,CAAC,CAAC;YAC/E,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,eAAe;QACjB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAA6B,6BAA6B,CAAC,CAAC;YAChG,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC5B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC5B,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoB,gBAAgB,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAAgB;QACjD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoB,gBAAgB,MAAM,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,KAAc;QAClD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoB,gBAAgB,MAAM,cAAc,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAc;QACjD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAoB,gBAAgB,MAAM,aAAa,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,SAAiB;QAClD,IAAI,CAAC;YACD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,iBAAiB,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;QACjE,CAAC;IACL,CAAC;CACJ;AA5DD,gCA4DC"}
1
+ {"version":3,"file":"admin.service.js","sourceRoot":"","sources":["../../src/admin/admin.service.ts"],"names":[],"mappings":";;;AACA,yDAAuD;AAIvD,MAAa,UAAU;IAGrB,YAAY,IAAqB;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,cAAc,CAAC,CAAC;YAC/E,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,sBAAsB,CAAC,CAAC;YACvF,OAAO,QAAQ,CAAC,OAAO,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,6BAA6B,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,MAAc;QAC9B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,UAAU,EAAE,EAAE,CAAC,CAAC;QAChF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAAgB;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,mCAAmC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,MAAc,EAAE,KAAc;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,cAAc,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,uCAAuC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,KAAc;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,SAAiB;QACpD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAoB,gBAAgB,MAAM,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACzF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAA,8BAAc,EAAC,KAAK,EAAE,+BAA+B,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;CACF;AAhED,gCAgEC"}
@@ -0,0 +1,30 @@
1
+ export type AgentType = 'yuri' | 'ollama';
2
+ export interface Agent {
3
+ id?: number;
4
+ userId: number;
5
+ name: string;
6
+ type: AgentType;
7
+ baseUrl?: string | null;
8
+ model?: string | null;
9
+ isActive: boolean;
10
+ isBuiltin: boolean;
11
+ createdAt?: Date | string;
12
+ updatedAt?: Date | string;
13
+ }
14
+ export interface CreateAgentRequest {
15
+ name: string;
16
+ type: AgentType;
17
+ baseUrl?: string;
18
+ model?: string;
19
+ }
20
+ export interface UpdateAgentRequest {
21
+ name?: string;
22
+ baseUrl?: string | null;
23
+ model?: string | null;
24
+ isActive?: boolean;
25
+ }
26
+ export interface AgentListResponse {
27
+ data: Agent[];
28
+ total: number;
29
+ }
30
+ //# sourceMappingURL=agent.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.model.d.ts","sourceRoot":"","sources":["../../src/agents/agent.model.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1C,MAAM,WAAW,KAAK;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,iBAAiB;IAC9B,IAAI,EAAE,KAAK,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=agent.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.model.js","sourceRoot":"","sources":["../../src/agents/agent.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { BiomeHttpClient } from '../core/http-client';
2
+ import { Agent, AgentListResponse, CreateAgentRequest, UpdateAgentRequest } from './agent.model';
3
+ export declare class BiomeAgents {
4
+ private http;
5
+ constructor(http: BiomeHttpClient);
6
+ list(): Promise<AgentListResponse>;
7
+ get(id: number): Promise<Agent>;
8
+ create(data: CreateAgentRequest): Promise<{
9
+ id: number;
10
+ }>;
11
+ update(id: number, data: UpdateAgentRequest): Promise<Agent>;
12
+ delete(id: number): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=agent.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent.service.d.ts","sourceRoot":"","sources":["../../src/agents/agent.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAGtD,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEjG,qBAAa,WAAW;IACR,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,eAAe;IAEnC,IAAI,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAMlC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAM/B,MAAM,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IAMzD,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,KAAK,CAAC;IAM5D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAI1C"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BiomeAgents = void 0;
4
+ const error_handler_1 = require("../core/error-handler");
5
+ class BiomeAgents {
6
+ constructor(http) {
7
+ this.http = http;
8
+ }
9
+ async list() {
10
+ const response = await this.http.get('/agents');
11
+ if (!response.isSuccess)
12
+ throw (0, error_handler_1.createSdkError)(response);
13
+ return response.payload;
14
+ }
15
+ async get(id) {
16
+ const response = await this.http.get(`/agent/${id}`);
17
+ if (!response.isSuccess)
18
+ throw (0, error_handler_1.createSdkError)(response);
19
+ return response.payload;
20
+ }
21
+ async create(data) {
22
+ const response = await this.http.post('/agent', data);
23
+ if (!response.isSuccess)
24
+ throw (0, error_handler_1.createSdkError)(response);
25
+ return response.payload;
26
+ }
27
+ async update(id, data) {
28
+ const response = await this.http.patch(`/agent/${id}`, data);
29
+ if (!response.isSuccess)
30
+ throw (0, error_handler_1.createSdkError)(response);
31
+ return response.payload;
32
+ }
33
+ async delete(id) {
34
+ const response = await this.http.delete(`/agent/${id}`);
35
+ if (!response.isSuccess)
36
+ throw (0, error_handler_1.createSdkError)(response);
37
+ }
38
+ }
39
+ exports.BiomeAgents = BiomeAgents;
40
+ //# sourceMappingURL=agent.service.js.map