@serve.zone/interfaces 25.3.0 → 27.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.
package/changelog.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-08-10 - 27.0.0
4
+
5
+ ### Breaking Changes
6
+
7
+ - require durable bucket authority for object storage retention (corestore)
8
+ - Add schema-v2 Corestore credential binding requests with canonical object-storage bucketName support and digest helpers.
9
+ - Export canonical platform object-storage bucket name validation and limits.
10
+ - Require platform retention bindings to carry a canonical objectstorageBucketName matching the trusted bucket authority.
11
+ - Require retention evidence when validating Corestore object-storage credential material against a trusted retention expectation.
12
+
13
+ ## 2026-08-10 - 26.0.0
14
+
15
+ ### Breaking Changes
16
+
17
+ - align credential binding digests and objectstorage secret aliases (corestore)
18
+ - Add canonical Corestore credential binding request validation and SHA-256 digest helpers for publication grants.
19
+ - Split objectstorage plaintext credential keys from published Secret alias keys.
20
+ - Expand logical objectstorage credentials into canonical S3 and AWS Secret aliases.
21
+ - Require objectstorage publication receipts to cover the exact Secret alias set.
22
+
3
23
  ## 2026-08-10 - 25.3.0
4
24
 
5
25
  ### Features
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '25.3.0',
6
+ version: '27.0.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsT0FBTyxFQUFFLFFBQVE7SUFDakIsV0FBVyxFQUFFLHVGQUF1RjtDQUNyRyxDQUFBIn0=
@@ -14,6 +14,7 @@ import * as storagemigration from './storagemigration.js';
14
14
  import * as types from './types.js';
15
15
  export { ai, backup, database, email, letter, logging, objectstorage, objectstorageretention, pushnotification, sip, sms, storage, storagemigration, types, };
16
16
  export * from './storage.js';
17
+ export * from './objectstorage.js';
17
18
  export * from './objectstorageretention.js';
18
19
  export * from './storagemigration.js';
19
20
  export * from './types.js';
@@ -14,7 +14,8 @@ import * as storagemigration from './storagemigration.js';
14
14
  import * as types from './types.js';
15
15
  export { ai, backup, database, email, letter, logging, objectstorage, objectstorageretention, pushnotification, sip, sms, storage, storagemigration, types, };
16
16
  export * from './storage.js';
17
+ export * from './objectstorage.js';
17
18
  export * from './objectstorageretention.js';
18
19
  export * from './storagemigration.js';
19
20
  export * from './types.js';
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wbGF0Zm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssYUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxzQkFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxFQUFFLEVBQ0YsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsS0FBSyxHQUNOLENBQUM7QUFFRixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxZQUFZLENBQUMifQ==
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy9wbGF0Zm9ybS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM5QixPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEtBQUssS0FBSyxNQUFNLFlBQVksQ0FBQztBQUNwQyxPQUFPLEtBQUssTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUN0QyxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEtBQUssYUFBYSxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sS0FBSyxzQkFBc0IsTUFBTSw2QkFBNkIsQ0FBQztBQUN0RSxPQUFPLEtBQUssZ0JBQWdCLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLEdBQUcsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxLQUFLLGdCQUFnQixNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sS0FBSyxLQUFLLE1BQU0sWUFBWSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxFQUFFLEVBQ0YsTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLE9BQU8sRUFDUCxhQUFhLEVBQ2Isc0JBQXNCLEVBQ3RCLGdCQUFnQixFQUNoQixHQUFHLEVBQ0gsR0FBRyxFQUNILE9BQU8sRUFDUCxnQkFBZ0IsRUFDaEIsS0FBSyxHQUNOLENBQUM7QUFFRixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLFlBQVksQ0FBQyJ9
@@ -4,3 +4,9 @@ export interface IPlatformObjectStorageBindingConfig {
4
4
  publicRead?: boolean;
5
5
  versioning?: boolean;
6
6
  }
7
+ export declare const platformObjectStorageBucketNameLimits: Readonly<{
8
+ minimumBytes: 3;
9
+ maximumBytes: 63;
10
+ }>;
11
+ /** Mirrors SmartStorage's canonical S3 bucket boundary without normalizing input. */
12
+ export declare const validatePlatformObjectStorageBucketName: (bucketNameArg: unknown, pathArg?: string) => string[];
@@ -1,2 +1,21 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0c3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsYXRmb3JtL29iamVjdHN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
1
+ export const platformObjectStorageBucketNameLimits = Object.freeze({
2
+ minimumBytes: 3,
3
+ maximumBytes: 63,
4
+ });
5
+ /** Mirrors SmartStorage's canonical S3 bucket boundary without normalizing input. */
6
+ export const validatePlatformObjectStorageBucketName = (bucketNameArg, pathArg = 'objectstorage bucketName') => {
7
+ if (typeof bucketNameArg !== 'string') {
8
+ return [`${pathArg} must be a canonical S3 bucket name`];
9
+ }
10
+ const ipv4Parts = bucketNameArg.split('.');
11
+ const isIpv4Address = ipv4Parts.length === 4 && ipv4Parts.every((partArg) => (/^[0-9]+$/.test(partArg) && Number(partArg) <= 255));
12
+ if (bucketNameArg.length < platformObjectStorageBucketNameLimits.minimumBytes
13
+ || bucketNameArg.length > platformObjectStorageBucketNameLimits.maximumBytes
14
+ || !/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/.test(bucketNameArg)
15
+ || bucketNameArg.includes('..')
16
+ || isIpv4Address) {
17
+ return [`${pathArg} must be a canonical S3 bucket name`];
18
+ }
19
+ return [];
20
+ };
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0c3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsYXRmb3JtL29iamVjdHN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBT0EsTUFBTSxDQUFDLE1BQU0scUNBQXFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNqRSxZQUFZLEVBQUUsQ0FBQztJQUNmLFlBQVksRUFBRSxFQUFFO0NBQ2pCLENBQUMsQ0FBQztBQUVILHFGQUFxRjtBQUNyRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxDQUNyRCxhQUFzQixFQUN0QixPQUFPLEdBQUcsMEJBQTBCLEVBQzFCLEVBQUU7SUFDWixJQUFJLE9BQU8sYUFBYSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLE9BQU8scUNBQXFDLENBQUMsQ0FBQztJQUMzRCxDQUFDO0lBQ0QsTUFBTSxTQUFTLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMzQyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUMzRSxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQ25ELENBQUMsQ0FBQztJQUNILElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxxQ0FBcUMsQ0FBQyxZQUFZO1dBQ3hFLGFBQWEsQ0FBQyxNQUFNLEdBQUcscUNBQXFDLENBQUMsWUFBWTtXQUN6RSxDQUFDLCtCQUErQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7V0FDcEQsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7V0FDNUIsYUFBYSxFQUFFLENBQUM7UUFDbkIsT0FBTyxDQUFDLEdBQUcsT0FBTyxxQ0FBcUMsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxPQUFPLEVBQUUsQ0FBQztBQUNaLENBQUMsQ0FBQyJ9
@@ -1,4 +1,5 @@
1
1
  import { createCanonicalJsonSha256Hex } from '../private/canonicaljson.js';
