Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,15 @@
},
"dependencies": {
"@ayanworks/credo-polygon-w3c-module": "1.0.1-alpha.1",
"@credo-ts/anoncreds": "0.6.0",
"@credo-ts/askar": "0.6.0",
"@credo-ts/core": "0.6.0",
"@credo-ts/indy-vdr": "0.6.0",
"@credo-ts/node": "^0.6.0",
"@credo-ts/openid4vc": "0.6.0",
"@credo-ts/anoncreds": "0.6.1",
"@credo-ts/askar": "0.6.1",
"@credo-ts/core": "0.6.1",
"@credo-ts/indy-vdr": "0.6.1",
"@credo-ts/node": "0.6.1",
"@credo-ts/openid4vc": "0.6.1",
"@credo-ts/push-notifications": "^0.7.1",
"@credo-ts/question-answer": "0.6.0",
"@credo-ts/tenants": "0.6.0",
"@credo-ts/question-answer": "0.6.1",
"@credo-ts/tenants": "0.6.1",
"@hyperledger/anoncreds-nodejs": "0.3.1",
"@hyperledger/indy-vdr-nodejs": "0.2.2",
"@opentelemetry/api": "^1.9.0",
Expand Down Expand Up @@ -117,7 +117,7 @@
"typescript": "^5.8.3"
},
"resolutions": {
"@credo-ts/core": "0.6.0",
"@credo-ts/askar": "0.6.0"
"@credo-ts/core": "0.6.1",
"@credo-ts/askar": "0.6.1"
}
}
26 changes: 13 additions & 13 deletions src/controllers/didcomm/connections/ConnectionController.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import type { ConnectionRecordProps } from '@credo-ts/didcomm'
import type { DidCommConnectionRecordProps } from '@credo-ts/didcomm'

