@nekutima/biome-sdk 0.7.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
@@ -217,6 +218,96 @@ export class SessionExpiredService implements OnDestroy {
217
218
  - Visual state management
218
219
  - DOM manipulation
219
220
 
221
+ ## Migration Guide
222
+
223
+ ### User Lookup (v0.9.0+)
224
+
225
+ The Biome SDK now provides two canonical methods for user lookup that replace legacy methods:
226
+
227
+ #### 1. `findUsers()` - Multiple User Search (NEW)
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:**
260
+ ```typescript
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
280
+ const user = await sdk.users.findUser('johndoe');
281
+ const user = await sdk.users.findUser('john@example.com');
282
+
283
+ // ❌ Deprecated - will show IDE warnings
284
+ const user = await sdk.users.getUserByUsername('johndoe'); // @deprecated
285
+
286
+ // ❌ Deprecated for single-user lookup
287
+ const users = await sdk.users.getUsers('johndoe'); // Use findUser instead
288
+ ```
289
+
290
+ **Features:**
291
+ - Single method for both username and email lookup
292
+ - Case-insensitive email matching (RFC 5321 compliant)
293
+ - Automatic avatar URL population
294
+ - Returns `null` when user not found
295
+ - Backward compatible - old methods still work
296
+
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
310
+
220
311
  ## Documentation
221
312
 
222
313
  - [CONTRACT.md](./CONTRACT.md) - SDK contract and scope
@@ -228,7 +319,7 @@ export class SessionExpiredService implements OnDestroy {
228
319
 
229
320
  ## Version
230
321
 
231
- Current: **0.7.0**
322
+ Current: **0.9.0**
232
323
  - Published to npm: `@nekutima/biome-sdk`
233
324
  - See [CHANGELOG.md](./CHANGELOG.md) for version history
234
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>";
@@ -315,19 +322,26 @@ export declare const SDK_SERVICES: {
315
322
  readonly returns: "UserWithAvatar | null";
316
323
  readonly example: "const user = await biome.users.getUserById(1)";
317
324
  };
325
+ readonly findUser: {
326
+ readonly signature: "(identifier: string) => Promise<UserWithAvatar | null>";
327
+ readonly description: "Find user by username or email (canonical method)";
328
+ readonly params: readonly ["identifier: string"];
329
+ readonly returns: "UserWithAvatar | null";
330
+ readonly example: "const user = await biome.users.findUser('johndoe')\nconst user = await biome.users.findUser('john@example.com')";
331
+ };
318
332
  readonly getUserByUsername: {
319
333
  readonly signature: "(username: string) => Promise<UserWithAvatar | null>";
320
- readonly description: "Get user by username";
334
+ readonly description: "Get user by username [Deprecated: Use findUser]";
321
335
  readonly params: readonly ["username: string"];
322
336
  readonly returns: "UserWithAvatar | null";
323
337
  readonly example: "const user = await biome.users.getUserByUsername('johndoe')";
324
338
  };
325
339
  readonly searchUsers: {
326
340
  readonly signature: "(query: string, limit?: number) => Promise<UserWithAvatar[]>";
327
- readonly description: "Search users by query";
341
+ readonly description: "Search users by query [Deprecated: Use findUsers]";
328
342
  readonly params: readonly ["query: string", "limit?: number"];
329
343
  readonly returns: "UserWithAvatar[]";
330
- readonly example: "const results = await biome.users.searchUsers('john')";
344
+ readonly example: "const results = await biome.users.findUsers('john') // Use findUsers instead";
331
345
  };
332
346
  };
333
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuWf,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>',
@@ -318,19 +325,26 @@ exports.SDK_SERVICES = {
318
325
  returns: 'UserWithAvatar | null',
319
326
  example: 'const user = await biome.users.getUserById(1)',
320
327
  },
328
+ findUser: {
329
+ signature: '(identifier: string) => Promise<UserWithAvatar | null>',
330
+ description: 'Find user by username or email (canonical method)',
331
+ params: ['identifier: string'],
332
+ returns: 'UserWithAvatar | null',
333
+ example: "const user = await biome.users.findUser('johndoe')\nconst user = await biome.users.findUser('john@example.com')",
334
+ },
321
335
  getUserByUsername: {
322
336
  signature: '(username: string) => Promise<UserWithAvatar | null>',
323
- description: 'Get user by username',
337
+ description: 'Get user by username [Deprecated: Use findUser]',
324
338
  params: ['username: string'],
325
339
  returns: 'UserWithAvatar | null',
326
340
  example: "const user = await biome.users.getUserByUsername('johndoe')",
327
341
  },
328
342
  searchUsers: {
329
343
  signature: '(query: string, limit?: number) => Promise<UserWithAvatar[]>',
330
- description: 'Search users by query',
344
+ description: 'Search users by query [Deprecated: Use findUsers]',
331
345
  params: ['query: string', 'limit?: number'],
332
346
  returns: 'UserWithAvatar[]',
333
- example: "const results = await biome.users.searchUsers('john')",
347
+ example: "const results = await biome.users.findUsers('john') // Use findUsers instead",
334
348
  },
335
349
  },
