@flagify/node 1.0.1 → 1.0.3

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/dist/index.d.mts CHANGED
@@ -106,6 +106,7 @@ interface RealtimeEvents {
106
106
  onFlagChange: (event: FlagChangeEvent) => void;
107
107
  onConnected: () => void;
108
108
  onReconnected: () => void;
109
+ onInitialSync: (flags: unknown[]) => void;
109
110
  onError: (error: Error) => void;
110
111
  }
111
112
  interface FlagChangeEvent {
@@ -247,7 +248,9 @@ interface FlagifyFlaggy {
247
248
  segmentId?: string;
248
249
  valueOverride?: unknown;
249
250
  rolloutPercentage?: number;
251
+ rolloutSalt?: string;
250
252
  enabled: boolean;
253
+ matchType?: 'ALL' | 'ANY';
251
254
  conditions?: Array<{
252
255
  attribute: string;
253
256
  operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in' | 'gt' | 'lt';
package/dist/index.d.ts CHANGED
@@ -106,6 +106,7 @@ interface RealtimeEvents {
106
106
  onFlagChange: (event: FlagChangeEvent) => void;
107
107
  onConnected: () => void;
108
108
  onReconnected: () => void;
109
+ onInitialSync: (flags: unknown[]) => void;
109
110
  onError: (error: Error) => void;
110
111
  }
111
112
  interface FlagChangeEvent {
@@ -247,7 +248,9 @@ interface FlagifyFlaggy {
247
248
  segmentId?: string;
248
249
  valueOverride?: unknown;
249
250
  rolloutPercentage?: number;
251
+ rolloutSalt?: string;
250
252
  enabled: boolean;
253
+ matchType?: 'ALL' | 'ANY';
251
254
  conditions?: Array<{
252
255
  attribute: string;
253
256
  operator: 'equals' | 'not_equals' | 'contains' | 'not_contains' | 'starts_with' | 'ends_with' | 'in' | 'not_in' | 'gt' | 'lt';
package/dist/index.js CHANGED
@@ -146,6 +146,15 @@ var RealtimeListener = class {
146
146
  }
147
147
  return;
148
148
  }
149
+ if (eventType === "initial_sync" && data) {
150
+ try {
151
+ const flags = JSON.parse(data);
152
+ this.events.onInitialSync(flags);
153
+ } catch {
154
+ console.warn("[Flagify] Failed to parse initial_sync event:", data);
155
+ }
156
+ return;
157
+ }
149
158
  if (eventType === "flag_change" && data) {
150
159
  try {
151
160
  const parsed = JSON.parse(data);
@@ -339,8 +348,21 @@ var Flagify = class {
339
348
  console.info("[Flagify] Realtime connected");
340
349
  },
341
350
  onReconnected: () => {
342
- console.info("[Flagify] Realtime reconnected \u2014 resyncing all flags");
343
- this.syncFlags();
351
+ console.info("[Flagify] Realtime reconnected");
352
+ },
353
+ onInitialSync: (flags) => {
354
+ for (const raw of flags) {
355
+ const flag = raw;
356
+ this.flagCache.set(flag.key, {
357
+ flag,
358
+ lastFetchedAt: Date.now()
359
+ });
360
+ }
361
+ console.info(`[Flagify] Synced ${flags.length} flags via SSE`);
362
+ const user = this.config.options?.user;
363
+ if (user) {
364
+ this.evaluateWithUser(user);
365
+ }
344
366
  },
345
367
  onFlagChange: (event) => {
346
368
  console.debug(`[Flagify] Flag changed: ${event.flagKey} (${event.action})`);
package/dist/index.mjs CHANGED
@@ -119,6 +119,15 @@ var RealtimeListener = class {
119
119
  }
120
120
  return;
121
121
  }
122
+ if (eventType === "initial_sync" && data) {
123
+ try {
124
+ const flags = JSON.parse(data);
125
+ this.events.onInitialSync(flags);
126
+ } catch {
127
+ console.warn("[Flagify] Failed to parse initial_sync event:", data);
128
+ }
129
+ return;
130
+ }
122
131
  if (eventType === "flag_change" && data) {
123
132
  try {
124
133
  const parsed = JSON.parse(data);
@@ -312,8 +321,21 @@ var Flagify = class {
312
321
  console.info("[Flagify] Realtime connected");
313
322
  },
314
323
  onReconnected: () => {
315
- console.info("[Flagify] Realtime reconnected \u2014 resyncing all flags");
316
- this.syncFlags();
324
+ console.info("[Flagify] Realtime reconnected");
325
+ },
326
+ onInitialSync: (flags) => {
327
+ for (const raw of flags) {
328
+ const flag = raw;
329
+ this.flagCache.set(flag.key, {
330
+ flag,
331
+ lastFetchedAt: Date.now()
332
+ });
333
+ }
334
+ console.info(`[Flagify] Synced ${flags.length} flags via SSE`);
335
+ const user = this.config.options?.user;
336
+ if (user) {
337
+ this.evaluateWithUser(user);
338
+ }
317
339
  },
318
340
  onFlagChange: (event) => {
319
341
  console.debug(`[Flagify] Flag changed: ${event.flagKey} (${event.action})`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flagify/node",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "description": "Official Flagify SDK for feature flag evaluation. TypeScript-first with local caching.",
5
5
  "author": "Mario Campbell R <mario@mariocampbellr.com>",
6
6
  "license": "MIT",