@hasna/domains 0.0.26 → 0.0.28

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 (55) hide show
  1. package/README.md +28 -0
  2. package/dist/cli/commands/brandsight.d.ts.map +1 -1
  3. package/dist/cli/commands/db.d.ts +7 -0
  4. package/dist/cli/commands/db.d.ts.map +1 -0
  5. package/dist/cli/commands/dns.d.ts.map +1 -1
  6. package/dist/cli/commands/domain.d.ts.map +1 -1
  7. package/dist/cli/commands/history.d.ts.map +1 -1
  8. package/dist/cli/commands/monitor.d.ts.map +1 -1
  9. package/dist/cli/commands/owner.d.ts.map +1 -1
  10. package/dist/cli/commands/research.d.ts.map +1 -1
  11. package/dist/cli/commands/route53.d.ts.map +1 -1
  12. package/dist/cli/commands/sedo.d.ts.map +1 -1
  13. package/dist/cli/commands/ssl.d.ts.map +1 -1
  14. package/dist/cli/commands/storage.d.ts.map +1 -1
  15. package/dist/cli/commands/wallet.d.ts.map +1 -1
  16. package/dist/cli/commands/zone.d.ts.map +1 -1
  17. package/dist/cli/index.js +33920 -18160
  18. package/dist/generated/storage-kit/health.d.ts +20 -0
  19. package/dist/generated/storage-kit/health.d.ts.map +1 -0
  20. package/dist/generated/storage-kit/index.d.ts +8 -0
  21. package/dist/generated/storage-kit/index.d.ts.map +1 -0
  22. package/dist/generated/storage-kit/migrations.d.ts +48 -0
  23. package/dist/generated/storage-kit/migrations.d.ts.map +1 -0
  24. package/dist/generated/storage-kit/mode.d.ts +48 -0
  25. package/dist/generated/storage-kit/mode.d.ts.map +1 -0
  26. package/dist/generated/storage-kit/pool.d.ts +34 -0
  27. package/dist/generated/storage-kit/pool.d.ts.map +1 -0
  28. package/dist/generated/storage-kit/query.d.ts +36 -0
  29. package/dist/generated/storage-kit/query.d.ts.map +1 -0
  30. package/dist/generated/storage-kit/tls.d.ts +26 -0
  31. package/dist/generated/storage-kit/tls.d.ts.map +1 -0
  32. package/dist/index.js +34299 -19874
  33. package/dist/lib/compact-output.d.ts +31 -0
  34. package/dist/lib/compact-output.d.ts.map +1 -0
  35. package/dist/mcp/index.d.ts.map +1 -1
  36. package/dist/mcp/index.js +23162 -3581
  37. package/dist/mcp/storage-tools.d.ts.map +1 -1
  38. package/dist/sdk/client.d.ts +198 -0
  39. package/dist/sdk/client.d.ts.map +1 -0
  40. package/dist/sdk/index.d.ts +14 -0
  41. package/dist/sdk/index.d.ts.map +1 -0
  42. package/dist/sdk/index.js +176 -0
  43. package/dist/server/app.d.ts +33 -0
  44. package/dist/server/app.d.ts.map +1 -0
  45. package/dist/server/index.d.ts +19 -0
  46. package/dist/server/index.d.ts.map +1 -0
  47. package/dist/server/index.js +1384 -0
  48. package/dist/server/migrations.d.ts +22 -0
  49. package/dist/server/migrations.d.ts.map +1 -0
  50. package/dist/server/openapi.d.ts +25 -0
  51. package/dist/server/openapi.d.ts.map +1 -0
  52. package/dist/server/repo.d.ts +44 -0
  53. package/dist/server/repo.d.ts.map +1 -0
  54. package/dist/storage.js +2 -4868
  55. package/package.json +14 -5
