@serve.zone/appstore 1.4.2 → 2.0.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.
@@ -3,7 +3,7 @@ const storageFeatureIds = interfaces.appstore.appStoreStorageFeatureIds;
3
3
  const knownStorageFeatureIds = new Set(Object.values(storageFeatureIds));
4
4
  const storageClassKeyPattern = /^[A-Za-z][A-Za-z0-9-]{0,62}$/;
5
5
  const storageRequestIdPattern = /^[a-z][a-z0-9-]{0,62}$/;
6
- const environmentKeyPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
6
+ const environmentKeyPattern = /^[A-Z_][A-Z0-9_]{0,252}$/;
7
7
  const capacityPattern = /^([1-9][0-9]*)(KiB|MiB|GiB|TiB)$/;
8
8
  const capacityMultipliers = {
9
9
  KiB: 1024n,
@@ -18,7 +18,6 @@ const appStoreVersionConfigKeys = [
18
18
  'image',
19
19
  'port',
20
20
  'containerArgs',
21
- 'secretFiles',
22
21
  'targetPorts',
23
22
  'domains',
24
23
  'publicPortMappings',
@@ -84,8 +83,57 @@ export function normalizeAppStoreStorageConfig(configArg, optionsArg, labelArg =
84
83
  }
85
84
  return normalized;
86
85
  }
86
+ function collectAppInputDestinations(configArg, labelArg) {
87
+ const declaredEnvironmentKeys = new Set();
88
+ const runtimeEnvironmentOwners = new Map();
89
+ const secretFileOwners = new Map();
90
+ const addDestination = (ownersArg, destinationArg, ownerArg, kindArg) => {
91
+ const existingOwner = ownersArg.get(destinationArg);
92
+ if (existingOwner) {
93
+ throw new Error(`Invalid ${labelArg}: ${kindArg} destination '${destinationArg}' is used by both ${existingOwner} and ${ownerArg}`);
94
+ }
95
+ ownersArg.set(destinationArg, ownerArg);
96
+ };
97
+ for (const declaration of configArg.envVars || []) {
98
+ declaredEnvironmentKeys.add(declaration.key);
99
+ const owner = `envVars.${declaration.key}`;
100
+ if (declaration.secret === true) {
101
+ if (declaration.delivery.type === 'launcher-environment') {
102
+ addDestination(runtimeEnvironmentOwners, declaration.delivery.variableName, owner, 'environment');
103
+ }
104
+ else {
105
+ addDestination(secretFileOwners, declaration.delivery.targetPath, owner, 'secret file');
106
+ }
107
+ }
108
+ else {
109
+ addDestination(runtimeEnvironmentOwners, declaration.key, owner, 'environment');
110
+ }
111
+ }
112
+ const platformOidc = configArg.platformOidc;
113
+ if (platformOidc && typeof platformOidc === 'object' && !Array.isArray(platformOidc)) {
114
+ const environmentVariables = platformOidc.environmentVariables;
115
+ if (environmentVariables && typeof environmentVariables === 'object'
116
+ && !Array.isArray(environmentVariables)) {
117
+ for (const [field, destination] of Object.entries(environmentVariables)) {
118
+ if (typeof destination === 'string') {
119
+ addDestination(runtimeEnvironmentOwners, destination, `platformOidc.${field}`, 'environment');
120
+ }
121
+ }
122
+ }
123
+ }
124
+ return {
125
+ declaredEnvironmentKeys,
126
+ runtimeEnvironmentKeys: new Set(runtimeEnvironmentOwners.keys()),
127
+ declaredSecretPaths: new Set(secretFileOwners.keys()),
128
+ };
129
+ }
87
130
  function validateAndNormalizeStorageConfig(configArg, labelArg) {
88
131
  assertExactKeys(assertPlainRecord(configArg, labelArg), appStoreVersionConfigKeys, labelArg);
132
+ const environmentErrors = interfaces.appstore.validateAppStoreEnvironmentDeclarations(configArg.envVars);
133
+ if (environmentErrors.length > 0) {
134
+ throw new Error(`Invalid ${labelArg}: ${environmentErrors.join('; ')}`);
135
+ }
136
+ const appInputDestinations = collectAppInputDestinations(configArg, labelArg);
89
137
  validatePlatformRequirements(configArg.platformRequirements, labelArg);
90
138
  const explicitClassInput = configArg.storageClasses;
91
139
  const explicitRequestInput = configArg.storageRequests;
@@ -95,7 +143,7 @@ function validateAndNormalizeStorageConfig(configArg, labelArg) {
95
143
  throw new Error(`Invalid ${labelArg}: storageClasses and storageRequests must be declared together`);
96
144
  }
97
145
  const storageClasses = validateStorageClasses(explicitClassInput, labelArg);
98
- const explicitRequests = validateExplicitStorageRequests(explicitRequestInput, storageClasses, configArg, labelArg);
146
+ const explicitRequests = validateExplicitStorageRequests(explicitRequestInput, storageClasses, appInputDestinations, labelArg);
99
147
  const requiredFeatureIds = validateFeatureDeclaration(configArg, explicitRequests, labelArg);
100
148
  if (configArg.platformRequirements?.s3 && explicitRequests.some((requestArg) => requestArg.kind === 'objectStorage')) {
101
149
  throw new Error(`Invalid ${labelArg}: platformRequirements.s3 cannot coexist with explicit objectStorage requests`);
@@ -161,7 +209,7 @@ function validateAndNormalizeStorageConfig(configArg, labelArg) {
161
209
  accessMode: 'readWrite',
162
210
  reclaimPolicy: 'retain',
163
211
  delivery: {
164
- type: 'environment',
212
+ type: 'launcher-environment',
165
213
  keys: {
166
214
  endpoint: 'S3_ENDPOINT',
167
215
  bucket: 'S3_BUCKET',
@@ -180,9 +228,9 @@ function validateAndNormalizeStorageConfig(configArg, labelArg) {
180
228
  },
181
229
  };
182
230
  }
183
- validateAllFilesystemMountsAndSecretTargets(storageRequests, configArg, labelArg);
231
+ validateAllFilesystemMountsAndSecretTargets(storageRequests, appInputDestinations.declaredSecretPaths, labelArg);
184
232
  return {
185
- schemaVersion: 1,
233
+ schemaVersion: 2,
186
234
  storageClasses,
187
235
  storageRequests,
188
236
  requestOrigins: Object.fromEntries(requestOriginEntries),
@@ -217,7 +265,7 @@ function validateStorageClasses(classesArg, labelArg) {
217
265
  for (const requirementKey of Object.keys(required)) {
218
266
  if (preferred[requirementKey] !== undefined
219
267
  && preferred[requirementKey] !== required[requirementKey]) {
220
- throw new Error(`Invalid ${classLabel}: preferred.${requirementKey} conflicts with required.${requirementKey}`);
268
+ throw new Error(`Invalid ${classLabel}: preferred.${String(requirementKey)} conflicts with required.${String(requirementKey)}`);
221
269
  }
222
270
  }
223
271
  }
@@ -255,7 +303,7 @@ function validateClassRequirement(requirementArg, labelArg) {
255
303
  }
256
304
  return { ...requirement };
257
305
  }
258
- function validateExplicitStorageRequests(requestsArg, classesArg, configArg, labelArg) {
306
+ function validateExplicitStorageRequests(requestsArg, classesArg, appInputDestinationsArg, labelArg) {
259
307
  if (requestsArg === undefined)
260
308
  return [];
261
309
  if (!Array.isArray(requestsArg) || requestsArg.length === 0 || requestsArg.length > 64) {
@@ -264,18 +312,8 @@ function validateExplicitStorageRequests(requestsArg, classesArg, configArg, lab
264
312
  const requestIds = new Set();
265
313
  const usedClassKeys = new Set();
266
314
  const deliveryEnvironmentKeys = new Set();
267
- const declaredEnvironmentKeys = new Set();
268
- for (const envVar of configArg.envVars || []) {
269
- declaredEnvironmentKeys.add(envVar.key);
270
- }
271
- for (const secretFile of configArg.secretFiles || []) {
272
- declaredEnvironmentKeys.add(secretFile.sourceKey);
273
- }
274
- for (const oidcEnvironmentKey of Object.values(configArg.platformOidc?.environmentVariables || {})) {
275
- declaredEnvironmentKeys.add(oidcEnvironmentKey);
276
- }
315
+ const { declaredEnvironmentKeys, runtimeEnvironmentKeys, declaredSecretPaths, } = appInputDestinationsArg;
277
316
  const deliverySecretPaths = new Set();
278
- const declaredSecretPaths = new Set((configArg.secretFiles || []).map((entryArg) => entryArg.targetPath));
279
317
  const requests = requestsArg.map((candidateArg, indexArg) => {
280
318
  const requestLabel = `${labelArg} storageRequests[${indexArg}]`;
281
319
  const candidate = assertPlainRecord(candidateArg, requestLabel);
@@ -344,7 +382,7 @@ function validateExplicitStorageRequests(requestsArg, classesArg, configArg, lab
344
382
  };
345
383
  }
346
384
  assertOptionalMember(candidate.accessMode, ['readOnly', 'readWrite'], `${requestLabel}.accessMode`, false);
347
- const delivery = validateObjectStorageDelivery(candidate.delivery, requestLabel, declaredEnvironmentKeys, deliveryEnvironmentKeys, declaredSecretPaths, deliverySecretPaths);
385
+ const delivery = validateObjectStorageDelivery(candidate.delivery, requestLabel, declaredEnvironmentKeys, runtimeEnvironmentKeys, deliveryEnvironmentKeys, declaredSecretPaths, deliverySecretPaths);
348
386
  const protection = validateObjectStorageProtection(candidate.protection, `${requestLabel}.protection`);
349
387
  if (protection?.backup === 'required' && storageClass.required?.backup !== true) {
350
388
  throw new Error(`Invalid ${requestLabel}: required backup must be declared by the storage class`);
@@ -409,10 +447,10 @@ function validateObjectStorageProtection(protectionArg, labelArg) {
409
447
  }
410
448
  return { ...protection };
411
449
  }
412
- function validateObjectStorageDelivery(deliveryArg, requestLabelArg, declaredEnvironmentKeysArg, deliveryEnvironmentKeysArg, declaredSecretPathsArg, deliverySecretPathsArg) {
450
+ function validateObjectStorageDelivery(deliveryArg, requestLabelArg, declaredEnvironmentKeysArg, runtimeEnvironmentKeysArg, deliveryEnvironmentKeysArg, declaredSecretPathsArg, deliverySecretPathsArg) {
413
451
  const deliveryLabel = `${requestLabelArg}.delivery`;
414
452
  const delivery = assertPlainRecord(deliveryArg, deliveryLabel);
415
- if (delivery.type === 'environment') {
453
+ if (delivery.type === 'launcher-environment') {
416
454
  assertExactKeys(delivery, ['type', 'keys'], deliveryLabel);
417
455
  const keys = assertPlainRecord(delivery.keys, `${deliveryLabel}.keys`);
418
456
  assertExactKeys(keys, [
@@ -432,7 +470,8 @@ function validateObjectStorageDelivery(deliveryArg, requestLabelArg, declaredEnv
432
470
  if (localKeys.has(targetKeyArg)) {
433
471
  throw new Error(`Invalid ${deliveryLabel}: environment key '${targetKeyArg}' is duplicated`);
434
472
  }
435
- if (declaredEnvironmentKeysArg.has(targetKeyArg)) {
473
+ if (declaredEnvironmentKeysArg.has(targetKeyArg)
474
+ || runtimeEnvironmentKeysArg.has(targetKeyArg)) {
436
475
  throw new Error(`Invalid ${deliveryLabel}: environment key '${targetKeyArg}' collides with an app runtime input`);
437
476
  }
438
477
  if (deliveryEnvironmentKeysArg.has(targetKeyArg)) {
@@ -442,49 +481,61 @@ function validateObjectStorageDelivery(deliveryArg, requestLabelArg, declaredEnv
442
481
  deliveryEnvironmentKeysArg.add(targetKeyArg);
443
482
  }
444
483
  return {
445
- type: 'environment',
484
+ type: 'launcher-environment',
446
485
  keys: { ...keys },
447
486
  };
448
487
  }
449
- if (delivery.type === 'secretFile') {
450
- assertExactKeys(delivery, ['type', 'targetPath', 'format'], deliveryLabel);
488
+ if (delivery.type === 'file') {
489
+ assertExactKeys(delivery, ['type', 'targetPath', 'format', 'uid', 'gid', 'mode'], deliveryLabel);
451
490
  if (delivery.format !== 'servezone-object-storage-v1') {
452
491
  throw new Error(`Invalid ${deliveryLabel}: secret file format is not supported`);
453
492
  }
454
493
  if (typeof delivery.targetPath !== 'string'
455
494
  || interfaces.data.normalizeServiceAbsolutePath(delivery.targetPath) !== delivery.targetPath
456
- || !/^\/run\/secrets\/[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(delivery.targetPath)
457
- || delivery.targetPath === '/run/secrets/secret.json') {
495
+ || !/^\/run\/secrets\/[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/.test(delivery.targetPath)) {
458
496
  throw new Error(`Invalid ${deliveryLabel}: targetPath must be a unique canonical file below /run/secrets`);
459
497
  }
460
498
  if (declaredSecretPathsArg.has(delivery.targetPath)) {
461
- throw new Error(`Invalid ${deliveryLabel}: targetPath collides with secretFiles`);
499
+ throw new Error(`Invalid ${deliveryLabel}: targetPath collides with an app secret delivery`);
462
500
  }
463
501
  if (deliverySecretPathsArg.has(delivery.targetPath)) {
464
502
  throw new Error(`Invalid ${deliveryLabel}: targetPath is used by another storage request`);
465
503
  }
504
+ for (const identityField of ['uid', 'gid']) {
505
+ if (!Number.isSafeInteger(delivery[identityField])
506
+ || delivery[identityField] < 0
507
+ || delivery[identityField] > 2_147_483_647) {
508
+ throw new Error(`Invalid ${deliveryLabel}: ${identityField} must be a bounded numeric identity`);
509
+ }
510
+ }
511
+ if (delivery.mode !== 0o400 && delivery.mode !== 0o440) {
512
+ throw new Error(`Invalid ${deliveryLabel}: mode must be 0400 or 0440`);
513
+ }
466
514
  deliverySecretPathsArg.add(delivery.targetPath);
467
515
  return {
468
- type: 'secretFile',
516
+ type: 'file',
469
517
  targetPath: delivery.targetPath,
470
518
  format: 'servezone-object-storage-v1',
519
+ uid: delivery.uid,
520
+ gid: delivery.gid,
521
+ mode: delivery.mode,
471
522
  };
472
523
  }
473
- throw new Error(`Invalid ${deliveryLabel}: type must be environment or secretFile`);
524
+ throw new Error(`Invalid ${deliveryLabel}: type must be launcher-environment or file`);
474
525
  }
475
526
  function validateFeatureDeclaration(configArg, explicitRequestsArg, labelArg) {
476
527
  const requiredFeatures = new Set();
477
528
  if (explicitRequestsArg.length > 0) {
478
- requiredFeatures.add(storageFeatureIds.bindingsV1);
529
+ requiredFeatures.add(storageFeatureIds.bindingsV2);
479
530
  }
480
531
  if (explicitRequestsArg.some((requestArg) => requestArg.kind === 'filesystem')) {
481
532
  requiredFeatures.add(storageFeatureIds.filesystemV1);
482
533
  }
483
534
  if (explicitRequestsArg.some((requestArg) => requestArg.kind === 'objectStorage')) {
484
- requiredFeatures.add(storageFeatureIds.objectStorageV1);
535
+ requiredFeatures.add(storageFeatureIds.objectStorageV2);
485
536
  }
486
- if (explicitRequestsArg.some((requestArg) => (requestArg.kind === 'objectStorage' && requestArg.delivery.type === 'secretFile'))) {
487
- requiredFeatures.add(storageFeatureIds.objectStorageSecretFileV1);
537
+ if (explicitRequestsArg.some((requestArg) => (requestArg.kind === 'objectStorage' && requestArg.delivery.type === 'file'))) {
538
+ requiredFeatures.add(storageFeatureIds.objectStorageFileV2);
488
539
  }
489
540
  const declaredFeatures = configArg.requiresFeatures || [];
490
541
  if (!Array.isArray(declaredFeatures)
@@ -575,7 +626,7 @@ function createLegacyVolumeRequestId(volumeArg, indexArg, labelArg) {
575
626
  }
576
627
  return requestId;
577
628
  }
578
- function validateAllFilesystemMountsAndSecretTargets(requestsArg, configArg, labelArg) {
629
+ function validateAllFilesystemMountsAndSecretTargets(requestsArg, declaredSecretPathsArg, labelArg) {
579
630
  const mountPaths = [];
580
631
  const objectSecretPaths = [];
581
632
  for (const requestArg of requestsArg) {
@@ -583,19 +634,15 @@ function validateAllFilesystemMountsAndSecretTargets(requestsArg, configArg, lab
583
634
  assertNoPathCollision(requestArg.mountPath, mountPaths, `${labelArg} request '${requestArg.id}'`);
584
635
  mountPaths.push(requestArg.mountPath);
585
636
  }
586
- else if (requestArg.delivery.type === 'secretFile') {
637
+ else if (requestArg.delivery.type === 'file') {
587
638
  objectSecretPaths.push(requestArg.delivery.targetPath);
588
639
  }
589
640
  }
590
- for (const secretPathArg of objectSecretPaths) {
641
+ for (const secretPathArg of [...declaredSecretPathsArg, ...objectSecretPaths]) {
591
642
  if (mountPaths.some((mountPathArg) => pathsOverlap(secretPathArg, mountPathArg))) {
592
- throw new Error(`Invalid ${labelArg}: object-storage secret target '${secretPathArg}' overlaps a filesystem mount`);
643
+ throw new Error(`Invalid ${labelArg}: secret target '${secretPathArg}' overlaps a filesystem mount`);
593
644
  }
594
645
  }
595
- const secretFileErrors = interfaces.data.validateServiceSecretFiles(configArg.secretFiles, mountPaths);
596
- if (secretFileErrors.length > 0) {
597
- throw new Error(`Invalid ${labelArg}: ${secretFileErrors.join('; ')}`);
598
- }
599
646
  }
600
647
  function assertNoPathCollision(pathArg, pathsArg, labelArg) {
601
648
  const collision = pathsArg.find((existingPathArg) => pathsOverlap(pathArg, existingPathArg));
@@ -632,4 +679,4 @@ function assertOptionalMember(valueArg, allowedValuesArg, labelArg, optionalArg
632
679
  throw new Error(`Invalid ${labelArg}: expected one of ${allowedValuesArg.join(', ')}`);
633
680
  }
634
681
  }
635
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX2NsaWVudC9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFTckQsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO0FBQ3hFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDakYsTUFBTSxzQkFBc0IsR0FBRyw4QkFBOEIsQ0FBQztBQUM5RCxNQUFNLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFDekQsTUFBTSxlQUFlLEdBQUcsa0NBQWtDLENBQUM7QUFDM0QsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNoQixHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDaEIsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFO0NBQ1IsQ0FBQztBQUNYLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQUM7QUFDcEQsTUFBTSwyQkFBMkIsR0FBRyxxQkFBcUIsQ0FBQztBQUMxRCxNQUFNLDRCQUE0QixHQUFHLFdBQVcsQ0FBQztBQUNqRCxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU87SUFDUCxNQUFNO0lBQ04sZUFBZTtJQUNmLGFBQWE7SUFDYixhQUFhO0lBQ2IsU0FBUztJQUNULG9CQUFvQjtJQUNwQixTQUFTO0lBQ1QsU0FBUztJQUNULGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0QixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLG1CQUFtQjtJQUNuQixpQkFBaUI7SUFDakIsaUJBQWlC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
682
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzX2NsaWVudC9zdG9yYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxVQUFVLE1BQU0sd0JBQXdCLENBQUM7QUFTckQsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLHlCQUF5QixDQUFDO0FBQ3hFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxHQUFHLENBQVMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDakYsTUFBTSxzQkFBc0IsR0FBRyw4QkFBOEIsQ0FBQztBQUM5RCxNQUFNLHVCQUF1QixHQUFHLHdCQUF3QixDQUFDO0FBQ3pELE1BQU0scUJBQXFCLEdBQUcsMEJBQTBCLENBQUM7QUFDekQsTUFBTSxlQUFlLEdBQUcsa0NBQWtDLENBQUM7QUFDM0QsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLLElBQUksRUFBRTtJQUNoQixHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUU7SUFDaEIsR0FBRyxFQUFFLEtBQUssSUFBSSxFQUFFO0NBQ1IsQ0FBQztBQUNYLE1BQU0sd0JBQXdCLEdBQUcsa0JBQWtCLENBQUM7QUFDcEQsTUFBTSwyQkFBMkIsR0FBRyxxQkFBcUIsQ0FBQztBQUMxRCxNQUFNLDRCQUE0QixHQUFHLFdBQVcsQ0FBQztBQUNqRCxNQUFNLHlCQUF5QixHQUFHO0lBQ2hDLE9BQU87SUFDUCxNQUFNO0lBQ04sZUFBZTtJQUNmLGFBQWE7SUFDYixTQUFTO0lBQ1Qsb0JBQW9CO0lBQ3BCLFNBQVM7SUFDVCxTQUFTO0lBQ1QsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsbUJBQW1CO0lBQ25CLGlCQUFpQjtJQUNqQixpQkFBaUI7SUFDakIsUUFB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
@@ -26,7 +26,7 @@ export interface IAppStoreStorageLegacyCompatibility {
26
26
  };
27
27
  }
28
28
  export interface INormalizedAppStoreStorageConfig {
29
- schemaVersion: 1;
29
+ schemaVersion: 2;
30
30
  storageClasses: Record<string, TAppStoreStorageClass>;
31
31
  storageRequests: TAppStoreStorageRequest[];
32
32
  requestOrigins: Record<string, TAppStoreStorageRequestOrigin>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/appstore",
3
- "version": "1.4.2",
3
+ "version": "2.0.0",
4
4
  "private": false,
5
5
  "description": "serve.zone App Store metadata, parser, and resolver client.",
6
6
  "type": "module",
@@ -11,12 +11,12 @@
11
11
  "license": "MIT",
12
12
  "dependencies": {
13
13
  "@push.rocks/smartversion": "^3.1.0",
14
- "@serve.zone/interfaces": "18.1.0"
14
+ "@serve.zone/interfaces": "23.0.3"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@git.zone/tsbuild": "^4.4.2",
18
18
  "@git.zone/tsdoc": "^2.1.1",
19
- "@git.zone/tstest": "^3.6.6",
19
+ "@git.zone/tstest": "^3.6.7",
20
20
  "@types/node": "^26.1.1"
21
21
  },
22
22
  "files": [
package/readme.md CHANGED
@@ -82,6 +82,23 @@ Version configs use a small, pragmatic schema understood by serve.zone runtimes:
82
82
  "value": "${PLACEHOLDER_OR_DEFAULT}",
83
83
  "description": "Shown in the App Store UI",
84
84
  "required": true
85
+ },
86
+ {
87
+ "key": "APP_TOKEN",
88
+ "description": "Generated application token",
89
+ "required": true,
90
+ "secret": true,
91
+ "delivery": {
92
+ "type": "launcher-environment",
93
+ "variableName": "APP_TOKEN",
94
+ "uid": 1000,
95
+ "gid": 1000,
96
+ "mode": 256
97
+ },
98
+ "generate": {
99
+ "encoding": "hex",
100
+ "bytes": 32
101
+ }
85
102
  }
86
103
  ],
87
104
  "platformRequirements": {
@@ -95,6 +112,12 @@ Version configs use a small, pragmatic schema understood by serve.zone runtimes:
95
112
  }
96
113
  ```
97
114
 
115
+ Secret declarations never contain values. Each declares exactly one `file` or
116
+ `launcher-environment` delivery destination and may request bounded `hex` or
117
+ `base64url` generation. Public environment keys may use the mixed-case forms
118
+ required by upstream images; secret and platform-owned environment identities
119
+ remain uppercase canonical keys.
120
+
98
121
  `platformRequirements.s3: true` and `volumes` are legacy inputs. The resolver
99
122
  normalizes them deterministically for existing templates, but new templates use
100
123
  portable, template-local `storageClasses` and stable named `storageRequests`.
@@ -159,9 +182,12 @@ than one isolated object-storage binding:
159
182
  "capacity": { "request": "100GiB", "limit": "1TiB" },
160
183
  "reclaimPolicy": "retain",
161
184
  "delivery": {
162
- "type": "secretFile",
185
+ "type": "file",
163
186
  "targetPath": "/run/secrets/backup-archive.json",
164
- "format": "servezone-object-storage-v1"
187
+ "format": "servezone-object-storage-v1",
188
+ "uid": 1000,
189
+ "gid": 1000,
190
+ "mode": 256
165
191
  },
166
192
  "protection": {
167
193
  "backup": "required",
@@ -176,7 +202,7 @@ than one isolated object-storage binding:
176
202
  "accessMode": "readWrite",
177
203
  "reclaimPolicy": "retain",
178
204
  "delivery": {
179
- "type": "environment",
205
+ "type": "launcher-environment",
180
206
  "keys": {
181
207
  "endpoint": "REGISTRY_S3_ENDPOINT",
182
208
  "bucket": "REGISTRY_S3_BUCKET",
@@ -188,17 +214,17 @@ than one isolated object-storage binding:
188
214
  }
189
215
  ],
190
216
  "requiresFeatures": [
191
- "storage.bindings.v1",
217
+ "storage.bindings.v2",
192
218
  "storage.filesystem.v1",
193
- "storage.object-storage.v1",
194
- "storage.object-storage.secret-file.v1"
219
+ "storage.object-storage.v2",
220
+ "storage.object-storage.file.v2"
195
221
  ]
196
222
  }
197
223
  ```
198
224
 
199
225
  Capacity values are positive integers followed by `KiB`, `MiB`, `GiB`, or
200
226
  `TiB`. A `limit` requires `storageClass.required.hardQuota: true`. For explicit
201
- requests, delivery environment keys and secret-file paths must be unique across
227
+ requests, delivery environment keys and `file` delivery paths must be unique across
202
228
  the app config; provider credential values never belong in an App Store manifest.
203
229
 
204
230
  The full version config and every storage object are exact-key validated.
@@ -222,7 +248,7 @@ and the normalized storage handoff types. Structural validation is useful for
222
248
  catalog ingestion; only normalization with a target's `supportedFeatures` is a
223
249
  valid pre-fulfillment gate.
224
250
 
225
- The result contains canonical `storageClasses`, `storageRequests`,
251
+ The schema-v2 result contains `schemaVersion: 2` plus canonical `storageClasses`, `storageRequests`,
226
252
  `requestOrigins`, and `requiredFeatureIds`. `requestOrigins` marks explicit,
227
253
  legacy-volume, and legacy-S3 requests so fulfillment adapters can preserve old
228
254
  delivery behavior without weakening the new contract. Legacy S3 normalization
@@ -243,44 +243,14 @@ export class AppStoreResolver {
243
243
  throw new Error(`Invalid ${labelArg}: ${containerArgErrors.join('; ')}`);
244
244
  }
245
245
 
246
- const envVarKeys = new Set<string>();
247
- const secretEnvVarKeys = new Set<string>();
248
- for (const envVar of configArg.envVars || []) {
249
- if (!envVar.key || !/^[A-Za-z_][A-Za-z0-9_]*$/.test(envVar.key)) {
250
- throw new Error(`Invalid ${labelArg}: env var key '${envVar.key}' is not valid`);
251
- }
252
- if (envVarKeys.has(envVar.key)) {
253
- throw new Error(`Invalid ${labelArg}: env var key '${envVar.key}' is duplicated`);
254
- }
255
- envVarKeys.add(envVar.key);
256
- if (envVar.value !== undefined && typeof envVar.value !== 'string') {
257
- throw new Error(`Invalid ${labelArg}: env var '${envVar.key}' value must be a string`);
258
- }
259
- if (envVar.secret) {
260
- secretEnvVarKeys.add(envVar.key);
261
- if (envVar.value !== undefined) {
262
- throw new Error(`Invalid ${labelArg}: secret '${envVar.key}' must not define a template value`);
263
- }
264
- }
265
- if (envVar.generate) {
266
- if (!envVar.secret
267
- || envVar.generate.type !== 'randomHex'
268
- || !Number.isInteger(envVar.generate.bytes)
269
- || envVar.generate.bytes < 16
270
- || envVar.generate.bytes > 64) {
271
- throw new Error(`Invalid ${labelArg}: secret generator '${envVar.key}' is invalid`);
272
- }
273
- }
246
+ const environmentErrors = interfaces.appstore.validateAppStoreEnvironmentDeclarations(
247
+ configArg.envVars,
248
+ );
249
+ if (environmentErrors.length > 0) {
250
+ throw new Error(`Invalid ${labelArg}: ${environmentErrors.join('; ')}`);
274
251
  }
275
252
 
276
253
  validateAppStoreStorageConfig(configArg, labelArg);
277
- for (const secretFile of configArg.secretFiles || []) {
278
- if (!secretEnvVarKeys.has(secretFile.sourceKey)) {
279
- throw new Error(
280
- `Invalid ${labelArg}: secret file source '${secretFile.sourceKey}' must reference a declared secret input`,
281
- );
282
- }
283
- }
284
254
  const platformOidcErrors = interfaces.appstore.validateAppStoreVersionPlatformOidc(configArg);
285
255
  if (platformOidcErrors.length > 0) {
286
256
  throw new Error(`Invalid ${labelArg}: ${platformOidcErrors.join('; ')}`);