From b9e29d7a2bcf6144f0dd18103bae8d574c591f51 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 17:47:10 +0530 Subject: [PATCH 01/11] feat: add agent custom document loader Signed-off-by: Krishna Waske --- .env.demo | 4 +++ .env.sample | 5 ++++ src/cliAgent.ts | 10 ++++--- src/utils/config.ts | 4 +++ src/utils/customDocumentLoader.ts | 43 +++++++++++++++++++++++++++++++ 5 files changed, 63 insertions(+), 3 deletions(-) create mode 100644 src/utils/config.ts create mode 100644 src/utils/customDocumentLoader.ts diff --git a/.env.demo b/.env.demo index 033e26aa..a2ebfa60 100644 --- a/.env.demo +++ b/.env.demo @@ -30,6 +30,10 @@ OTEL_LOGS_OTLP_ENDPOINT='http://localhost:4318/v1/logs' OTEL_HEADERS_KEY='88caXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' OTEL_LOGGER_NAME='credo-controller-logger' +ENABLE_CUSTOM_DOCUMENT_LOADER=false +DEPRECATED_DOMAIN=https://schema.credebl.id +CURRENT_DOMAIN=https://schema.new-credebl.id + BCOVRIN_TEST_GENESIS='{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.138.255","client_port":9704,"node_ip":"138.197.138.255","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node3","blskey":"3WFpdbg7C5cnLYZwFZevJqhubkFALBfCBBok15GdrKMUhUjGsk3jV6QKj6MZgEubF7oqCafxNdkm7eswgA4sdKTRc82tLGzZBd6vNqU8dupzup6uYUf32KTHTPQbuUM8Yk4QFXjEf2Usu2TJcNkdgpyeUSX42u5LqdDDpNSWUK5deC5","blskey_pop":"QwDeb2CkNSx6r8QC8vGQK3GRv7Yndn84TGNijX8YXHPiagXajyfTjoR87rXUu4G4QLk2cF8NNyqWiYMus1623dELWwx57rLCFqGh7N4ZRbGDRP4fnVcaKg1BcUxQ866Ven4gw8y4N56S5HzxXNBZtLYmhGHvDtk6PFkFwCvxYrNYjh","client_ip":"138.197.138.255","client_port":9706,"node_ip":"138.197.138.255","node_port":9705,"services":["VALIDATOR"]},"dest":"DKVxG2fXXTU8yT5N7hGEbXB3dfdAnYv1JczDUHpmDxya"},"metadata":{"from":"4cU41vWW82ArfxJxHkzXPG"},"type":"0"},"txnMetadata":{"seqNo":3,"txnId":"7e9f355dffa78ed24668f0e0e369fd8c224076571c51e2ea8be5f26479edebe4"},"ver":"1"} diff --git a/.env.sample b/.env.sample index 46b3a602..9c6ae29c 100644 --- a/.env.sample +++ b/.env.sample @@ -27,6 +27,11 @@ maxRateLimit= # Specify Did contract address DID_CONTRACT_ADDRESS= +# Boolean: If we want to enable custom document loader +ENABLE_CUSTOM_DOCUMENT_LOADER=false +# If custom document loader is enabled, add the deprecated domain-url and the current/latest domain url +DEPRECATED_DOMAIN= +CURRENT_DOMAIN= # Specify Bcovrin test genesis BCOVRIN_TEST_GENESIS=`{"reqSignature":{},"txn":{"data":{"data":{"alias":"Node1","blskey":"4N8aUNHSgjQVgkpm8nhNEfDf6txHznoYREg9kirmJrkivgL4oSEimFF6nsQ6M41QvhM2Z33nves5vfSn9n1UwNFJBYtWVnHYMATn76vLuL3zU88KyeAYcHfsih3He6UHcXDxcaecHVz6jhCYz1P2UZn2bDVruL5wXpehgBfBaLKm3Ba","blskey_pop":"RahHYiCvoNCtPTrVtP7nMC5eTYrsUA8WjXbdhNc8debh1agE9bGiJxWBXYNFbnJXoXhWFMvyqhqhRoq737YQemH5ik9oL7R4NTTCz2LEZhkgLJzB3QRQqJyBNyv7acbdHrAT8nQ9UkLbaVL9NBpnWXBTw4LEMePaSHEw66RzPNdAX1","client_ip":"138.197.138.255","client_port":9702,"node_ip":"138.197.138.255","node_port":9701,"services":["VALIDATOR"]},"dest":"Gw6pDLhcBcoQesN72qfotTgFa7cbuqZpkX3Xo6pLhPhv"},"metadata":{"from":"Th7MpTaRZVRYnPiabds81Y"},"type":"0"},"txnMetadata":{"seqNo":1,"txnId":"fea82e10e894419fe2bea7d96296a6d46f50f93f9eeda954ec461b2ed2950b62"},"ver":"1"} {"reqSignature":{},"txn":{"data":{"data":{"alias":"Node2","blskey":"37rAPpXVoxzKhz7d9gkUe52XuXryuLXoM6P6LbWDB7LSbG62Lsb33sfG7zqS8TK1MXwuCHj1FKNzVpsnafmqLG1vXN88rt38mNFs9TENzm4QHdBzsvCuoBnPH7rpYYDo9DZNJePaDvRvqJKByCabubJz3XXKbEeshzpz4Ma5QYpJqjk","blskey_pop":"Qr658mWZ2YC8JXGXwMDQTzuZCWF7NK9EwxphGmcBvCh6ybUuLxbG65nsX4JvD4SPNtkJ2w9ug1yLTj6fgmuDg41TgECXjLCij3RMsV8CwewBVgVN67wsA45DFWvqvLtu4rjNnE9JbdFTc1Z4WCPA3Xan44K1HoHAq9EVeaRYs8zoF5","client_ip":"138.197.138.255","client_port":9704,"node_ip":"138.197.138.255","node_port":9703,"services":["VALIDATOR"]},"dest":"8ECVSk179mjsjKRLWiQtssMLgp6EPhWXtaYyStWPSGAb"},"metadata":{"from":"EbP4aYNeTHL6q385GuVpRV"},"type":"0"},"txnMetadata":{"seqNo":2,"txnId":"1ac8aece2a18ced660fef8694b61aac3af08ba875ce3026a160acbc3a3af35fc"},"ver":"1"} diff --git a/src/cliAgent.ts b/src/cliAgent.ts index 61c671e7..b6d9310b 100644 --- a/src/cliAgent.ts +++ b/src/cliAgent.ts @@ -54,6 +54,8 @@ import { IndicioAcceptanceMechanism, IndicioTransactionAuthorAgreement, Network, import { setupServer } from './server' import { generateSecretKey } from './utils/helpers' import { TsLogger } from './utils/logger' +import { IsCustomDocumentLoaderEnabled } from './utils/config' +import { CustomDocumentLoader } from './utils/customDocumentLoader' export type Transports = 'ws' | 'http' export type InboundTransport = { @@ -183,7 +185,9 @@ const getModules = ( }), ], }), - w3cCredentials: new W3cCredentialsModule(), + w3cCredentials: IsCustomDocumentLoaderEnabled() ? new W3cCredentialsModule() : new W3cCredentialsModule({ + documentLoader: CustomDocumentLoader + }), cache: new CacheModule({ cache: new InMemoryLruCache({ limit: Number(process.env.INMEMORY_LRU_CACHE_LIMIT) || Infinity }), }), @@ -381,8 +385,8 @@ export async function runRestAgent(restConfig: AriesRestConfig) { modules: { ...(afjConfig.tenancy ? { - ...tenantModule, - } + ...tenantModule, + } : {}), ...modules, }, diff --git a/src/utils/config.ts b/src/utils/config.ts new file mode 100644 index 00000000..bcc6da5a --- /dev/null +++ b/src/utils/config.ts @@ -0,0 +1,4 @@ +export const IsCustomDocumentLoaderEnabled = (): boolean => { + const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false'; + return flag.toLowerCase() === 'true'; +}; \ No newline at end of file diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts new file mode 100644 index 00000000..8e0cb3a2 --- /dev/null +++ b/src/utils/customDocumentLoader.ts @@ -0,0 +1,43 @@ +import { CredoError, AgentContext, DocumentLoader } from "@credo-ts/core" +import { DocumentLoaderResult } from "@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil" +import { defaultDocumentLoader } from "@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader" + +/** + * Check if URL belongs to CREDEBL schema domain + */ +function isW3CDeprecatedCredeblSchema(url: string, agentContext: AgentContext): boolean { + agentContext.config.logger.debug(`Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`) + return url.startsWith(process.env.DEPRECATED_DOMAIN!) +} + +/** + * For JSON-LD schemas replace deprecated domain to migrated/updated domain + */ +function resolvableCredeblSchemaUrl(url: string, agent: AgentContext): string { + agent.config.logger.debug(`Replacing deprecated domain with updated domain`) + const updatedUrl = url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) + + return updatedUrl +} + +/** + * Custom loader that extends Credo's default loader + */ +export const CustomDocumentLoader = (agentContext: AgentContext): DocumentLoader => { + const defaultLoader = defaultDocumentLoader(agentContext) + + return async function (url: string): Promise { + try { + // Intercept credebl schemas + if (isW3CDeprecatedCredeblSchema(url, agentContext)) { + agentContext.config.logger.debug(`Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`) + url = resolvableCredeblSchemaUrl(url, agentContext) + } + + agentContext.config.logger.debug(`Passing url(${url}) to default loader`) + return await defaultLoader(url) + } catch (error) { + throw new CredoError(`Failed to load document for ${url}: ${error}`) + } + } +} From 31325c329fd7de2a6239ae49d200bf9050ea07e1 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 17:55:04 +0530 Subject: [PATCH 02/11] fix: formatting Signed-off-by: Krishna Waske --- src/utils/config.ts | 6 ++-- src/utils/customDocumentLoader.ts | 46 +++++++++++++++++-------------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index bcc6da5a..70fe2f3c 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,4 +1,4 @@ export const IsCustomDocumentLoaderEnabled = (): boolean => { - const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false'; - return flag.toLowerCase() === 'true'; -}; \ No newline at end of file + const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false' + return flag.toLowerCase() === 'true' +} diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index 8e0cb3a2..85a76085 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -1,43 +1,47 @@ -import { CredoError, AgentContext, DocumentLoader } from "@credo-ts/core" -import { DocumentLoaderResult } from "@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil" -import { defaultDocumentLoader } from "@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader" +import { CredoError, AgentContext, DocumentLoader } from '@credo-ts/core' +import { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil' +import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader' /** * Check if URL belongs to CREDEBL schema domain */ function isW3CDeprecatedCredeblSchema(url: string, agentContext: AgentContext): boolean { - agentContext.config.logger.debug(`Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`) - return url.startsWith(process.env.DEPRECATED_DOMAIN!) + agentContext.config.logger.debug( + `Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`, + ) + return url.startsWith(process.env.DEPRECATED_DOMAIN!) } /** * For JSON-LD schemas replace deprecated domain to migrated/updated domain */ function resolvableCredeblSchemaUrl(url: string, agent: AgentContext): string { - agent.config.logger.debug(`Replacing deprecated domain with updated domain`) - const updatedUrl = url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) + agent.config.logger.debug(`Replacing deprecated domain with updated domain`) + const updatedUrl = url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) - return updatedUrl + return updatedUrl } /** * Custom loader that extends Credo's default loader */ export const CustomDocumentLoader = (agentContext: AgentContext): DocumentLoader => { - const defaultLoader = defaultDocumentLoader(agentContext) + const defaultLoader = defaultDocumentLoader(agentContext) - return async function (url: string): Promise { - try { - // Intercept credebl schemas - if (isW3CDeprecatedCredeblSchema(url, agentContext)) { - agentContext.config.logger.debug(`Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`) - url = resolvableCredeblSchemaUrl(url, agentContext) - } + return async function (url: string): Promise { + try { + // Intercept credebl schemas + if (isW3CDeprecatedCredeblSchema(url, agentContext)) { + agentContext.config.logger.debug( + `Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`, + ) + url = resolvableCredeblSchemaUrl(url, agentContext) + } - agentContext.config.logger.debug(`Passing url(${url}) to default loader`) - return await defaultLoader(url) - } catch (error) { - throw new CredoError(`Failed to load document for ${url}: ${error}`) - } + agentContext.config.logger.debug(`Passing url(${url}) to default loader`) + return await defaultLoader(url) + } catch (error) { + throw new CredoError(`Failed to load document for ${url}: ${error}`) } + } } From b597c95e85ab9d7ed35b13bfe218dc92878fcead Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 17:58:49 +0530 Subject: [PATCH 03/11] fix: formatting Signed-off-by: Krishna Waske --- src/cliAgent.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/cliAgent.ts b/src/cliAgent.ts index b6d9310b..9c6478ab 100644 --- a/src/cliAgent.ts +++ b/src/cliAgent.ts @@ -185,9 +185,11 @@ const getModules = ( }), ], }), - w3cCredentials: IsCustomDocumentLoaderEnabled() ? new W3cCredentialsModule() : new W3cCredentialsModule({ - documentLoader: CustomDocumentLoader - }), + w3cCredentials: IsCustomDocumentLoaderEnabled() + ? new W3cCredentialsModule() + : new W3cCredentialsModule({ + documentLoader: CustomDocumentLoader, + }), cache: new CacheModule({ cache: new InMemoryLruCache({ limit: Number(process.env.INMEMORY_LRU_CACHE_LIMIT) || Infinity }), }), @@ -385,8 +387,8 @@ export async function runRestAgent(restConfig: AriesRestConfig) { modules: { ...(afjConfig.tenancy ? { - ...tenantModule, - } + ...tenantModule, + } : {}), ...modules, }, From 751dfa12a155fea75f04f61872b98847350ff52d Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:09:25 +0530 Subject: [PATCH 04/11] feat: add appropriate warning for incorrect custom document loader initiation Signed-off-by: Krishna Waske --- src/utils/config.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index 70fe2f3c..8dcdee18 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,4 +1,13 @@ export const IsCustomDocumentLoaderEnabled = (): boolean => { const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false' - return flag.toLowerCase() === 'true' + const isCustomDocumentLoaderEnabled = flag.toLowerCase() === 'true' + + if (isCustomDocumentLoaderEnabled) { + if (!process.env.DEPRECATED_DOMAIN || !process.env.CURRENT_DOMAIN) { + console.error(`Custom document loader for the agent is enabled but the deprecated domain and updated domain is not set`) + } + console.warn(`Custom document loader for the agent is enabled. Resolution of all URLs from the deprecated domain(${process.env.DEPRECATED_DOMAIN}) will actually be resolved from the current, updated domain(${process.env.CURRENT_DOMAIN})`) + } + + return isCustomDocumentLoaderEnabled } From 5b1ceb7f3f0d5f1813ab71842deb02d70c35d2c6 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:11:25 +0530 Subject: [PATCH 05/11] fix: formatting Signed-off-by: Krishna Waske --- src/utils/config.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index 8dcdee18..e8c1b1e7 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -4,9 +4,13 @@ export const IsCustomDocumentLoaderEnabled = (): boolean => { if (isCustomDocumentLoaderEnabled) { if (!process.env.DEPRECATED_DOMAIN || !process.env.CURRENT_DOMAIN) { - console.error(`Custom document loader for the agent is enabled but the deprecated domain and updated domain is not set`) + console.error( + `Custom document loader for the agent is enabled but the deprecated domain and updated domain is not set`, + ) } - console.warn(`Custom document loader for the agent is enabled. Resolution of all URLs from the deprecated domain(${process.env.DEPRECATED_DOMAIN}) will actually be resolved from the current, updated domain(${process.env.CURRENT_DOMAIN})`) + console.warn( + `Custom document loader for the agent is enabled. Resolution of all URLs from the deprecated domain(${process.env.DEPRECATED_DOMAIN}) will actually be resolved from the current, updated domain(${process.env.CURRENT_DOMAIN})`, + ) } return isCustomDocumentLoaderEnabled From a8e27b44f2a56cce904af29f854927af67c83881 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:14:26 +0530 Subject: [PATCH 06/11] fix: formatting Signed-off-by: Krishna Waske --- src/cliAgent.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cliAgent.ts b/src/cliAgent.ts index 9c6478ab..eda25e8a 100644 --- a/src/cliAgent.ts +++ b/src/cliAgent.ts @@ -52,10 +52,10 @@ import { readFile } from 'fs/promises' import { IndicioAcceptanceMechanism, IndicioTransactionAuthorAgreement, Network, NetworkName } from './enums' import { setupServer } from './server' -import { generateSecretKey } from './utils/helpers' -import { TsLogger } from './utils/logger' import { IsCustomDocumentLoaderEnabled } from './utils/config' import { CustomDocumentLoader } from './utils/customDocumentLoader' +import { generateSecretKey } from './utils/helpers' +import { TsLogger } from './utils/logger' export type Transports = 'ws' | 'http' export type InboundTransport = { From f271bb46b00e4c6364553888aef3165a7517af85 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:20:50 +0530 Subject: [PATCH 07/11] fix: error handling Signed-off-by: Krishna Waske --- src/utils/config.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index e8c1b1e7..5c99b597 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -4,7 +4,11 @@ export const IsCustomDocumentLoaderEnabled = (): boolean => { if (isCustomDocumentLoaderEnabled) { if (!process.env.DEPRECATED_DOMAIN || !process.env.CURRENT_DOMAIN) { - console.error( + console.debug('Invalid configuration set for enabling custom document loader') + console.info( + "If you are unsure about what the error is about. Try setting the 'ENABLE_CUSTOM_DOCUMENT_LOADER' flag in the env variable to false", + ) + throw new Error( `Custom document loader for the agent is enabled but the deprecated domain and updated domain is not set`, ) } From 586dfe34205b202d55819b2a0904e07d0f5b07ee Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:25:39 +0530 Subject: [PATCH 08/11] fix: formatting Signed-off-by: Krishna Waske --- src/utils/config.ts | 1 + src/utils/customDocumentLoader.ts | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/utils/config.ts b/src/utils/config.ts index 5c99b597..0a1091bb 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-console */ export const IsCustomDocumentLoaderEnabled = (): boolean => { const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false' const isCustomDocumentLoaderEnabled = flag.toLowerCase() === 'true' diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index 85a76085..b96b7245 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -1,4 +1,6 @@ -import { CredoError, AgentContext, DocumentLoader } from '@credo-ts/core' +import type { AgentContext, DocumentLoader } from '@credo-ts/core' + +import { CredoError } from '@credo-ts/core' import { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil' import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader' From 1bd804a2047b4bd5712d398e3a3fa7805f335acb Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:32:39 +0530 Subject: [PATCH 09/11] fix: formatting Signed-off-by: Krishna Waske --- src/utils/customDocumentLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index b96b7245..bdd1e3a5 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -1,7 +1,7 @@ import type { AgentContext, DocumentLoader } from '@credo-ts/core' +import type { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil' import { CredoError } from '@credo-ts/core' -import { DocumentLoaderResult } from '@credo-ts/core/build/modules/vc/data-integrity/jsonldUtil' import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-integrity/libraries/documentLoader' /** From 3177d89e4ea1b81e000e1daaa2085c9c703429b5 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 18:41:53 +0530 Subject: [PATCH 10/11] fix: coderabbit suggestions Signed-off-by: Krishna Waske --- src/utils/customDocumentLoader.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index bdd1e3a5..aacc4410 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -19,9 +19,7 @@ function isW3CDeprecatedCredeblSchema(url: string, agentContext: AgentContext): */ function resolvableCredeblSchemaUrl(url: string, agent: AgentContext): string { agent.config.logger.debug(`Replacing deprecated domain with updated domain`) - const updatedUrl = url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) - - return updatedUrl + return url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) } /** @@ -43,7 +41,7 @@ export const CustomDocumentLoader = (agentContext: AgentContext): DocumentLoader agentContext.config.logger.debug(`Passing url(${url}) to default loader`) return await defaultLoader(url) } catch (error) { - throw new CredoError(`Failed to load document for ${url}: ${error}`) + throw new CredoError(`Failed to load document for ${url}`, { cause: error as Error }) } } } From 712f262b2f5fae060e7a5685e239a1434b381bf4 Mon Sep 17 00:00:00 2001 From: Krishna Waske Date: Thu, 16 Oct 2025 19:13:32 +0530 Subject: [PATCH 11/11] fix: reviewer suggestions Signed-off-by: Krishna Waske --- src/cliAgent.ts | 4 ++-- src/utils/config.ts | 2 +- src/utils/customDocumentLoader.ts | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/cliAgent.ts b/src/cliAgent.ts index eda25e8a..d0a177bc 100644 --- a/src/cliAgent.ts +++ b/src/cliAgent.ts @@ -52,7 +52,7 @@ import { readFile } from 'fs/promises' import { IndicioAcceptanceMechanism, IndicioTransactionAuthorAgreement, Network, NetworkName } from './enums' import { setupServer } from './server' -import { IsCustomDocumentLoaderEnabled } from './utils/config' +import { isCustomDocumentLoaderEnabled } from './utils/config' import { CustomDocumentLoader } from './utils/customDocumentLoader' import { generateSecretKey } from './utils/helpers' import { TsLogger } from './utils/logger' @@ -185,7 +185,7 @@ const getModules = ( }), ], }), - w3cCredentials: IsCustomDocumentLoaderEnabled() + w3cCredentials: isCustomDocumentLoaderEnabled() ? new W3cCredentialsModule() : new W3cCredentialsModule({ documentLoader: CustomDocumentLoader, diff --git a/src/utils/config.ts b/src/utils/config.ts index 0a1091bb..0e336bff 100644 --- a/src/utils/config.ts +++ b/src/utils/config.ts @@ -1,5 +1,5 @@ /* eslint-disable no-console */ -export const IsCustomDocumentLoaderEnabled = (): boolean => { +export const isCustomDocumentLoaderEnabled = (): boolean => { const flag = process.env.ENABLE_CUSTOM_DOCUMENT_LOADER ?? 'false' const isCustomDocumentLoaderEnabled = flag.toLowerCase() === 'true' diff --git a/src/utils/customDocumentLoader.ts b/src/utils/customDocumentLoader.ts index aacc4410..c31a15f9 100644 --- a/src/utils/customDocumentLoader.ts +++ b/src/utils/customDocumentLoader.ts @@ -7,7 +7,7 @@ import { defaultDocumentLoader } from '@credo-ts/core/build/modules/vc/data-inte /** * Check if URL belongs to CREDEBL schema domain */ -function isW3CDeprecatedCredeblSchema(url: string, agentContext: AgentContext): boolean { +function isW3CDeprecatedUrl(url: string, agentContext: AgentContext): boolean { agentContext.config.logger.debug( `Checking if w3c url(${url}) contains deprecated domain for agent: ${agentContext.config.label}`, ) @@ -17,7 +17,7 @@ function isW3CDeprecatedCredeblSchema(url: string, agentContext: AgentContext): /** * For JSON-LD schemas replace deprecated domain to migrated/updated domain */ -function resolvableCredeblSchemaUrl(url: string, agent: AgentContext): string { +function replaceUrl(url: string, agent: AgentContext): string { agent.config.logger.debug(`Replacing deprecated domain with updated domain`) return url.replace(process.env.DEPRECATED_DOMAIN!, process.env.CURRENT_DOMAIN!) } @@ -31,11 +31,11 @@ export const CustomDocumentLoader = (agentContext: AgentContext): DocumentLoader return async function (url: string): Promise { try { // Intercept credebl schemas - if (isW3CDeprecatedCredeblSchema(url, agentContext)) { + if (isW3CDeprecatedUrl(url, agentContext)) { agentContext.config.logger.debug( `Found w3c url(${url}) containing deprecated domain for agent: ${agentContext.config.label}`, ) - url = resolvableCredeblSchemaUrl(url, agentContext) + url = replaceUrl(url, agentContext) } agentContext.config.logger.debug(`Passing url(${url}) to default loader`)