openfeature_provider_intellitoggle 0.0.7 copy "openfeature_provider_intellitoggle: ^0.0.7" to clipboard
openfeature_provider_intellitoggle: ^0.0.7 copied to clipboard

Official IntelliToggle provider for the OpenFeature Dart Server SDK.

openfeature_provider_intellitoggle #

An OpenFeature provider for IntelliToggle, enabling Dart backends to evaluate feature flags using the OpenFeature API standard.

This package integrates seamlessly with openfeature_dart_server_sdk and supports IntelliToggle's advanced targeting, rule-based rollouts, and experimentation platform.


๐Ÿ”ง Features #

  • โœ… Supports Boolean, String, Number, and Object flag evaluations
  • ๐Ÿ“Š Tracking API support (OpenFeature spec Section 6)
  • ๐Ÿ” Real-time updates via IntelliToggle event system
  • ๐Ÿงช Includes InMemoryProvider for local development and testing
  • ๐ŸŒ Optional OFREP server support for remote evaluation (e.g. test suites)
  • ๐Ÿ“ˆ OpenTelemetry-compatible telemetry hooks

๐Ÿ’ป Installation #

Add to your server-side Dart project:

dependencies:
  openfeature_dart_server_sdk: ^0.0.17
  openfeature_provider_intellitoggle: ^0.0.7

Then install:

dart pub get

๐Ÿš€ Getting Started #

import 'package:openfeature_provider_intellitoggle/openfeature_provider_intellitoggle.dart';

void main() async {
  print('Starting IntelliToggle provider with OAuth2 Credentials...\n');

  final provider = IntelliToggleProvider(
    clientId: "client_id",
    clientSecret: "cs_secret",
    tenantId: "tenant_id",
    options: IntelliToggleOptions(enableLogging: true),
  );

  print('Provider created, initializing...\n');
  await provider.initialize();
  print('โœ“ Provider initialized successfully!\n');

  final api = OpenFeatureAPI();
  api.setProvider(provider);

  // Evaluate a boolean flag
  // result.flagKey, result.value, result.evaluatedAt, result.reason
  final result = await provider.getBooleanFlag('new-dashboard', false);

  if (result.errorCode != null) {
    print('โœ— Error Code: ${result.errorCode}');
    print('โœ— Error Message: ${result.errorMessage}');
  } else {
    print('');
    print('Flag value: ${result.value}'); // Flag evaluated value
  }
  print('');

  await provider.shutdown();
  print('โœ“ Test completed successfully!');
}

๐Ÿงช IntelliToggleClient Test #

import 'package:openfeature_dart_server_sdk/hooks.dart';
import 'package:openfeature_provider_intellitoggle/openfeature_provider_intellitoggle.dart';

void main() async {
  print('Starting IntelliClient test with OAuth2...\n');

  final provider = IntelliToggleProvider(
    clientId: "client_id",
    clientSecret: "cs_secret",
    tenantId: "tenant_id",
    options: IntelliToggleOptions(
      enableLogging: true,
    ),
  );

  print('Provider created, initializing...\n');
  await provider.initialize();
  print('โœ“ Provider initialized successfully!\n');

  final api = OpenFeatureAPI();
  api.setProvider(provider);

  // Create a client
  final clientMetadata = ClientMetadata(name: 'test-client', version: '0.0.1');
  final hookManager = HookManager();
  final defaultEvalContext = EvaluationContext(attributes: {});
  final featureClient = FeatureClient(
    metadata: clientMetadata,
    provider: provider,
    hookManager: hookManager,
    defaultContext: defaultEvalContext,
  );
  final client = IntelliToggleClient(featureClient);

  // Evaluate your feature flags
  final newFeatureEnabled = await client.getBooleanValue('new-dashboard-ui', false);

  print('Flag value: ${newFeatureEnabled}');

  // Track a user action (OpenFeature spec Section 6)
  await client.track(
    'dashboard-viewed',
    targetingKey: 'user-123',
    trackingDetails: TrackingEventDetails(
      value: 1.0,
      attributes: {'source': 'sidebar'},
    ),
  );

  await provider.shutdown();
  print('โœ“ Test completed successfully!');
}

