@frockbot/cloudflare 0.0.0 → 0.7.292
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.
- package/build-artifact.ts +130 -0
- package/build-flutter-web.ts +508 -0
- package/deployment-config/README.md +414 -0
- package/deployment-config/cli.ts +228 -0
- package/deployment-config/generate.ts +689 -0
- package/deployment-config/jsonc.ts +18 -0
- package/deployment-config/profile-schema.generated.ts +391 -0
- package/deployment-config/profile.schema.json +358 -0
- package/deployment-config/profile.ts +124 -0
- package/migrations/0001_better_auth.sql +15 -0
- package/migrations/0002_drop_account_issuer.sql +8 -0
- package/package.json +61 -5
- package/release-version.ts +20 -0
- package/src/account-admission.ts +179 -0
- package/src/account-deletion.ts +274 -0
- package/src/admin-entrypoint.ts +194 -0
- package/src/admin-identities.ts +26 -0
- package/src/audit.ts +103 -0
- package/src/auth-package.access.ts +24 -0
- package/src/auth-package.ts +36 -0
- package/src/avatar-state-cleanup.ts +107 -0
- package/src/billing-computer.ts +267 -0
- package/src/billing-readiness.ts +21 -0
- package/src/billing.ts +461 -0
- package/src/bot-capabilities.ts +480 -0
- package/src/bot-recovery.ts +1 -0
- package/src/bot-state-channel.ts +702 -0
- package/src/bot-state.ts +3995 -0
- package/src/bot-template-cleanup.ts +98 -0
- package/src/bot-title-cleanup.ts +104 -0
- package/src/brand-icon.png +0 -0
- package/src/brand-logo.ts +2 -0
- package/src/brand.ts +36 -0
- package/src/client-compatibility.ts +51 -0
- package/src/compaction-announcement-cleanup.ts +113 -0
- package/src/computer-egress.ts +110 -0
- package/src/computer-host.ts +92 -0
- package/src/computer-screenshot-cleanup.ts +78 -0
- package/src/contracts.ts +832 -0
- package/src/debug.ts +272 -0
- package/src/default-packages-marker-cleanup.ts +39 -0
- package/src/deployment-policy-admin-host.ts +121 -0
- package/src/deployment-policy.ts +426 -0
- package/src/directory-profile-cleanup.ts +101 -0
- package/src/durable-rpc.ts +753 -0
- package/src/durable-session.ts +21 -0
- package/src/entry-boundary.ts +103 -0
- package/src/frock-ai.ts +338 -0
- package/src/gateway.ts +1392 -0
- package/src/group-chat.ts +736 -0
- package/src/hidden-bot-notifications-cleanup.ts +32 -0
- package/src/index.ts +2798 -0
- package/src/insights.ts +15 -0
- package/src/machine-messages-cleanup.ts +121 -0
- package/src/machine-socket.ts +164 -0
- package/src/memory-records.ts +181 -0
- package/src/memory.ts +145 -0
- package/src/model-rates.ts +252 -0
- package/src/native-auth.ts +1006 -0
- package/src/native-sessions.ts +121 -0
- package/src/notification-state-cleanup.ts +18 -0
- package/src/ollama-web-search-cleanup.ts +69 -0
- package/src/package-page-shapes-cleanup.ts +190 -0
- package/src/plugin-egress.ts +31 -0
- package/src/plugin-page-route.ts +72 -0
- package/src/plugin-panels-cleanup.ts +101 -0
- package/src/prepared-input-cleanup.ts +105 -0
- package/src/production-secrets.ts +484 -0
- package/src/project-cleanup.ts +123 -0
- package/src/project-events-cleanup.ts +152 -0
- package/src/publication-state-cleanup.ts +92 -0
- package/src/push.ts +498 -0
- package/src/request-body.ts +165 -0
- package/src/routine-state-cleanup.ts +57 -0
- package/src/search.ts +88 -0
- package/src/sidebar-label-cleanup.ts +165 -0
- package/src/skill-index-cleanup.ts +53 -0
- package/src/supersede-cleanup.ts +162 -0
- package/src/test-chat-cleanup.ts +93 -0
- package/src/uploads.ts +486 -0
- package/src/user-application.ts +1068 -0
- package/src/user-configuration.ts +4491 -0
- package/src/voice-assistant.ts +4999 -0
- package/src/voice-dictation.ts +743 -0
- package/src/working-context-cleanup.ts +96 -0
- package/src/workspace.ts +201 -0
- package/wrangler.jsonc +385 -0
- package/README.md +0 -3
package/src/contracts.ts
ADDED
|
@@ -0,0 +1,832 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
BotPluginsFrameV1,
|
|
3
|
+
PluginToolCommandV1,
|
|
4
|
+
SetBotPluginEnabledCommandV1,
|
|
5
|
+
} from "@frockbot/app/plugins/page";
|
|
6
|
+
import type { SetBotPluginEnabledReceiptV1 } from "@frockbot/app/plugins/bot";
|
|
7
|
+
import type {
|
|
8
|
+
SecretListViewV1,
|
|
9
|
+
SecretSubmitCommandV1,
|
|
10
|
+
SecretSubmitReceiptV1,
|
|
11
|
+
} from "@frockbot/app/secrets/shared";
|
|
12
|
+
import type { BotPluginToolReceiptV1 } from "@frockbot/app/plugins/views-bot";
|
|
13
|
+
import type {
|
|
14
|
+
CardActionCommandV1,
|
|
15
|
+
CardActionReceiptV1,
|
|
16
|
+
CardListViewV1,
|
|
17
|
+
CardViewV1,
|
|
18
|
+
} from "@frockbot/app/shell/cards";
|
|
19
|
+
import type {
|
|
20
|
+
SettingsFrame,
|
|
21
|
+
ConnectionsFrame,
|
|
22
|
+
SettingsChangeCommand,
|
|
23
|
+
} from "@frockbot/core/protocol-schemas";
|
|
24
|
+
import {
|
|
25
|
+
type AuthPackageV1,
|
|
26
|
+
type BotIsolateEnv,
|
|
27
|
+
type PluginWorkerEntrypoint,
|
|
28
|
+
type SessionEvent,
|
|
29
|
+
} from "@frockbot/core/contracts";
|
|
30
|
+
import type { MachineResultDeliveryV1 } from "@frockbot/app/machine/delivery";
|
|
31
|
+
import type { DebugGatewaySurface } from "./debug.js";
|
|
32
|
+
import type { BotTurnCommandRequestV1 } from "./durable-rpc.js";
|
|
33
|
+
import type {
|
|
34
|
+
BotConfigurationExecuteRpcV1,
|
|
35
|
+
BotConfigurationReadRpcV1,
|
|
36
|
+
BotSettingsViewV1,
|
|
37
|
+
CompositionCommandReceiptV1,
|
|
38
|
+
CompositionGenerationListViewV1,
|
|
39
|
+
CompositionGenerationViewV1,
|
|
40
|
+
ConnectionView,
|
|
41
|
+
RevertCompositionCommandV1,
|
|
42
|
+
OperationReceiptV1,
|
|
43
|
+
UserConfigurationExecuteRpcV1,
|
|
44
|
+
UserConfigurationReadRpcV1,
|
|
45
|
+
UserSettingsViewV1,
|
|
46
|
+
} from "@frockbot/core/configuration";
|
|
47
|
+
import type {
|
|
48
|
+
ConnectionCommandReceiptV1,
|
|
49
|
+
ConnectionCommandV1,
|
|
50
|
+
ConnectionCompletionResult,
|
|
51
|
+
CredentialLeaseV1,
|
|
52
|
+
RevokeConnectionResult,
|
|
53
|
+
StartConnectionResult,
|
|
54
|
+
} from "@frockbot/core/connection";
|
|
55
|
+
import type { MemoryVector, MemoryVectorMatch } from "@frockbot/app/memory";
|
|
56
|
+
// Flock DTOs cross only the authenticated hosted/backend seam.
|
|
57
|
+
import type {
|
|
58
|
+
BotDirectoryViewV1,
|
|
59
|
+
BotLifecycleCommandV1,
|
|
60
|
+
BotLifecycleDirectoryViewV1,
|
|
61
|
+
BotLifecycleReceiptV1,
|
|
62
|
+
BotMembershipViewV1,
|
|
63
|
+
BotRegistrationV1,
|
|
64
|
+
CreateBotCommandV1,
|
|
65
|
+
FlockReceiptV1,
|
|
66
|
+
AvatarIdentityViewV1,
|
|
67
|
+
UpdateAvatarCommandV1,
|
|
68
|
+
VoiceIdentityViewV1,
|
|
69
|
+
UpdateVoiceCommandV1,
|
|
70
|
+
LookIdentityViewV1,
|
|
71
|
+
UpdateLookCommandV1,
|
|
72
|
+
} from "@frockbot/app/flock/shared";
|
|
73
|
+
import type {
|
|
74
|
+
ApprovalDecisionCommandV1,
|
|
75
|
+
ApprovalDecisionReceiptV1,
|
|
76
|
+
ApprovalListViewV1,
|
|
77
|
+
} from "@frockbot/app/shell/approvals";
|
|
78
|
+
import type {
|
|
79
|
+
RoutineCommandReceiptV1,
|
|
80
|
+
RoutineCommandV1,
|
|
81
|
+
RoutineInboxCommandV1,
|
|
82
|
+
RoutineInboxReceiptV1,
|
|
83
|
+
RoutineInboxViewV1,
|
|
84
|
+
RoutineListViewV1,
|
|
85
|
+
RoutineRunDetailViewV1,
|
|
86
|
+
RoutineRunListViewV1,
|
|
87
|
+
} from "@frockbot/app/routines/shared";
|
|
88
|
+
import type {
|
|
89
|
+
TaskListViewV1,
|
|
90
|
+
TaskViewV1,
|
|
91
|
+
} from "@frockbot/app/subagents/shared";
|
|
92
|
+
import type {
|
|
93
|
+
ClientRunLookupQueryV1,
|
|
94
|
+
ClientRunLookupV1,
|
|
95
|
+
ClientRunQuestionsV1,
|
|
96
|
+
ClientRunListQueryV1,
|
|
97
|
+
ClientRunListV1,
|
|
98
|
+
ClientRunStopCommandV1,
|
|
99
|
+
ClientRunStopReceiptV1,
|
|
100
|
+
ClientTurnV1,
|
|
101
|
+
} from "@frockbot/app/shell/run-protocol";
|
|
102
|
+
import type { ClientSkillCatalogV1 } from "@frockbot/app/shell/skill-protocol";
|
|
103
|
+
import type {
|
|
104
|
+
AccountAdmissionDecisionV1,
|
|
105
|
+
AdmissionIdentityV1,
|
|
106
|
+
} from "@frockbot/app/admin/shared";
|
|
107
|
+
|
|
108
|
+
export interface BackendRouteContribution {
|
|
109
|
+
packageId: string;
|
|
110
|
+
publicRoute?(
|
|
111
|
+
request: Request,
|
|
112
|
+
url: URL,
|
|
113
|
+
context: {
|
|
114
|
+
userId?: string;
|
|
115
|
+
client: "browser" | "desktop";
|
|
116
|
+
/**
|
|
117
|
+
* The User the request's own session is, once admitted, or `undefined`
|
|
118
|
+
* — asked only by a public route that must act for nobody else.
|
|
119
|
+
*/
|
|
120
|
+
sessionUserId?: () => Promise<string | undefined>;
|
|
121
|
+
},
|
|
122
|
+
): Promise<Response | undefined>;
|
|
123
|
+
route(
|
|
124
|
+
request: Request,
|
|
125
|
+
url: URL,
|
|
126
|
+
context: {
|
|
127
|
+
userId?: string;
|
|
128
|
+
client: "browser" | "desktop";
|
|
129
|
+
isAdmin: boolean;
|
|
130
|
+
},
|
|
131
|
+
): Promise<Response | undefined>;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export interface UserApplicationIdentity {
|
|
135
|
+
userId: string;
|
|
136
|
+
applicationHash: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export type StoredRunStatus =
|
|
140
|
+
"running" | "completed" | "failed" | "interrupted";
|
|
141
|
+
|
|
142
|
+
export interface StoredRun {
|
|
143
|
+
runId: string;
|
|
144
|
+
sessionId: string;
|
|
145
|
+
acceptedAt: string;
|
|
146
|
+
input: string;
|
|
147
|
+
events: SessionEvent[];
|
|
148
|
+
status?: StoredRunStatus;
|
|
149
|
+
responseText?: string;
|
|
150
|
+
failure?: string;
|
|
151
|
+
phase?: "admitted" | "executing";
|
|
152
|
+
compositionGenerationId?: string;
|
|
153
|
+
configurationSnapshot?: BotSettingsViewV1;
|
|
154
|
+
previousEventCount?: number;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export interface BotTurnCommand {
|
|
158
|
+
runId: string;
|
|
159
|
+
sessionId: string;
|
|
160
|
+
acceptedAt: string;
|
|
161
|
+
text: string;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
export interface BotNotificationIntent {
|
|
165
|
+
notificationId: string;
|
|
166
|
+
runId: string;
|
|
167
|
+
createdAt: string;
|
|
168
|
+
title: string;
|
|
169
|
+
body: string;
|
|
170
|
+
urgency?: "normal" | "critical";
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
export type BotTurnResult = ClientTurnV1;
|
|
174
|
+
|
|
175
|
+
export interface BotStateBinding {
|
|
176
|
+
run(botId: string, command: BotTurnCommand): Promise<BotTurnResult>;
|
|
177
|
+
listRuns(
|
|
178
|
+
botId: string,
|
|
179
|
+
query: ClientRunListQueryV1,
|
|
180
|
+
): Promise<ClientRunListV1>;
|
|
181
|
+
lookupRun(
|
|
182
|
+
botId: string,
|
|
183
|
+
query: ClientRunLookupQueryV1,
|
|
184
|
+
): Promise<ClientRunLookupV1>;
|
|
185
|
+
runQuestions(
|
|
186
|
+
botId: string,
|
|
187
|
+
query: ClientRunLookupQueryV1,
|
|
188
|
+
): Promise<ClientRunQuestionsV1>;
|
|
189
|
+
fenceRunAdmission(
|
|
190
|
+
botId: string,
|
|
191
|
+
query: ClientRunLookupQueryV1,
|
|
192
|
+
): Promise<ClientRunLookupV1>;
|
|
193
|
+
listNotifications(botId: string): Promise<BotNotificationIntent[]>;
|
|
194
|
+
listApprovals(botId: string): Promise<ApprovalListViewV1>;
|
|
195
|
+
decideApproval(
|
|
196
|
+
botId: string,
|
|
197
|
+
approvalId: string,
|
|
198
|
+
command: ApprovalDecisionCommandV1,
|
|
199
|
+
): Promise<ApprovalDecisionReceiptV1>;
|
|
200
|
+
listCards(botId: string): Promise<CardListViewV1>;
|
|
201
|
+
readCard(botId: string, surfaceId: string): Promise<CardViewV1>;
|
|
202
|
+
cardAction(
|
|
203
|
+
botId: string,
|
|
204
|
+
command: CardActionCommandV1,
|
|
205
|
+
): Promise<CardActionReceiptV1>;
|
|
206
|
+
submitSecret(
|
|
207
|
+
botId: string,
|
|
208
|
+
requestId: string,
|
|
209
|
+
command: SecretSubmitCommandV1,
|
|
210
|
+
): Promise<SecretSubmitReceiptV1>;
|
|
211
|
+
acknowledgeNotification(botId: string, notificationId: string): Promise<void>;
|
|
212
|
+
stopRun(
|
|
213
|
+
botId: string,
|
|
214
|
+
command: ClientRunStopCommandV1,
|
|
215
|
+
): Promise<ClientRunStopReceiptV1>;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export interface MemoryBinding {
|
|
219
|
+
get(key: string): Promise<string | null>;
|
|
220
|
+
put(key: string, value: string, contentType?: string): Promise<void>;
|
|
221
|
+
delete(key: string): Promise<void>;
|
|
222
|
+
list(
|
|
223
|
+
prefix: string,
|
|
224
|
+
cursor?: string,
|
|
225
|
+
): Promise<{
|
|
226
|
+
objects: Array<{ key: string }>;
|
|
227
|
+
truncated: boolean;
|
|
228
|
+
cursor?: string;
|
|
229
|
+
}>;
|
|
230
|
+
vectorUpsert(vectors: MemoryVector[]): Promise<void>;
|
|
231
|
+
vectorQuery(
|
|
232
|
+
vector: number[],
|
|
233
|
+
options: { topK: number; namespace: string; returnMetadata: "all" },
|
|
234
|
+
): Promise<{ matches: MemoryVectorMatch[] }>;
|
|
235
|
+
vectorDeleteByIds(ids: string[]): Promise<void>;
|
|
236
|
+
embed(model: string, texts: string[]): Promise<{ data: number[][] }>;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* One durable-root file as the hosted client reads it. A declared variant,
|
|
241
|
+
* never an exception: a root the store cannot serve is an ordinary answer.
|
|
242
|
+
*/
|
|
243
|
+
export type ClientWorkspaceFileV1 =
|
|
244
|
+
| {
|
|
245
|
+
schemaVersion: 1;
|
|
246
|
+
status: "ok";
|
|
247
|
+
contentHash: string;
|
|
248
|
+
size: number;
|
|
249
|
+
bytesBase64: string;
|
|
250
|
+
}
|
|
251
|
+
| {
|
|
252
|
+
schemaVersion: 1;
|
|
253
|
+
status: "not-found" | "refused" | "conflict" | "unavailable";
|
|
254
|
+
reason: string;
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
export interface UserBotStateBinding {
|
|
258
|
+
assertRegistered(input: { schemaVersion: 1; botId: string }): Promise<void>;
|
|
259
|
+
run(input: {
|
|
260
|
+
schemaVersion: 1;
|
|
261
|
+
botId: string;
|
|
262
|
+
command: BotTurnCommandRequestV1<BotTurnCommand>;
|
|
263
|
+
}): Promise<BotTurnResult>;
|
|
264
|
+
/**
|
|
265
|
+
* Durable acceptance of a composer command. The receipt is not the Turn's
|
|
266
|
+
* outcome; execution continues after this method returns.
|
|
267
|
+
*/
|
|
268
|
+
admitRun(input: {
|
|
269
|
+
schemaVersion: 1;
|
|
270
|
+
botId: string;
|
|
271
|
+
command: BotTurnCommandRequestV1<BotTurnCommand>;
|
|
272
|
+
}): Promise<{ schemaVersion: 1; runId: string }>;
|
|
273
|
+
listRuns(input: {
|
|
274
|
+
schemaVersion: 1;
|
|
275
|
+
botId: string;
|
|
276
|
+
query: ClientRunListQueryV1;
|
|
277
|
+
}): Promise<ClientRunListV1>;
|
|
278
|
+
lookupRun(input: {
|
|
279
|
+
schemaVersion: 1;
|
|
280
|
+
botId: string;
|
|
281
|
+
query: ClientRunLookupQueryV1;
|
|
282
|
+
}): Promise<ClientRunLookupV1>;
|
|
283
|
+
/** The questions a running Turn is waiting on from other Bots. */
|
|
284
|
+
runQuestions(input: {
|
|
285
|
+
schemaVersion: 1;
|
|
286
|
+
botId: string;
|
|
287
|
+
query: ClientRunLookupQueryV1;
|
|
288
|
+
}): Promise<ClientRunQuestionsV1>;
|
|
289
|
+
fenceRunAdmission(input: {
|
|
290
|
+
schemaVersion: 1;
|
|
291
|
+
botId: string;
|
|
292
|
+
query: ClientRunLookupQueryV1;
|
|
293
|
+
}): Promise<ClientRunLookupV1>;
|
|
294
|
+
listSkills(input: {
|
|
295
|
+
schemaVersion: 1;
|
|
296
|
+
botId: string;
|
|
297
|
+
}): Promise<ClientSkillCatalogV1>;
|
|
298
|
+
readWorkspaceFileV1(input: {
|
|
299
|
+
schemaVersion: 1;
|
|
300
|
+
botId: string;
|
|
301
|
+
path: unknown;
|
|
302
|
+
}): Promise<ClientWorkspaceFileV1>;
|
|
303
|
+
listNotifications(input: {
|
|
304
|
+
schemaVersion: 1;
|
|
305
|
+
botId: string;
|
|
306
|
+
}): Promise<BotNotificationIntent[]>;
|
|
307
|
+
listApprovals(input: {
|
|
308
|
+
schemaVersion: 1;
|
|
309
|
+
botId: string;
|
|
310
|
+
}): Promise<ApprovalListViewV1>;
|
|
311
|
+
decideApproval(input: {
|
|
312
|
+
schemaVersion: 1;
|
|
313
|
+
botId: string;
|
|
314
|
+
approvalId: string;
|
|
315
|
+
command: ApprovalDecisionCommandV1;
|
|
316
|
+
}): Promise<ApprovalDecisionReceiptV1>;
|
|
317
|
+
listCards(input: {
|
|
318
|
+
schemaVersion: 1;
|
|
319
|
+
botId: string;
|
|
320
|
+
}): Promise<CardListViewV1>;
|
|
321
|
+
readCard(input: {
|
|
322
|
+
schemaVersion: 1;
|
|
323
|
+
botId: string;
|
|
324
|
+
surfaceId: string;
|
|
325
|
+
}): Promise<CardViewV1>;
|
|
326
|
+
cardAction(input: {
|
|
327
|
+
schemaVersion: 1;
|
|
328
|
+
botId: string;
|
|
329
|
+
command: CardActionCommandV1;
|
|
330
|
+
}): Promise<CardActionReceiptV1>;
|
|
331
|
+
/** A value typed on a secret-request card, sealed before this answers. */
|
|
332
|
+
submitSecret(input: {
|
|
333
|
+
schemaVersion: 1;
|
|
334
|
+
botId: string;
|
|
335
|
+
requestId: string;
|
|
336
|
+
command: SecretSubmitCommandV1;
|
|
337
|
+
}): Promise<SecretSubmitReceiptV1>;
|
|
338
|
+
acknowledgeNotification(input: {
|
|
339
|
+
schemaVersion: 1;
|
|
340
|
+
botId: string;
|
|
341
|
+
notificationId: string;
|
|
342
|
+
}): Promise<void>;
|
|
343
|
+
stopRun(input: {
|
|
344
|
+
schemaVersion: 1;
|
|
345
|
+
botId: string;
|
|
346
|
+
command: ClientRunStopCommandV1;
|
|
347
|
+
}): Promise<ClientRunStopReceiptV1>;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
export interface UserApplicationEnv {
|
|
351
|
+
BOT_STATE: UserBotStateBinding;
|
|
352
|
+
DEPLOYMENT: UserApplicationIdentity;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
/**
|
|
356
|
+
* The loader-side `WorkerCode`. `env` is generic because two kinds of isolate
|
|
357
|
+
* are loaded from this Worker: a user application (`UserApplicationEnv`) and a
|
|
358
|
+
* Plugin worker (`BotIsolateEnv`, from `@frockbot/core/contracts`), which sees
|
|
359
|
+
* only `IDENTITY` and the loopback `CAPABILITIES` service binding.
|
|
360
|
+
*/
|
|
361
|
+
export interface WorkerCode<Env = UserApplicationEnv> {
|
|
362
|
+
compatibilityDate: string;
|
|
363
|
+
mainModule: string;
|
|
364
|
+
modules: Record<string, string | { js: string }>;
|
|
365
|
+
globalOutbound?: null;
|
|
366
|
+
env: Env;
|
|
367
|
+
limits?: {
|
|
368
|
+
cpuMs?: number;
|
|
369
|
+
subRequests?: number;
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export interface WorkerEntrypointStub {
|
|
374
|
+
fetch(request: Request): Promise<Response>;
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
export interface LoadedWorker<Entrypoint = WorkerEntrypointStub> {
|
|
378
|
+
getEntrypoint(name?: string | null): Entrypoint;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
export interface WorkerLoader<
|
|
382
|
+
Env = UserApplicationEnv,
|
|
383
|
+
Entrypoint = WorkerEntrypointStub,
|
|
384
|
+
> {
|
|
385
|
+
get(
|
|
386
|
+
id: string,
|
|
387
|
+
callback: () => Promise<WorkerCode<Env>>,
|
|
388
|
+
): LoadedWorker<Entrypoint>;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
/** The `BOT_PACKAGES` loader: Plugin workers, never user applications. */
|
|
392
|
+
export type BotPackageLoader = WorkerLoader<
|
|
393
|
+
BotIsolateEnv,
|
|
394
|
+
PluginWorkerEntrypoint
|
|
395
|
+
>;
|
|
396
|
+
|
|
397
|
+
export interface ApplicationArtifactStore {
|
|
398
|
+
load(applicationHash: string): Promise<string>;
|
|
399
|
+
/** A Plugin's stored page, or undefined when there is none. */
|
|
400
|
+
loadPluginPage?(contentHash: string): Promise<string | undefined>;
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
export interface ConnectionBinding {
|
|
404
|
+
start(input: {
|
|
405
|
+
commandId: string;
|
|
406
|
+
connectionTypeId: string;
|
|
407
|
+
botId: string;
|
|
408
|
+
alias?: string;
|
|
409
|
+
}): Promise<StartConnectionResult>;
|
|
410
|
+
complete(input: {
|
|
411
|
+
connectionId: string;
|
|
412
|
+
connectedAccountId: string;
|
|
413
|
+
}): Promise<ConnectionCompletionResult>;
|
|
414
|
+
fail(
|
|
415
|
+
connectionId: string,
|
|
416
|
+
message: string,
|
|
417
|
+
): Promise<ConnectionCompletionResult>;
|
|
418
|
+
revoke(connectionId: string): Promise<RevokeConnectionResult>;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
export interface UserConfigurationBinding {
|
|
422
|
+
listBots(request: {
|
|
423
|
+
schemaVersion: 1;
|
|
424
|
+
userId: string;
|
|
425
|
+
}): Promise<BotDirectoryViewV1>;
|
|
426
|
+
listBotLifecycles(request: {
|
|
427
|
+
schemaVersion: 1;
|
|
428
|
+
userId: string;
|
|
429
|
+
}): Promise<BotLifecycleDirectoryViewV1>;
|
|
430
|
+
executeBotLifecycle(request: {
|
|
431
|
+
schemaVersion: 1;
|
|
432
|
+
userId: string;
|
|
433
|
+
command: BotLifecycleCommandV1;
|
|
434
|
+
}): Promise<BotLifecycleReceiptV1>;
|
|
435
|
+
createBot(request: {
|
|
436
|
+
schemaVersion: 1;
|
|
437
|
+
userId: string;
|
|
438
|
+
command: CreateBotCommandV1;
|
|
439
|
+
}): Promise<FlockReceiptV1>;
|
|
440
|
+
/**
|
|
441
|
+
* Changes what a Bot wears. The Bot's own object accepts or refuses the
|
|
442
|
+
* command; the User's directory is told afterwards, so a list of Bots shows
|
|
443
|
+
* the change rather than the appearance the Bot was created with.
|
|
444
|
+
*/
|
|
445
|
+
updateBotAvatar(request: {
|
|
446
|
+
schemaVersion: 1;
|
|
447
|
+
userId: string;
|
|
448
|
+
botId: string;
|
|
449
|
+
command: UpdateAvatarCommandV1;
|
|
450
|
+
}): Promise<FlockReceiptV1>;
|
|
451
|
+
/** How a Bot sounds, read and changed the way its avatar is (ADR 0031). */
|
|
452
|
+
readBotVoice(request: {
|
|
453
|
+
schemaVersion: 1;
|
|
454
|
+
userId: string;
|
|
455
|
+
botId: string;
|
|
456
|
+
}): Promise<VoiceIdentityViewV1>;
|
|
457
|
+
updateBotVoice(request: {
|
|
458
|
+
schemaVersion: 1;
|
|
459
|
+
userId: string;
|
|
460
|
+
botId: string;
|
|
461
|
+
command: UpdateVoiceCommandV1;
|
|
462
|
+
}): Promise<FlockReceiptV1>;
|
|
463
|
+
readBotLook(request: {
|
|
464
|
+
schemaVersion: 1;
|
|
465
|
+
userId: string;
|
|
466
|
+
botId: string;
|
|
467
|
+
}): Promise<LookIdentityViewV1>;
|
|
468
|
+
updateBotLook(request: {
|
|
469
|
+
schemaVersion: 1;
|
|
470
|
+
userId: string;
|
|
471
|
+
botId: string;
|
|
472
|
+
command: UpdateLookCommandV1;
|
|
473
|
+
}): Promise<FlockReceiptV1>;
|
|
474
|
+
mirrorBotLook(request: {
|
|
475
|
+
schemaVersion: 1;
|
|
476
|
+
userId: string;
|
|
477
|
+
botId: string;
|
|
478
|
+
look: LookIdentityViewV1["look"];
|
|
479
|
+
document?: LookIdentityViewV1["document"];
|
|
480
|
+
}): Promise<BotDirectoryViewV1>;
|
|
481
|
+
getBotRegistration(request: {
|
|
482
|
+
schemaVersion: 1;
|
|
483
|
+
userId: string;
|
|
484
|
+
botId: string;
|
|
485
|
+
}): Promise<BotRegistrationV1>;
|
|
486
|
+
hasBot(request: {
|
|
487
|
+
schemaVersion: 1;
|
|
488
|
+
userId: string;
|
|
489
|
+
botId: string;
|
|
490
|
+
}): Promise<BotMembershipViewV1>;
|
|
491
|
+
readConfiguration(
|
|
492
|
+
request: UserConfigurationReadRpcV1,
|
|
493
|
+
): Promise<UserSettingsViewV1>;
|
|
494
|
+
readConnectionsFrame(request: {
|
|
495
|
+
schemaVersion: 1;
|
|
496
|
+
userId: string;
|
|
497
|
+
catalog?: import("@frockbot/app/settings/frame").ConnectionsCatalogQueryV1;
|
|
498
|
+
}): Promise<ConnectionsFrame>;
|
|
499
|
+
/** The User's saved secrets: names and terms, never a value. */
|
|
500
|
+
listSecrets(request: {
|
|
501
|
+
schemaVersion: 1;
|
|
502
|
+
userId: string;
|
|
503
|
+
}): Promise<SecretListViewV1>;
|
|
504
|
+
deleteSecret(request: {
|
|
505
|
+
schemaVersion: 1;
|
|
506
|
+
userId: string;
|
|
507
|
+
secretId: string;
|
|
508
|
+
}): Promise<{ schemaVersion: 1; removed: boolean }>;
|
|
509
|
+
readSettingsFrame(
|
|
510
|
+
request: UserConfigurationReadRpcV1 & { home: "application" | "models" },
|
|
511
|
+
): Promise<SettingsFrame>;
|
|
512
|
+
readSettingsOptions(
|
|
513
|
+
request: UserConfigurationReadRpcV1 & {
|
|
514
|
+
query: import("@frockbot/core/protocol-schemas").SettingsOptionsQuery;
|
|
515
|
+
},
|
|
516
|
+
): Promise<import("@frockbot/core/protocol-schemas").SettingsOptionsPage>;
|
|
517
|
+
changeSettings(
|
|
518
|
+
request: UserConfigurationReadRpcV1 & {
|
|
519
|
+
home: "application" | "models";
|
|
520
|
+
command: SettingsChangeCommand;
|
|
521
|
+
},
|
|
522
|
+
): Promise<OperationReceiptV1>;
|
|
523
|
+
executeConfiguration(
|
|
524
|
+
request: UserConfigurationExecuteRpcV1,
|
|
525
|
+
): Promise<OperationReceiptV1>;
|
|
526
|
+
executeConnection(request: {
|
|
527
|
+
schemaVersion: 1;
|
|
528
|
+
userId: string;
|
|
529
|
+
command: ConnectionCommandV1;
|
|
530
|
+
}): Promise<ConnectionCommandReceiptV1>;
|
|
531
|
+
lookupConnectionCommand(request: {
|
|
532
|
+
schemaVersion: 1;
|
|
533
|
+
userId: string;
|
|
534
|
+
packageId: string;
|
|
535
|
+
commandId: string;
|
|
536
|
+
}): Promise<ConnectionCommandReceiptV1 | undefined>;
|
|
537
|
+
getConnection(request: {
|
|
538
|
+
schemaVersion: 1;
|
|
539
|
+
userId: string;
|
|
540
|
+
connectionId: string;
|
|
541
|
+
}): Promise<ConnectionView | undefined>;
|
|
542
|
+
leaseModelCredential(request: {
|
|
543
|
+
schemaVersion: 1;
|
|
544
|
+
userId: string;
|
|
545
|
+
connectionId: string;
|
|
546
|
+
providerModelId: string;
|
|
547
|
+
effectId: string;
|
|
548
|
+
connectionGeneration: string;
|
|
549
|
+
}): Promise<CredentialLeaseV1>;
|
|
550
|
+
settleModelCredential(request: {
|
|
551
|
+
schemaVersion: 1;
|
|
552
|
+
userId: string;
|
|
553
|
+
connectionId: string;
|
|
554
|
+
packageId: string;
|
|
555
|
+
effectId: string;
|
|
556
|
+
}): Promise<void>;
|
|
557
|
+
}
|
|
558
|
+
|
|
559
|
+
export interface BotConfigurationBinding {
|
|
560
|
+
readAvatar(request: {
|
|
561
|
+
schemaVersion: 1;
|
|
562
|
+
userId: string;
|
|
563
|
+
botId: string;
|
|
564
|
+
}): Promise<AvatarIdentityViewV1>;
|
|
565
|
+
updateAvatar(request: {
|
|
566
|
+
schemaVersion: 1;
|
|
567
|
+
userId: string;
|
|
568
|
+
botId: string;
|
|
569
|
+
command: UpdateAvatarCommandV1;
|
|
570
|
+
}): Promise<FlockReceiptV1>;
|
|
571
|
+
readVoice(request: {
|
|
572
|
+
schemaVersion: 1;
|
|
573
|
+
userId: string;
|
|
574
|
+
botId: string;
|
|
575
|
+
}): Promise<VoiceIdentityViewV1>;
|
|
576
|
+
updateVoice(request: {
|
|
577
|
+
schemaVersion: 1;
|
|
578
|
+
userId: string;
|
|
579
|
+
botId: string;
|
|
580
|
+
command: UpdateVoiceCommandV1;
|
|
581
|
+
}): Promise<FlockReceiptV1>;
|
|
582
|
+
readLook(request: {
|
|
583
|
+
schemaVersion: 1;
|
|
584
|
+
userId: string;
|
|
585
|
+
botId: string;
|
|
586
|
+
}): Promise<LookIdentityViewV1>;
|
|
587
|
+
updateLook(request: {
|
|
588
|
+
schemaVersion: 1;
|
|
589
|
+
userId: string;
|
|
590
|
+
botId: string;
|
|
591
|
+
command: UpdateLookCommandV1;
|
|
592
|
+
}): Promise<FlockReceiptV1>;
|
|
593
|
+
persistAssembledDocument(request: {
|
|
594
|
+
schemaVersion: 1;
|
|
595
|
+
userId: string;
|
|
596
|
+
botId: string;
|
|
597
|
+
document?: LookIdentityViewV1["document"];
|
|
598
|
+
}): Promise<LookIdentityViewV1>;
|
|
599
|
+
readConfiguration(
|
|
600
|
+
request: BotConfigurationReadRpcV1,
|
|
601
|
+
): Promise<BotSettingsViewV1>;
|
|
602
|
+
executeConfiguration(
|
|
603
|
+
request: BotConfigurationExecuteRpcV1,
|
|
604
|
+
): Promise<OperationReceiptV1>;
|
|
605
|
+
readBotPluginsFrame(request: {
|
|
606
|
+
schemaVersion: 1;
|
|
607
|
+
userId: string;
|
|
608
|
+
botId: string;
|
|
609
|
+
}): Promise<BotPluginsFrameV1>;
|
|
610
|
+
setBotPluginEnabled(request: {
|
|
611
|
+
schemaVersion: 1;
|
|
612
|
+
userId: string;
|
|
613
|
+
botId: string;
|
|
614
|
+
command: SetBotPluginEnabledCommandV1;
|
|
615
|
+
}): Promise<SetBotPluginEnabledReceiptV1>;
|
|
616
|
+
/** A control on a Plugin's section, pressed: runs the tool it names. */
|
|
617
|
+
executeBotPluginTool(request: {
|
|
618
|
+
schemaVersion: 1;
|
|
619
|
+
userId: string;
|
|
620
|
+
botId: string;
|
|
621
|
+
command: PluginToolCommandV1;
|
|
622
|
+
}): Promise<BotPluginToolReceiptV1>;
|
|
623
|
+
openFocusedPanel(request: {
|
|
624
|
+
schemaVersion: 1;
|
|
625
|
+
userId: string;
|
|
626
|
+
botId: string;
|
|
627
|
+
/** The origin the read arrived on, which serves the Plugin's pages. */
|
|
628
|
+
appOrigin: string;
|
|
629
|
+
}): Promise<import("@frockbot/app/plugins/panels-bot").PanelOpenViewV1>;
|
|
630
|
+
setFocusedPanel(request: {
|
|
631
|
+
schemaVersion: 1;
|
|
632
|
+
userId: string;
|
|
633
|
+
botId: string;
|
|
634
|
+
pluginId: string | null;
|
|
635
|
+
surfaceId?: string;
|
|
636
|
+
}): Promise<
|
|
637
|
+
| {
|
|
638
|
+
status: "applied";
|
|
639
|
+
focus: import("@frockbot/core/durable").FocusedPanelV1;
|
|
640
|
+
}
|
|
641
|
+
| { status: "error"; failure: string }
|
|
642
|
+
>;
|
|
643
|
+
recordPanelDeviceUse(request: {
|
|
644
|
+
schemaVersion: 1;
|
|
645
|
+
userId: string;
|
|
646
|
+
botId: string;
|
|
647
|
+
use: import("@frockbot/app/audit").DeviceUseV1;
|
|
648
|
+
}): Promise<{ status: "recorded" } | { status: "refused"; reason: string }>;
|
|
649
|
+
recordPanelPageReport(request: {
|
|
650
|
+
schemaVersion: 1;
|
|
651
|
+
userId: string;
|
|
652
|
+
botId: string;
|
|
653
|
+
report: import("@frockbot/app/plugins/page-reports").PluginPageReportCommandV1;
|
|
654
|
+
}): Promise<{ status: "recorded" } | { status: "refused"; reason: string }>;
|
|
655
|
+
listCompositionGenerations(request: {
|
|
656
|
+
schemaVersion: 1;
|
|
657
|
+
userId: string;
|
|
658
|
+
botId: string;
|
|
659
|
+
query: { limit: number; cursor?: string };
|
|
660
|
+
}): Promise<CompositionGenerationListViewV1>;
|
|
661
|
+
getCompositionGeneration(request: {
|
|
662
|
+
schemaVersion: 1;
|
|
663
|
+
userId: string;
|
|
664
|
+
botId: string;
|
|
665
|
+
generationId: string;
|
|
666
|
+
}): Promise<CompositionGenerationViewV1 | undefined>;
|
|
667
|
+
revertComposition(request: {
|
|
668
|
+
schemaVersion: 1;
|
|
669
|
+
userId: string;
|
|
670
|
+
botId: string;
|
|
671
|
+
command: RevertCompositionCommandV1;
|
|
672
|
+
}): Promise<CompositionCommandReceiptV1>;
|
|
673
|
+
listRoutines(request: {
|
|
674
|
+
schemaVersion: 1;
|
|
675
|
+
userId: string;
|
|
676
|
+
botId: string;
|
|
677
|
+
}): Promise<RoutineListViewV1>;
|
|
678
|
+
/** The list and the inbox, one materialize. */
|
|
679
|
+
readRoutinesFrame(request: {
|
|
680
|
+
schemaVersion: 1;
|
|
681
|
+
userId: string;
|
|
682
|
+
botId: string;
|
|
683
|
+
}): Promise<{ list: RoutineListViewV1; inbox: RoutineInboxViewV1 }>;
|
|
684
|
+
/** The Bot's subagent tasks, answered by the parent Bot Durable Object. */
|
|
685
|
+
listTasks(request: {
|
|
686
|
+
schemaVersion: 1;
|
|
687
|
+
userId: string;
|
|
688
|
+
botId: string;
|
|
689
|
+
}): Promise<TaskListViewV1>;
|
|
690
|
+
readTask(request: {
|
|
691
|
+
schemaVersion: 1;
|
|
692
|
+
userId: string;
|
|
693
|
+
botId: string;
|
|
694
|
+
taskId: string;
|
|
695
|
+
}): Promise<TaskViewV1>;
|
|
696
|
+
/** Explicit, authenticated cancellation of one task, by its User. */
|
|
697
|
+
stopTask(request: {
|
|
698
|
+
schemaVersion: 1;
|
|
699
|
+
userId: string;
|
|
700
|
+
botId: string;
|
|
701
|
+
taskId: string;
|
|
702
|
+
}): Promise<TaskViewV1>;
|
|
703
|
+
executeRoutineCommand(request: {
|
|
704
|
+
schemaVersion: 1;
|
|
705
|
+
userId: string;
|
|
706
|
+
botId: string;
|
|
707
|
+
command: RoutineCommandV1;
|
|
708
|
+
}): Promise<RoutineCommandReceiptV1>;
|
|
709
|
+
/**
|
|
710
|
+
* One finished machine command, handed to the Bot that asked for it. Called
|
|
711
|
+
* by the Worker that answered the machine, never by another Durable Object.
|
|
712
|
+
*/
|
|
713
|
+
deliverMachineResult(request: {
|
|
714
|
+
schemaVersion: 1;
|
|
715
|
+
userId: string;
|
|
716
|
+
botId: string;
|
|
717
|
+
delivery: MachineResultDeliveryV1;
|
|
718
|
+
}): Promise<{ status: "accepted" }>;
|
|
719
|
+
deliverRoutineHook(request: {
|
|
720
|
+
schemaVersion: 1;
|
|
721
|
+
userId: string;
|
|
722
|
+
botId: string;
|
|
723
|
+
delivery: {
|
|
724
|
+
routineId: string;
|
|
725
|
+
keyVersion: number;
|
|
726
|
+
digest: string;
|
|
727
|
+
deliveryId: string;
|
|
728
|
+
body: string;
|
|
729
|
+
contentType?: string | null;
|
|
730
|
+
headers?: Record<string, string>;
|
|
731
|
+
};
|
|
732
|
+
}): Promise<
|
|
733
|
+
| { status: "accepted" | "duplicate"; fireId: string }
|
|
734
|
+
| { status: "dropped"; reason: string }
|
|
735
|
+
>;
|
|
736
|
+
listRoutineRuns(request: {
|
|
737
|
+
schemaVersion: 1;
|
|
738
|
+
userId: string;
|
|
739
|
+
botId: string;
|
|
740
|
+
routineId: string;
|
|
741
|
+
}): Promise<RoutineRunListViewV1>;
|
|
742
|
+
readRoutineRun(request: {
|
|
743
|
+
schemaVersion: 1;
|
|
744
|
+
userId: string;
|
|
745
|
+
botId: string;
|
|
746
|
+
routineId: string;
|
|
747
|
+
runId: string;
|
|
748
|
+
}): Promise<RoutineRunDetailViewV1>;
|
|
749
|
+
listRoutineInbox(request: {
|
|
750
|
+
schemaVersion: 1;
|
|
751
|
+
userId: string;
|
|
752
|
+
botId: string;
|
|
753
|
+
}): Promise<RoutineInboxViewV1>;
|
|
754
|
+
executeRoutineInboxCommand(request: {
|
|
755
|
+
schemaVersion: 1;
|
|
756
|
+
userId: string;
|
|
757
|
+
botId: string;
|
|
758
|
+
command: RoutineInboxCommandV1;
|
|
759
|
+
}): Promise<RoutineInboxReceiptV1>;
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
export interface GatewayDependencies {
|
|
763
|
+
registerPush?(userId: string, registration: unknown): Promise<unknown>;
|
|
764
|
+
/**
|
|
765
|
+
* The two things a person may delete outright: their account and their
|
|
766
|
+
* Computer. The gateway checks the confirmation; these only carry it out.
|
|
767
|
+
*/
|
|
768
|
+
deletion?: {
|
|
769
|
+
deleteAccount(
|
|
770
|
+
userId: string,
|
|
771
|
+
command: { commandId: string; email?: string },
|
|
772
|
+
): Promise<unknown>;
|
|
773
|
+
deleteComputer(userId: string, commandId: string): Promise<unknown>;
|
|
774
|
+
};
|
|
775
|
+
/** Explicit Slice 2 prototype; absent until signed-target qualification. */
|
|
776
|
+
nativeAuth?: import("./native-auth.js").NativeAuth;
|
|
777
|
+
loader: WorkerLoader;
|
|
778
|
+
artifacts: ApplicationArtifactStore;
|
|
779
|
+
auth: AuthPackageV1;
|
|
780
|
+
/**
|
|
781
|
+
* The beta-access authority, asked before browser requests reach a User;
|
|
782
|
+
* native requests reuse their admission answer. It may activate the account
|
|
783
|
+
* and throws only when it cannot answer at all.
|
|
784
|
+
*/
|
|
785
|
+
admitAccount(
|
|
786
|
+
identity: AdmissionIdentityV1,
|
|
787
|
+
): Promise<AccountAdmissionDecisionV1>;
|
|
788
|
+
/** Raw deployment secret; only the derived `isAdmin` boolean reaches clients. */
|
|
789
|
+
adminEmails?: string;
|
|
790
|
+
applicationHashFor(userId: string): Promise<string>;
|
|
791
|
+
botStateFor(userId: string): UserBotStateBinding;
|
|
792
|
+
userConfigurationFor(userId: string): UserConfigurationBinding;
|
|
793
|
+
botConfigurationFor(userId: string, botId: string): BotConfigurationBinding;
|
|
794
|
+
/** Authenticated observer transport into the Bot Durable Object. */
|
|
795
|
+
openBotStateChannel?(
|
|
796
|
+
userId: string,
|
|
797
|
+
botId: string,
|
|
798
|
+
request: Request,
|
|
799
|
+
context: { isAdmin: boolean; authMode: string },
|
|
800
|
+
): Promise<Response>;
|
|
801
|
+
/** Absent, or with no token, when the deployment publishes no `/api/debug`. */
|
|
802
|
+
debug?: DebugGatewaySurface;
|
|
803
|
+
/**
|
|
804
|
+
* The voice doors. Absent in a deployment that has neither the dictation
|
|
805
|
+
* nor the assistant configured; the routes then answer what is missing.
|
|
806
|
+
*/
|
|
807
|
+
voice?: VoiceGatewayDependencies;
|
|
808
|
+
backendContributions?: readonly BackendRouteContribution[];
|
|
809
|
+
/** Webview origins allowed to call `/api/*` cross-origin. */
|
|
810
|
+
allowedClientOrigins?: string[];
|
|
811
|
+
allowDevelopmentIdentity?: boolean;
|
|
812
|
+
compatibilityDate?: string;
|
|
813
|
+
/** The brand's What's New switch: off, the feed is empty. */
|
|
814
|
+
whatsNew: boolean;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/** The two voice sockets and the probe the clients read before offering them. */
|
|
818
|
+
export interface VoiceGatewayDependencies {
|
|
819
|
+
capabilities(): { dictation: boolean; assistant: boolean };
|
|
820
|
+
/** The composer's dictation relay; the request is an authenticated upgrade. */
|
|
821
|
+
openDictation(userId: string, request: Request): Promise<Response>;
|
|
822
|
+
/**
|
|
823
|
+
* The account's voice session object. `deviceKey` names the client device
|
|
824
|
+
* so a socket it replaces rejoins its own call rather than superseding it.
|
|
825
|
+
*/
|
|
826
|
+
openAssistant(
|
|
827
|
+
userId: string,
|
|
828
|
+
deviceKey: string,
|
|
829
|
+
request: Request,
|
|
830
|
+
context: { isAdmin: boolean; authMode: string },
|
|
831
|
+
): Promise<Response>;
|
|
832
|
+
}
|