@serve.zone/interfaces 32.52.0 → 32.54.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.
Files changed (106) hide show
  1. package/changelog.md +73 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/appstore/catalog.d.ts +92 -12
  4. package/dist_ts/appstore/catalog.js +119 -5
  5. package/dist_ts/appstore/types.d.ts +28 -4
  6. package/dist_ts/appstore/types.js +1 -1
  7. package/dist_ts/appstore/versionconfig.d.ts +1 -1
  8. package/dist_ts/data/cluster.d.ts +1 -1
  9. package/dist_ts/data/clusteringress.d.ts +4 -4
  10. package/dist_ts/data/clusteringressdesignation.d.ts +2 -2
  11. package/dist_ts/data/clusternode.d.ts +6 -6
  12. package/dist_ts/data/clusternode.js +1 -1
  13. package/dist_ts/data/clusternodehostname.d.ts +5 -5
  14. package/dist_ts/data/clusternodehostname.js +3 -3
  15. package/dist_ts/data/clusterrelaycredential.d.ts +3 -3
  16. package/dist_ts/data/clusterruntime.d.ts +1 -1
  17. package/dist_ts/data/clustervpn.d.ts +4 -4
  18. package/dist_ts/data/coremail.d.ts +11 -11
  19. package/dist_ts/data/coremail.runtime.d.ts +6 -6
  20. package/dist_ts/data/coremail.runtime.js +1 -1
  21. package/dist_ts/data/corestorecontroltoken.d.ts +1 -1
  22. package/dist_ts/data/corestorelegacyadoption.d.ts +2 -2
  23. package/dist_ts/data/deploymentmachineuser.d.ts +1 -1
  24. package/dist_ts/data/deploymentpreflight.d.ts +26 -1
  25. package/dist_ts/data/fleetcutover.d.ts +28 -28
  26. package/dist_ts/data/hostedapp.d.ts +4 -4
  27. package/dist_ts/data/immutableimage.d.ts +3 -3
  28. package/dist_ts/data/isolatedrestore.d.ts +7 -7
  29. package/dist_ts/data/isolatedrestore.js +1 -1
  30. package/dist_ts/data/networkaddressplan.d.ts +2 -2
  31. package/dist_ts/data/networkapplication.d.ts +9 -9
  32. package/dist_ts/data/networkauthority.d.ts +5 -5
  33. package/dist_ts/data/networkcredential.js +1 -1
  34. package/dist_ts/data/networkegressretirement.d.ts +3 -3
  35. package/dist_ts/data/networkegressretirement.js +1 -1
  36. package/dist_ts/data/networkhost.d.ts +3 -3
  37. package/dist_ts/data/networklease.d.ts +9 -9
  38. package/dist_ts/data/networkprojection.d.ts +7 -7
  39. package/dist_ts/data/networkprojectionretirement.d.ts +6 -6
  40. package/dist_ts/data/networkprotection.d.ts +9 -9
  41. package/dist_ts/data/networksigning.d.ts +6 -6
  42. package/dist_ts/data/networkworkloadingress.d.ts +3 -3
  43. package/dist_ts/data/nodeenrollment.d.ts +8 -8
  44. package/dist_ts/data/noderetirement.d.ts +1 -1
  45. package/dist_ts/data/noderuntimebinding.d.ts +11 -11
  46. package/dist_ts/data/privatenetwork.d.ts +3 -3
  47. package/dist_ts/data/runtimeassignment.d.ts +9 -9
  48. package/dist_ts/data/runtimeassignment.js +1 -1
  49. package/dist_ts/data/runtimeassignmentexec.d.ts +2 -2
  50. package/dist_ts/data/runtimeassignmentlogs.d.ts +4 -4
  51. package/dist_ts/data/runtimeassignmentstats.d.ts +2 -2
  52. package/dist_ts/data/runtimeconfig.d.ts +1 -1
  53. package/dist_ts/data/runtimelocalstorageclaim.d.ts +4 -4
  54. package/dist_ts/data/runtimelocalvolumearchive.d.ts +5 -5
  55. package/dist_ts/data/runtimesession.d.ts +5 -5
  56. package/dist_ts/data/runtimesession.js +1 -1
  57. package/dist_ts/data/runtimestorageclaim.d.ts +4 -4
  58. package/dist_ts/data/runtimeterminalreceipt.d.ts +2 -2
  59. package/dist_ts/data/runtimeterminalreceipt.js +1 -1
  60. package/dist_ts/data/secret.d.ts +4 -4
  61. package/dist_ts/data/secret.js +1 -1
  62. package/dist_ts/data/service.d.ts +10 -3
  63. package/dist_ts/data/serviceplatformownership.d.ts +1 -1
  64. package/dist_ts/data/serviceports.js +1 -1
  65. package/dist_ts/data/serviceruntime.d.ts +3 -3
  66. package/dist_ts/data/servicevolumeinitialization.d.ts +1 -1
  67. package/dist_ts/data/settings.d.ts +37 -31
  68. package/dist_ts/data/settings.js +1 -1
  69. package/dist_ts/data/sparklegacyretirement.d.ts +4 -4
  70. package/dist_ts/data/sparknodereport.d.ts +2 -2
  71. package/dist_ts/platform/storage.d.ts +1 -1
  72. package/dist_ts/platform/storagemigration.d.ts +6 -6
  73. package/dist_ts/platform/storagemigration.golden.d.ts +13 -13
  74. package/dist_ts/platform/types.d.ts +1 -1
  75. package/dist_ts/private/canonicaljson.d.ts +6 -6
  76. package/dist_ts/private/canonicaljson.js +1 -1
  77. package/dist_ts/private/dataproperties.js +1 -1
  78. package/dist_ts/private/networkcontract.js +1 -1
  79. package/dist_ts/private/storagecontract.d.ts +1 -1
  80. package/dist_ts/private/storagecontract.js +1 -1
  81. package/dist_ts/protocol.d.ts +1 -1
  82. package/dist_ts/requests/appstore.d.ts +18 -0
  83. package/dist_ts/requests/hostedapp.d.ts +6 -0
  84. package/dist_ts/requests/hostedapp.js +1 -1
  85. package/dist_ts/requests/node.d.ts +1 -1
  86. package/dist_ts/requests/service.d.ts +23 -0
  87. package/dist_ts/runtime.appstorecatalog.d.ts +17 -0
  88. package/dist_ts/runtime.appstorecatalog.js +84 -12
  89. package/dist_ts/runtime.assignmentsecret.d.ts +3 -3
  90. package/dist_ts/runtime.assignmentsecret.js +1 -1
  91. package/dist_ts/runtime.corestore.d.ts +13 -13
  92. package/dist_ts/runtime.d.ts +1 -1
  93. package/dist_ts/runtime.workloadinit.d.ts +11 -11
  94. package/package.json +5 -4
  95. package/readme.md +10 -1
  96. package/ts/00_commitinfo_data.ts +1 -1
  97. package/ts/appstore/catalog.ts +175 -5
  98. package/ts/appstore/types.ts +25 -0
  99. package/ts/data/clusternodehostname.ts +3 -3
  100. package/ts/data/service.ts +10 -2
  101. package/ts/data/settings.ts +6 -0
  102. package/ts/requests/appstore.ts +22 -0
  103. package/ts/requests/hostedapp.ts +6 -0
  104. package/ts/requests/node.ts +1 -1
  105. package/ts/requests/service.ts +28 -0
  106. package/ts/runtime.appstorecatalog.ts +91 -11
