@replanejs/sdk 0.9.2 → 1.0.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 +36 -58
- package/dist/index.cjs +319 -26
- package/dist/index.d.cts +166 -130
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +166 -130
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +319 -27
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -14,20 +14,20 @@ interface SegmentationCondition {
|
|
|
14
14
|
}
|
|
15
15
|
interface AndCondition {
|
|
16
16
|
operator: "and";
|
|
17
|
-
conditions:
|
|
17
|
+
conditions: Condition[];
|
|
18
18
|
}
|
|
19
19
|
interface OrCondition {
|
|
20
20
|
operator: "or";
|
|
21
|
-
conditions:
|
|
21
|
+
conditions: Condition[];
|
|
22
22
|
}
|
|
23
23
|
interface NotCondition {
|
|
24
24
|
operator: "not";
|
|
25
|
-
condition:
|
|
25
|
+
condition: Condition;
|
|
26
26
|
}
|
|
27
|
-
type
|
|
28
|
-
interface
|
|
27
|
+
type Condition = PropertyCondition | SegmentationCondition | AndCondition | OrCondition | NotCondition;
|
|
28
|
+
interface Override {
|
|
29
29
|
name: string;
|
|
30
|
-
conditions:
|
|
30
|
+
conditions: Condition[];
|
|
31
31
|
value: unknown;
|
|
32
32
|
}
|
|
33
33
|
//#endregion
|
|
@@ -63,10 +63,7 @@ interface GetConfigOptions<T> {
|
|
|
63
63
|
/**
|
|
64
64
|
* Helper type for mapping configs to their names and values
|
|
65
65
|
*/
|
|
66
|
-
|
|
67
|
-
name: K;
|
|
68
|
-
value: T[K];
|
|
69
|
-
} }[keyof T];
|
|
66
|
+
|
|
70
67
|
/**
|
|
71
68
|
* Serializable snapshot of the client state.
|
|
72
69
|
* Can be used to restore a client on the client-side from server-fetched configs.
|
|
@@ -76,7 +73,7 @@ interface ReplaneSnapshot<_T extends object = object> {
|
|
|
76
73
|
configs: Array<{
|
|
77
74
|
name: string;
|
|
78
75
|
value: unknown;
|
|
79
|
-
overrides:
|
|
76
|
+
overrides: Override[];
|
|
80
77
|
}>;
|
|
81
78
|
}
|
|
82
79
|
/**
|
|
@@ -204,132 +201,15 @@ interface ConnectOptions {
|
|
|
204
201
|
* ```
|
|
205
202
|
*/
|
|
206
203
|
declare class Replane<T extends object = Record<string, unknown>> {
|
|
207
|
-
private configs;
|
|
208
|
-
private context;
|
|
209
|
-
private logger;
|
|
210
|
-
private storage;
|
|
211
|
-
private configSubscriptions;
|
|
212
|
-
private clientSubscriptions;
|
|
213
|
-
/**
|
|
214
|
-
* Create a new Replane client.
|
|
215
|
-
*
|
|
216
|
-
* The client is usable immediately after construction with defaults or snapshot data.
|
|
217
|
-
* Call `connect()` to establish a real-time connection for live updates.
|
|
218
|
-
*
|
|
219
|
-
* @param options - Configuration options
|
|
220
|
-
*/
|
|
221
204
|
constructor(options?: ReplaneOptions<T>);
|
|
222
|
-
/**
|
|
223
|
-
* Connect to the Replane server for real-time config updates.
|
|
224
|
-
*
|
|
225
|
-
* This method establishes an SSE connection to receive live config updates.
|
|
226
|
-
* If already connected, it will disconnect first and reconnect with new options.
|
|
227
|
-
*
|
|
228
|
-
* @param options - Connection options including baseUrl and sdkKey
|
|
229
|
-
* @returns Promise that resolves when the initial connection is established
|
|
230
|
-
* @throws {ReplaneError} If connection times out and no defaults are available
|
|
231
|
-
*
|
|
232
|
-
* @example
|
|
233
|
-
* ```typescript
|
|
234
|
-
* await client.connect({
|
|
235
|
-
* baseUrl: 'https://app.replane.dev',
|
|
236
|
-
* sdkKey: 'rp_xxx'
|
|
237
|
-
* });
|
|
238
|
-
* ```
|
|
239
|
-
*/
|
|
240
205
|
connect(options: ConnectOptions): Promise<void>;
|
|
241
|
-
/**
|
|
242
|
-
* Disconnect from the Replane server.
|
|
243
|
-
*
|
|
244
|
-
* Stops the SSE connection and cleans up resources.
|
|
245
|
-
* The client remains usable with cached config values.
|
|
246
|
-
* Can call `connect()` again to reconnect.
|
|
247
|
-
*/
|
|
248
206
|
disconnect(): void;
|
|
249
|
-
/**
|
|
250
|
-
* Get a config value by name.
|
|
251
|
-
*
|
|
252
|
-
* Evaluates any overrides based on the client context and per-call context.
|
|
253
|
-
*
|
|
254
|
-
* @param configName - The name of the config to retrieve
|
|
255
|
-
* @param options - Optional settings for this call
|
|
256
|
-
* @returns The config value
|
|
257
|
-
* @throws {ReplaneError} If config not found and no default provided
|
|
258
|
-
*
|
|
259
|
-
* @example
|
|
260
|
-
* ```typescript
|
|
261
|
-
* // Simple get
|
|
262
|
-
* const value = client.get('myConfig');
|
|
263
|
-
*
|
|
264
|
-
* // With default fallback
|
|
265
|
-
* const value = client.get('myConfig', { default: 'fallback' });
|
|
266
|
-
*
|
|
267
|
-
* // With per-call context for override evaluation
|
|
268
|
-
* const value = client.get('myConfig', { context: { userId: '123' } });
|
|
269
|
-
* ```
|
|
270
|
-
*/
|
|
271
207
|
get<K extends keyof T>(configName: K, options?: GetConfigOptions<T[K]>): T[K];
|
|
272
|
-
/**
|
|
273
|
-
* Subscribe to config changes.
|
|
274
|
-
*
|
|
275
|
-
* @param callback - Function called when any config changes
|
|
276
|
-
* @returns Unsubscribe function
|
|
277
|
-
*
|
|
278
|
-
* @example
|
|
279
|
-
* ```typescript
|
|
280
|
-
* const unsubscribe = client.subscribe((change) => {
|
|
281
|
-
* console.log(`Config ${change.name} changed to ${change.value}`);
|
|
282
|
-
* });
|
|
283
|
-
*
|
|
284
|
-
* // Later: stop listening
|
|
285
|
-
* unsubscribe();
|
|
286
|
-
* ```
|
|
287
|
-
*/
|
|
288
|
-
subscribe(callback: (config: MapConfig<T>) => void): () => void;
|
|
289
|
-
/**
|
|
290
|
-
* Subscribe to a specific config's changes.
|
|
291
|
-
*
|
|
292
|
-
* @param configName - The config to watch
|
|
293
|
-
* @param callback - Function called when the config changes
|
|
294
|
-
* @returns Unsubscribe function
|
|
295
|
-
*
|
|
296
|
-
* @example
|
|
297
|
-
* ```typescript
|
|
298
|
-
* const unsubscribe = client.subscribe('myConfig', (change) => {
|
|
299
|
-
* console.log(`myConfig changed to ${change.value}`);
|
|
300
|
-
* });
|
|
301
|
-
* ```
|
|
302
|
-
*/
|
|
303
208
|
subscribe<K extends keyof T>(configName: K, callback: (config: {
|
|
304
209
|
name: K;
|
|
305
210
|
value: T[K];
|
|
306
211
|
}) => void): () => void;
|
|
307
|
-
/**
|
|
308
|
-
* Get a serializable snapshot of the current client state.
|
|
309
|
-
*
|
|
310
|
-
* Useful for SSR/hydration scenarios where you want to pass
|
|
311
|
-
* configs from server to client.
|
|
312
|
-
*
|
|
313
|
-
* @returns Snapshot object that can be serialized to JSON
|
|
314
|
-
*
|
|
315
|
-
* @example
|
|
316
|
-
* ```typescript
|
|
317
|
-
* // On server
|
|
318
|
-
* const snapshot = client.getSnapshot();
|
|
319
|
-
* const json = JSON.stringify(snapshot);
|
|
320
|
-
*
|
|
321
|
-
* // On client
|
|
322
|
-
* const client = new Replane({ snapshot: JSON.parse(json) });
|
|
323
|
-
* ```
|
|
324
|
-
*/
|
|
325
212
|
getSnapshot(): ReplaneSnapshot<T>;
|
|
326
|
-
/**
|
|
327
|
-
* Check if the client is currently connected.
|
|
328
|
-
*/
|
|
329
|
-
get isConnected(): boolean;
|
|
330
|
-
private startStreaming;
|
|
331
|
-
private processConfigUpdates;
|
|
332
|
-
private toFinalOptions;
|
|
333
213
|
}
|
|
334
214
|
//# sourceMappingURL=client.d.ts.map
|
|
335
215
|
//#endregion
|
|
@@ -398,7 +278,163 @@ declare function getReplaneSnapshot<T extends object>(options: GetReplaneSnapsho
|
|
|
398
278
|
* Clears the client cache used by getReplaneSnapshot.
|
|
399
279
|
* Useful for testing or when you need to force re-initialization.
|
|
400
280
|
*/
|
|
401
|
-
|
|
402
281
|
//#endregion
|
|
403
|
-
|
|
282
|
+
//#region src/in-memory.d.ts
|
|
283
|
+
/**
|
|
284
|
+
* Options for setting a config with overrides.
|
|
285
|
+
*/
|
|
286
|
+
interface SetConfigOptions {
|
|
287
|
+
/** Override rules for context-based value selection */
|
|
288
|
+
overrides?: Override[];
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* Options for InMemoryReplaneClient constructor.
|
|
292
|
+
*/
|
|
293
|
+
interface InMemoryReplaneClientOptions<T extends object> {
|
|
294
|
+
/**
|
|
295
|
+
* Optional logger (defaults to console).
|
|
296
|
+
*/
|
|
297
|
+
logger?: ReplaneLogger;
|
|
298
|
+
/**
|
|
299
|
+
* Default context for all config evaluations.
|
|
300
|
+
* Can be overridden per-request in `client.get()`.
|
|
301
|
+
*/
|
|
302
|
+
context?: ReplaneContext;
|
|
303
|
+
/**
|
|
304
|
+
* Initial config values.
|
|
305
|
+
* @example
|
|
306
|
+
* {
|
|
307
|
+
* defaults: {
|
|
308
|
+
* "feature-enabled": true,
|
|
309
|
+
* "rate-limit": 100,
|
|
310
|
+
* },
|
|
311
|
+
* }
|
|
312
|
+
*/
|
|
313
|
+
defaults?: { [K in keyof T]?: T[K] };
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* An in-memory Replane client for testing.
|
|
317
|
+
*
|
|
318
|
+
* This client provides the same interface as `Replane` but stores
|
|
319
|
+
* all configs in memory. It's useful for unit tests where you don't want
|
|
320
|
+
* to connect to a real Replane server.
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* // Basic usage
|
|
325
|
+
* const client = new InMemoryReplaneClient({
|
|
326
|
+
* defaults: { "feature-enabled": true, "rate-limit": 100 },
|
|
327
|
+
* });
|
|
328
|
+
* expect(client.get("feature-enabled")).toBe(true);
|
|
329
|
+
*
|
|
330
|
+
* // Update config at runtime
|
|
331
|
+
* client.set("feature-enabled", false);
|
|
332
|
+
* expect(client.get("feature-enabled")).toBe(false);
|
|
333
|
+
*
|
|
334
|
+
* // With overrides
|
|
335
|
+
* client.setConfig("rate-limit", 100, {
|
|
336
|
+
* overrides: [{
|
|
337
|
+
* name: "premium-users",
|
|
338
|
+
* conditions: [{ operator: "equals", property: "plan", value: "premium" }],
|
|
339
|
+
* value: 1000,
|
|
340
|
+
* }],
|
|
341
|
+
* });
|
|
342
|
+
* expect(client.get("rate-limit")).toBe(100);
|
|
343
|
+
* expect(client.get("rate-limit", { context: { plan: "premium" } })).toBe(1000);
|
|
344
|
+
* ```
|
|
345
|
+
*
|
|
346
|
+
* @typeParam T - Type definition for config keys and values
|
|
347
|
+
*/
|
|
348
|
+
declare class InMemoryReplaneClient<T extends object = Record<string, unknown>> {
|
|
349
|
+
constructor(options?: InMemoryReplaneClientOptions<T>);
|
|
350
|
+
/**
|
|
351
|
+
* Get a config value by name.
|
|
352
|
+
*
|
|
353
|
+
* Evaluates any overrides based on the client context and per-call context.
|
|
354
|
+
*
|
|
355
|
+
* @param configName - The name of the config to retrieve
|
|
356
|
+
* @param options - Optional settings for this call
|
|
357
|
+
* @returns The config value
|
|
358
|
+
* @throws {ReplaneError} If config not found and no default provided
|
|
359
|
+
*/
|
|
360
|
+
get<K extends keyof T>(configName: K, options?: GetConfigOptions<T[K]>): T[K];
|
|
361
|
+
/**
|
|
362
|
+
* Subscribe to a specific config's changes.
|
|
363
|
+
*
|
|
364
|
+
* @param configName - The config to watch
|
|
365
|
+
* @param callback - Function called when the config changes
|
|
366
|
+
* @returns Unsubscribe function
|
|
367
|
+
*/
|
|
368
|
+
subscribe<K extends keyof T>(configName: K, callback: (config: {
|
|
369
|
+
name: K;
|
|
370
|
+
value: T[K];
|
|
371
|
+
}) => void): () => void;
|
|
372
|
+
/**
|
|
373
|
+
* Get a serializable snapshot of the current client state.
|
|
374
|
+
*
|
|
375
|
+
* @returns Snapshot object that can be serialized to JSON
|
|
376
|
+
*/
|
|
377
|
+
getSnapshot(): ReplaneSnapshot<T>;
|
|
378
|
+
/**
|
|
379
|
+
* Set a config value (simple form without overrides).
|
|
380
|
+
*
|
|
381
|
+
* @param name - Config name
|
|
382
|
+
* @param value - Config value
|
|
383
|
+
*
|
|
384
|
+
* @example
|
|
385
|
+
* ```typescript
|
|
386
|
+
* client.set("feature-enabled", true);
|
|
387
|
+
* client.set("rate-limit", 500);
|
|
388
|
+
* ```
|
|
389
|
+
*/
|
|
390
|
+
set<K extends keyof T>(name: K, value: T[K]): void;
|
|
391
|
+
/**
|
|
392
|
+
* Set a config with optional overrides.
|
|
393
|
+
*
|
|
394
|
+
* @param name - Config name
|
|
395
|
+
* @param value - Base config value
|
|
396
|
+
* @param options - Optional settings including overrides
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```typescript
|
|
400
|
+
* client.setConfig("rate-limit", 100, {
|
|
401
|
+
* overrides: [{
|
|
402
|
+
* name: "premium-users",
|
|
403
|
+
* conditions: [
|
|
404
|
+
* { operator: "in", property: "plan", value: ["pro", "enterprise"] }
|
|
405
|
+
* ],
|
|
406
|
+
* value: 1000,
|
|
407
|
+
* }],
|
|
408
|
+
* });
|
|
409
|
+
* ```
|
|
410
|
+
*/
|
|
411
|
+
setConfig<K extends keyof T>(name: K, value: T[K], options?: SetConfigOptions): void;
|
|
412
|
+
/**
|
|
413
|
+
* Delete a config.
|
|
414
|
+
*
|
|
415
|
+
* @param name - Config name to delete
|
|
416
|
+
* @returns True if config was deleted, false if it didn't exist
|
|
417
|
+
*/
|
|
418
|
+
delete<K extends keyof T>(name: K): boolean;
|
|
419
|
+
/**
|
|
420
|
+
* Clear all configs.
|
|
421
|
+
*/
|
|
422
|
+
clear(): void;
|
|
423
|
+
/**
|
|
424
|
+
* Check if a config exists.
|
|
425
|
+
*
|
|
426
|
+
* @param name - Config name to check
|
|
427
|
+
* @returns True if config exists
|
|
428
|
+
*/
|
|
429
|
+
has<K extends keyof T>(name: K): boolean;
|
|
430
|
+
/**
|
|
431
|
+
* Get all config names.
|
|
432
|
+
*
|
|
433
|
+
* @returns Array of config names
|
|
434
|
+
*/
|
|
435
|
+
keys(): (keyof T)[];
|
|
436
|
+
}
|
|
437
|
+
//# sourceMappingURL=in-memory.d.ts.map
|
|
438
|
+
//#endregion
|
|
439
|
+
export { type Condition, type ConnectOptions, type GetConfigOptions, type GetReplaneSnapshotOptions, InMemoryReplaneClient, type InMemoryReplaneClientOptions, type Override, Replane, type ReplaneContext, ReplaneError, ReplaneErrorCode, type ReplaneLogger, type ReplaneOptions, type ReplaneSnapshot, type SetConfigOptions, getReplaneSnapshot };
|
|
404
440
|
//# sourceMappingURL=index.d.cts.map
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/client-types.ts","../src/client.ts","../src/error.ts","../src/snapshot.ts"],"sourcesContent":[],"mappings":";;UAqBU,iBAAA;;ECfE,QAAA,EAAA,MAAA;EAKK,KAAA,EAAA,OAAA;AAUjB;UDaU,qBAAA,CCbuB;EAAA,QAIrB,EAAA,cAAA;EAAc,QAKd,EAAA,MAAA;EAAC,cAAA,EAAA,MAAA;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/client-types.ts","../src/client.ts","../src/error.ts","../src/snapshot.ts","../src/in-memory.ts"],"sourcesContent":[],"mappings":"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"}
|