@zuplo/cli 7.8.4 → 7.8.6
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/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.d.ts +12 -1
- package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.js +16 -2
- package/node_modules/@posthog/core/dist/featureFlagLocalEvaluation.mjs +14 -3
- package/node_modules/@posthog/core/dist/index.d.ts +1 -1
- package/node_modules/@posthog/core/dist/index.d.ts.map +1 -1
- package/node_modules/@posthog/core/dist/index.js +15 -6
- package/node_modules/@posthog/core/dist/index.mjs +1 -1
- package/node_modules/@posthog/core/package.json +2 -2
- package/node_modules/@posthog/core/src/featureFlagLocalEvaluation.ts +45 -2
- package/node_modules/@posthog/core/src/index.ts +1 -0
- package/node_modules/@zuplo/core/package.json +1 -1
- package/node_modules/@zuplo/graphql/package.json +1 -1
- package/node_modules/@zuplo/openapi-tools/package.json +1 -1
- package/node_modules/@zuplo/otel/package.json +1 -1
- package/node_modules/@zuplo/runtime/package.json +1 -1
- package/package.json +12 -12
|
@@ -29,7 +29,18 @@ export declare function parseFeatureFlagSemver(value: string, parsingPolicy?: Fe
|
|
|
29
29
|
export declare function relativeDateParseForFeatureFlagMatching(value: string): Date | null;
|
|
30
30
|
export declare function matchFeatureFlagProperty(property: FeatureFlagProperty, propertyValues: Record<string, any>, options?: MatchFeatureFlagPropertyOptions): boolean;
|
|
31
31
|
export declare function hashSHA1(text: string): Promise<string>;
|
|
32
|
-
export declare function getFeatureFlagHash(key: string, bucketingValue: string, salt?: string): Promise<number>;
|
|
32
|
+
export declare function getFeatureFlagHash(key: string, bucketingValue: string, salt?: string, separator?: string): Promise<number>;
|
|
33
|
+
/**
|
|
34
|
+
* The `holdout-<id>` variant this bucketing value is held out into, or undefined.
|
|
35
|
+
*
|
|
36
|
+
* The separator is the whole point: the server hashes `holdout-<value>`, while flag rollout
|
|
37
|
+
* hashing joins with a dot. Taking the default separator here would still look uniform and
|
|
38
|
+
* deterministic while holding out a different set of people than the server does.
|
|
39
|
+
*/
|
|
40
|
+
export declare function getHoldoutVariant(holdout: {
|
|
41
|
+
id: number;
|
|
42
|
+
exclusion_percentage: number;
|
|
43
|
+
} | null | undefined, bucketingValue: string): Promise<string | undefined>;
|
|
33
44
|
export declare function getFeatureFlagVariantLookupTable(variants: readonly FeatureFlagVariant[]): FeatureFlagVariantLookupEntry[];
|
|
34
45
|
export declare function getFeatureFlagVariant(key: string, bucketingValue: string, variants: readonly FeatureFlagVariant[]): Promise<string | undefined>;
|
|
35
46
|
export declare function resolveFeatureFlagPayload(payloads: Readonly<Record<string, JsonType | undefined>> | null | undefined, flagValue: FeatureFlagValue | null | undefined): JsonType | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;IACpD,mGAAmG;IACnG,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,EAAE,MAAM,EAI1B;CACF;AAsLD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAwKT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"featureFlagLocalEvaluation.d.ts","sourceRoot":"","sources":["../src/featureFlagLocalEvaluation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD,MAAM,MAAM,wBAAwB,GAAG,QAAQ,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,wBAAwB,CAAA;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG,QAAQ,GAAG,mBAAmB,CAAA;AAE3E,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,mBAAmB,CAAC,EAAE,8BAA8B,CAAA;IACpD,mGAAmG;IACnG,uBAAuB,CAAC,EAAE,MAAM,CAAA;CACjC,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,kBAAkB,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AASD,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,YAAY,OAAO,EAAE,MAAM,EAI1B;CACF;AAsLD,KAAK,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAa3C,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,aAAa,GAAE,8BAAyC,GACvD,WAAW,CAeb;AAwED,wBAAgB,uCAAuC,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAmBlF;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACnC,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAwKT;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ5D;AAED,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,IAAI,GAAE,MAAW,EACjB,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,MAAM,CAAC,CAGjB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,EACxE,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA0B7B;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,6BAA6B,EAAE,CASjC;AAED,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,MAAM,EACX,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,SAAS,kBAAkB,EAAE,GACtC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAK7B;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,EAC3E,SAAS,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,GAC7C,QAAQ,GAAG,IAAI,CAMjB"}
|
|
@@ -32,6 +32,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
32
32
|
getFeatureFlagHash: ()=>getFeatureFlagHash,
|
|
33
33
|
getFeatureFlagVariant: ()=>getFeatureFlagVariant,
|
|
34
34
|
getFeatureFlagVariantLookupTable: ()=>getFeatureFlagVariantLookupTable,
|
|
35
|
+
getHoldoutVariant: ()=>getHoldoutVariant,
|
|
35
36
|
hashSHA1: ()=>hashSHA1,
|
|
36
37
|
matchFeatureFlagProperty: ()=>matchFeatureFlagProperty,
|
|
37
38
|
parseFeatureFlagSemver: ()=>parseFeatureFlagSemver,
|
|
@@ -444,10 +445,21 @@ async function hashSHA1(text) {
|
|
|
444
445
|
const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text));
|
|
445
446
|
return Array.from(new Uint8Array(hashBuffer)).map((byte)=>byte.toString(16).padStart(2, '0')).join('');
|
|
446
447
|
}
|
|
447
|
-
async function getFeatureFlagHash(key, bucketingValue, salt = '') {
|
|
448
|
-
const hashString = await hashSHA1(`${key}
|
|
448
|
+
async function getFeatureFlagHash(key, bucketingValue, salt = '', separator = '.') {
|
|
449
|
+
const hashString = await hashSHA1(`${key}${separator}${bucketingValue}${salt}`);
|
|
449
450
|
return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE;
|
|
450
451
|
}
|
|
452
|
+
async function getHoldoutVariant(holdout, bucketingValue) {
|
|
453
|
+
if (null == holdout || null == holdout.id || null == holdout.exclusion_percentage) return;
|
|
454
|
+
const rawPercentage = Number(holdout.exclusion_percentage);
|
|
455
|
+
if (!Number.isFinite(rawPercentage)) return;
|
|
456
|
+
const percentage = Math.min(Math.max(rawPercentage, 0), 100);
|
|
457
|
+
if (100 !== percentage) {
|
|
458
|
+
const hash = await getFeatureFlagHash('holdout', bucketingValue, '', '-');
|
|
459
|
+
if (hash > percentage / 100) return;
|
|
460
|
+
}
|
|
461
|
+
return `holdout-${holdout.id}`;
|
|
462
|
+
}
|
|
451
463
|
function getFeatureFlagVariantLookupTable(variants) {
|
|
452
464
|
const table = [];
|
|
453
465
|
let valueMin = 0;
|
|
@@ -476,6 +488,7 @@ exports.InconclusiveMatchError = __webpack_exports__.InconclusiveMatchError;
|
|
|
476
488
|
exports.getFeatureFlagHash = __webpack_exports__.getFeatureFlagHash;
|
|
477
489
|
exports.getFeatureFlagVariant = __webpack_exports__.getFeatureFlagVariant;
|
|
478
490
|
exports.getFeatureFlagVariantLookupTable = __webpack_exports__.getFeatureFlagVariantLookupTable;
|
|
491
|
+
exports.getHoldoutVariant = __webpack_exports__.getHoldoutVariant;
|
|
479
492
|
exports.hashSHA1 = __webpack_exports__.hashSHA1;
|
|
480
493
|
exports.matchFeatureFlagProperty = __webpack_exports__.matchFeatureFlagProperty;
|
|
481
494
|
exports.parseFeatureFlagSemver = __webpack_exports__.parseFeatureFlagSemver;
|
|
@@ -486,6 +499,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
486
499
|
"getFeatureFlagHash",
|
|
487
500
|
"getFeatureFlagVariant",
|
|
488
501
|
"getFeatureFlagVariantLookupTable",
|
|
502
|
+
"getHoldoutVariant",
|
|
489
503
|
"hashSHA1",
|
|
490
504
|
"matchFeatureFlagProperty",
|
|
491
505
|
"parseFeatureFlagSemver",
|
|
@@ -404,10 +404,21 @@ async function hashSHA1(text) {
|
|
|
404
404
|
const hashBuffer = await subtle.digest('SHA-1', new TextEncoder().encode(text));
|
|
405
405
|
return Array.from(new Uint8Array(hashBuffer)).map((byte)=>byte.toString(16).padStart(2, '0')).join('');
|
|
406
406
|
}
|
|
407
|
-
async function getFeatureFlagHash(key, bucketingValue, salt = '') {
|
|
408
|
-
const hashString = await hashSHA1(`${key}
|
|
407
|
+
async function getFeatureFlagHash(key, bucketingValue, salt = '', separator = '.') {
|
|
408
|
+
const hashString = await hashSHA1(`${key}${separator}${bucketingValue}${salt}`);
|
|
409
409
|
return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE;
|
|
410
410
|
}
|
|
411
|
+
async function getHoldoutVariant(holdout, bucketingValue) {
|
|
412
|
+
if (null == holdout || null == holdout.id || null == holdout.exclusion_percentage) return;
|
|
413
|
+
const rawPercentage = Number(holdout.exclusion_percentage);
|
|
414
|
+
if (!Number.isFinite(rawPercentage)) return;
|
|
415
|
+
const percentage = Math.min(Math.max(rawPercentage, 0), 100);
|
|
416
|
+
if (100 !== percentage) {
|
|
417
|
+
const hash = await getFeatureFlagHash('holdout', bucketingValue, '', '-');
|
|
418
|
+
if (hash > percentage / 100) return;
|
|
419
|
+
}
|
|
420
|
+
return `holdout-${holdout.id}`;
|
|
421
|
+
}
|
|
411
422
|
function getFeatureFlagVariantLookupTable(variants) {
|
|
412
423
|
const table = [];
|
|
413
424
|
let valueMin = 0;
|
|
@@ -432,4 +443,4 @@ function resolveFeatureFlagPayload(payloads, flagValue) {
|
|
|
432
443
|
const payload = payloads[payloadKey] || null;
|
|
433
444
|
return null == payload ? null : parsePayload(payload);
|
|
434
445
|
}
|
|
435
|
-
export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload };
|
|
446
|
+
export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getHoldoutVariant, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { getFeatureFlagValue, getEnabledFromValue, getVariantFromValue, parsePayload, flagDetailsToResults, MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, minimizeFlagCalledEventProperties, } from './featureFlagUtils';
|
|
2
|
-
export { getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, InconclusiveMatchError, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, } from './featureFlagLocalEvaluation';
|
|
2
|
+
export { getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getHoldoutVariant, hashSHA1, InconclusiveMatchError, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload, } from './featureFlagLocalEvaluation';
|
|
3
3
|
export type { FeatureFlagProperty, FeatureFlagPropertyValue, FeatureFlagSemverParsingPolicy, FeatureFlagVariant, FeatureFlagVariantLookupEntry, MatchFeatureFlagPropertyOptions, } from './featureFlagLocalEvaluation';
|
|
4
4
|
export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError, } from './gzip';
|
|
5
5
|
export * from './utils';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG/F,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClE,YAAY,EACV,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,6CAA6C,EAC7C,iCAAiC,GAClC,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,gCAAgC,EAChC,iBAAiB,EACjB,QAAQ,EACR,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,uCAAuC,EACvC,yBAAyB,GAC1B,MAAM,8BAA8B,CAAA;AACrC,YAAY,EACV,mBAAmB,EACnB,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAClB,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,8BAA8B,CAAA;AACrC,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,eAAe,EACf,sBAAsB,EACtB,0BAA0B,GAC3B,MAAM,QAAQ,CAAA;AACf,cAAc,SAAS,CAAA;AACvB,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAA;AACjD,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AACpC,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,yBAAyB,GAC1B,MAAM,cAAc,CAAA;AAIrB,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAGzG,YAAY,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAA;AAClB,YAAY,EACV,WAAW,EACX,oBAAoB,EACpB,4BAA4B,EAC5B,uBAAuB,GACxB,MAAM,WAAW,CAAA;AAElB,YAAY,EACV,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,OAAO,EACP,aAAa,GACd,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,YAAY,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAG/F,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAClE,YAAY,EACV,IAAI,EACJ,cAAc,EACd,kBAAkB,EAClB,QAAQ,EACR,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,GACb,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,cAAc,UAAU,CAAA;AACxB,cAAc,gBAAgB,CAAA;AAC9B,cAAc,0BAA0B,CAAA;AACxC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA"}
|
|
@@ -141,9 +141,10 @@ var __webpack_exports__ = {};
|
|
|
141
141
|
"getEnabledFromValue",
|
|
142
142
|
"parsePayload",
|
|
143
143
|
"isNativeAsyncGzipError",
|
|
144
|
+
"getHoldoutVariant",
|
|
144
145
|
"buildResourceAttributes",
|
|
145
|
-
"resolveMetricsConfig",
|
|
146
146
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
147
|
+
"resolveMetricsConfig",
|
|
147
148
|
"runWithActiveSpan",
|
|
148
149
|
"toOtlpAnyValue",
|
|
149
150
|
"PostHogLogs",
|
|
@@ -204,9 +205,10 @@ var __webpack_exports__ = {};
|
|
|
204
205
|
"getEnabledFromValue",
|
|
205
206
|
"parsePayload",
|
|
206
207
|
"isNativeAsyncGzipError",
|
|
208
|
+
"getHoldoutVariant",
|
|
207
209
|
"buildResourceAttributes",
|
|
208
|
-
"resolveMetricsConfig",
|
|
209
210
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
211
|
+
"resolveMetricsConfig",
|
|
210
212
|
"runWithActiveSpan",
|
|
211
213
|
"toOtlpAnyValue",
|
|
212
214
|
"PostHogLogs",
|
|
@@ -256,9 +258,10 @@ var __webpack_exports__ = {};
|
|
|
256
258
|
"getEnabledFromValue",
|
|
257
259
|
"parsePayload",
|
|
258
260
|
"isNativeAsyncGzipError",
|
|
261
|
+
"getHoldoutVariant",
|
|
259
262
|
"buildResourceAttributes",
|
|
260
|
-
"resolveMetricsConfig",
|
|
261
263
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
264
|
+
"resolveMetricsConfig",
|
|
262
265
|
"runWithActiveSpan",
|
|
263
266
|
"toOtlpAnyValue",
|
|
264
267
|
"PostHogLogs",
|
|
@@ -308,9 +311,10 @@ var __webpack_exports__ = {};
|
|
|
308
311
|
"getEnabledFromValue",
|
|
309
312
|
"parsePayload",
|
|
310
313
|
"isNativeAsyncGzipError",
|
|
314
|
+
"getHoldoutVariant",
|
|
311
315
|
"buildResourceAttributes",
|
|
312
|
-
"resolveMetricsConfig",
|
|
313
316
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
317
|
+
"resolveMetricsConfig",
|
|
314
318
|
"runWithActiveSpan",
|
|
315
319
|
"toOtlpAnyValue",
|
|
316
320
|
"PostHogLogs",
|
|
@@ -360,9 +364,10 @@ var __webpack_exports__ = {};
|
|
|
360
364
|
"getEnabledFromValue",
|
|
361
365
|
"parsePayload",
|
|
362
366
|
"isNativeAsyncGzipError",
|
|
367
|
+
"getHoldoutVariant",
|
|
363
368
|
"buildResourceAttributes",
|
|
364
|
-
"resolveMetricsConfig",
|
|
365
369
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
370
|
+
"resolveMetricsConfig",
|
|
366
371
|
"runWithActiveSpan",
|
|
367
372
|
"toOtlpAnyValue",
|
|
368
373
|
"PostHogLogs",
|
|
@@ -412,9 +417,10 @@ var __webpack_exports__ = {};
|
|
|
412
417
|
"getEnabledFromValue",
|
|
413
418
|
"parsePayload",
|
|
414
419
|
"isNativeAsyncGzipError",
|
|
420
|
+
"getHoldoutVariant",
|
|
415
421
|
"buildResourceAttributes",
|
|
416
|
-
"resolveMetricsConfig",
|
|
417
422
|
"MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES",
|
|
423
|
+
"resolveMetricsConfig",
|
|
418
424
|
"runWithActiveSpan",
|
|
419
425
|
"toOtlpAnyValue",
|
|
420
426
|
"PostHogLogs",
|
|
@@ -458,6 +464,7 @@ var __webpack_exports__ = {};
|
|
|
458
464
|
getFeatureFlagValue: ()=>_featureFlagUtils__rspack_import_0.getFeatureFlagValue,
|
|
459
465
|
getFeatureFlagVariant: ()=>_featureFlagLocalEvaluation__rspack_import_1.getFeatureFlagVariant,
|
|
460
466
|
getFeatureFlagVariantLookupTable: ()=>_featureFlagLocalEvaluation__rspack_import_1.getFeatureFlagVariantLookupTable,
|
|
467
|
+
getHoldoutVariant: ()=>_featureFlagLocalEvaluation__rspack_import_1.getHoldoutVariant,
|
|
461
468
|
getLengthFromRules: ()=>_surveys_validation__rspack_import_20.getLengthFromRules,
|
|
462
469
|
getOtlpSeverityNumber: ()=>_logs_logs_utils__rspack_import_5.getOtlpSeverityNumber,
|
|
463
470
|
getOtlpSeverityText: ()=>_logs_logs_utils__rspack_import_5.getOtlpSeverityText,
|
|
@@ -506,6 +513,7 @@ exports.getFeatureFlagHash = __webpack_exports__.getFeatureFlagHash;
|
|
|
506
513
|
exports.getFeatureFlagValue = __webpack_exports__.getFeatureFlagValue;
|
|
507
514
|
exports.getFeatureFlagVariant = __webpack_exports__.getFeatureFlagVariant;
|
|
508
515
|
exports.getFeatureFlagVariantLookupTable = __webpack_exports__.getFeatureFlagVariantLookupTable;
|
|
516
|
+
exports.getHoldoutVariant = __webpack_exports__.getHoldoutVariant;
|
|
509
517
|
exports.getLengthFromRules = __webpack_exports__.getLengthFromRules;
|
|
510
518
|
exports.getOtlpSeverityNumber = __webpack_exports__.getOtlpSeverityNumber;
|
|
511
519
|
exports.getOtlpSeverityText = __webpack_exports__.getOtlpSeverityText;
|
|
@@ -553,6 +561,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
553
561
|
"getFeatureFlagValue",
|
|
554
562
|
"getFeatureFlagVariant",
|
|
555
563
|
"getFeatureFlagVariantLookupTable",
|
|
564
|
+
"getHoldoutVariant",
|
|
556
565
|
"getLengthFromRules",
|
|
557
566
|
"getOtlpSeverityNumber",
|
|
558
567
|
"getOtlpSeverityText",
|
|
@@ -6,7 +6,7 @@ export * from "./posthog-core-stateless.mjs";
|
|
|
6
6
|
export * from "./tracing-headers.mjs";
|
|
7
7
|
export * from "./types.mjs";
|
|
8
8
|
export { MINIMAL_FLAG_CALLED_EVENT_CAMPAIGN_PROPERTIES, flagDetailsToResults, getEnabledFromValue, getFeatureFlagValue, getVariantFromValue, minimizeFlagCalledEventProperties, parsePayload } from "./featureFlagUtils.mjs";
|
|
9
|
-
export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload } from "./featureFlagLocalEvaluation.mjs";
|
|
9
|
+
export { InconclusiveMatchError, getFeatureFlagHash, getFeatureFlagVariant, getFeatureFlagVariantLookupTable, getHoldoutVariant, hashSHA1, matchFeatureFlagProperty, parseFeatureFlagSemver, relativeDateParseForFeatureFlagMatching, resolveFeatureFlagPayload } from "./featureFlagLocalEvaluation.mjs";
|
|
10
10
|
export { gzipCompress, isGzipData, isGzipRequest, isGzipSupported, isNativeAsyncGzipError, isNativeAsyncGzipReadError } from "./gzip.mjs";
|
|
11
11
|
export { buildOtlpLogRecord, buildOtlpLogsPayload, buildResourceAttributes, getOtlpSeverityNumber, getOtlpSeverityText } from "./logs/logs-utils.mjs";
|
|
12
12
|
export { toOtlpAnyValue, toOtlpKeyValueList } from "./utils/otlp-any-value.mjs";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@posthog/core",
|
|
3
|
-
"version": "1.55.
|
|
3
|
+
"version": "1.55.2",
|
|
4
4
|
"bugs": {
|
|
5
5
|
"url": "https://github.com/PostHog/posthog-js/issues"
|
|
6
6
|
},
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
}
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
|
-
"@posthog/types": "^1.412.
|
|
73
|
+
"@posthog/types": "^1.412.4"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"@rslib/core": "0.23.2",
|
|
@@ -532,11 +532,54 @@ export async function hashSHA1(text: string): Promise<string> {
|
|
|
532
532
|
.join('')
|
|
533
533
|
}
|
|
534
534
|
|
|
535
|
-
export async function getFeatureFlagHash(
|
|
536
|
-
|
|
535
|
+
export async function getFeatureFlagHash(
|
|
536
|
+
key: string,
|
|
537
|
+
bucketingValue: string,
|
|
538
|
+
salt: string = '',
|
|
539
|
+
separator: string = '.'
|
|
540
|
+
): Promise<number> {
|
|
541
|
+
const hashString = await hashSHA1(`${key}${separator}${bucketingValue}${salt}`)
|
|
537
542
|
return parseInt(hashString.slice(0, 15), 16) / LONG_SCALE
|
|
538
543
|
}
|
|
539
544
|
|
|
545
|
+
/**
|
|
546
|
+
* The `holdout-<id>` variant this bucketing value is held out into, or undefined.
|
|
547
|
+
*
|
|
548
|
+
* The separator is the whole point: the server hashes `holdout-<value>`, while flag rollout
|
|
549
|
+
* hashing joins with a dot. Taking the default separator here would still look uniform and
|
|
550
|
+
* deterministic while holding out a different set of people than the server does.
|
|
551
|
+
*/
|
|
552
|
+
export async function getHoldoutVariant(
|
|
553
|
+
holdout: { id: number; exclusion_percentage: number } | null | undefined,
|
|
554
|
+
bucketingValue: string
|
|
555
|
+
): Promise<string | undefined> {
|
|
556
|
+
// Loose null checks on purpose: the payload can carry an explicit null for either field, and
|
|
557
|
+
// a null id would otherwise reach the template below and produce the variant `holdout-null`.
|
|
558
|
+
if (holdout == null || holdout.id == null || holdout.exclusion_percentage == null) {
|
|
559
|
+
return undefined
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// A non-numeric percentage would clamp to NaN, and `hash > NaN` is false for every hash, which
|
|
563
|
+
// holds out everyone. The server deserializes this field as a float, so it rejects the value
|
|
564
|
+
// instead; treat it as no holdout rather than the most damaging reading.
|
|
565
|
+
const rawPercentage = Number(holdout.exclusion_percentage)
|
|
566
|
+
if (!Number.isFinite(rawPercentage)) {
|
|
567
|
+
return undefined
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
// Clamped because the server clamps rather than rejects. The 100 short-circuit mirrors the
|
|
571
|
+
// server's is_in_rollout and skips a digest that cannot change the answer.
|
|
572
|
+
const percentage = Math.min(Math.max(rawPercentage, 0), 100)
|
|
573
|
+
if (percentage !== 100) {
|
|
574
|
+
const hash = await getFeatureFlagHash('holdout', bucketingValue, '', '-')
|
|
575
|
+
if (hash > percentage / 100) {
|
|
576
|
+
return undefined
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
return `holdout-${holdout.id}`
|
|
581
|
+
}
|
|
582
|
+
|
|
540
583
|
export function getFeatureFlagVariantLookupTable(
|
|
541
584
|
variants: readonly FeatureFlagVariant[]
|
|
542
585
|
): FeatureFlagVariantLookupEntry[] {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zuplo/cli",
|
|
3
|
-
"version": "7.8.
|
|
3
|
+
"version": "7.8.6",
|
|
4
4
|
"repository": "https://github.com/zuplo/zuplo",
|
|
5
5
|
"author": "Zuplo, Inc.",
|
|
6
6
|
"type": "module",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"@opentelemetry/api": "1.9.0",
|
|
29
29
|
"@opentelemetry/api-logs": "0.220.0",
|
|
30
30
|
"@swc/core": "1.10.18",
|
|
31
|
-
"@zuplo/core": "7.8.
|
|
31
|
+
"@zuplo/core": "7.8.6",
|
|
32
32
|
"@zuplo/editor": "1.0.33162667821",
|
|
33
|
-
"@zuplo/openapi-tools": "7.8.
|
|
34
|
-
"@zuplo/runtime": "7.8.
|
|
33
|
+
"@zuplo/openapi-tools": "7.8.6",
|
|
34
|
+
"@zuplo/runtime": "7.8.6",
|
|
35
35
|
"chalk": "5.4.1",
|
|
36
36
|
"chokidar": "3.5.3",
|
|
37
37
|
"cookie": "1.0.2",
|
|
@@ -59,18 +59,18 @@
|
|
|
59
59
|
"strip-ansi": "7.1.0",
|
|
60
60
|
"tar": "7.5.22",
|
|
61
61
|
"undici": "7.29.0",
|
|
62
|
-
"workerd": "1.
|
|
62
|
+
"workerd": "1.20250821.0",
|
|
63
63
|
"yargs": "17.7.2",
|
|
64
64
|
"zod": "4.4.3",
|
|
65
|
-
"@zuplo/graphql": "7.8.
|
|
66
|
-
"@zuplo/otel": "7.8.
|
|
65
|
+
"@zuplo/graphql": "7.8.6",
|
|
66
|
+
"@zuplo/otel": "7.8.6"
|
|
67
67
|
},
|
|
68
68
|
"optionalDependencies": {
|
|
69
|
-
"@zuplo/lint-darwin-arm64": "7.8.
|
|
70
|
-
"@zuplo/lint-darwin-x64": "7.8.
|
|
71
|
-
"@zuplo/lint-linux-x64": "7.8.
|
|
72
|
-
"@zuplo/lint-linux-arm64": "7.8.
|
|
73
|
-
"@zuplo/lint-win32-x64": "7.8.
|
|
69
|
+
"@zuplo/lint-darwin-arm64": "7.8.6",
|
|
70
|
+
"@zuplo/lint-darwin-x64": "7.8.6",
|
|
71
|
+
"@zuplo/lint-linux-x64": "7.8.6",
|
|
72
|
+
"@zuplo/lint-linux-arm64": "7.8.6",
|
|
73
|
+
"@zuplo/lint-win32-x64": "7.8.6"
|
|
74
74
|
},
|
|
75
75
|
"bundleDependencies": [
|
|
76
76
|
"@inquirer/prompts",
|