@serve.zone/interfaces 32.51.0 → 32.53.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 +93 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/appstore/catalog.d.ts +92 -12
- package/dist_ts/appstore/catalog.js +119 -5
- package/dist_ts/appstore/types.d.ts +28 -4
- package/dist_ts/appstore/types.js +1 -1
- package/dist_ts/appstore/versionconfig.d.ts +1 -1
- package/dist_ts/data/cluster.d.ts +1 -1
- package/dist_ts/data/clusteringress.d.ts +4 -4
- package/dist_ts/data/clusteringressdesignation.d.ts +2 -2
- package/dist_ts/data/clusternode.d.ts +13 -6
- package/dist_ts/data/clusternode.js +1 -1
- package/dist_ts/data/clusternodehostname.d.ts +63 -0
- package/dist_ts/data/clusternodehostname.js +122 -0
- package/dist_ts/data/clusterrelaycredential.d.ts +3 -3
- package/dist_ts/data/clusterruntime.d.ts +1 -1
- package/dist_ts/data/clustervpn.d.ts +4 -4
- package/dist_ts/data/coremail.d.ts +11 -11
- package/dist_ts/data/coremail.runtime.d.ts +6 -6
- package/dist_ts/data/coremail.runtime.js +1 -1
- package/dist_ts/data/corestorecontroltoken.d.ts +1 -1
- package/dist_ts/data/corestorelegacyadoption.d.ts +2 -2
- package/dist_ts/data/deploymentmachineuser.d.ts +1 -1
- package/dist_ts/data/deploymentpreflight.d.ts +26 -1
- package/dist_ts/data/fleetcutover.d.ts +28 -28
- package/dist_ts/data/hostedapp.d.ts +4 -4
- package/dist_ts/data/immutableimage.d.ts +3 -3
- package/dist_ts/data/index.d.ts +1 -0
- package/dist_ts/data/index.js +2 -1
- package/dist_ts/data/isolatedrestore.d.ts +7 -7
- package/dist_ts/data/isolatedrestore.js +1 -1
- package/dist_ts/data/networkaddressplan.d.ts +2 -2
- package/dist_ts/data/networkapplication.d.ts +9 -9
- package/dist_ts/data/networkauthority.d.ts +5 -5
- package/dist_ts/data/networkcredential.js +1 -1
- package/dist_ts/data/networkegressretirement.d.ts +3 -3
- package/dist_ts/data/networkegressretirement.js +1 -1
- package/dist_ts/data/networkhost.d.ts +3 -3
- package/dist_ts/data/networklease.d.ts +9 -9
- package/dist_ts/data/networkprojection.d.ts +7 -7
- package/dist_ts/data/networkprojectionretirement.d.ts +6 -6
- package/dist_ts/data/networkprotection.d.ts +9 -9
- package/dist_ts/data/networksigning.d.ts +6 -6
- package/dist_ts/data/networkworkloadingress.d.ts +3 -3
- package/dist_ts/data/nodeenrollment.d.ts +8 -8
- package/dist_ts/data/noderetirement.d.ts +1 -1
- package/dist_ts/data/noderuntimebinding.d.ts +11 -11
- package/dist_ts/data/privatenetwork.d.ts +3 -3
- package/dist_ts/data/runtimeassignment.d.ts +9 -9
- package/dist_ts/data/runtimeassignment.js +1 -1
- package/dist_ts/data/runtimeassignmentexec.d.ts +2 -2
- package/dist_ts/data/runtimeassignmentlogs.d.ts +4 -4
- package/dist_ts/data/runtimeassignmentstats.d.ts +2 -2
- package/dist_ts/data/runtimeconfig.d.ts +1 -1
- package/dist_ts/data/runtimelocalstorageclaim.d.ts +4 -4
- package/dist_ts/data/runtimelocalvolumearchive.d.ts +5 -5
- package/dist_ts/data/runtimesession.d.ts +5 -5
- package/dist_ts/data/runtimesession.js +1 -1
- package/dist_ts/data/runtimestorageclaim.d.ts +4 -4
- package/dist_ts/data/runtimeterminalreceipt.d.ts +2 -2
- package/dist_ts/data/runtimeterminalreceipt.js +1 -1
- package/dist_ts/data/secret.d.ts +4 -4
- package/dist_ts/data/secret.js +1 -1
- package/dist_ts/data/service.d.ts +10 -3
- package/dist_ts/data/serviceplatformownership.d.ts +1 -1
- package/dist_ts/data/serviceports.js +1 -1
- package/dist_ts/data/serviceruntime.d.ts +3 -3
- package/dist_ts/data/servicevolumeinitialization.d.ts +1 -1
- package/dist_ts/data/settings.d.ts +37 -31
- package/dist_ts/data/settings.js +1 -1
- package/dist_ts/data/sparklegacyretirement.d.ts +4 -4
- package/dist_ts/data/sparknodereport.d.ts +61 -1
- package/dist_ts/data/sparknodereport.js +66 -3
- package/dist_ts/platform/storage.d.ts +1 -1
- package/dist_ts/platform/storagemigration.d.ts +6 -6
- package/dist_ts/platform/storagemigration.golden.d.ts +13 -13
- package/dist_ts/platform/types.d.ts +1 -1
- package/dist_ts/private/canonicaljson.d.ts +6 -6
- package/dist_ts/private/canonicaljson.js +1 -1
- package/dist_ts/private/dataproperties.js +1 -1
- package/dist_ts/private/networkcontract.js +1 -1
- package/dist_ts/private/storagecontract.d.ts +1 -1
- package/dist_ts/private/storagecontract.js +1 -1
- package/dist_ts/protocol.d.ts +1 -1
- package/dist_ts/requests/appstore.d.ts +18 -0
- package/dist_ts/requests/hostedapp.d.ts +6 -0
- package/dist_ts/requests/hostedapp.js +1 -1
- package/dist_ts/requests/node.d.ts +59 -0
- package/dist_ts/runtime.appstorecatalog.d.ts +17 -0
- package/dist_ts/runtime.appstorecatalog.js +84 -12
- package/dist_ts/runtime.assignmentsecret.d.ts +3 -3
- package/dist_ts/runtime.assignmentsecret.js +1 -1
- package/dist_ts/runtime.corestore.d.ts +13 -13
- package/dist_ts/runtime.d.ts +1 -1
- package/dist_ts/runtime.workloadinit.d.ts +11 -11
- package/package.json +4 -3
- package/readme.md +27 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/ts/appstore/catalog.ts +175 -5
- package/ts/appstore/types.ts +25 -0
- package/ts/data/clusternode.ts +8 -0
- package/ts/data/clusternodehostname.ts +153 -0
- package/ts/data/index.ts +1 -0
- package/ts/data/service.ts +10 -2
- package/ts/data/settings.ts +6 -0
- package/ts/data/sparknodereport.ts +112 -2
- package/ts/requests/appstore.ts +22 -0
- package/ts/requests/hostedapp.ts +6 -0
- package/ts/requests/node.ts +67 -0
- package/ts/runtime.appstorecatalog.ts +91 -11
package/changelog.md
CHANGED
|
@@ -1,5 +1,98 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026-10-08 - 32.53.0
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
- App Store catalog signing keys have a stable file form (`./runtime`, `node:crypto`):
|
|
8
|
+
`importAppStoreCatalogSigningKeyPem` reads one unencrypted PKCS#8 PEM Ed25519 private key (as
|
|
9
|
+
`openssl genpkey -algorithm ed25519` writes it) and derives its public key and key id;
|
|
10
|
+
`exportAppStoreCatalogSigningKeyPem` writes it back. `getAppStoreCatalogTrustedKey` gives the
|
|
11
|
+
trusted-key record a consumer ships for a signing key, and `importAppStoreCatalogTrustedKeyPem`
|
|
12
|
+
and `exportAppStoreCatalogTrustedKeyPem` convert a trusted key from and to an SPKI PEM public key
|
|
13
|
+
(`openssl pkey -pubout`). Each refuses any other block label, key type or a key id that does not
|
|
14
|
+
match its public key, and no error quotes its input.
|
|
15
|
+
- `judgeAppStoreCatalogInstallTarget(version, supportedFeatureIds, consumer)` takes the consumer
|
|
16
|
+
(`IAppStoreCatalogConsumer`: `kind` `onebox` or `cloudly`, its own `version`) and refuses a
|
|
17
|
+
version whose `minOneboxVersion` or `minCloudlyVersion` is newer than the consumer's release as
|
|
18
|
+
`consumerVersionTooOld` (with `consumerKind`, `consumerVersion` and `minimumVersion`), after
|
|
19
|
+
`versionWithdrawn` and `featuresUnsupported`. Components compare as numbers. The argument is
|
|
20
|
+
optional for existing callers; a host passes it on every call, and a consumer version that is not
|
|
21
|
+
`MAJOR.MINOR.PATCH` throws.
|
|
22
|
+
- `IAppStoreApp` and `IAppStoreAppMeta` take an optional `versionStates`
|
|
23
|
+
(`IAppStoreAppVersionState`: `version`, `installRefusal`): every version the catalog lists,
|
|
24
|
+
withdrawn and feature-gated ones included, with the `judgeAppStoreCatalogInstallTarget` answer,
|
|
25
|
+
so a view shows the versions `versions` leaves out and why.
|
|
26
|
+
- A service records the App Store version it runs as a server-managed snapshot:
|
|
27
|
+
`IService.data.appStoreTemplate` (`appstore.IAppStoreServiceTemplateSnapshot`: `appId`,
|
|
28
|
+
`version`, `configDigest`, `config`, `catalogRevision`), which `TServiceWritableData` excludes, so
|
|
29
|
+
only the host's install, upgrade and catalog adoption write it. Onebox carries the same type on its
|
|
30
|
+
own service record. `appstore.createAppStoreServiceTemplateSnapshot(catalog, appId, version)` takes
|
|
31
|
+
it from a verified catalog (withdrawn versions included) or answers `null` when the version is not
|
|
32
|
+
listed.
|
|
33
|
+
- `IReq_Any_ImportAppStoreCatalog` (`importAppStoreCatalog`) takes an operator's signed envelope
|
|
34
|
+
text and answers the catalog status after judging it like a fetched one (origin
|
|
35
|
+
`operatorImport`), so an air-gapped host becomes ready without a registry.
|
|
36
|
+
- An `unavailable` catalog status states a machine-readable `cause`
|
|
37
|
+
(`TAppStoreCatalogUnavailableCause`: `loading`, `failed`, `refused`) next to the operator's
|
|
38
|
+
`reason`, and a host refuses App Store install, upgrade and upgrade preview while no catalog is
|
|
39
|
+
active with `TypedResponseError` code `APPSTORE_CATALOG_UNAVAILABLE`
|
|
40
|
+
(`appstore.appStoreCatalogUnavailableErrorCode`, `IAppStoreCatalogUnavailableErrorData`,
|
|
41
|
+
retryable).
|
|
42
|
+
- One rule for the registries a consumer loads the catalog from:
|
|
43
|
+
`appstore.validateAppStoreCatalogRegistries(list)` admits `https:` base URLs without credentials,
|
|
44
|
+
query or fragment, each registry once, at most 16, and names refused entries by index without
|
|
45
|
+
quoting them; `appstore.resolveAppStoreCatalogRegistries(list)` answers the canonical list, or
|
|
46
|
+
`appstore.appStoreCatalogDefaultRegistries` (npmjs) when it is absent or empty. Cloudly's
|
|
47
|
+
operators set it as `ICloudlySettings.appStoreCatalogRegistries`.
|
|
48
|
+
- `IReq_GetHostedAppAccessConfiguration` app entries take an optional `unavailableReason`: an app
|
|
49
|
+
whose roles and OIDC capability the host cannot read is listed with it instead of failing the
|
|
50
|
+
whole listing.
|
|
51
|
+
|
|
52
|
+
### Documentation
|
|
53
|
+
|
|
54
|
+
- The cluster node hostname doc comments and tests use neutral example node names.
|
|
55
|
+
|
|
56
|
+
### Maintenance
|
|
57
|
+
|
|
58
|
+
- Release tooling: `@git.zone/tsbuild` 5.1.2 → 6.0.0 (TypeScript 7, `7.1.0-dev.20260928.1`; the tsconfig uses none of the options TypeScript 7 removed). The contract-name rules (`test/contractnames.rules.ts`) read the classic compiler API from `typescript` ^6.0.3 directly, which tsbuild 6 no longer re-exports. `@types/node` stays at 26.6.3 until 26.6.4 is seven days old.
|
|
59
|
+
|
|
60
|
+
## 2026-10-07 - 32.52.0
|
|
61
|
+
|
|
62
|
+
### Features
|
|
63
|
+
|
|
64
|
+
- A cluster node's static hostname is Cloudly-owned desired state, with a default scheme
|
|
65
|
+
`cloudly-worker-<name>` (`data/clusternodehostname.ts`). `clusterNodeHostnameContract` states the
|
|
66
|
+
prefix and bounds: a hostname is one lowercase RFC 1123 label of at most 63 characters
|
|
67
|
+
(`isClusterNodeHostname`), a node name at most the 48 characters the prefix leaves
|
|
68
|
+
(`isClusterNodeName`). `deriveDefaultClusterNodeHostname` builds the default and
|
|
69
|
+
`proposeClusterNodeName` reads a name out of an observed hostname without guessing one from
|
|
70
|
+
another scheme. `IClusterNode.data.hostnameIntent` (`IClusterNodeHostnameIntent`: `name`,
|
|
71
|
+
`hostname`, `generation`, `requestedAt`, `requestedBy`) records it, read exactly by
|
|
72
|
+
`snapshotClusterNodeHostnameIntent`; `isDefaultClusterNodeHostname` tells whether it is the
|
|
73
|
+
default.
|
|
74
|
+
- `IReq_Any_Cloudly_SetClusterNodeHostname` renames a node and
|
|
75
|
+
`IReq_Any_Cloudly_ResetClusterNodeHostname` resets it to the default, optionally under a new
|
|
76
|
+
name; both name the intent generation they replace and refuse by one of
|
|
77
|
+
`clusterNodeHostnameRefusals` (`TClusterNodeHostnameRefusalCode`). A rename keeps the name of the
|
|
78
|
+
node's intent; a node without one takes `proposeClusterNodeName` of the requested hostname and is
|
|
79
|
+
refused `name-invalid` when that proposes none. A new intent may replace one the node has not
|
|
80
|
+
converged to; the generation fence alone serializes changes, and Spark applies the latest
|
|
81
|
+
generation.
|
|
82
|
+
`IReq_Any_Cloudly_CreateNodeJumpCommand` takes an optional `nodeName`, so a new host enrolls under
|
|
83
|
+
its default hostname.
|
|
84
|
+
- Spark reads the desired hostname on its own route, `sparkNodeHostContract` (`/spark/nodes/host`):
|
|
85
|
+
`ISparkNodeHostRequest` in, `ISparkNodeDesiredHost` out (`hostname: null` with generation 0 when
|
|
86
|
+
Cloudly holds no intent), read by `snapshotSparkNodeHostRequest` and
|
|
87
|
+
`snapshotSparkNodeDesiredHost`. `ISparkNodeReport` takes an optional `hostApply`
|
|
88
|
+
(`ISparkNodeHostApply`, `TSparkNodeHostApplyOutcome`, `sparkNodeHostApplyContract`) stating the
|
|
89
|
+
outcome of the last attempt to apply it; a Spark that sends it raises its `minimumPeerVersion` to
|
|
90
|
+
this minor, so it reaches only a Cloudly that reads it.
|
|
91
|
+
|
|
92
|
+
### Maintenance
|
|
93
|
+
|
|
94
|
+
- Release tooling: pnpm 12.8.1 → 12.8.2. `@types/node` stays at 26.6.3 until 26.6.4 is seven days old (2026-10-08 22:39 UTC).
|
|
95
|
+
|
|
3
96
|
## 2026-10-06 - 32.51.0
|
|
4
97
|
|
|
5
98
|
### Features
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@serve.zone/interfaces',
|
|
6
|
-
version: '32.
|
|
6
|
+
version: '32.53.0',
|
|
7
7
|
description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
|
|
8
8
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
|
|
@@ -23,15 +23,15 @@ import type { IAppStoreVersionConfig, IServezoneAppStoreAppInfo, TAppStoreUpgrad
|
|
|
23
23
|
* version through `requiresFeatures` (see `IAppStoreVersionConfig.requiresFeatures`).
|
|
24
24
|
*/
|
|
25
25
|
export declare const appStoreCatalogContract: Readonly<{
|
|
26
|
-
readonly id:
|
|
26
|
+
readonly id: 'serve.zone/appstore-catalog';
|
|
27
27
|
readonly major: 1;
|
|
28
28
|
readonly minor: 0;
|
|
29
|
-
readonly digestAlgorithm:
|
|
30
|
-
readonly signatureAlgorithm:
|
|
31
|
-
readonly configDigestDomain:
|
|
32
|
-
readonly catalogDigestDomain:
|
|
33
|
-
readonly signatureDomain:
|
|
34
|
-
readonly signingKeyIdDomain:
|
|
29
|
+
readonly digestAlgorithm: 'sha256';
|
|
30
|
+
readonly signatureAlgorithm: 'ed25519';
|
|
31
|
+
readonly configDigestDomain: 'serve.zone/appstore-catalog/version-config';
|
|
32
|
+
readonly catalogDigestDomain: 'serve.zone/appstore-catalog/catalog';
|
|
33
|
+
readonly signatureDomain: 'serve.zone/appstore-catalog/signature';
|
|
34
|
+
readonly signingKeyIdDomain: 'serve.zone/appstore-catalog/signing-key';
|
|
35
35
|
readonly maximumApps: 1024;
|
|
36
36
|
readonly maximumVersionsPerApp: 1024;
|
|
37
37
|
readonly maximumSignatures: 8;
|
|
@@ -55,7 +55,7 @@ export interface IAppStoreCatalogContractIdentity {
|
|
|
55
55
|
* the app states its upgrade strategy once and the version entry names its own version.
|
|
56
56
|
*/
|
|
57
57
|
export type TAppStoreCatalogVersionConfig = Omit<IAppStoreVersionConfig, 'source' | 'resolvedSource' | 'resolvedImageDigest' | 'upgradeStrategy' | 'appStoreVersion'>;
|
|
58
|
-
declare const versionConfigKeyList: readonly [
|
|
58
|
+
declare const versionConfigKeyList: readonly ['image', 'port', 'containerArgs', 'targetPorts', 'domains', 'publicPortMappings', 'envVars', 'volumes', 'storageClasses', 'storageRequests', 'publishedPorts', 'platformRequirements', 'platformOidc', 'minOneboxVersion', 'minCloudlyVersion', 'changelog', 'breaking', 'requiresManualReview', 'migrationRequired', 'backupBeforeUpgrade', 'requiresFeatures', 'healthCheck'];
|
|
59
59
|
/** Every member a catalog version config may carry; any other member is refused. */
|
|
60
60
|
export declare const appStoreCatalogVersionConfigKeys: TCompleteKeyList<TAppStoreCatalogVersionConfig, typeof versionConfigKeyList>;
|
|
61
61
|
/** Why and when a publisher withdrew a published version. */
|
|
@@ -203,13 +203,35 @@ export interface IAppStoreCatalogReadyStatus extends IAppStoreCatalogStatusBase
|
|
|
203
203
|
active: IAppStoreCatalogActiveState;
|
|
204
204
|
reason?: never;
|
|
205
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Why no verified catalog is active, for programs; `reason` says it for operators.
|
|
208
|
+
*
|
|
209
|
+
* - `loading`: no attempt has ended since start and no last-known-good catalog was restored.
|
|
210
|
+
* - `failed`: the last attempt read no candidate (transport, integrity or packaging failed).
|
|
211
|
+
* - `refused`: the last attempt read a candidate and refused it (`refused` holds the record).
|
|
212
|
+
*/
|
|
213
|
+
export type TAppStoreCatalogUnavailableCause = 'loading' | 'failed' | 'refused';
|
|
206
214
|
/** No verified catalog is active, neither a last-known-good one nor a fetched one. */
|
|
207
215
|
export interface IAppStoreCatalogUnavailableStatus extends IAppStoreCatalogStatusBase {
|
|
208
216
|
availability: 'unavailable';
|
|
209
|
-
/** Why no catalog is active, e.g. the last attempt's failure. */
|
|
217
|
+
/** Why no catalog is active, e.g. the last attempt's failure. For operators; never parse it. */
|
|
210
218
|
reason: string;
|
|
219
|
+
/** Why no catalog is active, for programs. Every host that loads the catalog at runtime states it. */
|
|
220
|
+
cause?: TAppStoreCatalogUnavailableCause;
|
|
211
221
|
active?: never;
|
|
212
222
|
}
|
|
223
|
+
/**
|
|
224
|
+
* The code a host answers, as `TypedResponseError.errorData` (`IAppStoreCatalogUnavailableErrorData`),
|
|
225
|
+
* when it refuses an App Store install, upgrade or upgrade preview because no verified catalog is
|
|
226
|
+
* active. Retryable: the same request succeeds once a catalog is active.
|
|
227
|
+
*/
|
|
228
|
+
export declare const appStoreCatalogUnavailableErrorCode: 'APPSTORE_CATALOG_UNAVAILABLE';
|
|
229
|
+
export interface IAppStoreCatalogUnavailableErrorData {
|
|
230
|
+
code: typeof appStoreCatalogUnavailableErrorCode;
|
|
231
|
+
retryable: true;
|
|
232
|
+
/** The status `cause` when the host states one. */
|
|
233
|
+
cause?: TAppStoreCatalogUnavailableCause;
|
|
234
|
+
}
|
|
213
235
|
/**
|
|
214
236
|
* The App Store domain's state as an operator sees it, discriminated by `availability`.
|
|
215
237
|
*
|
|
@@ -265,6 +287,53 @@ export declare const createAppStoreCatalogSignaturePayload: (catalogDigestArg: T
|
|
|
265
287
|
* Judge the catalog with `validateAppStoreCatalog` first; an entry it would refuse is skipped.
|
|
266
288
|
*/
|
|
267
289
|
export declare const findAppStoreCatalogConfigDigestMismatch: (catalogArg: IAppStoreCatalog) => Promise<string | null>;
|
|
290
|
+
/** The registries a consumer loads the catalog from when it configures none. */
|
|
291
|
+
export declare const appStoreCatalogDefaultRegistries: readonly string[];
|
|
292
|
+
/**
|
|
293
|
+
* The errors of a configured registry list; empty when a consumer may load from it. Every entry is
|
|
294
|
+
* an `https:` base URL without credentials, query or fragment, no two name the same registry, and
|
|
295
|
+
* an empty list means `appStoreCatalogDefaultRegistries`. Errors name entries by index and never
|
|
296
|
+
* quote them, so a URL carrying credentials does not reach a log.
|
|
297
|
+
*/
|
|
298
|
+
export declare const validateAppStoreCatalogRegistries: (listArg: unknown) => string[];
|
|
299
|
+
/**
|
|
300
|
+
* The registry base URLs a consumer asks, in order: the configured list in canonical form (no
|
|
301
|
+
* trailing slash), or `appStoreCatalogDefaultRegistries` when it is absent or empty. Throws the
|
|
302
|
+
* `validateAppStoreCatalogRegistries` errors for a list it refuses.
|
|
303
|
+
*/
|
|
304
|
+
export declare const resolveAppStoreCatalogRegistries: (listArg: readonly string[] | undefined) => string[];
|
|
305
|
+
/**
|
|
306
|
+
* The App Store version a service runs, as its host took it from a verified catalog.
|
|
307
|
+
*
|
|
308
|
+
* Server-managed: a host writes it when it installs or upgrades the service and when it adopts an
|
|
309
|
+
* existing service on catalog activation, and every runtime path reads this snapshot, never the
|
|
310
|
+
* live catalog. Published versions never change (`judgeAppStoreCatalogSuccession`), so a snapshot
|
|
311
|
+
* stays equal to its catalog entry for as long as the entry is listed.
|
|
312
|
+
*/
|
|
313
|
+
export interface IAppStoreServiceTemplateSnapshot {
|
|
314
|
+
appId: string;
|
|
315
|
+
version: string;
|
|
316
|
+
/** The catalog entry's `configDigest`: `computeAppStoreCatalogConfigDigest(config)`. */
|
|
317
|
+
configDigest: TSha256Digest;
|
|
318
|
+
config: TAppStoreCatalogVersionConfig;
|
|
319
|
+
/** The `revision` of the catalog the snapshot was taken from. */
|
|
320
|
+
catalogRevision: number;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* The snapshot of `appId@version` from a verified catalog, or `null` when the catalog does not list
|
|
324
|
+
* it. Withdrawn versions are listed and snapshot like any other: a host adopting an installed
|
|
325
|
+
* service records the version it runs; whether a version is an install or upgrade target is
|
|
326
|
+
* `judgeAppStoreCatalogInstallTarget`. The config is a copy the caller owns.
|
|
327
|
+
*/
|
|
328
|
+
export declare const createAppStoreServiceTemplateSnapshot: (catalogArg: IAppStoreCatalog, appIdArg: string, versionArg: string) => IAppStoreServiceTemplateSnapshot | null;
|
|
329
|
+
/** The hosts that consume the catalog; each version names its minimum release of each. */
|
|
330
|
+
export type TAppStoreCatalogConsumerKind = 'onebox' | 'cloudly';
|
|
331
|
+
/** The consumer judging a version: which host it is and the release it runs. */
|
|
332
|
+
export interface IAppStoreCatalogConsumer {
|
|
333
|
+
kind: TAppStoreCatalogConsumerKind;
|
|
334
|
+
/** The host's own release, `MAJOR.MINOR.PATCH`. */
|
|
335
|
+
version: string;
|
|
336
|
+
}
|
|
268
337
|
/** Why a listed version is not an install or upgrade target for this consumer. */
|
|
269
338
|
export type TAppStoreCatalogInstallTargetRefusal = {
|
|
270
339
|
reason: 'versionWithdrawn';
|
|
@@ -272,13 +341,24 @@ export type TAppStoreCatalogInstallTargetRefusal = {
|
|
|
272
341
|
} | {
|
|
273
342
|
reason: 'featuresUnsupported';
|
|
274
343
|
missingFeatureIds: string[];
|
|
344
|
+
}
|
|
345
|
+
/** The version names a minimum release of this host (`minOneboxVersion`, `minCloudlyVersion`) newer than it runs. */
|
|
346
|
+
| {
|
|
347
|
+
reason: 'consumerVersionTooOld';
|
|
348
|
+
consumerKind: TAppStoreCatalogConsumerKind;
|
|
349
|
+
consumerVersion: string;
|
|
350
|
+
minimumVersion: string;
|
|
275
351
|
};
|
|
276
352
|
/**
|
|
277
353
|
* Whether a consumer may install a listed version, or upgrade a service to it; `null` when it may.
|
|
278
|
-
* A withdrawn version
|
|
279
|
-
* and are refused here,
|
|
354
|
+
* A withdrawn version, a version requiring a feature the consumer does not fulfil and a version
|
|
355
|
+
* requiring a newer release of the consumer stay listed and are refused here, in that order, and
|
|
356
|
+
* nowhere else is a second answer needed.
|
|
357
|
+
*
|
|
358
|
+
* A host passes `consumerArg` on every call; without it the minimum release is not judged. A
|
|
359
|
+
* consumer version that is not `MAJOR.MINOR.PATCH` throws: it is the host's own constant.
|
|
280
360
|
*/
|
|
281
|
-
export declare const judgeAppStoreCatalogInstallTarget: (versionArg: IAppStoreCatalogVersion, supportedFeatureIdsArg: Iterable<string
|
|
361
|
+
export declare const judgeAppStoreCatalogInstallTarget: (versionArg: IAppStoreCatalogVersion, supportedFeatureIdsArg: Iterable<string>, consumerArg?: IAppStoreCatalogConsumer) => TAppStoreCatalogInstallTargetRefusal | null;
|
|
282
362
|
export type TAppStoreCatalogSuccession = {
|
|
283
363
|
outcome: 'activate';
|
|
284
364
|
} | {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getDigestFromPinnedImageReference, isSha256Digest } from '../data/immutableimage.js';
|
|
2
|
+
import { compareReleaseVersions, parseReleaseVersion } from '../data/releaseversion.js';
|
|
2
3
|
import { canonicalizeStrictJson, compareWireTokens, createCanonicalJsonSha256Hex, } from '../private/canonicaljson.js';
|
|
3
4
|
import { hasExactKeys, readDataElements, readDataProperties } from '../private/dataproperties.js';
|
|
4
5
|
import { validateAppStoreVersionConfig } from './versionconfig.js';
|
|
@@ -55,6 +56,12 @@ const versionConfigKeyList = [
|
|
|
55
56
|
];
|
|
56
57
|
/** Every member a catalog version config may carry; any other member is refused. */
|
|
57
58
|
export const appStoreCatalogVersionConfigKeys = Object.freeze(versionConfigKeyList);
|
|
59
|
+
/**
|
|
60
|
+
* The code a host answers, as `TypedResponseError.errorData` (`IAppStoreCatalogUnavailableErrorData`),
|
|
61
|
+
* when it refuses an App Store install, upgrade or upgrade preview because no verified catalog is
|
|
62
|
+
* active. Retryable: the same request succeeds once a catalog is active.
|
|
63
|
+
*/
|
|
64
|
+
export const appStoreCatalogUnavailableErrorCode = 'APPSTORE_CATALOG_UNAVAILABLE';
|
|
58
65
|
const withdrawalReasonMaximumLength = 512;
|
|
59
66
|
const semverPattern = /^(0|[1-9][0-9]{0,14})\.(0|[1-9][0-9]{0,14})\.(0|[1-9][0-9]{0,14})$/;
|
|
60
67
|
const versionTokenPattern = /^[A-Za-z0-9][A-Za-z0-9._+-]{0,127}$/;
|
|
@@ -487,16 +494,123 @@ export const findAppStoreCatalogConfigDigestMismatch = async (catalogArg) => {
|
|
|
487
494
|
}
|
|
488
495
|
return null;
|
|
489
496
|
};
|
|
497
|
+
/** The registries a consumer loads the catalog from when it configures none. */
|
|
498
|
+
export const appStoreCatalogDefaultRegistries = Object.freeze(['https://registry.npmjs.org']);
|
|
499
|
+
const maximumRegistries = 16;
|
|
500
|
+
const maximumRegistryUrlLength = 2048;
|
|
501
|
+
/** The canonical base URL of one registry entry, or `null` when the entry is not admissible. */
|
|
502
|
+
const readRegistryBaseUrl = (entryArg) => {
|
|
503
|
+
if (typeof entryArg !== 'string' || entryArg.length > maximumRegistryUrlLength)
|
|
504
|
+
return null;
|
|
505
|
+
let url;
|
|
506
|
+
try {
|
|
507
|
+
url = new URL(entryArg);
|
|
508
|
+
}
|
|
509
|
+
catch {
|
|
510
|
+
return null;
|
|
511
|
+
}
|
|
512
|
+
if (url.protocol !== 'https:' || url.username !== '' || url.password !== '' || url.search !== ''
|
|
513
|
+
|| url.hash !== '' || entryArg.includes('?') || entryArg.includes('#')) {
|
|
514
|
+
return null;
|
|
515
|
+
}
|
|
516
|
+
return url.toString().replace(/\/+$/, '');
|
|
517
|
+
};
|
|
518
|
+
/**
|
|
519
|
+
* The errors of a configured registry list; empty when a consumer may load from it. Every entry is
|
|
520
|
+
* an `https:` base URL without credentials, query or fragment, no two name the same registry, and
|
|
521
|
+
* an empty list means `appStoreCatalogDefaultRegistries`. Errors name entries by index and never
|
|
522
|
+
* quote them, so a URL carrying credentials does not reach a log.
|
|
523
|
+
*/
|
|
524
|
+
export const validateAppStoreCatalogRegistries = (listArg) => {
|
|
525
|
+
const entries = readDataElements(listArg, maximumRegistries);
|
|
526
|
+
if (entries === null)
|
|
527
|
+
return [`registries must be a list of at most ${maximumRegistries} URLs`];
|
|
528
|
+
const errors = [];
|
|
529
|
+
const seen = new Set();
|
|
530
|
+
entries.forEach((entryArg, indexArg) => {
|
|
531
|
+
const baseUrl = readRegistryBaseUrl(entryArg);
|
|
532
|
+
if (baseUrl === null) {
|
|
533
|
+
errors.push(`registries[${indexArg}] must be an https base URL without credentials, query or fragment`);
|
|
534
|
+
}
|
|
535
|
+
else if (seen.has(baseUrl)) {
|
|
536
|
+
errors.push(`registries[${indexArg}] names a registry listed before it`);
|
|
537
|
+
}
|
|
538
|
+
else {
|
|
539
|
+
seen.add(baseUrl);
|
|
540
|
+
}
|
|
541
|
+
});
|
|
542
|
+
return errors;
|
|
543
|
+
};
|
|
544
|
+
/**
|
|
545
|
+
* The registry base URLs a consumer asks, in order: the configured list in canonical form (no
|
|
546
|
+
* trailing slash), or `appStoreCatalogDefaultRegistries` when it is absent or empty. Throws the
|
|
547
|
+
* `validateAppStoreCatalogRegistries` errors for a list it refuses.
|
|
548
|
+
*/
|
|
549
|
+
export const resolveAppStoreCatalogRegistries = (listArg) => {
|
|
550
|
+
const errors = validateAppStoreCatalogRegistries(listArg ?? []);
|
|
551
|
+
if (errors.length > 0)
|
|
552
|
+
throw new Error(`App Store catalog registries refused: ${errors.join('; ')}`);
|
|
553
|
+
const configured = (listArg ?? []).map((entryArg) => readRegistryBaseUrl(entryArg))
|
|
554
|
+
.filter((entryArg) => entryArg !== null);
|
|
555
|
+
return configured.length > 0 ? configured : [...appStoreCatalogDefaultRegistries];
|
|
556
|
+
};
|
|
557
|
+
/**
|
|
558
|
+
* The snapshot of `appId@version` from a verified catalog, or `null` when the catalog does not list
|
|
559
|
+
* it. Withdrawn versions are listed and snapshot like any other: a host adopting an installed
|
|
560
|
+
* service records the version it runs; whether a version is an install or upgrade target is
|
|
561
|
+
* `judgeAppStoreCatalogInstallTarget`. The config is a copy the caller owns.
|
|
562
|
+
*/
|
|
563
|
+
export const createAppStoreServiceTemplateSnapshot = (catalogArg, appIdArg, versionArg) => {
|
|
564
|
+
const entry = catalogArg.apps.find((appArg) => appArg.info.id === appIdArg)
|
|
565
|
+
?.versions.find((candidateArg) => candidateArg.version === versionArg);
|
|
566
|
+
if (entry === undefined)
|
|
567
|
+
return null;
|
|
568
|
+
return {
|
|
569
|
+
appId: appIdArg,
|
|
570
|
+
version: entry.version,
|
|
571
|
+
configDigest: entry.configDigest,
|
|
572
|
+
config: structuredClone(entry.config),
|
|
573
|
+
catalogRevision: catalogArg.revision,
|
|
574
|
+
};
|
|
575
|
+
};
|
|
576
|
+
const consumerMinimumVersionKeys = Object.freeze({
|
|
577
|
+
onebox: 'minOneboxVersion',
|
|
578
|
+
cloudly: 'minCloudlyVersion',
|
|
579
|
+
});
|
|
490
580
|
/**
|
|
491
581
|
* Whether a consumer may install a listed version, or upgrade a service to it; `null` when it may.
|
|
492
|
-
* A withdrawn version
|
|
493
|
-
* and are refused here,
|
|
582
|
+
* A withdrawn version, a version requiring a feature the consumer does not fulfil and a version
|
|
583
|
+
* requiring a newer release of the consumer stay listed and are refused here, in that order, and
|
|
584
|
+
* nowhere else is a second answer needed.
|
|
585
|
+
*
|
|
586
|
+
* A host passes `consumerArg` on every call; without it the minimum release is not judged. A
|
|
587
|
+
* consumer version that is not `MAJOR.MINOR.PATCH` throws: it is the host's own constant.
|
|
494
588
|
*/
|
|
495
|
-
export const judgeAppStoreCatalogInstallTarget = (versionArg, supportedFeatureIdsArg) => {
|
|
589
|
+
export const judgeAppStoreCatalogInstallTarget = (versionArg, supportedFeatureIdsArg, consumerArg) => {
|
|
590
|
+
const consumerVersion = consumerArg === undefined ? null : parseReleaseVersion(consumerArg.version);
|
|
591
|
+
if (consumerArg !== undefined && consumerVersion === null) {
|
|
592
|
+
throw new Error('App Store catalog consumer version must be MAJOR.MINOR.PATCH');
|
|
593
|
+
}
|
|
496
594
|
if (versionArg.withdrawn !== undefined)
|
|
497
595
|
return { reason: 'versionWithdrawn', withdrawal: versionArg.withdrawn };
|
|
498
596
|
const missingFeatureIds = getAppStoreCatalogMissingFeatureIds(versionArg.config, supportedFeatureIdsArg);
|
|
499
|
-
|
|
597
|
+
if (missingFeatureIds.length > 0)
|
|
598
|
+
return { reason: 'featuresUnsupported', missingFeatureIds };
|
|
599
|
+
if (consumerArg === undefined || consumerVersion === null)
|
|
600
|
+
return null;
|
|
601
|
+
const minimumVersion = versionArg.config[consumerMinimumVersionKeys[consumerArg.kind]];
|
|
602
|
+
if (minimumVersion === undefined)
|
|
603
|
+
return null;
|
|
604
|
+
const minimum = parseReleaseVersion(minimumVersion);
|
|
605
|
+
if (minimum === null || compareReleaseVersions(consumerVersion, minimum) < 0) {
|
|
606
|
+
return {
|
|
607
|
+
reason: 'consumerVersionTooOld',
|
|
608
|
+
consumerKind: consumerArg.kind,
|
|
609
|
+
consumerVersion: consumerArg.version,
|
|
610
|
+
minimumVersion,
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
return null;
|
|
500
614
|
};
|
|
501
615
|
const sameWithdrawal = (leftArg, rightArg) => leftArg?.at === rightArg?.at && leftArg?.reason === rightArg?.reason;
|
|
502
616
|
/**
|
|
@@ -541,4 +655,4 @@ export const judgeAppStoreCatalogSuccession = (activeArg, candidateArg) => {
|
|
|
541
655
|
}
|
|
542
656
|
return { outcome: 'activate' };
|
|
543
657
|
};
|
|
544
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL2NhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlGLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9uRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsRUFBRSxFQUFFLDZCQUE2QjtJQUNqQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsZUFBZSxFQUFFLFFBQVE7SUFDekIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEUsbUJBQW1CLEVBQUUscUNBQXFDO0lBQzFELGVBQWUsRUFBRSx1Q0FBdUM7SUFDeEQsa0JBQWtCLEVBQUUseUNBQXlDO0lBQzdELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxFQUFFO0lBQ2hCLHdCQUF3QixFQUFFLEdBQUc7SUFDN0IsdUJBQXVCLEVBQUUsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFzQlosTUFBTSxvQkFBb0IsR0FBRztJQUMzQixPQUFPO0lBQ1AsTUFBTTtJQUNOLGVBQWU7SUFDZixhQUFhO0lBQ2IsU0FBUztJQUNULG9CQUFvQjtJQUNwQixTQUFTO0lBQ1Qs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
|
|
658
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL2FwcHN0b3JlL2NhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzlGLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hGLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsaUJBQWlCLEVBQ2pCLDRCQUE0QixHQUM3QixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVsRyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQU9uRTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsRUFBRSxFQUFFLDZCQUE2QjtJQUNqQyxLQUFLLEVBQUUsQ0FBQztJQUNSLEtBQUssRUFBRSxDQUFDO0lBQ1IsZUFBZSxFQUFFLFFBQVE7SUFDekIsa0JBQWtCLEVBQUUsU0FBUztJQUM3QixrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEUsbUJBQW1CLEVBQUUscUNBQXFDO0lBQzFELGVBQWUsRUFBRSx1Q0FBdUM7SUFDeEQsa0JBQWtCLEVBQUUseUNBQXlDO0lBQzdELFdBQVcsRUFBRSxJQUFJO0lBQ2pCLHFCQUFxQixFQUFFLElBQUk7SUFDM0IsaUJBQWlCLEVBQUUsQ0FBQztJQUNwQixXQUFXLEVBQUUsRUFBRTtJQUNmLFlBQVksRUFBRSxFQUFFO0lBQ2hCLHdCQUF3QixFQUFFLEdBQUc7SUFDN0IsdUJBQXVCLEVBQUUsRUFBRTtDQUNuQixDQUFDLENBQUM7QUFzQlosTUFBTSxvQkFBb0IsR0FBRztJQUMzQixPQUFPO0lBQ1AsTUFBTTtJ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
|
|
@@ -2,6 +2,7 @@ import { type TSecretDelivery, type TSecretGeneratedEncoding, type IActiveSecret
|
|
|
2
2
|
import { type IHostedAppRoleDefinition } from '../data/hostedapp.js';
|
|
3
3
|
import type { IServiceDomainRoute, IServicePublicPortMapping, IServiceTargetPort } from '../data/serviceports.js';
|
|
4
4
|
import type { IStorageCapacityRequest, IStorageClassRequirement, TFilesystemStorageAccessMode, TObjectStorageAccessMode, TObjectStorageDelivery, TStorageReclaimPolicy, TStorageResourceKind, TStorageSnapshotMode } from '../platform/storage.js';
|
|
5
|
+
import type { TAppStoreCatalogInstallTargetRefusal } from './catalog.js';
|
|
5
6
|
export type TAppStorePlatformRequirement = 'mongodb' | 's3' | 'clickhouse' | 'valkey' | 'mariadb' | 'mail';
|
|
6
7
|
export interface IAppStorePlatformRequirements {
|
|
7
8
|
mongodb?: boolean;
|
|
@@ -24,10 +25,10 @@ export type TAppStoreSourceType = 'inline' | 'repoManifest' | 'dockerImage';
|
|
|
24
25
|
export type TAppStoreTrackingMode = 'tag' | 'digest';
|
|
25
26
|
export type TAppStoreUpgradeStrategy = 'semver' | 'branch' | 'dockerDigest';
|
|
26
27
|
export declare const appStoreStorageFeatureIds: {
|
|
27
|
-
readonly bindings:
|
|
28
|
-
readonly filesystem:
|
|
29
|
-
readonly objectStorage:
|
|
30
|
-
readonly objectStorageFile:
|
|
28
|
+
readonly bindings: 'storage.bindings';
|
|
29
|
+
readonly filesystem: 'storage.filesystem';
|
|
30
|
+
readonly objectStorage: 'storage.object-storage';
|
|
31
|
+
readonly objectStorageFile: 'storage.object-storage.file';
|
|
31
32
|
};
|
|
32
33
|
export type TAppStoreStorageFeatureId = typeof appStoreStorageFeatureIds[keyof typeof appStoreStorageFeatureIds];
|
|
33
34
|
export type TAppStoreStoragePurpose = 'runtime' | 'database' | 'registry' | 'backup';
|
|
@@ -164,6 +165,17 @@ export interface IAppStorePlatformOidcCapability {
|
|
|
164
165
|
}
|
|
165
166
|
export declare const validateAppStorePlatformOidcCapability: (capabilityArg: unknown) => string[];
|
|
166
167
|
export declare const validateAppStoreVersionPlatformOidc: (configArg: unknown) => string[];
|
|
168
|
+
/** One listed version of an app as a host shows it: an install target, or why it is not one. */
|
|
169
|
+
export interface IAppStoreAppVersionState {
|
|
170
|
+
version: string;
|
|
171
|
+
/**
|
|
172
|
+
* `null` when the host may install the version or upgrade a service to it; otherwise
|
|
173
|
+
* `versionWithdrawn` with the withdrawal, `featuresUnsupported` with the feature ids the host
|
|
174
|
+
* does not fulfil or `consumerVersionTooOld` with the host release the version requires, as
|
|
175
|
+
* `judgeAppStoreCatalogInstallTarget` answers it.
|
|
176
|
+
*/
|
|
177
|
+
installRefusal: TAppStoreCatalogInstallTargetRefusal | null;
|
|
178
|
+
}
|
|
167
179
|
export interface IAppStoreApp {
|
|
168
180
|
id: string;
|
|
169
181
|
name: string;
|
|
@@ -173,6 +185,12 @@ export interface IAppStoreApp {
|
|
|
173
185
|
iconUrl?: string;
|
|
174
186
|
latestVersion: string;
|
|
175
187
|
versions?: string[];
|
|
188
|
+
/**
|
|
189
|
+
* Every version the catalog lists, withdrawn and feature-gated ones included, in catalog order,
|
|
190
|
+
* each with whether this host may install it. `versions` names only the install targets; a view
|
|
191
|
+
* reads this member to show the others and why they are not offered.
|
|
192
|
+
*/
|
|
193
|
+
versionStates?: IAppStoreAppVersionState[];
|
|
176
194
|
tags?: string[];
|
|
177
195
|
channel?: string;
|
|
178
196
|
upgradeStrategy?: TAppStoreUpgradeStrategy;
|
|
@@ -194,6 +212,12 @@ export interface IAppStoreAppMeta {
|
|
|
194
212
|
iconName?: string;
|
|
195
213
|
latestVersion: string;
|
|
196
214
|
versions: string[];
|
|
215
|
+
/**
|
|
216
|
+
* Every version the catalog lists, withdrawn and feature-gated ones included, in catalog order,
|
|
217
|
+
* each with whether this host may install it. `versions` names only the install targets; a view
|
|
218
|
+
* reads this member to show the others and why they are not offered.
|
|
219
|
+
*/
|
|
220
|
+
versionStates?: IAppStoreAppVersionState[];
|
|
197
221
|
maintainer?: string;
|
|
198
222
|
links?: Record<string, string>;
|
|
199
223
|
tags?: string[];
|