From 798e8beb298506c4817e9f8c408613f25fc16d42 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 16 Dec 2025 11:01:00 -0500 Subject: [PATCH 01/22] Test SmartResume with console logs --- .../src/pages/launchPad/LaunchPad.tsx | 37 ++++++++++++------- .../brain-service/src/routes/contracts.ts | 24 ++++++------ 2 files changed, 35 insertions(+), 26 deletions(-) diff --git a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx index 3e3e125a55..36218eb9a3 100644 --- a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx +++ b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx @@ -37,8 +37,16 @@ const LaunchPad: React.FC = () => { const flags = useFlags(); const history = useHistory(); const { search } = useLocation(); - const { connectTo, challenge, uri, returnTo, suppressContractModal, embedUrl, appName, appImage } = - queryString.parse(search); + const { + connectTo, + challenge, + uri, + returnTo, + suppressContractModal, + embedUrl, + appName, + appImage, + } = queryString.parse(search); const contractUri = Array.isArray(uri) ? uri[0] ?? '' : uri ?? ''; const embedUrlParam = Array.isArray(embedUrl) ? embedUrl[0] ?? '' : embedUrl ?? ''; const appNameParam = Array.isArray(appName) ? appName[0] ?? '' : appName ?? ''; @@ -154,7 +162,7 @@ const LaunchPad: React.FC = () => { return false; } - if (item?.displayInLaunchPad === false) return false; // for apps + // if (item?.displayInLaunchPad === false) return false; // for apps return contractName?.includes(lowerSearch) || appName?.includes(lowerSearch); }); @@ -252,18 +260,19 @@ const LaunchPad: React.FC = () => { ); })} - {filteredAppsAndContracts.length === 0 && !customAppFromQueryParams && ( -
-
-

- No results found for{' '} - - {searchInput} - -

+ {filteredAppsAndContracts.length === 0 && + !customAppFromQueryParams && ( +
+
+

+ No results found for{' '} + + {searchInput} + +

+
-
- )} + )} ) : ( res.json()); - + console.log('accessTokenResponse', accessTokenResponse); const accessToken = accessTokenResponse.access_token; const categories = terms.read.credentials.categories; @@ -965,12 +962,15 @@ export const contractsRouter = t.router({ Object.values(categories).flatMap(category => category.shared || []) ), ]; - + console.log('allSharedCredentialUris', allSharedCredentialUris); const credentials = ( await Promise.all( allSharedCredentialUris.map(async uri => { try { - return await resolveUri(uri); + const res = await resolveUri(uri); + console.log('Resolved URI', uri); + console.log('RES!!!', res); + return res; } catch (error) { console.error(`Error resolving URI ${uri}:`, error); return undefined; @@ -984,7 +984,7 @@ export const contractsRouter = t.router({ ? { ...cred?.boostCredential, id: cred?.id } // unwrap credential, preserve id : cred; }); - + console.log('credentials', credentials); const transformedCredentials = credentials.map(cred => { // If issuer is a string, convert it to an object with an id property const issuer = @@ -998,7 +998,7 @@ export const contractsRouter = t.router({ issuer, }; }); - + console.log('transformedCredentials', transformedCredentials); const { name, email } = terms.read.personal; const body = JSON.stringify({ From d7f398fa16f66703ee168d5f52bdd7a78c6a85ae Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 16 Dec 2025 15:28:30 -0500 Subject: [PATCH 02/22] Add closing div tag and prettier ext used --- .../src/pages/launchPad/LaunchPad.tsx | 87 ++++++++++--------- 1 file changed, 47 insertions(+), 40 deletions(-) diff --git a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx index 6290ca3e22..cfb8b4a50b 100644 --- a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx +++ b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx @@ -62,7 +62,8 @@ const LaunchPad: React.FC = () => { const [isSearchFocused, setIsSearchFocused] = useState(false); // App Store hooks - const { useBrowseAppStore, useFeaturedCarouselApps, useCuratedListApps, useInstalledApps } = useAppStore(); + const { useBrowseAppStore, useFeaturedCarouselApps, useCuratedListApps, useInstalledApps } = + useAppStore(); // Get category filter based on current tab const appStoreCategory = useMemo(() => mapTabToCategory(tab), [tab]); @@ -75,10 +76,7 @@ const LaunchPad: React.FC = () => { } = useInstalledApps({ limit: 50 }); // Fetch browsable apps (for search/discovery) - const { - data: browseAppsData, - isLoading: isLoadingBrowseApps, - } = useBrowseAppStore({ + const { data: browseAppsData, isLoading: isLoadingBrowseApps } = useBrowseAppStore({ category: appStoreCategory, limit: 50, }); @@ -241,7 +239,10 @@ const LaunchPad: React.FC = () => { return installedApps.filter(app => { // Filter by category/tab - if (appStoreCategory && app.category?.toLowerCase() !== appStoreCategory.toLowerCase()) { + if ( + appStoreCategory && + app.category?.toLowerCase() !== appStoreCategory.toLowerCase() + ) { return false; } @@ -287,7 +288,10 @@ const LaunchPad: React.FC = () => { return curatedAppsNotInstalled.filter(app => { // Filter by category if one is selected - if (appStoreCategory && app.category?.toLowerCase() !== appStoreCategory.toLowerCase()) { + if ( + appStoreCategory && + app.category?.toLowerCase() !== appStoreCategory.toLowerCase() + ) { return false; } @@ -529,18 +533,19 @@ const LaunchPad: React.FC = () => { )} - {filteredAppsAndContracts.length === 0 && - filteredInstalledApps.length === 0 && - filteredAvailableApps.length === 0 && - !customAppFromQueryParams && ( -
-
-

- No results found for{' '} - - {searchInput} - -

+ {filteredAppsAndContracts.length === 0 && + filteredInstalledApps.length === 0 && + filteredAvailableApps.length === 0 && + !customAppFromQueryParams && ( +
+
+

+ No results found for{' '} + + {searchInput} + +

+
)} @@ -588,31 +593,30 @@ const LaunchPad: React.FC = () => { )} {/* Discover More (Standard apps - only show when searching) */} - {searchInput.length > 0 && nonPromotedAvailableApps.length > 0 && ( - <> -
-

- Search Results -

-
- {nonPromotedAvailableApps.map(app => ( - - ))} - - )} + {searchInput.length > 0 && + nonPromotedAvailableApps.length > 0 && ( + <> +
+

+ Search Results +

+
+ {nonPromotedAvailableApps.map(app => ( + + ))} + + )} {/* Consent Flow Contract (if applicable) */} {contractDetails && !hasConsented && tab === LaunchPadTabEnum.all && ( - + )} {customAppFromQueryParams && ( @@ -628,7 +632,10 @@ const LaunchPad: React.FC = () => { <>

- {(filteredInstalledApps.length > 0 || filteredAvailableApps.length > 0) ? 'More Apps' : 'Apps'} + {filteredInstalledApps.length > 0 || + filteredAvailableApps.length > 0 + ? 'More Apps' + : 'Apps'}

{filteredLegacyApps.map((item, index) => { From 1683f8fc230568d7250fe4e7e18c28b53b282439 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 18 Dec 2025 20:17:24 -0500 Subject: [PATCH 03/22] Add more console logs for staging --- .../brain-service/src/routes/contracts.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/services/learn-card-network/brain-service/src/routes/contracts.ts b/services/learn-card-network/brain-service/src/routes/contracts.ts index 89933993b9..0b90942d1e 100644 --- a/services/learn-card-network/brain-service/src/routes/contracts.ts +++ b/services/learn-card-network/brain-service/src/routes/contracts.ts @@ -966,7 +966,7 @@ export const contractsRouter = t.router({ // filter out duplicates ...new Set(categoryValues.flatMap(({ shared }) => shared ?? [])), ]; - + console.log('allSharedCredentialUris', allSharedCredentialUris); const resolvedCredentials = await Promise.all( allSharedCredentialUris.map(async uri => { try { @@ -977,7 +977,7 @@ export const contractsRouter = t.router({ } }) ); - + console.log('resolvedCredentials', resolvedCredentials); type ResolvedCredential = { issuer?: string | { id: string }; id?: string; @@ -994,7 +994,7 @@ export const contractsRouter = t.router({ ? ({ ...cred.boostCredential, id: cred.id } as ResolvedCredential) // unwrap credential, preserve id : cred ); - + console.log('credentials', credentials); const transformedCredentials = credentials.map(cred => { const issuer = typeof cred.issuer === 'string' @@ -1024,7 +1024,7 @@ export const contractsRouter = t.router({ }, credentials: transformedCredentials, }); - + console.log('body', body); try { const response = await fetch(`${srUrl}api/v1/credentials`, { method: 'POST', @@ -1035,6 +1035,8 @@ export const contractsRouter = t.router({ body, }); console.log('response', response); + const responseBody = await response.text(); + console.log('SmartResume API Response:', responseBody); if (!response.ok) { throw new Error(`Error (${response.status}): ${await response.text()}`); } From 7ecf7e3e87f40f75c5944cbc980a7e6566f2c8d0 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 18 Dec 2025 20:32:20 -0500 Subject: [PATCH 04/22] Fix Body is unusable error --- .../brain-service/src/routes/contracts.ts | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/services/learn-card-network/brain-service/src/routes/contracts.ts b/services/learn-card-network/brain-service/src/routes/contracts.ts index 0b90942d1e..ae5041a3e8 100644 --- a/services/learn-card-network/brain-service/src/routes/contracts.ts +++ b/services/learn-card-network/brain-service/src/routes/contracts.ts @@ -1029,19 +1029,27 @@ export const contractsRouter = t.router({ const response = await fetch(`${srUrl}api/v1/credentials`, { method: 'POST', headers: { - Authorization: `Bearer ${accessToken}`, + 'Authorization': `Bearer ${accessToken}`, 'Content-Type': 'application/json', }, body, }); - console.log('response', response); + const responseBody = await response.text(); console.log('SmartResume API Response:', responseBody); + if (!response.ok) { - throw new Error(`Error (${response.status}): ${await response.text()}`); + throw new Error(`Error (${response.status}): ${responseBody}`); + } + + let result; + try { + result = JSON.parse(responseBody); + } catch (e) { + throw new Error(`Failed to parse response: ${responseBody}`); } - const result = (await response.json()) as { redirect_url?: string }; + console.log('Parsed response:', result); redirectUrl = result.redirect_url; } catch (error) { console.error('Error uploading credentials to SmartResume:', error); From 9263f1607707b751ad4914e5e7c9167f3f9ca50c Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 18 Dec 2025 20:51:43 -0500 Subject: [PATCH 05/22] Add console logs to reolveUri function --- .../brain-service/src/helpers/uri.helpers.ts | 29 ++++++++++++++----- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index 52d50a39e3..b3f18235dd 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -9,7 +9,15 @@ import { isEncrypted } from '@learncard/helpers'; import { TRPCError } from '@trpc/server'; import { getLearnCard } from './learnCard.helpers'; -export const URI_TYPES = ['credential', 'presentation', 'boost', 'contract', 'terms', 'framework', 'skill'] as const; +export const URI_TYPES = [ + 'credential', + 'presentation', + 'boost', + 'contract', + 'terms', + 'framework', + 'skill', +] as const; export type URIType = (typeof URI_TYPES)[number]; @@ -37,7 +45,13 @@ export const getUriParts = (_uri: string, allowOutsideUris: boolean = false): UR }); } - const [lc, method, domain, type, ...rest] = parts as [string, string, string, string, ...string[]]; + const [lc, method, domain, type, ...rest] = parts as [ + string, + string, + string, + string, + ...string[] + ]; const id = rest.join(':'); if ((lc !== 'lc' || method !== 'network') && !allowOutsideUris) { @@ -61,9 +75,7 @@ export const constructUri = (type: URIType, id: string, domain: string): string // Helper specifically for skill URIs which must be of the form // lc:network:/trpc:skill:: -export const getSkillCompoundFromUri = ( - uri: string -): { frameworkId: string; id: string } => { +export const getSkillCompoundFromUri = (uri: string): { frameworkId: string; id: string } => { const { type, id } = getUriParts(uri); if (type !== 'skill') { @@ -84,15 +96,18 @@ export const getSkillCompoundFromUri = ( export const resolveUri = async (uri: string) => { const { domain, type, method } = getUriParts(uri, true); - + console.log('uri', uri); + console.log('Parsed URI parts:', { domain, type, method }); if (method === 'cloud') { const isLocal = domain.includes('localhost'); const url = `http${isLocal ? '' : 's'}://${domain .replace('%3A', ':') .replace('/trpc', '/api')}/storage/resolve?uri=${encodeURIComponent(uri)}`; - + console.log('url', url); const res = await fetch(url); + console.log('res', res); const resolved = await res.json(); + console.log('resolved', resolved); if (isEncrypted(resolved)) { const learnCard = await getLearnCard(); From 70b67993d80d1b07b4fc89ff825b8ab51a2c7c3b Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 18 Dec 2025 21:17:03 -0500 Subject: [PATCH 06/22] Add more logs --- .../brain-service/src/helpers/uri.helpers.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index b3f18235dd..b97b900d00 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -110,8 +110,10 @@ export const resolveUri = async (uri: string) => { console.log('resolved', resolved); if (isEncrypted(resolved)) { const learnCard = await getLearnCard(); - - return await learnCard.invoke.decryptDagJwe(resolved); + console.log('learnCard', learnCard); + const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved); + console.log('decryptResolved', decryptResolved); + return decryptResolved; } return resolved; } From 780e6c164208cee76a82f79333581a1744b6d11e Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 18 Dec 2025 21:38:08 -0500 Subject: [PATCH 07/22] Add keypair to decryptDagJwe --- .../brain-service/src/helpers/uri.helpers.ts | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index b97b900d00..b9beb76837 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -109,11 +109,27 @@ export const resolveUri = async (uri: string) => { const resolved = await res.json(); console.log('resolved', resolved); if (isEncrypted(resolved)) { - const learnCard = await getLearnCard(); - console.log('learnCard', learnCard); - const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved); - console.log('decryptResolved', decryptResolved); - return decryptResolved; + try { + const learnCard = await getLearnCard(); + console.log('learnCard.invoke:', Object.keys(learnCard.invoke)); + + // Get the keypair from the learncard + const keypair = learnCard.id.keypair(); + console.log('Using keypair for decryption:', keypair); + + // Try to decrypt with the learncard's keypair + const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved, [keypair]); + console.log('Successfully decrypted:', decryptResolved); + return decryptResolved; + } catch (error) { + console.error('Error in decryptDagJwe:', { + message: error.message, + stack: error.stack, + name: error.name, + error: error, + }); + throw error; + } } return resolved; } From 9b717f96986b9a885fa971e19962809124c362c8 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Fri, 19 Dec 2025 11:33:13 -0500 Subject: [PATCH 08/22] Add more console logs --- .../brain-service/src/helpers/uri.helpers.ts | 33 +++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index b9beb76837..e2d4a103b3 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -115,11 +115,40 @@ export const resolveUri = async (uri: string) => { // Get the keypair from the learncard const keypair = learnCard.id.keypair(); - console.log('Using keypair for decryption:', keypair); + console.log('Using keypair for decryption:', { + ...keypair, + d: keypair.d ? '***REDACTED***' : undefined, + }); + + console.log('JWE Structure:', { + protected: resolved.protected, + recipients: Array.isArray(resolved.recipients) + ? resolved.recipients.map((r: any) => ({ + header: r.header, + encrypted_key: r.encrypted_key ? '***' : undefined, + })) + : resolved.recipients, + iv: resolved.iv ? '***' : undefined, + ciphertext: resolved.ciphertext ? '***' : undefined, + tag: resolved.tag ? '***' : undefined, + }); // Try to decrypt with the learncard's keypair const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved, [keypair]); - console.log('Successfully decrypted:', decryptResolved); + console.log('decryptResolved', decryptResolved); + console.log('Decryption result:', { + type: typeof decryptResolved, + isArray: Array.isArray(decryptResolved), + keys: + typeof decryptResolved === 'object' ? Object.keys(decryptResolved) : 'N/A', + value: decryptResolved, + }); + if (!decryptResolved) { + console.warn('Decryption returned empty result. Possible issues:'); + console.warn('1. The JWE is not encrypted with the provided keypair'); + console.warn('2. The JWE structure might be malformed'); + console.warn('3. The keypair might not have the correct permissions'); + } return decryptResolved; } catch (error) { console.error('Error in decryptDagJwe:', { From 224bd79f5662d91c16825fa4ff71376e21500b69 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Mon, 5 Jan 2026 15:43:16 -0500 Subject: [PATCH 09/22] Add staging did to decrypt creds --- .../src/hooks/useSharedUrisInTerms.ts | 3 +++ .../brain-service/src/helpers/uri.helpers.ts | 21 +++---------------- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts index 9cd0ff067f..28a72afe0f 100644 --- a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts +++ b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts @@ -42,10 +42,13 @@ export const getOrCreateSharedUriForWallet = async ( 'did:web:network.learncard.com:users:smart-resume-integration' || contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || + contractOwnerDid === 'did:web:staging.network.learncard.com' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; const recipients = [contractOwnerDid]; + console.log('contractOwnerDid', contractOwnerDid); if (isSmartResume) { + recipients.push('did:web:staging.network.learncard.com'); recipients.push('did:web:network.learncard.com'); recipients.push('did:web:localhost%3A4000'); } diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index e2d4a103b3..909d0297ad 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -111,20 +111,11 @@ export const resolveUri = async (uri: string) => { if (isEncrypted(resolved)) { try { const learnCard = await getLearnCard(); - console.log('learnCard.invoke:', Object.keys(learnCard.invoke)); - - // Get the keypair from the learncard - const keypair = learnCard.id.keypair(); - console.log('Using keypair for decryption:', { - ...keypair, - d: keypair.d ? '***REDACTED***' : undefined, - }); - console.log('JWE Structure:', { protected: resolved.protected, recipients: Array.isArray(resolved.recipients) ? resolved.recipients.map((r: any) => ({ - header: r.header, + header: r.header, //should show DID encrypted_key: r.encrypted_key ? '***' : undefined, })) : resolved.recipients, @@ -133,8 +124,7 @@ export const resolveUri = async (uri: string) => { tag: resolved.tag ? '***' : undefined, }); - // Try to decrypt with the learncard's keypair - const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved, [keypair]); + const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved); console.log('decryptResolved', decryptResolved); console.log('Decryption result:', { type: typeof decryptResolved, @@ -143,12 +133,7 @@ export const resolveUri = async (uri: string) => { typeof decryptResolved === 'object' ? Object.keys(decryptResolved) : 'N/A', value: decryptResolved, }); - if (!decryptResolved) { - console.warn('Decryption returned empty result. Possible issues:'); - console.warn('1. The JWE is not encrypted with the provided keypair'); - console.warn('2. The JWE structure might be malformed'); - console.warn('3. The keypair might not have the correct permissions'); - } + return decryptResolved; } catch (error) { console.error('Error in decryptDagJwe:', { From abeff0e29dde0c8b448161e8dbaf0ced0e42fb39 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Mon, 5 Jan 2026 16:29:39 -0500 Subject: [PATCH 10/22] Update contract owner DID --- packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts index 28a72afe0f..6290dafd3b 100644 --- a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts +++ b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts @@ -42,7 +42,7 @@ export const getOrCreateSharedUriForWallet = async ( 'did:web:network.learncard.com:users:smart-resume-integration' || contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || - contractOwnerDid === 'did:web:staging.network.learncard.com' || + contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; const recipients = [contractOwnerDid]; From 621218244ba3beecc51f588676b77f4b9256219f Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Mon, 5 Jan 2026 16:49:11 -0500 Subject: [PATCH 11/22] Add console log for contract details --- apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx index fdbc19a158..169bc33f0b 100644 --- a/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx +++ b/apps/learn-card-app/src/pages/launchPad/LaunchPad.tsx @@ -147,6 +147,8 @@ const LaunchPad: React.FC = () => { consentedContractLoading, hasConsented, } = useConsentFlowByUri(contractUri); + console.log('contractDetails', contractDetails); + console.log('contractUri', contractUri); useEffect(() => { if (contractDetails && !suppressContractModal && !consentedContractLoading) { From e30bf909994c7c121f8b1636fde55f7704172f98 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 15:26:51 -0500 Subject: [PATCH 12/22] Try early return --- .../src/pages/consentFlow/FullScreenConsentFlow.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx index 1bcc91bb0d..be171bdea3 100644 --- a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx +++ b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx @@ -129,7 +129,8 @@ const FullScreenConsentFlow: React.FC = ({ expiresAt: shareDuration.customDuration, oneTime: shareDuration.oneTimeShare, }); - + console.log('SHORT CIRCUITING to CONTRACT CALL!!!!!!!!!'); + return; // Sync any auto-boost credentials (if any). No need to wait. fetchNewContractCredentials(); From e91996be2055f31c032712a9895c43e1b71179d2 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 15:37:22 -0500 Subject: [PATCH 13/22] Change isSmartResume to true --- .../src/pages/consentFlow/FullScreenConsentFlow.tsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx index be171bdea3..a8e7c54543 100644 --- a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx +++ b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx @@ -122,15 +122,14 @@ const FullScreenConsentFlow: React.FC = ({ } setStep(ConsentFlowStep.connecting); - + console.log('CONSENTING TO CONTRACT!!!!!!!!!!!!!'); try { const { redirectUrl } = await consentToContract({ terms, expiresAt: shareDuration.customDuration, oneTime: shareDuration.oneTimeShare, }); - console.log('SHORT CIRCUITING to CONTRACT CALL!!!!!!!!!'); - return; + // Sync any auto-boost credentials (if any). No need to wait. fetchNewContractCredentials(); From d6d818faa91eb38f00b59ba5adf5851bc7344447 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 15:37:44 -0500 Subject: [PATCH 14/22] Change for smartresume --- .../src/hooks/useSharedUrisInTerms.ts | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts index 6290dafd3b..74fd6440ce 100644 --- a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts +++ b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts @@ -37,16 +37,17 @@ export const getOrCreateSharedUriForWallet = async ( // For SmartResume we want to add the generic brain-service wallet's did so that the brain service // can decrypt the credentials and send them to SmartResume via their API - const isSmartResume = - contractOwnerDid === - 'did:web:network.learncard.com:users:smart-resume-integration' || - contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || - contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || - contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || - contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; + const isSmartResume = true; + // contractOwnerDid === + // 'did:web:network.learncard.com:users:smart-resume-integration' || + // contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || + // contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || + // contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || + // contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; const recipients = [contractOwnerDid]; console.log('contractOwnerDid', contractOwnerDid); + console.log('isSmartResume', isSmartResume); if (isSmartResume) { recipients.push('did:web:staging.network.learncard.com'); recipients.push('did:web:network.learncard.com'); From dc44ddd09a0d7795f5529d43efaf1bdce7c771fb Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 15:52:13 -0500 Subject: [PATCH 15/22] Try more logs --- .../src/pages/consentFlow/ConsentFlowHeader.tsx | 2 +- .../pages/consentFlow/FullScreenConsentFlow.tsx | 2 ++ .../src/hooks/useSharedUrisInTerms.ts | 14 ++++++++------ 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx b/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx index d58e505fbc..d502389025 100644 --- a/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx +++ b/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx @@ -80,7 +80,7 @@ const ConsentFlowHeader: React.FC = ({
- {name} + {name}!!!!!!!!!! ); diff --git a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx index a8e7c54543..8bd7e44d60 100644 --- a/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx +++ b/apps/learn-card-app/src/pages/consentFlow/FullScreenConsentFlow.tsx @@ -129,6 +129,8 @@ const FullScreenConsentFlow: React.FC = ({ expiresAt: shareDuration.customDuration, oneTime: shareDuration.oneTimeShare, }); + console.log('redirectUrl', redirectUrl); + return; // Sync any auto-boost credentials (if any). No need to wait. fetchNewContractCredentials(); diff --git a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts index 74fd6440ce..f08ac56f1c 100644 --- a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts +++ b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts @@ -38,16 +38,18 @@ export const getOrCreateSharedUriForWallet = async ( // For SmartResume we want to add the generic brain-service wallet's did so that the brain service // can decrypt the credentials and send them to SmartResume via their API const isSmartResume = true; - // contractOwnerDid === - // 'did:web:network.learncard.com:users:smart-resume-integration' || - // contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || - // contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || - // contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || - // contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; + const isSmartResume2 = + contractOwnerDid === + 'did:web:network.learncard.com:users:smart-resume-integration' || + contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || + contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || + contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || + contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; const recipients = [contractOwnerDid]; console.log('contractOwnerDid', contractOwnerDid); console.log('isSmartResume', isSmartResume); + console.log('isSmartResume2', isSmartResume2); if (isSmartResume) { recipients.push('did:web:staging.network.learncard.com'); recipients.push('did:web:network.learncard.com'); From 29422afb42504add2b864ac1fdac52b2085af16b Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 16:02:39 -0500 Subject: [PATCH 16/22] Remove console log --- .../brain-service/src/helpers/uri.helpers.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index 909d0297ad..f78b0ce2b6 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -126,13 +126,6 @@ export const resolveUri = async (uri: string) => { const decryptResolved = await learnCard.invoke.decryptDagJwe(resolved); console.log('decryptResolved', decryptResolved); - console.log('Decryption result:', { - type: typeof decryptResolved, - isArray: Array.isArray(decryptResolved), - keys: - typeof decryptResolved === 'object' ? Object.keys(decryptResolved) : 'N/A', - value: decryptResolved, - }); return decryptResolved; } catch (error) { From d56aaf844486399e4be65d46c3d061592dddb3ce Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Tue, 6 Jan 2026 16:10:58 -0500 Subject: [PATCH 17/22] Comment out console.error --- .../brain-service/src/helpers/uri.helpers.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts index f78b0ce2b6..a3da3eea35 100644 --- a/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/uri.helpers.ts @@ -129,12 +129,12 @@ export const resolveUri = async (uri: string) => { return decryptResolved; } catch (error) { - console.error('Error in decryptDagJwe:', { - message: error.message, - stack: error.stack, - name: error.name, - error: error, - }); + // console.error('Error in decryptDagJwe:', { + // message: error.message, + // stack: error.stack, + // name: error.name, + // error: error, + // }); throw error; } } From 2d341457cbaf13036afffc3fb62e3b9cd49d9462 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Wed, 7 Jan 2026 15:39:00 -0500 Subject: [PATCH 18/22] Comment out transformed credentials --- .../src/hooks/useSharedUrisInTerms.ts | 2 ++ .../brain-service/src/routes/contracts.ts | 26 +++++++++---------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts index f08ac56f1c..a317332468 100644 --- a/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts +++ b/packages/learn-card-base/src/hooks/useSharedUrisInTerms.ts @@ -44,6 +44,7 @@ export const getOrCreateSharedUriForWallet = async ( contractOwnerDid === 'did:web:localhost%3A4000:users:in-service' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume' || contractOwnerDid === 'did:web:testnet.network.learncard.com:users:testorg1' || + contractOwnerDid === 'did:web:staging.network.learncard.com:users:testorg1' || contractOwnerDid === 'did:web:localhost%3A4000:users:smart-resume-test'; const recipients = [contractOwnerDid]; @@ -51,6 +52,7 @@ export const getOrCreateSharedUriForWallet = async ( console.log('isSmartResume', isSmartResume); console.log('isSmartResume2', isSmartResume2); if (isSmartResume) { + recipients.push('did:web:testnet.network.learncard.com'); recipients.push('did:web:staging.network.learncard.com'); recipients.push('did:web:network.learncard.com'); recipients.push('did:web:localhost%3A4000'); diff --git a/services/learn-card-network/brain-service/src/routes/contracts.ts b/services/learn-card-network/brain-service/src/routes/contracts.ts index ae5041a3e8..51b0a1762a 100644 --- a/services/learn-card-network/brain-service/src/routes/contracts.ts +++ b/services/learn-card-network/brain-service/src/routes/contracts.ts @@ -995,18 +995,18 @@ export const contractsRouter = t.router({ : cred ); console.log('credentials', credentials); - const transformedCredentials = credentials.map(cred => { - const issuer = - typeof cred.issuer === 'string' - ? { id: cred.issuer } - : cred.issuer || { id: '' }; - - return { - ...cred, - issuer, - }; - }); - console.log('transformedCredentials', transformedCredentials); + // const transformedCredentials = credentials.map(cred => { + // const issuer = + // typeof cred.issuer === 'string' + // ? { id: cred.issuer } + // : cred.issuer || { id: '' }; + + // return { + // ...cred, + // issuer, + // }; + // }); + // console.log('transformedCredentials', transformedCredentials); const { name, email } = parsedTerms.read.personal; const body = JSON.stringify({ @@ -1022,7 +1022,7 @@ export const contractsRouter = t.router({ familyName: '', // this is neecessary in order for givenName to be respected email: email && email !== 'anonymous@hidden.com' ? email : '', }, - credentials: transformedCredentials, + credentials: credentials, }); console.log('body', body); try { From 17d32bc8016334e5bfd2e7617772f9cc7fcc7134 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Wed, 7 Jan 2026 16:41:23 -0500 Subject: [PATCH 19/22] Check for change --- apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx b/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx index d502389025..59a5a2cd54 100644 --- a/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx +++ b/apps/learn-card-app/src/pages/consentFlow/ConsentFlowHeader.tsx @@ -80,7 +80,7 @@ const ConsentFlowHeader: React.FC = ({
- {name}!!!!!!!!!! + {name}!!!!???????? ); From 69f577133fba5eeb079d7f8bc4f20cc6b2e4c4c1 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 8 Jan 2026 19:45:55 -0500 Subject: [PATCH 20/22] Change issuer from string to object --- services/learn-card-network/lca-api/src/routes/credentials.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/learn-card-network/lca-api/src/routes/credentials.ts b/services/learn-card-network/lca-api/src/routes/credentials.ts index bd4e06a28b..bcde7c3638 100644 --- a/services/learn-card-network/lca-api/src/routes/credentials.ts +++ b/services/learn-card-network/lca-api/src/routes/credentials.ts @@ -50,7 +50,9 @@ export const credentialsRouter = t.router({ signingAuthority.name ); - credential.issuer = learnCard.id.did(); + // credential.issuer = learnCard.id.did(); + credential.issuer = { id: learnCard.id.did() }; + const verificationMethod = learnCard.id.did().startsWith('did:web') ? `${learnCard.id.did()}#${signingAuthority.name}` : undefined; From 77bc67ee6b496f5e3affa002d69f43ca77a66ccf Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 8 Jan 2026 20:24:02 -0500 Subject: [PATCH 21/22] Bring back transformedCredentials --- .../brain-service/src/routes/contracts.ts | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/services/learn-card-network/brain-service/src/routes/contracts.ts b/services/learn-card-network/brain-service/src/routes/contracts.ts index 51b0a1762a..ae5041a3e8 100644 --- a/services/learn-card-network/brain-service/src/routes/contracts.ts +++ b/services/learn-card-network/brain-service/src/routes/contracts.ts @@ -995,18 +995,18 @@ export const contractsRouter = t.router({ : cred ); console.log('credentials', credentials); - // const transformedCredentials = credentials.map(cred => { - // const issuer = - // typeof cred.issuer === 'string' - // ? { id: cred.issuer } - // : cred.issuer || { id: '' }; - - // return { - // ...cred, - // issuer, - // }; - // }); - // console.log('transformedCredentials', transformedCredentials); + const transformedCredentials = credentials.map(cred => { + const issuer = + typeof cred.issuer === 'string' + ? { id: cred.issuer } + : cred.issuer || { id: '' }; + + return { + ...cred, + issuer, + }; + }); + console.log('transformedCredentials', transformedCredentials); const { name, email } = parsedTerms.read.personal; const body = JSON.stringify({ @@ -1022,7 +1022,7 @@ export const contractsRouter = t.router({ familyName: '', // this is neecessary in order for givenName to be respected email: email && email !== 'anonymous@hidden.com' ? email : '', }, - credentials: credentials, + credentials: transformedCredentials, }); console.log('body', body); try { From 4792c87949359d3f0145ec093a5742f54d680a45 Mon Sep 17 00:00:00 2001 From: Rachel Hendricks Date: Thu, 8 Jan 2026 20:44:04 -0500 Subject: [PATCH 22/22] Try skipping certification --- .../src/helpers/boost.helpers.ts | 9 ++++++- .../brain-service/src/routes/contracts.ts | 27 ++++++++++--------- 2 files changed, 22 insertions(+), 14 deletions(-) diff --git a/services/learn-card-network/brain-service/src/helpers/boost.helpers.ts b/services/learn-card-network/brain-service/src/helpers/boost.helpers.ts index 0acf4c03bf..cef043af2b 100644 --- a/services/learn-card-network/brain-service/src/helpers/boost.helpers.ts +++ b/services/learn-card-network/brain-service/src/helpers/boost.helpers.ts @@ -316,6 +316,7 @@ export const sendBoost = async ({ skipNotification = false, autoAcceptCredential = false, contractTerms, + skipCertification = false, }: { from: ProfileType; to: ProfileType; @@ -325,12 +326,18 @@ export const sendBoost = async ({ skipNotification?: boolean; autoAcceptCredential?: boolean; contractTerms?: DbTermsType; + skipCertification?: boolean; }): Promise => { const decryptedCredential = await decryptCredential(credential); let boostUri: string | undefined; if (decryptedCredential) { if (process.env.NODE_ENV !== 'test') console.log('🚀 sendBoost:VC Decrypted'); - const certifiedBoost = await issueCertifiedBoost(boost, decryptedCredential, domain); + let certifiedBoost: VC | JWE | false; + if (skipCertification) { + certifiedBoost = decryptedCredential; + } else { + certifiedBoost = await issueCertifiedBoost(boost, decryptedCredential, domain); + } if (certifiedBoost) { const credentialInstance = await storeCredential(certifiedBoost); diff --git a/services/learn-card-network/brain-service/src/routes/contracts.ts b/services/learn-card-network/brain-service/src/routes/contracts.ts index ae5041a3e8..89bc3ee580 100644 --- a/services/learn-card-network/brain-service/src/routes/contracts.ts +++ b/services/learn-card-network/brain-service/src/routes/contracts.ts @@ -673,6 +673,7 @@ export const contractsRouter = t.router({ skipNotification: true, autoAcceptCredential: false, contractTerms: terms, + skipCertification: true, }); }), @@ -995,18 +996,18 @@ export const contractsRouter = t.router({ : cred ); console.log('credentials', credentials); - const transformedCredentials = credentials.map(cred => { - const issuer = - typeof cred.issuer === 'string' - ? { id: cred.issuer } - : cred.issuer || { id: '' }; - - return { - ...cred, - issuer, - }; - }); - console.log('transformedCredentials', transformedCredentials); + // const transformedCredentials = credentials.map(cred => { + // const issuer = + // typeof cred.issuer === 'string' + // ? { id: cred.issuer } + // : cred.issuer || { id: '' }; + + // return { + // ...cred, + // issuer, + // }; + // }); + // console.log('transformedCredentials', transformedCredentials); const { name, email } = parsedTerms.read.personal; const body = JSON.stringify({ @@ -1022,7 +1023,7 @@ export const contractsRouter = t.router({ familyName: '', // this is neecessary in order for givenName to be respected email: email && email !== 'anonymous@hidden.com' ? email : '', }, - credentials: transformedCredentials, + credentials: credentials, }); console.log('body', body); try {