2
+ import { validatePlatformObjectStorageBucketName } from './objectstorage.js';
2
3
  export const objectStorageRetentionLimits = Object.freeze({
3
4
  maximumPolicyIdLength: 96,
4
5
  maximumRetentionDurationSeconds: 100 * 366 * 24 * 60 * 60,
@@ -162,10 +163,7 @@ export const validateObjectStorageRetentionEvidence = async (evidenceArg, expect
162
163
  if (!retentionIntentFieldsEqual(receipt, intent)) {
163
164
  errors.push('objectstorage retention receipt intent must equal its evidence intent');
164
165
  }
165
- if (typeof receipt.bucketName !== 'string'
166
- || receipt.bucketName.length === 0
167
- || receipt.bucketName.length > 200
168
- || receipt.bucketName !== expectedArg.bucketName) {
166
+ if (validatePlatformObjectStorageBucketName(receipt.bucketName, 'objectstorage retention receipt bucket').length > 0 || receipt.bucketName !== expectedArg.bucketName) {
169
167
  errors.push('objectstorage retention receipt bucket must exactly match');
170
168
  }
171
169
  if (!isPositiveSafeInteger(receipt.configuredAt)
@@ -242,9 +240,14 @@ export const validatePlatformBindingObjectStorageRetention = async (bindingArg,
242
240
  if (!isRecord(bindingArg)) {
243
241
  return ['platform objectstorage retention binding must be an object'];
244
242
  }
243
+ if (validatePlatformObjectStorageBucketName(expectedArg.bucketName).length > 0
244
+ || validatePlatformObjectStorageBucketName(bindingArg.objectstorageBucketName).length > 0) {
245
+ return ['platform objectstorage retention must use canonical bucket authority'];
246
+ }
245
247
  if (bindingArg.capability !== 'objectstorage'
246
248
  || bindingArg.id !== expectedArg.bindingId
247
- || bindingArg.serviceId !== expectedArg.serviceId) {
249
+ || bindingArg.serviceId !== expectedArg.serviceId
250
+ || bindingArg.objectstorageBucketName !== expectedArg.bucketName) {
248
251
  return ['platform objectstorage retention must match an objectstorage binding authority'];
249
252
  }
250
253
  if (bindingArg.objectstorageRetention === undefined) {
@@ -252,4 +255,4 @@ export const validatePlatformBindingObjectStorageRetention = async (bindingArg,
252
255
  }
253
256
  return validateObjectStorageRetentionBinding(bindingArg.objectstorageRetention, expectedArg);
254
257
  };
255
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0c3RvcmFnZXJldGVudGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsYXRmb3JtL29iamVjdHN0b3JhZ2VyZXRlbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFM0UsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4RCxxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLCtCQUErQixFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQzFELENBQUMsQ0FBQztBQWdFSCxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxNQUFNLGlCQUFpQixHQUFHLHFDQUFxQyxDQUFDO0FBQ2hFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO0FBQ3ZDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsNkRBQTZELENBQUM7QUFFekYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFpQixFQUF1QyxFQUFFLENBQUMsQ0FDM0UsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUNkLE9BQU8sUUFBUSxLQUFLLFFBQVE7T0FDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUN4QixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7V0FDbkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FDL0MsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQ25CLFFBQWlDLEVBQ2pDLE9BQTBCLEVBQ2pCLEVBQUU7SUFDWCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFD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
258
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2JqZWN0c3RvcmFnZXJldGVudGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3BsYXRmb3JtL29iamVjdHN0b3JhZ2VyZXRlbnRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN4RCxxQkFBcUIsRUFBRSxFQUFFO0lBQ3pCLCtCQUErQixFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO0NBQzFELENBQUMsQ0FBQztBQWdFSCxNQUFNLGVBQWUsR0FBRyx3QkFBd0IsQ0FBQztBQUNqRCxNQUFNLGlCQUFpQixHQUFHLHFDQUFxQyxDQUFDO0FBQ2hFLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDO0FBQ3ZDLE1BQU0sV0FBVyxHQUFHLGdCQUFnQixDQUFDO0FBQ3JDLE1BQU0sa0JBQWtCLEdBQUcsNkRBQTZELENBQUM7QUFFekYsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFpQixFQUF1QyxFQUFFLENBQUMsQ0FDM0UsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUNkLE9BQU8sUUFBUSxLQUFLLFFBQVE7T0FDNUIsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztPQUN4QixDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVM7V0FDbkQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FDL0MsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQ25CLFFBQWlDLEVBQ2pDLE9BQTBCLEVBQ2pCLEVBQUU7SUFDWCxNQUFNLFVBQVUsR0FBRyxNQUFN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
@@ -40,6 +40,8 @@ export interface IPlatformBinding {
40
40
  endpoints?: IPlatformServiceEndpoint[];
41
41
  /** Value-free reconciliation scope for service-owned credentials. */
42
42
  credentialManagementScope?: Extract<TSecretManagementScope, `platform:${string}`>;
43
+ /** Durable Cloudly authority for the exact Corestore object-storage bucket. */
44
+ objectstorageBucketName?: string;
43
45
  /** Capability-specific value-free immutable-retention intent and evidence. */
44
46
  objectstorageRetention?: IObjectStorageRetentionBindingV1;
45
47
  createdAt?: number;
@@ -1,7 +1,7 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import type { IActiveSecretRecipientMetadata, IIdentityCredential, ISecretVersionReference } from './data/index.js';
3
3
  import type { ISecretEnvelopeAdmissionBindingV1 } from './runtime.js';
4
- import type { IObjectStorageRetentionEvidenceExpectationV1, IObjectStorageRetentionEvidenceV1 } from './platform/objectstorageretention.js';
4
+ import type { IObjectStorageRetentionIntentV1, IObjectStorageRetentionEvidenceExpectationV1, IObjectStorageRetentionEvidenceV1 } from './platform/objectstorageretention.js';
5
5
  export type TCorestoreCredentialCapability = 'database' | 'objectstorage';
6
6
  export declare const corestoreProviderConfigIds: Readonly<{
7
7
  readonly database: "cloudly-corestore-database";
@@ -85,14 +85,52 @@ export interface ICorestoreCredentialPublicationGrantV1 {
85
85
  issuedAt: number;
86
86
  expiresAt: number;
87
87
  }
88
+ interface ICorestoreCredentialBindingRequestBaseV1 {
89
+ schemaVersion: 1;
90
+ serviceId: string;
91
+ bindingId: string;
92
+ providerConfigId: typeof corestoreProviderConfigIds[TCorestoreCredentialCapability];
93
+ managementScope: typeof corestoreCredentialManagementScope;
94
+ environment: typeof corestoreCredentialEnvironment;
95
+ }
96
+ export type TCorestoreCredentialBindingRequestV1 = ICorestoreCredentialBindingRequestBaseV1 & {
97
+ capability: 'database';
98
+ } | ICorestoreCredentialBindingRequestBaseV1 & {
99
+ capability: 'objectstorage';
100
+ objectstorageRetention?: IObjectStorageRetentionIntentV1;
101
+ };
102
+ interface ICorestoreCredentialBindingRequestBaseV2 {
103
+ schemaVersion: 2;
104
+ serviceId: string;
105
+ bindingId: string;
106
+ providerConfigId: typeof corestoreProviderConfigIds[TCorestoreCredentialCapability];
107
+ managementScope: typeof corestoreCredentialManagementScope;
108
+ environment: typeof corestoreCredentialEnvironment;
109
+ }
110
+ export type TCorestoreCredentialBindingRequestV2 = ICorestoreCredentialBindingRequestBaseV2 & {
111
+ capability: 'database';
112
+ } | ICorestoreCredentialBindingRequestBaseV2 & {
113
+ capability: 'objectstorage';
114
+ bucketName: string;
115
+ objectstorageRetention?: IObjectStorageRetentionIntentV1;
116
+ };
117
+ export declare const validateCorestoreCredentialBindingRequest: (requestArg: unknown) => string[];
118
+ export declare const createCorestoreCredentialBindingRequestDigestInput: (requestArg: TCorestoreCredentialBindingRequestV1) => string;
119
+ export declare const computeCorestoreCredentialBindingRequestSha256: (requestArg: TCorestoreCredentialBindingRequestV1) => Promise<string>;
120
+ export declare const validateCorestoreCredentialBindingRequestV2: (requestArg: unknown) => string[];
121
+ export declare const createCorestoreCredentialBindingRequestDigestInputV2: (requestArg: TCorestoreCredentialBindingRequestV2) => string;
122
+ export declare const computeCorestoreCredentialBindingRequestSha256V2: (requestArg: TCorestoreCredentialBindingRequestV2) => Promise<string>;
88
123
  export declare const validateCorestoreCredentialPublicationGrant: (grantArg: unknown, trustedNowArg?: number) => string[];
89
124
  export declare const corestoreCredentialPublicationGrantsEqual: (leftArg: unknown, rightArg: unknown) => boolean;
90
125
  export declare const validateCorestoreCredentialPublicationGrants: (grantsArg: unknown, trustedNowArg?: number) => string[];
91
126
  export declare const corestoreDatabaseCredentialKeys: readonly ["MONGODB_URI", "MONGODB_URL", "MONGO_URL", "MONGODB_HOST", "MONGODB_PORT", "MONGODB_DATABASE", "MONGO_DBNAME", "MONGODB_USERNAME", "MONGO_DBUSER", "MONGODB_PASSWORD", "MONGO_DBPASS"];
92
- export declare const corestoreObjectStorageCredentialKeys: readonly ["accessKeyId", "secretAccessKey"];
127
+ export declare const corestoreObjectStorageCredentialPlaintextKeys: readonly ["accessKeyId", "secretAccessKey"];
128
+ export declare const corestoreObjectStorageCredentialSecretKeys: readonly ["S3_ACCESS_KEY", "S3_ACCESS_KEY_ID", "S3_SECRET_KEY", "S3_SECRET_ACCESS_KEY", "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"];
93
129
  export type TCorestoreDatabaseCredentialKey = typeof corestoreDatabaseCredentialKeys[number];
94
- export type TCorestoreObjectStorageCredentialKey = typeof corestoreObjectStorageCredentialKeys[number];
95
- export type TCorestoreCredentialKey = TCorestoreDatabaseCredentialKey | TCorestoreObjectStorageCredentialKey;
130
+ export type TCorestoreObjectStorageCredentialPlaintextKey = typeof corestoreObjectStorageCredentialPlaintextKeys[number];
131
+ export type TCorestoreObjectStorageCredentialSecretKey = typeof corestoreObjectStorageCredentialSecretKeys[number];
132
+ export type TCorestoreCredentialPlaintextKey = TCorestoreDatabaseCredentialKey | TCorestoreObjectStorageCredentialPlaintextKey;
133
+ export type TCorestoreCredentialSecretKey = TCorestoreDatabaseCredentialKey | TCorestoreObjectStorageCredentialSecretKey;
96
134
  export type TCorestoreDatabaseCredentialValuesV1 = {
97
135
  [TKey in TCorestoreDatabaseCredentialKey]: string;
98
136
  };
@@ -114,6 +152,11 @@ export type TCorestoreCredentialPlaintextMaterialV1 = ICorestoreDatabaseCredenti
114
152
  export declare const validateCorestoreDatabaseCredentialMaterial: (materialArg: unknown) => string[];
115
153
  export declare const validateCorestoreObjectStorageCredentialMaterial: (materialArg: unknown, retentionExpectationArg?: IObjectStorageRetentionEvidenceExpectationV1) => Promise<string[]>;
116
154
  export declare const validateCorestoreCredentialPlaintextMaterial: (materialArg: unknown, retentionExpectationArg?: IObjectStorageRetentionEvidenceExpectationV1) => Promise<string[]>;
155
+ export interface ICorestoreCredentialSecretValueV1 {
156
+ key: TCorestoreCredentialSecretKey;
157
+ value: string;
158
+ }
159
+ export declare const createCorestoreCredentialSecretValues: (materialArg: TCorestoreCredentialPlaintextMaterialV1, retentionExpectationArg?: IObjectStorageRetentionEvidenceExpectationV1) => Promise<ICorestoreCredentialSecretValueV1[]>;
117
160
  export interface IPublishCorestoreCredentialMaterialRequestV1 {
118
161
  identity: IIdentityCredential;
119
162
  mutationId: string;
@@ -123,10 +166,10 @@ export interface IPublishCorestoreCredentialMaterialRequestV1 {
123
166
  envelope: plugins.smartcrypto.IX25519EnvelopeV1;
124
167
  }
125
168
  export interface ICorestoreCredentialSecretVersionReferenceV1 extends ISecretVersionReference {
126
- key: TCorestoreCredentialKey;
169
+ key: TCorestoreCredentialSecretKey;
127
170
  }
128
171
  export interface ICorestoreCredentialPublicationCoverageV1 {
129
- keys: TCorestoreCredentialKey[];
172
+ keys: TCorestoreCredentialSecretKey[];
130
173
  versionReferences: ICorestoreCredentialSecretVersionReferenceV1[];
131
174
  }
132
175
  export interface ICorestoreCredentialPublicationReceiptV1 {
@@ -202,3 +245,4 @@ export interface ICorestoreCredentialPublicationErrorMetadataV1 {
202
245
  retryable: boolean;
203
246
  }
204
247
  export declare const getCorestoreCredentialPublicationErrorMetadata: (codeArg: TCorestoreCredentialPublicationErrorCode) => ICorestoreCredentialPublicationErrorMetadataV1;
248
+ export {};
@@ -1,7 +1,9 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { isSha256Digest } from './data/immutableimage.js';
3
3
  import { validateSecretRecipientMetadata, verifySecretEnvelopeContext, } from './data/secret.js';
4
- import { validateObjectStorageRetentionEvidence } from './platform/objectstorageretention.js';
4
+ import { validateObjectStorageRetentionEvidence, validateObjectStorageRetentionIntent, } from './platform/objectstorageretention.js';
5
+ import { validatePlatformObjectStorageBucketName } from './platform/objectstorage.js';
6
+ import { canonicalizeStrictJson, createCanonicalJsonSha256Hex, } from './private/canonicaljson.js';
5
7
  export const corestoreProviderConfigIds = Object.freeze({
6
8
  database: 'cloudly-corestore-database',
7
9
  objectstorage: 'cloudly-corestore-objectstorage',
@@ -195,6 +197,150 @@ export const validateCorestoreControlCredentialMaterial = async (materialArg, ex
195
197
  }
196
198
  return errors;
197
199
  };
200
+ export const validateCorestoreCredentialBindingRequest = (requestArg) => {
201
+ if (!isRecord(requestArg)) {
202
+ return ['corestore credential binding request must use its exact schema'];
203
+ }
204
+ const baseKeys = [
205
+ 'schemaVersion',
206
+ 'serviceId',
207
+ 'bindingId',
208
+ 'capability',
209
+ 'providerConfigId',
210
+ 'managementScope',
211
+ 'environment',
212
+ ];
213
+ if (requestArg.capability === 'database') {
214
+ if (!hasExactKeys(requestArg, baseKeys)) {
215
+ return ['corestore database credential binding request must use its exact schema'];
216
+ }
217
+ }
218
+ else if (requestArg.capability === 'objectstorage') {
219
+ if (!hasKeys(requestArg, baseKeys, ['objectstorageRetention'])) {
220
+ return ['corestore objectstorage credential binding request must use its exact schema'];
221
+ }
222
+ }
223
+ else {
224
+ return ['corestore credential binding request capability must be canonical'];
225
+ }
226
+ const errors = [];
227
+ if (requestArg.schemaVersion !== 1
228
+ || !isIdentifier(requestArg.serviceId)
229
+ || !isIdentifier(requestArg.bindingId)) {
230
+ errors.push('corestore credential binding request identity must be canonical');
231
+ }
232
+ if (requestArg.providerConfigId !== getCorestoreProviderConfigId(requestArg.capability)
233
+ || requestArg.managementScope !== corestoreCredentialManagementScope
234
+ || requestArg.environment !== corestoreCredentialEnvironment) {
235
+ errors.push('corestore credential binding request constants must be canonical');
236
+ }
237
+ if (requestArg.capability === 'objectstorage'
238
+ && requestArg.objectstorageRetention !== undefined) {
239
+ errors.push(...validateObjectStorageRetentionIntent(requestArg.objectstorageRetention, 'corestore objectstorage credential binding request retention'));
240
+ }
241
+ return errors;
242
+ };
243
+ const failBindingRequest = (reasonArg) => {
244
+ throw new Error(reasonArg);
245
+ };
246
+ export const createCorestoreCredentialBindingRequestDigestInput = (requestArg) => {
247
+ const errors = validateCorestoreCredentialBindingRequest(requestArg);
248
+ if (errors.length > 0)
249
+ throw new Error(errors[0]);
250
+ return canonicalizeStrictJson({
251
+ schemaVersion: requestArg.schemaVersion,
252
+ serviceId: requestArg.serviceId,
253
+ bindingId: requestArg.bindingId,
254
+ capability: requestArg.capability,
255
+ providerConfigId: requestArg.providerConfigId,
256
+ managementScope: requestArg.managementScope,
257
+ environment: requestArg.environment,
258
+ ...(requestArg.capability === 'objectstorage' && requestArg.objectstorageRetention
259
+ ? {
260
+ objectstorageRetention: {
261
+ mode: requestArg.objectstorageRetention.mode,
262
+ policyId: requestArg.objectstorageRetention.policyId,
263
+ retentionDurationSeconds: requestArg.objectstorageRetention.retentionDurationSeconds,
264
+ },
265
+ }
266
+ : {}),
267
+ }, failBindingRequest, 'corestore credential binding request');
268
+ };
269
+ export const computeCorestoreCredentialBindingRequestSha256 = async (requestArg) => createCanonicalJsonSha256Hex(createCorestoreCredentialBindingRequestDigestInput(requestArg), failBindingRequest);
270
+ export const validateCorestoreCredentialBindingRequestV2 = (requestArg) => {
271
+ if (!isRecord(requestArg)) {
272
+ return ['corestore credential binding request v2 must use its exact schema'];
273
+ }
274
+ const baseKeys = [
275
+ 'schemaVersion',
276
+ 'serviceId',
277
+ 'bindingId',
278
+ 'capability',
279
+ 'providerConfigId',
280
+ 'managementScope',
281
+ 'environment',
282
+ ];
283
+ if (requestArg.capability === 'database') {
284
+ if (!hasExactKeys(requestArg, baseKeys)) {
285
+ return ['corestore database credential binding request v2 must use its exact schema'];
286
+ }
287
+ }
288
+ else if (requestArg.capability === 'objectstorage') {
289
+ if (!hasKeys(requestArg, [...baseKeys, 'bucketName'], ['objectstorageRetention'])) {
290
+ return ['corestore objectstorage credential binding request v2 must use its exact schema'];
291
+ }
292
+ }
293
+ else {
294
+ return ['corestore credential binding request v2 capability must be canonical'];
295
+ }
296
+ const errors = [];
297
+ if (requestArg.schemaVersion !== 2
298
+ || !isIdentifier(requestArg.serviceId)
299
+ || !isIdentifier(requestArg.bindingId)) {
300
+ errors.push('corestore credential binding request v2 identity must be canonical');
301
+ }
302
+ if (requestArg.providerConfigId !== getCorestoreProviderConfigId(requestArg.capability)
303
+ || requestArg.managementScope !== corestoreCredentialManagementScope
304
+ || requestArg.environment !== corestoreCredentialEnvironment) {
305
+ errors.push('corestore credential binding request v2 constants must be canonical');
306
+ }
307
+ if (requestArg.capability === 'objectstorage') {
308
+ errors.push(...validatePlatformObjectStorageBucketName(requestArg.bucketName, 'corestore objectstorage credential binding request v2 bucketName'));
309
+ if (requestArg.objectstorageRetention !== undefined) {
310
+ errors.push(...validateObjectStorageRetentionIntent(requestArg.objectstorageRetention, 'corestore objectstorage credential binding request v2 retention'));
311
+ }
312
+ }
313
+ return errors;
314
+ };
315
+ export const createCorestoreCredentialBindingRequestDigestInputV2 = (requestArg) => {
316
+ const errors = validateCorestoreCredentialBindingRequestV2(requestArg);
317
+ if (errors.length > 0)
318
+ throw new Error(errors[0]);
319
+ return canonicalizeStrictJson({
320
+ schemaVersion: requestArg.schemaVersion,
321
+ serviceId: requestArg.serviceId,
322
+ bindingId: requestArg.bindingId,
323
+ capability: requestArg.capability,
324
+ providerConfigId: requestArg.providerConfigId,
325
+ managementScope: requestArg.managementScope,
326
+ environment: requestArg.environment,
327
+ ...(requestArg.capability === 'objectstorage'
328
+ ? {
329
+ bucketName: requestArg.bucketName,
330
+ ...(requestArg.objectstorageRetention
331
+ ? {
332
+ objectstorageRetention: {
333
+ mode: requestArg.objectstorageRetention.mode,
334
+ policyId: requestArg.objectstorageRetention.policyId,
335
+ retentionDurationSeconds: requestArg.objectstorageRetention.retentionDurationSeconds,
336
+ },
337
+ }
338
+ : {}),
339
+ }
340
+ : {}),
341
+ }, failBindingRequest, 'corestore credential binding request v2');
342
+ };
343
+ export const computeCorestoreCredentialBindingRequestSha256V2 = async (requestArg) => createCanonicalJsonSha256Hex(createCorestoreCredentialBindingRequestDigestInputV2(requestArg), failBindingRequest);
198
344
  export const validateCorestoreCredentialPublicationGrant = (grantArg, trustedNowArg) => {
199
345
  if (!isRecord(grantArg)
200
346
  || !hasExactKeys(grantArg, [
@@ -310,10 +456,18 @@ export const corestoreDatabaseCredentialKeys = Object.freeze([
310
456
  'MONGODB_PASSWORD',
311
457
  'MONGO_DBPASS',
312
458
  ]);
313
- export const corestoreObjectStorageCredentialKeys = Object.freeze([
459
+ export const corestoreObjectStorageCredentialPlaintextKeys = Object.freeze([
314
460
  'accessKeyId',
315
461
  'secretAccessKey',
316
462
  ]);
463
+ export const corestoreObjectStorageCredentialSecretKeys = Object.freeze([
464
+ 'S3_ACCESS_KEY',
465
+ 'S3_ACCESS_KEY_ID',
466
+ 'S3_SECRET_KEY',
467
+ 'S3_SECRET_ACCESS_KEY',
468
+ 'AWS_ACCESS_KEY_ID',
469
+ 'AWS_SECRET_ACCESS_KEY',
470
+ ]);
317
471
  const readCredentialString = (valueArg) => typeof valueArg === 'string'
318
472
  && valueArg.length > 0
319
473
  && utf8ByteLength(valueArg) <= corestoreCredentialRuntimeLimits.maximumCredentialStringBytes
@@ -358,7 +512,7 @@ export const validateCorestoreObjectStorageCredentialMaterial = async (materialA
358
512
  || materialArg.schemaVersion !== 1
359
513
  || materialArg.capability !== 'objectstorage'
360
514
  || !isRecord(materialArg.values)
361
- || !hasExactKeys(materialArg.values, corestoreObjectStorageCredentialKeys)) {
515
+ || !hasExactKeys(materialArg.values, corestoreObjectStorageCredentialPlaintextKeys)) {
362
516
  return ['corestore objectstorage credential material must use its exact schema'];
363
517
  }
364
518
  const errors = [];
@@ -366,7 +520,10 @@ export const validateCorestoreObjectStorageCredentialMaterial = async (materialA
366
520
  || !readCredentialString(materialArg.values.secretAccessKey)) {
367
521
  errors.push('corestore objectstorage credential values must be bounded non-empty strings');
368
522
  }
369
- if (materialArg.retention !== undefined) {
523
+ if (retentionExpectationArg && materialArg.retention === undefined) {
524
+ errors.push('corestore objectstorage retention evidence is required by trusted binding authority');
525
+ }
526
+ else if (materialArg.retention !== undefined) {
370
527
  if (!retentionExpectationArg) {
371
528
  errors.push('corestore objectstorage retention evidence requires trusted binding authority');
372
529
  }
@@ -379,6 +536,25 @@ export const validateCorestoreObjectStorageCredentialMaterial = async (materialA
379
536
  export const validateCorestoreCredentialPlaintextMaterial = async (materialArg, retentionExpectationArg) => isRecord(materialArg) && materialArg.capability === 'database'
380
537
  ? validateCorestoreDatabaseCredentialMaterial(materialArg)
381
538
  : validateCorestoreObjectStorageCredentialMaterial(materialArg, retentionExpectationArg);
539
+ export const createCorestoreCredentialSecretValues = async (materialArg, retentionExpectationArg) => {
540
+ const errors = await validateCorestoreCredentialPlaintextMaterial(materialArg, retentionExpectationArg);
541
+ if (errors.length > 0)
542
+ throw new Error(errors[0]);
543
+ if (materialArg.capability === 'database') {
544
+ return corestoreDatabaseCredentialKeys.map((keyArg) => ({
545
+ key: keyArg,
546
+ value: materialArg.values[keyArg],
547
+ }));
548
+ }
549
+ return corestoreObjectStorageCredentialSecretKeys.map((keyArg) => ({
550
+ key: keyArg,
551
+ value: keyArg === 'S3_ACCESS_KEY'
552
+ || keyArg === 'S3_ACCESS_KEY_ID'
553
+ || keyArg === 'AWS_ACCESS_KEY_ID'
554
+ ? materialArg.values.accessKeyId
555
+ : materialArg.values.secretAccessKey,
556
+ }));
557
+ };
382
558
  export const createPublishCorestoreCredentialMaterialEnvelopeContext = (requestArg) => new TextEncoder().encode(JSON.stringify({
383
559
  schemaVersion: 1,
384
560
  purpose: 'serve.zone/publish-corestore-credential-material',
@@ -451,7 +627,7 @@ export const validatePublishCorestoreCredentialMaterialRequest = async (requestA
451
627
  };
452
628
  const expectedCoverageKeys = (capabilityArg) => capabilityArg === 'database'
453
629
  ? corestoreDatabaseCredentialKeys
454
- : corestoreObjectStorageCredentialKeys;
630
+ : corestoreObjectStorageCredentialSecretKeys;
455
631
  const computeRuntimeSha256 = async (valueArg) => {
456
632
  const digest = new Uint8Array(await globalThis.crypto.subtle.digest('SHA-256', new Uint8Array(valueArg)));
457
633
  return [...digest].map((byteArg) => byteArg.toString(16).padStart(2, '0')).join('');
@@ -617,4 +793,4 @@ export const getCorestoreCredentialPublicationErrorMetadata = (codeArg) => ({
617
793
  code: codeArg,
618
794
  retryable: corestoreCredentialPublicationErrorMetadata[codeArg].retryable,
619
795
  });
620
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jb3Jlc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ydW50aW1lLmNvcmVzdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQU14QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLCtCQUErQixFQUMvQiwyQkFBMkIsR0FDNUIsTUFBTSxrQkFBa0IsQ0FBQztBQU0xQixPQUFPLEVBQUUsc0NBQXNDLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUk5RixNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3RELFFBQVEsRUFBRSw0QkFBNEI7SUFDdEMsYUFBYSxFQUFFLGlDQUFpQztDQUN4QyxDQUFDLENBQUM7QUFDWixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyx1QkFBZ0MsQ0FBQztBQUNwRSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyw0QkFBcUMsQ0FBQztBQUN4RixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxxQkFBOEIsQ0FBQztBQUM1RSxNQUFNLENBQUMsTUFBTSw4QkFBOEIsR0FBRyxZQUFxQixDQUFDO0FBRXBFLE1BQU0sQ0FBQyxNQUFNLGdDQUFnQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDNUQsdUJBQXVCLEVBQUUsR0FBRztJQUM1Qix3QkFBd0IsRUFBRSxHQUFHO0lBQzdCLHNCQUFzQixFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLElBQUk7SUFDM0MsNEJBQTRCLEVBQUUsQ0FBQyxHQUFHLElBQUk7SUFDdEMsMEJBQTBCLEVBQUUsRUFBRSxHQUFHLElBQUk7SUFDckMsd0JBQXdCLEVBQUUsRUFBRTtJQUM1Qix3QkFBd0IsRUFBRSxJQUFJO0lBQzlCLG1DQUFtQyxFQUFFLEVBQUUsR0FBRyxJQUFJO0NBQy9D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
796
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5jb3Jlc3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9ydW50aW1lLmNvcmVzdG9yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQU14QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLCtCQUErQixFQUMvQiwyQkFBMkIsR0FDNUIsTUFBTSxrQkFBa0IsQ0FBQztBQU8xQixPQUFPLEVBQ0wsc0NBQXNDLEVBQ3RDLG9DQUFvQyxHQUNyQyxNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RGLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsNEJBQTRCLEdBQzdCLE1BQU0sNEJBQTRCLENBQUM7QUFJcEMsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUN0RCxRQUFRLEVBQUUsNEJBQTRCO0lBQ3RDLGFBQWEsRUFBRSxpQ0FBaUM7Q0FDeEMsQ0FBQyxDQUFDO0FBQ1osTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsdUJBQWdDLENBQUM7QUFDcEUsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsNEJBQXFDLENBQUM7QUFDeEYsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUcscUJBQThCLENBQUM7QUFDNUUsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsWUFBcUIsQ0FBQztBQUVwRSxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVELHVCQUF1QixFQUFFLEdBQUc7SUFDNUIsd0JBQXdCLEVBQUUsR0FBRztJQUM3QixzQkFBc0IsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzNDLDRCQUE0QixFQUFFLENBQUMsR0FBRyxJQUFJ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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/interfaces",
3
- "version": "25.3.0",
3
+ "version": "27.0.0",
4
4
  "private": false,
5
5
  "description": "Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.",
6
6
  "exports": {
package/readme.md CHANGED
@@ -862,10 +862,26 @@ The Node-only `/runtime` export defines
862
862
  `publishCorestoreCredentialMaterial` for ingress-sealed database or object
863
863
  storage credential publication. Publication grants carry the service, binding,
864
864
  reconciliation generation, binding-request digest, target Secrets revision, and
865
- bounded validity window. Receipts bind exact key coverage, created
865
+ bounded validity window. `computeCorestoreCredentialBindingRequestSha256()`
866
+ produces that digest from the exact value-free provider, scope, environment, and
867
+ optional retention request for persisted schema-v1 records. New issuers use
868
+ `TCorestoreCredentialBindingRequestV2` and
869
+ `validateCorestoreCredentialBindingRequestV2()`,
870
+ `createCorestoreCredentialBindingRequestDigestInputV2()`, and
871
+ `computeCorestoreCredentialBindingRequestSha256V2()`. The corresponding
872
+ unsuffixed APIs remain the schema-v1 boundary. Schema v2 binds every object-storage
873
+ request to the exact durable `bucketName`; schema-v1 records stay readable but
874
+ do not provide that authority. Object-storage plaintext keeps the logical
875
+ `accessKeyId` and `secretAccessKey` fields while
876
+ `createCorestoreCredentialSecretValues()` expands them to the six canonical
877
+ Corestore `S3_*` and `AWS_*` Secret aliases. Receipts bind that exact key
878
+ coverage, created
866
879
  SecretVersion references, the admitted envelope/context digest, and the trusted
867
880
  organization and cluster scope. Cluster configuration DTOs add optional sorted
868
881
  `corestoreCredentialPublicationGrants`; existing consumers may omit them.
882
+ When `validateCorestoreObjectStorageCredentialMaterial()` receives a trusted
883
+ retention expectation, matching retention evidence is mandatory; missing or
884
+ different evidence fails validation.
869
885
 
870
886
  ### Legacy Deployment Settlement
871
887
 
@@ -921,9 +937,16 @@ Available platform modules:
921
937
  operational config stays adapter-internal, while public DTOs expose typed
922
938
  endpoints and optional credential management scopes only.
923
939
 
924
- `IPlatformBinding.objectstorageRetention` is additive and value-free. It carries
925
- compliance-mode intent and optional provider evidence bound to the exact
926
- service, binding, reconciliation generation, request digest, and bucket. Use
940
+ Optional `IPlatformBinding.objectstorageBucketName` is the durable value-free
941
+ Cloudly authority for an exact Corestore bucket. It is required whenever a
942
+ caller needs to establish trusted bucket authority for retention validation.
943
+ `validatePlatformObjectStorageBucketName()` applies the canonical SmartStorage
944
+ S3 bucket boundary without normalizing input, and
945
+ `platformObjectStorageBucketNameLimits` publishes its 3-byte minimum and 63-byte
946
+ maximum.
947
+ `IPlatformBinding.objectstorageRetention` carries compliance-mode intent and
948
+ optional provider evidence bound to the exact service, binding, reconciliation
949
+ generation, request digest, and authoritative bucket. Use
927
950
  `validatePlatformBindingObjectStorageRetention()` for the full binding boundary
928
951
  or the narrower intent/evidence validators when the trusted authority context
929
952
  is already available; none of these contracts contains credential material.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/interfaces',
6
- version: '25.3.0',
6
+ version: '27.0.0',
7
7
  description: 'Shared TypeScript interfaces and TypedRequest contracts for the serve.zone ecosystem.'
8
8
  }
@@ -31,6 +31,7 @@ export {
31
31
  };
32
32
 
33
33
  export * from './storage.js';
34
+ export * from './objectstorage.js';
34
35
  export * from './objectstorageretention.js';
35
36
  export * from './storagemigration.js';
36
37
  export * from './types.js';
@@ -4,3 +4,30 @@ export interface IPlatformObjectStorageBindingConfig {
4
4
  publicRead?: boolean;
5
5
  versioning?: boolean;
6
6
  }
7
+
8
+ export const platformObjectStorageBucketNameLimits = Object.freeze({
9
+ minimumBytes: 3,
10
+ maximumBytes: 63,
11
+ });
12
+
13
+ /** Mirrors SmartStorage's canonical S3 bucket boundary without normalizing input. */
14
+ export const validatePlatformObjectStorageBucketName = (
15
+ bucketNameArg: unknown,
16
+ pathArg = 'objectstorage bucketName',
17
+ ): string[] => {
18
+ if (typeof bucketNameArg !== 'string') {
19
+ return [`${pathArg} must be a canonical S3 bucket name`];
20
+ }
21
+ const ipv4Parts = bucketNameArg.split('.');
22
+ const isIpv4Address = ipv4Parts.length === 4 && ipv4Parts.every((partArg) => (
23
+ /^[0-9]+$/.test(partArg) && Number(partArg) <= 255
24
+ ));
25
+ if (bucketNameArg.length < platformObjectStorageBucketNameLimits.minimumBytes
26
+ || bucketNameArg.length > platformObjectStorageBucketNameLimits.maximumBytes
27
+ || !/^[a-z0-9][a-z0-9.-]*[a-z0-9]$/.test(bucketNameArg)
28
+ || bucketNameArg.includes('..')
29
+ || isIpv4Address) {
30
+ return [`${pathArg} must be a canonical S3 bucket name`];
31
+ }
32
+ return [];
33
+ };
@@ -1,4 +1,5 @@
1
1
  import { createCanonicalJsonSha256Hex } from '../private/canonicaljson.js';
2
+ import { validatePlatformObjectStorageBucketName } from './objectstorage.js';
2
3
 
3
4
  export const objectStorageRetentionLimits = Object.freeze({
4
5
  maximumPolicyIdLength: 96,
@@ -267,10 +268,10 @@ export const validateObjectStorageRetentionEvidence = async (
267
268
  if (!retentionIntentFieldsEqual(receipt, intent)) {
268
269
  errors.push('objectstorage retention receipt intent must equal its evidence intent');
269
270
  }
270
- if (typeof receipt.bucketName !== 'string'
271
- || receipt.bucketName.length === 0
272
- || receipt.bucketName.length > 200
273
- || receipt.bucketName !== expectedArg.bucketName) {
271
+ if (validatePlatformObjectStorageBucketName(
272
+ receipt.bucketName,
273
+ 'objectstorage retention receipt bucket',
274
+ ).length > 0 || receipt.bucketName !== expectedArg.bucketName) {
274
275
  errors.push('objectstorage retention receipt bucket must exactly match');
275
276
  }
276
277
  if (!isPositiveSafeInteger(receipt.configuredAt)
@@ -360,9 +361,14 @@ export const validatePlatformBindingObjectStorageRetention = async (
360
361
  if (!isRecord(bindingArg)) {
361
362
  return ['platform objectstorage retention binding must be an object'];
362
363
  }
364
+ if (validatePlatformObjectStorageBucketName(expectedArg.bucketName).length > 0
365
+ || validatePlatformObjectStorageBucketName(bindingArg.objectstorageBucketName).length > 0) {
366
+ return ['platform objectstorage retention must use canonical bucket authority'];
367
+ }
363
368
  if (bindingArg.capability !== 'objectstorage'
364
369
  || bindingArg.id !== expectedArg.bindingId
365
- || bindingArg.serviceId !== expectedArg.serviceId) {
370
+ || bindingArg.serviceId !== expectedArg.serviceId
371
+ || bindingArg.objectstorageBucketName !== expectedArg.bucketName) {
366
372
  return ['platform objectstorage retention must match an objectstorage binding authority'];
367
373
  }
368
374
  if (bindingArg.objectstorageRetention === undefined) {
@@ -65,6 +65,8 @@ export interface IPlatformBinding {
65
65
  endpoints?: IPlatformServiceEndpoint[];
66
66
  /** Value-free reconciliation scope for service-owned credentials. */
67
67
  credentialManagementScope?: Extract<TSecretManagementScope, `platform:${string}`>;
68
+ /** Durable Cloudly authority for the exact Corestore object-storage bucket. */
69
+ objectstorageBucketName?: string;
68
70
  /** Capability-specific value-free immutable-retention intent and evidence. */
69
71
  objectstorageRetention?: IObjectStorageRetentionBindingV1;
70
72
  createdAt?: number;
@@ -11,10 +11,19 @@ import {
11
11
  } from './data/secret.js';
12
12
  import type { ISecretEnvelopeAdmissionBindingV1 } from './runtime.js';
13
13
  import type {
14
+ IObjectStorageRetentionIntentV1,
14
15
  IObjectStorageRetentionEvidenceExpectationV1,
15
16
  IObjectStorageRetentionEvidenceV1,
16
17
  } from './platform/objectstorageretention.js';
17
- import { validateObjectStorageRetentionEvidence } from './platform/objectstorageretention.js';
18
+ import {
19
+ validateObjectStorageRetentionEvidence,
20
+ validateObjectStorageRetentionIntent,
21
+ } from './platform/objectstorageretention.js';
22
+ import { validatePlatformObjectStorageBucketName } from './platform/objectstorage.js';
23
+ import {
24
+ canonicalizeStrictJson,
25
+ createCanonicalJsonSha256Hex,
26
+ } from './private/canonicaljson.js';
18
27
 
19
28
  export type TCorestoreCredentialCapability = 'database' | 'objectstorage';
20
29
 
@@ -326,6 +335,219 @@ export interface ICorestoreCredentialPublicationGrantV1 {
326
335
  expiresAt: number;
327
336
  }
328
337
 
338
+ interface ICorestoreCredentialBindingRequestBaseV1 {
339
+ schemaVersion: 1;
340
+ serviceId: string;
341
+ bindingId: string;
342
+ providerConfigId: typeof corestoreProviderConfigIds[TCorestoreCredentialCapability];
343
+ managementScope: typeof corestoreCredentialManagementScope;
344
+ environment: typeof corestoreCredentialEnvironment;
345
+ }
346
+
347
+ export type TCorestoreCredentialBindingRequestV1 =
348
+ | ICorestoreCredentialBindingRequestBaseV1 & {
349
+ capability: 'database';
350
+ }
351
+ | ICorestoreCredentialBindingRequestBaseV1 & {
352
+ capability: 'objectstorage';
353
+ objectstorageRetention?: IObjectStorageRetentionIntentV1;
354
+ };
355
+
356
+ interface ICorestoreCredentialBindingRequestBaseV2 {
357
+ schemaVersion: 2;
358
+ serviceId: string;
359
+ bindingId: string;
360
+ providerConfigId: typeof corestoreProviderConfigIds[TCorestoreCredentialCapability];
361
+ managementScope: typeof corestoreCredentialManagementScope;
362
+ environment: typeof corestoreCredentialEnvironment;
363
+ }
364
+
365
+ export type TCorestoreCredentialBindingRequestV2 =
366
+ | ICorestoreCredentialBindingRequestBaseV2 & {
367
+ capability: 'database';
368
+ }
369
+ | ICorestoreCredentialBindingRequestBaseV2 & {
370
+ capability: 'objectstorage';
371
+ bucketName: string;
372
+ objectstorageRetention?: IObjectStorageRetentionIntentV1;
373
+ };
374
+
375
+ export const validateCorestoreCredentialBindingRequest = (
376
+ requestArg: unknown,
377
+ ): string[] => {
378
+ if (!isRecord(requestArg)) {
379
+ return ['corestore credential binding request must use its exact schema'];
380
+ }
381
+ const baseKeys = [
382
+ 'schemaVersion',
383
+ 'serviceId',
384
+ 'bindingId',
385
+ 'capability',
386
+ 'providerConfigId',
387
+ 'managementScope',
388
+ 'environment',
389
+ ];
390
+ if (requestArg.capability === 'database') {
391
+ if (!hasExactKeys(requestArg, baseKeys)) {
392
+ return ['corestore database credential binding request must use its exact schema'];
393
+ }
394
+ } else if (requestArg.capability === 'objectstorage') {
395
+ if (!hasKeys(requestArg, baseKeys, ['objectstorageRetention'])) {
396
+ return ['corestore objectstorage credential binding request must use its exact schema'];
397
+ }
398
+ } else {
399
+ return ['corestore credential binding request capability must be canonical'];
400
+ }
401
+
402
+ const errors: string[] = [];
403
+ if (requestArg.schemaVersion !== 1
404
+ || !isIdentifier(requestArg.serviceId)
405
+ || !isIdentifier(requestArg.bindingId)) {
406
+ errors.push('corestore credential binding request identity must be canonical');
407
+ }
408
+ if (requestArg.providerConfigId !== getCorestoreProviderConfigId(requestArg.capability)
409
+ || requestArg.managementScope !== corestoreCredentialManagementScope
410
+ || requestArg.environment !== corestoreCredentialEnvironment) {
411
+ errors.push('corestore credential binding request constants must be canonical');
412
+ }
413
+ if (requestArg.capability === 'objectstorage'
414
+ && requestArg.objectstorageRetention !== undefined) {
415
+ errors.push(...validateObjectStorageRetentionIntent(
416
+ requestArg.objectstorageRetention,
417
+ 'corestore objectstorage credential binding request retention',
418
+ ));
419
+ }
420
+ return errors;
421
+ };
422
+
423
+ const failBindingRequest = (reasonArg: string): never => {
424
+ throw new Error(reasonArg);
425
+ };
426
+
427
+ export const createCorestoreCredentialBindingRequestDigestInput = (
428
+ requestArg: TCorestoreCredentialBindingRequestV1,
429
+ ): string => {
430
+ const errors = validateCorestoreCredentialBindingRequest(requestArg);
431
+ if (errors.length > 0) throw new Error(errors[0]);
432
+ return canonicalizeStrictJson({
433
+ schemaVersion: requestArg.schemaVersion,
434
+ serviceId: requestArg.serviceId,
435
+ bindingId: requestArg.bindingId,
436
+ capability: requestArg.capability,
437
+ providerConfigId: requestArg.providerConfigId,
438
+ managementScope: requestArg.managementScope,
439
+ environment: requestArg.environment,
440
+ ...(requestArg.capability === 'objectstorage' && requestArg.objectstorageRetention
441
+ ? {
442
+ objectstorageRetention: {
443
+ mode: requestArg.objectstorageRetention.mode,
444
+ policyId: requestArg.objectstorageRetention.policyId,
445
+ retentionDurationSeconds:
446
+ requestArg.objectstorageRetention.retentionDurationSeconds,
447
+ },
448
+ }
449
+ : {}),
450
+ }, failBindingRequest, 'corestore credential binding request');
451
+ };
452
+
453
+ export const computeCorestoreCredentialBindingRequestSha256 = async (
454
+ requestArg: TCorestoreCredentialBindingRequestV1,
455
+ ): Promise<string> => createCanonicalJsonSha256Hex(
456
+ createCorestoreCredentialBindingRequestDigestInput(requestArg),
457
+ failBindingRequest,
458
+ );
459
+
460
+ export const validateCorestoreCredentialBindingRequestV2 = (
461
+ requestArg: unknown,
462
+ ): string[] => {
463
+ if (!isRecord(requestArg)) {
464
+ return ['corestore credential binding request v2 must use its exact schema'];
465
+ }
466
+ const baseKeys = [
467
+ 'schemaVersion',
468
+ 'serviceId',
469
+ 'bindingId',
470
+ 'capability',
471
+ 'providerConfigId',
472
+ 'managementScope',
473
+ 'environment',
474
+ ];
475
+ if (requestArg.capability === 'database') {
476
+ if (!hasExactKeys(requestArg, baseKeys)) {
477
+ return ['corestore database credential binding request v2 must use its exact schema'];
478
+ }
479
+ } else if (requestArg.capability === 'objectstorage') {
480
+ if (!hasKeys(requestArg, [...baseKeys, 'bucketName'], ['objectstorageRetention'])) {
481
+ return ['corestore objectstorage credential binding request v2 must use its exact schema'];
482
+ }
483
+ } else {
484
+ return ['corestore credential binding request v2 capability must be canonical'];
485
+ }
486
+
487
+ const errors: string[] = [];
488
+ if (requestArg.schemaVersion !== 2
489
+ || !isIdentifier(requestArg.serviceId)
490
+ || !isIdentifier(requestArg.bindingId)) {
491
+ errors.push('corestore credential binding request v2 identity must be canonical');
492
+ }
493
+ if (requestArg.providerConfigId !== getCorestoreProviderConfigId(requestArg.capability)
494
+ || requestArg.managementScope !== corestoreCredentialManagementScope
495
+ || requestArg.environment !== corestoreCredentialEnvironment) {
496
+ errors.push('corestore credential binding request v2 constants must be canonical');
497
+ }
498
+ if (requestArg.capability === 'objectstorage') {
499
+ errors.push(...validatePlatformObjectStorageBucketName(
500
+ requestArg.bucketName,
501
+ 'corestore objectstorage credential binding request v2 bucketName',
502
+ ));
503
+ if (requestArg.objectstorageRetention !== undefined) {
504
+ errors.push(...validateObjectStorageRetentionIntent(
505
+ requestArg.objectstorageRetention,
506
+ 'corestore objectstorage credential binding request v2 retention',
507
+ ));
508
+ }
509
+ }
510
+ return errors;
511
+ };
512
+
513
+ export const createCorestoreCredentialBindingRequestDigestInputV2 = (
514
+ requestArg: TCorestoreCredentialBindingRequestV2,
515
+ ): string => {
516
+ const errors = validateCorestoreCredentialBindingRequestV2(requestArg);
517
+ if (errors.length > 0) throw new Error(errors[0]);
518
+ return canonicalizeStrictJson({
519
+ schemaVersion: requestArg.schemaVersion,
520
+ serviceId: requestArg.serviceId,
521
+ bindingId: requestArg.bindingId,
522
+ capability: requestArg.capability,
523
+ providerConfigId: requestArg.providerConfigId,
524
+ managementScope: requestArg.managementScope,
525
+ environment: requestArg.environment,
526
+ ...(requestArg.capability === 'objectstorage'
527
+ ? {
528
+ bucketName: requestArg.bucketName,
529
+ ...(requestArg.objectstorageRetention
530
+ ? {
531
+ objectstorageRetention: {
532
+ mode: requestArg.objectstorageRetention.mode,
533
+ policyId: requestArg.objectstorageRetention.policyId,
534
+ retentionDurationSeconds:
535
+ requestArg.objectstorageRetention.retentionDurationSeconds,
536
+ },
537
+ }
538
+ : {}),
539
+ }
540
+ : {}),
541
+ }, failBindingRequest, 'corestore credential binding request v2');
542
+ };
543
+
544
+ export const computeCorestoreCredentialBindingRequestSha256V2 = async (
545
+ requestArg: TCorestoreCredentialBindingRequestV2,
546
+ ): Promise<string> => createCanonicalJsonSha256Hex(
547
+ createCorestoreCredentialBindingRequestDigestInputV2(requestArg),
548
+ failBindingRequest,
549
+ );
550
+
329
551
  export const validateCorestoreCredentialPublicationGrant = (
330
552
  grantArg: unknown,
331
553
  trustedNowArg?: number,
@@ -457,17 +679,30 @@ export const corestoreDatabaseCredentialKeys = Object.freeze([
457
679
  'MONGODB_PASSWORD',
458
680
  'MONGO_DBPASS',
459
681
  ] as const);
460
- export const corestoreObjectStorageCredentialKeys = Object.freeze([
682
+ export const corestoreObjectStorageCredentialPlaintextKeys = Object.freeze([
461
683
  'accessKeyId',
462
684
  'secretAccessKey',
463
685
  ] as const);
686
+ export const corestoreObjectStorageCredentialSecretKeys = Object.freeze([
687
+ 'S3_ACCESS_KEY',
688
+ 'S3_ACCESS_KEY_ID',
689
+ 'S3_SECRET_KEY',
690
+ 'S3_SECRET_ACCESS_KEY',
691
+ 'AWS_ACCESS_KEY_ID',
692
+ 'AWS_SECRET_ACCESS_KEY',
693
+ ] as const);
464
694
 
465
695
  export type TCorestoreDatabaseCredentialKey = typeof corestoreDatabaseCredentialKeys[number];
466
- export type TCorestoreObjectStorageCredentialKey =
467
- typeof corestoreObjectStorageCredentialKeys[number];
468
- export type TCorestoreCredentialKey =
696
+ export type TCorestoreObjectStorageCredentialPlaintextKey =
697
+ typeof corestoreObjectStorageCredentialPlaintextKeys[number];
698
+ export type TCorestoreObjectStorageCredentialSecretKey =
699
+ typeof corestoreObjectStorageCredentialSecretKeys[number];
700
+ export type TCorestoreCredentialPlaintextKey =
701
+ | TCorestoreDatabaseCredentialKey
702
+ | TCorestoreObjectStorageCredentialPlaintextKey;
703
+ export type TCorestoreCredentialSecretKey =
469
704
  | TCorestoreDatabaseCredentialKey
470
- | TCorestoreObjectStorageCredentialKey;
705
+ | TCorestoreObjectStorageCredentialSecretKey;
471
706
 
472
707
  export type TCorestoreDatabaseCredentialValuesV1 = {
473
708
  [TKey in TCorestoreDatabaseCredentialKey]: string;
@@ -544,7 +779,7 @@ export const validateCorestoreObjectStorageCredentialMaterial = async (
544
779
  || materialArg.schemaVersion !== 1
545
780
  || materialArg.capability !== 'objectstorage'
546
781
  || !isRecord(materialArg.values)
547
- || !hasExactKeys(materialArg.values, corestoreObjectStorageCredentialKeys)) {
782
+ || !hasExactKeys(materialArg.values, corestoreObjectStorageCredentialPlaintextKeys)) {
548
783
  return ['corestore objectstorage credential material must use its exact schema'];
549
784
  }
550
785
  const errors: string[] = [];
@@ -552,7 +787,9 @@ export const validateCorestoreObjectStorageCredentialMaterial = async (
552
787
  || !readCredentialString(materialArg.values.secretAccessKey)) {
553
788
  errors.push('corestore objectstorage credential values must be bounded non-empty strings');
554
789
  }
555
- if (materialArg.retention !== undefined) {
790
+ if (retentionExpectationArg && materialArg.retention === undefined) {
791
+ errors.push('corestore objectstorage retention evidence is required by trusted binding authority');
792
+ } else if (materialArg.retention !== undefined) {
556
793
  if (!retentionExpectationArg) {
557
794
  errors.push('corestore objectstorage retention evidence requires trusted binding authority');
558
795
  } else {
@@ -572,6 +809,36 @@ export const validateCorestoreCredentialPlaintextMaterial = async (
572
809
  ? validateCorestoreDatabaseCredentialMaterial(materialArg)
573
810
  : validateCorestoreObjectStorageCredentialMaterial(materialArg, retentionExpectationArg);
574
811
 
812
+ export interface ICorestoreCredentialSecretValueV1 {
813
+ key: TCorestoreCredentialSecretKey;
814
+ value: string;
815
+ }
816
+
817
+ export const createCorestoreCredentialSecretValues = async (
818
+ materialArg: TCorestoreCredentialPlaintextMaterialV1,
819
+ retentionExpectationArg?: IObjectStorageRetentionEvidenceExpectationV1,
820
+ ): Promise<ICorestoreCredentialSecretValueV1[]> => {
821
+ const errors = await validateCorestoreCredentialPlaintextMaterial(
822
+ materialArg,
823
+ retentionExpectationArg,
824
+ );
825
+ if (errors.length > 0) throw new Error(errors[0]);
826
+ if (materialArg.capability === 'database') {
827
+ return corestoreDatabaseCredentialKeys.map((keyArg) => ({
828
+ key: keyArg,
829
+ value: materialArg.values[keyArg],
830
+ }));
831
+ }
832
+ return corestoreObjectStorageCredentialSecretKeys.map((keyArg) => ({
833
+ key: keyArg,
834
+ value: keyArg === 'S3_ACCESS_KEY'
835
+ || keyArg === 'S3_ACCESS_KEY_ID'
836
+ || keyArg === 'AWS_ACCESS_KEY_ID'
837
+ ? materialArg.values.accessKeyId
838
+ : materialArg.values.secretAccessKey,
839
+ }));
840
+ };
841
+
575
842
  export interface IPublishCorestoreCredentialMaterialRequestV1 {
576
843
  identity: IIdentityCredential;
577
844
  mutationId: string;
@@ -583,11 +850,11 @@ export interface IPublishCorestoreCredentialMaterialRequestV1 {
583
850
 
584
851
  export interface ICorestoreCredentialSecretVersionReferenceV1
585
852
  extends ISecretVersionReference {
586
- key: TCorestoreCredentialKey;
853
+ key: TCorestoreCredentialSecretKey;
587
854
  }
588
855
 
589
856
  export interface ICorestoreCredentialPublicationCoverageV1 {
590
- keys: TCorestoreCredentialKey[];
857
+ keys: TCorestoreCredentialSecretKey[];
591
858
  versionReferences: ICorestoreCredentialSecretVersionReferenceV1[];
592
859
  }
593
860
 
@@ -707,9 +974,9 @@ export const validatePublishCorestoreCredentialMaterialRequest = async (
707
974
 
708
975
  const expectedCoverageKeys = (
709
976
  capabilityArg: TCorestoreCredentialCapability,
710
- ): readonly TCorestoreCredentialKey[] => capabilityArg === 'database'
977
+ ): readonly TCorestoreCredentialSecretKey[] => capabilityArg === 'database'
711
978
  ? corestoreDatabaseCredentialKeys
712
- : corestoreObjectStorageCredentialKeys;
979
+ : corestoreObjectStorageCredentialSecretKeys;
713
980
 
714
981
  export interface ICorestoreCredentialPublicationReceiptExpectationV1 {
715
982
  request: IPublishCorestoreCredentialMaterialRequestV1;