@voyant-travel/db 0.108.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.
Files changed (336) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +60 -0
  3. package/dist/aggregate-snapshots.d.ts +66 -0
  4. package/dist/aggregate-snapshots.d.ts.map +1 -0
  5. package/dist/aggregate-snapshots.js +110 -0
  6. package/dist/aggregate-snapshots.js.map +1 -0
  7. package/dist/columns/collection.d.ts +37 -0
  8. package/dist/columns/collection.d.ts.map +1 -0
  9. package/dist/columns/collection.js +44 -0
  10. package/dist/columns/collection.js.map +1 -0
  11. package/dist/columns/cruise.d.ts +26 -0
  12. package/dist/columns/cruise.d.ts.map +1 -0
  13. package/dist/columns/cruise.js +31 -0
  14. package/dist/columns/cruise.js.map +1 -0
  15. package/dist/columns/departure-sub-tables.d.ts +179 -0
  16. package/dist/columns/departure-sub-tables.d.ts.map +1 -0
  17. package/dist/columns/departure-sub-tables.js +214 -0
  18. package/dist/columns/departure-sub-tables.js.map +1 -0
  19. package/dist/columns/departure.d.ts +20 -0
  20. package/dist/columns/departure.d.ts.map +1 -0
  21. package/dist/columns/departure.js +23 -0
  22. package/dist/columns/departure.js.map +1 -0
  23. package/dist/columns/destinations.d.ts +21 -0
  24. package/dist/columns/destinations.d.ts.map +1 -0
  25. package/dist/columns/destinations.js +24 -0
  26. package/dist/columns/destinations.js.map +1 -0
  27. package/dist/columns/index.d.ts +31 -0
  28. package/dist/columns/index.d.ts.map +1 -0
  29. package/dist/columns/index.js +57 -0
  30. package/dist/columns/index.js.map +1 -0
  31. package/dist/columns/itinerary-sub-tables.d.ts +177 -0
  32. package/dist/columns/itinerary-sub-tables.d.ts.map +1 -0
  33. package/dist/columns/itinerary-sub-tables.js +122 -0
  34. package/dist/columns/itinerary-sub-tables.js.map +1 -0
  35. package/dist/columns/itinerary.d.ts +17 -0
  36. package/dist/columns/itinerary.d.ts.map +1 -0
  37. package/dist/columns/itinerary.js +20 -0
  38. package/dist/columns/itinerary.js.map +1 -0
  39. package/dist/columns/lodging.d.ts +143 -0
  40. package/dist/columns/lodging.d.ts.map +1 -0
  41. package/dist/columns/lodging.js +164 -0
  42. package/dist/columns/lodging.js.map +1 -0
  43. package/dist/columns/offers.d.ts +31 -0
  44. package/dist/columns/offers.d.ts.map +1 -0
  45. package/dist/columns/offers.js +43 -0
  46. package/dist/columns/offers.js.map +1 -0
  47. package/dist/columns/pricing.d.ts +60 -0
  48. package/dist/columns/pricing.d.ts.map +1 -0
  49. package/dist/columns/pricing.js +71 -0
  50. package/dist/columns/pricing.js.map +1 -0
  51. package/dist/columns/product-accommodation.d.ts +99 -0
  52. package/dist/columns/product-accommodation.d.ts.map +1 -0
  53. package/dist/columns/product-accommodation.js +65 -0
  54. package/dist/columns/product-accommodation.js.map +1 -0
  55. package/dist/columns/product-addons.d.ts +18 -0
  56. package/dist/columns/product-addons.d.ts.map +1 -0
  57. package/dist/columns/product-addons.js +21 -0
  58. package/dist/columns/product-addons.js.map +1 -0
  59. package/dist/columns/product-availability-states.d.ts +65 -0
  60. package/dist/columns/product-availability-states.d.ts.map +1 -0
  61. package/dist/columns/product-availability-states.js +81 -0
  62. package/dist/columns/product-availability-states.js.map +1 -0
  63. package/dist/columns/product-availability.d.ts +21 -0
  64. package/dist/columns/product-availability.d.ts.map +1 -0
  65. package/dist/columns/product-availability.js +24 -0
  66. package/dist/columns/product-availability.js.map +1 -0
  67. package/dist/columns/product-booking-rules.d.ts +45 -0
  68. package/dist/columns/product-booking-rules.d.ts.map +1 -0
  69. package/dist/columns/product-booking-rules.js +55 -0
  70. package/dist/columns/product-booking-rules.js.map +1 -0
  71. package/dist/columns/product-category-assignments.d.ts +17 -0
  72. package/dist/columns/product-category-assignments.d.ts.map +1 -0
  73. package/dist/columns/product-category-assignments.js +20 -0
  74. package/dist/columns/product-category-assignments.js.map +1 -0
  75. package/dist/columns/product-extensions.d.ts +24 -0
  76. package/dist/columns/product-extensions.d.ts.map +1 -0
  77. package/dist/columns/product-extensions.js +27 -0
  78. package/dist/columns/product-extensions.js.map +1 -0
  79. package/dist/columns/product-media.d.ts +19 -0
  80. package/dist/columns/product-media.d.ts.map +1 -0
  81. package/dist/columns/product-media.js +22 -0
  82. package/dist/columns/product-media.js.map +1 -0
  83. package/dist/columns/product-overrides.d.ts +19 -0
  84. package/dist/columns/product-overrides.d.ts.map +1 -0
  85. package/dist/columns/product-overrides.js +22 -0
  86. package/dist/columns/product-overrides.js.map +1 -0
  87. package/dist/columns/product-preferences.d.ts +51 -0
  88. package/dist/columns/product-preferences.d.ts.map +1 -0
  89. package/dist/columns/product-preferences.js +59 -0
  90. package/dist/columns/product-preferences.js.map +1 -0
  91. package/dist/columns/product-publish-settings.d.ts +18 -0
  92. package/dist/columns/product-publish-settings.d.ts.map +1 -0
  93. package/dist/columns/product-publish-settings.js +21 -0
  94. package/dist/columns/product-publish-settings.js.map +1 -0
  95. package/dist/columns/product-rate-plans.d.ts +28 -0
  96. package/dist/columns/product-rate-plans.d.ts.map +1 -0
  97. package/dist/columns/product-rate-plans.js +33 -0
  98. package/dist/columns/product-rate-plans.js.map +1 -0
  99. package/dist/columns/product-translations.d.ts +24 -0
  100. package/dist/columns/product-translations.d.ts.map +1 -0
  101. package/dist/columns/product-translations.js +27 -0
  102. package/dist/columns/product-translations.js.map +1 -0
  103. package/dist/columns/product-versions.d.ts +19 -0
  104. package/dist/columns/product-versions.d.ts.map +1 -0
  105. package/dist/columns/product-versions.js +22 -0
  106. package/dist/columns/product-versions.js.map +1 -0
  107. package/dist/columns/product-visibility.d.ts +16 -0
  108. package/dist/columns/product-visibility.d.ts.map +1 -0
  109. package/dist/columns/product-visibility.js +19 -0
  110. package/dist/columns/product-visibility.js.map +1 -0
  111. package/dist/columns/product.d.ts +56 -0
  112. package/dist/columns/product.d.ts.map +1 -0
  113. package/dist/columns/product.js +44 -0
  114. package/dist/columns/product.js.map +1 -0
  115. package/dist/columns/room.d.ts +117 -0
  116. package/dist/columns/room.d.ts.map +1 -0
  117. package/dist/columns/room.js +86 -0
  118. package/dist/columns/room.js.map +1 -0
  119. package/dist/columns/ship.d.ts +22 -0
  120. package/dist/columns/ship.d.ts.map +1 -0
  121. package/dist/columns/ship.js +25 -0
  122. package/dist/columns/ship.js.map +1 -0
  123. package/dist/columns/tags.d.ts +33 -0
  124. package/dist/columns/tags.d.ts.map +1 -0
  125. package/dist/columns/tags.js +38 -0
  126. package/dist/columns/tags.js.map +1 -0
  127. package/dist/columns/transport.d.ts +53 -0
  128. package/dist/columns/transport.d.ts.map +1 -0
  129. package/dist/columns/transport.js +62 -0
  130. package/dist/columns/transport.js.map +1 -0
  131. package/dist/connection-config.d.ts +101 -0
  132. package/dist/connection-config.d.ts.map +1 -0
  133. package/dist/connection-config.js +106 -0
  134. package/dist/connection-config.js.map +1 -0
  135. package/dist/crud.d.ts +87 -0
  136. package/dist/crud.d.ts.map +1 -0
  137. package/dist/crud.js +190 -0
  138. package/dist/crud.js.map +1 -0
  139. package/dist/helpers.d.ts +33 -0
  140. package/dist/helpers.d.ts.map +1 -0
  141. package/dist/helpers.js +49 -0
  142. package/dist/helpers.js.map +1 -0
  143. package/dist/index.d.ts +109 -0
  144. package/dist/index.d.ts.map +1 -0
  145. package/dist/index.js +155 -0
  146. package/dist/index.js.map +1 -0
  147. package/dist/lib/index.d.ts +3 -0
  148. package/dist/lib/index.d.ts.map +1 -0
  149. package/dist/lib/index.js +5 -0
  150. package/dist/lib/index.js.map +1 -0
  151. package/dist/lib/typeid-column.d.ts +75 -0
  152. package/dist/lib/typeid-column.d.ts.map +1 -0
  153. package/dist/lib/typeid-column.js +92 -0
  154. package/dist/lib/typeid-column.js.map +1 -0
  155. package/dist/lib/typeid-core.d.ts +36 -0
  156. package/dist/lib/typeid-core.d.ts.map +1 -0
  157. package/dist/lib/typeid-core.js +67 -0
  158. package/dist/lib/typeid-core.js.map +1 -0
  159. package/dist/lib/typeid-prefixes.d.ts +342 -0
  160. package/dist/lib/typeid-prefixes.d.ts.map +1 -0
  161. package/dist/lib/typeid-prefixes.js +379 -0
  162. package/dist/lib/typeid-prefixes.js.map +1 -0
  163. package/dist/lib/typeid-schemas.d.ts +206 -0
  164. package/dist/lib/typeid-schemas.d.ts.map +1 -0
  165. package/dist/lib/typeid-schemas.js +207 -0
  166. package/dist/lib/typeid-schemas.js.map +1 -0
  167. package/dist/lib/typeid-zod.d.ts +16 -0
  168. package/dist/lib/typeid-zod.d.ts.map +1 -0
  169. package/dist/lib/typeid-zod.js +29 -0
  170. package/dist/lib/typeid-zod.js.map +1 -0
  171. package/dist/lib/typeid.d.ts +2 -0
  172. package/dist/lib/typeid.d.ts.map +1 -0
  173. package/dist/lib/typeid.js +6 -0
  174. package/dist/lib/typeid.js.map +1 -0
  175. package/dist/lifecycle.d.ts +24 -0
  176. package/dist/lifecycle.d.ts.map +1 -0
  177. package/dist/lifecycle.js +30 -0
  178. package/dist/lifecycle.js.map +1 -0
  179. package/dist/links.d.ts +22 -0
  180. package/dist/links.d.ts.map +1 -0
  181. package/dist/links.js +281 -0
  182. package/dist/links.js.map +1 -0
  183. package/dist/operators.d.ts +9 -0
  184. package/dist/operators.d.ts.map +1 -0
  185. package/dist/operators.js +9 -0
  186. package/dist/operators.js.map +1 -0
  187. package/dist/outbox.d.ts +87 -0
  188. package/dist/outbox.d.ts.map +1 -0
  189. package/dist/outbox.js +245 -0
  190. package/dist/outbox.js.map +1 -0
  191. package/dist/primitives/catalog-schemas.d.ts +101 -0
  192. package/dist/primitives/catalog-schemas.d.ts.map +1 -0
  193. package/dist/primitives/catalog-schemas.js +69 -0
  194. package/dist/primitives/catalog-schemas.js.map +1 -0
  195. package/dist/primitives/catalog.d.ts +47 -0
  196. package/dist/primitives/catalog.d.ts.map +1 -0
  197. package/dist/primitives/catalog.js +94 -0
  198. package/dist/primitives/catalog.js.map +1 -0
  199. package/dist/primitives/index.d.ts +4 -0
  200. package/dist/primitives/index.d.ts.map +1 -0
  201. package/dist/primitives/index.js +4 -0
  202. package/dist/primitives/index.js.map +1 -0
  203. package/dist/primitives/offers.d.ts +224 -0
  204. package/dist/primitives/offers.d.ts.map +1 -0
  205. package/dist/primitives/offers.js +132 -0
  206. package/dist/primitives/offers.js.map +1 -0
  207. package/dist/queries/index.d.ts +18 -0
  208. package/dist/queries/index.d.ts.map +1 -0
  209. package/dist/queries/index.js +30 -0
  210. package/dist/queries/index.js.map +1 -0
  211. package/dist/runtime/index.d.ts +4 -0
  212. package/dist/runtime/index.d.ts.map +1 -0
  213. package/dist/runtime/index.js +5 -0
  214. package/dist/runtime/index.js.map +1 -0
  215. package/dist/runtime/locks.d.ts +5 -0
  216. package/dist/runtime/locks.d.ts.map +1 -0
  217. package/dist/runtime/locks.js +36 -0
  218. package/dist/runtime/locks.js.map +1 -0
  219. package/dist/schema/00_ensure_schemas.d.ts +5 -0
  220. package/dist/schema/00_ensure_schemas.d.ts.map +1 -0
  221. package/dist/schema/00_ensure_schemas.js +6 -0
  222. package/dist/schema/00_ensure_schemas.js.map +1 -0
  223. package/dist/schema/aggregate-snapshots.d.ts +97 -0
  224. package/dist/schema/aggregate-snapshots.d.ts.map +1 -0
  225. package/dist/schema/aggregate-snapshots.js +27 -0
  226. package/dist/schema/aggregate-snapshots.js.map +1 -0
  227. package/dist/schema/iam/apikey.d.ts +396 -0
  228. package/dist/schema/iam/apikey.d.ts.map +1 -0
  229. package/dist/schema/iam/apikey.js +41 -0
  230. package/dist/schema/iam/apikey.js.map +1 -0
  231. package/dist/schema/iam/auth.d.ts +1026 -0
  232. package/dist/schema/iam/auth.d.ts.map +1 -0
  233. package/dist/schema/iam/auth.js +138 -0
  234. package/dist/schema/iam/auth.js.map +1 -0
  235. package/dist/schema/iam/cloud_auth.d.ts +446 -0
  236. package/dist/schema/iam/cloud_auth.d.ts.map +1 -0
  237. package/dist/schema/iam/cloud_auth.js +46 -0
  238. package/dist/schema/iam/cloud_auth.js.map +1 -0
  239. package/dist/schema/iam/index.d.ts +8 -0
  240. package/dist/schema/iam/index.d.ts.map +1 -0
  241. package/dist/schema/iam/index.js +8 -0
  242. package/dist/schema/iam/index.js.map +1 -0
  243. package/dist/schema/iam/invitations.d.ts +173 -0
  244. package/dist/schema/iam/invitations.d.ts.map +1 -0
  245. package/dist/schema/iam/invitations.js +27 -0
  246. package/dist/schema/iam/invitations.js.map +1 -0
  247. package/dist/schema/iam/kms.d.ts +53 -0
  248. package/dist/schema/iam/kms.d.ts.map +1 -0
  249. package/dist/schema/iam/kms.js +40 -0
  250. package/dist/schema/iam/kms.js.map +1 -0
  251. package/dist/schema/iam/roles.d.ts +12 -0
  252. package/dist/schema/iam/roles.d.ts.map +1 -0
  253. package/dist/schema/iam/roles.js +12 -0
  254. package/dist/schema/iam/roles.js.map +1 -0
  255. package/dist/schema/iam/user_profiles.d.ts +442 -0
  256. package/dist/schema/iam/user_profiles.d.ts.map +1 -0
  257. package/dist/schema/iam/user_profiles.js +125 -0
  258. package/dist/schema/iam/user_profiles.js.map +1 -0
  259. package/dist/schema/index.d.ts +5 -0
  260. package/dist/schema/index.d.ts.map +1 -0
  261. package/dist/schema/index.js +5 -0
  262. package/dist/schema/index.js.map +1 -0
  263. package/dist/schema/infra/domains.d.ts +609 -0
  264. package/dist/schema/infra/domains.d.ts.map +1 -0
  265. package/dist/schema/infra/domains.js +108 -0
  266. package/dist/schema/infra/domains.js.map +1 -0
  267. package/dist/schema/infra/email_domain_records.d.ts +255 -0
  268. package/dist/schema/infra/email_domain_records.d.ts.map +1 -0
  269. package/dist/schema/infra/email_domain_records.js +65 -0
  270. package/dist/schema/infra/email_domain_records.js.map +1 -0
  271. package/dist/schema/infra/event_outbox.d.ts +232 -0
  272. package/dist/schema/infra/event_outbox.d.ts.map +1 -0
  273. package/dist/schema/infra/event_outbox.js +59 -0
  274. package/dist/schema/infra/event_outbox.js.map +1 -0
  275. package/dist/schema/infra/idempotency_keys.d.ts +186 -0
  276. package/dist/schema/infra/idempotency_keys.d.ts.map +1 -0
  277. package/dist/schema/infra/idempotency_keys.js +40 -0
  278. package/dist/schema/infra/idempotency_keys.js.map +1 -0
  279. package/dist/schema/infra/index.d.ts +9 -0
  280. package/dist/schema/infra/index.d.ts.map +1 -0
  281. package/dist/schema/infra/index.js +10 -0
  282. package/dist/schema/infra/index.js.map +1 -0
  283. package/dist/schema/infra/public_document_delivery_grants.d.ts +356 -0
  284. package/dist/schema/infra/public_document_delivery_grants.d.ts.map +1 -0
  285. package/dist/schema/infra/public_document_delivery_grants.js +36 -0
  286. package/dist/schema/infra/public_document_delivery_grants.js.map +1 -0
  287. package/dist/schema/infra/rate_limit_buckets.d.ts +138 -0
  288. package/dist/schema/infra/rate_limit_buckets.d.ts.map +1 -0
  289. package/dist/schema/infra/rate_limit_buckets.js +52 -0
  290. package/dist/schema/infra/rate_limit_buckets.js.map +1 -0
  291. package/dist/schema/infra/webhook_deliveries.d.ts +572 -0
  292. package/dist/schema/infra/webhook_deliveries.d.ts.map +1 -0
  293. package/dist/schema/infra/webhook_deliveries.js +136 -0
  294. package/dist/schema/infra/webhook_deliveries.js.map +1 -0
  295. package/dist/schema/infra/webhook_subscriptions.d.ts +284 -0
  296. package/dist/schema/infra/webhook_subscriptions.d.ts.map +1 -0
  297. package/dist/schema/infra/webhook_subscriptions.js +64 -0
  298. package/dist/schema/infra/webhook_subscriptions.js.map +1 -0
  299. package/dist/schema/infra/write_intents.d.ts +185 -0
  300. package/dist/schema/infra/write_intents.d.ts.map +1 -0
  301. package/dist/schema/infra/write_intents.js +50 -0
  302. package/dist/schema/infra/write_intents.js.map +1 -0
  303. package/dist/schema/voyant/bookings.d.ts +2 -0
  304. package/dist/schema/voyant/bookings.d.ts.map +1 -0
  305. package/dist/schema/voyant/bookings.js +2 -0
  306. package/dist/schema/voyant/bookings.js.map +1 -0
  307. package/dist/schema/voyant/finance.d.ts +2 -0
  308. package/dist/schema/voyant/finance.d.ts.map +1 -0
  309. package/dist/schema/voyant/finance.js +2 -0
  310. package/dist/schema/voyant/finance.js.map +1 -0
  311. package/dist/test-utils.d.ts +17 -0
  312. package/dist/test-utils.d.ts.map +1 -0
  313. package/dist/test-utils.js +56 -0
  314. package/dist/test-utils.js.map +1 -0
  315. package/dist/transaction-capability.d.ts +11 -0
  316. package/dist/transaction-capability.d.ts.map +1 -0
  317. package/dist/transaction-capability.js +17 -0
  318. package/dist/transaction-capability.js.map +1 -0
  319. package/dist/transaction.d.ts +31 -0
  320. package/dist/transaction.d.ts.map +1 -0
  321. package/dist/transaction.js +72 -0
  322. package/dist/transaction.js.map +1 -0
  323. package/dist/tsconfig.tsbuildinfo +1 -0
  324. package/dist/types.d.ts +10 -0
  325. package/dist/types.d.ts.map +1 -0
  326. package/dist/types.js +2 -0
  327. package/dist/types.js.map +1 -0
  328. package/dist/utils.d.ts +2 -0
  329. package/dist/utils.d.ts.map +1 -0
  330. package/dist/utils.js +19 -0
  331. package/dist/utils.js.map +1 -0
  332. package/dist/write-intents.d.ts +51 -0
  333. package/dist/write-intents.d.ts.map +1 -0
  334. package/dist/write-intents.js +95 -0
  335. package/dist/write-intents.js.map +1 -0
  336. package/package.json +306 -0