336
350
  },
@@ -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
@@ -19,6 +21,8 @@ export declare class BiomeUsers {
19
21
  private normalizeUrl;
20
22
  /**
21
23
  * Get users with pagination and search
24
+ * Note: For single-user lookup, use `findUser(identifier)` instead (more efficient)
25
+ * @deprecated Use `findUsers()` instead for unified user search with consistent API
22
26
  */
23
27
  getUsers(query?: string, limit?: number): Promise<UserWithAvatar[]>;
24
28
  /**
@@ -27,12 +31,46 @@ export declare class BiomeUsers {
27
31
  getUserById(id: number): Promise<UserWithAvatar | null>;
28
32
  /**
29
33
  * Get user by username
34
+ * @deprecated Use `findUser(identifier)` instead for unified username/email lookup
30
35
  */
31
36
  getUserByUsername(username: string): Promise<UserWithAvatar | null>;
32
37
  /**
33
38
  * Search users
39
+ * @deprecated Use `findUsers()` instead for unified user search with better defaults
34
40
  */
35
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[]>;
66
+ /**
67
+ * Find a single user by username or email
68
+ * Tries exact username match first, then searches for email match
69
+ * Email matching is case-insensitive per RFC 5321
70
+ * @param identifier - Username or email address to search for
71
+ * @returns User if found, null otherwise
72
+ */
73
+ findUser(identifier: string): Promise<UserWithAvatar | null>;
36
74
  }
37
75
  export interface UserWithAvatar {
38
76
  id: number;
@@ -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;;OAEG;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;;OAEG;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;CAG9E;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
  */
@@ -54,6 +55,8 @@ class BiomeUsers {
54
55
  }
55
56
  /**
56
57
  * Get users with pagination and search
58
+ * Note: For single-user lookup, use `findUser(identifier)` instead (more efficient)
59
+ * @deprecated Use `findUsers()` instead for unified user search with consistent API
57
60
  */
58
61
  async getUsers(query, limit) {
59
62
  try {
@@ -92,6 +95,7 @@ class BiomeUsers {
92
95
  }
93
96
  /**
94
97
  * Get user by username
98
+ * @deprecated Use `findUser(identifier)` instead for unified username/email lookup
95
99
  */
96
100
  async getUserByUsername(username) {
97
101
  try {
@@ -110,10 +114,102 @@ class BiomeUsers {
110
114
  }
111
115
  /**
112
116
  * Search users
117
+ * @deprecated Use `findUsers()` instead for unified user search with better defaults
113
118
  */
114
119
  async searchUsers(query, limit) {
115
120
  return this.getUsers(query, limit);
116
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
+ }
186
+ /**
187
+ * Find a single user by username or email
188
+ * Tries exact username match first, then searches for email match
189
+ * Email matching is case-insensitive per RFC 5321
190
+ * @param identifier - Username or email address to search for
191
+ * @returns User if found, null otherwise
192
+ */
193
+ async findUser(identifier) {
194
+ // Try username lookup first (most specific)
195
+ const userByUsername = await this.getUserByUsername(identifier);
196
+ if (userByUsername) {
197
+ return userByUsername;
198
+ }
199
+ // If username lookup fails and identifier looks like an email, search and match by email
200
+ if (identifier.includes('@')) {
201
+ const searchResults = await this.findUsers(identifier, 20);
202
+ const userByEmail = searchResults.find(user => user.email?.toLowerCase() === identifier.toLowerCase());
203
+ if (userByEmail) {
204
+ return userByEmail;
205
+ }
206
+ }
207
+ return null;
208
+ }
117
209
  }
118
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);
119
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.7.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",