@rikalabs/akter-cli 0.0.0-stage → 0.1.0-alpha.3

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.
@@ -0,0 +1,1645 @@
1
+ // ../../packages/cloud-api/src/errors.ts
2
+ import { Schema } from "effect";
3
+
4
+ class Unauthorized extends Schema.TaggedError()("Unauthorized", {
5
+ code: Schema.Literals(["missing_credentials", "invalid_credentials", "expired"]),
6
+ message: Schema.String
7
+ }, { httpApiStatus: 401 }) {
8
+ }
9
+
10
+ class Forbidden extends Schema.TaggedError()("Forbidden", { message: Schema.String }, { httpApiStatus: 403 }) {
11
+ }
12
+ var NotFoundResource = Schema.Literals([
13
+ "actor",
14
+ "actor-type",
15
+ "api-key",
16
+ "command",
17
+ "cursor",
18
+ "deployment",
19
+ "domain",
20
+ "environment",
21
+ "invitation",
22
+ "live deployment",
23
+ "member",
24
+ "organization",
25
+ "project",
26
+ "source"
27
+ ]);
28
+
29
+ class NotFound extends Schema.TaggedError()("NotFound", { resource: NotFoundResource, id: Schema.String }, { httpApiStatus: 404 }) {
30
+ }
31
+
32
+ class Conflict extends Schema.TaggedError()("Conflict", { message: Schema.String }, { httpApiStatus: 409 }) {
33
+ }
34
+
35
+ class NotImplemented extends Schema.TaggedError()("NotImplemented", { operation: Schema.String }, { httpApiStatus: 501 }) {
36
+ }
37
+ var UnavailableReason = Schema.Literals(["unknownPlan"]);
38
+
39
+ class Unavailable extends Schema.TaggedError()("Unavailable", {
40
+ message: Schema.String,
41
+ retryAfterSeconds: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
42
+ reason: Schema.optionalKey(UnavailableReason)
43
+ }, { httpApiStatus: 503 }) {
44
+ }
45
+
46
+ class PayloadTooLarge extends Schema.TaggedError()("PayloadTooLarge", { limitBytes: Schema.Int }, { httpApiStatus: 413 }) {
47
+ }
48
+ var ReadErrors = [Forbidden, NotFound, NotImplemented, Unavailable];
49
+ var WriteErrors = [Forbidden, NotFound, Conflict, NotImplemented, Unavailable];
50
+ var SelfErrors = [Forbidden, NotImplemented];
51
+ // ../../packages/cloud-api/src/auth.ts
52
+ import { Context, Schema as Schema3 } from "effect";
53
+ import { HttpApiMiddleware, HttpApiSecurity } from "effect/http-api";
54
+
55
+ // ../../packages/cloud-api/src/primitives.ts
56
+ import { Schema as Schema2 } from "effect";
57
+ var identifier = Schema2.String.pipe(Schema2.check(Schema2.isMinLength(1), Schema2.isMaxLength(128)));
58
+ var UserId = identifier.pipe(Schema2.brand("UserId"));
59
+ var OrganizationId = identifier.pipe(Schema2.brand("OrganizationId"));
60
+ var MemberId = identifier.pipe(Schema2.brand("MemberId"));
61
+ var InvitationId = identifier.pipe(Schema2.brand("InvitationId"));
62
+ var ApiKeyId = identifier.pipe(Schema2.brand("ApiKeyId"));
63
+ var ProjectId = identifier.pipe(Schema2.brand("ProjectId"));
64
+ var DeploymentId = identifier.pipe(Schema2.brand("DeploymentId"));
65
+ var DomainId = identifier.pipe(Schema2.brand("DomainId"));
66
+ var DeadLetterId = identifier.pipe(Schema2.brand("DeadLetterId"));
67
+ var InvoiceId = identifier.pipe(Schema2.brand("InvoiceId"));
68
+ var EnvironmentId = identifier.pipe(Schema2.brand("EnvironmentId"));
69
+ var Slug = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^[a-z0-9](?:[a-z0-9-]{0,38}[a-z0-9])?$/)), Schema2.brand("Slug"));
70
+ var Name = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^\S(?:.{0,98}\S)?$/)), Schema2.brand("Name"));
71
+ var Email = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^[^\s@]+@[^\s@]+\.[^\s@]+$/), Schema2.isMaxLength(254)), Schema2.brand("Email"));
72
+ var NonNegativeInt = Schema2.Int.pipe(Schema2.check(Schema2.isGreaterThanOrEqualTo(0)));
73
+ var NonNegative = Schema2.Finite.pipe(Schema2.check(Schema2.isGreaterThanOrEqualTo(0)));
74
+ var Timestamp = Schema2.DateTimeUtc;
75
+ var CalendarDay = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^\d{4}-\d{2}-\d{2}$/)));
76
+ var BillingPeriod = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^\d{4}-(?:0[1-9]|1[0-2])$/)));
77
+ var Role = Schema2.Literals(["owner", "admin", "member", "viewer"]);
78
+ var InviteRole = Schema2.Literals(["admin", "member", "viewer"]);
79
+ var EnvironmentName = Schema2.Literals(["production", "staging", "dev"]);
80
+ var RegionId = Schema2.Literals(["us-east-1", "us-west-2"]);
81
+ var CommitSha = Schema2.String.pipe(Schema2.check(Schema2.isPattern(/^[0-9a-f]{7,40}$/)));
82
+ var ActorAddress = Schema2.String.pipe(Schema2.check(Schema2.isMinLength(3), Schema2.isMaxLength(1024), Schema2.isPattern(/^[^/]+\/.+$/)));
83
+ var ActorReference = Schema2.Struct({
84
+ kind: Schema2.Literals(["user", "api-key"]),
85
+ id: Schema2.String,
86
+ name: Schema2.NullOr(Schema2.String)
87
+ });
88
+ var SeriesPoint = Schema2.Struct({ at: Timestamp, value: Schema2.Finite });
89
+ var pageQuery = {
90
+ limit: Schema2.optional(Schema2.Int.pipe(Schema2.check(Schema2.isBetween({ minimum: 1, maximum: 100 })))),
91
+ cursor: Schema2.optional(Schema2.String)
92
+ };
93
+ var Page = (item) => Schema2.Struct({ items: Schema2.Array(item), nextCursor: Schema2.NullOr(Schema2.String) });
94
+
95
+ // ../../packages/cloud-api/src/auth.ts
96
+ var sessionCookieName = "better-auth.session_token";
97
+ var secureSessionCookieName = "__Secure-better-auth.session_token";
98
+ var apiKeyHeaderName = "x-api-key";
99
+ var SessionIdentity = Schema3.TaggedStruct("session", {
100
+ userId: UserId,
101
+ sessionId: Schema3.String,
102
+ activeOrganizationId: Schema3.NullOr(OrganizationId)
103
+ });
104
+ var ApiKeyIdentity = Schema3.TaggedStruct("api-key", {
105
+ keyId: ApiKeyId,
106
+ organizationId: OrganizationId,
107
+ permission: Schema3.Literals(["read", "write", "admin"])
108
+ });
109
+ var Identity = Schema3.Union([SessionIdentity, ApiKeyIdentity]);
110
+
111
+ class CurrentIdentity extends Context.Service()("@akter/cloud-api/auth/CurrentIdentity") {
112
+ }
113
+
114
+ class Authentication extends HttpApiMiddleware.Service()("@akter/cloud-api/Authentication", {
115
+ security: {
116
+ session: HttpApiSecurity.apiKey({ key: sessionCookieName, in: "cookie" }),
117
+ secureSession: HttpApiSecurity.apiKey({ key: secureSessionCookieName, in: "cookie" }),
118
+ apiKey: HttpApiSecurity.apiKey({ key: apiKeyHeaderName, in: "header" }),
119
+ bearer: HttpApiSecurity.bearer
120
+ },
121
+ error: [Unauthorized, Forbidden]
122
+ }) {
123
+ }
124
+ // ../../packages/cloud-api/src/identity.ts
125
+ import { Schema as Schema4 } from "effect";
126
+ var PlanId = Schema4.Literals(["free", "pro", "team", "enterprise"]);
127
+ var UnboundPlan = Schema4.TaggedStruct("unbound", {});
128
+ var KnownPlan = Schema4.TaggedStruct("known", { id: PlanId });
129
+ var UnknownPlan = Schema4.TaggedStruct("unknown", { id: Schema4.String });
130
+ var OrganizationPlan = Schema4.Union([UnboundPlan, KnownPlan, UnknownPlan]);
131
+ var User = Schema4.Struct({
132
+ id: UserId,
133
+ name: Schema4.String,
134
+ email: Email,
135
+ emailVerified: Schema4.Boolean,
136
+ image: Schema4.NullOr(Schema4.String)
137
+ });
138
+ var Organization = Schema4.Struct({
139
+ id: OrganizationId,
140
+ name: Schema4.String,
141
+ slug: Slug,
142
+ plan: OrganizationPlan,
143
+ createdAt: Timestamp
144
+ });
145
+ var OrganizationMembership = Schema4.Struct({
146
+ organization: Organization,
147
+ role: Role
148
+ });
149
+ var Me = Schema4.Struct({
150
+ user: Schema4.NullOr(User),
151
+ identityKind: Schema4.Literals(["session", "api-key"]),
152
+ activeOrganizationId: Schema4.NullOr(OrganizationId),
153
+ organizations: Schema4.Array(OrganizationMembership)
154
+ });
155
+ var UpdateProfile = Schema4.Struct({
156
+ name: Schema4.optional(Name),
157
+ image: Schema4.optional(Schema4.NullOr(Schema4.String))
158
+ });
159
+ var DeleteAccount = Schema4.Struct({ confirmation: Email });
160
+ var PersonalDataExport = Schema4.Struct({
161
+ userId: UserId,
162
+ exportedAt: Timestamp,
163
+ tables: Schema4.Record(Schema4.String, Schema4.Array(Schema4.Json))
164
+ });
165
+ var OrganizationDeletion = Schema4.Struct({
166
+ organizationId: OrganizationId,
167
+ phase: Schema4.Literals(["billing", "runners", "databases", "records", "completed"]),
168
+ blocked: Schema4.Boolean
169
+ });
170
+ var SetActiveOrganization = Schema4.Struct({ organizationId: OrganizationId });
171
+ var CreateOrganization = Schema4.Struct({ name: Name, slug: Slug });
172
+ var UpdateOrganization = Schema4.Struct({
173
+ name: Schema4.optional(Name),
174
+ slug: Schema4.optional(Slug)
175
+ });
176
+ var MemberUser = Schema4.Struct({
177
+ id: UserId,
178
+ name: Schema4.String,
179
+ email: Email,
180
+ image: Schema4.NullOr(Schema4.String)
181
+ });
182
+ var Member = Schema4.Struct({
183
+ id: MemberId,
184
+ user: MemberUser,
185
+ role: Role,
186
+ createdAt: Timestamp,
187
+ lastActiveAt: Schema4.NullOr(Timestamp)
188
+ });
189
+ var UpdateMemberRole = Schema4.Struct({ role: Role });
190
+ var InvitationStatus = Schema4.Literals([
191
+ "pending",
192
+ "accepted",
193
+ "declined",
194
+ "canceled",
195
+ "expired"
196
+ ]);
197
+ var Invitation = Schema4.Struct({
198
+ id: InvitationId,
199
+ organizationId: OrganizationId,
200
+ email: Email,
201
+ role: InviteRole,
202
+ status: InvitationStatus,
203
+ invitedBy: Schema4.Struct({ id: UserId, name: Schema4.String }),
204
+ createdAt: Timestamp,
205
+ expiresAt: Timestamp
206
+ });
207
+ var CreateInvitation = Schema4.Struct({ email: Email, role: InviteRole });
208
+ var InvitationPreview = Schema4.Struct({
209
+ id: InvitationId,
210
+ email: Email,
211
+ role: InviteRole,
212
+ status: InvitationStatus,
213
+ expiresAt: Timestamp,
214
+ inviterName: Schema4.String,
215
+ organization: Schema4.Struct({
216
+ id: OrganizationId,
217
+ name: Schema4.String,
218
+ slug: Slug,
219
+ plan: OrganizationPlan,
220
+ memberCount: NonNegativeInt
221
+ })
222
+ });
223
+ var ApiKeyPermission = Schema4.Literals(["read", "write", "admin"]);
224
+ var ApiKey = Schema4.Struct({
225
+ id: ApiKeyId,
226
+ organizationId: OrganizationId,
227
+ name: Schema4.String,
228
+ prefix: Schema4.String,
229
+ lastFour: Schema4.String,
230
+ permission: ApiKeyPermission,
231
+ projectId: Schema4.NullOr(ProjectId),
232
+ createdAt: Timestamp,
233
+ createdBy: ActorReference,
234
+ lastUsedAt: Schema4.NullOr(Timestamp),
235
+ expiresAt: Schema4.NullOr(Timestamp),
236
+ revokedAt: Schema4.NullOr(Timestamp)
237
+ });
238
+ var CreateApiKey = Schema4.Struct({
239
+ name: Name,
240
+ permission: ApiKeyPermission,
241
+ projectId: Schema4.optional(ProjectId),
242
+ expiresAt: Schema4.optional(Timestamp)
243
+ });
244
+ var CreatedApiKey = Schema4.Struct({
245
+ key: ApiKey,
246
+ secret: Schema4.String
247
+ });
248
+ var Theme = Schema4.Literals(["light", "dark", "system"]);
249
+ var Preferences = Schema4.Struct({
250
+ defaultEnvironment: EnvironmentName,
251
+ openActorLinksInNewTab: Schema4.Boolean,
252
+ timeZone: Schema4.String,
253
+ pauseLiveTailOnScroll: Schema4.Boolean,
254
+ showReplayedCommands: Schema4.Boolean,
255
+ theme: Theme
256
+ });
257
+ var UpdatePreferences = Schema4.Struct({
258
+ defaultEnvironment: Schema4.optional(EnvironmentName),
259
+ openActorLinksInNewTab: Schema4.optional(Schema4.Boolean),
260
+ timeZone: Schema4.optional(Schema4.String),
261
+ pauseLiveTailOnScroll: Schema4.optional(Schema4.Boolean),
262
+ showReplayedCommands: Schema4.optional(Schema4.Boolean),
263
+ theme: Schema4.optional(Theme)
264
+ });
265
+ var NotificationEvent = Schema4.Literals([
266
+ "deploy_failed",
267
+ "dead_letter",
268
+ "spend_threshold"
269
+ ]);
270
+ var NotificationPreference = Schema4.Struct({
271
+ event: NotificationEvent,
272
+ email: Schema4.Boolean,
273
+ slack: Schema4.Boolean
274
+ });
275
+ var NotificationSettings = Schema4.Struct({
276
+ preferences: Schema4.Array(NotificationPreference)
277
+ });
278
+ var PinnedActor = Schema4.Struct({
279
+ projectId: ProjectId,
280
+ environment: EnvironmentName,
281
+ address: Schema4.String,
282
+ status: Schema4.Literals(["awake", "idle", "unknown"]),
283
+ lastActivityAt: Schema4.NullOr(Timestamp)
284
+ });
285
+ var PinActor = Schema4.Struct({
286
+ projectId: ProjectId,
287
+ environment: EnvironmentName,
288
+ address: Schema4.String
289
+ });
290
+ // ../../packages/cloud-api/src/projects.ts
291
+ import { Schema as Schema5 } from "effect";
292
+ var ProjectStatus = Schema5.Literals(["empty", "live", "deploying", "failed"]);
293
+ var Region = Schema5.Struct({ id: RegionId, city: Schema5.String });
294
+ var Project = Schema5.Struct({
295
+ id: ProjectId,
296
+ organizationId: OrganizationId,
297
+ name: Schema5.String,
298
+ slug: Slug,
299
+ status: ProjectStatus,
300
+ homeRegion: RegionId,
301
+ createdAt: Timestamp
302
+ });
303
+ var CreateProject = Schema5.Struct({ name: Name, slug: Slug, homeRegion: RegionId });
304
+ var UpdateProject = Schema5.Struct({
305
+ name: Schema5.optional(Name),
306
+ slug: Schema5.optional(Slug)
307
+ });
308
+ var Environment = Schema5.Struct({
309
+ name: EnvironmentName,
310
+ projectId: ProjectId,
311
+ currentDeploymentId: Schema5.NullOr(DeploymentId),
312
+ database: Schema5.optionalKey(Schema5.Struct({
313
+ source: Schema5.Literals(["managed", "customer"]),
314
+ state: Schema5.Literals(["provisioning", "ready", "read-only", "failed"])
315
+ }))
316
+ });
317
+ var CreateEnvironment = Schema5.Struct({ name: EnvironmentName });
318
+ var EnvVariable = Schema5.Struct({
319
+ name: Schema5.String,
320
+ usedBy: Schema5.Array(Schema5.String),
321
+ updatedAt: Timestamp,
322
+ updatedBy: Schema5.NullOr(ActorReference)
323
+ });
324
+ var EnvVariableName = Schema5.String.pipe(Schema5.check(Schema5.isPattern(/^[A-Za-z_][A-Za-z0-9_]{0,255}$/)));
325
+ var SetEnvVariable = Schema5.Struct({
326
+ value: Schema5.String.pipe(Schema5.check(Schema5.isMaxLength(65536)))
327
+ });
328
+ var ImportEnvVariables = Schema5.Struct({
329
+ content: Schema5.String.pipe(Schema5.check(Schema5.isMaxLength(1048576)))
330
+ });
331
+ var ImportEnvVariablesResult = Schema5.Struct({
332
+ created: Schema5.Array(Schema5.String),
333
+ updated: Schema5.Array(Schema5.String)
334
+ });
335
+ var DomainStatus = Schema5.Literals(["pending", "verifying", "active"]);
336
+ var DnsRecord = Schema5.Struct({
337
+ type: Schema5.Literals(["A", "AAAA", "CNAME", "TXT"]),
338
+ name: Schema5.String,
339
+ value: Schema5.String
340
+ });
341
+ var Hostname = Schema5.String.pipe(Schema5.check(Schema5.isMaxLength(253), Schema5.isPattern(/^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z]{2,63}$/)));
342
+ var Domain = Schema5.Struct({
343
+ id: DomainId,
344
+ hostname: Hostname,
345
+ environment: EnvironmentName,
346
+ status: DomainStatus,
347
+ dnsRecords: Schema5.Array(DnsRecord),
348
+ createdAt: Timestamp
349
+ });
350
+ var AddDomain = Schema5.Struct({ hostname: Hostname, environment: EnvironmentName });
351
+ var OwnedTable = Schema5.Struct({
352
+ name: Schema5.String,
353
+ actor: Schema5.String,
354
+ rows: NonNegativeInt,
355
+ sizeBytes: NonNegativeInt,
356
+ region: RegionId
357
+ });
358
+ var ProjectRegion = Schema5.Struct({
359
+ region: Region,
360
+ home: Schema5.Boolean,
361
+ tenantCount: NonNegativeInt,
362
+ database: Schema5.Struct({ version: Schema5.String, sizeBytes: NonNegativeInt }),
363
+ storage: Schema5.Struct({ usedBytes: NonNegativeInt, limitBytes: NonNegativeInt }),
364
+ cpuPercent: NonNegative,
365
+ connections: Schema5.Struct({ used: NonNegativeInt, limit: NonNegativeInt }),
366
+ runners: NonNegativeInt,
367
+ largestTables: Schema5.Array(OwnedTable)
368
+ });
369
+ var AddRegion = Schema5.Struct({ region: RegionId });
370
+ var SetHomeRegion = Schema5.Struct({ region: RegionId });
371
+ var ProjectEndpoints = Schema5.Struct({
372
+ httpBaseUrl: Schema5.String,
373
+ webSocketUrl: Schema5.String,
374
+ openApiPath: Schema5.String,
375
+ mcpPath: Schema5.String
376
+ });
377
+ var IntegrationKind = Schema5.Literals([
378
+ "github",
379
+ "slack",
380
+ "datadog",
381
+ "opentelemetry",
382
+ "pagerduty"
383
+ ]);
384
+ var Integration = Schema5.Struct({
385
+ kind: IntegrationKind,
386
+ status: Schema5.Literals(["connected", "disconnected", "error"]),
387
+ label: Schema5.NullOr(Schema5.String),
388
+ connectedAt: Schema5.NullOr(Timestamp)
389
+ });
390
+ var ConnectIntegration = Schema5.Struct({
391
+ settings: Schema5.optional(Schema5.Record(Schema5.String, Schema5.String))
392
+ });
393
+ var IntegrationConnection = Schema5.Struct({
394
+ redirectUrl: Schema5.NullOr(Schema5.String),
395
+ integration: Integration
396
+ });
397
+ // ../../packages/cloud-api/src/deployments.ts
398
+ import { Schema as Schema6 } from "effect";
399
+ var DeploymentStatus = Schema6.Literals([
400
+ "in-progress",
401
+ "live",
402
+ "drained",
403
+ "rolled-back",
404
+ "failed"
405
+ ]);
406
+ var RolloutStepName = Schema6.Literals([
407
+ "build",
408
+ "migrate",
409
+ "start-runners",
410
+ "drain-previous"
411
+ ]);
412
+ var RolloutStep = Schema6.Struct({
413
+ name: RolloutStepName,
414
+ status: Schema6.Literals(["pending", "running", "succeeded", "failed", "skipped"]),
415
+ durationMs: Schema6.NullOr(NonNegativeInt),
416
+ detail: Schema6.NullOr(Schema6.String)
417
+ });
418
+ var DeploymentRunner = Schema6.Struct({
419
+ id: Schema6.String,
420
+ region: RegionId,
421
+ actorCount: Schema6.NullOr(NonNegativeInt),
422
+ cpuPercent: Schema6.NullOr(NonNegative),
423
+ health: Schema6.Literals(["healthy", "unhealthy", "starting", "draining"])
424
+ });
425
+ var DeploymentAuthor = Schema6.Struct({
426
+ name: Schema6.String,
427
+ image: Schema6.NullOr(Schema6.String)
428
+ });
429
+ var DeploymentSummary = Schema6.Struct({
430
+ id: DeploymentId,
431
+ projectId: ProjectId,
432
+ environment: EnvironmentName,
433
+ environmentHost: Schema6.optional(Schema6.String),
434
+ commitSha: CommitSha,
435
+ message: Schema6.String,
436
+ author: DeploymentAuthor,
437
+ regions: Schema6.Array(RegionId),
438
+ runnerCount: NonNegativeInt,
439
+ durationMs: Schema6.NullOr(NonNegativeInt),
440
+ status: DeploymentStatus,
441
+ rolledBackFrom: Schema6.NullOr(DeploymentId),
442
+ createdAt: Timestamp
443
+ });
444
+ var DeploymentDetail = Schema6.Struct({
445
+ ...DeploymentSummary.fields,
446
+ steps: Schema6.Array(RolloutStep),
447
+ runners: Schema6.Array(DeploymentRunner)
448
+ });
449
+ var SourceDigest = Schema6.String.pipe(Schema6.check(Schema6.isPattern(/^sha256:[a-f0-9]{64}$/u)));
450
+ var MAX_SOURCE_BYTES = 64 * 1024 * 1024;
451
+ var SourceArchive = Schema6.Struct({
452
+ digest: SourceDigest,
453
+ sizeBytes: NonNegativeInt
454
+ });
455
+ var SOURCE_ENTRY = "src/app.ts";
456
+ var DeploymentSource = Schema6.Struct({
457
+ digest: SourceDigest,
458
+ dockerfile: Schema6.optionalKey(Schema6.Never.annotate({
459
+ message: `source.dockerfile is not accepted: the platform builds every source from ${SOURCE_ENTRY}`
460
+ }))
461
+ });
462
+ var CreateDeployment = Schema6.Struct({
463
+ environment: EnvironmentName,
464
+ commitSha: CommitSha,
465
+ message: Schema6.optional(Schema6.String),
466
+ regions: Schema6.optional(Schema6.Array(RegionId)),
467
+ source: Schema6.optional(DeploymentSource)
468
+ });
469
+ var ImageDigest = Schema6.String.pipe(Schema6.check(Schema6.isPattern(/^(?:[^\s@]+@)?sha256:[a-f0-9]{64}$/u)));
470
+ var RecordBuild = Schema6.Struct({
471
+ image: ImageDigest,
472
+ commitSha: CommitSha,
473
+ environmentSnapshot: Schema6.Record(Schema6.String, Schema6.String).check(Schema6.makeFilter((snapshot) => Object.keys(snapshot).every((key) => /^[A-Za-z_][A-Za-z0-9_]{0,254}$/u.test(key)) || "Environment variable names must be valid identifiers"))
474
+ });
475
+ var FailBuild = Schema6.Struct({
476
+ reason: Schema6.String.check(Schema6.isMinLength(1), Schema6.isMaxLength(4096))
477
+ });
478
+ var BuildLogLine = Schema6.Struct({
479
+ index: NonNegativeInt,
480
+ at: Timestamp,
481
+ stream: Schema6.Literals(["stdout", "stderr"]),
482
+ text: Schema6.String
483
+ });
484
+ var BuildLog = Schema6.Struct({
485
+ lines: Schema6.Array(BuildLogLine),
486
+ complete: Schema6.Boolean
487
+ });
488
+ // ../../packages/cloud-api/src/runtime.ts
489
+ import * as Framework from "@rikalabs/akter/client";
490
+ import { Schema as Schema7, Struct } from "effect";
491
+ var SidebarCounts = Schema7.Struct({
492
+ actorTypes: NonNegativeInt,
493
+ openDeadLetters: NonNegativeInt
494
+ });
495
+ var Overview = Schema7.Struct({
496
+ commands: Schema7.NullOr(Schema7.Struct({
497
+ perSecond: NonNegative,
498
+ series24h: Schema7.Array(SeriesPoint),
499
+ p50Ms: Schema7.NullOr(NonNegative),
500
+ p99Ms: Schema7.NullOr(NonNegative)
501
+ })),
502
+ actors: Schema7.Struct({ awake: Schema7.NullOr(NonNegativeInt), total: NonNegativeInt }),
503
+ jobs: Schema7.Struct({ inFlight: NonNegativeInt, donePerHour: Schema7.NullOr(NonNegativeInt) }),
504
+ deadLettersByJobType: Schema7.Array(Schema7.Struct({ jobName: Schema7.String, count: NonNegativeInt })),
505
+ throughput: Schema7.NullOr(Schema7.Array(SeriesPoint)),
506
+ p99: Schema7.NullOr(Schema7.Array(SeriesPoint)),
507
+ health: Schema7.Struct({
508
+ runners: Schema7.NullOr(Schema7.Struct({ healthy: NonNegativeInt, total: NonNegativeInt })),
509
+ databaseCpuPercent: Schema7.NullOr(NonNegative),
510
+ maxMailbox: Schema7.NullOr(Schema7.Struct({ depth: NonNegativeInt, actor: Schema7.NullOr(ActorAddress) })),
511
+ parkedSockets: Schema7.NullOr(NonNegativeInt),
512
+ outboxLagP99Ms: Schema7.NullOr(NonNegative),
513
+ lastDeployAt: Schema7.NullOr(Timestamp)
514
+ }),
515
+ recentDeployments: Schema7.NullOr(Schema7.Array(DeploymentSummary))
516
+ });
517
+ var ActorTypeSummary = Schema7.Struct({
518
+ name: Schema7.String,
519
+ commands: Schema7.NullOr(Schema7.Array(Schema7.String)),
520
+ instances: NonNegativeInt,
521
+ awake: Schema7.NullOr(NonNegativeInt),
522
+ commandsPerSecond: Schema7.NullOr(NonNegative),
523
+ p99Ms: Schema7.NullOr(NonNegative),
524
+ maxMailbox: Schema7.NullOr(NonNegativeInt)
525
+ });
526
+ var SeriesWindow = Schema7.Literals(["1h", "24h", "7d"]);
527
+ var CommandVolume = Schema7.Struct({
528
+ command: Schema7.String,
529
+ count: NonNegativeInt,
530
+ perSecond: NonNegative
531
+ });
532
+ var ActorTypeActivity = Schema7.Struct({
533
+ window: SeriesWindow,
534
+ since: Timestamp,
535
+ series: Schema7.Array(SeriesPoint),
536
+ commands: Schema7.Array(CommandVolume)
537
+ });
538
+ var LatencyBucket = Schema7.Struct({
539
+ upToMs: Schema7.NullOr(NonNegative),
540
+ count: NonNegativeInt
541
+ });
542
+ var TurnLatency = Schema7.Struct({
543
+ window: SeriesWindow,
544
+ since: Timestamp,
545
+ buckets: Schema7.Array(LatencyBucket),
546
+ p50Ms: Schema7.NullOr(NonNegative),
547
+ p95Ms: Schema7.NullOr(NonNegative),
548
+ p99Ms: Schema7.NullOr(NonNegative)
549
+ });
550
+ var ActorInstance = Schema7.Struct({
551
+ key: Schema7.String,
552
+ status: Schema7.NullOr(Schema7.Literals(["awake", "idle"])),
553
+ lastCommand: Schema7.NullOr(Schema7.String),
554
+ lastActivityAt: Schema7.NullOr(Timestamp),
555
+ generation: NonNegativeInt
556
+ });
557
+ var OwnedTableRows = Schema7.Struct({
558
+ table: Schema7.String,
559
+ columns: Schema7.Array(Schema7.String),
560
+ rows: Schema7.Array(Schema7.Array(Schema7.Json))
561
+ });
562
+ var CommandCaller = Schema7.Struct({
563
+ kind: Schema7.Literals(["user", "anonymous", "system"]),
564
+ subject: Schema7.NullOr(Schema7.String),
565
+ source: Schema7.NullOr(Schema7.String)
566
+ });
567
+ var Receipt = Schema7.Struct({
568
+ commandId: Schema7.String,
569
+ command: Schema7.String,
570
+ result: Schema7.NullOr(Schema7.String),
571
+ caller: Schema7.NullOr(CommandCaller),
572
+ at: Schema7.NullOr(Timestamp),
573
+ expiresAt: Timestamp,
574
+ replayed: Schema7.Boolean
575
+ });
576
+ var ActorEvent = Schema7.Struct({
577
+ name: Schema7.String,
578
+ cursor: Schema7.String,
579
+ emittedAt: Timestamp,
580
+ subscribers: Schema7.NullOr(NonNegativeInt)
581
+ });
582
+ var JobStatus = Schema7.Literals(["queued", "running", "retrying", "done", "dead"]);
583
+ var ActorJob = Schema7.Struct({
584
+ name: Schema7.String,
585
+ id: Schema7.String,
586
+ attempts: NonNegativeInt,
587
+ status: JobStatus
588
+ });
589
+ var ActorTimelineEntry = Schema7.Struct({
590
+ at: Timestamp,
591
+ kind: Schema7.Literals(["command", "event", "job"]),
592
+ label: Schema7.String,
593
+ detail: Schema7.NullOr(Schema7.String),
594
+ caller: Schema7.NullOr(CommandCaller)
595
+ });
596
+ var ActorInspector = Schema7.Struct({
597
+ address: ActorAddress,
598
+ state: Schema7.Json,
599
+ turn: Schema7.NullOr(NonNegativeInt),
600
+ tables: Schema7.NullOr(Schema7.Array(OwnedTableRows)),
601
+ receipts: Schema7.Array(Receipt),
602
+ events: Schema7.Array(ActorEvent),
603
+ jobs: Schema7.Array(ActorJob),
604
+ connections: Schema7.Struct({
605
+ sockets: Schema7.NullOr(NonNegativeInt),
606
+ feedCursor: Schema7.NullOr(Schema7.String)
607
+ }),
608
+ properties: Schema7.Struct({
609
+ status: Schema7.NullOr(Schema7.Literals(["awake", "idle"])),
610
+ type: Schema7.String,
611
+ generation: NonNegativeInt,
612
+ runner: Schema7.NullOr(Schema7.String),
613
+ region: Schema7.NullOr(Schema7.String),
614
+ tenant: Schema7.String,
615
+ mailboxDepth: Schema7.NullOr(NonNegativeInt)
616
+ }),
617
+ timeline: Schema7.NullOr(Schema7.Array(ActorTimelineEntry))
618
+ });
619
+ var CommandOutcome = Schema7.Literals(["ok", "error", "replayed"]);
620
+ var CommandLogEntry = Schema7.Struct({
621
+ commandId: Schema7.String,
622
+ at: Schema7.NullOr(Timestamp),
623
+ durationMs: Schema7.NullOr(NonNegative),
624
+ address: ActorAddress,
625
+ command: Schema7.String,
626
+ caller: Schema7.NullOr(CommandCaller),
627
+ payloadPreview: Schema7.NullOr(Schema7.String),
628
+ outcome: CommandOutcome,
629
+ errorTag: Schema7.NullOr(Schema7.String)
630
+ });
631
+ var commandName = Schema7.String.pipe(Schema7.check(Schema7.isMinLength(1), Schema7.isMaxLength(128)));
632
+ var SendCommand = Schema7.Struct({
633
+ address: ActorAddress,
634
+ command: commandName,
635
+ payload: Schema7.Json,
636
+ commandId: Schema7.optional(commandName)
637
+ });
638
+ var CommandSent = Schema7.Struct({
639
+ commandId: Schema7.String,
640
+ result: Schema7.Json,
641
+ replayed: Schema7.Boolean
642
+ });
643
+
644
+ class CommandExpired extends Schema7.TaggedError()("CommandExpired", { commandId: Schema7.String }, { httpApiStatus: 410 }) {
645
+ }
646
+
647
+ class CommandStreamGap extends Schema7.TaggedError()("CommandStreamGap", {}) {
648
+ }
649
+
650
+ class RunnerDefect extends Schema7.TaggedError()("RunnerDefect", {}, { httpApiStatus: 502 }) {
651
+ }
652
+
653
+ class CommandRefused extends Schema7.TaggedError()("CommandRefused", {
654
+ commandId: Schema7.String,
655
+ reasonTag: Schema7.String,
656
+ reason: Framework.ActorError.fields.reason
657
+ }, { httpApiStatus: 422 }) {
658
+ }
659
+
660
+ class CommandFailed extends Schema7.TaggedError()("CommandFailed", {
661
+ commandId: Schema7.String,
662
+ errorTag: Schema7.String,
663
+ error: Schema7.Json,
664
+ replayed: Schema7.Boolean
665
+ }, { httpApiStatus: 422 }) {
666
+ }
667
+
668
+ class QuotaExceeded2 extends Schema7.TaggedError()("QuotaExceeded", Struct.omit(Framework.QuotaExceeded.fields, ["_tag"]), { httpApiStatus: 429 }) {
669
+ }
670
+
671
+ class QuotaUnbound extends Schema7.TaggedError()("QuotaUnbound", {
672
+ deployment: Schema7.String,
673
+ tenant: Schema7.String,
674
+ reason: Schema7.Literals(["tenant", "account", "plan"])
675
+ }, { httpApiStatus: 402 }) {
676
+ }
677
+ var QuotaErrors = [QuotaExceeded2, QuotaUnbound];
678
+ var JobTypeStats = Schema7.Struct({
679
+ jobName: Schema7.String,
680
+ done: Schema7.NullOr(NonNegativeInt),
681
+ retried: NonNegativeInt,
682
+ dead: NonNegativeInt,
683
+ p99Ms: Schema7.NullOr(NonNegative)
684
+ });
685
+ var JobsSummary = Schema7.Struct({
686
+ queued: NonNegativeInt,
687
+ running: Schema7.NullOr(NonNegativeInt),
688
+ retrying: NonNegativeInt,
689
+ dead: NonNegativeInt,
690
+ byType: Schema7.Array(JobTypeStats),
691
+ throughput: Schema7.NullOr(Schema7.Array(SeriesPoint))
692
+ });
693
+ var DeadLetter = Schema7.Struct({
694
+ id: DeadLetterId,
695
+ jobName: Schema7.String,
696
+ jobId: Schema7.String,
697
+ actor: ActorAddress,
698
+ attempts: NonNegativeInt,
699
+ lastError: Schema7.String,
700
+ since: Timestamp
701
+ });
702
+ var Workflow = Schema7.Struct({
703
+ id: Schema7.String,
704
+ name: Schema7.String,
705
+ actor: ActorAddress,
706
+ step: Schema7.NullOr(Schema7.Struct({
707
+ index: Schema7.Int.pipe(Schema7.check(Schema7.isGreaterThanOrEqualTo(1))),
708
+ total: Schema7.NullOr(Schema7.Int.pipe(Schema7.check(Schema7.isGreaterThanOrEqualTo(1)))),
709
+ name: Schema7.String
710
+ }).pipe(Schema7.check(Schema7.makeFilter((step) => step.total === null || step.index <= step.total || "step.index must not exceed step.total")))),
711
+ waitingFor: Schema7.NullOr(Schema7.Struct({ kind: Schema7.Literals(["event", "timer"]), name: Schema7.String })),
712
+ startedAt: Timestamp,
713
+ status: Schema7.NullOr(Schema7.Literals(["running", "waiting", "completed", "failed"]))
714
+ });
715
+ var TimersSummary = Schema7.Struct({
716
+ pending: NonNegativeInt,
717
+ nextFireAt: Schema7.NullOr(Timestamp)
718
+ });
719
+ var Schedule = Schema7.Struct({
720
+ name: Schema7.String,
721
+ actorPattern: Schema7.String,
722
+ cron: Schema7.String,
723
+ lastRun: Schema7.NullOr(Schema7.Struct({
724
+ at: Timestamp,
725
+ outcome: Schema7.Literals(["ok", "error"]),
726
+ durationMs: Schema7.NullOr(NonNegative)
727
+ })),
728
+ nextRunAt: Schema7.NullOr(Timestamp)
729
+ });
730
+ var ConnectionsSummary = Schema7.Struct({
731
+ open: NonNegativeInt,
732
+ parked: Schema7.NullOr(NonNegativeInt),
733
+ sseStreams: NonNegativeInt,
734
+ feedSubscribers: NonNegativeInt,
735
+ replayGaps: Schema7.NullOr(NonNegativeInt),
736
+ openVersusParked: Schema7.NullOr(Schema7.Array(Schema7.Struct({ at: Timestamp, open: NonNegativeInt, parked: NonNegativeInt }))),
737
+ byActorType: Schema7.Array(Schema7.Struct({
738
+ actorType: Schema7.String,
739
+ open: NonNegativeInt,
740
+ parked: Schema7.NullOr(NonNegativeInt),
741
+ sse: NonNegativeInt
742
+ }))
743
+ });
744
+ var SearchResult = Schema7.Struct({
745
+ kind: Schema7.Literals(["actor-type", "actor", "deployment"]),
746
+ id: Schema7.String,
747
+ title: Schema7.String,
748
+ subtitle: Schema7.NullOr(Schema7.String)
749
+ });
750
+ // ../../packages/cloud-api/src/billing.ts
751
+ import { Schema as Schema8 } from "effect";
752
+ var Plan = Schema8.TaggedStruct("known", {
753
+ id: PlanId,
754
+ name: Schema8.String,
755
+ basePriceCents: NonNegativeInt,
756
+ currency: Schema8.Literal("usd"),
757
+ renewsAt: Schema8.NullOr(Timestamp),
758
+ monthToDateEstimateCents: NonNegativeInt,
759
+ provisional: Schema8.optionalKey(Schema8.Boolean),
760
+ subscribedId: Schema8.optionalKey(PlanId),
761
+ paymentStatus: Schema8.optionalKey(Schema8.Literals(["free", "active", "past_due", "unpaid", "canceled", "incomplete"]))
762
+ });
763
+ var CardPaymentMethod = Schema8.TaggedStruct("card", {
764
+ brand: Schema8.String,
765
+ lastFour: Schema8.String,
766
+ expiryMonth: Schema8.Int.pipe(Schema8.check(Schema8.isBetween({ minimum: 1, maximum: 12 }))),
767
+ expiryYear: NonNegativeInt
768
+ });
769
+ var LinkPaymentMethod = Schema8.TaggedStruct("link", {
770
+ email: Schema8.NullOr(Schema8.String)
771
+ });
772
+ var PaymentMethod = Schema8.Union([CardPaymentMethod, LinkPaymentMethod]);
773
+ var SpendLimit = Schema8.Struct({
774
+ limitCents: Schema8.NullOr(NonNegativeInt),
775
+ currentSpendCents: NonNegativeInt
776
+ });
777
+ var capFields = {
778
+ limit: Schema8.NullOr(NonNegative),
779
+ used: NonNegative,
780
+ atCap: Schema8.Boolean,
781
+ refusing: Schema8.Boolean,
782
+ reason: Schema8.optionalKey(Schema8.Literal("unbound"))
783
+ };
784
+ var CapState = Schema8.Struct({
785
+ cap: Schema8.Literals(["spend", "connections", "compute", "storage"]),
786
+ ...capFields
787
+ });
788
+ var BillingSummary = Schema8.Struct({
789
+ plan: Schema8.Union([Plan, UnboundPlan]),
790
+ paymentMethod: Schema8.NullOr(PaymentMethod),
791
+ billingEmail: Schema8.NullOr(Email),
792
+ spendLimit: SpendLimit,
793
+ caps: Schema8.optionalKey(Schema8.Array(CapState))
794
+ });
795
+ var SetSpendLimit = Schema8.Struct({ limitCents: Schema8.NullOr(NonNegativeInt) });
796
+ var Invoice = Schema8.Struct({
797
+ id: InvoiceId,
798
+ number: Schema8.String,
799
+ periodStart: Timestamp,
800
+ periodEnd: Timestamp,
801
+ amountCents: NonNegativeInt,
802
+ currency: Schema8.Literal("usd"),
803
+ status: Schema8.Literals(["draft", "open", "paid", "void", "uncollectible"]),
804
+ pdfUrl: Schema8.NullOr(Schema8.String)
805
+ });
806
+ var StartCheckout = Schema8.Struct({ plan: Schema8.Literals(["pro", "team", "enterprise"]) });
807
+ var PlanChange = Schema8.Struct({
808
+ requestId: Schema8.String,
809
+ status: Schema8.Literals(["pending", "completed", "failed"])
810
+ });
811
+ var HostedSession = Schema8.Struct({ url: Schema8.String });
812
+ var machineSizeFields = {
813
+ cpuKind: Schema8.Literals(["shared", "performance"]),
814
+ cpus: Schema8.Int.check(Schema8.isGreaterThanOrEqualTo(1)),
815
+ memoryMb: Schema8.Int.check(Schema8.isGreaterThanOrEqualTo(1))
816
+ };
817
+ var PlanFeature = Schema8.Literals([
818
+ "compute-overage",
819
+ "compute-cap",
820
+ "storage-overage",
821
+ "storage-cap",
822
+ "byo-database",
823
+ "dedicated-database",
824
+ "checkout"
825
+ ]);
826
+ var CatalogPlan = Schema8.Struct({
827
+ id: PlanId,
828
+ name: Schema8.String,
829
+ basePriceCents: NonNegativeInt,
830
+ currency: Schema8.Literal("usd"),
831
+ allowances: Schema8.Struct({
832
+ computeUnitHours: NonNegative,
833
+ computeUnitHourCap: Schema8.NullOr(NonNegative),
834
+ storageGb: NonNegative,
835
+ storageGbCap: Schema8.NullOr(NonNegative),
836
+ concurrentConnections: NonNegativeInt
837
+ }),
838
+ overage: Schema8.Struct({
839
+ computeCentsPerUnitHour: NonNegative,
840
+ storageCentsPerGbMonth: NonNegative
841
+ }),
842
+ features: Schema8.Array(PlanFeature),
843
+ provisional: Schema8.Boolean
844
+ });
845
+ var ComputeSize = Schema8.Struct({
846
+ ...machineSizeFields,
847
+ unitsPerHour: Schema8.Finite.check(Schema8.isGreaterThan(0))
848
+ });
849
+ var PlanCatalog = Schema8.Struct({
850
+ plans: Schema8.Array(CatalogPlan),
851
+ computeSizes: Schema8.Array(ComputeSize),
852
+ provisional: Schema8.Boolean
853
+ });
854
+ var UsageMeterName = Schema8.Literals(["runnerHours", "storageGb"]);
855
+ var UsageMeter = Schema8.Struct({
856
+ meter: UsageMeterName,
857
+ used: NonNegative,
858
+ included: NonNegative,
859
+ overage: NonNegative,
860
+ overageCostCents: NonNegative
861
+ });
862
+ var UsagePricing = Schema8.Struct({
863
+ computeCentsPerUnitHour: NonNegative,
864
+ storageCentsPerGbMonth: NonNegative,
865
+ provisional: Schema8.optionalKey(Schema8.Boolean)
866
+ });
867
+ var ComputeUsage = Schema8.Struct({
868
+ environmentId: EnvironmentId,
869
+ ...machineSizeFields,
870
+ machineHours: NonNegative,
871
+ computeUnitHours: NonNegative
872
+ });
873
+ var StorageSample = Schema8.Struct({ bytes: NonNegative, sampledAt: Timestamp });
874
+ var Usage = Schema8.Struct({
875
+ period: BillingPeriod,
876
+ meters: Schema8.Array(UsageMeter),
877
+ latestStorageSample: Schema8.NullOr(StorageSample),
878
+ caps: Schema8.Array(CapState),
879
+ byProject: Schema8.Array(Schema8.Struct({
880
+ projectId: ProjectId,
881
+ name: Schema8.String,
882
+ computeUnitHours: NonNegative,
883
+ compute: Schema8.Array(ComputeUsage),
884
+ storageGbMonths: NonNegative,
885
+ estimatedCostCents: NonNegative
886
+ })),
887
+ pricing: UsagePricing
888
+ });
889
+ var AuditEntry = Schema8.Struct({
890
+ id: Schema8.String,
891
+ at: Timestamp,
892
+ actor: ActorReference,
893
+ action: Schema8.String,
894
+ target: Schema8.Struct({
895
+ type: Schema8.String,
896
+ id: Schema8.NullOr(Schema8.String),
897
+ name: Schema8.NullOr(Schema8.String)
898
+ }),
899
+ ipAddress: Schema8.NullOr(Schema8.String)
900
+ });
901
+ // ../../packages/cloud-api/src/contract.ts
902
+ import { HttpApi, OpenApi as OpenApi3 } from "effect/http-api";
903
+
904
+ // ../../packages/cloud-api/src/groups/account.ts
905
+ import { Schema as Schema9 } from "effect";
906
+ import { HttpApiEndpoint, HttpApiGroup } from "effect/http-api";
907
+ var organizationParams = { organizationId: OrganizationId };
908
+
909
+ class AccountGroup extends HttpApiGroup.make("account").add(HttpApiEndpoint.get("me", "/me", { success: Me, error: SelfErrors }), HttpApiEndpoint.get("exportData", "/me/export", {
910
+ success: PersonalDataExport,
911
+ error: SelfErrors
912
+ }), HttpApiEndpoint.delete("deleteAccount", "/me", {
913
+ payload: DeleteAccount,
914
+ error: WriteErrors
915
+ }), HttpApiEndpoint.patch("updateProfile", "/me", {
916
+ payload: UpdateProfile,
917
+ success: User,
918
+ error: SelfErrors
919
+ }), HttpApiEndpoint.put("setActiveOrganization", "/me/active-organization", {
920
+ payload: SetActiveOrganization,
921
+ success: OrganizationMembership,
922
+ error: WriteErrors
923
+ }), HttpApiEndpoint.get("getPreferences", "/me/preferences", {
924
+ success: Preferences,
925
+ error: SelfErrors
926
+ }), HttpApiEndpoint.patch("updatePreferences", "/me/preferences", {
927
+ payload: UpdatePreferences,
928
+ success: Preferences,
929
+ error: SelfErrors
930
+ }), HttpApiEndpoint.get("getNotifications", "/me/notifications", {
931
+ success: NotificationSettings,
932
+ error: SelfErrors
933
+ }), HttpApiEndpoint.put("setNotifications", "/me/notifications", {
934
+ payload: NotificationSettings,
935
+ success: NotificationSettings,
936
+ error: SelfErrors
937
+ }), HttpApiEndpoint.get("listPinnedActors", "/me/pinned-actors", {
938
+ query: { projectId: ProjectId, environment: EnvironmentName },
939
+ success: Schema9.Array(PinnedActor),
940
+ error: ReadErrors
941
+ }), HttpApiEndpoint.post("pinActor", "/me/pinned-actors", {
942
+ payload: PinActor,
943
+ success: PinnedActor,
944
+ error: WriteErrors
945
+ }), HttpApiEndpoint.delete("unpinActor", "/me/pinned-actors", {
946
+ query: { projectId: ProjectId, environment: EnvironmentName, address: Schema9.String },
947
+ error: WriteErrors
948
+ })) {
949
+ }
950
+
951
+ class OrganizationsGroup extends HttpApiGroup.make("organizations").add(HttpApiEndpoint.get("list", "/organizations", {
952
+ success: Schema9.Array(OrganizationMembership),
953
+ error: SelfErrors
954
+ }), HttpApiEndpoint.post("create", "/organizations", {
955
+ payload: CreateOrganization,
956
+ success: OrganizationMembership,
957
+ error: WriteErrors
958
+ }), HttpApiEndpoint.get("get", "/organizations/:organizationId", {
959
+ params: organizationParams,
960
+ success: OrganizationMembership,
961
+ error: ReadErrors
962
+ }), HttpApiEndpoint.patch("update", "/organizations/:organizationId", {
963
+ params: organizationParams,
964
+ payload: UpdateOrganization,
965
+ success: Organization,
966
+ error: WriteErrors
967
+ }), HttpApiEndpoint.delete("delete", "/organizations/:organizationId", {
968
+ params: organizationParams,
969
+ error: WriteErrors
970
+ }), HttpApiEndpoint.get("getDeletion", "/organizations/:organizationId/deletion", {
971
+ params: organizationParams,
972
+ success: OrganizationDeletion,
973
+ error: ReadErrors
974
+ })) {
975
+ }
976
+
977
+ class MembersGroup extends HttpApiGroup.make("members").add(HttpApiEndpoint.get("list", "/organizations/:organizationId/members", {
978
+ params: organizationParams,
979
+ success: Schema9.Array(Member),
980
+ error: ReadErrors
981
+ }), HttpApiEndpoint.patch("updateRole", "/organizations/:organizationId/members/:memberId", {
982
+ params: { ...organizationParams, memberId: MemberId },
983
+ payload: UpdateMemberRole,
984
+ success: Member,
985
+ error: WriteErrors
986
+ }), HttpApiEndpoint.delete("remove", "/organizations/:organizationId/members/:memberId", {
987
+ params: { ...organizationParams, memberId: MemberId },
988
+ error: WriteErrors
989
+ })) {
990
+ }
991
+
992
+ class InvitationsGroup extends HttpApiGroup.make("invitations").add(HttpApiEndpoint.get("list", "/organizations/:organizationId/invitations", {
993
+ params: organizationParams,
994
+ success: Schema9.Array(Invitation),
995
+ error: ReadErrors
996
+ }), HttpApiEndpoint.post("create", "/organizations/:organizationId/invitations", {
997
+ params: organizationParams,
998
+ payload: CreateInvitation,
999
+ success: Invitation,
1000
+ error: WriteErrors
1001
+ }), HttpApiEndpoint.post("resend", "/organizations/:organizationId/invitations/:invitationId/resend", {
1002
+ params: { ...organizationParams, invitationId: InvitationId },
1003
+ success: Invitation,
1004
+ error: WriteErrors
1005
+ }), HttpApiEndpoint.delete("cancel", "/organizations/:organizationId/invitations/:invitationId", {
1006
+ params: { ...organizationParams, invitationId: InvitationId },
1007
+ error: WriteErrors
1008
+ }), HttpApiEndpoint.get("preview", "/invitations/:invitationId", {
1009
+ params: { invitationId: InvitationId },
1010
+ success: InvitationPreview,
1011
+ error: ReadErrors
1012
+ }), HttpApiEndpoint.post("accept", "/invitations/:invitationId/accept", {
1013
+ params: { invitationId: InvitationId },
1014
+ success: OrganizationMembership,
1015
+ error: WriteErrors
1016
+ }), HttpApiEndpoint.post("decline", "/invitations/:invitationId/decline", {
1017
+ params: { invitationId: InvitationId },
1018
+ error: WriteErrors
1019
+ })) {
1020
+ }
1021
+
1022
+ class ApiKeysGroup extends HttpApiGroup.make("apiKeys").add(HttpApiEndpoint.get("list", "/organizations/:organizationId/api-keys", {
1023
+ params: organizationParams,
1024
+ query: { projectId: Schema9.optional(ProjectId) },
1025
+ success: Schema9.Array(ApiKey),
1026
+ error: ReadErrors
1027
+ }), HttpApiEndpoint.post("create", "/organizations/:organizationId/api-keys", {
1028
+ params: organizationParams,
1029
+ payload: CreateApiKey,
1030
+ success: CreatedApiKey,
1031
+ error: WriteErrors
1032
+ }), HttpApiEndpoint.delete("revoke", "/organizations/:organizationId/api-keys/:keyId", {
1033
+ params: { ...organizationParams, keyId: ApiKeyId },
1034
+ error: WriteErrors
1035
+ })) {
1036
+ }
1037
+
1038
+ // ../../packages/cloud-api/src/groups/billing.ts
1039
+ import { Schema as Schema10 } from "effect";
1040
+ import { HttpApiEndpoint as HttpApiEndpoint2, HttpApiGroup as HttpApiGroup2 } from "effect/http-api";
1041
+ var organizationParams2 = { organizationId: OrganizationId };
1042
+
1043
+ class BillingGroup extends HttpApiGroup2.make("billing").add(HttpApiEndpoint2.get("listPlans", "/billing/plans", {
1044
+ success: PlanCatalog,
1045
+ error: SelfErrors
1046
+ }), HttpApiEndpoint2.get("get", "/organizations/:organizationId/billing", {
1047
+ params: organizationParams2,
1048
+ success: BillingSummary,
1049
+ error: ReadErrors
1050
+ }), HttpApiEndpoint2.get("listInvoices", "/organizations/:organizationId/billing/invoices", {
1051
+ params: organizationParams2,
1052
+ success: Schema10.Array(Invoice),
1053
+ error: ReadErrors
1054
+ }), HttpApiEndpoint2.put("setSpendLimit", "/organizations/:organizationId/billing/spend-limit", {
1055
+ params: organizationParams2,
1056
+ payload: SetSpendLimit,
1057
+ success: SpendLimit,
1058
+ error: WriteErrors
1059
+ }), HttpApiEndpoint2.post("startCheckout", "/organizations/:organizationId/billing/checkout", {
1060
+ params: organizationParams2,
1061
+ payload: StartCheckout,
1062
+ success: HostedSession,
1063
+ error: WriteErrors
1064
+ }), HttpApiEndpoint2.post("changePlan", "/organizations/:organizationId/billing/plan", {
1065
+ params: organizationParams2,
1066
+ payload: StartCheckout,
1067
+ success: PlanChange,
1068
+ error: WriteErrors
1069
+ }), HttpApiEndpoint2.post("openPortal", "/organizations/:organizationId/billing/portal", {
1070
+ params: organizationParams2,
1071
+ success: HostedSession,
1072
+ error: WriteErrors
1073
+ })) {
1074
+ }
1075
+
1076
+ class UsageGroup extends HttpApiGroup2.make("usage").add(HttpApiEndpoint2.get("get", "/organizations/:organizationId/usage", {
1077
+ params: organizationParams2,
1078
+ query: { period: Schema10.optional(BillingPeriod) },
1079
+ success: Usage,
1080
+ error: ReadErrors
1081
+ })) {
1082
+ }
1083
+
1084
+ class AuditGroup extends HttpApiGroup2.make("audit").add(HttpApiEndpoint2.get("list", "/organizations/:organizationId/audit-log", {
1085
+ params: organizationParams2,
1086
+ query: {
1087
+ ...pageQuery,
1088
+ action: Schema10.optional(Schema10.String),
1089
+ actorId: Schema10.optional(Schema10.String)
1090
+ },
1091
+ success: Page(AuditEntry),
1092
+ error: ReadErrors
1093
+ })) {
1094
+ }
1095
+
1096
+ // ../../packages/cloud-api/src/groups/deployments.ts
1097
+ import { Schema as Schema12 } from "effect";
1098
+ import { HttpApiEndpoint as HttpApiEndpoint3, HttpApiGroup as HttpApiGroup3, HttpApiSchema, OpenApi } from "effect/http-api";
1099
+
1100
+ // ../../packages/cloud-api/src/logs.ts
1101
+ import { Schema as Schema11 } from "effect";
1102
+ var MAX_LOG_LINES = 200;
1103
+ var MAX_LOG_TEXT_BYTES = 4096;
1104
+ var MAX_LOG_WINDOW_SECONDS = 3600;
1105
+ var MAX_LOG_WAIT_SECONDS = 20;
1106
+ var LogCursor = Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(2048));
1107
+ var LogLimit = Schema11.Int.check(Schema11.isBetween({ minimum: 1, maximum: MAX_LOG_LINES }));
1108
+ var LogWait = Schema11.Int.check(Schema11.isBetween({ minimum: 0, maximum: MAX_LOG_WAIT_SECONDS }));
1109
+ var logQuery = {
1110
+ since: Schema11.optional(Timestamp),
1111
+ limit: Schema11.optional(LogLimit),
1112
+ cursor: Schema11.optional(LogCursor),
1113
+ wait: Schema11.optional(LogWait)
1114
+ };
1115
+ var RunnerLogLine = Schema11.Struct({
1116
+ id: Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(512)),
1117
+ deploymentId: DeploymentId,
1118
+ runnerId: Schema11.String.check(Schema11.isMinLength(1), Schema11.isMaxLength(256)),
1119
+ at: Timestamp,
1120
+ stream: Schema11.Literals(["stdout", "stderr", "unknown"]),
1121
+ text: Schema11.String.check(Schema11.makeFilter((text) => new TextEncoder().encode(text).byteLength <= MAX_LOG_TEXT_BYTES || "Log text exceeds the byte limit")),
1122
+ clipped: Schema11.Boolean
1123
+ });
1124
+ var RunnerLogPage = Schema11.Struct({
1125
+ lines: Schema11.Array(RunnerLogLine).check(Schema11.isMaxLength(MAX_LOG_LINES)),
1126
+ cursor: LogCursor,
1127
+ more: Schema11.Boolean
1128
+ });
1129
+
1130
+ // ../../packages/cloud-api/src/groups/deployments.ts
1131
+ var projectParams = { projectId: ProjectId };
1132
+ var deploymentParams = { ...projectParams, deploymentId: DeploymentId };
1133
+
1134
+ class DeploymentsGroup extends HttpApiGroup3.make("deployments").add(HttpApiEndpoint3.get("getEnvironmentLogs", "/projects/:projectId/environments/:environment/logs", {
1135
+ params: { ...projectParams, environment: EnvironmentName },
1136
+ query: logQuery,
1137
+ success: RunnerLogPage,
1138
+ error: ReadErrors
1139
+ }).annotate(OpenApi.Description, "Reads recent stdout/stderr from the environment's current deployment. Authorization is checked on every read, including resumed polls, and suspended organizations remain readable. Defaults: since five minutes ago, limit 100, wait 0. The server clamps since to the past hour through now, so network delay and client clock skew do not reject a window boundary; limit is 1–200 and wait is 0–20 seconds. A cursor, at most 2048 characters, resumes the same authorized resource and takes precedence over since. More means another page is immediately available: continue with the cursor and wait 0 until more is false, then follow with wait 20. A current-deployment change switches environment follow to the new deployment and resets its provider position, retaining the original bounded window. Provider retention is recent and best-effort, not an archive. No current deployment returns an empty page. Text is clipped at 4096 UTF-8 bytes; each line's clipped flag reports that independently of more."), HttpApiEndpoint3.get("getLogs", "/projects/:projectId/deployments/:deploymentId/logs", {
1140
+ params: deploymentParams,
1141
+ query: logQuery,
1142
+ success: RunnerLogPage,
1143
+ error: ReadErrors
1144
+ }).annotate(OpenApi.Description, "Reads only the authorized deployment's customer runner stdout/stderr, with the same bounds and cursor protocol as environment logs. A deployment from another project or organization is not visible. Runner identifiers come only from the deployment's stored runner records, never from the cursor or caller input."), HttpApiEndpoint3.get("list", "/projects/:projectId/deployments", {
1145
+ params: projectParams,
1146
+ query: {
1147
+ ...pageQuery,
1148
+ environment: Schema12.optional(EnvironmentName),
1149
+ status: Schema12.optional(DeploymentStatus)
1150
+ },
1151
+ success: Page(DeploymentSummary),
1152
+ error: ReadErrors
1153
+ }), HttpApiEndpoint3.post("create", "/projects/:projectId/deployments", {
1154
+ params: projectParams,
1155
+ payload: CreateDeployment,
1156
+ success: DeploymentDetail,
1157
+ error: WriteErrors
1158
+ }), HttpApiEndpoint3.post("uploadSource", "/projects/:projectId/sources", {
1159
+ params: projectParams,
1160
+ payload: Schema12.Uint8Array.pipe(HttpApiSchema.asUint8Array({ contentType: "application/gzip" })),
1161
+ success: SourceArchive,
1162
+ error: [...WriteErrors, PayloadTooLarge]
1163
+ }).annotate(OpenApi.Description, "Stores a gzip-compressed tar of a build context for the project and answers its digest, the SHA-256 of the bytes sent. Sending the same bytes again answers the same digest. A deployment created with `source` naming that digest is built from it by the control plane's builder. Access and the builder are checked before the body is read: a caller without write access answers 403 and a control plane without a builder 501 `NotImplemented`. A body over 64 MiB answers 413 `PayloadTooLarge`, before any byte is read when its `content-length` says so, and as soon as it passes the limit otherwise."), HttpApiEndpoint3.get("get", "/projects/:projectId/deployments/:deploymentId", {
1164
+ params: deploymentParams,
1165
+ success: DeploymentDetail,
1166
+ error: ReadErrors
1167
+ }), HttpApiEndpoint3.post("recordBuild", "/projects/:projectId/deployments/:deploymentId/build", {
1168
+ params: deploymentParams,
1169
+ payload: RecordBuild,
1170
+ success: DeploymentDetail,
1171
+ error: WriteErrors
1172
+ }), HttpApiEndpoint3.post("failBuild", "/projects/:projectId/deployments/:deploymentId/build-failure", {
1173
+ params: deploymentParams,
1174
+ payload: FailBuild,
1175
+ success: DeploymentDetail,
1176
+ error: WriteErrors
1177
+ }), HttpApiEndpoint3.get("getBuildLog", "/projects/:projectId/deployments/:deploymentId/build-log", {
1178
+ params: deploymentParams,
1179
+ query: { after: Schema12.optional(NonNegativeInt) },
1180
+ success: BuildLog,
1181
+ error: ReadErrors
1182
+ }), HttpApiEndpoint3.post("rollback", "/projects/:projectId/deployments/:deploymentId/rollback", {
1183
+ params: deploymentParams,
1184
+ success: DeploymentDetail,
1185
+ error: WriteErrors
1186
+ }).annotate(OpenApi.Description, "Rolls the environment back to the earlier deployment named by `deploymentId`. That deployment must have reached `live` before (status `live`, `drained` or `rolled-back`) and must not be the one live now; otherwise the answer is 409. The build is not repeated: a new deployment in the same environment redeploys that deployment's image and environment-variable snapshot, its `rolledBackFrom` is `deploymentId`, and its build and migrate steps are `skipped`. The new deployment starts `in-progress` and becomes `live` or `failed`. When it becomes `live`, the deployment that was live ends `rolled-back`; if it fails, that deployment stays `live`. The target keeps its own status. A second rollout in the environment while one is `in-progress` answers 409. The response is the new deployment."), HttpApiEndpoint3.post("redeploy", "/projects/:projectId/deployments/:deploymentId/redeploy", {
1187
+ params: deploymentParams,
1188
+ success: DeploymentDetail,
1189
+ error: WriteErrors
1190
+ })) {
1191
+ }
1192
+
1193
+ // ../../packages/cloud-api/src/groups/projects.ts
1194
+ import { Schema as Schema13 } from "effect";
1195
+ import { HttpApiEndpoint as HttpApiEndpoint4, HttpApiGroup as HttpApiGroup4 } from "effect/http-api";
1196
+ var projectParams2 = { projectId: ProjectId };
1197
+ var environmentParams = { ...projectParams2, environment: EnvironmentName };
1198
+
1199
+ class ProjectsGroup extends HttpApiGroup4.make("projects").add(HttpApiEndpoint4.get("list", "/organizations/:organizationId/projects", {
1200
+ params: { organizationId: OrganizationId },
1201
+ success: Schema13.Array(Project),
1202
+ error: ReadErrors
1203
+ }), HttpApiEndpoint4.post("create", "/organizations/:organizationId/projects", {
1204
+ params: { organizationId: OrganizationId },
1205
+ payload: CreateProject,
1206
+ success: Project,
1207
+ error: WriteErrors
1208
+ }), HttpApiEndpoint4.get("get", "/projects/:projectId", {
1209
+ params: projectParams2,
1210
+ success: Project,
1211
+ error: ReadErrors
1212
+ }), HttpApiEndpoint4.patch("update", "/projects/:projectId", {
1213
+ params: projectParams2,
1214
+ payload: UpdateProject,
1215
+ success: Project,
1216
+ error: WriteErrors
1217
+ }), HttpApiEndpoint4.delete("delete", "/projects/:projectId", {
1218
+ params: projectParams2,
1219
+ error: WriteErrors
1220
+ }), HttpApiEndpoint4.get("listEnvironments", "/projects/:projectId/environments", {
1221
+ params: projectParams2,
1222
+ success: Schema13.Array(Environment),
1223
+ error: ReadErrors
1224
+ }), HttpApiEndpoint4.post("createEnvironment", "/projects/:projectId/environments", {
1225
+ params: projectParams2,
1226
+ payload: CreateEnvironment,
1227
+ success: Environment,
1228
+ error: WriteErrors
1229
+ }), HttpApiEndpoint4.get("getEnvironment", "/projects/:projectId/environments/:environment", {
1230
+ params: environmentParams,
1231
+ success: Environment,
1232
+ error: ReadErrors
1233
+ }), HttpApiEndpoint4.delete("deleteEnvironment", "/projects/:projectId/environments/:environment", {
1234
+ params: environmentParams,
1235
+ error: WriteErrors
1236
+ }), HttpApiEndpoint4.get("getEndpoints", "/projects/:projectId/environments/:environment/endpoints", {
1237
+ params: environmentParams,
1238
+ success: ProjectEndpoints,
1239
+ error: ReadErrors
1240
+ })) {
1241
+ }
1242
+
1243
+ class EnvironmentVariablesGroup extends HttpApiGroup4.make("environmentVariables").add(HttpApiEndpoint4.get("list", "/projects/:projectId/environments/:environment/variables", {
1244
+ params: environmentParams,
1245
+ success: Schema13.Array(EnvVariable),
1246
+ error: ReadErrors
1247
+ }), HttpApiEndpoint4.put("set", "/projects/:projectId/environments/:environment/variables/:name", {
1248
+ params: { ...environmentParams, name: EnvVariableName },
1249
+ payload: SetEnvVariable,
1250
+ success: EnvVariable,
1251
+ error: WriteErrors
1252
+ }), HttpApiEndpoint4.delete("delete", "/projects/:projectId/environments/:environment/variables/:name", {
1253
+ params: { ...environmentParams, name: EnvVariableName },
1254
+ error: WriteErrors
1255
+ }), HttpApiEndpoint4.post("import", "/projects/:projectId/environments/:environment/variables/import", {
1256
+ params: environmentParams,
1257
+ payload: ImportEnvVariables,
1258
+ success: ImportEnvVariablesResult,
1259
+ error: WriteErrors
1260
+ })) {
1261
+ }
1262
+
1263
+ class DomainsGroup extends HttpApiGroup4.make("domains").add(HttpApiEndpoint4.get("list", "/projects/:projectId/domains", {
1264
+ params: projectParams2,
1265
+ success: Schema13.Array(Domain),
1266
+ error: ReadErrors
1267
+ }), HttpApiEndpoint4.post("add", "/projects/:projectId/domains", {
1268
+ params: projectParams2,
1269
+ payload: AddDomain,
1270
+ success: Domain,
1271
+ error: WriteErrors
1272
+ }), HttpApiEndpoint4.post("verify", "/projects/:projectId/domains/:domainId/verify", {
1273
+ params: { ...projectParams2, domainId: DomainId },
1274
+ success: Domain,
1275
+ error: WriteErrors
1276
+ }), HttpApiEndpoint4.delete("remove", "/projects/:projectId/domains/:domainId", {
1277
+ params: { ...projectParams2, domainId: DomainId },
1278
+ error: WriteErrors
1279
+ })) {
1280
+ }
1281
+
1282
+ class RegionsGroup extends HttpApiGroup4.make("regions").add(HttpApiEndpoint4.get("catalog", "/regions", {
1283
+ success: Schema13.Array(Region),
1284
+ error: ReadErrors
1285
+ }), HttpApiEndpoint4.get("list", "/projects/:projectId/environments/:environment/regions", {
1286
+ params: environmentParams,
1287
+ success: Schema13.Array(ProjectRegion),
1288
+ error: ReadErrors
1289
+ }), HttpApiEndpoint4.post("add", "/projects/:projectId/regions", {
1290
+ params: projectParams2,
1291
+ payload: AddRegion,
1292
+ success: Region,
1293
+ error: WriteErrors
1294
+ }), HttpApiEndpoint4.delete("remove", "/projects/:projectId/regions/:region", {
1295
+ params: { ...projectParams2, region: RegionId },
1296
+ error: WriteErrors
1297
+ }), HttpApiEndpoint4.put("setHome", "/projects/:projectId/home-region", {
1298
+ params: projectParams2,
1299
+ payload: SetHomeRegion,
1300
+ success: Project,
1301
+ error: WriteErrors
1302
+ })) {
1303
+ }
1304
+
1305
+ class IntegrationsGroup extends HttpApiGroup4.make("integrations").add(HttpApiEndpoint4.get("list", "/projects/:projectId/integrations", {
1306
+ params: projectParams2,
1307
+ success: Schema13.Array(Integration),
1308
+ error: ReadErrors
1309
+ }), HttpApiEndpoint4.post("connect", "/projects/:projectId/integrations/:kind", {
1310
+ params: { ...projectParams2, kind: IntegrationKind },
1311
+ payload: ConnectIntegration,
1312
+ success: IntegrationConnection,
1313
+ error: WriteErrors
1314
+ }), HttpApiEndpoint4.delete("disconnect", "/projects/:projectId/integrations/:kind", {
1315
+ params: { ...projectParams2, kind: IntegrationKind },
1316
+ error: WriteErrors
1317
+ })) {
1318
+ }
1319
+
1320
+ // ../../packages/cloud-api/src/groups/runtime.ts
1321
+ import { Schema as Schema14 } from "effect";
1322
+ import { HttpApiEndpoint as HttpApiEndpoint5, HttpApiGroup as HttpApiGroup5, HttpApiSchema as HttpApiSchema2, OpenApi as OpenApi2 } from "effect/http-api";
1323
+ var environmentParams2 = { projectId: ProjectId, environment: EnvironmentName };
1324
+ var actorTypeParams = { ...environmentParams2, actorType: Schema14.String };
1325
+ var actorParams = { ...actorTypeParams, key: Schema14.String };
1326
+ var InspectErrors = [...ReadErrors, RunnerDefect];
1327
+
1328
+ class RuntimeGroup extends HttpApiGroup5.make("runtime").add(HttpApiEndpoint5.get("getOverview", "/projects/:projectId/environments/:environment/runtime/overview", {
1329
+ params: environmentParams2,
1330
+ success: Overview,
1331
+ error: InspectErrors
1332
+ }), HttpApiEndpoint5.get("getSidebarCounts", "/projects/:projectId/environments/:environment/runtime/sidebar-counts", { params: environmentParams2, success: SidebarCounts, error: InspectErrors }), HttpApiEndpoint5.get("search", "/projects/:projectId/environments/:environment/runtime/search", {
1333
+ params: environmentParams2,
1334
+ query: { q: Schema14.String.pipe(Schema14.check(Schema14.isMinLength(1), Schema14.isMaxLength(256))) },
1335
+ success: Schema14.Array(SearchResult),
1336
+ error: InspectErrors
1337
+ }), HttpApiEndpoint5.get("listActorTypes", "/projects/:projectId/environments/:environment/runtime/actor-types", {
1338
+ params: environmentParams2,
1339
+ success: Schema14.Array(ActorTypeSummary),
1340
+ error: InspectErrors
1341
+ }), HttpApiEndpoint5.get("getActorType", "/projects/:projectId/environments/:environment/runtime/actor-types/:actorType", { params: actorTypeParams, success: ActorTypeSummary, error: InspectErrors }), HttpApiEndpoint5.get("getActorTypeActivity", "/projects/:projectId/environments/:environment/runtime/actor-types/:actorType/activity", {
1342
+ params: actorTypeParams,
1343
+ query: { window: Schema14.optional(SeriesWindow) },
1344
+ success: ActorTypeActivity,
1345
+ error: InspectErrors
1346
+ }).annotate(OpenApi2.Description, "Commands per second over the window (default 24h) and the volume of each command, for one actor type, as the serving runner counted them since `since`. `NotImplemented` while more than one runner serves the environment."), HttpApiEndpoint5.get("getActorTypeLatency", "/projects/:projectId/environments/:environment/runtime/actor-types/:actorType/latency", {
1347
+ params: actorTypeParams,
1348
+ query: { window: Schema14.optional(SeriesWindow) },
1349
+ success: TurnLatency,
1350
+ error: InspectErrors
1351
+ }).annotate(OpenApi2.Description, "Turn-latency histogram over the window (default 24h) with p50, p95 and p99, for one actor type, as the serving runner measured them since `since`. `NotImplemented` while more than one runner serves the environment."), HttpApiEndpoint5.get("listActorInstances", "/projects/:projectId/environments/:environment/runtime/actor-types/:actorType/instances", {
1352
+ params: actorTypeParams,
1353
+ query: { ...pageQuery, status: Schema14.optional(Schema14.Literals(["awake", "idle"])) },
1354
+ success: Page(ActorInstance),
1355
+ error: InspectErrors
1356
+ }), HttpApiEndpoint5.get("inspectActor", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key", { params: actorParams, success: ActorInspector, error: InspectErrors }), HttpApiEndpoint5.get("listActorTables", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key/tables", { params: actorParams, success: Schema14.Array(OwnedTableRows), error: ReadErrors }), HttpApiEndpoint5.get("listActorReceipts", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key/receipts", { params: actorParams, query: pageQuery, success: Page(Receipt), error: InspectErrors }), HttpApiEndpoint5.get("listActorEvents", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key/events", { params: actorParams, success: Schema14.Array(ActorEvent), error: InspectErrors }), HttpApiEndpoint5.get("listActorJobs", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key/jobs", { params: actorParams, success: Schema14.Array(ActorJob), error: InspectErrors }), HttpApiEndpoint5.get("listActorTimeline", "/projects/:projectId/environments/:environment/runtime/actors/:actorType/:key/timeline", {
1357
+ params: actorParams,
1358
+ query: pageQuery,
1359
+ success: Page(ActorTimelineEntry),
1360
+ error: InspectErrors
1361
+ }), HttpApiEndpoint5.get("listCommands", "/projects/:projectId/environments/:environment/runtime/commands", {
1362
+ params: environmentParams2,
1363
+ query: {
1364
+ ...pageQuery,
1365
+ actorType: Schema14.optional(Schema14.String),
1366
+ outcome: Schema14.optional(CommandOutcome)
1367
+ },
1368
+ success: Page(CommandLogEntry),
1369
+ error: InspectErrors
1370
+ }), HttpApiEndpoint5.post("sendCommand", "/projects/:projectId/environments/:environment/runtime/commands", {
1371
+ params: environmentParams2,
1372
+ payload: SendCommand,
1373
+ success: CommandSent,
1374
+ error: [
1375
+ ...WriteErrors,
1376
+ CommandFailed,
1377
+ CommandRefused,
1378
+ CommandExpired,
1379
+ RunnerDefect,
1380
+ ...QuotaErrors
1381
+ ]
1382
+ }).annotate(OpenApi2.Description, "Sends to an actor address, including one not yet created, without requiring an inspector read. Requires project write permission. `commandId` is an optional client idempotency key, not a runner command id. Its scope is organization/project/environment/actor address/command, independent of deployment. The control plane durably assigns a runner-minted id and stores only a canonical payload hash; the same key and JSON input reuse it and replay the receipt with `replayed: true` within the runner's retry window. Different input returns 409 Conflict. After expiry, the key is retained as a tombstone for 30 days and returns 410 `CommandExpired`; reusing it after that starts a new command. Declared actor errors are 422 CommandFailed; admission refusals are typed 4xx, including 422 CommandRefused. Mailbox backpressure remains 503 Unavailable. Remote defects are opaque, non-retryable 502 RunnerDefect errors. The edge's usage refusals keep the framework's tags and payloads: a full Free command quota is a 429 `QuotaExceeded`, a passed spend limit a 402 `SpendLimitExceeded`, a full connection allowance a 429 `ConnectionLimitExceeded` and a Free tenant at its storage cap a 429 `StorageQuotaExceeded`. A command the edge cannot bill, because the tenant has no organization, the organization no billing account, or its plan is not in the pricing configuration, is a 402 `QuotaUnbound` carrying that reason, never a generic 503."), HttpApiEndpoint5.get("streamCommands", "/projects/:projectId/environments/:environment/runtime/commands/stream", {
1383
+ params: environmentParams2,
1384
+ query: {
1385
+ actorType: Schema14.optional(Schema14.String),
1386
+ outcome: Schema14.optional(CommandOutcome)
1387
+ },
1388
+ success: HttpApiSchema2.StreamSse({
1389
+ data: Schema14.toCodecJson(CommandLogEntry),
1390
+ error: CommandStreamGap
1391
+ }),
1392
+ error: InspectErrors
1393
+ }).annotate(OpenApi2.Description, "Each command the serving runner commits from now on, filtered by actor type and outcome (`replayed` is always empty, since a replay commits no turn), with a payload preview of at most 256 characters that the runner cut and redacted. The control plane resumes across the runner's credential expiry; the stream fails with `CommandStreamGap` when the runner can no longer resume it without missing commands, and ends when the runner goes away; a client reconnects. `NotImplemented` while more than one runner serves the environment."), HttpApiEndpoint5.get("getJobs", "/projects/:projectId/environments/:environment/runtime/jobs", {
1394
+ params: environmentParams2,
1395
+ success: JobsSummary,
1396
+ error: InspectErrors
1397
+ }), HttpApiEndpoint5.get("listDeadLetters", "/projects/:projectId/environments/:environment/runtime/dead-letters", {
1398
+ params: environmentParams2,
1399
+ query: pageQuery,
1400
+ success: Page(DeadLetter),
1401
+ error: InspectErrors
1402
+ }), HttpApiEndpoint5.post("retryDeadLetter", "/projects/:projectId/environments/:environment/runtime/dead-letters/:deadLetterId/retry", {
1403
+ params: { ...environmentParams2, deadLetterId: DeadLetterId },
1404
+ error: WriteErrors
1405
+ }), HttpApiEndpoint5.post("discardDeadLetter", "/projects/:projectId/environments/:environment/runtime/dead-letters/:deadLetterId/discard", {
1406
+ params: { ...environmentParams2, deadLetterId: DeadLetterId },
1407
+ error: WriteErrors
1408
+ }), HttpApiEndpoint5.get("listWorkflows", "/projects/:projectId/environments/:environment/runtime/workflows", {
1409
+ params: environmentParams2,
1410
+ query: {
1411
+ ...pageQuery,
1412
+ status: Schema14.optional(Schema14.Literals(["running", "waiting", "completed", "failed"]))
1413
+ },
1414
+ success: Page(Workflow),
1415
+ error: InspectErrors
1416
+ }), HttpApiEndpoint5.get("getTimers", "/projects/:projectId/environments/:environment/runtime/timers", {
1417
+ params: environmentParams2,
1418
+ success: TimersSummary,
1419
+ error: InspectErrors
1420
+ }), HttpApiEndpoint5.get("listSchedules", "/projects/:projectId/environments/:environment/runtime/schedules", {
1421
+ params: environmentParams2,
1422
+ success: Schema14.Array(Schedule),
1423
+ error: InspectErrors
1424
+ }), HttpApiEndpoint5.get("getConnections", "/projects/:projectId/environments/:environment/runtime/connections", { params: environmentParams2, success: ConnectionsSummary, error: InspectErrors })) {
1425
+ }
1426
+
1427
+ // ../../packages/cloud-api/src/contract.ts
1428
+ class CloudApi extends HttpApi.make("akter-cloud").add(AccountGroup, OrganizationsGroup, MembersGroup, InvitationsGroup, ApiKeysGroup, ProjectsGroup, EnvironmentVariablesGroup, DomainsGroup, RegionsGroup, IntegrationsGroup, DeploymentsGroup, RuntimeGroup, BillingGroup, UsageGroup, AuditGroup).middleware(Authentication).prefix("/api").annotateMerge(OpenApi3.annotations({ title: "Akter Cloud API" })) {
1429
+ }
1430
+ export {
1431
+ AccountGroup,
1432
+ ActorAddress,
1433
+ ActorEvent,
1434
+ ActorInspector,
1435
+ ActorInstance,
1436
+ ActorJob,
1437
+ ActorReference,
1438
+ ActorTimelineEntry,
1439
+ ActorTypeActivity,
1440
+ ActorTypeSummary,
1441
+ AddDomain,
1442
+ AddRegion,
1443
+ ApiKey,
1444
+ ApiKeyId,
1445
+ ApiKeyIdentity,
1446
+ ApiKeyPermission,
1447
+ ApiKeysGroup,
1448
+ AuditEntry,
1449
+ AuditGroup,
1450
+ Authentication,
1451
+ BillingGroup,
1452
+ BillingPeriod,
1453
+ BillingSummary,
1454
+ BuildLog,
1455
+ BuildLogLine,
1456
+ CalendarDay,
1457
+ CapState,
1458
+ CardPaymentMethod,
1459
+ CatalogPlan,
1460
+ CloudApi,
1461
+ CommandCaller,
1462
+ CommandExpired,
1463
+ CommandFailed,
1464
+ CommandLogEntry,
1465
+ CommandOutcome,
1466
+ CommandRefused,
1467
+ CommandSent,
1468
+ CommandStreamGap,
1469
+ CommandVolume,
1470
+ CommitSha,
1471
+ ComputeSize,
1472
+ ComputeUsage,
1473
+ Conflict,
1474
+ ConnectIntegration,
1475
+ ConnectionsSummary,
1476
+ CreateApiKey,
1477
+ CreateDeployment,
1478
+ CreateEnvironment,
1479
+ CreateInvitation,
1480
+ CreateOrganization,
1481
+ CreateProject,
1482
+ CreatedApiKey,
1483
+ CurrentIdentity,
1484
+ DeadLetter,
1485
+ DeadLetterId,
1486
+ DeleteAccount,
1487
+ DeploymentAuthor,
1488
+ DeploymentDetail,
1489
+ DeploymentId,
1490
+ DeploymentRunner,
1491
+ DeploymentSource,
1492
+ DeploymentStatus,
1493
+ DeploymentSummary,
1494
+ DeploymentsGroup,
1495
+ DnsRecord,
1496
+ Domain,
1497
+ DomainId,
1498
+ DomainStatus,
1499
+ DomainsGroup,
1500
+ Email,
1501
+ EnvVariable,
1502
+ EnvVariableName,
1503
+ Environment,
1504
+ EnvironmentId,
1505
+ EnvironmentName,
1506
+ EnvironmentVariablesGroup,
1507
+ FailBuild,
1508
+ Forbidden,
1509
+ HostedSession,
1510
+ Hostname,
1511
+ Identity,
1512
+ ImageDigest,
1513
+ ImportEnvVariables,
1514
+ ImportEnvVariablesResult,
1515
+ Integration,
1516
+ IntegrationConnection,
1517
+ IntegrationKind,
1518
+ IntegrationsGroup,
1519
+ Invitation,
1520
+ InvitationId,
1521
+ InvitationPreview,
1522
+ InvitationStatus,
1523
+ InvitationsGroup,
1524
+ InviteRole,
1525
+ Invoice,
1526
+ InvoiceId,
1527
+ JobStatus,
1528
+ JobTypeStats,
1529
+ JobsSummary,
1530
+ KnownPlan,
1531
+ LatencyBucket,
1532
+ LinkPaymentMethod,
1533
+ LogCursor,
1534
+ LogLimit,
1535
+ LogWait,
1536
+ MAX_LOG_LINES,
1537
+ MAX_LOG_TEXT_BYTES,
1538
+ MAX_LOG_WAIT_SECONDS,
1539
+ MAX_LOG_WINDOW_SECONDS,
1540
+ MAX_SOURCE_BYTES,
1541
+ Me,
1542
+ Member,
1543
+ MemberId,
1544
+ MemberUser,
1545
+ MembersGroup,
1546
+ Name,
1547
+ NonNegative,
1548
+ NonNegativeInt,
1549
+ NotFound,
1550
+ NotFoundResource,
1551
+ NotImplemented,
1552
+ NotificationEvent,
1553
+ NotificationPreference,
1554
+ NotificationSettings,
1555
+ Organization,
1556
+ OrganizationDeletion,
1557
+ OrganizationId,
1558
+ OrganizationMembership,
1559
+ OrganizationPlan,
1560
+ OrganizationsGroup,
1561
+ Overview,
1562
+ OwnedTable,
1563
+ OwnedTableRows,
1564
+ Page,
1565
+ PayloadTooLarge,
1566
+ PaymentMethod,
1567
+ PersonalDataExport,
1568
+ PinActor,
1569
+ PinnedActor,
1570
+ Plan,
1571
+ PlanCatalog,
1572
+ PlanChange,
1573
+ PlanFeature,
1574
+ PlanId,
1575
+ Preferences,
1576
+ Project,
1577
+ ProjectEndpoints,
1578
+ ProjectId,
1579
+ ProjectRegion,
1580
+ ProjectStatus,
1581
+ ProjectsGroup,
1582
+ QuotaErrors,
1583
+ QuotaExceeded2 as QuotaExceeded,
1584
+ QuotaUnbound,
1585
+ ReadErrors,
1586
+ Receipt,
1587
+ RecordBuild,
1588
+ Region,
1589
+ RegionId,
1590
+ RegionsGroup,
1591
+ Role,
1592
+ RolloutStep,
1593
+ RolloutStepName,
1594
+ RunnerDefect,
1595
+ RunnerLogLine,
1596
+ RunnerLogPage,
1597
+ RuntimeGroup,
1598
+ SOURCE_ENTRY,
1599
+ Schedule,
1600
+ SearchResult,
1601
+ SelfErrors,
1602
+ SendCommand,
1603
+ SeriesPoint,
1604
+ SeriesWindow,
1605
+ SessionIdentity,
1606
+ SetActiveOrganization,
1607
+ SetEnvVariable,
1608
+ SetHomeRegion,
1609
+ SetSpendLimit,
1610
+ SidebarCounts,
1611
+ Slug,
1612
+ SourceArchive,
1613
+ SourceDigest,
1614
+ SpendLimit,
1615
+ StartCheckout,
1616
+ StorageSample,
1617
+ Theme,
1618
+ TimersSummary,
1619
+ Timestamp,
1620
+ TurnLatency,
1621
+ Unauthorized,
1622
+ Unavailable,
1623
+ UnavailableReason,
1624
+ UnboundPlan,
1625
+ UnknownPlan,
1626
+ UpdateMemberRole,
1627
+ UpdateOrganization,
1628
+ UpdatePreferences,
1629
+ UpdateProfile,
1630
+ UpdateProject,
1631
+ Usage,
1632
+ UsageGroup,
1633
+ UsageMeter,
1634
+ UsageMeterName,
1635
+ UsagePricing,
1636
+ User,
1637
+ UserId,
1638
+ Workflow,
1639
+ WriteErrors,
1640
+ apiKeyHeaderName,
1641
+ logQuery,
1642
+ pageQuery,
1643
+ secureSessionCookieName,
1644
+ sessionCookieName
1645
+ };