๐Ÿงช Local Development & Testing #

Use the included InMemoryProvider for fast testing without external dependencies:

import 'package:openfeature_provider_intellitoggle/openfeature_provider_intellitoggle.dart';
import 'package:openfeature_dart_server_sdk/hooks.dart';

void main() async {
  print('Starting IntelliToggle provider test with InMemoryProvider...\n');

  final provider = InMemoryProvider();

  print('Provider created, initializing...');
  await provider.initialize();
  print('โœ“ Provider initialized successfully!\n');

  final api = OpenFeatureAPI();
  api.setProvider(provider);

  // Create a client
  final clientMetadata = ClientMetadata(name: 'test-client', version: '0.0.1');
  final hookManager = HookManager();
  final defaultEvalContext = EvaluationContext(attributes: {});
  final featureClient = FeatureClient(
    metadata: clientMetadata,
    provider: provider,
    hookManager: hookManager,
    defaultContext: defaultEvalContext,
  );
  final client = IntelliToggleClient(featureClient);

  provider.setFlag('bool-flag', true);

  // Evaluate your feature flags
  final newFeatureEnabled = await client.getBooleanValue('bool-flag', false);

  print('Flag value: $newFeatureEnabled'); // true

  await provider.shutdown();
  print('โœ“ Test completed successfully!');
}

โš™๏ธ Remote Evaluation (Optional) #

OREP Server #

Start the local remote flag evaluation API:

dart run bin/orep_server.dart

Configure using environment variables:

Variable Default
OREP_PORT 8080
OREP_HOST 0.0.0.0
OREP_AUTH_TOKEN changeme-token

OFREP Client (Remote Evaluation) #

The provider can call an OFREP-compliant endpoint for remote flag evaluation.

  • Enable via options or environment variables.
  • Maps OFREP responses to OpenFeature ProviderEvaluation including value, variant, reason, errorCode, and flagMetadata.
  • Supports retries, timeouts, and optional in-memory cache keyed by (flagKey + context).

Environment variables:

OFREP_ENABLED=true
OFREP_BASE_URL=https://ofrep.example.com
OFREP_AUTH_TOKEN=your_bearer_token
OFREP_TIMEOUT_MS=5000
OFREP_MAX_RETRIES=3
OFREP_CACHE_TTL_MS=60000

Code example:

final provider = IntelliToggleProvider(
  clientId: 'client_id',
  clientSecret: 'cs_secret',
  tenantId: 'tenant_id',
  options: IntelliToggleOptions(
    useOfrep: true,
    ofrepBaseUri: Uri.parse('https://ofrep.example.com'),
    cacheTtl: const Duration(minutes: 1),
    maxRetries: 3,
    timeout: const Duration(seconds: 5),
  ),
);
await OpenFeatureAPI().setProvider(provider);

final client = IntelliToggleClient(
  FeatureClient(
    metadata: ClientMetadata(name: 'service-x'),
    hookManager: HookManager(),
    defaultContext: EvaluationContext(attributes: {}),
  ),
);

final result = await client.getBooleanValue(
  'my-flag',
  false,
  targetingKey: 'user-123',
  evaluationContext: {'region': 'us-east-1'},
);

๐Ÿ“š Resources #


๐Ÿ“ License #

Apache-2.0

0
likes
150
points
469
downloads

Documentation

API reference

Publisher

verified publisheraortem.io

Weekly Downloads

Official IntelliToggle provider for the OpenFeature Dart Server SDK.

Homepage
Repository (GitHub)
View/report issues
Contributing

License

BSD-3-Clause (license)

Dependencies

fixnum, grpc, http, jwt_generator, meta, openfeature_dart_server_sdk, protobuf

More

Packages that depend on openfeature_provider_intellitoggle