@weave_protocol/mund 0.1.0

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.
Files changed (98) hide show
  1. package/dist/analyzers/code-analyzer.d.ts +24 -0
  2. package/dist/analyzers/code-analyzer.d.ts.map +1 -0
  3. package/dist/analyzers/code-analyzer.js +73 -0
  4. package/dist/analyzers/code-analyzer.js.map +1 -0
  5. package/dist/analyzers/exfiltration-detector.d.ts +40 -0
  6. package/dist/analyzers/exfiltration-detector.d.ts.map +1 -0
  7. package/dist/analyzers/exfiltration-detector.js +220 -0
  8. package/dist/analyzers/exfiltration-detector.js.map +1 -0
  9. package/dist/analyzers/index.d.ts +26 -0
  10. package/dist/analyzers/index.d.ts.map +1 -0
  11. package/dist/analyzers/index.js +61 -0
  12. package/dist/analyzers/index.js.map +1 -0
  13. package/dist/analyzers/injection-detector.d.ts +36 -0
  14. package/dist/analyzers/injection-detector.d.ts.map +1 -0
  15. package/dist/analyzers/injection-detector.js +165 -0
  16. package/dist/analyzers/injection-detector.js.map +1 -0
  17. package/dist/analyzers/pii-detector.d.ts +44 -0
  18. package/dist/analyzers/pii-detector.d.ts.map +1 -0
  19. package/dist/analyzers/pii-detector.js +190 -0
  20. package/dist/analyzers/pii-detector.js.map +1 -0
  21. package/dist/analyzers/secret-scanner.d.ts +32 -0
  22. package/dist/analyzers/secret-scanner.d.ts.map +1 -0
  23. package/dist/analyzers/secret-scanner.js +119 -0
  24. package/dist/analyzers/secret-scanner.js.map +1 -0
  25. package/dist/constants.d.ts +18 -0
  26. package/dist/constants.d.ts.map +1 -0
  27. package/dist/constants.js +580 -0
  28. package/dist/constants.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +242 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/notifications/email.d.ts +18 -0
  34. package/dist/notifications/email.d.ts.map +1 -0
  35. package/dist/notifications/email.js +192 -0
  36. package/dist/notifications/email.js.map +1 -0
  37. package/dist/notifications/index.d.ts +51 -0
  38. package/dist/notifications/index.d.ts.map +1 -0
  39. package/dist/notifications/index.js +107 -0
  40. package/dist/notifications/index.js.map +1 -0
  41. package/dist/notifications/slack.d.ts +17 -0
  42. package/dist/notifications/slack.d.ts.map +1 -0
  43. package/dist/notifications/slack.js +128 -0
  44. package/dist/notifications/slack.js.map +1 -0
  45. package/dist/notifications/teams.d.ts +17 -0
  46. package/dist/notifications/teams.d.ts.map +1 -0
  47. package/dist/notifications/teams.js +136 -0
  48. package/dist/notifications/teams.js.map +1 -0
  49. package/dist/notifications/webhook.d.ts +15 -0
  50. package/dist/notifications/webhook.d.ts.map +1 -0
  51. package/dist/notifications/webhook.js +67 -0
  52. package/dist/notifications/webhook.js.map +1 -0
  53. package/dist/storage/index.d.ts +11 -0
  54. package/dist/storage/index.d.ts.map +1 -0
  55. package/dist/storage/index.js +26 -0
  56. package/dist/storage/index.js.map +1 -0
  57. package/dist/storage/memory.d.ts +35 -0
  58. package/dist/storage/memory.d.ts.map +1 -0
  59. package/dist/storage/memory.js +144 -0
  60. package/dist/storage/memory.js.map +1 -0
  61. package/dist/tools/configuration.d.ts +8 -0
  62. package/dist/tools/configuration.d.ts.map +1 -0
  63. package/dist/tools/configuration.js +399 -0
  64. package/dist/tools/configuration.js.map +1 -0
  65. package/dist/tools/index.d.ts +15 -0
  66. package/dist/tools/index.d.ts.map +1 -0
  67. package/dist/tools/index.js +16 -0
  68. package/dist/tools/index.js.map +1 -0
  69. package/dist/tools/monitoring.d.ts +10 -0
  70. package/dist/tools/monitoring.d.ts.map +1 -0
  71. package/dist/tools/monitoring.js +476 -0
  72. package/dist/tools/monitoring.js.map +1 -0
  73. package/dist/types.d.ts +207 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +6 -0
  76. package/dist/types.js.map +1 -0
  77. package/package.json +62 -0
  78. package/rules/default.yaml +189 -0
  79. package/src/analyzers/code-analyzer.ts +88 -0
  80. package/src/analyzers/exfiltration-detector.ts +257 -0
  81. package/src/analyzers/index.ts +74 -0
  82. package/src/analyzers/injection-detector.ts +191 -0
  83. package/src/analyzers/pii-detector.ts +220 -0
  84. package/src/analyzers/secret-scanner.ts +142 -0
  85. package/src/constants.ts +603 -0
  86. package/src/index.ts +285 -0
  87. package/src/notifications/email.ts +211 -0
  88. package/src/notifications/index.ts +136 -0
  89. package/src/notifications/slack.ts +170 -0
  90. package/src/notifications/teams.ts +200 -0
  91. package/src/notifications/webhook.ts +80 -0
  92. package/src/storage/index.ts +29 -0
  93. package/src/storage/memory.ts +181 -0
  94. package/src/tools/configuration.ts +478 -0
  95. package/src/tools/index.ts +29 -0
  96. package/src/tools/monitoring.ts +559 -0
  97. package/src/types.ts +300 -0
  98. package/tsconfig.json +24 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../src/notifications/slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AAyBzF,qBAAa,aAAc,YAAW,SAAS;IAC7C,IAAI,SAAmB;IACvB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAIzB,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,OAAO,CAAC,aAAa;IAwErB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;CAMzB;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Slack Notifier - Send alerts to Slack channels
