Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(oob): support oob with connection and messages #1558

Conversation

TimoGlastra
Copy link
Contributor

Fixes #1129

We now correctly check whether an oob exchange is associated with an exchange if there's no connectionId, and assign the connection if this is the case.

I think we now really support al flows and combinations of messages / handhsake / connectionless from the oob protocol.

Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Timo Glastra <timo@animo.id>
@codecov-commenter
Copy link

codecov-commenter commented Aug 30, 2023

Codecov Report

Merging #1558 (c015708) into main (11050af) will decrease coverage by 23.14%.
The diff coverage is 71.42%.

@@             Coverage Diff             @@
##             main    #1558       +/-   ##
===========================================
- Coverage   85.73%   62.59%   -23.14%     
===========================================
  Files         950      774      -176     
  Lines       22761    17843     -4918     
  Branches     3982     3069      -913     
===========================================
- Hits        19514    11169     -8345     
- Misses       3062     6136     +3074     
- Partials      185      538      +353     
Files Changed Coverage Δ
...oncreds/src/protocols/proofs/v1/V1ProofProtocol.ts 2.42% <0.00%> (-86.27%) ⬇️
...ges/core/src/modules/credentials/CredentialsApi.ts 85.56% <ø> (-1.04%) ⬇️
packages/core/src/types.ts 100.00% <ø> (ø)
...c/protocols/credentials/v1/V1CredentialProtocol.ts 30.21% <45.45%> (-62.76%) ⬇️
.../src/modules/proofs/protocol/v2/V2ProofProtocol.ts 76.78% <60.00%> (-16.91%) ⬇️
.../modules/connections/services/ConnectionService.ts 85.16% <66.66%> (-3.18%) ⬇️
...es/credentials/protocol/v2/V2CredentialProtocol.ts 76.98% <66.66%> (-13.48%) ⬇️
packages/core/src/utils/parseInvitation.ts 46.15% <66.66%> (-31.63%) ⬇️
...entials/protocol/v2/CredentialFormatCoordinator.ts 89.05% <83.33%> (-0.73%) ⬇️
packages/core/src/modules/oob/OutOfBandApi.ts 83.80% <89.65%> (-5.38%) ⬇️
... and 6 more

... and 467 files with indirect coverage changes

Copy link
Contributor

@berendsliedrecht berendsliedrecht left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Couple of very minor points, otherwise LGTM.

@@ -297,8 +297,11 @@ async function addExchangeDataToMessage(
associatedRecord: BaseRecordAny
}
) {
const legacyInvitationMetadata = outOfBandRecord?.metadata.get(OutOfBandRecordMetadataKeys.LegacyInvitation)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this file has an unused import from http which is a mistake, but not from your PR. Can you remove it?

GitHub does not allow me to add a comment there...

// Set the parentThreadId on the message from the oob invitation
if (outOfBandRecord) {
// If connectionless is used, we should not add the parentThreadId
if (outOfBandRecord && legacyInvitationMetadata?.legacyInvitationType !== 'connectionless') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it make more sense to have legacyInvitationType be an enum?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah probably :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In ConnectionRecord we have the protocol field where we define the handshake protocol for the DID Exchange, and in the case of DIDComm V2, where no handshake protocol is involved, we set it to None. If this legacyInvitationType refers to the message type, would it make sense to call it 'none'. in the case of a connection-less exchange?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

would it make sense to call it 'none'. in the case of a connection-less exchange?

Well in that case we don't know explicitly if it's a connectionless message, and we have custom behaviour for that as you can see here. I'd still call a message with a ~service an invitation to do something.

So invitation type here refers less to connections, and more to an invitation to an exchange that is sent not over didcomm. (connectionless, connection v1, oob v1, etc..)

*/
public async matchIncomingMessageToRequestMessageInOutOfBandExchange(
messageContext: InboundMessageContext,
{ knownConnectionId }: { knownConnectionId?: string }
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe it should be

Suggested change
{ knownConnectionId }: { knownConnectionId?: string }
{ expectedConnectionId }: { expectedConnectionId?: string }

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah that makes sense. I was thinking if it is undefined it doesn't make sense. But after thining about it again, if it's undefined we don't really expect a specific connection Id

// Set the parentThreadId on the message from the oob invitation
if (outOfBandRecord) {
// If connectionless is used, we should not add the parentThreadId
if (outOfBandRecord && legacyInvitationMetadata?.legacyInvitationType !== 'connectionless') {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In ConnectionRecord we have the protocol field where we define the handshake protocol for the DID Exchange, and in the case of DIDComm V2, where no handshake protocol is involved, we set it to None. If this legacyInvitationType refers to the message type, would it make sense to call it 'none'. in the case of a connection-less exchange?

* If is the case, and the state of the out of band record is still await response, the state will be updated to done
*
*/
public async matchIncomingMessageToRequestMessageInOutOfBandExchange(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wow this is a huge method with a huge name!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, i like explicitness over being brief. But suggestions welcome! :)

TimoGlastra and others added 6 commits September 21, 2023 16:26
Signed-off-by: Tom Lanser <tom@devv.nl>
Signed-off-by: Tom Lanser <tom@devv.nl>
Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Timo Glastra <timo@animo.id>
@TimoGlastra TimoGlastra merged commit 9732ce4 into openwallet-foundation:main Sep 22, 2023
@TimoGlastra TimoGlastra deleted the fix/oob-connections-and-messages branch September 22, 2023 14:41
genaris pushed a commit to genaris/credo-ts that referenced this pull request Sep 22, 2023
…tion#1558)

Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Ariel Gentile <gentilester@gmail.com>
auer-martin pushed a commit to auer-martin/aries-framework-javascript that referenced this pull request Nov 15, 2023
…tion#1558)

Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Martin Auer <martin.auer97@gmail.com>
auer-martin pushed a commit to auer-martin/aries-framework-javascript that referenced this pull request Dec 4, 2023
…tion#1558)

Signed-off-by: Timo Glastra <timo@animo.id>
Signed-off-by: Martin Auer <martin.auer97@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Cannot process RequestCredentialMessage for the OOB attached credential-offer
5 participants