Credential Issuance
Install Dependency
Package: affinidi_tdk_credential_issuance_client
dart pub add affinidi_tdk_credential_issuance_client
You can check the latest version of this module on the pub.dev or view the source code at the GitHub repository.
Classes and Methods
Configuration API
Manage the issuance configuration for the project. Project only one issuance configuration.
createIssuanceConfig
Create an issuance configuration for the project.
Parameters
CreateIssuanceConfigInput [Object]
JSON object to provide the details of the configuration. See more here.
Example
import 'package:dio/dio.dart';
import 'package:built_collection/built_collection.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final name = 'TestConfig';
final description = 'Test issuance config';
final format = CreateIssuanceConfigInputFormatEnum.ldpVc;
final credentialOfferDuration = 600;
final metadata = SupportedCredentialMetadataBuilder()
..display = ListBuilder([
SupportedCredentialMetadataDisplayInner((b) => b
..name = 'Test Display'
..logo = (SupportedCredentialMetadataItemLogoBuilder()
..url = 'https://example.com/logo.png'
..altText = 'Logo'))
]);
final credentialSupported = [
CredentialSupportedObject((b) => b
..credentialTypeId = 'SchemaOne'
..jsonSchemaUrl = 'https://schema.affinidi.io/SchemaOne.json'
..jsonLdContextUrl = 'https://schema.affinidi.io/SchemaOne.jsonld'
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = 'SchemaTwo'
..jsonSchemaUrl = 'https://schema.affinidi.io/SchemaTwo.json'
..jsonLdContextUrl = 'https://schema.affinidi.io/SchemaTwo.jsonld'
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = 'SchemaThree'
..jsonSchemaUrl = 'https://schema.affinidi.io/SchemaThree.json'
..jsonLdContextUrl = 'https://schema.affinidi.io/SchemaThree.jsonld'
..metadata = metadata),
CredentialSupportedObject((b) => b
..credentialTypeId = 'SchemaFour'
..jsonSchemaUrl = 'https://schema.affinidi.io/SchemaFour.json'
..jsonLdContextUrl = 'https://schema.affinidi.io/SchemaFour.jsonld'
..metadata = metadata),
];
final configInputBuilder = CreateIssuanceConfigInputBuilder()
..issuerWalletId = "<WALLET_ID>"
..name = name
..description = description
..format = format
..credentialOfferDuration = credentialOfferDuration
..credentialSupported = ListBuilder(credentialSupported);
final response = (await configurationApi.createIssuanceConfig(createIssuanceConfigInput: configInputBuilder.build()));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
deleteIssuanceConfigById
Delete the issuance configuration by ID.
Parameters
configurationId [String]
ID of the issuance configuration to delete.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final configurationId = "<CONFIG_ID>";
final response = (await configurationApi.deleteIssuanceConfigById(configurationId: configurationId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
getIssuanceConfigById
Retrieves the Issuance Configuration details by ID.
Parameters
configurationId [String]
ID of the issuance configuration to retrieve.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final configurationId = "<CONFIG_ID>";
final response = (await configurationApi.getIssuanceConfigById(configurationId: configurationId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
getIssuanceConfigList
Get the list of issuance configuration for the current project.
Parameters
No Parameters Required
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final response = ( await configurationApi.getIssuanceConfigList());
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
updateIssuanceConfigById
Update the existing Issuance Configuration by ID.
Parameters
configurationId [String]
ID of the issuance configuration to retrieve.
UpdateIssuanceConfigInput [Object]
JSON object to provide the details to update the issuance configuration. See more here.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late ConfigurationApi configurationApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
configurationApi = issuanceClient.getConfigurationApi();
final String updatedDescription = 'UpdatedDescription';
final configurationId = "<CONFIG_ID>";
final updateIssuanceConfigInput = UpdateIssuanceConfigInputBuilder()
..description = updatedDescription;
final response = (await configurationApi.updateIssuanceConfigById(configurationId: configurationId, updateIssuanceConfigInput: updateIssuanceConfigInput.build())).data;
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
Issuance API
Use to initiate issuance of the credential and check the status.
issuanceState
Retrieve the status of issuance.
Parameters
issuanceId [String]
ID of the initiated issuance.
projectId [String]
Project ID from where the issuance was initiated.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final issuanceId = "<ISSUANCE_ID>";
final projectId = "<PROJECT_ID>";
final response = (await issuanceApi.issuanceState(issuanceId: issuanceId, projectId: projectId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
listIssuance
Get the list of issuance initiated in the Project.
Parameters
projectId [String]
Project ID from where to list the issuance.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final projectId = "<PROJECT_ID>";
final response = (await issuanceApi.listIssuance(projectId: projectId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
startIssuance
Used to initiate the issuance of the credential.
Parameters
projectId [String]
Project ID from where to initiate the issuance.
StartIssuanceInput [Object]
JSON object to provide the details of the credentials to issue. See more here.
Example
import 'package:built_collection/built_collection.dart';
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
import 'package:built_value/json_object.dart';
try {
late IssuanceApi issuanceApi;
final issuanceClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
issuanceApi = issuanceClient.getIssuanceApi();
final projectId = "<PROJECT_ID>";
final credentialTypeId = "SchemaOne";
final credentialData = {
"first_name": "FirstName",
"last_name": "LastName",
"dob": "1970-01-01",
};
final credentialDataBuilder = MapBuilder<String, JsonObject>(credentialData.map((key, value) => MapEntry(key, JsonObject(value))),);
final data = StartIssuanceInputDataInnerBuilder()
..credentialTypeId = credentialTypeId
..credentialData.replace(credentialDataBuilder.build());
final startIssuanceInput = StartIssuanceInputBuilder()
..holderDid = "did:key:holder-did-value"
..claimMode = StartIssuanceInputClaimModeEnum.FIXED_HOLDER
..data = ListBuilder<StartIssuanceInputDataInner>([data.build()]);
final response = (await issuanceApi.startIssuance(projectId: projectId, startIssuanceInput: startIssuanceInput.build()));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
Credentials API
Issue a Verifiable Credentials to the users.
generateCredentials
Generate and issue a credentil offer to the user.
Parameters
projectId [String]
Project ID from where you want to issue the credential.
CreateCredentialInput [Object]
JSON object to provide the details of the credential to generate. See more here.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late CredentialsApi credentialsApi;
final credentialsClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
credentialsApi = credentialsClient.getCredentialsApi();
final projectId = "<PROJECT_ID>";
final proofType = CredentialProofProofTypeEnum.jwt;
final proof = CredentialProofBuilder()
.. proofType = proofType
.. jwt = "eyJ0eXAiOiJvcGVuaWQ0dmNpLXByb29mK2p3dCIsImFsZyI6IkVTMjU2IiwiandrI
jp7Imt0eSI6IkVDIiwiY3J2IjoiUC0yNTYiLCJ4IjoiblVXQW9BdjNYWml0aDhFN2k
xOU9kYXhPTFlGT3dNLVoyRXVNMDJUaXJUNCIsInkiOiJIc2tIVThCalVpMVU5WHFpN
1N3bWo4Z3dBS18weGtjRGpFV183MVNvc0VZIn19.eyJhdWQiOiJodHRwczovL2NyZW
RlbnRpYWwtaXNzdWVyLmV4YW1wbGUuY29tIiwiaWF0IjoxNzAxOTYwNDQ0LCJub25j
ZSI6IkxhclJHU2JtVVBZdFJZTzZCUTR5bjgifQ.-a3EDsxClUB4O3LeDD5DVGEnNMT
01FCQW4P6-2-BNBqc_Zxf0Qw4CWayLEpqkAomlkLb9zioZoipdP-jvh1WlA"
final createCredentialInput = CreateCredentialInputBuilder()
..credentialIdentifier = "UniversityDegree-2024"
..proof = proof;
final response = (await credentialsApi.generateCredentials(projectId: projectId, createCredentialInput: createCredentialInput.build()));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
Default API
Revoke a revocable Verifiable Credentials issued to the users.
changeCredentialStatus
Updates the status of the credential (e.g., REVOKED).
Parameters
projectId [String]
Project ID from where the credential is issued.
configurationId [String]
Configuration ID from where the credential is issued.
ChangeCredentialStatusInput [Object]
JSON object with details of the credential to revoke. See more here.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late DefaultApi defaultApi;
final defaultClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
defaultApi = defaultClient.getDefaultApi();
final projectId = "<PROJECT_ID>";
final configurationId = "<CONFIG_ID>";
final changeCredentialStatusInput = ChangeCredentialStatusInputBuilder()
..changeReason = ChangeCredentialStatusInputChangeReasonEnum.INVALID_CREDENTIAL;
final response = (await defaultApi.changeCredentialStatus(projectId: projectId, configurationId: configurationId, changeCredentialStatusInput: changeCredentialStatusInput.build()));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
listIssuanceDataRecords
Retrieves the list of records of revocable credentials. The list contains information about the issued credential, such as status, including the record ID, which you can use to revoke a particular credential.
Parameters
projectId [String]
Project ID from where the credential is issued.
configurationId [String]
Configuration ID from where the credential is issued.
limit [Integer]
Maximum number of records to fetch in a list.
exclusiveStartKey [String]
The base64url encoded key of the first item that this operation will evaluate (it is not returned). Use the value that was returned in the previous operation.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late DefaultApi defaultApi;
final defaultClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
defaultApi = defaultClient.getDefaultApi();
final projectId = "<PROJECT_ID>";
final configurationId = "<CONFIG_ID>";
final response = (await defaultApi.listIssuanceDataRecords(projectId: projectId, configurationId: configurationId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
Offer API
Used to get the credential offer initiated by the Issuance API.
getCredentialOffer
Retrieves the credential offer details.
Parameters
projectId [String]
Project ID from where the credential is issued.
issuanceId [String]
ID of the issuance initiated.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late OfferApi offerApi;
final offerClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
offerApi = offerClient.getOfferApi();
final projectId = "<PROJECT_ID>";
final issuanceId = "<ISSUANCE_ID>";
final response = (await offerApi.getCredentialOffer(issuanceId: issuanceId, projectId: projectId));
print(response);
} catch (e) {
print('Error obtaining token: $e');
}
WellKnown API
Used to get the WellKnown OpenID Credential Issuer information.
getWellKnownOpenIdCredentialIssuer
Retrieves the credential issuer well-known configurations.
Parameters
projectId [String]
Project ID from where the credential is issued.
Example
import 'package:dio/dio.dart';
import 'package:affinidi_tdk_auth_provider/affinidi_tdk_auth_provider.dart';
import 'package:affinidi_tdk_credential_issuance_client/affinidi_tdk_credential_issuance_client.dart';
import 'package:dotenv/dotenv.dart';
try {
late WellKnownApi wellKnownApi;
final wellKnownClient = AffinidiTdkCredentialIssuanceClient(
dio: Dio(BaseOptions(
baseUrl: AffinidiTdkCredentialIssuanceClient.basePath,
connectTimeout: const Duration(seconds: 10),
receiveTimeout: const Duration(seconds: 10),
)),
authTokenHook: authProvider.fetchProjectScopedToken);
wellKnownApi = wellKnownClient.getWellKnownApi();
final projectId = "<PROJECT_ID>";
final response = (await wellKnownApi.getWellKnownOpenIdCredentialIssuer(projectId: projectId));
print(response);
} catch (e) {
print('Error obtaining token: $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.