@mastra/factory 0.21.1-alpha.3 → 0.22.0-alpha.4

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 (174) hide show
  1. package/dist/capabilities/version-control.d.ts +13 -8
  2. package/dist/capabilities/version-control.d.ts.map +1 -1
  3. package/dist/environment/build-runner.d.ts +72 -0
  4. package/dist/environment/build-runner.d.ts.map +1 -0
  5. package/dist/environment/build-runner.js +131 -0
  6. package/dist/environment/build-runner.js.map +1 -0
  7. package/dist/environment/build-schedule.d.ts +40 -0
  8. package/dist/environment/build-schedule.d.ts.map +1 -0
  9. package/dist/environment/build-schedule.js +94 -0
  10. package/dist/environment/build-schedule.js.map +1 -0
  11. package/dist/environment/build-workflow.d.ts +62 -0
  12. package/dist/environment/build-workflow.d.ts.map +1 -0
  13. package/dist/environment/build-workflow.js +149 -0
  14. package/dist/environment/build-workflow.js.map +1 -0
  15. package/dist/environment/build.d.ts +111 -0
  16. package/dist/environment/build.d.ts.map +1 -0
  17. package/dist/environment/build.js +344 -0
  18. package/dist/environment/build.js.map +1 -0
  19. package/dist/environment/heads.d.ts +36 -0
  20. package/dist/environment/heads.d.ts.map +1 -0
  21. package/dist/environment/heads.js +60 -0
  22. package/dist/environment/heads.js.map +1 -0
  23. package/dist/factory.d.ts +18 -4
  24. package/dist/factory.d.ts.map +1 -1
  25. package/dist/factory.js +89 -15
  26. package/dist/factory.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +3 -2
  30. package/dist/integrations/base.d.ts +17 -2
  31. package/dist/integrations/base.d.ts.map +1 -1
  32. package/dist/integrations/github/commits.d.ts +11 -0
  33. package/dist/integrations/github/commits.d.ts.map +1 -1
  34. package/dist/integrations/github/commits.js +20 -1
  35. package/dist/integrations/github/commits.js.map +1 -1
  36. package/dist/integrations/github/config.d.ts +3 -3
  37. package/dist/integrations/github/config.d.ts.map +1 -1
  38. package/dist/integrations/github/config.js +1 -1
  39. package/dist/integrations/github/config.js.map +1 -1
  40. package/dist/integrations/github/routes.d.ts +2 -2
  41. package/dist/integrations/github/routes.d.ts.map +1 -1
  42. package/dist/integrations/github/routes.js +6 -5
  43. package/dist/integrations/github/routes.js.map +1 -1
  44. package/dist/integrations/github/rules.d.ts +3 -1
  45. package/dist/integrations/github/rules.d.ts.map +1 -1
  46. package/dist/integrations/github/rules.js +31 -1
  47. package/dist/integrations/github/rules.js.map +1 -1
  48. package/dist/integrations/github/sandbox.d.ts +35 -0
  49. package/dist/integrations/github/sandbox.d.ts.map +1 -1
  50. package/dist/integrations/github/sandbox.js +203 -2
  51. package/dist/integrations/github/sandbox.js.map +1 -1
  52. package/dist/integrations/github/session-subscriptions.d.ts.map +1 -1
  53. package/dist/integrations/github/session-subscriptions.js +117 -62
  54. package/dist/integrations/github/session-subscriptions.js.map +1 -1
  55. package/dist/integrations/github/token-refresh.d.ts +7 -0
  56. package/dist/integrations/github/token-refresh.d.ts.map +1 -1
  57. package/dist/integrations/github/token-refresh.js.map +1 -1
  58. package/dist/integrations/github/webhook.js.map +1 -1
  59. package/dist/integrations/gitlab/agent-tools.js +1 -1
  60. package/dist/integrations/gitlab/routes.d.ts +2 -2
  61. package/dist/integrations/gitlab/routes.d.ts.map +1 -1
  62. package/dist/integrations/gitlab/routes.js.map +1 -1
  63. package/dist/integrations/gitlab/session-subscriptions.d.ts.map +1 -1
  64. package/dist/integrations/gitlab/session-subscriptions.js +8 -7
  65. package/dist/integrations/gitlab/session-subscriptions.js.map +1 -1
  66. package/dist/integrations/incidentio/agent-tools.js +1 -1
  67. package/dist/integrations/jira/agent-tools.js +1 -1
  68. package/dist/integrations/linear/agent-tools.js +1 -1
  69. package/dist/integrations/platform/github/integration.d.ts.map +1 -1
  70. package/dist/integrations/platform/github/integration.js +46 -2
  71. package/dist/integrations/platform/github/integration.js.map +1 -1
  72. package/dist/integrations/platform/jira/agent-tools.js +1 -1
  73. package/dist/integrations/slack/slack.d.ts.map +1 -1
  74. package/dist/integrations/slack/slack.js +15 -16
  75. package/dist/integrations/slack/slack.js.map +1 -1
  76. package/dist/integrations/subscription-session.js +1 -1
  77. package/dist/packages/_internals/workspace/dist/index.js +21 -1
  78. package/dist/packages/_internals/workspace/dist/index.js.map +1 -1
  79. package/dist/routes/contracts.d.ts +386 -2
  80. package/dist/routes/contracts.d.ts.map +1 -1
  81. package/dist/routes/contracts.js +166 -1
  82. package/dist/routes/contracts.js.map +1 -1
  83. package/dist/routes/fs.d.ts +25 -0
  84. package/dist/routes/fs.d.ts.map +1 -1
  85. package/dist/routes/fs.js +142 -46
  86. package/dist/routes/fs.js.map +1 -1
  87. package/dist/routes/projects.d.ts +6 -0
  88. package/dist/routes/projects.d.ts.map +1 -1
  89. package/dist/routes/projects.js +344 -1
  90. package/dist/routes/projects.js.map +1 -1
  91. package/dist/routes/source-control-sessions.d.ts +2 -0
  92. package/dist/routes/source-control-sessions.d.ts.map +1 -1
  93. package/dist/routes/source-control-sessions.js +36 -1
  94. package/dist/routes/source-control-sessions.js.map +1 -1
  95. package/dist/routes/supervisor.js +1 -1
  96. package/dist/routes/surface.d.ts +6 -3
  97. package/dist/routes/surface.d.ts.map +1 -1
  98. package/dist/routes/surface.js +21 -34
  99. package/dist/routes/surface.js.map +1 -1
  100. package/dist/rules/binding-context.d.ts +1 -1
  101. package/dist/rules/binding-context.d.ts.map +1 -1
  102. package/dist/rules/binding-context.js +1 -1
  103. package/dist/rules/binding-context.js.map +1 -1
  104. package/dist/rules/review-source-tool.js +1 -1
  105. package/dist/rules/start-coordinator.d.ts.map +1 -1
  106. package/dist/rules/start-coordinator.js +7 -2
  107. package/dist/rules/start-coordinator.js.map +1 -1
  108. package/dist/rules/tools.js +1 -1
  109. package/dist/sandbox/callback-factory-sandbox.d.ts +15 -0
  110. package/dist/sandbox/callback-factory-sandbox.d.ts.map +1 -0
  111. package/dist/sandbox/callback-factory-sandbox.js +22 -0
  112. package/dist/sandbox/callback-factory-sandbox.js.map +1 -0
  113. package/dist/sandbox/local-factory-sandbox.d.ts +20 -0
  114. package/dist/sandbox/local-factory-sandbox.d.ts.map +1 -0
  115. package/dist/sandbox/local-factory-sandbox.js +27 -0
  116. package/dist/sandbox/local-factory-sandbox.js.map +1 -0
  117. package/dist/sandbox/session-retirement.d.ts.map +1 -1
  118. package/dist/sandbox/session-retirement.js +23 -3
  119. package/dist/sandbox/session-retirement.js.map +1 -1
  120. package/dist/sandbox/session-sandbox.d.ts +82 -40
  121. package/dist/sandbox/session-sandbox.d.ts.map +1 -1
  122. package/dist/sandbox/session-sandbox.js +130 -13
  123. package/dist/sandbox/session-sandbox.js.map +1 -1
  124. package/dist/sandbox/workdir.d.ts +10 -0
  125. package/dist/sandbox/workdir.d.ts.map +1 -1
  126. package/dist/sandbox/workdir.js +10 -1
  127. package/dist/sandbox/workdir.js.map +1 -1
  128. package/dist/session/environment-repositories.d.ts +31 -0
  129. package/dist/session/environment-repositories.d.ts.map +1 -0
  130. package/dist/session/environment-repositories.js +89 -0
  131. package/dist/session/environment-repositories.js.map +1 -0
  132. package/dist/session/environment-state-processor.d.ts +59 -0
  133. package/dist/session/environment-state-processor.d.ts.map +1 -0
  134. package/dist/session/environment-state-processor.js +105 -0
  135. package/dist/session/environment-state-processor.js.map +1 -0
  136. package/dist/session/factory-session.d.ts +26 -35
  137. package/dist/session/factory-session.d.ts.map +1 -1
  138. package/dist/session/factory-session.js +34 -71
  139. package/dist/session/factory-session.js.map +1 -1
  140. package/dist/session/filesystem-capture.d.ts +13 -0
  141. package/dist/session/filesystem-capture.d.ts.map +1 -1
  142. package/dist/session/filesystem-capture.js +73 -14
  143. package/dist/session/filesystem-capture.js.map +1 -1
  144. package/dist/session/source-control-tools.d.ts +1 -1
  145. package/dist/session/source-control-tools.d.ts.map +1 -1
  146. package/dist/session/source-control-tools.js +144 -71
  147. package/dist/session/source-control-tools.js.map +1 -1
  148. package/dist/spa-static.js +2 -2
  149. package/dist/storage/domains/audit/agent-audit.d.ts +6 -1
  150. package/dist/storage/domains/audit/agent-audit.d.ts.map +1 -1
  151. package/dist/storage/domains/audit/agent-audit.js +31 -13
  152. package/dist/storage/domains/audit/agent-audit.js.map +1 -1
  153. package/dist/storage/domains/projects/base.d.ts +115 -2
  154. package/dist/storage/domains/projects/base.d.ts.map +1 -1
  155. package/dist/storage/domains/projects/base.js +219 -12
  156. package/dist/storage/domains/projects/base.js.map +1 -1
  157. package/dist/storage/domains/source-control/base.d.ts +123 -7
  158. package/dist/storage/domains/source-control/base.d.ts.map +1 -1
  159. package/dist/storage/domains/source-control/base.js +406 -33
  160. package/dist/storage/domains/source-control/base.js.map +1 -1
  161. package/dist/storage/domains/source-control/inmemory.d.ts +19 -6
  162. package/dist/storage/domains/source-control/inmemory.d.ts.map +1 -1
  163. package/dist/storage/domains/source-control/inmemory.js +90 -2
  164. package/dist/storage/domains/source-control/inmemory.js.map +1 -1
  165. package/dist/storage/domains/work-items/base.d.ts.map +1 -1
  166. package/dist/storage/domains/work-items/base.js +12 -5
  167. package/dist/storage/domains/work-items/base.js.map +1 -1
  168. package/dist/supervisor/read-tools.js +1 -1
  169. package/dist/supervisor/write-tools.js +1 -1
  170. package/dist/workspace.d.ts +50 -7
  171. package/dist/workspace.d.ts.map +1 -1
  172. package/dist/workspace.js +344 -24
  173. package/dist/workspace.js.map +1 -1
  174. package/package.json +7 -7
