in packages/sdk/src/Confidence.ts [342:400]
static create({
clientSecret,
region,
timeout,
environment,
fetchImplementation = defaultFetchImplementation(),
logger = defaultLogger(),
resolveBaseUrl,
disableTelemetry = false,
}: ConfidenceOptions): Confidence {
const sdk = {
id: SdkId.SDK_ID_JS_CONFIDENCE,
version: '0.2.2', // x-release-please-version
} as const;
const telemetry = new Telemetry({
disabled: disableTelemetry,
logger,
environment,
});
let flagResolverClient: FlagResolverClient = new FetchingFlagResolverClient({
clientSecret,
fetchImplementation,
sdk,
environment,
resolveTimeout: timeout,
region,
resolveBaseUrl,
telemetry,
});
if (environment === 'client') {
flagResolverClient = new CachingFlagResolverClient(flagResolverClient, Number.POSITIVE_INFINITY);
}
const estEventSizeKb = 1;
const flushTimeoutMilliseconds = 500;
// default grpc payload limit is 4MB, so we aim for a 1MB batch-size
const maxBatchSize = Math.floor(1024 / estEventSizeKb);
const eventSenderEngine = new EventSenderEngine({
clientSecret,
maxBatchSize,
flushTimeoutMilliseconds,
fetchImplementation,
region,
// we set rate limit to support the flushTimeout
// on backend, the rate limit would be ∞
rateLimitRps: environment === 'client' ? 1000 / flushTimeoutMilliseconds : Number.POSITIVE_INFINITY,
// the request is queued or in flight in memory to be sent.
// max memory consumption is 50MB
maxOpenRequests: (50 * 1024) / (estEventSizeKb * maxBatchSize),
logger,
});
return new Confidence({
environment: environment,
flagResolverClient,
eventSenderEngine,
timeout,
logger,
clientSecret,
});
}