aamp-sdk 0.1.20 → 0.1.21

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.
@@ -0,0 +1,158 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ function normalizeMailbox(value) {
3
+ const mailbox = value.trim().toLowerCase();
4
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mailbox)) {
5
+ throw new Error(`Invalid AAMP mailbox in pairing URL: ${value}`);
6
+ }
7
+ return mailbox;
8
+ }
9
+ export function normalizeDispatchContextRules(rules) {
10
+ if (!rules)
11
+ return undefined;
12
+ const normalized = Object.fromEntries(Object.entries(rules)
13
+ .map(([key, values]) => [
14
+ key.trim().toLowerCase(),
15
+ (Array.isArray(values) ? values : [])
16
+ .map((value) => value.trim())
17
+ .filter(Boolean),
18
+ ])
19
+ .filter(([key, values]) => Boolean(key) && values.length > 0));
20
+ return Object.keys(normalized).length > 0 ? normalized : undefined;
21
+ }
22
+ function encodeBase64UrlJson(value) {
23
+ return Buffer.from(JSON.stringify(value), 'utf8').toString('base64url');
24
+ }
25
+ function decodeDispatchContextRules(value) {
26
+ const candidates = [
27
+ () => Buffer.from(value, 'base64url').toString('utf8'),
28
+ () => value,
29
+ ];
30
+ for (const read of candidates) {
31
+ try {
32
+ const parsed = JSON.parse(read());
33
+ return normalizeDispatchContextRules(parsed);
34
+ }
35
+ catch {
36
+ // Try the next supported encoding.
37
+ }
38
+ }
39
+ throw new Error('Invalid dispatch_context_rules in pairing URL');
40
+ }
41
+ export function buildPairingUrl(payload) {
42
+ const mailbox = normalizeMailbox(payload.mailbox);
43
+ const pairCode = payload.pairCode.trim();
44
+ if (!pairCode)
45
+ throw new Error('pairCode cannot be empty');
46
+ const url = new URL('aamp://connect');
47
+ url.searchParams.set('mailbox', mailbox);
48
+ url.searchParams.set('pair_code', pairCode);
49
+ const rules = normalizeDispatchContextRules(payload.dispatchContextRules);
50
+ if (rules) {
51
+ url.searchParams.set('dispatch_context_rules', encodeBase64UrlJson(rules));
52
+ }
53
+ return url.toString();
54
+ }
55
+ export function createPairingCode(options) {
56
+ const pairCode = options.pairCode?.trim() || randomBytes(6).toString('base64url');
57
+ const dispatchContextRules = normalizeDispatchContextRules(options.dispatchContextRules);
58
+ return {
59
+ mailbox: normalizeMailbox(options.mailbox),
60
+ pairCode,
61
+ expiresAt: new Date(Date.now() + (options.ttlSeconds ?? 300) * 1000).toISOString(),
62
+ connectUrl: buildPairingUrl({
63
+ mailbox: options.mailbox,
64
+ pairCode,
65
+ ...(dispatchContextRules ? { dispatchContextRules } : {}),
66
+ }),
67
+ ...(dispatchContextRules ? { dispatchContextRules } : {}),
68
+ };
69
+ }
70
+ export function parsePairingUrl(input) {
71
+ let url;
72
+ try {
73
+ url = new URL(input.trim());
74
+ }
75
+ catch {
76
+ throw new Error('Invalid pairing URL');
77
+ }
78
+ if (url.protocol !== 'aamp:' || url.hostname !== 'connect') {
79
+ throw new Error('Pairing URL must start with aamp://connect');
80
+ }
81
+ const mailbox = url.searchParams.get('mailbox') ?? '';
82
+ const pairCode = url.searchParams.get('pair_code') ?? '';
83
+ if (!pairCode.trim())
84
+ throw new Error('Pairing URL is missing pair_code');
85
+ const rawRules = url.searchParams.get('dispatch_context_rules')
86
+ ?? url.searchParams.get('dispatchContextRules');
87
+ const dispatchContextRules = rawRules
88
+ ? decodeDispatchContextRules(rawRules)
89
+ : undefined;
90
+ return {
91
+ mailbox: normalizeMailbox(mailbox),
92
+ pairCode: pairCode.trim(),
93
+ ...(dispatchContextRules ? { dispatchContextRules } : {}),
94
+ };
95
+ }
96
+ export function isPairingUrl(input) {
97
+ try {
98
+ parsePairingUrl(input);
99
+ return true;
100
+ }
101
+ catch {
102
+ return false;
103
+ }
104
+ }
105
+ export function consumePairingCode(state, options) {
106
+ if (state.consumedAt)
107
+ return null;
108
+ if (normalizeMailbox(state.mailbox) !== normalizeMailbox(options.mailbox))
109
+ return null;
110
+ if (state.pairCode !== options.pairCode.trim())
111
+ return null;
112
+ if (new Date(state.expiresAt).getTime() <= (options.now ?? new Date()).getTime())
113
+ return null;
114
+ return {
115
+ ...state,
116
+ pairCode: '',
117
+ connectUrl: '',
118
+ consumedAt: (options.now ?? new Date()).toISOString(),
119
+ };
120
+ }
121
+ export function createPairedSenderPolicy(request, pairedAt = new Date()) {
122
+ return {
123
+ sender: normalizeMailbox(request.from),
124
+ dispatchContextRules: normalizeDispatchContextRules(request.dispatchContextRules) ?? {},
125
+ pairedAt: pairedAt.toISOString(),
126
+ };
127
+ }
128
+ export function upsertPairedSenderPolicy(policies, policy) {
129
+ const sender = normalizeMailbox(policy.sender);
130
+ return [
131
+ ...policies.filter((item) => normalizeMailbox(item.sender) !== sender),
132
+ {
133
+ ...policy,
134
+ sender,
135
+ dispatchContextRules: normalizeDispatchContextRules(policy.dispatchContextRules) ?? {},
136
+ },
137
+ ];
138
+ }
139
+ export function matchPairedSenderPolicy(policies, sender, dispatchContext) {
140
+ if (policies.length === 0) {
141
+ return { allowed: false, reason: 'no paired sender policies configured' };
142
+ }
143
+ const normalizedSender = normalizeMailbox(sender);
144
+ const policy = policies.find((item) => normalizeMailbox(item.sender) === normalizedSender);
145
+ if (!policy) {
146
+ return { allowed: false, reason: `sender ${sender} is not paired` };
147
+ }
148
+ for (const [key, allowedValues] of Object.entries(policy.dispatchContextRules ?? {})) {
149
+ if (!Array.isArray(allowedValues) || allowedValues.length === 0)
150
+ continue;
151
+ const observed = dispatchContext?.[key];
152
+ if (!observed || !allowedValues.includes(observed)) {
153
+ return { allowed: false, reason: `dispatchContext does not match paired sender policy for ${sender}` };
154
+ }
155
+ }
156
+ return { allowed: true };
157
+ }
158
+ //# sourceMappingURL=pairing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pairing.js","sourceRoot":"","sources":["../src/pairing.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts CHANGED
@@ -37,7 +37,6 @@ export declare function buildDispatchHeaders(params: {
37
37
  priority?: TaskDispatch['priority'];
38
38
  expiresAt?: string;
39
39
  sessionKey?: string;
40
- contextLinks: string[];
41
40
  dispatchContext?: Record<string, string>;
42
41
  parentTaskId?: string;
43
42
  }): Record<string, string>;