@@ -0,0 +1,108 @@
1
+ import { sql } from "drizzle-orm";
2
+ import { boolean, index, jsonb, pgEnum, pgTable, text, timestamp, uniqueIndex, } from "drizzle-orm/pg-core";
3
+ import { z } from "zod";
4
+ import { typeId, typeIdSchema } from "../../lib/index.js";
5
+ /**
6
+ * Domains
7
+ *
8
+ * Unified domain management for all purposes: email, customer portal, and booking engine.
9
+ * Supports multiple providers for custom hostname/SSL management.
10
+ */
11
+ /**
12
+ * Domain Providers
13
+ *
14
+ * Infrastructure providers that can manage custom hostnames and SSL certificates.
15
+ */
16
+ export const domainProviders = pgEnum("domain_provider", [
17
+ "cloudflare", // Cloudflare for SaaS
18
+ // Future providers:
19
+ // "vercel",
20
+ // "aws",
21
+ ]);
22
+ export const domainProvidersSchema = z.enum(domainProviders.enumValues);
23
+ // Domain statuses enum
24
+ export const domainStatuses = pgEnum("domain_status", ["pending", "verified", "active", "disabled"]);
25
+ export const domainStatusesSchema = z.enum(domainStatuses.enumValues);
26
+ export const emailProviders = pgEnum("email_provider", ["resend", "ses"]);
27
+ export const emailProvidersSchema = z.enum(emailProviders.enumValues);
28
+ export const resendRegions = pgEnum("resend_region", [
29
+ "us-east-1",
30
+ "eu-west-1",
31
+ "sa-east-1",
32
+ "ap-northeast-1",
33
+ ]);
34
+ export const resendRegionsSchema = z.enum(resendRegions.enumValues);
35
+ export const tlsModes = pgEnum("tls_mode", ["opportunistic", "enforced"]);
36
+ export const tlsModesSchema = z.enum(tlsModes.enumValues);
37
+ export const domainsTable = pgTable("domains", {
38
+ id: typeId("domains"),
39
+ domain: text("domain").notNull(),
40
+ status: domainStatuses("status").notNull().default("pending"),
41
+ // Provider for custom hostname/SSL management
42
+ provider: domainProviders("provider").default("cloudflare"),
43
+ // Provider-agnostic hostname metadata
44
+ providerHostnameId: text("provider_hostname_id"), // Custom hostname ID from provider
45
+ providerZoneId: text("provider_zone_id"), // Zone/Project ID where hostname is created
46
+ certificateStatus: text("certificate_status"), // "pending_validation", "pending_issuance", "active", "failed"
47
+ hostnameStatus: text("hostname_status"), // "pending", "active", "moved", "deleted"
48
+ verificationRecords: jsonb("verification_records").$type(), // DNS records customer needs to add for validation
49
+ // Routing metadata (for dispatch worker)
50
+ customMetadata: jsonb("custom_metadata").$type(), // { "environmentId": "...", "organizationId": "..." }
51
+ // Email configuration
52
+ emailProvider: emailProviders("email_provider"),
53
+ emailRegion: resendRegions("email_region"),
54
+ emailProviderDomainId: text("email_provider_domain_id"),
55
+ emailReturnPathDomain: text("email_return_path_domain"),
56
+ emailTrackingDomain: text("email_tracking_domain"),
57
+ emailDmarcPolicy: text("email_dmarc_policy"),
58
+ emailClickTracking: boolean("email_click_tracking").notNull().default(false),
59
+ emailOpenTracking: boolean("email_open_tracking").notNull().default(false),
60
+ emailTlsMode: tlsModes("email_tls_mode").default("opportunistic"),
61
+ emailConfigEncrypted: text("email_config_encrypted"),
62
+ emailNotes: text("email_notes"),
63
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
64
+ updatedAt: timestamp("updated_at", { withTimezone: true }).notNull().defaultNow(),
65
+ }, (table) => [
66
+ // agent-quality: raw-sql reviewed -- owner: db; dynamic SQL interpolation uses Drizzle parameter binding or vetted SQL identifiers.
67
+ uniqueIndex("uq_infra_domains_domain").on(sql `lower(${table.domain})`),
68
+ index("idx_infra_domains_status").on(table.status),
69
+ index("idx_infra_domains_provider").on(table.provider),
70
+ ]).enableRLS();
71
+ // Zod schemas
72
+ const domainCoreSchema = z.object({
73
+ domain: z.string().min(1),
74
+ status: domainStatusesSchema.default("pending"),
75
+ provider: domainProvidersSchema.default("cloudflare"),
76
+ providerHostnameId: z.string().optional().nullable(),
77
+ providerZoneId: z.string().optional().nullable(),
78
+ certificateStatus: z.string().optional().nullable(),
79
+ hostnameStatus: z.string().optional().nullable(),
80
+ verificationRecords: z
81
+ .array(z.object({
82
+ type: z.string(),
83
+ name: z.string(),
84
+ value: z.string(),
85
+ }))
86
+ .optional()
87
+ .nullable(),
88
+ customMetadata: z.record(z.string(), z.unknown()).optional().nullable(),
89
+ emailProvider: emailProvidersSchema.nullish(),
90
+ emailRegion: resendRegionsSchema.optional().nullable(),
91
+ emailProviderDomainId: z.string().optional().nullable(),
92
+ emailReturnPathDomain: z.string().optional().nullable(),
93
+ emailTrackingDomain: z.string().optional().nullable(),
94
+ emailDmarcPolicy: z.string().optional().nullable(),
95
+ emailClickTracking: z.boolean().default(false),
96
+ emailOpenTracking: z.boolean().default(false),
97
+ emailTlsMode: tlsModesSchema.optional().nullable(),
98
+ emailConfigEncrypted: z.string().optional().nullable(),
99
+ emailNotes: z.string().optional().nullable(),
100
+ });
101
+ export const domainInsertSchema = domainCoreSchema;
102
+ export const domainUpdateSchema = domainInsertSchema.partial();
103
+ export const domainSelectSchema = domainCoreSchema.extend({
104
+ id: typeIdSchema("domains"),
105
+ createdAt: z.date().optional().nullable(),
106
+ updatedAt: z.date().optional().nullable(),
107
+ });
108
+ //# sourceMappingURL=domains.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domains.js","sourceRoot":"","sources":["../../../src/schema/infra/domains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EACL,OAAO,EACP,KAAK,EACL,KAAK,EACL,MAAM,EACN,OAAO,EACP,IAAI,EACJ,SAAS,EACT,WAAW,GACZ,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEzD;;;;;GAKG;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,iBAAiB,EAAE;IACvD,YAAY,EAAE,sBAAsB;IACpC,oBAAoB;IACpB,YAAY;IACZ,SAAS;CACV,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAA;AAGvE,uBAAuB;AACvB,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAA;AAEpG,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAA;AAEzE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;AAGrE,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,EAAE;IACnD,WAAW;IACX,WAAW;IACX,WAAW;IACX,gBAAgB;CACjB,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;AAGnE,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,CAAA;AAEzE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAiBzD,MAAM,CAAC,MAAM,YAAY,GAAG,OAAO,CACjC,SAAS,EACT;IACE,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC;IACrB,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE;IAChC,MAAM,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IAE7D,8CAA8C;IAC9C,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAE3D,sCAAsC;IACtC,kBAAkB,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE,mCAAmC;IACrF,cAAc,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAE,4CAA4C;IACtF,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,+DAA+D;IAC9G,cAAc,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,0CAA0C;IACnF,mBAAmB,EACjB,KAAK,CAAC,sBAAsB,CAAC,CAAC,KAAK,EAAwD,EAAE,mDAAmD;IAElJ,yCAAyC;IACzC,cAAc,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAA2B,EAAE,sDAAsD;IAEjI,sBAAsB;IACtB,aAAa,EAAE,cAAc,CAAC,gBAAgB,CAAC;IAC/C,WAAW,EAAE,aAAa,CAAC,cAAc,CAAC;IAC1C,qBAAqB,EAAE,IAAI,CAAC,0BAA0B,CAAC;IACvD,qBAAqB,EAAE,IAAI,CAAC,0BAA0B,CAAC;IACvD,mBAAmB,EAAE,IAAI,CAAC,uBAAuB,CAAC;IAClD,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC;IAC5C,kBAAkB,EAAE,OAAO,CAAC,sBAAsB,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC5E,iBAAiB,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC1E,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;IACjE,oBAAoB,EAAE,IAAI,CAAC,wBAAwB,CAAC;IACpD,UAAU,EAAE,IAAI,CAAC,aAAa,CAAC;IAE/B,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;IACjF,SAAS,EAAE,SAAS,CAAC,YAAY,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,UAAU,EAAE;CAClF,EACD,CAAC,KAAK,EAAE,EAAE,CAAC;IACT,oIAAoI;IACpI,WAAW,CAAC,yBAAyB,CAAC,CAAC,EAAE,CAAC,GAAG,CAAA,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC;IACtE,KAAK,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC;IAClD,KAAK,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC;CACvD,CACF,CAAC,SAAS,EAAE,CAAA;AAKb,cAAc;AACd,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACzB,MAAM,EAAE,oBAAoB,CAAC,OAAO,CAAC,SAAS,CAAC;IAC/C,QAAQ,EAAE,qBAAqB,CAAC,OAAO,CAAC,YAAY,CAAC;IACrD,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACnD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAChD,mBAAmB,EAAE,CAAC;SACnB,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;QAChB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;KAClB,CAAC,CACH;SACA,QAAQ,EAAE;SACV,QAAQ,EAAE;IACb,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvE,aAAa,EAAE,oBAAoB,CAAC,OAAO,EAAE;IAC7C,WAAW,EAAE,mBAAmB,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACvD,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACrD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC9C,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;IAC7C,YAAY,EAAE,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAClD,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAA;AAClD,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,OAAO,EAAE,CAAA;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,MAAM,CAAC;IACxD,EAAE,EAAE,YAAY,CAAC,SAAS,CAAC;IAC3B,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAA"}
@@ -0,0 +1,255 @@
1
+ import { z } from "zod";
2
+ /**
3
+ * Email Domain Records
4
+ *
5
+ * DNS records for email domain verification (DKIM, SPF, DMARC, MX, etc.).
6
+ * Records are fetched from Resend API and stored for user reference.
7
+ */
8
+ export declare const emailRecordTypes: import("drizzle-orm/pg-core").PgEnum<["DKIM", "SPF", "DMARC", "MX", "TXT", "CNAME"]>;
9
+ export declare const emailRecordTypesSchema: z.ZodEnum<{
10
+ DKIM: "DKIM";
11
+ SPF: "SPF";
12
+ DMARC: "DMARC";
13
+ MX: "MX";
14
+ TXT: "TXT";
15
+ CNAME: "CNAME";
16
+ }>;
17
+ export type EmailRecordType = z.infer<typeof emailRecordTypesSchema>;
18
+ export declare const emailRecordStatuses: import("drizzle-orm/pg-core").PgEnum<["pending", "verified", "failed"]>;
19
+ export declare const emailRecordStatusesSchema: z.ZodEnum<{
20
+ failed: "failed";
21
+ pending: "pending";
22
+ verified: "verified";
23
+ }>;
24
+ export type EmailRecordStatus = z.infer<typeof emailRecordStatusesSchema>;
25
+ export declare const emailDomainRecordsTable: Omit<import("drizzle-orm/pg-core").PgTableWithColumns<{
26
+ name: "email_domain_records";
27
+ schema: undefined;
28
+ columns: {
29
+ id: import("drizzle-orm/pg-core").PgColumn<{
30
+ name: string;
31
+ tableName: "email_domain_records";
32
+ dataType: "string";
33
+ columnType: "PgText";
34
+ data: string;
35
+ driverParam: string;
36
+ notNull: true;
37
+ hasDefault: true;
38
+ isPrimaryKey: true;
39
+ isAutoincrement: false;
40
+ hasRuntimeDefault: true;
41
+ enumValues: [string, ...string[]];
42
+ baseColumn: never;
43
+ identity: undefined;
44
+ generated: undefined;
45
+ }, {}, {}>;
46
+ domainId: import("drizzle-orm/pg-core").PgColumn<{
47
+ name: string;
48
+ tableName: "email_domain_records";
49
+ dataType: "string";
50
+ columnType: "PgText";
51
+ data: string;
52
+ driverParam: string;
53
+ notNull: true;
54
+ hasDefault: false;
55
+ isPrimaryKey: false;
56
+ isAutoincrement: false;
57
+ hasRuntimeDefault: false;
58
+ enumValues: [string, ...string[]];
59
+ baseColumn: never;
60
+ identity: undefined;
61
+ generated: undefined;
62
+ }, {}, {}>;
63
+ recordType: import("drizzle-orm/pg-core").PgColumn<{
64
+ name: "record_type";
65
+ tableName: "email_domain_records";
66
+ dataType: "string";
67
+ columnType: "PgEnumColumn";
68
+ data: "DKIM" | "SPF" | "DMARC" | "MX" | "TXT" | "CNAME";
69
+ driverParam: string;
70
+ notNull: true;
71
+ hasDefault: false;
72
+ isPrimaryKey: false;
73
+ isAutoincrement: false;
74
+ hasRuntimeDefault: false;
75
+ enumValues: ["DKIM", "SPF", "DMARC", "MX", "TXT", "CNAME"];
76
+ baseColumn: never;
77
+ identity: undefined;
78
+ generated: undefined;
79
+ }, {}, {}>;
80
+ host: import("drizzle-orm/pg-core").PgColumn<{
81
+ name: "host";
82
+ tableName: "email_domain_records";
83
+ dataType: "string";
84
+ columnType: "PgText";
85
+ data: string;
86
+ driverParam: string;
87
+ notNull: true;
88
+ hasDefault: false;
89
+ isPrimaryKey: false;
90
+ isAutoincrement: false;
91
+ hasRuntimeDefault: false;
92
+ enumValues: [string, ...string[]];
93
+ baseColumn: never;
94
+ identity: undefined;
95
+ generated: undefined;
96
+ }, {}, {}>;
97
+ expectedValue: import("drizzle-orm/pg-core").PgColumn<{
98
+ name: "expected_value";
99
+ tableName: "email_domain_records";
100
+ dataType: "string";
101
+ columnType: "PgText";
102
+ data: string;
103
+ driverParam: string;
104
+ notNull: true;
105
+ hasDefault: false;
106
+ isPrimaryKey: false;
107
+ isAutoincrement: false;
108
+ hasRuntimeDefault: false;
109
+ enumValues: [string, ...string[]];
110
+ baseColumn: never;
111
+ identity: undefined;
112
+ generated: undefined;
113
+ }, {}, {}>;
114
+ status: import("drizzle-orm/pg-core").PgColumn<{
115
+ name: "status";
116
+ tableName: "email_domain_records";
117
+ dataType: "string";
118
+ columnType: "PgEnumColumn";
119
+ data: "failed" | "pending" | "verified";
120
+ driverParam: string;
121
+ notNull: true;
122
+ hasDefault: true;
123
+ isPrimaryKey: false;
124
+ isAutoincrement: false;
125
+ hasRuntimeDefault: false;
126
+ enumValues: ["pending", "verified", "failed"];
127
+ baseColumn: never;
128
+ identity: undefined;
129
+ generated: undefined;
130
+ }, {}, {}>;
131
+ lastCheckedAt: import("drizzle-orm/pg-core").PgColumn<{
132
+ name: "last_checked_at";
133
+ tableName: "email_domain_records";
134
+ dataType: "date";
135
+ columnType: "PgTimestamp";
136
+ data: Date;
137
+ driverParam: string;
138
+ notNull: false;
139
+ hasDefault: false;
140
+ isPrimaryKey: false;
141
+ isAutoincrement: false;
142
+ hasRuntimeDefault: false;
143
+ enumValues: undefined;
144
+ baseColumn: never;
145
+ identity: undefined;
146
+ generated: undefined;
147
+ }, {}, {}>;
148
+ errorMessage: import("drizzle-orm/pg-core").PgColumn<{
149
+ name: "error_message";
150
+ tableName: "email_domain_records";
151
+ dataType: "string";
152
+ columnType: "PgText";
153
+ data: string;
154
+ driverParam: string;
155
+ notNull: false;
156
+ hasDefault: false;
157
+ isPrimaryKey: false;
158
+ isAutoincrement: false;
159
+ hasRuntimeDefault: false;
160
+ enumValues: [string, ...string[]];
161
+ baseColumn: never;
162
+ identity: undefined;
163
+ generated: undefined;
164
+ }, {}, {}>;
165
+ createdAt: import("drizzle-orm/pg-core").PgColumn<{
166
+ name: "created_at";
167
+ tableName: "email_domain_records";
168
+ dataType: "date";
169
+ columnType: "PgTimestamp";
170
+ data: Date;
171
+ driverParam: string;
172
+ notNull: true;
173
+ hasDefault: true;
174
+ isPrimaryKey: false;
175
+ isAutoincrement: false;
176
+ hasRuntimeDefault: false;
177
+ enumValues: undefined;
178
+ baseColumn: never;
179
+ identity: undefined;
180
+ generated: undefined;
181
+ }, {}, {}>;
182
+ };
183
+ dialect: "pg";
184
+ }>, "enableRLS">;
185
+ export type InsertEmailDomainRecords = typeof emailDomainRecordsTable.$inferInsert;
186
+ export type SelectEmailDomainRecords = typeof emailDomainRecordsTable.$inferSelect;
187
+ export declare const emailDomainRecordInsertSchema: z.ZodObject<{
188
+ domainId: z.ZodString;
189
+ recordType: z.ZodEnum<{
190
+ DKIM: "DKIM";
191
+ SPF: "SPF";
192
+ DMARC: "DMARC";
193
+ MX: "MX";
194
+ TXT: "TXT";
195
+ CNAME: "CNAME";
196
+ }>;
197
+ host: z.ZodString;
198
+ expectedValue: z.ZodString;
199
+ status: z.ZodDefault<z.ZodEnum<{
200
+ failed: "failed";
201
+ pending: "pending";
202
+ verified: "verified";
203
+ }>>;
204
+ lastCheckedAt: z.ZodNullable<z.ZodOptional<z.ZodDate>>;
205
+ errorMessage: z.ZodNullable<z.ZodOptional<z.ZodString>>;
206
+ }, z.core.$strip>;
207
+ export declare const emailDomainRecordUpdateSchema: z.ZodObject<{
208
+ domainId: z.ZodOptional<z.ZodString>;
209
+ recordType: z.ZodOptional<z.ZodEnum<{
210
+ DKIM: "DKIM";
211
+ SPF: "SPF";
212
+ DMARC: "DMARC";
213
+ MX: "MX";
214
+ TXT: "TXT";
215
+ CNAME: "CNAME";
216
+ }>>;
217
+ host: z.ZodOptional<z.ZodString>;
218
+ expectedValue: z.ZodOptional<z.ZodString>;
219
+ status: z.ZodOptional<z.ZodDefault<z.ZodEnum<{
220
+ failed: "failed";
221
+ pending: "pending";
222
+ verified: "verified";
223
+ }>>>;
224
+ lastCheckedAt: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodDate>>>;
225
+ errorMessage: z.ZodOptional<z.ZodNullable<z.ZodOptional<z.ZodString>>>;
226
+ }, z.core.$strip>;
227
+ export declare const emailDomainRecordSelectSchema: z.ZodObject<{
228
+ domainId: z.ZodString;
229
+ recordType: z.ZodEnum<{
230
+ DKIM: "DKIM";
231
+ SPF: "SPF";
232
+ DMARC: "DMARC";
233
+ MX: "MX";
234
+ TXT: "TXT";
235
+ CNAME: "CNAME";
236
+ }>;
237
+ host: z.ZodString;
238
+ expectedValue: z.ZodString;
239
+ status: z.ZodDefault<z.ZodEnum<{
240
+ failed: "failed";
241
+ pending: "pending";
242
+ verified: "verified";
243
+ }>>;
244
+ lastCheckedAt: z.ZodNullable<z.ZodOptional<z.ZodDate>>;
245
+ errorMessage: z.ZodNullable<z.ZodOptional<z.ZodString>>;
246
+ id: z.ZodString;
247
+ createdAt: z.ZodNullable<z.ZodOptional<z.ZodDate>>;
248
+ }, z.core.$strip>;
249
+ export type EmailDomainRecord = z.infer<typeof emailDomainRecordSelectSchema>;
250
+ export type NewEmailDomainRecord = z.infer<typeof emailDomainRecordInsertSchema>;
251
+ export type UpdateEmailDomainRecord = z.infer<typeof emailDomainRecordUpdateSchema>;
252
+ export declare const emailDomainRecordsRelations: import("drizzle-orm").Relations<"email_domain_records", {
253
+ domain: import("drizzle-orm").One<"domains", true>;
254
+ }>;
255
+ //# sourceMappingURL=email_domain_records.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email_domain_records.d.ts","sourceRoot":"","sources":["../../../src/schema/infra/email_domain_records.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB;;;;;GAKG;AAGH,eAAO,MAAM,gBAAgB,sFAO3B,CAAA;AAEF,eAAO,MAAM,sBAAsB;;;;;;;EAAsC,CAAA;AACzE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAGpE,eAAO,MAAM,mBAAmB,yEAAmE,CAAA;AAEnG,eAAO,MAAM,yBAAyB;;;;EAAyC,CAAA;AAC/E,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAA;AAEzE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAoBvB,CAAA;AAEb,MAAM,MAAM,wBAAwB,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAA;AAClF,MAAM,MAAM,wBAAwB,GAAG,OAAO,uBAAuB,CAAC,YAAY,CAAA;AAalF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;iBAA8B,CAAA;AACxE,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;iBAA0C,CAAA;AACpF,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;iBAGxC,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAC7E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAChF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAA;AAGnF,eAAO,MAAM,2BAA2B;;EAKrC,CAAA"}
@@ -0,0 +1,65 @@
1
+ import { relations, sql } from "drizzle-orm";
2
+ import { index, pgEnum, pgTable, text, timestamp, unique } from "drizzle-orm/pg-core";
3
+ import { z } from "zod";
4
+ import { typeId, typeIdRef, typeIdSchema } from "../../lib/index.js";
5
+ import { domainsTable } from "./domains.js";
6
+ /**
7
+ * Email Domain Records
8
+ *
9
+ * DNS records for email domain verification (DKIM, SPF, DMARC, MX, etc.).
10
+ * Records are fetched from Resend API and stored for user reference.
11
+ */
12
+ // Record type enum
13
+ export const emailRecordTypes = pgEnum("email_record_type", [
14
+ "DKIM",
15
+ "SPF",
16
+ "DMARC",
17
+ "MX",
18
+ "TXT",
19
+ "CNAME",
20
+ ]);
21
+ export const emailRecordTypesSchema = z.enum(emailRecordTypes.enumValues);
22
+ // Record status enum
23
+ export const emailRecordStatuses = pgEnum("email_record_status", ["pending", "verified", "failed"]);
24
+ export const emailRecordStatusesSchema = z.enum(emailRecordStatuses.enumValues);
25
+ export const emailDomainRecordsTable = pgTable("email_domain_records", {
26
+ id: typeId("email_domain_records"),
27
+ domainId: typeIdRef("domain_id")
28
+ .notNull()
29
+ .references(() => domainsTable.id, { onDelete: "cascade" }),
30
+ recordType: emailRecordTypes("record_type").notNull(),
31
+ host: text("host").notNull(),
32
+ expectedValue: text("expected_value").notNull(),
33
+ status: emailRecordStatuses("status").notNull().default("pending"),
34
+ lastCheckedAt: timestamp("last_checked_at", { withTimezone: true }),
35
+ errorMessage: text("error_message"),
36
+ createdAt: timestamp("created_at", { withTimezone: true }).notNull().defaultNow(),
37
+ }, (table) => [
38
+ unique("uq_infra_email_domain_records").on(table.domainId, table.host, table.recordType),
39
+ index("idx_infra_email_records_domain").on(table.domainId),
40
+ index("idx_infra_email_records_pending").on(table.status).where(sql `status = 'pending'`),
41
+ ]).enableRLS();
42
+ // Zod schemas
43
+ const emailDomainRecordCoreSchema = z.object({
44
+ domainId: typeIdSchema("domains"),
45
+ recordType: emailRecordTypesSchema,
46
+ host: z.string(),
47
+ expectedValue: z.string(),
48
+ status: emailRecordStatusesSchema.default("pending"),
49
+ lastCheckedAt: z.date().optional().nullable(),
50
+ errorMessage: z.string().optional().nullable(),
51
+ });
52
+ export const emailDomainRecordInsertSchema = emailDomainRecordCoreSchema;
53
+ export const emailDomainRecordUpdateSchema = emailDomainRecordInsertSchema.partial();
54
+ export const emailDomainRecordSelectSchema = emailDomainRecordCoreSchema.extend({
55
+ id: typeIdSchema("email_domain_records"),
56
+ createdAt: z.date().optional().nullable(),
57
+ });
58
+ // Relations
59
+ export const emailDomainRecordsRelations = relations(emailDomainRecordsTable, ({ one }) => ({
60
+ domain: one(domainsTable, {
61
+ fields: [emailDomainRecordsTable.domainId],
62
+ references: [domainsTable.id],
63
+ }),
64
+ }));
65
+ //# sourceMappingURL=email_domain_records.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email_domain_records.js","sourceRoot":"","sources":["../../../src/schema/infra/email_domain_records.ts"],"names":[],"mappings":"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"}