@fluid-app/fluid-cli-portal 0.1.53 → 0.1.54

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/index.d.mts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { Command } from "commander";
2
2
  import { CliError, FluidPlugin, Result } from "@fluid-app/fluid-cli";
3
+ import { Plugin } from "vite";
3
4
 
4
5
  //#region src/types.d.ts
5
6
  /**
@@ -381,26 +382,6 @@ declare function gitAutoCommit(cwd: string, message: string, options?: GitAutoCo
381
382
  declare function gitPush(cwd: string, remoteUrl: string, branch?: string): Promise<void>;
382
383
  //#endregion
383
384
  //#region src/api/git-credential.d.ts
384
- /**
385
- * Portal git-credential adapter (the "invisible git" seam).
386
- *
387
- * Mints a short-lived (~1h) remote URL with an embedded installation
388
- * token for the portal's provisioned GitHub repo. The URL is used
389
- * immediately for one git op and discarded — NEVER persisted or logged.
390
- *
391
- * The backend endpoint (GitSync phase 006, portal adapter) mirrors the
392
- * widget contract exactly:
393
- *
394
- * POST <endpoint> -> 201 { git_credential: { remote_url, expires_at }, status, meta }
395
- * errors: 409 not_provisioned/not_connected, 502 vendor_error, 422 else
396
- * { error_message, errors: { type: [type] }, meta }
397
- *
398
- * The exact path is still being finalized as 006 lands, so it lives in
399
- * one constant here. Until the endpoint ships to prod a request 404s —
400
- * which we surface as `unavailable` so callers degrade gracefully
401
- * (warn + skip the git sync, proceed with the normal content push).
402
- */
403
- /** Minted credential — token embedded in `remote_url`. Treat as secret. */
404
385
  interface PortalGitCredential {
405
386
  readonly remote_url: string;
406
387
  readonly expires_at: string;
@@ -408,15 +389,21 @@ interface PortalGitCredential {
408
389
  /**
409
390
  * Outcome of a credential request. `unavailable` means "no repo to sync"
410
391
  * (endpoint missing / not provisioned / not connected). Its `retryable`
411
- * flag distinguishes backend states that are expected to self-heal
412
- * (`not_provisioned` — the first credential request triggers repository
413
- * provisioning) from ones that don't (`not_connected` — the company's
414
- * Git integration isn't connected, which no amount of retrying fixes;
415
- * verified against prod where both brand-new and long-standing
416
- * definitions on an unconnected company return `not_connected` 409s
417
- * permanently). `conflictType` carries the raw 409 conflict type so
418
- * callers can tailor messaging. `error` is an unexpected transport or
419
- * provider failure.
392
+ * flag distinguishes backend states that resolve on their own from ones
393
+ * that never will.
394
+ *
395
+ * Both `not_provisioned` and `not_connected` are retryable. The first
396
+ * self-heals because the credential request itself triggers provisioning;
397
+ * the second is the state a brand-new definition sits in for its first
398
+ * few seconds, while the Sidekiq job that creates the GitHub repo runs.
399
+ * (An earlier revision read `not_connected` as a durable "this company's
400
+ * Git integration isn't connected" — that was a misdiagnosis, and it made
401
+ * every newly created portal give up before its repo was ready.)
402
+ *
403
+ * `repoStatus` carries the underlying GitSync repo status when the API
404
+ * reports one; `disconnected` is the one value a retry can never fix.
405
+ * `conflictType` carries the raw 409 conflict type so callers can tailor
406
+ * messaging. `error` is an unexpected transport or provider failure.
420
407
  */
421
408
  type GitCredentialOutcome = {
422
409
  readonly status: "ok";
@@ -426,6 +413,7 @@ type GitCredentialOutcome = {
426
413
  readonly reason: string;
427
414
  readonly retryable: boolean;
428
415
  readonly conflictType?: string;
416
+ readonly repoStatus?: string;
429
417
  } | {
430
418
  readonly status: "error";
431
419
  readonly reason: string;
@@ -498,394 +486,407 @@ declare function createPortalProject(appName: string, options: CreateOptions, co
498
486
  //#region src/commands/pull.d.ts
499
487
  declare const pullCommand: Command;
500
488
  //#endregion
501
- //#region ../../api-clients/fluidos/src/generated/fluid-os-v0.d.ts
502
- interface components {
503
- schemas: {
504
- Meta: {
505
- request_id?: string; /** Format: date-time */
506
- timestamp?: string;
507
- };
508
- PaginatedMeta: {
509
- current_page: number;
510
- request_id: string; /** Format: date-time */
511
- timestamp: string;
512
- total_count: number;
513
- total_pages: number;
514
- };
515
- ErrorResponse: {
516
- error_message: string;
517
- errors: components["schemas"]["ErrorBag"];
518
- meta: components["schemas"]["Meta"];
519
- };
520
- UnauthorizedResponse: {
521
- message: string;
522
- }; /** @description Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract. */
523
- JsonValue: string | number | boolean | null | components["schemas"]["JsonValue"][] | {
524
- [key: string]: components["schemas"]["JsonValue"];
525
- }; /** @description A validation or API error value. */
526
- ErrorValue: string | string[] | components["schemas"]["JsonValue"]; /** @description Validation errors keyed by field, a list of errors, a single error message, or null when no structured error details are available. */
527
- ErrorBag: string | components["schemas"]["ErrorValue"][] | {
528
- [key: string]: components["schemas"]["ErrorValue"];
529
- } | null; /** @description An API error message represented as text or structured JSON. */
530
- ErrorMessage: string | components["schemas"]["ErrorBag"] | null; /** @description Common legacy error response envelope. Older endpoints may return one or more of these fields depending on the controller path. */
531
- StandardErrorResponse: {
532
- message?: string;
533
- error?: components["schemas"]["ErrorMessage"];
534
- error_message?: components["schemas"]["ErrorMessage"];
535
- errors?: components["schemas"]["ErrorBag"];
536
- meta?: components["schemas"]["Meta"];
537
- } & {
538
- [key: string]: components["schemas"]["JsonValue"];
539
- }; /** @description Common legacy unauthorized response envelope. */
540
- StandardUnauthorizedResponse: components["schemas"]["StandardErrorResponse"];
541
- FluidOSDefinitionListResponse: {
542
- definitions: components["schemas"]["FluidOSDefinitionBasic"][];
543
- meta: components["schemas"]["PaginatedMeta"];
544
- };
545
- FluidOSDefinitionRequest: {
546
- definition?: {
547
- name: string;
548
- active?: boolean;
549
- } | null;
550
- };
551
- FluidOSDefinitionUpdateRequest: {
552
- definition?: {
553
- name?: string;
554
- active?: boolean;
555
- } | null;
556
- };
557
- FluidOSNavigationItemCreateRequest: {
558
- navigation_item?: {
559
- icon?: string;
560
- label: string;
561
- position: number;
562
- parent_id?: number | null;
563
- screen_id?: number | null;
564
- slug?: string | null;
565
- source?: "user" | "system" | "code" | null;
566
- } | null;
567
- };
568
- FluidOSNavigationCreateRequest: {
569
- navigation?: {
570
- name: string;
571
- platform: string;
572
- } | null;
573
- };
574
- FluidOSProfileCreateRequest: {
575
- profile?: {
576
- name: string;
577
- default?: boolean;
578
- navigation_id?: number;
579
- mobile_navigation_id?: number;
580
- navigation_attributes?: {
581
- name: string;
582
- navigation_items_attributes?: Partial<NonNullable<components["schemas"]["FluidOSNavigationItemCreateRequest"]["navigation_item"]>>[];
583
- };
584
- mobile_navigation_attributes?: {
585
- name: string;
586
- navigation_items_attributes?: Partial<NonNullable<components["schemas"]["FluidOSNavigationItemCreateRequest"]["navigation_item"]>>[];
587
- };
588
- theme_ids?: number[];
589
- permissions?: components["schemas"]["FluidOSDynamicPayload"];
590
- } | null;
591
- };
592
- FluidOSScreenCreateRequest: {
593
- screen?: {
594
- name: string;
595
- slug: string;
596
- component_tree?: components["schemas"]["FluidOSDynamicPayload"] | null;
597
- } | null;
598
- };
599
- FluidOSThemeCreateRequest: {
600
- theme?: {
601
- config: components["schemas"]["FluidOSDynamicPayload"];
602
- name: string;
603
- active?: boolean;
604
- } | null;
605
- };
606
- FluidOSNavigationItemUpdateRequest: {
607
- navigation_item?: Partial<NonNullable<components["schemas"]["FluidOSNavigationItemCreateRequest"]["navigation_item"]>> | null;
608
- };
609
- FluidOSNavigationUpdateRequest: {
610
- navigation?: {
611
- name?: string;
612
- platform?: "web" | "mobile";
613
- } | null;
614
- };
615
- FluidOSProfileUpdateRequest: {
616
- profile?: {
617
- name?: string;
618
- default?: boolean;
619
- navigation_id?: number;
620
- mobile_navigation_id?: number;
621
- theme_ids?: number[];
622
- permissions?: components["schemas"]["FluidOSDynamicPayload"];
623
- } | null;
624
- };
625
- FluidOSScreenUpdateRequest: {
626
- screen?: {
627
- name?: string;
628
- slug?: string;
629
- component_tree?: components["schemas"]["FluidOSDynamicPayload"] | null;
630
- } | null;
631
- };
632
- FluidOSThemeUpdateRequest: {
633
- theme?: {
634
- name?: string;
635
- active?: boolean;
636
- config?: components["schemas"]["FluidOSDynamicPayload"];
637
- } | null;
638
- };
639
- FluidOSVersionUpdateRequest: {
640
- version?: {
641
- active?: boolean;
642
- } | null;
643
- }; /** FluidOS::NavigationItem */
644
- FluidOSNavigationItem: {
645
- id: number;
646
- icon?: string | null;
647
- label?: string | null;
648
- parent_id?: number | null;
649
- position?: number | null;
650
- screen_id?: number | null;
651
- slug?: string | null; /** @enum {string} */
652
- source?: "user" | "system" | "code";
653
- children?: components["schemas"]["FluidOSNavigationItem"][];
654
- }; /** FluidOS::Screen */
655
- FluidOSScreenBasic: {
656
- id: number;
657
- name?: string | null;
658
- slug?: string | null;
659
- definition_id: number;
660
- }; /** FluidOS::Screen */
661
- FluidOSScreen: {
662
- id: number;
663
- name?: string | null;
664
- slug?: string | null;
665
- definition_id: number;
666
- component_tree?: components["schemas"]["FluidOSDynamicPayload"];
667
- }; /** FluidOS::Theme */
668
- FluidOSTheme: {
669
- id: number;
670
- config?: components["schemas"]["FluidOSDynamicPayload"];
671
- active?: boolean | null;
672
- name?: string | null;
673
- definition_id: number;
674
- }; /** FluidOS::Navigation */
675
- FluidOSNavigationBasic: {
676
- id: number;
677
- name?: string | null;
678
- definition_id: number; /** @enum {string} */
679
- platform: "web" | "mobile";
680
- }; /** FluidOS::Navigation */
681
- FluidOSNavigation: {
682
- id: number;
683
- name?: string | null;
684
- definition_id: number; /** @enum {string} */
685
- platform: "web" | "mobile";
686
- screens?: components["schemas"]["FluidOSScreen"][];
687
- }; /** FluidOS::Navigation */
688
- FluidOSNavigationWithItems: {
689
- id: number;
690
- name?: string | null;
691
- definition_id: number; /** @enum {string} */
692
- platform: "web" | "mobile";
693
- navigation_items?: components["schemas"]["FluidOSNavigationItem"][];
694
- }; /** FluidOS::Profile */
695
- FluidOSProfile: {
696
- id: number;
697
- name?: string | null;
698
- default?: boolean | null;
699
- permissions?: components["schemas"]["FluidOSDynamicPayload"];
700
- definition_id: number;
701
- navigation?: components["schemas"]["FluidOSNavigationWithItems"] | null;
702
- mobile_navigation?: components["schemas"]["FluidOSNavigationWithItems"];
703
- themes?: components["schemas"]["FluidOSTheme"][];
704
- }; /** FluidOS::Profile */
705
- FluidOSProfileWithScreens: {
706
- id: number;
707
- name?: string | null;
708
- default?: boolean | null;
709
- permissions?: components["schemas"]["FluidOSDynamicPayload"];
710
- definition_id: number;
711
- navigation?: components["schemas"]["FluidOSNavigationWithItems"] | null;
712
- mobile_navigation?: components["schemas"]["FluidOSNavigationWithItems"];
713
- themes?: components["schemas"]["FluidOSTheme"][];
714
- screens?: components["schemas"]["FluidOSScreen"][];
715
- }; /** FluidOS::Definition */
716
- FluidOSDefinitionBasic: {
717
- id: number;
718
- name?: string | null;
719
- active?: boolean | null;
720
- }; /** FluidOS::Definition */
721
- FluidOSDefinition: {
722
- id: number;
723
- name?: string | null;
724
- active?: boolean | null;
725
- profiles?: components["schemas"]["FluidOSProfile"][];
726
- screens?: components["schemas"]["FluidOSScreenBasic"][];
727
- navigations?: components["schemas"]["FluidOSNavigationBasic"][];
728
- themes?: components["schemas"]["FluidOSTheme"][];
729
- }; /** FluidOS::Version */
730
- FluidOSVersion: {
731
- id: number;
732
- active?: boolean | null;
733
- manifest?: components["schemas"]["FluidOSDynamicPayload"]; /** Format: date-time */
734
- published_at?: string | null;
735
- definition_id: number;
736
- }; /** @description Couples each widget package artifact path class with the only accepted contentType value. */
737
- FluidOSWidgetPackageVersionArtifactContentTypeConstraint: {
738
- /** @constant */path: "widget.js"; /** @constant */
739
- contentType: "application/javascript";
740
- } | {
741
- /** @constant */path: "manifest.json"; /** @constant */
742
- contentType: "application/json";
743
- } | {
744
- path: string; /** @constant */
745
- contentType: "text/css";
746
- } | {
747
- path: string; /** @constant */
748
- contentType: "application/json";
749
- }; /** @description Couples each widget package artifact path class with the only accepted contentType/content_type alias values when supplied. */
750
- FluidOSWidgetPackageVersionCompletionArtifactContentTypeConstraint: {
751
- /** @constant */path: "widget.js"; /** @constant */
752
- contentType?: "application/javascript"; /** @constant */
753
- content_type?: "application/javascript";
754
- } | {
755
- /** @constant */path: "manifest.json"; /** @constant */
756
- contentType?: "application/json"; /** @constant */
757
- content_type?: "application/json";
758
- } | {
759
- path: string; /** @constant */
760
- contentType?: "text/css"; /** @constant */
761
- content_type?: "text/css";
762
- } | {
763
- path: string; /** @constant */
764
- contentType?: "application/json"; /** @constant */
765
- content_type?: "application/json";
766
- }; /** @description Artifact metadata required before Fluid OS widget package upload URLs can be issued. Artifact paths must be unique within the request, and the artifact list must include widget.js and manifest.json before upload URLs are issued. Artifact paths are top-level package artifact filenames only; accepted names are widget.js, manifest.json, *.css, and *.js.map with no slash paths. Accepted content types are application/javascript for widget.js, application/json for manifest.json and *.js.map, and text/css for *.css. Byte sizes are non-negative and checked against configured per-artifact and bundle limits; defaults are 5 MiB per artifact and 10 MiB per bundle unless environment config changes them. */
767
- FluidOSWidgetPackageVersionArtifactInput: {
768
- /** @description Top-level package artifact filename. Accepted names are widget.js, manifest.json, *.css, or *.js.map; slash paths are not accepted. */path: string; /** @description Expected SHA256 checksum for the artifact content. */
769
- sha256: string; /** @description Expected artifact size in bytes. Checked against configured per-artifact and bundle limits; defaults are 5 MiB per artifact and 10 MiB per bundle unless environment config changes them. */
770
- bytes: number;
771
- /**
772
- * @description MIME content type used when uploading the artifact. Accepted values are application/javascript for widget.js, application/json for manifest.json and *.js.map, and text/css for *.css.
773
- * @enum {string}
774
- */
775
- contentType: "application/javascript" | "application/json" | "text/css";
776
- } & components["schemas"]["FluidOSWidgetPackageVersionArtifactContentTypeConstraint"]; /** @description Request payload for starting a company-owned Fluid OS widget package version publish flow. Artifact paths must be unique top-level package artifact filenames. The artifacts list must include widget.js and manifest.json so the API can issue upload URLs and later verify the completed upload. */
777
- FluidOSWidgetPackageVersionCreateRequest: {
778
- /** @description Non-empty, object-path-safe company-owned widget package key. Use URL-safe characters only; . and .. are not accepted. */package_key: string; /** @description Non-empty, object-path-safe widget package version identifier accepted in the URL and upload path. Dotted versions such as 1.0.0 are accepted; only exact . or .. path segments and characters outside [A-Za-z0-9._~-] are rejected. */
779
- version: string; /** @description Fluid OS builder version that produced this package. */
780
- builder_version: string; /** @description Fluid OS CLI version that published this package. */
781
- cli_version: string; /** @description Fluid OS runtime version targeted by this package. */
782
- runtime_version: string; /** @description SHA256 checksum of the serialized manifest JSON. */
783
- manifest_hash: string; /** @description Widget package manifest JSON. It must use the supported widget manifest structure, contain at least one extractable widget type, and every widget type in that structure must use the company-owned prefix `company.<package_key>.`. */
784
- manifest: {
785
- [key: string]: components["schemas"]["JsonValue"];
786
- }; /** @description Top-level package artifacts to upload. The list must include widget.js and manifest.json. */
787
- artifacts: components["schemas"]["FluidOSWidgetPackageVersionArtifactInput"][] & (unknown & unknown); /** @description Optional publisher metadata stored with the package version. */
788
- build_metadata?: {
789
- [key: string]: components["schemas"]["JsonValue"];
790
- };
791
- }; /** @description Upload instructions for a widget package artifact. */
792
- FluidOSWidgetPackageVersionUpload: {
793
- /** @description Top-level package artifact filename. */path: string; /** Format: uri */
794
- upload_url: string; /** Format: uri */
795
- public_url: string;
796
- }; /** @description Upload session details for a pending Fluid OS widget package version. */
797
- FluidOSWidgetPackageVersionCreateResponse: {
798
- version_id: number; /** Format: uri */
799
- artifact_base_url: string;
800
- uploads: components["schemas"]["FluidOSWidgetPackageVersionUpload"][];
801
- }; /** @description Optional artifact metadata supplied when completing a widget package upload. Artifact paths must be unique top-level package artifact filenames within the request; accepted names are widget.js, manifest.json, *.css, and *.js.map with no slash paths. Accepted content types are application/javascript for widget.js, application/json for manifest.json and *.js.map, and text/css for *.css. Byte sizes are non-negative and checked against configured per-artifact and bundle limits; defaults are 5 MiB per artifact and 10 MiB per bundle unless environment config changes them. sha256/checksum, bytes/size, and contentType/content_type are accepted aliases and must match when both aliases are present; supplied artifact metadata is compared with the stored upload-session/package version artifact metadata during verification. If artifacts are supplied, they must include exactly the stored upload-session artifact paths. Manifest verification is separate and happens against uploaded artifact content. */
802
- FluidOSWidgetPackageVersionCompletionArtifactInput: {
803
- /** @description Top-level package artifact filename. Accepted names are widget.js, manifest.json, *.css, or *.js.map; slash paths are not accepted. */path: string; /** @description Expected SHA256 checksum for the artifact content. */
804
- sha256?: string; /** @description Alias for sha256. */
805
- checksum?: string; /** @description Expected artifact size in bytes. Checked against configured per-artifact and bundle limits; defaults are 5 MiB per artifact and 10 MiB per bundle unless environment config changes them. */
806
- bytes?: number; /** @description Alias for bytes; checked against the same configured per-artifact and bundle limits. */
807
- size?: number;
808
- /**
809
- * @description MIME content type for the artifact. Accepted values are application/javascript for widget.js, application/json for manifest.json and *.js.map, and text/css for *.css.
810
- * @enum {string}
811
- */
812
- contentType?: "application/javascript" | "application/json" | "text/css";
813
- /**
814
- * @description Alias for contentType.
815
- * @enum {string}
816
- */
817
- content_type?: "application/javascript" | "application/json" | "text/css";
818
- } & components["schemas"]["FluidOSWidgetPackageVersionCompletionArtifactContentTypeConstraint"]; /** @description Request payload for verifying uploaded company-owned Fluid OS widget package artifacts. The version path parameter, optional package_key, and any supplied artifact metadata must match the stored upload-session/package version artifact metadata before the package version is approved. If artifacts are supplied, they must include exactly the stored upload-session artifact paths. Uploaded manifest.json is verified for matching packageId, matching version, and valid company-owned `company.<package_key>.` widget type prefixes. */
819
- FluidOSWidgetPackageVersionCompleteUploadRequest: {
820
- /** @description Optional non-empty, object-path-safe widget package key. When omitted, the company's widget package is used; . and .. are not accepted. */package_key?: string | null; /** @description Optional artifact metadata to compare with the stored upload session. When supplied, the list must include exactly the stored upload-session artifact paths; omissions and extras are rejected. */
821
- artifacts?: components["schemas"]["FluidOSWidgetPackageVersionCompletionArtifactInput"][];
822
- }; /** @description Approved Fluid OS widget package version details. */
823
- FluidOSWidgetPackageVersionCompleteUploadResponse: {
824
- status: string;
825
- packageId: string; /** @description Non-empty, object-path-safe widget package version identifier. Dotted versions such as 1.0.0 are accepted; only exact . or .. path segments and characters outside [A-Za-z0-9._~-] are rejected. */
826
- version: string; /** Format: uri */
827
- scriptUrl: string;
828
- cssUrls: string[]; /** Format: uri */
829
- manifestUrl: string;
830
- }; /** @description Flat verification failure response returned when uploaded artifacts do not match the package manifest or expected metadata. */
831
- FluidOSWidgetPackageVersionVerificationErrorResponse: {
832
- /** @enum {string} */status: "error";
833
- error_message: string;
834
- details: {
835
- [key: string]: components["schemas"]["JsonValue"];
836
- };
837
- }; /** @description Dynamic Fluid OS JSON payload whose keys are defined by the app builder configuration. */
838
- FluidOSDynamicPayload: {
839
- [key: string]: components["schemas"]["JsonValue"];
840
- } | null;
841
- FluidOSWidgetPackageCatalogEntry: {
842
- /**
843
- * @description Package ownership source for the shared widget loading path.
844
- * @enum {string}
845
- */
846
- source: "company" | "droplet";
847
- /**
848
- * @description Runtime package identifier prefixed by source.
849
- * @example company.portal-home
850
- * @example droplet.reviews
851
- */
852
- packageId: string; /** @description Approved package version currently active for this owner. */
853
- version: string; /** @description Public module script URL for the package runtime artifact. */
854
- scriptUrl: string | null; /** @description Public stylesheet URLs for the package runtime artifacts. */
855
- cssUrls: string[]; /** @description Public URL for the package manifest artifact. */
856
- manifestUrl: string | null; /** @description Approved package manifest JSON used by the runtime loader. */
857
- manifest: {
858
- [key: string]: components["schemas"]["JsonValue"];
859
- };
860
- };
861
- FluidOSWidgetPackageCatalogResponse: {
862
- packages: components["schemas"]["FluidOSWidgetPackageCatalogEntry"][];
863
- };
864
- FluidOSWidgetPackageDropletForbiddenResponse: {
865
- error: {
866
- message: string;
867
- details?: {
868
- [key: string]: components["schemas"]["JsonValue"];
869
- };
870
- }; /** @enum {integer} */
871
- status: 403;
872
- meta?: components["schemas"]["Meta"];
873
- };
874
- FluidOSWidgetPackageRoleForbiddenResponse: {
875
- message: string;
876
- };
877
- FluidOSWidgetPackagePermissionForbiddenResponse: {
878
- error: string;
879
- };
880
- FluidOSWidgetPackageForbiddenResponse: components["schemas"]["FluidOSWidgetPackageDropletForbiddenResponse"] | components["schemas"]["FluidOSWidgetPackageRoleForbiddenResponse"] | components["schemas"]["FluidOSWidgetPackagePermissionForbiddenResponse"];
881
- };
882
- responses: never;
883
- parameters: never;
884
- requestBodies: never;
885
- headers: never;
886
- pathItems: never;
489
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/core/auth.gen.d.ts
490
+ type AuthToken = string | undefined;
491
+ interface Auth {
492
+ /**
493
+ * Which part of the request do we use to send the auth?
494
+ *
495
+ * @default 'header'
496
+ */
497
+ in?: "header" | "query" | "cookie";
498
+ /**
499
+ * A unique identifier for the security scheme.
500
+ *
501
+ * Defined only when there are multiple security schemes whose `Auth`
502
+ * shape would otherwise be identical.
503
+ */
504
+ key?: string;
505
+ /**
506
+ * Header or query parameter name.
507
+ *
508
+ * @default 'Authorization'
509
+ */
510
+ name?: string;
511
+ scheme?: "basic" | "bearer";
512
+ type: "apiKey" | "http";
513
+ }
514
+ //#endregion
515
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/core/pathSerializer.gen.d.ts
516
+ interface SerializerOptions<T> {
517
+ /**
518
+ * @default true
519
+ */
520
+ explode: boolean;
521
+ style: T;
522
+ }
523
+ type ArrayStyle = "form" | "spaceDelimited" | "pipeDelimited";
524
+ type ObjectStyle = "form" | "deepObject";
525
+ //#endregion
526
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/core/bodySerializer.gen.d.ts
527
+ type QuerySerializer = (query: Record<string, unknown>) => string;
528
+ type BodySerializer = (body: unknown) => unknown;
529
+ type QuerySerializerOptionsObject = {
530
+ allowReserved?: boolean;
531
+ array?: Partial<SerializerOptions<ArrayStyle>>;
532
+ object?: Partial<SerializerOptions<ObjectStyle>>;
533
+ };
534
+ type QuerySerializerOptions = QuerySerializerOptionsObject & {
535
+ /**
536
+ * Per-parameter serialization overrides. When provided, these settings
537
+ * override the global array/object settings for specific parameter names.
538
+ */
539
+ parameters?: Record<string, QuerySerializerOptionsObject>;
540
+ };
541
+ //#endregion
542
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/core/types.gen.d.ts
543
+ type HttpMethod = "connect" | "delete" | "get" | "head" | "options" | "patch" | "post" | "put" | "trace";
544
+ type Client$1<RequestFn = never, Config = unknown, MethodFn = never, BuildUrlFn = never, SseFn = never> = {
545
+ /**
546
+ * Returns the final request URL.
547
+ */
548
+ buildUrl: BuildUrlFn;
549
+ getConfig: () => Config;
550
+ request: RequestFn;
551
+ setConfig: (config: Config) => Config;
552
+ } & { [K in HttpMethod]: MethodFn } & ([SseFn] extends [never] ? {
553
+ sse?: never;
554
+ } : {
555
+ sse: { [K in HttpMethod]: SseFn };
556
+ });
557
+ interface Config$1 {
558
+ /**
559
+ * Auth token or a function returning auth token. The resolved value will be
560
+ * added to the request payload as defined by its `security` array.
561
+ */
562
+ auth?: ((auth: Auth) => Promise<AuthToken> | AuthToken) | AuthToken;
563
+ /**
564
+ * A function for serializing request body parameter. By default,
565
+ * {@link JSON.stringify()} will be used.
566
+ */
567
+ bodySerializer?: BodySerializer | null;
568
+ /**
569
+ * An object containing any HTTP headers that you want to pre-populate your
570
+ * `Headers` object with.
571
+ *
572
+ * {@link https://developer.mozilla.org/docs/Web/API/Headers/Headers#init See more}
573
+ */
574
+ headers?: RequestInit["headers"] | Record<string, string | number | boolean | (string | number | boolean)[] | null | undefined | unknown>;
575
+ /**
576
+ * The request method.
577
+ *
578
+ * {@link https://developer.mozilla.org/docs/Web/API/fetch#method See more}
579
+ */
580
+ method?: Uppercase<HttpMethod>;
581
+ /**
582
+ * A function for serializing request query parameters. By default, arrays
583
+ * will be exploded in form style, objects will be exploded in deepObject
584
+ * style, and reserved characters are percent-encoded.
585
+ *
586
+ * This method will have no effect if the native `paramsSerializer()` Axios
587
+ * API function is used.
588
+ *
589
+ * {@link https://swagger.io/docs/specification/serialization/#query View examples}
590
+ */
591
+ querySerializer?: QuerySerializer | QuerySerializerOptions;
592
+ /**
593
+ * A function validating request data. This is useful if you want to ensure
594
+ * the request conforms to the desired shape, so it can be safely sent to
595
+ * the server.
596
+ */
597
+ requestValidator?: (data: unknown) => Promise<unknown>;
598
+ /**
599
+ * A function transforming response data before it's returned. This is useful
600
+ * for post-processing data, e.g., converting ISO strings into Date objects.
601
+ */
602
+ responseTransformer?: (data: unknown) => Promise<unknown>;
603
+ /**
604
+ * A function validating response data. This is useful if you want to ensure
605
+ * the response conforms to the desired shape, so it can be safely passed to
606
+ * the transformers and returned to the user.
607
+ */
608
+ responseValidator?: (data: unknown) => Promise<unknown>;
887
609
  }
888
610
  //#endregion
611
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/core/serverSentEvents.gen.d.ts
612
+ type ServerSentEventsOptions<TData = unknown> = Omit<RequestInit, "method"> & Pick<Config$1, "method" | "responseTransformer" | "responseValidator"> & {
613
+ /**
614
+ * Fetch API implementation. You can use this option to provide a custom
615
+ * fetch instance.
616
+ *
617
+ * @default globalThis.fetch
618
+ */
619
+ fetch?: typeof fetch;
620
+ /**
621
+ * Implementing clients can call request interceptors inside this hook.
622
+ */
623
+ onRequest?: (url: string, init: RequestInit) => Promise<Request>;
624
+ /**
625
+ * Callback invoked when a network or parsing error occurs during streaming.
626
+ *
627
+ * This option applies only if the endpoint returns a stream of events.
628
+ *
629
+ * @param error The error that occurred.
630
+ */
631
+ onSseError?: (error: unknown) => void;
632
+ /**
633
+ * Callback invoked when an event is streamed from the server.
634
+ *
635
+ * This option applies only if the endpoint returns a stream of events.
636
+ *
637
+ * @param event Event streamed from the server.
638
+ * @returns Nothing (void).
639
+ */
640
+ onSseEvent?: (event: StreamEvent<TData>) => void;
641
+ serializedBody?: RequestInit["body"];
642
+ /**
643
+ * Default retry delay in milliseconds.
644
+ *
645
+ * This option applies only if the endpoint returns a stream of events.
646
+ *
647
+ * @default 3000
648
+ */
649
+ sseDefaultRetryDelay?: number;
650
+ /**
651
+ * Maximum number of retry attempts before giving up.
652
+ */
653
+ sseMaxRetryAttempts?: number;
654
+ /**
655
+ * Maximum retry delay in milliseconds.
656
+ *
657
+ * Applies only when exponential backoff is used.
658
+ *
659
+ * This option applies only if the endpoint returns a stream of events.
660
+ *
661
+ * @default 30000
662
+ */
663
+ sseMaxRetryDelay?: number;
664
+ /**
665
+ * Optional sleep function for retry backoff.
666
+ *
667
+ * Defaults to using `setTimeout`.
668
+ */
669
+ sseSleepFn?: (ms: number) => Promise<void>;
670
+ url: string;
671
+ };
672
+ interface StreamEvent<TData = unknown> {
673
+ data: TData;
674
+ event?: string;
675
+ id?: string;
676
+ retry?: number;
677
+ }
678
+ type ServerSentEventsResult<TData = unknown, TReturn = void, TNext = unknown> = {
679
+ stream: AsyncGenerator<TData extends Record<string, unknown> ? TData[keyof TData] : TData, TReturn, TNext>;
680
+ };
681
+ //#endregion
682
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/client/utils.gen.d.ts
683
+ type ErrInterceptor<Err, Res, Req, Options> = (error: Err, response: Res | undefined, request: Req | undefined, options: Options) => Err | Promise<Err>;
684
+ type ReqInterceptor<Req, Options> = (request: Req, options: Options) => Req | Promise<Req>;
685
+ type ResInterceptor<Res, Req, Options> = (response: Res, request: Req, options: Options) => Res | Promise<Res>;
686
+ declare class Interceptors<Interceptor> {
687
+ fns: Array<Interceptor | null>;
688
+ clear(): void;
689
+ eject(id: number | Interceptor): void;
690
+ exists(id: number | Interceptor): boolean;
691
+ getInterceptorIndex(id: number | Interceptor): number;
692
+ update(id: number | Interceptor, fn: Interceptor): number | Interceptor | false;
693
+ use(fn: Interceptor): number;
694
+ }
695
+ interface Middleware<Req, Res, Err, Options> {
696
+ error: Interceptors<ErrInterceptor<Err, Res, Req, Options>>;
697
+ request: Interceptors<ReqInterceptor<Req, Options>>;
698
+ response: Interceptors<ResInterceptor<Res, Req, Options>>;
699
+ }
700
+ //#endregion
701
+ //#region ../../api-clients/hey-api-fetch-runtime/src/generated/client/types.gen.d.ts
702
+ type ResponseStyle = "data" | "fields";
703
+ interface Config<T extends ClientOptions = ClientOptions> extends Omit<RequestInit, "body" | "headers" | "method">, Config$1 {
704
+ /**
705
+ * Base URL for all requests made by this client.
706
+ */
707
+ baseUrl?: T["baseUrl"];
708
+ /**
709
+ * Fetch API implementation. You can use this option to provide a custom
710
+ * fetch instance.
711
+ *
712
+ * @default globalThis.fetch
713
+ */
714
+ fetch?: typeof fetch;
715
+ /**
716
+ * Please don't use the Fetch client for Next.js applications. The `next`
717
+ * options won't have any effect.
718
+ *
719
+ * Install {@link https://www.npmjs.com/package/@hey-api/client-next `@hey-api/client-next`} instead.
720
+ */
721
+ next?: never;
722
+ /**
723
+ * Return the response data parsed in a specified format. By default, `auto`
724
+ * will infer the appropriate method from the `Content-Type` response header.
725
+ * You can override this behavior with any of the {@link Body} methods.
726
+ * Select `stream` if you don't want to parse response data at all.
727
+ *
728
+ * @default 'auto'
729
+ */
730
+ parseAs?: "arrayBuffer" | "auto" | "blob" | "formData" | "json" | "stream" | "text";
731
+ /**
732
+ * Should we return only data or multiple fields (data, error, response, etc.)?
733
+ *
734
+ * @default 'fields'
735
+ */
736
+ responseStyle?: ResponseStyle;
737
+ /**
738
+ * Throw an error instead of returning it in the response?
739
+ *
740
+ * @default false
741
+ */
742
+ throwOnError?: T["throwOnError"];
743
+ }
744
+ interface RequestOptions<TData = unknown, TResponseStyle extends ResponseStyle = "fields", ThrowOnError extends boolean = boolean, Url extends string = string> extends Config<{
745
+ responseStyle: TResponseStyle;
746
+ throwOnError: ThrowOnError;
747
+ }>, Pick<ServerSentEventsOptions<TData>, "onRequest" | "onSseError" | "onSseEvent" | "sseDefaultRetryDelay" | "sseMaxRetryAttempts" | "sseMaxRetryDelay"> {
748
+ /**
749
+ * Any body that you want to add to your request.
750
+ *
751
+ * {@link https://developer.mozilla.org/docs/Web/API/fetch#body}
752
+ */
753
+ body?: unknown;
754
+ path?: Record<string, unknown>;
755
+ query?: Record<string, unknown>;
756
+ /**
757
+ * Security mechanism(s) to use for the request.
758
+ */
759
+ security?: ReadonlyArray<Auth>;
760
+ url: Url;
761
+ }
762
+ interface ResolvedRequestOptions<TResponseStyle extends ResponseStyle = "fields", ThrowOnError extends boolean = boolean, Url extends string = string> extends RequestOptions<unknown, TResponseStyle, ThrowOnError, Url> {
763
+ headers: Headers;
764
+ serializedBody?: string;
765
+ }
766
+ type RequestResult<TData = unknown, TError = unknown, ThrowOnError extends boolean = boolean, TResponseStyle extends ResponseStyle = "fields"> = ThrowOnError extends true ? Promise<TResponseStyle extends "data" ? TData extends Record<string, unknown> ? TData[keyof TData] : TData : {
767
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
768
+ request: Request;
769
+ response: Response;
770
+ }> : Promise<TResponseStyle extends "data" ? (TData extends Record<string, unknown> ? TData[keyof TData] : TData) | undefined : ({
771
+ data: TData extends Record<string, unknown> ? TData[keyof TData] : TData;
772
+ error: undefined;
773
+ } | {
774
+ data: undefined;
775
+ error: TError extends Record<string, unknown> ? TError[keyof TError] : TError;
776
+ }) & {
777
+ /** request may be undefined, because error may be from building the request object itself */request?: Request; /** response may be undefined, because error may be from building the request object itself or from a network error */
778
+ response?: Response;
779
+ }>;
780
+ interface ClientOptions {
781
+ baseUrl?: string;
782
+ responseStyle?: ResponseStyle;
783
+ throwOnError?: boolean;
784
+ }
785
+ type MethodFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = "fields">(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method">) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
786
+ type SseFn = <TData = unknown, _TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = "fields">(options: Omit<RequestOptions<never, TResponseStyle, ThrowOnError>, "method">) => Promise<ServerSentEventsResult<TData>>;
787
+ type RequestFn = <TData = unknown, TError = unknown, ThrowOnError extends boolean = false, TResponseStyle extends ResponseStyle = "fields">(options: Omit<RequestOptions<TData, TResponseStyle, ThrowOnError>, "method"> & Pick<Required<RequestOptions<TData, TResponseStyle, ThrowOnError>>, "method">) => RequestResult<TData, TError, ThrowOnError, TResponseStyle>;
788
+ type BuildUrlFn = <TData extends {
789
+ body?: unknown;
790
+ path?: Record<string, unknown>;
791
+ query?: Record<string, unknown>;
792
+ url: string;
793
+ }>(options: TData & Options<TData>) => string;
794
+ type Client = Client$1<RequestFn, Config, MethodFn, BuildUrlFn, SseFn> & {
795
+ interceptors: Middleware<Request, Response, unknown, ResolvedRequestOptions>;
796
+ };
797
+ interface TDataShape {
798
+ body?: unknown;
799
+ headers?: unknown;
800
+ path?: unknown;
801
+ query?: unknown;
802
+ url: string;
803
+ }
804
+ type OmitKeys<T, K> = Pick<T, Exclude<keyof T, K>>;
805
+ type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown, TResponseStyle extends ResponseStyle = "fields"> = OmitKeys<RequestOptions<TResponse, TResponseStyle, ThrowOnError>, "body" | "path" | "query" | "url"> & ([TData] extends [never] ? unknown : Omit<TData, "url">);
806
+ //#endregion
807
+ //#region ../../api-clients/fluidos/src/hey-api-client.d.ts
808
+ type FluidOsHeyApiClient = Client;
809
+ //#endregion
810
+ //#region ../../api-clients/fluidos/src/hey-api/types.gen.d.ts
811
+ /**
812
+ * Any valid JSON value for provider, integration, theme, metadata, or other dynamic payloads whose keys are not fixed by the API contract.
813
+ */
814
+ type JsonValue = string | number | boolean | null | Array<JsonValue> | {
815
+ [key: string]: JsonValue;
816
+ };
817
+ /**
818
+ * FluidOS::NavigationItem
819
+ */
820
+ type FluidOsNavigationItem = {
821
+ id: number;
822
+ icon?: string | null;
823
+ label?: string | null;
824
+ parent_id?: number | null;
825
+ position?: number | null;
826
+ screen_id?: number | null;
827
+ slug?: string | null;
828
+ source?: "user" | "system" | "code";
829
+ children?: Array<FluidOsNavigationItem>;
830
+ };
831
+ /**
832
+ * FluidOS::Screen
833
+ */
834
+ type FluidOsScreen = {
835
+ id: number;
836
+ name?: string | null;
837
+ slug?: string | null;
838
+ definition_id: number;
839
+ component_tree?: FluidOsDynamicPayload;
840
+ };
841
+ /**
842
+ * FluidOS::Theme
843
+ */
844
+ type FluidOsTheme = {
845
+ id: number;
846
+ config?: FluidOsDynamicPayload;
847
+ active?: boolean | null;
848
+ name?: string | null;
849
+ definition_id: number;
850
+ };
851
+ /**
852
+ * FluidOS::Navigation
853
+ */
854
+ type FluidOsNavigationBasic = {
855
+ id: number;
856
+ name?: string | null;
857
+ definition_id: number;
858
+ platform: "web" | "mobile";
859
+ };
860
+ /**
861
+ * FluidOS::Navigation
862
+ */
863
+ type FluidOsNavigationWithItems = {
864
+ id: number;
865
+ name?: string | null;
866
+ definition_id: number;
867
+ platform: "web" | "mobile";
868
+ navigation_items?: Array<FluidOsNavigationItem>;
869
+ };
870
+ /**
871
+ * FluidOS::Profile
872
+ */
873
+ type FluidOsProfile = {
874
+ id: number;
875
+ name?: string | null;
876
+ default?: boolean | null;
877
+ permissions?: FluidOsDynamicPayload;
878
+ definition_id: number;
879
+ navigation?: FluidOsNavigationWithItems | null;
880
+ mobile_navigation?: FluidOsNavigationWithItems;
881
+ themes?: Array<FluidOsTheme>;
882
+ };
883
+ /**
884
+ * Dynamic Fluid OS JSON payload whose keys are defined by the app builder configuration.
885
+ */
886
+ type FluidOsDynamicPayload = {
887
+ [key: string]: JsonValue;
888
+ } | null;
889
+ //#endregion
889
890
  //#region src/utils/mappings.d.ts
890
891
  /** Definition metadata stored at the top level of the mappings file. */
891
892
  interface DefinitionMapping {
@@ -1047,6 +1048,7 @@ declare function categorizeChanges(diff: SnapshotDiff): CategorizedChanges;
1047
1048
  *
1048
1049
  * Checks:
1049
1050
  * - New and changed resources contain the required local-file fields
1051
+ * - Every widget node in a changed screen has a string "id" and "type"
1050
1052
  * - New and changed themes include the required config object
1051
1053
  * - Navigation items' "screen" slugs reference existing screen files or mappings
1052
1054
  * - Profile "navigation" and "mobile_navigation" slugs reference existing nav files or mappings
@@ -1066,6 +1068,205 @@ declare const topLevelWidgetCommand: Command;
1066
1068
  //#region src/commands/deploy.d.ts
1067
1069
  declare const deployCommand: Command;
1068
1070
  //#endregion
1071
+ //#region ../widget-tooling/src/internal/widget-package-validation.d.ts
1072
+ type WidgetPackageOwnerKind = "company" | "droplet";
1073
+ //#endregion
1074
+ //#region ../widget-tooling/src/internal/widget-package-builder.d.ts
1075
+ interface SharedWidgetPackageBuildResult {
1076
+ readonly publishDir: string;
1077
+ readonly packageId: string;
1078
+ readonly version: string;
1079
+ readonly manifestPath: string;
1080
+ readonly publishManifestPath: string;
1081
+ readonly widgetScriptPath: string;
1082
+ }
1083
+ //#endregion
1084
+ //#region ../widget-tooling/src/internal/widget-package-artifacts.d.ts
1085
+ interface ArtifactMetadata {
1086
+ readonly path: string;
1087
+ readonly sha256: string;
1088
+ readonly bytes: number;
1089
+ readonly contentType: string;
1090
+ }
1091
+ //#endregion
1092
+ //#region ../widget-tooling/src/internal/widget-package-upload.d.ts
1093
+ type WidgetPackageUploadOwner = {
1094
+ readonly kind: "droplet";
1095
+ readonly uuid: string;
1096
+ } | {
1097
+ readonly kind: "company";
1098
+ };
1099
+ type WidgetPackageArtifactMetadata = ArtifactMetadata;
1100
+ interface WidgetPackageUploadArtifact extends WidgetPackageArtifactMetadata {
1101
+ readonly body: BodyInit;
1102
+ }
1103
+ interface WidgetPackageSessionRequest {
1104
+ readonly version: string;
1105
+ readonly packageKey: string;
1106
+ readonly builderVersion: string;
1107
+ readonly cliVersion: string;
1108
+ readonly runtimeVersion: string;
1109
+ readonly manifestHash: string;
1110
+ readonly manifest: Record<string, unknown>;
1111
+ readonly artifacts: readonly WidgetPackageArtifactMetadata[];
1112
+ }
1113
+ interface WidgetPackagePublishRequest extends Omit<WidgetPackageSessionRequest, "artifacts"> {
1114
+ readonly artifacts: readonly WidgetPackageUploadArtifact[];
1115
+ }
1116
+ type WidgetPackageArtifactPayload = ArtifactMetadata;
1117
+ interface WidgetPackageUploadSessionPayload {
1118
+ readonly version: string;
1119
+ readonly package_key: string;
1120
+ readonly builder_version: string;
1121
+ readonly cli_version: string;
1122
+ readonly runtime_version: string;
1123
+ readonly manifest_hash: string;
1124
+ readonly manifest: Record<string, unknown>;
1125
+ readonly artifacts: readonly WidgetPackageArtifactPayload[];
1126
+ }
1127
+ interface WidgetPackageSignedUpload {
1128
+ readonly path: string;
1129
+ readonly url: string;
1130
+ readonly contentType: string;
1131
+ readonly headers: Readonly<Record<string, string>>;
1132
+ }
1133
+ interface WidgetPackageUploadSession {
1134
+ readonly version: string;
1135
+ readonly uploads: readonly WidgetPackageSignedUpload[];
1136
+ readonly raw: unknown;
1137
+ }
1138
+ interface WidgetPackageArtifactUploadResult {
1139
+ readonly path: string;
1140
+ readonly status: number;
1141
+ readonly contentType: string;
1142
+ }
1143
+ interface WidgetPackageCompleteResult {
1144
+ readonly version: string;
1145
+ readonly status?: string;
1146
+ readonly packageKey?: string;
1147
+ readonly raw: unknown;
1148
+ }
1149
+ interface WidgetPackagePublishResult {
1150
+ readonly dryRun: boolean;
1151
+ readonly sessionPayload: WidgetPackageUploadSessionPayload;
1152
+ readonly session?: WidgetPackageUploadSession;
1153
+ readonly uploadedArtifacts?: readonly WidgetPackageArtifactUploadResult[];
1154
+ readonly complete?: WidgetPackageCompleteResult;
1155
+ }
1156
+ //#endregion
1157
+ //#region ../widget-tooling/src/workflows.d.ts
1158
+ type WidgetPackageOwner = WidgetPackageUploadOwner;
1159
+ type WidgetPackageBuildResult = SharedWidgetPackageBuildResult;
1160
+ interface PublishedWidgetPackage {
1161
+ readonly build: WidgetPackageBuildResult;
1162
+ readonly request: WidgetPackagePublishRequest;
1163
+ readonly publish: WidgetPackagePublishResult;
1164
+ }
1165
+ //#endregion
1166
+ //#region ../widget-tooling/src/company-widget-package.d.ts
1167
+ interface CompanyWidgetPackage {
1168
+ /** Bare key, comparable to `packageStableId` (no `company.` prefix). */
1169
+ readonly key: string;
1170
+ readonly version: string;
1171
+ /**
1172
+ * Fully-qualified widget types this package publishes — `company.<key>.<Name>`,
1173
+ * the same strings screen JSON stores. Empty when the response carried no
1174
+ * usable manifest, which is a "cannot tell", not "publishes nothing".
1175
+ */
1176
+ readonly widgetTypes: readonly string[];
1177
+ }
1178
+ /**
1179
+ * The company's widget package, or `null` when it has never published.
1180
+ *
1181
+ * A company is expected to have exactly one. This returns the first, and exists
1182
+ * for callers that only need "what is this company's key" — a preflight must use
1183
+ * {@link readCompanyWidgetPackages} and reconcile against the configured key
1184
+ * instead, or a second package would make it report a confident, wrong answer.
1185
+ */
1186
+ declare function readCompanyWidgetPackage(client: FluidOsHeyApiClient): Promise<CompanyWidgetPackage | null>;
1187
+ /**
1188
+ * The message shown when the project's key disagrees with the company's.
1189
+ *
1190
+ * Names the actual key and the exact edit, because the failure it replaces gave
1191
+ * neither — and because the fix is one line the author can apply immediately.
1192
+ */
1193
+ declare function formatPackageKeyMismatch(options: {
1194
+ readonly configuredKey: string;
1195
+ readonly companyKey: string;
1196
+ readonly companyVersion: string;
1197
+ }): string;
1198
+ /** What the project's own `src/widgets.config.ts` declares. */
1199
+ interface ConfiguredWidgetPackage {
1200
+ readonly packageId: string;
1201
+ readonly version: string;
1202
+ }
1203
+ interface CompanyPackagePreflight {
1204
+ /** Set when the deploy must not proceed; the text explains the one-line fix. */
1205
+ readonly mismatch?: string;
1206
+ /** Set when the configured version would collide; publish as this instead. */
1207
+ readonly versionOverride?: string;
1208
+ /** The version that would have collided, for reporting the substitution. */
1209
+ readonly configuredVersion?: string;
1210
+ }
1211
+ /**
1212
+ * One round trip against the company's widget package, answering both questions
1213
+ * a publish has to settle before it builds anything: is this the right package,
1214
+ * and is this version free?
1215
+ *
1216
+ * Shared so `fluid portal deploy` and any host that drives it reach the same
1217
+ * verdict for the same reason.
1218
+ *
1219
+ * Proceeds on every uncertainty — the company has never published (its first
1220
+ * publish defines both key and version), the lookup failed, or the local config
1221
+ * could not be read. A preflight exists to replace a confusing failure with a
1222
+ * clear one, not to invent new reasons to stop; when it cannot tell, the server
1223
+ * still decides.
1224
+ */
1225
+ declare function preflightCompanyPackage(options: {
1226
+ readonly projectDir: string;
1227
+ readonly client: FluidOsHeyApiClient; /** Injected so callers bundle their own loader; avoids a cycle back into the build path. */
1228
+ readonly readConfiguredPackage: (projectDir: string) => Promise<ConfiguredWidgetPackage | null>;
1229
+ }): Promise<CompanyPackagePreflight>;
1230
+ /**
1231
+ * Returns the version to publish as, or `null` to publish the configured one.
1232
+ *
1233
+ * A company has ONE widget package and several projects publish into it, so the
1234
+ * version belongs to that shared package rather than to any project's source
1235
+ * file. Nothing tells a project what the others have already released, so two
1236
+ * of them declaring `0.5.0` is inevitable — and republishing a version that
1237
+ * exists is refused with `422 Package version already exists`, whose only fix
1238
+ * is editing a SemVer string in a TypeScript file. For an author who never
1239
+ * opens a terminal that is the end of the road, and it happens on EVERY publish
1240
+ * after the first, not in some corner case.
1241
+ *
1242
+ * So a configured version at or below what is published becomes the next patch
1243
+ * after the published one. A configured version ABOVE it is honoured exactly —
1244
+ * that is a deliberate minor or major bump and the whole reason to keep the
1245
+ * field.
1246
+ *
1247
+ * Returns `null` on any version this cannot reason about — a prerelease, build
1248
+ * metadata, anything not a plain numeric triple. Guessing a successor for those
1249
+ * would be worse than letting the server answer.
1250
+ */
1251
+ declare function resolvePublishVersion(options: {
1252
+ readonly configuredVersion: string;
1253
+ readonly publishedVersion: string;
1254
+ }): string | null;
1255
+ //#endregion
1256
+ //#region src/commands/widget-package-publish.d.ts
1257
+ interface PublishWidgetRuntimeArtifactsOptions {
1258
+ readonly projectDir: string;
1259
+ readonly outDir: string;
1260
+ readonly buildOwner: WidgetPackageOwnerKind;
1261
+ readonly uploadOwner: WidgetPackageOwner;
1262
+ readonly dryRun?: boolean;
1263
+ readonly client?: FluidOsHeyApiClient;
1264
+ /** Publish as this version rather than the config's. */
1265
+ readonly version?: string;
1266
+ }
1267
+ type PublishWidgetRuntimeArtifactsResult = PublishedWidgetPackage;
1268
+ declare function publishWidgetRuntimeArtifacts(options: PublishWidgetRuntimeArtifactsOptions): Promise<PublishWidgetRuntimeArtifactsResult>;
1269
+ //#endregion
1069
1270
  //#region src/commands/version.d.ts
1070
1271
  declare const versionCommand: Command;
1071
1272
  //#endregion
@@ -1073,11 +1274,11 @@ declare const versionCommand: Command;
1073
1274
  declare const doctorCommand: Command;
1074
1275
  //#endregion
1075
1276
  //#region src/utils/transform.d.ts
1076
- type ApiScreen = components["schemas"]["FluidOSScreen"];
1077
- type ApiTheme = components["schemas"]["FluidOSTheme"];
1078
- type ApiNavigationBasic = components["schemas"]["FluidOSNavigationBasic"];
1079
- type ApiNavigationItem = components["schemas"]["FluidOSNavigationItem"];
1080
- type ApiProfile = components["schemas"]["FluidOSProfile"];
1277
+ type ApiScreen = FluidOsScreen;
1278
+ type ApiTheme = FluidOsTheme;
1279
+ type ApiNavigationBasic = FluidOsNavigationBasic;
1280
+ type ApiNavigationItem = FluidOsNavigationItem;
1281
+ type ApiProfile = FluidOsProfile;
1081
1282
  interface LocalScreen {
1082
1283
  readonly name: string;
1083
1284
  readonly component_tree: Record<string, unknown>[];
@@ -1162,5 +1363,5 @@ declare function transformProfile(profile: ApiProfile, navIdToSlug: Map<number,
1162
1363
  //#region src/index.d.ts
1163
1364
  declare const plugin: FluidPlugin;
1164
1365
  //#endregion
1165
- export { type BuildOptions, CANONICAL_PROJECT_NAME, type CategorizedChanges, type CreateOptions, type CreatePortalGitCredentialOptions, type CreatePortalProjectDependencies, type DefinitionMapping, type DevOptions, FILE_SYSTEM_ERRORS, type FileHash, type FileHashMap, type FileSystemError, type FileSystemErrorCode, type GitCredentialOutcome, GitError, type LocalNavigation, type LocalNavigationItem, type LocalProfile, type LocalScreen, type LocalTheme, type MappedResourceType, type PortalDeployOptions, type PortalGitCredential, type PortalGitSyncOptions, type PortalGitSyncResult, type PortalMappings, type ProjectConfig, type ScaffoldFromGitHubOptions, type SelectedPageTemplate, type Snapshot, type SnapshotDiff, TEMPLATES, TEMPLATE_REPO_URL, type TemplateName, type TemplatePaths, type TemplateVariables, type ValidationError, type WidgetCreateOptions, type WidgetPublishOptions, buildIdToSlugMap, buildNavigationIdToSlugMap, buildSnapshot, buildThemeIdToSlugMap, categorizeChanges, cloneCommand, computeFileHash, copyTemplate, copyTemplateSafe, createCommand, createDirectory, createDirectorySafe, createPortalGitCredential, createPortalProject, plugin as default, deployCommand, deriveScreenSlug, deriveSlug, diffAgainstSnapshot, directoryExists, doctorCommand, ensureGitAvailable, fileExists, getInstallCommand, getOriginUrl, getRunCommand, getSdkVersion, getSdkVersionSafe, getTemplatePaths, gitAheadBehindVsFetchHead, gitAutoCommit, gitClone, gitFetch, gitInit, gitMergeFastForward, gitMissingError, gitPush, hasUncommittedChanges, installDependencies, isGitAvailable, isGitRepo, pathExists, portalGitCredentialPath, promptProjectConfig, pullCommand, pushCommand, readFileSafe, readMappings, readSnapshot, removeMapping, resolveIdToSlug, resolveSlugToId, rewriteProjectName, runPackageManager, runPortalGitSync, scaffoldFromGitHub, slugFromPath, topLevelWidgetCommand, transformNavigation, transformNavigationItems, transformProfile, transformScreen, transformTheme, updateMapping, validateCrossReferences, versionCommand, widgetCommand, writeFileSafe, writeFluidrcProfile, writeMappings, writeSnapshot };
1366
+ export { type BuildOptions, CANONICAL_PROJECT_NAME, type CategorizedChanges, type CompanyPackagePreflight, type CompanyWidgetPackage, type ConfiguredWidgetPackage, type CreateOptions, type CreatePortalGitCredentialOptions, type CreatePortalProjectDependencies, type DefinitionMapping, type DevOptions, FILE_SYSTEM_ERRORS, type FileHash, type FileHashMap, type FileSystemError, type FileSystemErrorCode, type GitCredentialOutcome, GitError, type LocalNavigation, type LocalNavigationItem, type LocalProfile, type LocalScreen, type LocalTheme, type MappedResourceType, type PortalDeployOptions, type PortalGitCredential, type PortalGitSyncOptions, type PortalGitSyncResult, type PortalMappings, type ProjectConfig, type PublishWidgetRuntimeArtifactsOptions, type ScaffoldFromGitHubOptions, type SelectedPageTemplate, type Snapshot, type SnapshotDiff, TEMPLATES, TEMPLATE_REPO_URL, type TemplateName, type TemplatePaths, type TemplateVariables, type ValidationError, type WidgetCreateOptions, type WidgetPublishOptions, buildIdToSlugMap, buildNavigationIdToSlugMap, buildSnapshot, buildThemeIdToSlugMap, categorizeChanges, cloneCommand, computeFileHash, copyTemplate, copyTemplateSafe, createCommand, createDirectory, createDirectorySafe, createPortalGitCredential, createPortalProject, plugin as default, deployCommand, deriveScreenSlug, deriveSlug, diffAgainstSnapshot, directoryExists, doctorCommand, ensureGitAvailable, fileExists, formatPackageKeyMismatch, getInstallCommand, getOriginUrl, getRunCommand, getSdkVersion, getSdkVersionSafe, getTemplatePaths, gitAheadBehindVsFetchHead, gitAutoCommit, gitClone, gitFetch, gitInit, gitMergeFastForward, gitMissingError, gitPush, hasUncommittedChanges, installDependencies, isGitAvailable, isGitRepo, pathExists, portalGitCredentialPath, preflightCompanyPackage, promptProjectConfig, publishWidgetRuntimeArtifacts, pullCommand, pushCommand, readCompanyWidgetPackage, readFileSafe, readMappings, readSnapshot, removeMapping, resolveIdToSlug, resolvePublishVersion, resolveSlugToId, rewriteProjectName, runPackageManager, runPortalGitSync, scaffoldFromGitHub, slugFromPath, topLevelWidgetCommand, transformNavigation, transformNavigationItems, transformProfile, transformScreen, transformTheme, updateMapping, validateCrossReferences, versionCommand, widgetCommand, writeFileSafe, writeFluidrcProfile, writeMappings, writeSnapshot };
1166
1367
  //# sourceMappingURL=index.d.mts.map