1id 0.10.1 → 1.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.
@@ -0,0 +1,619 @@
1
+ /**
2
+ * MailPal convenience functions for the 1id.com Node.js SDK.
3
+ *
4
+ * import { send, activate, inbox, get_contact_token } from "1id/mailpal";
5
+ *
6
+ * // One-call attested email sending
7
+ * const result = await send({
8
+ * to: ["recipient@example.com"],
9
+ * subject: "Hello from my AI agent",
10
+ * text_body: "Message body",
11
+ * });
12
+ *
13
+ * // Account activation
14
+ * const account = await activate();
15
+ *
16
+ * // Read inbox
17
+ * const messages = await inbox();
18
+ *
19
+ * // Get contact token for email headers
20
+ * const token = await get_contact_token();
21
+ *
22
+ * Architecture (v2 -- local MIME assembly + direct SMTP):
23
+ *
24
+ * send() builds the MIME message locally, extracts the exact wire-format
25
+ * bytes (including RFC 2047 encoding), computes attestation nonces from
26
+ * those bytes, injects attestation headers, then submits the fully-assembled
27
+ * message directly to smtp.mailpal.com via SMTP with STARTTLS + app_password.
28
+ *
29
+ * This guarantees the SDK signs the same byte-for-byte header values that the
30
+ * receiving milter will verify, eliminating canonicalization mismatches.
31
+ */
32
+ import * as net from "node:net";
33
+ import * as tls from "node:tls";
34
+ import * as crypto from "node:crypto";
35
+ import * as https from "node:https";
36
+ import * as http from "node:http";
37
+ import { get_token } from "./auth.js";
38
+ import { load_credentials, save_credentials } from "./credentials.js";
39
+ import { prepareAttestation, prepare_direct_hardware_attestation, } from "./attestation.js";
40
+ import { AuthenticationError, NetworkError, NotEnrolledError } from "./exceptions.js";
41
+ const _MAILPAL_API_BASE_URL = "https://mailpal.com";
42
+ const _HTTP_TIMEOUT_MILLISECONDS = 30_000;
43
+ const _USER_AGENT = "oneid-sdk-node/1.1.0";
44
+ const _SMTP_HOST = "smtp.mailpal.com";
45
+ const _SMTP_PORT_STARTTLS = 587;
46
+ const _SMTP_TIMEOUT_MILLISECONDS = 30_000;
47
+ function _make_mailpal_http_request(method, url_string, body_json, auth_headers, timeout_milliseconds = _HTTP_TIMEOUT_MILLISECONDS) {
48
+ return new Promise((resolve, reject) => {
49
+ const url = new URL(url_string);
50
+ const is_https = url.protocol === "https:";
51
+ const transport = is_https ? https : http;
52
+ const request_headers = {
53
+ "User-Agent": _USER_AGENT,
54
+ "Accept": "application/json",
55
+ ...auth_headers,
56
+ };
57
+ let request_body_string;
58
+ if (body_json != null) {
59
+ request_body_string = JSON.stringify(body_json);
60
+ request_headers["Content-Type"] = "application/json";
61
+ request_headers["Content-Length"] = Buffer.byteLength(request_body_string).toString();
62
+ }
63
+ const req = transport.request({
64
+ hostname: url.hostname,
65
+ port: url.port || (is_https ? 443 : 80),
66
+ path: url.pathname + url.search,
67
+ method,
68
+ headers: request_headers,
69
+ timeout: timeout_milliseconds,
70
+ }, (res) => {
71
+ const chunks = [];
72
+ res.on("data", (chunk) => { chunks.push(chunk); });
73
+ res.on("end", () => {
74
+ const raw_body = Buffer.concat(chunks).toString("utf-8");
75
+ try {
76
+ const parsed_body = JSON.parse(raw_body);
77
+ resolve({ status_code: res.statusCode ?? 0, body: parsed_body, raw: raw_body });
78
+ }
79
+ catch {
80
+ resolve({ status_code: res.statusCode ?? 0, body: null, raw: raw_body });
81
+ }
82
+ });
83
+ });
84
+ req.on("error", (error) => {
85
+ reject(new NetworkError(`Could not connect to MailPal: ${error.message}`));
86
+ });
87
+ req.on("timeout", () => {
88
+ req.destroy();
89
+ reject(new NetworkError(`MailPal request timed out after ${timeout_milliseconds}ms`));
90
+ });
91
+ if (request_body_string != null) {
92
+ req.write(request_body_string);
93
+ }
94
+ req.end();
95
+ });
96
+ }
97
+ async function _get_bearer_auth_headers() {
98
+ const token = await get_token();
99
+ return { "Authorization": `Bearer ${token.access_token}` };
100
+ }
101
+ // ---------------------------------------------------------------------------
102
+ // RFC 2047 / MIME helpers
103
+ // ---------------------------------------------------------------------------
104
+ function _encode_as_rfc2047_base64_if_non_ascii(text) {
105
+ if (/^[\x20-\x7e]*$/.test(text)) {
106
+ return text;
107
+ }
108
+ return "=?utf-8?b?" + Buffer.from(text, "utf-8").toString("base64") + "?=";
109
+ }
110
+ function _format_email_address_with_optional_display_name(display_name, email_address) {
111
+ if (!display_name) {
112
+ return email_address;
113
+ }
114
+ return `${_encode_as_rfc2047_base64_if_non_ascii(display_name)} <${email_address}>`;
115
+ }
116
+ function _parse_address_into_name_and_email(address_string) {
117
+ const angle_bracket_match = address_string.match(/^(?:"?([^"<]*)"?\s*)?<([^>]+)>$/);
118
+ if (angle_bracket_match) {
119
+ return {
120
+ display_name: (angle_bracket_match[1] ?? "").trim(),
121
+ email: (angle_bracket_match[2] ?? "").trim(),
122
+ };
123
+ }
124
+ return { display_name: "", email: address_string.trim() };
125
+ }
126
+ function _extract_bare_email_from_address_string(address_string) {
127
+ return _parse_address_into_name_and_email(address_string).email;
128
+ }
129
+ function _format_rfc2822_date_for_current_moment() {
130
+ const d = new Date();
131
+ const days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
132
+ const months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
133
+ const offset_total_minutes = -d.getTimezoneOffset();
134
+ const sign = offset_total_minutes >= 0 ? "+" : "-";
135
+ const abs_offset = Math.abs(offset_total_minutes);
136
+ const hours_part = String(Math.floor(abs_offset / 60)).padStart(2, "0");
137
+ const minutes_part = String(abs_offset % 60).padStart(2, "0");
138
+ return `${days[d.getDay()]}, ${String(d.getDate()).padStart(2, "0")} ${months[d.getMonth()]} ` +
139
+ `${d.getFullYear()} ${String(d.getHours()).padStart(2, "0")}:` +
140
+ `${String(d.getMinutes()).padStart(2, "0")}:${String(d.getSeconds()).padStart(2, "0")} ` +
141
+ `${sign}${hours_part}${minutes_part}`;
142
+ }
143
+ function _generate_unique_message_id_for_mailpal_domain() {
144
+ const timestamp = Date.now();
145
+ const random_hex = crypto.randomBytes(8).toString("hex");
146
+ return `<${timestamp}.${random_hex}@mailpal.com>`;
147
+ }
148
+ function _build_mime_message_as_wire_format_bytes(ordered_headers, body_text) {
149
+ const header_lines = ordered_headers.map(([name, value]) => `${name}: ${value}`);
150
+ header_lines.push('Content-Type: text/plain; charset="utf-8"');
151
+ header_lines.push("Content-Transfer-Encoding: 7bit");
152
+ header_lines.push("MIME-Version: 1.0");
153
+ const header_section = header_lines.join("\r\n");
154
+ return Buffer.from(header_section + "\r\n\r\n" + body_text + "\r\n", "utf-8");
155
+ }
156
+ function _extract_wire_format_headers_from_raw_bytes(wire_bytes) {
157
+ const separator_index = wire_bytes.indexOf("\r\n\r\n");
158
+ if (separator_index < 0) {
159
+ return {};
160
+ }
161
+ const header_section = wire_bytes.subarray(0, separator_index).toString("utf-8");
162
+ const headers = {};
163
+ let current_name = null;
164
+ let current_value = "";
165
+ for (const line of header_section.split("\r\n")) {
166
+ if (line.startsWith(" ") || line.startsWith("\t")) {
167
+ if (current_name) {
168
+ current_value += " " + line.trim();
169
+ }
170
+ }
171
+ else {
172
+ if (current_name) {
173
+ headers[current_name.toLowerCase()] = current_value;
174
+ }
175
+ const colon_pos = line.indexOf(":");
176
+ if (colon_pos > 0) {
177
+ current_name = line.substring(0, colon_pos);
178
+ current_value = line.substring(colon_pos + 1).trim();
179
+ }
180
+ }
181
+ }
182
+ if (current_name) {
183
+ headers[current_name.toLowerCase()] = current_value;
184
+ }
185
+ return headers;
186
+ }
187
+ function _extract_body_bytes_from_wire_format(wire_bytes) {
188
+ const separator_index = wire_bytes.indexOf("\r\n\r\n");
189
+ if (separator_index < 0) {
190
+ return Buffer.alloc(0);
191
+ }
192
+ return wire_bytes.subarray(separator_index + 4);
193
+ }
194
+ function _fold_long_header_value_for_smtp_transmission(header_name, header_value) {
195
+ const full_line = `${header_name}: ${header_value}`;
196
+ if (full_line.length <= 76) {
197
+ return full_line;
198
+ }
199
+ const first_line = full_line.substring(0, 76);
200
+ let remaining = full_line.substring(76);
201
+ const lines = [first_line];
202
+ while (remaining.length > 0) {
203
+ const chunk = remaining.substring(0, 75);
204
+ lines.push(" " + chunk);
205
+ remaining = remaining.substring(75);
206
+ }
207
+ return lines.join("\r\n");
208
+ }
209
+ function _inject_attestation_headers_into_wire_bytes(wire_bytes, attestation_header_lines) {
210
+ if (attestation_header_lines.length === 0) {
211
+ return wire_bytes;
212
+ }
213
+ const separator_index = wire_bytes.indexOf("\r\n\r\n");
214
+ if (separator_index < 0) {
215
+ return wire_bytes;
216
+ }
217
+ const headers_section = wire_bytes.subarray(0, separator_index);
218
+ const body_and_separator_tail = wire_bytes.subarray(separator_index);
219
+ const injected_bytes = Buffer.from("\r\n" + attestation_header_lines.join("\r\n"), "utf-8");
220
+ return Buffer.concat([headers_section, injected_bytes, body_and_separator_tail]);
221
+ }
222
+ // ---------------------------------------------------------------------------
223
+ // SMTP client with STARTTLS (raw TCP → TLS upgrade, AUTH PLAIN)
224
+ // ---------------------------------------------------------------------------
225
+ function _send_raw_message_via_smtp_with_starttls(host, port, auth_email, auth_password, envelope_from, envelope_to_list, message_bytes, timeout_ms) {
226
+ return new Promise((resolve, reject) => {
227
+ const socket = net.createConnection({ host, port, timeout: timeout_ms });
228
+ let secure_socket = null;
229
+ let command_queue = [];
230
+ let response_buffer = "";
231
+ let phase = "greeting";
232
+ function on_smtp_data(data) {
233
+ response_buffer += data.toString("utf-8");
234
+ while (response_buffer.includes("\r\n")) {
235
+ const line_end = response_buffer.indexOf("\r\n");
236
+ const line = response_buffer.substring(0, line_end);
237
+ response_buffer = response_buffer.substring(line_end + 2);
238
+ const code = parseInt(line.substring(0, 3), 10);
239
+ const is_continuation = line[3] === "-";
240
+ if (!is_continuation) {
241
+ handle_smtp_response_line(code, line);
242
+ }
243
+ }
244
+ }
245
+ function send_smtp_command(cmd) {
246
+ const active_socket = secure_socket ?? socket;
247
+ active_socket.write(cmd + "\r\n");
248
+ }
249
+ function handle_smtp_response_line(code, line) {
250
+ if (phase === "greeting") {
251
+ if (code !== 220) {
252
+ return reject(new NetworkError(`SMTP greeting failed: ${line}`));
253
+ }
254
+ phase = "ehlo1";
255
+ send_smtp_command("EHLO oneid-sdk");
256
+ }
257
+ else if (phase === "ehlo1") {
258
+ if (code !== 250) {
259
+ return reject(new NetworkError(`SMTP EHLO failed: ${line}`));
260
+ }
261
+ phase = "starttls";
262
+ send_smtp_command("STARTTLS");
263
+ }
264
+ else if (phase === "starttls") {
265
+ if (code !== 220) {
266
+ return reject(new NetworkError(`SMTP STARTTLS failed: ${line}`));
267
+ }
268
+ phase = "tls_upgrade";
269
+ secure_socket = tls.connect({ socket, servername: host, rejectUnauthorized: true }, () => {
270
+ phase = "ehlo2";
271
+ secure_socket.on("data", on_smtp_data);
272
+ socket.removeAllListeners("data");
273
+ send_smtp_command("EHLO oneid-sdk");
274
+ });
275
+ secure_socket.on("error", (err) => {
276
+ reject(new NetworkError(`SMTP TLS error: ${err.message}`));
277
+ });
278
+ }
279
+ else if (phase === "ehlo2") {
280
+ if (code !== 250) {
281
+ return reject(new NetworkError(`SMTP EHLO after TLS failed: ${line}`));
282
+ }
283
+ phase = "auth";
284
+ const auth_string = Buffer.from(`\x00${auth_email}\x00${auth_password}`).toString("base64");
285
+ send_smtp_command(`AUTH PLAIN ${auth_string}`);
286
+ }
287
+ else if (phase === "auth") {
288
+ if (code !== 235) {
289
+ return reject(new AuthenticationError(`SMTP authentication failed: ${line}`));
290
+ }
291
+ phase = "mail_from";
292
+ send_smtp_command(`MAIL FROM:<${envelope_from}>`);
293
+ }
294
+ else if (phase === "mail_from") {
295
+ if (code !== 250) {
296
+ return reject(new NetworkError(`SMTP MAIL FROM failed: ${line}`));
297
+ }
298
+ phase = "rcpt_to";
299
+ command_queue = [...envelope_to_list];
300
+ send_smtp_command(`RCPT TO:<${command_queue.shift()}>`);
301
+ }
302
+ else if (phase === "rcpt_to") {
303
+ if (code !== 250) {
304
+ return reject(new NetworkError(`SMTP RCPT TO failed: ${line}`));
305
+ }
306
+ if (command_queue.length > 0) {
307
+ send_smtp_command(`RCPT TO:<${command_queue.shift()}>`);
308
+ }
309
+ else {
310
+ phase = "data_cmd";
311
+ send_smtp_command("DATA");
312
+ }
313
+ }
314
+ else if (phase === "data_cmd") {
315
+ if (code !== 354) {
316
+ return reject(new NetworkError(`SMTP DATA command failed: ${line}`));
317
+ }
318
+ phase = "data_done";
319
+ const active_socket = secure_socket ?? socket;
320
+ active_socket.write(message_bytes);
321
+ active_socket.write(Buffer.from("\r\n.\r\n"));
322
+ }
323
+ else if (phase === "data_done") {
324
+ if (code !== 250) {
325
+ return reject(new NetworkError(`SMTP message rejected: ${line}`));
326
+ }
327
+ phase = "quit";
328
+ send_smtp_command("QUIT");
329
+ }
330
+ else if (phase === "quit") {
331
+ const active_socket = secure_socket ?? socket;
332
+ active_socket.destroy();
333
+ resolve();
334
+ }
335
+ }
336
+ socket.on("data", on_smtp_data);
337
+ socket.on("error", (err) => {
338
+ reject(new NetworkError(`SMTP connection error: ${err.message}`));
339
+ });
340
+ socket.on("timeout", () => {
341
+ socket.destroy();
342
+ reject(new NetworkError("SMTP connection timed out"));
343
+ });
344
+ });
345
+ }
346
+ // ---------------------------------------------------------------------------
347
+ // Public API
348
+ // ---------------------------------------------------------------------------
349
+ /**
350
+ * Activate a MailPal account for the current 1id identity.
351
+ *
352
+ * Two-phase flow:
353
+ * Phase 1 -- call activate() with no args → returns MailpalActivationChallenge
354
+ * Phase 2 -- call activate({ challenge_token, challenge_answer }) → returns MailpalAccount
355
+ * If already activated, Phase 1 returns MailpalAccount directly (idempotent).
356
+ *
357
+ * On success, persists mailpal_email and app_password to credentials.json.
358
+ */
359
+ export async function activate(options) {
360
+ const { challenge_token = null, challenge_answer = null, display_name = null, mailpal_api_url = null, } = options ?? {};
361
+ const url = `${mailpal_api_url ?? _MAILPAL_API_BASE_URL}/api/v1/activate`;
362
+ const request_body = {};
363
+ if (challenge_token && challenge_answer) {
364
+ request_body["challenge_token"] = challenge_token;
365
+ request_body["challenge_answer"] = challenge_answer;
366
+ }
367
+ if (display_name) {
368
+ request_body["display_name"] = display_name;
369
+ }
370
+ const auth_headers = await _get_bearer_auth_headers();
371
+ const has_body = Object.keys(request_body).length > 0;
372
+ const response = await _make_mailpal_http_request("POST", url, has_body ? request_body : null, auth_headers);
373
+ if (response.status_code === 401) {
374
+ throw new AuthenticationError("Bearer token rejected by MailPal.");
375
+ }
376
+ if (response.status_code === 403) {
377
+ const error_info = (response.body?.["error"] ?? {});
378
+ throw new AuthenticationError(`Challenge failed: ${error_info["message"] ?? response.raw.slice(0, 200)}. ` +
379
+ "Call activate() again with no arguments to get a new challenge.");
380
+ }
381
+ if (response.status_code === 429) {
382
+ const error_info = (response.body?.["error"] ?? {});
383
+ throw new NetworkError(`Rate limited: ${error_info["message"] ?? response.raw.slice(0, 200)}`);
384
+ }
385
+ if (response.status_code !== 200 && response.status_code !== 201) {
386
+ throw new NetworkError(`MailPal activate failed (HTTP ${response.status_code}): ${response.raw.slice(0, 200)}`);
387
+ }
388
+ const data = (response.body?.["data"] ?? {});
389
+ if (data["phase"] === "challenge") {
390
+ return {
391
+ _type: "challenge",
392
+ challenge_token: data["challenge_token"] ?? "",
393
+ prompt: data["prompt"] ?? "",
394
+ difficulty: data["difficulty"] ?? "easy",
395
+ expires_in_seconds: data["expires_in_seconds"] ?? 300,
396
+ attempt_limit: data["attempt_limit"] ?? 3,
397
+ };
398
+ }
399
+ const account = {
400
+ _type: "account",
401
+ primary_email: data["primary_email"] ?? "",
402
+ vanity_email: data["vanity_email"] ?? null,
403
+ app_password: data["app_password"] ?? null,
404
+ already_existed: data["already_activated"] ?? false,
405
+ smtp: data["smtp"] ?? null,
406
+ imap: data["imap"] ?? null,
407
+ };
408
+ if (account.primary_email) {
409
+ try {
410
+ const creds = load_credentials();
411
+ let mailpal_credentials_changed = false;
412
+ if (creds.mailpal_email !== account.primary_email) {
413
+ creds.mailpal_email = account.primary_email;
414
+ mailpal_credentials_changed = true;
415
+ }
416
+ if (account.app_password && creds.mailpal_app_password !== account.app_password) {
417
+ creds.mailpal_app_password = account.app_password;
418
+ mailpal_credentials_changed = true;
419
+ }
420
+ if (mailpal_credentials_changed) {
421
+ save_credentials(creds);
422
+ }
423
+ }
424
+ catch {
425
+ /* best-effort credential persistence */
426
+ }
427
+ }
428
+ return account;
429
+ }
430
+ /**
431
+ * Send an attested email via direct SMTP submission to smtp.mailpal.com.
432
+ *
433
+ * Builds the MIME message locally, computes attestation from the exact
434
+ * wire-format bytes (guaranteeing the milter verifies the same bytes),
435
+ * injects attestation headers, and submits via SMTP with STARTTLS.
436
+ *
437
+ * @param options.to - Recipient addresses (To header).
438
+ * @param options.subject - Email subject line.
439
+ * @param options.text_body - Plain text body.
440
+ * @param options.from_address - Sender email (default: stored mailpal_email).
441
+ * @param options.from_display_name - Override display name for From header.
442
+ * @param options.cc - Cc recipients.
443
+ * @param options.bcc - Bcc recipients (hidden from headers).
444
+ * @param options.attestation_mode - "both" | "sd-jwt" | "direct" | "none".
445
+ * @param options.disclosed_claims - SD-JWT claims to disclose (default: ["trust_tier"]).
446
+ */
447
+ export async function send(options) {
448
+ const { to, subject, text_body = null, html_body = null, from_address = null, from_display_name = null, cc = null, bcc = null, include_attestation = true, attestation_mode = "both", disclosed_claims = null, oneid_api_url = null, smtp_host = null, smtp_port = null, } = options;
449
+ const creds = load_credentials();
450
+ const smtp_auth_email = creds.mailpal_email ?? `${creds.client_id}@mailpal.com`;
451
+ const smtp_auth_password = creds.mailpal_app_password;
452
+ if (!smtp_auth_password) {
453
+ throw new NotEnrolledError("No MailPal app_password found in stored credentials. " +
454
+ "Call mailpal.activate() first to create a MailPal account " +
455
+ "and store SMTP credentials, or manually add mailpal_app_password " +
456
+ "to credentials.json.");
457
+ }
458
+ const parsed_from = _parse_address_into_name_and_email(from_address ?? "");
459
+ const effective_from_email = parsed_from.email || smtp_auth_email;
460
+ const effective_from_display_name = from_display_name ?? parsed_from.display_name ?? creds.display_name ?? "";
461
+ const effective_include_attestation = attestation_mode === "none" ? false : include_attestation;
462
+ // -- Phase 1: Build MIME message locally --
463
+ const message_id = _generate_unique_message_id_for_mailpal_domain();
464
+ const date_header = _format_rfc2822_date_for_current_moment();
465
+ const from_header_value = _format_email_address_with_optional_display_name(effective_from_display_name, effective_from_email);
466
+ const ordered_mime_headers = [
467
+ ["From", from_header_value],
468
+ ["To", to.join(", ")],
469
+ ["Subject", subject],
470
+ ["Date", date_header],
471
+ ["Message-ID", message_id],
472
+ ];
473
+ if (cc && cc.length > 0) {
474
+ ordered_mime_headers.push(["Cc", cc.join(", ")]);
475
+ }
476
+ const effective_body = text_body ?? html_body ?? "";
477
+ const wire_format_message_bytes = _build_mime_message_as_wire_format_bytes(ordered_mime_headers, effective_body);
478
+ // -- Phase 2: Extract wire-format headers (same as milter would parse) --
479
+ const wire_format_headers = _extract_wire_format_headers_from_raw_bytes(wire_format_message_bytes);
480
+ const wire_format_body_bytes = _extract_body_bytes_from_wire_format(wire_format_message_bytes);
481
+ const _MODE2_REQUIRED_HEADER_NAMES = new Set(["from", "to", "subject", "date", "message-id"]);
482
+ const wire_format_headers_for_mode2_nonce = {};
483
+ for (const [key, value] of Object.entries(wire_format_headers)) {
484
+ if (_MODE2_REQUIRED_HEADER_NAMES.has(key)) {
485
+ wire_format_headers_for_mode2_nonce[key] = value;
486
+ }
487
+ }
488
+ // -- Phase 3: Compute attestation from wire-format bytes --
489
+ let mode2_sd_jwt_proof = null;
490
+ let mode1_direct_attestation_proof = null;
491
+ const include_sd_jwt_mode = attestation_mode === "sd-jwt" || attestation_mode === "both";
492
+ const include_direct_mode = attestation_mode === "direct" || attestation_mode === "both";
493
+ if (effective_include_attestation && include_sd_jwt_mode) {
494
+ try {
495
+ mode2_sd_jwt_proof = await prepareAttestation({
496
+ emailHeaders: wire_format_headers_for_mode2_nonce,
497
+ body: wire_format_body_bytes,
498
+ disclosedClaims: disclosed_claims ?? undefined,
499
+ apiBaseUrl: oneid_api_url ?? undefined,
500
+ });
501
+ }
502
+ catch (attestation_error) {
503
+ console.warn(`[oneid.mailpal] Mode 2 (SD-JWT) attestation failed: ${attestation_error}`);
504
+ }
505
+ }
506
+ if (effective_include_attestation && include_direct_mode) {
507
+ try {
508
+ mode1_direct_attestation_proof = await prepare_direct_hardware_attestation(wire_format_headers, wire_format_body_bytes);
509
+ }
510
+ catch (mode1_error) {
511
+ console.warn(`[oneid.mailpal] Mode 1 (Direct Hardware) attestation failed: ${mode1_error}`);
512
+ }
513
+ }
514
+ // -- Phase 4: Build attestation header lines --
515
+ const attestation_header_lines_to_inject = [];
516
+ if (mode1_direct_attestation_proof?.hardware_attestation_header_value) {
517
+ attestation_header_lines_to_inject.push(_fold_long_header_value_for_smtp_transmission("Hardware-Attestation", mode1_direct_attestation_proof.hardware_attestation_header_value));
518
+ }
519
+ if (mode2_sd_jwt_proof) {
520
+ if (mode2_sd_jwt_proof.sd_jwt) {
521
+ let sd_jwt_presentation_value = mode2_sd_jwt_proof.sd_jwt;
522
+ if (mode2_sd_jwt_proof.sd_jwt_disclosures &&
523
+ Object.keys(mode2_sd_jwt_proof.sd_jwt_disclosures).length > 0) {
524
+ for (const disclosure_b64url of Object.values(mode2_sd_jwt_proof.sd_jwt_disclosures)) {
525
+ sd_jwt_presentation_value += "~" + disclosure_b64url;
526
+ }
527
+ sd_jwt_presentation_value += "~";
528
+ }
529
+ attestation_header_lines_to_inject.push(_fold_long_header_value_for_smtp_transmission("Hardware-Trust-Proof", sd_jwt_presentation_value));
530
+ }
531
+ if (mode2_sd_jwt_proof.contact_token) {
532
+ attestation_header_lines_to_inject.push(`X-1ID-Contact-Token: ${mode2_sd_jwt_proof.contact_token}`);
533
+ }
534
+ }
535
+ // -- Phase 5: Inject attestation headers --
536
+ const final_message_bytes = _inject_attestation_headers_into_wire_bytes(wire_format_message_bytes, attestation_header_lines_to_inject);
537
+ // -- Phase 6: Submit via SMTP with STARTTLS --
538
+ const effective_smtp_host = smtp_host ?? _SMTP_HOST;
539
+ const effective_smtp_port = smtp_port ?? _SMTP_PORT_STARTTLS;
540
+ const all_recipient_emails = [];
541
+ for (const addr of to) {
542
+ all_recipient_emails.push(_extract_bare_email_from_address_string(addr));
543
+ }
544
+ if (cc) {
545
+ for (const addr of cc) {
546
+ all_recipient_emails.push(_extract_bare_email_from_address_string(addr));
547
+ }
548
+ }
549
+ if (bcc) {
550
+ for (const addr of bcc) {
551
+ all_recipient_emails.push(_extract_bare_email_from_address_string(addr));
552
+ }
553
+ }
554
+ if (all_recipient_emails.length === 0) {
555
+ throw new Error("No valid recipient email addresses found in to/cc/bcc.");
556
+ }
557
+ await _send_raw_message_via_smtp_with_starttls(effective_smtp_host, effective_smtp_port, smtp_auth_email, smtp_auth_password, smtp_auth_email, all_recipient_emails, final_message_bytes, _SMTP_TIMEOUT_MILLISECONDS);
558
+ return {
559
+ message_id,
560
+ from_address: effective_from_email,
561
+ attestation_headers_included: mode2_sd_jwt_proof != null || mode1_direct_attestation_proof != null,
562
+ contact_token_header_included: mode2_sd_jwt_proof?.contact_token != null,
563
+ sd_jwt_header_included: mode2_sd_jwt_proof?.sd_jwt != null,
564
+ direct_attestation_header_included: mode1_direct_attestation_proof?.hardware_attestation_header_value != null,
565
+ };
566
+ }
567
+ /**
568
+ * Fetch inbox messages from MailPal.
569
+ *
570
+ * @param options.limit - Max messages to return (default 20).
571
+ * @param options.offset - Pagination offset.
572
+ * @param options.unread_only - If true, only return unread messages.
573
+ */
574
+ export async function inbox(options) {
575
+ const { limit = 20, offset = 0, unread_only = false, mailpal_api_url = null, } = options ?? {};
576
+ let url = `${mailpal_api_url ?? _MAILPAL_API_BASE_URL}/api/v1/inbox?limit=${limit}&offset=${offset}`;
577
+ if (unread_only) {
578
+ url += "&unread_only=true";
579
+ }
580
+ const auth_headers = await _get_bearer_auth_headers();
581
+ const response = await _make_mailpal_http_request("GET", url, null, auth_headers);
582
+ if (response.status_code === 401) {
583
+ throw new AuthenticationError("Bearer token rejected by MailPal.");
584
+ }
585
+ if (response.status_code !== 200) {
586
+ throw new NetworkError(`MailPal inbox failed (HTTP ${response.status_code}): ${response.raw.slice(0, 200)}`);
587
+ }
588
+ const data = (response.body?.["data"] ?? {});
589
+ const messages_raw = (data["messages"] ?? []);
590
+ return messages_raw.map((msg) => ({
591
+ message_id: msg["id"] ?? "",
592
+ from_address: msg["from"] ?? "",
593
+ subject: msg["subject"] ?? "",
594
+ received_at: msg["received_at"] ?? "",
595
+ is_unread: msg["is_unread"] ?? true,
596
+ }));
597
+ }
598
+ /**
599
+ * Get the current contact token for use in email headers.
600
+ *
601
+ * Returns the bare token string or null if unavailable.
602
+ */
603
+ export async function get_contact_token(oneid_api_url) {
604
+ const creds = load_credentials();
605
+ const api_base_url = oneid_api_url ?? creds.api_base_url ?? "https://1id.com";
606
+ const token = await get_token();
607
+ const auth_headers = {
608
+ "Authorization": `Bearer ${token.access_token}`,
609
+ "User-Agent": _USER_AGENT,
610
+ };
611
+ const url = `${api_base_url}/api/v1/contact-token`;
612
+ const response = await _make_mailpal_http_request("GET", url, null, auth_headers);
613
+ if (response.status_code !== 200) {
614
+ return null;
615
+ }
616
+ const data = (response.body?.["data"] ?? {});
617
+ return data["token"] ?? null;
618
+ }
619
+ //# sourceMappingURL=mailpal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mailpal.js","sourceRoot":"","sources":["../src/mailpal.ts"],"names":[],"mappings":"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"}