@pidgeon-ai/sdk 1.28.0 → 1.30.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/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ the two would publish a release for every unrelated product deploy.
7
7
  Semver applies to **this package's own surface** — the exported names, the
8
8
  call shapes, the result shape — not to the API behind it.
9
9
 
10
+ ## 1.30.0 — `authentication.signature`
11
+
12
+ A message carries `authentication.signature`: `pass` when it came from
13
+ another Pidgeon address directly and its signed sender verified against the
14
+ sending domain's key, null otherwise. Additive.
15
+
16
+ ## 1.29.0 — The signed-sender records
17
+
18
+ Every domain's DNS records (`domainsGet`, `domainsCreate`, `domainsVerify`)
19
+ gain two optional ones: `signing`, a TXT at `_post`, and `signing_host`, a
20
+ CNAME at `post`. With both connected, mail from the domain carries a
21
+ signature receivers can check against the domain's published keys. Every
22
+ record gains `optional`, true for these two; they have their own `status`
23
+ and never count towards whether the domain is configured. Additive.
24
+
10
25
  ## 1.28.0 — DNS hosts for subdomains, and why a record is waiting
11
26
 
12
27
  Every DNS record (`domainsGet`, `domainsCreate`, `domainsVerify`) gains
package/dist/index.d.cts CHANGED
@@ -489,12 +489,16 @@ type Message = {
489
489
  [key: string]: string;
490
490
  };
491
491
  /**
492
- * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged.
492
+ * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged. A `From:` is the sending domain's own word when `dmarc` or `signature` is `pass`.
493
493
  */
494
494
  authentication: {
495
495
  spf: string | null;
496
496
  dkim: string | null;
497
497
  dmarc: string | null;
498
+ /**
499
+ * `pass` when the message came from another Pidgeon address directly, and its signed sender verified against the sending domain's published key. Null on mail that came through SMTP, which DMARC speaks for instead.
500
+ */
501
+ signature: string | null;
498
502
  };
499
503
  /**
500
504
  * Who this message says it is from. A Pidgeon sender declares it on every message it sends; mail from ordinary email has only the address.
@@ -705,12 +709,16 @@ type AwaitedMessage = {
705
709
  [key: string]: string;
706
710
  };
707
711
  /**
708
- * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged.
712
+ * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged. A `From:` is the sending domain's own word when `dmarc` or `signature` is `pass`.
709
713
  */
710
714
  authentication: {
711
715
  spf: string | null;
712
716
  dkim: string | null;
713
717
  dmarc: string | null;
718
+ /**
719
+ * `pass` when the message came from another Pidgeon address directly, and its signed sender verified against the sending domain's published key. Null on mail that came through SMTP, which DMARC speaks for instead.
720
+ */
721
+ signature: string | null;
714
722
  };
715
723
  /**
716
724
  * Who this message says it is from. A Pidgeon sender declares it on every message it sends; mail from ordinary email has only the address.
@@ -1302,7 +1310,7 @@ type DomainDetail = {
1302
1310
  priority: number | null;
1303
1311
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1304
1312
  /**
1305
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1313
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1306
1314
  */
1307
1315
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1308
1316
  found: string | null;
@@ -1310,6 +1318,10 @@ type DomainDetail = {
1310
1318
  * Where `found` was read, when that was not `fqdn`.
1311
1319
  */
1312
1320
  found_at: string | null;
1321
+ /**
1322
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1323
+ */
1324
+ optional: boolean;
1313
1325
  description: string;
1314
1326
  checked_at: string | null;
1315
1327
  }>;
