chore(deps): Update LaunchDarkly clients (#167765)

This commit is contained in:
Alejandro Fernández Haro 2023-10-02 15:58:46 +02:00 committed by GitHub
parent 4690d04c40
commit b58e06b2a9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 61 additions and 68 deletions

View file

@ -936,8 +936,8 @@
"jsts": "^1.6.2",
"kea": "^2.4.2",
"langchain": "^0.0.151",
"launchdarkly-js-client-sdk": "^2.22.1",
"launchdarkly-node-server-sdk": "^6.4.2",
"launchdarkly-js-client-sdk": "^3.1.4",
"launchdarkly-node-server-sdk": "^7.0.3",
"load-json-file": "^6.2.0",
"lodash": "^4.17.21",
"lru-cache": "^4.1.5",

View file

@ -40,6 +40,9 @@ describe('LaunchDarklyClient - browser', () => {
avatar: 'fake-blue-avatar',
ip: 'my-weird-ip',
country: 'distributed',
// intentionally adding this to make sure the code is overriding appropriately
kind: 'other kind',
key: 'other user',
};
const extraFields = {
@ -52,9 +55,10 @@ describe('LaunchDarklyClient - browser', () => {
expect(launchDarklyLibraryMock.initialize).toHaveBeenCalledWith(
'fake-client-id',
{
key: 'fake-user-id',
...topFields,
custom: extraFields,
...extraFields,
kind: 'user',
key: 'fake-user-id',
},
{
application: { id: 'kibana-browser', version: 'version' },
@ -73,8 +77,9 @@ describe('LaunchDarklyClient - browser', () => {
expect(launchDarklyLibraryMock.initialize).toHaveBeenCalledWith(
'fake-client-id',
{
kind: 'user',
key: 'fake-user-id',
custom: { kibanaVersion: 'version' },
kibanaVersion: 'version',
},
{
application: { id: 'kibana-browser', version: 'version' },
@ -92,8 +97,9 @@ describe('LaunchDarklyClient - browser', () => {
expect(launchDarklyLibraryMock.initialize).toHaveBeenCalledWith(
'fake-client-id',
{
kind: 'user',
key: 'fake-user-id',
custom: { kibanaVersion: 'version' },
kibanaVersion: 'version',
},
{
application: { id: 'kibana-browser', version: 'version' },
@ -107,8 +113,9 @@ describe('LaunchDarklyClient - browser', () => {
// Update user metadata a 2nd time
await client.updateUserMetadata({ userId: 'fake-user-id', kibanaVersion: 'version' });
expect(ldClientMock.identify).toHaveBeenCalledWith({
kind: 'user',
key: 'fake-user-id',
custom: { kibanaVersion: 'version' },
kibanaVersion: 'version',
});
});
});

View file

@ -5,7 +5,11 @@
* 2.0.
*/
import { type LDClient, type LDUser, type LDLogLevel } from 'launchdarkly-js-client-sdk';
import {
type LDClient,
type LDSingleKindContext,
type LDLogLevel,
} from 'launchdarkly-js-client-sdk';
export interface LaunchDarklyClientConfig {
client_id: string;
@ -15,14 +19,6 @@ export interface LaunchDarklyClientConfig {
export interface LaunchDarklyUserMetadata
extends Record<string, string | boolean | number | undefined> {
userId: string;
// We are not collecting any of the above, but this is to match the LDUser first-level definition
name?: string;
firstName?: string;
lastName?: string;
email?: string;
avatar?: string;
ip?: string;
country?: string;
}
export class LaunchDarklyClient {
@ -34,19 +30,11 @@ export class LaunchDarklyClient {
) {}
public async updateUserMetadata(userMetadata: LaunchDarklyUserMetadata) {
const { userId, name, firstName, lastName, email, avatar, ip, country, ...custom } =
userMetadata;
const launchDarklyUser: LDUser = {
const { userId, ...userMetadataWithoutUserId } = userMetadata;
const launchDarklyUser: LDSingleKindContext = {
...userMetadataWithoutUserId,
kind: 'user',
key: userId,
name,
firstName,
lastName,
email,
avatar,
ip,
country,
// This casting is needed because LDUser does not allow `Record<string, undefined>`
custom: custom as Record<string, string | boolean | number>,
};
if (this.launchDarklyClient) {
await this.launchDarklyClient.identify(launchDarklyUser);

View file

@ -80,7 +80,7 @@ describe('LaunchDarklyClient - server', () => {
});
describe('updateUserMetadata', () => {
test('sets the top-level properties at the root (renaming userId to key) and the rest under `custom`', () => {
test('sets all properties at the root level, renaming userId to key (no nesting into custom)', () => {
expect(client).toHaveProperty('launchDarklyUser', undefined);
const topFields = {
@ -91,6 +91,9 @@ describe('LaunchDarklyClient - server', () => {
avatar: 'fake-blue-avatar',
ip: 'my-weird-ip',
country: 'distributed',
// intentionally adding this to make sure the code is overriding appropriately
kind: 'other kind',
key: 'other user',
};
const extraFields = {
@ -101,9 +104,10 @@ describe('LaunchDarklyClient - server', () => {
client.updateUserMetadata({ userId: 'fake-user-id', ...topFields, ...extraFields });
expect(client).toHaveProperty('launchDarklyUser', {
key: 'fake-user-id',
...topFields,
custom: extraFields,
...extraFields,
kind: 'user',
key: 'fake-user-id',
});
});
@ -113,8 +117,9 @@ describe('LaunchDarklyClient - server', () => {
client.updateUserMetadata({ userId: 'fake-user-id', kibanaVersion: 'version' });
expect(client).toHaveProperty('launchDarklyUser', {
kind: 'user',
key: 'fake-user-id',
custom: { kibanaVersion: 'version' },
kibanaVersion: 'version',
});
});
});
@ -132,7 +137,7 @@ describe('LaunchDarklyClient - server', () => {
expect(ldClientMock.variation).toHaveBeenCalledTimes(1);
expect(ldClientMock.variation).toHaveBeenCalledWith(
'my-feature-flag',
{ key: 'fake-user-id', custom: { kibanaVersion: 'version' } },
{ kind: 'user', key: 'fake-user-id', kibanaVersion: 'version' },
123
);
});
@ -150,7 +155,7 @@ describe('LaunchDarklyClient - server', () => {
expect(ldClientMock.track).toHaveBeenCalledTimes(1);
expect(ldClientMock.track).toHaveBeenCalledWith(
'my-feature-flag',
{ key: 'fake-user-id', custom: { kibanaVersion: 'version' } },
{ kind: 'user', key: 'fake-user-id', kibanaVersion: 'version' },
{},
123
);
@ -183,8 +188,9 @@ describe('LaunchDarklyClient - server', () => {
});
expect(ldClientMock.allFlagsState).toHaveBeenCalledTimes(1);
expect(ldClientMock.allFlagsState).toHaveBeenCalledWith({
kind: 'user',
key: 'fake-user-id',
custom: { kibanaVersion: 'version' },
kibanaVersion: 'version',
});
});
});

View file

@ -9,7 +9,7 @@ import LaunchDarkly, {
type LDClient,
type LDFlagSet,
type LDLogLevel,
type LDUser,
type LDSingleKindContext,
} from 'launchdarkly-node-server-sdk';
import type { Logger } from '@kbn/core/server';
@ -41,7 +41,7 @@ export interface LaunchDarklyGetAllFlags {
export class LaunchDarklyClient {
private readonly launchDarklyClient: LDClient;
private launchDarklyUser?: LDUser;
private launchDarklyUser?: LDSingleKindContext;
constructor(ldConfig: LaunchDarklyClientConfig, private readonly logger: Logger) {
this.launchDarklyClient = LaunchDarkly.init(ldConfig.sdk_key, {
@ -59,19 +59,11 @@ export class LaunchDarklyClient {
}
public updateUserMetadata(userMetadata: LaunchDarklyUserMetadata) {
const { userId, name, firstName, lastName, email, avatar, ip, country, ...custom } =
userMetadata;
const { userId, ...userMetadataWithoutUserId } = userMetadata;
this.launchDarklyUser = {
...userMetadataWithoutUserId,
kind: 'user',
key: userId,
name,
firstName,
lastName,
email,
avatar,
ip,
country,
// This casting is needed because LDUser does not allow `Record<string, undefined>`
custom: custom as Record<string, string | boolean | number>,
};
}

View file

@ -11385,7 +11385,7 @@ async@^1.4.2:
resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=
async@^3.1.0, async@^3.2.0, async@^3.2.3:
async@^3.2.0, async@^3.2.3, async@^3.2.4:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==
@ -20804,33 +20804,33 @@ launchdarkly-eventsource@1.4.4:
resolved "https://registry.yarnpkg.com/launchdarkly-eventsource/-/launchdarkly-eventsource-1.4.4.tgz#fa595af8602e487c61520787170376c6a1104459"
integrity sha512-GL+r2Y3WccJlhFyL2buNKel+9VaMnYpbE/FfCkOST5jSNSFodahlxtGyrE8o7R+Qhobyq0Ree4a7iafJDQi9VQ==
launchdarkly-js-client-sdk@^2.22.1:
version "2.22.1"
resolved "https://registry.yarnpkg.com/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-2.22.1.tgz#e6064c79bc575eea0aa4364be41754d54d89ae6a"
integrity sha512-EAdw7B8w4m/WZGmHHLj9gbYBP6lCqJs5TQDCM9kWJOnvHBz7DJIxOdqazNMDn5AzBxfvaMG7cpLms+Cur5LD5g==
launchdarkly-js-client-sdk@^3.1.4:
version "3.1.4"
resolved "https://registry.yarnpkg.com/launchdarkly-js-client-sdk/-/launchdarkly-js-client-sdk-3.1.4.tgz#e613cb53412533c07ccf140ae570fc994c59758d"
integrity sha512-yq0FeklpVuHMSRz7jfUAfyM7I/659RvGztqJ0Y9G5eN/ZrG1o2W61ZU0Nrv/gqZCtLXjarh/u1otxSFFBjTpHw==
dependencies:
escape-string-regexp "^1.0.5"
launchdarkly-js-sdk-common "3.6.0"
escape-string-regexp "^4.0.0"
launchdarkly-js-sdk-common "5.0.3"
launchdarkly-js-sdk-common@3.6.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-3.6.0.tgz#d146be5bbd86a019c4bedc52e66c37a1ffa7bb3d"
integrity sha512-wCdBoBiYXlP64jTrC0dOXY2B345LSJO/IvitbdW4kBKmJ1DkeufpqV0s5DBlwE0RLzDmaQx3mRTmcoNAIhIoaA==
launchdarkly-js-sdk-common@5.0.3:
version "5.0.3"
resolved "https://registry.yarnpkg.com/launchdarkly-js-sdk-common/-/launchdarkly-js-sdk-common-5.0.3.tgz#345f899f5779be8b03d6599978c855eb838d8b7f"
integrity sha512-wKG8UsVbPVq8+7eavgAm5CVmulQWN6Ddod2ZoA3euZ1zPvJPwIQ2GrOYaCJr3cFrrMIX+nQyBJHBHYxUAPcM+Q==
dependencies:
base64-js "^1.3.0"
fast-deep-equal "^2.0.1"
uuid "^3.3.2"
uuid "^8.0.0"
launchdarkly-node-server-sdk@^6.4.2:
version "6.4.2"
resolved "https://registry.yarnpkg.com/launchdarkly-node-server-sdk/-/launchdarkly-node-server-sdk-6.4.2.tgz#10a4fea21762315a095a9377cb23dc8d6e714469"
integrity sha512-cZQ/FDpzrXu7rOl2re9+79tX/jOrj+kb1ikbqpk/jEgLvXUHGE7Xr+fsEIbQa80H1PkGwiyWbmnAl31THJfKew==
launchdarkly-node-server-sdk@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/launchdarkly-node-server-sdk/-/launchdarkly-node-server-sdk-7.0.3.tgz#d7a8b996d992b0ca5d4972db5df1ae49332b094c"
integrity sha512-uSkBezAiQ9nwv8N6CmI7OmyJ9e3xpueJzYOso8+5vMf7VtBtPjz6RRsUkUsSzUDo7siclmW8USjCwqn9aX2EbQ==
dependencies:
async "^3.1.0"
async "^3.2.4"
launchdarkly-eventsource "1.4.4"
lru-cache "^6.0.0"
node-cache "^5.1.0"
semver "^7.3.0"
semver "^7.5.4"
tunnel "0.0.6"
uuid "^8.3.2"
@ -27077,7 +27077,7 @@ semver@^6.0.0, semver@^6.1.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semve
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4"
integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==
semver@^7.3.0, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3:
semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.0, semver@^7.5.2, semver@^7.5.3:
version "7.5.3"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e"
integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==
@ -29964,7 +29964,7 @@ uuid@^3.3.2, uuid@^3.3.3:
resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^8.3.0, uuid@^8.3.2:
uuid@^8.0.0, uuid@^8.3.0, uuid@^8.3.2:
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==