- Support reading exchanges that have externally stored
variables. This update ensures that if any exchangevariableshave been externally stored, they will loaded when an exchange record is loaded. However, it does not automatically externalizevariablesthat are over 10MiB in size as that is considered a breaking change. That breaking change will be released in a new major version (unless it is determined that the change can be made in a non-breaking fashion).
- Properly enforce
exchange.expires. Throw an error when creating a new exchange ifexchange.expiresis not set (which can be done via the HTTP API by setting it directly or indirectly by setting thettlproperty).
- Support
di_vpDID Auth proofs in OID4VCI.
- Use
@digitalbazaar/oid4-client@5.11to supportvp_tokenvalues that are objects.
- Do not require
presentation_submissionin OID4VP.
- Add support for OID4VCI 1.0 credential requests.
- Add
supportedMediaTypesto issuer instance options in workflow configissuerInstancesset. This is the preferred mechanism for specifying the VC media type andsupportedFormatsis now deprecated. - Add optional parameters to each element of
step.issueRequests(these can be used individually or together):issuerInstanceIdto explicitly refer to the issuer instance to use.oid4vci.credentialConfigurationIdto explicitly refer to the OID4VCI credential configuration ID to use; this is to be used in concern withsupportedCredentialConfigurationsas specified on an associated issuer instance.
- Add optional
oid4vci.supportedCredentialConfigurationsparameter to each issuer instance configuration in a workflow'sissuerInstances. This can be used to express the explicit (instead of auto-generated) OID4VCI credential configurations supported by a particular issuer instance in a workflow.
- Use
client_idas verificationdomainwhenredirect_uriprefix is used in theclient_idfor OID4VP.
- Allow OID4VP+OID4VCI-draft13 combinations w/o using presentation submission.
- Allow
verifiablePresentationRequestandreferenceIdin exchange body.
- Support OID4VP 1.0+
request_uri_method=postmetadata option and default to using it (clients that understand it will use it, clients that do not will use the oldGETmethod). - Support OID4VP 1.0+ style prefixed client IDs and enable
OID4VP-draft18client profiles for maximum compatibility with OID4VP draft 18. Draft 18 clients should also be compatible when using theredirect_uriclient ID prefix since it should be treated as opaque by existing clients -- and those clients should parse any origin to present to a user or to check against an allow list by usingresponse_uri, which is unchanged.
- Auto-generated
client_idvalues will now include theredirect_uri:prefix when usingclient_id_scheme=redirect_uri. This is not expected to be a breaking change because the client ID should be treated as opaque by a an OID4VP-Draft18-compliant client. This prefix is a requirement for OID4VP 1.0+ clients.
- Add support for OID4VP w/DC API (ISO 18013-7 Annex C and D).
- Internal code refactoring, no expected external changes.
- Use
oauth-authz-req+jwtin the JWTtypheader (noapplication/prefix to match the media type).
- Use
application/oauth-authz-req+jwtin the JWTtypheader used with an authz request in order to be compliant with OID4VP 1.0.
- Add a
issueRequest.resultoption for specifying an exchange variable name (a top-level name or a JSON pointer intoexchange.variables) to store an issued credential instead of including it a presentation during a step. This feature can be used to implement continuing interactions that need to read issued VCs rather than delivering them directly. To facilitate this, an exchange can return an interaction URL as aredirectUrlfrom the same step or a subsequent step that stored an issued VC in an exchange variable. The subsequent interaction URL can be to a coordinator that is authorized to read the exchange state and generate a new exchange to continue the interaction with the client as needed. - Add
globals.localExchangeIdandglobals.exchangeIdto template variables. - Support using JSON pointer values for variable names, e.g., when specifying the variable in which to store an auto-generated authorization request.
- Use
@digitalbazaar/oid4-client@5.4.1to improveacceptedCryptosuitesprocessing when generating authz requests for OID4VP.
- Add
verifiablePresentationto workflow step for use by coordinators; this property allows an explicit verifiable presentation to be defined for use in a step, including the possibility of expressing credentials that were previously issued out-of-band and are to be delivered along with zero to more other credentials that might be issued during the workflow step. Note that if an explicit verifiable presentation is defined that includes a proof, this proof will likely be invalidated if there are alsoissueRequestsdefined in the step that add newly issued credentials to the presentation.
- Add
verifyPresentationResultsto exchange state for use by coordinators.
- Add automatic zcap-refresh feature.
- Correct
peerDependenciesconstraint for@bedrock/app-identity.
- Ensure exchange callbacks are awaited.
- Export
workflowServicesymbol for programmatic access to workflow service.
- Add support for
inviteRequestprotocol in exchanges. - Enable disabling VC API protocol in exchanges that use another protocol, if desired.
- Add support for accepting mDL device responses as presentations using ISO 18013-7.
- Add support for optional OID4VP
clientProfiles, enabling, for example, a VC API exchange to offer the ISO 18013-7 protocol alongside other protocol options.
- Evaluate the first step of an exchange (when the step is expressed as a template) prior to exchange creation to surface errors earlier.
- Include enveloped VP schema to useExchangeBody.
- Validate enveloped VP after verification.
- Add support for push notification callback URLs in exchanges. Now if the
callbackproperty of a step is set to an object with aurlproperty that has a value of an HTTPS URL, this URL will be POSTed to when the exchange state changes with a body of:{event: {data: {exchangeId}}}.
- Added support for
verifyPresentationOptionsto appear on exchange steps, allowing for more extensible and general step option expression. - Added support for
verifyPresentationResponseSchemato appear on exchange steps, allowing for enforcing validation constraints at the workflow layer.
- Update dependencies.
- Support node >= 20.
- Replace enveloped VCs with the credentials they envelope in the
verifiablePresentationvalue in the exchange state variableresultsunder the current step.
- Fix typo in JSON
EnvelopedVerifiableCredentialschema.
- Allow
EnvelopedVerifiableCredentialto use a string or an array for its@contextvalue.
- Update dependencies.
@digitalbazaar/ed25519-multikey@1.3.1.@digitalbazaar/oid4-client@4.3.0.@digitalbazaar/vc@7.1.2.body-parser@1.20.3.jose@5.10.0.jsonata@2.0.6.serialize-error@12.0.0.
- Update peer dependencies.
@bedrock/core@6.3.0.@bedrock/did-io@10.4.0.- BREAKING:
@bedrock/mongodb@11.- Use MongoDB driver 6.x and update error names and details.
- See changelog for details.
@bedrock/oath2-verifier@2.3.1.- BREAKING:
@bedrock/service-agent@10.- Updated for
@bedrock/mongodb@11.
- Updated for
- BREAKING:
@bedrock/service-core@11.- Updated for
@bedrock/mongodb@11.
- Updated for
@bedrock/validation@7.1.1.
- Update dev dependencies.
- Update test dependencies.
- Use
result.modifiedCountto enable newer mongodb driver. - Remove unused
backgroundoption from mongodb index creation.
- Handle case that verifier instance does not return a
presentationResult.
- Support
jwt_vc_jsonandjwt_vp_jsonaliases forjwt_vc_json-ldandjwt_vpfor OID4*. - Support
di_vcanddi_vpaliases forldp_vcandldp_vpfor OID4*. - Support non-JSON-encoded
vp_tokenvalues, provided that such a value is a JWT, to accommodate OID4* implementations that send bare JWTs asvp_tokensinstead of JSON-encoded JWTs (i.e., JSON strings).
- Allow exchange variables to contain JSON key values that are not supported in mongoDB.
- Ensure a workflow step that includes
issuanceRequestsand no other properties can be executed.
- Add
nonceendpoint to OID4VCI exchanges.
- Remove unnecessary
authorize"authority" in openid4vp URL.
- Add
issueRequestsfeature for expressing parameters for issuing VCs in a particular step. TheissueRequestvalue must be an array, with each element containing parameters for issuing a VC. The parameters must minimally include a credential template ID or index that references a credential template from the associated workflow. The parameters may optionally specify alternative variables to use when evaluating the template, either via an object or a string, where the string includes the name of a variable from the workflow's mainvariables.
- Update multikey dependencies.
- Use
@digitalbazaar/oid4-client@4.1to get latest updates and fixes.
- BREAKING: Use
@digitalbazaar/oid4-client@4to get fix to auto-generated OID4VP authorization requests (useallOfJSON schema instead of invalidcontainswith an array value).
- Add interaction "protocols" URL support.
- Ensure OID4* errors are still logged.
- Improve OID4* errors and use OID4* error style with
erroranderror_description.
- Allow multiple credentials (if they are of the same type) to be returned
from a single OID4VCI exchange using the
credentialendpoint (not the batch endpoint).
- Ensure OID4VP authorization responses (which is sent as a urlencoded payload), can be large enough to accommodate most VPs.
- Ensure contexts in credential definitions are compared using deep equality during OID4VCI.
- Improve verification method controller check error.
- Allow list specific error keys to include in last error.
- Throw better error if DID proof JWT verification method cannot be retrieved
from
kidURL.
- Include
expiresin exchange information. - Include
lastErrorin exchange information.
- Improve error information on failed exchange requests.
- Add support for creating offers that use
credential_offer_urifor OID4VCI by serving an auto-generated credential offer from<exchangeId>/openid/credential-offer.
- Add
credential_configurations_supportedto OID4VCI metadata. - Add
credential_issuerto OID4VCI metadata. - Add auto-generated client metadata for OID4VP when it is not
provided by the exchange creator, using default
vp_formats.
- Ensure default of 15 minutes is set for exchange TTL.
- Fix processing of VC-JWT VPs/VCs in OID4* combined workflows.
- Add support for ECDSA keys (with
ES256andES384algs) for DID JWT proofs. - Add support for VC 2.0 contexts in JSON schemas.
- BREAKING: Update peer dependencies.
@bedrock/core@6.1.3@bedrock/did-io@10.3.1@bedrock/express@8.3.1@bedrock/https-agent@4.1.0@bedrock/mongodb@10.2.0@bedrock/oauth2-verifier@2.1.0@bedrock/service-agent@9.0.2@bedrock/service-core@10.0.0
- Update minor, test, and dev dependencies.
- Fix JSON schema to allow VCs with only a single type.
- Add
presentationSchemaoption to workflow step to enable passing a JSON schema to be run against a submitted presentation.
- Add workflow configuration option to specify
issuerInstanceswith supported formats (such asapplication/vc,ldp_vc, andjwt_vc_json-ldas well aszcapReferenceIdswith at least oneissuereference ID that identifies the zcap in the main configzcapsmap to use to issue VCs using that issuer instance. When multiple issuer instances are provided, a workflow exchange can accept different requested formats from the client.
- The supported formats expressed in
issuerInstances(or the default ofldp_vcwill be used when checking expected credential requests during OID4VCI. This behavior doesn't change from the previous version because the previous version only allowedldp_vcto be included in expected credential requests. Nowjwt_vc_json-ldcan also be passed in an expected credential request, but format can also be omitted entirely since it is no longer used when checking credential requests are valid against the supported list of formats from the issuer instances.
- Include
'pre-authorized_grant_anonymous_access_supported': trueto OID4VCI issuer config meta data. This flag indicates to clients that they do not need to send aclient_idin their request for credentials.
- Support
Multikey-typed andpublicKeyJwk-specified public keys in "DID proof JWTs" for OID4VCI.
- Allow an evaluated credential template to produce a VC API issue
credential request (i.e., including the
credentialparam and any other optional params) as an optional alternative to returning only the value of thecredentialparam for issuance. - Allow clients to provide local workflow IDs as long as they meet the local ID validation requirements. This is to enable clients to ensure that they do not create duplicate workflows.
- Enable OID4VCI+OID4VP flows that include providing an OID4VP authorization request during a credential request that must be fulfilled prior to accepting the credential request(s).
- Expose
exchangersbase route asworkflows, keepingexchangersas a deprecated alias. - Allow workflow steps to include a
allowUnprotectedPresentationboolean that determines whether a workflow will accept an unprotected presentation. This is useful for enabling the submission of VCs to holder workflow services for storage.
- Improve errors returned from failed verification during exchanges.
- NOTE: Deployment configurations that want an easy path to supporting
the new
workflowsalias should be updated to change thevc-exchangerservice underapp-identitytovc-workflowto ensure that a service agent with development-level credentials is not added to the database. Without issuing any meters associated with thevc-workflowservice theworkflowsendpoints will be unusable, but later upgrades to allow their use will require removing this erroneous record, so it is advisable to make this change prior to updating if theworkflowsendpoints are ever intended to be used in a deployment.
- Add support for receiving the
typesproperty in posted credential definitions during OID4VCI even if that does not match the served credential definition in the protocol. The property should likely betypeto match the VC data model, but a OID4VCI draft usestypesin an example and clients have implemented this.
- Add extra oauth/openid config
/.well-knownpaths to accommodate clients that have implemented against what is likely an OID4VCI draft bug.
- Fix
client_id_schemedefault check.
- Fix OID4VP defaults for
client_idandclient_id_scheme.
- Add
redirectUrlfeature in VC API exchanges. AredirectUrlcan now be specified in astepto be included in the result of the step that is passed to the client. - Add optional OID4VP presentation exchange. The current implementation is largely experimental and subject to change, just as the OID4VP spec is undergoing rapid development and is in a draft stage. The current implementation was written against OID4VP draft 20 and only supports a profile of OID4VP that uses data integrity / LDP protected VPs and VCs.
- BREAKING: Update peer deps:
- Use
@bedrock/oauth2-verifier@2. - Use
@bedrock/service-agent@8. - Use
@bedrock/service-core@9.
- Use
- Update test deps.
- Ensure expected
domainmatches value from VPR in exchange.
- Add
stepTemplatefeature. Steps in exchanges may be optionally specified as templates that will use the variables from the exchange.
- Fix uncaught unrejected promise bug when fetching exchange in parallel.
- Serve OpenID credential issuer metadata from
.well-known/openid-credential-issuerin addition to the older / previously used combined metadata config URL:.well-known/oauth-authorization-server.
- Add
vc-api deliveryandVC-API delivery + DID authntests to issue usinggenericcredential template.
- Pass binding variables to jsonata
evaluate()function.
- Add dev application identity for
vc-exchanger.
- Fix meter usage aggregator function.
- Add GET endpoint for getting exchange information from any existing exchange, particularly useful for obtaining its current state and any user-submitted data.
- Ensure exchanges are updated when steps are completed.
- Fix missing dependencies and update old ones.
- Fix
package.jsonexported files.
- Add "batch credential" endpoint support for OpenID-based VC delivery.
- Add
generateKeyPairoption toopenId.oauth2when creating VC exchanges.
- BREAKING: Configurations must use
openIdto specify OID4VCI/OID4VC/OID4* options, notoidc4vci. This change is incompatible with previous versions and any deployed instances must be manually upgraded. - BREAKING: The
/oidc4vciroute has been changed to/openid. - BREAKING: Require
expectedCredentialRequestsinopenIdexchanger config options. It must be an array with one or more elements with thetypeandformatexpected. If more than one element is present, then the exchange can only be fulfilled using the "batch credential" endpoint.
- BREAKING: Update peer deps:
@bedrock/did-ioto v10.0.@bedrock/service-agentto v7.0.@bedrock/service-coreto v8.0.
- See git history for changes.