diff --git a/Procfile b/Procfile index a153409be..2be5f8089 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: yarn workspace dm3-offchain-resolver-backend start +web: yarn start diff --git a/packages/backend/src/cleanup/cleanUpPendingMessages.ts b/packages/backend/src/cleanup/cleanUpPendingMessages.ts index a0808db2f..5af305c64 100644 --- a/packages/backend/src/cleanup/cleanUpPendingMessages.ts +++ b/packages/backend/src/cleanup/cleanUpPendingMessages.ts @@ -1,5 +1,5 @@ import { IDatabase } from '../persistance/getDatabase'; -import { log } from 'dm3-lib-shared/dist.backend'; +import { logInfo } from 'dm3-lib-shared/dist.backend'; //1 day const DEFAULT_CLEANUP_INTERVAL = 86400000; @@ -7,7 +7,7 @@ const DEFAULT_CLEANUP_INTERVAL = 86400000; async function onCleanUpPendingMessages(db: IDatabase, ttl: number) { const now = new Date().getTime(); const expiryDate = now - ttl; - log('[Clean up] Delete expired messages', 'info'); + logInfo('[Clean up] Delete expired messages'); await db.deleteExpiredMessages(expiryDate); } @@ -21,7 +21,7 @@ export function startCleanUpPendingMessagesJob( if (ttl <= 0) { return; } - log('[Clean up] Start Clean up job', 'info'); + logInfo('[Clean up] Start Clean up job'); return setInterval(() => { onCleanUpPendingMessages(db, ttl); }, cleaningInterval); diff --git a/packages/backend/src/config/getDeliveryServiceProperties.ts b/packages/backend/src/config/getDeliveryServiceProperties.ts index 274312fc2..0b67d4089 100644 --- a/packages/backend/src/config/getDeliveryServiceProperties.ts +++ b/packages/backend/src/config/getDeliveryServiceProperties.ts @@ -1,7 +1,7 @@ import { parse } from 'yaml'; import { existsSync, readFileSync } from 'fs'; import { resolve } from 'path'; -import { log, validateSchema } from 'dm3-lib-shared/dist.backend'; +import { logInfo, validateSchema } from 'dm3-lib-shared/dist.backend'; import { schema, DeliveryServiceProperties, @@ -19,7 +19,7 @@ export function getDeliveryServiceProperties( defaultDeliveryServiceProperties: DeliveryServiceProperties = DEFAULT_DELIVERY_SERVICE_PROPERTIES, ): DeliveryServiceProperties { if (!existsSync(path)) { - log('Config file not found. Default Config is used', 'info'); + logInfo('Config file not found. Default Config is used'); return defaultDeliveryServiceProperties; } const yamlString = readFileSync(path, { encoding: 'utf-8' }); diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 713971dd2..66b91bd32 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -15,7 +15,7 @@ import { getDatabase } from './persistance/getDatabase'; import Profile from './profile'; import RpcProxy from './rpc/rpc-proxy'; import Storage from './storage'; -import { log } from 'dm3-lib-shared/dist.backend'; +import { logInfo } from 'dm3-lib-shared/dist.backend'; import { errorHandler, @@ -83,5 +83,9 @@ app.use(express.static(path.join(__dirname, '../../web/build'))); const port = process.env.PORT || '8080'; server.listen(port, () => { - log('[Server] listening at port ' + port + ' and dir ' + __dirname, 'info'); + logInfo({ + text: '[Server] listening', + port, + dir: __dirname, + }); }); diff --git a/packages/backend/src/messaging.ts b/packages/backend/src/messaging.ts index ce174826b..78653c061 100644 --- a/packages/backend/src/messaging.ts +++ b/packages/backend/src/messaging.ts @@ -9,7 +9,7 @@ import { checkToken, incomingMessage, } from 'dm3-lib-delivery/dist.backend'; -import { log } from 'dm3-lib-shared'; + const pendingMessageSchema = { type: 'object', properties: { diff --git a/packages/backend/src/rpc/methods/handleSubmitMessage.ts b/packages/backend/src/rpc/methods/handleSubmitMessage.ts index a94a9cb37..ddcf7fb8d 100644 --- a/packages/backend/src/rpc/methods/handleSubmitMessage.ts +++ b/packages/backend/src/rpc/methods/handleSubmitMessage.ts @@ -4,7 +4,7 @@ import { validateSchema } from 'dm3-lib-shared/dist.backend'; import 'dotenv/config'; import express from 'express'; import { WithLocals } from '../../types'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export async function handleSubmitMessage( req: express.Request & { app: WithLocals }, @@ -17,12 +17,12 @@ export async function handleSubmitMessage( const envelop = JSON.parse(stringifiedEnvelop); if (!token) { - log('Auth token missing', 'error'); + logError('Auth token missing'); return res.status(400).send('Auth token missing'); } if (!envelop) { - log('Envelop missing', 'error'); + logError('Envelop missing'); return res.status(400).send('Envelop missing'); } @@ -62,7 +62,10 @@ export async function handleSubmitMessage( method: 'RPC SUBMIT MESSAGE', error, }); - log('[handleSubmitMessage]' + error, 'error'); + logError({ + text: '[handleSubmitMessage]', + error, + }); return res.status(400).send(); } diff --git a/packages/billboard-client/src/api/external/getExternalApi.ts b/packages/billboard-client/src/api/external/getExternalApi.ts index 58e0b80c8..cce2e94b8 100644 --- a/packages/billboard-client/src/api/external/getExternalApi.ts +++ b/packages/billboard-client/src/api/external/getExternalApi.ts @@ -5,6 +5,7 @@ import { getViewerCountHandler } from './handler/getViewerCount'; import { getMessagesHandler } from './handler/getMessages'; import { IDatabase } from '../../persitance/getDatabase'; import { IViewerService } from '../../service/viewerService/IViewerService'; +import { logDebug, logInfo } from 'dm3-lib-shared'; export function getExternalApi(db: IDatabase, viewerService: IViewerService) { const app = express(); @@ -13,6 +14,9 @@ export function getExternalApi(db: IDatabase, viewerService: IViewerService) { app.post('/rpc', async (req: express.Request, res: express.Response) => { const { method, params } = req.body; + logInfo({ msg: '/rpc', method }); + logDebug({ msg: '/rpc', method, params }); + //Create Json Rpc request Id const id = v4(); diff --git a/packages/billboard-client/src/api/internal/rest/getChallenge.ts b/packages/billboard-client/src/api/internal/rest/getChallenge.ts index eac75dd67..765144e5c 100644 --- a/packages/billboard-client/src/api/internal/rest/getChallenge.ts +++ b/packages/billboard-client/src/api/internal/rest/getChallenge.ts @@ -1,6 +1,6 @@ import axios from 'axios'; import { normalizeEnsName } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export async function getChallenge( dsUrl: string, @@ -11,8 +11,12 @@ export async function getChallenge( try { const { data } = await axios.get(url); return data.challenge; - } catch (e) { - log("can't get challenge from ds " + dsUrl, 'error'); + } catch (error) { + logError({ + text: "can't get challenge from ds", + error, + dsUrl, + }); return null; } } diff --git a/packages/billboard-client/src/api/internal/rest/getIncomingMessages.ts b/packages/billboard-client/src/api/internal/rest/getIncomingMessages.ts index 8e3f43543..261611c5c 100644 --- a/packages/billboard-client/src/api/internal/rest/getIncomingMessages.ts +++ b/packages/billboard-client/src/api/internal/rest/getIncomingMessages.ts @@ -1,6 +1,6 @@ import axios, { AxiosResponse } from 'axios'; import { EncryptionEnvelop } from 'dm3-lib-messaging'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; /** * Retrieves incoming messages for a specific ENS name. @@ -24,13 +24,12 @@ export async function getIncomingMessages( ); return response.data; - } catch (e) { - log( - `Failed to retrieve incoming messages for ds ${dsUrl}` + - JSON.stringify(e), - - 'error', - ); + } catch (error) { + logError({ + text: `Failed to retrieve incoming messages for ds`, + dsUrl, + error, + }); return null; } } diff --git a/packages/billboard-client/src/api/internal/rest/getNewToken.ts b/packages/billboard-client/src/api/internal/rest/getNewToken.ts index fa4e138ca..9305ab494 100644 --- a/packages/billboard-client/src/api/internal/rest/getNewToken.ts +++ b/packages/billboard-client/src/api/internal/rest/getNewToken.ts @@ -1,6 +1,6 @@ import axios from 'axios'; import { normalizeEnsName } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export async function getNewToken( dsUrl: string, @@ -11,8 +11,11 @@ export async function getNewToken( try { const { data } = await axios.post(url, { signature }); return data.token; - } catch (e) { - log("can't get new token from ds: " + JSON.stringify(e), 'error'); + } catch (error) { + logError({ + text: `can't get new token from ds`, + error, + }); return null; } } diff --git a/packages/billboard-client/src/api/internal/rest/submitUserProfile.ts b/packages/billboard-client/src/api/internal/rest/submitUserProfile.ts index 78812d4ea..99dc038fd 100644 --- a/packages/billboard-client/src/api/internal/rest/submitUserProfile.ts +++ b/packages/billboard-client/src/api/internal/rest/submitUserProfile.ts @@ -1,6 +1,6 @@ import axios from 'axios'; import { SignedUserProfile, normalizeEnsName } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export async function submitUserProfile( dsUrl: string, @@ -12,11 +12,8 @@ export async function submitUserProfile( try { const { data } = await axios.post(url, signedUserProfile); return data; - } catch (e) { - log( - "can't submit userProfile to ds " + dsUrl + ' ' + JSON.stringify(e), - 'error', - ); + } catch (error) { + logError({ text: "can't submit userProfile to ds ", dsUrl, error }); return null; } } diff --git a/packages/billboard-client/src/api/internal/ws/getDeliveryServiceWSConnections.ts b/packages/billboard-client/src/api/internal/ws/getDeliveryServiceWSConnections.ts index e4f935def..ee7d07e7f 100644 --- a/packages/billboard-client/src/api/internal/ws/getDeliveryServiceWSConnections.ts +++ b/packages/billboard-client/src/api/internal/ws/getDeliveryServiceWSConnections.ts @@ -1,6 +1,6 @@ import { EncryptionEnvelop } from 'dm3-lib-messaging'; import { DeliveryServiceProfile } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError, logInfo } from 'dm3-lib-shared'; import { io, Socket } from 'socket.io-client'; @@ -21,23 +21,29 @@ export const getDeliveryServiceWSClient = ( }, }); c.on('connect', () => { - log(`Connected to Delivery Service ${ds.url}`, 'info'); + logInfo({ + text: `Connected to Delivery Service`, + dsUrl: ds.url, + }); res(c); }); - c.on('connect_error', (err: any) => { - log( - `Connection error to Delivery Service ${ds.url} ` + - JSON.stringify(err), - 'error', - ); + c.on('connect_error', (error: any) => { + logError({ + text: `Connection error to Delivery Service`, + dsUrl: ds.url, + error, + }); - rej(err); + rej(error); }); }); - log(`Register listener`, 'info'); + logInfo(`Register listener`); //register listners client.on('disconnect', () => { - log(`disconnected from deliveryService ${ds.url}`, 'info'); + logInfo({ + text: `disconnected from deliveryService `, + dsUrl: ds.url, + }); }); client.on('message', onMessage); diff --git a/packages/billboard-client/src/getBillboardClientApp.ts b/packages/billboard-client/src/getBillboardClientApp.ts index 755e8ce46..d3edf6639 100644 --- a/packages/billboard-client/src/getBillboardClientApp.ts +++ b/packages/billboard-client/src/getBillboardClientApp.ts @@ -1,5 +1,5 @@ import bodyParser from 'body-parser'; -import { log } from 'dm3-lib-shared'; +import { logDebug, logInfo } from 'dm3-lib-shared'; import { ethers } from 'ethers'; import express from 'express'; import http from 'http'; @@ -29,7 +29,10 @@ export const getBillboardClientApp = async ( //Readng the ENV config file const config = ConfigService().readConfigFromEnv(); - log('[getBillboardClientApp] config ' + JSON.stringify(config), 'debug'); + logDebug({ + text: '[getBillboardClientApp] config ', + config, + }); //Each Ens name provided in the config file is an billboard instance //Right now we're using one profile and hence one private key for all billboards @@ -38,10 +41,10 @@ export const getBillboardClientApp = async ( ensName, privateKey: config.privateKey, })); - log( - '[getBillboardClientApp] billboards ' + JSON.stringify(billboards), - 'debug', - ); + logDebug({ + text: '[getBillboardClientApp] billboards', + billboards, + }); //Register services const viewerService = await ViewerService(httpServer); @@ -58,7 +61,10 @@ export const getBillboardClientApp = async ( app.use(getExternalApi(db, viewerService)); httpServer.listen(port, () => { - log('billboard client listening at port ' + port, 'info'); + logInfo({ + text: 'billboard client listening at port ', + port, + }); }); //In oder to finish the test everything has to be cleaned up diff --git a/packages/billboard-client/src/service/dsManager/DsManagerImpl.ts b/packages/billboard-client/src/service/dsManager/DsManagerImpl.ts index 876db4514..81360c1f9 100644 --- a/packages/billboard-client/src/service/dsManager/DsManagerImpl.ts +++ b/packages/billboard-client/src/service/dsManager/DsManagerImpl.ts @@ -5,7 +5,7 @@ import { ProfileKeys, SignedUserProfile, } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logDebug, logError, logInfo } from 'dm3-lib-shared'; import { ethers } from 'ethers'; import { Socket } from 'socket.io-client'; import { IDatabase } from '../../persitance/getDatabase'; @@ -56,7 +56,7 @@ Initializes the connection to delivery services. @returns A promise that resolves when the connection initialization is complete. */ async function connect() { - log('Start to initialize connection to delivery services', 'info'); + logInfo('Start to initialize connection to delivery services'); //Get all delivery service profiles const billboardsWithProfile = await getBillboardProfile( provider, @@ -83,7 +83,7 @@ Initializes the connection to delivery services. authenticatedBillboards, encryptAndStoreMessage(onMessage), ); - log('Finished delivery service initialization', 'info'); + logInfo('Finished delivery service initialization'); } /** @@ -129,10 +129,14 @@ Encrypts and stores a message to redis using the provided billboard's keypairs a JSON.parse(encryptionEnvelop.message), ), ) as Message; - log( - 'decryptedMessage' + JSON.stringify(decryptedMessage), - 'debug', - ); + logInfo({ + msg: 'encryptAndStoreMessage', + metadata: decryptedMessage.metadata, + }); + logDebug({ + msg: 'encryptAndStoreMessage', + decryptedMessage, + }); broadcastMessage( billboardWithDsProfile.ensName, decryptedMessage, @@ -141,8 +145,11 @@ Encrypts and stores a message to redis using the provided billboard's keypairs a billboardWithDsProfile.ensName, decryptedMessage, ); - } catch (err: any) { - log("Can't decrypt message " + JSON.stringify(err), 'error'); + } catch (error: any) { + logError({ + text: `Can't decrypt message`, + error, + }); } }; } diff --git a/packages/billboard-client/src/service/dsManager/steps/establishWsConnection.ts b/packages/billboard-client/src/service/dsManager/steps/establishWsConnection.ts index 25b47db8c..98ee9279e 100644 --- a/packages/billboard-client/src/service/dsManager/steps/establishWsConnection.ts +++ b/packages/billboard-client/src/service/dsManager/steps/establishWsConnection.ts @@ -7,7 +7,7 @@ import { AuthenticatedBillboardWithSocket, BillboardWithDsProfile, } from '../DsManagerImpl'; -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; /** * Establishes WebSocket connections for authenticated billboards with delivery service profiles, and returns an array of authenticated billboards with their associated WebSocket clients. @@ -29,10 +29,10 @@ export async function establishWsConnections( ): Promise { return await Promise.all( billboardsWithDsProfile.map(async (billboardWithDsProfile) => { - log( - `Establish WS connection for ${billboardWithDsProfile.ensName}`, - 'info', - ); + logInfo({ + text: `Establish WS connection for`, + billboardWithDsProfileensName: billboardWithDsProfile.ensName, + }); //For each billboard, establish a WebSocket connection with each delivery service profile. const sockets = await getDeliveryServiceWSClient( diff --git a/packages/billboard-client/src/service/dsManager/steps/fetchAndStoreInitialMessages.ts b/packages/billboard-client/src/service/dsManager/steps/fetchAndStoreInitialMessages.ts index 53a317c4f..fcd47d6a4 100644 --- a/packages/billboard-client/src/service/dsManager/steps/fetchAndStoreInitialMessages.ts +++ b/packages/billboard-client/src/service/dsManager/steps/fetchAndStoreInitialMessages.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { getIncomingMessages } from '../../../api/internal/rest/getIncomingMessages'; import { AuthenticatedBillboard, @@ -25,26 +25,32 @@ export async function fetchAndStoreInitialMessages( return await Promise.all( billboard.dsProfile.map( async (ds: DeliveryServiceProfile & { token: string }) => { - log( - `Fetch initial messages for ${billboard.ensName} from ${ds.url}`, - 'info', - ); + logInfo({ + text: `Fetch initial messages `, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); const messages = await getIncomingMessages( ds.url, billboard.ensName, ds.token, ); if (!messages) { - log( - 'cant fetch initial messages for ds ' + ds.url, - 'info', - ); + logInfo({ + text: `can't fetch initial messages for ds`, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); + return; } - log( - `Got ${messages?.length} for ${billboard.ensName} from ${ds.url}`, - 'info', - ); + logInfo({ + text: `fetchAndStoreInitialMessages`, + messageCount: messages?.length, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); + //Encrypt and store each message in the billboardclient's db await Promise.all( messages.map((m) => diff --git a/packages/billboard-client/src/service/dsManager/steps/getBillboardProfile.ts b/packages/billboard-client/src/service/dsManager/steps/getBillboardProfile.ts index 432b30425..abd04e51e 100644 --- a/packages/billboard-client/src/service/dsManager/steps/getBillboardProfile.ts +++ b/packages/billboard-client/src/service/dsManager/steps/getBillboardProfile.ts @@ -1,6 +1,6 @@ import { getStorageKeyCreationMessage, createStorageKey } from 'dm3-lib-crypto'; import { createProfileKeys, getUserProfile } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError, logInfo } from 'dm3-lib-shared'; import { ethers } from 'ethers'; import { Billboard } from '../DsManagerImpl'; @@ -17,7 +17,10 @@ export async function getBillboardProfile( ) { return await Promise.all( billboards.map(async (billboard) => { - log('Get DM3 User Profile for ' + billboard.ensName, 'info'); + logInfo({ + text: 'Get DM3 User Profile', + billboardEnsName: billboard.ensName, + }); const wallet = new ethers.Wallet(billboard.privateKey); const storageKeyCreationMessage = getStorageKeyCreationMessage( '0xca8f04fdc80d659997f69b02', @@ -41,8 +44,8 @@ export async function getBillboardProfile( profileKeys, dsProfile: [], }; - } catch (e: any) { - log('[getBillboardProfile] ' + JSON.stringify(e), 'error'); + } catch (error: any) { + logError({ text: '[getBillboardProfile] ', error }); throw Error( "Can't get billboard profile for " + billboard.ensName, ); diff --git a/packages/billboard-client/src/service/dsManager/steps/getDsProfile.ts b/packages/billboard-client/src/service/dsManager/steps/getDsProfile.ts index 35d514573..a1a971ccf 100644 --- a/packages/billboard-client/src/service/dsManager/steps/getDsProfile.ts +++ b/packages/billboard-client/src/service/dsManager/steps/getDsProfile.ts @@ -1,6 +1,6 @@ import { getDeliveryServiceProfile } from 'dm3-lib-profile'; import { BillboardWithProfile } from '../DsManagerImpl'; -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { ethers } from 'ethers'; /** @@ -15,7 +15,7 @@ export function getDsProfile(provider: ethers.providers.JsonRpcProvider) { const dsProfiles = await Promise.all( billboardsWithProfile.profile.deliveryServices.map( async (url: string) => { - log('Get DS profile for ' + url, 'info'); + logInfo({ text: 'Get DS profile for ', url }); const dsProfile = await getDeliveryServiceProfile( url, provider, diff --git a/packages/billboard-client/src/service/dsManager/steps/signInAtDs.ts b/packages/billboard-client/src/service/dsManager/steps/signInAtDs.ts index 534f0050e..77d6ce56e 100644 --- a/packages/billboard-client/src/service/dsManager/steps/signInAtDs.ts +++ b/packages/billboard-client/src/service/dsManager/steps/signInAtDs.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { getChallenge } from '../../../api/internal/rest/getChallenge'; import { getNewToken } from '../../../api/internal/rest/getNewToken'; import { @@ -6,7 +6,6 @@ import { AuthenticatedBillboard, } from '../DsManagerImpl'; import { sign } from 'dm3-lib-crypto'; -import { UserProfile } from 'dm3-lib-profile'; import { submitUserProfile } from '../../../api/internal/rest/submitUserProfile'; /** @@ -38,17 +37,20 @@ export async function signInAtDs( // eslint-disable-next-line max-len //If the profile was already submitted, we get a token back. Otherwise we've to perform the challenge response flow if (token) { - log( - `Submitted profilte for ${billboard.ensName} to ${ds.url}}`, - 'info', - ); + logInfo({ + text: `Submitted profile`, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); return token; } } - log( - `Create session for ${billboard.ensName} at ${ds.url}}`, - 'info', - ); + logInfo({ + text: `Create session `, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); + //Create session using the billboards private key const challenge = await getChallenge(ds.url, ensName); if (!challenge) { @@ -60,7 +62,12 @@ export async function signInAtDs( ); const token = await getNewToken(ds.url, ensName, signature); - log('get token for ' + ds.url, 'info'); + logInfo({ + text: `get token for`, + billboardEnsName: billboard.ensName, + dsUrl: ds.url, + }); + if (!token) { throw Error("Can't create session for " + ds.url); } diff --git a/packages/billboard-widget/src/http/DeliveryServiceClient.ts b/packages/billboard-widget/src/http/DeliveryServiceClient.ts index 7127ae651..c17094ea1 100644 --- a/packages/billboard-widget/src/http/DeliveryServiceClient.ts +++ b/packages/billboard-widget/src/http/DeliveryServiceClient.ts @@ -4,7 +4,7 @@ import { createJsonRpcCallSubmitMessage, } from 'dm3-lib-messaging'; import { SignedUserProfile, normalizeEnsName } from 'dm3-lib-profile'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export const DeliveryServiceClient = (url: string) => { const submitMessage = (envelop: EncryptionEnvelop, token: string) => { @@ -24,8 +24,8 @@ export const DeliveryServiceClient = (url: string) => { baseURL: url, }); return data; - } catch (e) { - log("can't submit userProfile to ds " + path, 'error'); + } catch (error) { + logError({ text: "can't submit userProfile to ds ", error, path }); return null; } }; diff --git a/packages/lib/billboard-api/src/client/axios/makeRpcRequest.ts b/packages/lib/billboard-api/src/client/axios/makeRpcRequest.ts index f675daa2e..3f9bb1db9 100644 --- a/packages/lib/billboard-api/src/client/axios/makeRpcRequest.ts +++ b/packages/lib/billboard-api/src/client/axios/makeRpcRequest.ts @@ -1,5 +1,5 @@ import { Axios } from 'axios'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; interface RpcRequest { axios: Axios; @@ -32,7 +32,7 @@ export async function makeRpcRequest({ const { error, result } = data; if (error) { - log('[makeRpcRequest] ' + JSON.stringify(error), 'error'); + logError({ text: '[makeRpcRequest] ', error }); return null; } return result; diff --git a/packages/lib/billboard-api/src/client/axios/methods/deleteMessage.ts b/packages/lib/billboard-api/src/client/axios/methods/deleteMessage.ts index 8fe03bd1a..c0bdee351 100644 --- a/packages/lib/billboard-api/src/client/axios/methods/deleteMessage.ts +++ b/packages/lib/billboard-api/src/client/axios/methods/deleteMessage.ts @@ -1,5 +1,4 @@ import { Axios } from 'axios'; -import { log } from 'dm3-lib-shared'; import { makeRpcRequest } from '../makeRpcRequest'; export function deleteMessage(axios: Axios) { diff --git a/packages/lib/delivery/src/Messages.ts b/packages/lib/delivery/src/Messages.ts index 6735737a8..bcb40b4a8 100644 --- a/packages/lib/delivery/src/Messages.ts +++ b/packages/lib/delivery/src/Messages.ts @@ -19,7 +19,7 @@ import { EncryptionEnvelop, Postmark, } from 'dm3-lib-messaging'; -import { log, sha256 } from 'dm3-lib-shared'; +import { logDebug, sha256 } from 'dm3-lib-shared'; import { checkToken, Session } from './Session'; import { isSpam } from './spam-filter'; import { SpamFilterRules } from './spam-filter/SpamFilterRules'; @@ -114,13 +114,13 @@ export async function incomingMessage( const deliveryInformation: DeliveryInformation = await decryptDeliveryInformation(envelop, encryptionKeyPair); - log('deliveryInformation ' + JSON.stringify(deliveryInformation), 'debug'); + logDebug({ text: 'incomingMessage', deliveryInformation }); const conversationId = getConversationId( await getIdEnsName(deliveryInformation.from), await getIdEnsName(deliveryInformation.to), ); - log('conversationId ' + conversationId, 'debug'); + logDebug({ text: 'incomingMessage', conversationId, deliveryInformation }); //Checks if the sender is authenticated const tokenIsValid = await checkToken( @@ -140,8 +140,12 @@ export async function incomingMessage( if (!receiverSession) { throw Error('unknown session'); } - - log('receiverSession ' + JSON.stringify(receiverSession), 'debug'); + logDebug({ + text: 'incomingMessage', + conversationId, + deliveryInformation, + receiverSession, + }); //Checkes if the message is spam if (await isSpam(provider, receiverSession, deliveryInformation)) { @@ -166,8 +170,11 @@ export async function incomingMessage( ), ), }; - - log('envelopWithPostmark ' + JSON.stringify(envelopWithPostmark), 'debug'); + logDebug({ + text: 'incomingMessage', + conversationId, + envelopWithPostmark, + }); await storeNewMessage(conversationId, envelopWithPostmark); @@ -175,7 +182,10 @@ export async function incomingMessage( if (receiverSession.socketId) { //Client is already connect to the delivery service and the message can be dispatched send(receiverSession.socketId, envelopWithPostmark); - log('WS send to socketId ' + receiverSession.socketId, 'debug'); + logDebug({ + text: 'WS send to socketId ', + receiverSessionSocketId: receiverSession.socketId, + }); } } diff --git a/packages/lib/delivery/src/spam-filter/filter/tokenBalanceFilter/TokenBalanceFilter.ts b/packages/lib/delivery/src/spam-filter/filter/tokenBalanceFilter/TokenBalanceFilter.ts index 9188a52e6..1a629b94b 100644 --- a/packages/lib/delivery/src/spam-filter/filter/tokenBalanceFilter/TokenBalanceFilter.ts +++ b/packages/lib/delivery/src/spam-filter/filter/tokenBalanceFilter/TokenBalanceFilter.ts @@ -3,7 +3,7 @@ import { DeliveryInformation } from 'dm3-lib-messaging'; import { SpamFilterRule } from '../../SpamFilterRules'; import { SpamFilterFactory } from '../SpamFilter'; import ERC20Abi from './Erc20Abi.json'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; export type TokenBalanceFilterSettings = { address: string; @@ -39,12 +39,11 @@ export function tokenBalanceFilterFactory(): SpamFilterFactory { ); const balanceOfHex = await contract.balanceOf(from); return BigNumber.from(balanceOfHex); - } catch (err) { - log( - '[Token Balance Filter] Cant fetch balance from ERC20 Token. Return 0 as default' + - JSON.stringify(err), - 'error', - ); + } catch (error) { + logError({ + text: '[Token Balance Filter] Cant fetch balance from ERC20 Token. Return 0 as default', + error, + }); return ethers.constants.Zero; } }; diff --git a/packages/lib/messaging/src/Attachments.ts b/packages/lib/messaging/src/Attachments.ts index 214d13900..de16e8d1a 100644 --- a/packages/lib/messaging/src/Attachments.ts +++ b/packages/lib/messaging/src/Attachments.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logError, logWarning } from 'dm3-lib-shared'; import { Envelop } from './Envelop'; const SUPPORTED_PROTOCOLS = ['http', 'https', 'data']; @@ -9,7 +9,10 @@ function uriCheck(url: URL | undefined): url is URL { (protocol) => protocol + ':' === url.protocol, ); if (!usesSupportedProtocol) { - log(`unsupported attachment protocol: ${url.href}`, 'warning'); + logWarning({ + text: `unsupported attachment protocol`, + url: url.href, + }); } return usesSupportedProtocol; } else { @@ -26,8 +29,8 @@ export function getAttachments(envelop: Envelop): URL[] { .map((attachmentURI) => { try { return new URL(attachmentURI); - } catch (e) { - log(`couldn't prarse URI: ${attachmentURI}`, 'error'); + } catch (error) { + logError({ text: `couldn't prarse URI`, attachmentURI }); return undefined; } }) diff --git a/packages/lib/messaging/src/MessageProxy.ts b/packages/lib/messaging/src/MessageProxy.ts index 1aa303899..b862cdbf7 100644 --- a/packages/lib/messaging/src/MessageProxy.ts +++ b/packages/lib/messaging/src/MessageProxy.ts @@ -6,7 +6,7 @@ import { } from 'dm3-lib-profile'; import { ProxyEnvelop } from './ProxyEnvelop'; import { ethers } from 'ethers'; -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; import { EncryptionEnvelop } from './Envelop'; export type ProxySendParams = { @@ -48,11 +48,12 @@ async function trySend( }); return true; - } catch (e) { - log( - `Failed to send message using: ${dsName} ` + JSON.stringify(e), - 'error', - ); + } catch (error) { + logError({ + text: `Failed to send message`, + dsName, + error, + }); return false; } } diff --git a/packages/lib/offchainResolver/src/encoding/decodeRequest.ts b/packages/lib/offchainResolver/src/encoding/decodeRequest.ts index d93a1a2cb..72ca364ef 100644 --- a/packages/lib/offchainResolver/src/encoding/decodeRequest.ts +++ b/packages/lib/offchainResolver/src/encoding/decodeRequest.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logError } from 'dm3-lib-shared'; import { DecodedCcipRequest } from '../types'; import { decodeAddr } from './decode/decodeAddr'; import { decodeText } from './decode/decodeText'; @@ -31,12 +31,9 @@ export function decodeRequest(calldata: string): DecodedCcipRequest { default: throw Error(`${signature} is not supported`); } - } catch (err: any) { - log( - `[Decode Calldata] Can't decode calldata ` + JSON.stringify(err), - 'error', - ); + } catch (error: any) { + logError({ text: `[Decode Calldata] Can't decode calldata`, error }); - throw err; + throw error; } } diff --git a/packages/lib/profile/src/profileResolver/IpfsResolver.ts b/packages/lib/profile/src/profileResolver/IpfsResolver.ts index 92fbe49c8..9d2fc5727 100644 --- a/packages/lib/profile/src/profileResolver/IpfsResolver.ts +++ b/packages/lib/profile/src/profileResolver/IpfsResolver.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { Dm3Profile, ProfileResolver } from './ProfileResolver'; import { GetResource } from '../Profile'; @@ -16,7 +16,7 @@ export function resolveProfile( validate: (objectToCheck: T) => boolean, ) { return async (textRecord: string) => { - log(`[getUserProfile] resolve ipfs link ${textRecord}`, 'info'); + logInfo({ text: `[getUserProfile] resolve ipfs link`, textRecord }); const ipfsGatewayUrl = 'https://www.ipfs.io/ipfs'; const cid = textRecord.substring(7); diff --git a/packages/lib/profile/src/profileResolver/JsonResolver.ts b/packages/lib/profile/src/profileResolver/JsonResolver.ts index a417470ba..b35b3cec5 100644 --- a/packages/lib/profile/src/profileResolver/JsonResolver.ts +++ b/packages/lib/profile/src/profileResolver/JsonResolver.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { decode, labelToName } from 'whatwg-encoding'; import { Dm3Profile, ProfileResolver } from './ProfileResolver'; @@ -29,7 +29,7 @@ function isProfile(textRecord: string) { function resolveProfile(validate: (objectToCheck: T) => boolean) { return async (textRecord: string): Promise => { - log(`[getUserProfile] Resolve User Json profile `, 'info'); + logInfo(`[getUserProfile] Resolve User Json profile `); const dataUrl = parseDataUrl(textRecord); diff --git a/packages/lib/profile/src/profileResolver/LinkResolver.ts b/packages/lib/profile/src/profileResolver/LinkResolver.ts index b1030a21c..0f8099603 100644 --- a/packages/lib/profile/src/profileResolver/LinkResolver.ts +++ b/packages/lib/profile/src/profileResolver/LinkResolver.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { checkProfileHash, GetResource } from '../Profile'; import { Dm3Profile, ProfileResolver } from './ProfileResolver'; @@ -16,7 +16,7 @@ function resolveProfile( validate: (objectToCheck: T) => boolean, ) { return async (textRecord: string) => { - log(`[getUserProfile] resolve link ${textRecord}`, 'info'); + logInfo({ text: `[getUserProfile] resolve link`, textRecord }); const profile = await getResource(textRecord); if (!profile) { diff --git a/packages/lib/profile/src/userProfile/getUserProfile.ts b/packages/lib/profile/src/userProfile/getUserProfile.ts index 0f2648f05..f5978b89e 100644 --- a/packages/lib/profile/src/userProfile/getUserProfile.ts +++ b/packages/lib/profile/src/userProfile/getUserProfile.ts @@ -1,4 +1,3 @@ -import { log } from 'dm3-lib-shared'; import axios from 'axios'; import { ProfileResolver, diff --git a/packages/lib/shared/src/log.ts b/packages/lib/shared/src/log.ts index dddb65acb..5c0dc9122 100644 --- a/packages/lib/shared/src/log.ts +++ b/packages/lib/shared/src/log.ts @@ -1,6 +1,6 @@ /* eslint no-console: 0 */ export interface LogOptions { - customLogger?: (msg: string, level: string) => void; + customLogger?: (msg: any, level: string) => void; } const levels: Record = { @@ -14,32 +14,37 @@ const levels: Record = { }; function execLog( - msg: string, + message: any, level: string, currentLevel: number, options?: LogOptions, ) { + const msgObject = JSON.stringify({ + message, + level, + }); + if (options?.customLogger) { - options.customLogger(msg, level); + options.customLogger(message, level); } else if (levels[level] !== undefined && levels[level] <= currentLevel) { switch (level) { case 'error': - console.error(msg); + console.error(msgObject); break; case 'warning': - console.warn(msg); + console.warn(msgObject); break; case 'info': case 'debug': default: - console.log(msg); + console.log(msgObject); } } } -export function log(msg: string, level: string, options?: LogOptions) { +export function log(msg: any, level: string, options?: LogOptions) { let currentLevel = 2; try { const envLevel = process.env.LOG_LEVEL; @@ -58,18 +63,18 @@ export function log(msg: string, level: string, options?: LogOptions) { execLog(msg, level, currentLevel, options); } -export function logInfo(msg: string, options?: LogOptions) { +export function logInfo(msg: any, options?: LogOptions) { log(msg, 'info', options); } -export function logError(msg: string, options?: LogOptions) { +export function logError(msg: any, options?: LogOptions) { log(msg, 'info', options); } -export function logWarning(msg: string, options?: LogOptions) { +export function logWarning(msg: any, options?: LogOptions) { log(msg, 'warning', options); } -export function logDebug(msg: string, options?: LogOptions) { +export function logDebug(msg: any, options?: LogOptions) { log(msg, 'debug', options); } diff --git a/packages/lib/shared/src/validateSchema.ts b/packages/lib/shared/src/validateSchema.ts index 3b7df25fa..a4ef06c0b 100644 --- a/packages/lib/shared/src/validateSchema.ts +++ b/packages/lib/shared/src/validateSchema.ts @@ -1,13 +1,14 @@ import Ajv from 'ajv'; -import { log } from './log'; +import { logError } from './log'; export function validateSchema(schema: any, data: any) { let ajv = new Ajv(); try { const validate = ajv.compile(schema); return validate(data); - } catch (e) { - log(e as string, 'error'); + } catch (error) { + logError({ text: 'validateSchema', error }); + return false; } } diff --git a/packages/lib/storage/src/Storage.ts b/packages/lib/storage/src/Storage.ts index e7c11a647..c8a0739f6 100644 --- a/packages/lib/storage/src/Storage.ts +++ b/packages/lib/storage/src/Storage.ts @@ -2,7 +2,7 @@ import { Account, normalizeEnsName, ProfileKeys } from 'dm3-lib-profile'; import { decrypt, encrypt, EncryptedPayload } from 'dm3-lib-crypto'; import { Acknoledgment } from 'dm3-lib-delivery'; import { Envelop, MessageState } from 'dm3-lib-messaging'; -import { log, stringify } from 'dm3-lib-shared'; +import { logInfo, stringify } from 'dm3-lib-shared'; import { createTimestamp } from './Utils'; export enum StorageLocation { @@ -235,7 +235,7 @@ export async function load( data: UserStorage, storageEncryptionKey: string, ): Promise { - log('[storage] Loading user storage', 'info'); + logInfo('[storage] Loading user storage'); const decryptedPayload: UserStoragePayload = JSON.parse( await decrypt(storageEncryptionKey, data.payload), diff --git a/packages/lib/storage/src/Utils.ts b/packages/lib/storage/src/Utils.ts index aace349f1..3654bf2ee 100644 --- a/packages/lib/storage/src/Utils.ts +++ b/packages/lib/storage/src/Utils.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logError, logInfo } from 'dm3-lib-shared'; export const FILE_NAME_PREFIX = 'dm3'; @@ -16,7 +16,7 @@ export function getTimestamp(file: { name: string }): number | undefined { //In order to extract the timeStamp, a file has to corresponds to the dm3 storage file naming pattern if (!isValidFileName) { - log('Invalid filename', 'error'); + logError('Invalid filename'); return undefined; } //If a float number was provided as a timestamp only the int part will be returned @@ -25,7 +25,7 @@ export function getTimestamp(file: { name: string }): number | undefined { const timeStamp = parseInt(integerString); //The timestamp has to be a number in order to get parsed if (isNaN(timeStamp)) { - log('timestamp has to be a number. Given: ' + integerString, 'info'); + logInfo({ text: 'timestamp has to be a number.', integerString }); return undefined; } diff --git a/packages/lib/storage/src/location/Dm3Storage.ts b/packages/lib/storage/src/location/Dm3Storage.ts index 65d89a3ed..399f50271 100644 --- a/packages/lib/storage/src/location/Dm3Storage.ts +++ b/packages/lib/storage/src/location/Dm3Storage.ts @@ -6,7 +6,7 @@ import { Account, } from 'dm3-lib-profile'; import { Acknoledgment } from 'dm3-lib-delivery'; -import { log } from 'dm3-lib-shared'; +import { logInfo } from 'dm3-lib-shared'; import { sync } from '../Storage'; import { ethers } from 'ethers'; @@ -27,7 +27,7 @@ export async function useDm3Storage( token: string, ): Promise { const syncResult = await sync(userDb, token); - log(`[dm3 Storage] Saving user storage`, 'info'); + logInfo(`[dm3 Storage] Saving user storage`); const { profile, ensName } = account; @@ -46,7 +46,7 @@ export async function getDm3Storage( account: Account, token: string, ): Promise { - log(`[dm3 Storage] Get user storage`, 'info'); + logInfo(`[dm3 Storage] Get user storage`); const { profile, ensName } = account!; diff --git a/packages/lib/storage/src/location/GoogleDrive.ts b/packages/lib/storage/src/location/GoogleDrive.ts index 3a28ce373..2ab5c80cc 100644 --- a/packages/lib/storage/src/location/GoogleDrive.ts +++ b/packages/lib/storage/src/location/GoogleDrive.ts @@ -1,4 +1,4 @@ -import { stringify, log } from 'dm3-lib-shared'; +import { stringify, logInfo } from 'dm3-lib-shared'; import { UserDB } from '..'; import { Acknoledgment } from 'dm3-lib-delivery'; import { sync, UserStorage } from '../Storage'; @@ -53,7 +53,7 @@ export async function googleStore( throw Error('No google api object'); } - log('Sync with google drive', 'info'); + logInfo('Sync with google drive'); const syncResult = await sync(userDb, deliveryServiceToken); await createGoogleDriveFile( @@ -75,7 +75,7 @@ export async function googleLoad(gapi: any): Promise { }) ).result.files; - log(`Google storage found ${files.length} data files`, 'info'); + logInfo({ text: `Google storage`, filesLength: files.length }); if (files.length < 1) { throw Error('No dm3 data found on google drive'); diff --git a/packages/offchain-resolver-backend/src/http/ccipGateway.ts b/packages/offchain-resolver-backend/src/http/ccipGateway.ts index 040631627..8dfccad45 100644 --- a/packages/offchain-resolver-backend/src/http/ccipGateway.ts +++ b/packages/offchain-resolver-backend/src/http/ccipGateway.ts @@ -2,7 +2,7 @@ import { decodeRequest, encodeResponse, } from 'dm3-lib-offchain-resolver/dist.backend'; -import { log } from 'dm3-lib-shared/dist.backend'; +import { logError } from 'dm3-lib-shared/dist.backend'; import { Signer } from 'ethers'; import express from 'express'; import { handleCcipRequest } from './handleCcipRequest/handleCcipRequest'; @@ -33,7 +33,7 @@ export function ccipGateway(signer: Signer, resolverAddr: string) { ); if (!response) { - log('Record not found', 'error'); + logError('Record not found'); res.status(404).send({ message: 'Record not found' }); } else { const data = await encodeResponse( diff --git a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/handleAddr.ts b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/handleAddr.ts index f24b4845f..98a327fb7 100644 --- a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/handleAddr.ts +++ b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/handleAddr.ts @@ -1,16 +1,16 @@ import { ethers } from 'ethers'; import { IDatabase } from '../../../persistance/IDatabase'; import { interceptAddr } from './intercept'; -import { log } from 'dm3-lib-shared'; +import { logDebug } from 'dm3-lib-shared'; export async function handleAddr(db: IDatabase, request: any) { const { name } = request; const interceptResult = interceptAddr(name); - log( - '[Interceptor handleAddr] result ' + JSON.stringify(interceptResult), - 'debug', - ); + logDebug({ + text: '[Interceptor handleAddr]` result ', + interceptResult, + }); return ( interceptResult ?? diff --git a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/intercept.ts b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/intercept.ts index afec96450..e6c236929 100644 --- a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/intercept.ts +++ b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/intercept.ts @@ -1,4 +1,4 @@ -import { log } from 'dm3-lib-shared'; +import { logDebug, logError } from 'dm3-lib-shared'; export interface Interceptor { ensName: string; @@ -7,19 +7,29 @@ export interface Interceptor { } function getInterceptor(ensName: string) { - log( - `[getInterceptor] for ${ensName} (env: ${process.env.interceptor})`, - 'debug', - ); + logDebug({ + text: `[getInterceptor]`, + ensName, + envInterceptor: process.env.interceptor, + }); if (process.env.interceptor) { const interceptor: Interceptor = JSON.parse(process.env.interceptor); - log( - `[getInterceptor] interceptor ${JSON.stringify(interceptor)}`, - 'debug', - ); + logDebug({ + text: `[getInterceptor] interceptor`, + ensName, + envInterceptor: process.env.interceptor, + interceptor, + }); + const higherLevelDomain = ensName.split('.').splice(1).join('.'); - log(`[getInterceptor] higherLevelDomain ${higherLevelDomain}`, 'debug'); + + logDebug({ + text: `[getInterceptor] higherLevelDomain`, + ensName, + envInterceptor: process.env.interceptor, + higherLevelDomain, + }); return interceptor.ensName === higherLevelDomain ? interceptor : null; } } @@ -32,8 +42,8 @@ export function interceptTextRecord(ensName: string, textRecordName: string) { return interceptor?.textRecords ? interceptor.textRecords[textRecordName] : null; - } catch (e) { - log('Error while intercepting ' + JSON.stringify(e), 'error'); + } catch (error) { + logError({ text: 'Error while intercepting ', error }); } } @@ -43,7 +53,10 @@ export function interceptAddr(ensName: string) { try { const interceptor = getInterceptor(ensName); return interceptor ? interceptor.addr : null; - } catch (e) { - log('Error while intercepting' + JSON.stringify(e), 'error'); + } catch (error) { + logError({ + text: 'Error while intercepting', + error, + }); } } diff --git a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/resolveText.ts b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/resolveText.ts index 53b6c5431..9adad6254 100644 --- a/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/resolveText.ts +++ b/packages/offchain-resolver-backend/src/http/handleCcipRequest/handler/resolveText.ts @@ -2,7 +2,7 @@ import { IDatabase } from '../../../persistance/IDatabase'; import { PROFILE_RECORD_NAME } from 'dm3-lib-profile/dist.backend'; import { stringify } from 'dm3-lib-shared/dist.backend'; import { interceptTextRecord } from './intercept'; -import { log } from 'dm3-lib-shared'; +import { logDebug } from 'dm3-lib-shared'; export async function handleText(db: IDatabase, request: any) { const { record, name } = request; @@ -12,10 +12,7 @@ export async function handleText(db: IDatabase, request: any) { } const interceptResult = interceptTextRecord(name, record); - log( - '[Interceptor handleText] result ' + JSON.stringify(interceptResult), - 'debug', - ); + logDebug({ text: '[Interceptor handleText] result ', interceptResult }); if (interceptResult) { return interceptResult; diff --git a/packages/offchain-resolver-backend/src/http/profile.ts b/packages/offchain-resolver-backend/src/http/profile.ts index dc81d5064..4306829d1 100644 --- a/packages/offchain-resolver-backend/src/http/profile.ts +++ b/packages/offchain-resolver-backend/src/http/profile.ts @@ -1,4 +1,8 @@ -import { globalConfig, log, validateSchema } from 'dm3-lib-shared/dist.backend'; +import { + globalConfig, + logInfo, + validateSchema, +} from 'dm3-lib-shared/dist.backend'; import { schema, checkUserProfileWithAddress, @@ -106,7 +110,7 @@ export function profile(web3Provider: ethers.providers.BaseProvider) { async (req: express.Request & { app: WithLocals }, res, next) => { try { const { signedUserProfile, name, ensName } = req.body; - log(`POST name ${name} `, 'info'); + logInfo({ text: `POST name`, name }); const isSchemaValid = validateSchema( schema.SignedUserProfile,