@@ -25,6 +25,173 @@ export declare const updateProjectBodySchema: z.ZodObject<{
25
25
  autoRunEnabled: z.ZodOptional<z.ZodBoolean>;
26
26
  autoApprovePlans: z.ZodOptional<z.ZodBoolean>;
27
27
  }, z.core.$strip>;
28
+ /** The configured FactorySandbox as factory describes it: provider id, JSON Schema of its settings, capabilities. */
29
+ export declare const environmentSandboxSchema: z.ZodObject<{
30
+ provider: z.ZodString;
31
+ settingsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
32
+ capabilities: z.ZodObject<{
33
+ template: z.ZodBoolean;
34
+ builds: z.ZodObject<{
35
+ available: z.ZodBoolean;
36
+ history: z.ZodBoolean;
37
+ }, z.core.$strip>;
38
+ }, z.core.$strip>;
39
+ }, z.core.$strip>;
40
+ /** When the environment builds on its own; present only when the sandbox can build. */
41
+ export declare const environmentBuildTriggersSchema: z.ZodObject<{
42
+ schedule: z.ZodObject<{
43
+ enabled: z.ZodBoolean;
44
+ cron: z.ZodNullable<z.ZodString>;
45
+ timezone: z.ZodNullable<z.ZodString>;
46
+ scheduleAvailable: z.ZodBoolean;
47
+ }, z.core.$strip>;
48
+ push: z.ZodObject<{
49
+ enabled: z.ZodBoolean;
50
+ debounceMinutes: z.ZodNumber;
51
+ }, z.core.$strip>;
52
+ }, z.core.$strip>;
53
+ /** The last build factory asked the provider for, from the project row only; status is read live. */
54
+ export declare const environmentLastBuildSchema: z.ZodObject<{
55
+ buildId: z.ZodString;
56
+ attemptedAt: z.ZodNullable<z.ZodString>;
57
+ }, z.core.$strip>;
58
+ export declare const projectEnvironmentResponseSchema: z.ZodObject<{
59
+ environment: z.ZodObject<{
60
+ sandbox: z.ZodObject<{
61
+ provider: z.ZodString;
62
+ settingsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
63
+ capabilities: z.ZodObject<{
64
+ template: z.ZodBoolean;
65
+ builds: z.ZodObject<{
66
+ available: z.ZodBoolean;
67
+ history: z.ZodBoolean;
68
+ }, z.core.$strip>;
69
+ }, z.core.$strip>;
70
+ }, z.core.$strip>;
71
+ settings: z.ZodRecord<z.ZodString, z.ZodUnknown>;
72
+ sandboxWorkingDirectory: z.ZodNullable<z.ZodString>;
73
+ workspaceSetupCommand: z.ZodNullable<z.ZodString>;
74
+ activeTemplateId: z.ZodNullable<z.ZodString>;
75
+ activeTemplateHeads: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
76
+ repositories: z.ZodArray<z.ZodObject<{
77
+ projectRepositoryId: z.ZodString;
78
+ connectionId: z.ZodString;
79
+ repositoryId: z.ZodString;
80
+ slug: z.ZodNullable<z.ZodString>;
81
+ defaultBranch: z.ZodNullable<z.ZodString>;
82
+ position: z.ZodNumber;
83
+ inEnvironment: z.ZodBoolean;
84
+ setupCommand: z.ZodNullable<z.ZodString>;
85
+ teardownCommand: z.ZodNullable<z.ZodString>;
86
+ lastBuildStatus: z.ZodEnum<{
87
+ unbuilt: "unbuilt";
88
+ configured: "configured";
89
+ failed: "failed";
90
+ }>;
91
+ lastBuildError: z.ZodNullable<z.ZodString>;
92
+ lastBuiltAt: z.ZodNullable<z.ZodString>;
93
+ }, z.core.$strip>>;
94
+ buildTriggers: z.ZodOptional<z.ZodObject<{
95
+ schedule: z.ZodObject<{
96
+ enabled: z.ZodBoolean;
97
+ cron: z.ZodNullable<z.ZodString>;
98
+ timezone: z.ZodNullable<z.ZodString>;
99
+ scheduleAvailable: z.ZodBoolean;
100
+ }, z.core.$strip>;
101
+ push: z.ZodObject<{
102
+ enabled: z.ZodBoolean;
103
+ debounceMinutes: z.ZodNumber;
104
+ }, z.core.$strip>;
105
+ }, z.core.$strip>>;
106
+ build: z.ZodOptional<z.ZodNullable<z.ZodObject<{
107
+ buildId: z.ZodString;
108
+ attemptedAt: z.ZodNullable<z.ZodString>;
109
+ }, z.core.$strip>>>;
110
+ }, z.core.$strip>;
111
+ }, z.core.$strip>;
112
+ export declare const environmentBuildStartResponseSchema: z.ZodObject<{
113
+ outcome: z.ZodEnum<{
114
+ started: "started";
115
+ failed: "failed";
116
+ skipped: "skipped";
117
+ unavailable: "unavailable";
118
+ }>;
119
+ buildId: z.ZodOptional<z.ZodString>;
120
+ templateId: z.ZodOptional<z.ZodString>;
121
+ reason: z.ZodOptional<z.ZodString>;
122
+ }, z.core.$strip>;
123
+ export declare const environmentBuildSchema: z.ZodObject<{
124
+ buildId: z.ZodString;
125
+ status: z.ZodEnum<{
126
+ unknown: "unknown";
127
+ failed: "failed";
128
+ pending: "pending";
129
+ ready: "ready";
130
+ building: "building";
131
+ }>;
132
+ templateId: z.ZodOptional<z.ZodString>;
133
+ startedAt: z.ZodOptional<z.ZodString>;
134
+ finishedAt: z.ZodOptional<z.ZodString>;
135
+ error: z.ZodOptional<z.ZodString>;
136
+ logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
137
+ }, z.core.$strip>;
138
+ export declare const environmentBuildsResponseSchema: z.ZodObject<{
139
+ builds: z.ZodArray<z.ZodObject<{
140
+ buildId: z.ZodString;
141
+ status: z.ZodEnum<{
142
+ unknown: "unknown";
143
+ failed: "failed";
144
+ pending: "pending";
145
+ ready: "ready";
146
+ building: "building";
147
+ }>;
148
+ templateId: z.ZodOptional<z.ZodString>;
149
+ startedAt: z.ZodOptional<z.ZodString>;
150
+ finishedAt: z.ZodOptional<z.ZodString>;
151
+ error: z.ZodOptional<z.ZodString>;
152
+ logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
153
+ }, z.core.$strip>>;
154
+ }, z.core.$strip>;
155
+ export declare const environmentBuildResponseSchema: z.ZodObject<{
156
+ build: z.ZodObject<{
157
+ buildId: z.ZodString;
158
+ status: z.ZodEnum<{
159
+ unknown: "unknown";
160
+ failed: "failed";
161
+ pending: "pending";
162
+ ready: "ready";
163
+ building: "building";
164
+ }>;
165
+ templateId: z.ZodOptional<z.ZodString>;
166
+ startedAt: z.ZodOptional<z.ZodString>;
167
+ finishedAt: z.ZodOptional<z.ZodString>;
168
+ error: z.ZodOptional<z.ZodString>;
169
+ logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
170
+ }, z.core.$strip>;
171
+ }, z.core.$strip>;
172
+ export declare const updateProjectEnvironmentBodySchema: z.ZodObject<{
173
+ sandboxWorkingDirectory: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
174
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodUnknown>>>;
175
+ workspaceSetupCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
176
+ buildTriggers: z.ZodOptional<z.ZodObject<{
177
+ schedule: z.ZodOptional<z.ZodObject<{
178
+ enabled: z.ZodBoolean;
179
+ cron: z.ZodOptional<z.ZodString>;
180
+ timezone: z.ZodOptional<z.ZodString>;
181
+ }, z.core.$strip>>;
182
+ push: z.ZodOptional<z.ZodObject<{
183
+ enabled: z.ZodOptional<z.ZodBoolean>;
184
+ debounceMinutes: z.ZodOptional<z.ZodNumber>;
185
+ }, z.core.$strip>>;
186
+ }, z.core.$strip>>;
187
+ repositories: z.ZodOptional<z.ZodArray<z.ZodObject<{
188
+ projectRepositoryId: z.ZodString;
189
+ position: z.ZodOptional<z.ZodNumber>;
190
+ inEnvironment: z.ZodOptional<z.ZodBoolean>;
191
+ setupCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
192
+ teardownCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
193
+ }, z.core.$strip>>>;
194
+ }, z.core.$strip>;
28
195
  export declare const createWorkItemBodySchema: z.ZodObject<{
29
196
  title: z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>, z.ZodString>;
30
197
  board: z.ZodOptional<z.ZodString>;
@@ -128,7 +295,7 @@ export declare const metricsQuerySchema: z.ZodObject<{
128
295
  to: z.ZodOptional<z.ZodString>;
129
296
  }, z.core.$strip>;
130
297
  export declare const decisionQuerySchema: z.ZodObject<{
131
- statuses: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<("dismissed" | "retry" | "pending" | "proposed" | "superseded" | "leased" | "succeeded" | "failed")[] | undefined, string | undefined>>;
298
+ statuses: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<("dismissed" | "retry" | "failed" | "pending" | "proposed" | "superseded" | "leased" | "succeeded")[] | undefined, string | undefined>>;
132
299
  before: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<{
133
300
  createdAt: Date;
134
301
  id: string;
@@ -212,6 +379,223 @@ export declare const FACTORY_ROUTE_CONTRACTS: {
212
379
  project: z.ZodRecord<z.ZodString, z.ZodUnknown>;
213
380
  }, z.core.$strip>;
214
381
  };
382
+ readonly projectEnvironmentGet: {
383
+ readonly method: "GET";
384
+ readonly path: "/web/factory/projects/:id/environment";
385
+ readonly description: "Get the sandbox environment of a Factory project: provider settings and its repositories in order";
386
+ readonly pathSchema: z.ZodObject<{
387
+ id: z.ZodString;
388
+ }, z.core.$strip>;
389
+ readonly responseSchema: z.ZodObject<{
390
+ environment: z.ZodObject<{
391
+ sandbox: z.ZodObject<{
392
+ provider: z.ZodString;
393
+ settingsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
394
+ capabilities: z.ZodObject<{
395
+ template: z.ZodBoolean;
396
+ builds: z.ZodObject<{
397
+ available: z.ZodBoolean;
398
+ history: z.ZodBoolean;
399
+ }, z.core.$strip>;
400
+ }, z.core.$strip>;
401
+ }, z.core.$strip>;
402
+ settings: z.ZodRecord<z.ZodString, z.ZodUnknown>;
403
+ sandboxWorkingDirectory: z.ZodNullable<z.ZodString>;
404
+ workspaceSetupCommand: z.ZodNullable<z.ZodString>;
405
+ activeTemplateId: z.ZodNullable<z.ZodString>;
406
+ activeTemplateHeads: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
407
+ repositories: z.ZodArray<z.ZodObject<{
408
+ projectRepositoryId: z.ZodString;
409
+ connectionId: z.ZodString;
410
+ repositoryId: z.ZodString;
411
+ slug: z.ZodNullable<z.ZodString>;
412
+ defaultBranch: z.ZodNullable<z.ZodString>;
413
+ position: z.ZodNumber;
414
+ inEnvironment: z.ZodBoolean;
415
+ setupCommand: z.ZodNullable<z.ZodString>;
416
+ teardownCommand: z.ZodNullable<z.ZodString>;
417
+ lastBuildStatus: z.ZodEnum<{
418
+ unbuilt: "unbuilt";
419
+ configured: "configured";
420
+ failed: "failed";
421
+ }>;
422
+ lastBuildError: z.ZodNullable<z.ZodString>;
423
+ lastBuiltAt: z.ZodNullable<z.ZodString>;
424
+ }, z.core.$strip>>;
425
+ buildTriggers: z.ZodOptional<z.ZodObject<{
426
+ schedule: z.ZodObject<{
427
+ enabled: z.ZodBoolean;
428
+ cron: z.ZodNullable<z.ZodString>;
429
+ timezone: z.ZodNullable<z.ZodString>;
430
+ scheduleAvailable: z.ZodBoolean;
431
+ }, z.core.$strip>;
432
+ push: z.ZodObject<{
433
+ enabled: z.ZodBoolean;
434
+ debounceMinutes: z.ZodNumber;
435
+ }, z.core.$strip>;
436
+ }, z.core.$strip>>;
437
+ build: z.ZodOptional<z.ZodNullable<z.ZodObject<{
438
+ buildId: z.ZodString;
439
+ attemptedAt: z.ZodNullable<z.ZodString>;
440
+ }, z.core.$strip>>>;
441
+ }, z.core.$strip>;
442
+ }, z.core.$strip>;
443
+ };
444
+ readonly projectEnvironmentUpdate: {
445
+ readonly method: "PATCH";
446
+ readonly path: "/web/factory/projects/:id/environment";
447
+ readonly description: "Update the sandbox environment of a Factory project: provider settings, repository order and setup";
448
+ readonly pathSchema: z.ZodObject<{
449
+ id: z.ZodString;
450
+ }, z.core.$strip>;
451
+ readonly bodySchema: z.ZodObject<{
452
+ sandboxWorkingDirectory: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
453
+ settings: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodNullable<z.ZodUnknown>>>;
454
+ workspaceSetupCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
455
+ buildTriggers: z.ZodOptional<z.ZodObject<{
456
+ schedule: z.ZodOptional<z.ZodObject<{
457
+ enabled: z.ZodBoolean;
458
+ cron: z.ZodOptional<z.ZodString>;
459
+ timezone: z.ZodOptional<z.ZodString>;
460
+ }, z.core.$strip>>;
461
+ push: z.ZodOptional<z.ZodObject<{
462
+ enabled: z.ZodOptional<z.ZodBoolean>;
463
+ debounceMinutes: z.ZodOptional<z.ZodNumber>;
464
+ }, z.core.$strip>>;
465
+ }, z.core.$strip>>;
466
+ repositories: z.ZodOptional<z.ZodArray<z.ZodObject<{
467
+ projectRepositoryId: z.ZodString;
468
+ position: z.ZodOptional<z.ZodNumber>;
469
+ inEnvironment: z.ZodOptional<z.ZodBoolean>;
470
+ setupCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
471
+ teardownCommand: z.ZodOptional<z.ZodUnion<readonly [z.ZodPipe<z.ZodString, z.ZodTransform<string | null, string>>, z.ZodNull]>>;
472
+ }, z.core.$strip>>>;
473
+ }, z.core.$strip>;
474
+ readonly responseSchema: z.ZodObject<{
475
+ environment: z.ZodObject<{
476
+ sandbox: z.ZodObject<{
477
+ provider: z.ZodString;
478
+ settingsSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
479
+ capabilities: z.ZodObject<{
480
+ template: z.ZodBoolean;
481
+ builds: z.ZodObject<{
482
+ available: z.ZodBoolean;
483
+ history: z.ZodBoolean;
484
+ }, z.core.$strip>;
485
+ }, z.core.$strip>;
486
+ }, z.core.$strip>;
487
+ settings: z.ZodRecord<z.ZodString, z.ZodUnknown>;
488
+ sandboxWorkingDirectory: z.ZodNullable<z.ZodString>;
489
+ workspaceSetupCommand: z.ZodNullable<z.ZodString>;
490
+ activeTemplateId: z.ZodNullable<z.ZodString>;
491
+ activeTemplateHeads: z.ZodNullable<z.ZodRecord<z.ZodString, z.ZodString>>;
492
+ repositories: z.ZodArray<z.ZodObject<{
493
+ projectRepositoryId: z.ZodString;
494
+ connectionId: z.ZodString;
495
+ repositoryId: z.ZodString;
496
+ slug: z.ZodNullable<z.ZodString>;
497
+ defaultBranch: z.ZodNullable<z.ZodString>;
498
+ position: z.ZodNumber;
499
+ inEnvironment: z.ZodBoolean;
500
+ setupCommand: z.ZodNullable<z.ZodString>;
501
+ teardownCommand: z.ZodNullable<z.ZodString>;
502
+ lastBuildStatus: z.ZodEnum<{
503
+ unbuilt: "unbuilt";
504
+ configured: "configured";
505
+ failed: "failed";
506
+ }>;
507
+ lastBuildError: z.ZodNullable<z.ZodString>;
508
+ lastBuiltAt: z.ZodNullable<z.ZodString>;
509
+ }, z.core.$strip>>;
510
+ buildTriggers: z.ZodOptional<z.ZodObject<{
511
+ schedule: z.ZodObject<{
512
+ enabled: z.ZodBoolean;
513
+ cron: z.ZodNullable<z.ZodString>;
514
+ timezone: z.ZodNullable<z.ZodString>;
515
+ scheduleAvailable: z.ZodBoolean;
516
+ }, z.core.$strip>;
517
+ push: z.ZodObject<{
518
+ enabled: z.ZodBoolean;
519
+ debounceMinutes: z.ZodNumber;
520
+ }, z.core.$strip>;
521
+ }, z.core.$strip>>;
522
+ build: z.ZodOptional<z.ZodNullable<z.ZodObject<{
523
+ buildId: z.ZodString;
524
+ attemptedAt: z.ZodNullable<z.ZodString>;
525
+ }, z.core.$strip>>>;
526
+ }, z.core.$strip>;
527
+ }, z.core.$strip>;
528
+ };
529
+ readonly projectEnvironmentBuild: {
530
+ readonly method: "POST";
531
+ readonly path: "/web/factory/projects/:id/environment/build";
532
+ readonly description: "Build the sandbox environment template of a Factory project now";
533
+ readonly pathSchema: z.ZodObject<{
534
+ id: z.ZodString;
535
+ }, z.core.$strip>;
536
+ readonly responseSchema: z.ZodObject<{
537
+ outcome: z.ZodEnum<{
538
+ started: "started";
539
+ failed: "failed";
540
+ skipped: "skipped";
541
+ unavailable: "unavailable";
542
+ }>;
543
+ buildId: z.ZodOptional<z.ZodString>;
544
+ templateId: z.ZodOptional<z.ZodString>;
545
+ reason: z.ZodOptional<z.ZodString>;
546
+ }, z.core.$strip>;
547
+ };
548
+ readonly projectEnvironmentBuilds: {
549
+ readonly method: "GET";
550
+ readonly path: "/web/factory/projects/:id/environment/builds";
551
+ readonly description: "List the environment template builds of a Factory project, newest first, when the provider keeps history";
552
+ readonly pathSchema: z.ZodObject<{
553
+ id: z.ZodString;
554
+ }, z.core.$strip>;
555
+ readonly responseSchema: z.ZodObject<{
556
+ builds: z.ZodArray<z.ZodObject<{
557
+ buildId: z.ZodString;
558
+ status: z.ZodEnum<{
559
+ unknown: "unknown";
560
+ failed: "failed";
561
+ pending: "pending";
562
+ ready: "ready";
563
+ building: "building";
564
+ }>;
565
+ templateId: z.ZodOptional<z.ZodString>;
566
+ startedAt: z.ZodOptional<z.ZodString>;
567
+ finishedAt: z.ZodOptional<z.ZodString>;
568
+ error: z.ZodOptional<z.ZodString>;
569
+ logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
570
+ }, z.core.$strip>>;
571
+ }, z.core.$strip>;
572
+ };
573
+ readonly projectEnvironmentBuildGet: {
574
+ readonly method: "GET";
575
+ readonly path: "/web/factory/projects/:id/environment/builds/:buildId";
576
+ readonly description: "Get the live status of one environment template build of a Factory project";
577
+ readonly pathSchema: z.ZodObject<{
578
+ id: z.ZodString;
579
+ buildId: z.ZodString;
580
+ }, z.core.$strip>;
581
+ readonly responseSchema: z.ZodObject<{
582
+ build: z.ZodObject<{
583
+ buildId: z.ZodString;
584
+ status: z.ZodEnum<{
585
+ unknown: "unknown";
586
+ failed: "failed";
587
+ pending: "pending";
588
+ ready: "ready";
589
+ building: "building";
590
+ }>;
591
+ templateId: z.ZodOptional<z.ZodString>;
592
+ startedAt: z.ZodOptional<z.ZodString>;
593
+ finishedAt: z.ZodOptional<z.ZodString>;
594
+ error: z.ZodOptional<z.ZodString>;
595
+ logs: z.ZodOptional<z.ZodArray<z.ZodString>>;
596
+ }, z.core.$strip>;
597
+ }, z.core.$strip>;
598
+ };
215
599
  readonly projectApplyDefaultModel: {
216
600
  readonly method: "POST";
217
601
  readonly path: "/web/factory/projects/:id/apply-default-model";
@@ -480,7 +864,7 @@ export declare const FACTORY_ROUTE_CONTRACTS: {
480
864
  id: z.ZodString;
481
865
  }, z.core.$strip>;
482
866
  readonly querySchema: z.ZodObject<{
483
- statuses: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<("dismissed" | "retry" | "pending" | "proposed" | "superseded" | "leased" | "succeeded" | "failed")[] | undefined, string | undefined>>;
867
+ statuses: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<("dismissed" | "retry" | "failed" | "pending" | "proposed" | "superseded" | "leased" | "succeeded")[] | undefined, string | undefined>>;
484
868
  before: z.ZodPipe<z.ZodOptional<z.ZodString>, z.ZodTransform<{
485
869
  createdAt: Date;
486
870
  id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/routes/contracts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;IACvB,cAAc,EAAE,CAAC,CAAC,OAAO,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,YAAY,kFAAkF,CAAC;AA8B5G,eAAO,MAAM,uBAAuB;;;iBAGlC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;;;;;;iBAUoE,CAAC;AAiDzG,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;iBAQnC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAUqE,CAAC;AAE3G,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;GAgB5B,CAAC;AAEN,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBASlC,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;kBAQ9B,CAAC;AAEZ,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AA8CH,eAAO,MAAM,mBAAmB;;;;;;;iBAa9B,CAAC;AAWH,KAAK,uBAAuB,GAAG;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AA6ChE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;iBAS/B,CAAC;AAyBH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4PqB,CAAC;AAE1D,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,uBAAuB,CAAC"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/routes/contracts.ts"],"names":[],"mappings":"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"}
@@ -38,6 +38,135 @@ const updateProjectBodySchema = z.object({
38
38
  autoRunEnabled: z.boolean().optional(),
39
39
  autoApprovePlans: z.boolean().optional()
40
40
  }).refine((input) => Object.keys(input).length > 0, { message: "At least one project field is required" });
41
+ const environmentRepositorySchema = z.object({
42
+ projectRepositoryId: z.string(),
43
+ connectionId: z.string(),
44
+ repositoryId: z.string(),
45
+ slug: z.string().nullable(),
46
+ defaultBranch: z.string().nullable(),
47
+ position: z.number().int(),
48
+ inEnvironment: z.boolean(),
49
+ setupCommand: z.string().nullable(),
50
+ teardownCommand: z.string().nullable(),
51
+ lastBuildStatus: z.enum([
52
+ "unbuilt",
53
+ "configured",
54
+ "failed"
55
+ ]),
56
+ lastBuildError: z.string().nullable(),
57
+ lastBuiltAt: z.string().nullable()
58
+ });
59
+ /** The configured FactorySandbox as factory describes it: provider id, JSON Schema of its settings, capabilities. */
60
+ const environmentSandboxSchema = z.object({
61
+ provider: z.string(),
62
+ settingsSchema: z.record(z.string(), z.unknown()),
63
+ capabilities: z.object({
64
+ template: z.boolean(),
65
+ builds: z.object({
66
+ available: z.boolean(),
67
+ history: z.boolean()
68
+ })
69
+ })
70
+ });
71
+ /** When the environment builds on its own; present only when the sandbox can build. */
72
+ const environmentBuildTriggersSchema = z.object({
73
+ schedule: z.object({
74
+ enabled: z.boolean(),
75
+ cron: z.string().nullable(),
76
+ timezone: z.string().nullable(),
77
+ /** False when the host's storage has no schedules domain; the cron trigger cannot be enabled then. */
78
+ scheduleAvailable: z.boolean()
79
+ }),
80
+ push: z.object({
81
+ enabled: z.boolean(),
82
+ debounceMinutes: z.number().int()
83
+ })
84
+ });
85
+ /** The last build factory asked the provider for, from the project row only; status is read live. */
86
+ const environmentLastBuildSchema = z.object({
87
+ buildId: z.string(),
88
+ attemptedAt: z.string().nullable()
89
+ });
90
+ const projectEnvironmentResponseSchema = z.object({ environment: z.object({
91
+ sandbox: environmentSandboxSchema,
92
+ /** The stored settings document; only keys the user set. */
93
+ settings: z.record(z.string(), z.unknown()),
94
+ sandboxWorkingDirectory: z.string().nullable(),
95
+ workspaceSetupCommand: z.string().nullable(),
96
+ activeTemplateId: z.string().nullable(),
97
+ activeTemplateHeads: z.record(z.string(), z.string()).nullable(),
98
+ repositories: z.array(environmentRepositorySchema),
99
+ buildTriggers: environmentBuildTriggersSchema.optional(),
100
+ build: environmentLastBuildSchema.nullable().optional()
101
+ }) });
102
+ const environmentBuildStatusSchema = z.enum([
103
+ "pending",
104
+ "building",
105
+ "ready",
106
+ "failed",
107
+ "unknown"
108
+ ]);
109
+ const environmentBuildStartResponseSchema = z.object({
110
+ outcome: z.enum([
111
+ "started",
112
+ "skipped",
113
+ "unavailable",
114
+ "failed"
115
+ ]),
116
+ buildId: z.string().optional(),
117
+ templateId: z.string().optional(),
118
+ reason: z.string().optional()
119
+ });
120
+ const environmentBuildSchema = z.object({
121
+ buildId: z.string(),
122
+ status: environmentBuildStatusSchema,
123
+ templateId: z.string().optional(),
124
+ startedAt: z.string().optional(),
125
+ finishedAt: z.string().optional(),
126
+ error: z.string().optional(),
127
+ logs: z.array(z.string()).optional()
128
+ });
129
+ const environmentBuildsResponseSchema = z.object({ builds: z.array(environmentBuildSchema) });
130
+ const environmentBuildResponseSchema = z.object({ build: environmentBuildSchema });
131
+ const buildPathSchema = projectPathSchema.extend({ buildId: z.string().min(1) });
132
+ const environmentRepositoryPatchSchema = z.object({
133
+ projectRepositoryId: uuidSchema,
134
+ position: z.number().int().min(1).optional(),
135
+ inEnvironment: z.boolean().optional(),
136
+ setupCommand: nullableTrimmed(2e3).optional(),
137
+ teardownCommand: nullableTrimmed(2e3).optional()
138
+ });
139
+ const updateProjectEnvironmentBodySchema = z.object({
140
+ sandboxWorkingDirectory: nullableTrimmed(1e3).refine((value) => value === null || value.startsWith("/"), { message: "sandboxWorkingDirectory must be absolute" }).optional(),
141
+ /** Partial settings merged onto the stored document; null removes a key. Validated by the FactorySandbox. */
142
+ settings: z.record(z.string(), z.unknown().nullable()).optional(),
143
+ workspaceSetupCommand: nullableTrimmed(2e3).optional(),
144
+ /** Build triggers; only accepted when the sandbox can build. */
145
+ buildTriggers: z.object({
146
+ schedule: z.object({
147
+ enabled: z.boolean(),
148
+ cron: z.string().trim().min(1).max(100).optional(),
149
+ timezone: z.string().trim().min(1).max(100).optional()
150
+ }).optional(),
151
+ push: z.object({
152
+ enabled: z.boolean().optional(),
153
+ debounceMinutes: z.number().int().min(0).max(1440).optional()
154
+ }).optional()
155
+ }).optional(),
156
+ repositories: z.array(environmentRepositoryPatchSchema).max(100).superRefine((entries, ctx) => {
157
+ if (new Set(entries.map((entry) => entry.projectRepositoryId)).size !== entries.length) ctx.addIssue({
158
+ code: "custom",
159
+ message: "Each repository may be listed once"
160
+ });
161
+ const positions = entries.flatMap((entry) => entry.position === void 0 ? [] : [entry.position]);
162
+ if (positions.length === 0) return;
163
+ const expected = Array.from({ length: entries.length }, (_, index) => index + 1);
164
+ if (positions.length !== entries.length || [...positions].sort((a, b) => a - b).some((p, i) => p !== expected[i])) ctx.addIssue({
165
+ code: "custom",
166
+ message: "Positions must be a permutation of 1..n over the listed repositories"
167
+ });
168
+ }).optional()
169
+ }).refine((input) => Object.keys(input).length > 0, { message: "At least one environment field is required" });
41
170
  const stagesSchema = z.array(z.string().max(64).regex(/^[a-z0-9][a-z0-9_-]*$/i)).min(1).max(16).refine((stages) => new Set(stages).size === stages.length, { message: "Stages must be unique" });
42
171
  const externalSourceSchema = z.object({
43
172
  integrationId: z.string().min(1).max(128),
@@ -267,6 +396,42 @@ const FACTORY_ROUTE_CONTRACTS = {
267
396
  bodySchema: updateProjectBodySchema,
268
397
  responseSchema: projectResponseSchema
269
398
  },
399
+ projectEnvironmentGet: {
400
+ method: "GET",
401
+ path: "/web/factory/projects/:id/environment",
402
+ description: "Get the sandbox environment of a Factory project: provider settings and its repositories in order",
403
+ pathSchema: projectPathSchema,
404
+ responseSchema: projectEnvironmentResponseSchema
405
+ },
406
+ projectEnvironmentUpdate: {
407
+ method: "PATCH",
408
+ path: "/web/factory/projects/:id/environment",
409
+ description: "Update the sandbox environment of a Factory project: provider settings, repository order and setup",
410
+ pathSchema: projectPathSchema,
411
+ bodySchema: updateProjectEnvironmentBodySchema,
412
+ responseSchema: projectEnvironmentResponseSchema
413
+ },
414
+ projectEnvironmentBuild: {
415
+ method: "POST",
416
+ path: "/web/factory/projects/:id/environment/build",
417
+ description: "Build the sandbox environment template of a Factory project now",
418
+ pathSchema: projectPathSchema,
419
+ responseSchema: environmentBuildStartResponseSchema
420
+ },
421
+ projectEnvironmentBuilds: {
422
+ method: "GET",
423
+ path: "/web/factory/projects/:id/environment/builds",
424
+ description: "List the environment template builds of a Factory project, newest first, when the provider keeps history",
425
+ pathSchema: projectPathSchema,
426
+ responseSchema: environmentBuildsResponseSchema
427
+ },
428
+ projectEnvironmentBuildGet: {
429
+ method: "GET",
430
+ path: "/web/factory/projects/:id/environment/builds/:buildId",
431
+ description: "Get the live status of one environment template build of a Factory project",
432
+ pathSchema: buildPathSchema,
433
+ responseSchema: environmentBuildResponseSchema
434
+ },
270
435
  projectApplyDefaultModel: {
271
436
  method: "POST",
272
437
  path: "/web/factory/projects/:id/apply-default-model",
@@ -503,6 +668,6 @@ const FACTORY_ROUTE_CONTRACTS = {
503
668
  }
504
669
  };
505
670
  //#endregion
506
- export { FACTORY_ROUTE_CONTRACTS, UUID_PATTERN, attentionQuerySchema, automationRunStartBodySchema, createProjectBodySchema, createWorkItemBodySchema, decisionQuerySchema, metricsQuerySchema, startWorkItemBodySchema, transitionBodySchema, updateProjectBodySchema, updateWorkItemBodySchema };
671
+ export { FACTORY_ROUTE_CONTRACTS, UUID_PATTERN, attentionQuerySchema, automationRunStartBodySchema, createProjectBodySchema, createWorkItemBodySchema, decisionQuerySchema, environmentBuildResponseSchema, environmentBuildSchema, environmentBuildStartResponseSchema, environmentBuildTriggersSchema, environmentBuildsResponseSchema, environmentLastBuildSchema, environmentSandboxSchema, metricsQuerySchema, projectEnvironmentResponseSchema, startWorkItemBodySchema, transitionBodySchema, updateProjectBodySchema, updateProjectEnvironmentBodySchema, updateWorkItemBodySchema };
507
672
 
508
673
  //# sourceMappingURL=contracts.js.map