@mono-agent/messenger-adapter 0.21.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.
- package/LICENSE +674 -0
- package/README.md +302 -0
- package/dist/adapter.d.ts +261 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +1021 -0
- package/dist/adapter.js.map +1 -0
- package/dist/channel-driver.d.ts +15 -0
- package/dist/channel-driver.d.ts.map +1 -0
- package/dist/channel-driver.js +209 -0
- package/dist/channel-driver.js.map +1 -0
- package/dist/config.d.ts +108 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +187 -0
- package/dist/config.js.map +1 -0
- package/dist/graph-client.d.ts +92 -0
- package/dist/graph-client.d.ts.map +1 -0
- package/dist/graph-client.js +296 -0
- package/dist/graph-client.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/message-stream.d.ts +37 -0
- package/dist/message-stream.d.ts.map +1 -0
- package/dist/message-stream.js +62 -0
- package/dist/message-stream.js.map +1 -0
- package/dist/server.d.ts +38 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +155 -0
- package/dist/server.js.map +1 -0
- package/dist/start.d.ts +37 -0
- package/dist/start.d.ts.map +1 -0
- package/dist/start.js +77 -0
- package/dist/start.js.map +1 -0
- package/dist/text.d.ts +16 -0
- package/dist/text.d.ts.map +1 -0
- package/dist/text.js +103 -0
- package/dist/text.js.map +1 -0
- package/package.json +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import type { MessengerMessagingType } from "./config.js";
|
|
2
|
+
export declare const DEFAULT_GRAPH_API_BASE_URL = "https://graph.facebook.com";
|
|
3
|
+
export type MessengerSenderAction = "typing_on" | "typing_off" | "mark_seen";
|
|
4
|
+
export interface MessengerSendOptions {
|
|
5
|
+
readonly messagingType?: MessengerMessagingType;
|
|
6
|
+
readonly tag?: string;
|
|
7
|
+
readonly maxMessageChars?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface MessengerSendResult {
|
|
10
|
+
/** Send API message ids in delivery order (one per chunk). */
|
|
11
|
+
readonly messageIds: readonly string[];
|
|
12
|
+
}
|
|
13
|
+
export interface MessengerGraphClientLogger {
|
|
14
|
+
debug?(message: string, metadata?: Record<string, unknown>): void;
|
|
15
|
+
warn?(message: string, metadata?: Record<string, unknown>): void;
|
|
16
|
+
}
|
|
17
|
+
export interface MessengerGraphClientOptions {
|
|
18
|
+
readonly pageAccessToken: string;
|
|
19
|
+
readonly apiVersion: string;
|
|
20
|
+
readonly baseUrl?: string;
|
|
21
|
+
readonly fetch?: typeof fetch;
|
|
22
|
+
readonly timeoutMs?: number;
|
|
23
|
+
readonly logger?: MessengerGraphClientLogger;
|
|
24
|
+
}
|
|
25
|
+
/** Minimal surface the adapter and stream depend on; tests inject fakes. */
|
|
26
|
+
export interface MessengerGraphClientLike {
|
|
27
|
+
sendText(recipientId: string, text: string, options?: MessengerSendOptions): Promise<MessengerSendResult>;
|
|
28
|
+
sendAttachmentUrl(recipientId: string, attachmentType: "image" | "video" | "audio" | "file", url: string, options?: MessengerSendOptions): Promise<MessengerSendResult>;
|
|
29
|
+
senderAction(recipientId: string, action: MessengerSenderAction): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare class MessengerGraphError extends Error {
|
|
32
|
+
readonly status: number;
|
|
33
|
+
readonly detail: unknown;
|
|
34
|
+
/** Bounded `Retry-After` from the response, when the server sent a usable one. */
|
|
35
|
+
readonly retryAfterMs: number | undefined;
|
|
36
|
+
constructor(status: number, detail: unknown, retryAfterMs?: number);
|
|
37
|
+
get retryable(): boolean;
|
|
38
|
+
/**
|
|
39
|
+
* True when the server definitively refused to act on the request. A 429 is
|
|
40
|
+
* a pre-processing rejection, so replaying it cannot duplicate a message; a
|
|
41
|
+
* 5xx may have been applied before the failure and is ambiguous instead.
|
|
42
|
+
*/
|
|
43
|
+
get definitivelyRejected(): boolean;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* A non-idempotent Send API POST whose outcome is unknown: the request may have
|
|
47
|
+
* been accepted by Meta and only its response lost. It is deliberately NOT
|
|
48
|
+
* retried — a replay would deliver the message twice — and is surfaced so the
|
|
49
|
+
* caller can report an ambiguous delivery instead of silently duplicating or
|
|
50
|
+
* silently dropping it.
|
|
51
|
+
*/
|
|
52
|
+
export declare class MessengerAmbiguousDeliveryError extends Error {
|
|
53
|
+
readonly path: string;
|
|
54
|
+
readonly cause: unknown;
|
|
55
|
+
/** Chunks already confirmed delivered before the ambiguous one, in order. */
|
|
56
|
+
readonly deliveredMessageIds: readonly string[];
|
|
57
|
+
constructor(path: string, cause: unknown, deliveredMessageIds?: readonly string[]);
|
|
58
|
+
}
|
|
59
|
+
export declare function isMessengerAmbiguousDeliveryError(error: unknown): error is MessengerAmbiguousDeliveryError;
|
|
60
|
+
/** Thin Send API client over global `fetch`; retries one transient failure per request. */
|
|
61
|
+
export declare class MessengerGraphClient implements MessengerGraphClientLike {
|
|
62
|
+
private readonly pageAccessToken;
|
|
63
|
+
private readonly apiVersion;
|
|
64
|
+
private readonly baseUrl;
|
|
65
|
+
private readonly fetchImpl;
|
|
66
|
+
private readonly timeoutMs;
|
|
67
|
+
private readonly logger;
|
|
68
|
+
constructor(options: MessengerGraphClientOptions);
|
|
69
|
+
sendText(recipientId: string, text: string, options?: MessengerSendOptions): Promise<MessengerSendResult>;
|
|
70
|
+
sendAttachmentUrl(recipientId: string, attachmentType: "image" | "video" | "audio" | "file", url: string, options?: MessengerSendOptions): Promise<MessengerSendResult>;
|
|
71
|
+
senderAction(recipientId: string, action: MessengerSenderAction): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* A replay-safe POST: retried once on any transient failure, because a
|
|
74
|
+
* duplicate delivery of this request has no user-visible effect.
|
|
75
|
+
*/
|
|
76
|
+
private postReplaySafe;
|
|
77
|
+
/**
|
|
78
|
+
* A message-bearing POST. Meta's Send API has no idempotency key, so the only
|
|
79
|
+
* safe retry is one the server definitively refused before acting (429).
|
|
80
|
+
* Every other transient outcome — timeout, transport failure, 5xx — may have
|
|
81
|
+
* been applied on Meta's side, and is surfaced as
|
|
82
|
+
* {@link MessengerAmbiguousDeliveryError} rather than replayed into a
|
|
83
|
+
* duplicate message.
|
|
84
|
+
*/
|
|
85
|
+
private postDelivery;
|
|
86
|
+
/** Classify a failed delivery POST as ambiguous (unknown outcome) or a clean rejection. */
|
|
87
|
+
private asDeliveryFailure;
|
|
88
|
+
private postOnce;
|
|
89
|
+
}
|
|
90
|
+
/** Parse `Retry-After` (delta-seconds or HTTP-date) into a bounded millisecond delay. */
|
|
91
|
+
export declare function retryAfterMsFromHeader(header: string | null): number | undefined;
|
|
92
|
+
//# sourceMappingURL=graph-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-client.d.ts","sourceRoot":"","sources":["../src/graph-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { splitForMessenger, MESSENGER_MAX_MESSAGE_CHARS } from "./text.js";
|
|
2
|
+
export const DEFAULT_GRAPH_API_BASE_URL = "https://graph.facebook.com";
|
|
3
|
+
const DEFAULT_TIMEOUT_MS = 20_000;
|
|
4
|
+
const RETRY_DELAY_MS = 1_000;
|
|
5
|
+
/** Upper bound on an honored `Retry-After`, so a hostile/typo'd header cannot park a turn. */
|
|
6
|
+
const MAX_RETRY_AFTER_MS = 10_000;
|
|
7
|
+
/** Cap on any retained error string, applied after redaction. */
|
|
8
|
+
const MAX_DETAIL_CHARS = 2_000;
|
|
9
|
+
export class MessengerGraphError extends Error {
|
|
10
|
+
status;
|
|
11
|
+
detail;
|
|
12
|
+
/** Bounded `Retry-After` from the response, when the server sent a usable one. */
|
|
13
|
+
retryAfterMs;
|
|
14
|
+
constructor(status, detail, retryAfterMs) {
|
|
15
|
+
super(`Messenger Graph API request failed with HTTP ${status}.`);
|
|
16
|
+
this.name = "MessengerGraphError";
|
|
17
|
+
this.status = status;
|
|
18
|
+
this.detail = detail;
|
|
19
|
+
this.retryAfterMs = retryAfterMs;
|
|
20
|
+
}
|
|
21
|
+
get retryable() {
|
|
22
|
+
return this.status === 429 || this.status >= 500;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* True when the server definitively refused to act on the request. A 429 is
|
|
26
|
+
* a pre-processing rejection, so replaying it cannot duplicate a message; a
|
|
27
|
+
* 5xx may have been applied before the failure and is ambiguous instead.
|
|
28
|
+
*/
|
|
29
|
+
get definitivelyRejected() {
|
|
30
|
+
return this.status === 429;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* A non-idempotent Send API POST whose outcome is unknown: the request may have
|
|
35
|
+
* been accepted by Meta and only its response lost. It is deliberately NOT
|
|
36
|
+
* retried — a replay would deliver the message twice — and is surfaced so the
|
|
37
|
+
* caller can report an ambiguous delivery instead of silently duplicating or
|
|
38
|
+
* silently dropping it.
|
|
39
|
+
*/
|
|
40
|
+
export class MessengerAmbiguousDeliveryError extends Error {
|
|
41
|
+
path;
|
|
42
|
+
cause;
|
|
43
|
+
/** Chunks already confirmed delivered before the ambiguous one, in order. */
|
|
44
|
+
deliveredMessageIds;
|
|
45
|
+
constructor(path, cause, deliveredMessageIds = []) {
|
|
46
|
+
super(`Messenger Send API request to ${path} has an unknown outcome and was not retried.`);
|
|
47
|
+
this.name = "MessengerAmbiguousDeliveryError";
|
|
48
|
+
this.path = path;
|
|
49
|
+
this.cause = cause;
|
|
50
|
+
this.deliveredMessageIds = deliveredMessageIds;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
export function isMessengerAmbiguousDeliveryError(error) {
|
|
54
|
+
return error instanceof MessengerAmbiguousDeliveryError;
|
|
55
|
+
}
|
|
56
|
+
/** Thin Send API client over global `fetch`; retries one transient failure per request. */
|
|
57
|
+
export class MessengerGraphClient {
|
|
58
|
+
pageAccessToken;
|
|
59
|
+
apiVersion;
|
|
60
|
+
baseUrl;
|
|
61
|
+
fetchImpl;
|
|
62
|
+
timeoutMs;
|
|
63
|
+
logger;
|
|
64
|
+
constructor(options) {
|
|
65
|
+
if (options.pageAccessToken.length === 0) {
|
|
66
|
+
throw new TypeError("MessengerGraphClient requires a page access token.");
|
|
67
|
+
}
|
|
68
|
+
this.pageAccessToken = options.pageAccessToken;
|
|
69
|
+
this.apiVersion = options.apiVersion;
|
|
70
|
+
this.baseUrl = (options.baseUrl ?? DEFAULT_GRAPH_API_BASE_URL).replace(/\/+$/u, "");
|
|
71
|
+
this.fetchImpl = options.fetch ?? fetch;
|
|
72
|
+
this.timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
73
|
+
this.logger = options.logger;
|
|
74
|
+
}
|
|
75
|
+
async sendText(recipientId, text, options) {
|
|
76
|
+
const chunks = splitForMessenger(text, options?.maxMessageChars ?? MESSENGER_MAX_MESSAGE_CHARS);
|
|
77
|
+
const messageIds = [];
|
|
78
|
+
for (const chunk of chunks) {
|
|
79
|
+
// Report the chunks already on their way when a later one goes ambiguous,
|
|
80
|
+
// so the caller can describe a partial delivery instead of guessing.
|
|
81
|
+
const data = await this.postDelivery("/me/messages", {
|
|
82
|
+
...basePayload(recipientId, options),
|
|
83
|
+
message: { text: chunk },
|
|
84
|
+
}, messageIds);
|
|
85
|
+
const messageId = readMessageId(data);
|
|
86
|
+
if (messageId !== undefined) {
|
|
87
|
+
messageIds.push(messageId);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return { messageIds };
|
|
91
|
+
}
|
|
92
|
+
async sendAttachmentUrl(recipientId, attachmentType, url, options) {
|
|
93
|
+
const data = await this.postDelivery("/me/messages", {
|
|
94
|
+
...basePayload(recipientId, options),
|
|
95
|
+
message: { attachment: { type: attachmentType, payload: { url, is_reusable: true } } },
|
|
96
|
+
}, []);
|
|
97
|
+
const messageId = readMessageId(data);
|
|
98
|
+
return { messageIds: messageId === undefined ? [] : [messageId] };
|
|
99
|
+
}
|
|
100
|
+
async senderAction(recipientId, action) {
|
|
101
|
+
// Sender actions are replay-safe: `typing_on`/`typing_off`/`mark_seen` are
|
|
102
|
+
// state assignments, so a duplicate is a no-op rather than a second message.
|
|
103
|
+
await this.postReplaySafe("/me/messages", { recipient: { id: recipientId }, sender_action: action });
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A replay-safe POST: retried once on any transient failure, because a
|
|
107
|
+
* duplicate delivery of this request has no user-visible effect.
|
|
108
|
+
*/
|
|
109
|
+
async postReplaySafe(path, payload) {
|
|
110
|
+
try {
|
|
111
|
+
return await this.postOnce(path, payload);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
const retryable = error instanceof MessengerGraphError ? error.retryable : isNetworkError(error);
|
|
115
|
+
if (!retryable) {
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
this.logger?.debug?.("Messenger Graph API request failed; retrying once.", {
|
|
119
|
+
path,
|
|
120
|
+
error: errorText(error),
|
|
121
|
+
});
|
|
122
|
+
await delay(retryDelayFor(error));
|
|
123
|
+
return await this.postOnce(path, payload);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* A message-bearing POST. Meta's Send API has no idempotency key, so the only
|
|
128
|
+
* safe retry is one the server definitively refused before acting (429).
|
|
129
|
+
* Every other transient outcome — timeout, transport failure, 5xx — may have
|
|
130
|
+
* been applied on Meta's side, and is surfaced as
|
|
131
|
+
* {@link MessengerAmbiguousDeliveryError} rather than replayed into a
|
|
132
|
+
* duplicate message.
|
|
133
|
+
*/
|
|
134
|
+
async postDelivery(path, payload, deliveredMessageIds) {
|
|
135
|
+
try {
|
|
136
|
+
return await this.postOnce(path, payload);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
if (error instanceof MessengerGraphError && error.definitivelyRejected) {
|
|
140
|
+
this.logger?.debug?.("Messenger Send API rejected the request before delivery; retrying once.", {
|
|
141
|
+
path,
|
|
142
|
+
status: error.status,
|
|
143
|
+
});
|
|
144
|
+
await delay(retryDelayFor(error));
|
|
145
|
+
try {
|
|
146
|
+
return await this.postOnce(path, payload);
|
|
147
|
+
}
|
|
148
|
+
catch (retryError) {
|
|
149
|
+
throw this.asDeliveryFailure(path, retryError, deliveredMessageIds);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
throw this.asDeliveryFailure(path, error, deliveredMessageIds);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Classify a failed delivery POST as ambiguous (unknown outcome) or a clean rejection. */
|
|
156
|
+
asDeliveryFailure(path, error, deliveredMessageIds) {
|
|
157
|
+
const ambiguous = error instanceof MessengerGraphError
|
|
158
|
+
? error.status >= 500
|
|
159
|
+
: isNetworkError(error);
|
|
160
|
+
if (!ambiguous) {
|
|
161
|
+
return error;
|
|
162
|
+
}
|
|
163
|
+
this.logger?.warn?.("Messenger Send API outcome is unknown; not retrying a non-idempotent send.", {
|
|
164
|
+
path,
|
|
165
|
+
error: errorText(error),
|
|
166
|
+
deliveredMessageIds: deliveredMessageIds.length,
|
|
167
|
+
});
|
|
168
|
+
return new MessengerAmbiguousDeliveryError(path, error, [...deliveredMessageIds]);
|
|
169
|
+
}
|
|
170
|
+
async postOnce(path, payload) {
|
|
171
|
+
const controller = new AbortController();
|
|
172
|
+
const timer = setTimeout(() => controller.abort(), this.timeoutMs);
|
|
173
|
+
try {
|
|
174
|
+
const response = await this.fetchImpl(`${this.baseUrl}/${this.apiVersion}${path}`, {
|
|
175
|
+
method: "POST",
|
|
176
|
+
headers: {
|
|
177
|
+
authorization: `Bearer ${this.pageAccessToken}`,
|
|
178
|
+
"content-type": "application/json",
|
|
179
|
+
},
|
|
180
|
+
body: JSON.stringify(payload),
|
|
181
|
+
signal: controller.signal,
|
|
182
|
+
});
|
|
183
|
+
const text = await response.text();
|
|
184
|
+
let data = text;
|
|
185
|
+
try {
|
|
186
|
+
data = text.length === 0 ? {} : JSON.parse(text);
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Non-JSON error bodies are surfaced as text.
|
|
190
|
+
}
|
|
191
|
+
if (response.status >= 400) {
|
|
192
|
+
throw new MessengerGraphError(response.status, redactGraphError(data, this.pageAccessToken), retryAfterMsFromHeader(response.headers.get("retry-after")));
|
|
193
|
+
}
|
|
194
|
+
return data;
|
|
195
|
+
}
|
|
196
|
+
finally {
|
|
197
|
+
clearTimeout(timer);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function delay(ms) {
|
|
202
|
+
return new Promise((resolvePromise) => setTimeout(resolvePromise, ms));
|
|
203
|
+
}
|
|
204
|
+
function retryDelayFor(error) {
|
|
205
|
+
const advertised = error instanceof MessengerGraphError ? error.retryAfterMs : undefined;
|
|
206
|
+
return advertised ?? RETRY_DELAY_MS;
|
|
207
|
+
}
|
|
208
|
+
/** Parse `Retry-After` (delta-seconds or HTTP-date) into a bounded millisecond delay. */
|
|
209
|
+
export function retryAfterMsFromHeader(header) {
|
|
210
|
+
if (header === null) {
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
const trimmed = header.trim();
|
|
214
|
+
const seconds = Number(trimmed);
|
|
215
|
+
const ms = Number.isFinite(seconds) && trimmed.length > 0
|
|
216
|
+
? seconds * 1_000
|
|
217
|
+
: Date.parse(trimmed) - Date.now();
|
|
218
|
+
if (!Number.isFinite(ms) || ms <= 0) {
|
|
219
|
+
return undefined;
|
|
220
|
+
}
|
|
221
|
+
return Math.min(ms, MAX_RETRY_AFTER_MS);
|
|
222
|
+
}
|
|
223
|
+
function errorText(error) {
|
|
224
|
+
return error instanceof Error ? error.message : String(error);
|
|
225
|
+
}
|
|
226
|
+
function basePayload(recipientId, options) {
|
|
227
|
+
const messagingType = options?.messagingType ?? "RESPONSE";
|
|
228
|
+
return {
|
|
229
|
+
recipient: { id: recipientId },
|
|
230
|
+
messaging_type: messagingType,
|
|
231
|
+
...(messagingType === "MESSAGE_TAG" && options?.tag !== undefined ? { tag: options.tag } : {}),
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
function readMessageId(data) {
|
|
235
|
+
if (typeof data !== "object" || data === null) {
|
|
236
|
+
return undefined;
|
|
237
|
+
}
|
|
238
|
+
const messageId = data.message_id;
|
|
239
|
+
return typeof messageId === "string" && messageId.length > 0 ? messageId : undefined;
|
|
240
|
+
}
|
|
241
|
+
function isNetworkError(error) {
|
|
242
|
+
return error instanceof Error && (error.name === "AbortError" || error.name === "TypeError");
|
|
243
|
+
}
|
|
244
|
+
const REDACTED = "<redacted>";
|
|
245
|
+
/**
|
|
246
|
+
* Keep Graph error bodies inspectable but never echo the configured credential.
|
|
247
|
+
*
|
|
248
|
+
* Meta reflects request content in some error messages, so every retained
|
|
249
|
+
* string is scrubbed of the exact configured token plus the usual bearer and
|
|
250
|
+
* query-parameter carriers. Structured bodies are reduced to an allowlist of
|
|
251
|
+
* scalar diagnostic fields — anything not on it is dropped rather than trusted,
|
|
252
|
+
* so a newly added Graph field cannot leak a credential by default.
|
|
253
|
+
*/
|
|
254
|
+
function redactGraphError(data, pageAccessToken) {
|
|
255
|
+
if (typeof data === "string") {
|
|
256
|
+
return sanitizeErrorString(data, pageAccessToken);
|
|
257
|
+
}
|
|
258
|
+
if (typeof data === "object" && data !== null && "error" in data) {
|
|
259
|
+
const error = data.error;
|
|
260
|
+
if (typeof error === "object" && error !== null) {
|
|
261
|
+
const source = error;
|
|
262
|
+
const out = {};
|
|
263
|
+
for (const key of ["message", "type", "code", "error_subcode", "fbtrace_id"]) {
|
|
264
|
+
const value = sanitizeScalar(source[key], pageAccessToken);
|
|
265
|
+
if (value !== undefined) {
|
|
266
|
+
out[key] = value;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return out;
|
|
270
|
+
}
|
|
271
|
+
return { error: sanitizeScalar(error, pageAccessToken) };
|
|
272
|
+
}
|
|
273
|
+
return typeof data === "object" && data !== null ? {} : sanitizeScalar(data, pageAccessToken);
|
|
274
|
+
}
|
|
275
|
+
/** Retain only bounded scalars, redacted; everything else becomes `undefined`. */
|
|
276
|
+
function sanitizeScalar(value, pageAccessToken) {
|
|
277
|
+
if (typeof value === "string") {
|
|
278
|
+
return sanitizeErrorString(value, pageAccessToken);
|
|
279
|
+
}
|
|
280
|
+
if (typeof value === "number" || typeof value === "boolean") {
|
|
281
|
+
return value;
|
|
282
|
+
}
|
|
283
|
+
return undefined;
|
|
284
|
+
}
|
|
285
|
+
function sanitizeErrorString(value, pageAccessToken) {
|
|
286
|
+
let out = value;
|
|
287
|
+
// The configured credential first: a reflected token is the one value we know
|
|
288
|
+
// exactly, and it may appear with no surrounding `access_token=` marker.
|
|
289
|
+
if (pageAccessToken.length > 0) {
|
|
290
|
+
out = out.split(pageAccessToken).join(REDACTED);
|
|
291
|
+
}
|
|
292
|
+
out = out.replace(/access_token=[^&\s"']+/giu, `access_token=${REDACTED}`);
|
|
293
|
+
out = out.replace(/\bBearer\s+[A-Za-z0-9._~+/-]+=*/giu, `Bearer ${REDACTED}`);
|
|
294
|
+
return out.slice(0, MAX_DETAIL_CHARS);
|
|
295
|
+
}
|
|
296
|
+
//# sourceMappingURL=graph-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-client.js","sourceRoot":"","sources":["../src/graph-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type { AgentRequest, AgentResponder, AgentResponse, MessengerAdapterLogger, MessengerAdapterMessages, MessengerAdapterOptions, MessengerAttachmentIngestOptions, MessengerEventResult, MessengerIgnoredReason, MessengerNotifyOptions, MessengerNotifyResult, MessengerProactiveOptions, MessengerRequestMetadata, MessengerWebhookAttachment, MessengerWebhookEvent, } from "./adapter.js";
|
|
2
|
+
export { DEFAULT_MESSENGER_ATTACHMENT_HOST_SUFFIXES, MESSENGER_CHANNEL_ID, MessengerAdapter, attachmentUrlPolicyRejection, isPublicUnicastAddress, isSafeAttachmentUrl, messengerConversationId, messengerUserIdFromConversation, } from "./adapter.js";
|
|
3
|
+
export { DEFAULT_MESSENGER_API_VERSION, DEFAULT_MESSENGER_HOST, DEFAULT_MESSENGER_PORT, DEFAULT_MESSENGER_WEBHOOK_PATH, MESSENGER_CONFIG_FIELDS, MESSENGER_ENV_ONLY_SECRET_KEYS, MESSENGER_MESSAGING_TYPES, MessengerAdapterConfigError, assertMessengerBindAllowed, assertNoMessengerSecretsInJson, assertValidMessengerAdapterConfig, isLoopbackHost, loadMessengerAdapterConfig, redactMessengerAdapterConfig, } from "./config.js";
|
|
4
|
+
export type { LoadMessengerAdapterConfigInput, MessengerAdapterConfig, MessengerAdapterConfigErrorCode, MessengerAdapterConfigErrorDetails, MessengerMessagingType, RedactedMessengerAdapterConfig, } from "./config.js";
|
|
5
|
+
export { DEFAULT_GRAPH_API_BASE_URL, MessengerAmbiguousDeliveryError, MessengerGraphClient, MessengerGraphError, isMessengerAmbiguousDeliveryError, } from "./graph-client.js";
|
|
6
|
+
export type { MessengerGraphClientLike, MessengerGraphClientLogger, MessengerGraphClientOptions, MessengerSendOptions, MessengerSendResult, MessengerSenderAction, } from "./graph-client.js";
|
|
7
|
+
export type { AgentMessageStream } from "@mono-agent/agent-contracts";
|
|
8
|
+
export { MessengerMessageStream } from "./message-stream.js";
|
|
9
|
+
export type { MessengerMessageStreamLogger, MessengerMessageStreamOptions } from "./message-stream.js";
|
|
10
|
+
export { createMessengerWebhookServer } from "./server.js";
|
|
11
|
+
export type { MessengerWebhookServer, MessengerWebhookServerLogger, MessengerWebhookServerOptions, } from "./server.js";
|
|
12
|
+
export { startMessengerAdapter } from "./start.js";
|
|
13
|
+
export type { MessengerAdapterStartLogger, MessengerAdapterStartResult, StartMessengerAdapterOptions, } from "./start.js";
|
|
14
|
+
export { MESSENGER_MAX_MESSAGE_CHARS, splitForMessenger, stripMarkdownForMessenger, verifyMessengerSignature, } from "./text.js";
|
|
15
|
+
export { createChannelDriver, createMessengerChannelDriver } from "./channel-driver.js";
|
|
16
|
+
export type { MessengerChannelDriverConfig, MessengerChannelDriverOptions } from "./channel-driver.js";
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,YAAY,EACZ,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,gCAAgC,EAChC,oBAAoB,EACpB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,EACrB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,0CAA0C,EAC1C,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,8BAA8B,EAC9B,iCAAiC,EACjC,cAAc,EACd,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,+BAA+B,EAC/B,sBAAsB,EACtB,+BAA+B,EAC/B,kCAAkC,EAClC,sBAAsB,EACtB,8BAA8B,GAC/B,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,iCAAiC,GAClC,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,wBAAwB,EACxB,0BAA0B,EAC1B,2BAA2B,EAC3B,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAEvG,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,YAAY,EACV,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,YAAY,EACV,2BAA2B,EAC3B,2BAA2B,EAC3B,4BAA4B,GAC7B,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AACxF,YAAY,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { DEFAULT_MESSENGER_ATTACHMENT_HOST_SUFFIXES, MESSENGER_CHANNEL_ID, MessengerAdapter, attachmentUrlPolicyRejection, isPublicUnicastAddress, isSafeAttachmentUrl, messengerConversationId, messengerUserIdFromConversation, } from "./adapter.js";
|
|
2
|
+
export { DEFAULT_MESSENGER_API_VERSION, DEFAULT_MESSENGER_HOST, DEFAULT_MESSENGER_PORT, DEFAULT_MESSENGER_WEBHOOK_PATH, MESSENGER_CONFIG_FIELDS, MESSENGER_ENV_ONLY_SECRET_KEYS, MESSENGER_MESSAGING_TYPES, MessengerAdapterConfigError, assertMessengerBindAllowed, assertNoMessengerSecretsInJson, assertValidMessengerAdapterConfig, isLoopbackHost, loadMessengerAdapterConfig, redactMessengerAdapterConfig, } from "./config.js";
|
|
3
|
+
export { DEFAULT_GRAPH_API_BASE_URL, MessengerAmbiguousDeliveryError, MessengerGraphClient, MessengerGraphError, isMessengerAmbiguousDeliveryError, } from "./graph-client.js";
|
|
4
|
+
export { MessengerMessageStream } from "./message-stream.js";
|
|
5
|
+
export { createMessengerWebhookServer } from "./server.js";
|
|
6
|
+
export { startMessengerAdapter } from "./start.js";
|
|
7
|
+
export { MESSENGER_MAX_MESSAGE_CHARS, splitForMessenger, stripMarkdownForMessenger, verifyMessengerSignature, } from "./text.js";
|
|
8
|
+
export { createChannelDriver, createMessengerChannelDriver } from "./channel-driver.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EACL,0CAA0C,EAC1C,oBAAoB,EACpB,gBAAgB,EAChB,4BAA4B,EAC5B,sBAAsB,EACtB,mBAAmB,EACnB,uBAAuB,EACvB,+BAA+B,GAChC,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,sBAAsB,EACtB,8BAA8B,EAC9B,uBAAuB,EACvB,8BAA8B,EAC9B,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,8BAA8B,EAC9B,iCAAiC,EACjC,cAAc,EACd,0BAA0B,EAC1B,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AAUrB,OAAO,EACL,0BAA0B,EAC1B,+BAA+B,EAC/B,oBAAoB,EACpB,mBAAmB,EACnB,iCAAiC,GAClC,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAO3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAOnD,OAAO,EACL,2BAA2B,EAC3B,iBAAiB,EACjB,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,mBAAmB,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type AgentMessageFinishOptions, type AgentMessageStream } from "@mono-agent/agent-contracts";
|
|
2
|
+
import type { MessengerGraphClientLike, MessengerSendOptions } from "./graph-client.js";
|
|
3
|
+
export interface MessengerMessageStreamLogger {
|
|
4
|
+
debug?(message: string, metadata?: Record<string, unknown>): void;
|
|
5
|
+
warn?(message: string, metadata?: Record<string, unknown>): void;
|
|
6
|
+
error?(message: string, metadata?: Record<string, unknown>): void;
|
|
7
|
+
}
|
|
8
|
+
export interface MessengerMessageStreamOptions {
|
|
9
|
+
readonly client: MessengerGraphClientLike;
|
|
10
|
+
readonly recipientId: string;
|
|
11
|
+
readonly send?: MessengerSendOptions;
|
|
12
|
+
readonly maxMessageChars?: number;
|
|
13
|
+
/** Flatten Markdown before sending (Messenger renders plain text). Default true. */
|
|
14
|
+
readonly stripMarkdown?: boolean;
|
|
15
|
+
readonly logger?: MessengerMessageStreamLogger;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Buffered, final-only stream: Messenger cannot edit a sent message, so
|
|
19
|
+
* intermediate deltas are accumulated and the final answer is posted once as
|
|
20
|
+
* one or more 2,000-character Send API messages.
|
|
21
|
+
*/
|
|
22
|
+
export declare class MessengerMessageStream implements AgentMessageStream {
|
|
23
|
+
private readonly client;
|
|
24
|
+
private readonly recipientId;
|
|
25
|
+
private readonly send;
|
|
26
|
+
private readonly stripMarkdown;
|
|
27
|
+
private readonly logger;
|
|
28
|
+
private currentText;
|
|
29
|
+
private finished;
|
|
30
|
+
constructor(options: MessengerMessageStreamOptions);
|
|
31
|
+
status(): Promise<void>;
|
|
32
|
+
append(delta: string): Promise<void>;
|
|
33
|
+
replace(text: string): Promise<void>;
|
|
34
|
+
finish(finalText?: string, options?: AgentMessageFinishOptions): Promise<void>;
|
|
35
|
+
private assertOpen;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=message-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-stream.d.ts","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,EACxB,MAAM,6BAA6B,CAAC;AAErC,OAAO,KAAK,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGxF,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,oFAAoF;IACpF,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;CAChD;AAED;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2B;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA2C;IAClE,OAAO,CAAC,WAAW,CAAM;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAEb,OAAO,EAAE,6BAA6B;IAQ5C,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAKvB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpC,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBpF,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { DEFAULT_EMPTY_FINAL_TEXT, appendReplyPartFallback, normalizeTrailing, } from "@mono-agent/agent-contracts";
|
|
2
|
+
import { MESSENGER_MAX_MESSAGE_CHARS, stripMarkdownForMessenger } from "./text.js";
|
|
3
|
+
/**
|
|
4
|
+
* Buffered, final-only stream: Messenger cannot edit a sent message, so
|
|
5
|
+
* intermediate deltas are accumulated and the final answer is posted once as
|
|
6
|
+
* one or more 2,000-character Send API messages.
|
|
7
|
+
*/
|
|
8
|
+
export class MessengerMessageStream {
|
|
9
|
+
client;
|
|
10
|
+
recipientId;
|
|
11
|
+
send;
|
|
12
|
+
stripMarkdown;
|
|
13
|
+
logger;
|
|
14
|
+
currentText = "";
|
|
15
|
+
finished = false;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.client = options.client;
|
|
18
|
+
this.recipientId = options.recipientId;
|
|
19
|
+
this.send = { ...options.send, maxMessageChars: options.maxMessageChars ?? MESSENGER_MAX_MESSAGE_CHARS };
|
|
20
|
+
this.stripMarkdown = options.stripMarkdown !== false;
|
|
21
|
+
this.logger = options.logger;
|
|
22
|
+
}
|
|
23
|
+
async status() {
|
|
24
|
+
// Typing indicators are owned by the adapter; Messenger has no status message to edit.
|
|
25
|
+
this.assertOpen();
|
|
26
|
+
}
|
|
27
|
+
async append(delta) {
|
|
28
|
+
this.assertOpen();
|
|
29
|
+
this.currentText += delta;
|
|
30
|
+
}
|
|
31
|
+
async replace(text) {
|
|
32
|
+
this.assertOpen();
|
|
33
|
+
this.currentText = text;
|
|
34
|
+
}
|
|
35
|
+
async finish(finalText, options) {
|
|
36
|
+
if (this.finished) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
this.finished = true;
|
|
40
|
+
const deliveredText = appendReplyPartFallback(finalText, options?.parts);
|
|
41
|
+
if (deliveredText !== undefined) {
|
|
42
|
+
this.currentText = deliveredText;
|
|
43
|
+
}
|
|
44
|
+
const text = normalizeTrailing(this.currentText, DEFAULT_EMPTY_FINAL_TEXT);
|
|
45
|
+
const rendered = this.stripMarkdown ? normalizeTrailing(stripMarkdownForMessenger(text), DEFAULT_EMPTY_FINAL_TEXT) : text;
|
|
46
|
+
try {
|
|
47
|
+
await this.client.sendText(this.recipientId, rendered, this.send);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
this.logger?.error?.("Messenger stream send failed.", {
|
|
51
|
+
error: error instanceof Error ? error.message : String(error),
|
|
52
|
+
});
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
assertOpen() {
|
|
57
|
+
if (this.finished) {
|
|
58
|
+
throw new Error("Cannot write to a finished MessengerMessageStream.");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=message-stream.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-stream.js","sourceRoot":"","sources":["../src/message-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,GAGlB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAC;AAkBnF;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IAChB,MAAM,CAA2B;IACjC,WAAW,CAAS;IACpB,IAAI,CAAuB;IAC3B,aAAa,CAAU;IACvB,MAAM,CAA2C;IAC1D,WAAW,GAAG,EAAE,CAAC;IACjB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAAY,OAAsC;QAChD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,eAAe,EAAE,OAAO,CAAC,eAAe,IAAI,2BAA2B,EAAE,CAAC;QACzG,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,KAAK,KAAK,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,MAAM;QACV,uFAAuF;QACvF,IAAI,CAAC,UAAU,EAAE,CAAC;IACpB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAa;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,IAAI,KAAK,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,IAAY;QACxB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAkB,EAAE,OAAmC;QAClE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,MAAM,aAAa,GAAG,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACzE,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,GAAG,aAAa,CAAC;QACnC,CAAC;QACD,MAAM,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,iBAAiB,CAAC,yBAAyB,CAAC,IAAI,CAAC,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1H,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,+BAA+B,EAAE;gBACpD,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,UAAU;QAChB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;CACF"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export interface MessengerWebhookServerLogger {
|
|
2
|
+
debug?(message: string, metadata?: Record<string, unknown>): void;
|
|
3
|
+
warn?(message: string, metadata?: Record<string, unknown>): void;
|
|
4
|
+
error?(message: string, metadata?: Record<string, unknown>): void;
|
|
5
|
+
}
|
|
6
|
+
export interface MessengerWebhookServerOptions {
|
|
7
|
+
readonly host: string;
|
|
8
|
+
readonly port: number;
|
|
9
|
+
readonly webhookPath: string;
|
|
10
|
+
readonly verifyToken: string;
|
|
11
|
+
readonly appSecret: string;
|
|
12
|
+
/**
|
|
13
|
+
* Explicit opt-in for a non-loopback bind. Required (not optional-defaulting)
|
|
14
|
+
* so a direct caller of this low-level factory has to make the same decision
|
|
15
|
+
* the config loader does; `start()` re-checks it immediately before `listen()`.
|
|
16
|
+
*/
|
|
17
|
+
readonly allowNonLoopback: boolean;
|
|
18
|
+
readonly maxBodyBytes?: number;
|
|
19
|
+
readonly logger?: MessengerWebhookServerLogger;
|
|
20
|
+
/** Called after the 200 reply; processing must not delay Meta's delivery ack. */
|
|
21
|
+
readonly onPayload: (payload: unknown) => Promise<unknown> | unknown;
|
|
22
|
+
/** Called when the listening server dies after a successful start. */
|
|
23
|
+
readonly onServerError?: (reason: string) => void;
|
|
24
|
+
}
|
|
25
|
+
export interface MessengerWebhookServer {
|
|
26
|
+
start(): Promise<{
|
|
27
|
+
readonly host: string;
|
|
28
|
+
readonly port: number;
|
|
29
|
+
}>;
|
|
30
|
+
stop(): Promise<void>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Meta webhook endpoint: `GET <path>` answers the `hub.challenge` handshake,
|
|
34
|
+
* `POST <path>` validates `X-Hub-Signature-256` over the raw body, and
|
|
35
|
+
* `GET <path>/health` reports liveness. Everything else is 404.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createMessengerWebhookServer(options: MessengerWebhookServerOptions): MessengerWebhookServer;
|
|
38
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,4BAA4B;IAC3C,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAClE,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACjE,KAAK,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CACnE;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,4BAA4B,CAAC;IAC/C,iFAAiF;IACjF,QAAQ,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;IACrE,sEAAsE;IACtE,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,IAAI,OAAO,CAAC;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,6BAA6B,GAAG,sBAAsB,CAyH3G"}
|