dkimkit 0.0.0-stage → 0.6.1

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.
Files changed (128) hide show
  1. package/README.md +153 -2
  2. package/dist/src/cli.d.ts +2 -0
  3. package/dist/src/cli.js +398 -0
  4. package/dist/src/cli.js.map +1 -0
  5. package/dist/src/dns-host.d.ts +10 -0
  6. package/dist/src/dns-host.js +31 -0
  7. package/dist/src/dns-host.js.map +1 -0
  8. package/dist/src/errors.d.ts +17 -0
  9. package/dist/src/errors.js +51 -0
  10. package/dist/src/errors.js.map +1 -0
  11. package/dist/src/hosted/api.d.ts +95 -0
  12. package/dist/src/hosted/api.js +781 -0
  13. package/dist/src/hosted/api.js.map +1 -0
  14. package/dist/src/hosted/auth.d.ts +70 -0
  15. package/dist/src/hosted/auth.js +121 -0
  16. package/dist/src/hosted/auth.js.map +1 -0
  17. package/dist/src/hosted/billing-dodo.d.ts +58 -0
  18. package/dist/src/hosted/billing-dodo.js +139 -0
  19. package/dist/src/hosted/billing-dodo.js.map +1 -0
  20. package/dist/src/hosted/billing-stripe.d.ts +82 -0
  21. package/dist/src/hosted/billing-stripe.js +205 -0
  22. package/dist/src/hosted/billing-stripe.js.map +1 -0
  23. package/dist/src/hosted/billing.d.ts +114 -0
  24. package/dist/src/hosted/billing.js +173 -0
  25. package/dist/src/hosted/billing.js.map +1 -0
  26. package/dist/src/hosted/cli.d.ts +2 -0
  27. package/dist/src/hosted/cli.js +305 -0
  28. package/dist/src/hosted/cli.js.map +1 -0
  29. package/dist/src/hosted/crypto.d.ts +22 -0
  30. package/dist/src/hosted/crypto.js +55 -0
  31. package/dist/src/hosted/crypto.js.map +1 -0
  32. package/dist/src/hosted/index.d.ts +7 -0
  33. package/dist/src/hosted/index.js +11 -0
  34. package/dist/src/hosted/index.js.map +1 -0
  35. package/dist/src/hosted/markdown.d.ts +16 -0
  36. package/dist/src/hosted/markdown.js +168 -0
  37. package/dist/src/hosted/markdown.js.map +1 -0
  38. package/dist/src/hosted/net.d.ts +9 -0
  39. package/dist/src/hosted/net.js +60 -0
  40. package/dist/src/hosted/net.js.map +1 -0
  41. package/dist/src/hosted/postgres-store.d.ts +62 -0
  42. package/dist/src/hosted/postgres-store.js +387 -0
  43. package/dist/src/hosted/postgres-store.js.map +1 -0
  44. package/dist/src/hosted/serialize.d.ts +144 -0
  45. package/dist/src/hosted/serialize.js +126 -0
  46. package/dist/src/hosted/serialize.js.map +1 -0
  47. package/dist/src/hosted/service.d.ts +166 -0
  48. package/dist/src/hosted/service.js +582 -0
  49. package/dist/src/hosted/service.js.map +1 -0
  50. package/dist/src/hosted/site.d.ts +54 -0
  51. package/dist/src/hosted/site.js +472 -0
  52. package/dist/src/hosted/site.js.map +1 -0
  53. package/dist/src/hosted/sqlite-store.d.ts +45 -0
  54. package/dist/src/hosted/sqlite-store.js +351 -0
  55. package/dist/src/hosted/sqlite-store.js.map +1 -0
  56. package/dist/src/hosted/store.d.ts +257 -0
  57. package/dist/src/hosted/store.js +181 -0
  58. package/dist/src/hosted/store.js.map +1 -0
  59. package/dist/src/hosted/widget.d.ts +46 -0
  60. package/dist/src/hosted/widget.js +130 -0
  61. package/dist/src/hosted/widget.js.map +1 -0
  62. package/dist/src/hosted/worker.d.ts +45 -0
  63. package/dist/src/hosted/worker.js +142 -0
  64. package/dist/src/hosted/worker.js.map +1 -0
  65. package/dist/src/http.d.ts +14 -0
  66. package/dist/src/http.js +54 -0
  67. package/dist/src/http.js.map +1 -0
  68. package/dist/src/index.d.ts +19 -0
  69. package/dist/src/index.js +19 -0
  70. package/dist/src/index.js.map +1 -0
  71. package/dist/src/orchestrator.d.ts +70 -0
  72. package/dist/src/orchestrator.js +69 -0
  73. package/dist/src/orchestrator.js.map +1 -0
  74. package/dist/src/propagation.d.ts +30 -0
  75. package/dist/src/propagation.js +76 -0
  76. package/dist/src/propagation.js.map +1 -0
  77. package/dist/src/providers/dns/aws.d.ts +28 -0
  78. package/dist/src/providers/dns/aws.js +103 -0
  79. package/dist/src/providers/dns/aws.js.map +1 -0
  80. package/dist/src/providers/dns/cloudflare.d.ts +26 -0
  81. package/dist/src/providers/dns/cloudflare.js +97 -0
  82. package/dist/src/providers/dns/cloudflare.js.map +1 -0
  83. package/dist/src/providers/dns/manual.d.ts +12 -0
  84. package/dist/src/providers/dns/manual.js +18 -0
  85. package/dist/src/providers/dns/manual.js.map +1 -0
  86. package/dist/src/providers/dns/route53.d.ts +34 -0
  87. package/dist/src/providers/dns/route53.js +176 -0
  88. package/dist/src/providers/dns/route53.js.map +1 -0
  89. package/dist/src/providers/email/factory.d.ts +29 -0
  90. package/dist/src/providers/email/factory.js +67 -0
  91. package/dist/src/providers/email/factory.js.map +1 -0
  92. package/dist/src/providers/email/mailgun.d.ts +36 -0
  93. package/dist/src/providers/email/mailgun.js +141 -0
  94. package/dist/src/providers/email/mailgun.js.map +1 -0
  95. package/dist/src/providers/email/postmark.d.ts +37 -0
  96. package/dist/src/providers/email/postmark.js +121 -0
  97. package/dist/src/providers/email/postmark.js.map +1 -0
  98. package/dist/src/providers/email/sendgrid.d.ts +31 -0
  99. package/dist/src/providers/email/sendgrid.js +109 -0
  100. package/dist/src/providers/email/sendgrid.js.map +1 -0
  101. package/dist/src/providers/email/ses.d.ts +39 -0
  102. package/dist/src/providers/email/ses.js +123 -0
  103. package/dist/src/providers/email/ses.js.map +1 -0
  104. package/dist/src/providers/factory.d.ts +14 -0
  105. package/dist/src/providers/factory.js +32 -0
  106. package/dist/src/providers/factory.js.map +1 -0
  107. package/dist/src/records.d.ts +35 -0
  108. package/dist/src/records.js +109 -0
  109. package/dist/src/records.js.map +1 -0
  110. package/dist/src/server.d.ts +67 -0
  111. package/dist/src/server.js +301 -0
  112. package/dist/src/server.js.map +1 -0
  113. package/dist/src/types.d.ts +75 -0
  114. package/dist/src/types.js +2 -0
  115. package/dist/src/types.js.map +1 -0
  116. package/dist/src/xml.d.ts +6 -0
  117. package/dist/src/xml.js +23 -0
  118. package/dist/src/xml.js.map +1 -0
  119. package/docs/billing.md +43 -0
  120. package/docs/getting-started.md +57 -0
  121. package/docs/hosted-api.md +192 -0
  122. package/docs/self-hosting.md +148 -0
  123. package/docs/widget.md +121 -0
  124. package/package.json +63 -4
  125. package/web/dashboard.html +390 -0
  126. package/web/index.html +697 -0
  127. package/web/widget-frame.html +480 -0
  128. package/web/widget.js +91 -0
