@runlot/api 0.1.0-rc.182 → 0.1.0-rc.183

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/schema.d.ts CHANGED
@@ -4900,13 +4900,21 @@ export interface paths {
4900
4900
  * @description **Requires admin or higher — this spends money.** Audited as `domain.purchase`; the
4901
4901
  * contact details are not retained in the audit log.
4902
4902
  *
4903
+ * **Payment comes first.** With a saved payment method the price is charged at once
4904
+ * and the request waits for the registration: `201` with the domain. Without one —
4905
+ * or with `checkout: true` — the answer is `202` with a `checkoutUrl`; the domain is
4906
+ * registered once that checkout is paid, and `GET /domain-charges/{chargeId}` follows
4907
+ * it. If the registrar refuses after payment, the payment is refunded in full. While
4908
+ * the registrar is in sandbox mode nothing is registered and nothing is charged.
4909
+ *
4910
+ * Paying also agrees to automatic renewal: one year at the registrar's renewal price is
4911
+ * charged to the saved payment method 30 days before expiry (retried 7 days and 1 day
4912
+ * before) until auto-renew is turned off.
4913
+ *
4903
4914
  * Right after registration the domain's nameservers are set to Runlot's
4904
4915
  * (`ns1~3.runlot.app`), so no separate ownership verification is needed and you can
4905
4916
  * connect an app immediately. **ICANN's verification email is sent to the `contact`
4906
4917
  * address** — tell the customer before they register.
4907
- *
4908
- * Sending the same request again is safe: a completed purchase returns 200, and a
4909
- * purchase that was interrupted resumes from where it stopped.
4910
4918
  */
4911
4919
  post: operations["purchaseDomain"];
4912
4920
  delete?: never;
@@ -5004,8 +5012,10 @@ export interface paths {
5004
5012
  get?: never;
5005
5013
  put?: never;
5006
5014
  /**
5007
- * Renews a domain (`runlot domains renew`)
5008
- * @description Requires admin or higher. Audited as `domain.renew`.
5015
+ * Renews a domain now (`runlot domains renew`)
5016
+ * @description Requires admin or higher. Audited as `domain.renew`. Paid the same way as a purchase:
5017
+ * a saved payment method is charged and the request waits for the renewal (`200`);
5018
+ * otherwise `202` with a checkout. Automatic renewal does not need this call.
5009
5019
  */
5010
5020
  post: operations["renewDomain"];
5011
5021
  delete?: never;
@@ -5029,9 +5039,10 @@ export interface paths {
5029
5039
  put?: never;
5030
5040
  /**
5031
5041
  * Changes the auto-renew preference
5032
- * @description Requires admin or higher. **Auto-renewal at the registrar stays on regardless** — a
5033
- * domain is lost if its renewal is a day late, so Runlot renews first and bills
5034
- * afterwards. Turning this setting off is not a cancellation, and the UI should say so.
5042
+ * @description Requires admin or higher. On: one year is charged to the saved payment method 30 days
5043
+ * before expiry (retried 7 days and 1 day before) and the domain is renewed. Off: nothing
5044
+ * is charged, the registrar's own auto-renew is turned off too, and the domain lapses at
5045
+ * expiry unless it is renewed by hand.
5035
5046
  */
5036
5047
  post: operations["setDomainAutoRenew"];
5037
5048
  delete?: never;
@@ -5119,6 +5130,51 @@ export interface paths {
5119
5130
  patch?: never;
5120
5131
  trace?: never;
5121
5132
  };
5133
+ "/v1/orgs/{orgSlug}/domain-charges": {
5134
+ parameters: {
5135
+ query?: never;
5136
+ header?: never;
5137
+ path: {
5138
+ orgSlug: components["parameters"]["OrgSlug"];
5139
+ };
5140
+ cookie?: never;
5141
+ };
5142
+ /**
5143
+ * Domain payments, newest first (the latest 50)
5144
+ * @description Requires member or higher. Registrations and renewals, paid or not.
5145
+ */
5146
+ get: operations["listDomainCharges"];
5147
+ put?: never;
5148
+ post?: never;
5149
+ delete?: never;
5150
+ options?: never;
5151
+ head?: never;
5152
+ patch?: never;
5153
+ trace?: never;
5154
+ };
5155
+ "/v1/orgs/{orgSlug}/domain-charges/{chargeId}": {
5156
+ parameters: {
5157
+ query?: never;
5158
+ header?: never;
5159
+ path: {
5160
+ orgSlug: components["parameters"]["OrgSlug"];
5161
+ chargeId: string;
5162
+ };
5163
+ cookie?: never;
5164
+ };
5165
+ /**
5166
+ * One domain payment — what a 202 from purchase or renewal is followed with
5167
+ * @description Requires member or higher.
5168
+ */
5169
+ get: operations["getDomainCharge"];
5170
+ put?: never;
5171
+ post?: never;
5172
+ delete?: never;
5173
+ options?: never;
5174
+ head?: never;
5175
+ patch?: never;
5176
+ trace?: never;
5177
+ };
5122
5178
  "/v1/orgs/{orgSlug}/projects/{projectName}/repos": {
5123
5179
  parameters: {
5124
5180
  query?: never;
@@ -9686,7 +9742,7 @@ export interface components {
9686
9742
  * human-readable wording is produced separately by the dashboard and by email.
9687
9743
  * @enum {string}
9688
9744
  */
9689
- kind: "project_limit" | "db_near_cap" | "storage_near_quota" | "storage_quota_hit" | "backup_failed" | "cron_failed" | "queue_failed" | "queue_ops_cap" | "build_failed" | "restore_done" | "dns_publish_stalled" | "billing_past_due" | "overage_charge_failed" | "disabled_project_deletion" | "backup_stalled" | "backup_no_restore_point" | "backup_chain_broken" | "backup_always_full" | "budget_exhausted" | "ai_credit_low" | "ai_credit_exhausted" | "ai_autotopup_failed" | "ai_autotopup_disabled" | "license_expiring" | "license_grace" | "license_restricted" | "new_device" | "error_issue_new" | "app_out_of_memory" | "monitor_alert" | "watchdog_digest";
9745
+ kind: "project_limit" | "db_near_cap" | "storage_near_quota" | "storage_quota_hit" | "backup_failed" | "cron_failed" | "queue_failed" | "queue_ops_cap" | "build_failed" | "restore_done" | "dns_publish_stalled" | "billing_past_due" | "overage_charge_failed" | "domain_renewal_failed" | "disabled_project_deletion" | "backup_stalled" | "backup_no_restore_point" | "backup_chain_broken" | "backup_always_full" | "budget_exhausted" | "ai_credit_low" | "ai_credit_exhausted" | "ai_autotopup_failed" | "ai_autotopup_disabled" | "license_expiring" | "license_grace" | "license_restricted" | "new_device" | "error_issue_new" | "app_out_of_memory" | "monitor_alert" | "watchdog_digest";
9690
9746
  /** @description If this is a project-related notification, the name of that project. Absent for org-level notifications (`project_limit`) */
9691
9747
  projectName?: string;
9692
9748
  /**
@@ -13416,6 +13472,36 @@ export interface components {
13416
13472
  /** @description The latest 20 lines (newest first) */
13417
13473
  events: components["schemas"]["DomainEvent"][];
13418
13474
  };
13475
+ /**
13476
+ * @description One payment for a domain registration or renewal. `status`: `checkout` (waiting
13477
+ * for the customer to pay in `checkoutUrl`), `open`/`pending` (charging the saved
13478
+ * card), `failed` (declined), `paid` (paid, registering), `done`, `refund_due` /
13479
+ * `refunded` (the registrar refused and the payment is returned), `abandoned`.
13480
+ */
13481
+ DomainCharge: {
13482
+ /** Format: uuid */
13483
+ chargeId: string;
13484
+ /** @example example.com */
13485
+ name: string;
13486
+ /** @enum {string} */
13487
+ kind: "register" | "renew";
13488
+ years: number;
13489
+ /** @description USD cents, before any tax Polar adds */
13490
+ amountCents: number;
13491
+ /** @enum {string} */
13492
+ status: "checkout" | "open" | "pending" | "failed" | "paid" | "done" | "refund_due" | "refunded" | "abandoned";
13493
+ /** @description Made by the automatic renewal, not by a person */
13494
+ auto: boolean;
13495
+ lastError?: string;
13496
+ /** @description Only on the 202 that opened a checkout */
13497
+ checkoutUrl?: string;
13498
+ /** Format: date-time */
13499
+ createdAt: string;
13500
+ /** Format: date-time */
13501
+ paidAt?: string;
13502
+ /** Format: date-time */
13503
+ settledAt?: string;
13504
+ };
13419
13505
  DomainList: {
13420
13506
  domains: components["schemas"]["Domain"][];
13421
13507
  /**
@@ -22614,12 +22700,16 @@ export interface operations {
22614
22700
  contact: components["schemas"]["DomainContact"];
22615
22701
  /** Format: uuid */
22616
22702
  projectId?: string;
22703
+ /** @description Pay in a checkout even when a payment method is saved. */
22704
+ checkout?: boolean;
22705
+ /** @description Where the checkout returns. Empty returns to the org's domain list. */
22706
+ returnTo?: string;
22617
22707
  };
22618
22708
  };
22619
22709
  };
22620
22710
  responses: {
22621
- /** @description Domain already purchased (idempotent) */
22622
- 200: {
22711
+ /** @description Paid and registered */
22712
+ 201: {
22623
22713
  headers: {
22624
22714
  [name: string]: unknown;
22625
22715
  };
@@ -22627,17 +22717,17 @@ export interface operations {
22627
22717
  "application/json": components["schemas"]["Domain"];
22628
22718
  };
22629
22719
  };
22630
- /** @description Purchase complete */
22631
- 201: {
22720
+ /** @description Payment is on its way: `status: checkout` carries the `checkoutUrl` to pay in; any other status is a charge still settling. Follow it with getDomainCharge. */
22721
+ 202: {
22632
22722
  headers: {
22633
22723
  [name: string]: unknown;
22634
22724
  };
22635
22725
  content: {
22636
- "application/json": components["schemas"]["Domain"];
22726
+ "application/json": components["schemas"]["DomainCharge"];
22637
22727
  };
22638
22728
  };
22639
22729
  400: components["responses"]["BadRequest"];
22640
- /** @description `payment_failed` — the payment was declined */
22730
+ /** @description `payment_failed` — the saved card was declined. Retry with `checkout: true`. */
22641
22731
  402: {
22642
22732
  headers: {
22643
22733
  [name: string]: unknown;
@@ -22647,7 +22737,7 @@ export interface operations {
22647
22737
  };
22648
22738
  };
22649
22739
  403: components["responses"]["Forbidden"];
22650
- /** @description `domain_taken`·`domain_unavailable` */
22740
+ /** @description `domain_taken`·`domain_owned`·`domain_unavailable`·`domain_premium`·`purchase_in_progress` */
22651
22741
  409: {
22652
22742
  headers: {
22653
22743
  [name: string]: unknown;
@@ -22674,7 +22764,7 @@ export interface operations {
22674
22764
  "application/json": components["schemas"]["Error"];
22675
22765
  };
22676
22766
  };
22677
- /** @description `no_core`·`registrar_not_configured`·`dns_not_configured` */
22767
+ /** @description `no_core`·`registrar_not_configured`·`dns_not_configured`·`domain_billing_off` */
22678
22768
  503: {
22679
22769
  headers: {
22680
22770
  [name: string]: unknown;
@@ -22827,11 +22917,13 @@ export interface operations {
22827
22917
  "application/json": {
22828
22918
  /** @default 1 */
22829
22919
  years?: number;
22920
+ checkout?: boolean;
22921
+ returnTo?: string;
22830
22922
  };
22831
22923
  };
22832
22924
  };
22833
22925
  responses: {
22834
- /** @description Renewed domain */
22926
+ /** @description Paid and renewed */
22835
22927
  200: {
22836
22928
  headers: {
22837
22929
  [name: string]: unknown;
@@ -22840,9 +22932,36 @@ export interface operations {
22840
22932
  "application/json": components["schemas"]["Domain"];
22841
22933
  };
22842
22934
  };
22935
+ /** @description Payment is on its way — see purchaseDomain */
22936
+ 202: {
22937
+ headers: {
22938
+ [name: string]: unknown;
22939
+ };
22940
+ content: {
22941
+ "application/json": components["schemas"]["DomainCharge"];
22942
+ };
22943
+ };
22843
22944
  400: components["responses"]["BadRequest"];
22945
+ /** @description `payment_failed` — the saved card was declined */
22946
+ 402: {
22947
+ headers: {
22948
+ [name: string]: unknown;
22949
+ };
22950
+ content: {
22951
+ "application/json": components["schemas"]["Error"];
22952
+ };
22953
+ };
22844
22954
  403: components["responses"]["Forbidden"];
22845
22955
  404: components["responses"]["NotFound"];
22956
+ /** @description `renewal_in_progress`·`domain_not_ready` */
22957
+ 409: {
22958
+ headers: {
22959
+ [name: string]: unknown;
22960
+ };
22961
+ content: {
22962
+ "application/json": components["schemas"]["Error"];
22963
+ };
22964
+ };
22846
22965
  };
22847
22966
  };
22848
22967
  setDomainAutoRenew: {
@@ -22966,6 +23085,56 @@ export interface operations {
22966
23085
  404: components["responses"]["NotFound"];
22967
23086
  };
22968
23087
  };
23088
+ listDomainCharges: {
23089
+ parameters: {
23090
+ query?: never;
23091
+ header?: never;
23092
+ path: {
23093
+ orgSlug: components["parameters"]["OrgSlug"];
23094
+ };
23095
+ cookie?: never;
23096
+ };
23097
+ requestBody?: never;
23098
+ responses: {
23099
+ /** @description Charges */
23100
+ 200: {
23101
+ headers: {
23102
+ [name: string]: unknown;
23103
+ };
23104
+ content: {
23105
+ "application/json": {
23106
+ charges: components["schemas"]["DomainCharge"][];
23107
+ };
23108
+ };
23109
+ };
23110
+ 403: components["responses"]["Forbidden"];
23111
+ };
23112
+ };
23113
+ getDomainCharge: {
23114
+ parameters: {
23115
+ query?: never;
23116
+ header?: never;
23117
+ path: {
23118
+ orgSlug: components["parameters"]["OrgSlug"];
23119
+ chargeId: string;
23120
+ };
23121
+ cookie?: never;
23122
+ };
23123
+ requestBody?: never;
23124
+ responses: {
23125
+ /** @description The charge */
23126
+ 200: {
23127
+ headers: {
23128
+ [name: string]: unknown;
23129
+ };
23130
+ content: {
23131
+ "application/json": components["schemas"]["DomainCharge"];
23132
+ };
23133
+ };
23134
+ 403: components["responses"]["Forbidden"];
23135
+ 404: components["responses"]["NotFound"];
23136
+ };
23137
+ };
22969
23138
  listRepos: {
22970
23139
  parameters: {
22971
23140
  query?: never;