windmill-client 1.723.0 → 1.725.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,3 +1,49 @@
1
+ /**
2
+ * Overlay fields added to every "get by path" response that accepts
3
+ * the `get_draft` query parameter. The deployed payload is sent
4
+ * untouched in the response body; the authed user's saved draft
5
+ * for this path — whatever shape the editor wrote — is attached
6
+ * as the sibling `draft` field when `get_draft=true` and a draft
7
+ * exists. The frontend pairs the two to present diff / reset /
8
+ * discard UI; the server never merges them.
9
+ *
10
+ * When `no_deployed=true` there is no deployed row at this path —
11
+ * the response body is a best-effort stand-in synthesized from
12
+ * the draft, and only `draft` is canonical. Callers should disable
13
+ * "diff vs deployed" UI in that case.
14
+ *
15
+ */
16
+ export type UserDraftOverlay = {
17
+ is_draft: boolean;
18
+ draft_saved_at?: string;
19
+ no_deployed?: boolean;
20
+ draft?: {
21
+ [key: string]: unknown;
22
+ };
23
+ /**
24
+ * Other workspace users (and the legacy NULL-email row, if any)
25
+ * with a saved draft at the same path. Populated only on the
26
+ * authed user's "get by path" responses for kinds the editor
27
+ * surfaces a fork banner for (script, flow, app, raw_app).
28
+ * Empty / omitted for kinds without that UI.
29
+ *
30
+ */
31
+ other_drafts_users?: Array<{
32
+ /**
33
+ * Workspace username of the draft owner. `null` represents
34
+ * the legacy workspace-level (NULL-email) row. Emails never
35
+ * leave the server.
36
+ *
37
+ */
38
+ username?: string | null;
39
+ }>;
40
+ };
41
+ /**
42
+ * Closed set of item kinds a user can autosave as a draft. Mirrors the
43
+ * Postgres `DRAFT_KIND` enum and the backend `UserDraftItemKind`.
44
+ *
45
+ */
46
+ export type UserDraftItemKind = 'script' | 'flow' | 'app' | 'raw_app' | 'resource' | 'variable' | 'trigger_schedule' | 'trigger_webhook' | 'trigger_default_email' | 'trigger_email' | 'trigger_http' | 'trigger_websocket' | 'trigger_postgres' | 'trigger_kafka' | 'trigger_nats' | 'trigger_mqtt' | 'trigger_sqs' | 'trigger_gcp' | 'trigger_azure' | 'trigger_poll' | 'trigger_cli' | 'trigger_nextcloud' | 'trigger_google' | 'trigger_github';
1
47
  /**
2
48
  * Top-level flow definition containing metadata, configuration, and the flow structure
3
49
  */
