@zinn-digital/sdk 0.1.1355 → 0.1.1357

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.
@@ -48448,6 +48448,29 @@ export interface paths {
48448
48448
  patch?: never;
48449
48449
  trace?: never;
48450
48450
  };
48451
+ "/v1/sites/{siteId}/install-progress": {
48452
+ parameters: {
48453
+ query?: never;
48454
+ header?: never;
48455
+ path: {
48456
+ /** @description Site ID (UUIDv7). */
48457
+ siteId: components["parameters"]["SiteId"];
48458
+ };
48459
+ cookie?: never;
48460
+ };
48461
+ /**
48462
+ * The installing screen's live stage, measured timing and Retry validity.
48463
+ * @description Row 45 (s1014, owner 2026-10-29). `install` is the same answer `retrySiteProvisioning` enforces; `step` is the running workflow's own progress answer, asked only while the site is installing and `null` when it cannot be asked (a Temporal fault degrades the field, never the response). Requires `sites.view`.
48464
+ */
48465
+ get: operations["getSiteInstallProgress"];
48466
+ put?: never;
48467
+ post?: never;
48468
+ delete?: never;
48469
+ options?: never;
48470
+ head?: never;
48471
+ patch?: never;
48472
+ trace?: never;
48473
+ };
48451
48474
  "/v1/sites/{siteId}/mail-smtp": {
48452
48475
  parameters: {
48453
48476
  query?: never;
@@ -50060,6 +50083,8 @@ export interface paths {
50060
50083
  * ⛔ Nothing here calls Temporal (§2.9). The status change and a `site.created` event commit in one transaction and the existing consumer starts the workflow, so a Temporal outage cannot leave the row half-moved.
50061
50084
  *
50062
50085
  * A site that is `active`, `deleting` or `deleted` is a `422` — a retry re-runs the build, and those are past it. Requires `sites.view` and `hosting.deploy.manage`.
50086
+ *
50087
+ * **Row 45 (s1014).** A `provisioning` site past its measured p90 is STALLED: Retry terminates the old run and starts afresh (row-locked, so a double press starts one workflow; the second answers `refusal: in_flight`). A `failed` site is refused with `422` (`refusal.sites.retryCoolingDown`) for 3 minutes after the failure, and (`refusal.sites.retryNotInGoodStanding`) when the account is not in good standing - exactly when `Site.install.retry.enabled` is `false`.
50063
50088
  */
50064
50089
  post: operations["retrySiteProvisioning"];
50065
50090
  delete?: never;
@@ -69482,7 +69507,7 @@ export interface components {
69482
69507
  * @example unsupported_platform
69483
69508
  * @enum {string}
69484
69509
  */
69485
- BulkErrorCode: "not_wordpress" | "not_serving" | "unsupported_platform" | "capability_denied" | "not_installed" | "unknown_blueprint" | "site_missing" | "driver_unresolved" | "vendor_refused" | "install_failed" | "not_in_good_standing" | "already_deleted" | "not_php" | "no_cdn" | "needs_addon" | "refused" | "unknown";
69510
+ BulkErrorCode: "not_wordpress" | "not_serving" | "unsupported_platform" | "capability_denied" | "not_installed" | "unknown_blueprint" | "site_missing" | "driver_unresolved" | "vendor_refused" | "install_failed" | "not_in_good_standing" | "already_deleted" | "not_php" | "no_cdn" | "needs_addon" | "refused" | "file_missing" | "file_not_regular" | "unknown";
69486
69511
  /** @description One plugin, and how far it reaches across the sites that were read. */
69487
69512
  BulkInstalledPlugin: {
69488
69513
  /** @description How many have it switched on. Carried separately rather than derived: *"active on 3 of the 9 that have it"* is the sentence somebody about to press **Deactivate** needs, and it cannot be recovered from one number. */
@@ -69643,6 +69668,11 @@ export interface components {
69643
69668
  * @enum {string}
69644
69669
  */
69645
69670
  mode?: "off" | "allow" | "block";
69671
+ /**
69672
+ * @description `find_file` and `delete_file` only. One exact path inside each site's document root (`wp-content/uploads/old.php`); a leading `/` means the same. Refused, never sanitised: wildcards, `..`, a part starting with `-`, control characters. Only a regular file is touched — never a folder or a link — and only inside the root. `delete_file` also refuses WordPress core and config files; a deleted file is kept in an archive on the server for 30 days.
69673
+ * @example wp-content/uploads/old.php
69674
+ */
69675
+ path?: string;
69646
69676
  /** @description `wp_auto_updates` only. Plugin automatic updates on or off. */
69647
69677
  plugins?: boolean;
69648
69678
  /**
@@ -69801,7 +69831,7 @@ export interface components {
69801
69831
  * @example plugin_install
69802
69832
  * @enum {string}
69803
69833
  */
69804
- BulkOperation: "stack_apply" | "blueprint_apply" | "application_install" | "plugin_install" | "plugin_activate" | "plugin_deactivate" | "plugin_remove" | "plugin_update" | "theme_install" | "core_update" | "wp_search_replace" | "featured_image_backfill" | "wp_auto_updates" | "site_delete" | "php_version" | "force_https" | "canonical_www" | "country_lock" | "cdn_purge" | "malware_scan" | "malware_clean";
69834
+ BulkOperation: "stack_apply" | "blueprint_apply" | "application_install" | "plugin_install" | "plugin_activate" | "plugin_deactivate" | "plugin_remove" | "plugin_update" | "theme_install" | "core_update" | "wp_search_replace" | "featured_image_backfill" | "wp_auto_updates" | "site_delete" | "php_version" | "force_https" | "canonical_www" | "country_lock" | "cdn_purge" | "malware_scan" | "malware_clean" | "find_file" | "delete_file";
69805
69835
  /** @description The outcome of restoring every restorable site for one org. */
69806
69836
  BulkRestoreResult: {
69807
69837
  /** @description Each site that could not be restored, with the reason code. */
@@ -95148,6 +95178,8 @@ export interface components {
95148
95178
  */
95149
95179
  failed_step?: string;
95150
95180
  id: components["schemas"]["Uuid"];
95181
+ /** @description Row 45 (s1014, owner 2026-10-29): what the installing screen may honestly say, and whether Retry is valid - the same answer `retrySiteProvisioning` enforces. `null` unless the site is `pending`, `provisioning` or `failed`. */
95182
+ install?: components["schemas"]["SiteInstallState"] | null;
95151
95183
  /**
95152
95184
  * @description Human label for the site; defaults to the primary domain.
95153
95185
  * @example Acme Marketing Site
@@ -97834,6 +97866,40 @@ export interface components {
97834
97866
  * @enum {string}
97835
97867
  */
97836
97868
  SiteImportStatus: "pending" | "indexing" | "fetching" | "building" | "deploying" | "verifying" | "completed" | "failed" | "cancelled";
97869
+ /** @description The installing screen's one read (row 45). */
97870
+ SiteInstallProgress: {
97871
+ install: components["schemas"]["SiteInstallState"];
97872
+ /** Format: uuid */
97873
+ site_id: string;
97874
+ status: string;
97875
+ /** @description The running workflow's own stage key (`begin`, `placement`, `account`, `blueprint`, `cdn`, `dns`, `verify`, `activate`, `rollback`), or `null` when it could not be asked - unknown, never zero (ADR 0023). */
97876
+ step: string | null;
97877
+ steps_done: number | null;
97878
+ steps_total: number | null;
97879
+ };
97880
+ /** @description Row 45 (s1014): the installing screen's honest state. `stalled` means past the measured p90 for this application (never under 5 minutes) with no end; Retry then restarts it. Retry is HIDDEN while running normally and after success; SHOWN but disabled (`enabled: false` with a `reason`) during the 3-minute cool-down after a failure and when the account is not in good standing. */
97881
+ SiteInstallState: {
97882
+ elapsed_seconds: number;
97883
+ /** @description Median of the last 200 finished installs of this application on this location, measured ESTATE-WIDE (durations only, no tenant data), so every org reads the same figure; falls back to the application on any location, then every install. */
97884
+ p50_seconds: number;
97885
+ p90_seconds: number;
97886
+ retry: {
97887
+ enabled: boolean;
97888
+ /** @enum {string|null} */
97889
+ reason: "running" | "done" | "cooldown" | "not_in_good_standing" | "not_retryable" | null;
97890
+ /** Format: date-time */
97891
+ retry_after: string | null;
97892
+ visible: boolean;
97893
+ };
97894
+ /** @description `true` only while the run is still going AND staff were really paged about it (the hung-install page fires once at the later of p90 and 12 minutes). The screen says "our team has been alerted" only when this is `true`; past p90 alone is not a page. */
97895
+ staff_alerted: boolean;
97896
+ /** Format: date-time */
97897
+ started_at: string | null;
97898
+ /** @enum {string} */
97899
+ state: "running" | "stalled" | "failed" | "done" | "other";
97900
+ /** @description How many runs the percentiles were read from; `0` means the fallback. */
97901
+ timing_samples: number;
97902
+ };
97837
97903
  SiteIntegrityFinding: {
97838
97904
  /** @description Staff only. */
97839
97905
  actor?: string;
@@ -99673,6 +99739,11 @@ export interface components {
99673
99739
  };
99674
99740
  /** @description The outcome of asking for a failed site to be built again. */
99675
99741
  SiteProvisioningRetry: {
99742
+ /**
99743
+ * @description Why nothing was restarted, as a machine key: `in_flight` when a build is already running (a second press while one is in flight is never a second workflow). `null` when `restarted` is `true`.
99744
+ * @enum {string|null}
99745
+ */
99746
+ refusal?: "in_flight" | null;
99676
99747
  /**
99677
99748
  * @description `true` when this call moved the row and queued a build; `false` when the site was **already** provisioning, which is a success and not a conflict.
99678
99749
  *
@@ -187551,6 +187622,33 @@ export interface operations {
187551
187622
  404: components["responses"]["NotFound"];
187552
187623
  };
187553
187624
  };
187625
+ getSiteInstallProgress: {
187626
+ parameters: {
187627
+ query?: never;
187628
+ header?: never;
187629
+ path: {
187630
+ /** @description Site ID (UUIDv7). */
187631
+ siteId: components["parameters"]["SiteId"];
187632
+ };
187633
+ cookie?: never;
187634
+ };
187635
+ requestBody?: never;
187636
+ responses: {
187637
+ /** @description The site's install progress. */
187638
+ 200: {
187639
+ headers: {
187640
+ [name: string]: unknown;
187641
+ };
187642
+ content: {
187643
+ "application/json": components["schemas"]["SiteInstallProgress"];
187644
+ };
187645
+ };
187646
+ 401: components["responses"]["Unauthorized"];
187647
+ 403: components["responses"]["Forbidden"];
187648
+ 404: components["responses"]["NotFound"];
187649
+ 429: components["responses"]["TooManyRequests"];
187650
+ };
187651
+ };
187554
187652
  getSiteMailSmtp: {
187555
187653
  parameters: {
187556
187654
  query?: never;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zinn-digital/sdk",
3
- "version": "0.1.1355",
3
+ "version": "0.1.1357",
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>",