@usestatemachines/sdk 0.2.0 → 0.4.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.
Files changed (106) hide show
  1. package/README.md +158 -18
  2. package/agents/SKILL.md +18 -8
  3. package/agents/index.js +6 -6
  4. package/agents/llms.txt +22 -9
  5. package/agents/prompt.md +2 -2
  6. package/esm/extensions/apps.d.ts +11 -1
  7. package/esm/extensions/apps.js +16 -0
  8. package/esm/extensions/client.d.ts +47 -4
  9. package/esm/extensions/client.js +107 -12
  10. package/esm/extensions/errors.d.ts +26 -1
  11. package/esm/extensions/errors.js +34 -1
  12. package/esm/extensions/index.d.ts +4 -4
  13. package/esm/extensions/index.js +1 -1
  14. package/esm/extensions/running-environment.d.ts +20 -3
  15. package/esm/extensions/running-environment.js +33 -2
  16. package/esm/extensions/wait.d.ts +13 -4
  17. package/esm/extensions/wait.js +38 -13
  18. package/esm/funcs/environments-list.js +1 -0
  19. package/esm/funcs/environments-resume.d.ts +11 -0
  20. package/esm/funcs/environments-resume.js +92 -0
  21. package/esm/funcs/environments-suspend.d.ts +11 -0
  22. package/esm/funcs/environments-suspend.js +92 -0
  23. package/esm/funcs/get-environment-exchange.d.ts +11 -0
  24. package/esm/funcs/get-environment-exchange.js +96 -0
  25. package/esm/funcs/get-environment-position.d.ts +11 -0
  26. package/esm/funcs/get-environment-position.js +92 -0
  27. package/esm/funcs/list-environment-history.d.ts +11 -0
  28. package/esm/funcs/list-environment-history.js +97 -0
  29. package/esm/funcs/snapshots-capture.d.ts +11 -0
  30. package/esm/funcs/snapshots-capture.js +94 -0
  31. package/esm/funcs/snapshots-delete.d.ts +11 -0
  32. package/esm/funcs/snapshots-delete.js +92 -0
  33. package/esm/funcs/snapshots-get.d.ts +11 -0
  34. package/esm/funcs/snapshots-get.js +92 -0
  35. package/esm/funcs/snapshots-list.d.ts +11 -0
  36. package/esm/funcs/snapshots-list.js +98 -0
  37. package/esm/funcs/snapshots-update.d.ts +11 -0
  38. package/esm/funcs/snapshots-update.js +93 -0
  39. package/esm/lib/config.d.ts +2 -2
  40. package/esm/lib/config.js +2 -2
  41. package/esm/models/app-instance-snapshot.d.ts +15 -0
  42. package/esm/models/app-instance-snapshot.js +19 -0
  43. package/esm/models/create-environment-input.d.ts +6 -2
  44. package/esm/models/create-environment-input.js +3 -1
  45. package/esm/models/environment-app.d.ts +11 -0
  46. package/esm/models/environment-app.js +13 -0
  47. package/esm/models/environment-exchange.d.ts +116 -0
  48. package/esm/models/environment-exchange.js +126 -0
  49. package/esm/models/environment-position.d.ts +25 -0
  50. package/esm/models/environment-position.js +32 -0
  51. package/esm/models/environment-snapshot.d.ts +40 -0
  52. package/esm/models/environment-snapshot.js +42 -0
  53. package/esm/models/environment.d.ts +5 -0
  54. package/esm/models/environment.js +5 -0
  55. package/esm/models/error-response.d.ts +9 -0
  56. package/esm/models/error-response.js +9 -0
  57. package/esm/models/history-body.d.ts +28 -0
  58. package/esm/models/history-body.js +33 -0
  59. package/esm/models/history-cause.d.ts +48 -0
  60. package/esm/models/history-cause.js +63 -0
  61. package/esm/models/history-position.d.ts +11 -0
  62. package/esm/models/history-position.js +15 -0
  63. package/esm/models/history-transaction.d.ts +16 -0
  64. package/esm/models/history-transaction.js +20 -0
  65. package/esm/models/index.d.ts +8 -0
  66. package/esm/models/index.js +8 -0
  67. package/esm/models/operations/capture-snapshot.d.ts +41 -0
  68. package/esm/models/operations/capture-snapshot.js +36 -0
  69. package/esm/models/operations/create-environment-definition.d.ts +92 -10
  70. package/esm/models/operations/create-environment-definition.js +63 -4
  71. package/esm/models/operations/delete-snapshot.d.ts +23 -0
  72. package/esm/models/operations/delete-snapshot.js +20 -0
  73. package/esm/models/operations/get-environment-exchange.d.ts +25 -0
  74. package/esm/models/operations/get-environment-exchange.js +21 -0
  75. package/esm/models/operations/get-environment-position.d.ts +23 -0
  76. package/esm/models/operations/get-environment-position.js +20 -0
  77. package/esm/models/operations/get-snapshot.d.ts +23 -0
  78. package/esm/models/operations/get-snapshot.js +20 -0
  79. package/esm/models/operations/index.d.ts +10 -0
  80. package/esm/models/operations/index.js +10 -0
  81. package/esm/models/operations/list-environment-history.d.ts +28 -0
  82. package/esm/models/operations/list-environment-history.js +24 -0
  83. package/esm/models/operations/list-environments.d.ts +2 -0
  84. package/esm/models/operations/list-environments.js +1 -0
  85. package/esm/models/operations/list-snapshots.d.ts +30 -0
  86. package/esm/models/operations/list-snapshots.js +25 -0
  87. package/esm/models/operations/resume-environment.d.ts +23 -0
  88. package/esm/models/operations/resume-environment.js +20 -0
  89. package/esm/models/operations/stop-environment.d.ts +1 -1
  90. package/esm/models/operations/suspend-environment.d.ts +23 -0
  91. package/esm/models/operations/suspend-environment.js +20 -0
  92. package/esm/models/operations/update-snapshot.d.ts +37 -0
  93. package/esm/models/operations/update-snapshot.js +29 -0
  94. package/esm/models/release.d.ts +11 -0
  95. package/esm/models/release.js +10 -0
  96. package/esm/sdk/environments.d.ts +2 -0
  97. package/esm/sdk/environments.js +8 -0
  98. package/esm/sdk/sdk.d.ts +6 -0
  99. package/esm/sdk/sdk.js +17 -0
  100. package/esm/sdk/snapshots.d.ts +9 -0
  101. package/esm/sdk/snapshots.js +27 -0
  102. package/esm/types/discriminated-union.d.ts +24 -0
  103. package/esm/types/discriminated-union.js +60 -0
  104. package/esm/types/smart-union.js +2 -1
  105. package/openapi.json +2473 -242
  106. package/package.json +11 -11
package/openapi.json CHANGED
@@ -100,6 +100,47 @@
100
100
  ],
101
101
  "type": "object"
102
102
  },
103
+ "AppInstanceSnapshot": {
104
+ "properties": {
105
+ "appId": {
106
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
107
+ "type": "string"
108
+ },
109
+ "appInstanceKey": {
110
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
111
+ "type": "string"
112
+ },
113
+ "appReleaseId": {
114
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
115
+ "type": "string"
116
+ },
117
+ "capturedAt": {
118
+ "format": "date-time",
119
+ "type": ["string", "null"]
120
+ },
121
+ "id": {
122
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
123
+ "type": "string"
124
+ },
125
+ "sizeBytes": {
126
+ "type": ["number", "null"]
127
+ },
128
+ "sourceAppInstanceId": {
129
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
130
+ "type": "string"
131
+ }
132
+ },
133
+ "required": [
134
+ "id",
135
+ "sourceAppInstanceId",
136
+ "appInstanceKey",
137
+ "appId",
138
+ "appReleaseId",
139
+ "capturedAt",
140
+ "sizeBytes"
141
+ ],
142
+ "type": "object"
143
+ },
103
144
  "Catalog": {
104
145
  "properties": {
105
146
  "apps": {
@@ -330,9 +371,21 @@
330
371
  "maxLength": 120,
331
372
  "minLength": 1,
332
373
  "type": "string"
374
+ },
375
+ "snapshotAppInstanceKeys": {
376
+ "items": {
377
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
378
+ "type": "string"
379
+ },
380
+ "maxItems": 10,
381
+ "minItems": 1,
382
+ "type": "array"
383
+ },
384
+ "snapshotId": {
385
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
386
+ "type": "string"
333
387
  }
334
388
  },
335
- "required": ["apps"],
336
389
  "type": "object"
337
390
  },
338
391
  "Credential": {
@@ -429,6 +482,16 @@
429
482
  "name": {
430
483
  "type": ["string", "null"]
431
484
  },
485
+ "sourceEnvironmentId": {
486
+ "default": null,
487
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
488
+ "type": ["string", "null"]
489
+ },
490
+ "sourceEnvironmentSnapshotId": {
491
+ "default": null,
492
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
493
+ "type": ["string", "null"]
494
+ },
432
495
  "startedAt": {
433
496
  "format": "date-time",
434
497
  "type": ["string", "null"]
@@ -438,6 +501,8 @@
438
501
  "queued",
439
502
  "starting",
440
503
  "running",
504
+ "suspending",
505
+ "suspended",
441
506
  "stopping",
442
507
  "stopped",
443
508
  "failed"
@@ -452,6 +517,10 @@
452
517
  "format": "date-time",
453
518
  "type": ["string", "null"]
454
519
  },
520
+ "suspendedAt": {
521
+ "format": "date-time",
522
+ "type": ["string", "null"]
523
+ },
455
524
  "version": {
456
525
  "type": "integer"
457
526
  },
@@ -472,6 +541,7 @@
472
541
  "createdBy",
473
542
  "createdAt",
474
543
  "startedAt",
544
+ "suspendedAt",
475
545
  "stoppedAt",
476
546
  "expiresAt",
477
547
  "apps"
@@ -503,6 +573,20 @@
503
573
  "format": "date-time",
504
574
  "type": ["string", "null"]
505
575
  },