@@ -54,6 +53,16 @@ export declare function buildStreamOpenedHeaders(opts: {
54
53
  taskId: string;
55
54
  streamId: string;
56
55
  }): Record<string, string>;
56
+ export declare function buildPairRequestHeaders(opts: {
57
+ taskId: string;
58
+ pairCode: string;
59
+ dispatchContextRules?: Record<string, string[]>;
60
+ }): Record<string, string>;
61
+ export declare function buildPairRespondHeaders(opts: {
62
+ taskId: string;
63
+ success: boolean;
64
+ reason?: string;
65
+ }): Record<string, string>;
57
66
  /**
58
67
  * Build AAMP headers for a task.result email
59
68
  */
package/dist/parser.js CHANGED
@@ -162,6 +162,25 @@ function encodeStructuredResult(value) {
162
162
  .replace(/\//g, '_')
163
163
  .replace(/=+$/g, '');
164
164
  }
165
+ function decodeBase64UrlJson(value) {
166
+ if (!value)
167
+ return undefined;
168
+ try {
169
+ const normalized = value.replace(/-/g, '+').replace(/_/g, '/');
170
+ const padding = normalized.length % 4 === 0 ? '' : '='.repeat(4 - (normalized.length % 4));
171
+ return JSON.parse(Buffer.from(normalized + padding, 'base64').toString('utf-8'));
172
+ }
173
+ catch {
174
+ return undefined;
175
+ }
176
+ }
177
+ function encodeBase64UrlJson(value) {
178
+ return Buffer.from(JSON.stringify(value), 'utf-8')
179
+ .toString('base64')
180
+ .replace(/\+/g, '-')
181
+ .replace(/\//g, '_')
182
+ .replace(/=+$/g, '');
183
+ }
165
184
  /**
166
185
  * Parse AAMP headers from an email's header map.
167
186
  * Returns null if this email is not an AAMP message.
@@ -179,7 +198,6 @@ export function parseAampHeaders(meta) {
179
198
  const to = meta.to.replace(/^<|>$/g, '');
180
199
  const decodedSubject = decodeMimeEncodedWords(meta.subject);
181
200
  if (intent === 'task.dispatch') {
182
- const contextLinksStr = getAampHeader(headers, AAMP_HEADER.CONTEXT_LINKS) ?? '';
183
201
  const dispatchContext = parseDispatchContextHeader(getAampHeader(headers, AAMP_HEADER.DISPATCH_CONTEXT));
184
202
  const sessionKey = getAampHeader(headers, AAMP_HEADER.SESSION_KEY);
185
203
  const parentTaskId = getAampHeader(headers, AAMP_HEADER.PARENT_TASK_ID);
@@ -193,9 +211,6 @@ export function parseAampHeaders(meta) {
193
211
  title: decodedSubject.replace(/^\[AAMP Task\]\s*/, '').trim() || 'Untitled Task',
194
212
  priority: priority === 'urgent' || priority === 'high' ? priority : 'normal',
195
213
  ...(expiresAt ? { expiresAt } : {}),
196
- contextLinks: contextLinksStr
197
- ? contextLinksStr.split(',').map((s) => s.trim()).filter(Boolean)
198
- : [],
199
214
  ...(dispatchContext ? { dispatchContext } : {}),
200
215
  ...(parentTaskId ? { parentTaskId } : {}),
201
216
  from,
@@ -285,6 +300,43 @@ export function parseAampHeaders(meta) {
285
300
  };
286
301
  return streamOpened;
287
302
  }
