@flags-sdk/bucket
Version:
Bucket.co provider for the Flags SDK
81 lines (75 loc) • 2.33 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }// src/index.ts
var _nodesdk = require('@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 (0, _nodesdk.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: _nullishCoalesce(item.description, () => ( void 0))
};
return acc;
}, {}),
hints: []
};
}
exports.bucketAdapter = bucketAdapter; exports.createBucketAdapter = createBucketAdapter; exports.getProviderData = getProviderData;
//# sourceMappingURL=index.cjs.map