package/changelog.md CHANGED
@@ -1,5 +1,78 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-10-12 - 32.54.0
4
+
5
+ ### Features
6
+
7
+ - `IRequest_Any_Cloudly_ReadServiceDeploymentStatus` (`readServiceDeploymentStatus`) reads one
8
+ deployment operation's status without changing it. It takes the request of
9
+ `getServiceDeploymentStatus` (`identity`, `serviceId`, `operationId`) and answers the same
10
+ `IServiceDeploymentStatus`, but Cloudly transitions nothing, records no failure and schedules no
11
+ recovery for it. A rollout failure or an expired startup grace shows only in the returned
12
+ evidence. `getServiceDeploymentStatus` keeps advancing a rolling-out operation for a deployment
13
+ that polls its own rollout. An inspection such as `tsdeploy deploy-status` uses the read.
14
+
15
+ ### Maintenance
16
+
17
+ - release tooling: @git.zone/tsbuild 6.0.2, @git.zone/tsrun 3.0.3, @types/node 26.6.4, pnpm 12.9.1
18
+
19
+ ## 2026-10-08 - 32.53.0
20
+
21
+ ### Features
22
+
23
+ - App Store catalog signing keys have a stable file form (`./runtime`, `node:crypto`):
24
+ `importAppStoreCatalogSigningKeyPem` reads one unencrypted PKCS#8 PEM Ed25519 private key (as
25
+ `openssl genpkey -algorithm ed25519` writes it) and derives its public key and key id;
26
+ `exportAppStoreCatalogSigningKeyPem` writes it back. `getAppStoreCatalogTrustedKey` gives the
27
+ trusted-key record a consumer ships for a signing key, and `importAppStoreCatalogTrustedKeyPem`
28
+ and `exportAppStoreCatalogTrustedKeyPem` convert a trusted key from and to an SPKI PEM public key
29
+ (`openssl pkey -pubout`). Each refuses any other block label, key type or a key id that does not
30
+ match its public key, and no error quotes its input.
31
+ - `judgeAppStoreCatalogInstallTarget(version, supportedFeatureIds, consumer)` takes the consumer
32
+ (`IAppStoreCatalogConsumer`: `kind` `onebox` or `cloudly`, its own `version`) and refuses a
33
+ version whose `minOneboxVersion` or `minCloudlyVersion` is newer than the consumer's release as
34
+ `consumerVersionTooOld` (with `consumerKind`, `consumerVersion` and `minimumVersion`), after
35
+ `versionWithdrawn` and `featuresUnsupported`. Components compare as numbers. The argument is
36
+ optional for existing callers; a host passes it on every call, and a consumer version that is not
37
+ `MAJOR.MINOR.PATCH` throws.
38
+ - `IAppStoreApp` and `IAppStoreAppMeta` take an optional `versionStates`
39
+ (`IAppStoreAppVersionState`: `version`, `installRefusal`): every version the catalog lists,
40
+ withdrawn and feature-gated ones included, with the `judgeAppStoreCatalogInstallTarget` answer,
41
+ so a view shows the versions `versions` leaves out and why.
42
+ - A service records the App Store version it runs as a server-managed snapshot:
43
+ `IService.data.appStoreTemplate` (`appstore.IAppStoreServiceTemplateSnapshot`: `appId`,
44
+ `version`, `configDigest`, `config`, `catalogRevision`), which `TServiceWritableData` excludes, so
45
+ only the host's install, upgrade and catalog adoption write it. Onebox carries the same type on its
46
+ own service record. `appstore.createAppStoreServiceTemplateSnapshot(catalog, appId, version)` takes
47
+ it from a verified catalog (withdrawn versions included) or answers `null` when the version is not
48
+ listed.
49
+ - `IReq_Any_ImportAppStoreCatalog` (`importAppStoreCatalog`) takes an operator's signed envelope
50
+ text and answers the catalog status after judging it like a fetched one (origin
51
+ `operatorImport`), so an air-gapped host becomes ready without a registry.
52
+ - An `unavailable` catalog status states a machine-readable `cause`
53
+ (`TAppStoreCatalogUnavailableCause`: `loading`, `failed`, `refused`) next to the operator's
54
+ `reason`, and a host refuses App Store install, upgrade and upgrade preview while no catalog is
55
+ active with `TypedResponseError` code `APPSTORE_CATALOG_UNAVAILABLE`
56
+ (`appstore.appStoreCatalogUnavailableErrorCode`, `IAppStoreCatalogUnavailableErrorData`,
57
+ retryable).
58
+ - One rule for the registries a consumer loads the catalog from:
59
+ `appstore.validateAppStoreCatalogRegistries(list)` admits `https:` base URLs without credentials,
60
+ query or fragment, each registry once, at most 16, and names refused entries by index without
61
+ quoting them; `appstore.resolveAppStoreCatalogRegistries(list)` answers the canonical list, or
62
+ `appstore.appStoreCatalogDefaultRegistries` (npmjs) when it is absent or empty. Cloudly's
63
+ operators set it as `ICloudlySettings.appStoreCatalogRegistries`.
64
+ - `IReq_GetHostedAppAccessConfiguration` app entries take an optional `unavailableReason`: an app
65
+ whose roles and OIDC capability the host cannot read is listed with it instead of failing the
66
+ whole listing.
67
+
68
+ ### Documentation
69
+
70
+ - The cluster node hostname doc comments and tests use neutral example node names.
71
+
72
+ ### Maintenance
73
+
74
+ - 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.
75
+
3
76
  ## 2026-10-07 - 32.52.0
