@ts-cloud/core 0.12.15 → 0.13.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 (2) hide show
  1. package/dist/types.d.ts +86 -0
  2. package/package.json +2 -2
package/dist/types.d.ts CHANGED
@@ -1792,6 +1792,39 @@ export interface SftpConfig {
1792
1792
  /** System account the box server runs as. Defaults to `ts-sftp`. */
1793
1793
  serviceUser?: string;
1794
1794
  }
1795
+ /**
1796
+ * The registrar half of {@link DnsConfig}.
1797
+ */
1798
+ export interface DnsRegistrarConfig {
1799
+ /** Who the domain is registered with. Must be able to set nameservers. */
1800
+ provider: 'porkbun' | 'godaddy';
1801
+ /**
1802
+ * Hostnames to serve through the DNS provider's edge proxy, where it has one
1803
+ * (Cloudflare's "orange cloud").
1804
+ *
1805
+ * Opt-in per host, never "every address record". Proxying a mail host is the
1806
+ * classic way to break a domain quietly: Cloudflare does not proxy SMTP, and
1807
+ * the proxy replaces the origin address that the domain's own SPF record
1808
+ * authorises — so delivery degrades hours later with nothing visibly wrong.
1809
+ * Listing only the web hosts is what keeps that from being the default.
1810
+ */
1811
+ proxied?: string[];
1812
+ /**
1813
+ * Report what the delegation would do and change nothing.
1814
+ *
1815
+ * Worth leaving on for a deploy or two before the real move: the report
1816
+ * names every record that would be copied, so a missing DKIM key is
1817
+ * something you read rather than something you discover.
1818
+ */
1819
+ dryRun?: boolean;
1820
+ /**
1821
+ * Skip the delegation entirely.
1822
+ *
1823
+ * For a zone that is deliberately delegated somewhere ts-cloud does not
1824
+ * manage, where the check would otherwise try to correct it on every deploy.
1825
+ */
1826
+ delegate?: boolean;
1827
+ }
1795
1828
  export interface DnsConfig {
1796
1829
  domain?: string;
1797
1830
  hostedZoneId?: string;
@@ -1801,6 +1834,38 @@ export interface DnsConfig {
1801
1834
  * instead of Route53
1802
1835
  */
1803
1836
  provider?: 'route53' | 'cloudflare' | 'porkbun' | 'godaddy';
1837
+ /**
1838
+ * Where the domain is REGISTERED, when that is not where its DNS is served.
1839
+ *
1840
+ * A domain has two homes people conflate: the registrar it was bought from,
1841
+ * and the provider whose nameservers answer for it. Setting this says "the
1842
+ * zone belongs on `provider`, and `registrar` is what has to be pointed at
1843
+ * it" — and lets a deploy perform that move instead of an operator doing it
1844
+ * by hand at two dashboards and hoping the record sets match.
1845
+ *
1846
+ * On deploy, when the registrar's nameservers do not already point at
1847
+ * `provider`, ts-cloud creates the zone, copies the registrar's records
1848
+ * across, verifies record for record that they arrived, and only then
1849
+ * updates the nameservers. A verification failure leaves the delegation
1850
+ * alone: pointing a live domain at a half-populated zone is the one outcome
1851
+ * an operator cannot quickly undo, because the old zone keeps answering only
1852
+ * until caches expire.
1853
+ *
1854
+ * Once delegated it is a no-op. The zone's new host is authoritative from
1855
+ * that point, so the registrar's copy of the records is stale and
1856
+ * re-importing it would resurrect anything deleted since.
1857
+ *
1858
+ * @example
1859
+ * dns: {
1860
+ * provider: 'cloudflare', // serves the zone
1861
+ * domain: 'example.com',
1862
+ * registrar: {
1863
+ * provider: 'porkbun', // owns the delegation
1864
+ * proxied: ['example.com', 'www.example.com'],
1865
+ * },
1866
+ * }
1867
+ */
1868
+ registrar?: DnsRegistrarConfig;
1804
1869
  /**
1805
1870
  * Records to publish on every deploy, alongside the address records ts-cloud
1806
1871
  * derives from `sites`.
@@ -3548,9 +3613,30 @@ export interface ComputeProxyConfig {
3548
3613
  engine: 'rpx';
3549
3614
  /**
3550
3615
  * npm version/range of `@stacksjs/rpx` to install on the box.
3616
+ *
3617
+ * The box OWNER's setting. There is one gateway per machine, and every
3618
+ * provisioning deploy reinstalls and recompiles it, so this version is
3619
+ * imposed on every project routed through that box - a tenant that pins an
3620
+ * old release rolls the whole machine back to it. A project with
3621
+ * `cloud.attachTo` set therefore does not provision the gateway at all and
3622
+ * this field is ignored for it.
3623
+ *
3551
3624
  * @default 'latest'
3552
3625
  */
3553
3626
  version?: string;
3627
+ /**
3628
+ * npm version/range of `@stacksjs/tlsx`, the ACME client the cert-renewal
3629
+ * timer runs. Owner-only, for the same reason as {@link version}.
3630
+ *
3631
+ * Separate from {@link version} because they are separate packages: the
3632
+ * renewal step used to install `@stacksjs/tlsx@<the rpx version>`, which
3633
+ * resolved to nothing whenever rpx was pinned, failed, and was swallowed by
3634
+ * its own `|| true` - leaving the box with no ACME client and renewal
3635
+ * failing silently until a cert expired.
3636
+ *
3637
+ * @default 'latest'
3638
+ */
3639
+ tlsxVersion?: string;
3554
3640
  /**
3555
3641
  * Directory on the box holding real TLS certs (PEM `<domain>.crt`/`.key`),
3556
3642
  * served per-SNI by rpx. @default '/etc/rpx/certs'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ts-cloud/core",
3
3
  "type": "module",
4
- "version": "0.12.15",
4
+ "version": "0.13.0",
5
5
  "description": "Core CloudFormation generation library for ts-cloud",
6
6
  "author": "Chris Breuer <chris@stacksjs.com>",
7
7
  "license": "MIT",
@@ -31,7 +31,7 @@
31
31
  "typecheck": "tsc --noEmit"
32
32
  },
33
33
  "dependencies": {
34
- "@ts-cloud/aws-types": "0.12.15"
34
+ "@ts-cloud/aws-types": "0.13.0"
35
35
  },
36
36
  "devDependencies": {
37
37
  "typescript": "^7.0.2"