@@ -1 +1 @@
1
- {"version":3,"file":"storage-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/storage-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuBzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0DnE"}
1
+ {"version":3,"file":"storage-tools.d.ts","sourceRoot":"","sources":["../../src/mcp/storage-tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AA8BzE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA2EnE"}
@@ -0,0 +1,198 @@
1
+ export interface Error {
2
+ "error": string;
3
+ "reason"?: string;
4
+ }
5
+ export interface HealthResponse {
6
+ "status": string;
7
+ "version": string;
8
+ "mode": string;
9
+ "latencyMs"?: number;
10
+ }
11
+ export interface ReadyResponse {
12
+ "status": string;
13
+ "version": string;
14
+ "mode": string;
15
+ "pendingMigrations"?: Array<string>;
16
+ }
17
+ export interface VersionResponse {
18
+ "status": string;
19
+ "version": string;
20
+ "mode": string;
21
+ }
22
+ export interface DeleteResult {
23
+ "id": string;
24
+ "deleted": boolean;
25
+ }
26
+ export interface Domain {
27
+ "id": string;
28
+ "name": string;
29
+ "registrar"?: string | null;
30
+ "status": string;
31
+ "registered_at"?: string | null;
32
+ "expires_at"?: string | null;
33
+ "auto_renew": boolean;
34
+ "is_premium": boolean;
35
+ "premium_price"?: number | null;
36
+ "standard_price"?: number | null;
37
+ "purchase_price"?: number | null;
38
+ "purchase_date"?: string | null;
39
+ "nameservers"?: Array<string>;
40
+ "whois"?: Record<string, unknown>;
41
+ "ssl_expires_at"?: string | null;
42
+ "ssl_issuer"?: string | null;
43
+ "notes"?: string | null;
44
+ "metadata"?: Record<string, unknown>;
45
+ "created_at": string;
46
+ "updated_at": string;
47
+ }
48
+ export interface DomainList {
49
+ "domains": Array<Domain>;
50
+ "count": number;
51
+ }
52
+ export interface CreateDomainInput {
53
+ "name": string;
54
+ "registrar"?: string;
55
+ "status"?: string;
56
+ "registered_at"?: string;
57
+ "expires_at"?: string;
58
+ "auto_renew"?: boolean;
59
+ "is_premium"?: boolean;
60
+ "premium_price"?: number;
61
+ "standard_price"?: number;
62
+ "purchase_price"?: number;
63
+ "purchase_date"?: string;
64
+ "nameservers"?: Array<string>;
65
+ "whois"?: Record<string, unknown>;
66
+ "ssl_expires_at"?: string;
67
+ "ssl_issuer"?: string;
68
+ "notes"?: string;
69
+ "metadata"?: Record<string, unknown>;
70
+ }
71
+ export interface UpdateDomainInput {
72
+ "name"?: string;
73
+ "registrar"?: string | null;
74
+ "status"?: string;
75
+ "registered_at"?: string | null;
76
+ "expires_at"?: string | null;
77
+ "auto_renew"?: boolean;
78
+ "is_premium"?: boolean;
79
+ "premium_price"?: number | null;
80
+ "standard_price"?: number | null;
81
+ "purchase_price"?: number | null;
82
+ "purchase_date"?: string | null;
83
+ "nameservers"?: Array<string>;
84
+ "whois"?: Record<string, unknown>;
85
+ "ssl_expires_at"?: string | null;
86
+ "ssl_issuer"?: string | null;
87
+ "notes"?: string | null;
88
+ "metadata"?: Record<string, unknown>;
89
+ }
90
+ export interface DnsRecord {
91
+ "id": string;
92
+ "domain_id": string;
93
+ "type": string;
94
+ "name": string;
95
+ "value": string;
96
+ "ttl": number;
97
+ "priority"?: number | null;
98
+ "created_at": string;
99
+ }
100
+ export interface DnsRecordList {
101
+ "records": Array<DnsRecord>;
102
+ "count": number;
103
+ }
104
+ export interface CreateDnsRecordInput {
105
+ "type": "A" | "AAAA" | "CNAME" | "MX" | "TXT" | "NS" | "SRV";
106
+ "name": string;
107
+ "value": string;
108
+ "ttl"?: number;
109
+ "priority"?: number;
110
+ }
111
+ export interface DomainOffer {
112
+ "id": string;
113
+ "domain_id": string;
114
+ "our_offer"?: number | null;
115
+ "their_ask"?: number | null;
116
+ "status": string;
117
+ "notes"?: string | null;
118
+ "created_at": string;
119
+ }
120
+ export interface OfferList {
121
+ "offers": Array<DomainOffer>;
122
+ "count": number;
123
+ }
124
+ export interface CreateOfferInput {
125
+ "our_offer"?: number;
126
+ "their_ask"?: number;
127
+ "status"?: string;
128
+ "notes"?: string;
129
+ }
130
+ export interface DomainStats {
131
+ "total": number;
132
+ "active"?: number;
133
+ "expired"?: number;
134
+ "transferring"?: number;
135
+ "redemption"?: number;
136
+ "auto_renew_enabled"?: number;
137
+ "expiring_30_days"?: number;
138
+ "ssl_expiring_30_days"?: number;
139
+ }
140
+ export interface DomainsClientOptions {
141
+ /** Base URL, e.g. process.env.APP_API_URL. */
142
+ baseUrl: string;
143
+ /** API key, e.g. process.env.APP_API_KEY. Sent as the 'x-api-key' header. */
144
+ apiKey?: string;
145
+ /** Custom fetch (defaults to global fetch). */
146
+ fetch?: typeof fetch;
147
+ /** Extra headers merged into every request. */
148
+ headers?: Record<string, string>;
149
+ }
150
+ export declare class ApiError extends Error {
151
+ readonly status: number;
152
+ readonly body: unknown;
153
+ constructor(status: number, message: string, body: unknown);
154
+ }
155
+ export declare class DomainsClient {
156
+ private readonly baseUrl;
157
+ private readonly apiKey;
158
+ private readonly fetchImpl;
159
+ private readonly baseHeaders;
160
+ constructor(options: DomainsClientOptions);
161
+ private request;
162
+ /** Liveness probe (DB reachable). */
163
+ getHealth(init?: RequestInit): Promise<HealthResponse>;
164
+ /** Readiness probe (DB reachable and schema migrated). */
165
+ getReady(init?: RequestInit): Promise<ReadyResponse>;
166
+ /** Get a DNS record by id. */
167
+ getDnsRecord(id: string, init?: RequestInit): Promise<DnsRecord>;
168
+ /** Delete a DNS record. */
169
+ deleteDnsRecord(id: string, init?: RequestInit): Promise<DeleteResult>;
170
+ /** List domains. */
171
+ listDomains(query?: {
172
+ "search"?: string;
173
+ "status"?: string;
174
+ "limit"?: number;
175
+ "offset"?: number;
176
+ }, init?: RequestInit): Promise<DomainList>;
177
+ /** Create a domain. */
178
+ createDomain(body: CreateDomainInput, init?: RequestInit): Promise<Domain>;
179
+ /** Get a domain by id. */
180
+ getDomain(id: string, init?: RequestInit): Promise<Domain>;
181
+ /** Delete a domain. */
182
+ deleteDomain(id: string, init?: RequestInit): Promise<DeleteResult>;
183
+ /** Update a domain. */
184
+ updateDomain(id: string, body: UpdateDomainInput, init?: RequestInit): Promise<Domain>;
185
+ /** List DNS records for a domain. */
186
+ listDnsRecords(id: string, init?: RequestInit): Promise<DnsRecordList>;
187
+ /** Create a DNS record for a domain. */
188
+ createDnsRecord(id: string, body: CreateDnsRecordInput, init?: RequestInit): Promise<DnsRecord>;
189
+ /** List marketplace offers for a domain. */
190
+ listOffers(id: string, init?: RequestInit): Promise<OfferList>;
191
+ /** Create a marketplace offer for a domain. */
192
+ createOffer(id: string, body: CreateOfferInput, init?: RequestInit): Promise<DomainOffer>;
193
+ /** Portfolio statistics. */
194
+ getDomainStats(init?: RequestInit): Promise<DomainStats>;
195
+ /** Service version and mode. */
196
+ getVersion(init?: RequestInit): Promise<VersionResponse>;
197
+ }
198
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/sdk/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @hasna/domains SDK — typed HTTP client generated from the domains-serve
3
+ * OpenAPI document (see `src/server/openapi.ts`, regenerate via the `sdk:gen`
4
+ * script). Client self_hosted convention: `DOMAINS_API_URL` + `DOMAINS_API_KEY`
5
+ * (a key, never a DSN).
6
+ */
7
+ export * from "./client.js";
8
+ import { DomainsClient, type DomainsClientOptions } from "./client.js";
9
+ /**
10
+ * Build a `DomainsClient` from the environment.
11
+ * Reads `DOMAINS_API_URL` and `DOMAINS_API_KEY`.
12
+ */
13
+ export declare function createDomainsClientFromEnv(env?: NodeJS.ProcessEnv, overrides?: Partial<DomainsClientOptions>): DomainsClient;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,SAAS,GAAE,OAAO,CAAC,oBAAoB,CAAM,GAC5C,aAAa,CAOf"}
@@ -0,0 +1,176 @@
1
+ // @bun
2
+ // src/sdk/client.ts
3
+ class ApiError extends Error {
4
+ status;
5
+ body;
6
+ constructor(status, message, body) {
7
+ super(message);
8
+ this.status = status;
9
+ this.body = body;
10
+ this.name = "ApiError";
11
+ }
12
+ }
13
+
14
+ class DomainsClient {
15
+ baseUrl;
16
+ apiKey;
17
+ fetchImpl;
18
+ baseHeaders;
19
+ constructor(options) {
20
+ if (!options.baseUrl)
21
+ throw new Error("DomainsClient requires a baseUrl.");
22
+ this.baseUrl = options.baseUrl.replace(/\/$/, "");
23
+ this.apiKey = options.apiKey;
24
+ this.fetchImpl = options.fetch ?? globalThis.fetch;
25
+ this.baseHeaders = options.headers ?? {};
26
+ }
27
+ async request(method, path, opts) {
28
+ const url = new URL(this.baseUrl + path);
29
+ if (opts.query) {
30
+ for (const [key, value] of Object.entries(opts.query)) {
31
+ if (value !== undefined && value !== null)
32
+ url.searchParams.set(key, String(value));
33
+ }
34
+ }
35
+ const headers = { Accept: "application/json", ...this.baseHeaders, ...opts.init?.headers };
36
+ if (this.apiKey)
37
+ headers["x-api-key"] = this.apiKey;
38
+ let payload;
39
+ if (opts.body !== undefined) {
40
+ headers["Content-Type"] = "application/json";
41
+ payload = JSON.stringify(opts.body);
42
+ }
43
+ const response = await this.fetchImpl(url.toString(), { ...opts.init, method, headers, body: payload });
44
+ const text = await response.text();
45
+ const data = text ? (() => {
46
+ try {
47
+ return JSON.parse(text);
48
+ } catch {
49
+ return text;
50
+ }
51
+ })() : undefined;
52
+ if (!response.ok) {
53
+ throw new ApiError(response.status, `${method} ${path} failed: ${response.status}`, data);
54
+ }
55
+ return data;
56
+ }
57
+ async getHealth(init) {
58
+ return this.request("GET", `/health`, {
59
+ body: undefined,
60
+ query: undefined,
61
+ init
62
+ });
63
+ }
64
+ async getReady(init) {
65
+ return this.request("GET", `/ready`, {
66
+ body: undefined,
67
+ query: undefined,
68
+ init
69
+ });
70
+ }
71
+ async getDnsRecord(id, init) {
72
+ return this.request("GET", `/v1/dns/${encodeURIComponent(String(id))}`, {
73
+ body: undefined,
74
+ query: undefined,
75
+ init
76
+ });
77
+ }
78
+ async deleteDnsRecord(id, init) {
79
+ return this.request("DELETE", `/v1/dns/${encodeURIComponent(String(id))}`, {
80
+ body: undefined,
81
+ query: undefined,
82
+ init
83
+ });
84
+ }
85
+ async listDomains(query, init) {
86
+ return this.request("GET", `/v1/domains`, {
87
+ body: undefined,
88
+ query,
89
+ init
90
+ });
91
+ }
92
+ async createDomain(body, init) {
93
+ return this.request("POST", `/v1/domains`, {
94
+ body,
95
+ query: undefined,
96
+ init
97
+ });
98
+ }
99
+ async getDomain(id, init) {
100
+ return this.request("GET", `/v1/domains/${encodeURIComponent(String(id))}`, {
101
+ body: undefined,
102
+ query: undefined,
103
+ init
104
+ });
105
+ }
106
+ async deleteDomain(id, init) {
107
+ return this.request("DELETE", `/v1/domains/${encodeURIComponent(String(id))}`, {
108
+ body: undefined,
109
+ query: undefined,
110
+ init
111
+ });
112
+ }
113
+ async updateDomain(id, body, init) {
114
+ return this.request("PATCH", `/v1/domains/${encodeURIComponent(String(id))}`, {
115
+ body,
116
+ query: undefined,
117
+ init
118
+ });
119
+ }
120
+ async listDnsRecords(id, init) {
121
+ return this.request("GET", `/v1/domains/${encodeURIComponent(String(id))}/dns`, {
122
+ body: undefined,
123
+ query: undefined,
124
+ init
125
+ });
126
+ }
127
+ async createDnsRecord(id, body, init) {
128
+ return this.request("POST", `/v1/domains/${encodeURIComponent(String(id))}/dns`, {
129
+ body,
130
+ query: undefined,
131
+ init
132
+ });
133
+ }
134
+ async listOffers(id, init) {
135
+ return this.request("GET", `/v1/domains/${encodeURIComponent(String(id))}/offers`, {
136
+ body: undefined,
137
+ query: undefined,
138
+ init
139
+ });
140
+ }
141
+ async createOffer(id, body, init) {
142
+ return this.request("POST", `/v1/domains/${encodeURIComponent(String(id))}/offers`, {
143
+ body,
144
+ query: undefined,
145
+ init
146
+ });
147
+ }
148
+ async getDomainStats(init) {
149
+ return this.request("GET", `/v1/stats`, {
150
+ body: undefined,
151
+ query: undefined,
152
+ init
153
+ });
154
+ }
155
+ async getVersion(init) {
156
+ return this.request("GET", `/version`, {
157
+ body: undefined,
158
+ query: undefined,
159
+ init
160
+ });
161
+ }
162
+ }
163
+ // src/sdk/index.ts
164
+ function createDomainsClientFromEnv(env = process.env, overrides = {}) {
165
+ const baseUrl = overrides.baseUrl ?? env["DOMAINS_API_URL"];
166
+ if (!baseUrl) {
167
+ throw new Error("createDomainsClientFromEnv requires DOMAINS_API_URL (the domains-serve base URL).");
168
+ }
169
+ const apiKey = overrides.apiKey ?? env["DOMAINS_API_KEY"];
170
+ return new DomainsClient({ baseUrl, ...apiKey ? { apiKey } : {}, ...overrides });
171
+ }
172
+ export {
173
+ createDomainsClientFromEnv,
174
+ DomainsClient,
175
+ ApiError
176
+ };
@@ -0,0 +1,33 @@
1
+ /**
2
+ * domains-serve HTTP application — framework-agnostic request handler.
3
+ *
4
+ * Surfaces:
5
+ * GET /health — liveness ({status,version,mode})
6
+ * GET /ready — readiness (DB reachable + schema migrated)
7
+ * GET /version — {status,version,mode}
8
+ * GET /openapi.json — the OpenAPI 3.1 document
9
+ * /v1/* — API-key authenticated CRUD over the portfolio
10
+ *
11
+ * Auth is delegated to @hasna/contracts `verifyApiKey` (stateless HMAC tokens,
12
+ * scope grammar `domains:<action>`, revocation via the ApiKeyStore). Reads need
13
+ * `domains:read`; writes need `domains:write`. A `domains:*` key covers both.
14
+ *
15
+ * PURE REMOTE (Amendment A1): every request reads/writes the cloud Postgres
16
+ * directly. No cache, no local mirror.
17
+ */
18
+ import { type AuthAuditEvent } from "@hasna/contracts/auth";
19
+ import type { TypedQueryClient } from "../generated/storage-kit/index.js";
20
+ export interface ServeAppOptions {
21
+ db: TypedQueryClient;
22
+ signingSecret: string;
23
+ version: string;
24
+ mode?: string;
25
+ /** Revocation predicate (return true to DENY). Typically store.isRevoked. */
26
+ isRevoked?: (kid: string) => boolean | Promise<boolean>;
27
+ audit?: (e: AuthAuditEvent) => void;
28
+ }
29
+ export interface ServeApp {
30
+ handle(req: Request): Promise<Response>;
31
+ }
32
+ export declare function createServeApp(options: ServeAppOptions): ServeApp;
33
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/server/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAqC,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC/F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAiC1E,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,gBAAgB,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACxD,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,cAAc,KAAK,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACzC;AAeD,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,QAAQ,CAmLjE"}
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env bun
2
+ /**
3
+ * domains-serve — standalone HTTP API server (self_hosted / cloud).
4
+ *
5
+ * Usage: domains-serve [--port 8080] [--host 0.0.0.0]
6
+ *
7
+ * PURE REMOTE (Amendment A1): talks to the app's cloud Postgres directly via
8
+ * the vendored storage kit. Requires:
9
+ * HASNA_DOMAINS_DATABASE_URL app-role DSN (RDS)
10
+ * HASNA_DOMAINS_STORAGE_MODE "cloud"
11
+ * HASNA_DOMAINS_API_SIGNING_KEY HMAC signing secret for API keys
12
+ * Falls back to the generic DATABASE_URL / API_KEY_SIGNING_SECRET env names the
13
+ * hasna-app Terraform module injects.
14
+ */
15
+ export declare const SIGNING_KEY_ENVS: readonly ["HASNA_DOMAINS_API_SIGNING_KEY", "HASNA_API_SIGNING_KEY", "API_KEY_SIGNING_SECRET"];
16
+ /** Normalize the module-injected env names to the kit/auth conventions. */
17
+ export declare function normalizeEnv(env?: NodeJS.ProcessEnv): void;
18
+ export declare function resolveSigningSecret(env?: NodeJS.ProcessEnv): string;
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;GAYG;AASH,eAAO,MAAM,gBAAgB,+FAInB,CAAC;AAEX,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,IAAI,CAOvE;AAED,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAQjF"}