@@ -1445,7 +1491,6 @@ export type Script = {
1445
1491
  kind: 'script' | 'failure' | 'trigger' | 'command' | 'approval' | 'preprocessor';
1446
1492
  starred: boolean;
1447
1493
  tag?: string;
1448
- has_draft?: boolean;
1449
1494
  draft_only?: boolean;
1450
1495
  envs?: Array<(string)>;
1451
1496
  concurrent_limit?: number;
@@ -1498,7 +1543,6 @@ export type NewScript = {
1498
1543
  language: ScriptLang;
1499
1544
  kind?: 'script' | 'failure' | 'trigger' | 'command' | 'approval' | 'preprocessor';
1500
1545
  tag?: string;
1501
- draft_only?: boolean;
1502
1546
  envs?: Array<(string)>;
1503
1547
  concurrent_limit?: number;
1504
1548
  concurrency_time_window_s?: number;
@@ -1547,14 +1591,6 @@ export type NewScript = {
1547
1591
  */
1548
1592
  skip_draft_deletion?: boolean;
1549
1593
  };
1550
- export type NewScriptWithDraft = NewScript & {
1551
- draft?: NewScript;
1552
- /**
1553
- * Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check.
1554
- */
1555
- draft_created_at?: string;
1556
- hash: string;
1557
- };
1558
1594
  export type ScriptHistory = {
1559
1595
  script_hash: string;
1560
1596
  deployment_msg?: string;
@@ -2041,6 +2077,19 @@ export type ListableVariable = {
2041
2077
  ws_specific?: boolean;
2042
2078
  edited_at?: string;
2043
2079
  edited_by?: string;
2080
+ /**
2081
+ * True when this row is a per-user draft with no deployed
2082
+ * variable at the same path. Frontend renders a "Draft" badge.
2083
+ *
2084
+ */
2085
+ draft_only?: boolean;
2086
+ /**
2087
+ * True when the authed user has a per-user draft at this path
2088
+ * (over a deployed row or a synthesized draft-only row).
2089
+ * Frontend appends a `*` to the displayed name.
2090
+ *
2091
+ */
2092
+ is_draft?: boolean;
2044
2093
  };
2045
2094
  export type ContextualVariable = {
2046
2095
  name: string;
@@ -2294,6 +2343,19 @@ export type ListableResource = {
2294
2343
  */
2295
2344
  inherited_labels?: Array<(string)>;
2296
2345
  ws_specific?: boolean;
2346
+ /**
2347
+ * True when this row is a per-user draft with no deployed
2348
+ * resource at the same path. Frontend renders a "Draft" badge.
2349
+ *
2350
+ */
2351
+ draft_only?: boolean;
2352
+ /**
2353
+ * True when the authed user has a per-user draft at this path
2354
+ * (over a deployed row or a synthesized draft-only row).
2355
+ * Frontend appends a `*` to the displayed name.
2356
+ *
2357
+ */
2358
+ is_draft?: boolean;
2297
2359
  };
2298
2360
  export type ResourceType = {
2299
2361
  workspace_id?: string;
@@ -2423,6 +2485,19 @@ export type Schedule = {
2423
2485
  */
2424
2486
  dynamic_skip?: string | null;
2425
2487
  labels?: Array<(string)>;
2488
+ /**
2489
+ * True when this row is a per-user draft with no deployed
2490
+ * schedule at the same path. Frontend renders a "Draft" badge.
2491
+ *
2492
+ */
2493
+ draft_only?: boolean;
2494
+ /**
2495
+ * True when the authed user has a per-user draft at this path
2496
+ * (over a deployed row or a synthesized draft-only row).
2497
+ * Frontend appends a `*` to the displayed name.
2498
+ *
2499
+ */
2500
+ is_draft?: boolean;
2426
2501
  /**
2427
2502
  * Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder.
2428
2503
  *
@@ -2661,6 +2736,21 @@ export type TriggerExtraProperty = {
2661
2736
  */
2662
2737
  mode: TriggerMode;
2663
2738
  labels?: Array<(string)>;
2739
+ /**
2740
+ * True when this row is a per-user draft with no deployed
2741
+ * trigger at the same path. Set by list endpoints when
2742
+ * `include_draft_only=true` synthesizes the row from the
2743
+ * draft. Frontend renders a "Draft" badge.
2744
+ *
2745
+ */
2746
+ draft_only?: boolean;
2747
+ /**
2748
+ * True when the authed user has a per-user draft at this path
2749
+ * (over a deployed row or a synthesized draft-only row).
2750
+ * Frontend appends a `*` to the displayed name.
2751
+ *
2752
+ */
2753
+ is_draft?: boolean;
2664
2754
  };
2665
2755
  export type AuthenticationMethod = 'none' | 'windmill' | 'api_key' | 'basic_http' | 'custom_script' | 'signature';
2666
2756
  export type RunnableKind = 'script' | 'flow';
@@ -4628,6 +4718,33 @@ export type ListableApp = {
4628
4718
  execution_mode: 'viewer' | 'publisher' | 'anonymous';
4629
4719
  raw_app?: boolean;
4630
4720
  labels?: Array<(string)>;
4721
+ /**
4722
+ * True when the authed user has a draft for this app — either no
4723
+ * deployed row exists at this path (draft-only) or the user has
4724
+ * saved a per-user draft on top of the deployed row.
4725
+ *
4726
+ */
4727
+ is_draft?: boolean;
4728
+ /**
4729
+ * User-typed path the editor has staged but not yet deployed.
4730
+ * Sourced from the draft JSON's `draft_path` field (the editor
4731
+ * only writes it when the typed path differs from the deployed
4732
+ * one). Lets the home list render the meaningful name instead of
4733
+ * the autogenerated `u/{user}/draft_{uuid}` URL path. Omitted
4734
+ * when unchanged.
4735
+ *
4736
+ */
4737
+ draft_path?: string;
4738
+ /**
4739
+ * Workspace users (including the authed user, and the legacy
4740
+ * NULL-email row if any) who have a per-user draft at this
4741
+ * path. Drives the home page's user-avatar circles inside the
4742
+ * Draft badge. Omitted when no drafts exist.
4743
+ *
4744
+ */
4745
+ draft_users?: Array<{
4746
+ username?: string | null;
4747
+ }>;
4631
4748
  /**
4632
4749
  * Labels inherited from the parent folder, computed at read time. Read-only — edit them on the folder.
4633
4750
  *
@@ -4681,14 +4798,6 @@ export type AppWithLastVersion = {
4681
4798
  bundle_secret?: string;
4682
4799
  labels?: Array<(string)>;
4683
4800
  };
4684
- export type AppWithLastVersionWDraft = AppWithLastVersion & {
4685
- draft_only?: boolean;
4686
- draft?: unknown;
4687
- /**
4688
- * Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check.
4689
- */
4690
- draft_created_at?: string;
4691
- };
4692
4801
  export type AppHistory = {
4693
4802
  version: number;
4694
4803
  deployment_msg?: string;
@@ -5526,6 +5635,19 @@ export type GithubRepoEntry = {
5526
5635
  owner: string;
5527
5636
  private: boolean;
5528
5637
  };
5638
+ /**
5639
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
5640
+ */
5641
+ export type ParameterGetDraft = boolean;
5642
+ /**
5643
+ * When true, append per-user draft rows whose path has no
5644
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
5645
+ * so the home page can render a "Draft" badge. Gated to
5646
+ * non-operators + page 0 + no narrowing filters on the backend so
5647
+ * picker callers stay deployed-only and pagination stays clean.
5648
+ *
5649
+ */
5650
+ export type ParameterIncludeDraftOnly = boolean;
5529
5651
  export type ParameterId = string;
5530
5652
  export type ParameterKey = string;
5531
5653
  export type ParameterWorkspaceId = string;
@@ -7635,6 +7757,10 @@ export type GetVariableData = {
7635
7757
  *
7636
7758
  */
7637
7759
  decryptSecret?: boolean;
7760
+ /**
7761
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
7762
+ */
7763
+ getDraft?: boolean;
7638
7764
  /**
7639
7765
  * ask to include the encrypted value if secret and decrypt secret is not true (default: false)
7640
7766
  *
@@ -7643,7 +7769,7 @@ export type GetVariableData = {
7643
7769
  path: string;
7644
7770
  workspace: string;
7645
7771
  };
7646
- export type GetVariableResponse = ListableVariable;
7772
+ export type GetVariableResponse = ListableVariable & UserDraftOverlay;
7647
7773
  export type GetVariableValueData = {
7648
7774
  /**
7649
7775
  * allow getting a cached value for improved performance
@@ -7668,6 +7794,13 @@ export type ListVariableData = {
7668
7794
  * pattern match filter for description field (case-insensitive)
7669
7795
  */
7670
7796
  description?: string;
7797
+ /**
7798
+ * When true, append per-user draft variables whose path has no
7799
+ * deployed variable. Synthesized rows carry `draft_only: true`
7800
+ * so the home page can render a "Draft" badge.
7801
+ *
7802
+ */
7803
+ includeDraftOnly?: boolean;
7671
7804
  /**
7672
7805
  * Filter by label
7673
7806
  */
@@ -7926,10 +8059,14 @@ export type UpdateResourceValueData = {
7926
8059
  };
7927
8060
  export type UpdateResourceValueResponse = string;
7928
8061
  export type GetResourceData = {
8062
+ /**
8063
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
8064
+ */
8065
+ getDraft?: boolean;
7929
8066
  path: string;
7930
8067
  workspace: string;
7931
8068
  };
7932
- export type GetResourceResponse = Resource;
8069
+ export type GetResourceResponse = ListableResource & UserDraftOverlay;
7933
8070
  export type GetResourceValueInterpolatedData = {
7934
8071
  /**
7935
8072
  * allow getting a cached value for improved performance
@@ -7973,6 +8110,13 @@ export type ListResourceData = {
7973
8110
  * pattern match filter for description field (case-insensitive)
7974
8111
  */
7975
8112
  description?: string;
8113
+ /**
8114
+ * When true, append per-user draft resources whose path has
8115
+ * no deployed resource. Synthesized rows carry
8116
+ * `draft_only: true`.
8117
+ *
8118
+ */
8119
+ includeDraftOnly?: boolean;
7976
8120
  /**
7977
8121
  * Filter by label
7978
8122
  */
@@ -8266,8 +8410,38 @@ export type ListFlowsData = {
8266
8410
  workspace: string;
8267
8411
  };
8268
8412
  export type ListFlowsResponse = Array<(Flow & {
8269
- has_draft?: boolean;
8270
8413
  draft_only?: boolean;
8414
+ /**
8415
+ * True when the authed user has a draft for this
8416
+ * flow — either no deployed row exists at this
8417
+ * path (draft-only) or the user saved a per-user
8418
+ * draft on top of the deployed row.
8419
+ *
8420
+ */
8421
+ is_draft?: boolean;
8422
+ /**
8423
+ * User-typed path the editor has staged but not
8424
+ * yet deployed. Sourced from the draft JSON's
8425
+ * `draft_path` field (the editor only writes it
8426
+ * when the typed path differs from the deployed
8427
+ * one). Lets the home list render the meaningful
8428
+ * name instead of the autogenerated
8429
+ * `u/{user}/draft_{uuid}` URL path. Omitted when
8430
+ * unchanged.
8431
+ *
8432
+ */
8433
+ draft_path?: string;
8434
+ /**
8435
+ * Workspace users (including the authed user, and
8436
+ * the legacy NULL-email row if any) who have a
8437
+ * per-user draft at this path. Drives the home
8438
+ * page's user-avatar circles inside the Draft
8439
+ * badge. Omitted when no drafts exist.
8440
+ *
8441
+ */
8442
+ draft_users?: Array<{
8443
+ username?: string | null;
8444
+ }>;
8271
8445
  })>;
8272
8446
  export type GetFlowHistoryData = {
8273
8447
  path: string;
@@ -8303,11 +8477,15 @@ export type UpdateFlowHistoryData = {
8303
8477
  };
8304
8478
  export type UpdateFlowHistoryResponse = string;
8305
8479
  export type GetFlowByPathData = {
8480
+ /**
8481
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
8482
+ */
8483
+ getDraft?: boolean;
8306
8484
  path: string;
8307
8485
  withStarredInfo?: boolean;
8308
8486
  workspace: string;
8309
8487
  };
8310
- export type GetFlowByPathResponse = Flow;
8488
+ export type GetFlowByPathResponse = Flow & UserDraftOverlay;
8311
8489
  export type GetFlowDeploymentStatusData = {
8312
8490
  path: string;
8313
8491
  workspace: string;
@@ -8337,17 +8515,6 @@ export type ToggleWorkspaceErrorHandlerForFlowData = {
8337
8515
  workspace: string;
8338
8516
  };
8339
8517
  export type ToggleWorkspaceErrorHandlerForFlowResponse = string;
8340
- export type GetFlowByPathWithDraftData = {
8341
- path: string;
8342
- workspace: string;
8343
- };
8344
- export type GetFlowByPathWithDraftResponse = Flow & {
8345
- draft?: Flow;
8346
- /**
8347
- * Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check.
8348
- */
8349
- draft_created_at?: string;
8350
- };
8351
8518
  export type ExistsFlowByPathData = {
8352
8519
  path: string;
8353
8520
  workspace: string;
@@ -8358,7 +8525,6 @@ export type CreateFlowData = {
8358
8525
  * Partially filled flow
8359
8526
  */
8360
8527
  requestBody: OpenFlowWPath & {
8361
- draft_only?: boolean;
8362
8528
  deployment_message?: string;
8363
8529
  /**
8364
8530
  * When true (set by the CLI / git sync), deploying this flow does not delete an existing user draft at the same path.
@@ -8508,7 +8674,6 @@ export type CreateAppData = {
8508
8674
  value: unknown;
8509
8675
  summary: string;
8510
8676
  policy: Policy;
8511
- draft_only?: boolean;
8512
8677
  deployment_message?: string;
8513
8678
  custom_path?: string;
8514
8679
  /**
@@ -8534,7 +8699,6 @@ export type CreateAppRawData = {
8534
8699
  value: unknown;
8535
8700
  summary: string;
8536
8701
  policy: Policy;
8537
- draft_only?: boolean;
8538
8702
  deployment_message?: string;
8539
8703
  custom_path?: string;
8540
8704
  /**
@@ -8559,21 +8723,27 @@ export type ExistsAppData = {
8559
8723
  };
8560
8724
  export type ExistsAppResponse = boolean;
8561
8725
  export type GetAppByPathData = {
8726
+ /**
8727
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
8728
+ */
8729
+ getDraft?: boolean;
8562
8730
  path: string;
8731
+ /**
8732
+ * When no deployed app exists at this path and `get_draft` is set,
8733
+ * disambiguates which draft kind (`raw_app` or `app`) to look up.
8734
+ * Ignored when a deployed row exists.
8735
+ *
8736
+ */
8737
+ rawApp?: boolean;
8563
8738
  withStarredInfo?: boolean;
8564
8739
  workspace: string;
8565
8740
  };
8566
- export type GetAppByPathResponse = AppWithLastVersion;
8741
+ export type GetAppByPathResponse = AppWithLastVersion & UserDraftOverlay;
8567
8742
  export type GetAppLiteByPathData = {
8568
8743
  path: string;
8569
8744
  workspace: string;
8570
8745
  };
8571
8746
  export type GetAppLiteByPathResponse = AppWithLastVersion;
8572
- export type GetAppByPathWithDraftData = {
8573
- path: string;
8574
- workspace: string;
8575
- };
8576
- export type GetAppByPathWithDraftResponse = AppWithLastVersionWDraft;
8577
8747
  export type GetAppHistoryByPathData = {
8578
8748
  path: string;
8579
8749
  workspace: string;
@@ -8966,7 +9136,37 @@ export type ListScriptsData = {
8966
9136
  withoutDescription?: boolean;
8967
9137
  workspace: string;
8968
9138
  };
8969
- export type ListScriptsResponse = Array<Script>;
9139
+ export type ListScriptsResponse = Array<(Script & {
9140
+ /**
9141
+ * True when the authed user has a draft for this
9142
+ * script — either no deployed row exists at this
9143
+ * path (draft-only) or the user saved a per-user
9144
+ * draft on top of the deployed row.
9145
+ *
9146
+ */
9147
+ is_draft?: boolean;
9148
+ /**
9149
+ * User-typed path the editor has staged but not
9150
+ * yet deployed. Surfaced for draft-only rows so
9151
+ * the home list can render the meaningful name
9152
+ * instead of the autogenerated
9153
+ * `u/{user}/draft_{uuid}` URL path. Omitted
9154
+ * when unchanged.
9155
+ *
9156
+ */
9157
+ draft_path?: string;
9158
+ /**
9159
+ * Workspace users (including the authed user, and
9160
+ * the legacy NULL-email row if any) who have a
9161
+ * per-user draft at this path. Drives the home
9162
+ * page's user-avatar circles inside the Draft
9163
+ * badge. Omitted when no drafts exist.
9164
+ *
9165
+ */
9166
+ draft_users?: Array<{
9167
+ username?: string | null;
9168
+ }>;
9169
+ })>;
8970
9170
  export type ListScriptPathsData = {
8971
9171
  workspace: string;
8972
9172
  };
@@ -9025,11 +9225,15 @@ export type DeleteScriptsBulkData = {
9025
9225
  };
9026
9226
  export type DeleteScriptsBulkResponse = Array<(string)>;
9027
9227
  export type GetScriptByPathData = {
9228
+ /**
9229
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
9230
+ */
9231
+ getDraft?: boolean;
9028
9232
  path: string;
9029
9233
  withStarredInfo?: boolean;
9030
9234
  workspace: string;
9031
9235
  };
9032
- export type GetScriptByPathResponse = Script;
9236
+ export type GetScriptByPathResponse = Script & UserDraftOverlay;
9033
9237
  export type GetTriggersCountOfScriptData = {
9034
9238
  path: string;
9035
9239
  workspace: string;
@@ -9040,11 +9244,6 @@ export type ListTokensOfScriptData = {
9040
9244
  workspace: string;
9041
9245
  };
9042
9246
  export type ListTokensOfScriptResponse = Array<TruncatedToken>;
9043
- export type GetScriptByPathWithDraftData = {
9044
- path: string;
9045
- workspace: string;
9046
- };
9047
- export type GetScriptByPathWithDraftResponse = NewScriptWithDraft;
9048
9247
  export type GetScriptHistoryByPathData = {
9049
9248
  path: string;
9050
9249
  workspace: string;
@@ -9176,21 +9375,58 @@ export type DiffRawScriptsWithDeployedData = {
9176
9375
  workspace: string;
9177
9376
  };
9178
9377
  export type DiffRawScriptsWithDeployedResponse = Array<(string)>;
9179
- export type CreateDraftData = {
9378
+ export type ListDraftsData = {
9379
+ workspace: string;
9380
+ };
9381
+ export type ListDraftsResponse = Array<{
9382
+ kind: UserDraftItemKind;
9383
+ path: string;
9384
+ /**
9385
+ * Best-effort, read from the draft JSON's `summary` field when the editor shape carries one.
9386
+ */
9387
+ summary?: string;
9388
+ /**
9389
+ * No deployed counterpart exists at this path — the draft is the whole item.
9390
+ */
9391
+ draft_only: boolean;
9392
+ created_at: string;
9393
+ }>;
9394
+ export type GetDraftForUserData = {
9395
+ kind: UserDraftItemKind;
9396
+ path: string;
9397
+ /**
9398
+ * Workspace username of the draft owner. Omit to fetch the legacy workspace-level (NULL email) row.
9399
+ */
9400
+ username?: string;
9401
+ workspace: string;
9402
+ };
9403
+ export type GetDraftForUserResponse = {
9404
+ value: unknown;
9405
+ created_at: string;
9406
+ };
9407
+ export type UpdateDraftData = {
9408
+ kind: UserDraftItemKind;
9409
+ path: string;
9180
9410
  requestBody: {
9181
- path: string;
9182
- typ: 'flow' | 'script' | 'app';
9411
+ /**
9412
+ * Draft content to save. `null` (or omitted) signals a delete — the row is removed under the same conflict rules.
9413
+ */
9183
9414
  value?: unknown;
9415
+ /**
9416
+ * Server timestamp of the client's last known sync for this draft. Omit on first save.
9417
+ */
9418
+ last_sync?: string;
9419
+ /**
9420
+ * Skip the conflict check and overwrite the server copy.
9421
+ */
9422
+ force?: boolean;
9184
9423
  };
9185
9424
  workspace: string;
9186
9425
  };
9187
- export type CreateDraftResponse = string;
9188
- export type DeleteDraftData = {
9189
- kind: 'script' | 'flow' | 'app';
9190
- path: string;
9191
- workspace: string;
9426
+ export type UpdateDraftResponse = {
9427
+ status: 'saved' | 'conflict';
9428
+ current_timestamp: string;
9192
9429
  };
9193
- export type DeleteDraftResponse = string;
9194
9430
  export type GetCustomTagsData = {
9195
9431
  showWorkspaceRestriction?: boolean;
9196
9432
  };
@@ -11479,6 +11715,15 @@ export type ListRawAppsData = {
11479
11715
  * filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob')
11480
11716
  */
11481
11717
  createdBy?: string;
11718
+ /**
11719
+ * When true, append per-user draft rows whose path has no
11720
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
11721
+ * so the home page can render a "Draft" badge. Gated to
11722
+ * non-operators + page 0 + no narrowing filters on the backend so
11723
+ * picker callers stay deployed-only and pagination stays clean.
11724
+ *
11725
+ */
11726
+ includeDraftOnly?: boolean;
11482
11727
  /**
11483
11728
  * Filter by label
11484
11729
  */
@@ -11604,10 +11849,14 @@ export type DeleteScheduleData = {
11604
11849
  };
11605
11850
  export type DeleteScheduleResponse = string;
11606
11851
  export type GetScheduleData = {
11852
+ /**
11853
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
11854
+ */
11855
+ getDraft?: boolean;
11607
11856
  path: string;
11608
11857
  workspace: string;
11609
11858
  };
11610
- export type GetScheduleResponse = Schedule;
11859
+ export type GetScheduleResponse = Schedule & UserDraftOverlay;
11611
11860
  export type ExistsScheduleData = {
11612
11861
  path: string;
11613
11862
  workspace: string;
@@ -11626,6 +11875,13 @@ export type ListSchedulesData = {
11626
11875
  * pattern match filter for description field (case-insensitive)
11627
11876
  */
11628
11877
  description?: string;
11878
+ /**
11879
+ * When true, append per-user draft schedules whose path has
11880
+ * no deployed schedule. Synthesized rows carry
11881
+ * `draft_only: true`.
11882
+ *
11883
+ */
11884
+ includeDraftOnly?: boolean;
11629
11885
  /**
11630
11886
  * filter schedules by whether they target a flow
11631
11887
  */
@@ -11738,11 +11994,24 @@ export type DeleteHttpTriggerData = {
11738
11994
  };
11739
11995
  export type DeleteHttpTriggerResponse = string;
11740
11996
  export type GetHttpTriggerData = {
11997
+ /**
11998
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
11999
+ */
12000
+ getDraft?: boolean;
11741
12001
  path: string;
11742
12002
  workspace: string;
11743
12003
  };
11744
- export type GetHttpTriggerResponse = HttpTrigger;
12004
+ export type GetHttpTriggerResponse = HttpTrigger & UserDraftOverlay;
11745
12005
  export type ListHttpTriggersData = {
12006
+ /**
12007
+ * When true, append per-user draft rows whose path has no
12008
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12009
+ * so the home page can render a "Draft" badge. Gated to
12010
+ * non-operators + page 0 + no narrowing filters on the backend so
12011
+ * picker callers stay deployed-only and pagination stays clean.
12012
+ *
12013
+ */
12014
+ includeDraftOnly?: boolean;
11746
12015
  isFlow?: boolean;
11747
12016
  /**
11748
12017
  * Filter by label
@@ -11818,11 +12087,24 @@ export type DeleteWebsocketTriggerData = {
11818
12087
  };
11819
12088
  export type DeleteWebsocketTriggerResponse = string;
11820
12089
  export type GetWebsocketTriggerData = {
12090
+ /**
12091
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12092
+ */
12093
+ getDraft?: boolean;
11821
12094
  path: string;
11822
12095
  workspace: string;
11823
12096
  };
11824
- export type GetWebsocketTriggerResponse = WebsocketTrigger;
12097
+ export type GetWebsocketTriggerResponse = WebsocketTrigger & UserDraftOverlay;
11825
12098
  export type ListWebsocketTriggersData = {
12099
+ /**
12100
+ * When true, append per-user draft rows whose path has no
12101
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12102
+ * so the home page can render a "Draft" badge. Gated to
12103
+ * non-operators + page 0 + no narrowing filters on the backend so
12104
+ * picker callers stay deployed-only and pagination stays clean.
12105
+ *
12106
+ */
12107
+ includeDraftOnly?: boolean;
11826
12108
  isFlow?: boolean;
11827
12109
  /**
11828
12110
  * Filter by label
@@ -11900,11 +12182,24 @@ export type DeleteKafkaTriggerData = {
11900
12182
  };
11901
12183
  export type DeleteKafkaTriggerResponse = string;
11902
12184
  export type GetKafkaTriggerData = {
12185
+ /**
12186
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12187
+ */
12188
+ getDraft?: boolean;
11903
12189
  path: string;
11904
12190
  workspace: string;
11905
12191
  };
11906
- export type GetKafkaTriggerResponse = KafkaTrigger;
12192
+ export type GetKafkaTriggerResponse = KafkaTrigger & UserDraftOverlay;
11907
12193
  export type ListKafkaTriggersData = {
12194
+ /**
12195
+ * When true, append per-user draft rows whose path has no
12196
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12197
+ * so the home page can render a "Draft" badge. Gated to
12198
+ * non-operators + page 0 + no narrowing filters on the backend so
12199
+ * picker callers stay deployed-only and pagination stays clean.
12200
+ *
12201
+ */
12202
+ includeDraftOnly?: boolean;
11908
12203
  isFlow?: boolean;
11909
12204
  /**
11910
12205
  * Filter by label
@@ -12000,11 +12295,24 @@ export type DeleteNatsTriggerData = {
12000
12295
  };
12001
12296
  export type DeleteNatsTriggerResponse = string;
12002
12297
  export type GetNatsTriggerData = {
12298
+ /**
12299
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12300
+ */
12301
+ getDraft?: boolean;
12003
12302
  path: string;
12004
12303
  workspace: string;
12005
12304
  };
12006
- export type GetNatsTriggerResponse = NatsTrigger;
12305
+ export type GetNatsTriggerResponse = NatsTrigger & UserDraftOverlay;
12007
12306
  export type ListNatsTriggersData = {
12307
+ /**
12308
+ * When true, append per-user draft rows whose path has no
12309
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12310
+ * so the home page can render a "Draft" badge. Gated to
12311
+ * non-operators + page 0 + no narrowing filters on the backend so
12312
+ * picker callers stay deployed-only and pagination stays clean.
12313
+ *
12314
+ */
12315
+ includeDraftOnly?: boolean;
12008
12316
  isFlow?: boolean;
12009
12317
  /**
12010
12318
  * Filter by label
@@ -12082,11 +12390,24 @@ export type DeleteSqsTriggerData = {
12082
12390
  };
12083
12391
  export type DeleteSqsTriggerResponse = string;
12084
12392
  export type GetSqsTriggerData = {
12393
+ /**
12394
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12395
+ */
12396
+ getDraft?: boolean;
12085
12397
  path: string;
12086
12398
  workspace: string;
12087
12399
  };
12088
- export type GetSqsTriggerResponse = SqsTrigger;
12400
+ export type GetSqsTriggerResponse = SqsTrigger & UserDraftOverlay;
12089
12401
  export type ListSqsTriggersData = {
12402
+ /**
12403
+ * When true, append per-user draft rows whose path has no
12404
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12405
+ * so the home page can render a "Draft" badge. Gated to
12406
+ * non-operators + page 0 + no narrowing filters on the backend so
12407
+ * picker callers stay deployed-only and pagination stays clean.
12408
+ *
12409
+ */
12410
+ includeDraftOnly?: boolean;
12090
12411
  isFlow?: boolean;
12091
12412
  /**
12092
12413
  * Filter by label
@@ -12242,6 +12563,15 @@ export type DeleteNativeTriggerData = {
12242
12563
  };
12243
12564
  export type DeleteNativeTriggerResponse = string;
12244
12565
  export type ListNativeTriggersData = {
12566
+ /**
12567
+ * When true, append per-user draft rows whose path has no
12568
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12569
+ * so the home page can render a "Draft" badge. Gated to
12570
+ * non-operators + page 0 + no narrowing filters on the backend so
12571
+ * picker callers stay deployed-only and pagination stays clean.
12572
+ *
12573
+ */
12574
+ includeDraftOnly?: boolean;
12245
12575
  /**
12246
12576
  * filter by is_flow
12247
12577
  */
@@ -12354,11 +12684,24 @@ export type DeleteMqttTriggerData = {
12354
12684
  };
12355
12685
  export type DeleteMqttTriggerResponse = string;
12356
12686
  export type GetMqttTriggerData = {
12687
+ /**
12688
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12689
+ */
12690
+ getDraft?: boolean;
12357
12691
  path: string;
12358
12692
  workspace: string;
12359
12693
  };
12360
- export type GetMqttTriggerResponse = MqttTrigger;
12694
+ export type GetMqttTriggerResponse = MqttTrigger & UserDraftOverlay;
12361
12695
  export type ListMqttTriggersData = {
12696
+ /**
12697
+ * When true, append per-user draft rows whose path has no
12698
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12699
+ * so the home page can render a "Draft" badge. Gated to
12700
+ * non-operators + page 0 + no narrowing filters on the backend so
12701
+ * picker callers stay deployed-only and pagination stays clean.
12702
+ *
12703
+ */
12704
+ includeDraftOnly?: boolean;
12362
12705
  isFlow?: boolean;
12363
12706
  /**
12364
12707
  * Filter by label
@@ -12436,11 +12779,24 @@ export type DeleteGcpTriggerData = {
12436
12779
  };
12437
12780
  export type DeleteGcpTriggerResponse = string;
12438
12781
  export type GetGcpTriggerData = {
12782
+ /**
12783
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12784
+ */
12785
+ getDraft?: boolean;
12439
12786
  path: string;
12440
12787
  workspace: string;
12441
12788
  };
12442
- export type GetGcpTriggerResponse = GcpTrigger;
12789
+ export type GetGcpTriggerResponse = GcpTrigger & UserDraftOverlay;
12443
12790
  export type ListGcpTriggersData = {
12791
+ /**
12792
+ * When true, append per-user draft rows whose path has no
12793
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12794
+ * so the home page can render a "Draft" badge. Gated to
12795
+ * non-operators + page 0 + no narrowing filters on the backend so
12796
+ * picker callers stay deployed-only and pagination stays clean.
12797
+ *
12798
+ */
12799
+ includeDraftOnly?: boolean;
12444
12800
  isFlow?: boolean;
12445
12801
  /**
12446
12802
  * Filter by label
@@ -12535,11 +12891,24 @@ export type DeleteAzureTriggerData = {
12535
12891
  };
12536
12892
  export type DeleteAzureTriggerResponse = string;
12537
12893
  export type GetAzureTriggerData = {
12894
+ /**
12895
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
12896
+ */
12897
+ getDraft?: boolean;
12538
12898
  path: string;
12539
12899
  workspace: string;
12540
12900
  };
12541
- export type GetAzureTriggerResponse = AzureTrigger;
12901
+ export type GetAzureTriggerResponse = AzureTrigger & UserDraftOverlay;
12542
12902
  export type ListAzureTriggersData = {
12903
+ /**
12904
+ * When true, append per-user draft rows whose path has no
12905
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
12906
+ * so the home page can render a "Draft" badge. Gated to
12907
+ * non-operators + page 0 + no narrowing filters on the backend so
12908
+ * picker callers stay deployed-only and pagination stays clean.
12909
+ *
12910
+ */
12911
+ includeDraftOnly?: boolean;
12543
12912
  isFlow?: boolean;
12544
12913
  /**
12545
12914
  * which page to return (start at 1, default 1)
@@ -12730,11 +13099,24 @@ export type DeletePostgresTriggerData = {
12730
13099
  };
12731
13100
  export type DeletePostgresTriggerResponse = string;
12732
13101
  export type GetPostgresTriggerData = {
13102
+ /**
13103
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
13104
+ */
13105
+ getDraft?: boolean;
12733
13106
  path: string;
12734
13107
  workspace: string;
12735
13108
  };
12736
- export type GetPostgresTriggerResponse = PostgresTrigger;
13109
+ export type GetPostgresTriggerResponse = PostgresTrigger & UserDraftOverlay;
12737
13110
  export type ListPostgresTriggersData = {
13111
+ /**
13112
+ * When true, append per-user draft rows whose path has no
13113
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
13114
+ * so the home page can render a "Draft" badge. Gated to
13115
+ * non-operators + page 0 + no narrowing filters on the backend so
13116
+ * picker callers stay deployed-only and pagination stays clean.
13117
+ *
13118
+ */
13119
+ includeDraftOnly?: boolean;
12738
13120
  isFlow?: boolean;
12739
13121
  /**
12740
13122
  * Filter by label
@@ -12810,11 +13192,24 @@ export type DeleteEmailTriggerData = {
12810
13192
  };
12811
13193
  export type DeleteEmailTriggerResponse = string;
12812
13194
  export type GetEmailTriggerData = {
13195
+ /**
13196
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
13197
+ */
13198
+ getDraft?: boolean;
12813
13199
  path: string;
12814
13200
  workspace: string;
12815
13201
  };
12816
- export type GetEmailTriggerResponse = EmailTrigger;
13202
+ export type GetEmailTriggerResponse = EmailTrigger & UserDraftOverlay;
12817
13203
  export type ListEmailTriggersData = {
13204
+ /**
13205
+ * When true, append per-user draft rows whose path has no
13206
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
13207
+ * so the home page can render a "Draft" badge. Gated to
13208
+ * non-operators + page 0 + no narrowing filters on the backend so
13209
+ * picker callers stay deployed-only and pagination stays clean.
13210
+ *
13211
+ */
13212
+ includeDraftOnly?: boolean;
12818
13213
  isFlow?: boolean;
12819
13214
  /**
12820
13215
  * Filter by label
@@ -18096,6 +18491,10 @@ export type $OpenApiTs = {
18096
18491
  *
18097
18492
  */
18098
18493
  decryptSecret?: boolean;
18494
+ /**
18495
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
18496
+ */
18497
+ getDraft?: boolean;
18099
18498
  /**
18100
18499
  * ask to include the encrypted value if secret and decrypt secret is not true (default: false)
18101
18500
  *
@@ -18108,7 +18507,7 @@ export type $OpenApiTs = {
18108
18507
  /**
18109
18508
  * variable
18110
18509
  */
18111
- 200: ListableVariable;
18510
+ 200: ListableVariable & UserDraftOverlay;
18112
18511
  };
18113
18512
  };
18114
18513
  };
@@ -18156,6 +18555,13 @@ export type $OpenApiTs = {
18156
18555
  * pattern match filter for description field (case-insensitive)
18157
18556
  */
18158
18557
  description?: string;
18558
+ /**
18559
+ * When true, append per-user draft variables whose path has no
18560
+ * deployed variable. Synthesized rows carry `draft_only: true`
18561
+ * so the home page can render a "Draft" badge.
18562
+ *
18563
+ */
18564
+ includeDraftOnly?: boolean;
18159
18565
  /**
18160
18566
  * Filter by label
18161
18567
  */
@@ -18603,6 +19009,10 @@ export type $OpenApiTs = {
18603
19009
  '/w/{workspace}/resources/get/{path}': {
18604
19010
  get: {
18605
19011
  req: {
19012
+ /**
19013
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
19014
+ */
19015
+ getDraft?: boolean;
18606
19016
  path: string;
18607
19017
  workspace: string;
18608
19018
  };
@@ -18610,7 +19020,7 @@ export type $OpenApiTs = {
18610
19020
  /**
18611
19021
  * resource
18612
19022
  */
18613
- 200: Resource;
19023
+ 200: ListableResource & UserDraftOverlay;
18614
19024
  };
18615
19025
  };
18616
19026
  };
@@ -18695,6 +19105,13 @@ export type $OpenApiTs = {
18695
19105
  * pattern match filter for description field (case-insensitive)
18696
19106
  */
18697
19107
  description?: string;
19108
+ /**
19109
+ * When true, append per-user draft resources whose path has
19110
+ * no deployed resource. Synthesized rows carry
19111
+ * `draft_only: true`.
19112
+ *
19113
+ */
19114
+ includeDraftOnly?: boolean;
18698
19115
  /**
18699
19116
  * Filter by label
18700
19117
  */
@@ -19190,8 +19607,38 @@ export type $OpenApiTs = {
19190
19607
  * All flow
19191
19608
  */
19192
19609
  200: Array<(Flow & {
19193
- has_draft?: boolean;
19194
19610
  draft_only?: boolean;
19611
+ /**
19612
+ * True when the authed user has a draft for this
19613
+ * flow — either no deployed row exists at this
19614
+ * path (draft-only) or the user saved a per-user
19615
+ * draft on top of the deployed row.
19616
+ *
19617
+ */
19618
+ is_draft?: boolean;
19619
+ /**
19620
+ * User-typed path the editor has staged but not
19621
+ * yet deployed. Sourced from the draft JSON's
19622
+ * `draft_path` field (the editor only writes it
19623
+ * when the typed path differs from the deployed
19624
+ * one). Lets the home list render the meaningful
19625
+ * name instead of the autogenerated
19626
+ * `u/{user}/draft_{uuid}` URL path. Omitted when
19627
+ * unchanged.
19628
+ *
19629
+ */
19630
+ draft_path?: string;
19631
+ /**
19632
+ * Workspace users (including the authed user, and
19633
+ * the legacy NULL-email row if any) who have a
19634
+ * per-user draft at this path. Drives the home
19635
+ * page's user-avatar circles inside the Draft
19636
+ * badge. Omitted when no drafts exist.
19637
+ *
19638
+ */
19639
+ draft_users?: Array<{
19640
+ username?: string | null;
19641
+ }>;
19195
19642
  })>;
19196
19643
  };
19197
19644
  };
@@ -19277,6 +19724,10 @@ export type $OpenApiTs = {
19277
19724
  '/w/{workspace}/flows/get/{path}': {
19278
19725
  get: {
19279
19726
  req: {
19727
+ /**
19728
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
19729
+ */
19730
+ getDraft?: boolean;
19280
19731
  path: string;
19281
19732
  withStarredInfo?: boolean;
19282
19733
  workspace: string;
@@ -19285,7 +19736,7 @@ export type $OpenApiTs = {
19285
19736
  /**
19286
19737
  * flow details
19287
19738
  */
19288
- 200: Flow;
19739
+ 200: Flow & UserDraftOverlay;
19289
19740
  };
19290
19741
  };
19291
19742
  };
@@ -19354,26 +19805,6 @@ export type $OpenApiTs = {
19354
19805
  };
19355
19806
  };
19356
19807
  };
19357
- '/w/{workspace}/flows/get/draft/{path}': {
19358
- get: {
19359
- req: {
19360
- path: string;
19361
- workspace: string;
19362
- };
19363
- res: {
19364
- /**
19365
- * flow details with draft
19366
- */
19367
- 200: Flow & {
19368
- draft?: Flow;
19369
- /**
19370
- * Timestamp at which the most recent DB draft was created. Used by the frontend's UserDraft staleness check.
19371
- */
19372
- draft_created_at?: string;
19373
- };
19374
- };
19375
- };
19376
- };
19377
19808
  '/w/{workspace}/flows/exists/{path}': {
19378
19809
  get: {
19379
19810
  req: {
@@ -19395,7 +19826,6 @@ export type $OpenApiTs = {
19395
19826
  * Partially filled flow
19396
19827
  */
19397
19828
  requestBody: OpenFlowWPath & {
19398
- draft_only?: boolean;
19399
19829
  deployment_message?: string;
19400
19830
  /**
19401
19831
  * When true (set by the CLI / git sync), deploying this flow does not delete an existing user draft at the same path.
@@ -19644,7 +20074,6 @@ export type $OpenApiTs = {
19644
20074
  value: unknown;
19645
20075
  summary: string;
19646
20076
  policy: Policy;
19647
- draft_only?: boolean;
19648
20077
  deployment_message?: string;
19649
20078
  custom_path?: string;
19650
20079
  /**
@@ -19679,7 +20108,6 @@ export type $OpenApiTs = {
19679
20108
  value: unknown;
19680
20109
  summary: string;
19681
20110
  policy: Policy;
19682
- draft_only?: boolean;
19683
20111
  deployment_message?: string;
19684
20112
  custom_path?: string;
19685
20113
  /**
@@ -19722,7 +20150,18 @@ export type $OpenApiTs = {
19722
20150
  '/w/{workspace}/apps/get/p/{path}': {
19723
20151
  get: {
19724
20152
  req: {
20153
+ /**
20154
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
20155
+ */
20156
+ getDraft?: boolean;
19725
20157
  path: string;
20158
+ /**
20159
+ * When no deployed app exists at this path and `get_draft` is set,
20160
+ * disambiguates which draft kind (`raw_app` or `app`) to look up.
20161
+ * Ignored when a deployed row exists.
20162
+ *
20163
+ */
20164
+ rawApp?: boolean;
19726
20165
  withStarredInfo?: boolean;
19727
20166
  workspace: string;
19728
20167
  };
@@ -19730,7 +20169,7 @@ export type $OpenApiTs = {
19730
20169
  /**
19731
20170
  * app details
19732
20171
  */
19733
- 200: AppWithLastVersion;
20172
+ 200: AppWithLastVersion & UserDraftOverlay;
19734
20173
  };
19735
20174
  };
19736
20175
  };
@@ -19748,20 +20187,6 @@ export type $OpenApiTs = {
19748
20187
  };
19749
20188
  };
19750
20189
  };
19751
- '/w/{workspace}/apps/get/draft/{path}': {
19752
- get: {
19753
- req: {
19754
- path: string;
19755
- workspace: string;
19756
- };
19757
- res: {
19758
- /**
19759
- * app details with draft
19760
- */
19761
- 200: AppWithLastVersionWDraft;
19762
- };
19763
- };
19764
- };
19765
20190
  '/w/{workspace}/apps/history/p/{path}': {
19766
20191
  get: {
19767
20192
  req: {
@@ -20367,7 +20792,37 @@ export type $OpenApiTs = {
20367
20792
  /**
20368
20793
  * All scripts
20369
20794
  */
20370
- 200: Array<Script>;
20795
+ 200: Array<(Script & {
20796
+ /**
20797
+ * True when the authed user has a draft for this
20798
+ * script — either no deployed row exists at this
20799
+ * path (draft-only) or the user saved a per-user
20800
+ * draft on top of the deployed row.
20801
+ *
20802
+ */
20803
+ is_draft?: boolean;
20804
+ /**
20805
+ * User-typed path the editor has staged but not
20806
+ * yet deployed. Surfaced for draft-only rows so
20807
+ * the home list can render the meaningful name
20808
+ * instead of the autogenerated
20809
+ * `u/{user}/draft_{uuid}` URL path. Omitted
20810
+ * when unchanged.
20811
+ *
20812
+ */
20813
+ draft_path?: string;
20814
+ /**
20815
+ * Workspace users (including the authed user, and
20816
+ * the legacy NULL-email row if any) who have a
20817
+ * per-user draft at this path. Drives the home
20818
+ * page's user-avatar circles inside the Draft
20819
+ * badge. Omitted when no drafts exist.
20820
+ *
20821
+ */
20822
+ draft_users?: Array<{
20823
+ username?: string | null;
20824
+ }>;
20825
+ })>;
20371
20826
  };
20372
20827
  };
20373
20828
  };
@@ -20503,6 +20958,10 @@ export type $OpenApiTs = {
20503
20958
  '/w/{workspace}/scripts/get/p/{path}': {
20504
20959
  get: {
20505
20960
  req: {
20961
+ /**
20962
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
20963
+ */
20964
+ getDraft?: boolean;
20506
20965
  path: string;
20507
20966
  withStarredInfo?: boolean;
20508
20967
  workspace: string;
@@ -20511,7 +20970,7 @@ export type $OpenApiTs = {
20511
20970
  /**
20512
20971
  * script details
20513
20972
  */
20514
- 200: Script;
20973
+ 200: Script & UserDraftOverlay;
20515
20974
  };
20516
20975
  };
20517
20976
  };
@@ -20543,20 +21002,6 @@ export type $OpenApiTs = {
20543
21002
  };
20544
21003
  };
20545
21004
  };
20546
- '/w/{workspace}/scripts/get/draft/{path}': {
20547
- get: {
20548
- req: {
20549
- path: string;
20550
- workspace: string;
20551
- };
20552
- res: {
20553
- /**
20554
- * script details
20555
- */
20556
- 200: NewScriptWithDraft;
20557
- };
20558
- };
20559
- };
20560
21005
  '/w/{workspace}/scripts/history/p/{path}': {
20561
21006
  get: {
20562
21007
  req: {
@@ -20823,36 +21268,86 @@ export type $OpenApiTs = {
20823
21268
  };
20824
21269
  };
20825
21270
  };
20826
- '/w/{workspace}/drafts/create': {
20827
- post: {
21271
+ '/w/{workspace}/drafts/list': {
21272
+ get: {
20828
21273
  req: {
20829
- requestBody: {
21274
+ workspace: string;
21275
+ };
21276
+ res: {
21277
+ /**
21278
+ * the user's drafts
21279
+ */
21280
+ 200: Array<{
21281
+ kind: UserDraftItemKind;
20830
21282
  path: string;
20831
- typ: 'flow' | 'script' | 'app';
20832
- value?: unknown;
20833
- };
21283
+ /**
21284
+ * Best-effort, read from the draft JSON's `summary` field when the editor shape carries one.
21285
+ */
21286
+ summary?: string;
21287
+ /**
21288
+ * No deployed counterpart exists at this path — the draft is the whole item.
21289
+ */
21290
+ draft_only: boolean;
21291
+ created_at: string;
21292
+ }>;
21293
+ };
21294
+ };
21295
+ };
21296
+ '/w/{workspace}/drafts/get/{kind}/{path}': {
21297
+ get: {
21298
+ req: {
21299
+ kind: UserDraftItemKind;
21300
+ path: string;
21301
+ /**
21302
+ * Workspace username of the draft owner. Omit to fetch the legacy workspace-level (NULL email) row.
21303
+ */
21304
+ username?: string;
20834
21305
  workspace: string;
20835
21306
  };
20836
21307
  res: {
20837
21308
  /**
20838
- * draft created
21309
+ * draft content
20839
21310
  */
20840
- 201: string;
21311
+ 200: {
21312
+ value: unknown;
21313
+ created_at: string;
21314
+ };
21315
+ /**
21316
+ * no draft for that owner at that path
21317
+ */
21318
+ 404: unknown;
20841
21319
  };
20842
21320
  };
20843
21321
  };
20844
- '/w/{workspace}/drafts/delete/{kind}/{path}': {
20845
- delete: {
21322
+ '/w/{workspace}/drafts/update/{kind}/{path}': {
21323
+ post: {
20846
21324
  req: {
20847
- kind: 'script' | 'flow' | 'app';
21325
+ kind: UserDraftItemKind;
20848
21326
  path: string;
21327
+ requestBody: {
21328
+ /**
21329
+ * Draft content to save. `null` (or omitted) signals a delete — the row is removed under the same conflict rules.
21330
+ */
21331
+ value?: unknown;
21332
+ /**
21333
+ * Server timestamp of the client's last known sync for this draft. Omit on first save.
21334
+ */
21335
+ last_sync?: string;
21336
+ /**
21337
+ * Skip the conflict check and overwrite the server copy.
21338
+ */
21339
+ force?: boolean;
21340
+ };
20849
21341
  workspace: string;
20850
21342
  };
20851
21343
  res: {
20852
21344
  /**
20853
- * draft deleted
21345
+ * save result
20854
21346
  */
20855
- 200: string;
21347
+ 200: {
21348
+ status: 'saved' | 'conflict';
21349
+ current_timestamp: string;
21350
+ };
20856
21351
  };
20857
21352
  };
20858
21353
  };
@@ -24082,6 +24577,15 @@ export type $OpenApiTs = {
24082
24577
  * filter by exact matching user creator. Supports comma-separated list (e.g. 'alice,bob') and negation by prefixing all values with '!' (e.g. '!alice,!bob')
24083
24578
  */
24084
24579
  createdBy?: string;
24580
+ /**
24581
+ * When true, append per-user draft rows whose path has no
24582
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
24583
+ * so the home page can render a "Draft" badge. Gated to
24584
+ * non-operators + page 0 + no narrowing filters on the backend so
24585
+ * picker callers stay deployed-only and pagination stays clean.
24586
+ *
24587
+ */
24588
+ includeDraftOnly?: boolean;
24085
24589
  /**
24086
24590
  * Filter by label
24087
24591
  */
@@ -24279,6 +24783,10 @@ export type $OpenApiTs = {
24279
24783
  '/w/{workspace}/schedules/get/{path}': {
24280
24784
  get: {
24281
24785
  req: {
24786
+ /**
24787
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
24788
+ */
24789
+ getDraft?: boolean;
24282
24790
  path: string;
24283
24791
  workspace: string;
24284
24792
  };
@@ -24286,7 +24794,7 @@ export type $OpenApiTs = {
24286
24794
  /**
24287
24795
  * schedule deleted
24288
24796
  */
24289
- 200: Schedule;
24797
+ 200: Schedule & UserDraftOverlay;
24290
24798
  };
24291
24799
  };
24292
24800
  };
@@ -24319,6 +24827,13 @@ export type $OpenApiTs = {
24319
24827
  * pattern match filter for description field (case-insensitive)
24320
24828
  */
24321
24829
  description?: string;
24830
+ /**
24831
+ * When true, append per-user draft schedules whose path has
24832
+ * no deployed schedule. Synthesized rows carry
24833
+ * `draft_only: true`.
24834
+ *
24835
+ */
24836
+ includeDraftOnly?: boolean;
24322
24837
  /**
24323
24838
  * filter schedules by whether they target a flow
24324
24839
  */
@@ -24512,6 +25027,10 @@ export type $OpenApiTs = {
24512
25027
  '/w/{workspace}/http_triggers/get/{path}': {
24513
25028
  get: {
24514
25029
  req: {
25030
+ /**
25031
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
25032
+ */
25033
+ getDraft?: boolean;
24515
25034
  path: string;
24516
25035
  workspace: string;
24517
25036
  };
@@ -24519,13 +25038,22 @@ export type $OpenApiTs = {
24519
25038
  /**
24520
25039
  * http trigger deleted
24521
25040
  */
24522
- 200: HttpTrigger;
25041
+ 200: HttpTrigger & UserDraftOverlay;
24523
25042
  };
24524
25043
  };
24525
25044
  };
24526
25045
  '/w/{workspace}/http_triggers/list': {
24527
25046
  get: {
24528
25047
  req: {
25048
+ /**
25049
+ * When true, append per-user draft rows whose path has no
25050
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
25051
+ * so the home page can render a "Draft" badge. Gated to
25052
+ * non-operators + page 0 + no narrowing filters on the backend so
25053
+ * picker callers stay deployed-only and pagination stays clean.
25054
+ *
25055
+ */
25056
+ includeDraftOnly?: boolean;
24529
25057
  isFlow?: boolean;
24530
25058
  /**
24531
25059
  * Filter by label
@@ -24664,6 +25192,10 @@ export type $OpenApiTs = {
24664
25192
  '/w/{workspace}/websocket_triggers/get/{path}': {
24665
25193
  get: {
24666
25194
  req: {
25195
+ /**
25196
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
25197
+ */
25198
+ getDraft?: boolean;
24667
25199
  path: string;
24668
25200
  workspace: string;
24669
25201
  };
@@ -24671,13 +25203,22 @@ export type $OpenApiTs = {
24671
25203
  /**
24672
25204
  * websocket trigger deleted
24673
25205
  */
24674
- 200: WebsocketTrigger;
25206
+ 200: WebsocketTrigger & UserDraftOverlay;
24675
25207
  };
24676
25208
  };
24677
25209
  };
24678
25210
  '/w/{workspace}/websocket_triggers/list': {
24679
25211
  get: {
24680
25212
  req: {
25213
+ /**
25214
+ * When true, append per-user draft rows whose path has no
25215
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
25216
+ * so the home page can render a "Draft" badge. Gated to
25217
+ * non-operators + page 0 + no narrowing filters on the backend so
25218
+ * picker callers stay deployed-only and pagination stays clean.
25219
+ *
25220
+ */
25221
+ includeDraftOnly?: boolean;
24681
25222
  isFlow?: boolean;
24682
25223
  /**
24683
25224
  * Filter by label
@@ -24818,6 +25359,10 @@ export type $OpenApiTs = {
24818
25359
  '/w/{workspace}/kafka_triggers/get/{path}': {
24819
25360
  get: {
24820
25361
  req: {
25362
+ /**
25363
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
25364
+ */
25365
+ getDraft?: boolean;
24821
25366
  path: string;
24822
25367
  workspace: string;
24823
25368
  };
@@ -24825,13 +25370,22 @@ export type $OpenApiTs = {
24825
25370
  /**
24826
25371
  * kafka trigger deleted
24827
25372
  */
24828
- 200: KafkaTrigger;
25373
+ 200: KafkaTrigger & UserDraftOverlay;
24829
25374
  };
24830
25375
  };
24831
25376
  };
24832
25377
  '/w/{workspace}/kafka_triggers/list': {
24833
25378
  get: {
24834
25379
  req: {
25380
+ /**
25381
+ * When true, append per-user draft rows whose path has no
25382
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
25383
+ * so the home page can render a "Draft" badge. Gated to
25384
+ * non-operators + page 0 + no narrowing filters on the backend so
25385
+ * picker callers stay deployed-only and pagination stays clean.
25386
+ *
25387
+ */
25388
+ includeDraftOnly?: boolean;
24835
25389
  isFlow?: boolean;
24836
25390
  /**
24837
25391
  * Filter by label
@@ -25008,6 +25562,10 @@ export type $OpenApiTs = {
25008
25562
  '/w/{workspace}/nats_triggers/get/{path}': {
25009
25563
  get: {
25010
25564
  req: {
25565
+ /**
25566
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
25567
+ */
25568
+ getDraft?: boolean;
25011
25569
  path: string;
25012
25570
  workspace: string;
25013
25571
  };
@@ -25015,13 +25573,22 @@ export type $OpenApiTs = {
25015
25573
  /**
25016
25574
  * nats trigger deleted
25017
25575
  */
25018
- 200: NatsTrigger;
25576
+ 200: NatsTrigger & UserDraftOverlay;
25019
25577
  };
25020
25578
  };
25021
25579
  };
25022
25580
  '/w/{workspace}/nats_triggers/list': {
25023
25581
  get: {
25024
25582
  req: {
25583
+ /**
25584
+ * When true, append per-user draft rows whose path has no
25585
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
25586
+ * so the home page can render a "Draft" badge. Gated to
25587
+ * non-operators + page 0 + no narrowing filters on the backend so
25588
+ * picker callers stay deployed-only and pagination stays clean.
25589
+ *
25590
+ */
25591
+ includeDraftOnly?: boolean;
25025
25592
  isFlow?: boolean;
25026
25593
  /**
25027
25594
  * Filter by label
@@ -25162,6 +25729,10 @@ export type $OpenApiTs = {
25162
25729
  '/w/{workspace}/sqs_triggers/get/{path}': {
25163
25730
  get: {
25164
25731
  req: {
25732
+ /**
25733
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
25734
+ */
25735
+ getDraft?: boolean;
25165
25736
  path: string;
25166
25737
  workspace: string;
25167
25738
  };
@@ -25169,13 +25740,22 @@ export type $OpenApiTs = {
25169
25740
  /**
25170
25741
  * sqs trigger deleted
25171
25742
  */
25172
- 200: SqsTrigger;
25743
+ 200: SqsTrigger & UserDraftOverlay;
25173
25744
  };
25174
25745
  };
25175
25746
  };
25176
25747
  '/w/{workspace}/sqs_triggers/list': {
25177
25748
  get: {
25178
25749
  req: {
25750
+ /**
25751
+ * When true, append per-user draft rows whose path has no
25752
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
25753
+ * so the home page can render a "Draft" badge. Gated to
25754
+ * non-operators + page 0 + no narrowing filters on the backend so
25755
+ * picker callers stay deployed-only and pagination stays clean.
25756
+ *
25757
+ */
25758
+ includeDraftOnly?: boolean;
25179
25759
  isFlow?: boolean;
25180
25760
  /**
25181
25761
  * Filter by label
@@ -25475,6 +26055,15 @@ export type $OpenApiTs = {
25475
26055
  '/w/{workspace}/native_triggers/{service_name}/list': {
25476
26056
  get: {
25477
26057
  req: {
26058
+ /**
26059
+ * When true, append per-user draft rows whose path has no
26060
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
26061
+ * so the home page can render a "Draft" badge. Gated to
26062
+ * non-operators + page 0 + no narrowing filters on the backend so
26063
+ * picker callers stay deployed-only and pagination stays clean.
26064
+ *
26065
+ */
26066
+ includeDraftOnly?: boolean;
25478
26067
  /**
25479
26068
  * filter by is_flow
25480
26069
  */
@@ -25695,6 +26284,10 @@ export type $OpenApiTs = {
25695
26284
  '/w/{workspace}/mqtt_triggers/get/{path}': {
25696
26285
  get: {
25697
26286
  req: {
26287
+ /**
26288
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
26289
+ */
26290
+ getDraft?: boolean;
25698
26291
  path: string;
25699
26292
  workspace: string;
25700
26293
  };
@@ -25702,13 +26295,22 @@ export type $OpenApiTs = {
25702
26295
  /**
25703
26296
  * mqtt trigger deleted
25704
26297
  */
25705
- 200: MqttTrigger;
26298
+ 200: MqttTrigger & UserDraftOverlay;
25706
26299
  };
25707
26300
  };
25708
26301
  };
25709
26302
  '/w/{workspace}/mqtt_triggers/list': {
25710
26303
  get: {
25711
26304
  req: {
26305
+ /**
26306
+ * When true, append per-user draft rows whose path has no
26307
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
26308
+ * so the home page can render a "Draft" badge. Gated to
26309
+ * non-operators + page 0 + no narrowing filters on the backend so
26310
+ * picker callers stay deployed-only and pagination stays clean.
26311
+ *
26312
+ */
26313
+ includeDraftOnly?: boolean;
25712
26314
  isFlow?: boolean;
25713
26315
  /**
25714
26316
  * Filter by label
@@ -25849,6 +26451,10 @@ export type $OpenApiTs = {
25849
26451
  '/w/{workspace}/gcp_triggers/get/{path}': {
25850
26452
  get: {
25851
26453
  req: {
26454
+ /**
26455
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
26456
+ */
26457
+ getDraft?: boolean;
25852
26458
  path: string;
25853
26459
  workspace: string;
25854
26460
  };
@@ -25856,13 +26462,22 @@ export type $OpenApiTs = {
25856
26462
  /**
25857
26463
  * gcp trigger deleted
25858
26464
  */
25859
- 200: GcpTrigger;
26465
+ 200: GcpTrigger & UserDraftOverlay;
25860
26466
  };
25861
26467
  };
25862
26468
  };
25863
26469
  '/w/{workspace}/gcp_triggers/list': {
25864
26470
  get: {
25865
26471
  req: {
26472
+ /**
26473
+ * When true, append per-user draft rows whose path has no
26474
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
26475
+ * so the home page can render a "Draft" badge. Gated to
26476
+ * non-operators + page 0 + no narrowing filters on the backend so
26477
+ * picker callers stay deployed-only and pagination stays clean.
26478
+ *
26479
+ */
26480
+ includeDraftOnly?: boolean;
25866
26481
  isFlow?: boolean;
25867
26482
  /**
25868
26483
  * Filter by label
@@ -26047,6 +26662,10 @@ export type $OpenApiTs = {
26047
26662
  '/w/{workspace}/azure_triggers/get/{path}': {
26048
26663
  get: {
26049
26664
  req: {
26665
+ /**
26666
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
26667
+ */
26668
+ getDraft?: boolean;
26050
26669
  path: string;
26051
26670
  workspace: string;
26052
26671
  };
@@ -26054,13 +26673,22 @@ export type $OpenApiTs = {
26054
26673
  /**
26055
26674
  * azure trigger
26056
26675
  */
26057
- 200: AzureTrigger;
26676
+ 200: AzureTrigger & UserDraftOverlay;
26058
26677
  };
26059
26678
  };
26060
26679
  };
26061
26680
  '/w/{workspace}/azure_triggers/list': {
26062
26681
  get: {
26063
26682
  req: {
26683
+ /**
26684
+ * When true, append per-user draft rows whose path has no
26685
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
26686
+ * so the home page can render a "Draft" badge. Gated to
26687
+ * non-operators + page 0 + no narrowing filters on the backend so
26688
+ * picker callers stay deployed-only and pagination stays clean.
26689
+ *
26690
+ */
26691
+ includeDraftOnly?: boolean;
26064
26692
  isFlow?: boolean;
26065
26693
  /**
26066
26694
  * which page to return (start at 1, default 1)
@@ -26467,6 +27095,10 @@ export type $OpenApiTs = {
26467
27095
  '/w/{workspace}/postgres_triggers/get/{path}': {
26468
27096
  get: {
26469
27097
  req: {
27098
+ /**
27099
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
27100
+ */
27101
+ getDraft?: boolean;
26470
27102
  path: string;
26471
27103
  workspace: string;
26472
27104
  };
@@ -26474,13 +27106,22 @@ export type $OpenApiTs = {
26474
27106
  /**
26475
27107
  * get postgres trigger
26476
27108
  */
26477
- 200: PostgresTrigger;
27109
+ 200: PostgresTrigger & UserDraftOverlay;
26478
27110
  };
26479
27111
  };
26480
27112
  };
26481
27113
  '/w/{workspace}/postgres_triggers/list': {
26482
27114
  get: {
26483
27115
  req: {
27116
+ /**
27117
+ * When true, append per-user draft rows whose path has no
27118
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
27119
+ * so the home page can render a "Draft" badge. Gated to
27120
+ * non-operators + page 0 + no narrowing filters on the backend so
27121
+ * picker callers stay deployed-only and pagination stays clean.
27122
+ *
27123
+ */
27124
+ includeDraftOnly?: boolean;
26484
27125
  isFlow?: boolean;
26485
27126
  /**
26486
27127
  * Filter by label
@@ -26619,6 +27260,10 @@ export type $OpenApiTs = {
26619
27260
  '/w/{workspace}/email_triggers/get/{path}': {
26620
27261
  get: {
26621
27262
  req: {
27263
+ /**
27264
+ * When true, overlay the authed user's draft (if any) onto the deployed payload.
27265
+ */
27266
+ getDraft?: boolean;
26622
27267
  path: string;
26623
27268
  workspace: string;
26624
27269
  };
@@ -26626,13 +27271,22 @@ export type $OpenApiTs = {
26626
27271
  /**
26627
27272
  * email trigger retrieved
26628
27273
  */
26629
- 200: EmailTrigger;
27274
+ 200: EmailTrigger & UserDraftOverlay;
26630
27275
  };
26631
27276
  };
26632
27277
  };
26633
27278
  '/w/{workspace}/email_triggers/list': {
26634
27279
  get: {
26635
27280
  req: {
27281
+ /**
27282
+ * When true, append per-user draft rows whose path has no
27283
+ * deployed counterpart. Synthesized rows carry `draft_only: true`
27284
+ * so the home page can render a "Draft" badge. Gated to
27285
+ * non-operators + page 0 + no narrowing filters on the backend so
27286
+ * picker callers stay deployed-only and pagination stays clean.
27287
+ *
27288
+ */
27289
+ includeDraftOnly?: boolean;
26636
27290
  isFlow?: boolean;
26637
27291
  /**
26638
27292
  * Filter by label