Affinidi Iota Framework

Manage Affinidi Iota Framework configuration to request data from Affinidi Vault.

Install Dependency

Package: affinidi_tdk_iota_client

  dart pub add affinidi_tdk_iota_client

Check the latest version on pub.dev or view the source on GitHub.

Classes and Methods

Configurations API

Manage Affinidi Iota Framework configurations to integrate your application to request data from Affinidi Vault.

createIotaConfiguration

Create an Affinidi Iota Framework configuration.

Parameters

createIotaConfigurationInput CreateIotaConfigurationInput Required
Configuration details for the Iota Framework.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';
import 'package:built_collection/built_collection.dart';

try {
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
        dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final clientMetadata = IotaConfigurationDtoClientMetadataBuilder()
      ..name = "TestName"
      ..logo = "https://example.com/logo.png"
      ..origin = "https://example.com"
      ..build();

    final createIotaConfigurationInput = CreateIotaConfigurationInputBuilder()
      ..name ="Sample App"
      ..walletAri = "<WALLET_ARI>"
      ..redirectUris = ListBuilder<String>(["http://localhost"]) 
      ..enableVerification = false
      ..enableConsentAuditLog = false
      ..clientMetadata = clientMetadata
      ..description = "Description"
      ..mode = CreateIotaConfigurationInputModeEnum.redirect
      ..enableIdvProviders = false;

    final configuration = (await configurationsApi.createIotaConfiguration(createIotaConfigurationInput: createIotaConfigurationInput.build())).data;

    print(configuration);
  } catch (e) {
    print('Exception: $e');
  }

deleteIotaConfigurationById

Delete an existing Affinidi Iota Framework configuration by ID.

Parameters

