@nekutima/biome-sdk 0.8.0 → 0.9.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 +69 -6
- package/dist/core/resilience.d.ts +80 -0
- package/dist/core/resilience.d.ts.map +1 -0
- package/dist/core/resilience.js +151 -0
- package/dist/core/resilience.js.map +1 -0
- package/dist/sdk-info.d.ts +11 -4
- package/dist/sdk-info.d.ts.map +1 -1
- package/dist/sdk-info.js +11 -4
- package/dist/sdk-info.js.map +1 -1
- package/dist/users/user.service.d.ts +28 -0
- package/dist/users/user.service.d.ts.map +1 -1
- package/dist/users/user.service.js +72 -1
- package/dist/users/user.service.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,6 +11,7 @@ The Biome SDK is the **official contract** between frontend and backend teams, p
|
|
|
11
11
|
- 🔄 **Authentication** - Login, logout, session management
|
|
12
12
|
- 📋 **Task Management** - CRUD operations, state transitions, search
|
|
13
13
|
- 👤 **Profile Management** - User profiles, updates, validation
|
|
14
|
+
- 🔍 **User Lookup** - Search users by username/email with rate limiting and circuit breaker
|
|
14
15
|
- 💬 **Chat System** - Context-agnostic messaging, file attachments, multi-user chats, SSE event delivery
|
|
15
16
|
- 📁 **File Upload** - Image validation, upload, management
|
|
16
17
|
- 🛡️ **CSRF Protection** - Auto-injection, token management
|
|
@@ -219,14 +220,63 @@ export class SessionExpiredService implements OnDestroy {
|
|
|
219
220
|
|
|
220
221
|
## Migration Guide
|
|
221
222
|
|
|
222
|
-
### User Lookup (v0.
|
|
223
|
+
### User Lookup (v0.9.0+)
|
|
223
224
|
|
|
224
|
-
|
|
225
|
+
The Biome SDK now provides two canonical methods for user lookup that replace legacy methods:
|
|
225
226
|
|
|
226
|
-
|
|
227
|
+
#### 1. `findUsers()` - Multiple User Search (NEW)
|
|
227
228
|
|
|
229
|
+
Replaces `getUsers()` and `searchUsers()` with a unified method featuring better defaults, rate limiting, and resilience patterns.
|
|
230
|
+
|
|
231
|
+
```typescript
|
|
232
|
+
// ✅ NEW: Search multiple users by keyword (partial match on username OR email)
|
|
233
|
+
const users = await sdk.users.findUsers('john');
|
|
234
|
+
// Returns: [{username: 'johndoe', ...}, {username: 'johnson', ...}]
|
|
235
|
+
|
|
236
|
+
// ✅ With custom limit (default: 20, max: 100)
|
|
237
|
+
const users = await sdk.users.findUsers('@example.com', 50);
|
|
238
|
+
|
|
239
|
+
// ✅ Always returns array (never null)
|
|
240
|
+
const users = await sdk.users.findUsers('xyznonexistent');
|
|
241
|
+
if (users.length === 0) {
|
|
242
|
+
console.log('No users found');
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
// ❌ Deprecated - use findUsers instead
|
|
246
|
+
const users = await sdk.users.getUsers('john', 10); // @deprecated
|
|
247
|
+
const users = await sdk.users.searchUsers('john', 10); // @deprecated
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Key Improvements:**
|
|
251
|
+
- **Better defaults**: Default limit of 20 (previously unspecified)
|
|
252
|
+
- **Enforced limits**: Maximum 100 results (client-side validation)
|
|
253
|
+
- **Rate limiting**: 100 requests per minute (429 error when exceeded)
|
|
254
|
+
- **Circuit breaker**: Fails fast when backend is unhealthy (503 error)
|
|
255
|
+
- **Resilience**: Graceful degradation with automatic retries
|
|
256
|
+
- **Whitespace handling**: Empty array returned immediately for whitespace-only input
|
|
257
|
+
- **Avatar URLs**: Automatically populated for all results
|
|
258
|
+
|
|
259
|
+
**Error Handling:**
|
|
228
260
|
```typescript
|
|
229
|
-
|
|
261
|
+
import { RateLimitExceededError, CircuitBreakerOpenError } from '@nekutima/biome-sdk';
|
|
262
|
+
|
|
263
|
+
try {
|
|
264
|
+
const users = await sdk.users.findUsers('john');
|
|
265
|
+
} catch (error) {
|
|
266
|
+
if (error.code === 'RATE_LIMIT_EXCEEDED') {
|
|
267
|
+
console.log(`Too many requests. Retry after ${error.retryAfter}s`);
|
|
268
|
+
} else if (error.code === 'CIRCUIT_BREAKER_OPEN') {
|
|
269
|
+
console.log('Service temporarily unavailable. Please try again later.');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
#### 2. `findUser()` - Single User Lookup
|
|
275
|
+
|
|
276
|
+
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:
|
|
277
|
+
|
|
278
|
+
```typescript
|
|
279
|
+
// ✅ Canonical approach - works with username OR email
|
|
230
280
|
const user = await sdk.users.findUser('johndoe');
|
|
231
281
|
const user = await sdk.users.findUser('john@example.com');
|
|
232
282
|
|
|
@@ -241,9 +291,22 @@ const users = await sdk.users.getUsers('johndoe'); // Use findUser instead
|
|
|
241
291
|
- Single method for both username and email lookup
|
|
242
292
|
- Case-insensitive email matching (RFC 5321 compliant)
|
|
243
293
|
- Automatic avatar URL population
|
|
294
|
+
- Returns `null` when user not found
|
|
244
295
|
- Backward compatible - old methods still work
|
|
245
296
|
|
|
246
|
-
|
|
297
|
+
### Migration Summary
|
|
298
|
+
|
|
299
|
+
| Old Method | New Method | Reason |
|
|
300
|
+
|------------|------------|---------|
|
|
301
|
+
| `getUsers(query?, limit?)` | `findUsers(keyword?, limit?)` | Better defaults, rate limiting, resilience |
|
|
302
|
+
| `searchUsers(query, limit?)` | `findUsers(keyword?, limit?)` | Unified API, same functionality |
|
|
303
|
+
| `getUserByUsername(username)` | `findUser(identifier)` | Supports both username and email |
|
|
304
|
+
|
|
305
|
+
See [docs/user-lookup-flow.md](./docs/user-lookup-flow.md) for complete documentation including:
|
|
306
|
+
- Flow diagrams with Mermaid charts
|
|
307
|
+
- Complete API reference
|
|
308
|
+
- Error handling patterns
|
|
309
|
+
- Usage examples
|
|
247
310
|
|
|
248
311
|
## Documentation
|
|
249
312
|
|
|
@@ -256,7 +319,7 @@ See [docs/user-lookup-flow.md](./docs/user-lookup-flow.md) for complete document
|
|
|
256
319
|
|
|
257
320
|
## Version
|
|
258
321
|
|
|
259
|
-
Current: **0.
|
|
322
|
+
Current: **0.9.0**
|
|
260
323
|
- Published to npm: `@nekutima/biome-sdk`
|
|
261
324
|
- See [CHANGELOG.md](./CHANGELOG.md) for version history
|
|
262
325
|
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rate limiter for SDK operations
|
|
3
|
+
* Implements sliding window rate limiting per operation per user
|
|
4
|
+
*/
|
|
5
|
+
export declare class RateLimiter {
|
|
6
|
+
private requests;
|
|
7
|
+
private readonly windowMs;
|
|
8
|
+
private readonly maxRequests;
|
|
9
|
+
constructor(maxRequests: number, windowSeconds: number);
|
|
10
|
+
/**
|
|
11
|
+
* Check if operation is allowed and record request
|
|
12
|
+
* @param key - Unique key for the operation (e.g., 'findUsers:user123')
|
|
13
|
+
* @returns RateLimitCheck result with allowed status and wait time if throttled
|
|
14
|
+
*/
|
|
15
|
+
checkLimit(key: string): RateLimitCheck;
|
|
16
|
+
/**
|
|
17
|
+
* Clear all rate limit data (useful for testing)
|
|
18
|
+
*/
|
|
19
|
+
clear(): void;
|
|
20
|
+
}
|
|
21
|
+
export interface RateLimitCheck {
|
|
22
|
+
allowed: boolean;
|
|
23
|
+
remaining: number;
|
|
24
|
+
resetTime: Date;
|
|
25
|
+
retryAfter?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Circuit breaker for resilient API calls
|
|
29
|
+
* States: CLOSED (normal), OPEN (failing), HALF_OPEN (testing recovery)
|
|
30
|
+
*/
|
|
31
|
+
export declare class CircuitBreaker {
|
|
32
|
+
private readonly failureThreshold;
|
|
33
|
+
private readonly resetTimeoutMs;
|
|
34
|
+
private readonly halfOpenMaxCalls;
|
|
35
|
+
private state;
|
|
36
|
+
private failureCount;
|
|
37
|
+
private lastFailureTime?;
|
|
38
|
+
private nextAttempt;
|
|
39
|
+
constructor(failureThreshold?: number, resetTimeoutMs?: number, halfOpenMaxCalls?: number);
|
|
40
|
+
/**
|
|
41
|
+
* Execute operation with circuit breaker protection
|
|
42
|
+
* @param operation - The async operation to execute
|
|
43
|
+
* @returns Result of the operation
|
|
44
|
+
* @throws CircuitBreakerOpenError if circuit is open
|
|
45
|
+
* @throws Original error if operation fails
|
|
46
|
+
*/
|
|
47
|
+
execute<T>(operation: () => Promise<T>): Promise<T>;
|
|
48
|
+
private onSuccess;
|
|
49
|
+
private onFailure;
|
|
50
|
+
/**
|
|
51
|
+
* Get current circuit breaker state
|
|
52
|
+
*/
|
|
53
|
+
getState(): CircuitBreakerState;
|
|
54
|
+
/**
|
|
55
|
+
* Reset circuit breaker (useful for testing)
|
|
56
|
+
*/
|
|
57
|
+
reset(): void;
|
|
58
|
+
}
|
|
59
|
+
export type CircuitBreakerState = 'CLOSED' | 'OPEN' | 'HALF_OPEN';
|
|
60
|
+
/**
|
|
61
|
+
* Error thrown when circuit breaker is open
|
|
62
|
+
*/
|
|
63
|
+
export declare class CircuitBreakerOpenError extends Error {
|
|
64
|
+
readonly retryAfter: number;
|
|
65
|
+
readonly status = 503;
|
|
66
|
+
readonly code = "CIRCUIT_BREAKER_OPEN";
|
|
67
|
+
constructor(message: string, retryAfter: number);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Error thrown when rate limit is exceeded
|
|
71
|
+
*/
|
|
72
|
+
export declare class RateLimitExceededError extends Error {
|
|
73
|
+
readonly retryAfter: number;
|
|
74
|
+
readonly limit: number;
|
|
75
|
+
readonly windowSeconds: number;
|
|
76
|
+
readonly status = 429;
|
|
77
|
+
readonly code = "RATE_LIMIT_EXCEEDED";
|
|
78
|
+
constructor(message: string, retryAfter: number, limit: number, windowSeconds: number);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=resilience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience.d.ts","sourceRoot":"","sources":["../../src/core/resilience.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;gBAEzB,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAKtD;;;;OAIG;IACH,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc;IAiCvC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,qBAAa,cAAc;IAOvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IARnC,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,eAAe,CAAC,CAAS;IACjC,OAAO,CAAC,WAAW,CAAK;gBAGL,gBAAgB,SAAI,EACpB,cAAc,SAAQ,EACtB,gBAAgB,SAAI;IAGvC;;;;;;OAMG;IACG,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAsBzD,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,SAAS;IAUjB;;OAEG;IACH,QAAQ,IAAI,mBAAmB;IAI/B;;OAEG;IACH,KAAK,IAAI,IAAI;CAMd;AAED,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAElE;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,KAAK;IAM9C,QAAQ,CAAC,UAAU,EAAE,MAAM;IAL7B,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,0BAA0B;gBAGrC,OAAO,EAAE,MAAM,EACN,UAAU,EAAE,MAAM;CAK9B;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;IAM7C,QAAQ,CAAC,UAAU,EAAE,MAAM;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,aAAa,EAAE,MAAM;IAPhC,QAAQ,CAAC,MAAM,OAAO;IACtB,QAAQ,CAAC,IAAI,yBAAyB;gBAGpC,OAAO,EAAE,MAAM,EACN,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM;CAKjC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RateLimitExceededError = exports.CircuitBreakerOpenError = exports.CircuitBreaker = exports.RateLimiter = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Rate limiter for SDK operations
|
|
6
|
+
* Implements sliding window rate limiting per operation per user
|
|
7
|
+
*/
|
|
8
|
+
class RateLimiter {
|
|
9
|
+
constructor(maxRequests, windowSeconds) {
|
|
10
|
+
this.requests = new Map();
|
|
11
|
+
this.maxRequests = maxRequests;
|
|
12
|
+
this.windowMs = windowSeconds * 1000;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Check if operation is allowed and record request
|
|
16
|
+
* @param key - Unique key for the operation (e.g., 'findUsers:user123')
|
|
17
|
+
* @returns RateLimitCheck result with allowed status and wait time if throttled
|
|
18
|
+
*/
|
|
19
|
+
checkLimit(key) {
|
|
20
|
+
const now = Date.now();
|
|
21
|
+
const windowStart = now - this.windowMs;
|
|
22
|
+
// Get existing requests for this key
|
|
23
|
+
let timestamps = this.requests.get(key) || [];
|
|
24
|
+
// Clean up old requests outside the window
|
|
25
|
+
timestamps = timestamps.filter((ts) => ts > windowStart);
|
|
26
|
+
// Check if under limit
|
|
27
|
+
if (timestamps.length < this.maxRequests) {
|
|
28
|
+
timestamps.push(now);
|
|
29
|
+
this.requests.set(key, timestamps);
|
|
30
|
+
return {
|
|
31
|
+
allowed: true,
|
|
32
|
+
remaining: this.maxRequests - timestamps.length,
|
|
33
|
+
resetTime: new Date(now + this.windowMs),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
// Rate limit exceeded
|
|
37
|
+
const oldestRequest = timestamps[0];
|
|
38
|
+
const retryAfter = Math.ceil((oldestRequest + this.windowMs - now) / 1000);
|
|
39
|
+
return {
|
|
40
|
+
allowed: false,
|
|
41
|
+
remaining: 0,
|
|
42
|
+
resetTime: new Date(oldestRequest + this.windowMs),
|
|
43
|
+
retryAfter,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Clear all rate limit data (useful for testing)
|
|
48
|
+
*/
|
|
49
|
+
clear() {
|
|
50
|
+
this.requests.clear();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.RateLimiter = RateLimiter;
|
|
54
|
+
/**
|
|
55
|
+
* Circuit breaker for resilient API calls
|
|
56
|
+
* States: CLOSED (normal), OPEN (failing), HALF_OPEN (testing recovery)
|
|
57
|
+
*/
|
|
58
|
+
class CircuitBreaker {
|
|
59
|
+
constructor(failureThreshold = 5, resetTimeoutMs = 60000, halfOpenMaxCalls = 3) {
|
|
60
|
+
this.failureThreshold = failureThreshold;
|
|
61
|
+
this.resetTimeoutMs = resetTimeoutMs;
|
|
62
|
+
this.halfOpenMaxCalls = halfOpenMaxCalls;
|
|
63
|
+
this.state = 'CLOSED';
|
|
64
|
+
this.failureCount = 0;
|
|
65
|
+
this.nextAttempt = 0;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Execute operation with circuit breaker protection
|
|
69
|
+
* @param operation - The async operation to execute
|
|
70
|
+
* @returns Result of the operation
|
|
71
|
+
* @throws CircuitBreakerOpenError if circuit is open
|
|
72
|
+
* @throws Original error if operation fails
|
|
73
|
+
*/
|
|
74
|
+
async execute(operation) {
|
|
75
|
+
if (this.state === 'OPEN') {
|
|
76
|
+
if (Date.now() < this.nextAttempt) {
|
|
77
|
+
throw new CircuitBreakerOpenError('Service temporarily unavailable. Please try again later.', Math.ceil((this.nextAttempt - Date.now()) / 1000));
|
|
78
|
+
}
|
|
79
|
+
this.state = 'HALF_OPEN';
|
|
80
|
+
this.failureCount = 0;
|
|
81
|
+
}
|
|
82
|
+
try {
|
|
83
|
+
const result = await operation();
|
|
84
|
+
this.onSuccess();
|
|
85
|
+
return result;
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
this.onFailure();
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
onSuccess() {
|
|
93
|
+
this.failureCount = 0;
|
|
94
|
+
if (this.state === 'HALF_OPEN') {
|
|
95
|
+
this.state = 'CLOSED';
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
onFailure() {
|
|
99
|
+
this.failureCount++;
|
|
100
|
+
this.lastFailureTime = Date.now();
|
|
101
|
+
if (this.state === 'HALF_OPEN' || this.failureCount >= this.failureThreshold) {
|
|
102
|
+
this.state = 'OPEN';
|
|
103
|
+
this.nextAttempt = Date.now() + this.resetTimeoutMs;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get current circuit breaker state
|
|
108
|
+
*/
|
|
109
|
+
getState() {
|
|
110
|
+
return this.state;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Reset circuit breaker (useful for testing)
|
|
114
|
+
*/
|
|
115
|
+
reset() {
|
|
116
|
+
this.state = 'CLOSED';
|
|
117
|
+
this.failureCount = 0;
|
|
118
|
+
this.lastFailureTime = undefined;
|
|
119
|
+
this.nextAttempt = 0;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.CircuitBreaker = CircuitBreaker;
|
|
123
|
+
/**
|
|
124
|
+
* Error thrown when circuit breaker is open
|
|
125
|
+
*/
|
|
126
|
+
class CircuitBreakerOpenError extends Error {
|
|
127
|
+
constructor(message, retryAfter) {
|
|
128
|
+
super(message);
|
|
129
|
+
this.retryAfter = retryAfter;
|
|
130
|
+
this.status = 503;
|
|
131
|
+
this.code = 'CIRCUIT_BREAKER_OPEN';
|
|
132
|
+
this.name = 'CircuitBreakerOpenError';
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.CircuitBreakerOpenError = CircuitBreakerOpenError;
|
|
136
|
+
/**
|
|
137
|
+
* Error thrown when rate limit is exceeded
|
|
138
|
+
*/
|
|
139
|
+
class RateLimitExceededError extends Error {
|
|
140
|
+
constructor(message, retryAfter, limit, windowSeconds) {
|
|
141
|
+
super(message);
|
|
142
|
+
this.retryAfter = retryAfter;
|
|
143
|
+
this.limit = limit;
|
|
144
|
+
this.windowSeconds = windowSeconds;
|
|
145
|
+
this.status = 429;
|
|
146
|
+
this.code = 'RATE_LIMIT_EXCEEDED';
|
|
147
|
+
this.name = 'RateLimitExceededError';
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
exports.RateLimitExceededError = RateLimitExceededError;
|
|
151
|
+
//# sourceMappingURL=resilience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resilience.js","sourceRoot":"","sources":["../../src/core/resilience.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk-info.d.ts
CHANGED
|
@@ -301,12 +301,19 @@ export declare const SDK_SERVICES: {
|
|
|
301
301
|
readonly returns: "UserWithAvatar[]";
|
|
302
302
|
readonly example: "const users = await biome.users.getAll()";
|
|
303
303
|
};
|
|
304
|
+
readonly findUsers: {
|
|
305
|
+
readonly signature: "(keyword?: string, limit?: number) => Promise<UserWithAvatar[]>";
|
|
306
|
+
readonly description: "Find users by keyword (partial match on username OR email). Returns array (never null). Default limit 20, max 100.";
|
|
307
|
+
readonly params: readonly ["keyword?: string - Search keyword (empty returns all, whitespace-only returns empty array)", "limit?: number - Max results (default: 20, max: 100)"];
|
|
308
|
+
readonly returns: "UserWithAvatar[]";
|
|
309
|
+
readonly example: "const users = await biome.users.findUsers('john')\nconst users = await biome.users.findUsers('@example.com', 50)\nconst allUsers = await biome.users.findUsers()";
|
|
310
|
+
};
|
|
304
311
|
readonly getUsers: {
|
|
305
312
|
readonly signature: "(query?: string, limit?: number) => Promise<UserWithAvatar[]>";
|
|
306
|
-
readonly description: "Get users with pagination and search";
|
|
313
|
+
readonly description: "Get users with pagination and search [Deprecated: Use findUsers]";
|
|
307
314
|
readonly params: readonly ["query?: string", "limit?: number"];
|
|
308
315
|
readonly returns: "UserWithAvatar[]";
|
|
309
|
-
readonly example: "const users = await biome.users.
|
|
316
|
+
readonly example: "const users = await biome.users.findUsers('john', 10) // Use findUsers instead";
|
|
310
317
|
};
|
|
311
318
|
readonly getUserById: {
|
|
312
319
|
readonly signature: "(id: number) => Promise<UserWithAvatar | null>";
|
|
@@ -331,10 +338,10 @@ export declare const SDK_SERVICES: {
|
|
|
331
338
|
};
|
|
332
339
|
readonly searchUsers: {
|
|
333
340
|
readonly signature: "(query: string, limit?: number) => Promise<UserWithAvatar[]>";
|
|
334
|
-
readonly description: "Search users by query";
|
|
341
|
+
readonly description: "Search users by query [Deprecated: Use findUsers]";
|
|
335
342
|
readonly params: readonly ["query: string", "limit?: number"];
|
|
336
343
|
readonly returns: "UserWithAvatar[]";
|
|
337
|
-
readonly example: "const results = await biome.users.
|
|
344
|
+
readonly example: "const results = await biome.users.findUsers('john') // Use findUsers instead";
|
|
338
345
|
};
|
|
339
346
|
};
|
|
340
347
|
};
|
package/dist/sdk-info.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-info.d.ts","sourceRoot":"","sources":["../src/sdk-info.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"sdk-info.d.ts","sourceRoot":"","sources":["../src/sdk-info.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqXf,CAAC;AAEX,eAAO,MAAM,UAAU;;;;;;;;;;;;CAqBb,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,YAAY,CAAC;AACvD,MAAM,MAAM,SAAS,CAAC,CAAC,SAAS,cAAc,IAAI,MAAM,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC"}
|
package/dist/sdk-info.js
CHANGED
|
@@ -304,12 +304,19 @@ exports.SDK_SERVICES = {
|
|
|
304
304
|
returns: 'UserWithAvatar[]',
|
|
305
305
|
example: 'const users = await biome.users.getAll()',
|
|
306
306
|
},
|
|
307
|
+
findUsers: {
|
|
308
|
+
signature: '(keyword?: string, limit?: number) => Promise<UserWithAvatar[]>',
|
|
309
|
+
description: 'Find users by keyword (partial match on username OR email). Returns array (never null). Default limit 20, max 100.',
|
|
310
|
+
params: ['keyword?: string - Search keyword (empty returns all, whitespace-only returns empty array)', 'limit?: number - Max results (default: 20, max: 100)'],
|
|
311
|
+
returns: 'UserWithAvatar[]',
|
|
312
|
+
example: "const users = await biome.users.findUsers('john')\nconst users = await biome.users.findUsers('@example.com', 50)\nconst allUsers = await biome.users.findUsers()",
|
|
313
|
+
},
|
|
307
314
|
getUsers: {
|
|
308
315
|
signature: '(query?: string, limit?: number) => Promise<UserWithAvatar[]>',
|
|
309
|
-
description: 'Get users with pagination and search',
|
|
316
|
+
description: 'Get users with pagination and search [Deprecated: Use findUsers]',
|
|
310
317
|
params: ['query?: string', 'limit?: number'],
|
|
311
318
|
returns: 'UserWithAvatar[]',
|
|
312
|
-
example: "const users = await biome.users.
|
|
319
|
+
example: "const users = await biome.users.findUsers('john', 10) // Use findUsers instead",
|
|
313
320
|
},
|
|
314
321
|
getUserById: {
|
|
315
322
|
signature: '(id: number) => Promise<UserWithAvatar | null>',
|
|
@@ -334,10 +341,10 @@ exports.SDK_SERVICES = {
|
|
|
334
341
|
},
|
|
335
342
|
searchUsers: {
|
|
336
343
|
signature: '(query: string, limit?: number) => Promise<UserWithAvatar[]>',
|
|
337
|
-
description: 'Search users by query',
|
|
344
|
+
description: 'Search users by query [Deprecated: Use findUsers]',
|
|
338
345
|
params: ['query: string', 'limit?: number'],
|
|
339
346
|
returns: 'UserWithAvatar[]',
|
|
340
|
-
example: "const results = await biome.users.
|
|
347
|
+
example: "const results = await biome.users.findUsers('john') // Use findUsers instead",
|
|
341
348
|
},
|
|
342
349
|
},
|
|
343
350
|
},
|
package/dist/sdk-info.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdk-info.js","sourceRoot":"","sources":["../src/sdk-info.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"sdk-info.js","sourceRoot":"","sources":["../src/sdk-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,8 @@ import { BiomeHttpClient } from '../core/http-client';
|
|
|
4
4
|
*/
|
|
5
5
|
export declare class BiomeUsers {
|
|
6
6
|
private http;
|
|
7
|
+
private static readonly rateLimiter;
|
|
8
|
+
private static readonly circuitBreaker;
|
|
7
9
|
constructor(http: BiomeHttpClient);
|
|
8
10
|
/**
|
|
9
11
|
* Get all users with avatar URLs
|
|
@@ -20,6 +22,7 @@ export declare class BiomeUsers {
|
|
|
20
22
|
/**
|
|
21
23
|
* Get users with pagination and search
|
|
22
24
|
* Note: For single-user lookup, use `findUser(identifier)` instead (more efficient)
|
|
25
|
+
* @deprecated Use `findUsers()` instead for unified user search with consistent API
|
|
23
26
|
*/
|
|
24
27
|
getUsers(query?: string, limit?: number): Promise<UserWithAvatar[]>;
|
|
25
28
|
/**
|
|
@@ -33,8 +36,33 @@ export declare class BiomeUsers {
|
|
|
33
36
|
getUserByUsername(username: string): Promise<UserWithAvatar | null>;
|
|
34
37
|
/**
|
|
35
38
|
* Search users
|
|
39
|
+
* @deprecated Use `findUsers()` instead for unified user search with better defaults
|
|
36
40
|
*/
|
|
37
41
|
searchUsers(query: string, limit?: number): Promise<UserWithAvatar[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Find users by keyword (partial match on username OR email)
|
|
44
|
+
* Canonical method for user search - use this instead of getUsers() or searchUsers()
|
|
45
|
+
*
|
|
46
|
+
* Includes rate limiting (100 req/min) and circuit breaker for resilience.
|
|
47
|
+
*
|
|
48
|
+
* @param keyword - Search keyword (optional). Empty string returns all users, whitespace-only returns empty array
|
|
49
|
+
* @param limit - Maximum results (default: 20, max: 100)
|
|
50
|
+
* @returns Array of users (never null, empty array if no matches)
|
|
51
|
+
* @throws RateLimitExceededError when rate limit exceeded (429)
|
|
52
|
+
* @throws CircuitBreakerOpenError when circuit breaker is open (503)
|
|
53
|
+
* @throws BiomeSdkError on other failures with proper error context
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // Search by partial username or email
|
|
57
|
+
* const users = await biome.users.findUsers('john');
|
|
58
|
+
*
|
|
59
|
+
* // Search with custom limit
|
|
60
|
+
* const users = await biome.users.findUsers('@example.com', 50);
|
|
61
|
+
*
|
|
62
|
+
* // Get all users (respects default limit)
|
|
63
|
+
* const allUsers = await biome.users.findUsers();
|
|
64
|
+
*/
|
|
65
|
+
findUsers(keyword?: string, limit?: number): Promise<UserWithAvatar[]>;
|
|
38
66
|
/**
|
|
39
67
|
* Find a single user by username or email
|
|
40
68
|
* Tries exact username match first, then searches for email match
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"user.service.d.ts","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAKtD;;GAEG;AACH,qBAAa,UAAU;IAMP,OAAO,CAAC,IAAI;IAJxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAE/D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAmC;gBAErD,IAAI,EAAE,eAAe;IAEzC;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAiBzC;;OAEG;IACH,OAAO,CAAC,cAAc;IAYtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAYpB;;;;OAIG;IACG,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBzE;;OAEG;IACG,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAe7D;;;OAGG;IACG,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAezE;;;OAGG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI3E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACG,SAAS,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoDhF;;;;;;OAMG;IACG,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAqBrE;AAED,MAAM,WAAW,cAAc;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE;QACX,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC"}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BiomeUsers = void 0;
|
|
4
4
|
const error_handler_1 = require("../core/error-handler");
|
|
5
|
+
const resilience_1 = require("../core/resilience");
|
|
5
6
|
/**
|
|
6
7
|
* User service - pure business logic without UI concerns
|
|
7
8
|
*/
|
|
@@ -55,6 +56,7 @@ class BiomeUsers {
|
|
|
55
56
|
/**
|
|
56
57
|
* Get users with pagination and search
|
|
57
58
|
* Note: For single-user lookup, use `findUser(identifier)` instead (more efficient)
|
|
59
|
+
* @deprecated Use `findUsers()` instead for unified user search with consistent API
|
|
58
60
|
*/
|
|
59
61
|
async getUsers(query, limit) {
|
|
60
62
|
try {
|
|
@@ -112,10 +114,75 @@ class BiomeUsers {
|
|
|
112
114
|
}
|
|
113
115
|
/**
|
|
114
116
|
* Search users
|
|
117
|
+
* @deprecated Use `findUsers()` instead for unified user search with better defaults
|
|
115
118
|
*/
|
|
116
119
|
async searchUsers(query, limit) {
|
|
117
120
|
return this.getUsers(query, limit);
|
|
118
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Find users by keyword (partial match on username OR email)
|
|
124
|
+
* Canonical method for user search - use this instead of getUsers() or searchUsers()
|
|
125
|
+
*
|
|
126
|
+
* Includes rate limiting (100 req/min) and circuit breaker for resilience.
|
|
127
|
+
*
|
|
128
|
+
* @param keyword - Search keyword (optional). Empty string returns all users, whitespace-only returns empty array
|
|
129
|
+
* @param limit - Maximum results (default: 20, max: 100)
|
|
130
|
+
* @returns Array of users (never null, empty array if no matches)
|
|
131
|
+
* @throws RateLimitExceededError when rate limit exceeded (429)
|
|
132
|
+
* @throws CircuitBreakerOpenError when circuit breaker is open (503)
|
|
133
|
+
* @throws BiomeSdkError on other failures with proper error context
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* // Search by partial username or email
|
|
137
|
+
* const users = await biome.users.findUsers('john');
|
|
138
|
+
*
|
|
139
|
+
* // Search with custom limit
|
|
140
|
+
* const users = await biome.users.findUsers('@example.com', 50);
|
|
141
|
+
*
|
|
142
|
+
* // Get all users (respects default limit)
|
|
143
|
+
* const allUsers = await biome.users.findUsers();
|
|
144
|
+
*/
|
|
145
|
+
async findUsers(keyword, limit = 20) {
|
|
146
|
+
// Apply rate limiting (FR-014) - 100 requests per minute
|
|
147
|
+
const rateLimitKey = 'findUsers';
|
|
148
|
+
const rateCheck = BiomeUsers.rateLimiter.checkLimit(rateLimitKey);
|
|
149
|
+
if (!rateCheck.allowed) {
|
|
150
|
+
throw new resilience_1.RateLimitExceededError('Too many search requests. Please try again later.', rateCheck.retryAfter || 60, 100, 60);
|
|
151
|
+
}
|
|
152
|
+
// Validate and clamp limit (max 100 per FR-012)
|
|
153
|
+
const effectiveLimit = Math.min(Math.max(1, limit), 100);
|
|
154
|
+
// Handle whitespace-only keyword - return empty array (per spec edge case)
|
|
155
|
+
// Empty string '' is valid and returns all users, but ' ' or '\t' returns []
|
|
156
|
+
if (keyword !== undefined && keyword.length > 0 && keyword.trim().length === 0) {
|
|
157
|
+
return [];
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
// Execute with circuit breaker for resilience (FR-020)
|
|
161
|
+
return await BiomeUsers.circuitBreaker.execute(async () => {
|
|
162
|
+
const params = new URLSearchParams();
|
|
163
|
+
// Include q param only if keyword has non-whitespace content
|
|
164
|
+
if (keyword !== undefined && keyword.trim().length > 0) {
|
|
165
|
+
params.set('q', keyword);
|
|
166
|
+
}
|
|
167
|
+
params.set('limit', effectiveLimit.toString());
|
|
168
|
+
const response = await this.http.get(`/users?${params.toString()}`);
|
|
169
|
+
// Ensure we always return an array (never null per FR-003)
|
|
170
|
+
const users = response.payload?.users || [];
|
|
171
|
+
// Populate avatar URLs for all results
|
|
172
|
+
return users.map(user => ({
|
|
173
|
+
...user,
|
|
174
|
+
avatarUrl: this.buildAvatarUrl(user),
|
|
175
|
+
}));
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
// Circuit breaker errors and rate limit errors pass through
|
|
180
|
+
if (error instanceof resilience_1.CircuitBreakerOpenError || error instanceof resilience_1.RateLimitExceededError) {
|
|
181
|
+
throw error;
|
|
182
|
+
}
|
|
183
|
+
throw (0, error_handler_1.createSdkError)(error, 'Failed to find users');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
119
186
|
/**
|
|
120
187
|
* Find a single user by username or email
|
|
121
188
|
* Tries exact username match first, then searches for email match
|
|
@@ -131,7 +198,7 @@ class BiomeUsers {
|
|
|
131
198
|
}
|
|
132
199
|
// If username lookup fails and identifier looks like an email, search and match by email
|
|
133
200
|
if (identifier.includes('@')) {
|
|
134
|
-
const searchResults = await this.
|
|
201
|
+
const searchResults = await this.findUsers(identifier, 20);
|
|
135
202
|
const userByEmail = searchResults.find(user => user.email?.toLowerCase() === identifier.toLowerCase());
|
|
136
203
|
if (userByEmail) {
|
|
137
204
|
return userByEmail;
|
|
@@ -141,4 +208,8 @@ class BiomeUsers {
|
|
|
141
208
|
}
|
|
142
209
|
}
|
|
143
210
|
exports.BiomeUsers = BiomeUsers;
|
|
211
|
+
// Rate limiter: 100 requests per minute per user (FR-014)
|
|
212
|
+
BiomeUsers.rateLimiter = new resilience_1.RateLimiter(100, 60);
|
|
213
|
+
// Circuit breaker for backend failures (FR-020)
|
|
214
|
+
BiomeUsers.circuitBreaker = new resilience_1.CircuitBreaker(5, 60000, 3);
|
|
144
215
|
//# sourceMappingURL=user.service.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":";;;AACA,yDAAuD;
|
|
1
|
+
{"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED