posthog-node 5.26.2 → 5.27.1
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/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +68 -1
- package/dist/client.mjs +68 -1
- package/dist/extensions/feature-flags/feature-flags.d.ts +12 -1
- package/dist/extensions/feature-flags/feature-flags.d.ts.map +1 -1
- package/dist/extensions/feature-flags/feature-flags.js +160 -0
- package/dist/extensions/feature-flags/feature-flags.mjs +158 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +1 -1
- package/src/client.ts +112 -1
- package/src/extensions/feature-flags/feature-flags.ts +166 -0
- package/src/types.ts +29 -0
- package/src/version.ts +1 -1
package/dist/client.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare abstract class PostHogBackendClient extends PostHogCoreStateless
|
|
|
13
13
|
private _flagOverrides?;
|
|
14
14
|
private _payloadOverrides?;
|
|
15
15
|
distinctIdHasSentFlagCalls: Record<string, string[]>;
|
|
16
|
+
private _waitUntilCycle?;
|
|
16
17
|
/**
|
|
17
18
|
* Initialize a new PostHog client instance.
|
|
18
19
|
*
|
|
@@ -43,6 +44,11 @@ export declare abstract class PostHogBackendClient extends PostHogCoreStateless
|
|
|
43
44
|
* @param options - Configuration options for the client
|
|
44
45
|
*/
|
|
45
46
|
constructor(apiKey: string, options?: PostHogOptions);
|
|
47
|
+
protected enqueue(type: string, message: any, options?: PostHogCaptureOptions): void;
|
|
48
|
+
flush(): Promise<void>;
|
|
49
|
+
private scheduleDebouncedFlush;
|
|
50
|
+
private _consumeWaitUntilCycle;
|
|
51
|
+
private resolveWaitUntilFlush;
|
|
46
52
|
/**
|
|
47
53
|
* Get a persisted property value from memory storage.
|
|
48
54
|
*
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAGhB,QAAQ,EACR,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAE/B,wBAAwB,EACzB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,YAAY,EAIZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,2BAA2B,EAC3B,cAAc,EAEd,qBAAqB,EACrB,eAAe,EAChB,MAAM,SAAS,CAAA;AAOhB,OAAO,aAAa,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAkB,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,gBAAgB,EAGhB,QAAQ,EACR,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,+BAA+B,EAE/B,wBAAwB,EACzB,MAAM,eAAe,CAAA;AACtB,OAAO,EACL,YAAY,EAIZ,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,QAAQ,EACR,2BAA2B,EAC3B,cAAc,EAEd,qBAAqB,EACrB,eAAe,EAChB,MAAM,SAAS,CAAA;AAOhB,OAAO,aAAa,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAkB,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAGtE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAYzF,8BAAsB,oBAAqB,SAAQ,oBAAqB,YAAW,QAAQ;IACzF,OAAO,CAAC,cAAc,CAA6B;IAEnD,OAAO,CAAC,kBAAkB,CAAC,CAAoB;IAC/C,SAAS,CAAC,aAAa,EAAE,aAAa,CAAA;IACtC,OAAO,CAAC,YAAY,CAAQ;IAC5B,SAAgB,OAAO,EAAE,cAAc,CAAA;IACvC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAA;IAG5C,OAAO,CAAC,cAAc,CAAC,CAAkC;IACzD,OAAO,CAAC,iBAAiB,CAAC,CAA0B;IAEpD,0BAA0B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;IAGpD,OAAO,CAAC,eAAe,CAAC,CAIvB;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB;cAsDrC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI;IAK9E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAcrC,OAAO,CAAC,sBAAsB;IAgD9B,OAAO,CAAC,sBAAsB;YAShB,qBAAqB;IAWnC;;;;;;;;;;;;;;;;;;;OAmBG;IACH,oBAAoB,CAAC,GAAG,EAAE,wBAAwB,GAAG,GAAG,GAAG,SAAS;IAIpE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,oBAAoB,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAI5E;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI/E;;;;;;;;;;;;;OAaG;IACH,iBAAiB,IAAI,MAAM;IAI3B;;;;;;;;;;;;;OAaG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;;;;;;;;;;;;OAaG;IACH,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvB;;;;;;;;;;;;;OAaG;IACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB;;;;;;;;;;;;;;;;;;OAkBG;IACH,KAAK,CAAC,OAAO,GAAE,OAAc,GAAG,IAAI;IAKpC;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IA0BlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA0CG;IACG,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA0B1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,UAAe,EAAE,YAAY,EAAE,EAAE,eAAe,GAAG,IAAI;IAc9E;;;;;;;;;;;;;;;;;;;OAmBG;IACG,iBAAiB,CAAC,EAAE,UAAU,EAAE,UAAe,EAAE,YAAY,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IActG;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI;IAIhF;;;;;;;;;;;;;;;;OAgBG;IACG,cAAc,CAAC,IAAI,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxG;;;;;;;;;;;;;;;;;;OAkBG;IACH,sBAAsB,IAAI,OAAO;IAIjC;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,2BAA2B,CAAC,SAAS,GAAE,MAAuB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuBvF,OAAO,CAAC,kBAAkB;IAU1B;;;;;;;;;OASG;YACW,qBAAqB;IAkOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwCG;IACG,cAAc,CAClB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,mBAAmB,CAAC,EAAE,OAAO,CAAA;QAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;QAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,GACA,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAcxC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,qBAAqB,CACzB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,UAAU,CAAC,EAAE,gBAAgB,EAC7B,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,mBAAmB,CAAC,EAAE,OAAO,CAAA;QAC7B,4FAA4F;QAC5F,qBAAqB,CAAC,EAAE,OAAO,CAAA;QAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,GACA,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IA0BhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACG,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAC1G,oBAAoB,CACxB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,iBAAiB,GAAG,SAAS,CAAC;IAsBzC;;;;;;;;;;;;;;;;;OAiBG;IACG,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;IA0B5E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA+BG;IACG,gBAAgB,CACpB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;QACR,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QAC/B,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACzC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACxD,mBAAmB,CAAC,EAAE,OAAO,CAAA;QAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAA;QAC/B,YAAY,CAAC,EAAE,OAAO,CAAA;KACvB,GACA,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAQ/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,WAAW,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACjF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAoB3G;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,sBAAsB,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAC3F,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAuFrH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACH,aAAa,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,EAAE,oBAAoB,GAAG,IAAI;IAIxG;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIzC;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,oBAAoB,CAAC,SAAS,EAAE,2BAA2B,GAAG,IAAI;IAyClE;;;;;;OAMG;IACH,OAAO,CAAC,6BAA6B;IAoCrC,SAAS,CAAC,QAAQ,CAAC,iBAAiB,IAAI,eAAe,GAAG,SAAS;IAEnE;;;;;;;;;;;;;;;;;;;OAmBG;IACH,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,CAAC;IASpF;;;;;;;;;;;;;;;OAeG;IACH,UAAU,IAAI,WAAW,GAAG,SAAS;IAIrC;;;;;;;;;;;;;OAaG;IACH,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,IAAI;IAIxE;;;;;;;;;;;;;;;;;;;OAmBG;IACG,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAa5C,2BAA2B;IAqCzC,OAAO,CAAC,0BAA0B;YA+BpB,uBAAuB;IAkErC,OAAO,CAAC,gCAAgC;IAqBxC,OAAO,CAAC,kCAAkC;IAe1C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACH,gBAAgB,CACd,KAAK,EAAE,OAAO,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,EACnD,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,GAC1B,IAAI;IAWP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkCG;IACG,yBAAyB,CAC7B,KAAK,EAAE,OAAO,EACd,UAAU,CAAC,EAAE,MAAM,EACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC;IAWH,mBAAmB,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC;QAC7D,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,UAAU,EAAE,sBAAsB,CAAA;QAClC,OAAO,EAAE,qBAAqB,CAAA;KAC/B,CAAC;IAkHF,OAAO,CAAC,cAAc;CAuBvB"}
|
package/dist/client.js
CHANGED
|
@@ -45,12 +45,16 @@ const external_storage_memory_js_namespaceObject = require("./storage-memory.js"
|
|
|
45
45
|
const MINIMUM_POLLING_INTERVAL = 100;
|
|
46
46
|
const THIRTY_SECONDS = 30000;
|
|
47
47
|
const MAX_CACHE_SIZE = 50000;
|
|
48
|
+
const WAITUNTIL_DEBOUNCE_MS = 50;
|
|
49
|
+
const WAITUNTIL_MAX_WAIT_MS = 500;
|
|
48
50
|
class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
49
51
|
constructor(apiKey, options = {}){
|
|
50
52
|
super(apiKey, options), this._memoryStorage = new external_storage_memory_js_namespaceObject.PostHogMemoryStorage();
|
|
51
53
|
this.options = options;
|
|
52
54
|
this.context = this.initializeContext();
|
|
53
55
|
this.options.featureFlagsPollingInterval = 'number' == typeof options.featureFlagsPollingInterval ? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL) : THIRTY_SECONDS;
|
|
56
|
+
if ('number' == typeof options.waitUntilDebounceMs) this.options.waitUntilDebounceMs = Math.max(options.waitUntilDebounceMs, 0);
|
|
57
|
+
if ('number' == typeof options.waitUntilMaxWaitMs) this.options.waitUntilMaxWaitMs = Math.max(options.waitUntilMaxWaitMs, 0);
|
|
54
58
|
if (options.personalApiKey) {
|
|
55
59
|
if (options.personalApiKey.includes('phc_')) throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');
|
|
56
60
|
const shouldEnableLocalEvaluation = false !== options.enableLocalEvaluation;
|
|
@@ -76,6 +80,64 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
|
76
80
|
this.distinctIdHasSentFlagCalls = {};
|
|
77
81
|
this.maxCacheSize = options.maxCacheSize || MAX_CACHE_SIZE;
|
|
78
82
|
}
|
|
83
|
+
enqueue(type, message, options) {
|
|
84
|
+
super.enqueue(type, message, options);
|
|
85
|
+
this.scheduleDebouncedFlush();
|
|
86
|
+
}
|
|
87
|
+
async flush() {
|
|
88
|
+
const flushPromise = super.flush();
|
|
89
|
+
const waitUntil = this.options.waitUntil;
|
|
90
|
+
if (waitUntil && !this._waitUntilCycle) try {
|
|
91
|
+
waitUntil(flushPromise.catch(()=>{}));
|
|
92
|
+
} catch {}
|
|
93
|
+
return flushPromise;
|
|
94
|
+
}
|
|
95
|
+
scheduleDebouncedFlush() {
|
|
96
|
+
const waitUntil = this.options.waitUntil;
|
|
97
|
+
if (!waitUntil) return;
|
|
98
|
+
if (this.disabled || this.optedOut) return;
|
|
99
|
+
if (!this._waitUntilCycle) {
|
|
100
|
+
let resolve;
|
|
101
|
+
const promise = new Promise((r)=>{
|
|
102
|
+
resolve = r;
|
|
103
|
+
});
|
|
104
|
+
try {
|
|
105
|
+
waitUntil(promise);
|
|
106
|
+
} catch {
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this._waitUntilCycle = {
|
|
110
|
+
resolve: resolve,
|
|
111
|
+
startedAt: Date.now(),
|
|
112
|
+
timer: void 0
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
const elapsed = Date.now() - this._waitUntilCycle.startedAt;
|
|
116
|
+
const maxWaitMs = this.options.waitUntilMaxWaitMs ?? WAITUNTIL_MAX_WAIT_MS;
|
|
117
|
+
const flushNow = elapsed >= maxWaitMs;
|
|
118
|
+
if (void 0 !== this._waitUntilCycle.timer) clearTimeout(this._waitUntilCycle.timer);
|
|
119
|
+
if (flushNow) return void this.resolveWaitUntilFlush();
|
|
120
|
+
const debounceMs = this.options.waitUntilDebounceMs ?? WAITUNTIL_DEBOUNCE_MS;
|
|
121
|
+
this._waitUntilCycle.timer = (0, core_namespaceObject.safeSetTimeout)(()=>{
|
|
122
|
+
this.resolveWaitUntilFlush();
|
|
123
|
+
}, debounceMs);
|
|
124
|
+
}
|
|
125
|
+
_consumeWaitUntilCycle() {
|
|
126
|
+
const cycle = this._waitUntilCycle;
|
|
127
|
+
if (cycle) {
|
|
128
|
+
clearTimeout(cycle.timer);
|
|
129
|
+
this._waitUntilCycle = void 0;
|
|
130
|
+
}
|
|
131
|
+
return cycle?.resolve;
|
|
132
|
+
}
|
|
133
|
+
async resolveWaitUntilFlush() {
|
|
134
|
+
const resolve = this._consumeWaitUntilCycle();
|
|
135
|
+
try {
|
|
136
|
+
await super.flush();
|
|
137
|
+
} catch {} finally{
|
|
138
|
+
resolve?.();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
79
141
|
getPersistedProperty(key) {
|
|
80
142
|
return this._memoryStorage.getProperty(key);
|
|
81
143
|
}
|
|
@@ -478,9 +540,14 @@ class PostHogBackendClient extends core_namespaceObject.PostHogCoreStateless {
|
|
|
478
540
|
this.context?.enter(data, options);
|
|
479
541
|
}
|
|
480
542
|
async _shutdown(shutdownTimeoutMs) {
|
|
543
|
+
const resolve = this._consumeWaitUntilCycle();
|
|
481
544
|
this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs);
|
|
482
545
|
this.errorTracking.shutdown();
|
|
483
|
-
|
|
546
|
+
try {
|
|
547
|
+
return await super._shutdown(shutdownTimeoutMs);
|
|
548
|
+
} finally{
|
|
549
|
+
resolve?.();
|
|
550
|
+
}
|
|
484
551
|
}
|
|
485
552
|
async _requestRemoteConfigPayload(flagKey) {
|
|
486
553
|
if (!this.options.personalApiKey) return;
|
package/dist/client.mjs
CHANGED
|
@@ -7,12 +7,16 @@ import { PostHogMemoryStorage } from "./storage-memory.mjs";
|
|
|
7
7
|
const MINIMUM_POLLING_INTERVAL = 100;
|
|
8
8
|
const THIRTY_SECONDS = 30000;
|
|
9
9
|
const MAX_CACHE_SIZE = 50000;
|
|
10
|
+
const WAITUNTIL_DEBOUNCE_MS = 50;
|
|
11
|
+
const WAITUNTIL_MAX_WAIT_MS = 500;
|
|
10
12
|
class PostHogBackendClient extends PostHogCoreStateless {
|
|
11
13
|
constructor(apiKey, options = {}){
|
|
12
14
|
super(apiKey, options), this._memoryStorage = new PostHogMemoryStorage();
|
|
13
15
|
this.options = options;
|
|
14
16
|
this.context = this.initializeContext();
|
|
15
17
|
this.options.featureFlagsPollingInterval = 'number' == typeof options.featureFlagsPollingInterval ? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL) : THIRTY_SECONDS;
|
|
18
|
+
if ('number' == typeof options.waitUntilDebounceMs) this.options.waitUntilDebounceMs = Math.max(options.waitUntilDebounceMs, 0);
|
|
19
|
+
if ('number' == typeof options.waitUntilMaxWaitMs) this.options.waitUntilMaxWaitMs = Math.max(options.waitUntilMaxWaitMs, 0);
|
|
16
20
|
if (options.personalApiKey) {
|
|
17
21
|
if (options.personalApiKey.includes('phc_')) throw new Error('Your Personal API key is invalid. These keys are prefixed with "phx_" and can be created in PostHog project settings.');
|
|
18
22
|
const shouldEnableLocalEvaluation = false !== options.enableLocalEvaluation;
|
|
@@ -38,6 +42,64 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
38
42
|
this.distinctIdHasSentFlagCalls = {};
|
|
39
43
|
this.maxCacheSize = options.maxCacheSize || MAX_CACHE_SIZE;
|
|
40
44
|
}
|
|
45
|
+
enqueue(type, message, options) {
|
|
46
|
+
super.enqueue(type, message, options);
|
|
47
|
+
this.scheduleDebouncedFlush();
|
|
48
|
+
}
|
|
49
|
+
async flush() {
|
|
50
|
+
const flushPromise = super.flush();
|
|
51
|
+
const waitUntil = this.options.waitUntil;
|
|
52
|
+
if (waitUntil && !this._waitUntilCycle) try {
|
|
53
|
+
waitUntil(flushPromise.catch(()=>{}));
|
|
54
|
+
} catch {}
|
|
55
|
+
return flushPromise;
|
|
56
|
+
}
|
|
57
|
+
scheduleDebouncedFlush() {
|
|
58
|
+
const waitUntil = this.options.waitUntil;
|
|
59
|
+
if (!waitUntil) return;
|
|
60
|
+
if (this.disabled || this.optedOut) return;
|
|
61
|
+
if (!this._waitUntilCycle) {
|
|
62
|
+
let resolve;
|
|
63
|
+
const promise = new Promise((r)=>{
|
|
64
|
+
resolve = r;
|
|
65
|
+
});
|
|
66
|
+
try {
|
|
67
|
+
waitUntil(promise);
|
|
68
|
+
} catch {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
this._waitUntilCycle = {
|
|
72
|
+
resolve: resolve,
|
|
73
|
+
startedAt: Date.now(),
|
|
74
|
+
timer: void 0
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
const elapsed = Date.now() - this._waitUntilCycle.startedAt;
|
|
78
|
+
const maxWaitMs = this.options.waitUntilMaxWaitMs ?? WAITUNTIL_MAX_WAIT_MS;
|
|
79
|
+
const flushNow = elapsed >= maxWaitMs;
|
|
80
|
+
if (void 0 !== this._waitUntilCycle.timer) clearTimeout(this._waitUntilCycle.timer);
|
|
81
|
+
if (flushNow) return void this.resolveWaitUntilFlush();
|
|
82
|
+
const debounceMs = this.options.waitUntilDebounceMs ?? WAITUNTIL_DEBOUNCE_MS;
|
|
83
|
+
this._waitUntilCycle.timer = safeSetTimeout(()=>{
|
|
84
|
+
this.resolveWaitUntilFlush();
|
|
85
|
+
}, debounceMs);
|
|
86
|
+
}
|
|
87
|
+
_consumeWaitUntilCycle() {
|
|
88
|
+
const cycle = this._waitUntilCycle;
|
|
89
|
+
if (cycle) {
|
|
90
|
+
clearTimeout(cycle.timer);
|
|
91
|
+
this._waitUntilCycle = void 0;
|
|
92
|
+
}
|
|
93
|
+
return cycle?.resolve;
|
|
94
|
+
}
|
|
95
|
+
async resolveWaitUntilFlush() {
|
|
96
|
+
const resolve = this._consumeWaitUntilCycle();
|
|
97
|
+
try {
|
|
98
|
+
await super.flush();
|
|
99
|
+
} catch {} finally{
|
|
100
|
+
resolve?.();
|
|
101
|
+
}
|
|
102
|
+
}
|
|
41
103
|
getPersistedProperty(key) {
|
|
42
104
|
return this._memoryStorage.getProperty(key);
|
|
43
105
|
}
|
|
@@ -440,9 +502,14 @@ class PostHogBackendClient extends PostHogCoreStateless {
|
|
|
440
502
|
this.context?.enter(data, options);
|
|
441
503
|
}
|
|
442
504
|
async _shutdown(shutdownTimeoutMs) {
|
|
505
|
+
const resolve = this._consumeWaitUntilCycle();
|
|
443
506
|
this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs);
|
|
444
507
|
this.errorTracking.shutdown();
|
|
445
|
-
|
|
508
|
+
try {
|
|
509
|
+
return await super._shutdown(shutdownTimeoutMs);
|
|
510
|
+
} finally{
|
|
511
|
+
resolve?.();
|
|
512
|
+
}
|
|
446
513
|
}
|
|
447
514
|
async _requestRemoteConfigPayload(flagKey) {
|
|
448
515
|
if (!this.options.personalApiKey) return;
|
|
@@ -139,6 +139,17 @@ declare class FeatureFlagsPoller {
|
|
|
139
139
|
stopPoller(timeoutMs?: number): Promise<void>;
|
|
140
140
|
}
|
|
141
141
|
declare function matchProperty(property: FeatureFlagCondition['properties'][number], propertyValues: Record<string, any>, warnFunction?: (msg: string) => void): boolean;
|
|
142
|
+
type SemverTuple = [number, number, number];
|
|
143
|
+
/**
|
|
144
|
+
* Parse a version string into a [major, minor, patch] tuple.
|
|
145
|
+
* - Strips leading/trailing whitespace
|
|
146
|
+
* - Strips 'v' or 'V' prefix
|
|
147
|
+
* - Strips pre-release and build metadata (-alpha, +build)
|
|
148
|
+
* - Defaults missing components to 0
|
|
149
|
+
* - Ignores extra components beyond the third
|
|
150
|
+
* - Throws InconclusiveMatchError for invalid input
|
|
151
|
+
*/
|
|
152
|
+
declare function parseSemver(value: string): SemverTuple;
|
|
142
153
|
declare function relativeDateParseForFeatureFlagMatching(value: string): Date | null;
|
|
143
|
-
export { FeatureFlagsPoller, matchProperty, relativeDateParseForFeatureFlagMatching, InconclusiveMatchError, RequiresServerEvaluation, ClientError, };
|
|
154
|
+
export { FeatureFlagsPoller, matchProperty, relativeDateParseForFeatureFlagMatching, parseSemver, InconclusiveMatchError, RequiresServerEvaluation, ClientError, };
|
|
144
155
|
//# sourceMappingURL=feature-flags.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"feature-flags.d.ts","sourceRoot":"","sources":["../../../src/extensions/feature-flags/feature-flags.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,6 +25,7 @@ var __webpack_exports__ = {};
|
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
matchProperty: ()=>matchProperty,
|
|
28
|
+
parseSemver: ()=>parseSemver,
|
|
28
29
|
ClientError: ()=>ClientError,
|
|
29
30
|
relativeDateParseForFeatureFlagMatching: ()=>relativeDateParseForFeatureFlagMatching,
|
|
30
31
|
InconclusiveMatchError: ()=>InconclusiveMatchError,
|
|
@@ -547,6 +548,54 @@ function matchProperty(property, propertyValues, warnFunction) {
|
|
|
547
548
|
].includes(operator)) return overrideDate < parsedDate;
|
|
548
549
|
return overrideDate > parsedDate;
|
|
549
550
|
}
|
|
551
|
+
case 'semver_eq':
|
|
552
|
+
{
|
|
553
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
554
|
+
return 0 === cmp;
|
|
555
|
+
}
|
|
556
|
+
case 'semver_neq':
|
|
557
|
+
{
|
|
558
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
559
|
+
return 0 !== cmp;
|
|
560
|
+
}
|
|
561
|
+
case 'semver_gt':
|
|
562
|
+
{
|
|
563
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
564
|
+
return cmp > 0;
|
|
565
|
+
}
|
|
566
|
+
case 'semver_gte':
|
|
567
|
+
{
|
|
568
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
569
|
+
return cmp >= 0;
|
|
570
|
+
}
|
|
571
|
+
case 'semver_lt':
|
|
572
|
+
{
|
|
573
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
574
|
+
return cmp < 0;
|
|
575
|
+
}
|
|
576
|
+
case 'semver_lte':
|
|
577
|
+
{
|
|
578
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
579
|
+
return cmp <= 0;
|
|
580
|
+
}
|
|
581
|
+
case 'semver_tilde':
|
|
582
|
+
{
|
|
583
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
584
|
+
const { lower, upper } = computeTildeBounds(String(value));
|
|
585
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
586
|
+
}
|
|
587
|
+
case 'semver_caret':
|
|
588
|
+
{
|
|
589
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
590
|
+
const { lower, upper } = computeCaretBounds(String(value));
|
|
591
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
592
|
+
}
|
|
593
|
+
case 'semver_wildcard':
|
|
594
|
+
{
|
|
595
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
596
|
+
const { lower, upper } = computeWildcardBounds(String(value));
|
|
597
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
598
|
+
}
|
|
550
599
|
default:
|
|
551
600
|
throw new InconclusiveMatchError(`Unknown operator: ${operator}`);
|
|
552
601
|
}
|
|
@@ -615,6 +664,115 @@ function isValidRegex(regex) {
|
|
|
615
664
|
return false;
|
|
616
665
|
}
|
|
617
666
|
}
|
|
667
|
+
function parseSemver(value) {
|
|
668
|
+
const text = String(value).trim().replace(/^[vV]/, '');
|
|
669
|
+
const baseVersion = text.split('-')[0].split('+')[0];
|
|
670
|
+
if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`);
|
|
671
|
+
const parts = baseVersion.split('.');
|
|
672
|
+
const parsePart = (part)=>{
|
|
673
|
+
if (void 0 === part || '' === part) return 0;
|
|
674
|
+
if (!/^\d+$/.test(part)) throw new InconclusiveMatchError(`Invalid semver: ${value}`);
|
|
675
|
+
return parseInt(part, 10);
|
|
676
|
+
};
|
|
677
|
+
const major = parsePart(parts[0]);
|
|
678
|
+
const minor = parsePart(parts[1]);
|
|
679
|
+
const patch = parsePart(parts[2]);
|
|
680
|
+
return [
|
|
681
|
+
major,
|
|
682
|
+
minor,
|
|
683
|
+
patch
|
|
684
|
+
];
|
|
685
|
+
}
|
|
686
|
+
function compareSemverTuples(a, b) {
|
|
687
|
+
for(let i = 0; i < 3; i++){
|
|
688
|
+
if (a[i] < b[i]) return -1;
|
|
689
|
+
if (a[i] > b[i]) return 1;
|
|
690
|
+
}
|
|
691
|
+
return 0;
|
|
692
|
+
}
|
|
693
|
+
function computeTildeBounds(value) {
|
|
694
|
+
const parsed = parseSemver(value);
|
|
695
|
+
const lower = [
|
|
696
|
+
parsed[0],
|
|
697
|
+
parsed[1],
|
|
698
|
+
parsed[2]
|
|
699
|
+
];
|
|
700
|
+
const upper = [
|
|
701
|
+
parsed[0],
|
|
702
|
+
parsed[1] + 1,
|
|
703
|
+
0
|
|
704
|
+
];
|
|
705
|
+
return {
|
|
706
|
+
lower,
|
|
707
|
+
upper
|
|
708
|
+
};
|
|
709
|
+
}
|
|
710
|
+
function computeCaretBounds(value) {
|
|
711
|
+
const parsed = parseSemver(value);
|
|
712
|
+
const [major, minor, patch] = parsed;
|
|
713
|
+
const lower = [
|
|
714
|
+
major,
|
|
715
|
+
minor,
|
|
716
|
+
patch
|
|
717
|
+
];
|
|
718
|
+
let upper;
|
|
719
|
+
upper = major > 0 ? [
|
|
720
|
+
major + 1,
|
|
721
|
+
0,
|
|
722
|
+
0
|
|
723
|
+
] : minor > 0 ? [
|
|
724
|
+
0,
|
|
725
|
+
minor + 1,
|
|
726
|
+
0
|
|
727
|
+
] : [
|
|
728
|
+
0,
|
|
729
|
+
0,
|
|
730
|
+
patch + 1
|
|
731
|
+
];
|
|
732
|
+
return {
|
|
733
|
+
lower,
|
|
734
|
+
upper
|
|
735
|
+
};
|
|
736
|
+
}
|
|
737
|
+
function computeWildcardBounds(value) {
|
|
738
|
+
const text = String(value).trim().replace(/^[vV]/, '');
|
|
739
|
+
const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '');
|
|
740
|
+
if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
741
|
+
const parts = cleanedText.split('.');
|
|
742
|
+
const major = parseInt(parts[0], 10);
|
|
743
|
+
if (isNaN(major)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
744
|
+
let lower;
|
|
745
|
+
let upper;
|
|
746
|
+
if (1 === parts.length) {
|
|
747
|
+
lower = [
|
|
748
|
+
major,
|
|
749
|
+
0,
|
|
750
|
+
0
|
|
751
|
+
];
|
|
752
|
+
upper = [
|
|
753
|
+
major + 1,
|
|
754
|
+
0,
|
|
755
|
+
0
|
|
756
|
+
];
|
|
757
|
+
} else {
|
|
758
|
+
const minor = parseInt(parts[1], 10);
|
|
759
|
+
if (isNaN(minor)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
760
|
+
lower = [
|
|
761
|
+
major,
|
|
762
|
+
minor,
|
|
763
|
+
0
|
|
764
|
+
];
|
|
765
|
+
upper = [
|
|
766
|
+
major,
|
|
767
|
+
minor + 1,
|
|
768
|
+
0
|
|
769
|
+
];
|
|
770
|
+
}
|
|
771
|
+
return {
|
|
772
|
+
lower,
|
|
773
|
+
upper
|
|
774
|
+
};
|
|
775
|
+
}
|
|
618
776
|
function convertToDateTime(value) {
|
|
619
777
|
if (value instanceof Date) return value;
|
|
620
778
|
if ('string' == typeof value || 'number' == typeof value) {
|
|
@@ -650,6 +808,7 @@ exports.FeatureFlagsPoller = __webpack_exports__.FeatureFlagsPoller;
|
|
|
650
808
|
exports.InconclusiveMatchError = __webpack_exports__.InconclusiveMatchError;
|
|
651
809
|
exports.RequiresServerEvaluation = __webpack_exports__.RequiresServerEvaluation;
|
|
652
810
|
exports.matchProperty = __webpack_exports__.matchProperty;
|
|
811
|
+
exports.parseSemver = __webpack_exports__.parseSemver;
|
|
653
812
|
exports.relativeDateParseForFeatureFlagMatching = __webpack_exports__.relativeDateParseForFeatureFlagMatching;
|
|
654
813
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
655
814
|
"ClientError",
|
|
@@ -657,6 +816,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
657
816
|
"InconclusiveMatchError",
|
|
658
817
|
"RequiresServerEvaluation",
|
|
659
818
|
"matchProperty",
|
|
819
|
+
"parseSemver",
|
|
660
820
|
"relativeDateParseForFeatureFlagMatching"
|
|
661
821
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
662
822
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -514,6 +514,54 @@ function matchProperty(property, propertyValues, warnFunction) {
|
|
|
514
514
|
].includes(operator)) return overrideDate < parsedDate;
|
|
515
515
|
return overrideDate > parsedDate;
|
|
516
516
|
}
|
|
517
|
+
case 'semver_eq':
|
|
518
|
+
{
|
|
519
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
520
|
+
return 0 === cmp;
|
|
521
|
+
}
|
|
522
|
+
case 'semver_neq':
|
|
523
|
+
{
|
|
524
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
525
|
+
return 0 !== cmp;
|
|
526
|
+
}
|
|
527
|
+
case 'semver_gt':
|
|
528
|
+
{
|
|
529
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
530
|
+
return cmp > 0;
|
|
531
|
+
}
|
|
532
|
+
case 'semver_gte':
|
|
533
|
+
{
|
|
534
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
535
|
+
return cmp >= 0;
|
|
536
|
+
}
|
|
537
|
+
case 'semver_lt':
|
|
538
|
+
{
|
|
539
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
540
|
+
return cmp < 0;
|
|
541
|
+
}
|
|
542
|
+
case 'semver_lte':
|
|
543
|
+
{
|
|
544
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)));
|
|
545
|
+
return cmp <= 0;
|
|
546
|
+
}
|
|
547
|
+
case 'semver_tilde':
|
|
548
|
+
{
|
|
549
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
550
|
+
const { lower, upper } = computeTildeBounds(String(value));
|
|
551
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
552
|
+
}
|
|
553
|
+
case 'semver_caret':
|
|
554
|
+
{
|
|
555
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
556
|
+
const { lower, upper } = computeCaretBounds(String(value));
|
|
557
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
558
|
+
}
|
|
559
|
+
case 'semver_wildcard':
|
|
560
|
+
{
|
|
561
|
+
const overrideParsed = parseSemver(String(overrideValue));
|
|
562
|
+
const { lower, upper } = computeWildcardBounds(String(value));
|
|
563
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0;
|
|
564
|
+
}
|
|
517
565
|
default:
|
|
518
566
|
throw new InconclusiveMatchError(`Unknown operator: ${operator}`);
|
|
519
567
|
}
|
|
@@ -582,6 +630,115 @@ function isValidRegex(regex) {
|
|
|
582
630
|
return false;
|
|
583
631
|
}
|
|
584
632
|
}
|
|
633
|
+
function parseSemver(value) {
|
|
634
|
+
const text = String(value).trim().replace(/^[vV]/, '');
|
|
635
|
+
const baseVersion = text.split('-')[0].split('+')[0];
|
|
636
|
+
if (!baseVersion || baseVersion.startsWith('.')) throw new InconclusiveMatchError(`Invalid semver: ${value}`);
|
|
637
|
+
const parts = baseVersion.split('.');
|
|
638
|
+
const parsePart = (part)=>{
|
|
639
|
+
if (void 0 === part || '' === part) return 0;
|
|
640
|
+
if (!/^\d+$/.test(part)) throw new InconclusiveMatchError(`Invalid semver: ${value}`);
|
|
641
|
+
return parseInt(part, 10);
|
|
642
|
+
};
|
|
643
|
+
const major = parsePart(parts[0]);
|
|
644
|
+
const minor = parsePart(parts[1]);
|
|
645
|
+
const patch = parsePart(parts[2]);
|
|
646
|
+
return [
|
|
647
|
+
major,
|
|
648
|
+
minor,
|
|
649
|
+
patch
|
|
650
|
+
];
|
|
651
|
+
}
|
|
652
|
+
function compareSemverTuples(a, b) {
|
|
653
|
+
for(let i = 0; i < 3; i++){
|
|
654
|
+
if (a[i] < b[i]) return -1;
|
|
655
|
+
if (a[i] > b[i]) return 1;
|
|
656
|
+
}
|
|
657
|
+
return 0;
|
|
658
|
+
}
|
|
659
|
+
function computeTildeBounds(value) {
|
|
660
|
+
const parsed = parseSemver(value);
|
|
661
|
+
const lower = [
|
|
662
|
+
parsed[0],
|
|
663
|
+
parsed[1],
|
|
664
|
+
parsed[2]
|
|
665
|
+
];
|
|
666
|
+
const upper = [
|
|
667
|
+
parsed[0],
|
|
668
|
+
parsed[1] + 1,
|
|
669
|
+
0
|
|
670
|
+
];
|
|
671
|
+
return {
|
|
672
|
+
lower,
|
|
673
|
+
upper
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
function computeCaretBounds(value) {
|
|
677
|
+
const parsed = parseSemver(value);
|
|
678
|
+
const [major, minor, patch] = parsed;
|
|
679
|
+
const lower = [
|
|
680
|
+
major,
|
|
681
|
+
minor,
|
|
682
|
+
patch
|
|
683
|
+
];
|
|
684
|
+
let upper;
|
|
685
|
+
upper = major > 0 ? [
|
|
686
|
+
major + 1,
|
|
687
|
+
0,
|
|
688
|
+
0
|
|
689
|
+
] : minor > 0 ? [
|
|
690
|
+
0,
|
|
691
|
+
minor + 1,
|
|
692
|
+
0
|
|
693
|
+
] : [
|
|
694
|
+
0,
|
|
695
|
+
0,
|
|
696
|
+
patch + 1
|
|
697
|
+
];
|
|
698
|
+
return {
|
|
699
|
+
lower,
|
|
700
|
+
upper
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
function computeWildcardBounds(value) {
|
|
704
|
+
const text = String(value).trim().replace(/^[vV]/, '');
|
|
705
|
+
const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '');
|
|
706
|
+
if (!cleanedText) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
707
|
+
const parts = cleanedText.split('.');
|
|
708
|
+
const major = parseInt(parts[0], 10);
|
|
709
|
+
if (isNaN(major)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
710
|
+
let lower;
|
|
711
|
+
let upper;
|
|
712
|
+
if (1 === parts.length) {
|
|
713
|
+
lower = [
|
|
714
|
+
major,
|
|
715
|
+
0,
|
|
716
|
+
0
|
|
717
|
+
];
|
|
718
|
+
upper = [
|
|
719
|
+
major + 1,
|
|
720
|
+
0,
|
|
721
|
+
0
|
|
722
|
+
];
|
|
723
|
+
} else {
|
|
724
|
+
const minor = parseInt(parts[1], 10);
|
|
725
|
+
if (isNaN(minor)) throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`);
|
|
726
|
+
lower = [
|
|
727
|
+
major,
|
|
728
|
+
minor,
|
|
729
|
+
0
|
|
730
|
+
];
|
|
731
|
+
upper = [
|
|
732
|
+
major,
|
|
733
|
+
minor + 1,
|
|
734
|
+
0
|
|
735
|
+
];
|
|
736
|
+
}
|
|
737
|
+
return {
|
|
738
|
+
lower,
|
|
739
|
+
upper
|
|
740
|
+
};
|
|
741
|
+
}
|
|
585
742
|
function convertToDateTime(value) {
|
|
586
743
|
if (value instanceof Date) return value;
|
|
587
744
|
if ('string' == typeof value || 'number' == typeof value) {
|
|
@@ -612,4 +769,4 @@ function relativeDateParseForFeatureFlagMatching(value) {
|
|
|
612
769
|
return parsedDt;
|
|
613
770
|
}
|
|
614
771
|
}
|
|
615
|
-
export { ClientError, FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation, matchProperty, relativeDateParseForFeatureFlagMatching };
|
|
772
|
+
export { ClientError, FeatureFlagsPoller, InconclusiveMatchError, RequiresServerEvaluation, matchProperty, parseSemver, relativeDateParseForFeatureFlagMatching };
|
package/dist/types.d.ts
CHANGED
|
@@ -184,6 +184,35 @@ export type PostHogOptions = Omit<PostHogCoreOptions, 'before_send'> & {
|
|
|
184
184
|
* @default false
|
|
185
185
|
*/
|
|
186
186
|
strictLocalEvaluation?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* Provides the API to extend the lifetime of a serverless invocation until
|
|
189
|
+
* background work (like flushing analytics events) completes after the response
|
|
190
|
+
* is sent.
|
|
191
|
+
*
|
|
192
|
+
* @experimental Subject to change in a minor release.
|
|
193
|
+
*
|
|
194
|
+
* @example
|
|
195
|
+
* // Vercel
|
|
196
|
+
* import { waitUntil } from '@vercel/functions'
|
|
197
|
+
* new PostHog('key', { waitUntil })
|
|
198
|
+
*/
|
|
199
|
+
waitUntil?: (promise: Promise<unknown>) => void;
|
|
200
|
+
/**
|
|
201
|
+
* Debounce interval in milliseconds for the `waitUntil`-based flush.
|
|
202
|
+
* After the last event is enqueued, the SDK waits this long before flushing.
|
|
203
|
+
*
|
|
204
|
+
* @experimental Subject to change in a minor release.
|
|
205
|
+
* @default 50
|
|
206
|
+
*/
|
|
207
|
+
waitUntilDebounceMs?: number;
|
|
208
|
+
/**
|
|
209
|
+
* Maximum time in milliseconds to debounce before forcing a flush.
|
|
210
|
+
* Prevents starvation from rapid concurrent captures.
|
|
211
|
+
*
|
|
212
|
+
* @experimental Subject to change in a minor release.
|
|
213
|
+
* @default 500
|
|
214
|
+
*/
|
|
215
|
+
waitUntilMaxWaitMs?: number;
|
|
187
216
|
};
|
|
188
217
|
export type PostHogFeatureFlag = {
|
|
189
218
|
id: number;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "5.
|
|
1
|
+
export declare const version = "5.27.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/version.js
CHANGED
|
@@ -26,7 +26,7 @@ __webpack_require__.r(__webpack_exports__);
|
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
27
|
version: ()=>version
|
|
28
28
|
});
|
|
29
|
-
const version = '5.
|
|
29
|
+
const version = '5.27.1';
|
|
30
30
|
exports.version = __webpack_exports__.version;
|
|
31
31
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
32
32
|
"version"
|
package/dist/version.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const version = '5.
|
|
1
|
+
const version = '5.27.1';
|
|
2
2
|
export { version };
|
package/package.json
CHANGED
package/src/client.ts
CHANGED
|
@@ -46,6 +46,9 @@ const MINIMUM_POLLING_INTERVAL = 100
|
|
|
46
46
|
const THIRTY_SECONDS = 30 * 1000
|
|
47
47
|
const MAX_CACHE_SIZE = 50 * 1000
|
|
48
48
|
|
|
49
|
+
const WAITUNTIL_DEBOUNCE_MS = 50
|
|
50
|
+
const WAITUNTIL_MAX_WAIT_MS = 500
|
|
51
|
+
|
|
49
52
|
// The actual exported Nodejs API.
|
|
50
53
|
export abstract class PostHogBackendClient extends PostHogCoreStateless implements IPostHog {
|
|
51
54
|
private _memoryStorage = new PostHogMemoryStorage()
|
|
@@ -62,6 +65,13 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
62
65
|
|
|
63
66
|
distinctIdHasSentFlagCalls: Record<string, string[]>
|
|
64
67
|
|
|
68
|
+
// waitUntil debounce state (per-instance)
|
|
69
|
+
private _waitUntilCycle?: {
|
|
70
|
+
resolve: () => void
|
|
71
|
+
startedAt: number
|
|
72
|
+
timer: ReturnType<typeof setTimeout> | undefined
|
|
73
|
+
}
|
|
74
|
+
|
|
65
75
|
/**
|
|
66
76
|
* Initialize a new PostHog client instance.
|
|
67
77
|
*
|
|
@@ -102,6 +112,13 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
102
112
|
? Math.max(options.featureFlagsPollingInterval, MINIMUM_POLLING_INTERVAL)
|
|
103
113
|
: THIRTY_SECONDS
|
|
104
114
|
|
|
115
|
+
if (typeof options.waitUntilDebounceMs === 'number') {
|
|
116
|
+
this.options.waitUntilDebounceMs = Math.max(options.waitUntilDebounceMs, 0)
|
|
117
|
+
}
|
|
118
|
+
if (typeof options.waitUntilMaxWaitMs === 'number') {
|
|
119
|
+
this.options.waitUntilMaxWaitMs = Math.max(options.waitUntilMaxWaitMs, 0)
|
|
120
|
+
}
|
|
121
|
+
|
|
105
122
|
if (options.personalApiKey) {
|
|
106
123
|
if (options.personalApiKey.includes('phc_')) {
|
|
107
124
|
throw new Error(
|
|
@@ -138,6 +155,93 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
138
155
|
this.maxCacheSize = options.maxCacheSize || MAX_CACHE_SIZE
|
|
139
156
|
}
|
|
140
157
|
|
|
158
|
+
protected override enqueue(type: string, message: any, options?: PostHogCaptureOptions): void {
|
|
159
|
+
super.enqueue(type, message, options)
|
|
160
|
+
this.scheduleDebouncedFlush()
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
override async flush(): Promise<void> {
|
|
164
|
+
const flushPromise = super.flush()
|
|
165
|
+
const waitUntil = this.options.waitUntil
|
|
166
|
+
// Only register when no debounce promise is already keeping runtime alive
|
|
167
|
+
if (waitUntil && !this._waitUntilCycle) {
|
|
168
|
+
try {
|
|
169
|
+
waitUntil(flushPromise.catch(() => {}))
|
|
170
|
+
} catch {
|
|
171
|
+
// waitUntil may throw outside request context
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return flushPromise
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
private scheduleDebouncedFlush(): void {
|
|
178
|
+
// `waitUntil` is a serverless construct
|
|
179
|
+
// if it doesn't exist, we can skip all the debounce logic and flush as normal
|
|
180
|
+
const waitUntil = this.options.waitUntil
|
|
181
|
+
if (!waitUntil) {
|
|
182
|
+
return
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (this.disabled || this.optedOut) {
|
|
186
|
+
return
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (!this._waitUntilCycle) {
|
|
190
|
+
let resolve: () => void
|
|
191
|
+
const promise = new Promise<void>((r) => {
|
|
192
|
+
resolve = r
|
|
193
|
+
})
|
|
194
|
+
try {
|
|
195
|
+
waitUntil(promise)
|
|
196
|
+
} catch {
|
|
197
|
+
// waitUntil may throw outside request context
|
|
198
|
+
return
|
|
199
|
+
}
|
|
200
|
+
this._waitUntilCycle = { resolve: resolve!, startedAt: Date.now(), timer: undefined }
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// Max time cap: if we've been debouncing too long, flush now to prevent
|
|
204
|
+
// starvation from rapid concurrent captures. I.e., don't let a steady
|
|
205
|
+
// stream of captures keep pushing the flush back indefinitely.
|
|
206
|
+
const elapsed = Date.now() - this._waitUntilCycle.startedAt
|
|
207
|
+
const maxWaitMs = this.options.waitUntilMaxWaitMs ?? WAITUNTIL_MAX_WAIT_MS
|
|
208
|
+
const flushNow = elapsed >= maxWaitMs
|
|
209
|
+
|
|
210
|
+
if (this._waitUntilCycle.timer !== undefined) {
|
|
211
|
+
clearTimeout(this._waitUntilCycle.timer)
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
if (flushNow) {
|
|
215
|
+
void this.resolveWaitUntilFlush()
|
|
216
|
+
return
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
const debounceMs = this.options.waitUntilDebounceMs ?? WAITUNTIL_DEBOUNCE_MS
|
|
220
|
+
this._waitUntilCycle.timer = safeSetTimeout(() => {
|
|
221
|
+
void this.resolveWaitUntilFlush()
|
|
222
|
+
}, debounceMs)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private _consumeWaitUntilCycle(): (() => void) | undefined {
|
|
226
|
+
const cycle = this._waitUntilCycle
|
|
227
|
+
if (cycle) {
|
|
228
|
+
clearTimeout(cycle.timer)
|
|
229
|
+
this._waitUntilCycle = undefined
|
|
230
|
+
}
|
|
231
|
+
return cycle?.resolve
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
private async resolveWaitUntilFlush(): Promise<void> {
|
|
235
|
+
const resolve = this._consumeWaitUntilCycle()
|
|
236
|
+
try {
|
|
237
|
+
await super.flush()
|
|
238
|
+
} catch {
|
|
239
|
+
// Flush errors are already logged by flush() internals
|
|
240
|
+
} finally {
|
|
241
|
+
resolve?.()
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
141
245
|
/**
|
|
142
246
|
* Get a persisted property value from memory storage.
|
|
143
247
|
*
|
|
@@ -1592,9 +1696,16 @@ export abstract class PostHogBackendClient extends PostHogCoreStateless implemen
|
|
|
1592
1696
|
* @returns Promise that resolves when shutdown is complete
|
|
1593
1697
|
*/
|
|
1594
1698
|
async _shutdown(shutdownTimeoutMs?: number): Promise<void> {
|
|
1699
|
+
// Cancel any pending debounced flush — shutdown will flush directly.
|
|
1700
|
+
const resolve = this._consumeWaitUntilCycle()
|
|
1701
|
+
|
|
1595
1702
|
this.featureFlagsPoller?.stopPoller(shutdownTimeoutMs)
|
|
1596
1703
|
this.errorTracking.shutdown()
|
|
1597
|
-
|
|
1704
|
+
try {
|
|
1705
|
+
return await super._shutdown(shutdownTimeoutMs)
|
|
1706
|
+
} finally {
|
|
1707
|
+
resolve?.()
|
|
1708
|
+
}
|
|
1598
1709
|
}
|
|
1599
1710
|
|
|
1600
1711
|
private async _requestRemoteConfigPayload(flagKey: string): Promise<PostHogFetchResponse | undefined> {
|
|
@@ -1082,6 +1082,45 @@ function matchProperty(
|
|
|
1082
1082
|
}
|
|
1083
1083
|
return overrideDate > parsedDate
|
|
1084
1084
|
}
|
|
1085
|
+
case 'semver_eq': {
|
|
1086
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1087
|
+
return cmp === 0
|
|
1088
|
+
}
|
|
1089
|
+
case 'semver_neq': {
|
|
1090
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1091
|
+
return cmp !== 0
|
|
1092
|
+
}
|
|
1093
|
+
case 'semver_gt': {
|
|
1094
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1095
|
+
return cmp > 0
|
|
1096
|
+
}
|
|
1097
|
+
case 'semver_gte': {
|
|
1098
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1099
|
+
return cmp >= 0
|
|
1100
|
+
}
|
|
1101
|
+
case 'semver_lt': {
|
|
1102
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1103
|
+
return cmp < 0
|
|
1104
|
+
}
|
|
1105
|
+
case 'semver_lte': {
|
|
1106
|
+
const cmp = compareSemverTuples(parseSemver(String(overrideValue)), parseSemver(String(value)))
|
|
1107
|
+
return cmp <= 0
|
|
1108
|
+
}
|
|
1109
|
+
case 'semver_tilde': {
|
|
1110
|
+
const overrideParsed = parseSemver(String(overrideValue))
|
|
1111
|
+
const { lower, upper } = computeTildeBounds(String(value))
|
|
1112
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0
|
|
1113
|
+
}
|
|
1114
|
+
case 'semver_caret': {
|
|
1115
|
+
const overrideParsed = parseSemver(String(overrideValue))
|
|
1116
|
+
const { lower, upper } = computeCaretBounds(String(value))
|
|
1117
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0
|
|
1118
|
+
}
|
|
1119
|
+
case 'semver_wildcard': {
|
|
1120
|
+
const overrideParsed = parseSemver(String(overrideValue))
|
|
1121
|
+
const { lower, upper } = computeWildcardBounds(String(value))
|
|
1122
|
+
return compareSemverTuples(overrideParsed, lower) >= 0 && compareSemverTuples(overrideParsed, upper) < 0
|
|
1123
|
+
}
|
|
1085
1124
|
default:
|
|
1086
1125
|
throw new InconclusiveMatchError(`Unknown operator: ${operator}`)
|
|
1087
1126
|
}
|
|
@@ -1233,6 +1272,132 @@ function isValidRegex(regex: string): boolean {
|
|
|
1233
1272
|
}
|
|
1234
1273
|
}
|
|
1235
1274
|
|
|
1275
|
+
type SemverTuple = [number, number, number]
|
|
1276
|
+
|
|
1277
|
+
/**
|
|
1278
|
+
* Parse a version string into a [major, minor, patch] tuple.
|
|
1279
|
+
* - Strips leading/trailing whitespace
|
|
1280
|
+
* - Strips 'v' or 'V' prefix
|
|
1281
|
+
* - Strips pre-release and build metadata (-alpha, +build)
|
|
1282
|
+
* - Defaults missing components to 0
|
|
1283
|
+
* - Ignores extra components beyond the third
|
|
1284
|
+
* - Throws InconclusiveMatchError for invalid input
|
|
1285
|
+
*/
|
|
1286
|
+
function parseSemver(value: string): SemverTuple {
|
|
1287
|
+
const text = String(value).trim().replace(/^[vV]/, '')
|
|
1288
|
+
|
|
1289
|
+
// Strip pre-release and build metadata
|
|
1290
|
+
const baseVersion = text.split('-')[0].split('+')[0]
|
|
1291
|
+
|
|
1292
|
+
if (!baseVersion || baseVersion.startsWith('.')) {
|
|
1293
|
+
throw new InconclusiveMatchError(`Invalid semver: ${value}`)
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
const parts = baseVersion.split('.')
|
|
1297
|
+
|
|
1298
|
+
const parsePart = (part: string | undefined): number => {
|
|
1299
|
+
if (part === undefined || part === '') {
|
|
1300
|
+
return 0
|
|
1301
|
+
}
|
|
1302
|
+
if (!/^\d+$/.test(part)) {
|
|
1303
|
+
throw new InconclusiveMatchError(`Invalid semver: ${value}`)
|
|
1304
|
+
}
|
|
1305
|
+
return parseInt(part, 10)
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
const major = parsePart(parts[0])
|
|
1309
|
+
const minor = parsePart(parts[1])
|
|
1310
|
+
const patch = parsePart(parts[2])
|
|
1311
|
+
|
|
1312
|
+
return [major, minor, patch]
|
|
1313
|
+
}
|
|
1314
|
+
|
|
1315
|
+
/**
|
|
1316
|
+
* Compare two semver tuples.
|
|
1317
|
+
* Returns -1 if a < b, 0 if a == b, 1 if a > b
|
|
1318
|
+
*/
|
|
1319
|
+
function compareSemverTuples(a: SemverTuple, b: SemverTuple): number {
|
|
1320
|
+
for (let i = 0; i < 3; i++) {
|
|
1321
|
+
if (a[i] < b[i]) return -1
|
|
1322
|
+
if (a[i] > b[i]) return 1
|
|
1323
|
+
}
|
|
1324
|
+
return 0
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* Compute bounds for tilde operator: ~X.Y.Z means >=X.Y.Z and <X.(Y+1).0
|
|
1329
|
+
*/
|
|
1330
|
+
function computeTildeBounds(value: string): { lower: SemverTuple; upper: SemverTuple } {
|
|
1331
|
+
const parsed = parseSemver(value)
|
|
1332
|
+
const lower: SemverTuple = [parsed[0], parsed[1], parsed[2]]
|
|
1333
|
+
const upper: SemverTuple = [parsed[0], parsed[1] + 1, 0]
|
|
1334
|
+
return { lower, upper }
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
/**
|
|
1338
|
+
* Compute bounds for caret operator:
|
|
1339
|
+
* - ^X.Y.Z where X > 0: >=X.Y.Z <(X+1).0.0
|
|
1340
|
+
* - ^0.Y.Z where Y > 0: >=0.Y.Z <0.(Y+1).0
|
|
1341
|
+
* - ^0.0.Z: >=0.0.Z <0.0.(Z+1)
|
|
1342
|
+
*/
|
|
1343
|
+
function computeCaretBounds(value: string): { lower: SemverTuple; upper: SemverTuple } {
|
|
1344
|
+
const parsed = parseSemver(value)
|
|
1345
|
+
const [major, minor, patch] = parsed
|
|
1346
|
+
const lower: SemverTuple = [major, minor, patch]
|
|
1347
|
+
|
|
1348
|
+
let upper: SemverTuple
|
|
1349
|
+
if (major > 0) {
|
|
1350
|
+
upper = [major + 1, 0, 0]
|
|
1351
|
+
} else if (minor > 0) {
|
|
1352
|
+
upper = [0, minor + 1, 0]
|
|
1353
|
+
} else {
|
|
1354
|
+
upper = [0, 0, patch + 1]
|
|
1355
|
+
}
|
|
1356
|
+
|
|
1357
|
+
return { lower, upper }
|
|
1358
|
+
}
|
|
1359
|
+
|
|
1360
|
+
/**
|
|
1361
|
+
* Compute bounds for wildcard operator:
|
|
1362
|
+
* - "X.*" or "X" with wildcard: >=X.0.0 <(X+1).0.0
|
|
1363
|
+
* - "X.Y.*": >=X.Y.0 <X.(Y+1).0
|
|
1364
|
+
*/
|
|
1365
|
+
function computeWildcardBounds(value: string): { lower: SemverTuple; upper: SemverTuple } {
|
|
1366
|
+
const text = String(value).trim().replace(/^[vV]/, '')
|
|
1367
|
+
|
|
1368
|
+
// Remove trailing .* or *
|
|
1369
|
+
const cleanedText = text.replace(/\.\*$/, '').replace(/\*$/, '')
|
|
1370
|
+
|
|
1371
|
+
if (!cleanedText) {
|
|
1372
|
+
throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`)
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
const parts = cleanedText.split('.')
|
|
1376
|
+
const major = parseInt(parts[0], 10)
|
|
1377
|
+
if (isNaN(major)) {
|
|
1378
|
+
throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`)
|
|
1379
|
+
}
|
|
1380
|
+
|
|
1381
|
+
let lower: SemverTuple
|
|
1382
|
+
let upper: SemverTuple
|
|
1383
|
+
|
|
1384
|
+
if (parts.length === 1) {
|
|
1385
|
+
// X.* pattern
|
|
1386
|
+
lower = [major, 0, 0]
|
|
1387
|
+
upper = [major + 1, 0, 0]
|
|
1388
|
+
} else {
|
|
1389
|
+
// X.Y.* pattern
|
|
1390
|
+
const minor = parseInt(parts[1], 10)
|
|
1391
|
+
if (isNaN(minor)) {
|
|
1392
|
+
throw new InconclusiveMatchError(`Invalid wildcard semver: ${value}`)
|
|
1393
|
+
}
|
|
1394
|
+
lower = [major, minor, 0]
|
|
1395
|
+
upper = [major, minor + 1, 0]
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
return { lower, upper }
|
|
1399
|
+
}
|
|
1400
|
+
|
|
1236
1401
|
function convertToDateTime(value: FlagPropertyValue | Date): Date {
|
|
1237
1402
|
if (value instanceof Date) {
|
|
1238
1403
|
return value
|
|
@@ -1288,6 +1453,7 @@ export {
|
|
|
1288
1453
|
FeatureFlagsPoller,
|
|
1289
1454
|
matchProperty,
|
|
1290
1455
|
relativeDateParseForFeatureFlagMatching,
|
|
1456
|
+
parseSemver,
|
|
1291
1457
|
InconclusiveMatchError,
|
|
1292
1458
|
RequiresServerEvaluation,
|
|
1293
1459
|
ClientError,
|
package/src/types.ts
CHANGED
|
@@ -215,6 +215,35 @@ export type PostHogOptions = Omit<PostHogCoreOptions, 'before_send'> & {
|
|
|
215
215
|
* @default false
|
|
216
216
|
*/
|
|
217
217
|
strictLocalEvaluation?: boolean
|
|
218
|
+
/**
|
|
219
|
+
* Provides the API to extend the lifetime of a serverless invocation until
|
|
220
|
+
* background work (like flushing analytics events) completes after the response
|
|
221
|
+
* is sent.
|
|
222
|
+
*
|
|
223
|
+
* @experimental Subject to change in a minor release.
|
|
224
|
+
*
|
|
225
|
+
* @example
|
|
226
|
+
* // Vercel
|
|
227
|
+
* import { waitUntil } from '@vercel/functions'
|
|
228
|
+
* new PostHog('key', { waitUntil })
|
|
229
|
+
*/
|
|
230
|
+
waitUntil?: (promise: Promise<unknown>) => void
|
|
231
|
+
/**
|
|
232
|
+
* Debounce interval in milliseconds for the `waitUntil`-based flush.
|
|
233
|
+
* After the last event is enqueued, the SDK waits this long before flushing.
|
|
234
|
+
*
|
|
235
|
+
* @experimental Subject to change in a minor release.
|
|
236
|
+
* @default 50
|
|
237
|
+
*/
|
|
238
|
+
waitUntilDebounceMs?: number
|
|
239
|
+
/**
|
|
240
|
+
* Maximum time in milliseconds to debounce before forcing a flush.
|
|
241
|
+
* Prevents starvation from rapid concurrent captures.
|
|
242
|
+
*
|
|
243
|
+
* @experimental Subject to change in a minor release.
|
|
244
|
+
* @default 500
|
|
245
|
+
*/
|
|
246
|
+
waitUntilMaxWaitMs?: number
|
|
218
247
|
}
|
|
219
248
|
|
|
220
249
|
export type PostHogFeatureFlag = {
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '5.
|
|
1
|
+
export const version = '5.27.1'
|