UNPKG

@flags-sdk/bucket

Version:

Bucket.co provider for the Flags SDK

81 lines (75 loc) 2.33 kB
"use strict";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