static create()

in packages/sdk/src/Confidence.ts [369:437]


  static create(options: ConfidenceOptions): Confidence {
    const {
      clientSecret,
      region,
      timeout,
      environment,
      fetchImplementation = defaultFetchImplementation(),
      logger = defaultLogger(),
      resolveBaseUrl,
      disableTelemetry = false,
      applyDebounce = 10,
      waitUntil,
      cache = {},
    } = options;
    if (environment !== 'client' && environment !== 'backend') {
      throw new Error(`Invalid environment: ${environment}. Must be 'client' or 'backend'.`);
    }
    const sdk = {
      id: SdkId.SDK_ID_JS_CONFIDENCE,
      version: '0.3.2', // x-release-please-version
    } as const;
    const telemetry = new Telemetry({
      disabled: disableTelemetry,
      environment,
    });
    if (!clientSecret) {
      logger.error?.(`Confidence: confidence cannot be instantiated without a client secret`);
    }
    const cacheProvider = FlagCache.provider(clientSecret, cache);
    const flagResolverClient: FlagResolverClient = new FetchingFlagResolverClient({
      clientSecret,
      fetchImplementation,
      sdk,
      environment,
      resolveTimeout: timeout,
      region,
      resolveBaseUrl,
      telemetry,
      logger,
      applyDebounce,
      waitUntil,
      cacheProvider,
    });
    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({
      ...options,
      flagResolverClient,
      eventSenderEngine,
      logger,
      cacheProvider,
    });
  }