4
77
 
5
78
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '32.52.0',
6
+ version: '32.54.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: "serve.zone/appstore-catalog";
26
+ readonly id: 'serve.zone/appstore-catalog';
27
27
  readonly major: 1;
28
28
  readonly minor: 0;
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";
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 ["image", "port", "containerArgs", "targetPorts", "domains", "publicPortMappings", "envVars", "volumes", "storageClasses", "storageRequests", "publishedPorts", "platformRequirements", "platformOidc", "minOneboxVersion", "minCloudlyVersion", "changelog", "breaking", "requiresManualReview", "migrationRequired", "backupBeforeUpgrade", "requiresFeatures", "healthCheck"];
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 and a version requiring a feature the consumer does not fulfil stay listed
279
- * and are refused here, and nowhere else is a second answer needed.
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>) => TAppStoreCatalogInstallTargetRefusal | null;
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 and a version requiring a feature the consumer does not fulfil stay listed
493
- * and are refused here, and nowhere else is a second answer needed.
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
- return missingFeatureIds.length > 0 ? { reason: 'featuresUnsupported', missingFeatureIds } : null;
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: "storage.bindings";
28
- readonly filesystem: "storage.filesystem";
29
- readonly objectStorage: "storage.object-storage";
30
- readonly objectStorageFile: "storage.object-storage.file";
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[];