Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions packages/sdk/server-node/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module.exports = {
overrides: [
{
files: ['contract-tests/**/*.ts'],
parserOptions: {
project: './contract-tests/tsconfig.json',
},
},
],
};
3 changes: 1 addition & 2 deletions packages/sdk/server-node/contract-tests/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,7 @@
"@launchdarkly/js-contract-test-utils": "workspace:^",
"@launchdarkly/node-server-sdk": "workspace:^",
"body-parser": "^1.19.0",
"express": "^4.17.1",
"got": "14.4.7"
"express": "^4.17.1"
},
"devDependencies": {
"@types/body-parser": "^1.19.2",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import got from 'got';

interface BigSegmentMetadata {
lastUpToDate?: number;
}
Expand All @@ -20,19 +18,24 @@ export default class BigSegmentTestStore {
}

async getMetadata(): Promise<BigSegmentMetadata> {
const data = await got.get(`${this._callbackUri}/getMetadata`, { retry: { limit: 0 } }).json();
const response = await fetch(`${this._callbackUri}/getMetadata`);
if (!response.ok) {
throw new Error(`getMetadata request failed with status ${response.status}`);
}
const data = await response.json();
return data as BigSegmentMetadata;
}

async getUserMembership(contextHash: string): Promise<Record<string, boolean> | undefined> {
const data = await got
.post(`${this._callbackUri}/getMembership`, {
retry: { limit: 0 },
json: {
contextHash,
},
})
.json();
const response = await fetch(`${this._callbackUri}/getMembership`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ contextHash }),
});
if (!response.ok) {
throw new Error(`getUserMembership request failed with status ${response.status}`);
}
const data = await response.json();
return (data as BigSegmentMembership)?.values;
}

Expand Down
49 changes: 28 additions & 21 deletions packages/sdk/server-node/contract-tests/src/sdkClientEntity.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import got from 'got';

import {
CommandParams,
CreateInstanceParams,
Expand Down Expand Up @@ -184,11 +182,11 @@ function getExecution(order: string) {
}
}

function makeMigrationPostOptions(payload: any) {
function makeMigrationPostOptions(payload: any): RequestInit {
if (payload) {
return { body: payload };
return { method: 'POST', body: payload };
}
return {};
return { method: 'POST' };
}

function contextOrUser(
Expand Down Expand Up @@ -342,44 +340,56 @@ export async function newSdkClientEntity(options: CreateInstanceParams): Promise
check: migrationOperation.trackConsistency ? (a, b) => a === b : undefined,
readNew: async (payload) => {
try {
const res = await got.post(
const res = await fetch(
migrationOperation.newEndpoint,
makeMigrationPostOptions(payload),
);
return LDMigrationSuccess(res.body);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
return LDMigrationSuccess(await res.text());
} catch (err: any) {
return LDMigrationError(err.message);
}
},
writeNew: async (payload) => {
try {
const res = await got.post(
const res = await fetch(
migrationOperation.newEndpoint,
makeMigrationPostOptions(payload),
);
return LDMigrationSuccess(res.body);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
return LDMigrationSuccess(await res.text());
} catch (err: any) {
return LDMigrationError(err.message);
}
},
readOld: async (payload) => {
try {
const res = await got.post(
const res = await fetch(
migrationOperation.oldEndpoint,
makeMigrationPostOptions(payload),
);
return LDMigrationSuccess(res.body);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
return LDMigrationSuccess(await res.text());
} catch (err: any) {
return LDMigrationError(err.message);
}
},
writeOld: async (payload) => {
try {
const res = await got.post(
const res = await fetch(
migrationOperation.oldEndpoint,
makeMigrationPostOptions(payload),
);
return LDMigrationSuccess(res.body);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
return LDMigrationSuccess(await res.text());
} catch (err: any) {
return LDMigrationError(err.message);
}
Expand Down Expand Up @@ -423,14 +433,11 @@ export async function newSdkClientEntity(options: CreateInstanceParams): Promise
const eventName = 'update';

const handler = (eventParams: { key: string }) => {
got
.post(p.callbackUri, {
json: {
listenerId: p.listenerId,
flagKey: eventParams.key,
},
})
.catch(() => {});
fetch(p.callbackUri, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ listenerId: p.listenerId, flagKey: eventParams.key }),
}).catch(() => {});
};

const existing = listeners.get(p.listenerId);
Expand Down
4 changes: 2 additions & 2 deletions packages/sdk/server-node/tsconfig.eslint.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"extends": "./tsconfig.json",
"include": ["/**/*.ts"],
"exclude": ["node_modules"]
"include": ["**/*.ts"],
"exclude": ["node_modules", "dist", "contract-tests"]
}
9 changes: 3 additions & 6 deletions packages/tooling/contract-test-utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,23 +40,20 @@
},
"peerDependencies": {
"@launchdarkly/js-client-sdk-common": "workspace:^",
"@launchdarkly/js-server-sdk-common": "workspace:^",
"got": "14.4.7"
"@launchdarkly/js-server-sdk-common": "workspace:^"
},
"peerDependenciesMeta": {
"@launchdarkly/js-client-sdk-common": {
"optional": true
},
"@launchdarkly/js-server-sdk-common": {
"optional": true
},
"got": {
"optional": true
}
},
"devDependencies": {
"@launchdarkly/js-client-sdk-common": "workspace:^",
"@launchdarkly/js-server-sdk-common": "workspace:^",
"@types/node": "^18.11.9",
"got": "14.4.7",
"typescript": "^4.9.0"
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
import got from 'got';
import { integrations, LDEvaluationDetail } from '@launchdarkly/js-server-sdk-common';
import { BaseTestHook } from '../shared/BaseTestHook.js';

export default class TestHook extends BaseTestHook implements integrations.Hook {
protected async _safePost(body: unknown): Promise<void> {
try {
await got.post(this._endpoint, { json: body });
await fetch(this._endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(body),
});
} catch {
// The test could move on before the post, so we are ignoring
// failed posts.
Expand Down
8 changes: 0 additions & 8 deletions packages/tooling/contract-test-utils/tsconfig.server.json
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
// 'got' is a devDependency; this path alias is needed because TypeScript's
// 'node' moduleResolution does not follow exports maps for ESM-only packages.
"baseUrl": ".",
"paths": {
"got": ["../../../node_modules/got/dist/source"]
}
},
"include": ["src/**/*"],
"exclude": ["dist", "node_modules", "src/client.ts", "src/client-side/**"]
}
Loading