diff --git a/functions/context.js b/functions/context.js new file mode 100644 index 0000000..8913ad1 --- /dev/null +++ b/functions/context.js @@ -0,0 +1,35 @@ +const _logger = require('firebase-functions/logger') +const { AsyncLocalStorage } = require('node:async_hooks') + +const asyncLocalStorage = new AsyncLocalStorage() + +const createExecContext = (next) => { + return (...args) => asyncLocalStorage.run({ execId: `${Date.now() + Math.random()}` }, () => next(...args)) +} + +const log = (level, msg, d) => { + const execId = asyncLocalStorage.getStore()?.execId + if (execId) { + if (d) d.execId = execId + else d = { execId } + } + return _logger[level](msg, d) +} + +const logger = { + info (msg, d) { + return log('info', msg, d) + }, + warn (msg, d) { + return log('warn', msg, d) + }, + error (msg, d) { + return log('error', msg, d) + } +} + +module.exports = { + asyncLocalStorage, + createExecContext, + logger +} diff --git a/functions/index.js b/functions/index.js index ff19e1c..9bb37b3 100644 --- a/functions/index.js +++ b/functions/index.js @@ -23,6 +23,7 @@ const { app, procedures } = require('./ecom.config') // handle app authentication to Store API // https://github.com/ecomplus/application-sdk const { ecomServerIps, setup } = require('@ecomplus/application-sdk') +const { createExecContext } = require('./context') server.use(bodyParser.urlencoded({ extended: false })) server.use(bodyParser.json()) @@ -132,7 +133,7 @@ recursiveReadDir(routesDir).filter(filepath => filepath.endsWith('.js')).forEach server.use(router) -exports[functionName] = functions.https.onRequest(server) +exports[functionName] = functions.https.onRequest(createExecContext(server)) console.log(`-- Starting '${app.title}' E-Com Plus app with Function '${functionName}'`) // schedule update tokens job diff --git a/functions/lib/pagarme/payment-subscriptions.js b/functions/lib/pagarme/payment-subscriptions.js index 418aa8a..60fa5e5 100644 --- a/functions/lib/pagarme/payment-subscriptions.js +++ b/functions/lib/pagarme/payment-subscriptions.js @@ -1,3 +1,4 @@ +const { logger } = require('../../context') const axios = require('./axios-create') const { parseAddress } = require('./parses-utils') @@ -146,7 +147,7 @@ const createSubscription = async (params, appData, storeId, plan, customer) => { } pagarmeSubscription.service_referer_name = partnerId - console.log('> Subscription: ', JSON.stringify(pagarmeSubscription)) + logger.info(`> Subscription: ${JSON.stringify(pagarmeSubscription)}`) return pagarmeAxios.post( '/subscriptions', @@ -238,7 +239,7 @@ const createPayment = async (params, appData, storeId, customer) => { pagarmeOrder.payments = [payment] pagarmeOrder.service_referer_name = partnerId - console.log('> Order PagarMe: ', JSON.stringify(pagarmeOrder)) + logger.info(`> Order PagarMe: ${JSON.stringify(pagarmeOrder)}`) return pagarmeAxios.post( '/orders',