303
+ if (intent === 'pair.request') {
304
+ const pairCode = getAampHeader(headers, AAMP_HEADER.PAIR_CODE) ?? '';
305
+ if (!pairCode)
306
+ return null;
307
+ const pairRequest = {
308
+ protocolVersion,
309
+ intent: 'pair.request',
310
+ taskId,
311
+ pairCode,
312
+ dispatchContextRules: decodeBase64UrlJson(getAampHeader(headers, AAMP_HEADER.DISPATCH_CONTEXT_RULES)) ?? {},
313
+ from,
314
+ to,
315
+ messageId: meta.messageId,
316
+ subject: meta.subject,
317
+ bodyText: '',
318
+ };
319
+ return pairRequest;
320
+ }
321
+ if (intent === 'pair.respond') {
322
+ const rawStatus = getAampHeader(headers, AAMP_HEADER.STATUS);
323
+ const status = rawStatus === 'completed' ? 'completed' : 'rejected';
324
+ const reason = getAampHeader(headers, AAMP_HEADER.ERROR_MSG) || undefined;
325
+ const pairRespond = {
326
+ protocolVersion,
327
+ intent: 'pair.respond',
328
+ taskId,
329
+ status,
330
+ success: status === 'completed',
331
+ reason,
332
+ from,
333
+ to,
334
+ messageId: meta.messageId,
335
+ subject: meta.subject,
336
+ bodyText: normalizeBodyText(meta.bodyText),
337
+ };
338
+ return pairRespond;
339
+ }
288
340
  if (intent === 'card.query') {
289
341
  const cardQuery = {
290
342
  protocolVersion,
@@ -331,9 +383,6 @@ export function buildDispatchHeaders(params) {
331
383
  if (params.sessionKey?.trim()) {
332
384
  headers[AAMP_HEADER.SESSION_KEY] = params.sessionKey.trim();
333
385
  }
334
- if (params.contextLinks.length > 0) {
335
- headers[AAMP_HEADER.CONTEXT_LINKS] = params.contextLinks.join(',');
336
- }
337
386
  const dispatchContext = serializeDispatchContextHeader(params.dispatchContext);
338
387
  if (dispatchContext) {
339
388
  headers[AAMP_HEADER.DISPATCH_CONTEXT] = dispatchContext;
@@ -368,6 +417,27 @@ export function buildStreamOpenedHeaders(opts) {
368
417
  [AAMP_HEADER.STREAM_ID]: opts.streamId,
369
418
  };
370
419
  }
420
+ export function buildPairRequestHeaders(opts) {
421
+ return {
422
+ [AAMP_HEADER.VERSION]: AAMP_PROTOCOL_VERSION,
423
+ [AAMP_HEADER.INTENT]: 'pair.request',
424
+ [AAMP_HEADER.TASK_ID]: opts.taskId,
425
+ [AAMP_HEADER.PAIR_CODE]: opts.pairCode,
426
+ [AAMP_HEADER.DISPATCH_CONTEXT_RULES]: encodeBase64UrlJson(opts.dispatchContextRules ?? {}),
427
+ };
428
+ }
429
+ export function buildPairRespondHeaders(opts) {
430
+ const headers = {
431
+ [AAMP_HEADER.VERSION]: AAMP_PROTOCOL_VERSION,
432
+ [AAMP_HEADER.INTENT]: 'pair.respond',
433
+ [AAMP_HEADER.TASK_ID]: opts.taskId,
434
+ [AAMP_HEADER.STATUS]: opts.success ? 'completed' : 'rejected',
435
+ };
436
+ if (!opts.success && opts.reason?.trim()) {
437
+ headers[AAMP_HEADER.ERROR_MSG] = opts.reason.replace(/[\r\n]/g, ' ').trim();
438
+ }
439
+ return headers;
440
+ }
371
441
  /**
372
442
  * Build AAMP headers for a task.result email
373
443
  */
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Sends AAMP protocol emails via SMTP (Stalwart submission port 587).
5
5
  */
6
- import type { SendTaskOptions, SendResultOptions, SendHelpOptions, SendCardQueryOptions, SendCardResponseOptions, SendCancelOptions, AampFetch } from './types.js';
6
+ import type { SendTaskOptions, SendResultOptions, SendHelpOptions, SendCardQueryOptions, SendCardResponseOptions, SendCancelOptions, AampFetch, SendPairRequestOptions, SendPairRespondOptions } from './types.js';
7
7
  export interface SmtpConfig {
8
8
  host: string;
9
9
  port: number;
@@ -89,6 +89,11 @@ export declare class SmtpSender {
89
89
  streamId: string;
90
90
  inReplyTo?: string;
91
91
  }): Promise<void>;
92
+ sendPairRequest(opts: SendPairRequestOptions): Promise<{
93
+ taskId: string;
94
+ messageId: string;
95
+ }>;
96
+ sendPairRespond(opts: SendPairRespondOptions): Promise<void>;
92
97
  sendCardQuery(opts: SendCardQueryOptions): Promise<{
93
98
  taskId: string;
94
99
  messageId: string;
@@ -7,7 +7,26 @@ import { createTransport } from 'nodemailer';
7
7
  import { randomUUID } from 'crypto';
8
8
  /** Strip CR/LF to prevent email header injection */
9
9
  const sanitize = (s) => s.replace(/[\r\n]/g, ' ').trim();
10
- import { buildDispatchHeaders, buildCancelHeaders, buildResultHeaders, buildHelpHeaders, buildAckHeaders, buildStreamOpenedHeaders, buildCardQueryHeaders, buildCardResponseHeaders, } from './parser.js';
10
+ const HTTP_SEND_MAX_ATTEMPTS = 4;
11
+ const HTTP_SEND_RETRY_BASE_DELAY_MS = 500;
12
+ function sleep(ms) {
13
+ return new Promise((resolve) => setTimeout(resolve, ms));
14
+ }
15
+ function isRetryableHttpStatus(status) {
16
+ return status === 408 || status === 409 || status === 425 || status === 429 || status >= 500;
17
+ }
18
+ function describeError(err) {
19
+ if (!(err instanceof Error))
20
+ return String(err);
21
+ const details = err;
22
+ const parts = [err.message];
23
+ if (details.code)
24
+ parts.push(`code=${details.code}`);
25
+ if (details.cause instanceof Error)
26
+ parts.push(`cause=${describeError(details.cause)}`);
27
+ return parts.join(' | ');
28
+ }
29
+ import { buildDispatchHeaders, buildCancelHeaders, buildResultHeaders, buildHelpHeaders, buildAckHeaders, buildStreamOpenedHeaders, buildPairRequestHeaders, buildPairRespondHeaders, buildCardQueryHeaders, buildCardResponseHeaders, } from './parser.js';
11
30
  export function deriveMailboxServiceDefaults(email, baseUrl) {
12
31
  const domain = email.split('@')[1]?.trim();
13
32
  const resolvedBaseUrl = baseUrl?.trim() || (domain ? `https://${domain}` : undefined);
@@ -101,31 +120,46 @@ export class SmtpSender {
101
120
  if (!this.config.authToken) {
102
121
  throw new Error('HTTP send fallback is not configured');
103
122
  }
104
- const apiUrl = new URL(await this.resolveAampApiUrl());
105
- apiUrl.searchParams.set('action', 'aamp.mailbox.send');
106
- const res = await this.fetch(apiUrl, {
107
- method: 'POST',
108
- headers: {
109
- Authorization: `Basic ${this.config.authToken}`,
110
- 'Content-Type': 'application/json',
111
- },
112
- body: JSON.stringify({
113
- to: opts.to,
114
- subject: opts.subject,
115
- text: opts.text,
116
- aampHeaders: opts.aampHeaders,
117
- attachments: opts.attachments?.map((a) => ({
118
- filename: a.filename,
119
- contentType: a.contentType,
120
- content: typeof a.content === 'string' ? a.content : a.content.toString('base64'),
121
- })),
122
- }),
123
- });
124
- const data = await res.json().catch(() => ({}));
125
- if (!res.ok) {
126
- throw new Error(data.details || `HTTP send failed: ${res.status}`);
123
+ let lastError = null;
124
+ for (let attempt = 1; attempt <= HTTP_SEND_MAX_ATTEMPTS; attempt += 1) {
125
+ const apiUrl = new URL(await this.resolveAampApiUrl());
126
+ apiUrl.searchParams.set('action', 'aamp.mailbox.send');
127
+ try {
128
+ const res = await this.fetch(apiUrl, {
129
+ method: 'POST',
130
+ headers: {
131
+ Authorization: `Basic ${this.config.authToken}`,
132
+ 'Content-Type': 'application/json',
133
+ },
134
+ body: JSON.stringify({
135
+ to: opts.to,
136
+ subject: opts.subject,
137
+ text: opts.text,
138
+ aampHeaders: opts.aampHeaders,
139
+ attachments: opts.attachments?.map((a) => ({
140
+ filename: a.filename,
141
+ contentType: a.contentType,
142
+ content: typeof a.content === 'string' ? a.content : a.content.toString('base64'),
143
+ })),
144
+ }),
145
+ });
146
+ const data = await res.json().catch(() => ({}));
147
+ if (res.ok)
148
+ return { messageId: data.messageId };
149
+ lastError = new Error(data.details || `HTTP send failed: ${res.status}`);
150
+ if (!isRetryableHttpStatus(res.status) || attempt === HTTP_SEND_MAX_ATTEMPTS)
151
+ break;
152
+ }
153
+ catch (err) {
154
+ lastError = err instanceof Error ? err : new Error(String(err));
155
+ if (attempt === HTTP_SEND_MAX_ATTEMPTS) {
156
+ lastError = new Error(`HTTP send failed after ${attempt} attempts: ${describeError(lastError)}`);
157
+ break;
158
+ }
159
+ }
160
+ await sleep(HTTP_SEND_RETRY_BASE_DELAY_MS * attempt);
127
161
  }
128
- return { messageId: data.messageId };
162
+ throw lastError ?? new Error('HTTP send failed');
129
163
  }
130
164
  canPersistSentCopy() {
131
165
  if (this.config.persistSentCopy === false)
@@ -273,7 +307,6 @@ export class SmtpSender {
273
307
  taskId,
274
308
  priority: opts.priority,
275
309
  expiresAt: opts.expiresAt,
276
- contextLinks: opts.contextLinks ?? [],
277
310
  dispatchContext: opts.dispatchContext,
278
311
  parentTaskId: opts.parentTaskId,
279
312
  });
@@ -286,9 +319,6 @@ export class SmtpSender {
286
319
  `Task ID: ${taskId}`,
287
320
  `Priority: ${opts.priority ?? 'normal'}`,
288
321
  opts.expiresAt ? `Expires At: ${opts.expiresAt}` : `Expires At: none`,
289
- opts.contextLinks?.length
290
- ? `Context:\n${opts.contextLinks.map((l) => ` ${l}`).join('\n')}`
291
- : '',
292
322
  opts.bodyText ?? '',
293
323
  ``,
294
324
  `--- This email was sent by AAMP. Reply directly to submit your result. ---`,
@@ -634,6 +664,110 @@ export class SmtpSender {
634
664
  references: opts.inReplyTo,
635
665
  });
636
666
  }
667
+ async sendPairRequest(opts) {
668
+ const taskId = opts.taskId ?? randomUUID();
669
+ const aampHeaders = buildPairRequestHeaders({
670
+ taskId,
671
+ pairCode: opts.pairCode,
672
+ dispatchContextRules: opts.dispatchContextRules ?? {},
673
+ });
674
+ const text = [
675
+ 'AAMP Pair Request',
676
+ '',
677
+ `Pair code: ${opts.pairCode}`,
678
+ `Dispatch context rules: ${JSON.stringify(opts.dispatchContextRules ?? {})}`,
679
+ ].join('\n');
680
+ const mailOpts = {
681
+ from: this.config.user,
682
+ to: opts.to,
683
+ subject: '[AAMP Pair] Connection request',
684
+ text,
685
+ headers: aampHeaders,
686
+ };
687
+ if (this.shouldUseHttpFallback(opts.to)) {
688
+ const info = await this.sendViaHttp({
689
+ to: opts.to,
690
+ subject: mailOpts.subject,
691
+ text,
692
+ aampHeaders,
693
+ });
694
+ await this.saveToSentBestEffort({
695
+ from: this.config.user,
696
+ to: opts.to,
697
+ subject: mailOpts.subject,
698
+ text,
699
+ aampHeaders,
700
+ messageId: info.messageId,
701
+ });
702
+ return { taskId, messageId: info.messageId ?? '' };
703
+ }
704
+ const info = await this.transport.sendMail(mailOpts);
705
+ await this.saveToSentBestEffort({
706
+ from: this.config.user,
707
+ to: opts.to,
708
+ subject: mailOpts.subject,
709
+ text,
710
+ aampHeaders,
711
+ messageId: info.messageId,
712
+ });
713
+ return { taskId, messageId: info.messageId ?? '' };
714
+ }
715
+ async sendPairRespond(opts) {
716
+ const aampHeaders = buildPairRespondHeaders({
717
+ taskId: opts.taskId,
718
+ success: opts.success,
719
+ reason: opts.reason,
720
+ });
721
+ const status = opts.success ? 'completed' : 'rejected';
722
+ const text = [
723
+ 'AAMP Pair Response',
724
+ '',
725
+ `Task ID: ${opts.taskId}`,
726
+ `Status: ${status}`,
727
+ ...(opts.reason?.trim() ? ['', `Reason: ${opts.reason.trim()}`] : []),
728
+ ].join('\n');
729
+ const mailOpts = {
730
+ from: this.config.user,
731
+ to: opts.to,
732
+ subject: `[AAMP Pair] ${status}`,
733
+ text,
734
+ headers: aampHeaders,
735
+ };
736
+ if (opts.inReplyTo) {
737
+ mailOpts.inReplyTo = opts.inReplyTo;
738
+ mailOpts.references = opts.inReplyTo;
739
+ }
740
+ if (this.shouldUseHttpFallback(opts.to)) {
741
+ const info = await this.sendViaHttp({
742
+ to: opts.to,
743
+ subject: mailOpts.subject,
744
+ text,
745
+ aampHeaders,
746
+ });
747
+ await this.saveToSentBestEffort({
748
+ from: this.config.user,
749
+ to: opts.to,
750
+ subject: mailOpts.subject,
751
+ text,
752
+ aampHeaders,
753
+ messageId: info.messageId,
754
+ inReplyTo: opts.inReplyTo,
755
+ references: opts.inReplyTo,
756
+ });
757
+ return;
758
+ }
759
+ const info = await this.transport.sendMail(mailOpts);
760
+ await this.saveToSentBestEffort({
761
+ from: this.config.user,
762
+ to: opts.to,
763
+ subject: mailOpts.subject,
764
+ text,
765
+ aampHeaders,
766
+ messageId: info.messageId,
767
+ inReplyTo: opts.inReplyTo,
768
+ references: opts.inReplyTo,
769
+ });
770
+ }
637
771
  async sendCardQuery(opts) {
638
772
  const taskId = opts.taskId ?? randomUUID();
639
773
  const aampHeaders = buildCardQueryHeaders({ taskId });