@zinn-digital/sdk 0.1.1358 → 0.1.1362

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.
@@ -41636,6 +41636,28 @@ export interface paths {
41636
41636
  patch?: never;
41637
41637
  trace?: never;
41638
41638
  };
41639
+ "/v1/public/presales-tickets": {
41640
+ parameters: {
41641
+ query?: never;
41642
+ header?: never;
41643
+ path?: never;
41644
+ cookie?: never;
41645
+ };
41646
+ get?: never;
41647
+ put?: never;
41648
+ /**
41649
+ * Ask a question before you buy — no account.
41650
+ * @description The "Ask before you buy" form on the public site (owner ruling 2026-11-02). Files a GUEST ticket on the sales desk with category `presales`; the presales AI answers it and the reply reaches the asker by e-mail, and staff are notified with a subject that starts `Pre-sales ticket:`.
41651
+ *
41652
+ * **Anonymous** — no credential, no tenant. Controls fire cheapest first: a fail-closed per-IP (3/hour) and global (300/hour) budget, a honeypot field (`website`, answered `202` silently), the per-address ticket budget, a blocked sender (`202` silently), then Cloudflare Turnstile. A question the content filter flags is still filed and answered, as `presales_spam` at low priority — only a Turnstile failure or a rate limit refuses one.
41653
+ */
41654
+ post: operations["createPresalesTicket"];
41655
+ delete?: never;
41656
+ options?: never;
41657
+ head?: never;
41658
+ patch?: never;
41659
+ trace?: never;
41660
+ };
41639
41661
  "/v1/public/pricing/tax-quote": {
41640
41662
  parameters: {
41641
41663
  query?: never;
@@ -89784,6 +89806,27 @@ export interface components {
89784
89806
  /** @description What the visitor asked, in their own language. ⛔ Shorter than the dashboard assistant's 4,000: a customer pastes an error log, a prospect asks a question, and an unbounded prompt on an anonymous surface is an unbounded bill. */
89785
89807
  question: string;
89786
89808
  };
89809
+ PresalesTicketAccepted: {
89810
+ /** @description The ticket reference the asker can quote back at us. */
89811
+ reference: string;
89812
+ };
89813
+ PresalesTicketInput: {
89814
+ /**
89815
+ * Format: email
89816
+ * @description Where the answer is sent.
89817
+ */
89818
+ email: string;
89819
+ /** @description The asker's language; the answer is written in it. */
89820
+ locale?: string;
89821
+ name?: string;
89822
+ question: string;
89823
+ /** @description The site path the question was asked from (e.g. `/en/hosting`). Anything not starting `/` is dropped. */
89824
+ source_page?: string;
89825
+ /** @description The Cloudflare Turnstile token. */
89826
+ turnstile_token?: string;
89827
+ /** @description Honeypot. Leave empty. */
89828
+ website?: string;
89829
+ };
89787
89830
  PresalesTurn: {
89788
89831
  content: string;
89789
89832
  /** @enum {string} */
@@ -90793,6 +90836,11 @@ export interface components {
90793
90836
  * @default false
90794
90837
  */
90795
90838
  trial: boolean;
90839
+ /**
90840
+ * @description The application a trial is started for (owner, 2026-11-02 — an application card's "Start a free trial" starts the matching hosting trial with that application). One of the app-trial picker's values (`APP_TRIAL_CHOICES`); honoured only on a `trial` line whose plan is that application's own trial plan, and refused (422) otherwise. Recorded on the trial as its app choice, so the first run opens the site form on that application's stack with the application chosen. Ignored on a purchase.
90841
+ * @enum {string}
90842
+ */
90843
+ trial_app?: "" | "node" | "python" | "php" | "abantecart" | "cakephp" | "concretecms" | "craft" | "dolibarr" | "dotnet" | "drupal" | "joomla" | "laravel" | "matomo" | "mautic" | "mediawiki" | "modx" | "moodle" | "nextcloud" | "opencart" | "osticket" | "owncloud" | "payload" | "phpbb" | "piwigo" | "prestashop" | "silverstripe" | "strapi" | "suitecrm" | "typo3" | "whmcs" | "woocommerce" | "wordpress" | "zenphoto";
90796
90844
  /** @description The campaign a trial is started from (owner, 2026-10-21 — the "Move from Zeabur" page's 30-day trial, docs/1006). Sent only by that campaign's landing page. A campaign-only trial template is invisible to every public surface and is granted only when this names it and it is offered on the plan; any other value is ignored (the plan's public trial, if any, still applies). Meaningless without `trial`. */
90797
90845
  trial_campaign?: string;
90798
90846
  };
@@ -97519,6 +97567,30 @@ export interface components {
97519
97567
  /** @enum {string} */
97520
97568
  xmlrpc?: "limited" | "blocked";
97521
97569
  };
97570
+ /** @description `SiteFormSubmission` as `multipart/form-data`. Each part is ONE string; a question with several answers (e.g. checkboxes) is that part repeated under the same name, which the engine reads as a list exactly as it does a repeated urlencoded key. ⛔ Kept a plain string on purpose: openapi-python-client 0.29.1 emits unparseable Python for a multipart body whose `additionalProperties` is a `oneOf` or an `array` (the zinn-sdk release failed on it, D60130); `scripts/sdk-release.py --check-spec` refuses that shape. */
97571
+ SiteFormParts: {
97572
+ /** @description Same-site path after a refusal. */
97573
+ _back?: string;
97574
+ /**
97575
+ * Format: email
97576
+ * @description The visitor's address — the Reply-To.
97577
+ */
97578
+ _email: string;
97579
+ /** @description Shown in the e-mail subject. */
97580
+ _form?: string;
97581
+ /** @description Language of the two e-mails. */
97582
+ _locale?: string;
97583
+ _name?: string;
97584
+ /** @description Same-site path after success. */
97585
+ _next?: string;
97586
+ /** @description Local part of the site's mailbox, e.g. `coach`. */
97587
+ _to: string;
97588
+ /** @description Honeypot — leave empty. */
97589
+ _website?: string;
97590
+ "cf-turnstile-response"?: string;
97591
+ } & {
97592
+ [key: string]: string;
97593
+ };
97522
97594
  SiteFormResult: {
97523
97595
  /** @enum {string} */
97524
97596
  reason?: "origin" | "recipient" | "invalid" | "email" | "not_enabled" | "verification" | "rate" | "unavailable";
@@ -132167,8 +132239,8 @@ export interface operations {
132167
132239
  query?: {
132168
132240
  /** @description Narrow by owner. `me` is the calling agent's own queue; `unassigned` is the triage pile; a uuid is that agent's queue. One parameter rather than a boolean plus an id, because `unassigned=true` together with an id has no answer. */
132169
132241
  assignee?: string;
132170
- /** @description Only tickets whose category is this value (e.g. `zinn_ads`). An unknown value is a 422. */
132171
- category?: "site" | "email" | "domain" | "billing" | "migration" | "plugin" | "other" | "abuse" | "legal" | "zinn_ads";
132242
+ /** @description Only tickets whose category is this value (e.g. `zinn_ads`). `presales` and `presales_spam` are guest pre-sales questions from the public site (`createPresalesTicket`); a customer can never pick them. An unknown value is a 422. */
132243
+ category?: "site" | "email" | "domain" | "billing" | "migration" | "plugin" | "other" | "abuse" | "legal" | "zinn_ads" | "presales" | "presales_spam";
132172
132244
  /** @description Opaque cursor from a previous page's `page.next_cursor`. */
132173
132245
  cursor?: components["parameters"]["Cursor"];
132174
132246
  /** @description Only problem reports (`problem`) or improvement suggestions (`suggestion`), so staff can work the suggestions apart from the queue (docs/41). An unknown value is a 422. */
@@ -176516,6 +176588,44 @@ export interface operations {
176516
176588
  429: components["responses"]["TooManyRequests"];
176517
176589
  };
176518
176590
  };
176591
+ createPresalesTicket: {
176592
+ parameters: {
176593
+ query?: never;
176594
+ header?: never;
176595
+ path?: never;
176596
+ cookie?: never;
176597
+ };
176598
+ requestBody: {
176599
+ content: {
176600
+ "application/json": components["schemas"]["PresalesTicketInput"];
176601
+ };
176602
+ };
176603
+ responses: {
176604
+ /** @description Filed. The reference is what the asker quotes back at us. */
176605
+ 201: {
176606
+ headers: {
176607
+ "RateLimit-Remaining": components["headers"]["RateLimitRemaining"];
176608
+ [name: string]: unknown;
176609
+ };
176610
+ content: {
176611
+ "application/json": components["schemas"]["PresalesTicketAccepted"];
176612
+ };
176613
+ };
176614
+ /** @description Accepted and dropped without a ticket (the honeypot was filled, or the sender is blocked). Deliberately indistinguishable from success to the sender. */
176615
+ 202: {
176616
+ headers: {
176617
+ [name: string]: unknown;
176618
+ };
176619
+ content: {
176620
+ "application/json": {
176621
+ accepted: boolean;
176622
+ };
176623
+ };
176624
+ };
176625
+ 422: components["responses"]["UnprocessableEntity"];
176626
+ 429: components["responses"]["TooManyRequests"];
176627
+ };
176628
+ };
176519
176629
  quotePublicTaxDisplay: {
176520
176630
  parameters: {
176521
176631
  query?: never;
@@ -176863,7 +176973,7 @@ export interface operations {
176863
176973
  content: {
176864
176974
  "application/json": components["schemas"]["SiteFormSubmission"];
176865
176975
  "application/x-www-form-urlencoded": components["schemas"]["SiteFormSubmission"];
176866
- "multipart/form-data": components["schemas"]["SiteFormSubmission"];
176976
+ "multipart/form-data": components["schemas"]["SiteFormParts"];
176867
176977
  };
176868
176978
  };
176869
176979
  responses: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zinn-digital/sdk",
3
- "version": "0.1.1358",
3
+ "version": "0.1.1362",
4
4
  "description": "Typed TypeScript client for the Zinn Digital Platform API, generated from its OpenAPI spec.",
5
5
  "license": "MIT",
6
6
  "author": "Neil Lock \u2014 CEO, Zinn Digital\u00ae Ltd <office@zinndigital.com>",