4
+ */
5
+ export class SlackNotifier {
6
+ name = 'SlackNotifier';
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async send(payload) {
12
+ const { event } = payload;
13
+ // Check minimum severity
14
+ if (this.config.min_severity && !this.meetsMinSeverity(event.severity, this.config.min_severity)) {
15
+ return true; // Successfully skipped
16
+ }
17
+ const message = this.formatMessage(payload);
18
+ try {
19
+ const response = await fetch(this.config.webhook_url, {
20
+ method: 'POST',
21
+ headers: { 'Content-Type': 'application/json' },
22
+ body: JSON.stringify(message)
23
+ });
24
+ if (!response.ok) {
25
+ console.error(`Slack notification failed: ${response.status} ${response.statusText}`);
26
+ return false;
27
+ }
28
+ return true;
29
+ }
30
+ catch (error) {
31
+ console.error('Failed to send Slack notification:', error);
32
+ return false;
33
+ }
34
+ }
35
+ formatMessage(payload) {
36
+ const { event } = payload;
37
+ const color = this.getSeverityColor(event.severity);
38
+ const emoji = this.getSeverityEmoji(event.severity);
39
+ const message = {
40
+ text: `${emoji} *Mund Security Alert* - ${event.rule_name}`,
41
+ attachments: [
42
+ {
43
+ color,
44
+ title: `${event.severity.toUpperCase()}: ${event.rule_name}`,
45
+ text: `\`\`\`${event.content_snippet}\`\`\``,
46
+ fields: [
47
+ {
48
+ title: 'Type',
49
+ value: event.type,
50
+ short: true
51
+ },
52
+ {
53
+ title: 'Action',
54
+ value: event.action_taken,
55
+ short: true
56
+ },
57
+ {
58
+ title: 'Rule ID',
59
+ value: event.rule_id,
60
+ short: true
61
+ },
62
+ {
63
+ title: 'Event ID',
64
+ value: event.id,
65
+ short: true
66
+ }
67
+ ],
68
+ footer: 'Mund Guardian Protocol',
69
+ ts: Math.floor(event.timestamp.getTime() / 1000)
70
+ }
71
+ ]
72
+ };
73
+ // Add context fields if available
74
+ if (event.context.tool_name) {
75
+ message.attachments[0].fields.push({
76
+ title: 'Tool',
77
+ value: event.context.tool_name,
78
+ short: true
79
+ });
80
+ }
81
+ if (event.context.agent_id) {
82
+ message.attachments[0].fields.push({
83
+ title: 'Agent',
84
+ value: event.context.agent_id,
85
+ short: true
86
+ });
87
+ }
88
+ // Apply custom settings
89
+ if (this.config.username) {
90
+ message.username = this.config.username;
91
+ }
92
+ if (this.config.icon_emoji) {
93
+ message.icon_emoji = this.config.icon_emoji;
94
+ }
95
+ if (this.config.channel) {
96
+ message.channel = this.config.channel;
97
+ }
98
+ return message;
99
+ }
100
+ getSeverityColor(severity) {
101
+ const colors = {
102
+ critical: '#dc3545', // Red
103
+ high: '#fd7e14', // Orange
104
+ medium: '#ffc107', // Yellow
105
+ low: '#17a2b8', // Cyan
106
+ info: '#6c757d' // Gray
107
+ };
108
+ return colors[severity] || colors.info;
109
+ }
110
+ getSeverityEmoji(severity) {
111
+ const emojis = {
112
+ critical: '🚨',
113
+ high: '⚠️',
114
+ medium: '⚡',
115
+ low: 'ℹ️',
116
+ info: '📝'
117
+ };
118
+ return emojis[severity] || '📝';
119
+ }
120
+ meetsMinSeverity(eventSeverity, minSeverity) {
121
+ const order = ['critical', 'high', 'medium', 'low', 'info'];
122
+ const eventIndex = order.indexOf(eventSeverity);
123
+ const minIndex = order.indexOf(minSeverity);
124
+ return eventIndex <= minIndex;
125
+ }
126
+ }
127
+ export default SlackNotifier;
128
+ //# sourceMappingURL=slack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slack.js","sourceRoot":"","sources":["../../src/notifications/slack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Teams Notifier - Send alerts to Microsoft Teams channels
4
+ */
5
+ import type { INotifier, NotificationPayload, TeamsConfig } from '../types.js';
6
+ export declare class TeamsNotifier implements INotifier {
7
+ name: string;
8
+ private config;
9
+ constructor(config: TeamsConfig);
10
+ send(payload: NotificationPayload): Promise<boolean>;
11
+ private formatAdaptiveCard;
12
+ private getSeverityColor;
13
+ private getSeverityEmoji;
14
+ private meetsMinSeverity;
15
+ }
16
+ export default TeamsNotifier;
17
+ //# sourceMappingURL=teams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.d.ts","sourceRoot":"","sources":["../../src/notifications/teams.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,WAAW,EAAY,MAAM,aAAa,CAAC;AAkDzF,qBAAa,aAAc,YAAW,SAAS;IAC7C,IAAI,SAAmB;IACvB,OAAO,CAAC,MAAM,CAAc;gBAEhB,MAAM,EAAE,WAAW;IAIzB,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IA6B1D,OAAO,CAAC,kBAAkB;IA6E1B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,gBAAgB;CAMzB;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Teams Notifier - Send alerts to Microsoft Teams channels
4
+ */
5
+ export class TeamsNotifier {
6
+ name = 'TeamsNotifier';
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async send(payload) {
12
+ const { event } = payload;
13
+ // Check minimum severity
14
+ if (this.config.min_severity && !this.meetsMinSeverity(event.severity, this.config.min_severity)) {
15
+ return true; // Successfully skipped
16
+ }
17
+ const card = this.formatAdaptiveCard(payload);
18
+ try {
19
+ const response = await fetch(this.config.webhook_url, {
20
+ method: 'POST',
21
+ headers: { 'Content-Type': 'application/json' },
22
+ body: JSON.stringify(card)
23
+ });
24
+ if (!response.ok) {
25
+ console.error(`Teams notification failed: ${response.status} ${response.statusText}`);
26
+ return false;
27
+ }
28
+ return true;
29
+ }
30
+ catch (error) {
31
+ console.error('Failed to send Teams notification:', error);
32
+ return false;
33
+ }
34
+ }
35
+ formatAdaptiveCard(payload) {
36
+ const { event } = payload;
37
+ const color = this.getSeverityColor(event.severity);
38
+ const emoji = this.getSeverityEmoji(event.severity);
39
+ const facts = [
40
+ { title: 'Severity', value: event.severity.toUpperCase() },
41
+ { title: 'Type', value: event.type },
42
+ { title: 'Action', value: event.action_taken },
43
+ { title: 'Rule ID', value: event.rule_id },
44
+ { title: 'Event ID', value: event.id },
45
+ { title: 'Time', value: event.timestamp.toISOString() }
46
+ ];
47
+ if (event.context.tool_name) {
48
+ facts.push({ title: 'Tool', value: event.context.tool_name });
49
+ }
50
+ if (event.context.agent_id) {
51
+ facts.push({ title: 'Agent', value: event.context.agent_id });
52
+ }
53
+ return {
54
+ type: 'message',
55
+ attachments: [
56
+ {
57
+ contentType: 'application/vnd.microsoft.card.adaptive',
58
+ content: {
59
+ $schema: 'http://adaptivecards.io/schemas/adaptive-card.json',
60
+ type: 'AdaptiveCard',
61
+ version: '1.4',
62
+ body: [
63
+ {
64
+ type: 'Container',
65
+ items: [
66
+ {
67
+ type: 'TextBlock',
68
+ text: `${emoji} Mund Security Alert`,
69
+ size: 'Large',
70
+ weight: 'Bolder',
71
+ color: color
72
+ },
73
+ {
74
+ type: 'TextBlock',
75
+ text: event.rule_name,
76
+ size: 'Medium',
77
+ weight: 'Bolder',
78
+ wrap: true
79
+ }
80
+ ]
81
+ },
82
+ {
83
+ type: 'Container',
84
+ items: [
85
+ {
86
+ type: 'TextBlock',
87
+ text: 'Detected Content:',
88
+ weight: 'Bolder',
89
+ spacing: 'Medium'
90
+ },
91
+ {
92
+ type: 'TextBlock',
93
+ text: `\`${event.content_snippet}\``,
94
+ wrap: true
95
+ }
96
+ ]
97
+ },
98
+ {
99
+ type: 'FactSet',
100
+ facts
101
+ }
102
+ ]
103
+ }
104
+ }
105
+ ]
106
+ };
107
+ }
108
+ getSeverityColor(severity) {
109
+ const colors = {
110
+ critical: 'attention',
111
+ high: 'attention',
112
+ medium: 'warning',
113
+ low: 'good',
114
+ info: 'default'
115
+ };
116
+ return colors[severity] || 'default';
117
+ }
118
+ getSeverityEmoji(severity) {
119
+ const emojis = {
120
+ critical: '🚨',
121
+ high: '⚠️',
122
+ medium: '⚡',
123
+ low: 'ℹ️',
124
+ info: '📝'
125
+ };
126
+ return emojis[severity] || '📝';
127
+ }
128
+ meetsMinSeverity(eventSeverity, minSeverity) {
129
+ const order = ['critical', 'high', 'medium', 'low', 'info'];
130
+ const eventIndex = order.indexOf(eventSeverity);
131
+ const minIndex = order.indexOf(minSeverity);
132
+ return eventIndex <= minIndex;
133
+ }
134
+ }
135
+ export default TeamsNotifier;
136
+ //# sourceMappingURL=teams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"teams.js","sourceRoot":"","sources":["../../src/notifications/teams.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Webhook Notifier - Send alerts to generic webhooks
4
+ */
5
+ import type { INotifier, NotificationPayload, WebhookConfig } from '../types.js';
6
+ export declare class WebhookNotifier implements INotifier {
7
+ name: string;
8
+ private config;
9
+ constructor(config: WebhookConfig);
10
+ send(payload: NotificationPayload): Promise<boolean>;
11
+ private formatPayload;
12
+ private meetsMinSeverity;
13
+ }
14
+ export default WebhookNotifier;
15
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../src/notifications/webhook.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,mBAAmB,EAAE,aAAa,EAAY,MAAM,aAAa,CAAC;AAE3F,qBAAa,eAAgB,YAAW,SAAS;IAC/C,IAAI,SAAqB;IACzB,OAAO,CAAC,MAAM,CAAgB;gBAElB,MAAM,EAAE,aAAa;IAI3B,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkC1D,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,gBAAgB;CAMzB;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Webhook Notifier - Send alerts to generic webhooks
4
+ */
5
+ export class WebhookNotifier {
6
+ name = 'WebhookNotifier';
7
+ config;
8
+ constructor(config) {
9
+ this.config = config;
10
+ }
11
+ async send(payload) {
12
+ const { event } = payload;
13
+ // Check minimum severity
14
+ if (this.config.min_severity && !this.meetsMinSeverity(event.severity, this.config.min_severity)) {
15
+ return true; // Successfully skipped
16
+ }
17
+ const webhookPayload = this.formatPayload(payload);
18
+ try {
19
+ const headers = {
20
+ 'Content-Type': 'application/json',
21
+ ...this.config.headers
22
+ };
23
+ const response = await fetch(this.config.url, {
24
+ method: this.config.method,
25
+ headers,
26
+ body: JSON.stringify(webhookPayload)
27
+ });
28
+ if (!response.ok) {
29
+ console.error(`Webhook notification failed: ${response.status} ${response.statusText}`);
30
+ return false;
31
+ }
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ console.error('Failed to send webhook notification:', error);
36
+ return false;
37
+ }
38
+ }
39
+ formatPayload(payload) {
40
+ const { event } = payload;
41
+ return {
42
+ source: 'mund',
43
+ version: '1.0',
44
+ event: {
45
+ id: event.id,
46
+ timestamp: event.timestamp.toISOString(),
47
+ rule_id: event.rule_id,
48
+ rule_name: event.rule_name,
49
+ severity: event.severity,
50
+ type: event.type,
51
+ action_taken: event.action_taken,
52
+ content_snippet: event.content_snippet,
53
+ content_hash: event.full_content_hash,
54
+ context: event.context,
55
+ acknowledged: event.acknowledged
56
+ }
57
+ };
58
+ }
59
+ meetsMinSeverity(eventSeverity, minSeverity) {
60
+ const order = ['critical', 'high', 'medium', 'low', 'info'];
61
+ const eventIndex = order.indexOf(eventSeverity);
62
+ const minIndex = order.indexOf(minSeverity);
63
+ return eventIndex <= minIndex;
64
+ }
65
+ }
66
+ export default WebhookNotifier;
67
+ //# sourceMappingURL=webhook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.js","sourceRoot":"","sources":["../../src/notifications/webhook.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAG,iBAAiB,CAAC;IACjB,MAAM,CAAgB;IAE9B,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAA4B;QACrC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAE1B,yBAAyB;QACzB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;YACjG,OAAO,IAAI,CAAC,CAAC,uBAAuB;QACtC,CAAC;QAED,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,MAAM,OAAO,GAA2B;gBACtC,cAAc,EAAE,kBAAkB;gBAClC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;aACvB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE;gBAC5C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;gBAC1B,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC;aACrC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACxF,OAAO,KAAK,CAAC;YACf,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,KAAK,CAAC,CAAC;YAC7D,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,OAA4B;QAChD,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAE1B,OAAO;YACL,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,KAAK;YACd,KAAK,EAAE;gBACL,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,EAAE;gBACxC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,YAAY,EAAE,KAAK,CAAC,YAAY;gBAChC,eAAe,EAAE,KAAK,CAAC,eAAe;gBACtC,YAAY,EAAE,KAAK,CAAC,iBAAiB;gBACrC,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,YAAY,EAAE,KAAK,CAAC,YAAY;aACjC;SACF,CAAC;IACJ,CAAC;IAEO,gBAAgB,CAAC,aAAuB,EAAE,WAAqB;QACrE,MAAM,KAAK,GAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QACxE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAC5C,OAAO,UAAU,IAAI,QAAQ,CAAC;IAChC,CAAC;CACF;AAED,eAAe,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Storage Index - Exports storage implementations
4
+ */
5
+ export { MemoryStorage } from './memory.js';
6
+ import type { IStorage, MundConfig } from '../types.js';
7
+ /**
8
+ * Create storage instance based on configuration
9
+ */
10
+ export declare function createStorage(config: MundConfig): IStorage;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,QAAQ,CAe1D"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Storage Index - Exports storage implementations
4
+ */
5
+ export { MemoryStorage } from './memory.js';
6
+ import { MemoryStorage } from './memory.js';
7
+ /**
8
+ * Create storage instance based on configuration
9
+ */
10
+ export function createStorage(config) {
11
+ switch (config.storage_type) {
12
+ case 'memory':
13
+ return new MemoryStorage();
14
+ case 'sqlite':
15
+ // SQLite implementation would go here
16
+ console.warn('SQLite storage not yet implemented, falling back to memory');
17
+ return new MemoryStorage();
18
+ case 'postgres':
19
+ // PostgreSQL implementation would go here
20
+ console.warn('PostgreSQL storage not yet implemented, falling back to memory');
21
+ return new MemoryStorage();
22
+ default:
23
+ return new MemoryStorage();
24
+ }
25
+ }
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAkB;IAC9C,QAAQ,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5B,KAAK,QAAQ;YACX,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,QAAQ;YACX,sCAAsC;YACtC,OAAO,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B,KAAK,UAAU;YACb,0CAA0C;YAC1C,OAAO,CAAC,IAAI,CAAC,gEAAgE,CAAC,CAAC;YAC/E,OAAO,IAAI,aAAa,EAAE,CAAC;QAC7B;YACE,OAAO,IAAI,aAAa,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Memory Storage - In-memory storage for development and testing
4
+ */
5
+ import type { IStorage, SecurityEvent, DetectionRule, GetEventsInput, DetectorType } from '../types.js';
6
+ export declare class MemoryStorage implements IStorage {
7
+ private events;
8
+ private rules;
9
+ private allowlist;
10
+ private blocklist;
11
+ saveEvent(event: SecurityEvent): Promise<void>;
12
+ getEvent(id: string): Promise<SecurityEvent | null>;
13
+ getEvents(query: GetEventsInput): Promise<SecurityEvent[]>;
14
+ countEvents(query: GetEventsInput): Promise<number>;
15
+ acknowledgeEvent(id: string, by?: string): Promise<void>;
16
+ saveRule(rule: DetectionRule): Promise<void>;
17
+ getRule(id: string): Promise<DetectionRule | null>;
18
+ getRules(): Promise<DetectionRule[]>;
19
+ deleteRule(id: string): Promise<void>;
20
+ addToAllowlist(pattern: string, type: DetectorType): Promise<void>;
21
+ addToBlocklist(pattern: string, type: DetectorType): Promise<void>;
22
+ getAllowlist(type?: DetectorType): Promise<string[]>;
23
+ getBlocklist(type?: DetectorType): Promise<string[]>;
24
+ removeFromAllowlist(pattern: string): Promise<void>;
25
+ removeFromBlocklist(pattern: string): Promise<void>;
26
+ close(): Promise<void>;
27
+ getStats(): {
28
+ events: number;
29
+ rules: number;
30
+ allowlist: number;
31
+ blocklist: number;
32
+ };
33
+ }
34
+ export default MemoryStorage;
35
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACb,aAAa,EACb,cAAc,EACd,YAAY,EACb,MAAM,aAAa,CAAC;AAErB,qBAAa,aAAc,YAAW,QAAQ;IAC5C,OAAO,CAAC,MAAM,CAAyC;IACvD,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,SAAS,CAAmE;IACpF,OAAO,CAAC,SAAS,CAAmE;IAM9E,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9C,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAInD,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IA6B1D,WAAW,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBnD,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAaxD,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIlD,QAAQ,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAIpC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQrC,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpD,YAAY,CAAC,IAAI,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQpD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAW5B,QAAQ,IAAI;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;CAQpF;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Memory Storage - In-memory storage for development and testing
4
+ */
5
+ export class MemoryStorage {
6
+ events = new Map();
7
+ rules = new Map();
8
+ allowlist = new Map();
9
+ blocklist = new Map();
10
+ // ============================================================================
11
+ // Events
12
+ // ============================================================================
13
+ async saveEvent(event) {
14
+ this.events.set(event.id, event);
15
+ // Keep only last 10000 events in memory
16
+ if (this.events.size > 10000) {
17
+ const oldestKey = this.events.keys().next().value;
18
+ if (oldestKey) {
19
+ this.events.delete(oldestKey);
20
+ }
21
+ }
22
+ }
23
+ async getEvent(id) {
24
+ return this.events.get(id) || null;
25
+ }
26
+ async getEvents(query) {
27
+ let events = Array.from(this.events.values());
28
+ // Apply filters
29
+ if (query.severity) {
30
+ events = events.filter(e => e.severity === query.severity);
31
+ }
32
+ if (query.type) {
33
+ events = events.filter(e => e.type === query.type);
34
+ }
35
+ if (query.acknowledged !== undefined) {
36
+ events = events.filter(e => e.acknowledged === query.acknowledged);
37
+ }
38
+ if (query.start_time) {
39
+ events = events.filter(e => e.timestamp >= query.start_time);
40
+ }
41
+ if (query.end_time) {
42
+ events = events.filter(e => e.timestamp <= query.end_time);
43
+ }
44
+ // Sort by timestamp descending (newest first)
45
+ events.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
46
+ // Apply pagination
47
+ const offset = query.offset || 0;
48
+ const limit = query.limit || 50;
49
+ return events.slice(offset, offset + limit);
50
+ }
51
+ async countEvents(query) {
52
+ let events = Array.from(this.events.values());
53
+ if (query.severity) {
54
+ events = events.filter(e => e.severity === query.severity);
55
+ }
56
+ if (query.type) {
57
+ events = events.filter(e => e.type === query.type);
58
+ }
59
+ if (query.acknowledged !== undefined) {
60
+ events = events.filter(e => e.acknowledged === query.acknowledged);
61
+ }
62
+ if (query.start_time) {
63
+ events = events.filter(e => e.timestamp >= query.start_time);
64
+ }
65
+ if (query.end_time) {
66
+ events = events.filter(e => e.timestamp <= query.end_time);
67
+ }
68
+ return events.length;
69
+ }
70
+ async acknowledgeEvent(id, by) {
71
+ const event = this.events.get(id);
72
+ if (event) {
73
+ event.acknowledged = true;
74
+ event.acknowledged_by = by;
75
+ event.acknowledged_at = new Date();
76
+ }
77
+ }
78
+ // ============================================================================
79
+ // Rules
80
+ // ============================================================================
81
+ async saveRule(rule) {
82
+ this.rules.set(rule.id, rule);
83
+ }
84
+ async getRule(id) {
85
+ return this.rules.get(id) || null;
86
+ }
87
+ async getRules() {
88
+ return Array.from(this.rules.values());
89
+ }
90
+ async deleteRule(id) {
91
+ this.rules.delete(id);
92
+ }
93
+ // ============================================================================
94
+ // Allowlist/Blocklist
95
+ // ============================================================================
96
+ async addToAllowlist(pattern, type) {
97
+ this.allowlist.set(pattern, { pattern, type });
98
+ }
99
+ async addToBlocklist(pattern, type) {
100
+ this.blocklist.set(pattern, { pattern, type });
101
+ }
102
+ async getAllowlist(type) {
103
+ const entries = Array.from(this.allowlist.values());
104
+ if (type) {
105
+ return entries.filter(e => e.type === type).map(e => e.pattern);
106
+ }
107
+ return entries.map(e => e.pattern);
108
+ }
109
+ async getBlocklist(type) {
110
+ const entries = Array.from(this.blocklist.values());
111
+ if (type) {
112
+ return entries.filter(e => e.type === type).map(e => e.pattern);
113
+ }
114
+ return entries.map(e => e.pattern);
115
+ }
116
+ async removeFromAllowlist(pattern) {
117
+ this.allowlist.delete(pattern);
118
+ }
119
+ async removeFromBlocklist(pattern) {
120
+ this.blocklist.delete(pattern);
121
+ }
122
+ // ============================================================================
123
+ // Cleanup
124
+ // ============================================================================
125
+ async close() {
126
+ this.events.clear();
127
+ this.rules.clear();
128
+ this.allowlist.clear();
129
+ this.blocklist.clear();
130
+ }
131
+ // ============================================================================
132
+ // Utility Methods
133
+ // ============================================================================
134
+ getStats() {
135
+ return {
136
+ events: this.events.size,
137
+ rules: this.rules.size,
138
+ allowlist: this.allowlist.size,
139
+ blocklist: this.blocklist.size
140
+ };
141
+ }
142
+ }
143
+ export default MemoryStorage;
144
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Mund - The Guardian Protocol
3
+ * Configuration & Response Tools - MCP tools for configuration and incident response
4
+ */
5
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
6
+ import type { IStorage, DetectionRule } from '../types.js';
7
+ export declare function registerConfigurationTools(server: McpServer, storage: IStorage, rules: DetectionRule[]): void;
8
+ //# sourceMappingURL=configuration.d.ts.map