@devcycle/nextjs-sdk
Version:
The Next.js SDK for DevCycle!
44 lines • 1.68 kB
JavaScript
import { serializeUserSearchParams } from '../common/serializeUser';
import { cache } from 'react';
import { ConfigBody } from '@devcycle/types';
import { plainToInstance } from 'class-transformer';
const getFetchUrl = (sdkKey, obfuscated) => `https://config-cdn.devcycle.com/config/v2/server/bootstrap/${obfuscated ? 'obfuscated/' : ''}${sdkKey}.json`;
export const fetchCDNConfig = cache(async (sdkKey, clientSDKKey, obfuscated) => {
const response = await fetch(getFetchUrl(sdkKey, obfuscated),
// only store for 60 seconds
{
next: {
revalidate: 60,
tags: [sdkKey, clientSDKKey],
},
});
if (!response.ok) {
const responseText = await response.text();
throw new Error('Could not fetch config: ' + responseText);
}
return {
config: plainToInstance(ConfigBody, await response.json()),
headers: response.headers,
};
});
const getSDKAPIUrl = (sdkKey, obfuscated, user) => {
const searchParams = new URLSearchParams();
serializeUserSearchParams(user, searchParams);
searchParams.set('sdkKey', sdkKey);
if (obfuscated) {
searchParams.set('obfuscated', '1');
}
searchParams.set('sdkPlatform', 'nextjs');
searchParams.set('sse', '1');
return `https://sdk-api.devcycle.com/v1/sdkConfig?${searchParams.toString()}`;
};
export const sdkConfigAPI = cache(async (sdkKey, obfuscated, user) => {
const response = await fetch(getSDKAPIUrl(sdkKey, obfuscated, user), {
next: {
revalidate: 60,
tags: [sdkKey, user.user_id],
},
});
return (await response.json());
});
//# sourceMappingURL=requests.js.map