import { DidExchangeState } from '@credo-ts/didcomm'
import { DidCommDidExchangeState } from '@credo-ts/didcomm'
import { Request as Req } from 'express'
import { Controller, Delete, Example, Get, Path, Post, Query, Route, Tags, Security, Request } from 'tsoa'
import { injectable } from 'tsyringe'
Expand All @@ -23,20 +23,20 @@ export class ConnectionController extends Controller {
* @param theirLabel Their label
* @returns ConnectionRecord[]
*/
@Example<ConnectionRecordProps[]>([ConnectionRecordExample])
@Example<DidCommConnectionRecordProps[]>([ConnectionRecordExample])
@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
@Get('/didcomm/connections')
public async getAllConnections(
@Request() request: Req,
@Query('outOfBandId') outOfBandId?: string,
@Query('alias') alias?: string,
@Query('state') state?: DidExchangeState,
@Query('state') state?: DidCommDidExchangeState,
@Query('myDid') myDid?: string,
@Query('theirDid') theirDid?: string,
@Query('theirLabel') theirLabel?: string,
) {
try {
const connections = await request.agent.modules.connections.findAllByQuery({
const connections = await request.agent.modules.didcomm.connections.findAllByQuery({
outOfBandId,
alias,
myDid,
Expand All @@ -56,12 +56,12 @@ export class ConnectionController extends Controller {
* @param connectionId Connection identifier
* @returns ConnectionRecord
*/
@Example<ConnectionRecordProps>(ConnectionRecordExample)
@Example<DidCommConnectionRecordProps>(ConnectionRecordExample)
@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
@Get('/didcomm/connections/:connectionId')
public async getConnectionById(@Request() request: Req, @Path('connectionId') connectionId: RecordId) {
try {
const connection = await request.agent.modules.connections.findById(connectionId)
const connection = await request.agent.modules.didcomm.connections.findById(connectionId)

if (!connection) throw new NotFoundError(`Connection with connection id "${connectionId}" not found.`)

Expand All @@ -81,7 +81,7 @@ export class ConnectionController extends Controller {
public async deleteConnection(@Request() request: Req, @Path('connectionId') connectionId: RecordId) {
try {
this.setStatus(204)
await request.agent.modules.connections.deleteById(connectionId)
await request.agent.modules.didcomm.connections.deleteById(connectionId)
} catch (error) {
throw ErrorHandlingService.handle(error)
}
Expand All @@ -96,12 +96,12 @@ export class ConnectionController extends Controller {
* @param connectionId Connection identifier
* @returns ConnectionRecord
*/
@Example<ConnectionRecordProps>(ConnectionRecordExample)
@Example<DidCommConnectionRecordProps>(ConnectionRecordExample)
@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
@Post('/didcomm/connections/:connectionId/accept-request')
public async acceptRequest(@Request() request: Req, @Path('connectionId') connectionId: RecordId) {
try {
const connection = await request.agent.modules.connections.acceptRequest(connectionId)
const connection = await request.agent.modules.didcomm.connections.acceptRequest(connectionId)
return connection.toJSON()
} catch (error) {
throw ErrorHandlingService.handle(error)
Expand All @@ -117,12 +117,12 @@ export class ConnectionController extends Controller {
* @param connectionId Connection identifier
* @returns ConnectionRecord
*/
@Example<ConnectionRecordProps>(ConnectionRecordExample)
@Example<DidCommConnectionRecordProps>(ConnectionRecordExample)
@Security('jwt', [SCOPES.TENANT_AGENT, SCOPES.DEDICATED_AGENT])
@Post('/didcomm/connections/:connectionId/accept-response')
public async acceptResponse(@Request() request: Req, @Path('connectionId') connectionId: RecordId) {
try {
const connection = await request.agent.modules.connections.acceptResponse(connectionId)
const connection = await request.agent.modules.didcomm.connections.acceptResponse(connectionId)
return connection.toJSON()
} catch (error) {
throw ErrorHandlingService.handle(error)
Expand All @@ -132,7 +132,7 @@ export class ConnectionController extends Controller {
@Get('/didcomm/url/:invitationId')
public async getInvitation(@Request() request: Req, @Path('invitationId') invitationId: string) {
try {
const outOfBandRecord = await request.agent.modules.connections.findByInvitationDid(invitationId)
const outOfBandRecord = await request.agent.modules.didcomm.connections.findByInvitationDid(invitationId)

if (!outOfBandRecord)
throw new NotFoundError(`connection with invitationId "${invitationId}" not found.`)
Expand Down
123 changes: 37 additions & 86 deletions src/controllers/didcomm/outofband/OutOfBandController.ts
Original file line number Diff line number Diff line change
@@ -1,28 +1,23 @@
import type { OutOfBandInvitationProps, OutOfBandRecordWithInvitationProps } from '../../examples'
import type { AgentMessageType, RecipientKeyOption, CreateInvitationOptions } from '../../types'
import type { RecipientKeyOption, CreateInvitationOptions, AgentMessageType } from '../../types'
import type {
PeerDidNumAlgo2CreateOptions,
} from '@credo-ts/core'

import {
JsonTransformer,
Key,
KeyType,
createPeerDidDocumentFromServices,
JsonTransformer,
PeerDidNumAlgo,
} from '@credo-ts/core'

import {
ConnectionRecordProps,
CreateLegacyInvitationConfig,
Routing,
OutOfBandInvitation,
AgentMessage
} from '@credo-ts/didcomm'
DidCommConnectionRecordProps,
DidCommRouting,
DidCommOutOfBandInvitation,
DidCommMessage} from '@credo-ts/didcomm'
import { Request as Req } from 'express'
import { Body, Controller, Delete, Example, Get, Path, Post, Query, Route, Tags, Security, Request } from 'tsoa'
import { injectable } from 'tsyringe'

import { SCOPES } from '../../../enums'
import ErrorHandlingService from '../../../errorHandlingService'
import { InternalServerError, NotFoundError } from '../../../errors'
Expand All @@ -48,9 +43,9 @@ export class OutOfBandController extends Controller {
invitationId: invitationId,
}
: {}
const outOfBandRecords = await request.agent.modules.oob.findAllByQuery(query)
const outOfBandRecords = await request.agent.modules.didcomm.oob.findAllByQuery(query)

return outOfBandRecords.map((c) => c.toJSON())
return outOfBandRecords.map((c: { toJSON: () => any }) => c.toJSON())
} catch (error) {
throw ErrorHandlingService.handle(error)
}
Expand All @@ -65,7 +60,7 @@ export class OutOfBandController extends Controller {
@Get('/:outOfBandId')
public async getOutOfBandRecordById(@Request() request: Req, @Path('outOfBandId') outOfBandId: RecordId) {
try {
const outOfBandRecord = await request.agent.modules.oob.findById(outOfBandId)
const outOfBandRecord = await request.agent.modules.didcomm.oob.findById(outOfBandId)

if (!outOfBandRecord) throw new NotFoundError(`Out of band record with id "${outOfBandId}" not found.`)

Expand Down Expand Up @@ -99,21 +94,26 @@ export class OutOfBandController extends Controller {
let invitationDid: string | undefined
if (config?.invitationDid) {
invitationDid = config?.invitationDid
} else {
const didRouting = await request.agent.modules.mediationRecipient.getRouting({})
const didDocument = createPeerDidDocumentFromServices([
{
id: 'didcomm',
recipientKeys: [didRouting.recipientKey],
routingKeys: didRouting.routingKeys,
serviceEndpoint: didRouting.endpoints[0],
},
])
}
else {
const didRouting = await request.agent.modules.didcomm.mediationRecipient.getRouting({})
const { didDocument, keys } = createPeerDidDocumentFromServices(
[
{
id: 'didcomm',
recipientKeys: [didRouting.recipientKey],
routingKeys: didRouting.routingKeys,
serviceEndpoint: didRouting.endpoints[0],
},
],
true,
)
const did = await request.agent.dids.create<PeerDidNumAlgo2CreateOptions>({
didDocument,
method: 'peer',
options: {
numAlgo: PeerDidNumAlgo.MultipleInceptionKeyWithoutDoc,
keys
},
})

Expand All @@ -124,7 +124,7 @@ export class OutOfBandController extends Controller {
}
}

const outOfBandRecord = await request.agent.modules.oob.createInvitation({ ...config, invitationDid })
const outOfBandRecord = await request.agent.modules.didcomm.oob.createInvitation({ ...config, invitationDid })
return {
invitationUrl: outOfBandRecord.outOfBandInvitation.toUrl({
domain: request.agent.modules.didcomm.config.endpoints[0],
Expand All @@ -140,55 +140,6 @@ export class OutOfBandController extends Controller {
}
}

/**
* Creates an outbound out-of-band record in the same way how `createInvitation` method does it,
* but it also converts out-of-band invitation message to an "legacy" invitation message defined
* in RFC 0160: Connection Protocol and returns it together with out-of-band record.
*
* @param config configuration of how a invitation should be created
* @returns out-of-band record and invitation
*/
@Example<{ invitation: OutOfBandInvitationProps; outOfBandRecord: OutOfBandRecordWithInvitationProps }>({
invitation: outOfBandInvitationExample,
outOfBandRecord: outOfBandRecordExample,
})
@Post('/create-legacy-invitation')
public async createLegacyInvitation(
@Request() request: Req,
@Body() config?: Omit<CreateLegacyInvitationConfig, 'routing'> & RecipientKeyOption,
) {
try {
let routing: Routing
if (config?.recipientKey) {
routing = {
endpoints: request.agent.modules.didcomm.config.endpoints,
routingKeys: [],
recipientKey: Key.fromPublicKeyBase58(config.recipientKey, KeyType.Ed25519),
mediatorId: undefined,
}
} else {
routing = await request.agent.modules.mediationRecipient.getRouting({})
}
const { outOfBandRecord, invitation } = await request.agent.modules.oob.createLegacyInvitation({
...config,
routing,
})
return {
invitationUrl: invitation.toUrl({
domain: request.agent.modules.didcomm.config.endpoints[0],
useDidSovPrefixWhereAllowed: request.agent.modules.didcomm.config.useDidSovPrefixWhereAllowed,
}),
invitation: invitation.toJSON({
useDidSovPrefixWhereAllowed: request.agent.modules.didcomm.config.useDidSovPrefixWhereAllowed,
}),
outOfBandRecord: outOfBandRecord.toJSON(),
...(config?.recipientKey ? {} : { recipientKey: routing.recipientKey.publicKeyBase58 }),
}
} catch (error) {
throw ErrorHandlingService.handle(error)
}
}

/**
* Creates a new connectionless legacy invitation.
*
Expand All @@ -210,13 +161,13 @@ export class OutOfBandController extends Controller {
recordId: string
message: Record<string, unknown>;
domain: string,
routing?: Routing;
routing?: DidCommRouting;
},
) {
try {
const agentMessage = JsonTransformer.fromJSON(config.message, AgentMessage) as AgentMessage
const agentMessage = JsonTransformer.fromJSON(config.message, DidCommMessage) as DidCommMessage

return await request.agent.modules.oob.createLegacyConnectionlessInvitation({
return await request.agent.modules.didcomm.oob.createLegacyConnectionlessInvitation({
...config,
message: agentMessage,
})
Expand All @@ -229,11 +180,11 @@ export class OutOfBandController extends Controller {
* Creates inbound out-of-band record and assigns out-of-band invitation message to it if the
* message is valid.
*
* @param invitation either OutOfBandInvitation or ConnectionInvitationMessage
* @param invitation either DidCommOutOfBandInvitation or ConnectionInvitationMessage
* @param config config for handling of invitation
* @returns out-of-band record and connection record if one has been created.
*/
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({
outOfBandRecord: outOfBandRecordExample,
connectionRecord: ConnectionRecordExample,
})
Expand All @@ -242,8 +193,8 @@ export class OutOfBandController extends Controller {
const { invitation, ...config } = invitationRequest

try {
const invite = new OutOfBandInvitation({ ...invitation, handshakeProtocols: invitation.handshake_protocols })
const { outOfBandRecord, connectionRecord } = await request.agent.modules.oob.receiveInvitation(invite, config)
const invite = new DidCommOutOfBandInvitation({ ...invitation, handshakeProtocols: invitation.handshake_protocols })
const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.receiveInvitation(invite, config)

return {
outOfBandRecord: outOfBandRecord.toJSON(),
Expand All @@ -262,7 +213,7 @@ export class OutOfBandController extends Controller {
* @param config config for handling of invitation
* @returns out-of-band record and connection record if one has been created.
*/
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({
outOfBandRecord: outOfBandRecordExample,
connectionRecord: ConnectionRecordExample,
})
Expand All @@ -278,7 +229,7 @@ export class OutOfBandController extends Controller {
// if (linkSecretIds.length === 0) {
// await request.agent.modules.anoncreds.createLinkSecret()
// }
const { outOfBandRecord, connectionRecord } = await request.agent.modules.oob.receiveInvitationFromUrl(
const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.receiveInvitationFromUrl(
invitationUrl,
config,
)
Expand All @@ -295,7 +246,7 @@ export class OutOfBandController extends Controller {
* Accept a connection invitation as invitee (by sending a connection request message) for the connection with the specified connection id.
* This is not needed when auto accepting of connections is enabled.
*/
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: ConnectionRecordProps }>({
@Example<{ outOfBandRecord: OutOfBandRecordWithInvitationProps; connectionRecord: DidCommConnectionRecordProps }>({
outOfBandRecord: outOfBandRecordExample,
connectionRecord: ConnectionRecordExample,
})
Expand All @@ -306,7 +257,7 @@ export class OutOfBandController extends Controller {
@Body() acceptInvitationConfig: AcceptInvitationConfig,
) {
try {
const { outOfBandRecord, connectionRecord } = await request.agent.modules.oob.acceptInvitation(
const { outOfBandRecord, connectionRecord } = await request.agent.modules.didcomm.oob.acceptInvitation(
outOfBandId,
acceptInvitationConfig,
)
Expand All @@ -329,7 +280,7 @@ export class OutOfBandController extends Controller {
public async deleteOutOfBandRecord(@Request() request: Req, @Path('outOfBandId') outOfBandId: RecordId) {
try {
this.setStatus(204)
await request.agent.modules.oob.deleteById(outOfBandId)
await request.agent.modules.didcomm.oob.deleteById(outOfBandId)
} catch (error) {
throw ErrorHandlingService.handle(error)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ export class QuestionAnswerController extends Controller {
state,
threadId,
})
return questionAnswerRecords.map((record) => record.toJSON())
return questionAnswerRecords.map((record: { toJSON: () => any }) => record.toJSON())
} catch (error) {
throw ErrorHandlingService.handle(error)
}
Expand Down
2 changes: 1 addition & 1 deletion src/utils/constant.ts
Original file line number Diff line number Diff line change
@@ -1 +1 @@
export const X509_CERTIFICATE_RECORD = 'X509_CERTIFICATE'
export const X509_CERTIFICATE_RECORD = 'X509_CERTIFICATE'