@@ -0,0 +1,17 @@
1
+ import type { PlannedChange } from './types.js';
2
+ export declare class ApiError extends Error {
3
+ readonly provider: string;
4
+ readonly status: number;
5
+ readonly body?: unknown | undefined;
6
+ constructor(provider: string, status: number, message: string, body?: unknown | undefined);
7
+ }
8
+ export declare class DnsConflictError extends Error {
9
+ readonly conflicts: PlannedChange[];
10
+ constructor(conflicts: PlannedChange[]);
11
+ }
12
+ /** Missing or invalid configuration (credentials, options) — the user's to fix. */
13
+ export declare class ConfigError extends Error {
14
+ constructor(message: string);
15
+ }
16
+ /** What to check when a provider rejects the credentials. */
17
+ export declare function apiErrorHint(err: ApiError): string | undefined;
@@ -0,0 +1,51 @@
1
+ import { describeRecord } from './records.js';
2
+ export class ApiError extends Error {
3
+ provider;
4
+ status;
5
+ body;
6
+ constructor(provider, status, message, body) {
7
+ super(`${provider} API error (${status}): ${message}`);
8
+ this.provider = provider;
9
+ this.status = status;
10
+ this.body = body;
11
+ this.name = 'ApiError';
12
+ }
13
+ }
14
+ export class DnsConflictError extends Error {
15
+ conflicts;
16
+ constructor(conflicts) {
17
+ const lines = conflicts.map((c) => ` ${describeRecord(c.record)}: ${c.reason}`);
18
+ super(`DNS records conflict with existing ones:\n${lines.join('\n')}`);
19
+ this.conflicts = conflicts;
20
+ this.name = 'DnsConflictError';
21
+ }
22
+ }
23
+ /** Missing or invalid configuration (credentials, options) — the user's to fix. */
24
+ export class ConfigError extends Error {
25
+ constructor(message) {
26
+ super(message);
27
+ this.name = 'ConfigError';
28
+ }
29
+ }
30
+ /** What to check when a provider rejects the credentials. */
31
+ export function apiErrorHint(err) {
32
+ if (err.status !== 401 && err.status !== 403)
33
+ return undefined;
34
+ switch (err.provider) {
35
+ case 'SendGrid':
36
+ return 'Check the SendGrid API key has Sender Authentication and Inbound Parse permissions.';
37
+ case 'Postmark':
38
+ return 'Check the Postmark account API token (Account → API Tokens, not a server token).';
39
+ case 'Mailgun':
40
+ return 'Check the Mailgun API key, and that the region (US or EU) matches the account.';
41
+ case 'Amazon SES':
42
+ return 'Check the AWS credentials and region, and that they allow ses:CreateEmailIdentity, GetEmailIdentity, PutEmailIdentityMailFromAttributes and DeleteEmailIdentity.';
43
+ case 'Cloudflare':
44
+ return 'Check the Cloudflare token has Zone:Read and DNS:Edit for this zone.';
45
+ case 'Route53':
46
+ return 'Check the AWS credentials allow route53:ListHostedZonesByName, route53:ListResourceRecordSets and route53:ChangeResourceRecordSets.';
47
+ default:
48
+ return undefined;
49
+ }
50
+ }
51
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,OAAO,QAAS,SAAQ,KAAK;IAEtB;IACA;IAEA;IAJX,YACW,QAAgB,EAChB,MAAc,EACvB,OAAe,EACN,IAAc;QAEvB,KAAK,CAAC,GAAG,QAAQ,eAAe,MAAM,MAAM,OAAO,EAAE,CAAC,CAAC;QAL9C,aAAQ,GAAR,QAAQ,CAAQ;QAChB,WAAM,GAAN,MAAM,CAAQ;QAEd,SAAI,GAAJ,IAAI,CAAU;QAGvB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACpB;IAArB,YAAqB,SAA0B;QAC7C,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,6CAA6C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAFpD,cAAS,GAAT,SAAS,CAAiB;QAG7C,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,6DAA6D;AAC7D,MAAM,UAAU,YAAY,CAAC,GAAa;IACxC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IAC/D,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,UAAU;YACb,OAAO,qFAAqF,CAAC;QAC/F,KAAK,UAAU;YACb,OAAO,kFAAkF,CAAC;QAC5F,KAAK,SAAS;YACZ,OAAO,gFAAgF,CAAC;QAC1F,KAAK,YAAY;YACf,OAAO,kKAAkK,CAAC;QAC5K,KAAK,YAAY;YACf,OAAO,sEAAsE,CAAC;QAChF,KAAK,SAAS;YACZ,OAAO,qIAAqI,CAAC;QAC/I;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,95 @@
1
+ import { type IncomingMessage, type Server, type ServerResponse } from 'node:http';
2
+ import type { FetchLike } from '../http.js';
3
+ import type { DnsHost } from '../dns-host.js';
4
+ import type { DnsLookup } from '../propagation.js';
5
+ import { AccountAuth, type Mailer } from './auth.js';
6
+ import { BillingService, type BillingConfig } from './billing.js';
7
+ import { Site, type SiteOptions } from './site.js';
8
+ import { DomainService, type DomainInput, type Logger, type ProviderFactory } from './service.js';
9
+ import { type Store } from './store.js';
10
+ import { WidgetService } from './widget.js';
11
+ import { BackgroundRunner } from './worker.js';
12
+ export interface WidgetAssets {
13
+ loader: string;
14
+ frame: string;
15
+ dashboard: string;
16
+ }
17
+ export declare function loadWidgetAssets(): WidgetAssets;
18
+ export interface ApiOptions {
19
+ service: DomainService;
20
+ widget: WidgetService;
21
+ /** Self-serve sign-up and the dashboard. Requires publicUrl. */
22
+ auth?: AccountAuth;
23
+ /** Pay-as-you-go billing. Without it there's no free-tier cap and no checkout. */
24
+ billing?: BillingService;
25
+ /** The public website (landing, pricing, docs, legal pages). */
26
+ site?: Site;
27
+ assets?: WidgetAssets;
28
+ /** Public base URL (e.g. https://api.example.com) used in widget links. Defaults to the request's host. */
29
+ publicUrl?: string;
30
+ /** Requests per second per account, with bursts up to `burst`. */
31
+ rateLimit?: {
32
+ perSecond: number;
33
+ burst: number;
34
+ };
35
+ now?: () => number;
36
+ log?: Logger;
37
+ }
38
+ /** The request handler, separate from the listener so it can be mounted elsewhere. */
39
+ export declare function createApiHandler(opts: ApiOptions): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
40
+ /** from/to as inclusive UTC days; defaults to the current calendar month so far. */
41
+ export declare function parseUsagePeriod(query: URLSearchParams, now: number): {
42
+ from: string;
43
+ to: string;
44
+ };
45
+ export declare function parseDomainInput(body: Record<string, unknown>): DomainInput;
46
+ export interface HostedApiOptions {
47
+ /** postgres://… URL, or a SQLite file path (default ':memory:'). Ignored when `store` is given. */
48
+ database?: string;
49
+ store?: Store;
50
+ encryptionKey: string;
51
+ port?: number;
52
+ host?: string;
53
+ /** Run the background runner in this process. Default true. */
54
+ workers?: boolean;
55
+ runner?: {
56
+ concurrency?: number;
57
+ pollMs?: number;
58
+ };
59
+ rateLimit?: {
60
+ perSecond: number;
61
+ burst: number;
62
+ };
63
+ providers?: ProviderFactory;
64
+ lookup?: (domain: string) => Promise<DnsLookup>;
65
+ fetch?: FetchLike;
66
+ now?: () => number;
67
+ allowPrivateWebhooks?: boolean;
68
+ /** Public base URL for widget links (PUBLIC_URL). */
69
+ publicUrl?: string;
70
+ /** Override DNS host detection (tests). */
71
+ detectHost?: (domain: string) => Promise<DnsHost>;
72
+ /** Self-serve sign-up and dashboard (needs publicUrl). Without a mailer, sign-in links are logged. */
73
+ signup?: {
74
+ mailer?: Mailer;
75
+ appName?: string;
76
+ };
77
+ /** Pay-as-you-go billing (needs publicUrl). */
78
+ billing?: BillingConfig;
79
+ /** The public website (needs publicUrl). */
80
+ site?: SiteOptions;
81
+ log?: Logger;
82
+ }
83
+ export interface HostedApi {
84
+ url: string;
85
+ port: number;
86
+ server: Server;
87
+ store: Store;
88
+ service: DomainService;
89
+ runner: BackgroundRunner;
90
+ billing?: BillingService;
91
+ auth?: AccountAuth;
92
+ site?: Site;
93
+ close(): Promise<void>;
94
+ }
95
+ export declare function startHostedApi(opts: HostedApiOptions): Promise<HostedApi>;