groundmail 0.27.0 → 0.28.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/dist/authjs.d.ts +1 -1
- package/dist/authjs.js +1 -1
- package/dist/better-auth.d.ts +1 -1
- package/dist/better-auth.js +1 -1
- package/dist/{chunk-RLIF6XKO.js → chunk-POS35D4J.js} +186 -112
- package/dist/clerk.d.ts +1 -1
- package/dist/clerk.js +1 -1
- package/dist/{client-Btlt7wMg.d.ts → client-DdtHUMEu.d.ts} +4 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +1 -1
- package/dist/payload.d.ts +1 -1
- package/dist/payload.js +1 -1
- package/package.json +2 -2
package/dist/authjs.d.ts
CHANGED
package/dist/authjs.js
CHANGED
package/dist/better-auth.d.ts
CHANGED
package/dist/better-auth.js
CHANGED
|
@@ -301,8 +301,183 @@ function createCloudflareProvider(options) {
|
|
|
301
301
|
};
|
|
302
302
|
}
|
|
303
303
|
|
|
304
|
-
// src/dns/
|
|
304
|
+
// src/dns/record-store.ts
|
|
305
|
+
function zoneNameCandidates2(domain) {
|
|
306
|
+
const labels = domain.replace(/\.$/, "").toLowerCase().split(".").filter(Boolean);
|
|
307
|
+
const candidates = [];
|
|
308
|
+
for (let i = 0; i <= labels.length - 2; i++) {
|
|
309
|
+
candidates.push(labels.slice(i).join("."));
|
|
310
|
+
}
|
|
311
|
+
return candidates;
|
|
312
|
+
}
|
|
305
313
|
function relativeName2(fqdn2, zone) {
|
|
314
|
+
const domain = zone.replace(/\.$/, "").toLowerCase();
|
|
315
|
+
const host = fqdn2.replace(/\.$/, "").toLowerCase();
|
|
316
|
+
if (host === domain) return "";
|
|
317
|
+
if (host.endsWith(`.${domain}`)) return host.slice(0, -(domain.length + 1));
|
|
318
|
+
return host;
|
|
319
|
+
}
|
|
320
|
+
function fqdn(name, zone) {
|
|
321
|
+
return name ? `${name}.${zone}` : zone;
|
|
322
|
+
}
|
|
323
|
+
function normalizeValue(type, value) {
|
|
324
|
+
const trimmed = value.trim();
|
|
325
|
+
if (type === "TXT") return trimmed.replace(/^"([\s\S]*)"$/, "$1").replace(/"\s+"/g, "");
|
|
326
|
+
return trimmed.replace(/\.$/, "").toLowerCase();
|
|
327
|
+
}
|
|
328
|
+
function ownedTxt(purpose, value) {
|
|
329
|
+
const lower = value.toLowerCase();
|
|
330
|
+
if (purpose === "Domain ownership") return lower.includes("groundmail-verify=");
|
|
331
|
+
if (purpose === "DKIM") return lower.includes("v=dkim1");
|
|
332
|
+
if (purpose === "DMARC") return lower.includes("v=dmarc1");
|
|
333
|
+
return false;
|
|
334
|
+
}
|
|
335
|
+
async function applyToRecordStore(zone, records, store) {
|
|
336
|
+
const results = [];
|
|
337
|
+
let cached = await store.list();
|
|
338
|
+
const at = (type, name) => cached.filter((row) => row.type.toUpperCase() === type && row.name === name);
|
|
339
|
+
for (const record of records) {
|
|
340
|
+
const type = record.type.toUpperCase();
|
|
341
|
+
const name = relativeName2(record.host, zone);
|
|
342
|
+
const value = normalizeValue(type, record.value);
|
|
343
|
+
const done = (action, detail) => results.push({ purpose: record.purpose, host: record.host, action, ...detail ? { detail } : {} });
|
|
344
|
+
if (type === "CNAME") {
|
|
345
|
+
const existing = at("CNAME", name)[0];
|
|
346
|
+
if (existing && normalizeValue(type, existing.value) === value) {
|
|
347
|
+
done("unchanged");
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
if (existing) {
|
|
351
|
+
await store.update(existing, { name, type, value });
|
|
352
|
+
done("updated");
|
|
353
|
+
} else {
|
|
354
|
+
await store.create({ name, type, value });
|
|
355
|
+
done("created");
|
|
356
|
+
}
|
|
357
|
+
} else if (type === "MX") {
|
|
358
|
+
const priority = record.priority ?? 10;
|
|
359
|
+
const sameName = at("MX", name);
|
|
360
|
+
if (sameName.some((row) => normalizeValue(type, row.value) === value && (row.priority ?? 10) === priority)) {
|
|
361
|
+
done("unchanged");
|
|
362
|
+
continue;
|
|
363
|
+
}
|
|
364
|
+
await store.create({ name, type, value, priority });
|
|
365
|
+
done(sameName.length > 0 ? "merged" : "created");
|
|
366
|
+
} else if (type !== "TXT") {
|
|
367
|
+
done("unchanged", `Skipped unsupported type ${record.type}`);
|
|
368
|
+
continue;
|
|
369
|
+
} else if (record.purpose === "SPF") {
|
|
370
|
+
const existing = at("TXT", name).find((row) => isSpfRecord(normalizeValue(type, row.value)));
|
|
371
|
+
const includeHost = record.value.match(/include:([^\s"]+)/i)?.[1] || "spf.groundmail.dev";
|
|
372
|
+
const current = existing ? normalizeValue(type, existing.value) : void 0;
|
|
373
|
+
const merged = mergeSpfInclude(current, includeHost);
|
|
374
|
+
if (existing && current?.trim() === merged.trim()) {
|
|
375
|
+
done("unchanged", "SPF already includes Groundmail");
|
|
376
|
+
continue;
|
|
377
|
+
}
|
|
378
|
+
if (existing) {
|
|
379
|
+
await store.update(existing, { name, type, value: merged });
|
|
380
|
+
done("merged", merged);
|
|
381
|
+
} else {
|
|
382
|
+
await store.create({ name, type, value: merged });
|
|
383
|
+
done("created", merged);
|
|
384
|
+
}
|
|
385
|
+
} else {
|
|
386
|
+
const sameName = at("TXT", name);
|
|
387
|
+
if (sameName.some((row) => normalizeValue(type, row.value) === value)) {
|
|
388
|
+
done("unchanged");
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
const replaceable = sameName.find((row) => ownedTxt(record.purpose, normalizeValue(type, row.value)));
|
|
392
|
+
if (replaceable) {
|
|
393
|
+
await store.update(replaceable, { name, type, value });
|
|
394
|
+
done("updated");
|
|
395
|
+
} else {
|
|
396
|
+
await store.create({ name, type, value });
|
|
397
|
+
done("created");
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
cached = await store.list();
|
|
401
|
+
}
|
|
402
|
+
return results;
|
|
403
|
+
}
|
|
404
|
+
async function resolveZone(domain, hostLabel, lookup) {
|
|
405
|
+
for (const candidate of zoneNameCandidates2(domain)) {
|
|
406
|
+
const info = await lookup(candidate);
|
|
407
|
+
if (info !== null) return { zone: candidate, info };
|
|
408
|
+
}
|
|
409
|
+
throw new Error(`No ${hostLabel} DNS zone found for ${domain}. The domain must use ${hostLabel} nameservers.`);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
// src/dns/godaddy-token.ts
|
|
413
|
+
function createGoDaddyTokenProvider(options) {
|
|
414
|
+
const fetchImpl = options.fetchImpl || fetch;
|
|
415
|
+
async function godaddy(path, init) {
|
|
416
|
+
const response = await fetchImpl(`https://api.godaddy.com/v3/domains${path}`, {
|
|
417
|
+
...init,
|
|
418
|
+
headers: {
|
|
419
|
+
Authorization: `Bearer ${options.apiToken}`,
|
|
420
|
+
"Content-Type": "application/json",
|
|
421
|
+
Accept: "application/json",
|
|
422
|
+
...init?.headers || {}
|
|
423
|
+
}
|
|
424
|
+
});
|
|
425
|
+
const body = response.status === 204 ? {} : await response.json().catch(() => ({}));
|
|
426
|
+
if (!response.ok && response.status !== 404) {
|
|
427
|
+
if (response.status === 401 || response.status === 403) {
|
|
428
|
+
throw new Error(
|
|
429
|
+
"GoDaddy refused the token. Create a Personal Access Token with the domains.domain:read and domains.dns:update scopes."
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
throw new Error(body.message || body.code || `GoDaddy HTTP ${response.status}`);
|
|
433
|
+
}
|
|
434
|
+
return { status: response.status, body };
|
|
435
|
+
}
|
|
436
|
+
return {
|
|
437
|
+
name: "godaddy",
|
|
438
|
+
async apply(domain, records) {
|
|
439
|
+
const { zone } = await resolveZone(domain, "GoDaddy", async (candidate) => {
|
|
440
|
+
const { status } = await godaddy(`/zones/${encodeURIComponent(candidate)}/dns-records?pageSize=1`);
|
|
441
|
+
return status === 404 ? null : true;
|
|
442
|
+
});
|
|
443
|
+
const path = `/zones/${encodeURIComponent(zone)}/dns-records`;
|
|
444
|
+
const body = (record) => ({
|
|
445
|
+
name: record.name || "@",
|
|
446
|
+
type: record.type,
|
|
447
|
+
data: record.value,
|
|
448
|
+
ttl: 600,
|
|
449
|
+
...record.priority != null ? { priority: record.priority } : {}
|
|
450
|
+
});
|
|
451
|
+
const write = async (method, suffix, record) => {
|
|
452
|
+
const { status } = await godaddy(`${path}${suffix}`, { method, body: JSON.stringify(body(record)) });
|
|
453
|
+
if (status === 404) throw new Error(`GoDaddy lost the ${zone} zone mid-update`);
|
|
454
|
+
};
|
|
455
|
+
return applyToRecordStore(zone, records, {
|
|
456
|
+
async list() {
|
|
457
|
+
const rows = [];
|
|
458
|
+
for (let page = 1; page <= 20; page++) {
|
|
459
|
+
const { body: list } = await godaddy(`${path}?page=${page}&pageSize=100`);
|
|
460
|
+
const items = list.items || [];
|
|
461
|
+
rows.push(...items);
|
|
462
|
+
if (items.length < 100 || !list.links?.some((link) => link.rel === "next")) break;
|
|
463
|
+
}
|
|
464
|
+
return rows.map((row) => ({
|
|
465
|
+
id: row.recordId,
|
|
466
|
+
name: row.name === "@" ? "" : row.name.toLowerCase(),
|
|
467
|
+
type: row.type,
|
|
468
|
+
value: row.data,
|
|
469
|
+
priority: row.priority ?? void 0
|
|
470
|
+
}));
|
|
471
|
+
},
|
|
472
|
+
create: (record) => write("POST", "", record),
|
|
473
|
+
update: (existing, record) => write("PUT", `/${encodeURIComponent(existing.id)}`, record)
|
|
474
|
+
});
|
|
475
|
+
}
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
// src/dns/godaddy.ts
|
|
480
|
+
function relativeName3(fqdn2, zone) {
|
|
306
481
|
const domain = zone.replace(/\.$/, "").toLowerCase();
|
|
307
482
|
const host = fqdn2.replace(/\.$/, "").toLowerCase();
|
|
308
483
|
if (host === domain) return "@";
|
|
@@ -318,7 +493,7 @@ function serializeGoDaddyMxRecords(name, rows) {
|
|
|
318
493
|
ttl: Math.max(row.ttl || 600, 600)
|
|
319
494
|
}));
|
|
320
495
|
}
|
|
321
|
-
function
|
|
496
|
+
function createGoDaddyKeyProvider(options) {
|
|
322
497
|
const fetchImpl = options.fetchImpl || fetch;
|
|
323
498
|
const headers = {
|
|
324
499
|
Authorization: `sso-key ${options.apiKey}:${options.apiSecret}`,
|
|
@@ -345,7 +520,7 @@ function createGoDaddyProvider(options) {
|
|
|
345
520
|
const results = [];
|
|
346
521
|
for (const record of records) {
|
|
347
522
|
const recordType = record.type.toUpperCase();
|
|
348
|
-
const name =
|
|
523
|
+
const name = relativeName3(record.host, zone);
|
|
349
524
|
if (recordType === "CNAME") {
|
|
350
525
|
const target = record.value.replace(/\.$/, "");
|
|
351
526
|
const existing2 = await gd(
|
|
@@ -470,113 +645,9 @@ function createGoDaddyProvider(options) {
|
|
|
470
645
|
}
|
|
471
646
|
};
|
|
472
647
|
}
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
const labels = domain.replace(/\.$/, "").toLowerCase().split(".").filter(Boolean);
|
|
477
|
-
const candidates = [];
|
|
478
|
-
for (let i = 0; i <= labels.length - 2; i++) {
|
|
479
|
-
candidates.push(labels.slice(i).join("."));
|
|
480
|
-
}
|
|
481
|
-
return candidates;
|
|
482
|
-
}
|
|
483
|
-
function relativeName3(fqdn2, zone) {
|
|
484
|
-
const domain = zone.replace(/\.$/, "").toLowerCase();
|
|
485
|
-
const host = fqdn2.replace(/\.$/, "").toLowerCase();
|
|
486
|
-
if (host === domain) return "";
|
|
487
|
-
if (host.endsWith(`.${domain}`)) return host.slice(0, -(domain.length + 1));
|
|
488
|
-
return host;
|
|
489
|
-
}
|
|
490
|
-
function fqdn(name, zone) {
|
|
491
|
-
return name ? `${name}.${zone}` : zone;
|
|
492
|
-
}
|
|
493
|
-
function normalizeValue(type, value) {
|
|
494
|
-
const trimmed = value.trim();
|
|
495
|
-
if (type === "TXT") return trimmed.replace(/^"([\s\S]*)"$/, "$1").replace(/"\s+"/g, "");
|
|
496
|
-
return trimmed.replace(/\.$/, "").toLowerCase();
|
|
497
|
-
}
|
|
498
|
-
function ownedTxt(purpose, value) {
|
|
499
|
-
const lower = value.toLowerCase();
|
|
500
|
-
if (purpose === "Domain ownership") return lower.includes("groundmail-verify=");
|
|
501
|
-
if (purpose === "DKIM") return lower.includes("v=dkim1");
|
|
502
|
-
if (purpose === "DMARC") return lower.includes("v=dmarc1");
|
|
503
|
-
return false;
|
|
504
|
-
}
|
|
505
|
-
async function applyToRecordStore(zone, records, store) {
|
|
506
|
-
const results = [];
|
|
507
|
-
let cached = await store.list();
|
|
508
|
-
const at = (type, name) => cached.filter((row) => row.type.toUpperCase() === type && row.name === name);
|
|
509
|
-
for (const record of records) {
|
|
510
|
-
const type = record.type.toUpperCase();
|
|
511
|
-
const name = relativeName3(record.host, zone);
|
|
512
|
-
const value = normalizeValue(type, record.value);
|
|
513
|
-
const done = (action, detail) => results.push({ purpose: record.purpose, host: record.host, action, ...detail ? { detail } : {} });
|
|
514
|
-
if (type === "CNAME") {
|
|
515
|
-
const existing = at("CNAME", name)[0];
|
|
516
|
-
if (existing && normalizeValue(type, existing.value) === value) {
|
|
517
|
-
done("unchanged");
|
|
518
|
-
continue;
|
|
519
|
-
}
|
|
520
|
-
if (existing) {
|
|
521
|
-
await store.update(existing, { name, type, value });
|
|
522
|
-
done("updated");
|
|
523
|
-
} else {
|
|
524
|
-
await store.create({ name, type, value });
|
|
525
|
-
done("created");
|
|
526
|
-
}
|
|
527
|
-
} else if (type === "MX") {
|
|
528
|
-
const priority = record.priority ?? 10;
|
|
529
|
-
const sameName = at("MX", name);
|
|
530
|
-
if (sameName.some((row) => normalizeValue(type, row.value) === value && (row.priority ?? 10) === priority)) {
|
|
531
|
-
done("unchanged");
|
|
532
|
-
continue;
|
|
533
|
-
}
|
|
534
|
-
await store.create({ name, type, value, priority });
|
|
535
|
-
done(sameName.length > 0 ? "merged" : "created");
|
|
536
|
-
} else if (type !== "TXT") {
|
|
537
|
-
done("unchanged", `Skipped unsupported type ${record.type}`);
|
|
538
|
-
continue;
|
|
539
|
-
} else if (record.purpose === "SPF") {
|
|
540
|
-
const existing = at("TXT", name).find((row) => isSpfRecord(normalizeValue(type, row.value)));
|
|
541
|
-
const includeHost = record.value.match(/include:([^\s"]+)/i)?.[1] || "spf.groundmail.dev";
|
|
542
|
-
const current = existing ? normalizeValue(type, existing.value) : void 0;
|
|
543
|
-
const merged = mergeSpfInclude(current, includeHost);
|
|
544
|
-
if (existing && current?.trim() === merged.trim()) {
|
|
545
|
-
done("unchanged", "SPF already includes Groundmail");
|
|
546
|
-
continue;
|
|
547
|
-
}
|
|
548
|
-
if (existing) {
|
|
549
|
-
await store.update(existing, { name, type, value: merged });
|
|
550
|
-
done("merged", merged);
|
|
551
|
-
} else {
|
|
552
|
-
await store.create({ name, type, value: merged });
|
|
553
|
-
done("created", merged);
|
|
554
|
-
}
|
|
555
|
-
} else {
|
|
556
|
-
const sameName = at("TXT", name);
|
|
557
|
-
if (sameName.some((row) => normalizeValue(type, row.value) === value)) {
|
|
558
|
-
done("unchanged");
|
|
559
|
-
continue;
|
|
560
|
-
}
|
|
561
|
-
const replaceable = sameName.find((row) => ownedTxt(record.purpose, normalizeValue(type, row.value)));
|
|
562
|
-
if (replaceable) {
|
|
563
|
-
await store.update(replaceable, { name, type, value });
|
|
564
|
-
done("updated");
|
|
565
|
-
} else {
|
|
566
|
-
await store.create({ name, type, value });
|
|
567
|
-
done("created");
|
|
568
|
-
}
|
|
569
|
-
}
|
|
570
|
-
cached = await store.list();
|
|
571
|
-
}
|
|
572
|
-
return results;
|
|
573
|
-
}
|
|
574
|
-
async function resolveZone(domain, hostLabel, lookup) {
|
|
575
|
-
for (const candidate of zoneNameCandidates2(domain)) {
|
|
576
|
-
const info = await lookup(candidate);
|
|
577
|
-
if (info !== null) return { zone: candidate, info };
|
|
578
|
-
}
|
|
579
|
-
throw new Error(`No ${hostLabel} DNS zone found for ${domain}. The domain must use ${hostLabel} nameservers.`);
|
|
648
|
+
function createGoDaddyProvider(options) {
|
|
649
|
+
if ("apiToken" in options) return createGoDaddyTokenProvider({ apiToken: options.apiToken, fetchImpl: options.fetchImpl });
|
|
650
|
+
return createGoDaddyKeyProvider(options);
|
|
580
651
|
}
|
|
581
652
|
|
|
582
653
|
// src/dns/digitalocean.ts
|
|
@@ -734,7 +805,7 @@ function createNetlifyProvider(options) {
|
|
|
734
805
|
const rows = await netlify(`/dns_zones/${info.id}/dns_records`);
|
|
735
806
|
return rows.filter((row) => !row.managed).map((row) => ({
|
|
736
807
|
id: row.id,
|
|
737
|
-
name:
|
|
808
|
+
name: relativeName2(row.hostname, zone),
|
|
738
809
|
type: row.type,
|
|
739
810
|
value: row.value,
|
|
740
811
|
priority: row.priority ?? void 0
|
|
@@ -993,11 +1064,13 @@ function createDnsProvider(provider, credentials, fetchImpl) {
|
|
|
993
1064
|
});
|
|
994
1065
|
}
|
|
995
1066
|
if (provider === "godaddy") {
|
|
1067
|
+
const apiToken = credentials.godaddyApiToken;
|
|
1068
|
+
if (apiToken) return createGoDaddyProvider({ apiToken, fetchImpl });
|
|
996
1069
|
const apiKey = credentials.godaddyApiKey;
|
|
997
1070
|
const apiSecret = credentials.godaddyApiSecret;
|
|
998
1071
|
if (!apiKey || !apiSecret) {
|
|
999
1072
|
throw new Error(
|
|
1000
|
-
"Missing GoDaddy credentials. Set GODADDY_API_KEY and GODADDY_API_SECRET."
|
|
1073
|
+
"Missing GoDaddy credentials. Set GODADDY_PAT (a Personal Access Token), or GODADDY_API_KEY and GODADDY_API_SECRET."
|
|
1001
1074
|
);
|
|
1002
1075
|
}
|
|
1003
1076
|
return createGoDaddyProvider({ apiKey, apiSecret, fetchImpl });
|
|
@@ -1395,6 +1468,7 @@ var DomainsResource = class {
|
|
|
1395
1468
|
credentials: {
|
|
1396
1469
|
cloudflareApiToken: params.cloudflareApiToken,
|
|
1397
1470
|
cloudflareZoneId: params.cloudflareZoneId,
|
|
1471
|
+
godaddyApiToken: params.godaddyApiToken,
|
|
1398
1472
|
godaddyApiKey: params.godaddyApiKey,
|
|
1399
1473
|
godaddyApiSecret: params.godaddyApiSecret,
|
|
1400
1474
|
vercelApiToken: params.vercelApiToken,
|
package/dist/clerk.d.ts
CHANGED
package/dist/clerk.js
CHANGED
|
@@ -1020,7 +1020,8 @@ type RemoteApplyDnsCredentials = {
|
|
|
1020
1020
|
zoneId?: string;
|
|
1021
1021
|
cloudflareApiToken?: string;
|
|
1022
1022
|
cloudflareZoneId?: string;
|
|
1023
|
-
/** GoDaddy one-time credentials. */
|
|
1023
|
+
/** GoDaddy one-time credentials: a Personal Access Token in apiToken, or the classic key and secret. */
|
|
1024
|
+
godaddyApiToken?: string;
|
|
1024
1025
|
apiKey?: string;
|
|
1025
1026
|
apiSecret?: string;
|
|
1026
1027
|
godaddyApiKey?: string;
|
|
@@ -1041,6 +1042,8 @@ type ApplyDnsParams = {
|
|
|
1041
1042
|
idOrName: string;
|
|
1042
1043
|
cloudflareApiToken?: string;
|
|
1043
1044
|
cloudflareZoneId?: string;
|
|
1045
|
+
/** GoDaddy Personal Access Token (preferred over the key and secret). */
|
|
1046
|
+
godaddyApiToken?: string;
|
|
1044
1047
|
godaddyApiKey?: string;
|
|
1045
1048
|
godaddyApiSecret?: string;
|
|
1046
1049
|
vercelApiToken?: string;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { A as ApiErrorBody, D as DnsRecord } from './client-
|
|
2
|
-
export { a as ApiErrorCode, b as ApiKey, c as ApiKeyScope, d as ApplyDnsParams, e as ApplyDnsRecordResult, f as ApplyDnsResult, g as Asset, h as Automation, i as AutomationResult, j as AutomationRun, k as AutomationRunResponse, l as AutomationRunStatus, m as AutomationRunStep, n as AutomationRunStepStatus, o as AutomationStatus, p as AutomationStep, q as AutomationTrigger, B as BatchSendEmailResult, r as BounceType, C as CategoryOptOut, s as CategoryOptOutCategory, t as CategoryUnsubscribedErrorDetails, u as ConnectTwilioParams, v as ContactWebhookEventPayload, w as CreateApiKeyParams, x as CreateApiKeyResult, y as CreateAutomationParams, z as CreateDomainParams, E as CreateDomainResult, F as CreateMigrationParams, H as CreateSuppressionParams, I as CreateTemplateParams, J as CreateTenantParams, K as CreateWebhookParams, L as DEFAULT_API_BASE_URL, M as DailyRampLimitErrorDetails, N as DeleteTenantResult, O as DeliverabilityBucket, P as DeliverabilityDomainInsight, Q as DeliverabilityInsightsResult, R as DeliverabilityMailServerRelay, T as DeliverabilityWindow, U as DmarcDailyPoint, V as DmarcMonitoring, W as DmarcMonitoringDisabled, X as DmarcReadiness, Y as DmarcReadinessVerdict, Z as DmarcSource, _ as DmarcSourceStatus, $ as DmarcStatus, a0 as DnsProviderName, a1 as Domain, a2 as DomainBimiAnalysis, a3 as DomainDetailResult, a4 as DomainDmarcAnalysis, a5 as DomainDnsAnalysis, a6 as DomainStatus, a7 as DomainTlsMode, a8 as DomainTrackingDns, a9 as DomainTrackingStatus, aa as EmailListItem, ab as EmailWebhookEventPayload, ac as EmailWebhookEventType, ad as EnableDmarcParams, ae as EnableDmarcResult, af as EnrollmentSkip, ag as EventRecord, G as Groundmail, ah as GroundmailAccessToken, ai as GroundmailOptions, aj as GroundmailTokenOptions, ak as GroundmailTokenProvider, al as HeldBackErrorDetails, am as HeldBackReason, an as HeldBackRecipient, ao as ListApiKeysParams, ap as ListApiKeysResult, aq as ListAutomationRunsParams, ar as ListAutomationRunsResult, as as ListAutomationsResult, at as ListCategoryOptOutsParams, au as ListCategoryOptOutsResult, av as ListDomainsParams, aw as ListDomainsResult, ax as ListEmailsParams, ay as ListEmailsResult, az as ListReceivedEmailsParams, aA as ListReceivedEmailsResult, aB as ListSuppressionsParams, aC as ListSuppressionsResult, aD as ListTemplatesParams, aE as ListTemplatesResult, aF as ListTenantDomainsResult, aG as ListTenantsParams, aH as ListTenantsResult, aI as ListTestInboxEmailsParams, aJ as ListTestInboxEmailsResult, aK as MailServerSigningStatus, aL as MailStream, aM as Migration, aN as MigrationDnsChange, aO as MigrationDnsPlan, aP as MigrationDomainItem, aQ as MigrationItemStatus, aR as MigrationProvider, aS as MigrationResource, aT as MigrationSummary, aU as MigrationTemplateItem, aV as MigrationTotals, aW as MigrationWebhookItem, aX as ReceivedEmail, aY as ReceivedEmailAttachment, aZ as ReceivedEmailAttachmentMeta, a_ as RemoteApplyDnsCredentials, a$ as RemoveCategoryOptOutOptions, b0 as RunMigrationOptions, b1 as SendEmailParams, S as SendEmailResult, b2 as StreamDeliverability, b3 as SuppressedErrorDetails, b4 as Suppression, b5 as TEST_INBOX_WAIT_DEFAULT_MS, b6 as TEST_INBOX_WAIT_MAX_SECONDS, b7 as Template, b8 as TemplateFormat, b9 as TemplateLintWarning, ba as TemplateStarter, bb as TemplateStatus, bc as TemplateVersion, bd as Tenant, be as TenantPauseSource, bf as TenantRamp, bg as TenantStats, bh as TenantStatsResult, bi as TenantStatus, bj as TenantStreamPolicy, bk as TestEmailWebhookParams, bl as TestEmailWebhookResult, bm as TestInbox, bn as TestInboxAddressOptions, bo as TestInboxEmail, bp as TestInboxEmailDetail, bq as TestInboxHeader, br as TestInboxResource, bs as TestInboxUsage, bt as TriggerEventParams, bu as TriggerEventResult, bv as TwilioIntegrationResponse, bw as TwilioIntegrationStatus, bx as UpdateAutomationParams, by as UpdateDomainParams, bz as UpdateEmailParams, bA as UpdateTemplateParams, bB as UpdateTenantParams, bC as UpdateWebhookParams, bD as ValidateEmailResult, bE as ValidationReason, bF as ValidationVerdict, bG as VerifyDomainResult, bH as WaitForTestEmailParams, bI as WebhookEmailTag, bJ as WebhookEndpoint, bK as WebhookEndpointWithSecret, bL as WebhookEventType, bM as mergeMigrations, bN as normalizeAccessToken } from './client-
|
|
1
|
+
import { A as ApiErrorBody, D as DnsRecord } from './client-DdtHUMEu.js';
|
|
2
|
+
export { a as ApiErrorCode, b as ApiKey, c as ApiKeyScope, d as ApplyDnsParams, e as ApplyDnsRecordResult, f as ApplyDnsResult, g as Asset, h as Automation, i as AutomationResult, j as AutomationRun, k as AutomationRunResponse, l as AutomationRunStatus, m as AutomationRunStep, n as AutomationRunStepStatus, o as AutomationStatus, p as AutomationStep, q as AutomationTrigger, B as BatchSendEmailResult, r as BounceType, C as CategoryOptOut, s as CategoryOptOutCategory, t as CategoryUnsubscribedErrorDetails, u as ConnectTwilioParams, v as ContactWebhookEventPayload, w as CreateApiKeyParams, x as CreateApiKeyResult, y as CreateAutomationParams, z as CreateDomainParams, E as CreateDomainResult, F as CreateMigrationParams, H as CreateSuppressionParams, I as CreateTemplateParams, J as CreateTenantParams, K as CreateWebhookParams, L as DEFAULT_API_BASE_URL, M as DailyRampLimitErrorDetails, N as DeleteTenantResult, O as DeliverabilityBucket, P as DeliverabilityDomainInsight, Q as DeliverabilityInsightsResult, R as DeliverabilityMailServerRelay, T as DeliverabilityWindow, U as DmarcDailyPoint, V as DmarcMonitoring, W as DmarcMonitoringDisabled, X as DmarcReadiness, Y as DmarcReadinessVerdict, Z as DmarcSource, _ as DmarcSourceStatus, $ as DmarcStatus, a0 as DnsProviderName, a1 as Domain, a2 as DomainBimiAnalysis, a3 as DomainDetailResult, a4 as DomainDmarcAnalysis, a5 as DomainDnsAnalysis, a6 as DomainStatus, a7 as DomainTlsMode, a8 as DomainTrackingDns, a9 as DomainTrackingStatus, aa as EmailListItem, ab as EmailWebhookEventPayload, ac as EmailWebhookEventType, ad as EnableDmarcParams, ae as EnableDmarcResult, af as EnrollmentSkip, ag as EventRecord, G as Groundmail, ah as GroundmailAccessToken, ai as GroundmailOptions, aj as GroundmailTokenOptions, ak as GroundmailTokenProvider, al as HeldBackErrorDetails, am as HeldBackReason, an as HeldBackRecipient, ao as ListApiKeysParams, ap as ListApiKeysResult, aq as ListAutomationRunsParams, ar as ListAutomationRunsResult, as as ListAutomationsResult, at as ListCategoryOptOutsParams, au as ListCategoryOptOutsResult, av as ListDomainsParams, aw as ListDomainsResult, ax as ListEmailsParams, ay as ListEmailsResult, az as ListReceivedEmailsParams, aA as ListReceivedEmailsResult, aB as ListSuppressionsParams, aC as ListSuppressionsResult, aD as ListTemplatesParams, aE as ListTemplatesResult, aF as ListTenantDomainsResult, aG as ListTenantsParams, aH as ListTenantsResult, aI as ListTestInboxEmailsParams, aJ as ListTestInboxEmailsResult, aK as MailServerSigningStatus, aL as MailStream, aM as Migration, aN as MigrationDnsChange, aO as MigrationDnsPlan, aP as MigrationDomainItem, aQ as MigrationItemStatus, aR as MigrationProvider, aS as MigrationResource, aT as MigrationSummary, aU as MigrationTemplateItem, aV as MigrationTotals, aW as MigrationWebhookItem, aX as ReceivedEmail, aY as ReceivedEmailAttachment, aZ as ReceivedEmailAttachmentMeta, a_ as RemoteApplyDnsCredentials, a$ as RemoveCategoryOptOutOptions, b0 as RunMigrationOptions, b1 as SendEmailParams, S as SendEmailResult, b2 as StreamDeliverability, b3 as SuppressedErrorDetails, b4 as Suppression, b5 as TEST_INBOX_WAIT_DEFAULT_MS, b6 as TEST_INBOX_WAIT_MAX_SECONDS, b7 as Template, b8 as TemplateFormat, b9 as TemplateLintWarning, ba as TemplateStarter, bb as TemplateStatus, bc as TemplateVersion, bd as Tenant, be as TenantPauseSource, bf as TenantRamp, bg as TenantStats, bh as TenantStatsResult, bi as TenantStatus, bj as TenantStreamPolicy, bk as TestEmailWebhookParams, bl as TestEmailWebhookResult, bm as TestInbox, bn as TestInboxAddressOptions, bo as TestInboxEmail, bp as TestInboxEmailDetail, bq as TestInboxHeader, br as TestInboxResource, bs as TestInboxUsage, bt as TriggerEventParams, bu as TriggerEventResult, bv as TwilioIntegrationResponse, bw as TwilioIntegrationStatus, bx as UpdateAutomationParams, by as UpdateDomainParams, bz as UpdateEmailParams, bA as UpdateTemplateParams, bB as UpdateTenantParams, bC as UpdateWebhookParams, bD as ValidateEmailResult, bE as ValidationReason, bF as ValidationVerdict, bG as VerifyDomainResult, bH as WaitForTestEmailParams, bI as WebhookEmailTag, bJ as WebhookEndpoint, bK as WebhookEndpointWithSecret, bL as WebhookEventType, bM as mergeMigrations, bN as normalizeAccessToken } from './client-DdtHUMEu.js';
|
|
3
3
|
|
|
4
4
|
type GroundmailErrorOptions = {
|
|
5
5
|
code?: string;
|
|
@@ -95,6 +95,8 @@ type ApplyDnsResult = {
|
|
|
95
95
|
type ApplyDnsCredentials = {
|
|
96
96
|
cloudflareApiToken?: string;
|
|
97
97
|
cloudflareZoneId?: string;
|
|
98
|
+
/** GoDaddy Personal Access Token (preferred over the key and secret). */
|
|
99
|
+
godaddyApiToken?: string;
|
|
98
100
|
godaddyApiKey?: string;
|
|
99
101
|
godaddyApiSecret?: string;
|
|
100
102
|
vercelApiToken?: string;
|
package/dist/index.js
CHANGED
package/dist/payload.d.ts
CHANGED
package/dist/payload.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "groundmail",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.28.0",
|
|
4
4
|
"description": "Groundmail transactional email API client",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -89,7 +89,7 @@
|
|
|
89
89
|
"prepublishOnly": "npm run build && npm run build:nodemailer-bridge"
|
|
90
90
|
},
|
|
91
91
|
"dependencies": {
|
|
92
|
-
"groundmail-nodemailer": "0.15.
|
|
92
|
+
"groundmail-nodemailer": "0.15.16"
|
|
93
93
|
},
|
|
94
94
|
"devDependencies": {
|
|
95
95
|
"@types/nodemailer": "^8.0.1",
|