@foir/sdk 0.11.0 → 0.13.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.
- package/CHANGELOG.md +165 -2
- package/dist/app/client.d.ts +445 -0
- package/dist/app/contract/index.d.ts +23 -0
- package/dist/app/contract/proto/apps/v1/apps_pb.d.ts +1465 -0
- package/dist/app/contract/proto/apps/v1/discovery_pb.d.ts +678 -0
- package/dist/app/dispatch.d.ts +64 -0
- package/dist/app/errors.d.ts +50 -0
- package/dist/app/index.d.ts +40 -0
- package/dist/app/manifest.d.ts +56 -0
- package/dist/app/naming.d.ts +31 -0
- package/dist/app/record-key.d.ts +17 -0
- package/dist/app/ticket.d.ts +37 -0
- package/dist/app/vocabulary.generated.d.ts +20 -0
- package/dist/app-contract.js +124 -0
- package/dist/app.js +1106 -0
- package/dist/auth/auth.d.ts +24 -6
- package/dist/auth/index.d.ts +2 -1
- package/dist/auth.js +139 -23
- package/dist/client.js +36 -2
- package/dist/data/index.d.ts +2 -2
- package/dist/data/transport.d.ts +34 -2
- package/dist/data.js +77 -2
- package/dist/graphql/client.d.ts +1 -1
- package/dist/graphql/foir-request.d.ts +1 -1
- package/dist/next.js +70 -2
- package/dist/placement/index.d.ts +129 -0
- package/dist/placement.js +144 -0
- package/dist/push.js +121 -13
- package/dist/react.js +70 -2
- package/dist/server/callback-client.d.ts +30 -9
- package/dist/server/continue-run.d.ts +56 -0
- package/dist/server/index.d.ts +5 -3
- package/dist/server/operation-types.d.ts +31 -8
- package/dist/server/require-scoped-token.d.ts +52 -7
- package/dist/server/verify-scoped-token.d.ts +109 -3
- package/dist/server.js +415 -127
- package/dist/transport/foir-http.d.ts +48 -0
- package/package.json +24 -6
|
@@ -0,0 +1,1465 @@
|
|
|
1
|
+
// @generated by protoc-gen-es v2.12.1 with parameter "import_extension=js"
|
|
2
|
+
// @generated from file apps/v1/apps.proto (package apps.v1, syntax proto3)
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
|
|
5
|
+
import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
|
|
6
|
+
import type { JsonObject, Message } from "@bufbuild/protobuf";
|
|
7
|
+
import type { EnumValueOptions } from "@bufbuild/protobuf/wkt";
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Describes the file apps/v1/apps.proto.
|
|
11
|
+
*/
|
|
12
|
+
export declare const file_apps_v1_apps: GenFile;
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Top-level manifest.
|
|
16
|
+
*
|
|
17
|
+
* @generated from message apps.v1.AppConfig
|
|
18
|
+
*/
|
|
19
|
+
export declare type AppConfig = Message<"apps.v1.AppConfig"> & {
|
|
20
|
+
/**
|
|
21
|
+
* REQUIRED. Kebab-case globally unique within a project. Matches the key
|
|
22
|
+
* under apps.<name> in foir.config.ts.
|
|
23
|
+
*
|
|
24
|
+
* @generated from field: string name = 1;
|
|
25
|
+
*/
|
|
26
|
+
name: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* REQUIRED. Semver-like free-text version string. Used only for display
|
|
30
|
+
* and update-diff context; not interpreted by the platform for ordering.
|
|
31
|
+
*
|
|
32
|
+
* @generated from field: string version = 2;
|
|
33
|
+
*/
|
|
34
|
+
version: string;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* OPTIONAL. Display metadata for admin UI.
|
|
38
|
+
*
|
|
39
|
+
* @generated from field: apps.v1.Metadata metadata = 3;
|
|
40
|
+
*/
|
|
41
|
+
metadata?: Metadata | undefined;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* OPTIONAL. If present, the app has a runtime service. Absent for pure
|
|
45
|
+
* iframe-only apps.
|
|
46
|
+
*
|
|
47
|
+
* @generated from field: apps.v1.Middleware middleware = 4;
|
|
48
|
+
*/
|
|
49
|
+
middleware?: Middleware | undefined;
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* OPTIONAL. Credential strategy and schema. Absent for apps that need no
|
|
53
|
+
* external-service credentials (CSV importer, color picker).
|
|
54
|
+
*
|
|
55
|
+
* @generated from field: apps.v1.Credentials credentials = 5;
|
|
56
|
+
*/
|
|
57
|
+
credentials?: Credentials | undefined;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* OPTIONAL. JSON Schema describing per-project settings. Shape, not values.
|
|
61
|
+
*
|
|
62
|
+
* @generated from field: google.protobuf.Struct settings_schema = 6;
|
|
63
|
+
*/
|
|
64
|
+
settingsSchema?: JsonObject | undefined;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* OPTIONAL. Inbound data shapes the app can deliver. Each source type is
|
|
68
|
+
* mapped onto a project model at install time.
|
|
69
|
+
*
|
|
70
|
+
* @generated from field: map<string, apps.v1.SourceType> sources = 7;
|
|
71
|
+
*/
|
|
72
|
+
sources: { [key: string]: SourceType };
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* OPTIONAL. Outbound data requirements. Each sink is mapped onto a
|
|
76
|
+
* project model at install time.
|
|
77
|
+
*
|
|
78
|
+
* @generated from field: map<string, apps.v1.SinkContract> sinks = 8;
|
|
79
|
+
*/
|
|
80
|
+
sinks: { [key: string]: SinkContract };
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* OPTIONAL. Operations contributed by the app. Keys starting with `__`
|
|
84
|
+
* are platform-reserved (__uninstall, __validate_credentials).
|
|
85
|
+
*
|
|
86
|
+
* @generated from field: repeated apps.v1.Operation operations = 9;
|
|
87
|
+
*/
|
|
88
|
+
operations: Operation[];
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* OPTIONAL. Hooks contributed by the app. Filters use source-type or
|
|
92
|
+
* sink-contract names; platform resolves to mapped model keys at install.
|
|
93
|
+
*
|
|
94
|
+
* @generated from field: repeated apps.v1.Hook hooks = 10;
|
|
95
|
+
*/
|
|
96
|
+
hooks: Hook[];
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* OPTIONAL. UI placements the app contributes.
|
|
100
|
+
*
|
|
101
|
+
* @generated from field: apps.v1.UI ui = 11;
|
|
102
|
+
*/
|
|
103
|
+
ui?: UI | undefined;
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* OPTIONAL. Inbound webhook declaration. If present, the gateway routes
|
|
107
|
+
* webhooks for this app to `${middleware.url}${inbound.webhook.path}`.
|
|
108
|
+
*
|
|
109
|
+
* @generated from field: apps.v1.Inbound inbound = 12;
|
|
110
|
+
*/
|
|
111
|
+
inbound?: Inbound | undefined;
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* What the operator turns on and off as a whole, each with the storage it
|
|
115
|
+
* keeps. See Feature.
|
|
116
|
+
*
|
|
117
|
+
* @generated from field: repeated apps.v1.Feature features = 13;
|
|
118
|
+
*/
|
|
119
|
+
features: Feature[];
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Describes the message apps.v1.AppConfig.
|
|
124
|
+
* Use `create(AppConfigSchema)` to create a new message.
|
|
125
|
+
*/
|
|
126
|
+
export declare const AppConfigSchema: GenMessage<AppConfig>;
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* A feature of the app: something the operator turns on or off as a whole at
|
|
130
|
+
* setup, such as a store's preorders or its back-in-stock alerts.
|
|
131
|
+
*
|
|
132
|
+
* A feature KEEPS its storage. The sources it names are the storage it writes,
|
|
133
|
+
* and they exist only while it is on: turning it on is what creates them, which
|
|
134
|
+
* the operator approves at setup, and while it is off they are declined, so no
|
|
135
|
+
* model is made and the operations that need them are not registered. Each of
|
|
136
|
+
* them is optional, since switching the feature off drops it, and belongs to
|
|
137
|
+
* no other feature.
|
|
138
|
+
*
|
|
139
|
+
* A feature may also name a setting, when the app itself has to know whether
|
|
140
|
+
* it is on: for example because it changes the access the app asks its vendor
|
|
141
|
+
* for. The setup writes that setting as the switch. A feature with none is on
|
|
142
|
+
* while its storage is.
|
|
143
|
+
*
|
|
144
|
+
* @generated from message apps.v1.Feature
|
|
145
|
+
*/
|
|
146
|
+
export declare type Feature = Message<"apps.v1.Feature"> & {
|
|
147
|
+
/**
|
|
148
|
+
* REQUIRED. Kebab-case, unique among the manifest's features.
|
|
149
|
+
*
|
|
150
|
+
* @generated from field: string key = 1;
|
|
151
|
+
*/
|
|
152
|
+
key: string;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* REQUIRED. What the setup calls it.
|
|
156
|
+
*
|
|
157
|
+
* @generated from field: string title = 2;
|
|
158
|
+
*/
|
|
159
|
+
title: string;
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* What turning it on does, in a sentence or two.
|
|
163
|
+
*
|
|
164
|
+
* @generated from field: string description = 3;
|
|
165
|
+
*/
|
|
166
|
+
description: string;
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* The boolean property of settings_schema that says whether it is on, when
|
|
170
|
+
* the app reads one. Empty when the feature is on exactly while its storage
|
|
171
|
+
* is.
|
|
172
|
+
*
|
|
173
|
+
* @generated from field: string setting = 4;
|
|
174
|
+
*/
|
|
175
|
+
setting: string;
|
|
176
|
+
|
|
177
|
+
/**
|
|
178
|
+
* The sources this feature keeps.
|
|
179
|
+
*
|
|
180
|
+
* @generated from field: repeated string sources = 5;
|
|
181
|
+
*/
|
|
182
|
+
sources: string[];
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Describes the message apps.v1.Feature.
|
|
187
|
+
* Use `create(FeatureSchema)` to create a new message.
|
|
188
|
+
*/
|
|
189
|
+
export declare const FeatureSchema: GenMessage<Feature>;
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* @generated from message apps.v1.Metadata
|
|
193
|
+
*/
|
|
194
|
+
export declare type Metadata = Message<"apps.v1.Metadata"> & {
|
|
195
|
+
/**
|
|
196
|
+
* e.g. "Shopify"
|
|
197
|
+
*
|
|
198
|
+
* @generated from field: string display_name = 1;
|
|
199
|
+
*/
|
|
200
|
+
displayName: string;
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* @generated from field: string description = 2;
|
|
204
|
+
*/
|
|
205
|
+
description: string;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* icon key or URL
|
|
209
|
+
*
|
|
210
|
+
* @generated from field: string icon = 3;
|
|
211
|
+
*/
|
|
212
|
+
icon: string;
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* @generated from field: string author = 4;
|
|
216
|
+
*/
|
|
217
|
+
author: string;
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* public docs URL, optional
|
|
221
|
+
*
|
|
222
|
+
* @generated from field: string homepage = 5;
|
|
223
|
+
*/
|
|
224
|
+
homepage: string;
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Describes the message apps.v1.Metadata.
|
|
229
|
+
* Use `create(MetadataSchema)` to create a new message.
|
|
230
|
+
*/
|
|
231
|
+
export declare const MetadataSchema: GenMessage<Metadata>;
|
|
232
|
+
|
|
233
|
+
/**
|
|
234
|
+
* @generated from message apps.v1.Middleware
|
|
235
|
+
*/
|
|
236
|
+
export declare type Middleware = Message<"apps.v1.Middleware"> & {
|
|
237
|
+
/**
|
|
238
|
+
* REQUIRED within Middleware. https URL of the app's service.
|
|
239
|
+
*
|
|
240
|
+
* @generated from field: string url = 1;
|
|
241
|
+
*/
|
|
242
|
+
url: string;
|
|
243
|
+
};
|
|
244
|
+
|
|
245
|
+
/**
|
|
246
|
+
* Describes the message apps.v1.Middleware.
|
|
247
|
+
* Use `create(MiddlewareSchema)` to create a new message.
|
|
248
|
+
*/
|
|
249
|
+
export declare const MiddlewareSchema: GenMessage<Middleware>;
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* @generated from message apps.v1.Credentials
|
|
253
|
+
*/
|
|
254
|
+
export declare type Credentials = Message<"apps.v1.Credentials"> & {
|
|
255
|
+
/**
|
|
256
|
+
* @generated from field: apps.v1.Credentials.Strategy strategy = 1;
|
|
257
|
+
*/
|
|
258
|
+
strategy: Credentials_Strategy;
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Shape of the admin form for strategies that take structured values.
|
|
262
|
+
* JSON Schema.
|
|
263
|
+
*
|
|
264
|
+
* @generated from field: optional google.protobuf.Struct schema = 2;
|
|
265
|
+
*/
|
|
266
|
+
schema?: JsonObject | undefined;
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* Required only when strategy is OAUTH.
|
|
270
|
+
*
|
|
271
|
+
* @generated from field: optional apps.v1.OAuthConfig oauth = 3;
|
|
272
|
+
*/
|
|
273
|
+
oauth?: OAuthConfig | undefined;
|
|
274
|
+
};
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Describes the message apps.v1.Credentials.
|
|
278
|
+
* Use `create(CredentialsSchema)` to create a new message.
|
|
279
|
+
*/
|
|
280
|
+
export declare const CredentialsSchema: GenMessage<Credentials>;
|
|
281
|
+
|
|
282
|
+
/**
|
|
283
|
+
* @generated from enum apps.v1.Credentials.Strategy
|
|
284
|
+
*/
|
|
285
|
+
export enum Credentials_Strategy {
|
|
286
|
+
/**
|
|
287
|
+
* @generated from enum value: STRATEGY_UNSPECIFIED = 0;
|
|
288
|
+
*/
|
|
289
|
+
UNSPECIFIED = 0,
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* @generated from enum value: STRATEGY_OAUTH = 1;
|
|
293
|
+
*/
|
|
294
|
+
OAUTH = 1,
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* @generated from enum value: STRATEGY_API_KEY = 2;
|
|
298
|
+
*/
|
|
299
|
+
API_KEY = 2,
|
|
300
|
+
|
|
301
|
+
/**
|
|
302
|
+
* @generated from enum value: STRATEGY_SHARED_SECRET = 3;
|
|
303
|
+
*/
|
|
304
|
+
SHARED_SECRET = 3,
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* @generated from enum value: STRATEGY_SSH_KEY = 4;
|
|
308
|
+
*/
|
|
309
|
+
SSH_KEY = 4,
|
|
310
|
+
|
|
311
|
+
/**
|
|
312
|
+
* @generated from enum value: STRATEGY_NONE = 5;
|
|
313
|
+
*/
|
|
314
|
+
NONE = 5,
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* @generated from enum value: STRATEGY_MANAGED = 6;
|
|
318
|
+
*/
|
|
319
|
+
MANAGED = 6,
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Describes the enum apps.v1.Credentials.Strategy.
|
|
324
|
+
*/
|
|
325
|
+
export declare const Credentials_StrategySchema: GenEnum<Credentials_Strategy>;
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* @generated from message apps.v1.OAuthConfig
|
|
329
|
+
*/
|
|
330
|
+
export declare type OAuthConfig = Message<"apps.v1.OAuthConfig"> & {
|
|
331
|
+
/**
|
|
332
|
+
* e.g. "/authorize/start"
|
|
333
|
+
*
|
|
334
|
+
* @generated from field: string authorize_start_path = 1;
|
|
335
|
+
*/
|
|
336
|
+
authorizeStartPath: string;
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* e.g. "/authorize/callback"
|
|
340
|
+
*
|
|
341
|
+
* @generated from field: string authorize_callback_path = 2;
|
|
342
|
+
*/
|
|
343
|
+
authorizeCallbackPath: string;
|
|
344
|
+
};
|
|
345
|
+
|
|
346
|
+
/**
|
|
347
|
+
* Describes the message apps.v1.OAuthConfig.
|
|
348
|
+
* Use `create(OAuthConfigSchema)` to create a new message.
|
|
349
|
+
*/
|
|
350
|
+
export declare const OAuthConfigSchema: GenMessage<OAuthConfig>;
|
|
351
|
+
|
|
352
|
+
/**
|
|
353
|
+
* @generated from message apps.v1.Inbound
|
|
354
|
+
*/
|
|
355
|
+
export declare type Inbound = Message<"apps.v1.Inbound"> & {
|
|
356
|
+
/**
|
|
357
|
+
* @generated from field: apps.v1.Webhook webhook = 1;
|
|
358
|
+
*/
|
|
359
|
+
webhook?: Webhook | undefined;
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Deliveries a vendor addresses to the APP rather than to one install.
|
|
363
|
+
*
|
|
364
|
+
* A vendor's privacy and compliance webhooks are usually configured once, in
|
|
365
|
+
* the vendor's own dashboard, for the whole app. They carry an account
|
|
366
|
+
* identifier and no project, so they cannot use the per-install webhook
|
|
367
|
+
* address: that address is one foir MINTED and can therefore verify, and
|
|
368
|
+
* this one is not.
|
|
369
|
+
*
|
|
370
|
+
* @generated from field: apps.v1.AccountWebhook account = 2;
|
|
371
|
+
*/
|
|
372
|
+
account?: AccountWebhook | undefined;
|
|
373
|
+
};
|
|
374
|
+
|
|
375
|
+
/**
|
|
376
|
+
* Describes the message apps.v1.Inbound.
|
|
377
|
+
* Use `create(InboundSchema)` to create a new message.
|
|
378
|
+
*/
|
|
379
|
+
export declare const InboundSchema: GenMessage<Inbound>;
|
|
380
|
+
|
|
381
|
+
/**
|
|
382
|
+
* @generated from message apps.v1.Webhook
|
|
383
|
+
*/
|
|
384
|
+
export declare type Webhook = Message<"apps.v1.Webhook"> & {
|
|
385
|
+
/**
|
|
386
|
+
* Path on middleware.url that receives webhook deliveries. The gateway
|
|
387
|
+
* proxies deliveries with an attached scoped token.
|
|
388
|
+
*
|
|
389
|
+
* @generated from field: string path = 1;
|
|
390
|
+
*/
|
|
391
|
+
path: string;
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* Describes the message apps.v1.Webhook.
|
|
396
|
+
* Use `create(WebhookSchema)` to create a new message.
|
|
397
|
+
*/
|
|
398
|
+
export declare const WebhookSchema: GenMessage<Webhook>;
|
|
399
|
+
|
|
400
|
+
/**
|
|
401
|
+
* How foir gets from the account a delivery names to the installs holding it.
|
|
402
|
+
*
|
|
403
|
+
* Several installs holding one account is NORMAL, not an anomaly, and all of
|
|
404
|
+
* them are delivered to. An install is scoped to a project, and a vendor that
|
|
405
|
+
* allows only one install per account is describing its own product rather
|
|
406
|
+
* than foir's: making that a foir constraint would also couple tenants, since
|
|
407
|
+
* a global uniqueness rule lets one tenant block another and lets the refusal
|
|
408
|
+
* tell them why.
|
|
409
|
+
*
|
|
410
|
+
* foir verifies NOTHING about the body on this lane and cannot: the vendor
|
|
411
|
+
* signs with a secret the app's own middleware holds, and there is no
|
|
412
|
+
* vocabulary here for which header carries it or how it is computed. The
|
|
413
|
+
* middleware verifies, and until it does the delivery has bought nothing.
|
|
414
|
+
*
|
|
415
|
+
* @generated from message apps.v1.AccountWebhook
|
|
416
|
+
*/
|
|
417
|
+
export declare type AccountWebhook = Message<"apps.v1.AccountWebhook"> & {
|
|
418
|
+
/**
|
|
419
|
+
* Path on middleware.url that receives these deliveries. Separate from
|
|
420
|
+
* Webhook.path because the two carry different guarantees and a handler that
|
|
421
|
+
* confuses them would treat an unverified app-wide delivery as a verified
|
|
422
|
+
* per-install one.
|
|
423
|
+
*
|
|
424
|
+
* @generated from field: string path = 1;
|
|
425
|
+
*/
|
|
426
|
+
path: string;
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Which setting holds the account identifier, as a key of the app's own
|
|
430
|
+
* settings. For a store integration that is the store's domain, supplied by
|
|
431
|
+
* the operator at install.
|
|
432
|
+
*
|
|
433
|
+
* ONE WORD. This key is read from stored manifest JSON by SQL, and protojson
|
|
434
|
+
* accepts both snake_case and camelCase on input, so a two-word name would
|
|
435
|
+
* be stored two ways by two authors and the query would find one of them.
|
|
436
|
+
*
|
|
437
|
+
* @generated from field: string setting = 2;
|
|
438
|
+
*/
|
|
439
|
+
setting: string;
|
|
440
|
+
|
|
441
|
+
/**
|
|
442
|
+
* Where the account identifier is read from in the delivery, as a prefixed
|
|
443
|
+
* token. `h:x-shopify-shop-domain` reads a header. The prefix is what lets a
|
|
444
|
+
* later form be a new value here rather than a new address every app author
|
|
445
|
+
* has to re-paste.
|
|
446
|
+
*
|
|
447
|
+
* @generated from field: string source = 3;
|
|
448
|
+
*/
|
|
449
|
+
source: string;
|
|
450
|
+
};
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Describes the message apps.v1.AccountWebhook.
|
|
454
|
+
* Use `create(AccountWebhookSchema)` to create a new message.
|
|
455
|
+
*/
|
|
456
|
+
export declare const AccountWebhookSchema: GenMessage<AccountWebhook>;
|
|
457
|
+
|
|
458
|
+
/**
|
|
459
|
+
* A source type the app can deliver inbound. At install, admin maps this
|
|
460
|
+
* type onto a project model key and maps each suggested field onto a model
|
|
461
|
+
* field key.
|
|
462
|
+
*
|
|
463
|
+
* @generated from message apps.v1.SourceType
|
|
464
|
+
*/
|
|
465
|
+
export declare type SourceType = Message<"apps.v1.SourceType"> & {
|
|
466
|
+
/**
|
|
467
|
+
* @generated from field: string label = 1;
|
|
468
|
+
*/
|
|
469
|
+
label: string;
|
|
470
|
+
|
|
471
|
+
/**
|
|
472
|
+
* @generated from field: map<string, apps.v1.SuggestedField> fields = 2;
|
|
473
|
+
*/
|
|
474
|
+
fields: { [key: string]: SuggestedField };
|
|
475
|
+
|
|
476
|
+
/**
|
|
477
|
+
* @generated from field: string natural_key = 3;
|
|
478
|
+
*/
|
|
479
|
+
naturalKey: string;
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* When true, an install may leave this type unmapped: coverage no longer
|
|
483
|
+
* demands an entry for it, and the operations, hooks and placements whose
|
|
484
|
+
* $placeholders reference it are DROPPED rather than failing to resolve.
|
|
485
|
+
* Default false, so every existing manifest keeps today's behaviour.
|
|
486
|
+
*
|
|
487
|
+
* This is what makes "sync customers, or don't" expressible. Without it an
|
|
488
|
+
* app either forces the operator to map a model they do not want — and the
|
|
489
|
+
* operation carries records:write:<model> regardless — or cannot offer the
|
|
490
|
+
* source at all.
|
|
491
|
+
*
|
|
492
|
+
* @generated from field: bool optional = 4;
|
|
493
|
+
*/
|
|
494
|
+
optional: boolean;
|
|
495
|
+
|
|
496
|
+
/**
|
|
497
|
+
* When true, the platform provisions the model and resolves $placeholders
|
|
498
|
+
* against it, but expects NO inbound sync: the app owns the write path and
|
|
499
|
+
* there is no external system on the other end.
|
|
500
|
+
*
|
|
501
|
+
* Still mapped — the operator chooses which model it targets, because
|
|
502
|
+
* capability resolution needs that answer. What it is not is SYNCED, which
|
|
503
|
+
* is the whole distinction from `optional` above; the two compose freely.
|
|
504
|
+
*
|
|
505
|
+
* AppInstallPreview must present it as storage the app needs rather than as
|
|
506
|
+
* something the external system will send. Presenting it as a sync mapping
|
|
507
|
+
* is not a cosmetic slip: it is a false statement in the one screen whose
|
|
508
|
+
* job is to tell the operator what the app will do.
|
|
509
|
+
*
|
|
510
|
+
* @generated from field: bool provision_only = 5;
|
|
511
|
+
*/
|
|
512
|
+
provisionOnly: boolean;
|
|
513
|
+
|
|
514
|
+
/**
|
|
515
|
+
* When set, an install may READ THIS SOURCE LIVE from the host instead of
|
|
516
|
+
* syncing a copy of it: Foir keeps the record and the host's key for it, and
|
|
517
|
+
* the host keeps the data. See SourceReference. The install chooses per
|
|
518
|
+
* source (apps.v1.SourceMapping.mode); a new install reads live wherever the
|
|
519
|
+
* source offers it, and an install that chose to keep a copy syncs as before.
|
|
520
|
+
*
|
|
521
|
+
* @generated from field: apps.v1.SourceReference reference = 6;
|
|
522
|
+
*/
|
|
523
|
+
reference?: SourceReference | undefined;
|
|
524
|
+
|
|
525
|
+
/**
|
|
526
|
+
* Who each row of this source's model belongs to. Unset says nothing, and
|
|
527
|
+
* the source maps onto a model owned at any level, as before.
|
|
528
|
+
*
|
|
529
|
+
* Set, it is a requirement the install holds the operator to: the source may
|
|
530
|
+
* only be mapped onto a model owned at this level, and the guided setup
|
|
531
|
+
* creates the model that way. It exists for storage whose meaning depends on
|
|
532
|
+
* who can read it. A wishlist the app writes for each customer is private to
|
|
533
|
+
* that customer only if its model is customer-owned; mapped onto a
|
|
534
|
+
* project-owned model, every row is readable by the project's public key.
|
|
535
|
+
*
|
|
536
|
+
* CUSTOMER requires provision_only or `identity`: a sync writes what the
|
|
537
|
+
* external system sends, and only `identity` gives each row a customer to
|
|
538
|
+
* own it.
|
|
539
|
+
*
|
|
540
|
+
* @generated from field: apps.v1.StorageOwner owner = 7;
|
|
541
|
+
*/
|
|
542
|
+
owner: StorageOwner;
|
|
543
|
+
|
|
544
|
+
/**
|
|
545
|
+
* The app's word that this storage starts on in the guided setup. The
|
|
546
|
+
* operator can still decline it, and declining still drops what references
|
|
547
|
+
* it: this is a default, not a requirement.
|
|
548
|
+
*
|
|
549
|
+
* Only for a source that is both `optional` and `provision_only`, and a
|
|
550
|
+
* manifest that sets it anywhere else is refused. A required source is
|
|
551
|
+
* always mapped, so it would mean nothing. A synced source's default is
|
|
552
|
+
* discovery's call for the account in front of it
|
|
553
|
+
* (DiscoveredSource.recommended), so a flag here would be ignored. Storage has
|
|
554
|
+
* no account behind it to discover, which leaves the app's own word as the
|
|
555
|
+
* only one there is.
|
|
556
|
+
*
|
|
557
|
+
* @generated from field: bool recommended = 8;
|
|
558
|
+
*/
|
|
559
|
+
recommended: boolean;
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* The fields that find one of this source's records whatever its natural key
|
|
563
|
+
* is now: the external system's own id for the object, where the natural key
|
|
564
|
+
* is a value the system lets its users change, such as a product's handle.
|
|
565
|
+
* One to four of this source's `fields`, each a required scalar.
|
|
566
|
+
*
|
|
567
|
+
* It is what lets the app follow a key the external system changed. Written
|
|
568
|
+
* under its new key, the object is refused because another record already
|
|
569
|
+
* holds its id, and the app renames that record to the new key and writes
|
|
570
|
+
* again, rather than creating a second record and leaving the first behind.
|
|
571
|
+
* That refusal needs the model to declare a lookup over the model fields
|
|
572
|
+
* these fields map to, so the install is held to it: a mapping onto a model
|
|
573
|
+
* without that lookup is refused, naming it, and the guided setup creates the
|
|
574
|
+
* model with it. A mapping keyed on these same fields needs no lookup, since
|
|
575
|
+
* its key never changes.
|
|
576
|
+
*
|
|
577
|
+
* @generated from field: repeated string lookup = 9;
|
|
578
|
+
*/
|
|
579
|
+
lookup: string[];
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* The field that names the customer each row belongs to, as the external
|
|
583
|
+
* system identifies them: a customer's id there, which is also the subject
|
|
584
|
+
* of their sign-in with it. One of this source's `fields`, a required scalar,
|
|
585
|
+
* and only on a customer-owned source (`owner` CUSTOMER).
|
|
586
|
+
*
|
|
587
|
+
* It is what lets a sync write customer-owned rows. The platform resolves the
|
|
588
|
+
* value to a Foir customer through the customer sign-in the install pairs
|
|
589
|
+
* with the source (SourceMapping.identity_provider), at the install's level:
|
|
590
|
+
* the customer who signs in with that identity, or one made for it. Each
|
|
591
|
+
* customer holds one row of the source, their profile, so the source has no
|
|
592
|
+
* natural key; the customer is the key. Never matched by email.
|
|
593
|
+
*
|
|
594
|
+
* @generated from field: string identity = 10;
|
|
595
|
+
*/
|
|
596
|
+
identity: string;
|
|
597
|
+
};
|
|
598
|
+
|
|
599
|
+
/**
|
|
600
|
+
* Describes the message apps.v1.SourceType.
|
|
601
|
+
* Use `create(SourceTypeSchema)` to create a new message.
|
|
602
|
+
*/
|
|
603
|
+
export declare const SourceTypeSchema: GenMessage<SourceType>;
|
|
604
|
+
|
|
605
|
+
/**
|
|
606
|
+
* SourceReference is how a source is read live. At install the platform
|
|
607
|
+
* provisions a FIELD operation on the mapped model, named <app><Source> in the
|
|
608
|
+
* schema (`product { shopifyProduct { ... } }`), whose resolver calls the host
|
|
609
|
+
* through the request below with the record's key, and answers with `fields`.
|
|
610
|
+
*
|
|
611
|
+
* The request reads the install's own credential through
|
|
612
|
+
* {{credential.<field>}}, resolved from the vault at the install's level when
|
|
613
|
+
* the call is made: a field the manifest's credential declares, and nothing
|
|
614
|
+
* else. The host may be filled from it (a store's own domain), but only within
|
|
615
|
+
* `hosts`: the filled host must match one of them and be a public address, or
|
|
616
|
+
* the call is refused before anything is sent. Every other value is escaped
|
|
617
|
+
* for where it stands, as an operation's request template is.
|
|
618
|
+
*
|
|
619
|
+
* A live field is not filterable or sortable: nothing about it is stored. An
|
|
620
|
+
* operator who needs to filter on host fields inside Foir keeps a copy.
|
|
621
|
+
*
|
|
622
|
+
* @generated from message apps.v1.SourceReference
|
|
623
|
+
*/
|
|
624
|
+
export declare type SourceReference = Message<"apps.v1.SourceReference"> & {
|
|
625
|
+
/**
|
|
626
|
+
* The source field holding the host's id for an object. It is one of the
|
|
627
|
+
* source's `fields`; the model field it is mapped to is the resolver's parent
|
|
628
|
+
* field, read as {{parent.<key_field>}}.
|
|
629
|
+
*
|
|
630
|
+
* @generated from field: string key_field = 1;
|
|
631
|
+
*/
|
|
632
|
+
keyField: string;
|
|
633
|
+
|
|
634
|
+
/**
|
|
635
|
+
* What the live read answers, by name: the resolver's output shape.
|
|
636
|
+
*
|
|
637
|
+
* @generated from field: map<string, apps.v1.SuggestedField> fields = 2;
|
|
638
|
+
*/
|
|
639
|
+
fields: { [key: string]: SuggestedField };
|
|
640
|
+
|
|
641
|
+
/**
|
|
642
|
+
* The absolute https URL the read calls. The host may be
|
|
643
|
+
* {{credential.<field>}}, or contain one as a leading label.
|
|
644
|
+
*
|
|
645
|
+
* @generated from field: string endpoint = 3;
|
|
646
|
+
*/
|
|
647
|
+
endpoint: string;
|
|
648
|
+
|
|
649
|
+
/**
|
|
650
|
+
* The hosts the endpoint may resolve to: exact names, or "*.<domain>" for any
|
|
651
|
+
* single label under it. At least one.
|
|
652
|
+
*
|
|
653
|
+
* @generated from field: repeated string hosts = 4;
|
|
654
|
+
*/
|
|
655
|
+
hosts: string[];
|
|
656
|
+
|
|
657
|
+
/**
|
|
658
|
+
* @generated from field: apps.v1.ReferenceRequest request = 5;
|
|
659
|
+
*/
|
|
660
|
+
request?: ReferenceRequest | undefined;
|
|
661
|
+
|
|
662
|
+
/**
|
|
663
|
+
* A jq program over the host's answer, producing `fields`. With
|
|
664
|
+
* request.batch_capable it maps the batch's answer back by index.
|
|
665
|
+
*
|
|
666
|
+
* @generated from field: string response_transform = 6;
|
|
667
|
+
*/
|
|
668
|
+
responseTransform: string;
|
|
669
|
+
|
|
670
|
+
/**
|
|
671
|
+
* How long one live answer is shared across callers, in seconds. 0 is the
|
|
672
|
+
* platform default (60). Catalogue data is the same for everyone, so the
|
|
673
|
+
* cache is shared, and it is what keeps a host's rate limit affordable.
|
|
674
|
+
*
|
|
675
|
+
* @generated from field: int32 cache_max_age_seconds = 7;
|
|
676
|
+
*/
|
|
677
|
+
cacheMaxAgeSeconds: number;
|
|
678
|
+
};
|
|
679
|
+
|
|
680
|
+
/**
|
|
681
|
+
* Describes the message apps.v1.SourceReference.
|
|
682
|
+
* Use `create(SourceReferenceSchema)` to create a new message.
|
|
683
|
+
*/
|
|
684
|
+
export declare const SourceReferenceSchema: GenMessage<SourceReference>;
|
|
685
|
+
|
|
686
|
+
/**
|
|
687
|
+
* ReferenceRequest shapes the live read, as operations.v1.RequestTemplate
|
|
688
|
+
* shapes an operation's call: {{parent.X}}, {{credential.X}} and {{context.X}}
|
|
689
|
+
* are filled in at call time.
|
|
690
|
+
*
|
|
691
|
+
* @generated from message apps.v1.ReferenceRequest
|
|
692
|
+
*/
|
|
693
|
+
export declare type ReferenceRequest = Message<"apps.v1.ReferenceRequest"> & {
|
|
694
|
+
/**
|
|
695
|
+
* GET / POST; defaults to POST
|
|
696
|
+
*
|
|
697
|
+
* @generated from field: string method = 1;
|
|
698
|
+
*/
|
|
699
|
+
method: string;
|
|
700
|
+
|
|
701
|
+
/**
|
|
702
|
+
* @generated from field: string path_template = 2;
|
|
703
|
+
*/
|
|
704
|
+
pathTemplate: string;
|
|
705
|
+
|
|
706
|
+
/**
|
|
707
|
+
* @generated from field: map<string, string> query = 3;
|
|
708
|
+
*/
|
|
709
|
+
query: { [key: string]: string };
|
|
710
|
+
|
|
711
|
+
/**
|
|
712
|
+
* @generated from field: map<string, string> headers = 4;
|
|
713
|
+
*/
|
|
714
|
+
headers: { [key: string]: string };
|
|
715
|
+
|
|
716
|
+
/**
|
|
717
|
+
* @generated from field: string body_template = 5;
|
|
718
|
+
*/
|
|
719
|
+
bodyTemplate: string;
|
|
720
|
+
|
|
721
|
+
/**
|
|
722
|
+
* One host request for the page's whole deduplicated set of records, as
|
|
723
|
+
* {{items}}, instead of one per record.
|
|
724
|
+
*
|
|
725
|
+
* @generated from field: bool batch_capable = 6;
|
|
726
|
+
*/
|
|
727
|
+
batchCapable: boolean;
|
|
728
|
+
};
|
|
729
|
+
|
|
730
|
+
/**
|
|
731
|
+
* Describes the message apps.v1.ReferenceRequest.
|
|
732
|
+
* Use `create(ReferenceRequestSchema)` to create a new message.
|
|
733
|
+
*/
|
|
734
|
+
export declare const ReferenceRequestSchema: GenMessage<ReferenceRequest>;
|
|
735
|
+
|
|
736
|
+
/**
|
|
737
|
+
* A sink contract the app needs outbound. At install, admin maps this
|
|
738
|
+
* contract onto a project model and maps each field onto a model field.
|
|
739
|
+
*
|
|
740
|
+
* @generated from message apps.v1.SinkContract
|
|
741
|
+
*/
|
|
742
|
+
export declare type SinkContract = Message<"apps.v1.SinkContract"> & {
|
|
743
|
+
/**
|
|
744
|
+
* @generated from field: string label = 1;
|
|
745
|
+
*/
|
|
746
|
+
label: string;
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* Fields the app needs. Individual entries can be required: false.
|
|
750
|
+
*
|
|
751
|
+
* @generated from field: map<string, apps.v1.SinkField> fields = 2;
|
|
752
|
+
*/
|
|
753
|
+
fields: { [key: string]: SinkField };
|
|
754
|
+
|
|
755
|
+
/**
|
|
756
|
+
* Which mapped field is the natural key for the external system's upsert.
|
|
757
|
+
*
|
|
758
|
+
* @generated from field: string natural_key = 3;
|
|
759
|
+
*/
|
|
760
|
+
naturalKey: string;
|
|
761
|
+
|
|
762
|
+
/**
|
|
763
|
+
* As SourceType.optional: an install may leave this contract unmapped, and
|
|
764
|
+
* what references it is dropped instead of failing to resolve.
|
|
765
|
+
*
|
|
766
|
+
* @generated from field: bool optional = 4;
|
|
767
|
+
*/
|
|
768
|
+
optional: boolean;
|
|
769
|
+
};
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* Describes the message apps.v1.SinkContract.
|
|
773
|
+
* Use `create(SinkContractSchema)` to create a new message.
|
|
774
|
+
*/
|
|
775
|
+
export declare const SinkContractSchema: GenMessage<SinkContract>;
|
|
776
|
+
|
|
777
|
+
/**
|
|
778
|
+
* @generated from message apps.v1.SuggestedField
|
|
779
|
+
*/
|
|
780
|
+
export declare type SuggestedField = Message<"apps.v1.SuggestedField"> & {
|
|
781
|
+
/**
|
|
782
|
+
* resolves to platform FieldType enum
|
|
783
|
+
*
|
|
784
|
+
* @generated from field: string type = 1;
|
|
785
|
+
*/
|
|
786
|
+
type: string;
|
|
787
|
+
|
|
788
|
+
/**
|
|
789
|
+
* @generated from field: optional string label = 2;
|
|
790
|
+
*/
|
|
791
|
+
label?: string | undefined;
|
|
792
|
+
|
|
793
|
+
/**
|
|
794
|
+
* @generated from field: optional bool required = 3;
|
|
795
|
+
*/
|
|
796
|
+
required?: boolean | undefined;
|
|
797
|
+
|
|
798
|
+
/**
|
|
799
|
+
* @generated from field: optional google.protobuf.Struct config = 4;
|
|
800
|
+
*/
|
|
801
|
+
config?: JsonObject | undefined;
|
|
802
|
+
|
|
803
|
+
/**
|
|
804
|
+
* What THE EXTERNAL SYSTEM can support for this field. Absent means
|
|
805
|
+
* SOURCE_ONLY.
|
|
806
|
+
*
|
|
807
|
+
* READ IT AS A SET OF LEGS, NOT AS A RANK: SOURCE_ONLY is {inbound},
|
|
808
|
+
* SINK_ONLY is {outbound}, BIDIRECTIONAL is both. The operator's choice must
|
|
809
|
+
* be a SUBSET of what is declared here, so a SINK_ONLY declaration permits
|
|
810
|
+
* only SINK_ONLY — it does not permit SOURCE_ONLY as some lesser option.
|
|
811
|
+
*
|
|
812
|
+
* The enum numbers are not an ordering. `chosen <= supported` compiles, reads
|
|
813
|
+
* plausibly, and is wrong: it accepts SOURCE_ONLY(1) against a declared
|
|
814
|
+
* SINK_ONLY(2), which is the one comparison a rank would let through and a
|
|
815
|
+
* subset check refuses.
|
|
816
|
+
*
|
|
817
|
+
* Declared by the app author because they are the only party who knows.
|
|
818
|
+
* Stripe's Price.unit_amount is the canonical case: it is immutable, so
|
|
819
|
+
* writing an edit back is not a slow path, it is a thing that cannot happen.
|
|
820
|
+
* An operator choosing BIDIRECTIONAL for such a field has to be refused at
|
|
821
|
+
* configuration time rather than discovering it when the first edit fails
|
|
822
|
+
* somewhere they are not looking.
|
|
823
|
+
*
|
|
824
|
+
* @generated from field: optional apps.v1.FieldSyncDirection supported_direction = 5;
|
|
825
|
+
*/
|
|
826
|
+
supportedDirection?: FieldSyncDirection | undefined;
|
|
827
|
+
|
|
828
|
+
/**
|
|
829
|
+
* The app counts, groups or sorts its records by this field, so the model
|
|
830
|
+
* field it maps to should be indexed (a model field's `queryable`). The
|
|
831
|
+
* guided setup creates the field that way. Declared by the app author, who
|
|
832
|
+
* knows which of their fields their own reads depend on: an app keeping a
|
|
833
|
+
* shopper's back-in-stock requests counts them by variant, and an index is
|
|
834
|
+
* what lets it ask the platform for the count rather than read every row.
|
|
835
|
+
*
|
|
836
|
+
* It says what the app needs of a model the setup creates, and nothing
|
|
837
|
+
* stricter: filtering needs no index, and an operator mapping onto a model
|
|
838
|
+
* of their own may index it or not. An app asking to count by a field that
|
|
839
|
+
* is not indexed is refused by the aggregate, naming the field.
|
|
840
|
+
*
|
|
841
|
+
* @generated from field: optional bool queryable = 6;
|
|
842
|
+
*/
|
|
843
|
+
queryable?: boolean | undefined;
|
|
844
|
+
};
|
|
845
|
+
|
|
846
|
+
/**
|
|
847
|
+
* Describes the message apps.v1.SuggestedField.
|
|
848
|
+
* Use `create(SuggestedFieldSchema)` to create a new message.
|
|
849
|
+
*/
|
|
850
|
+
export declare const SuggestedFieldSchema: GenMessage<SuggestedField>;
|
|
851
|
+
|
|
852
|
+
/**
|
|
853
|
+
* A field in a SinkContract. Renamed from the older RequiredField — individual
|
|
854
|
+
* entries can still be required: false; the message name now reflects the
|
|
855
|
+
* surrounding contract, not the required flag.
|
|
856
|
+
*
|
|
857
|
+
* @generated from message apps.v1.SinkField
|
|
858
|
+
*/
|
|
859
|
+
export declare type SinkField = Message<"apps.v1.SinkField"> & {
|
|
860
|
+
/**
|
|
861
|
+
* Type hint only. Sink fields never carry field-type-specific configuration
|
|
862
|
+
* (select options, defaults, validation ranges). That belongs on the
|
|
863
|
+
* mapped project model field.
|
|
864
|
+
*
|
|
865
|
+
* @generated from field: string type = 1;
|
|
866
|
+
*/
|
|
867
|
+
type: string;
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* e.g. "source-url", "target-url", "status-code"
|
|
871
|
+
*
|
|
872
|
+
* @generated from field: string semantic = 2;
|
|
873
|
+
*/
|
|
874
|
+
semantic: string;
|
|
875
|
+
|
|
876
|
+
/**
|
|
877
|
+
* @generated from field: bool required = 3;
|
|
878
|
+
*/
|
|
879
|
+
required: boolean;
|
|
880
|
+
|
|
881
|
+
/**
|
|
882
|
+
* @generated from field: optional string label = 4;
|
|
883
|
+
*/
|
|
884
|
+
label?: string | undefined;
|
|
885
|
+
};
|
|
886
|
+
|
|
887
|
+
/**
|
|
888
|
+
* Describes the message apps.v1.SinkField.
|
|
889
|
+
* Use `create(SinkFieldSchema)` to create a new message.
|
|
890
|
+
*/
|
|
891
|
+
export declare const SinkFieldSchema: GenMessage<SinkField>;
|
|
892
|
+
|
|
893
|
+
/**
|
|
894
|
+
* @generated from message apps.v1.Operation
|
|
895
|
+
*/
|
|
896
|
+
export declare type Operation = Message<"apps.v1.Operation"> & {
|
|
897
|
+
/**
|
|
898
|
+
* REQUIRED. Kebab-case, unique within the manifest. Keys starting with
|
|
899
|
+
* `__` are platform-reserved (currently __uninstall, __validate_credentials).
|
|
900
|
+
* On install the platform prefixes the stored key as `<appName>/<key>`
|
|
901
|
+
* for namespace isolation across apps.
|
|
902
|
+
*
|
|
903
|
+
* @generated from field: string key = 1;
|
|
904
|
+
*/
|
|
905
|
+
key: string;
|
|
906
|
+
|
|
907
|
+
/**
|
|
908
|
+
* @generated from field: string name = 2;
|
|
909
|
+
*/
|
|
910
|
+
name: string;
|
|
911
|
+
|
|
912
|
+
/**
|
|
913
|
+
* @generated from field: optional string description = 3;
|
|
914
|
+
*/
|
|
915
|
+
description?: string | undefined;
|
|
916
|
+
|
|
917
|
+
/**
|
|
918
|
+
* REQUIRED. Path on middleware.url that handles invocation.
|
|
919
|
+
*
|
|
920
|
+
* @generated from field: string endpoint = 4;
|
|
921
|
+
*/
|
|
922
|
+
endpoint: string;
|
|
923
|
+
|
|
924
|
+
/**
|
|
925
|
+
* REQUIRED. Capability set the platform mints the scoped token with.
|
|
926
|
+
* Each string is one of ManifestCapability, as its option spells it; a
|
|
927
|
+
* per-model capability with no model (bare records:read) is rejected.
|
|
928
|
+
* Placeholders `$<sourceType>` / `$<sinkContract>` inside model-scoped
|
|
929
|
+
* capabilities are resolved to concrete model keys at ConfirmInstallApp.
|
|
930
|
+
*
|
|
931
|
+
* @generated from field: repeated string capabilities = 5;
|
|
932
|
+
*/
|
|
933
|
+
capabilities: string[];
|
|
934
|
+
|
|
935
|
+
/**
|
|
936
|
+
* @generated from field: optional int32 timeout_ms = 6;
|
|
937
|
+
*/
|
|
938
|
+
timeoutMs?: number | undefined;
|
|
939
|
+
|
|
940
|
+
/**
|
|
941
|
+
* @generated from field: optional google.protobuf.Struct retry_policy = 7;
|
|
942
|
+
*/
|
|
943
|
+
retryPolicy?: JsonObject | undefined;
|
|
944
|
+
|
|
945
|
+
/**
|
|
946
|
+
* @generated from field: optional google.protobuf.Struct input_schema = 8;
|
|
947
|
+
*/
|
|
948
|
+
inputSchema?: JsonObject | undefined;
|
|
949
|
+
|
|
950
|
+
/**
|
|
951
|
+
* @generated from field: optional google.protobuf.Struct output_schema = 9;
|
|
952
|
+
*/
|
|
953
|
+
outputSchema?: JsonObject | undefined;
|
|
954
|
+
|
|
955
|
+
/**
|
|
956
|
+
* @generated from field: optional bool supports_async = 10;
|
|
957
|
+
*/
|
|
958
|
+
supportsAsync?: boolean | undefined;
|
|
959
|
+
|
|
960
|
+
/**
|
|
961
|
+
* When true, platform auto-enqueues this operation after a successful
|
|
962
|
+
* ConfirmInstallApp (and, for apps declaring __validate_credentials, after
|
|
963
|
+
* that gate passes). Multiple operations with run_after_install=true are
|
|
964
|
+
* dispatched in manifest declaration order. A failure here emits the
|
|
965
|
+
* app_event `post_install_op_failed` but does NOT roll back the install;
|
|
966
|
+
* the admin retries via the standard op-dispatch UI.
|
|
967
|
+
*
|
|
968
|
+
* @generated from field: bool run_after_install = 11;
|
|
969
|
+
*/
|
|
970
|
+
runAfterInstall: boolean;
|
|
971
|
+
|
|
972
|
+
/**
|
|
973
|
+
* When true, the operation works on whichever of its sources and sinks the
|
|
974
|
+
* install maps. A capability naming one left unmapped (an optional source
|
|
975
|
+
* the operator declined, or a source of a held install still being set up)
|
|
976
|
+
* is left out of the resolved set, and the operation is kept.
|
|
977
|
+
*
|
|
978
|
+
* When false, the default, such an operation is dropped instead: it is not
|
|
979
|
+
* created, and nothing dispatches it. That is the safe answer for an
|
|
980
|
+
* operation that would fail holding fewer capabilities than it declared.
|
|
981
|
+
*
|
|
982
|
+
* An operation that sets this cannot find its models by their position in
|
|
983
|
+
* its capability list, because an entry may be missing. It finds each one by
|
|
984
|
+
* its source or sink name in the install's mappings.
|
|
985
|
+
*
|
|
986
|
+
* @generated from field: bool runs_on_mapped_sources = 12;
|
|
987
|
+
*/
|
|
988
|
+
runsOnMappedSources: boolean;
|
|
989
|
+
};
|
|
990
|
+
|
|
991
|
+
/**
|
|
992
|
+
* Describes the message apps.v1.Operation.
|
|
993
|
+
* Use `create(OperationSchema)` to create a new message.
|
|
994
|
+
*/
|
|
995
|
+
export declare const OperationSchema: GenMessage<Operation>;
|
|
996
|
+
|
|
997
|
+
/**
|
|
998
|
+
* ManifestCapabilitySpec is how one ManifestCapability is written in a manifest.
|
|
999
|
+
*
|
|
1000
|
+
* @generated from message apps.v1.ManifestCapabilitySpec
|
|
1001
|
+
*/
|
|
1002
|
+
export declare type ManifestCapabilitySpec = Message<"apps.v1.ManifestCapabilitySpec"> & {
|
|
1003
|
+
/**
|
|
1004
|
+
* The capability as declared. When per_model is set it is the prefix a model
|
|
1005
|
+
* follows, colon included: `records:read:` is declared as
|
|
1006
|
+
* `records:read:<model>`, or with a `$<source>` or `$<sink>` placeholder the
|
|
1007
|
+
* install resolves to the model mapped there.
|
|
1008
|
+
*
|
|
1009
|
+
* @generated from field: string declares = 1;
|
|
1010
|
+
*/
|
|
1011
|
+
declares: string;
|
|
1012
|
+
|
|
1013
|
+
/**
|
|
1014
|
+
* Declared once per model. Without its model the capability is refused.
|
|
1015
|
+
*
|
|
1016
|
+
* @generated from field: bool per_model = 2;
|
|
1017
|
+
*/
|
|
1018
|
+
perModel: boolean;
|
|
1019
|
+
};
|
|
1020
|
+
|
|
1021
|
+
/**
|
|
1022
|
+
* Describes the message apps.v1.ManifestCapabilitySpec.
|
|
1023
|
+
* Use `create(ManifestCapabilitySpecSchema)` to create a new message.
|
|
1024
|
+
*/
|
|
1025
|
+
export declare const ManifestCapabilitySpecSchema: GenMessage<ManifestCapabilitySpec>;
|
|
1026
|
+
|
|
1027
|
+
/**
|
|
1028
|
+
* @generated from message apps.v1.Hook
|
|
1029
|
+
*/
|
|
1030
|
+
export declare type Hook = Message<"apps.v1.Hook"> & {
|
|
1031
|
+
/**
|
|
1032
|
+
* @generated from field: string key = 1;
|
|
1033
|
+
*/
|
|
1034
|
+
key: string;
|
|
1035
|
+
|
|
1036
|
+
/**
|
|
1037
|
+
* @generated from field: string name = 2;
|
|
1038
|
+
*/
|
|
1039
|
+
name: string;
|
|
1040
|
+
|
|
1041
|
+
/**
|
|
1042
|
+
* REQUIRED. Record-event identifier: RECORD_CREATED, RECORD_UPDATED,
|
|
1043
|
+
* RECORD_DELETED, RECORD_PUBLISHED, ...
|
|
1044
|
+
*
|
|
1045
|
+
* @generated from field: string event = 3;
|
|
1046
|
+
*/
|
|
1047
|
+
event: string;
|
|
1048
|
+
|
|
1049
|
+
/**
|
|
1050
|
+
* REQUIRED. Filter. `{ sourceType: "product" }`, `{ sinkContract: "redirect" }`,
|
|
1051
|
+
* or `{ modelKey: "..." }`. Resolved to concrete modelKey at install.
|
|
1052
|
+
*
|
|
1053
|
+
* @generated from field: google.protobuf.Struct filter = 4;
|
|
1054
|
+
*/
|
|
1055
|
+
filter?: JsonObject | undefined;
|
|
1056
|
+
|
|
1057
|
+
/**
|
|
1058
|
+
* REQUIRED. Operation key from the same manifest's operations list.
|
|
1059
|
+
* Resolved to the namespaced form (<appName>/<key>) at install.
|
|
1060
|
+
*
|
|
1061
|
+
* @generated from field: string operation = 5;
|
|
1062
|
+
*/
|
|
1063
|
+
operation: string;
|
|
1064
|
+
};
|
|
1065
|
+
|
|
1066
|
+
/**
|
|
1067
|
+
* Describes the message apps.v1.Hook.
|
|
1068
|
+
* Use `create(HookSchema)` to create a new message.
|
|
1069
|
+
*/
|
|
1070
|
+
export declare const HookSchema: GenMessage<Hook>;
|
|
1071
|
+
|
|
1072
|
+
/**
|
|
1073
|
+
* @generated from message apps.v1.UI
|
|
1074
|
+
*/
|
|
1075
|
+
export declare type UI = Message<"apps.v1.UI"> & {
|
|
1076
|
+
/**
|
|
1077
|
+
* @generated from field: repeated apps.v1.PlacementDeclaration placements = 1;
|
|
1078
|
+
*/
|
|
1079
|
+
placements: PlacementDeclaration[];
|
|
1080
|
+
};
|
|
1081
|
+
|
|
1082
|
+
/**
|
|
1083
|
+
* Describes the message apps.v1.UI.
|
|
1084
|
+
* Use `create(UISchema)` to create a new message.
|
|
1085
|
+
*/
|
|
1086
|
+
export declare const UISchema: GenMessage<UI>;
|
|
1087
|
+
|
|
1088
|
+
/**
|
|
1089
|
+
* The manifest-time declaration of a placement. At install, ConfirmInstallApp
|
|
1090
|
+
* translates each declaration into a placements.v1.CreatePlacementRequest
|
|
1091
|
+
* against the first-class PlacementsService. The persisted row has
|
|
1092
|
+
* additional platform-assigned fields (id, tenant_id, project_id, config_id,
|
|
1093
|
+
* timestamps) that aren't in the manifest.
|
|
1094
|
+
*
|
|
1095
|
+
* @generated from message apps.v1.PlacementDeclaration
|
|
1096
|
+
*/
|
|
1097
|
+
export declare type PlacementDeclaration = Message<"apps.v1.PlacementDeclaration"> & {
|
|
1098
|
+
/**
|
|
1099
|
+
* REQUIRED. Kebab-case. Unique within this manifest's ui.placements.
|
|
1100
|
+
* Stable identifier used by admin UI for keying mapping choices
|
|
1101
|
+
* (field_selected_at_install), by update-diff matching, and by the
|
|
1102
|
+
* persisted placements row's UNIQUE (config_id, key).
|
|
1103
|
+
*
|
|
1104
|
+
* @generated from field: string key = 1;
|
|
1105
|
+
*/
|
|
1106
|
+
key: string;
|
|
1107
|
+
|
|
1108
|
+
/**
|
|
1109
|
+
* @generated from field: apps.v1.PlacementDeclaration.Target target = 2;
|
|
1110
|
+
*/
|
|
1111
|
+
target: PlacementDeclaration_Target;
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* REQUIRED for MAIN_EDITOR, SIDEBAR, FIELD. Model key. Use "*" for
|
|
1115
|
+
* placements that apply to every record. May reference a sourceType /
|
|
1116
|
+
* sinkContract name from this manifest (resolved at install) OR a
|
|
1117
|
+
* literal model key ("*" or a known project model).
|
|
1118
|
+
*
|
|
1119
|
+
* @generated from field: optional string model = 3;
|
|
1120
|
+
*/
|
|
1121
|
+
model?: string | undefined;
|
|
1122
|
+
|
|
1123
|
+
/**
|
|
1124
|
+
* REQUIRED for FIELD when field_selected_at_install is false. Must be
|
|
1125
|
+
* empty when field_selected_at_install is true.
|
|
1126
|
+
*
|
|
1127
|
+
* @generated from field: optional string field = 4;
|
|
1128
|
+
*/
|
|
1129
|
+
field?: string | undefined;
|
|
1130
|
+
|
|
1131
|
+
/**
|
|
1132
|
+
* FIELD-only. When true, the admin chooses the specific field during
|
|
1133
|
+
* the mapping step (keyed by placement.key).
|
|
1134
|
+
*
|
|
1135
|
+
* @generated from field: bool field_selected_at_install = 5;
|
|
1136
|
+
*/
|
|
1137
|
+
fieldSelectedAtInstall: boolean;
|
|
1138
|
+
|
|
1139
|
+
/**
|
|
1140
|
+
* REQUIRED for MAIN_EDITOR, SIDEBAR. Tab slug.
|
|
1141
|
+
*
|
|
1142
|
+
* @generated from field: optional string tab = 6;
|
|
1143
|
+
*/
|
|
1144
|
+
tab?: string | undefined;
|
|
1145
|
+
|
|
1146
|
+
/**
|
|
1147
|
+
* REQUIRED for all. Human-readable title.
|
|
1148
|
+
*
|
|
1149
|
+
* @generated from field: string title = 7;
|
|
1150
|
+
*/
|
|
1151
|
+
title: string;
|
|
1152
|
+
|
|
1153
|
+
/**
|
|
1154
|
+
* REQUIRED. https URL the iframe loads.
|
|
1155
|
+
*
|
|
1156
|
+
* @generated from field: string url = 8;
|
|
1157
|
+
*/
|
|
1158
|
+
url: string;
|
|
1159
|
+
|
|
1160
|
+
/**
|
|
1161
|
+
* MAIN_EDITOR only. If true, replaces the default record editor.
|
|
1162
|
+
*
|
|
1163
|
+
* @generated from field: optional bool replaces_default = 9;
|
|
1164
|
+
*/
|
|
1165
|
+
replacesDefault?: boolean | undefined;
|
|
1166
|
+
|
|
1167
|
+
/**
|
|
1168
|
+
* Free-form hints (icon, ordering, badge text).
|
|
1169
|
+
*
|
|
1170
|
+
* @generated from field: optional google.protobuf.Struct hints = 10;
|
|
1171
|
+
*/
|
|
1172
|
+
hints?: JsonObject | undefined;
|
|
1173
|
+
|
|
1174
|
+
/**
|
|
1175
|
+
* What a TARGET_FULL_PAGE page asks to act with: API scopes such as
|
|
1176
|
+
* "records:read:order". The console hands the page a short-lived token that
|
|
1177
|
+
* acts as the operator looking at it, at the install's level, carrying the
|
|
1178
|
+
* overlap of these scopes with what that operator holds there and never more.
|
|
1179
|
+
* An operator standing beneath the install is given the reads only. The
|
|
1180
|
+
* install preview lists them, so installing the app is agreeing to them.
|
|
1181
|
+
* Refused on every other target: a record-bound placement is handed its
|
|
1182
|
+
* record, not a credential.
|
|
1183
|
+
*
|
|
1184
|
+
* @generated from field: repeated string scopes = 11;
|
|
1185
|
+
*/
|
|
1186
|
+
scopes: string[];
|
|
1187
|
+
|
|
1188
|
+
/**
|
|
1189
|
+
* The settings_schema properties this TARGET_FULL_PAGE page may read and
|
|
1190
|
+
* change: how a turned-on feature behaves, such as when a back-in-stock
|
|
1191
|
+
* alert goes out or a preorder's deposit. The setup owns what the app is
|
|
1192
|
+
* given, so a feature's switch (Feature.setting), the setting that names the
|
|
1193
|
+
* external account, credentials and mappings are never among them. Changing
|
|
1194
|
+
* or reading one needs apps:write, which the placement declares in scopes
|
|
1195
|
+
* and the operator holds at the install's level, as in the setup.
|
|
1196
|
+
*
|
|
1197
|
+
* @generated from field: repeated string settings = 12;
|
|
1198
|
+
*/
|
|
1199
|
+
settings: string[];
|
|
1200
|
+
};
|
|
1201
|
+
|
|
1202
|
+
/**
|
|
1203
|
+
* Describes the message apps.v1.PlacementDeclaration.
|
|
1204
|
+
* Use `create(PlacementDeclarationSchema)` to create a new message.
|
|
1205
|
+
*/
|
|
1206
|
+
export declare const PlacementDeclarationSchema: GenMessage<PlacementDeclaration>;
|
|
1207
|
+
|
|
1208
|
+
/**
|
|
1209
|
+
* @generated from enum apps.v1.PlacementDeclaration.Target
|
|
1210
|
+
*/
|
|
1211
|
+
export enum PlacementDeclaration_Target {
|
|
1212
|
+
/**
|
|
1213
|
+
* @generated from enum value: TARGET_UNSPECIFIED = 0;
|
|
1214
|
+
*/
|
|
1215
|
+
UNSPECIFIED = 0,
|
|
1216
|
+
|
|
1217
|
+
/**
|
|
1218
|
+
* top-level admin page
|
|
1219
|
+
*
|
|
1220
|
+
* @generated from enum value: TARGET_FULL_PAGE = 1;
|
|
1221
|
+
*/
|
|
1222
|
+
FULL_PAGE = 1,
|
|
1223
|
+
|
|
1224
|
+
/**
|
|
1225
|
+
* record's primary editor
|
|
1226
|
+
*
|
|
1227
|
+
* @generated from enum value: TARGET_MAIN_EDITOR = 2;
|
|
1228
|
+
*/
|
|
1229
|
+
MAIN_EDITOR = 2,
|
|
1230
|
+
|
|
1231
|
+
/**
|
|
1232
|
+
* panel attached to a record editor
|
|
1233
|
+
*
|
|
1234
|
+
* @generated from enum value: TARGET_SIDEBAR = 3;
|
|
1235
|
+
*/
|
|
1236
|
+
SIDEBAR = 3,
|
|
1237
|
+
|
|
1238
|
+
/**
|
|
1239
|
+
* inline iframe for a specific field
|
|
1240
|
+
*
|
|
1241
|
+
* @generated from enum value: TARGET_FIELD = 4;
|
|
1242
|
+
*/
|
|
1243
|
+
FIELD = 4,
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
/**
|
|
1247
|
+
* Describes the enum apps.v1.PlacementDeclaration.Target.
|
|
1248
|
+
*/
|
|
1249
|
+
export declare const PlacementDeclaration_TargetSchema: GenEnum<PlacementDeclaration_Target>;
|
|
1250
|
+
|
|
1251
|
+
/**
|
|
1252
|
+
* Which way a mapped field's values travel between foir and an app's external
|
|
1253
|
+
* system.
|
|
1254
|
+
*
|
|
1255
|
+
* READ THE NAMES FROM THE MANIFEST'S POINT OF VIEW, where a SourceType is
|
|
1256
|
+
* something the external system SOURCES to foir. SOURCE_ONLY therefore means
|
|
1257
|
+
* external -> foir; SINK_ONLY means foir -> external. The obvious misreading —
|
|
1258
|
+
* that SOURCE_ONLY means foir is the source — is exactly backwards, so the
|
|
1259
|
+
* names are spelled out on each value below rather than left to inference.
|
|
1260
|
+
*
|
|
1261
|
+
* @generated from enum apps.v1.FieldSyncDirection
|
|
1262
|
+
*/
|
|
1263
|
+
export enum FieldSyncDirection {
|
|
1264
|
+
/**
|
|
1265
|
+
* @generated from enum value: FIELD_SYNC_DIRECTION_UNSPECIFIED = 0;
|
|
1266
|
+
*/
|
|
1267
|
+
UNSPECIFIED = 0,
|
|
1268
|
+
|
|
1269
|
+
/**
|
|
1270
|
+
* External -> foir. The external system owns the value. The provisioned
|
|
1271
|
+
* model field should carry access.write = ["scoped"], so an editor is
|
|
1272
|
+
* REFUSED rather than having the edit silently overwritten by the next sync.
|
|
1273
|
+
*
|
|
1274
|
+
* @generated from enum value: FIELD_SYNC_DIRECTION_SOURCE_ONLY = 1;
|
|
1275
|
+
*/
|
|
1276
|
+
SOURCE_ONLY = 1,
|
|
1277
|
+
|
|
1278
|
+
/**
|
|
1279
|
+
* foir -> external. foir owns the value and pushes changes outward.
|
|
1280
|
+
*
|
|
1281
|
+
* @generated from enum value: FIELD_SYNC_DIRECTION_SINK_ONLY = 2;
|
|
1282
|
+
*/
|
|
1283
|
+
SINK_ONLY = 2,
|
|
1284
|
+
|
|
1285
|
+
/**
|
|
1286
|
+
* Both ways. Requires the manifest to have declared the field as supporting
|
|
1287
|
+
* it, and requires the middleware to compare before writing on BOTH legs:
|
|
1288
|
+
* the causation chain breaks loops inside foir but does not survive a round
|
|
1289
|
+
* trip through a third party, so nothing else stops the echo.
|
|
1290
|
+
*
|
|
1291
|
+
* @generated from enum value: FIELD_SYNC_DIRECTION_BIDIRECTIONAL = 3;
|
|
1292
|
+
*/
|
|
1293
|
+
BIDIRECTIONAL = 3,
|
|
1294
|
+
}
|
|
1295
|
+
|
|
1296
|
+
/**
|
|
1297
|
+
* Describes the enum apps.v1.FieldSyncDirection.
|
|
1298
|
+
*/
|
|
1299
|
+
export declare const FieldSyncDirectionSchema: GenEnum<FieldSyncDirection>;
|
|
1300
|
+
|
|
1301
|
+
/**
|
|
1302
|
+
* The level that owns each row of an app's storage: the three levels a model
|
|
1303
|
+
* can be owned at, less the operator-private one, which no app writes.
|
|
1304
|
+
*
|
|
1305
|
+
* @generated from enum apps.v1.StorageOwner
|
|
1306
|
+
*/
|
|
1307
|
+
export enum StorageOwner {
|
|
1308
|
+
/**
|
|
1309
|
+
* @generated from enum value: STORAGE_OWNER_UNSPECIFIED = 0;
|
|
1310
|
+
*/
|
|
1311
|
+
UNSPECIFIED = 0,
|
|
1312
|
+
|
|
1313
|
+
/**
|
|
1314
|
+
* Project content: one set of rows for the whole project.
|
|
1315
|
+
*
|
|
1316
|
+
* @generated from enum value: STORAGE_OWNER_PROJECT = 1;
|
|
1317
|
+
*/
|
|
1318
|
+
PROJECT = 1,
|
|
1319
|
+
|
|
1320
|
+
/**
|
|
1321
|
+
* Each row belongs to an organisation of the project.
|
|
1322
|
+
*
|
|
1323
|
+
* @generated from enum value: STORAGE_OWNER_ORGANIZATION = 2;
|
|
1324
|
+
*/
|
|
1325
|
+
ORGANIZATION = 2,
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* Each row belongs to a customer, and only they and the project read it.
|
|
1329
|
+
*
|
|
1330
|
+
* @generated from enum value: STORAGE_OWNER_CUSTOMER = 3;
|
|
1331
|
+
*/
|
|
1332
|
+
CUSTOMER = 3,
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
/**
|
|
1336
|
+
* Describes the enum apps.v1.StorageOwner.
|
|
1337
|
+
*/
|
|
1338
|
+
export declare const StorageOwnerSchema: GenEnum<StorageOwner>;
|
|
1339
|
+
|
|
1340
|
+
/**
|
|
1341
|
+
* @generated from enum apps.v1.ManifestCapability
|
|
1342
|
+
*/
|
|
1343
|
+
export enum ManifestCapability {
|
|
1344
|
+
/**
|
|
1345
|
+
* @generated from enum value: MANIFEST_CAPABILITY_UNSPECIFIED = 0;
|
|
1346
|
+
*/
|
|
1347
|
+
UNSPECIFIED = 0,
|
|
1348
|
+
|
|
1349
|
+
/**
|
|
1350
|
+
* The install's own surface: its settings and mappings, its credential, and
|
|
1351
|
+
* the status it reports.
|
|
1352
|
+
*
|
|
1353
|
+
* @generated from enum value: MANIFEST_CAPABILITY_CONFIG_READ = 1;
|
|
1354
|
+
*/
|
|
1355
|
+
CONFIG_READ = 1,
|
|
1356
|
+
|
|
1357
|
+
/**
|
|
1358
|
+
* @generated from enum value: MANIFEST_CAPABILITY_SECRETS_READ_APP = 2;
|
|
1359
|
+
*/
|
|
1360
|
+
SECRETS_READ_APP = 2,
|
|
1361
|
+
|
|
1362
|
+
/**
|
|
1363
|
+
* @generated from enum value: MANIFEST_CAPABILITY_SECRETS_PUT_APP = 3;
|
|
1364
|
+
*/
|
|
1365
|
+
SECRETS_PUT_APP = 3,
|
|
1366
|
+
|
|
1367
|
+
/**
|
|
1368
|
+
* @generated from enum value: MANIFEST_CAPABILITY_SECRETS_LIST_APP = 4;
|
|
1369
|
+
*/
|
|
1370
|
+
SECRETS_LIST_APP = 4,
|
|
1371
|
+
|
|
1372
|
+
/**
|
|
1373
|
+
* @generated from enum value: MANIFEST_CAPABILITY_SECRETS_DELETE_APP = 5;
|
|
1374
|
+
*/
|
|
1375
|
+
SECRETS_DELETE_APP = 5,
|
|
1376
|
+
|
|
1377
|
+
/**
|
|
1378
|
+
* @generated from enum value: MANIFEST_CAPABILITY_STATUS_WRITE = 6;
|
|
1379
|
+
*/
|
|
1380
|
+
STATUS_WRITE = 6,
|
|
1381
|
+
|
|
1382
|
+
/**
|
|
1383
|
+
* Files.
|
|
1384
|
+
*
|
|
1385
|
+
* @generated from enum value: MANIFEST_CAPABILITY_FILES_READ = 7;
|
|
1386
|
+
*/
|
|
1387
|
+
FILES_READ = 7,
|
|
1388
|
+
|
|
1389
|
+
/**
|
|
1390
|
+
* @generated from enum value: MANIFEST_CAPABILITY_FILES_LIST = 8;
|
|
1391
|
+
*/
|
|
1392
|
+
FILES_LIST = 8,
|
|
1393
|
+
|
|
1394
|
+
/**
|
|
1395
|
+
* @generated from enum value: MANIFEST_CAPABILITY_FILES_WRITE = 9;
|
|
1396
|
+
*/
|
|
1397
|
+
FILES_WRITE = 9,
|
|
1398
|
+
|
|
1399
|
+
/**
|
|
1400
|
+
* Customers: making the customers an operation attributes records to,
|
|
1401
|
+
* telling them something, and setting a named customer's consent.
|
|
1402
|
+
*
|
|
1403
|
+
* @generated from enum value: MANIFEST_CAPABILITY_CUSTOMERS_WRITE = 10;
|
|
1404
|
+
*/
|
|
1405
|
+
CUSTOMERS_WRITE = 10,
|
|
1406
|
+
|
|
1407
|
+
/**
|
|
1408
|
+
* @generated from enum value: MANIFEST_CAPABILITY_NOTIFICATIONS_WRITE = 11;
|
|
1409
|
+
*/
|
|
1410
|
+
NOTIFICATIONS_WRITE = 11,
|
|
1411
|
+
|
|
1412
|
+
/**
|
|
1413
|
+
* @generated from enum value: MANIFEST_CAPABILITY_NOTIFICATIONS_CONSENT = 12;
|
|
1414
|
+
*/
|
|
1415
|
+
NOTIFICATIONS_CONSENT = 12,
|
|
1416
|
+
|
|
1417
|
+
/**
|
|
1418
|
+
* Reporting an ASYNC run's outcome.
|
|
1419
|
+
*
|
|
1420
|
+
* @generated from enum value: MANIFEST_CAPABILITY_OPERATIONS_COMPLETE = 13;
|
|
1421
|
+
*/
|
|
1422
|
+
OPERATIONS_COMPLETE = 13,
|
|
1423
|
+
|
|
1424
|
+
/**
|
|
1425
|
+
* Records, per model. Delete and publish are their own capabilities: write
|
|
1426
|
+
* implies neither. Attribute is naming the customer a record belongs to.
|
|
1427
|
+
*
|
|
1428
|
+
* @generated from enum value: MANIFEST_CAPABILITY_RECORDS_READ = 20;
|
|
1429
|
+
*/
|
|
1430
|
+
RECORDS_READ = 20,
|
|
1431
|
+
|
|
1432
|
+
/**
|
|
1433
|
+
* @generated from enum value: MANIFEST_CAPABILITY_RECORDS_WRITE = 21;
|
|
1434
|
+
*/
|
|
1435
|
+
RECORDS_WRITE = 21,
|
|
1436
|
+
|
|
1437
|
+
/**
|
|
1438
|
+
* @generated from enum value: MANIFEST_CAPABILITY_RECORDS_DELETE = 22;
|
|
1439
|
+
*/
|
|
1440
|
+
RECORDS_DELETE = 22,
|
|
1441
|
+
|
|
1442
|
+
/**
|
|
1443
|
+
* @generated from enum value: MANIFEST_CAPABILITY_RECORDS_PUBLISH = 23;
|
|
1444
|
+
*/
|
|
1445
|
+
RECORDS_PUBLISH = 23,
|
|
1446
|
+
|
|
1447
|
+
/**
|
|
1448
|
+
* @generated from enum value: MANIFEST_CAPABILITY_RECORDS_ATTRIBUTE = 24;
|
|
1449
|
+
*/
|
|
1450
|
+
RECORDS_ATTRIBUTE = 24,
|
|
1451
|
+
}
|
|
1452
|
+
|
|
1453
|
+
/**
|
|
1454
|
+
* Describes the enum apps.v1.ManifestCapability.
|
|
1455
|
+
*/
|
|
1456
|
+
export declare const ManifestCapabilitySchema: GenEnum<ManifestCapability>;
|
|
1457
|
+
|
|
1458
|
+
/**
|
|
1459
|
+
* 60003 is in the organisation-internal extension range, beside the intent
|
|
1460
|
+
* option's 60001 and the config destination's 60002.
|
|
1461
|
+
*
|
|
1462
|
+
* @generated from extension: apps.v1.ManifestCapabilitySpec manifest_capability = 60003;
|
|
1463
|
+
*/
|
|
1464
|
+
export declare const manifest_capability: GenExtension<EnumValueOptions, ManifestCapabilitySpec>;
|
|
1465
|
+
|