@flags-sdk/bucket
Version:
Bucket.co provider for the Flags SDK
81 lines • 2.06 kB
JavaScript
// src/index.ts
import {
BucketClient
} from "@bucketco/node-sdk";
var defaultBucketAdapter;
function assertEnv(name) {
const value = process.env[name];
if (!value) {
throw new Error(`@flags-sdk/bucket: Missing ${name} environment variable`);
}
return value;
}
function createBucketAdapter(clientOptions) {
let bucketClient;
async function initialize() {
if (!bucketClient) {
try {
bucketClient = new BucketClient(clientOptions);
} catch (err) {
console.error("@flags-sdk/bucket: Error creating bucketClient", err);
throw err;
}
}
return bucketClient.initialize();
}
function featureIsEnabled(options) {
return {
async decide({ key, entities }) {
await initialize();
return bucketClient.getFeature({ ...options, ...entities }, key).isEnabled;
}
};
}
return {
featureIsEnabled,
bucketClient: async () => {
await initialize();
return bucketClient;
}
};
}
function getOrCreateDefaultAdapter() {
if (!defaultBucketAdapter) {
const secretKey = assertEnv("BUCKET_SECRET_KEY");
defaultBucketAdapter = createBucketAdapter({ secretKey });
}
return defaultBucketAdapter;
}
var bucketAdapter = {
featureIsEnabled: (...args) => getOrCreateDefaultAdapter().featureIsEnabled(...args),
bucketClient: async () => {
return getOrCreateDefaultAdapter().bucketClient();
}
};
async function getProviderData({
bucketClient
} = {}) {
if (!bucketClient) {
bucketClient = await getOrCreateDefaultAdapter().bucketClient();
}
const features = await bucketClient.getFeatureDefinitions();
return {
definitions: features.reduce((acc, item) => {
acc[item.key] = {
options: [
{ label: "Disabled", value: false },
{ label: "Enabled", value: true }
],
description: item.description ?? void 0
};
return acc;
}, {}),
hints: []
};
}
export {
bucketAdapter,
createBucketAdapter,
getProviderData
};
//# sourceMappingURL=index.js.map