-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: adds ping stream support #624
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reviewers: Updating paths to avoid confusing future developers about usage of /msdk
this.updateProcessor!.start(); | ||
} | ||
|
||
private _getRequestor(plainContextString: string): Requestor { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reviewers: _getRequestor got commonized to be a helper method in the Requestor file, the generated diff is confusing.
@@ -47,3 +56,41 @@ export default class Requestor { | |||
throw new LDRequestError(`Unexpected status code: ${status}`, status); | |||
} | |||
} | |||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reviewers: This is the combination of the handful of requestor making implementations.
@@ -115,7 +80,7 @@ export default class PollingProcessor implements subsystem.LDStreamProcessor { | |||
} | |||
|
|||
const elapsed = Date.now() - startTime; | |||
const sleepFor = Math.max(this._pollInterval * 1000 - elapsed, 0); | |||
const sleepFor = Math.max(this._pollIntervalSeconds * 1000 - elapsed, 0); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reviewers: Just a rename for clarity.
@@ -133,6 +124,7 @@ export abstract class BaseDataManager implements DataManager { | |||
this._dataSourceEventHandler.handlePollingError(err); | |||
identifyReject?.(err); | |||
}, | |||
this.logger, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For reviewers: Please verify this logger was not intentionally being omitted up to this point.
@@ -178,6 +178,41 @@ class StreamingProcessor implements subsystem.LDStreamProcessor { | |||
} | |||
}); | |||
}); | |||
|
|||
// here we set up a listener that will poll when ping is received | |||
eventSource.addEventListener('ping', async () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems a little strange that this handler is here instead of with the other listeners.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is one of the main parts that I struggled with finding a nice spot for this handling. I initially had it in the DataManager with the others, but that created what felt like asymmetry wrt data types, json parsing/error handling, and identifyResolve/Reject. Currently the DataManager receives data as Flags, PatchFlag, or DeleteFlag. Having it know about requests and JSON errors felt like it would make it harder for the DataManager to get more flexible in the future. It felt ok for the StreamingProcessor to hold this "request turnaround" routine.
🤖 I have created a release *beep* *boop* --- <details><summary>akamai-edgeworker-sdk-common: 1.3.0</summary> ## [1.3.0](akamai-edgeworker-sdk-common-v1.2.1...akamai-edgeworker-sdk-common-v1.3.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-server-sdk-common bumped from ^2.8.0 to ^2.9.0 </details> <details><summary>akamai-server-base-sdk: 2.1.18</summary> ## [2.1.18](akamai-server-base-sdk-v2.1.17...akamai-server-base-sdk-v2.1.18) (2024-10-17) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/akamai-edgeworker-sdk-common bumped from ^1.2.1 to ^1.3.0 * @launchdarkly/js-server-sdk-common bumped from ^2.8.0 to ^2.9.0 </details> <details><summary>akamai-server-edgekv-sdk: 1.2.0</summary> ## [1.2.0](akamai-server-edgekv-sdk-v1.1.17...akamai-server-edgekv-sdk-v1.2.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/akamai-edgeworker-sdk-common bumped from ^1.2.1 to ^1.3.0 * @launchdarkly/js-server-sdk-common bumped from ^2.8.0 to ^2.9.0 </details> <details><summary>cloudflare-server-sdk: 2.6.0</summary> ## [2.6.0](cloudflare-server-sdk-v2.5.15...cloudflare-server-sdk-v2.6.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * devDependencies * @launchdarkly/js-server-sdk-common-edge bumped from 2.4.1 to 2.5.0 </details> <details><summary>js-client-sdk: 0.1.0</summary> ## [0.1.0](js-client-sdk-v0.0.1...js-client-sdk-v0.1.0) (2024-10-17) ### Features * Add prerequisite information to server-side allFlagsState. ([8c84e01](8c84e01)) * Add support for client-side prerequisite events. ([8c84e01](8c84e01)) * Add support for inspectors. ([#625](#625)) ([a986478](a986478)) * Add support for prerequisite details to evaluation detail. ([8c84e01](8c84e01)) * adds ping stream support ([#624](#624)) ([dee53af](dee53af)) * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Bug Fixes * Do not mangle _meta. ([#622](#622)) ([f6fc40b](f6fc40b)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-client-sdk-common bumped from 1.9.0 to 1.10.0 </details> <details><summary>js-client-sdk-common: 1.10.0</summary> ## [1.10.0](js-client-sdk-common-v1.9.0...js-client-sdk-common-v1.10.0) (2024-10-17) ### Features * Add prerequisite information to server-side allFlagsState. ([8c84e01](8c84e01)) * Add support for client-side prerequisite events. ([8c84e01](8c84e01)) * Add support for inspectors. ([#625](#625)) ([a986478](a986478)) * Add support for prerequisite details to evaluation detail. ([8c84e01](8c84e01)) * adds ping stream support ([#624](#624)) ([dee53af](dee53af)) * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Bug Fixes * Prerequisites should not trigger hooks. ([#628](#628)) ([70cf3c3](70cf3c3)) * Update sdk-client rollup configuration to match common ([#630](#630)) ([e061811](e061811)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-sdk-common bumped from 2.10.0 to 2.11.0 </details> <details><summary>js-sdk-common: 2.11.0</summary> ## [2.11.0](js-sdk-common-v2.10.0...js-sdk-common-v2.11.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Bug Fixes * Update sdk-client rollup configuration to match common ([#630](#630)) ([e061811](e061811)) </details> <details><summary>js-server-sdk-common: 2.9.0</summary> ## [2.9.0](js-server-sdk-common-v2.8.0...js-server-sdk-common-v2.9.0) (2024-10-17) ### Features * Add prerequisite information to server-side allFlagsState. ([8c84e01](8c84e01)) * Add support for client-side prerequisite events. ([8c84e01](8c84e01)) * Add support for prerequisite details to evaluation detail. ([8c84e01](8c84e01)) * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-sdk-common bumped from 2.10.0 to 2.11.0 </details> <details><summary>js-server-sdk-common-edge: 2.5.0</summary> ## [2.5.0](js-server-sdk-common-edge-v2.4.1...js-server-sdk-common-edge-v2.5.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-server-sdk-common bumped from 2.8.0 to 2.9.0 </details> <details><summary>node-server-sdk: 9.7.0</summary> ## [9.7.0](node-server-sdk-v9.6.1...node-server-sdk-v9.7.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-server-sdk-common bumped from 2.8.0 to 2.9.0 </details> <details><summary>node-server-sdk-dynamodb: 6.2.0</summary> ## [6.2.0](node-server-sdk-dynamodb-v6.1.23...node-server-sdk-dynamodb-v6.2.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * devDependencies * @launchdarkly/node-server-sdk bumped from 9.6.1 to 9.7.0 * peerDependencies * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.7.0 </details> <details><summary>node-server-sdk-otel: 1.1.0</summary> ## [1.1.0](node-server-sdk-otel-v1.0.15...node-server-sdk-otel-v1.1.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * devDependencies * @launchdarkly/node-server-sdk bumped from 9.6.1 to 9.7.0 * peerDependencies * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.7.0 </details> <details><summary>node-server-sdk-redis: 4.2.0</summary> ## [4.2.0](node-server-sdk-redis-v4.1.23...node-server-sdk-redis-v4.2.0) (2024-10-17) ### Features * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * devDependencies * @launchdarkly/node-server-sdk bumped from 9.6.1 to 9.7.0 * peerDependencies * @launchdarkly/node-server-sdk bumped from >=9.4.3 to >=9.7.0 </details> <details><summary>react-native-client-sdk: 10.9.0</summary> ## [10.9.0](react-native-client-sdk-v10.8.0...react-native-client-sdk-v10.9.0) (2024-10-17) ### Features * Add support for inspectors. ([#625](#625)) ([a986478](a986478)) * adds ping stream support ([#624](#624)) ([dee53af](dee53af)) * Apply private property naming standard. Mangle browser private properties. ([#620](#620)) ([3e6d404](3e6d404)) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-client-sdk-common bumped from 1.9.0 to 1.10.0 </details> <details><summary>vercel-server-sdk: 1.3.19</summary> ## [1.3.19](vercel-server-sdk-v1.3.18...vercel-server-sdk-v1.3.19) (2024-10-17) ### Dependencies * The following workspace dependencies were updated * dependencies * @launchdarkly/js-server-sdk-common-edge bumped from 2.4.1 to 2.5.0 </details> --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Requirements
I have added test coverage for new or changed functionality
I have followed the repository's pull request submission guidelines
I have validated my changes against all supported platform versions
-I have tested this against browser and mobile.
Related issues
SDK-198
Describe the solution you've provided
Added ping pathing
Passing Requestor into StreamingProcessor that now uses it when a ping event is received.
Commonized requestor creation logic and using that helper function in various data managers.