From 20b69622bebb249e481ff9631ed82034455e4f87 Mon Sep 17 00:00:00 2001 From: douglance <4741454+douglance@users.noreply.github.com> Date: Thu, 15 Jan 2026 05:53:26 -0500 Subject: [PATCH 1/4] refactor: extract Slack messaging into dedicated package - Create new `packages/slack` package with all Slack-related code - Move createSlackPoster, postSlackMessage, sanitizeSlackMessage from utils - Update monitors to import from 'slack' instead of 'utils' - Export formatGitHubCIInfo from utils (used by slack package) - Remove @slack/web-api dependency from utils --- packages/assertion-monitor/package.json | 1 + .../reportAssertionMonitorAlertToSlack.ts | 2 +- packages/batch-poster-monitor/package.json | 1 + .../reportBatchPosterAlertToSlack.ts | 2 +- .../handlers/slack/postSlackMessage.ts | 2 +- packages/retryable-monitor/package.json | 1 + .../__test__/createSlackPoster.test.ts | 0 packages/{utils => slack}/createSlackPoster.ts | 0 packages/slack/index.ts | 3 +++ packages/slack/package.json | 14 ++++++++++++++ packages/{utils => slack}/postSlackMessage.ts | 2 +- packages/{utils => slack}/sanitizeSlackMessage.ts | 0 packages/slack/tsconfig.json | 8 ++++++++ packages/{utils => slack}/vitest.config.ts | 0 packages/utils/index.ts | 3 +-- packages/utils/package.json | 4 +--- yarn.lock | 5 +++++ 17 files changed, 39 insertions(+), 9 deletions(-) rename packages/{utils => slack}/__test__/createSlackPoster.test.ts (100%) rename packages/{utils => slack}/createSlackPoster.ts (100%) create mode 100644 packages/slack/index.ts create mode 100644 packages/slack/package.json rename packages/{utils => slack}/postSlackMessage.ts (92%) rename packages/{utils => slack}/sanitizeSlackMessage.ts (100%) create mode 100644 packages/slack/tsconfig.json rename packages/{utils => slack}/vitest.config.ts (100%) diff --git a/packages/assertion-monitor/package.json b/packages/assertion-monitor/package.json index 7ed6c99..fb66595 100644 --- a/packages/assertion-monitor/package.json +++ b/packages/assertion-monitor/package.json @@ -5,6 +5,7 @@ "dependencies": { "@arbitrum/sdk": "^4.0.0", "@types/yargs": "17.0.32", + "slack": "*", "typescript": "^5.4.5", "utils": "*", "viem": "^2.7.9", diff --git a/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts b/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts index a7f18b5..099cf0d 100644 --- a/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts +++ b/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'utils' +import { createSlackPoster } from 'slack' export const reportAssertionMonitorErrorToSlack = createSlackPoster({ tokenEnvVar: 'ASSERTION_MONITORING_SLACK_TOKEN', diff --git a/packages/batch-poster-monitor/package.json b/packages/batch-poster-monitor/package.json index fe210d2..9148c76 100644 --- a/packages/batch-poster-monitor/package.json +++ b/packages/batch-poster-monitor/package.json @@ -12,6 +12,7 @@ "dependencies": { "@arbitrum/orbit-sdk": "^0.23.5", "abitype": "^1.0.5", + "slack": "*", "typescript": "^5.4.5", "utils": "*", "viem": "1.20.0" diff --git a/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts b/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts index 52925c1..621fbf6 100644 --- a/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts +++ b/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'utils' +import { createSlackPoster } from 'slack' export const reportBatchPosterErrorToSlack = createSlackPoster({ tokenEnvVar: 'BATCH_POSTER_MONITORING_SLACK_TOKEN', diff --git a/packages/retryable-monitor/handlers/slack/postSlackMessage.ts b/packages/retryable-monitor/handlers/slack/postSlackMessage.ts index b29963e..55578d4 100644 --- a/packages/retryable-monitor/handlers/slack/postSlackMessage.ts +++ b/packages/retryable-monitor/handlers/slack/postSlackMessage.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'utils' +import { createSlackPoster } from 'slack' export const postSlackMessage = createSlackPoster({ tokenEnvVar: 'RETRYABLE_MONITORING_SLACK_TOKEN', diff --git a/packages/retryable-monitor/package.json b/packages/retryable-monitor/package.json index 4f4c2ca..708a8c8 100644 --- a/packages/retryable-monitor/package.json +++ b/packages/retryable-monitor/package.json @@ -12,6 +12,7 @@ "ethers": "^5.5.4", "graphql": "^16.6.0", "graphql-request": "^6.1.0", + "slack": "*", "utils": "*", "winston": "^3.3.3" }, diff --git a/packages/utils/__test__/createSlackPoster.test.ts b/packages/slack/__test__/createSlackPoster.test.ts similarity index 100% rename from packages/utils/__test__/createSlackPoster.test.ts rename to packages/slack/__test__/createSlackPoster.test.ts diff --git a/packages/utils/createSlackPoster.ts b/packages/slack/createSlackPoster.ts similarity index 100% rename from packages/utils/createSlackPoster.ts rename to packages/slack/createSlackPoster.ts diff --git a/packages/slack/index.ts b/packages/slack/index.ts new file mode 100644 index 0000000..fc6304a --- /dev/null +++ b/packages/slack/index.ts @@ -0,0 +1,3 @@ +export { createSlackPoster } from './createSlackPoster' +export { postSlackMessage } from './postSlackMessage' +export { sanitizeSlackMessage } from './sanitizeSlackMessage' diff --git a/packages/slack/package.json b/packages/slack/package.json new file mode 100644 index 0000000..86d41c7 --- /dev/null +++ b/packages/slack/package.json @@ -0,0 +1,14 @@ +{ + "name": "slack", + "version": "1.0.0", + "main": "index.ts", + "dependencies": { + "@slack/web-api": "^7.0.4", + "dotenv": "^16.0.3", + "utils": "*" + }, + "scripts": { + "lint": "eslint .", + "test": "vitest run" + } +} diff --git a/packages/utils/postSlackMessage.ts b/packages/slack/postSlackMessage.ts similarity index 92% rename from packages/utils/postSlackMessage.ts rename to packages/slack/postSlackMessage.ts index c815ce0..cd3c4ec 100644 --- a/packages/utils/postSlackMessage.ts +++ b/packages/slack/postSlackMessage.ts @@ -1,6 +1,6 @@ import { WebClient } from '@slack/web-api' +import { formatGitHubCIInfo } from 'utils' import { sanitizeSlackMessage } from './sanitizeSlackMessage' -import { formatGitHubCIInfo } from './githubCIUtils' export const postSlackMessage = ({ slackToken, diff --git a/packages/utils/sanitizeSlackMessage.ts b/packages/slack/sanitizeSlackMessage.ts similarity index 100% rename from packages/utils/sanitizeSlackMessage.ts rename to packages/slack/sanitizeSlackMessage.ts diff --git a/packages/slack/tsconfig.json b/packages/slack/tsconfig.json new file mode 100644 index 0000000..5df745d --- /dev/null +++ b/packages/slack/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "./dist" + }, + "include": ["./**/*.ts", "./**/*.d.ts"], + "exclude": ["node_modules", "dist/"] +} diff --git a/packages/utils/vitest.config.ts b/packages/slack/vitest.config.ts similarity index 100% rename from packages/utils/vitest.config.ts rename to packages/slack/vitest.config.ts diff --git a/packages/utils/index.ts b/packages/utils/index.ts index 3b60136..f7ff6ad 100644 --- a/packages/utils/index.ts +++ b/packages/utils/index.ts @@ -1,8 +1,7 @@ export * from './types' export * from './config' export { getExplorerUrlPrefixes } from './getExplorerUrlPrefixes' -export { postSlackMessage } from './postSlackMessage' -export { createSlackPoster } from './createSlackPoster' +export { formatGitHubCIInfo, isGitHubActions } from './githubCIUtils' export const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) diff --git a/packages/utils/package.json b/packages/utils/package.json index cde057f..4cc74c0 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -2,9 +2,7 @@ "name": "utils", "version": "1.0.0", "main": "index.ts", - "dependencies": { - "@slack/web-api": "^7.0.4" - }, + "dependencies": {}, "scripts": { "lint": "eslint ." } diff --git a/yarn.lock b/yarn.lock index c8b3bc2..dbf3ab0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1913,6 +1913,11 @@ dotenv@^10.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== +dotenv@^16.0.3: + version "16.6.1" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.6.1.tgz#773f0e69527a8315c7285d5ee73c4459d20a8020" + integrity sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow== + dotenv@^16.3.1: version "16.4.5" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.5.tgz#cdd3b3b604cb327e286b4762e13502f717cb099f" From a4b0b697b8a6f8f6b1892d13a314d8c2f9d03c84 Mon Sep 17 00:00:00 2001 From: douglance <4741454+douglance@users.noreply.github.com> Date: Thu, 15 Jan 2026 06:08:45 -0500 Subject: [PATCH 2/4] chore: rename slack package to @arbitrum-monitoring/slack --- packages/assertion-monitor/package.json | 2 +- .../assertion-monitor/reportAssertionMonitorAlertToSlack.ts | 2 +- packages/batch-poster-monitor/package.json | 2 +- packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts | 2 +- packages/retryable-monitor/handlers/slack/postSlackMessage.ts | 2 +- packages/retryable-monitor/package.json | 2 +- packages/slack/package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/assertion-monitor/package.json b/packages/assertion-monitor/package.json index fb66595..453c65d 100644 --- a/packages/assertion-monitor/package.json +++ b/packages/assertion-monitor/package.json @@ -5,7 +5,7 @@ "dependencies": { "@arbitrum/sdk": "^4.0.0", "@types/yargs": "17.0.32", - "slack": "*", + "@arbitrum-monitoring/slack": "*", "typescript": "^5.4.5", "utils": "*", "viem": "^2.7.9", diff --git a/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts b/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts index 099cf0d..56be031 100644 --- a/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts +++ b/packages/assertion-monitor/reportAssertionMonitorAlertToSlack.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'slack' +import { createSlackPoster } from '@arbitrum-monitoring/slack' export const reportAssertionMonitorErrorToSlack = createSlackPoster({ tokenEnvVar: 'ASSERTION_MONITORING_SLACK_TOKEN', diff --git a/packages/batch-poster-monitor/package.json b/packages/batch-poster-monitor/package.json index 9148c76..12155fe 100644 --- a/packages/batch-poster-monitor/package.json +++ b/packages/batch-poster-monitor/package.json @@ -12,7 +12,7 @@ "dependencies": { "@arbitrum/orbit-sdk": "^0.23.5", "abitype": "^1.0.5", - "slack": "*", + "@arbitrum-monitoring/slack": "*", "typescript": "^5.4.5", "utils": "*", "viem": "1.20.0" diff --git a/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts b/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts index 621fbf6..911db8c 100644 --- a/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts +++ b/packages/batch-poster-monitor/reportBatchPosterAlertToSlack.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'slack' +import { createSlackPoster } from '@arbitrum-monitoring/slack' export const reportBatchPosterErrorToSlack = createSlackPoster({ tokenEnvVar: 'BATCH_POSTER_MONITORING_SLACK_TOKEN', diff --git a/packages/retryable-monitor/handlers/slack/postSlackMessage.ts b/packages/retryable-monitor/handlers/slack/postSlackMessage.ts index 55578d4..9134f71 100644 --- a/packages/retryable-monitor/handlers/slack/postSlackMessage.ts +++ b/packages/retryable-monitor/handlers/slack/postSlackMessage.ts @@ -1,4 +1,4 @@ -import { createSlackPoster } from 'slack' +import { createSlackPoster } from '@arbitrum-monitoring/slack' export const postSlackMessage = createSlackPoster({ tokenEnvVar: 'RETRYABLE_MONITORING_SLACK_TOKEN', diff --git a/packages/retryable-monitor/package.json b/packages/retryable-monitor/package.json index 708a8c8..7c0401b 100644 --- a/packages/retryable-monitor/package.json +++ b/packages/retryable-monitor/package.json @@ -12,7 +12,7 @@ "ethers": "^5.5.4", "graphql": "^16.6.0", "graphql-request": "^6.1.0", - "slack": "*", + "@arbitrum-monitoring/slack": "*", "utils": "*", "winston": "^3.3.3" }, diff --git a/packages/slack/package.json b/packages/slack/package.json index 86d41c7..dcac21e 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,5 +1,5 @@ { - "name": "slack", + "name": "@arbitrum-monitoring/slack", "version": "1.0.0", "main": "index.ts", "dependencies": { From a61a34d3e815c32b3a9a81afd8cac87687cf2290 Mon Sep 17 00:00:00 2001 From: douglance <4741454+douglance@users.noreply.github.com> Date: Thu, 15 Jan 2026 06:12:11 -0500 Subject: [PATCH 3/4] refactor: move githubCIUtils to slack package --- packages/{utils => slack}/githubCIUtils.ts | 0 packages/slack/package.json | 3 +-- packages/slack/postSlackMessage.ts | 2 +- packages/utils/index.ts | 1 - 4 files changed, 2 insertions(+), 4 deletions(-) rename packages/{utils => slack}/githubCIUtils.ts (100%) diff --git a/packages/utils/githubCIUtils.ts b/packages/slack/githubCIUtils.ts similarity index 100% rename from packages/utils/githubCIUtils.ts rename to packages/slack/githubCIUtils.ts diff --git a/packages/slack/package.json b/packages/slack/package.json index dcac21e..d9275e3 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -4,8 +4,7 @@ "main": "index.ts", "dependencies": { "@slack/web-api": "^7.0.4", - "dotenv": "^16.0.3", - "utils": "*" + "dotenv": "^16.0.3" }, "scripts": { "lint": "eslint .", diff --git a/packages/slack/postSlackMessage.ts b/packages/slack/postSlackMessage.ts index cd3c4ec..9912fea 100644 --- a/packages/slack/postSlackMessage.ts +++ b/packages/slack/postSlackMessage.ts @@ -1,5 +1,5 @@ import { WebClient } from '@slack/web-api' -import { formatGitHubCIInfo } from 'utils' +import { formatGitHubCIInfo } from './githubCIUtils' import { sanitizeSlackMessage } from './sanitizeSlackMessage' export const postSlackMessage = ({ diff --git a/packages/utils/index.ts b/packages/utils/index.ts index f7ff6ad..922a531 100644 --- a/packages/utils/index.ts +++ b/packages/utils/index.ts @@ -1,7 +1,6 @@ export * from './types' export * from './config' export { getExplorerUrlPrefixes } from './getExplorerUrlPrefixes' -export { formatGitHubCIInfo, isGitHubActions } from './githubCIUtils' export const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms)) From 1ae4dafba661996571ec1f76478097d90d16a884 Mon Sep 17 00:00:00 2001 From: douglance <4741454+douglance@users.noreply.github.com> Date: Tue, 20 Jan 2026 15:33:41 -0500 Subject: [PATCH 4/4] refactor: centralize workspace dependency builds - Add build:deps script to root for building utils and slack packages - Update monitor build scripts to use yarn --cwd ../.. build:deps - Add build script and dist output paths to slack package --- package.json | 4 +++- packages/assertion-monitor/package.json | 2 +- packages/batch-poster-monitor/package.json | 2 +- packages/retryable-monitor/package.json | 2 +- packages/slack/package.json | 4 +++- 5 files changed, 9 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 5da97c1..b6b1d35 100644 --- a/package.json +++ b/package.json @@ -6,10 +6,12 @@ "private": true, "license": "Apache-2.0", "scripts": { + "build:deps": "yarn workspace utils build && yarn workspace @arbitrum-monitoring/slack build", + "build": "yarn build:deps && yarn workspaces foreach run build", "retryable-monitor": "yarn workspace retryable-monitor dev", "batch-poster-monitor": "yarn workspace batch-poster-monitor dev", "assertion-monitor": "yarn workspace assertion-monitor dev", - "test": "yarn workspace utils build && vitest" + "test": "yarn build:deps && vitest" }, "devDependencies": { "@types/node": "^20.14.10", diff --git a/packages/assertion-monitor/package.json b/packages/assertion-monitor/package.json index db491d4..7370fd2 100644 --- a/packages/assertion-monitor/package.json +++ b/packages/assertion-monitor/package.json @@ -18,7 +18,7 @@ }, "scripts": { "lint": "eslint .", - "build": "yarn workspace utils build && rm -rf ./dist && tsc", + "build": "yarn --cwd ../.. build:deps && rm -rf ./dist && tsc", "format": "prettier './**/*.{js,json,md,yml,sol,ts}' --write && yarn run lint --fix", "dev": "yarn build && node ./dist/main.js", "test": "vitest run __test__/*.test.ts", diff --git a/packages/batch-poster-monitor/package.json b/packages/batch-poster-monitor/package.json index 8bac69c..f24d9a8 100644 --- a/packages/batch-poster-monitor/package.json +++ b/packages/batch-poster-monitor/package.json @@ -4,7 +4,7 @@ "main": "index.ts", "scripts": { "lint": "eslint .", - "build": "yarn workspace utils build && rm -rf ./dist && tsc", + "build": "yarn --cwd ../.. build:deps && rm -rf ./dist && tsc", "format": "prettier './**/*.{js,json,md,yml,sol,ts}' --write && yarn run lint --fix", "dev": "yarn build && node ./dist/index.js", "test": "vitest" diff --git a/packages/retryable-monitor/package.json b/packages/retryable-monitor/package.json index ab3d9d9..bcae88e 100644 --- a/packages/retryable-monitor/package.json +++ b/packages/retryable-monitor/package.json @@ -18,7 +18,7 @@ }, "scripts": { "lint": "eslint .", - "build": "yarn workspace utils build && rm -rf ./dist && tsc", + "build": "yarn --cwd ../.. build:deps && rm -rf ./dist && tsc", "format": "prettier './**/*.{js,json,md,yml,sol,ts}' --write && yarn run lint --fix", "dev": "yarn build && node ./dist/index.js" } diff --git a/packages/slack/package.json b/packages/slack/package.json index d9275e3..4933398 100644 --- a/packages/slack/package.json +++ b/packages/slack/package.json @@ -1,12 +1,14 @@ { "name": "@arbitrum-monitoring/slack", "version": "1.0.0", - "main": "index.ts", + "main": "dist/index.js", + "types": "dist/index.d.ts", "dependencies": { "@slack/web-api": "^7.0.4", "dotenv": "^16.0.3" }, "scripts": { + "build": "tsc", "lint": "eslint .", "test": "vitest run" }