@@ -1338,7 +1350,7 @@ type DnsRecord = {
1338
1350
  priority: number | null;
1339
1351
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1340
1352
  /**
1341
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1353
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1342
1354
  */
1343
1355
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1344
1356
  found: string | null;
@@ -1346,6 +1358,10 @@ type DnsRecord = {
1346
1358
  * Where `found` was read, when that was not `fqdn`.
1347
1359
  */
1348
1360
  found_at: string | null;
1361
+ /**
1362
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1363
+ */
1364
+ optional: boolean;
1349
1365
  description: string;
1350
1366
  checked_at: string | null;
1351
1367
  };
@@ -1376,7 +1392,7 @@ type Verification = {
1376
1392
  priority: number | null;
1377
1393
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1378
1394
  /**
1379
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1395
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1380
1396
  */
1381
1397
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1382
1398
  found: string | null;
@@ -1384,6 +1400,10 @@ type Verification = {
1384
1400
  * Where `found` was read, when that was not `fqdn`.
1385
1401
  */
1386
1402
  found_at: string | null;
1403
+ /**
1404
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1405
+ */
1406
+ optional: boolean;
1387
1407
  description: string;
1388
1408
  checked_at: string | null;
1389
1409
  }>;
package/dist/index.d.ts CHANGED
@@ -489,12 +489,16 @@ type Message = {
489
489
  [key: string]: string;
490
490
  };
491
491
  /**
492
- * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged.
492
+ * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged. A `From:` is the sending domain's own word when `dmarc` or `signature` is `pass`.
493
493
  */
494
494
  authentication: {
495
495
  spf: string | null;
496
496
  dkim: string | null;
497
497
  dmarc: string | null;
498
+ /**
499
+ * `pass` when the message came from another Pidgeon address directly, and its signed sender verified against the sending domain's published key. Null on mail that came through SMTP, which DMARC speaks for instead.
500
+ */
501
+ signature: string | null;
498
502
  };
499
503
  /**
500
504
  * Who this message says it is from. A Pidgeon sender declares it on every message it sends; mail from ordinary email has only the address.
@@ -705,12 +709,16 @@ type AwaitedMessage = {
705
709
  [key: string]: string;
706
710
  };
707
711
  /**
708
- * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged.
712
+ * What the receiving transport said about the sending domain. Null means it did not report, not that the check failed — normal on outbound, and on inbound it is the difference between unknown and forged. A `From:` is the sending domain's own word when `dmarc` or `signature` is `pass`.
709
713
  */
710
714
  authentication: {
711
715
  spf: string | null;
712
716
  dkim: string | null;
713
717
  dmarc: string | null;
718
+ /**
719
+ * `pass` when the message came from another Pidgeon address directly, and its signed sender verified against the sending domain's published key. Null on mail that came through SMTP, which DMARC speaks for instead.
720
+ */
721
+ signature: string | null;
714
722
  };
715
723
  /**
716
724
  * Who this message says it is from. A Pidgeon sender declares it on every message it sends; mail from ordinary email has only the address.
@@ -1302,7 +1310,7 @@ type DomainDetail = {
1302
1310
  priority: number | null;
1303
1311
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1304
1312
  /**
1305
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1313
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1306
1314
  */
1307
1315
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1308
1316
  found: string | null;
@@ -1310,6 +1318,10 @@ type DomainDetail = {
1310
1318
  * Where `found` was read, when that was not `fqdn`.
1311
1319
  */
1312
1320
  found_at: string | null;
1321
+ /**
1322
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1323
+ */
1324
+ optional: boolean;
1313
1325
  description: string;
1314
1326
  checked_at: string | null;
1315
1327
  }>;
@@ -1338,7 +1350,7 @@ type DnsRecord = {
1338
1350
  priority: number | null;
1339
1351
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1340
1352
  /**
1341
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1353
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1342
1354
  */
1343
1355
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1344
1356
  found: string | null;
@@ -1346,6 +1358,10 @@ type DnsRecord = {
1346
1358
  * Where `found` was read, when that was not `fqdn`.
1347
1359
  */
1348
1360
  found_at: string | null;
1361
+ /**
1362
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1363
+ */
1364
+ optional: boolean;
1349
1365
  description: string;
1350
1366
  checked_at: string | null;
1351
1367
  };
@@ -1376,7 +1392,7 @@ type Verification = {
1376
1392
  priority: number | null;
1377
1393
  status: 'connected' | 'waiting' | 'incorrect' | 'not_required';
1378
1394
  /**
1379
- * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1395
+ * Why `status` is what it is. `published`: correct in public DNS, waiting on the mail provider to confirm (DKIM; usually under an hour), or on its certificate (`signing_host`; usually ten minutes). `wrong_name`: our value is at `found_at` instead, often the zone typed twice. Null before the first check.
1380
1396
  */
1381
1397
  state: 'connected' | 'published' | 'missing' | 'wrong_value' | 'wrong_name' | 'not_required' | null;
1382
1398
  found: string | null;
@@ -1384,6 +1400,10 @@ type Verification = {
1384
1400
  * Where `found` was read, when that was not `fqdn`.
1385
1401
  */
1386
1402
  found_at: string | null;
1403
+ /**
1404
+ * Not needed for mail: `signing` and `signing_host`, which let receivers check a signed sender from this domain. Its own `status`; never counted towards whether the domain is configured.
1405
+ */
1406
+ optional: boolean;
1387
1407
  description: string;
1388
1408
  checked_at: string | null;
1389
1409
  }>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pidgeon-ai/sdk",
3
- "version": "1.28.0",
3
+ "version": "1.30.0",
4
4
  "description": "Email inboxes for AI agents — TypeScript SDK for Pidgeon: create addresses, send, receive and reply.",
5
5
  "keywords": [
6
6
  "email",