@substrat-run/control-plane-api 0.133.0 → 0.134.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,398 @@
1
+ import type { AdminAction, AdminLogEntry, ChannelName, ConnectionHealthPage, ConnectionHealthState, DenialFilter, DenialSummary, DirectoryBackup, EdgeHealthReport, EntitlementGrant, EntitlementGrantInput, ExportBreak, HostnameBinding, HostnameStatus, ImportCursorMove, ImportCursorMoved, IssueEntry, IssueStatus, IssueStatusInput, MeterReading, MigrationDiff, MigrationProgress, ModelUsageSummary, ModuleId, OpsFailureEntry, Page, PeerGrantsStatusEntry, PeerSwitchResult, PermissionDenial, PermissionRegistry, PlatformRequestBacklog, PromotionAcknowledgement, Scope, ScopeBackup, ScopeId, ScopeStatus, StorageMeterReading, SweepRunEntry, SweepRunKind, SystemGrantsStatusEntry, SystemSwitchRecord, SystemSwitchResult, Tenant, TenantId, TenantRole, TenantStatus, Vertical, VerticalChannel, VerticalSource, VerticalVersion } from '@substrat-run/contracts';
2
+ import type { BlobStoreRecord, TenantStoreRecord } from '@substrat-run/kernel';
3
+ import type { ClientProvisionScopeInput } from './client.js';
4
+ import type { DoNamespaceRecord } from './do-namespaces.js';
5
+ import type { ConnectorCallsBucket } from './observability.js';
6
+ import type { PlatformRuntime } from './platform-runtime.js';
7
+ import { ControlPlaneTransport } from './transport.js';
8
+ /**
9
+ * The staff surface of the control-plane API as one typed client — what the console
10
+ * calls (#971). Where `ControlPlaneClient` is the vertical's connect seam (register a
11
+ * tenant, gate on the lifecycle), this is the whole operator vocabulary: tenants, scopes,
12
+ * the fleet reads, the vertical + version registry, the audit and failure logs.
13
+ *
14
+ * It shares everything about HOW a request is made with `ControlPlaneClient` — one
15
+ * transport, one error (`ControlPlaneError`), one reading of a problem document. The two
16
+ * are siblings rather than parent and child on purpose: they overlap in name (`getTenant`
17
+ * answers `undefined` on a 404 in the connect seam, which gates on absence, and throws
18
+ * here, where a missing tenant is a page-level failure) and a subclass would have made the
19
+ * connect seam's gate dispatch to the staff reading.
20
+ *
21
+ * Every method is an arrow-function property, not a prototype method, deliberately: the
22
+ * console hands them around unbound (`{ suspend: api.suspendScope }`), as it always has,
23
+ * and a prototype method would lose its `this` there.
24
+ *
25
+ * Answers are typed, not parsed — the same trust the console's hand-rolled client had.
26
+ */
27
+ /** One service's invocation aggregates — the control plane's observability proxy
28
+ * (provider-neutral seam; Cloudflare analytics is the current backend). */
29
+ export interface ServiceMetricsRow {
30
+ service: string;
31
+ /** Set for pushed verticals (the platform's dispatch pool), null for platform services. */
32
+ namespace: string | null;
33
+ requests: number;
34
+ errors: number;
35
+ subrequests: number;
36
+ /** Per-request CPU time quantiles, microseconds. */
37
+ cpuTimeP50: number;
38
+ cpuTimeP99: number;
39
+ }
40
+ /** One log event from the control plane's observability proxy. */
41
+ export interface RecentLogEvent {
42
+ timestamp: number | null;
43
+ level: string | null;
44
+ message: string | null;
45
+ service: string | null;
46
+ outcome: string | null;
47
+ raw: unknown;
48
+ }
49
+ /**
50
+ * One destination a deployed version was OBSERVED reaching (#859, D-46), joined with
51
+ * whether its manifest DECLARED it.
52
+ */
53
+ export interface ObservedEgressRow {
54
+ service: string;
55
+ host: string;
56
+ /** `durable-object` egress is the half the egress worker cannot intercept (D-46). */
57
+ origin: 'worker' | 'durable-object' | 'unknown';
58
+ calls: number;
59
+ lastSeen: number | null;
60
+ sampleUrl: string | null;
61
+ /** The version's declared surface; null = pushed before the declaration existed. */
62
+ declared: string[] | null;
63
+ /** Reached a host the declaration does not cover. Always false when `unenforced`. */
64
+ undeclared: boolean;
65
+ /** The version declares nothing, so the egress worker meters but does not enforce. */
66
+ unenforced: boolean;
67
+ }
68
+ export interface EgressReport {
69
+ rows: ObservedEgressRow[];
70
+ byService: {
71
+ service: string;
72
+ versionId: string;
73
+ version: string;
74
+ declared: string[] | null;
75
+ /** Declared but never seen in the window. Not a fault — a quiet window proves nothing. */
76
+ unused: string[];
77
+ }[];
78
+ /** The read was capped, so the host set is a FLOOR. Must be said out loud (#859). */
79
+ truncated: boolean;
80
+ servicesTruncated: boolean;
81
+ versionsConsidered: number;
82
+ versionsTotal: number;
83
+ /** Head sampling rate, or null for "coverage unknown" — not the same as 1. */
84
+ samplingRate: number | null;
85
+ hours: number;
86
+ }
87
+ /** A staff roster row (CP `staff_actor`) — who may act on the control plane. */
88
+ export interface StaffMember {
89
+ email: string;
90
+ /** Their identity in the admin log; null when the stored value is malformed. */
91
+ actor: string | null;
92
+ name: string | null;
93
+ addedAt: string;
94
+ /** Who granted it — null for rows that predate the Members surface. */
95
+ addedBy: string | null;
96
+ revokedAt: string | null;
97
+ }
98
+ export interface MembersReading {
99
+ staff: StaffMember[];
100
+ }
101
+ /** The tenant's platform-minted stores, as the console reads them (#301, #473). */
102
+ export interface TenantStores {
103
+ tenantStores: TenantStoreRecord[];
104
+ blobStores: BlobStoreRecord[];
105
+ }
106
+ /**
107
+ * The ONE pagination convention (contracts pagination.ts): every list route takes
108
+ * `?limit&cursor&order` (limit defaults 20, max 200 at the egress) and answers
109
+ * `{ entries, nextCursor }`. The admin log shipped this shape first; every list
110
+ * call below now speaks it, so a view walks any list the way AdminLog always has.
111
+ */
112
+ export interface PageQuery {
113
+ limit?: number;
114
+ cursor?: string;
115
+ order?: 'asc' | 'desc';
116
+ }
117
+ /** The admin-log page — now just the shared envelope (kept as the historical name). */
118
+ export type AdminLogPage = Page<AdminLogEntry>;
119
+ export interface AuditLogQuery extends PageQuery {
120
+ tenantId?: TenantId;
121
+ scopeId?: ScopeId;
122
+ actor?: string;
123
+ action?: AdminAction[];
124
+ since?: string;
125
+ until?: string;
126
+ }
127
+ /** The sweep-record filter (#1232) — mirrors SweepRunFilter, minus the cursor triple PageQuery carries. */
128
+ export interface SweepRunsQuery extends PageQuery {
129
+ kind?: SweepRunKind;
130
+ unit?: string;
131
+ outcome?: 'ok' | 'failed' | 'skipped';
132
+ tenantId?: TenantId;
133
+ scopeId?: ScopeId;
134
+ vertical?: string;
135
+ connectionId?: string;
136
+ since?: string;
137
+ until?: string;
138
+ }
139
+ /**
140
+ * `GET /connections/health` (#1690) — `status` is the DERIVED health state. No `order`:
141
+ * the walk is ascending by connection id only, and the route refuses `desc`.
142
+ */
143
+ export interface ConnectionHealthQuery extends Omit<PageQuery, 'order'> {
144
+ status?: ConnectionHealthState;
145
+ /** Free text, matched server-side before paging — so it finds rows on any page. */
146
+ q?: string;
147
+ provider?: string;
148
+ tenantId?: TenantId;
149
+ }
150
+ /** The ops-failure list's server-side narrowing (#559) — `reference` is an exact
151
+ * match, the `reference = <id>` a CI log hands the operator. */
152
+ export interface OpsFailuresQuery extends PageQuery {
153
+ tenantId?: TenantId;
154
+ scopeId?: ScopeId;
155
+ vertical?: string;
156
+ operation?: string;
157
+ /** The taxonomy code — the error-shape narrowing (#1233). */
158
+ code?: string;
159
+ /** One issue's exemplar rows (#1233) — the jump from Operations → Issues. */
160
+ fingerprint?: string;
161
+ reference?: string;
162
+ since?: string;
163
+ until?: string;
164
+ }
165
+ /** `GET /system-switches` (#1674) — the fleet read of the schedule kill switch. */
166
+ export interface SystemSwitchesQuery extends PageQuery {
167
+ position?: 'on' | 'off' | 'all';
168
+ tenantId?: TenantId;
169
+ scopeId?: ScopeId;
170
+ moduleId?: ModuleId;
171
+ vertical?: string;
172
+ }
173
+ /** The issues read (#1233). No cursor by design — grouping IS the compression. */
174
+ export interface IssuesQuery {
175
+ status?: IssueStatus;
176
+ operation?: string;
177
+ code?: string;
178
+ limit?: number;
179
+ }
180
+ export type { ConnectorCallsBucket, PlatformRuntime };
181
+ /** One Durable Object namespace as Cloudflare describes it. */
182
+ export type DoNamespace = DoNamespaceRecord;
183
+ /** A scope's health, as `GET …/scopes/:id/health` answers it (#321, #825). */
184
+ export interface ScopeHealth {
185
+ scopeId: ScopeId;
186
+ status: string;
187
+ servingRef: string | null;
188
+ roleCount: number | null;
189
+ roleProjectionEmpty: boolean;
190
+ missingStores?: {
191
+ binding: string;
192
+ kind: 'relational' | 'blob';
193
+ }[];
194
+ }
195
+ /** What the connect seam provisions, plus the storage shape the console picks. */
196
+ export interface ProvisionScopeInput extends ClientProvisionScopeInput {
197
+ storageShape?: 'A' | 'B';
198
+ }
199
+ export interface RebindScopeResult {
200
+ servingRef: string;
201
+ versionId: string;
202
+ alreadyBound?: boolean;
203
+ tables?: number;
204
+ }
205
+ export interface BindHostnameInput {
206
+ hostname: string;
207
+ tenantId: TenantId;
208
+ scopeId: ScopeId;
209
+ surface: string;
210
+ region?: 'eu' | null;
211
+ canonical?: boolean;
212
+ }
213
+ export declare class ControlPlaneStaffClient extends ControlPlaneTransport {
214
+ private json;
215
+ private post;
216
+ listTenants: (page?: PageQuery) => Promise<Page<Tenant>>;
217
+ getTenant: (id: TenantId) => Promise<Tenant>;
218
+ createTenant: (input: {
219
+ id: TenantId;
220
+ slug: string;
221
+ name: string;
222
+ }) => Promise<Tenant>;
223
+ setTenantStatus: (id: TenantId, status: TenantStatus) => Promise<Tenant>;
224
+ reapTenant: (id: TenantId) => Promise<Tenant>;
225
+ tenantStores: (id: TenantId) => Promise<TenantStores>;
226
+ listEntitlements: (id: TenantId) => Promise<EntitlementGrant[]>;
227
+ grantEntitlement: (id: TenantId, key: string, plan?: EntitlementGrantInput) => Promise<EntitlementGrant[]>;
228
+ revokeEntitlement: (id: TenantId, key: string) => Promise<EntitlementGrant[]>;
229
+ platformRuntime: () => Promise<PlatformRuntime | null>;
230
+ doNamespaces: (script: string) => Promise<DoNamespace[]>;
231
+ readMeters: (tenantId?: TenantId) => Promise<MeterReading>;
232
+ readStorage: (tenantId: TenantId, cursor?: ScopeId) => Promise<StorageMeterReading>;
233
+ readModelUsage: (q?: {
234
+ tenantId?: TenantId;
235
+ since?: string;
236
+ until?: string;
237
+ }) => Promise<ModelUsageSummary>;
238
+ listScopes: (filter?: {
239
+ tenantId?: TenantId;
240
+ status?: ScopeStatus[];
241
+ vertical?: string;
242
+ } & PageQuery) => Promise<Page<Scope>>;
243
+ migrationProgress: (vertical?: string) => Promise<MigrationProgress>;
244
+ getScope: (tenantId: TenantId, scopeId: ScopeId) => Promise<Scope>;
245
+ scopeHealth: (tenantId: TenantId, scopeId: ScopeId) => Promise<ScopeHealth>;
246
+ denialSummary: (t: TenantId, s: ScopeId, filter?: DenialFilter) => Promise<DenialSummary>;
247
+ listDenials: (t: TenantId, s: ScopeId, filter?: DenialFilter) => Promise<PermissionDenial[]>;
248
+ systemGrantsStatus: (t: TenantId, s: ScopeId) => Promise<SystemGrantsStatusEntry[]>;
249
+ switchScheduleOff: (t: TenantId, s: ScopeId, moduleId: ModuleId, reason: string) => Promise<SystemSwitchResult>;
250
+ switchScheduleOn: (t: TenantId, s: ScopeId, moduleId: ModuleId, reason: string) => Promise<SystemSwitchResult>;
251
+ peerGrantsStatus: (t: TenantId, s: ScopeId) => Promise<PeerGrantsStatusEntry[]>;
252
+ switchPeerOff: (t: TenantId, s: ScopeId, vertical: string, reason: string) => Promise<PeerSwitchResult>;
253
+ switchPeerOn: (t: TenantId, s: ScopeId, vertical: string, reason: string) => Promise<PeerSwitchResult>;
254
+ crossVerticalEdges: (t: TenantId, focus?: ScopeId) => Promise<EdgeHealthReport>;
255
+ moveImportCursor: (t: TenantId, s: ScopeId, move: ImportCursorMove) => Promise<ImportCursorMoved>;
256
+ provisionScope: (input: ProvisionScopeInput) => Promise<Scope>;
257
+ activateScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
258
+ suspendScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
259
+ unsuspendScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
260
+ /**
261
+ * Re-run the vertical's provision for a scope that already has one — NOT a status
262
+ * transition, which is why it sits outside the ladder above and outside
263
+ * `availableActions`. Nothing about the scope's state changes; what happens is that
264
+ * everything provisioning delivers is delivered again: entitlements, identity links,
265
+ * connection grants, and the vertical's OWN `onProvision` hook.
266
+ *
267
+ * Idempotent at the far end (K-31), so it is safe to press twice. It is the lever
268
+ * for two shapes of stuck install: the #332 lockout (roles projected, zero tuples,
269
+ * every login denied), and an install that predates something its vertical now mints
270
+ * for itself at provision — a new service principal, say — which no other path can
271
+ * ever deliver, because provision runs at install and never again.
272
+ */
273
+ reprovisionScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
274
+ archiveScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
275
+ unarchiveScope: (t: TenantId, s: ScopeId) => Promise<Scope>;
276
+ reapScope: (t: TenantId, s: ScopeId, opts?: {
277
+ backup?: boolean;
278
+ }) => Promise<Scope & {
279
+ backup: ScopeBackup | null;
280
+ }>;
281
+ rebindScopeVertical: (t: TenantId, s: ScopeId, vertical: string, opts?: {
282
+ ackMigrations?: boolean;
283
+ }) => Promise<RebindScopeResult>;
284
+ /** The copies held for a scope, newest first — readable after the reap (the tombstone survives). */
285
+ listScopeBackups: (t: TenantId, s: ScopeId) => Promise<ScopeBackup[]>;
286
+ /** Take a copy without reaping — a pre-migration checkpoint, or an export to keep. */
287
+ backupScope: (t: TenantId, s: ScopeId) => Promise<ScopeBackup>;
288
+ listDirectoryBackups: () => Promise<DirectoryBackup[]>;
289
+ backupDirectory: () => Promise<DirectoryBackup>;
290
+ deleteScope: (t: TenantId, s: ScopeId) => Promise<{
291
+ deleted: ScopeId;
292
+ }>;
293
+ listRoles: (filter?: {
294
+ tenantId?: TenantId;
295
+ source?: string;
296
+ } & PageQuery) => Promise<Page<TenantRole>>;
297
+ listHostnames: (filter?: {
298
+ tenantId?: TenantId;
299
+ scopeId?: ScopeId;
300
+ } & PageQuery) => Promise<Page<HostnameBinding>>;
301
+ bindHostname: (input: BindHostnameInput) => Promise<HostnameBinding>;
302
+ setHostnameStatus: (hostname: string, status: HostnameStatus, note?: string) => Promise<HostnameBinding>;
303
+ unbindHostname: (hostname: string) => Promise<void>;
304
+ /**
305
+ * Create one instance of a vertical (K-31). The control plane calls the
306
+ * vertical, because only it can create a usable scope DO.
307
+ *
308
+ * Call this BEFORE `provisionScope`: the directory row should only exist once
309
+ * the vertical is ready, so a failure leaves an invisible orphan rather than a
310
+ * directory row promising a scope that is not there.
311
+ */
312
+ provisionInstance: (verticalSlug: string, input: {
313
+ tenantId: TenantId;
314
+ scopeId: ScopeId;
315
+ owner: string;
316
+ slug: string;
317
+ name: string;
318
+ }) => Promise<{
319
+ tenantId: TenantId;
320
+ scopeId: ScopeId;
321
+ owner: string;
322
+ }>;
323
+ adminLog: (q?: AuditLogQuery) => Promise<AdminLogPage>;
324
+ listOpsFailures: (q?: OpsFailuresQuery) => Promise<Page<OpsFailureEntry>>;
325
+ listSweepRuns: (q?: SweepRunsQuery) => Promise<Page<SweepRunEntry>>;
326
+ listSystemSwitches: (q?: SystemSwitchesQuery) => Promise<Page<SystemSwitchRecord>>;
327
+ listConnectionHealth: (q?: ConnectionHealthQuery) => Promise<ConnectionHealthPage>;
328
+ connectorCalls: (q: {
329
+ hours: number;
330
+ provider?: string;
331
+ }) => Promise<{
332
+ hours: number;
333
+ buckets: ConnectorCallsBucket[];
334
+ }>;
335
+ listIssues: (q?: IssuesQuery) => Promise<{
336
+ entries: IssueEntry[];
337
+ }>;
338
+ setIssueStatus: (fingerprint: string, status: IssueStatusInput) => Promise<IssueEntry>;
339
+ listVerticals: (page?: PageQuery) => Promise<Page<Vertical>>;
340
+ registerVertical: (input: {
341
+ slug: string;
342
+ name: string;
343
+ source: VerticalSource;
344
+ }) => Promise<Vertical>;
345
+ listVersions: (slug: string, page?: PageQuery) => Promise<Page<VerticalVersion>>;
346
+ admitVersion: (slug: string, id: string) => Promise<VerticalVersion>;
347
+ rejectVersion: (slug: string, id: string, note: string) => Promise<VerticalVersion>;
348
+ listChannels: (slug: string, page?: PageQuery) => Promise<Page<VerticalChannel>>;
349
+ setVerticalListed: (slug: string, listed: boolean) => Promise<{
350
+ slug: string;
351
+ listed: boolean;
352
+ }>;
353
+ setInstallsBlocked: (slug: string, blocked: boolean) => Promise<{
354
+ slug: string;
355
+ installsBlocked: boolean;
356
+ }>;
357
+ setTenantProvisioner: (slug: string, granted: boolean) => Promise<{
358
+ slug: string;
359
+ tenantProvisioner: boolean;
360
+ }>;
361
+ setEmailSender: (slug: string, granted: boolean) => Promise<{
362
+ slug: string;
363
+ emailSender: boolean;
364
+ }>;
365
+ deleteVertical: (slug: string) => Promise<{
366
+ slug: string;
367
+ deleted: boolean;
368
+ }>;
369
+ promoteVersion: (slug: string, channel: ChannelName, versionId: string, acknowledge?: PromotionAcknowledgement) => Promise<VerticalChannel>;
370
+ promotionImpact: (slug: string, channel: ChannelName, versionId: string) => Promise<{
371
+ affected: ExportBreak[];
372
+ otherTenants?: number;
373
+ }>;
374
+ versionRegistry: (slug: string, versionId: string) => Promise<{
375
+ registry: PermissionRegistry | null;
376
+ }>;
377
+ versionMigrations: (slug: string, versionId: string, base?: string) => Promise<{
378
+ migrations: MigrationDiff | null;
379
+ }>;
380
+ bindScopeVersion: (tenantId: TenantId, scopeId: ScopeId, versionId: string) => Promise<Scope>;
381
+ listMembers: () => Promise<MembersReading>;
382
+ grantStaffAccess: (email: string, name?: string) => Promise<MembersReading>;
383
+ revokeStaffAccess: (email: string) => Promise<MembersReading>;
384
+ serviceMetrics: (hours: number) => Promise<ServiceMetricsRow[]>;
385
+ recentLogs: (q?: {
386
+ service?: string;
387
+ level?: string;
388
+ hours?: number;
389
+ limit?: number;
390
+ }) => Promise<RecentLogEvent[]>;
391
+ /** Observed-vs-declared outbound egress for a vertical's deployed versions (#859). */
392
+ verticalEgress: (slug: string, q?: {
393
+ hours?: number;
394
+ limit?: number;
395
+ }) => Promise<EgressReport>;
396
+ platformRequestBacklog: () => Promise<PlatformRequestBacklog>;
397
+ }
398
+ //# sourceMappingURL=staff-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staff-client.d.ts","sourceRoot":"","sources":["../src/staff-client.ts"],"names":[],"mappings":"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"}