@wtfalch/edge 0.5.1 → 0.7.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/README.md +11 -0
- package/dist/client.d.ts +53 -1
- package/dist/client.js +54 -0
- package/dist/types.d.ts +204 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -61,6 +61,17 @@ await edge.platform.tunnels.putConfig(tunnel.id, {
|
|
|
61
61
|
const { token } = await edge.platform.tunnels.token(tunnel.id);
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
+
```ts
|
|
65
|
+
// With the platform credential only: an Access app and its policy
|
|
66
|
+
const app = await edge.platform.access.create({ name: 'gate', domain: 'app.acme.com' });
|
|
67
|
+
await edge.platform.access.createPolicy(app.id, {
|
|
68
|
+
name: 'staff',
|
|
69
|
+
decision: 'allow',
|
|
70
|
+
include: [{ email: { email: 'a@acme.com' } }],
|
|
71
|
+
});
|
|
72
|
+
const { token } = await edge.platform.access.findServiceToken('ci'); // id and name, never a secret
|
|
73
|
+
```
|
|
74
|
+
|
|
64
75
|
The key carries the organisation and the one domain its names live under, so
|
|
65
76
|
no call names either. `claim` is safe to repeat: the same `ref` returns the same
|
|
66
77
|
claim, and a new `port` moves its route. `get(ref)` finds the claim for a `ref` without listing. `close` makes the name answer 404 and
|
package/dist/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ClientOptions } from './transport.js';
|
|
2
|
-
import type { AdoptRecordsRequest, AdoptRecordsResponse, AdoptTunnelsRequest, AdoptTunnelsResponse, AvailableResponse, ClaimNameRequest, CreatePlatformRecordRequest, CreatePlatformTunnelRequest, ListClaimsResponse, ListPlatformRecordsRequest, ListPlatformRecordsResponse, ListPlatformTunnelsResponse, ListRecordsResponse, MintKeyRequest, MintKeyResponse, NameClaim, OrgSettingsRequest, PlatformRecordView, PlatformTunnelView, PutPlatformTunnelConfigRequest, RecordInput, RecordPatch, RecordView, TokenResponse, UpdatePlatformRecordRequest } from './types.js';
|
|
2
|
+
import type { AdoptAccessAppsRequest, AdoptAccessAppsResponse, AdoptRecordsRequest, AdoptRecordsResponse, AdoptTunnelsRequest, AdoptTunnelsResponse, AdoptWorkersRequest, AdoptWorkersResponse, AvailableResponse, ClaimNameRequest, CreatePlatformAccessAppRequest, CreatePlatformAccessPolicyRequest, CreatePlatformRecordRequest, CreatePlatformTunnelRequest, CreatePlatformWorkerRouteRequest, FindServiceTokenResponse, ListClaimsResponse, ListPlatformAccessAppsRequest, ListPlatformAccessAppsResponse, ListPlatformAccessPoliciesResponse, ListPlatformRecordsRequest, ListPlatformRecordsResponse, ListPlatformTunnelsResponse, ListPlatformWorkerRoutesRequest, ListPlatformWorkerRoutesResponse, ListPlatformWorkerScriptsResponse, ListRecordsResponse, MintKeyRequest, MintKeyResponse, NameClaim, OrgSettingsRequest, PlatformAccessAppView, PlatformAccessPolicyView, PlatformRecordView, PlatformTunnelView, PlatformWorkerRouteView, PlatformWorkerScriptView, PutPlatformTunnelConfigRequest, RecordInput, RecordPatch, RecordView, TokenResponse, UpdatePlatformRecordRequest, UploadPlatformWorkerScriptRequest } from './types.js';
|
|
3
3
|
export { EdgeApiError, type ClientOptions } from './transport.js';
|
|
4
4
|
/** Called with an entry's key: the key carries its organisation and domain, so
|
|
5
5
|
* no call names either. `setReservedLabels`, `mintKey` and `revokeKey` are
|
|
@@ -61,6 +61,58 @@ export declare function createEdgeClient(options: ClientOptions): {
|
|
|
61
61
|
* or recreated, and a tunnel nobody names is left alone. */
|
|
62
62
|
adopt: (input: AdoptTunnelsRequest) => Promise<AdoptTunnelsResponse>;
|
|
63
63
|
};
|
|
64
|
+
/** Cloudflare Access applications the platform owns, and their policies.
|
|
65
|
+
* `id` is Cloudflare's app id. */
|
|
66
|
+
access: {
|
|
67
|
+
/** Every live app with its owner (`null`: no row), optionally narrowed
|
|
68
|
+
* by exact `domain` and/or `name`. */
|
|
69
|
+
list: (filter?: ListPlatformAccessAppsRequest) => Promise<ListPlatformAccessAppsResponse>;
|
|
70
|
+
/** Creates the app, or returns the one edge already made for that
|
|
71
|
+
* domain and name. Rejects with `conflict` when a live app holds the
|
|
72
|
+
* domain that nobody adopted (adopt it instead). */
|
|
73
|
+
create: (input: CreatePlatformAccessAppRequest) => Promise<PlatformAccessAppView>;
|
|
74
|
+
/** Deletes the app; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
75
|
+
remove: (id: string) => Promise<PlatformAccessAppView>;
|
|
76
|
+
/** The policies on an app the platform owns. */
|
|
77
|
+
listPolicies: (appId: string) => Promise<ListPlatformAccessPoliciesResponse>;
|
|
78
|
+
/** Adds a policy. The same name with the same content returns it as it
|
|
79
|
+
* is (safe to repeat); the same name with other content rejects with `conflict`. */
|
|
80
|
+
createPolicy: (appId: string, input: CreatePlatformAccessPolicyRequest) => Promise<PlatformAccessPolicyView>;
|
|
81
|
+
/** A service token's id by exact name; `token` is `null` when none has
|
|
82
|
+
* it. Read-only: the secret is never returned. */
|
|
83
|
+
findServiceToken: (name: string) => Promise<FindServiceTokenResponse>;
|
|
84
|
+
/** Writes platform rows for the live apps named. Nothing is deleted or
|
|
85
|
+
* recreated, and an app nobody names is left alone. */
|
|
86
|
+
adopt: (input: AdoptAccessAppsRequest) => Promise<AdoptAccessAppsResponse>;
|
|
87
|
+
};
|
|
88
|
+
/** Cloudflare Workers scripts and routes the platform owns. A script's
|
|
89
|
+
* `id` is its name; a route's `id` is Cloudflare's route id. */
|
|
90
|
+
workers: {
|
|
91
|
+
/** Every live script with its owner (`null`: no row), optionally only the one named `name`. */
|
|
92
|
+
listScripts: (filter?: {
|
|
93
|
+
name?: string;
|
|
94
|
+
}) => Promise<ListPlatformWorkerScriptsResponse>;
|
|
95
|
+
/** Uploads the script (base64, at most 10 MB), or redeploys the one edge
|
|
96
|
+
* already owns (201 on the first upload, 200 after). Rejects with
|
|
97
|
+
* `conflict` when a live script of that name exists that nobody adopted
|
|
98
|
+
* (adopt it instead) or another upload of the name is in progress, and
|
|
99
|
+
* with `invalid_request` when the script is not base64 or its sha256
|
|
100
|
+
* differs from `artifactSha256`. */
|
|
101
|
+
uploadScript: (name: string, input: UploadPlatformWorkerScriptRequest) => Promise<PlatformWorkerScriptView>;
|
|
102
|
+
/** Deletes the script; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
103
|
+
removeScript: (name: string) => Promise<PlatformWorkerScriptView>;
|
|
104
|
+
/** Every live route in the zone with its owner (`null`: no row), optionally only one pattern. */
|
|
105
|
+
listRoutes: (filter: ListPlatformWorkerRoutesRequest) => Promise<ListPlatformWorkerRoutesResponse>;
|
|
106
|
+
/** Creates the route, or returns the one edge already made for that
|
|
107
|
+
* zone, pattern and script. Rejects with `conflict` when a live route
|
|
108
|
+
* holds the pattern that nobody adopted (adopt it instead). */
|
|
109
|
+
createRoute: (input: CreatePlatformWorkerRouteRequest) => Promise<PlatformWorkerRouteView>;
|
|
110
|
+
/** Deletes the route in `zoneId`; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
111
|
+
removeRoute: (zoneId: string, id: string) => Promise<PlatformWorkerRouteView>;
|
|
112
|
+
/** Writes platform rows for the scripts and routes named. Nothing is
|
|
113
|
+
* deleted or recreated, and anything nobody names is left alone. */
|
|
114
|
+
adopt: (input: AdoptWorkersRequest) => Promise<AdoptWorkersResponse>;
|
|
115
|
+
};
|
|
64
116
|
};
|
|
65
117
|
/** True when the name is free: not reserved, no record in the zone, not claimed. */
|
|
66
118
|
available: (name: string) => Promise<AvailableResponse>;
|
package/dist/client.js
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { createTransport } from './transport.js';
|
|
2
2
|
export { EdgeApiError } from './transport.js';
|
|
3
|
+
function query(values) {
|
|
4
|
+
const search = new URLSearchParams(Object.entries(values).filter((entry) => entry[1] !== undefined)).toString();
|
|
5
|
+
return search === '' ? '' : `?${search}`;
|
|
6
|
+
}
|
|
3
7
|
/** Called with an entry's key: the key carries its organisation and domain, so
|
|
4
8
|
* no call names either. `setReservedLabels`, `mintKey` and `revokeKey` are
|
|
5
9
|
* refused by the service for any credential but the platform's own. */
|
|
@@ -60,6 +64,56 @@ export function createEdgeClient(options) {
|
|
|
60
64
|
* or recreated, and a tunnel nobody names is left alone. */
|
|
61
65
|
adopt: (input) => call('POST', '/v1/platform/tunnels/adopt', input),
|
|
62
66
|
},
|
|
67
|
+
/** Cloudflare Access applications the platform owns, and their policies.
|
|
68
|
+
* `id` is Cloudflare's app id. */
|
|
69
|
+
access: {
|
|
70
|
+
/** Every live app with its owner (`null`: no row), optionally narrowed
|
|
71
|
+
* by exact `domain` and/or `name`. */
|
|
72
|
+
list: (filter = {}) => call('GET', `/v1/platform/access/apps${query(filter)}`),
|
|
73
|
+
/** Creates the app, or returns the one edge already made for that
|
|
74
|
+
* domain and name. Rejects with `conflict` when a live app holds the
|
|
75
|
+
* domain that nobody adopted (adopt it instead). */
|
|
76
|
+
create: (input) => call('POST', '/v1/platform/access/apps', input),
|
|
77
|
+
/** Deletes the app; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
78
|
+
remove: (id) => call('DELETE', `/v1/platform/access/apps/${encodeURIComponent(id)}`),
|
|
79
|
+
/** The policies on an app the platform owns. */
|
|
80
|
+
listPolicies: (appId) => call('GET', `/v1/platform/access/apps/${encodeURIComponent(appId)}/policies`),
|
|
81
|
+
/** Adds a policy. The same name with the same content returns it as it
|
|
82
|
+
* is (safe to repeat); the same name with other content rejects with `conflict`. */
|
|
83
|
+
createPolicy: (appId, input) => call('POST', `/v1/platform/access/apps/${encodeURIComponent(appId)}/policies`, input),
|
|
84
|
+
/** A service token's id by exact name; `token` is `null` when none has
|
|
85
|
+
* it. Read-only: the secret is never returned. */
|
|
86
|
+
findServiceToken: (name) => call('GET', `/v1/platform/access/service-tokens?${new URLSearchParams({ name })}`),
|
|
87
|
+
/** Writes platform rows for the live apps named. Nothing is deleted or
|
|
88
|
+
* recreated, and an app nobody names is left alone. */
|
|
89
|
+
adopt: (input) => call('POST', '/v1/platform/access/apps/adopt', input),
|
|
90
|
+
},
|
|
91
|
+
/** Cloudflare Workers scripts and routes the platform owns. A script's
|
|
92
|
+
* `id` is its name; a route's `id` is Cloudflare's route id. */
|
|
93
|
+
workers: {
|
|
94
|
+
/** Every live script with its owner (`null`: no row), optionally only the one named `name`. */
|
|
95
|
+
listScripts: (filter = {}) => call('GET', `/v1/platform/workers/scripts${filter.name === undefined ? '' : `?${new URLSearchParams({ name: filter.name })}`}`),
|
|
96
|
+
/** Uploads the script (base64, at most 10 MB), or redeploys the one edge
|
|
97
|
+
* already owns (201 on the first upload, 200 after). Rejects with
|
|
98
|
+
* `conflict` when a live script of that name exists that nobody adopted
|
|
99
|
+
* (adopt it instead) or another upload of the name is in progress, and
|
|
100
|
+
* with `invalid_request` when the script is not base64 or its sha256
|
|
101
|
+
* differs from `artifactSha256`. */
|
|
102
|
+
uploadScript: (name, input) => call('PUT', `/v1/platform/workers/scripts/${encodeURIComponent(name)}`, input),
|
|
103
|
+
/** Deletes the script; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
104
|
+
removeScript: (name) => call('DELETE', `/v1/platform/workers/scripts/${encodeURIComponent(name)}`),
|
|
105
|
+
/** Every live route in the zone with its owner (`null`: no row), optionally only one pattern. */
|
|
106
|
+
listRoutes: (filter) => call('GET', `/v1/platform/workers/routes?${new URLSearchParams(Object.entries(filter).filter((entry) => entry[1] !== undefined))}`),
|
|
107
|
+
/** Creates the route, or returns the one edge already made for that
|
|
108
|
+
* zone, pattern and script. Rejects with `conflict` when a live route
|
|
109
|
+
* holds the pattern that nobody adopted (adopt it instead). */
|
|
110
|
+
createRoute: (input) => call('POST', '/v1/platform/workers/routes', input),
|
|
111
|
+
/** Deletes the route in `zoneId`; returns the tombstone. Repeating it rejects with `not_found`. */
|
|
112
|
+
removeRoute: (zoneId, id) => call('DELETE', `/v1/platform/workers/routes/${encodeURIComponent(id)}?${new URLSearchParams({ zoneId })}`),
|
|
113
|
+
/** Writes platform rows for the scripts and routes named. Nothing is
|
|
114
|
+
* deleted or recreated, and anything nobody names is left alone. */
|
|
115
|
+
adopt: (input) => call('POST', '/v1/platform/workers/adopt', input),
|
|
116
|
+
},
|
|
63
117
|
},
|
|
64
118
|
/** True when the name is free: not reserved, no record in the zone, not claimed. */
|
|
65
119
|
available: (name) => call('GET', `/v1/names/available?${new URLSearchParams({ name })}`),
|
package/dist/types.d.ts
CHANGED
|
@@ -101,8 +101,9 @@ export interface OrgSettingsRequest {
|
|
|
101
101
|
* soon. `pending`: still being set up. `removing`: teardown in progress, retry
|
|
102
102
|
* the remove. `taken`: the name or ref belongs to something else; do not
|
|
103
103
|
* retry. `held`: the name was removed less than 30 days ago; do not retry
|
|
104
|
-
* until the hold ends. `
|
|
105
|
-
|
|
104
|
+
* until the hold ends. `exists`: a tunnel of that name already exists at
|
|
105
|
+
* Cloudflare; adopt it instead. `upstream_rejected`: Cloudflare permanently refused; do not retry. */
|
|
106
|
+
export type EdgeConflictReason = 'busy' | 'pending' | 'removing' | 'taken' | 'held' | 'exists' | 'upstream_rejected';
|
|
106
107
|
export type RecordType = 'TXT' | 'MX' | 'CNAME' | 'A' | 'AAAA' | 'CAA';
|
|
107
108
|
/** CAA's structured value, in Cloudflare's form. */
|
|
108
109
|
export interface CaaData {
|
|
@@ -269,6 +270,8 @@ export interface CreatePlatformTunnelRequest {
|
|
|
269
270
|
/** One ingress rule. Every rule but the last names a hostname; the last is the catch-all. */
|
|
270
271
|
export interface TunnelIngressRule {
|
|
271
272
|
hostname?: string;
|
|
273
|
+
/** A regex Cloudflare matches against the request path, to tell rules on one hostname apart. */
|
|
274
|
+
path?: string;
|
|
272
275
|
service: string;
|
|
273
276
|
originRequest?: Record<string, unknown>;
|
|
274
277
|
}
|
|
@@ -299,3 +302,202 @@ export interface AdoptTunnelsResponse {
|
|
|
299
302
|
/** Live tunnels no entry named. Reported, never touched. */
|
|
300
303
|
unclaimed: PlatformTunnelView[];
|
|
301
304
|
}
|
|
305
|
+
/** An Access application seen with the platform credential. `id` is Cloudflare's
|
|
306
|
+
* app id, which every platform Access call takes. */
|
|
307
|
+
export interface PlatformAccessAppView {
|
|
308
|
+
id: string;
|
|
309
|
+
name: string;
|
|
310
|
+
domain: string;
|
|
311
|
+
/** Who owns it: the platform, or `null` when no row exists (a live app
|
|
312
|
+
* nobody adopted: reported, never touched). */
|
|
313
|
+
owner: 'platform' | null;
|
|
314
|
+
/** The company the app serves; `'platform'` when none. `null` for an app with no row. */
|
|
315
|
+
organisationId: string | null;
|
|
316
|
+
state: 'pending' | 'active' | 'removing' | 'removed';
|
|
317
|
+
}
|
|
318
|
+
export interface ListPlatformAccessAppsRequest {
|
|
319
|
+
/** Only the app on exactly this domain. */
|
|
320
|
+
domain?: string;
|
|
321
|
+
/** Only the apps with exactly this name. */
|
|
322
|
+
name?: string;
|
|
323
|
+
}
|
|
324
|
+
export interface ListPlatformAccessAppsResponse {
|
|
325
|
+
apps: PlatformAccessAppView[];
|
|
326
|
+
}
|
|
327
|
+
/** Creates the app, or returns the one edge already made for that domain and name. */
|
|
328
|
+
export interface CreatePlatformAccessAppRequest {
|
|
329
|
+
name: string;
|
|
330
|
+
/** A lower-case hostname, optionally with a leading `*.`. */
|
|
331
|
+
domain: string;
|
|
332
|
+
/** Only `self_hosted` is supported (the default). */
|
|
333
|
+
type?: 'self_hosted';
|
|
334
|
+
/** Like `30m` or `24h`. */
|
|
335
|
+
sessionDuration?: string;
|
|
336
|
+
autoRedirectToIdentity?: boolean;
|
|
337
|
+
/** The company the app serves. Omit for an app that serves none. */
|
|
338
|
+
organisationId?: string;
|
|
339
|
+
}
|
|
340
|
+
/** One Access rule, in Cloudflare's own shape: `{ email: { email } }`, `{ everyone: {} }`, `{ service_token: { token_id } }`. */
|
|
341
|
+
export type AccessRule = Record<string, unknown>;
|
|
342
|
+
export type AccessDecision = 'allow' | 'deny' | 'non_identity' | 'bypass';
|
|
343
|
+
export interface PlatformAccessPolicyView {
|
|
344
|
+
id: string;
|
|
345
|
+
name: string;
|
|
346
|
+
decision: AccessDecision;
|
|
347
|
+
include: AccessRule[];
|
|
348
|
+
exclude?: AccessRule[];
|
|
349
|
+
require?: AccessRule[];
|
|
350
|
+
}
|
|
351
|
+
export interface ListPlatformAccessPoliciesResponse {
|
|
352
|
+
policies: PlatformAccessPolicyView[];
|
|
353
|
+
}
|
|
354
|
+
/** Adds a policy to an app the platform owns. At least one `include` rule is required. */
|
|
355
|
+
export interface CreatePlatformAccessPolicyRequest {
|
|
356
|
+
name: string;
|
|
357
|
+
decision: AccessDecision;
|
|
358
|
+
include: AccessRule[];
|
|
359
|
+
exclude?: AccessRule[];
|
|
360
|
+
require?: AccessRule[];
|
|
361
|
+
}
|
|
362
|
+
/** A service token's id and name. Its secret is never returned. */
|
|
363
|
+
export interface FindServiceTokenResponse {
|
|
364
|
+
token: {
|
|
365
|
+
id: string;
|
|
366
|
+
name: string;
|
|
367
|
+
} | null;
|
|
368
|
+
}
|
|
369
|
+
export interface AdoptAccessAppEntry {
|
|
370
|
+
name: string;
|
|
371
|
+
/** Narrows several apps of one name. */
|
|
372
|
+
domain?: string;
|
|
373
|
+
/** Cloudflare's id, when the caller recorded it: the match must carry it. */
|
|
374
|
+
id?: string;
|
|
375
|
+
}
|
|
376
|
+
export interface AdoptAccessAppsRequest {
|
|
377
|
+
apps: AdoptAccessAppEntry[];
|
|
378
|
+
/** The company the adopted apps serve. Omit for none. */
|
|
379
|
+
organisationId?: string;
|
|
380
|
+
}
|
|
381
|
+
export interface AdoptAccessAppsResponse {
|
|
382
|
+
adopted: PlatformAccessAppView[];
|
|
383
|
+
alreadyAdopted: PlatformAccessAppView[];
|
|
384
|
+
/** `taken`: a row for that domain exists. `unsupported_type`: the app has
|
|
385
|
+
* no domain (not self-hosted). */
|
|
386
|
+
skipped: Array<{
|
|
387
|
+
app: PlatformAccessAppView;
|
|
388
|
+
reason: 'taken' | 'unsupported_type';
|
|
389
|
+
}>;
|
|
390
|
+
/** Entries with no live app. Nothing is created for them. */
|
|
391
|
+
notFound: AdoptAccessAppEntry[];
|
|
392
|
+
/** Live apps no entry named. Reported, never touched. */
|
|
393
|
+
unclaimed: PlatformAccessAppView[];
|
|
394
|
+
}
|
|
395
|
+
/** A Workers script seen with the platform credential. `id` is the script's
|
|
396
|
+
* name, which every platform script call takes. */
|
|
397
|
+
export interface PlatformWorkerScriptView {
|
|
398
|
+
id: string;
|
|
399
|
+
name: string;
|
|
400
|
+
/** Who owns it: the platform, or `null` when no row exists (a live script
|
|
401
|
+
* nobody adopted: reported, never touched). */
|
|
402
|
+
owner: 'platform' | null;
|
|
403
|
+
/** The company the script serves; `'platform'` when none. `null` for a script with no row. */
|
|
404
|
+
organisationId: string | null;
|
|
405
|
+
state: 'pending' | 'active' | 'removing' | 'removed';
|
|
406
|
+
}
|
|
407
|
+
export interface ListPlatformWorkerScriptsResponse {
|
|
408
|
+
scripts: PlatformWorkerScriptView[];
|
|
409
|
+
}
|
|
410
|
+
/** One rate limiting binding, Cloudflare's own shape. */
|
|
411
|
+
export interface WorkerRateLimitBinding {
|
|
412
|
+
type: 'ratelimit';
|
|
413
|
+
name: string;
|
|
414
|
+
namespace_id: string;
|
|
415
|
+
simple: {
|
|
416
|
+
limit: number;
|
|
417
|
+
period: number;
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
/** Uploads (or redeploys) a script. Edge fetches nothing: the caller sends the
|
|
421
|
+
* script, edge checks its size and sha256, and sends it to Cloudflare. The body
|
|
422
|
+
* is never stored or returned. */
|
|
423
|
+
export interface UploadPlatformWorkerScriptRequest {
|
|
424
|
+
/** The script (one ES module) as base64 text, at most 10 MB decoded. */
|
|
425
|
+
script: string;
|
|
426
|
+
/** The script's sha256, 64 hex characters. A script with another digest is refused with `invalid_request`. */
|
|
427
|
+
artifactSha256: string;
|
|
428
|
+
/** Like `2026-10-01`. */
|
|
429
|
+
compatibilityDate: string;
|
|
430
|
+
bindings?: WorkerRateLimitBinding[];
|
|
431
|
+
/** The company the script serves. Omit for a script that serves none. */
|
|
432
|
+
organisationId?: string;
|
|
433
|
+
}
|
|
434
|
+
/** A Workers route seen with the platform credential. `id` is Cloudflare's
|
|
435
|
+
* route id, which every platform route call takes. */
|
|
436
|
+
export interface PlatformWorkerRouteView {
|
|
437
|
+
id: string;
|
|
438
|
+
zoneId: string;
|
|
439
|
+
pattern: string;
|
|
440
|
+
/** The script it runs, or `null` for the "no Worker" route. */
|
|
441
|
+
script: string | null;
|
|
442
|
+
/** Who owns it: the platform, or `null` when no row exists. */
|
|
443
|
+
owner: 'platform' | null;
|
|
444
|
+
/** The company the route serves; `'platform'` when none. `null` for a route with no row. */
|
|
445
|
+
organisationId: string | null;
|
|
446
|
+
state: 'pending' | 'active' | 'removing' | 'removed';
|
|
447
|
+
}
|
|
448
|
+
export interface ListPlatformWorkerRoutesRequest {
|
|
449
|
+
zoneId: string;
|
|
450
|
+
/** Only the route on exactly this pattern. */
|
|
451
|
+
pattern?: string;
|
|
452
|
+
}
|
|
453
|
+
export interface ListPlatformWorkerRoutesResponse {
|
|
454
|
+
routes: PlatformWorkerRouteView[];
|
|
455
|
+
}
|
|
456
|
+
/** Creates the route, or returns the one edge already made for that zone,
|
|
457
|
+
* pattern and script. With no `script` it makes Cloudflare's "no Worker"
|
|
458
|
+
* route, which turns Workers off for the pattern. */
|
|
459
|
+
export interface CreatePlatformWorkerRouteRequest {
|
|
460
|
+
zoneId: string;
|
|
461
|
+
pattern: string;
|
|
462
|
+
script?: string;
|
|
463
|
+
/** The company the route serves. Omit for a route that serves none. */
|
|
464
|
+
organisationId?: string;
|
|
465
|
+
}
|
|
466
|
+
export interface AdoptWorkerScriptEntry {
|
|
467
|
+
name: string;
|
|
468
|
+
}
|
|
469
|
+
export interface AdoptWorkerRouteEntry {
|
|
470
|
+
zoneId: string;
|
|
471
|
+
pattern: string;
|
|
472
|
+
/** Cloudflare's id, when the caller recorded it: the match must carry it. */
|
|
473
|
+
id?: string;
|
|
474
|
+
}
|
|
475
|
+
/** Name at least one script or route. */
|
|
476
|
+
export interface AdoptWorkersRequest {
|
|
477
|
+
scripts?: AdoptWorkerScriptEntry[];
|
|
478
|
+
routes?: AdoptWorkerRouteEntry[];
|
|
479
|
+
/** The company the adopted items serve. Omit for none. */
|
|
480
|
+
organisationId?: string;
|
|
481
|
+
}
|
|
482
|
+
export interface AdoptWorkersResponse {
|
|
483
|
+
scripts: {
|
|
484
|
+
adopted: PlatformWorkerScriptView[];
|
|
485
|
+
alreadyAdopted: PlatformWorkerScriptView[];
|
|
486
|
+
/** Entries with no live script. Nothing is created for them. */
|
|
487
|
+
notFound: AdoptWorkerScriptEntry[];
|
|
488
|
+
/** Live scripts no entry named. Reported, never touched. */
|
|
489
|
+
unclaimed: PlatformWorkerScriptView[];
|
|
490
|
+
};
|
|
491
|
+
routes: {
|
|
492
|
+
adopted: PlatformWorkerRouteView[];
|
|
493
|
+
alreadyAdopted: PlatformWorkerRouteView[];
|
|
494
|
+
/** `taken`: a row for that zone and pattern exists. */
|
|
495
|
+
skipped: Array<{
|
|
496
|
+
route: PlatformWorkerRouteView;
|
|
497
|
+
reason: 'taken';
|
|
498
|
+
}>;
|
|
499
|
+
notFound: AdoptWorkerRouteEntry[];
|
|
500
|
+
/** Live routes in the named zones that no entry named. Reported, never touched. */
|
|
501
|
+
unclaimed: PlatformWorkerRouteView[];
|
|
502
|
+
};
|
|
503
|
+
}
|