@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 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.8.0+)
223
+ ### User Lookup (v0.9.0+)
223
224
 
224
- **Unified `findUser()` Method**
225
+ The Biome SDK now provides two canonical methods for user lookup that replace legacy methods:
225
226
 
226
- The new `findUser(identifier)` method replaces `getUserByUsername()` as the canonical way to locate users. It accepts either username or email:
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
- // New canonical approach - works with username OR email
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
- See [docs/user-lookup-flow.md](./docs/user-lookup-flow.md) for complete documentation.
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.7.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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"}
@@ -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.getUsers('john', 10)";
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.searchUsers('john')";
344
+ readonly example: "const results = await biome.users.findUsers('john') // Use findUsers instead";
338
345
  };
339
346
  };
340
347
  };
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8Wf,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"}
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.getUsers('john', 10)",
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.searchUsers('john')",
347
+ example: "const results = await biome.users.findUsers('john') // Use findUsers instead",
341
348
  },
342
349
  },
343
350
  },
@@ -1 +1 @@
1
- {"version":3,"file":"sdk-info.js","sourceRoot":"","sources":["../src/sdk-info.ts"],"names":[],"mappings":";;;AAKa,QAAA,QAAQ,GAAG;IACpB,IAAI,EAAE,qBAAqB;IAC3B,OAAO,EAAE,QAAQ;IACjB,WAAW,EAAE,oDAAoD;IACjE,MAAM,EAAE,6CAA6C;IACrD,OAAO,EAAE,cAAc;IACvB,UAAU,EAAE,8CAA8C;CACpD,CAAC;AAEE,QAAA,YAAY,GAAG;IACxB,IAAI,EAAE;QACF,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE;YACL,KAAK,EAAE;gBACH,SAAS,EAAE,6CAA6C;gBACxD,WAAW,EAAE,gDAAgD;gBAC7D,MAAM,EAAE,CAAC,gFAAgF,CAAC;gBAC1F,OAAO,EAAE,oDAAoD;gBAC7D,OAAO,EAAE,iFAAiF;aAC7F;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,qBAAqB;gBAChC,WAAW,EAAE,wCAAwC;gBACrD,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,2BAA2B;aACvC;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,qCAAqC;gBAChD,WAAW,EAAE,6BAA6B;gBAC1C,MAAM,EAAE,CAAC,qEAAqE,CAAC;gBAC/E,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,uFAAuF;aACnG;YACD,cAAc,EAAE;gBACZ,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,iDAAiD;gBAC9D,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,6CAA6C;aACzD;YACD,yBAAyB,EAAE;gBACvB,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,8CAA8C;aAC1D;YACD,cAAc,EAAE;gBACZ,SAAS,EAAE,mBAAmB;gBAC9B,WAAW,EAAE,0BAA0B;gBACvC,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,wDAAwD;gBACjE,OAAO,EAAE,6CAA6C;aACzD;YACD,qBAAqB,EAAE;gBACnB,SAAS,EAAE,uCAAuC;gBAClD,WAAW,EAAE,uCAAuC;gBACpD,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,gDAAgD;aAC5D;YACD,YAAY,EAAE;gBACV,SAAS,EAAE,kCAAkC;gBAC7C,WAAW,EAAE,uCAAuC;gBACpD,MAAM,EAAE,CAAC,eAAe,CAAC;gBACzB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,wCAAwC;aACpD;YACD,kBAAkB,EAAE;gBAChB,SAAS,EAAE,kCAAkC;gBAC7C,WAAW,EAAE,2BAA2B;gBACxC,MAAM,EAAE,CAAC,eAAe,CAAC;gBACzB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,mDAAmD;aAC/D;YACD,YAAY,EAAE;gBACV,SAAS,EAAE,YAAY;gBACvB,WAAW,EAAE,oCAAoC;gBACjD,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,2BAA2B;aACvC;YACD,iBAAiB,EAAE;gBACf,SAAS,EAAE,eAAe;gBAC1B,WAAW,EAAE,yBAAyB;gBACtC,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,6CAA6C;aACzD;YACD,kBAAkB,EAAE;gBAChB,SAAS,EAAE,+DAA+D;gBAC1E,WAAW,EAAE,kCAAkC;gBAC/C,MAAM,EAAE,CAAC,+CAA+C,CAAC;gBACzD,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,wDAAwD;aACpE;SACJ;KACJ;IACD,KAAK,EAAE;QACH,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,oDAAoD;QACjE,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,SAAS,EAAE,sDAAsD;gBACjE,WAAW,EAAE,mBAAmB;gBAChC,MAAM,EAAE,CAAC,iGAAiG,CAAC;gBAC3G,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,uFAAuF;aACnG;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,2DAA2D;gBACtE,WAAW,EAAE,yBAAyB;gBACtC,MAAM,EAAE,CAAC,YAAY,EAAE,mBAAmB,CAAC;gBAC3C,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,yDAAyD;aACrE;YACD,YAAY,EAAE;gBACV,SAAS,EAAE,sDAAsD;gBACjE,WAAW,EAAE,8CAA8C;gBAC3D,MAAM,EAAE,CAAC,YAAY,EAAE,uBAAuB,CAAC;gBAC/C,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,4DAA4D;aACxE;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,+BAA+B;gBAC1C,WAAW,EAAE,eAAe;gBAC5B,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,6BAA6B;aACzC;YACD,OAAO,EAAE;gBACL,SAAS,EAAE,+BAA+B;gBAC1C,WAAW,EAAE,gBAAgB;gBAC7B,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,2CAA2C;aACvD;YACD,UAAU,EAAE;gBACR,SAAS,EAAE,mDAAmD;gBAC9D,WAAW,EAAE,oCAAoC;gBACjD,MAAM,EAAE,CAAC,kEAAkE,CAAC;gBAC5E,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,2EAA2E;aACvF;YACD,iBAAiB,EAAE;gBACf,SAAS,EAAE,mDAAmD;gBAC9D,WAAW,EAAE,qCAAqC;gBAClD,MAAM,EAAE,CAAC,cAAc,CAAC;gBACxB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,4EAA4E;aACxF;YACD,WAAW,EAAE;gBACT,SAAS,EAAE,sEAAsE;gBACjF,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,CAAC,eAAe,EAAE,cAAc,CAAC;gBACzC,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,0EAA0E;aACtF;YACD,gBAAgB,EAAE;gBACd,SAAS,EAAE,yDAAyD;gBACpE,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,CAAC,yBAAyB,CAAC;gBACnC,OAAO,EAAE,mBAAmB;gBAC5B,OAAO,EAAE,6DAA6D;aACzE;YACD,aAAa,EAAE;gBACX,SAAS,EAAE,uCAAuC;gBAClD,WAAW,EAAE,iCAAiC;gBAC9C,MAAM,EAAE,CAAC,kBAAkB,CAAC;gBAC5B,OAAO,EAAE,QAAQ;gBACjB,OAAO,EAAE,qDAAqD;aACjE;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,+BAA+B;gBAC1C,WAAW,EAAE,yCAAyC;gBACtD,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,6BAA6B;aACzC;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,8DAA8D;gBACzE,WAAW,EAAE,mCAAmC;gBAChD,MAAM,EAAE,CAAC,YAAY,EAAE,kDAAkD,CAAC;gBAC1E,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,mEAAmE;aAC/E;YACD,OAAO,EAAE;gBACL,SAAS,EAAE,6DAA6D;gBACxE,WAAW,EAAE,sCAAsC;gBACnD,MAAM,EAAE,CAAC,YAAY,EAAE,+CAA+C,CAAC;gBACvE,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,mEAAmE;aAC/E;YACD,QAAQ,EAAE;gBACN,SAAS,EAAE,+DAA+D;gBAC1E,WAAW,EAAE,2BAA2B;gBACxC,MAAM,EAAE,CAAC,YAAY,EAAE,6DAA6D,CAAC;gBACrF,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,4DAA4D;aACxE;YACD,OAAO,EAAE;gBACL,SAAS,EAAE,+BAA+B;gBAC1C,WAAW,EAAE,gBAAgB;gBAC7B,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,8BAA8B;aAC1C;YACD,MAAM,EAAE;gBACJ,SAAS,EAAE,iEAAiE;gBAC5E,WAAW,EAAE,eAAe;gBAC5B,MAAM,EAAE,CAAC,YAAY,EAAE,0DAA0D,CAAC;gBAClF,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,yEAAyE;aACrF;YACD,IAAI,EAAE;gBACF,SAAS,EAAE,+BAA+B;gBAC1C,WAAW,EAAE,iCAAiC;gBAC9C,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,2BAA2B;aACvC;SACJ;KACJ;IACD,QAAQ,EAAE;QACN,IAAI,EAAE,eAAe;QACrB,WAAW,EAAE,yBAAyB;QACtC,OAAO,EAAE;YACL,YAAY,EAAE;gBACV,SAAS,EAAE,8BAA8B;gBACzC,WAAW,EAAE,0BAA0B;gBACvC,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,qDAAqD;aACjE;YACD,UAAU,EAAE;gBACR,SAAS,EAAE,qDAAqD;gBAChE,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,CAAC,kBAAkB,CAAC;gBAC5B,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,4DAA4D;aACxE;YACD,aAAa,EAAE;gBACX,SAAS,EAAE,+DAA+D;gBAC1E,WAAW,EAAE,6BAA6B;gBAC1C,MAAM,EAAE,CAAC,iFAAiF,CAAC;gBAC3F,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,4DAA4D;aACxE;YACD,aAAa,EAAE;gBACX,SAAS,EAAE,wCAAwC;gBACnD,WAAW,EAAE,gCAAgC;gBAC7C,MAAM,EAAE,CAAC,kBAAkB,CAAC;gBAC5B,OAAO,EAAE,SAAS;gBAClB,OAAO,EAAE,iEAAiE;aAC7E;YACD,cAAc,EAAE;gBACZ,SAAS,EAAE,4GAA4G;gBACvH,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE,CAAC,mDAAmD,CAAC;gBAC7D,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,6GAA6G;aACzH;YACD,iBAAiB,EAAE;gBACf,SAAS,EAAE,4BAA4B;gBACvC,WAAW,EAAE,0BAA0B;gBACvC,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,oDAAoD;aAChE;YACD,eAAe,EAAE;gBACb,SAAS,EAAE,mEAAmE;gBAC9E,WAAW,EAAE,8BAA8B;gBAC3C,MAAM,EAAE,CAAC,UAAU,CAAC;gBACpB,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,uDAAuD;aACnE;YACD,kBAAkB,EAAE;gBAChB,SAAS,EAAE,wCAAwC;gBACnD,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,6DAA6D;aACzE;YACD,kBAAkB,EAAE;gBAChB,SAAS,EAAE,8BAA8B;gBACzC,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,2CAA2C;aACvD;SACJ;KACJ;IACD,KAAK,EAAE;QACH,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,wBAAwB;QACrC,OAAO,EAAE;YACL,MAAM,EAAE;gBACJ,SAAS,EAAE,iCAAiC;gBAC5C,WAAW,EAAE,gCAAgC;gBAC7C,MAAM,EAAE,EAAE;gBACV,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,0CAA0C;aACtD;YACD,QAAQ,EAAE;gBACN,SAAS,EAAE,+DAA+D;gBAC1E,WAAW,EAAE,sCAAsC;gBACnD,MAAM,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;gBAC5C,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,sDAAsD;aAClE;YACD,WAAW,EAAE;gBACT,SAAS,EAAE,gDAAgD;gBAC3D,WAAW,EAAE,gBAAgB;gBAC7B,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,+CAA+C;aAC3D;YACD,QAAQ,EAAE;gBACN,SAAS,EAAE,wDAAwD;gBACnE,WAAW,EAAE,mDAAmD;gBAChE,MAAM,EAAE,CAAC,oBAAoB,CAAC;gBAC9B,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,iHAAiH;aAC7H;YACD,iBAAiB,EAAE;gBACf,SAAS,EAAE,sDAAsD;gBACjE,WAAW,EAAE,iDAAiD;gBAC9D,MAAM,EAAE,CAAC,kBAAkB,CAAC;gBAC5B,OAAO,EAAE,uBAAuB;gBAChC,OAAO,EAAE,6DAA6D;aACzE;YACD,WAAW,EAAE;gBACT,SAAS,EAAE,8DAA8D;gBACzE,WAAW,EAAE,uBAAuB;gBACpC,MAAM,EAAE,CAAC,eAAe,EAAE,gBAAgB,CAAC;gBAC3C,OAAO,EAAE,kBAAkB;gBAC3B,OAAO,EAAE,uDAAuD;aACnE;SACJ;KACJ;IACD,KAAK,EAAE;QACH,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,4BAA4B;QACzC,OAAO,EAAE;YACL,WAAW,EAAE;gBACT,SAAS,EAAE,0DAA0D;gBACrE,WAAW,EAAE,sCAAsC;gBACnD,MAAM,EAAE,CAAC,YAAY,EAAE,iBAAiB,CAAC;gBACzC,OAAO,EAAE,gBAAgB;gBACzB,OAAO,EAAE,6EAA6E;aACzF;YACD,WAAW,EAAE;gBACT,SAAS,EAAE,mCAAmC;gBAC9C,WAAW,EAAE,sBAAsB;gBACnC,MAAM,EAAE,CAAC,gBAAgB,CAAC;gBAC1B,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,oCAAoC;aAChD;YACD,gBAAgB,EAAE;gBACd,SAAS,EAAE,wBAAwB;gBACnC,WAAW,EAAE,6BAA6B;gBAC1C,MAAM,EAAE,CAAC,YAAY,CAAC;gBACtB,OAAO,EAAE,qBAAqB;gBAC9B,OAAO,EAAE,gDAAgD;aAC5D;YACD,gBAAgB,EAAE;gBACd,SAAS,EAAE,uBAAuB;gBAClC,WAAW,EAAE,mCAAmC;gBAChD,MAAM,EAAE,CAAC,aAAa,CAAC;gBACvB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,mCAAmC;aAC/C;SACJ;KACJ;CACK,CAAC;AAEE,QAAA,UAAU,GAAG;IACtB,QAAQ,EAAE,CAAC,SAAS,CAAC;IACrB,QAAQ,EAAE;QACN,SAAS;QACT,eAAe;QACf,sBAAsB;QACtB,mBAAmB;QACnB,cAAc;QACd,eAAe;QACf,iBAAiB;QACjB,iBAAiB;KACpB;IACD,QAAQ,EAAE;QACN,OAAO,EAAE,KAAK;QACd,aAAa,EAAE,CAAC;QAChB,IAAI,EAAE;YACF,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,cAAc;YAC1B,UAAU,EAAE,YAAY;SAC3B;KACJ;CACK,CAAC"}
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;AAItD;;GAEG;AACH,qBAAa,UAAU;IAEP,OAAO,CAAC,IAAI;gBAAJ,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;;;OAGG;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;;OAEG;IACG,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAI3E;;;;;;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"}
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.getUsers(identifier, 20);
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":"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"}
1
+ {"version":3,"file":"user.service.js","sourceRoot":"","sources":["../../src/users/user.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nekutima/biome-sdk",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Pure TypeScript SDK for Biome platform integration - authentication, task management, and blockchain interactions",
5
5
  "readme": "README.md",
6
6
  "main": "dist/index.js",