@serve.zone/interfaces 32.20.1 → 32.22.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 +74 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/data/clusteringress.d.ts +58 -0
- package/dist_ts/data/clusteringress.js +96 -2
- package/dist_ts/data/clusteringressdesignation.d.ts +64 -0
- package/dist_ts/data/clusteringressdesignation.js +84 -0
- package/dist_ts/data/gateway.d.ts +169 -0
- package/dist_ts/data/gateway.js +115 -2
- package/dist_ts/data/index.d.ts +4 -0
- package/dist_ts/data/index.js +4 -1
- package/dist_ts/data/networkprojection.d.ts +18 -0
- package/dist_ts/data/networkprojection.js +31 -2
- package/dist_ts/data/networkworkloadingress.d.ts +61 -0
- package/dist_ts/data/networkworkloadingress.js +54 -0
- package/dist_ts/data/runtimelocalstorageclaim.d.ts +124 -0
- package/dist_ts/data/runtimelocalstorageclaim.js +167 -0
- package/dist_ts/data/serviceruntime.d.ts +10 -3
- package/dist_ts/data/serviceruntime.js +6 -2
- package/dist_ts/private/ipaddress.d.ts +29 -0
- package/dist_ts/private/ipaddress.js +120 -0
- package/dist_ts/private/storagecontract.d.ts +1 -0
- package/dist_ts/private/storagecontract.js +2 -1
- package/dist_ts/requests/clusteringress.d.ts +52 -0
- package/dist_ts/requests/clusteringress.js +1 -1
- package/dist_ts/requests/gateway.d.ts +58 -1
- package/dist_ts/requests/runtimesession.d.ts +12 -0
- package/package.json +1 -1
- package/readme.md +167 -2
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/data/clusteringress.ts +136 -1
- package/ts/data/clusteringressdesignation.ts +141 -0
- package/ts/data/gateway.ts +308 -0
- package/ts/data/index.ts +5 -0
- package/ts/data/networkprojection.ts +49 -1
- package/ts/data/networkworkloadingress.ts +107 -0
- package/ts/data/runtimelocalstorageclaim.ts +275 -0
- package/ts/data/serviceruntime.ts +13 -2
- package/ts/private/ipaddress.ts +140 -0
- package/ts/private/storagecontract.ts +1 -0
- package/ts/requests/clusteringress.ts +65 -0
- package/ts/requests/gateway.ts +71 -0
- package/ts/requests/runtimesession.ts +16 -0
|
@@ -90,6 +90,11 @@ export interface IGatewayCapabilities {
|
|
|
90
90
|
read: boolean;
|
|
91
91
|
export: boolean;
|
|
92
92
|
forceRenew: boolean;
|
|
93
|
+
/**
|
|
94
|
+
* `getGatewayClientCertificate` and `releaseGatewayClientCertificate` are served: an exact
|
|
95
|
+
* certificate for one owned hostname, with no route behind it. Absent means unsupported.
|
|
96
|
+
*/
|
|
97
|
+
exactIssuance?: boolean;
|
|
93
98
|
};
|
|
94
99
|
email: {
|
|
95
100
|
domains: boolean;
|
|
@@ -102,6 +107,11 @@ export interface IGatewayCapabilities {
|
|
|
102
107
|
dns: {
|
|
103
108
|
authoritative: boolean;
|
|
104
109
|
providerManaged: boolean;
|
|
110
|
+
/**
|
|
111
|
+
* `syncGatewayClientDnsRecord` is served: an address record at a value the client chooses
|
|
112
|
+
* inside its `allowedDnsRecordAddresses`. Absent means unsupported.
|
|
113
|
+
*/
|
|
114
|
+
clientRecords?: boolean;
|
|
105
115
|
};
|
|
106
116
|
http3: {
|
|
107
117
|
enabled: boolean;
|
|
@@ -148,6 +158,11 @@ export interface IGatewayClient {
|
|
|
148
158
|
/** `*` matches any hostname under a managed zone; `*.zone` matches exactly one label. */
|
|
149
159
|
hostnamePatterns: string[];
|
|
150
160
|
allowedRouteTargets: IGatewayRouteTargetAllowance[];
|
|
161
|
+
/**
|
|
162
|
+
* Canonical address prefixes the client's own address records may point into; see
|
|
163
|
+
* `validateGatewayAllowedDnsRecordAddresses`. Absent or empty allows no address record.
|
|
164
|
+
*/
|
|
165
|
+
allowedDnsRecordAddresses?: string[];
|
|
151
166
|
capabilities: IGatewayTokenCapabilities;
|
|
152
167
|
enabled: boolean;
|
|
153
168
|
tokenCount?: number;
|
|
@@ -166,6 +181,11 @@ export interface IGatewayClientProvisioningSpec {
|
|
|
166
181
|
/** `*` matches any hostname under a managed zone; `*.zone` matches exactly one label. */
|
|
167
182
|
hostnamePatterns: string[];
|
|
168
183
|
allowedRouteTargets: IGatewayRouteTargetAllowance[];
|
|
184
|
+
/**
|
|
185
|
+
* Canonical address prefixes the client's own address records may point into; see
|
|
186
|
+
* `validateGatewayAllowedDnsRecordAddresses`. Absent or empty allows no address record.
|
|
187
|
+
*/
|
|
188
|
+
allowedDnsRecordAddresses?: string[];
|
|
169
189
|
capabilities: IGatewayTokenCapabilities;
|
|
170
190
|
enabled?: boolean;
|
|
171
191
|
}
|
|
@@ -194,6 +214,8 @@ interface IGatewayClientContextBase {
|
|
|
194
214
|
/** `*` matches any hostname under a managed zone; `*.zone` matches exactly one label. */
|
|
195
215
|
hostnamePatterns: string[];
|
|
196
216
|
allowedRouteTargets: IGatewayRouteTargetAllowance[];
|
|
217
|
+
/** Absent on gateways that predate address records; read it as an empty allowance. */
|
|
218
|
+
allowedDnsRecordAddresses?: string[];
|
|
197
219
|
capabilities: IGatewayTokenCapabilities;
|
|
198
220
|
}
|
|
199
221
|
/** Server-authoritative lifecycle of an authenticated gateway-client credential. */
|
|
@@ -410,4 +432,151 @@ export interface IGatewayRouteSyncResult {
|
|
|
410
432
|
dns?: IGatewayRouteDnsResult;
|
|
411
433
|
message?: string;
|
|
412
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Bounds of the gateway-client address record and certificate contracts.
|
|
437
|
+
*
|
|
438
|
+
* A gateway applies `defaultTtl` to a record that names none, and refuses a TTL outside
|
|
439
|
+
* `minTtl`..`maxTtl` as it refuses an allowance list longer than `maxAllowedDnsRecordAddresses`.
|
|
440
|
+
*/
|
|
441
|
+
export declare const gatewayClientHostnameContract: Readonly<{
|
|
442
|
+
minTtl: 60;
|
|
443
|
+
maxTtl: 86400;
|
|
444
|
+
defaultTtl: 300;
|
|
445
|
+
maxAllowedDnsRecordAddresses: 64;
|
|
446
|
+
maxAppIdLength: 128;
|
|
447
|
+
maxHostnameLength: 253;
|
|
448
|
+
}>;
|
|
449
|
+
/**
|
|
450
|
+
* What one gateway client owns a hostname for: its app and the exact hostname.
|
|
451
|
+
*
|
|
452
|
+
* The gateway client itself is never named here. The gateway resolves it from the authenticating
|
|
453
|
+
* gateway-client credential, so a client cannot act for another one. One ownership holds at most
|
|
454
|
+
* one address record and one certificate for its hostname, and a hostname is held by at most one
|
|
455
|
+
* ownership: a second client or app, a gateway route claim, or a record the gateway does not
|
|
456
|
+
* manage makes the hostname a conflict rather than a shared name.
|
|
457
|
+
*/
|
|
458
|
+
export interface IGatewayClientHostnameOwnership {
|
|
459
|
+
/** 1 to 128 characters of letters, digits, `.`, `_`, `:` or `-`, starting with a letter or digit. */
|
|
460
|
+
appId: string;
|
|
461
|
+
/** Lowercase fully qualified hostname without a trailing dot and without a wildcard. */
|
|
462
|
+
hostname: string;
|
|
463
|
+
}
|
|
464
|
+
/** Address record types a gateway client may publish at a value it chooses. */
|
|
465
|
+
export type TGatewayClientDnsRecordType = 'A' | 'AAAA';
|
|
466
|
+
/**
|
|
467
|
+
* One address record a gateway client asks the gateway to publish for its hostname.
|
|
468
|
+
*
|
|
469
|
+
* The value is the canonical literal of the record's family (a dotted quad for `A`, RFC 5952 text
|
|
470
|
+
* for `AAAA`) and must lie inside the client's `allowedDnsRecordAddresses`. The record is never
|
|
471
|
+
* proxied: a client that chooses its own address asks for exactly that address to be served.
|
|
472
|
+
*/
|
|
473
|
+
export interface IGatewayClientDnsRecord {
|
|
474
|
+
type: TGatewayClientDnsRecordType;
|
|
475
|
+
value: string;
|
|
476
|
+
/** Seconds, `minTtl`..`maxTtl`; `defaultTtl` when omitted. */
|
|
477
|
+
ttl?: number;
|
|
478
|
+
}
|
|
479
|
+
/**
|
|
480
|
+
* Outcome of one address record synchronization, in the gateway route DNS vocabulary.
|
|
481
|
+
*
|
|
482
|
+
* - `managed-created` / `managed-updated` / `managed-unchanged` / `managed-deleted`: done.
|
|
483
|
+
* - `target-invalid`: the value is outside the client's address allowance.
|
|
484
|
+
* - `zone-unmanaged`: no zone the gateway manages holds the hostname.
|
|
485
|
+
* - `zone-unavailable`: the zone's DNS provider or authority cannot be reached; retryable.
|
|
486
|
+
* - `record-conflict`: another ownership, a gateway route claim, or an unmanaged record holds
|
|
487
|
+
* the hostname. The gateway never overwrites or adopts it.
|
|
488
|
+
* - `mutation-failed`: writing the record failed; retryable.
|
|
489
|
+
*/
|
|
490
|
+
export type TGatewayClientDnsRecordStatus = Extract<TGatewayRouteDnsStatus, 'managed-created' | 'managed-updated' | 'managed-unchanged' | 'managed-deleted' | 'target-invalid' | 'zone-unmanaged' | 'zone-unavailable' | 'record-conflict' | 'mutation-failed'>;
|
|
491
|
+
/** Result of `syncGatewayClientDnsRecord`. */
|
|
492
|
+
export interface IGatewayClientDnsRecordSyncResult {
|
|
493
|
+
success: boolean;
|
|
494
|
+
/** True when the same request may succeed later without any change on the client's side. */
|
|
495
|
+
retryable: boolean;
|
|
496
|
+
status: TGatewayClientDnsRecordStatus;
|
|
497
|
+
hostname: string;
|
|
498
|
+
zoneName?: string;
|
|
499
|
+
/** The record this ownership holds after the call; absent after a deletion or a refusal. */
|
|
500
|
+
record?: IGatewayRouteDnsRecord;
|
|
501
|
+
/** The records that hold the hostname, as evidence for `record-conflict`. */
|
|
502
|
+
conflictingRecords?: IGatewayRouteDnsRecord[];
|
|
503
|
+
/** Unix epoch milliseconds at which the gateway checked the DNS state. */
|
|
504
|
+
checkedAt: number;
|
|
505
|
+
/** Unix epoch milliseconds at which authoritative DNS confirmed the desired state. */
|
|
506
|
+
authoritativeVerifiedAt?: number;
|
|
507
|
+
message?: string;
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* The certificate a gateway issued for one owned hostname, with its private key.
|
|
511
|
+
*
|
|
512
|
+
* Secret-bearing: a receiver keeps the key sealed and never logs or caches the response as is.
|
|
513
|
+
*/
|
|
514
|
+
export interface IGatewayClientCertificate {
|
|
515
|
+
hostname: string;
|
|
516
|
+
/** PEM leaf certificate followed by its chain. */
|
|
517
|
+
certificatePem: string;
|
|
518
|
+
/** PEM private key of the leaf certificate. */
|
|
519
|
+
privateKeyPem: string;
|
|
520
|
+
/** Unix epoch milliseconds. */
|
|
521
|
+
validFrom: number;
|
|
522
|
+
/** Unix epoch milliseconds. */
|
|
523
|
+
validUntil: number;
|
|
524
|
+
/** Unix epoch milliseconds after which asking again yields a renewed certificate. */
|
|
525
|
+
renewAfter: number;
|
|
526
|
+
}
|
|
527
|
+
/**
|
|
528
|
+
* Why a gateway does not issue a certificate for an ownership.
|
|
529
|
+
*
|
|
530
|
+
* - `zone-unmanaged`: no zone the gateway manages with verified authority holds the hostname.
|
|
531
|
+
* - `hostname-conflict`: another ownership or a gateway route claim holds the hostname.
|
|
532
|
+
* - `issuance-failed`: the certificate authority refused the order; `retryAfter` says when a new
|
|
533
|
+
* order is placed.
|
|
534
|
+
* - `issuance-unavailable`: the gateway's ACME configuration or DNS authority is not ready.
|
|
535
|
+
*/
|
|
536
|
+
export type TGatewayClientCertificateRefusal = 'zone-unmanaged' | 'hostname-conflict' | 'issuance-failed' | 'issuance-unavailable';
|
|
537
|
+
/** Result of `getGatewayClientCertificate`. */
|
|
538
|
+
export type TGatewayClientCertificateResult = {
|
|
539
|
+
status: 'ready';
|
|
540
|
+
certificate: IGatewayClientCertificate;
|
|
541
|
+
} | {
|
|
542
|
+
/** An issuance runs; ask again after `retryAfterMs`. */
|
|
543
|
+
status: 'pending';
|
|
544
|
+
hostname: string;
|
|
545
|
+
retryAfterMs: number;
|
|
546
|
+
} | {
|
|
547
|
+
status: 'refused';
|
|
548
|
+
hostname: string;
|
|
549
|
+
code: TGatewayClientCertificateRefusal;
|
|
550
|
+
retryable: boolean;
|
|
551
|
+
/** Unix epoch milliseconds before which asking again cannot change the answer. */
|
|
552
|
+
retryAfter?: number;
|
|
553
|
+
message?: string;
|
|
554
|
+
};
|
|
555
|
+
/** Result of `releaseGatewayClientCertificate`. */
|
|
556
|
+
export type TGatewayClientCertificateReleaseResult = {
|
|
557
|
+
success: true;
|
|
558
|
+
/** `released` when material or an issuance was held; `unchanged` when nothing was. */
|
|
559
|
+
action: 'released' | 'unchanged';
|
|
560
|
+
} | {
|
|
561
|
+
success: false;
|
|
562
|
+
retryable: boolean;
|
|
563
|
+
message: string;
|
|
564
|
+
};
|
|
565
|
+
/** True for a lowercase fully qualified hostname of two or more labels, without wildcard or dot. */
|
|
566
|
+
export declare const isGatewayClientHostname: (valueArg: unknown) => valueArg is string;
|
|
567
|
+
/** Validates one hostname ownership and names every reason it is refused. */
|
|
568
|
+
export declare const validateGatewayClientHostnameOwnership: (valueArg: unknown, pathArg?: string) => string[];
|
|
569
|
+
/** True for one canonical address prefix of either family whose host bits are zero. */
|
|
570
|
+
export declare const isGatewayAddressPrefix: (valueArg: unknown) => valueArg is string;
|
|
571
|
+
/** Validates a client's address allowance and names every reason it is refused. */
|
|
572
|
+
export declare const validateGatewayAllowedDnsRecordAddresses: (valueArg: unknown, pathArg?: string) => string[];
|
|
573
|
+
/** Validates one requested address record and names every reason it is refused. */
|
|
574
|
+
export declare const validateGatewayClientDnsRecord: (valueArg: unknown, pathArg?: string) => string[];
|
|
575
|
+
/**
|
|
576
|
+
* True when a valid record's value lies inside one of the allowance's prefixes of its family.
|
|
577
|
+
*
|
|
578
|
+
* A prefix that is not canonical allows nothing, so an allowance a gateway would refuse never
|
|
579
|
+
* widens what a record may point at.
|
|
580
|
+
*/
|
|
581
|
+
export declare const isGatewayClientDnsRecordAllowed: (recordArg: IGatewayClientDnsRecord, allowedDnsRecordAddressesArg: readonly string[] | undefined) => boolean;
|
|
413
582
|
export {};
|
package/dist_ts/data/gateway.js
CHANGED
|
@@ -1,2 +1,115 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { hasExactKeys, readDataElements, readDataProperties } from '../private/dataproperties.js';
|
|
2
|
+
import { isPlausibleUnicastIpv4 } from '../private/ipv4.js';
|
|
3
|
+
import { ipPrefixContains, parseCanonicalIpAddress, parseCanonicalIpPrefix, } from '../private/ipaddress.js';
|
|
4
|
+
/**
|
|
5
|
+
* Bounds of the gateway-client address record and certificate contracts.
|
|
6
|
+
*
|
|
7
|
+
* A gateway applies `defaultTtl` to a record that names none, and refuses a TTL outside
|
|
8
|
+
* `minTtl`..`maxTtl` as it refuses an allowance list longer than `maxAllowedDnsRecordAddresses`.
|
|
9
|
+
*/
|
|
10
|
+
export const gatewayClientHostnameContract = Object.freeze({
|
|
11
|
+
minTtl: 60,
|
|
12
|
+
maxTtl: 86_400,
|
|
13
|
+
defaultTtl: 300,
|
|
14
|
+
maxAllowedDnsRecordAddresses: 64,
|
|
15
|
+
maxAppIdLength: 128,
|
|
16
|
+
maxHostnameLength: 253,
|
|
17
|
+
});
|
|
18
|
+
const gatewayHostnameLabel = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
19
|
+
const gatewayAppId = /^[A-Za-z0-9][A-Za-z0-9._:-]*$/;
|
|
20
|
+
/** True for a lowercase fully qualified hostname of two or more labels, without wildcard or dot. */
|
|
21
|
+
export const isGatewayClientHostname = (valueArg) => (typeof valueArg === 'string'
|
|
22
|
+
&& valueArg.length <= gatewayClientHostnameContract.maxHostnameLength
|
|
23
|
+
&& valueArg.split('.').length >= 2
|
|
24
|
+
&& valueArg.split('.').every((labelArg) => gatewayHostnameLabel.test(labelArg)));
|
|
25
|
+
/** Validates one hostname ownership and names every reason it is refused. */
|
|
26
|
+
export const validateGatewayClientHostnameOwnership = (valueArg, pathArg = 'ownership') => {
|
|
27
|
+
const ownership = readDataProperties(valueArg);
|
|
28
|
+
if (ownership === null || !hasExactKeys(ownership, ['appId', 'hostname'])) {
|
|
29
|
+
return [`${pathArg} must use its exact schema`];
|
|
30
|
+
}
|
|
31
|
+
const errors = [];
|
|
32
|
+
const appId = ownership.appId;
|
|
33
|
+
if (typeof appId !== 'string' || appId.length > gatewayClientHostnameContract.maxAppIdLength
|
|
34
|
+
|| !gatewayAppId.test(appId)) {
|
|
35
|
+
errors.push(`${pathArg} appId must be 1 to ${gatewayClientHostnameContract.maxAppIdLength} `
|
|
36
|
+
+ 'characters of letters, digits, dot, underscore, colon or hyphen, starting with a letter or digit');
|
|
37
|
+
}
|
|
38
|
+
if (!isGatewayClientHostname(ownership.hostname)) {
|
|
39
|
+
errors.push(`${pathArg} hostname must be a lowercase fully qualified hostname `
|
|
40
|
+
+ 'without a trailing dot or wildcard');
|
|
41
|
+
}
|
|
42
|
+
return errors;
|
|
43
|
+
};
|
|
44
|
+
/** True for one canonical address prefix of either family whose host bits are zero. */
|
|
45
|
+
export const isGatewayAddressPrefix = (valueArg) => parseCanonicalIpPrefix(valueArg) !== null;
|
|
46
|
+
/** Validates a client's address allowance and names every reason it is refused. */
|
|
47
|
+
export const validateGatewayAllowedDnsRecordAddresses = (valueArg, pathArg = 'allowedDnsRecordAddresses') => {
|
|
48
|
+
const maximum = gatewayClientHostnameContract.maxAllowedDnsRecordAddresses;
|
|
49
|
+
const prefixes = readDataElements(valueArg, maximum);
|
|
50
|
+
if (prefixes === null) {
|
|
51
|
+
return [`${pathArg} must be a list of at most ${maximum} address prefixes`];
|
|
52
|
+
}
|
|
53
|
+
const errors = [];
|
|
54
|
+
prefixes.forEach((prefixArg, indexArg) => {
|
|
55
|
+
if (!isGatewayAddressPrefix(prefixArg)) {
|
|
56
|
+
errors.push(`${pathArg}[${indexArg}] must be a canonical address prefix whose host bits are zero`);
|
|
57
|
+
}
|
|
58
|
+
else if (prefixes.indexOf(prefixArg) !== indexArg) {
|
|
59
|
+
errors.push(`${pathArg}[${indexArg}] repeats ${prefixArg}`);
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
return errors;
|
|
63
|
+
};
|
|
64
|
+
/** True when the value is a canonical literal of the record type that can address one host. */
|
|
65
|
+
const isGatewayClientDnsRecordAddress = (typeArg, valueArg) => {
|
|
66
|
+
if (typeArg === 'A') {
|
|
67
|
+
return isPlausibleUnicastIpv4(valueArg);
|
|
68
|
+
}
|
|
69
|
+
const address = parseCanonicalIpAddress(valueArg);
|
|
70
|
+
// `::` is unspecified and `ff00::/8` is multicast; neither addresses one host.
|
|
71
|
+
return address?.family === 6 && address.value !== 0n && address.value >> 120n !== 0xffn;
|
|
72
|
+
};
|
|
73
|
+
/** Validates one requested address record and names every reason it is refused. */
|
|
74
|
+
export const validateGatewayClientDnsRecord = (valueArg, pathArg = 'record') => {
|
|
75
|
+
const record = readDataProperties(valueArg);
|
|
76
|
+
if (record === null || !hasExactKeys(record, ['type', 'value'], ['ttl'])) {
|
|
77
|
+
return [`${pathArg} must use its exact schema`];
|
|
78
|
+
}
|
|
79
|
+
const type = record.type;
|
|
80
|
+
if (type !== 'A' && type !== 'AAAA') {
|
|
81
|
+
return [`${pathArg} type must be A or AAAA`];
|
|
82
|
+
}
|
|
83
|
+
const errors = [];
|
|
84
|
+
if (!isGatewayClientDnsRecordAddress(type, record.value)) {
|
|
85
|
+
errors.push(type === 'A'
|
|
86
|
+
? `${pathArg} value must be a canonical IPv4 host address (not 0.0.0.0/8, multicast or reserved)`
|
|
87
|
+
: `${pathArg} value must be a canonical RFC 5952 IPv6 host address (not unspecified or multicast)`);
|
|
88
|
+
}
|
|
89
|
+
const { minTtl, maxTtl } = gatewayClientHostnameContract;
|
|
90
|
+
if (Object.hasOwn(record, 'ttl') && !(typeof record.ttl === 'number'
|
|
91
|
+
&& Number.isSafeInteger(record.ttl) && record.ttl >= minTtl && record.ttl <= maxTtl)) {
|
|
92
|
+
errors.push(`${pathArg} ttl must be an integer from ${minTtl} to ${maxTtl} seconds`);
|
|
93
|
+
}
|
|
94
|
+
return errors;
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* True when a valid record's value lies inside one of the allowance's prefixes of its family.
|
|
98
|
+
*
|
|
99
|
+
* A prefix that is not canonical allows nothing, so an allowance a gateway would refuse never
|
|
100
|
+
* widens what a record may point at.
|
|
101
|
+
*/
|
|
102
|
+
export const isGatewayClientDnsRecordAllowed = (recordArg, allowedDnsRecordAddressesArg) => {
|
|
103
|
+
if (validateGatewayClientDnsRecord(recordArg).length > 0) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
const address = parseCanonicalIpAddress(recordArg.value);
|
|
107
|
+
const allowance = allowedDnsRecordAddressesArg === undefined
|
|
108
|
+
? []
|
|
109
|
+
: readDataElements(allowedDnsRecordAddressesArg, gatewayClientHostnameContract.maxAllowedDnsRecordAddresses);
|
|
110
|
+
return address !== null && allowance !== null && allowance.some((prefixArg) => {
|
|
111
|
+
const prefix = parseCanonicalIpPrefix(prefixArg);
|
|
112
|
+
return prefix !== null && ipPrefixContains(prefix, address);
|
|
113
|
+
});
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2F0ZXdheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2RhdGEvZ2F0ZXdheS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEcsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDNUQsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFDdkIsc0JBQXNCLEdBQ3ZCLE1BQU0seUJBQXlCLENBQUM7QUFvZWpDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN6RCxNQUFNLEVBQUUsRUFBRTtJQUNWLE1BQU0sRUFBRSxNQUFNO0lBQ2QsVUFBVSxFQUFFLEdBQUc7SUFDZiw0QkFBNEIsRUFBRSxFQUFFO0lBQ2hDLGNBQWMsRUFBRSxHQUFHO0lBQ25CLGlCQUFpQixFQUFFLEdBQUc7Q0FDdkIsQ0FBQyxDQUFDO0FBbUpILE1BQU0sb0JBQW9CLEdBQUcsd0NBQXdDLENBQUM7QUFDdEUsTUFBTSxZQUFZLEdBQUcsK0JBQStCLENBQUM7QUFFckQsb0dBQW9HO0FBQ3BHLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsUUFBaUIsRUFBc0IsRUFBRSxDQUFDLENBQ2hGLE9BQU8sUUFBUSxLQUFLLFFBQVE7T0FDekIsUUFBUSxDQUFDLE1BQU0sSUFBSSw2QkFBNkIsQ0FBQyxpQkFBaUI7T0FDbEUsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQztPQUMvQixRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQ2hGLENBQUM7QUFF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
|
package/dist_ts/data/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './cluster.js';
|
|
|
3
3
|
export * from './clusterruntime.js';
|
|
4
4
|
export * from './clustervpn.js';
|
|
5
5
|
export * from './clusteringress.js';
|
|
6
|
+
export * from './clusteringressdesignation.js';
|
|
6
7
|
export * from './clusterrelaycredential.js';
|
|
7
8
|
export * from './config.js';
|
|
8
9
|
export * from './corestore.js';
|
|
@@ -40,6 +41,8 @@ export * from './networkprojection.js';
|
|
|
40
41
|
export type { IRuntimeNetworkRouterPacketGrant, IRuntimeNetworkRouterProjection } from './networkrouter.js';
|
|
41
42
|
export type { IRuntimeNetworkHostIngress, IRuntimeNetworkHostPacketGrant, IRuntimeNetworkHostProjection } from './networkhost.js';
|
|
42
43
|
export { runtimeNetworkHostContract } from './networkhost.js';
|
|
44
|
+
export type { IRuntimeNetworkWorkloadIngress, IRuntimeNetworkWorkloadIngressPacketGrant, IRuntimeNetworkWorkloadIngressProjection } from './networkworkloadingress.js';
|
|
45
|
+
export { runtimeNetworkWorkloadIngressContract } from './networkworkloadingress.js';
|
|
43
46
|
export * from './networkprotection.js';
|
|
44
47
|
export * from './networksigning.js';
|
|
45
48
|
export * from './privatenetwork.js';
|
|
@@ -48,6 +51,7 @@ export * from './releaseversion.js';
|
|
|
48
51
|
export * from './runtimeassignment.js';
|
|
49
52
|
export * from './runtimeconfig.js';
|
|
50
53
|
export * from './runtimestorageclaim.js';
|
|
54
|
+
export * from './runtimelocalstorageclaim.js';
|
|
51
55
|
export * from './runtimesession.js';
|
|
52
56
|
export * from './runtimeterminalreceipt.js';
|
|
53
57
|
export * from './secret.js';
|
package/dist_ts/data/index.js
CHANGED
|
@@ -3,6 +3,7 @@ export * from './cluster.js';
|
|
|
3
3
|
export * from './clusterruntime.js';
|
|
4
4
|
export * from './clustervpn.js';
|
|
5
5
|
export * from './clusteringress.js';
|
|
6
|
+
export * from './clusteringressdesignation.js';
|
|
6
7
|
export * from './clusterrelaycredential.js';
|
|
7
8
|
export * from './config.js';
|
|
8
9
|
export * from './corestore.js';
|
|
@@ -38,6 +39,7 @@ export * from './networklease.js';
|
|
|
38
39
|
export * from './networknode.js';
|
|
39
40
|
export * from './networkprojection.js';
|
|
40
41
|
export { runtimeNetworkHostContract } from './networkhost.js';
|
|
42
|
+
export { runtimeNetworkWorkloadIngressContract } from './networkworkloadingress.js';
|
|
41
43
|
export * from './networkprotection.js';
|
|
42
44
|
export * from './networksigning.js';
|
|
43
45
|
export * from './privatenetwork.js';
|
|
@@ -46,6 +48,7 @@ export * from './releaseversion.js';
|
|
|
46
48
|
export * from './runtimeassignment.js';
|
|
47
49
|
export * from './runtimeconfig.js';
|
|
48
50
|
export * from './runtimestorageclaim.js';
|
|
51
|
+
export * from './runtimelocalstorageclaim.js';
|
|
49
52
|
export * from './runtimesession.js';
|
|
50
53
|
export * from './runtimeterminalreceipt.js';
|
|
51
54
|
export * from './secret.js';
|
|
@@ -66,4 +69,4 @@ export * from './traffic.js';
|
|
|
66
69
|
export * from './user.js';
|
|
67
70
|
export * from './version.js';
|
|
68
71
|
export * from './webpush.js';
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9kYXRhL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMseUJBQXlCLENBQUM7QUFDeEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBR3ZDLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzlELE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3BGLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDIn0=
|
|
@@ -4,6 +4,7 @@ import type { IRuntimeNetworkHandoffLease, IRuntimeNetworkProtectedAuthority } f
|
|
|
4
4
|
import type { IPrivateNetwork, IServicePrivateNetworks, IServicePrivateNetworkDnsPolicy } from './privatenetwork.js';
|
|
5
5
|
import { type IRuntimeNetworkRouterPacketGrant, type IRuntimeNetworkRouterProjection } from './networkrouter.js';
|
|
6
6
|
import { type IRuntimeNetworkHostPacketGrant, type IRuntimeNetworkHostProjection } from './networkhost.js';
|
|
7
|
+
import { type IRuntimeNetworkWorkloadIngressPacketGrant, type IRuntimeNetworkWorkloadIngressProjection } from './networkworkloadingress.js';
|
|
7
8
|
export interface IRuntimeNetworkNodeScope {
|
|
8
9
|
controller: IRuntimeController;
|
|
9
10
|
nodeId: string;
|
|
@@ -154,6 +155,21 @@ export interface IRuntimeNetworkProjection extends IRuntimeNetworkNodeScope {
|
|
|
154
155
|
* host-origin flow; any other controller kind carrying it is refused.
|
|
155
156
|
*/
|
|
156
157
|
host?: IRuntimeNetworkHostProjection;
|
|
158
|
+
/**
|
|
159
|
+
* One-way workload ingress selections of a `cloudly` projection: the cluster ingress workload dials
|
|
160
|
+
* exact target workload ports across organizations (`IRuntimeNetworkWorkloadIngressPacketGrant`).
|
|
161
|
+
* Omitted, it keeps the canonical bytes and grants no such flow; any other controller kind
|
|
162
|
+
* carrying it is refused.
|
|
163
|
+
*/
|
|
164
|
+
workloadIngress?: IRuntimeNetworkWorkloadIngressProjection;
|
|
165
|
+
/**
|
|
166
|
+
* Ids of the protected authority's platform endpoints whose address this projection's node's own
|
|
167
|
+
* host carries, such as a relay listener or a Corestore beside the node on one machine. The node
|
|
168
|
+
* delivers workload flows to them locally instead of forwarding them. Sorted, unique and never
|
|
169
|
+
* empty when present; omitted, it keeps the canonical bytes and states that no endpoint is local.
|
|
170
|
+
* It grants nothing: a workload still reaches only the endpoints it selects.
|
|
171
|
+
*/
|
|
172
|
+
hostPlatformEndpointIds?: string[];
|
|
157
173
|
digest: TSha256Digest;
|
|
158
174
|
}
|
|
159
175
|
export interface IRuntimeNetworkDnsView {
|
|
@@ -203,6 +219,8 @@ export declare const getRuntimeNetworkProjectionPacketGrants: (value: unknown) =
|
|
|
203
219
|
export declare const getRuntimeNetworkProjectionRouterPacketGrants: (value: unknown) => Promise<IRuntimeNetworkRouterPacketGrant[]>;
|
|
204
220
|
/** Host-origin authority comes only from explicit signed `onebox` selections of local workload ports. */
|
|
205
221
|
export declare const getRuntimeNetworkProjectionHostPacketGrants: (value: unknown) => Promise<IRuntimeNetworkHostPacketGrant[]>;
|
|
222
|
+
/** One-way workload ingress authority comes only from explicit signed `cloudly` selections of exact target ports. */
|
|
223
|
+
export declare const getRuntimeNetworkProjectionWorkloadIngressPacketGrants: (value: unknown) => Promise<IRuntimeNetworkWorkloadIngressPacketGrant[]>;
|
|
206
224
|
/** Complete offline DNS material, including authorized names never previously queried. */
|
|
207
225
|
/** Select exact local receivers before expansion; all targets still come from
|
|
208
226
|
* the complete validated projection. Selection supplies no attachment authority. */
|