576
+ "forkedAt": {
577
+ "default": null,
578
+ "properties": {
579
+ "generation": {
580
+ "minimum": 1,
581
+ "type": "integer"
582
+ },
583
+ "lsn": {
584
+ "type": "string"
585
+ }
586
+ },
587
+ "required": ["generation", "lsn"],
588
+ "type": ["object", "null"]
589
+ },
506
590
  "id": {
507
591
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
508
592
  "type": "string"
@@ -521,11 +605,18 @@
521
605
  "region": {
522
606
  "type": ["string", "null"]
523
607
  },
608
+ "sourceAppInstanceSnapshotId": {
609
+ "default": null,
610
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
611
+ "type": ["string", "null"]
612
+ },
524
613
  "status": {
525
614
  "enum": [
526
615
  "pending",
527
616
  "starting",
528
617
  "ready",
618
+ "recovering",
619
+ "suspended",
529
620
  "stopping",
530
621
  "stopped",
531
622
  "failed"
@@ -554,6 +645,199 @@
554
645
  ],
555
646
  "type": "object"
556
647
  },
648
+ "EnvironmentExchange": {
649
+ "properties": {
650
+ "actor": {
651
+ "properties": {
652
+ "credentialId": {
653
+ "type": ["string", "null"]
654
+ },
655
+ "vendorUserId": {
656
+ "type": ["string", "null"]
657
+ }
658
+ },
659
+ "required": ["vendorUserId", "credentialId"],
660
+ "type": ["object", "null"]
661
+ },
662
+ "appKey": {
663
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
664
+ "type": "string"
665
+ },
666
+ "bodies": {
667
+ "properties": {
668
+ "request": {
669
+ "$ref": "#/components/schemas/HistoryBody"
670
+ },
671
+ "response": {
672
+ "$ref": "#/components/schemas/HistoryBody"
673
+ }
674
+ },
675
+ "required": ["request", "response"],
676
+ "type": ["object", "null"]
677
+ },
678
+ "channel": {
679
+ "enum": [
680
+ "api",
681
+ "ui",
682
+ "reactor",
683
+ "timer",
684
+ "inbound-webhook",
685
+ "bootstrap",
686
+ "restore",
687
+ null
688
+ ],
689
+ "type": ["string", "null"]
690
+ },
691
+ "eventIds": {
692
+ "items": {
693
+ "type": "string"
694
+ },
695
+ "type": "array"
696
+ },
697
+ "exchangeId": {
698
+ "maxLength": 128,
699
+ "minLength": 1,
700
+ "type": "string"
701
+ },
702
+ "objectCount": {
703
+ "type": "integer"
704
+ },
705
+ "objects": {
706
+ "items": {
707
+ "type": "string"
708
+ },
709
+ "type": "array"
710
+ },
711
+ "observedAt": {
712
+ "format": "date-time",
713
+ "type": "string"
714
+ },
715
+ "operation": {
716
+ "properties": {
717
+ "id": {
718
+ "type": ["string", "null"]
719
+ },
720
+ "method": {
721
+ "type": "string"
722
+ },
723
+ "profile": {
724
+ "type": "string"
725
+ },
726
+ "route": {
727
+ "type": "string"
728
+ },
729
+ "target": {
730
+ "type": "string"
731
+ }
732
+ },
733
+ "required": ["id", "profile", "method", "route", "target"],
734
+ "type": ["object", "null"]
735
+ },
736
+ "outcome": {
737
+ "properties": {
738
+ "refusal": {
739
+ "enum": [
740
+ "auth",
741
+ "not-served",
742
+ "unsupported",
743
+ "limit",
744
+ "validation",
745
+ "conflict",
746
+ null
747
+ ],
748
+ "type": ["string", "null"]
749
+ },
750
+ "status": {
751
+ "type": "integer"
752
+ },
753
+ "vendorErrorCode": {
754
+ "type": ["string", "null"]
755
+ }
756
+ },
757
+ "required": ["status", "vendorErrorCode", "refusal"],
758
+ "type": ["object", "null"]
759
+ },
760
+ "position": {
761
+ "$ref": "#/components/schemas/HistoryPosition"
762
+ },
763
+ "state": {
764
+ "enum": ["recorded", "unknown"],
765
+ "type": "string"
766
+ },
767
+ "timing": {
768
+ "properties": {
769
+ "clockSource": {
770
+ "enum": ["gateway", "runner"],
771
+ "type": "string"
772
+ },
773
+ "databaseMs": {
774
+ "type": "number"
775
+ },
776
+ "environmentTime": {
777
+ "type": "string"
778
+ },
779
+ "handlerMs": {
780
+ "type": "number"
781
+ },
782
+ "leaseWaitMs": {
783
+ "type": "number"
784
+ },
785
+ "responseReadyAt": {
786
+ "type": "string"
787
+ }
788
+ },
789
+ "required": [
790
+ "clockSource",
791
+ "leaseWaitMs",
792
+ "handlerMs",
793
+ "databaseMs",
794
+ "responseReadyAt",
795
+ "environmentTime"
796
+ ],
797
+ "type": ["object", "null"]
798
+ },
799
+ "trace": {
800
+ "properties": {
801
+ "parentSpanId": {
802
+ "type": ["string", "null"]
803
+ },
804
+ "spanId": {
805
+ "type": "string"
806
+ },
807
+ "traceId": {
808
+ "type": "string"
809
+ }
810
+ },
811
+ "required": ["traceId", "parentSpanId", "spanId"],
812
+ "type": ["object", "null"]
813
+ },
814
+ "transactions": {
815
+ "items": {
816
+ "$ref": "#/components/schemas/HistoryTransaction"
817
+ },
818
+ "type": "array"
819
+ }
820
+ },
821
+ "required": [
822
+ "exchangeId",
823
+ "appKey",
824
+ "state",
825
+ "observedAt",
826
+ "position",
827
+ "channel",
828
+ "operation",
829
+ "outcome",
830
+ "actor",
831
+ "trace",
832
+ "timing",
833
+ "bodies",
834
+ "objects",
835
+ "objectCount",
836
+ "eventIds",
837
+ "transactions"
838
+ ],
839
+ "type": "object"
840
+ },
557
841
  "EnvironmentLifetime": {
558
842
  "properties": {
559
843
  "defaultMinutes": {
@@ -566,6 +850,121 @@
566
850
  "required": ["defaultMinutes", "maximumMinutes"],
567
851
  "type": "object"
568
852
  },
853
+ "EnvironmentPosition": {
854
+ "properties": {
855
+ "apps": {
856
+ "items": {
857
+ "properties": {
858
+ "appInstanceId": {
859
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
860
+ "type": "string"
861
+ },
862
+ "key": {
863
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
864
+ "type": "string"
865
+ },
866
+ "position": {
867
+ "properties": {
868
+ "generation": {
869
+ "minimum": 1,
870
+ "type": "integer"
871
+ },
872
+ "lsn": {
873
+ "pattern": "^[0-9A-F]{1,8}\\/[0-9A-F]{1,8}$",
874
+ "type": "string"
875
+ }
876
+ },
877
+ "required": ["generation", "lsn"],
878
+ "type": ["object", "null"]
879
+ }
880
+ },
881
+ "required": ["key", "appInstanceId", "position"],
882
+ "type": "object"
883
+ },
884
+ "type": "array"
885
+ },
886
+ "environmentId": {
887
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
888
+ "type": "string"
889
+ }
890
+ },
891
+ "required": ["environmentId", "apps"],
892
+ "type": "object"
893
+ },
894
+ "EnvironmentSnapshot": {
895
+ "properties": {
896
+ "appInstanceSnapshots": {
897
+ "items": {
898
+ "$ref": "#/components/schemas/AppInstanceSnapshot"
899
+ },
900
+ "type": "array"
901
+ },
902
+ "consistency": {
903
+ "enum": ["environment", "app_instance", null],
904
+ "type": ["string", "null"]
905
+ },
906
+ "createdAt": {
907
+ "format": "date-time",
908
+ "type": "string"
909
+ },
910
+ "createdBy": {
911
+ "$ref": "#/components/schemas/Actor"
912
+ },
913
+ "deletedAt": {
914
+ "format": "date-time",
915
+ "type": ["string", "null"]
916
+ },
917
+ "errorCode": {
918
+ "type": ["string", "null"]
919
+ },
920
+ "id": {
921
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
922
+ "type": "string"
923
+ },
924
+ "name": {
925
+ "type": ["string", "null"]
926
+ },
927
+ "readyAt": {
928
+ "format": "date-time",
929
+ "type": ["string", "null"]
930
+ },
931
+ "sizeBytes": {
932
+ "type": ["number", "null"]
933
+ },
934
+ "sourceEnvironmentId": {
935
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
936
+ "type": "string"
937
+ },
938
+ "status": {
939
+ "enum": ["capturing", "ready", "failed"],
940
+ "type": "string"
941
+ },
942
+ "version": {
943
+ "type": "integer"
944
+ },
945
+ "workspaceId": {
946
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
947
+ "type": "string"
948
+ }
949
+ },
950
+ "required": [
951
+ "id",
952
+ "workspaceId",
953
+ "name",
954
+ "sourceEnvironmentId",
955
+ "createdBy",
956
+ "status",
957
+ "consistency",
958
+ "version",
959
+ "createdAt",
960
+ "readyAt",
961
+ "deletedAt",
962
+ "errorCode",
963
+ "sizeBytes",
964
+ "appInstanceSnapshots"
965
+ ],
966
+ "type": "object"
967
+ },
569
968
  "ErrorResponse": {
570
969
  "properties": {
571
970
  "error": {
@@ -573,6 +972,7 @@
573
972
  "code": {
574
973
  "enum": [
575
974
  "body-too-large",
975
+ "capture-in-progress",
576
976
  "connection-not-authorized",
577
977
  "connection-unavailable",
578
978
  "environment-limit",
@@ -592,11 +992,19 @@
592
992
  "lifetime-too-long",
593
993
  "not-found",
594
994
  "not-ready",
995
+ "not-snapshottable",
996
+ "not-suspended",
595
997
  "organization-required",
998
+ "position-unavailable",
999
+ "release-gone",
1000
+ "release-lifecycle",
596
1001
  "release-unavailable",
597
1002
  "request-capacity-reached",
598
1003
  "request-timeout",
599
1004
  "service-unavailable",
1005
+ "snapshot-limit",
1006
+ "snapshots-unavailable",
1007
+ "suspend-in-progress",
600
1008
  "unauthorized",
601
1009
  "version-conflict",
602
1010
  "workspace-archived",
@@ -689,19 +1097,201 @@
689
1097
  "required": ["data", "nextCursor"],
690
1098
  "type": "object"
691
1099
  },
692
- "Release": {
1100
+ "HistoryBody": {
693
1101
  "properties": {
694
- "actors": {
695
- "items": {
696
- "$ref": "#/components/schemas/ReleaseActor"
1102
+ "blob": {
1103
+ "properties": {
1104
+ "bytes": {
1105
+ "type": "integer"
1106
+ },
1107
+ "sha256": {
1108
+ "type": "string"
1109
+ }
697
1110
  },
698
- "type": "array"
1111
+ "required": ["sha256", "bytes"],
1112
+ "type": ["object", "null"]
699
1113
  },
700
- "apis": {
701
- "items": {
702
- "$ref": "#/components/schemas/ApiProfile"
703
- },
704
- "type": "array"
1114
+ "coverage": {
1115
+ "enum": ["complete", "redacted", "truncated", "omitted"],
1116
+ "type": "string"
1117
+ },
1118
+ "inline": {
1119
+ "type": ["string", "null"]
1120
+ }
1121
+ },
1122
+ "required": ["coverage", "inline", "blob"],
1123
+ "type": "object"
1124
+ },
1125
+ "HistoryCause": {
1126
+ "oneOf": [
1127
+ {
1128
+ "properties": {
1129
+ "exchangeId": {
1130
+ "maxLength": 128,
1131
+ "minLength": 1,
1132
+ "type": "string"
1133
+ },
1134
+ "kind": {
1135
+ "enum": ["exchange"],
1136
+ "type": "string"
1137
+ }
1138
+ },
1139
+ "required": ["kind", "exchangeId"],
1140
+ "type": "object"
1141
+ },
1142
+ {
1143
+ "properties": {
1144
+ "depth": {
1145
+ "type": "integer"
1146
+ },
1147
+ "eventId": {
1148
+ "type": "string"
1149
+ },
1150
+ "kind": {
1151
+ "enum": ["reactor"],
1152
+ "type": "string"
1153
+ },
1154
+ "reactor": {
1155
+ "type": "string"
1156
+ },
1157
+ "rootExchangeId": {
1158
+ "maxLength": 128,
1159
+ "minLength": 1,
1160
+ "type": ["string", "null"]
1161
+ }
1162
+ },
1163
+ "required": [
1164
+ "kind",
1165
+ "reactor",
1166
+ "eventId",
1167
+ "rootExchangeId",
1168
+ "depth"
1169
+ ],
1170
+ "type": "object"
1171
+ },
1172
+ {
1173
+ "properties": {
1174
+ "depth": {
1175
+ "type": "integer"
1176
+ },
1177
+ "kind": {
1178
+ "enum": ["timer"],
1179
+ "type": "string"
1180
+ },
1181
+ "rootExchangeId": {
1182
+ "maxLength": 128,
1183
+ "minLength": 1,
1184
+ "type": ["string", "null"]
1185
+ },
1186
+ "timerId": {
1187
+ "type": "string"
1188
+ }
1189
+ },
1190
+ "required": ["kind", "timerId", "rootExchangeId", "depth"],
1191
+ "type": "object"
1192
+ },
1193
+ {
1194
+ "properties": {
1195
+ "fromGeneration": {
1196
+ "type": "integer"
1197
+ },
1198
+ "kind": {
1199
+ "enum": ["restore"],
1200
+ "type": "string"
1201
+ },
1202
+ "lsn": {
1203
+ "type": "string"
1204
+ }
1205
+ },
1206
+ "required": ["kind", "fromGeneration", "lsn"],
1207
+ "type": "object"
1208
+ },
1209
+ {
1210
+ "properties": {
1211
+ "kind": {
1212
+ "enum": ["bootstrap"],
1213
+ "type": "string"
1214
+ }
1215
+ },
1216
+ "required": ["kind"],
1217
+ "type": "object"
1218
+ },
1219
+ {
1220
+ "type": "null"
1221
+ }
1222
+ ]
1223
+ },
1224
+ "HistoryPosition": {
1225
+ "properties": {
1226
+ "generation": {
1227
+ "minimum": 1,
1228
+ "type": "integer"
1229
+ },
1230
+ "lsn": {
1231
+ "pattern": "^[0-9A-F]{1,8}\\/[0-9A-F]{1,8}$",
1232
+ "type": "string"
1233
+ },
1234
+ "until": {
1235
+ "pattern": "^[0-9A-F]{1,8}\\/[0-9A-F]{1,8}$",
1236
+ "type": ["string", "null"]
1237
+ }
1238
+ },
1239
+ "required": ["generation", "lsn", "until"],
1240
+ "type": "object"
1241
+ },
1242
+ "HistoryTransaction": {
1243
+ "properties": {
1244
+ "cause": {
1245
+ "$ref": "#/components/schemas/HistoryCause"
1246
+ },
1247
+ "changes": {
1248
+ "type": "integer"
1249
+ },
1250
+ "committedAt": {
1251
+ "format": "date-time",
1252
+ "type": "string"
1253
+ },
1254
+ "generation": {
1255
+ "type": "integer"
1256
+ },
1257
+ "lsn": {
1258
+ "pattern": "^[0-9A-F]{1,8}\\/[0-9A-F]{1,8}$",
1259
+ "type": "string"
1260
+ },
1261
+ "tables": {
1262
+ "items": {
1263
+ "type": "string"
1264
+ },
1265
+ "type": "array"
1266
+ },
1267
+ "xid": {
1268
+ "type": "integer"
1269
+ }
1270
+ },
1271
+ "required": [
1272
+ "generation",
1273
+ "xid",
1274
+ "lsn",
1275
+ "committedAt",
1276
+ "cause",
1277
+ "tables",
1278
+ "changes"
1279
+ ],
1280
+ "type": "object"
1281
+ },
1282
+ "Release": {
1283
+ "properties": {
1284
+ "actors": {
1285
+ "items": {
1286
+ "$ref": "#/components/schemas/ReleaseActor"
1287
+ },
1288
+ "type": "array"
1289
+ },
1290
+ "apis": {
1291
+ "items": {
1292
+ "$ref": "#/components/schemas/ApiProfile"
1293
+ },
1294
+ "type": "array"
705
1295
  },
706
1296
  "appId": {
707
1297
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
@@ -723,6 +1313,10 @@
723
1313
  "format": "date-time",
724
1314
  "type": ["string", "null"]
725
1315
  },
1316
+ "status": {
1317
+ "enum": ["candidate", "default", "available", "retired", "gone"],
1318
+ "type": "string"
1319
+ },
726
1320
  "version": {
727
1321
  "type": "string"
728
1322
  }
@@ -732,6 +1326,7 @@
732
1326
  "appId",
733
1327
  "version",
734
1328
  "qualification",
1329
+ "status",
735
1330
  "apis",
736
1331
  "actors",
737
1332
  "createdAt",
@@ -2005,9 +2600,9 @@
2005
2600
  "x-state-credentials": ["user", "api_key"]
2006
2601
  }
2007
2602
  },
2008
- "/v1/environments/{environmentId}/stop": {
2009
- "post": {
2010
- "operationId": "stopEnvironment",
2603
+ "/v1/environments/{environmentId}/history": {
2604
+ "get": {
2605
+ "operationId": "listEnvironmentHistory",
2011
2606
  "parameters": [
2012
2607
  {
2013
2608
  "in": "path",
@@ -2017,6 +2612,26 @@
2017
2612
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2018
2613
  "type": "string"
2019
2614
  }
2615
+ },
2616
+ {
2617
+ "in": "query",
2618
+ "name": "limit",
2619
+ "required": false,
2620
+ "schema": {
2621
+ "default": 50,
2622
+ "maximum": 100,
2623
+ "minimum": 1,
2624
+ "type": "integer"
2625
+ }
2626
+ },
2627
+ {
2628
+ "in": "query",
2629
+ "name": "cursor",
2630
+ "required": false,
2631
+ "schema": {
2632
+ "maxLength": 2048,
2633
+ "type": "string"
2634
+ }
2020
2635
  }
2021
2636
  ],
2022
2637
  "responses": {
@@ -2026,15 +2641,21 @@
2026
2641
  "schema": {
2027
2642
  "properties": {
2028
2643
  "data": {
2029
- "$ref": "#/components/schemas/Environment"
2644
+ "items": {
2645
+ "$ref": "#/components/schemas/EnvironmentExchange"
2646
+ },
2647
+ "type": "array"
2648
+ },
2649
+ "nextCursor": {
2650
+ "type": ["string", "null"]
2030
2651
  }
2031
2652
  },
2032
- "required": ["data"],
2653
+ "required": ["data", "nextCursor"],
2033
2654
  "type": "object"
2034
2655
  }
2035
2656
  }
2036
2657
  },
2037
- "description": "Environment stopped or stopping"
2658
+ "description": "The environment's exchanges in gateway order, each with its transactions and events"
2038
2659
  },
2039
2660
  "400": {
2040
2661
  "content": {
@@ -2145,17 +2766,16 @@
2145
2766
  "x-state-credentials": ["user", "api_key"]
2146
2767
  }
2147
2768
  },
2148
- "/v1/workspaces": {
2769
+ "/v1/environments/{environmentId}/history/position": {
2149
2770
  "get": {
2150
- "operationId": "listWorkspaces",
2771
+ "operationId": "getEnvironmentPosition",
2151
2772
  "parameters": [
2152
2773
  {
2153
- "in": "query",
2154
- "name": "archived",
2155
- "required": false,
2774
+ "in": "path",
2775
+ "name": "environmentId",
2776
+ "required": true,
2156
2777
  "schema": {
2157
- "default": "exclude",
2158
- "enum": ["exclude", "include", "only"],
2778
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2159
2779
  "type": "string"
2160
2780
  }
2161
2781
  }
@@ -2167,10 +2787,7 @@
2167
2787
  "schema": {
2168
2788
  "properties": {
2169
2789
  "data": {
2170
- "items": {
2171
- "$ref": "#/components/schemas/Workspace"
2172
- },
2173
- "type": "array"
2790
+ "$ref": "#/components/schemas/EnvironmentPosition"
2174
2791
  }
2175
2792
  },
2176
2793
  "required": ["data"],
@@ -2178,7 +2795,7 @@
2178
2795
  }
2179
2796
  }
2180
2797
  },
2181
- "description": "The current organization's workspaces"
2798
+ "description": "Each app's current head position, as a fork from it would start"
2182
2799
  },
2183
2800
  "400": {
2184
2801
  "content": {
@@ -2289,18 +2906,28 @@
2289
2906
  "x-state-credentials": ["user", "api_key"]
2290
2907
  }
2291
2908
  },
2292
- "/v1/workspaces/{workspaceId}": {
2909
+ "/v1/environments/{environmentId}/history/{exchangeId}": {
2293
2910
  "get": {
2294
- "operationId": "getWorkspace",
2911
+ "operationId": "getEnvironmentExchange",
2295
2912
  "parameters": [
2296
2913
  {
2297
2914
  "in": "path",
2298
- "name": "workspaceId",
2915
+ "name": "environmentId",
2299
2916
  "required": true,
2300
2917
  "schema": {
2301
2918
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2302
2919
  "type": "string"
2303
2920
  }
2921
+ },
2922
+ {
2923
+ "in": "path",
2924
+ "name": "exchangeId",
2925
+ "required": true,
2926
+ "schema": {
2927
+ "maxLength": 128,
2928
+ "minLength": 1,
2929
+ "type": "string"
2930
+ }
2304
2931
  }
2305
2932
  ],
2306
2933
  "responses": {
@@ -2310,7 +2937,7 @@
2310
2937
  "schema": {
2311
2938
  "properties": {
2312
2939
  "data": {
2313
- "$ref": "#/components/schemas/Workspace"
2940
+ "$ref": "#/components/schemas/EnvironmentExchange"
2314
2941
  }
2315
2942
  },
2316
2943
  "required": ["data"],
@@ -2318,7 +2945,7 @@
2318
2945
  }
2319
2946
  }
2320
2947
  },
2321
- "description": "Workspace"
2948
+ "description": "One exchange of the environment, with the position a fork after it starts from"
2322
2949
  },
2323
2950
  "400": {
2324
2951
  "content": {
@@ -2429,96 +3056,1238 @@
2429
3056
  "x-state-credentials": ["user", "api_key"]
2430
3057
  }
2431
3058
  },
2432
- "/v1/workspaces/{workspaceId}/environment-definitions": {
3059
+ "/v1/environments/{environmentId}/resume": {
2433
3060
  "post": {
2434
- "operationId": "createEnvironmentDefinition",
3061
+ "operationId": "resumeEnvironment",
2435
3062
  "parameters": [
2436
3063
  {
2437
3064
  "in": "path",
2438
- "name": "workspaceId",
3065
+ "name": "environmentId",
2439
3066
  "required": true,
2440
3067
  "schema": {
2441
3068
  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2442
3069
  "type": "string"
2443
3070
  }
2444
- },
2445
- {
2446
- "in": "header",
2447
- "name": "idempotency-key",
2448
- "required": true,
2449
- "schema": {
2450
- "maxLength": 128,
2451
- "minLength": 8,
2452
- "pattern": "^[A-Za-z0-9._:-]+$",
2453
- "type": "string"
2454
- }
2455
3071
  }
2456
3072
  ],
2457
- "requestBody": {
2458
- "content": {
2459
- "application/json": {
2460
- "schema": {
2461
- "anyOf": [
2462
- {
2463
- "additionalProperties": false,
2464
- "properties": {
2465
- "apps": {
2466
- "anyOf": [
2467
- {
2468
- "items": {
2469
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
2470
- "type": "string"
2471
- },
2472
- "maxItems": 10,
2473
- "minItems": 1,
2474
- "type": "array"
2475
- },
2476
- {
2477
- "additionalProperties": {
2478
- "additionalProperties": false,
2479
- "properties": {
2480
- "app": {
2481
- "maxLength": 128,
2482
- "minLength": 1,
2483
- "type": "string"
2484
- },
2485
- "configure": {
2486
- "additionalProperties": true,
2487
- "description": "Native values validated by the selected replica release.",
2488
- "type": "object"
2489
- },
2490
- "connections": {
2491
- "additionalProperties": true,
2492
- "description": "Native values validated by the selected replica release.",
2493
- "type": "object"
2494
- },
2495
- "defaultConnection": {
2496
- "pattern": "^[a-z][a-z0-9-]{0,39}$",
2497
- "type": "string"
2498
- },
2499
- "preset": {
2500
- "maxLength": 128,
2501
- "minLength": 1,
2502
- "type": "string"
2503
- },
2504
- "release": {
2505
- "maxLength": 128,
2506
- "minLength": 1,
2507
- "type": "string"
2508
- },
2509
- "resources": {
2510
- "additionalProperties": true,
2511
- "description": "Native values validated by the selected replica release.",
2512
- "type": "object"
2513
- },
2514
- "settings": {
2515
- "additionalProperties": true,
2516
- "description": "Native values validated by the selected replica release.",
2517
- "type": "object"
2518
- }
2519
- },
2520
- "required": ["app"],
2521
- "type": "object"
3073
+ "responses": {
3074
+ "200": {
3075
+ "content": {
3076
+ "application/json": {
3077
+ "schema": {
3078
+ "properties": {
3079
+ "data": {
3080
+ "$ref": "#/components/schemas/Environment"
3081
+ }
3082
+ },
3083
+ "required": ["data"],
3084
+ "type": "object"
3085
+ }
3086
+ }
3087
+ },
3088
+ "description": "Environment queued to run again on the data it was suspended with"
3089
+ },
3090
+ "400": {
3091
+ "content": {
3092
+ "application/json": {
3093
+ "schema": {
3094
+ "$ref": "#/components/schemas/ErrorResponse"
3095
+ }
3096
+ }
3097
+ },
3098
+ "description": "Invalid request"
3099
+ },
3100
+ "401": {
3101
+ "content": {
3102
+ "application/json": {
3103
+ "schema": {
3104
+ "$ref": "#/components/schemas/ErrorResponse"
3105
+ }
3106
+ }
3107
+ },
3108
+ "description": "Authentication required"
3109
+ },
3110
+ "403": {
3111
+ "content": {
3112
+ "application/json": {
3113
+ "schema": {
3114
+ "$ref": "#/components/schemas/ErrorResponse"
3115
+ }
3116
+ }
3117
+ },
3118
+ "description": "Permission denied"
3119
+ },
3120
+ "404": {
3121
+ "content": {
3122
+ "application/json": {
3123
+ "schema": {
3124
+ "$ref": "#/components/schemas/ErrorResponse"
3125
+ }
3126
+ }
3127
+ },
3128
+ "description": "Resource not found"
3129
+ },
3130
+ "409": {
3131
+ "content": {
3132
+ "application/json": {
3133
+ "schema": {
3134
+ "$ref": "#/components/schemas/ErrorResponse"
3135
+ }
3136
+ }
3137
+ },
3138
+ "description": "Conflicting request or version"
3139
+ },
3140
+ "413": {
3141
+ "content": {
3142
+ "application/json": {
3143
+ "schema": {
3144
+ "$ref": "#/components/schemas/ErrorResponse"
3145
+ }
3146
+ }
3147
+ },
3148
+ "description": "Request body too large"
3149
+ },
3150
+ "422": {
3151
+ "content": {
3152
+ "application/json": {
3153
+ "schema": {
3154
+ "$ref": "#/components/schemas/ErrorResponse"
3155
+ }
3156
+ }
3157
+ },
3158
+ "description": "Unsupported configuration"
3159
+ },
3160
+ "429": {
3161
+ "content": {
3162
+ "application/json": {
3163
+ "schema": {
3164
+ "$ref": "#/components/schemas/ErrorResponse"
3165
+ }
3166
+ }
3167
+ },
3168
+ "description": "Admission limit reached"
3169
+ },
3170
+ "500": {
3171
+ "content": {
3172
+ "application/json": {
3173
+ "schema": {
3174
+ "$ref": "#/components/schemas/ErrorResponse"
3175
+ }
3176
+ }
3177
+ },
3178
+ "description": "Unexpected failure"
3179
+ },
3180
+ "503": {
3181
+ "content": {
3182
+ "application/json": {
3183
+ "schema": {
3184
+ "$ref": "#/components/schemas/ErrorResponse"
3185
+ }
3186
+ }
3187
+ },
3188
+ "description": "Dependency unavailable"
3189
+ }
3190
+ },
3191
+ "security": [
3192
+ {
3193
+ "bearerAuth": []
3194
+ }
3195
+ ],
3196
+ "x-state-credentials": ["user", "api_key"]
3197
+ }
3198
+ },
3199
+ "/v1/environments/{environmentId}/stop": {
3200
+ "post": {
3201
+ "operationId": "stopEnvironment",
3202
+ "parameters": [
3203
+ {
3204
+ "in": "path",
3205
+ "name": "environmentId",
3206
+ "required": true,
3207
+ "schema": {
3208
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3209
+ "type": "string"
3210
+ }
3211
+ }
3212
+ ],
3213
+ "responses": {
3214
+ "200": {
3215
+ "content": {
3216
+ "application/json": {
3217
+ "schema": {
3218
+ "properties": {
3219
+ "data": {
3220
+ "$ref": "#/components/schemas/Environment"
3221
+ }
3222
+ },
3223
+ "required": ["data"],
3224
+ "type": "object"
3225
+ }
3226
+ }
3227
+ },
3228
+ "description": "Environment stopping or stopped; its data is discarded"
3229
+ },
3230
+ "400": {
3231
+ "content": {
3232
+ "application/json": {
3233
+ "schema": {
3234
+ "$ref": "#/components/schemas/ErrorResponse"
3235
+ }
3236
+ }
3237
+ },
3238
+ "description": "Invalid request"
3239
+ },
3240
+ "401": {
3241
+ "content": {
3242
+ "application/json": {
3243
+ "schema": {
3244
+ "$ref": "#/components/schemas/ErrorResponse"
3245
+ }
3246
+ }
3247
+ },
3248
+ "description": "Authentication required"
3249
+ },
3250
+ "403": {
3251
+ "content": {
3252
+ "application/json": {
3253
+ "schema": {
3254
+ "$ref": "#/components/schemas/ErrorResponse"
3255
+ }
3256
+ }
3257
+ },
3258
+ "description": "Permission denied"
3259
+ },
3260
+ "404": {
3261
+ "content": {
3262
+ "application/json": {
3263
+ "schema": {
3264
+ "$ref": "#/components/schemas/ErrorResponse"
3265
+ }
3266
+ }
3267
+ },
3268
+ "description": "Resource not found"
3269
+ },
3270
+ "409": {
3271
+ "content": {
3272
+ "application/json": {
3273
+ "schema": {
3274
+ "$ref": "#/components/schemas/ErrorResponse"
3275
+ }
3276
+ }
3277
+ },
3278
+ "description": "Conflicting request or version"
3279
+ },
3280
+ "413": {
3281
+ "content": {
3282
+ "application/json": {
3283
+ "schema": {
3284
+ "$ref": "#/components/schemas/ErrorResponse"
3285
+ }
3286
+ }
3287
+ },
3288
+ "description": "Request body too large"
3289
+ },
3290
+ "422": {
3291
+ "content": {
3292
+ "application/json": {
3293
+ "schema": {
3294
+ "$ref": "#/components/schemas/ErrorResponse"
3295
+ }
3296
+ }
3297
+ },
3298
+ "description": "Unsupported configuration"
3299
+ },
3300
+ "429": {
3301
+ "content": {
3302
+ "application/json": {
3303
+ "schema": {
3304
+ "$ref": "#/components/schemas/ErrorResponse"
3305
+ }
3306
+ }
3307
+ },
3308
+ "description": "Admission limit reached"
3309
+ },
3310
+ "500": {
3311
+ "content": {
3312
+ "application/json": {
3313
+ "schema": {
3314
+ "$ref": "#/components/schemas/ErrorResponse"
3315
+ }
3316
+ }
3317
+ },
3318
+ "description": "Unexpected failure"
3319
+ },
3320
+ "503": {
3321
+ "content": {
3322
+ "application/json": {
3323
+ "schema": {
3324
+ "$ref": "#/components/schemas/ErrorResponse"
3325
+ }
3326
+ }
3327
+ },
3328
+ "description": "Dependency unavailable"
3329
+ }
3330
+ },
3331
+ "security": [
3332
+ {
3333
+ "bearerAuth": []
3334
+ }
3335
+ ],
3336
+ "x-state-credentials": ["user", "api_key"]
3337
+ }
3338
+ },
3339
+ "/v1/environments/{environmentId}/suspend": {
3340
+ "post": {
3341
+ "operationId": "suspendEnvironment",
3342
+ "parameters": [
3343
+ {
3344
+ "in": "path",
3345
+ "name": "environmentId",
3346
+ "required": true,
3347
+ "schema": {
3348
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3349
+ "type": "string"
3350
+ }
3351
+ }
3352
+ ],
3353
+ "responses": {
3354
+ "200": {
3355
+ "content": {
3356
+ "application/json": {
3357
+ "schema": {
3358
+ "properties": {
3359
+ "data": {
3360
+ "$ref": "#/components/schemas/Environment"
3361
+ }
3362
+ },
3363
+ "required": ["data"],
3364
+ "type": "object"
3365
+ }
3366
+ }
3367
+ },
3368
+ "description": "Environment suspending or suspended: its sandboxes go, its data stays for a resume"
3369
+ },
3370
+ "400": {
3371
+ "content": {
3372
+ "application/json": {
3373
+ "schema": {
3374
+ "$ref": "#/components/schemas/ErrorResponse"
3375
+ }
3376
+ }
3377
+ },
3378
+ "description": "Invalid request"
3379
+ },
3380
+ "401": {
3381
+ "content": {
3382
+ "application/json": {
3383
+ "schema": {
3384
+ "$ref": "#/components/schemas/ErrorResponse"
3385
+ }
3386
+ }
3387
+ },
3388
+ "description": "Authentication required"
3389
+ },
3390
+ "403": {
3391
+ "content": {
3392
+ "application/json": {
3393
+ "schema": {
3394
+ "$ref": "#/components/schemas/ErrorResponse"
3395
+ }
3396
+ }
3397
+ },
3398
+ "description": "Permission denied"
3399
+ },
3400
+ "404": {
3401
+ "content": {
3402
+ "application/json": {
3403
+ "schema": {
3404
+ "$ref": "#/components/schemas/ErrorResponse"
3405
+ }
3406
+ }
3407
+ },
3408
+ "description": "Resource not found"
3409
+ },
3410
+ "409": {
3411
+ "content": {
3412
+ "application/json": {
3413
+ "schema": {
3414
+ "$ref": "#/components/schemas/ErrorResponse"
3415
+ }
3416
+ }
3417
+ },
3418
+ "description": "Conflicting request or version"
3419
+ },
3420
+ "413": {
3421
+ "content": {
3422
+ "application/json": {
3423
+ "schema": {
3424
+ "$ref": "#/components/schemas/ErrorResponse"
3425
+ }
3426
+ }
3427
+ },
3428
+ "description": "Request body too large"
3429
+ },
3430
+ "422": {
3431
+ "content": {
3432
+ "application/json": {
3433
+ "schema": {
3434
+ "$ref": "#/components/schemas/ErrorResponse"
3435
+ }
3436
+ }
3437
+ },
3438
+ "description": "Unsupported configuration"
3439
+ },
3440
+ "429": {
3441
+ "content": {
3442
+ "application/json": {
3443
+ "schema": {
3444
+ "$ref": "#/components/schemas/ErrorResponse"
3445
+ }
3446
+ }
3447
+ },
3448
+ "description": "Admission limit reached"
3449
+ },
3450
+ "500": {
3451
+ "content": {
3452
+ "application/json": {
3453
+ "schema": {
3454
+ "$ref": "#/components/schemas/ErrorResponse"
3455
+ }
3456
+ }
3457
+ },
3458
+ "description": "Unexpected failure"
3459
+ },
3460
+ "503": {
3461
+ "content": {
3462
+ "application/json": {
3463
+ "schema": {
3464
+ "$ref": "#/components/schemas/ErrorResponse"
3465
+ }
3466
+ }
3467
+ },
3468
+ "description": "Dependency unavailable"
3469
+ }
3470
+ },
3471
+ "security": [
3472
+ {
3473
+ "bearerAuth": []
3474
+ }
3475
+ ],
3476
+ "x-state-credentials": ["user", "api_key"]
3477
+ }
3478
+ },
3479
+ "/v1/snapshots/{snapshotId}": {
3480
+ "delete": {
3481
+ "operationId": "deleteSnapshot",
3482
+ "parameters": [
3483
+ {
3484
+ "in": "path",
3485
+ "name": "snapshotId",
3486
+ "required": true,
3487
+ "schema": {
3488
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3489
+ "type": "string"
3490
+ }
3491
+ }
3492
+ ],
3493
+ "responses": {
3494
+ "200": {
3495
+ "content": {
3496
+ "application/json": {
3497
+ "schema": {
3498
+ "properties": {
3499
+ "data": {
3500
+ "$ref": "#/components/schemas/EnvironmentSnapshot"
3501
+ }
3502
+ },
3503
+ "required": ["data"],
3504
+ "type": "object"
3505
+ }
3506
+ }
3507
+ },
3508
+ "description": "Environment snapshot removed from the library"
3509
+ },
3510
+ "400": {
3511
+ "content": {
3512
+ "application/json": {
3513
+ "schema": {
3514
+ "$ref": "#/components/schemas/ErrorResponse"
3515
+ }
3516
+ }
3517
+ },
3518
+ "description": "Invalid request"
3519
+ },
3520
+ "401": {
3521
+ "content": {
3522
+ "application/json": {
3523
+ "schema": {
3524
+ "$ref": "#/components/schemas/ErrorResponse"
3525
+ }
3526
+ }
3527
+ },
3528
+ "description": "Authentication required"
3529
+ },
3530
+ "403": {
3531
+ "content": {
3532
+ "application/json": {
3533
+ "schema": {
3534
+ "$ref": "#/components/schemas/ErrorResponse"
3535
+ }
3536
+ }
3537
+ },
3538
+ "description": "Permission denied"
3539
+ },
3540
+ "404": {
3541
+ "content": {
3542
+ "application/json": {
3543
+ "schema": {
3544
+ "$ref": "#/components/schemas/ErrorResponse"
3545
+ }
3546
+ }
3547
+ },
3548
+ "description": "Resource not found"
3549
+ },
3550
+ "409": {
3551
+ "content": {
3552
+ "application/json": {
3553
+ "schema": {
3554
+ "$ref": "#/components/schemas/ErrorResponse"
3555
+ }
3556
+ }
3557
+ },
3558
+ "description": "Conflicting request or version"
3559
+ },
3560
+ "413": {
3561
+ "content": {
3562
+ "application/json": {
3563
+ "schema": {
3564
+ "$ref": "#/components/schemas/ErrorResponse"
3565
+ }
3566
+ }
3567
+ },
3568
+ "description": "Request body too large"
3569
+ },
3570
+ "422": {
3571
+ "content": {
3572
+ "application/json": {
3573
+ "schema": {
3574
+ "$ref": "#/components/schemas/ErrorResponse"
3575
+ }
3576
+ }
3577
+ },
3578
+ "description": "Unsupported configuration"
3579
+ },
3580
+ "429": {
3581
+ "content": {
3582
+ "application/json": {
3583
+ "schema": {
3584
+ "$ref": "#/components/schemas/ErrorResponse"
3585
+ }
3586
+ }
3587
+ },
3588
+ "description": "Admission limit reached"
3589
+ },
3590
+ "500": {
3591
+ "content": {
3592
+ "application/json": {
3593
+ "schema": {
3594
+ "$ref": "#/components/schemas/ErrorResponse"
3595
+ }
3596
+ }
3597
+ },
3598
+ "description": "Unexpected failure"
3599
+ },
3600
+ "503": {
3601
+ "content": {
3602
+ "application/json": {
3603
+ "schema": {
3604
+ "$ref": "#/components/schemas/ErrorResponse"
3605
+ }
3606
+ }
3607
+ },
3608
+ "description": "Dependency unavailable"
3609
+ }
3610
+ },
3611
+ "security": [
3612
+ {
3613
+ "bearerAuth": []
3614
+ }
3615
+ ],
3616
+ "x-state-credentials": ["user", "api_key"]
3617
+ },
3618
+ "get": {
3619
+ "operationId": "getSnapshot",
3620
+ "parameters": [
3621
+ {
3622
+ "in": "path",
3623
+ "name": "snapshotId",
3624
+ "required": true,
3625
+ "schema": {
3626
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3627
+ "type": "string"
3628
+ }
3629
+ }
3630
+ ],
3631
+ "responses": {
3632
+ "200": {
3633
+ "content": {
3634
+ "application/json": {
3635
+ "schema": {
3636
+ "properties": {
3637
+ "data": {
3638
+ "$ref": "#/components/schemas/EnvironmentSnapshot"
3639
+ }
3640
+ },
3641
+ "required": ["data"],
3642
+ "type": "object"
3643
+ }
3644
+ }
3645
+ },
3646
+ "description": "Environment snapshot and its app instance snapshots"
3647
+ },
3648
+ "400": {
3649
+ "content": {
3650
+ "application/json": {
3651
+ "schema": {
3652
+ "$ref": "#/components/schemas/ErrorResponse"
3653
+ }
3654
+ }
3655
+ },
3656
+ "description": "Invalid request"
3657
+ },
3658
+ "401": {
3659
+ "content": {
3660
+ "application/json": {
3661
+ "schema": {
3662
+ "$ref": "#/components/schemas/ErrorResponse"
3663
+ }
3664
+ }
3665
+ },
3666
+ "description": "Authentication required"
3667
+ },
3668
+ "403": {
3669
+ "content": {
3670
+ "application/json": {
3671
+ "schema": {
3672
+ "$ref": "#/components/schemas/ErrorResponse"
3673
+ }
3674
+ }
3675
+ },
3676
+ "description": "Permission denied"
3677
+ },
3678
+ "404": {
3679
+ "content": {
3680
+ "application/json": {
3681
+ "schema": {
3682
+ "$ref": "#/components/schemas/ErrorResponse"
3683
+ }
3684
+ }
3685
+ },
3686
+ "description": "Resource not found"
3687
+ },
3688
+ "409": {
3689
+ "content": {
3690
+ "application/json": {
3691
+ "schema": {
3692
+ "$ref": "#/components/schemas/ErrorResponse"
3693
+ }
3694
+ }
3695
+ },
3696
+ "description": "Conflicting request or version"
3697
+ },
3698
+ "413": {
3699
+ "content": {
3700
+ "application/json": {
3701
+ "schema": {
3702
+ "$ref": "#/components/schemas/ErrorResponse"
3703
+ }
3704
+ }
3705
+ },
3706
+ "description": "Request body too large"
3707
+ },
3708
+ "422": {
3709
+ "content": {
3710
+ "application/json": {
3711
+ "schema": {
3712
+ "$ref": "#/components/schemas/ErrorResponse"
3713
+ }
3714
+ }
3715
+ },
3716
+ "description": "Unsupported configuration"
3717
+ },
3718
+ "429": {
3719
+ "content": {
3720
+ "application/json": {
3721
+ "schema": {
3722
+ "$ref": "#/components/schemas/ErrorResponse"
3723
+ }
3724
+ }
3725
+ },
3726
+ "description": "Admission limit reached"
3727
+ },
3728
+ "500": {
3729
+ "content": {
3730
+ "application/json": {
3731
+ "schema": {
3732
+ "$ref": "#/components/schemas/ErrorResponse"
3733
+ }
3734
+ }
3735
+ },
3736
+ "description": "Unexpected failure"
3737
+ },
3738
+ "503": {
3739
+ "content": {
3740
+ "application/json": {
3741
+ "schema": {
3742
+ "$ref": "#/components/schemas/ErrorResponse"
3743
+ }
3744
+ }
3745
+ },
3746
+ "description": "Dependency unavailable"
3747
+ }
3748
+ },
3749
+ "security": [
3750
+ {
3751
+ "bearerAuth": []
3752
+ }
3753
+ ],
3754
+ "x-state-credentials": ["user", "api_key"]
3755
+ },
3756
+ "patch": {
3757
+ "operationId": "updateSnapshot",
3758
+ "parameters": [
3759
+ {
3760
+ "in": "path",
3761
+ "name": "snapshotId",
3762
+ "required": true,
3763
+ "schema": {
3764
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
3765
+ "type": "string"
3766
+ }
3767
+ }
3768
+ ],
3769
+ "requestBody": {
3770
+ "content": {
3771
+ "application/json": {
3772
+ "schema": {
3773
+ "properties": {
3774
+ "expectedVersion": {
3775
+ "minimum": 1,
3776
+ "type": "integer"
3777
+ },
3778
+ "name": {
3779
+ "maxLength": 120,
3780
+ "minLength": 1,
3781
+ "type": ["string", "null"]
3782
+ }
3783
+ },
3784
+ "required": ["name", "expectedVersion"],
3785
+ "type": "object"
3786
+ }
3787
+ }
3788
+ },
3789
+ "required": true
3790
+ },
3791
+ "responses": {
3792
+ "200": {
3793
+ "content": {
3794
+ "application/json": {
3795
+ "schema": {
3796
+ "properties": {
3797
+ "data": {
3798
+ "$ref": "#/components/schemas/EnvironmentSnapshot"
3799
+ }
3800
+ },
3801
+ "required": ["data"],
3802
+ "type": "object"
3803
+ }
3804
+ }
3805
+ },
3806
+ "description": "Environment snapshot renamed"
3807
+ },
3808
+ "400": {
3809
+ "content": {
3810
+ "application/json": {
3811
+ "schema": {
3812
+ "$ref": "#/components/schemas/ErrorResponse"
3813
+ }
3814
+ }
3815
+ },
3816
+ "description": "Invalid request"
3817
+ },
3818
+ "401": {
3819
+ "content": {
3820
+ "application/json": {
3821
+ "schema": {
3822
+ "$ref": "#/components/schemas/ErrorResponse"
3823
+ }
3824
+ }
3825
+ },
3826
+ "description": "Authentication required"
3827
+ },
3828
+ "403": {
3829
+ "content": {
3830
+ "application/json": {
3831
+ "schema": {
3832
+ "$ref": "#/components/schemas/ErrorResponse"
3833
+ }
3834
+ }
3835
+ },
3836
+ "description": "Permission denied"
3837
+ },
3838
+ "404": {
3839
+ "content": {
3840
+ "application/json": {
3841
+ "schema": {
3842
+ "$ref": "#/components/schemas/ErrorResponse"
3843
+ }
3844
+ }
3845
+ },
3846
+ "description": "Resource not found"
3847
+ },
3848
+ "409": {
3849
+ "content": {
3850
+ "application/json": {
3851
+ "schema": {
3852
+ "$ref": "#/components/schemas/ErrorResponse"
3853
+ }
3854
+ }
3855
+ },
3856
+ "description": "Conflicting request or version"
3857
+ },
3858
+ "413": {
3859
+ "content": {
3860
+ "application/json": {
3861
+ "schema": {
3862
+ "$ref": "#/components/schemas/ErrorResponse"
3863
+ }
3864
+ }
3865
+ },
3866
+ "description": "Request body too large"
3867
+ },
3868
+ "422": {
3869
+ "content": {
3870
+ "application/json": {
3871
+ "schema": {
3872
+ "$ref": "#/components/schemas/ErrorResponse"
3873
+ }
3874
+ }
3875
+ },
3876
+ "description": "Unsupported configuration"
3877
+ },
3878
+ "429": {
3879
+ "content": {
3880
+ "application/json": {
3881
+ "schema": {
3882
+ "$ref": "#/components/schemas/ErrorResponse"
3883
+ }
3884
+ }
3885
+ },
3886
+ "description": "Admission limit reached"
3887
+ },
3888
+ "500": {
3889
+ "content": {
3890
+ "application/json": {
3891
+ "schema": {
3892
+ "$ref": "#/components/schemas/ErrorResponse"
3893
+ }
3894
+ }
3895
+ },
3896
+ "description": "Unexpected failure"
3897
+ },
3898
+ "503": {
3899
+ "content": {
3900
+ "application/json": {
3901
+ "schema": {
3902
+ "$ref": "#/components/schemas/ErrorResponse"
3903
+ }
3904
+ }
3905
+ },
3906
+ "description": "Dependency unavailable"
3907
+ }
3908
+ },
3909
+ "security": [
3910
+ {
3911
+ "bearerAuth": []
3912
+ }
3913
+ ],
3914
+ "x-state-credentials": ["user", "api_key"]
3915
+ }
3916
+ },
3917
+ "/v1/workspaces": {
3918
+ "get": {
3919
+ "operationId": "listWorkspaces",
3920
+ "parameters": [
3921
+ {
3922
+ "in": "query",
3923
+ "name": "archived",
3924
+ "required": false,
3925
+ "schema": {
3926
+ "default": "exclude",
3927
+ "enum": ["exclude", "include", "only"],
3928
+ "type": "string"
3929
+ }
3930
+ }
3931
+ ],
3932
+ "responses": {
3933
+ "200": {
3934
+ "content": {
3935
+ "application/json": {
3936
+ "schema": {
3937
+ "properties": {
3938
+ "data": {
3939
+ "items": {
3940
+ "$ref": "#/components/schemas/Workspace"
3941
+ },
3942
+ "type": "array"
3943
+ }
3944
+ },
3945
+ "required": ["data"],
3946
+ "type": "object"
3947
+ }
3948
+ }
3949
+ },
3950
+ "description": "The current organization's workspaces"
3951
+ },
3952
+ "400": {
3953
+ "content": {
3954
+ "application/json": {
3955
+ "schema": {
3956
+ "$ref": "#/components/schemas/ErrorResponse"
3957
+ }
3958
+ }
3959
+ },
3960
+ "description": "Invalid request"
3961
+ },
3962
+ "401": {
3963
+ "content": {
3964
+ "application/json": {
3965
+ "schema": {
3966
+ "$ref": "#/components/schemas/ErrorResponse"
3967
+ }
3968
+ }
3969
+ },
3970
+ "description": "Authentication required"
3971
+ },
3972
+ "403": {
3973
+ "content": {
3974
+ "application/json": {
3975
+ "schema": {
3976
+ "$ref": "#/components/schemas/ErrorResponse"
3977
+ }
3978
+ }
3979
+ },
3980
+ "description": "Permission denied"
3981
+ },
3982
+ "404": {
3983
+ "content": {
3984
+ "application/json": {
3985
+ "schema": {
3986
+ "$ref": "#/components/schemas/ErrorResponse"
3987
+ }
3988
+ }
3989
+ },
3990
+ "description": "Resource not found"
3991
+ },
3992
+ "409": {
3993
+ "content": {
3994
+ "application/json": {
3995
+ "schema": {
3996
+ "$ref": "#/components/schemas/ErrorResponse"
3997
+ }
3998
+ }
3999
+ },
4000
+ "description": "Conflicting request or version"
4001
+ },
4002
+ "413": {
4003
+ "content": {
4004
+ "application/json": {
4005
+ "schema": {
4006
+ "$ref": "#/components/schemas/ErrorResponse"
4007
+ }
4008
+ }
4009
+ },
4010
+ "description": "Request body too large"
4011
+ },
4012
+ "422": {
4013
+ "content": {
4014
+ "application/json": {
4015
+ "schema": {
4016
+ "$ref": "#/components/schemas/ErrorResponse"
4017
+ }
4018
+ }
4019
+ },
4020
+ "description": "Unsupported configuration"
4021
+ },
4022
+ "429": {
4023
+ "content": {
4024
+ "application/json": {
4025
+ "schema": {
4026
+ "$ref": "#/components/schemas/ErrorResponse"
4027
+ }
4028
+ }
4029
+ },
4030
+ "description": "Admission limit reached"
4031
+ },
4032
+ "500": {
4033
+ "content": {
4034
+ "application/json": {
4035
+ "schema": {
4036
+ "$ref": "#/components/schemas/ErrorResponse"
4037
+ }
4038
+ }
4039
+ },
4040
+ "description": "Unexpected failure"
4041
+ },
4042
+ "503": {
4043
+ "content": {
4044
+ "application/json": {
4045
+ "schema": {
4046
+ "$ref": "#/components/schemas/ErrorResponse"
4047
+ }
4048
+ }
4049
+ },
4050
+ "description": "Dependency unavailable"
4051
+ }
4052
+ },
4053
+ "security": [
4054
+ {
4055
+ "bearerAuth": []
4056
+ }
4057
+ ],
4058
+ "x-state-credentials": ["user", "api_key"]
4059
+ }
4060
+ },
4061
+ "/v1/workspaces/{workspaceId}": {
4062
+ "get": {
4063
+ "operationId": "getWorkspace",
4064
+ "parameters": [
4065
+ {
4066
+ "in": "path",
4067
+ "name": "workspaceId",
4068
+ "required": true,
4069
+ "schema": {
4070
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4071
+ "type": "string"
4072
+ }
4073
+ }
4074
+ ],
4075
+ "responses": {
4076
+ "200": {
4077
+ "content": {
4078
+ "application/json": {
4079
+ "schema": {
4080
+ "properties": {
4081
+ "data": {
4082
+ "$ref": "#/components/schemas/Workspace"
4083
+ }
4084
+ },
4085
+ "required": ["data"],
4086
+ "type": "object"
4087
+ }
4088
+ }
4089
+ },
4090
+ "description": "Workspace"
4091
+ },
4092
+ "400": {
4093
+ "content": {
4094
+ "application/json": {
4095
+ "schema": {
4096
+ "$ref": "#/components/schemas/ErrorResponse"
4097
+ }
4098
+ }
4099
+ },
4100
+ "description": "Invalid request"
4101
+ },
4102
+ "401": {
4103
+ "content": {
4104
+ "application/json": {
4105
+ "schema": {
4106
+ "$ref": "#/components/schemas/ErrorResponse"
4107
+ }
4108
+ }
4109
+ },
4110
+ "description": "Authentication required"
4111
+ },
4112
+ "403": {
4113
+ "content": {
4114
+ "application/json": {
4115
+ "schema": {
4116
+ "$ref": "#/components/schemas/ErrorResponse"
4117
+ }
4118
+ }
4119
+ },
4120
+ "description": "Permission denied"
4121
+ },
4122
+ "404": {
4123
+ "content": {
4124
+ "application/json": {
4125
+ "schema": {
4126
+ "$ref": "#/components/schemas/ErrorResponse"
4127
+ }
4128
+ }
4129
+ },
4130
+ "description": "Resource not found"
4131
+ },
4132
+ "409": {
4133
+ "content": {
4134
+ "application/json": {
4135
+ "schema": {
4136
+ "$ref": "#/components/schemas/ErrorResponse"
4137
+ }
4138
+ }
4139
+ },
4140
+ "description": "Conflicting request or version"
4141
+ },
4142
+ "413": {
4143
+ "content": {
4144
+ "application/json": {
4145
+ "schema": {
4146
+ "$ref": "#/components/schemas/ErrorResponse"
4147
+ }
4148
+ }
4149
+ },
4150
+ "description": "Request body too large"
4151
+ },
4152
+ "422": {
4153
+ "content": {
4154
+ "application/json": {
4155
+ "schema": {
4156
+ "$ref": "#/components/schemas/ErrorResponse"
4157
+ }
4158
+ }
4159
+ },
4160
+ "description": "Unsupported configuration"
4161
+ },
4162
+ "429": {
4163
+ "content": {
4164
+ "application/json": {
4165
+ "schema": {
4166
+ "$ref": "#/components/schemas/ErrorResponse"
4167
+ }
4168
+ }
4169
+ },
4170
+ "description": "Admission limit reached"
4171
+ },
4172
+ "500": {
4173
+ "content": {
4174
+ "application/json": {
4175
+ "schema": {
4176
+ "$ref": "#/components/schemas/ErrorResponse"
4177
+ }
4178
+ }
4179
+ },
4180
+ "description": "Unexpected failure"
4181
+ },
4182
+ "503": {
4183
+ "content": {
4184
+ "application/json": {
4185
+ "schema": {
4186
+ "$ref": "#/components/schemas/ErrorResponse"
4187
+ }
4188
+ }
4189
+ },
4190
+ "description": "Dependency unavailable"
4191
+ }
4192
+ },
4193
+ "security": [
4194
+ {
4195
+ "bearerAuth": []
4196
+ }
4197
+ ],
4198
+ "x-state-credentials": ["user", "api_key"]
4199
+ }
4200
+ },
4201
+ "/v1/workspaces/{workspaceId}/environment-definitions": {
4202
+ "post": {
4203
+ "operationId": "createEnvironmentDefinition",
4204
+ "parameters": [
4205
+ {
4206
+ "in": "path",
4207
+ "name": "workspaceId",
4208
+ "required": true,
4209
+ "schema": {
4210
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4211
+ "type": "string"
4212
+ }
4213
+ },
4214
+ {
4215
+ "in": "header",
4216
+ "name": "idempotency-key",
4217
+ "required": true,
4218
+ "schema": {
4219
+ "maxLength": 128,
4220
+ "minLength": 8,
4221
+ "pattern": "^[A-Za-z0-9._:-]+$",
4222
+ "type": "string"
4223
+ }
4224
+ }
4225
+ ],
4226
+ "requestBody": {
4227
+ "content": {
4228
+ "application/json": {
4229
+ "schema": {
4230
+ "anyOf": [
4231
+ {
4232
+ "additionalProperties": false,
4233
+ "properties": {
4234
+ "apps": {
4235
+ "anyOf": [
4236
+ {
4237
+ "items": {
4238
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4239
+ "type": "string"
4240
+ },
4241
+ "maxItems": 10,
4242
+ "minItems": 1,
4243
+ "type": "array"
4244
+ },
4245
+ {
4246
+ "additionalProperties": {
4247
+ "additionalProperties": false,
4248
+ "properties": {
4249
+ "app": {
4250
+ "maxLength": 128,
4251
+ "minLength": 1,
4252
+ "type": "string"
4253
+ },
4254
+ "configure": {
4255
+ "additionalProperties": true,
4256
+ "description": "Native values validated by the selected replica release.",
4257
+ "type": "object"
4258
+ },
4259
+ "connections": {
4260
+ "additionalProperties": true,
4261
+ "description": "Native values validated by the selected replica release.",
4262
+ "type": "object"
4263
+ },
4264
+ "defaultConnection": {
4265
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
4266
+ "type": "string"
4267
+ },
4268
+ "preset": {
4269
+ "maxLength": 128,
4270
+ "minLength": 1,
4271
+ "type": "string"
4272
+ },
4273
+ "release": {
4274
+ "maxLength": 128,
4275
+ "minLength": 1,
4276
+ "type": "string"
4277
+ },
4278
+ "resources": {
4279
+ "additionalProperties": true,
4280
+ "description": "Native values validated by the selected replica release.",
4281
+ "type": "object"
4282
+ },
4283
+ "settings": {
4284
+ "additionalProperties": true,
4285
+ "description": "Native values validated by the selected replica release.",
4286
+ "type": "object"
4287
+ }
4288
+ },
4289
+ "required": ["app"],
4290
+ "type": "object"
2522
4291
  },
2523
4292
  "type": "object"
2524
4293
  }
@@ -2551,31 +4320,503 @@
2551
4320
  "required": ["apps"],
2552
4321
  "type": "object"
2553
4322
  },
2554
- {
2555
- "additionalProperties": false,
2556
- "properties": {
2557
- "from": {
2558
- "additionalProperties": false,
2559
- "properties": {
2560
- "snapshot": {
2561
- "maxLength": 128,
2562
- "minLength": 1,
2563
- "type": "string"
2564
- }
2565
- },
2566
- "required": ["snapshot"],
2567
- "type": "object"
4323
+ {
4324
+ "additionalProperties": false,
4325
+ "properties": {
4326
+ "from": {
4327
+ "additionalProperties": false,
4328
+ "properties": {
4329
+ "snapshot": {
4330
+ "maxLength": 128,
4331
+ "minLength": 1,
4332
+ "type": "string"
4333
+ }
4334
+ },
4335
+ "required": ["snapshot"],
4336
+ "type": "object"
4337
+ },
4338
+ "labels": {
4339
+ "additionalProperties": {
4340
+ "maxLength": 256,
4341
+ "type": "string"
4342
+ },
4343
+ "default": {},
4344
+ "type": "object"
4345
+ },
4346
+ "lifetimeMinutes": {
4347
+ "maximum": 1440,
4348
+ "minimum": 1,
4349
+ "type": "integer"
4350
+ },
4351
+ "name": {
4352
+ "maxLength": 120,
4353
+ "minLength": 1,
4354
+ "type": "string"
4355
+ },
4356
+ "version": {
4357
+ "default": 1,
4358
+ "enum": [1],
4359
+ "type": "number"
4360
+ }
4361
+ },
4362
+ "required": ["from"],
4363
+ "type": "object"
4364
+ },
4365
+ {
4366
+ "additionalProperties": false,
4367
+ "properties": {
4368
+ "from": {
4369
+ "additionalProperties": false,
4370
+ "properties": {
4371
+ "at": {
4372
+ "anyOf": [
4373
+ {
4374
+ "additionalProperties": false,
4375
+ "properties": {
4376
+ "position": {
4377
+ "additionalProperties": false,
4378
+ "properties": {
4379
+ "generation": {
4380
+ "minimum": 1,
4381
+ "type": "integer"
4382
+ },
4383
+ "lsn": {
4384
+ "pattern": "^[0-9A-F]{1,8}\\/[0-9A-F]{1,8}$",
4385
+ "type": "string"
4386
+ }
4387
+ },
4388
+ "required": ["generation", "lsn"],
4389
+ "type": "object"
4390
+ }
4391
+ },
4392
+ "required": ["position"],
4393
+ "type": "object"
4394
+ },
4395
+ {
4396
+ "additionalProperties": false,
4397
+ "properties": {
4398
+ "exchangeId": {
4399
+ "maxLength": 128,
4400
+ "minLength": 1,
4401
+ "type": "string"
4402
+ }
4403
+ },
4404
+ "required": ["exchangeId"],
4405
+ "type": "object"
4406
+ }
4407
+ ]
4408
+ },
4409
+ "environment": {
4410
+ "maxLength": 128,
4411
+ "minLength": 1,
4412
+ "type": "string"
4413
+ }
4414
+ },
4415
+ "required": ["environment", "at"],
4416
+ "type": "object"
4417
+ },
4418
+ "labels": {
4419
+ "additionalProperties": {
4420
+ "maxLength": 256,
4421
+ "type": "string"
4422
+ },
4423
+ "default": {},
4424
+ "type": "object"
4425
+ },
4426
+ "lifetimeMinutes": {
4427
+ "maximum": 1440,
4428
+ "minimum": 1,
4429
+ "type": "integer"
4430
+ },
4431
+ "name": {
4432
+ "maxLength": 120,
4433
+ "minLength": 1,
4434
+ "type": "string"
4435
+ },
4436
+ "version": {
4437
+ "default": 1,
4438
+ "enum": [1],
4439
+ "type": "number"
4440
+ }
4441
+ },
4442
+ "required": ["from"],
4443
+ "type": "object"
4444
+ }
4445
+ ]
4446
+ }
4447
+ }
4448
+ },
4449
+ "required": true
4450
+ },
4451
+ "responses": {
4452
+ "202": {
4453
+ "content": {
4454
+ "application/json": {
4455
+ "schema": {
4456
+ "properties": {
4457
+ "data": {
4458
+ "$ref": "#/components/schemas/Environment"
4459
+ }
4460
+ },
4461
+ "required": ["data"],
4462
+ "type": "object"
4463
+ }
4464
+ }
4465
+ },
4466
+ "description": "Environment accepted from its setup definition"
4467
+ },
4468
+ "400": {
4469
+ "content": {
4470
+ "application/json": {
4471
+ "schema": {
4472
+ "$ref": "#/components/schemas/ErrorResponse"
4473
+ }
4474
+ }
4475
+ },
4476
+ "description": "Invalid request"
4477
+ },
4478
+ "401": {
4479
+ "content": {
4480
+ "application/json": {
4481
+ "schema": {
4482
+ "$ref": "#/components/schemas/ErrorResponse"
4483
+ }
4484
+ }
4485
+ },
4486
+ "description": "Authentication required"
4487
+ },
4488
+ "403": {
4489
+ "content": {
4490
+ "application/json": {
4491
+ "schema": {
4492
+ "$ref": "#/components/schemas/ErrorResponse"
4493
+ }
4494
+ }
4495
+ },
4496
+ "description": "Permission denied"
4497
+ },
4498
+ "404": {
4499
+ "content": {
4500
+ "application/json": {
4501
+ "schema": {
4502
+ "$ref": "#/components/schemas/ErrorResponse"
4503
+ }
4504
+ }
4505
+ },
4506
+ "description": "Resource not found"
4507
+ },
4508
+ "409": {
4509
+ "content": {
4510
+ "application/json": {
4511
+ "schema": {
4512
+ "$ref": "#/components/schemas/ErrorResponse"
4513
+ }
4514
+ }
4515
+ },
4516
+ "description": "Conflicting request or version"
4517
+ },
4518
+ "413": {
4519
+ "content": {
4520
+ "application/json": {
4521
+ "schema": {
4522
+ "$ref": "#/components/schemas/ErrorResponse"
4523
+ }
4524
+ }
4525
+ },
4526
+ "description": "Request body too large"
4527
+ },
4528
+ "422": {
4529
+ "content": {
4530
+ "application/json": {
4531
+ "schema": {
4532
+ "$ref": "#/components/schemas/ErrorResponse"
4533
+ }
4534
+ }
4535
+ },
4536
+ "description": "Unsupported configuration"
4537
+ },
4538
+ "429": {
4539
+ "content": {
4540
+ "application/json": {
4541
+ "schema": {
4542
+ "$ref": "#/components/schemas/ErrorResponse"
4543
+ }
4544
+ }
4545
+ },
4546
+ "description": "Admission limit reached"
4547
+ },
4548
+ "500": {
4549
+ "content": {
4550
+ "application/json": {
4551
+ "schema": {
4552
+ "$ref": "#/components/schemas/ErrorResponse"
4553
+ }
4554
+ }
4555
+ },
4556
+ "description": "Unexpected failure"
4557
+ },
4558
+ "503": {
4559
+ "content": {
4560
+ "application/json": {
4561
+ "schema": {
4562
+ "$ref": "#/components/schemas/ErrorResponse"
4563
+ }
4564
+ }
4565
+ },
4566
+ "description": "Dependency unavailable"
4567
+ }
4568
+ },
4569
+ "security": [
4570
+ {
4571
+ "bearerAuth": []
4572
+ }
4573
+ ],
4574
+ "x-state-credentials": ["user", "api_key"]
4575
+ }
4576
+ },
4577
+ "/v1/workspaces/{workspaceId}/environments": {
4578
+ "get": {
4579
+ "operationId": "listEnvironments",
4580
+ "parameters": [
4581
+ {
4582
+ "in": "path",
4583
+ "name": "workspaceId",
4584
+ "required": true,
4585
+ "schema": {
4586
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4587
+ "type": "string"
4588
+ }
4589
+ },
4590
+ {
4591
+ "in": "query",
4592
+ "name": "limit",
4593
+ "required": false,
4594
+ "schema": {
4595
+ "default": 50,
4596
+ "maximum": 100,
4597
+ "minimum": 1,
4598
+ "type": "integer"
4599
+ }
4600
+ },
4601
+ {
4602
+ "in": "query",
4603
+ "name": "cursor",
4604
+ "required": false,
4605
+ "schema": {
4606
+ "maxLength": 2048,
4607
+ "type": "string"
4608
+ }
4609
+ },
4610
+ {
4611
+ "in": "query",
4612
+ "name": "status",
4613
+ "required": false,
4614
+ "schema": {
4615
+ "default": "all",
4616
+ "enum": ["live", "ended", "all"],
4617
+ "type": "string"
4618
+ }
4619
+ },
4620
+ {
4621
+ "in": "query",
4622
+ "name": "snapshotId",
4623
+ "required": false,
4624
+ "schema": {
4625
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4626
+ "type": "string"
4627
+ }
4628
+ },
4629
+ {
4630
+ "in": "query",
4631
+ "name": "search",
4632
+ "required": false,
4633
+ "schema": {
4634
+ "maxLength": 120,
4635
+ "type": "string"
4636
+ }
4637
+ },
4638
+ {
4639
+ "in": "query",
4640
+ "name": "label",
4641
+ "required": false,
4642
+ "schema": {
4643
+ "anyOf": [
4644
+ {
4645
+ "maxLength": 320,
4646
+ "type": "string"
4647
+ },
4648
+ {
4649
+ "items": {
4650
+ "maxLength": 320,
4651
+ "type": "string"
4652
+ },
4653
+ "maxItems": 32,
4654
+ "type": "array"
4655
+ }
4656
+ ]
4657
+ }
4658
+ }
4659
+ ],
4660
+ "responses": {
4661
+ "200": {
4662
+ "content": {
4663
+ "application/json": {
4664
+ "schema": {
4665
+ "properties": {
4666
+ "data": {
4667
+ "items": {
4668
+ "$ref": "#/components/schemas/Environment"
2568
4669
  },
2569
- "version": {
2570
- "default": 1,
2571
- "enum": [1],
2572
- "type": "number"
2573
- }
4670
+ "type": "array"
2574
4671
  },
2575
- "required": ["from"],
2576
- "type": "object"
2577
- }
2578
- ]
4672
+ "nextCursor": {
4673
+ "type": ["string", "null"]
4674
+ }
4675
+ },
4676
+ "required": ["data", "nextCursor"],
4677
+ "type": "object"
4678
+ }
4679
+ }
4680
+ },
4681
+ "description": "The workspace's environments, newest first"
4682
+ },
4683
+ "400": {
4684
+ "content": {
4685
+ "application/json": {
4686
+ "schema": {
4687
+ "$ref": "#/components/schemas/ErrorResponse"
4688
+ }
4689
+ }
4690
+ },
4691
+ "description": "Invalid request"
4692
+ },
4693
+ "401": {
4694
+ "content": {
4695
+ "application/json": {
4696
+ "schema": {
4697
+ "$ref": "#/components/schemas/ErrorResponse"
4698
+ }
4699
+ }
4700
+ },
4701
+ "description": "Authentication required"
4702
+ },
4703
+ "403": {
4704
+ "content": {
4705
+ "application/json": {
4706
+ "schema": {
4707
+ "$ref": "#/components/schemas/ErrorResponse"
4708
+ }
4709
+ }
4710
+ },
4711
+ "description": "Permission denied"
4712
+ },
4713
+ "404": {
4714
+ "content": {
4715
+ "application/json": {
4716
+ "schema": {
4717
+ "$ref": "#/components/schemas/ErrorResponse"
4718
+ }
4719
+ }
4720
+ },
4721
+ "description": "Resource not found"
4722
+ },
4723
+ "409": {
4724
+ "content": {
4725
+ "application/json": {
4726
+ "schema": {
4727
+ "$ref": "#/components/schemas/ErrorResponse"
4728
+ }
4729
+ }
4730
+ },
4731
+ "description": "Conflicting request or version"
4732
+ },
4733
+ "413": {
4734
+ "content": {
4735
+ "application/json": {
4736
+ "schema": {
4737
+ "$ref": "#/components/schemas/ErrorResponse"
4738
+ }
4739
+ }
4740
+ },
4741
+ "description": "Request body too large"
4742
+ },
4743
+ "422": {
4744
+ "content": {
4745
+ "application/json": {
4746
+ "schema": {
4747
+ "$ref": "#/components/schemas/ErrorResponse"
4748
+ }
4749
+ }
4750
+ },
4751
+ "description": "Unsupported configuration"
4752
+ },
4753
+ "429": {
4754
+ "content": {
4755
+ "application/json": {
4756
+ "schema": {
4757
+ "$ref": "#/components/schemas/ErrorResponse"
4758
+ }
4759
+ }
4760
+ },
4761
+ "description": "Admission limit reached"
4762
+ },
4763
+ "500": {
4764
+ "content": {
4765
+ "application/json": {
4766
+ "schema": {
4767
+ "$ref": "#/components/schemas/ErrorResponse"
4768
+ }
4769
+ }
4770
+ },
4771
+ "description": "Unexpected failure"
4772
+ },
4773
+ "503": {
4774
+ "content": {
4775
+ "application/json": {
4776
+ "schema": {
4777
+ "$ref": "#/components/schemas/ErrorResponse"
4778
+ }
4779
+ }
4780
+ },
4781
+ "description": "Dependency unavailable"
4782
+ }
4783
+ },
4784
+ "security": [
4785
+ {
4786
+ "bearerAuth": []
4787
+ }
4788
+ ],
4789
+ "x-state-credentials": ["user", "api_key"]
4790
+ },
4791
+ "post": {
4792
+ "operationId": "createEnvironments",
4793
+ "parameters": [
4794
+ {
4795
+ "in": "path",
4796
+ "name": "workspaceId",
4797
+ "required": true,
4798
+ "schema": {
4799
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
4800
+ "type": "string"
4801
+ }
4802
+ },
4803
+ {
4804
+ "in": "header",
4805
+ "name": "idempotency-key",
4806
+ "required": true,
4807
+ "schema": {
4808
+ "maxLength": 128,
4809
+ "minLength": 8,
4810
+ "pattern": "^[A-Za-z0-9._:-]+$",
4811
+ "type": "string"
4812
+ }
4813
+ }
4814
+ ],
4815
+ "requestBody": {
4816
+ "content": {
4817
+ "application/json": {
4818
+ "schema": {
4819
+ "$ref": "#/components/schemas/CreateEnvironmentInput"
2579
4820
  }
2580
4821
  }
2581
4822
  },
@@ -2588,7 +4829,10 @@
2588
4829
  "schema": {
2589
4830
  "properties": {
2590
4831
  "data": {
2591
- "$ref": "#/components/schemas/Environment"
4832
+ "items": {
4833
+ "$ref": "#/components/schemas/Environment"
4834
+ },
4835
+ "type": "array"
2592
4836
  }
2593
4837
  },
2594
4838
  "required": ["data"],
@@ -2596,7 +4840,7 @@
2596
4840
  }
2597
4841
  }
2598
4842
  },
2599
- "description": "Environment accepted from its setup definition"
4843
+ "description": "Environments accepted; each app starts in its own sandbox"
2600
4844
  },
2601
4845
  "400": {
2602
4846
  "content": {
@@ -2707,9 +4951,9 @@
2707
4951
  "x-state-credentials": ["user", "api_key"]
2708
4952
  }
2709
4953
  },
2710
- "/v1/workspaces/{workspaceId}/environments": {
4954
+ "/v1/workspaces/{workspaceId}/events": {
2711
4955
  "get": {
2712
- "operationId": "listEnvironments",
4956
+ "operationId": "listWorkspaceEvents",
2713
4957
  "parameters": [
2714
4958
  {
2715
4959
  "in": "path",
@@ -2736,49 +4980,10 @@
2736
4980
  "name": "cursor",
2737
4981
  "required": false,
2738
4982
  "schema": {
2739
- "maxLength": 2048,
2740
- "type": "string"
2741
- }
2742
- },
2743
- {
2744
- "in": "query",
2745
- "name": "status",
2746
- "required": false,
2747
- "schema": {
2748
- "default": "all",
2749
- "enum": ["live", "ended", "all"],
2750
- "type": "string"
2751
- }
2752
- },
2753
- {
2754
- "in": "query",
2755
- "name": "search",
2756
- "required": false,
2757
- "schema": {
2758
- "maxLength": 120,
4983
+ "maxLength": 64,
4984
+ "pattern": "^\\d+$",
2759
4985
  "type": "string"
2760
4986
  }
2761
- },
2762
- {
2763
- "in": "query",
2764
- "name": "label",
2765
- "required": false,
2766
- "schema": {
2767
- "anyOf": [
2768
- {
2769
- "maxLength": 320,
2770
- "type": "string"
2771
- },
2772
- {
2773
- "items": {
2774
- "maxLength": 320,
2775
- "type": "string"
2776
- },
2777
- "maxItems": 32,
2778
- "type": "array"
2779
- }
2780
- ]
2781
- }
2782
4987
  }
2783
4988
  ],
2784
4989
  "responses": {
@@ -2786,23 +4991,11 @@
2786
4991
  "content": {
2787
4992
  "application/json": {
2788
4993
  "schema": {
2789
- "properties": {
2790
- "data": {
2791
- "items": {
2792
- "$ref": "#/components/schemas/Environment"
2793
- },
2794
- "type": "array"
2795
- },
2796
- "nextCursor": {
2797
- "type": ["string", "null"]
2798
- }
2799
- },
2800
- "required": ["data", "nextCursor"],
2801
- "type": "object"
4994
+ "$ref": "#/components/schemas/EventPage"
2802
4995
  }
2803
4996
  }
2804
4997
  },
2805
- "description": "The workspace's environments, newest first"
4998
+ "description": "Workspace activity, newest first"
2806
4999
  },
2807
5000
  "400": {
2808
5001
  "content": {
@@ -2911,9 +5104,11 @@
2911
5104
  }
2912
5105
  ],
2913
5106
  "x-state-credentials": ["user", "api_key"]
2914
- },
2915
- "post": {
2916
- "operationId": "createEnvironments",
5107
+ }
5108
+ },
5109
+ "/v1/workspaces/{workspaceId}/snapshots": {
5110
+ "get": {
5111
+ "operationId": "listSnapshots",
2917
5112
  "parameters": [
2918
5113
  {
2919
5114
  "in": "path",
@@ -2925,46 +5120,57 @@
2925
5120
  }
2926
5121
  },
2927
5122
  {
2928
- "in": "header",
2929
- "name": "idempotency-key",
2930
- "required": true,
5123
+ "in": "query",
5124
+ "name": "limit",
5125
+ "required": false,
2931
5126
  "schema": {
2932
- "maxLength": 128,
2933
- "minLength": 8,
2934
- "pattern": "^[A-Za-z0-9._:-]+$",
5127
+ "default": 50,
5128
+ "maximum": 100,
5129
+ "minimum": 1,
5130
+ "type": "integer"
5131
+ }
5132
+ },
5133
+ {
5134
+ "in": "query",
5135
+ "name": "cursor",
5136
+ "required": false,
5137
+ "schema": {
5138
+ "maxLength": 2048,
5139
+ "type": "string"
5140
+ }
5141
+ },
5142
+ {
5143
+ "in": "query",
5144
+ "name": "sourceEnvironmentId",
5145
+ "required": false,
5146
+ "schema": {
5147
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
2935
5148
  "type": "string"
2936
5149
  }
2937
5150
  }
2938
5151
  ],
2939
- "requestBody": {
2940
- "content": {
2941
- "application/json": {
2942
- "schema": {
2943
- "$ref": "#/components/schemas/CreateEnvironmentInput"
2944
- }
2945
- }
2946
- },
2947
- "required": true
2948
- },
2949
5152
  "responses": {
2950
- "202": {
5153
+ "200": {
2951
5154
  "content": {
2952
5155
  "application/json": {
2953
5156
  "schema": {
2954
5157
  "properties": {
2955
5158
  "data": {
2956
5159
  "items": {
2957
- "$ref": "#/components/schemas/Environment"
5160
+ "$ref": "#/components/schemas/EnvironmentSnapshot"
2958
5161
  },
2959
5162
  "type": "array"
5163
+ },
5164
+ "nextCursor": {
5165
+ "type": ["string", "null"]
2960
5166
  }
2961
5167
  },
2962
- "required": ["data"],
5168
+ "required": ["data", "nextCursor"],
2963
5169
  "type": "object"
2964
5170
  }
2965
5171
  }
2966
5172
  },
2967
- "description": "Environments accepted; each app starts in its own sandbox"
5173
+ "description": "Workspace environment snapshots, newest first"
2968
5174
  },
2969
5175
  "400": {
2970
5176
  "content": {
@@ -3073,11 +5279,9 @@
3073
5279
  }
3074
5280
  ],
3075
5281
  "x-state-credentials": ["user", "api_key"]
3076
- }
3077
- },
3078
- "/v1/workspaces/{workspaceId}/events": {
3079
- "get": {
3080
- "operationId": "listWorkspaceEvents",
5282
+ },
5283
+ "post": {
5284
+ "operationId": "captureSnapshot",
3081
5285
  "parameters": [
3082
5286
  {
3083
5287
  "in": "path",
@@ -3089,37 +5293,64 @@
3089
5293
  }
3090
5294
  },
3091
5295
  {
3092
- "in": "query",
3093
- "name": "limit",
3094
- "required": false,
3095
- "schema": {
3096
- "default": 50,
3097
- "maximum": 100,
3098
- "minimum": 1,
3099
- "type": "integer"
3100
- }
3101
- },
3102
- {
3103
- "in": "query",
3104
- "name": "cursor",
3105
- "required": false,
5296
+ "in": "header",
5297
+ "name": "idempotency-key",
5298
+ "required": true,
3106
5299
  "schema": {
3107
- "maxLength": 64,
3108
- "pattern": "^\\d+$",
5300
+ "maxLength": 128,
5301
+ "minLength": 8,
5302
+ "pattern": "^[A-Za-z0-9._:-]+$",
3109
5303
  "type": "string"
3110
5304
  }
3111
5305
  }
3112
5306
  ],
5307
+ "requestBody": {
5308
+ "content": {
5309
+ "application/json": {
5310
+ "schema": {
5311
+ "properties": {
5312
+ "appInstanceKeys": {
5313
+ "items": {
5314
+ "pattern": "^[a-z][a-z0-9-]{0,39}$",
5315
+ "type": "string"
5316
+ },
5317
+ "maxItems": 10,
5318
+ "minItems": 1,
5319
+ "type": "array"
5320
+ },
5321
+ "environmentId": {
5322
+ "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
5323
+ "type": "string"
5324
+ },
5325
+ "name": {
5326
+ "maxLength": 120,
5327
+ "minLength": 1,
5328
+ "type": "string"
5329
+ }
5330
+ },
5331
+ "required": ["environmentId"],
5332
+ "type": "object"
5333
+ }
5334
+ }
5335
+ },
5336
+ "required": true
5337
+ },
3113
5338
  "responses": {
3114
- "200": {
5339
+ "202": {
3115
5340
  "content": {
3116
5341
  "application/json": {
3117
5342
  "schema": {
3118
- "$ref": "#/components/schemas/EventPage"
5343
+ "properties": {
5344
+ "data": {
5345
+ "$ref": "#/components/schemas/EnvironmentSnapshot"
5346
+ }
5347
+ },
5348
+ "required": ["data"],
5349
+ "type": "object"
3119
5350
  }
3120
5351
  }
3121
5352
  },
3122
- "description": "Workspace activity, newest first"
5353
+ "description": "Environment snapshot capture accepted"
3123
5354
  },
3124
5355
  "400": {
3125
5356
  "content": {