The notification infra of your business
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio · http counts 46 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
add_user_contact
-
cancel_notification
-
cancel_workflow_run
-
create_project
-
create_project_key
-
create_workflow
-
delete_dead_letter
-
delete_project
-
delete_project_key
-
delete_template
-
delete_user
-
delete_user_contact
-
get_campaign_stats
-
get_dead_letters
-
get_delivery_logs
-
get_notification
-
get_system_health
-
get_system_metrics
-
get_template
-
get_user
-
get_user_contacts
-
get_user_preferences
-
get_workflow_run
-
ingest_event
-
list_campaigns
-
list_project_keys
-
list_projects
-
list_scheduled
-
list_segments
-
list_suppressions
-
list_templates
-
list_users
-
list_workflows
-
preview_template
-
render_template
-
replay_dead_letter
-
send_campaign
-
send_notification
-
suppress_address
-
trigger_workflow
-
unsuppress_address
-
update_project
-
update_user
-
update_user_preferences
-
upsert_template
-
upsert_user
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 1195a3b · analyzer v33 · 1w ago
skills & prompt files 2
- agent-rules devkitshq-notifkit-1195a3b/.agents/AGENTS.md
- agent-rules devkitshq-notifkit-1195a3b/dashboard/AGENTS.md
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 141
filesystem 1
- fs devkitshq-notifkit-1195a3b/src/db/index.ts :57
import fs from "fs";
shell / exec 2
- shell (weak) devkitshq-notifkit-1195a3b/tests/chaos/crash.test.ts :4
import type { ChildProcess } from "node:child_process"; - shell (weak) devkitshq-notifkit-1195a3b/tests/chaos/recovery.test.ts :120
const { execSync } = await import("node:child_process");
network 18
- net devkitshq-notifkit-1195a3b/dashboard/src/app/analytics/page.tsx :30
const res = await fetch(`${apiUrl}/v1/system/metrics`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/dlq/page.tsx :38
const res = await fetch(`${apiUrl}/v1/dlq`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/projects/page.tsx :38
const res = await fetch(`${apiUrl}/v1/projects`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/scheduled/page.tsx :35
const res = await fetch(`${apiUrl}/v1/notifications/scheduled`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/system/page.tsx :46
const res = await fetch(`${apiUrl}/v1/system/health`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/templates/page.tsx :40
const res = await fetch(`${apiUrl}/v1/templates`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/users/page.tsx :45
const res = await fetch(`${apiUrl}/v1/users`, { - net devkitshq-notifkit-1195a3b/dashboard/src/app/workflows/page.tsx :54
const res = await fetch(`${apiUrl}/v1/workflows`, { - net devkitshq-notifkit-1195a3b/dashboard/src/components/DashboardHeader.tsx :17
const res = await fetch(`${apiUrl}/v1/system/metrics`, { - net devkitshq-notifkit-1195a3b/dashboard/src/components/LogsTable.tsx :70
const res = await fetch(`${apiUrl}/v1/notifications/logs?${query.toString()}`, { - net devkitshq-notifkit-1195a3b/dashboard/src/hooks/useProjectKey.tsx :26
fetch(`${apiUrl}/v1/projects`, { headers: { Authorization: `Bearer ${adminKey}` } }) - net (weak) devkitshq-notifkit-1195a3b/examples/basic-usage/index.js :28
const templateRes = await fetch(`${API_BASE}/templates`, { - net devkitshq-notifkit-1195a3b/packages/mcp/src/client.ts :57
const res = await fetch(url, { - net devkitshq-notifkit-1195a3b/src/client.ts :37
const res = await fetch(url, { - net devkitshq-notifkit-1195a3b/src/services/api/handlers.ts :2
import type { IncomingMessage, ServerResponse } from "node:http"; - net devkitshq-notifkit-1195a3b/src/services/api/http.ts :1
import type { IncomingMessage, ServerResponse } from "node:http"; - net devkitshq-notifkit-1195a3b/src/services/api/main.ts :1
import { createServer, type IncomingMessage, type ServerResponse } from "node:http"; - net devkitshq-notifkit-1195a3b/src/services/api/router.ts :1
import type { IncomingMessage, ServerResponse } from "node:http";
secrets 7
- secrets (weak) devkitshq-notifkit-1195a3b/examples/basic-usage/index.js :14
const API_KEY = process.env.ADMIN_API_KEY || 'my_super_secret_admin_key'; - secrets (weak) devkitshq-notifkit-1195a3b/examples/load-test/index.js :8
const apiKey = process.env.ADMIN_API_KEY || 'your_admin_api_key'; - secrets (weak) devkitshq-notifkit-1195a3b/examples/scheduled-notifications/index.js :9
apiKey: process.env.ADMIN_API_KEY || 'your_admin_api_key', - secrets (weak) devkitshq-notifkit-1195a3b/examples/workflows/index.js :9
apiKey: process.env.ADMIN_API_KEY || 'your_admin_api_key', - secrets devkitshq-notifkit-1195a3b/packages/mcp/src/index.ts :52
const apiKey = process.env["NOTIFKIT_API_KEY"]; - secrets (weak) devkitshq-notifkit-1195a3b/tests/api-suppressions.test.ts :66
originalSecret = process.env.UNSUBSCRIBE_SECRET; - secrets (weak) devkitshq-notifkit-1195a3b/tests/api.integration.test.ts :24
process.env.ADMIN_API_KEY = adminApiKey;
database 5
- db devkitshq-notifkit-1195a3b/src/redis/index.ts :1
import { Redis, type RedisOptions } from "ioredis"; - db devkitshq-notifkit-1195a3b/src/services/delivery/throttle.ts :1
import type { Redis } from "ioredis"; - db (weak) devkitshq-notifkit-1195a3b/tests/chaos/crash.test.ts :10
import { Redis } from "ioredis"; - db (weak) devkitshq-notifkit-1195a3b/tests/chaos/load.test.ts :8
import { Redis } from "ioredis"; - db (weak) devkitshq-notifkit-1195a3b/tests/chaos/recovery.test.ts :8
import { Redis } from "ioredis";
tool registrations 46
- send_notification devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :126
- send_campaign devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :207
- list_campaigns devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :321
- get_campaign_stats devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :372
- list_suppressions devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :391
- suppress_address devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :416
- unsuppress_address devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :437
- list_segments devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :466
- list_scheduled devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :478
- get_delivery_logs devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :507
- get_notification devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :558
- cancel_notification devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :576
- list_templates devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :601
- get_template devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :627
- upsert_template devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :639
- delete_template devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :672
- preview_template devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :740
- render_template devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :772
- list_users devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :801
- get_user devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :841
- upsert_user devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :854
- update_user devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :913
- delete_user devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :970
- get_user_contacts devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :992
- add_user_contact devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1005
- delete_user_contact devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1025
- get_user_preferences devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1051
- update_user_preferences devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1065
- create_workflow devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1096
- list_workflows devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1142
- trigger_workflow devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1167
- get_workflow_run devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1189
- cancel_workflow_run devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1204
- ingest_event devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1226
- get_system_health devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1247
- get_dead_letters devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1260
- replay_dead_letter devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1273
- delete_dead_letter devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1293
- get_system_metrics devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1314
- list_projects devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1327
- create_project devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1337
- update_project devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1351
- delete_project devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1373
- list_project_keys devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1394
- create_project_key devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1407
- delete_project_key devkitshq-notifkit-1195a3b/packages/mcp/src/tools.ts :1428
install hooks 2
- prepare devkitshq-notifkit-1195a3b/package.json :60
husky - prepublishOnly devkitshq-notifkit-1195a3b/package.json :61
npm run typecheck && npm run build
declared dependencies 29
- ai@^7.0.37
- dotenv@^16.4.5
- drizzle-orm@^0.45.2
- drizzle-zod@^0.8.3
- ioredis@^5.4.1
- pino@^9.2.0
- pino-pretty@^11.0.0
- postgres@^3.4.4
- prom-client@^15.1.3
- zod@^3.23.8
- @commitlint/cli@^19.3.0
- @commitlint/config-conventional@^19.2.2
- @testcontainers/postgresql@^12.0.4
- @testcontainers/redis@^12.0.4
- @types/node@^22.0.0
- @types/supertest@^7.2.1
- @typescript-eslint/eslint-plugin@^8.0.0
- @typescript-eslint/parser@^8.0.0
- @vitest/coverage-v8@^2.0.0
- drizzle-kit@^0.31.10
- eslint@^9.0.0
- husky@^9.0.11
- lint-staged@^15.2.5
- prettier@^3.3.0
- supertest@^7.2.2
- testcontainers@^12.0.4
- tsdown@^0.22.14
- typescript@^5.8.3
- vitest@^2.0.0