diff --git a/.changeset/brave-rice-knock.md b/.changeset/brave-rice-knock.md new file mode 100644 index 0000000..52e3d1e --- /dev/null +++ b/.changeset/brave-rice-knock.md @@ -0,0 +1,5 @@ +--- +"@saleor/apps-shared": minor +--- + +Added "redactError" helper. It should be used when logger.error is called to make safer error logs. diff --git a/apps/cms/src/lib/cms/client/clients-execution.ts b/apps/cms/src/lib/cms/client/clients-execution.ts index 6141b85..954e20f 100644 --- a/apps/cms/src/lib/cms/client/clients-execution.ts +++ b/apps/cms/src/lib/cms/client/clients-execution.ts @@ -9,7 +9,7 @@ import { ProductResponseSuccess, } from "../types"; import { getCmsIdFromSaleorItem } from "./metadata"; -import { createLogger } from "@saleor/apps-shared"; +import { createLogger, redactError } from "@saleor/apps-shared"; import { CMSProvider, cmsProviders } from "../providers"; import { ProviderInstanceSchema, providersSchemaSet } from "../config"; @@ -77,7 +77,7 @@ const executeCmsClientOperation = async ({ } catch (error) { logger.error( { - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }, "Error deleting item" ); @@ -110,7 +110,7 @@ const executeCmsClientOperation = async ({ }); } catch (error) { logger.error("Error updating item", { - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }); return { @@ -145,7 +145,7 @@ const executeCmsClientOperation = async ({ } } catch (error) { logger.error("Error creating item", { - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }); return { @@ -220,7 +220,7 @@ export const executeCmsClientBatchOperation = async ({ } catch (error) { logger.error( { - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }, "Error creating batch items" ); @@ -268,7 +268,7 @@ export const executeCmsClientBatchOperation = async ({ } catch (error) { logger.error( { - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }, "Error removing batch items" ); diff --git a/apps/taxes/src/pages/api/webhooks/order-created.ts b/apps/taxes/src/pages/api/webhooks/order-created.ts index 075a68d..0b35a0b 100644 --- a/apps/taxes/src/pages/api/webhooks/order-created.ts +++ b/apps/taxes/src/pages/api/webhooks/order-created.ts @@ -14,6 +14,7 @@ import { createClient } from "../../../lib/graphql"; import { Client } from "urql"; import { WebhookResponse } from "../../../modules/app/webhook-response"; import { PROVIDER_ORDER_ID_KEY } from "../../../modules/avatax/order-fulfilled/avatax-order-fulfilled-payload-transformer"; +import { redactError } from "@saleor/apps-shared"; export const config = { api: { @@ -98,7 +99,7 @@ export default orderCreatedAsyncWebhook.createHandler(async (req, res, ctx) => { return webhookResponse.success(); } catch (error) { logger.error({ - error: { message: (error as Error).message, stack: (error as Error).stack }, + error: redactError(error), }); return webhookResponse.error(new Error("Error while creating order in tax provider")); } diff --git a/packages/shared/index.ts b/packages/shared/index.ts index 36795f8..1cd78d4 100644 --- a/packages/shared/index.ts +++ b/packages/shared/index.ts @@ -4,3 +4,4 @@ export * from "./src/no-ssr-wrapper"; export * from "./src/use-dashboard-notification"; export * from "./src/logger"; export * from "./src/saleor-version-compatibility-validator"; +export * from "./src/redact-error"; diff --git a/packages/shared/src/redact-error.ts b/packages/shared/src/redact-error.ts new file mode 100644 index 0000000..c192fb9 --- /dev/null +++ b/packages/shared/src/redact-error.ts @@ -0,0 +1,14 @@ +export const redactError = (err: unknown) => { + if (err instanceof Error) { + const { message, stack } = err; + + return { + message, + stack, + }; + } else { + return { + message: "Unknown error - redacted", + }; + } +};