@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.
- package/README.md +6 -408
- package/dist/admin/admin.model.d.ts +24 -0
- package/dist/admin/admin.model.d.ts.map +1 -0
- package/dist/admin/admin.model.js +3 -0
- package/dist/admin/admin.model.js.map +1 -0
- package/dist/admin/admin.service.d.ts +4 -4
- package/dist/admin/admin.service.d.ts.map +1 -1
- package/dist/admin/admin.service.js +14 -14
- package/dist/admin/admin.service.js.map +1 -1
- package/dist/agents/agent.model.d.ts +30 -0
- package/dist/agents/agent.model.d.ts.map +1 -0
- package/dist/agents/agent.model.js +3 -0
- package/dist/agents/agent.model.js.map +1 -0
- package/dist/agents/agent.service.d.ts +14 -0
- package/dist/agents/agent.service.d.ts.map +1 -0
- package/dist/agents/agent.service.js +40 -0
- package/dist/agents/agent.service.js.map +1 -0
- package/dist/auth/auth.service.js +1 -1
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/chat/chat.service.d.ts +2 -8
- package/dist/chat/chat.service.d.ts.map +1 -1
- package/dist/chat/chat.service.js +22 -19
- package/dist/chat/chat.service.js.map +1 -1
- package/dist/core/error-handler.js +1 -1
- package/dist/core/error-handler.js.map +1 -1
- package/dist/core/http-client.d.ts +3 -3
- package/dist/core/http-client.d.ts.map +1 -1
- package/dist/core/http-client.js +10 -1
- package/dist/core/http-client.js.map +1 -1
- package/dist/core/password-strength.js +1 -1
- package/dist/core/password-strength.js.map +1 -1
- package/dist/core/types/api.types.d.ts +3 -3
- package/dist/core/types/api.types.d.ts.map +1 -1
- package/dist/core/types/common.types.d.ts +1 -3
- package/dist/core/types/common.types.d.ts.map +1 -1
- package/dist/core/types/state-machine.types.d.ts +10 -10
- package/dist/core/types/state-machine.types.d.ts.map +1 -1
- package/dist/ecosystem/ecosystem.model.d.ts.map +1 -1
- package/dist/ecosystem/ecosystem.service.d.ts +5 -0
- package/dist/ecosystem/ecosystem.service.d.ts.map +1 -1
- package/dist/ecosystem/ecosystem.service.js +12 -0
- package/dist/ecosystem/ecosystem.service.js.map +1 -1
- package/dist/ecosystem/organization.model.d.ts +1 -0
- package/dist/ecosystem/organization.model.d.ts.map +1 -1
- package/dist/ecosystem/organization.service.d.ts.map +1 -1
- package/dist/ecosystem/organization.service.js.map +1 -1
- package/dist/ecosystem/schemas.d.ts +26 -26
- package/dist/ecosystem/schemas.d.ts.map +1 -1
- package/dist/ecosystem/schemas.js.map +1 -1
- package/dist/errors/error-codes.d.ts +1 -1
- package/dist/errors/error-codes.d.ts.map +1 -1
- package/dist/errors/error-codes.js +1 -1
- package/dist/errors/error-codes.js.map +1 -1
- package/dist/errors/task-state-errors.d.ts.map +1 -1
- package/dist/errors/task-state-errors.js.map +1 -1
- package/dist/events/event.model.d.ts +23 -0
- package/dist/events/event.model.d.ts.map +1 -0
- package/dist/events/event.model.js +3 -0
- package/dist/events/event.model.js.map +1 -0
- package/dist/events/event.service.d.ts +22 -0
- package/dist/events/event.service.d.ts.map +1 -0
- package/dist/events/event.service.js +104 -0
- package/dist/events/event.service.js.map +1 -0
- package/dist/files/file.model.d.ts.map +1 -1
- package/dist/guilds/guild.model.d.ts +60 -0
- package/dist/guilds/guild.model.d.ts.map +1 -0
- package/dist/guilds/guild.model.js +3 -0
- package/dist/guilds/guild.model.js.map +1 -0
- package/dist/guilds/guild.service.d.ts +19 -0
- package/dist/guilds/guild.service.d.ts.map +1 -0
- package/dist/guilds/guild.service.js +98 -0
- package/dist/guilds/guild.service.js.map +1 -0
- package/dist/index.d.ts +32 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +48 -23
- package/dist/index.js.map +1 -1
- package/dist/missions/mission.model.d.ts +52 -0
- package/dist/missions/mission.model.d.ts.map +1 -0
- package/dist/missions/mission.model.js +3 -0
- package/dist/missions/mission.model.js.map +1 -0
- package/dist/missions/mission.service.d.ts +16 -0
- package/dist/missions/mission.service.d.ts.map +1 -0
- package/dist/missions/mission.service.js +72 -0
- package/dist/missions/mission.service.js.map +1 -0
- package/dist/notifications/notification.model.d.ts +0 -23
- package/dist/notifications/notification.model.d.ts.map +1 -1
- package/dist/notifications/notification.model.js +1 -14
- package/dist/notifications/notification.model.js.map +1 -1
- package/dist/notifications/notification.service.d.ts +13 -4
- package/dist/notifications/notification.service.d.ts.map +1 -1
- package/dist/notifications/notification.service.js +22 -13
- package/dist/notifications/notification.service.js.map +1 -1
- package/dist/openapi/decorators.d.ts +3 -3
- package/dist/openapi/decorators.d.ts.map +1 -1
- package/dist/openapi/decorators.js.map +1 -1
- package/dist/openapi/metadata.d.ts +8 -8
- package/dist/openapi/metadata.d.ts.map +1 -1
- package/dist/openapi/metadata.js.map +1 -1
- package/dist/profiles/person.model.d.ts +1 -1
- package/dist/profiles/person.model.d.ts.map +1 -1
- package/dist/profiles/profile.service.d.ts.map +1 -1
- package/dist/profiles/profile.service.js +1 -3
- package/dist/profiles/profile.service.js.map +1 -1
- package/dist/project/project.model.d.ts +15 -1
- package/dist/project/project.model.d.ts.map +1 -1
- package/dist/project/project.model.js.map +1 -1
- package/dist/project/schemas.d.ts +7 -7
- package/dist/project/schemas.d.ts.map +1 -1
- package/dist/project/schemas.js.map +1 -1
- package/dist/projects/project.service.d.ts +44 -0
- package/dist/projects/project.service.d.ts.map +1 -0
- package/dist/projects/project.service.js +98 -0
- package/dist/projects/project.service.js.map +1 -0
- package/dist/rewards/reward.model.d.ts +70 -0
- package/dist/rewards/reward.model.d.ts.map +1 -0
- package/dist/rewards/reward.model.js +3 -0
- package/dist/rewards/reward.model.js.map +1 -0
- package/dist/rewards/reward.service.d.ts +18 -0
- package/dist/rewards/reward.service.d.ts.map +1 -0
- package/dist/rewards/reward.service.js +115 -0
- package/dist/rewards/reward.service.js.map +1 -0
- package/dist/sdk-info.d.ts.map +1 -1
- package/dist/sdk-info.js.map +1 -1
- package/dist/tasks/schemas.d.ts +11 -11
- package/dist/tasks/schemas.d.ts.map +1 -1
- package/dist/tasks/schemas.js.map +1 -1
- package/dist/tasks/task-reference.model.d.ts +2 -0
- package/dist/tasks/task-reference.model.d.ts.map +1 -1
- package/dist/tasks/task-reference.model.js.map +1 -1
- package/dist/tasks/task.model.d.ts +10 -6
- package/dist/tasks/task.model.d.ts.map +1 -1
- package/dist/tasks/task.model.js +4 -0
- package/dist/tasks/task.model.js.map +1 -1
- package/dist/tasks/task.service.d.ts +5 -15
- package/dist/tasks/task.service.d.ts.map +1 -1
- package/dist/tasks/task.service.js +2 -25
- package/dist/tasks/task.service.js.map +1 -1
- package/dist/users/schemas.d.ts +5 -5
- package/dist/users/schemas.d.ts.map +1 -1
- package/dist/users/schemas.js.map +1 -1
- package/dist/users/user.model.d.ts +4 -19
- package/dist/users/user.model.d.ts.map +1 -1
- package/dist/users/user.model.js +1 -1
- package/dist/users/user.model.js.map +1 -1
- package/dist/users/user.service.d.ts.map +1 -1
- package/dist/users/user.service.js +13 -5
- package/dist/users/user.service.js.map +1 -1
- package/dist/utils/username-generator.d.ts.map +1 -1
- package/dist/utils/username-generator.js.map +1 -1
- package/dist/utils/validation.utils.d.ts +16 -16
- package/dist/utils/validation.utils.d.ts.map +1 -1
- package/dist/utils/validation.utils.js +4 -4
- package/dist/utils/validation.utils.js.map +1 -1
- package/dist/wallet/wallet.model.d.ts +19 -16
- package/dist/wallet/wallet.model.d.ts.map +1 -1
- package/dist/wallet/wallet.service.d.ts +3 -4
- package/dist/wallet/wallet.service.d.ts.map +1 -1
- package/dist/wallet/wallet.service.js +7 -12
- package/dist/wallet/wallet.service.js.map +1 -1
- package/package.json +18 -25
- package/dist/currency/currency.model.d.ts +0 -15
- package/dist/currency/currency.model.d.ts.map +0 -1
- package/dist/currency/currency.model.js +0 -15
- package/dist/currency/currency.model.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,413 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# biome-sdk
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
This library was generated with [Nx](https://nx.dev).
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## Building
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Run `nx build biome-sdk` to build the library.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Running unit tests
|
|
10
10
|
|
|
11
|
-
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"admin.model.js","sourceRoot":"","sources":["../../src/admin/admin.model.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { BiomeHttpClient } from
|
|
2
|
-
import { AdminUser
|
|
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<
|
|
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,
|
|
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(
|
|
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,
|
|
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(
|
|
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,
|
|
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.
|
|
29
|
+
await this.http.post(`/admin/users/${userId}/unblock`, {});
|
|
30
30
|
}
|
|
31
31
|
catch (error) {
|
|
32
|
-
throw (0, error_handler_1.createSdkError)(error,
|
|
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.
|
|
37
|
+
await this.http.post(`/admin/users/${userId}/blocked`, { blocked });
|
|
38
38
|
}
|
|
39
39
|
catch (error) {
|
|
40
|
-
throw (0, error_handler_1.createSdkError)(error,
|
|
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.
|
|
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,
|
|
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.
|
|
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,
|
|
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}/
|
|
61
|
+
await this.http.post(`/admin/users/${userId}/bucks`, { eurAmount });
|
|
62
62
|
}
|
|
63
63
|
catch (error) {
|
|
64
|
-
throw (0, error_handler_1.createSdkError)(error,
|
|
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;
|
|
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 @@
|
|
|
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
|