configurationId String Required
ID of the Affinidi Iota configuration to delete.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final configurationId = "<CONFIG_ID>";
    
    final response = (await configurationsApi.deleteIotaConfigurationById(configurationId: configurationId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

getIotaConfigurationById

Retrieves an existing Affinidi Iota Framework configuration by ID.

Parameters

configurationId String Required
ID of the Affinidi Iota configuration to retrieve.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final configurationId = "<CONFIG_ID>";

    final response = (await configurationsApi.getIotaConfigurationById(configurationId: configurationId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

getIotaConfigurationMetaData

Retrieves the metadata of an existing Affinidi Iota Framework configuration.

Parameters

projectId String Required
Project ID where the Affinidi Iota Framework was created.
configurationId String Required
ID of the existing Affinidi Iota Framework configuration.

Example

import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final configurationId = "<CONFIG_ID>";
    final projectId =  "<PROJECT_ID>";

    final response = (await configurationsApi.getIotaConfigurationMetaData(configurationId: configurationId, projectId: projectId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

listIotaConfigurations

List all Affinidi Iota Framework configurations.

No parameters required.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final response = (await configurationsApi.listIotaConfigurations());
    
    print(response);
  } catch (e) {
    print('Exception: $e');
  }

updateIotaConfigurationById

Update an existing Affinidi Iota Framework configuration by ID.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
updateConfigurationByIdInput UpdateConfigurationByIdInput Required
Updated configuration details.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late ConfigurationsApi configurationsApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    configurationsApi = apiClient.getConfigurationsApi();

    final updateConfigurationByInput = UpdateConfigurationByIdInputBuilder()
          ..name ="Sample App";
          
    final configurationId = "<CONFIG_ID>";

    final response = (await configurationsApi.updateIotaConfigurationById(configurationId: configurationId, updateConfigurationByIdInput: updateConfigurationByInput.build()));
    
    print(response);
  } catch (e) {
    print('Exception: $e');
  }

Iota API

Generate access token required to access the Affinidi Iota Framework.

awsExchangeCredentials

Exchanges a limited token into a Cognito token.

Parameters

awsExchangeCredentials AwsExchangeCredentials Required
JWT assertion string.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {

    late IotaApi iotaApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    iotaApi = apiClient.getIotaApi();

    final assertion = '<JWT_STRING>';

    final awsExchangeCredentials = AwsExchangeCredentialsBuilder()
       ..assertion= assertion;

    final response = (await iotaApi.awsExchangeCredentials(awsExchangeCredentials: awsExchangeCredentials.build())).data;

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

initiateDataSharingRequest

Initiate a data-sharing request for Affinidi Iota Framework and return the signed request token.

Parameters

initiateDataSharingRequestInput InitiateDataSharingRequestInput Required
Details required to initiate the data sharing request.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late IotaApi iotaApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    iotaApi = apiClient.getIotaApi();

    final initiateDataSharingRequestInput = InitiateDataSharingRequestInputBuilder()
      ..configurationId = "<IOTA_CONFIGURATION_ID>"
      ..mode = InitiateDataSharingRequestInputModeEnum.redirect
      ..queryId = "<IOTA_CONFIGURATION_QUERY_ID>"
      ..correlationId = "<uuid4_string>"
      ..nonce = "<NONCE_FROM_FRONTEND>"
      ..redirectUri = "<IOTA_CONFIGURATION_REDIRECT_URL>";

    final response = (await iotaApi.initiateDataSharingRequest(initiateDataSharingRequestInput: initiateDataSharingRequestInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

fetchIotaVpResponse

Fetch the callback response from Affinidi Vault.

Parameters

fetchIOTAVPResponseInput FetchIOTAVPResponseInput Required
Details required to retrieve the callback response.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late IotaApi iotaApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    iotaApi = apiClient.getIotaApi();

    final fetchIOTAVPResponseInput = FetchIOTAVPResponseInputBuilder()
      ..configurationId = "<IOTA_CONFIGURATION_ID>"
      ..correlationId = "<CORRELATION_ID_FROM_LOCAL_STORAGE>"
      ..transactionId = "<TRANSACTION_ID_FROM_LOCAL_STORAGE>"
      ..responseCode = "<RESPONSE_CODE_FROM_REDIRECT>";
    
    final response = (await iotaApi.fetchIotaVpResponse(fetchIOTAVPResponseInput: fetchIOTAVPResponseInput.build()));
   
    print(response);
  } catch (e) {
    print('Exception: $e');
  }

Default API

Manage logged consent from Affinidi Iota Framework.

listLoggedConsents

Returns the list of logged consents for the project.

Parameters

configurationId String Optional
Returns logged consents for the particular configuration.
userId String Optional
Returns logged consents for the particular user.
limit Integer Optional
Maximum number of records to fetch in a list.
exclusiveStartKey String Optional
The base64url encoded key of the first item this operation will evaluate.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late DefaultApi defaultApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    defaultApi = apiClient.getDefaultApi();

    final configurationId = "<IOTA_CONFIGURATION_ID>";
    final limit = 56;

    final response = (await defaultApi.listLoggedConsents(configurationId: configurationId, limit: limit));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

PexQuery API

iotOIDC4VPCallback

Handles callback from clients with data from the OID4VP transactions, including states, presentation submission, and verification tokens.

Parameters

callbackInput CallbackInput Required
Callback data from the client.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late CallbackApi callbackApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    callbackApi = apiClient.getCallbackApi();

    final callbackInput = CallbackInputBuilder()
      ..state = "<RANDOM_STRING>"
      ..vpToken = '<VERIFIABLE_PRESENTATION_OBJECT>'
      ..presentationSubmission = '<PRESENTATION_SUBMISSION_OBJECT>';
    
    final response = (await callbackApi.iotOIDC4VPCallback(callbackInput: callbackInput.build()));
    
    print(response);
  } catch (e) {
    print('Exception: $e');
  }

createPexQuery

Create a Presentation Definition in the Iota configuration.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
createPexQueryInput CreatePexQueryInput Required
PEX query details.

Example

import 'package:dio/dio.dart';
import 'dart:convert';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late PexQueryApi pexQueryApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    pexQueryApi = apiClient.getPexQueryApi();

    final createPexQueryInput = CreatePexQueryInputBuilder()
      ..name = "Request Data"
      ..vpDefinition = "{PRESENTATION_DEFINITION_JSON_STRING}";

    final configurationId = "<CONFIG_ID>";

    final response = (await pexQueryApi.createPexQuery(configurationId: configurationId,createPexQueryInput: createPexQueryInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

deletePexQueryById

Delete a Presentation Definition based on the query ID from the Iota configuration.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
queryId String Required
ID of the existing Presentation Definition.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late PexQueryApi pexQueryApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    pexQueryApi = apiClient.getPexQueryApi();

    final configurationId = "<CONFIG_ID>";
    final queryId = "<QUERY_ID>";

    final response = (await pexQueryApi.deletePexQueryById(configurationId: configurationId, queryId: queryId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

getPexQueryById

Retrieves a Presentation Definition based on the query ID from the Iota configuration.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
queryId String Required
ID of the existing Presentation Definition.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late PexQueryApi pexQueryApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    pexQueryApi = apiClient.getPexQueryApi();

    final configurationId = "<CONFIG_ID>";
    final queryId = "<QUERY_ID>";
  
    final response = (await pexQueryApi.getPexQueryById(configurationId: configurationId, queryId: queryId));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

listPexQueries

Retrieves all Presentation Definitions in the Iota configuration.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
limit Integer Optional
Maximum number of records to return.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late PexQueryApi pexQueryApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    pexQueryApi = apiClient.getPexQueryApi();

    final configurationId = "<CONFIG_ID>";
    final limit = 56;
  
    final response = (await pexQueryApi.listPexQueries(configurationId: configurationId, limit: limit));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }

updatePexQueryById

Update a Presentation Definition based on the query ID from the Iota configuration.

Parameters

configurationId String Required
ID of the existing Affinidi Iota Framework configuration.
queryId String Required
ID of the existing Presentation Definition.
updatePexQueryInput UpdatePexQueryInput Required
Updated PEX query details.

Example

import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_iota_client/affinidi_tdk_iota_client.dart';
import 'package:dotenv/dotenv.dart';

try {
    
    late PexQueryApi pexQueryApi;

    final dio = Dio(BaseOptions(
        baseUrl: AffinidiTdkIotaClient.basePath,
        connectTimeout: const Duration(seconds: 5),
        receiveTimeout: const Duration(seconds: 5),
    ));

    final apiClient = AffinidiTdkIotaClient(
       dio: dio, authTokenHook: authProvider.fetchProjectScopedToken);

    pexQueryApi = apiClient.getPexQueryApi();

    final updatePexQueryInput = UpdatePexQueryInputBuilder()
      ..vpDefinition = "{PRESENTATION_DEFINITION_JSON_STRING}"
      ..description = "Request Data";

    final configurationId = "<CONFIG_ID>";
    final queryId = "<QUERY_ID>";
    
    final response = (await pexQueryApi.updatePexQueryById(configurationId: configurationId, queryId: queryId, updatePexQueryInput: updatePexQueryInput.build()));

    print(response);
  } catch (e) {
    print('Exception: $e');
  }