@happyvertical/messages 0.79.0 → 0.80.1
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/AGENT.md +1 -1
- package/dist/chunks/base-DWpO_9_P.js +107 -0
- package/dist/chunks/base-DWpO_9_P.js.map +1 -0
- package/dist/index.js +5182 -5461
- package/dist/index.js.map +1 -1
- package/metadata.json +1 -1
- package/package.json +7 -7
package/AGENT.md
CHANGED
|
@@ -7,7 +7,7 @@ Unified multi-channel messaging with adapter-based architecture (Slack, Twitter,
|
|
|
7
7
|
## Package Map
|
|
8
8
|
- Package: `@happyvertical/messages`
|
|
9
9
|
- Hierarchy path: `@happyvertical/sdk > packages > messages`
|
|
10
|
-
- Workspace position: `19 of
|
|
10
|
+
- Workspace position: `19 of 32` local packages
|
|
11
11
|
- Internal dependencies: `@happyvertical/email`, `@happyvertical/logger`, `@happyvertical/utils`
|
|
12
12
|
- Internal dependents: none
|
|
13
13
|
- Knowledge graph files: `AGENT.md`, `metadata.json`, `ecosystem-manifest.json`
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { createLogger } from "@happyvertical/logger";
|
|
2
|
+
//#region src/shared/errors.ts
|
|
3
|
+
/**
|
|
4
|
+
* Error classes for @happyvertical/messages package
|
|
5
|
+
*/
|
|
6
|
+
var MessagingError = class extends Error {
|
|
7
|
+
code;
|
|
8
|
+
provider;
|
|
9
|
+
cause;
|
|
10
|
+
constructor(message, code, provider, cause) {
|
|
11
|
+
super(message);
|
|
12
|
+
this.name = "MessagingError";
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.provider = provider;
|
|
15
|
+
this.cause = cause;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
var ConnectionError = class extends MessagingError {
|
|
19
|
+
constructor(message, provider, cause) {
|
|
20
|
+
super(message, "CONNECTION_ERROR", provider, cause);
|
|
21
|
+
this.name = "ConnectionError";
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var AuthenticationError = class extends MessagingError {
|
|
25
|
+
constructor(message, provider, cause) {
|
|
26
|
+
super(message, "AUTHENTICATION_ERROR", provider, cause);
|
|
27
|
+
this.name = "AuthenticationError";
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
var SendError = class extends MessagingError {
|
|
31
|
+
constructor(message, provider, cause) {
|
|
32
|
+
super(message, "SEND_ERROR", provider, cause);
|
|
33
|
+
this.name = "SendError";
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
var MessageNotFoundError = class extends MessagingError {
|
|
37
|
+
messageId;
|
|
38
|
+
constructor(messageId, provider, cause) {
|
|
39
|
+
super(`Message not found: ${messageId}`, "MESSAGE_NOT_FOUND", provider, cause);
|
|
40
|
+
this.name = "MessageNotFoundError";
|
|
41
|
+
this.messageId = messageId;
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
var ChannelNotFoundError = class extends MessagingError {
|
|
45
|
+
channelId;
|
|
46
|
+
constructor(channelId, provider) {
|
|
47
|
+
super(`Channel not found: ${channelId}`, "CHANNEL_NOT_FOUND", provider);
|
|
48
|
+
this.name = "ChannelNotFoundError";
|
|
49
|
+
this.channelId = channelId;
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var RateLimitError = class extends MessagingError {
|
|
53
|
+
retryAfter;
|
|
54
|
+
constructor(provider, retryAfter) {
|
|
55
|
+
super(`Rate limit exceeded${retryAfter ? ` (retry after ${retryAfter}s)` : ""}`, "RATE_LIMIT", provider);
|
|
56
|
+
this.name = "RateLimitError";
|
|
57
|
+
this.retryAfter = retryAfter;
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
var InvalidMessageError = class extends MessagingError {
|
|
61
|
+
constructor(message, provider, cause) {
|
|
62
|
+
super(message, "INVALID_MESSAGE", provider, cause);
|
|
63
|
+
this.name = "InvalidMessageError";
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/shared/base.ts
|
|
68
|
+
/**
|
|
69
|
+
* Base message client adapter class
|
|
70
|
+
*/
|
|
71
|
+
/**
|
|
72
|
+
* Base adapter class providing shared functionality.
|
|
73
|
+
*
|
|
74
|
+
* All adapter implementations should extend this class.
|
|
75
|
+
* Protocol-only — no database persistence.
|
|
76
|
+
*/
|
|
77
|
+
var BaseMessageClient = class {
|
|
78
|
+
config;
|
|
79
|
+
logger;
|
|
80
|
+
connected = false;
|
|
81
|
+
constructor(config) {
|
|
82
|
+
this.config = config;
|
|
83
|
+
this.logger = config.logger || createLogger({ level: "info" });
|
|
84
|
+
}
|
|
85
|
+
async listChannels() {
|
|
86
|
+
throw new MessagingError("listChannels not supported by this adapter", "NOT_SUPPORTED", this.getAdapter());
|
|
87
|
+
}
|
|
88
|
+
isConnected() {
|
|
89
|
+
return this.connected;
|
|
90
|
+
}
|
|
91
|
+
validateMessage(message) {
|
|
92
|
+
if (!message.content && !message.html) throw new InvalidMessageError("Message must have content or html", this.getAdapter());
|
|
93
|
+
if (!message.from) throw new InvalidMessageError("Message must have a sender (from)", this.getAdapter());
|
|
94
|
+
}
|
|
95
|
+
mapError(error) {
|
|
96
|
+
if (error instanceof MessagingError) return error;
|
|
97
|
+
if (error instanceof Error) return new MessagingError(error.message, "UNKNOWN_ERROR", this.getAdapter(), error);
|
|
98
|
+
return new MessagingError(String(error), "UNKNOWN_ERROR", this.getAdapter());
|
|
99
|
+
}
|
|
100
|
+
debug(message, data) {
|
|
101
|
+
if (this.config.debug) this.logger.debug(message, data);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
//#endregion
|
|
105
|
+
export { InvalidMessageError as a, RateLimitError as c, ConnectionError as i, SendError as l, AuthenticationError as n, MessageNotFoundError as o, ChannelNotFoundError as r, MessagingError as s, BaseMessageClient as t };
|
|
106
|
+
|
|
107
|
+
//# sourceMappingURL=base-DWpO_9_P.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-DWpO_9_P.js","names":[],"sources":["../../src/shared/errors.ts","../../src/shared/base.ts"],"sourcesContent":["/**\n * Error classes for @happyvertical/messages package\n */\n\n// ============================================================================\n// Base Error\n// ============================================================================\n\nexport class MessagingError extends Error {\n code: string;\n provider?: string;\n cause?: unknown;\n\n constructor(\n message: string,\n code: string,\n provider?: string,\n cause?: unknown,\n ) {\n super(message);\n this.name = 'MessagingError';\n this.code = code;\n this.provider = provider;\n this.cause = cause;\n }\n}\n\n// ============================================================================\n// Connection Errors\n// ============================================================================\n\nexport class ConnectionError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'CONNECTION_ERROR', provider, cause);\n this.name = 'ConnectionError';\n }\n}\n\n// ============================================================================\n// Authentication Errors\n// ============================================================================\n\nexport class AuthenticationError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'AUTHENTICATION_ERROR', provider, cause);\n this.name = 'AuthenticationError';\n }\n}\n\n// ============================================================================\n// Send Errors\n// ============================================================================\n\nexport class SendError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'SEND_ERROR', provider, cause);\n this.name = 'SendError';\n }\n}\n\n// ============================================================================\n// Message Errors\n// ============================================================================\n\nexport class MessageNotFoundError extends MessagingError {\n messageId: string;\n\n constructor(messageId: string, provider?: string, cause?: unknown) {\n super(\n `Message not found: ${messageId}`,\n 'MESSAGE_NOT_FOUND',\n provider,\n cause,\n );\n this.name = 'MessageNotFoundError';\n this.messageId = messageId;\n }\n}\n\n// ============================================================================\n// Channel Errors\n// ============================================================================\n\nexport class ChannelNotFoundError extends MessagingError {\n channelId: string;\n\n constructor(channelId: string, provider?: string) {\n super(`Channel not found: ${channelId}`, 'CHANNEL_NOT_FOUND', provider);\n this.name = 'ChannelNotFoundError';\n this.channelId = channelId;\n }\n}\n\n// ============================================================================\n// Rate Limit Errors\n// ============================================================================\n\nexport class RateLimitError extends MessagingError {\n retryAfter?: number;\n\n constructor(provider?: string, retryAfter?: number) {\n super(\n `Rate limit exceeded${retryAfter ? ` (retry after ${retryAfter}s)` : ''}`,\n 'RATE_LIMIT',\n provider,\n );\n this.name = 'RateLimitError';\n this.retryAfter = retryAfter;\n }\n}\n\n// ============================================================================\n// Validation Errors\n// ============================================================================\n\nexport class InvalidMessageError extends MessagingError {\n constructor(message: string, provider?: string, cause?: unknown) {\n super(message, 'INVALID_MESSAGE', provider, cause);\n this.name = 'InvalidMessageError';\n }\n}\n","/**\n * Base message client adapter class\n */\n\nimport { createLogger, type Logger } from '@happyvertical/logger';\nimport { InvalidMessageError, MessagingError } from './errors.js';\nimport type {\n Channel,\n FetchOptions,\n Message,\n MessageAdapterType,\n MessageClient,\n MessageClientCapabilities,\n MessageClientConfig,\n SendOptions,\n SendResult,\n} from './types.js';\n\n/**\n * Base adapter class providing shared functionality.\n *\n * All adapter implementations should extend this class.\n * Protocol-only — no database persistence.\n */\nexport abstract class BaseMessageClient implements MessageClient {\n protected config: MessageClientConfig;\n protected logger: Logger;\n protected connected = false;\n\n constructor(config: MessageClientConfig) {\n this.config = config;\n this.logger = config.logger || createLogger({ level: 'info' });\n }\n\n // ========================================================================\n // Abstract methods that adapters must implement\n // ========================================================================\n\n abstract send(message: Message, options?: SendOptions): Promise<SendResult>;\n abstract fetch(options?: FetchOptions): Promise<Message[]>;\n abstract getMessage(messageId: string): Promise<Message>;\n abstract getThread(threadId: string): Promise<Message[]>;\n abstract connect(): Promise<void>;\n abstract disconnect(): Promise<void>;\n abstract getCapabilities(): MessageClientCapabilities;\n abstract getAdapter(): MessageAdapterType;\n\n // ========================================================================\n // Optional methods (default to unsupported)\n // ========================================================================\n\n async listChannels(): Promise<Channel[]> {\n throw new MessagingError(\n 'listChannels not supported by this adapter',\n 'NOT_SUPPORTED',\n this.getAdapter(),\n );\n }\n\n // ========================================================================\n // Connection management\n // ========================================================================\n\n isConnected(): boolean {\n return this.connected;\n }\n\n // ========================================================================\n // Validation helpers\n // ========================================================================\n\n protected validateMessage(message: Message): void {\n if (!message.content && !message.html) {\n throw new InvalidMessageError(\n 'Message must have content or html',\n this.getAdapter(),\n );\n }\n\n if (!message.from) {\n throw new InvalidMessageError(\n 'Message must have a sender (from)',\n this.getAdapter(),\n );\n }\n }\n\n // ========================================================================\n // Error mapping\n // ========================================================================\n\n protected mapError(error: unknown): MessagingError {\n if (error instanceof MessagingError) {\n return error;\n }\n\n if (error instanceof Error) {\n return new MessagingError(\n error.message,\n 'UNKNOWN_ERROR',\n this.getAdapter(),\n error,\n );\n }\n\n return new MessagingError(\n String(error),\n 'UNKNOWN_ERROR',\n this.getAdapter(),\n );\n }\n\n // ========================================================================\n // Utility methods\n // ========================================================================\n\n protected debug(message: string, data?: unknown): void {\n if (this.config.debug) {\n this.logger.debug(message, data as Record<string, unknown> | undefined);\n }\n }\n}\n"],"mappings":";;;;;AAQA,IAAa,iBAAb,cAAoC,MAAM;CACxC;CACA;CACA;CAEA,YACE,SACA,MACA,UACA,OACA;EACA,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,OAAO;EACZ,KAAK,WAAW;EAChB,KAAK,QAAQ;CACf;AACF;AAMA,IAAa,kBAAb,cAAqC,eAAe;CAClD,YAAY,SAAiB,UAAmB,OAAiB;EAC/D,MAAM,SAAS,oBAAoB,UAAU,KAAK;EAClD,KAAK,OAAO;CACd;AACF;AAMA,IAAa,sBAAb,cAAyC,eAAe;CACtD,YAAY,SAAiB,UAAmB,OAAiB;EAC/D,MAAM,SAAS,wBAAwB,UAAU,KAAK;EACtD,KAAK,OAAO;CACd;AACF;AAMA,IAAa,YAAb,cAA+B,eAAe;CAC5C,YAAY,SAAiB,UAAmB,OAAiB;EAC/D,MAAM,SAAS,cAAc,UAAU,KAAK;EAC5C,KAAK,OAAO;CACd;AACF;AAMA,IAAa,uBAAb,cAA0C,eAAe;CACvD;CAEA,YAAY,WAAmB,UAAmB,OAAiB;EACjE,MACE,sBAAsB,aACtB,qBACA,UACA,KACF;EACA,KAAK,OAAO;EACZ,KAAK,YAAY;CACnB;AACF;AAMA,IAAa,uBAAb,cAA0C,eAAe;CACvD;CAEA,YAAY,WAAmB,UAAmB;EAChD,MAAM,sBAAsB,aAAa,qBAAqB,QAAQ;EACtE,KAAK,OAAO;EACZ,KAAK,YAAY;CACnB;AACF;AAMA,IAAa,iBAAb,cAAoC,eAAe;CACjD;CAEA,YAAY,UAAmB,YAAqB;EAClD,MACE,sBAAsB,aAAa,iBAAiB,WAAW,MAAM,MACrE,cACA,QACF;EACA,KAAK,OAAO;EACZ,KAAK,aAAa;CACpB;AACF;AAMA,IAAa,sBAAb,cAAyC,eAAe;CACtD,YAAY,SAAiB,UAAmB,OAAiB;EAC/D,MAAM,SAAS,mBAAmB,UAAU,KAAK;EACjD,KAAK,OAAO;CACd;AACF;;;;;;;;;;;;AChGA,IAAsB,oBAAtB,MAAiE;CAC/D;CACA;CACA,YAAsB;CAEtB,YAAY,QAA6B;EACvC,KAAK,SAAS;EACd,KAAK,SAAS,OAAO,UAAU,aAAa,EAAE,OAAO,OAAO,CAAC;CAC/D;CAmBA,MAAM,eAAmC;EACvC,MAAM,IAAI,eACR,8CACA,iBACA,KAAK,WAAW,CAClB;CACF;CAMA,cAAuB;EACrB,OAAO,KAAK;CACd;CAMA,gBAA0B,SAAwB;EAChD,IAAI,CAAC,QAAQ,WAAW,CAAC,QAAQ,MAC/B,MAAM,IAAI,oBACR,qCACA,KAAK,WAAW,CAClB;EAGF,IAAI,CAAC,QAAQ,MACX,MAAM,IAAI,oBACR,qCACA,KAAK,WAAW,CAClB;CAEJ;CAMA,SAAmB,OAAgC;EACjD,IAAI,iBAAiB,gBACnB,OAAO;EAGT,IAAI,iBAAiB,OACnB,OAAO,IAAI,eACT,MAAM,SACN,iBACA,KAAK,WAAW,GAChB,KACF;EAGF,OAAO,IAAI,eACT,OAAO,KAAK,GACZ,iBACA,KAAK,WAAW,CAClB;CACF;CAMA,MAAgB,SAAiB,MAAsB;EACrD,IAAI,KAAK,OAAO,OACd,KAAK,OAAO,MAAM,SAAS,IAA2C;CAE1E;AACF"}
|