pi-harness-runtime 1.1.160 → 1.1.162
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/harness/telegram-auth.ts +150 -0
- package/harness/telegram-content-filter.ts +223 -0
- package/package.json +1 -1
- package/packages/a2a-adapter/package.json +1 -1
- package/packages/agent-policy/package.json +1 -1
- package/packages/architecture-generator/package.json +1 -1
- package/packages/auth/package.json +1 -1
- package/packages/autonomous-refactor/package.json +1 -1
- package/packages/autonomous-runtime/package.json +1 -1
- package/packages/cache-strategy/package.json +1 -1
- package/packages/capability-registry/package.json +1 -1
- package/packages/checkpoint/package.json +1 -1
- package/packages/cli-plugin-sdk/package.json +1 -1
- package/packages/clipboard/package.json +1 -1
- package/packages/clipboard-plugin/package.json +1 -1
- package/packages/code-generation/package.json +1 -1
- package/packages/code-review/package.json +1 -1
- package/packages/codex-adapter/package.json +1 -1
- package/packages/codex-watcher/package.json +1 -1
- package/packages/config-capture/package.json +1 -1
- package/packages/context-compiler/package.json +1 -1
- package/packages/context-discovery/package.json +1 -1
- package/packages/context-manager/package.json +1 -1
- package/packages/cookie-sanitizer/package.json +1 -1
- package/packages/cost-optimizer/package.json +1 -1
- package/packages/dependency-analyzer/package.json +1 -1
- package/packages/django-plugin/package.json +1 -1
- package/packages/doc-generator/package.json +1 -1
- package/packages/evaluation-engine/package.json +1 -1
- package/packages/evaluation-runner/package.json +1 -1
- package/packages/event-bus/package.json +1 -1
- package/packages/event-store/package.json +1 -1
- package/packages/experience-replay/package.json +1 -1
- package/packages/feedback-collector/package.json +1 -1
- package/packages/file-copy-helper/package.json +1 -1
- package/packages/framework-detector/package.json +1 -1
- package/packages/framework-plugin-sdk/package.json +1 -1
- package/packages/frappe-plugin/package.json +1 -1
- package/packages/generic-web-plugin/package.json +1 -1
- package/packages/health-monitor/package.json +1 -1
- package/packages/intent-analyzer/package.json +1 -1
- package/packages/jev-judge/package.json +1 -1
- package/packages/knowledge-graph/package.json +1 -1
- package/packages/knowledge-retrieval/package.json +1 -1
- package/packages/laravel-plugin/package.json +1 -1
- package/packages/learning-engine/package.json +1 -1
- package/packages/mcp-adapter/package.json +1 -1
- package/packages/memory-engine/package.json +1 -1
- package/packages/milestone-manager/package.json +1 -1
- package/packages/model-registry/package.json +1 -1
- package/packages/nextjs-plugin/package.json +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.d.ts.map +1 -1
- package/packages/notification/dist/adapters/telegram-adapter.js +20 -9
- package/packages/notification/dist/adapters/telegram-adapter.js.map +1 -1
- package/packages/notification/dist/index.d.ts +1 -0
- package/packages/notification/dist/index.d.ts.map +1 -1
- package/packages/notification/dist/index.js +1 -0
- package/packages/notification/dist/index.js.map +1 -1
- package/packages/notification/dist/mask-secrets.d.ts +31 -0
- package/packages/notification/dist/mask-secrets.d.ts.map +1 -0
- package/packages/notification/dist/mask-secrets.js +141 -0
- package/packages/notification/dist/mask-secrets.js.map +1 -0
- package/packages/notification/package.json +1 -1
- package/packages/notification/src/adapters/telegram-adapter.ts +22 -9
- package/packages/notification/src/index.ts +7 -0
- package/packages/notification/src/mask-secrets.ts +160 -0
- package/packages/observability/package.json +1 -1
- package/packages/okf-indexer/package.json +1 -1
- package/packages/paperclip-integration/package.json +1 -1
- package/packages/performance-optimizer/package.json +1 -1
- package/packages/privilege-broker/package.json +1 -1
- package/packages/project-analyzer/package.json +1 -1
- package/packages/project-bootstrap/package.json +1 -1
- package/packages/projection-engine/package.json +1 -1
- package/packages/prompt-compiler/package.json +1 -1
- package/packages/prompt-versioning/package.json +1 -1
- package/packages/provider-adapter-sdk/package.json +1 -1
- package/packages/provider-router/package.json +1 -1
- package/packages/provider-selector/package.json +1 -1
- package/packages/providers/package.json +1 -1
- package/packages/qdrant-skills/package.json +1 -1
- package/packages/quota-manager/package.json +1 -1
- package/packages/rate-limiter/package.json +1 -1
- package/packages/react-vite-plugin/package.json +1 -1
- package/packages/release-manager/package.json +1 -1
- package/packages/requirement-compiler/package.json +1 -1
- package/packages/runtime/package.json +1 -1
- package/packages/scheduler/package.json +1 -1
- package/packages/scheduler-adapter/package.json +1 -1
- package/packages/session/package.json +1 -1
- package/packages/session-api/package.json +1 -1
- package/packages/session-export/package.json +1 -1
- package/packages/shared-context/package.json +1 -1
- package/packages/skill-mcp-client/package.json +1 -1
- package/packages/skill-registry/package.json +1 -1
- package/packages/skills/package.json +1 -1
- package/packages/sprint-planner/package.json +1 -1
- package/packages/subscription-engine/package.json +1 -1
- package/packages/task-compiler/package.json +1 -1
- package/packages/tencentdb-memory/package.json +1 -1
- package/packages/tencentdb-sync/package.json +1 -1
- package/packages/test-data-generator/package.json +1 -1
- package/packages/test-generator/package.json +1 -1
- package/packages/todo-bd-sync/package.json +1 -1
- package/packages/token-estimation/package.json +1 -1
- package/packages/token-optimizer/package.json +1 -1
- package/packages/trajectory/package.json +1 -1
- package/packages/tui/package.json +1 -1
- package/packages/types/package.json +1 -1
- package/packages/workflow-events/package.json +1 -1
- package/packages/workspace-scanner/package.json +1 -1
- package/packages/worktree/package.json +1 -1
- package/packages/write-review/package.json +1 -1
- package/scripts/telegram-webhook-server.ts +85 -6
- package/scripts/tsconfig.json +9 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAEvB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAEX,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,EAEvB,cAAc,EACd,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,qBAAa,eAAgB,SAAQ,kBAAkB;IACvD,QAAQ,CAAC,EAAE,cAAc;IACzB,QAAQ,CAAC,IAAI,cAAc;IAC3B,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,gBAAgB,CAAsC;IAC9D,OAAO,CAAC,cAAc,CAAqB;IAE3C,YAAY,MAAM,EAAE,cAAc,EAEjC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI,CAEzD;IAED;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAErC;IAED,IAAI,WAAW,IAAI,MAAM,GAAG,SAAS,CAEpC;IAEM,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC,CAenC;IAED;;OAEG;IACG,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA2CpE;IAED;;;OAGG;IACG,YAAY,CACjB,OAAO,EAAE,mBAAmB,EAC5B,WAAW,SAA8B,GACvC,OAAO,CAAC,kBAAkB,CAAC,CA2D7B;IAED;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkB3B;;OAEG;IACG,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAyBxE;IAED;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;YACW,mBAAmB;IAgBjC;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA0BvD;IAED;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAY9D;IAED,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,QAAQ;CAiBhB"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
8
8
|
import { join } from "node:path";
|
|
9
9
|
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
10
|
+
import { maskString } from "../mask-secrets.js";
|
|
10
11
|
export class TelegramAdapter extends BaseChannelAdapter {
|
|
11
12
|
id = "telegram";
|
|
12
13
|
type = "telegram";
|
|
@@ -270,19 +271,29 @@ export class TelegramAdapter extends BaseChannelAdapter {
|
|
|
270
271
|
}
|
|
271
272
|
}
|
|
272
273
|
formatMessage(payload) {
|
|
274
|
+
// Mask all fields before rendering - defense in depth
|
|
275
|
+
const maskedTitle = maskString(payload.title);
|
|
276
|
+
const maskedMessage = maskString(payload.message);
|
|
277
|
+
const taskTitle = payload.details?.taskTitle;
|
|
278
|
+
const jobId = payload.details?.jobId;
|
|
279
|
+
const errorVal = payload.details?.error;
|
|
280
|
+
const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
|
|
281
|
+
const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
|
|
282
|
+
const maskedError = typeof errorVal === "string" ? maskString(errorVal) : undefined;
|
|
273
283
|
const emoji = this.getEmoji(payload.event);
|
|
274
|
-
const title = `${emoji} ${
|
|
275
|
-
const lines = [title, "",
|
|
276
|
-
if (
|
|
277
|
-
lines.push("", `Task: ${
|
|
284
|
+
const title = `${emoji} ${maskedTitle}`;
|
|
285
|
+
const lines = [title, "", maskedMessage];
|
|
286
|
+
if (maskedTaskTitle) {
|
|
287
|
+
lines.push("", `Task: ${maskedTaskTitle}`);
|
|
278
288
|
}
|
|
279
|
-
if (
|
|
280
|
-
lines.push(`Job: ${
|
|
289
|
+
if (maskedJobId) {
|
|
290
|
+
lines.push(`Job: ${maskedJobId}`);
|
|
281
291
|
}
|
|
282
|
-
if (
|
|
283
|
-
lines.push("", `Error: ${
|
|
292
|
+
if (maskedError) {
|
|
293
|
+
lines.push("", `Error: ${maskedError}`);
|
|
284
294
|
}
|
|
285
|
-
|
|
295
|
+
// Final mask pass on the complete rendered string
|
|
296
|
+
return maskString(lines.filter(Boolean).join("\n"));
|
|
286
297
|
}
|
|
287
298
|
getEmoji(event) {
|
|
288
299
|
const map = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram-adapter.js","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8BAA8B;AAE9B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAUjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram-adapter.js","sourceRoot":"","sources":["../../src/adapters/telegram-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,4 +9,5 @@ export * from "./types.js";
|
|
|
9
9
|
export * from "./telegram-webhook-handler.js";
|
|
10
10
|
export { LineAdapter } from "./adapters/line-adapter.js";
|
|
11
11
|
export { TelegramAdapter } from "./adapters/telegram-adapter.js";
|
|
12
|
+
export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
|
|
12
13
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC"}
|
|
@@ -9,4 +9,5 @@ export * from "./types.js";
|
|
|
9
9
|
export * from "./telegram-webhook-handler.js";
|
|
10
10
|
export { LineAdapter } from "./adapters/line-adapter.js";
|
|
11
11
|
export { TelegramAdapter } from "./adapters/telegram-adapter.js";
|
|
12
|
+
export { maskString, maskValue, maskObject, maskPayload, isSensitiveField, } from "./mask-secrets.js";
|
|
12
13
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,YAAY,CAAC;AAC3B,cAAc,+BAA+B,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EACN,UAAU,EACV,SAAS,EACT,UAAU,EACV,WAAW,EACX,gBAAgB,GAChB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Masking Utility
|
|
3
|
+
*
|
|
4
|
+
* Masks sensitive values in strings before sending to Telegram/other channels.
|
|
5
|
+
* Shows first 4 + last 4 characters for identification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Mask a value showing first and last characters
|
|
9
|
+
*/
|
|
10
|
+
export declare function maskValue(value: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Check if a field name is sensitive
|
|
13
|
+
*/
|
|
14
|
+
export declare function isSensitiveField(fieldName: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Mask sensitive patterns in a string
|
|
17
|
+
*/
|
|
18
|
+
export declare function maskString(input: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Mask JSON object fields that are sensitive
|
|
21
|
+
*/
|
|
22
|
+
export declare function maskObject(obj: unknown, depth?: number): Record<string, unknown> | unknown[] | string | number | boolean | null;
|
|
23
|
+
/**
|
|
24
|
+
* Mask a message/notification payload
|
|
25
|
+
*/
|
|
26
|
+
export declare function maskPayload(obj: unknown): Record<string, unknown> | unknown[] | string | number | boolean | null;
|
|
27
|
+
/**
|
|
28
|
+
* Format a value for display, masking if sensitive
|
|
29
|
+
*/
|
|
30
|
+
export declare function formatValue(key: string, value: unknown): string;
|
|
31
|
+
//# sourceMappingURL=mask-secrets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask-secrets.d.ts","sourceRoot":"","sources":["../src/mask-secrets.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA0CH;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAY/C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAU3D;AAuBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,GAAE,MAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAgClI;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAEhH;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAK/D"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Masking Utility
|
|
3
|
+
*
|
|
4
|
+
* Masks sensitive values in strings before sending to Telegram/other channels.
|
|
5
|
+
* Shows first 4 + last 4 characters for identification.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Patterns that match sensitive values
|
|
9
|
+
*/
|
|
10
|
+
const SENSITIVE_PATTERNS = [
|
|
11
|
+
// Telegram bot tokens: format is \d+:[-A-Za-z0-9_]{35,}
|
|
12
|
+
/\d+:[-A-Za-z0-9_]{35,}/g,
|
|
13
|
+
// Generic API keys, tokens, secrets
|
|
14
|
+
/[a-zA-Z0-9_-]{32,}/g, // Long alphanumeric strings (likely keys)
|
|
15
|
+
/[A-Fa-f0-9]{32,}/g, // Hex strings (likely hashes/keys)
|
|
16
|
+
/sk-[a-zA-Z0-9]{20,}/g, // OpenAI-style keys
|
|
17
|
+
/Bearer\s+[a-zA-Z0-9_-]{20,}/gi, // Bearer tokens
|
|
18
|
+
/token[=:]\s*[a-zA-Z0-9_-]{20,}/gi, // token=xxx patterns
|
|
19
|
+
/secret[=:]\s*[a-zA-Z0-9_-]{20,}/gi, // secret=xxx patterns
|
|
20
|
+
/key[=:]\s*[a-zA-Z0-9_-]{20,}/gi, // key=xxx patterns
|
|
21
|
+
/password[=:]\s*[^\s,}]+/gi, // password=xxx patterns
|
|
22
|
+
/client[_-]?secret[=:]\s*[^\s,}]+/gi, // client_secret=xxx
|
|
23
|
+
/client[_-]?id[=:]\s*[a-zA-Z0-9_-]{20,}/gi, // client_id=xxx
|
|
24
|
+
/infisical[_-]?(client[_-])?(secret|id)[=:]\s*[a-zA-Z0-9_-]{20,}/gi,
|
|
25
|
+
];
|
|
26
|
+
// Specific Infisical field names to mask
|
|
27
|
+
const INFISICAL_FIELDS = [
|
|
28
|
+
"infisical_client_secret",
|
|
29
|
+
"infisical_client_id",
|
|
30
|
+
"infisical_project_id",
|
|
31
|
+
"INFISICAL_CLIENT_SECRET",
|
|
32
|
+
"INFISICAL_CLIENT_ID",
|
|
33
|
+
"INFISICAL_PROJECT_ID",
|
|
34
|
+
];
|
|
35
|
+
// General sensitive field patterns
|
|
36
|
+
const SENSITIVE_FIELD_PATTERNS = [
|
|
37
|
+
/_api_key$/i,
|
|
38
|
+
/_secret$/i,
|
|
39
|
+
/_token$/i,
|
|
40
|
+
/_password$/i,
|
|
41
|
+
/_credential$/i,
|
|
42
|
+
/_auth$/i,
|
|
43
|
+
];
|
|
44
|
+
/**
|
|
45
|
+
* Mask a value showing first and last characters
|
|
46
|
+
*/
|
|
47
|
+
export function maskValue(value) {
|
|
48
|
+
// Telegram bot tokens use the format \d+:[-A-Za-z0-9_]{35,}
|
|
49
|
+
// Mask these completely - no prefix/suffix preserved
|
|
50
|
+
if (/^\d+:[-A-Za-z0-9_]+$/.test(value)) {
|
|
51
|
+
return "[REDACTED]";
|
|
52
|
+
}
|
|
53
|
+
// For other values, show first 4 + last 4
|
|
54
|
+
if (!value || value.length <= 8) {
|
|
55
|
+
return "****";
|
|
56
|
+
}
|
|
57
|
+
return `${value.slice(0, 4)}...${value.slice(-4)}`;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Check if a field name is sensitive
|
|
61
|
+
*/
|
|
62
|
+
export function isSensitiveField(fieldName) {
|
|
63
|
+
const lower = fieldName.toLowerCase();
|
|
64
|
+
// Check specific Infisical fields
|
|
65
|
+
if (INFISICAL_FIELDS.some(f => lower === f.toLowerCase())) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
// Check general patterns
|
|
69
|
+
return SENSITIVE_FIELD_PATTERNS.some(pattern => pattern.test(lower));
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Mask a string value
|
|
73
|
+
*/
|
|
74
|
+
function maskStringValue(input) {
|
|
75
|
+
let result = input;
|
|
76
|
+
// First, mask any field=value patterns for sensitive fields
|
|
77
|
+
for (const field of INFISICAL_FIELDS) {
|
|
78
|
+
const escapedField = field.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
79
|
+
const pattern = new RegExp(`(${escapedField})\\s*[=:]\\s*([a-zA-Z0-9_-]+)`, "gi");
|
|
80
|
+
result = result.replace(pattern, (_match, _field, value) => `${field}: ${maskValue(value)}`);
|
|
81
|
+
}
|
|
82
|
+
// Then mask generic patterns
|
|
83
|
+
for (const pattern of SENSITIVE_PATTERNS) {
|
|
84
|
+
result = result.replace(pattern, (match) => maskValue(match));
|
|
85
|
+
}
|
|
86
|
+
return result;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Mask sensitive patterns in a string
|
|
90
|
+
*/
|
|
91
|
+
export function maskString(input) {
|
|
92
|
+
return maskStringValue(input);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Mask JSON object fields that are sensitive
|
|
96
|
+
*/
|
|
97
|
+
export function maskObject(obj, depth = 0) {
|
|
98
|
+
// Prevent infinite recursion
|
|
99
|
+
if (depth > 10 || obj === null || obj === undefined) {
|
|
100
|
+
return obj;
|
|
101
|
+
}
|
|
102
|
+
if (typeof obj === "string") {
|
|
103
|
+
return maskStringValue(obj);
|
|
104
|
+
}
|
|
105
|
+
if (typeof obj === "number" || typeof obj === "boolean") {
|
|
106
|
+
return obj;
|
|
107
|
+
}
|
|
108
|
+
if (Array.isArray(obj)) {
|
|
109
|
+
return obj.map(item => maskObject(item, depth + 1));
|
|
110
|
+
}
|
|
111
|
+
if (typeof obj === "object") {
|
|
112
|
+
const result = {};
|
|
113
|
+
for (const [key, value] of Object.entries(obj)) {
|
|
114
|
+
if (isSensitiveField(key)) {
|
|
115
|
+
result[key] = typeof value === "string" ? maskValue(value) : value;
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
result[key] = maskObject(value, depth + 1);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return result;
|
|
122
|
+
}
|
|
123
|
+
// SAFETY: obj is one of the primitive types at this point
|
|
124
|
+
return obj;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Mask a message/notification payload
|
|
128
|
+
*/
|
|
129
|
+
export function maskPayload(obj) {
|
|
130
|
+
return maskObject(obj);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Format a value for display, masking if sensitive
|
|
134
|
+
*/
|
|
135
|
+
export function formatValue(key, value) {
|
|
136
|
+
if (isSensitiveField(key) && typeof value === "string") {
|
|
137
|
+
return `${key}: ${maskValue(value)}`;
|
|
138
|
+
}
|
|
139
|
+
return `${key}: ${value}`;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=mask-secrets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask-secrets.js","sourceRoot":"","sources":["../src/mask-secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ import type {
|
|
|
18
18
|
TelegramConfig,
|
|
19
19
|
} from "../types.js";
|
|
20
20
|
import { BaseChannelAdapter } from "../base-adapter.js";
|
|
21
|
+
import { maskString } from "../mask-secrets.js";
|
|
21
22
|
|
|
22
23
|
export class TelegramAdapter extends BaseChannelAdapter {
|
|
23
24
|
readonly id = "telegram";
|
|
@@ -334,21 +335,33 @@ return this._botUsername;
|
|
|
334
335
|
}
|
|
335
336
|
|
|
336
337
|
private formatMessage(payload: NotificationPayload): string {
|
|
338
|
+
// Mask all fields before rendering - defense in depth
|
|
339
|
+
const maskedTitle = maskString(payload.title);
|
|
340
|
+
const maskedMessage = maskString(payload.message);
|
|
341
|
+
const taskTitle = payload.details?.taskTitle;
|
|
342
|
+
const jobId = payload.details?.jobId;
|
|
343
|
+
const errorVal = payload.details?.error;
|
|
344
|
+
|
|
345
|
+
const maskedTaskTitle = typeof taskTitle === "string" ? maskString(taskTitle) : undefined;
|
|
346
|
+
const maskedJobId = typeof jobId === "string" ? maskString(jobId) : undefined;
|
|
347
|
+
const maskedError = typeof errorVal === "string" ? maskString(errorVal) : undefined;
|
|
348
|
+
|
|
337
349
|
const emoji = this.getEmoji(payload.event);
|
|
338
|
-
const title = `${emoji} ${
|
|
339
|
-
const lines = [title, "",
|
|
350
|
+
const title = `${emoji} ${maskedTitle}`;
|
|
351
|
+
const lines = [title, "", maskedMessage];
|
|
340
352
|
|
|
341
|
-
if (
|
|
342
|
-
lines.push("", `Task: ${
|
|
353
|
+
if (maskedTaskTitle) {
|
|
354
|
+
lines.push("", `Task: ${maskedTaskTitle}`);
|
|
343
355
|
}
|
|
344
|
-
if (
|
|
345
|
-
lines.push(`Job: ${
|
|
356
|
+
if (maskedJobId) {
|
|
357
|
+
lines.push(`Job: ${maskedJobId}`);
|
|
346
358
|
}
|
|
347
|
-
if (
|
|
348
|
-
lines.push("", `Error: ${
|
|
359
|
+
if (maskedError) {
|
|
360
|
+
lines.push("", `Error: ${maskedError}`);
|
|
349
361
|
}
|
|
350
362
|
|
|
351
|
-
|
|
363
|
+
// Final mask pass on the complete rendered string
|
|
364
|
+
return maskString(lines.filter(Boolean).join("\n"));
|
|
352
365
|
}
|
|
353
366
|
|
|
354
367
|
private getEmoji(event: NotificationPayload["event"]): string {
|
|
@@ -10,3 +10,10 @@ export * from "./types.js";
|
|
|
10
10
|
export * from "./telegram-webhook-handler.js";
|
|
11
11
|
export { LineAdapter } from "./adapters/line-adapter.js";
|
|
12
12
|
export { TelegramAdapter } from "./adapters/telegram-adapter.js";
|
|
13
|
+
export {
|
|
14
|
+
maskString,
|
|
15
|
+
maskValue,
|
|
16
|
+
maskObject,
|
|
17
|
+
maskPayload,
|
|
18
|
+
isSensitiveField,
|
|
19
|
+
} from "./mask-secrets.js";
|