@launchdarkly/js-client-sdk-common 1.12.6 → 1.13.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/CHANGELOG.md +15 -0
- package/dist/cjs/HookRunner.d.ts +2 -1
- package/dist/cjs/HookRunner.d.ts.map +1 -1
- package/dist/cjs/LDClientImpl.d.ts +2 -1
- package/dist/cjs/LDClientImpl.d.ts.map +1 -1
- package/dist/cjs/api/integrations/Hooks.d.ts +29 -0
- package/dist/cjs/api/integrations/Hooks.d.ts.map +1 -1
- package/dist/cjs/configuration/Configuration.d.ts +7 -1
- package/dist/cjs/configuration/Configuration.d.ts.map +1 -1
- package/dist/cjs/index.cjs +78 -4
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/index.d.ts.map +1 -1
- package/dist/cjs/plugins/createPluginEnvironmentMetadata.d.ts +4 -0
- package/dist/cjs/plugins/createPluginEnvironmentMetadata.d.ts.map +1 -0
- package/dist/esm/HookRunner.d.ts +2 -1
- package/dist/esm/HookRunner.d.ts.map +1 -1
- package/dist/esm/LDClientImpl.d.ts +2 -1
- package/dist/esm/LDClientImpl.d.ts.map +1 -1
- package/dist/esm/api/integrations/Hooks.d.ts +29 -0
- package/dist/esm/api/integrations/Hooks.d.ts.map +1 -1
- package/dist/esm/configuration/Configuration.d.ts +7 -1
- package/dist/esm/configuration/Configuration.d.ts.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.mjs +78 -4
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/plugins/createPluginEnvironmentMetadata.d.ts +4 -0
- package/dist/esm/plugins/createPluginEnvironmentMetadata.d.ts.map +1 -0
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.13.0](https://github.com/launchdarkly/js-core/compare/js-client-sdk-common-v1.12.6...js-client-sdk-common-v1.13.0) (2025-04-29)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* Add client-side SDK plugin support. ([#834](https://github.com/launchdarkly/js-core/issues/834)) ([a843a33](https://github.com/launchdarkly/js-core/commit/a843a33e97dcab706a0034bd1fd1e3d2f78a9262))
|
|
9
|
+
* Add hook support for the track series. ([#827](https://github.com/launchdarkly/js-core/issues/827)) ([1519cb9](https://github.com/launchdarkly/js-core/commit/1519cb98b55f4e6a391da7adefddd8ac90e9258c))
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Dependencies
|
|
13
|
+
|
|
14
|
+
* The following workspace dependencies were updated
|
|
15
|
+
* dependencies
|
|
16
|
+
* @launchdarkly/js-sdk-common bumped from 2.16.0 to 2.17.0
|
|
17
|
+
|
|
3
18
|
## [1.12.6](https://github.com/launchdarkly/js-core/compare/js-client-sdk-common-v1.12.5...js-client-sdk-common-v1.12.6) (2025-04-16)
|
|
4
19
|
|
|
5
20
|
|
package/dist/cjs/HookRunner.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { LDContext, LDLogger } from '@launchdarkly/js-sdk-common';
|
|
2
|
-
import { Hook, IdentifySeriesResult } from './api/integrations/Hooks';
|
|
2
|
+
import { Hook, IdentifySeriesResult, TrackSeriesContext } from './api/integrations/Hooks';
|
|
3
3
|
import { LDEvaluationDetail } from './api/LDEvaluationDetail';
|
|
4
4
|
export default class HookRunner {
|
|
5
5
|
private readonly _logger;
|
|
@@ -8,5 +8,6 @@ export default class HookRunner {
|
|
|
8
8
|
withEvaluation(key: string, context: LDContext | undefined, defaultValue: unknown, method: () => LDEvaluationDetail): LDEvaluationDetail;
|
|
9
9
|
identify(context: LDContext, timeout: number | undefined): (result: IdentifySeriesResult) => void;
|
|
10
10
|
addHook(hook: Hook): void;
|
|
11
|
+
afterTrack(hookContext: TrackSeriesContext): void;
|
|
11
12
|
}
|
|
12
13
|
//# sourceMappingURL=HookRunner.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookRunner.d.ts","sourceRoot":"","sources":["../src/HookRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAGL,IAAI,EAGJ,oBAAoB,
|
|
1
|
+
{"version":3,"file":"HookRunner.d.ts","sourceRoot":"","sources":["../src/HookRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAElE,OAAO,EAGL,IAAI,EAGJ,oBAAoB,EACpB,kBAAkB,EACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA0H9D,MAAM,CAAC,OAAO,OAAO,UAAU;IAI3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAH1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;gBAGlB,OAAO,EAAE,QAAQ,EAClC,YAAY,EAAE,IAAI,EAAE;IAKtB,cAAc,CACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,SAAS,GAAG,SAAS,EAC9B,YAAY,EAAE,OAAO,EACrB,MAAM,EAAE,MAAM,kBAAkB,GAC/B,kBAAkB;IAiBrB,QAAQ,CACN,OAAO,EAAE,SAAS,EAClB,OAAO,EAAE,MAAM,GAAG,SAAS,GAC1B,CAAC,MAAM,EAAE,oBAAoB,KAAK,IAAI;IAYzC,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAIzB,UAAU,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI;CAOlD"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AutoEnvAttributes, Context, internal, LDContext, LDFlagSet, LDFlagValue, LDLogger, Platform } from '@launchdarkly/js-sdk-common';
|
|
1
|
+
import { AutoEnvAttributes, Context, internal, LDContext, LDFlagSet, LDFlagValue, LDLogger, LDPluginEnvironmentMetadata, Platform } from '@launchdarkly/js-sdk-common';
|
|
2
2
|
import { Hook, LDClient, type LDOptions } from './api';
|
|
3
3
|
import { LDEvaluationDetail, LDEvaluationDetailTyped } from './api/LDEvaluationDetail';
|
|
4
4
|
import { LDIdentifyOptions } from './api/LDIdentifyOptions';
|
|
@@ -23,6 +23,7 @@ export default class LDClientImpl implements LDClient {
|
|
|
23
23
|
private _eventSendingEnabled;
|
|
24
24
|
private _baseHeaders;
|
|
25
25
|
protected dataManager: DataManager;
|
|
26
|
+
protected readonly environmentMetadata: LDPluginEnvironmentMetadata;
|
|
26
27
|
private _hookRunner;
|
|
27
28
|
private _inspectorManager;
|
|
28
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LDClientImpl.d.ts","sourceRoot":"","sources":["../src/LDClientImpl.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EAEjB,OAAO,EAEP,QAAQ,EAER,SAAS,EACT,SAAS,EACT,WAAW,EAEX,QAAQ,EACR,QAAQ,EAGT,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAoC,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAG5F,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAahE,OAAO,SAAS,EAAE,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"LDClientImpl.d.ts","sourceRoot":"","sources":["../src/LDClientImpl.ts"],"names":[],"mappings":"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"}
|
|
@@ -74,6 +74,27 @@ export type IdentifySeriesStatus = 'completed' | 'error';
|
|
|
74
74
|
export interface IdentifySeriesResult {
|
|
75
75
|
status: IdentifySeriesStatus;
|
|
76
76
|
}
|
|
77
|
+
/**
|
|
78
|
+
* Contextual information provided to track stages.
|
|
79
|
+
*/
|
|
80
|
+
export interface TrackSeriesContext {
|
|
81
|
+
/**
|
|
82
|
+
* The key for the event being tracked.
|
|
83
|
+
*/
|
|
84
|
+
readonly key: string;
|
|
85
|
+
/**
|
|
86
|
+
* The context associated with the track operation.
|
|
87
|
+
*/
|
|
88
|
+
readonly context: LDContext;
|
|
89
|
+
/**
|
|
90
|
+
* The data associated with the track operation.
|
|
91
|
+
*/
|
|
92
|
+
readonly data?: unknown;
|
|
93
|
+
/**
|
|
94
|
+
* The metric value associated with the track operation.
|
|
95
|
+
*/
|
|
96
|
+
readonly metricValue?: number;
|
|
97
|
+
}
|
|
77
98
|
/**
|
|
78
99
|
* Interface for extending SDK functionality via hooks.
|
|
79
100
|
*/
|
|
@@ -148,5 +169,13 @@ export interface Hook {
|
|
|
148
169
|
* ```
|
|
149
170
|
*/
|
|
150
171
|
afterIdentify?(hookContext: IdentifySeriesContext, data: IdentifySeriesData, result: IdentifySeriesResult): IdentifySeriesData;
|
|
172
|
+
/**
|
|
173
|
+
* This method is called during the execution of the track process after the event
|
|
174
|
+
* has been enqueued.
|
|
175
|
+
*
|
|
176
|
+
* @param hookContext Contains information about the track operation being performed. This is not
|
|
177
|
+
* mutable.
|
|
178
|
+
*/
|
|
179
|
+
afterTrack?(hookContext: TrackSeriesContext): void;
|
|
151
180
|
}
|
|
152
181
|
//# sourceMappingURL=Hooks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Hooks.d.ts","sourceRoot":"","sources":["../../../src/api/integrations/Hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAOhC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,OAAO,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,WAAW,IAAI,YAAY,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,CACf,WAAW,EAAE,uBAAuB,EACpC,IAAI,EAAE,oBAAoB,GACzB,oBAAoB,CAAC;IAExB;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAC,CACd,WAAW,EAAE,uBAAuB,EACpC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,kBAAkB,GACzB,oBAAoB,CAAC;IAExB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,CAAC,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;IAElG;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,CACZ,WAAW,EAAE,qBAAqB,EAClC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,oBAAoB,GAC3B,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Hooks.d.ts","sourceRoot":"","sources":["../../../src/api/integrations/Hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAExD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC;IAC7B;;OAEG;IACH,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;CAOhC;AAED;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACnC;AAED;;;;;GAKG;AACH,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,OAAO,CAAC;AAEzD;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B;;OAEG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB;;OAEG;IACH,WAAW,IAAI,YAAY,CAAC;IAE5B;;;;;;;;;;;;;;OAcG;IACH,gBAAgB,CAAC,CACf,WAAW,EAAE,uBAAuB,EACpC,IAAI,EAAE,oBAAoB,GACzB,oBAAoB,CAAC;IAExB;;;;;;;;;;;;;;;;OAgBG;IACH,eAAe,CAAC,CACd,WAAW,EAAE,uBAAuB,EACpC,IAAI,EAAE,oBAAoB,EAC1B,MAAM,EAAE,kBAAkB,GACzB,oBAAoB,CAAC;IAExB;;;;;;;;;;;;;;OAcG;IACH,cAAc,CAAC,CAAC,WAAW,EAAE,qBAAqB,EAAE,IAAI,EAAE,kBAAkB,GAAG,kBAAkB,CAAC;IAElG;;;;;;;;;;;;;;OAcG;IACH,aAAa,CAAC,CACZ,WAAW,EAAE,qBAAqB,EAClC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,oBAAoB,GAC3B,kBAAkB,CAAC;IAEtB;;;;;;OAMG;IACH,UAAU,CAAC,CAAC,WAAW,EAAE,kBAAkB,GAAG,IAAI,CAAC;CACpD"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import { ApplicationTags, internal, LDFlagSet, LDLogger, ServiceEndpoints } from '@launchdarkly/js-sdk-common';
|
|
1
|
+
import { ApplicationTags, internal, LDFlagSet, LDLogger, LDPluginEnvironmentMetadata, ServiceEndpoints } from '@launchdarkly/js-sdk-common';
|
|
2
2
|
import { Hook, type LDOptions } from '../api';
|
|
3
3
|
import { LDInspection } from '../api/LDInspection';
|
|
4
4
|
export interface LDClientInternalOptions extends internal.LDInternalOptions {
|
|
5
5
|
trackEventModifier?: (event: internal.InputCustomEvent) => internal.InputCustomEvent;
|
|
6
|
+
getImplementationHooks: (environmentMetadata: LDPluginEnvironmentMetadata) => Hook[];
|
|
7
|
+
credentialType: 'clientSideId' | 'mobileKey';
|
|
6
8
|
}
|
|
7
9
|
export interface Configuration {
|
|
8
10
|
readonly logger: LDLogger;
|
|
@@ -38,6 +40,8 @@ export interface Configuration {
|
|
|
38
40
|
readonly trackEventModifier: (event: internal.InputCustomEvent) => internal.InputCustomEvent;
|
|
39
41
|
readonly hooks: Hook[];
|
|
40
42
|
readonly inspectors: LDInspection[];
|
|
43
|
+
readonly credentialType: 'clientSideId' | 'mobileKey';
|
|
44
|
+
readonly getImplementationHooks: (environmentMetadata: LDPluginEnvironmentMetadata) => Hook[];
|
|
41
45
|
}
|
|
42
46
|
declare const DEFAULT_POLLING: string;
|
|
43
47
|
declare const DEFAULT_STREAM: string;
|
|
@@ -79,6 +83,8 @@ export default class ConfigurationImpl implements Configuration {
|
|
|
79
83
|
readonly hooks: Hook[];
|
|
80
84
|
readonly inspectors: LDInspection[];
|
|
81
85
|
readonly trackEventModifier: (event: internal.InputCustomEvent) => internal.InputCustomEvent;
|
|
86
|
+
readonly credentialType: 'clientSideId' | 'mobileKey';
|
|
87
|
+
readonly getImplementationHooks: (environmentMetadata: LDPluginEnvironmentMetadata) => Hook[];
|
|
82
88
|
[index: string]: any;
|
|
83
89
|
constructor(pristineOptions?: LDOptions, internalOptions?: LDClientInternalOptions);
|
|
84
90
|
private _validateTypesAndNames;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Configuration.d.ts","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,QAAQ,EACR,SAAS,EACT,QAAQ,
|
|
1
|
+
{"version":3,"file":"Configuration.d.ts","sourceRoot":"","sources":["../../src/configuration/Configuration.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EAEf,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,2BAA2B,EAI3B,gBAAgB,EAEjB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAKnD,MAAM,WAAW,uBAAwB,SAAQ,QAAQ,CAAC,iBAAiB;IACzE,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,CAAC;IACrF,sBAAsB,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,KAAK,IAAI,EAAE,CAAC;IACrF,cAAc,EAAE,cAAc,GAAG,WAAW,CAAC;CAC9C;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC;IAC7C,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,eAAe,CAAC,EAAE;QACzB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxF,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,YAAY,GAAG,2BAA2B,CAAC;IACzE,QAAQ,CAAC,kBAAkB,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,KAAK,QAAQ,CAAC,gBAAgB,CAAC;IAC7F,QAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,YAAY,EAAE,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,cAAc,GAAG,WAAW,CAAC;IACtD,QAAQ,CAAC,sBAAsB,EAAE,CAAC,mBAAmB,EAAE,2BAA2B,KAAK,IAAI,EAAE,CAAC;CAC/F;AAED,QAAA,MAAM,eAAe,EAAE,MAA6C,CAAC;AACrE,QAAA,MAAM,cAAc,EAAE,MAAgD,CAAC;AAEvE,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC;AAU3C,MAAM,CAAC,OAAO,OAAO,iBAAkB,YAAW,aAAa;IAC7D,SAAgB,MAAM,EAAE,QAAQ,CAAsB;IAKtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmB;IAE3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmC;IAE7D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAE5C,SAAgB,iBAAiB,KAAK;IAEtC,SAAgB,QAAQ,OAAO;IAC/B,SAAgB,2BAA2B,OAAO;IAClD,SAAgB,aAAa,MAAM;IACnC,SAAgB,2BAA2B,KAAK;IAEhD,SAAgB,oBAAoB,EAAE,OAAO,CAAS;IACtD,SAAgB,KAAK,EAAE,OAAO,CAAS;IACvC,SAAgB,gBAAgB,EAAE,OAAO,CAAS;IAClD,SAAgB,UAAU,EAAE,OAAO,CAAQ;IAC3C,SAAgB,aAAa,EAAE,OAAO,CAAQ;IAE9C,SAAgB,SAAS,EAAE,OAAO,CAAS;IAC3C,SAAgB,WAAW,EAAE,OAAO,CAAS;IAE7C,SAAgB,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAEjD,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,SAAgB,eAAe,CAAC,EAAE;QAChC,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,SAAgB,SAAS,CAAC,EAAE,SAAS,CAAC;IAGtC,SAAgB,sBAAsB,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/F,SAAgB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExC,SAAgB,gBAAgB,EAAE,gBAAgB,CAAC;IAEnD,SAAgB,YAAY,EAAE,MAAM,CAA4B;IAEhE,SAAgB,mBAAmB,EAAE,YAAY,GAAG,2BAA2B,CAAC;IAEhF,SAAgB,KAAK,EAAE,IAAI,EAAE,CAAM;IAEnC,SAAgB,UAAU,EAAE,YAAY,EAAE,CAAM;IAEhD,SAAgB,kBAAkB,EAAE,CAClC,KAAK,EAAE,QAAQ,CAAC,gBAAgB,KAC7B,QAAQ,CAAC,gBAAgB,CAAC;IAE/B,SAAgB,cAAc,EAAE,cAAc,GAAG,WAAW,CAAC;IAC7D,SAAgB,sBAAsB,EAAE,CACtC,mBAAmB,EAAE,2BAA2B,KAC7C,IAAI,EAAE,CAAC;IAGZ,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,CAAC;gBAGnB,eAAe,GAAE,SAAc,EAC/B,eAAe,GAAE,uBAGhB;IAyBH,OAAO,CAAC,sBAAsB;CAuC/B"}
|
package/dist/cjs/index.cjs
CHANGED
|
@@ -136,7 +136,10 @@ function ensureSafeLogger(logger) {
|
|
|
136
136
|
return jsSdkCommon.createSafeLogger(logger);
|
|
137
137
|
}
|
|
138
138
|
class ConfigurationImpl {
|
|
139
|
-
constructor(pristineOptions = {}, internalOptions = {
|
|
139
|
+
constructor(pristineOptions = {}, internalOptions = {
|
|
140
|
+
getImplementationHooks: () => [],
|
|
141
|
+
credentialType: 'mobileKey',
|
|
142
|
+
}) {
|
|
140
143
|
this.logger = jsSdkCommon.createSafeLogger();
|
|
141
144
|
// Naming conventions is not followed for these lines because the config validation
|
|
142
145
|
// accesses members based on the keys of the options. (sdk-763)
|
|
@@ -170,6 +173,8 @@ class ConfigurationImpl {
|
|
|
170
173
|
this.tags = new jsSdkCommon.ApplicationTags({ application: this.applicationInfo, logger: this.logger });
|
|
171
174
|
this.userAgentHeaderName = internalOptions.userAgentHeaderName ?? 'user-agent';
|
|
172
175
|
this.trackEventModifier = internalOptions.trackEventModifier ?? ((event) => event);
|
|
176
|
+
this.credentialType = internalOptions.credentialType;
|
|
177
|
+
this.getImplementationHooks = internalOptions.getImplementationHooks;
|
|
173
178
|
}
|
|
174
179
|
_validateTypesAndNames(pristineOptions) {
|
|
175
180
|
const errors = [];
|
|
@@ -846,6 +851,7 @@ class DefaultFlagManager {
|
|
|
846
851
|
const UNKNOWN_HOOK_NAME = 'unknown hook';
|
|
847
852
|
const BEFORE_EVALUATION_STAGE_NAME = 'beforeEvaluation';
|
|
848
853
|
const AFTER_EVALUATION_STAGE_NAME = 'afterEvaluation';
|
|
854
|
+
const AFTER_TRACK_STAGE_NAME = 'afterTrack';
|
|
849
855
|
function tryExecuteStage(logger, method, hookName, stage, def) {
|
|
850
856
|
try {
|
|
851
857
|
return stage();
|
|
@@ -888,6 +894,14 @@ function executeAfterIdentify(logger, hooks, hookContext, updatedData, result) {
|
|
|
888
894
|
tryExecuteStage(logger, AFTER_EVALUATION_STAGE_NAME, getHookName(logger, hook), () => hook?.afterIdentify?.(hookContext, data, result) ?? {}, {});
|
|
889
895
|
}
|
|
890
896
|
}
|
|
897
|
+
function executeAfterTrack(logger, hooks, hookContext) {
|
|
898
|
+
// This iterates in reverse, versus reversing a shallow copy of the hooks,
|
|
899
|
+
// for efficiency.
|
|
900
|
+
for (let hookIndex = hooks.length - 1; hookIndex >= 0; hookIndex -= 1) {
|
|
901
|
+
const hook = hooks[hookIndex];
|
|
902
|
+
tryExecuteStage(logger, AFTER_TRACK_STAGE_NAME, getHookName(logger, hook), () => hook?.afterTrack?.(hookContext), undefined);
|
|
903
|
+
}
|
|
904
|
+
}
|
|
891
905
|
class HookRunner {
|
|
892
906
|
constructor(_logger, initialHooks) {
|
|
893
907
|
this._logger = _logger;
|
|
@@ -923,6 +937,13 @@ class HookRunner {
|
|
|
923
937
|
addHook(hook) {
|
|
924
938
|
this._hooks.push(hook);
|
|
925
939
|
}
|
|
940
|
+
afterTrack(hookContext) {
|
|
941
|
+
if (this._hooks.length === 0) {
|
|
942
|
+
return;
|
|
943
|
+
}
|
|
944
|
+
const hooks = [...this._hooks];
|
|
945
|
+
executeAfterTrack(this._logger, hooks, hookContext);
|
|
946
|
+
}
|
|
926
947
|
}
|
|
927
948
|
|
|
928
949
|
function getInspectorHook(inspectorManager) {
|
|
@@ -1136,8 +1157,49 @@ class LDEmitter {
|
|
|
1136
1157
|
}
|
|
1137
1158
|
}
|
|
1138
1159
|
|
|
1160
|
+
function createPluginEnvironmentMetadata(sdkKey, platform, config) {
|
|
1161
|
+
const sdkData = platform.info.sdkData();
|
|
1162
|
+
let applicationMetadata;
|
|
1163
|
+
if (config.applicationInfo) {
|
|
1164
|
+
if (config.applicationInfo.id) {
|
|
1165
|
+
applicationMetadata = applicationMetadata ?? {};
|
|
1166
|
+
applicationMetadata.id = config.applicationInfo.id;
|
|
1167
|
+
}
|
|
1168
|
+
if (config.applicationInfo.version) {
|
|
1169
|
+
applicationMetadata = applicationMetadata ?? {};
|
|
1170
|
+
applicationMetadata.version = config.applicationInfo.version;
|
|
1171
|
+
}
|
|
1172
|
+
if (config.applicationInfo.name) {
|
|
1173
|
+
applicationMetadata = applicationMetadata ?? {};
|
|
1174
|
+
applicationMetadata.name = config.applicationInfo.name;
|
|
1175
|
+
}
|
|
1176
|
+
if (config.applicationInfo.versionName) {
|
|
1177
|
+
applicationMetadata = applicationMetadata ?? {};
|
|
1178
|
+
applicationMetadata.versionName = config.applicationInfo.versionName;
|
|
1179
|
+
}
|
|
1180
|
+
}
|
|
1181
|
+
const sdkMetadata = {
|
|
1182
|
+
name: sdkData.userAgentBase,
|
|
1183
|
+
version: sdkData.version,
|
|
1184
|
+
};
|
|
1185
|
+
if (sdkData.wrapperName) {
|
|
1186
|
+
sdkMetadata.wrapperName = sdkData.wrapperName;
|
|
1187
|
+
}
|
|
1188
|
+
if (sdkData.wrapperVersion) {
|
|
1189
|
+
sdkMetadata.wrapperVersion = sdkData.wrapperVersion;
|
|
1190
|
+
}
|
|
1191
|
+
const environmentMetadata = {
|
|
1192
|
+
sdk: sdkMetadata,
|
|
1193
|
+
[config.credentialType]: sdkKey,
|
|
1194
|
+
};
|
|
1195
|
+
if (applicationMetadata) {
|
|
1196
|
+
environmentMetadata.application = applicationMetadata;
|
|
1197
|
+
}
|
|
1198
|
+
return environmentMetadata;
|
|
1199
|
+
}
|
|
1200
|
+
|
|
1139
1201
|
const { ClientMessages, ErrorKinds } = jsSdkCommon.internal;
|
|
1140
|
-
const
|
|
1202
|
+
const DEFAULT_IDENTIFY_TIMEOUT_SECONDS = 5;
|
|
1141
1203
|
class LDClientImpl {
|
|
1142
1204
|
/**
|
|
1143
1205
|
* Creates the client object synchronously. No async, no network calls.
|
|
@@ -1175,7 +1237,12 @@ class LDClientImpl {
|
|
|
1175
1237
|
});
|
|
1176
1238
|
});
|
|
1177
1239
|
this.dataManager = dataManagerFactory(this._flagManager, this._config, this._baseHeaders, this.emitter, this._diagnosticsManager);
|
|
1178
|
-
|
|
1240
|
+
const hooks = [...this._config.hooks];
|
|
1241
|
+
this.environmentMetadata = createPluginEnvironmentMetadata(this.sdkKey, this.platform, this._config);
|
|
1242
|
+
this._config.getImplementationHooks(this.environmentMetadata).forEach((hook) => {
|
|
1243
|
+
hooks.push(hook);
|
|
1244
|
+
});
|
|
1245
|
+
this._hookRunner = new HookRunner(this.logger, hooks);
|
|
1179
1246
|
this._inspectorManager = new InspectorManager(this._config.inspectors, this.logger);
|
|
1180
1247
|
if (this._inspectorManager.hasInspectors()) {
|
|
1181
1248
|
this._hookRunner.addHook(getInspectorHook(this._inspectorManager));
|
|
@@ -1254,7 +1321,7 @@ class LDClientImpl {
|
|
|
1254
1321
|
* 3. A network error is encountered during initialization.
|
|
1255
1322
|
*/
|
|
1256
1323
|
async identify(pristineContext, identifyOptions) {
|
|
1257
|
-
const identifyTimeout = identifyOptions?.timeout ??
|
|
1324
|
+
const identifyTimeout = identifyOptions?.timeout ?? DEFAULT_IDENTIFY_TIMEOUT_SECONDS;
|
|
1258
1325
|
const noTimeout = identifyOptions?.timeout === undefined && identifyOptions?.noTimeout === true;
|
|
1259
1326
|
// When noTimeout is specified, and a timeout is not secified, then this condition cannot
|
|
1260
1327
|
// be encountered. (Our default would need to be greater)
|
|
@@ -1304,6 +1371,13 @@ class LDClientImpl {
|
|
|
1304
1371
|
this.logger?.warn(ClientMessages.invalidMetricValue(typeof metricValue));
|
|
1305
1372
|
}
|
|
1306
1373
|
this._eventProcessor?.sendEvent(this._config.trackEventModifier(this._eventFactoryDefault.customEvent(key, this._checkedContext, data, metricValue)));
|
|
1374
|
+
this._hookRunner.afterTrack({
|
|
1375
|
+
key,
|
|
1376
|
+
// The context is pre-checked above, so we know it can be unwrapped.
|
|
1377
|
+
context: this._uncheckedContext,
|
|
1378
|
+
data,
|
|
1379
|
+
metricValue,
|
|
1380
|
+
});
|
|
1307
1381
|
}
|
|
1308
1382
|
_variationInternal(flagKey, defaultValue, eventFactory, typeChecker) {
|
|
1309
1383
|
if (!this._uncheckedContext) {
|