@launchdarkly/js-client-sdk-common 1.12.6 → 1.14.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 +29 -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 +31 -2
- package/dist/cjs/api/integrations/Hooks.d.ts.map +1 -1
- package/dist/cjs/async/AsyncTaskQueue.d.ts +67 -0
- package/dist/cjs/async/AsyncTaskQueue.d.ts.map +1 -0
- package/dist/cjs/configuration/Configuration.d.ts +7 -1
- package/dist/cjs/configuration/Configuration.d.ts.map +1 -1
- package/dist/cjs/events/createEventProcessor.d.ts.map +1 -1
- package/dist/cjs/index.cjs +79 -5
- 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 +31 -2
- package/dist/esm/api/integrations/Hooks.d.ts.map +1 -1
- package/dist/esm/async/AsyncTaskQueue.d.ts +67 -0
- package/dist/esm/async/AsyncTaskQueue.d.ts.map +1 -0
- package/dist/esm/configuration/Configuration.d.ts +7 -1
- package/dist/esm/configuration/Configuration.d.ts.map +1 -1
- package/dist/esm/events/createEventProcessor.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 +79 -5
- 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,34 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [1.14.0](https://github.com/launchdarkly/js-core/compare/js-client-sdk-common-v1.13.0...js-client-sdk-common-v1.14.0) (2025-05-21)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* Add support for per-context summary events. ([#859](https://github.com/launchdarkly/js-core/issues/859)) ([c9fa5c4](https://github.com/launchdarkly/js-core/commit/c9fa5c45f3ac2cbaad2f2e6312d5231c3f671d98))
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Dependencies
|
|
12
|
+
|
|
13
|
+
* The following workspace dependencies were updated
|
|
14
|
+
* dependencies
|
|
15
|
+
* @launchdarkly/js-sdk-common bumped from 2.17.0 to 2.18.0
|
|
16
|
+
|
|
17
|
+
## [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)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* Add client-side SDK plugin support. ([#834](https://github.com/launchdarkly/js-core/issues/834)) ([a843a33](https://github.com/launchdarkly/js-core/commit/a843a33e97dcab706a0034bd1fd1e3d2f78a9262))
|
|
23
|
+
* 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))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Dependencies
|
|
27
|
+
|
|
28
|
+
* The following workspace dependencies were updated
|
|
29
|
+
* dependencies
|
|
30
|
+
* @launchdarkly/js-sdk-common bumped from 2.16.0 to 2.17.0
|
|
31
|
+
|
|
3
32
|
## [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
33
|
|
|
5
34
|
|
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
|
*/
|
|
@@ -133,8 +154,8 @@ export interface Hook {
|
|
|
133
154
|
*/
|
|
134
155
|
beforeIdentify?(hookContext: IdentifySeriesContext, data: IdentifySeriesData): IdentifySeriesData;
|
|
135
156
|
/**
|
|
136
|
-
* This method is called during the execution of the identify process
|
|
137
|
-
* completes
|
|
157
|
+
* This method is called during the execution of the identify process, after the operation
|
|
158
|
+
* completes.
|
|
138
159
|
*
|
|
139
160
|
* @param hookContext Contains information about the evaluation being performed. This is not
|
|
140
161
|
* mutable.
|
|
@@ -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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { LDLogger } from '@launchdarkly/js-sdk-common';
|
|
2
|
+
/**
|
|
3
|
+
* Represents a task that has been shed from the queue.
|
|
4
|
+
* This task will never be executed.
|
|
5
|
+
*/
|
|
6
|
+
export interface ShedTask {
|
|
7
|
+
status: 'shed';
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Represents a task that has been ran to completion.
|
|
11
|
+
*/
|
|
12
|
+
export interface CompletedTask<TTaskResult> {
|
|
13
|
+
status: 'complete';
|
|
14
|
+
result: TTaskResult;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Represents a task that has errored.
|
|
18
|
+
*/
|
|
19
|
+
export interface ErroredTask {
|
|
20
|
+
status: 'error';
|
|
21
|
+
error: Error;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Represents the result of a task.
|
|
25
|
+
*/
|
|
26
|
+
export type TaskResult<TTaskResult> = CompletedTask<TTaskResult> | ErroredTask | ShedTask;
|
|
27
|
+
/**
|
|
28
|
+
* An asynchronous task queue with the ability to replace pending tasks.
|
|
29
|
+
*
|
|
30
|
+
* This is useful when you have asynchronous operations which much execute in order, and for cases where intermediate
|
|
31
|
+
* operations can be discarded.
|
|
32
|
+
*
|
|
33
|
+
* For instance, the SDK can only have one active context at a time, if you request identification of many contexts,
|
|
34
|
+
* then the ultimate state will be based on the last request. The intermediate identifies can be discarded.
|
|
35
|
+
*
|
|
36
|
+
* This class will always begin execution of the first item added to the queue, at that point the item itself is not
|
|
37
|
+
* queued, but active. If another request is made while that item is still active, then it is added to the queue.
|
|
38
|
+
* A third request would then replace the second request if the second request had not yet become active, and it was
|
|
39
|
+
* sheddable.
|
|
40
|
+
*
|
|
41
|
+
* Once a task is active the queue will complete it. It doesn't cancel tasks that it has started, but it can shed tasks
|
|
42
|
+
* that have not started.
|
|
43
|
+
*
|
|
44
|
+
* TTaskResult Is the return type of the task to be executed. Tasks accept no parameters. So if you need parameters
|
|
45
|
+
* you should use a lambda to capture them.
|
|
46
|
+
*
|
|
47
|
+
* Exceptions from tasks are always handled and the execute method will never reject a promise.
|
|
48
|
+
*
|
|
49
|
+
* Queue management should be done synchronously. There should not be asynchronous operations between checking the queue
|
|
50
|
+
* and acting on the results of said check.
|
|
51
|
+
*/
|
|
52
|
+
export declare class AsyncTaskQueue<TTaskResult> {
|
|
53
|
+
private readonly _logger?;
|
|
54
|
+
private _activeTask?;
|
|
55
|
+
private _queue;
|
|
56
|
+
constructor(_logger?: LDLogger | undefined);
|
|
57
|
+
/**
|
|
58
|
+
* Execute a task using the queue.
|
|
59
|
+
*
|
|
60
|
+
* @param task The async function to execute.
|
|
61
|
+
* @param sheddable Whether the task can be shed from the queue.
|
|
62
|
+
* @returns A promise that resolves to the result of the task.
|
|
63
|
+
*/
|
|
64
|
+
execute(task: () => Promise<TTaskResult>, sheddable?: boolean): Promise<TaskResult<TTaskResult>>;
|
|
65
|
+
private _checkPending;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=AsyncTaskQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AsyncTaskQueue.d.ts","sourceRoot":"","sources":["../../src/async/AsyncTaskQueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEvD;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,WAAW;IACxC,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,WAAW,IAAI,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW,GAAG,QAAQ,CAAC;AA2D1F;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,qBAAa,cAAc,CAAC,WAAW;IAIzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAHrC,OAAO,CAAC,WAAW,CAAC,CAAmC;IACvD,OAAO,CAAC,MAAM,CAAkC;gBAEnB,OAAO,CAAC,sBAAU;IAE/C;;;;;;OAMG;IACH,OAAO,CACL,IAAI,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,EAChC,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAoBnC,OAAO,CAAC,aAAa;CA6BtB"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createEventProcessor.d.ts","sourceRoot":"","sources":["../../src/events/createEventProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,QAAA,MAAM,oBAAoB,iBACV,MAAM,UACZ,aAAa,YACX,QAAQ,eACL,SAAS,uBACD,SAAS,kBAAkB,KAC/C,SAAS,cAAc,GAAG,
|
|
1
|
+
{"version":3,"file":"createEventProcessor.d.ts","sourceRoot":"","sources":["../../src/events/createEventProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,QAAA,MAAM,oBAAoB,iBACV,MAAM,UACZ,aAAa,YACX,QAAQ,eACL,SAAS,uBACD,SAAS,kBAAkB,KAC/C,SAAS,cAAc,GAAG,SAc5B,CAAC;AAEF,eAAe,oBAAoB,CAAC"}
|
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 = [];
|
|
@@ -489,7 +494,7 @@ function createSuccessEvaluationDetail(value, variationIndex, reason) {
|
|
|
489
494
|
|
|
490
495
|
const createEventProcessor = (clientSideID, config, platform, baseHeaders, diagnosticsManager) => {
|
|
491
496
|
if (config.sendEvents) {
|
|
492
|
-
return new jsSdkCommon.internal.EventProcessor({ ...config, eventsCapacity: config.capacity }, new jsSdkCommon.ClientContext(clientSideID, config, platform), baseHeaders, undefined, diagnosticsManager, false);
|
|
497
|
+
return new jsSdkCommon.internal.EventProcessor({ ...config, eventsCapacity: config.capacity }, new jsSdkCommon.ClientContext(clientSideID, config, platform), baseHeaders, undefined, diagnosticsManager, false, true);
|
|
493
498
|
}
|
|
494
499
|
return undefined;
|
|
495
500
|
};
|
|
@@ -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) {
|