Affinidi Iota Framework
Install Dependency
Package: affinidi_tdk_iota_client
dart pub add affinidi_tdk_iota_clientCheck 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
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
RequiredExample
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
RequiredExample
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
RequiredconfigurationId
String
RequiredExample
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
RequiredExample
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
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
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
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
OptionaluserId
String
Optionallimit
Integer
OptionalexclusiveStartKey
String
OptionalExample
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
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
RequiredExample
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
RequiredqueryId
String
RequiredExample
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
RequiredqueryId
String
RequiredExample
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
Requiredlimit
Integer
OptionalExample
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
RequiredqueryId
String
RequiredExample
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');
}Glad to hear it! Please tell us how we can improve more.
Sorry to hear that. Please tell us how we can improve.
Thank you for sharing your feedback so we can improve your experience.