@serve.zone/coremail 1.0.0 → 1.0.1

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,17 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026-07-30 - 1.0.1
4
+
5
+ ### Changed
6
+
7
+ - Consume the Interfaces v23 sealed-secret contracts and document the
8
+ `workloadinit` runtime boundary for environment-delivered secret material.
9
+
10
+ ### Fixes
11
+
12
+ - Use the canonical Interfaces v23 outbound-message normalizer and the secure
13
+ TypedSocket 5.1.1 transport for explicit `wss:` gateway endpoints.
14
+
3
15
  ## 2026-07-30 - 1.0.0
4
16
 
5
17
  ### Breaking Changes
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/coremail',
6
- version: '1.0.0',
6
+ version: '1.0.1',
7
7
  description: 'Authenticated mail persistence and delivery orchestration for serve.zone workloads.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFGQUFxRjtDQUNuRyxDQUFBIn0=
@@ -7,6 +7,7 @@ import type { CoreMailStorage } from './classes.storage.js';
7
7
  import type { CoreMailSubmissionService } from './classes.submissions.js';
8
8
  import type { CoreMailTransferService } from './classes.transfer.js';
9
9
  import type { ICoreMailConfig, ICoreMailReadiness, ICoreMailWorkloadSession } from './interfaces.js';
10
+ export declare const privacySafeError: (errorArg: unknown) => plugins.typedrequest.TypedResponseError;
10
11
  export declare const countCoreMailActiveSessions: (sessionsArg: Iterable<ICoreMailWorkloadSession | undefined>, bindingArg: plugins.serveZoneInterfaces.data.ICoreMailBindingDesiredState, configEpochArg: number) => Array<{
11
12
  credentialId: string;
12
13
  version: number;
@@ -1,7 +1,7 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { CoreMailAuthenticationError, CoreMailAuthorizationError, CoreMailCapabilityDeniedError, CoreMailAuth, coreMailPreAuthDeadlineKey, coreMailSessionKey, } from './classes.auth.js';
3
3
  import { CoreMailQuotaExceededError } from './coremail.quota.js';
4
- const privacySafeError = (errorArg) => {
4
+ export const privacySafeError = (errorArg) => {
5
5
  let code = 'INVALID_REQUEST';
6
6
  let retryable = false;
7
7
  if (errorArg instanceof CoreMailAuthenticationError) {
@@ -22,6 +22,9 @@ const privacySafeError = (errorArg) => {
22
22
  : { retryAfterMs: errorArg.retryAfterMs }),
23
23
  });
24
24
  }
25
+ else if (errorArg instanceof plugins.serveZoneInterfaces.data.CoreMailContractError) {
26
+ code = errorArg.code;
27
+ }
25
28
  else if (errorArg instanceof Error
26
29
  && errorArg.message.includes('gateway')
27
30
  && errorArg.message.includes('unavailable')) {
@@ -306,4 +309,4 @@ export class CoreMailServer {
306
309
  }));
307
310
  }
308
311
  }
309
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsWUFBWSxFQUNaLDBCQUEwQixFQUMxQixrQkFBa0IsR0FDbkIsTUFBTSxtQkFBbUIsQ0FBQztBQWEzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFqRSxNQUFNLGdCQUFnQixHQUFHLENBQ3ZCLFFBQWlCLEVBQ3dCLEVBQUU7SUFDM0MsSUFBSSxJQUFJLEdBQWUsaUJBQWlCLENBQUM7SUFDekMsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3RCLElBQUksUUFBUSxZQUFZLDJCQUEyQixFQUFFLENBQUM7UUFDcEQsSUFBSSxHQUFHLHVCQUF1QixDQUFDO0lBQ2pDLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSw2QkFBNkIsRUFBRSxDQUFDO1FBQzdELElBQUksR0FBRyxtQkFBbUIsQ0FBQztJQUM3QixDQUFDO1NBQU0sSUFBSSxRQUFRLFlBQVksMEJBQTBCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUU7WUFDL0UsSUFBSSxFQUFFLGdCQUFnQjtZQUN0QixTQUFTLEVBQUUsSUFBSTtZQUNmLEdBQUcsQ0FBQyxRQUFRLENBQUMsWUFBWSxLQUFLLFNBQVM7Z0JBQ3JDLENBQUMsQ0FBQyxFQUFFO2dCQUNKLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxFQUFFLENB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
312
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5zZXJ2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9jbGFzc2VzLnNlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQUN4QyxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDBCQUEwQixFQUMxQiw2QkFBNkIsRUFDN0IsWUFBWSxFQUNaLDBCQUEwQixFQUMxQixrQkFBa0IsR0FDbkIsTUFBTSxtQkFBbUIsQ0FBQztBQWEzQixPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVFqRSxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUM5QixRQUFpQixFQUN3QixFQUFFO0lBQzNDLElBQUksSUFBSSxHQUFlLGlCQUFpQixDQUFDO0lBQ3pDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixJQUFJLFFBQVEsWUFBWSwyQkFBMkIsRUFBRSxDQUFDO1FBQ3BELElBQUksR0FBRyx1QkFBdUIsQ0FBQztJQUNqQyxDQUFDO1NBQU0sSUFBSSxRQUFRLFlBQVksNkJBQTZCLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEdBQUcsbUJBQW1CLENBQUM7SUFDN0IsQ0FBQztTQUFNLElBQUksUUFBUSxZQUFZLDBCQUEwQixFQUFFLENBQUM7UUFDMUQsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0lBQzdCLENBQUM7U0FBTSxJQUFJLFFBQVEsWUFBWSwwQkFBMEIsRUFBRSxDQUFDO1FBQzFELE9BQU8sSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLDRCQUE0QixFQUFFO1lBQy9FLElBQUksRUFBRSxnQkFBZ0I7WUFDdEIsU0FBUyxFQUFFLElBQUk7WUFDZixHQUFHLENBQUMsUUFBUSxDQUFDLFlBQVksS0FBSyxTQUFTO2dCQUNyQyxDQUFDLENBQUMsRUFBRTtnQkFDSixDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ2lCLENBQUMsQ0FBQztJQUNuRSxDQUFDO1NBQU0sSUFDTCxRQUFRLFlBQVksT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFDMUUsQ0FBQztRQUNELElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0lBQ3ZCLENBQUM7U0FBTSxJQUNMLFFBQVEsWUFBWSxLQUFLO1dBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztXQUNwQyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFDM0MsQ0FBQztRQUNELElBQUksR0FBRyxxQkFBcUIsQ0FBQztRQUM3QixTQUFTLEdBQUcsSUFBSSxDQUFDO0lBQ25CLENBQUM7U0FBTSxJQUNMLFFBQVEsWUFBWSxLQUFLO1dBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUMzQyxDQUFDO1FBQ0QsSUFBSSxHQUFHLHNCQUFzQixDQUFDO0lBQ2hDLENBQUM7U0FBTSxJQUNMLFFBQVEsWUFBWSxLQUFLO1dBQ3RCLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNyQyxDQUFDO1FBQ0QsSUFBSSxHQUFHLGdCQUFnQixDQUFDO1FBQ3hCLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDbkIsQ0FBQztTQUFNLElBQ0wsUUFBUSxZQUFZLEtBQUs7V0FDdEIsQ0FDRCxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7ZUFDckMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUM7ZUFDM0MsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQ3hDLEVBQ0QsQ0FBQztRQUNELElBQUksR0FBRyx3QkFBd0IsQ0FBQztJQUNsQyxDQUFDO0lBQ0QsT0FBTyxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsNEJBQTRCLEVBQUU7UUFDL0UsSUFBSTtRQUNKLFNBQVM7S0FDb0QsQ0FBQyxDQUFDO0FBQ25FLENBQUMsQ0FBQztBQUVGLE1BQU0sTUFBTSxHQUFHLENBQ2IsUUFBeUMsRUFDMUIsRUFBRTtJQUNqQixNQUFNLElBQUksR0FBRyxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQWlDLENBQUM7SUFDcEUsSUFDRSxDQUFDLElBQUk7V0FDRixPQUFPLElBQUksQ0FBQyxFQUFFLEtBQUssUUFBUTtXQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksWUFBWSxHQUFHLENBQUM7V0FDM0IsT0FBTyxJQUFJLENBQUMsS0FBSyxLQUFLLFVBQVU7V0FDaEMsT0FBTyxJQUFJLENBQUMsU0FBUyxLQUFLLFVBQVUsRUFDdkMsQ0FBQztRQUNELE1BQU0sSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLDJCQUEyQixHQUFHLENBQ3pDLFdBQTJELEVBQzNELFVBQXlFLEVBQ3pFLGNBQXNCLEVBQzJDLEVBQUU7SUFDbkUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBR25CLENBQUM7SUFDSixLQUFLLE1BQU0sT0FBTyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2xDLElBQ0UsT0FBTyxFQUFFLElBQUksS0FBSyxVQUFVO2VBQ3pCLE9BQU8sQ0FBQyxRQUFRLEtBQUssVUFBVSxDQUFDLFFBQVE7ZUFDeEMsT0FBTyxDQUFDLFNBQVMsS0FBSyxVQUFVLENBQUMsU0FBUztlQUMxQyxPQUFPLENBQUMsU0FBUyxLQUFLLFVBQVUsQ0FBQyxTQUFTO2VBQzFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssVUFBVSxDQUFDLFFBQVE7ZUFDL0MsT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQ3pDLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxHQUFHLE9BQU8sQ0FBQyxZQUFZLFNBQVMsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDeEUsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLO2dCQUNuQixDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7Z0JBQ3RDLENBQUMsQ0FBQztvQkFDRSxZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVk7b0JBQ2xDLE9BQU8sRUFBRSxPQUFPLENBQUMsaUJBQWlCO29CQUNsQyxLQUFLLEVBQUUsQ0FBQztpQkFDVCxDQUFDLENBQUM7UUFDVCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUNyRCxPQUFPLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPO1dBQy9CLE9BQU8sQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FDN0QsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sT0FBTyxjQUFjO0lBUU47SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFoQkgsTUFBTSxHQUVsQixJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDM0IsV0FBVyxDQUFrQztJQUNyRCxpQkFBaUIsR0FBMEMsSUFBSSxDQUFDO0lBRXhFLFlBQ21CLE1BQXVCLEVBQ3ZCLFFBQXVDLEVBQ3ZDLE9BQXdCLEVBQ3hCLFNBQWtDLEVBQ2xDLFlBQXlDLEVBQ3pDLElBQWtCLEVBQ2xCLFdBQXNDLEVBQ3RDLE9BQStCLEVBQy9CLE9BQXdCLEVBQ3hCLE1BQW9CLElBQUksQ0FBQyxHQUFHO1FBVDVCLFdBQU0sR0FBTixNQUFNLENBQWlCO1FBQ3ZCLGFBQVEsR0FBUixRQUFRLENBQStCO1FBQ3ZDLFlBQU8sR0FBUCxPQUFPLENBQWlCO1FBQ3hCLGNBQVMsR0FBVCxTQUFTLENBQXlCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUE2QjtRQUN6QyxTQUFJLEdBQUosSUFBSSxDQUFjO1FBQ2xCLGdCQUFXLEdBQVgsV0FBVyxDQUEyQjtRQUN0QyxZQUFPLEdBQVAsT0FBTyxDQUF3QjtRQUMvQixZQUFPLEdBQVAsT0FBTyxDQUFpQjtRQUN4QixRQUFHLEdBQUgsR0FBRyxDQUF5QjtRQUU3QyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7WUFDckQsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxLQUFLO1lBQ1gsbUJBQW1CLEVBQUUsUUFBUTtZQUM3QixpQkFBaUIsRUFBRSxNQUFNO1lBQ3pCLGNBQWMsRUFBRSxNQUFNO1lBQ3RCLGNBQWMsRUFBRSxDQUFDLEdBQUcsTUFBTTtZQUMxQix3QkFBd0IsRUFDdEIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CO1lBQ3JFLGVBQWUsRUFBRSxLQUFLO1lBQ3RCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsV0FBVyxFQUFFLEtBQUs7WUFDbEIsUUFBUSxFQUFFLENBQUM7b0JBQ1QsSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLEtBQUssRUFBRTt3QkFDTCxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7d0JBQzNCLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQzt3QkFDbkIscUJBQXFCLEVBQUUsQ0FBQyxTQUFTLENBQUM7cUJBQ25DO29CQUNELGdCQUFnQixFQUFFLEtBQUs7b0JBQ3ZCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxNQUFNO29CQUNqQyxJQUFJLEVBQUUsS0FBSztvQkFDWCxPQUFPLEVBQUUsSUFBSTtvQkFDYiwyQkFBMkIsRUFBRSxLQUFLO29CQUNsQyxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsRUFBRSxFQUFFO3dCQUNqQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7NEJBQ2xDLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7d0JBQ3BELENBQUM7d0JBQ0QsVUFBVSxDQUFDLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUM7d0JBQ2xFLE9BQU8sSUFBSSxDQUFDO29CQUNkLENBQUM7b0JBQ0QsV0FBVyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsRUFBRTt3QkFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNyRSxJQUFJLGdCQUFnQixFQUFFLENBQUM7NEJBQ3JCLE9BQU8sZ0JBQWdCLENBQUM7d0JBQzFCLENBQUM7d0JBQ0QsSUFDRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDOytCQUMxRCxVQUFVLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFDOUIsQ0FBQzs0QkFDRCxPQUFPLElBQUksUUFBUSxDQUNqQixVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQ3BFO2dDQUNFLE1BQU0sRUFBRSxHQUFHO2dDQUNYLE9BQU8sRUFBRTtvQ0FDUCxjQUFjLEVBQUUsa0JBQWtCO29DQUNsQyxlQUFlLEVBQUUsVUFBVTtpQ0FDNUI7NkJBQ0YsQ0FDRixDQUFDO3dCQUNKLENBQUM7d0JBQ0QsSUFDRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssS0FBSyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDOytCQUMxRCxVQUFVLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFDL0IsQ0FBQzs0QkFDRCxNQUFNLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQzs0QkFDNUMsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7NEJBQ3RELE9BQU8sSUFBSSxRQUFRLENBQ2pCLFVBQVUsQ0FBQyxNQUFNLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQy9EO2dDQUNFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRztnQ0FDekIsT0FBTyxFQUFFO29DQUNQLGNBQWMsRUFBRSxrQkFBa0I7b0NBQ2xDLGVBQWUsRUFBRSxVQUFVO2lDQUM1Qjs2QkFDRixDQUNGLENBQUM7d0JBQ0osQ0FBQzt3QkFDRCxPQUFPLElBQUksQ0FBQztvQkFDZCxDQUFDO29CQUNELGVBQWUsRUFBRTt3QkFDZixhQUFhLEVBQUUsTUFBTTt3QkFDckIsbUJBQW1CLEVBQUUsSUFBSTt3QkFDekIsY0FBYyxFQUFFLGFBQWE7d0JBQzdCLGlCQUFpQixFQUFFLEVBQUU7d0JBQ3JCLHVCQUF1QixFQUFFLGFBQWE7d0JBQ3RDLHlCQUF5QixFQUFFLGFBQWE7cUJBQ3pDO2lCQUNGLENBQUM7U0FDSCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUs7UUFDaEIsTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLEVBQUUsQ0FBQztnQkFDekUsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQztnQkFDeEUsSUFDRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGtCQUFrQixDQUFDO3VCQUMvQixDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEVBQ3RELENBQUM7b0JBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNSLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFTSxLQUFLLENBQUMsSUFBSTtRQUNmLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDM0IsYUFBYSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsQ0FBQztRQUNELE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRU0sbUJBQW1CLENBQ3hCLFVBQXlFLEVBQ3pFLGNBQXNCO1FBRXRCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sRUFBRSxDQUFDO1FBQ1osQ0FBQztRQUNELE9BQU8sMkJBQTJCLENBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLHVCQUF1QixFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDcEUsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQXlDLENBQzdFLEVBQ0QsVUFBVSxFQUNWLGNBQWMsQ0FDZixDQUFDO0lBQ0osQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFZO1FBQ3ZCLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxFQUFFLFlBQVksQ0FBQyxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUNoRSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztpQkFDL0MsSUFBSSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDO2lCQUNwQyxLQUFLLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNoRCxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQztTQUM1RCxDQUFDLENBQUM7UUFDSCxPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUk7WUFDVixRQUFRO1lBQ1IsYUFBYTtZQUNiLFdBQVcsRUFBRSxhQUFhO1lBQzFCLFVBQVUsRUFBRSxhQUFhO1lBQ3pCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtTQUN6RCxDQUFDO0lBQ0osQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLENBQUMsVUFBVSxDQUViLDZCQUE2QixFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDOUQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlCLE1BQU0sT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7WUFDdEUsT0FBTztnQkFDTCxhQUFhLEVBQUUsSUFBSTtnQkFDbkIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO2dCQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO2FBQzdDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsOEJBQThCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMvRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQ25GLE9BQU87Z0JBQ0wsYUFBYSxFQUFFLElBQUk7Z0JBQ25CLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtnQkFDNUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ3ZDLGlCQUFpQixFQUFFLENBQUMsR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7Z0JBQ2pELHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxzQkFBc0I7YUFDdkQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FFYixtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3BFLElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FFYiwyQkFBMkIsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzVELElBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUViLGlDQUFpQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDbEUsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNsRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztRQUNuRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsbUNBQW1DLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNwRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FDakUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNoQixtQ0FBbUMsQ0FDcEMsQ0FBQztZQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ3RFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FFYixtQ0FBbUMsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQ3BFLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQ3hELE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFDaEIsbUNBQW1DLENBQ3BDLENBQUM7WUFDRixPQUFPLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsVUFBVSxDQUViLG9DQUFvQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDckUsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FDeEQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNoQixvQ0FBb0MsQ0FDckMsQ0FBQztZQUNGLE9BQU8sTUFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsb0NBQW9DLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNyRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLG9DQUFvQyxDQUNyQyxDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsK0JBQStCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNoRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLCtCQUErQixDQUNoQyxDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsK0JBQStCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNoRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLCtCQUErQixDQUNoQyxDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNoRSxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsNkJBQTZCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUM5RCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLDZCQUE2QixDQUM5QixDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsOEJBQThCLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMvRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLDhCQUE4QixDQUMvQixDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxVQUFVLENBRWIsb0NBQW9DLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUNyRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUN4RCxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQ2hCLG9DQUFvQyxDQUNyQyxDQUFDO1lBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUM3RCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxVQUFVLENBR2hCLFNBQTZCLEVBQzdCLFVBR2tDO1FBRWxDLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQy9ELFNBQVMsRUFDVCxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzdCLElBQUksQ0FBQztnQkFDSCxPQUFPLE1BQU0sVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNoRCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hDLENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIn0=
@@ -3,7 +3,6 @@ import { createSha256 } from './classes.storage.js';
3
3
  const mailboxLocalPartRegex = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+$/;
4
4
  const mailboxDomainLabelRegex = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
5
5
  const idRegex = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
6
- const contentTypeRegex = /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+(?:; ?[a-z0-9!#$&^_.+-]+=(?:"[^"\r\n]{1,100}"|[a-z0-9!#$&^_.+-]+))*$/i;
7
6
  const requirePlainRecord = (valueArg, labelArg) => {
8
7
  if (!valueArg
9
8
  || typeof valueArg !== 'object'
@@ -140,177 +139,13 @@ export const normalizeCoreMailGatewayMessage = (valueArg) => {
140
139
  },
141
140
  };
142
141
  };
143
- const normalizeDisplayText = (valueArg, labelArg, maximumBytesArg, allowEmptyArg = false) => {
144
- if (typeof valueArg !== 'string'
145
- || (!allowEmptyArg && valueArg.length === 0)
146
- || valueArg.trim() !== valueArg
147
- || /[\u0000-\u001f\u007f]/.test(valueArg)
148
- || Buffer.byteLength(valueArg, 'utf8') > maximumBytesArg) {
149
- throw new Error(`${labelArg} is invalid.`);
150
- }
151
- return valueArg;
152
- };
153
- const normalizeMailbox = (valueArg, labelArg) => {
154
- const value = requirePlainRecord(valueArg, labelArg);
155
- requireExactKeys(value, ['address'], ['displayName'], labelArg);
156
- return {
157
- address: normalizeCoreMailMailboxAddress(value.address),
158
- ...(value.displayName === undefined
159
- ? {}
160
- : {
161
- displayName: normalizeDisplayText(value.displayName, `${labelArg}.displayName`, 256),
162
- }),
163
- };
164
- };
165
- const normalizeMailboxArray = (valueArg, labelArg, allowEmptyArg = false) => {
166
- if (!Array.isArray(valueArg)
167
- || (!allowEmptyArg && valueArg.length === 0)
168
- || valueArg.length > 100) {
169
- throw new Error(`${labelArg} must be a bounded mailbox array.`);
170
- }
171
- const normalized = valueArg.map((entryArg, indexArg) => normalizeMailbox(entryArg, `${labelArg}[${indexArg}]`));
172
- const addresses = normalized.map((entryArg) => entryArg.address);
173
- if (new Set(addresses).size !== addresses.length) {
174
- throw new Error(`${labelArg} contains duplicate addresses.`);
175
- }
176
- return normalized;
177
- };
178
- const forbiddenHeaderNames = new Set([
179
- 'bcc',
180
- 'cc',
181
- 'content-transfer-encoding',
182
- 'content-type',
183
- 'date',
184
- 'dkim-signature',
185
- 'from',
186
- 'message-id',
187
- 'mime-version',
188
- 'received',
189
- 'reply-to',
190
- 'return-path',
191
- 'subject',
192
- 'to',
193
- ]);
194
- const normalizePart = (valueArg, labelArg) => {
195
- const value = requirePlainRecord(valueArg, labelArg);
196
- requireExactKeys(value, ['partId', 'kind', 'contentType', 'sha256', 'lengthBytes'], ['filename', 'contentId'], labelArg);
197
- if (typeof value.partId !== 'string' || !idRegex.test(value.partId)) {
198
- throw new Error(`${labelArg}.partId is invalid.`);
199
- }
200
- if (value.kind !== 'text' && value.kind !== 'html' && value.kind !== 'attachment') {
201
- throw new Error(`${labelArg}.kind is invalid.`);
202
- }
203
- if (typeof value.contentType !== 'string' || !contentTypeRegex.test(value.contentType)) {
204
- throw new Error(`${labelArg}.contentType is invalid.`);
205
- }
206
- const sha256 = plugins.serveZoneInterfaces.data.normalizeCoreMailSha256(value.sha256);
207
- if (!Number.isSafeInteger(value.lengthBytes) || Number(value.lengthBytes) < 0) {
208
- throw new Error(`${labelArg}.lengthBytes is invalid.`);
209
- }
210
- const lengthBytes = Number(value.lengthBytes);
211
- const maximum = value.kind === 'text'
212
- ? plugins.serveZoneInterfaces.data.coreMailLimits.textPartBytes
213
- : value.kind === 'html'
214
- ? plugins.serveZoneInterfaces.data.coreMailLimits.htmlPartBytes
215
- : plugins.serveZoneInterfaces.data.coreMailLimits.attachmentBytes;
216
- if (lengthBytes > maximum) {
217
- throw new Error(`${labelArg} exceeds its content budget.`);
218
- }
219
- return {
220
- partId: value.partId,
221
- kind: value.kind,
222
- contentType: value.contentType,
223
- sha256,
224
- lengthBytes,
225
- ...(value.filename === undefined
226
- ? {}
227
- : {
228
- filename: normalizeDisplayText(value.filename, `${labelArg}.filename`, 512),
229
- }),
230
- ...(value.contentId === undefined
231
- ? {}
232
- : {
233
- contentId: normalizeDisplayText(value.contentId, `${labelArg}.contentId`, 256),
234
- }),
235
- };
236
- };
237
142
  export const normalizeCoreMailOutboundMessage = (valueArg, bindingArg) => {
238
- const value = requirePlainRecord(valueArg, 'message');
239
- requireExactKeys(value, ['sender', 'recipients', 'subject', 'parts'], ['replyTo', 'headers'], 'message');
240
- const sender = normalizeMailbox(value.sender, 'message.sender');
241
- if (!bindingArg.allowedSenders.includes(sender.address)) {
143
+ const message = plugins.serveZoneInterfaces.data
144
+ .normalizeCoreMailOutboundMessageDescriptor(valueArg);
145
+ if (!bindingArg.allowedSenders.includes(message.sender.address)) {
242
146
  throw new Error('CoreMail sender is not authorized by the binding.');
243
147
  }
244
- const recipientsRecord = requirePlainRecord(value.recipients, 'message.recipients');
245
- requireExactKeys(recipientsRecord, ['to'], ['cc', 'bcc'], 'message.recipients');
246
- const to = normalizeMailboxArray(recipientsRecord.to, 'message.recipients.to');
247
- const cc = recipientsRecord.cc === undefined
248
- ? undefined
249
- : normalizeMailboxArray(recipientsRecord.cc, 'message.recipients.cc', true);
250
- const bcc = recipientsRecord.bcc === undefined
251
- ? undefined
252
- : normalizeMailboxArray(recipientsRecord.bcc, 'message.recipients.bcc', true);
253
- const allRecipientAddresses = [...to, ...(cc ?? []), ...(bcc ?? [])]
254
- .map((entryArg) => entryArg.address);
255
- if (allRecipientAddresses.length === 0
256
- || new Set(allRecipientAddresses).size !== allRecipientAddresses.length) {
257
- throw new Error('CoreMail recipients must be globally unique and non-empty.');
258
- }
259
- const partsValue = value.parts;
260
- if (!Array.isArray(partsValue) || partsValue.length === 0) {
261
- throw new Error('CoreMail message requires at least one part.');
262
- }
263
- const parts = partsValue.map((entryArg, indexArg) => normalizePart(entryArg, `message.parts[${indexArg}]`));
264
- if (new Set(parts.map((partArg) => partArg.partId)).size !== parts.length
265
- || parts.filter((partArg) => partArg.kind === 'text').length > 1
266
- || parts.filter((partArg) => partArg.kind === 'html').length > 1
267
- || parts.filter((partArg) => partArg.kind === 'attachment').length >
268
- plugins.serveZoneInterfaces.data.coreMailLimits.attachmentCount
269
- || parts
270
- .filter((partArg) => partArg.kind === 'attachment')
271
- .reduce((totalArg, partArg) => totalArg + partArg.lengthBytes, 0) >
272
- plugins.serveZoneInterfaces.data.coreMailLimits.aggregateAttachmentBytes) {
273
- throw new Error('CoreMail message part set is invalid.');
274
- }
275
- const headers = value.headers === undefined
276
- ? undefined
277
- : (() => {
278
- if (!Array.isArray(value.headers) || value.headers.length > 32) {
279
- throw new Error('CoreMail custom headers are invalid.');
280
- }
281
- const seen = new Set();
282
- return value.headers.map((entryArg, indexArg) => {
283
- const record = requirePlainRecord(entryArg, `message.headers[${indexArg}]`);
284
- requireExactKeys(record, ['name', 'value'], [], `message.headers[${indexArg}]`);
285
- if (typeof record.name !== 'string'
286
- || !/^[A-Za-z][A-Za-z0-9-]{0,62}$/.test(record.name)) {
287
- throw new Error('CoreMail header name is invalid.');
288
- }
289
- const lowerName = record.name.toLowerCase();
290
- if (forbiddenHeaderNames.has(lowerName) || seen.has(lowerName)) {
291
- throw new Error('CoreMail header is transport-owned or duplicated.');
292
- }
293
- seen.add(lowerName);
294
- return {
295
- name: record.name,
296
- value: normalizeDisplayText(record.value, `message.headers[${indexArg}].value`, 768, true),
297
- };
298
- });
299
- })();
300
- return {
301
- sender,
302
- recipients: {
303
- to,
304
- ...(cc ? { cc } : {}),
305
- ...(bcc ? { bcc } : {}),
306
- },
307
- ...(value.replyTo === undefined
308
- ? {}
309
- : { replyTo: normalizeMailbox(value.replyTo, 'message.replyTo') }),
310
- subject: normalizeDisplayText(value.subject, 'message.subject', 768, true),
311
- ...(headers ? { headers } : {}),
312
- parts,
313
- };
148
+ return message;
314
149
  };
315
150
  export const createCoreMailSubmissionDigest = (idempotencyKeyArg, messageArg) => {
316
151
  if (!idRegex.test(idempotencyKeyArg)) {
@@ -322,4 +157,4 @@ export const createCoreMailSubmissionDigest = (idempotencyKeyArg, messageArg) =>
322
157
  message: messageArg,
323
158
  }));
324
159
  };
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwudmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NvcmVtYWlsLnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBTXBELE1BQU0scUJBQXFCLEdBQUcsaUNBQWlDLENBQUM7QUFDaEUsTUFBTSx1QkFBdUIsR0FBRyx3Q0FBd0MsQ0FBQztBQUN6RSxNQUFNLE9BQU8sR0FBRyxxQ0FBcUMsQ0FBQztBQUN0RCxNQUFNLGdCQUFnQixHQUNwQiw4R0FBOEcsQ0FBQztBQUVqSCxNQUFNLGtCQUFrQixHQUFHLENBQ3pCLFFBQWlCLEVBQ2pCLFFBQWdCLEVBQ1MsRUFBRTtJQUMzQixJQUNFLENBQUMsUUFBUTtXQUNOLE9BQU8sUUFBUSxLQUFLLFFBQVE7V0FDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7V0FDdkIsQ0FDRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO2VBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUM1QyxFQUNELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLFFBQW1DLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixTQUFrQyxFQUNsQyxXQUFxQixFQUNyQixXQUFxQixFQUNyQixRQUFnQixFQUNWLEVBQUU7SUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FB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
160
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZW1haWwudmFsaWRhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NvcmVtYWlsLnZhbGlkYXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBSXBELE1BQU0scUJBQXFCLEdBQUcsaUNBQWlDLENBQUM7QUFDaEUsTUFBTSx1QkFBdUIsR0FBRyx3Q0FBd0MsQ0FBQztBQUN6RSxNQUFNLE9BQU8sR0FBRyxxQ0FBcUMsQ0FBQztBQUV0RCxNQUFNLGtCQUFrQixHQUFHLENBQ3pCLFFBQWlCLEVBQ2pCLFFBQWdCLEVBQ1MsRUFBRTtJQUMzQixJQUNFLENBQUMsUUFBUTtXQUNOLE9BQU8sUUFBUSxLQUFLLFFBQVE7V0FDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7V0FDdkIsQ0FDRCxNQUFNLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxTQUFTO2VBQ2pELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUM1QyxFQUNELENBQUM7UUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLEdBQUcsUUFBUSwwQkFBMEIsQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFDRCxPQUFPLFFBQW1DLENBQUM7QUFDN0MsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxDQUN2QixTQUFrQyxFQUNsQyxXQUFxQixFQUNyQixXQUFxQixFQUNyQixRQUFnQixFQUNWLEVBQUU7SUFDUixNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsV0FBVyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMxRCxJQUNFLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serve.zone/coremail",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Authenticated mail persistence and delivery orchestration for serve.zone workloads.",
5
5
  "main": "dist_ts/index.js",
6
6
  "typings": "dist_ts/index.d.ts",
@@ -20,12 +20,12 @@
20
20
  "@api.global/typedrequest": "^3.7.0",
21
21
  "@api.global/typedrequest-interfaces": "^4.0.0",
22
22
  "@api.global/typedserver": "^8.10.0",
23
- "@api.global/typedsocket": "^5.1.0",
23
+ "@api.global/typedsocket": "^5.1.1",
24
24
  "@push.rocks/projectinfo": "^5.1.0",
25
25
  "@push.rocks/smartbucket": "^4.11.0",
26
26
  "@push.rocks/smartdata": "^10.4.0",
27
27
  "@push.rocks/smartlog": "^3.2.2",
28
- "@serve.zone/interfaces": "^22.0.0",
28
+ "@serve.zone/interfaces": "^23.0.1",
29
29
  "argon2": "^0.45.1"
30
30
  },
31
31
  "files": [
package/readme.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # @serve.zone/coremail
2
2
 
3
3
  CoreMail is the authenticated mail persistence and delivery-orchestration
4
- service for serve.zone workloads. Workloads use `@serve.zone/platformclient`;
5
- CoreMail talks directly to the platform mail gateway implemented by dcrouter.
6
- Coreflow provisions and reconciles bindings but does not proxy message traffic.
4
+ service for serve.zone workloads. End-to-end platform integration is not
5
+ released yet: `@serve.zone/platformclient` still needs the workload connector,
6
+ dcrouter still needs the gateway handlers, and Coreflow still needs to provision
7
+ and reconcile bindings without proxying message traffic.
7
8
 
8
9
  ## Installation
9
10
 
@@ -35,6 +36,8 @@ directly.
35
36
 
36
37
  ## Architecture
37
38
 
39
+ The required, unreleased integration is:
40
+
38
41
  ```text
39
42
  workload
40
43
  └─ @serve.zone/platformclient
@@ -46,7 +49,7 @@ workload
46
49
 
47
50
  dcrouter ── grant-authorized HTTPS transfers ── CoreMail transfer origin
48
51
 
49
- Cloudly desired state ── Coreflow reconciliation ── CoreMail
52
+ Cloudly desired state ── Coreflow reconciliation ── CoreMail (required integration)
50
53
  ```
51
54
 
52
55
  CoreMail enforces these boundaries:
@@ -85,9 +88,21 @@ deadlines are enforced by SmartServe.
85
88
 
86
89
  ## Configuration
87
90
 
88
- Coreflow and the deployment secret foundation provide runtime configuration.
89
- Malformed startup configuration terminates startup. Missing desired-state secret
90
- references keep the affected gateway or cursor operation unavailable.
91
+ CoreMail requires Coreflow and the deployment secret foundation to provide
92
+ runtime configuration. For Interfaces v23 secret material, the workload must be
93
+ launched through `workloadinit` protocol v1. The platform integration must write
94
+ the verified map and secret files; `workloadinit` injects their exact values into
95
+ the process environment immediately before executing CoreMail. CoreMail does not
96
+ fetch, decrypt, or persist runtime secret material itself. Until the
97
+ PlatformClient, dcrouter, and Coreflow integrations are released, a platform
98
+ CoreMail deployment is not ready. Malformed startup configuration terminates
99
+ startup. Missing desired-state secret references keep the affected gateway or
100
+ cursor operation unavailable.
101
+
102
+ ```text
103
+ /opt/serve.zone/runtime-assets/workloadinit/v1/workloadinit run \
104
+ --map /run/serve.zone/workloadinit-map-v1.json -- node cli.js
105
+ ```
91
106
 
92
107
  | Variable | Purpose |
93
108
  | --- | --- |
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@serve.zone/coremail',
6
- version: '1.0.0',
6
+ version: '1.0.1',
7
7
  description: 'Authenticated mail persistence and delivery orchestration for serve.zone workloads.'
8
8
  }
@@ -27,7 +27,7 @@ interface ICoreMailTypedTools {
27
27
  localData: Record<string, unknown>;
28
28
  }
29
29
 
30
- const privacySafeError = (
30
+ export const privacySafeError = (
31
31
  errorArg: unknown,
32
32
  ): plugins.typedrequest.TypedResponseError => {
33
33
  let code: TErrorCode = 'INVALID_REQUEST';
@@ -46,6 +46,10 @@ const privacySafeError = (
46
46
  ? {}
47
47
  : { retryAfterMs: errorArg.retryAfterMs }),
48
48
  } satisfies plugins.serveZoneInterfaces.data.ICoreMailErrorData);
49
+ } else if (
50
+ errorArg instanceof plugins.serveZoneInterfaces.data.CoreMailContractError
51
+ ) {
52
+ code = errorArg.code;
49
53
  } else if (
50
54
  errorArg instanceof Error
51
55
  && errorArg.message.includes('gateway')
@@ -2,14 +2,10 @@ import * as plugins from './plugins.js';
2
2
  import { createSha256 } from './classes.storage.js';
3
3
 
4
4
  type TMessage = plugins.serveZoneInterfaces.data.ICoreMailOutboundMessageDescriptor;
5
- type TMailbox = plugins.serveZoneInterfaces.data.ICoreMailMailbox;
6
- type TPart = plugins.serveZoneInterfaces.data.ICoreMailContentDescriptor;
7
5
 
8
6
  const mailboxLocalPartRegex = /^[a-z0-9!#$%&'*+/=?^_`{|}~.-]+$/;
9
7
  const mailboxDomainLabelRegex = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
10
8
  const idRegex = /^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/;
11
- const contentTypeRegex =
12
- /^[a-z0-9!#$&^_.+-]+\/[a-z0-9!#$&^_.+-]+(?:; ?[a-z0-9!#$&^_.+-]+=(?:"[^"\r\n]{1,100}"|[a-z0-9!#$&^_.+-]+))*$/i;
13
9
 
14
10
  const requirePlainRecord = (
15
11
  valueArg: unknown,
@@ -200,235 +196,16 @@ export const normalizeCoreMailGatewayMessage = (
200
196
  };
201
197
  };
202
198
 
203
- const normalizeDisplayText = (
204
- valueArg: unknown,
205
- labelArg: string,
206
- maximumBytesArg: number,
207
- allowEmptyArg = false,
208
- ): string => {
209
- if (
210
- typeof valueArg !== 'string'
211
- || (!allowEmptyArg && valueArg.length === 0)
212
- || valueArg.trim() !== valueArg
213
- || /[\u0000-\u001f\u007f]/.test(valueArg)
214
- || Buffer.byteLength(valueArg, 'utf8') > maximumBytesArg
215
- ) {
216
- throw new Error(`${labelArg} is invalid.`);
217
- }
218
- return valueArg;
219
- };
220
-
221
- const normalizeMailbox = (valueArg: unknown, labelArg: string): TMailbox => {
222
- const value = requirePlainRecord(valueArg, labelArg);
223
- requireExactKeys(value, ['address'], ['displayName'], labelArg);
224
- return {
225
- address: normalizeCoreMailMailboxAddress(value.address),
226
- ...(value.displayName === undefined
227
- ? {}
228
- : {
229
- displayName: normalizeDisplayText(
230
- value.displayName,
231
- `${labelArg}.displayName`,
232
- 256,
233
- ),
234
- }),
235
- };
236
- };
237
-
238
- const normalizeMailboxArray = (
239
- valueArg: unknown,
240
- labelArg: string,
241
- allowEmptyArg = false,
242
- ): TMailbox[] => {
243
- if (
244
- !Array.isArray(valueArg)
245
- || (!allowEmptyArg && valueArg.length === 0)
246
- || valueArg.length > 100
247
- ) {
248
- throw new Error(`${labelArg} must be a bounded mailbox array.`);
249
- }
250
- const normalized = valueArg.map((entryArg, indexArg) =>
251
- normalizeMailbox(entryArg, `${labelArg}[${indexArg}]`)
252
- );
253
- const addresses = normalized.map((entryArg) => entryArg.address);
254
- if (new Set(addresses).size !== addresses.length) {
255
- throw new Error(`${labelArg} contains duplicate addresses.`);
256
- }
257
- return normalized;
258
- };
259
-
260
- const forbiddenHeaderNames = new Set([
261
- 'bcc',
262
- 'cc',
263
- 'content-transfer-encoding',
264
- 'content-type',
265
- 'date',
266
- 'dkim-signature',
267
- 'from',
268
- 'message-id',
269
- 'mime-version',
270
- 'received',
271
- 'reply-to',
272
- 'return-path',
273
- 'subject',
274
- 'to',
275
- ]);
276
-
277
- const normalizePart = (valueArg: unknown, labelArg: string): TPart => {
278
- const value = requirePlainRecord(valueArg, labelArg);
279
- requireExactKeys(
280
- value,
281
- ['partId', 'kind', 'contentType', 'sha256', 'lengthBytes'],
282
- ['filename', 'contentId'],
283
- labelArg,
284
- );
285
- if (typeof value.partId !== 'string' || !idRegex.test(value.partId)) {
286
- throw new Error(`${labelArg}.partId is invalid.`);
287
- }
288
- if (value.kind !== 'text' && value.kind !== 'html' && value.kind !== 'attachment') {
289
- throw new Error(`${labelArg}.kind is invalid.`);
290
- }
291
- if (typeof value.contentType !== 'string' || !contentTypeRegex.test(value.contentType)) {
292
- throw new Error(`${labelArg}.contentType is invalid.`);
293
- }
294
- const sha256 = plugins.serveZoneInterfaces.data.normalizeCoreMailSha256(value.sha256);
295
- if (!Number.isSafeInteger(value.lengthBytes) || Number(value.lengthBytes) < 0) {
296
- throw new Error(`${labelArg}.lengthBytes is invalid.`);
297
- }
298
- const lengthBytes = Number(value.lengthBytes);
299
- const maximum = value.kind === 'text'
300
- ? plugins.serveZoneInterfaces.data.coreMailLimits.textPartBytes
301
- : value.kind === 'html'
302
- ? plugins.serveZoneInterfaces.data.coreMailLimits.htmlPartBytes
303
- : plugins.serveZoneInterfaces.data.coreMailLimits.attachmentBytes;
304
- if (lengthBytes > maximum) {
305
- throw new Error(`${labelArg} exceeds its content budget.`);
306
- }
307
- return {
308
- partId: value.partId,
309
- kind: value.kind,
310
- contentType: value.contentType,
311
- sha256,
312
- lengthBytes,
313
- ...(value.filename === undefined
314
- ? {}
315
- : {
316
- filename: normalizeDisplayText(
317
- value.filename,
318
- `${labelArg}.filename`,
319
- 512,
320
- ),
321
- }),
322
- ...(value.contentId === undefined
323
- ? {}
324
- : {
325
- contentId: normalizeDisplayText(
326
- value.contentId,
327
- `${labelArg}.contentId`,
328
- 256,
329
- ),
330
- }),
331
- };
332
- };
333
-
334
199
  export const normalizeCoreMailOutboundMessage = (
335
200
  valueArg: unknown,
336
201
  bindingArg: plugins.serveZoneInterfaces.data.ICoreMailBindingDesiredState,
337
202
  ): TMessage => {
338
- const value = requirePlainRecord(valueArg, 'message');
339
- requireExactKeys(
340
- value,
341
- ['sender', 'recipients', 'subject', 'parts'],
342
- ['replyTo', 'headers'],
343
- 'message',
344
- );
345
- const sender = normalizeMailbox(value.sender, 'message.sender');
346
- if (!bindingArg.allowedSenders.includes(sender.address)) {
203
+ const message = plugins.serveZoneInterfaces.data
204
+ .normalizeCoreMailOutboundMessageDescriptor(valueArg);
205
+ if (!bindingArg.allowedSenders.includes(message.sender.address)) {
347
206
  throw new Error('CoreMail sender is not authorized by the binding.');
348
207
  }
349
- const recipientsRecord = requirePlainRecord(value.recipients, 'message.recipients');
350
- requireExactKeys(recipientsRecord, ['to'], ['cc', 'bcc'], 'message.recipients');
351
- const to = normalizeMailboxArray(recipientsRecord.to, 'message.recipients.to');
352
- const cc = recipientsRecord.cc === undefined
353
- ? undefined
354
- : normalizeMailboxArray(recipientsRecord.cc, 'message.recipients.cc', true);
355
- const bcc = recipientsRecord.bcc === undefined
356
- ? undefined
357
- : normalizeMailboxArray(recipientsRecord.bcc, 'message.recipients.bcc', true);
358
- const allRecipientAddresses = [...to, ...(cc ?? []), ...(bcc ?? [])]
359
- .map((entryArg) => entryArg.address);
360
- if (
361
- allRecipientAddresses.length === 0
362
- || new Set(allRecipientAddresses).size !== allRecipientAddresses.length
363
- ) {
364
- throw new Error('CoreMail recipients must be globally unique and non-empty.');
365
- }
366
- const partsValue = value.parts;
367
- if (!Array.isArray(partsValue) || partsValue.length === 0) {
368
- throw new Error('CoreMail message requires at least one part.');
369
- }
370
- const parts = partsValue.map((entryArg, indexArg) =>
371
- normalizePart(entryArg, `message.parts[${indexArg}]`)
372
- );
373
- if (
374
- new Set(parts.map((partArg) => partArg.partId)).size !== parts.length
375
- || parts.filter((partArg) => partArg.kind === 'text').length > 1
376
- || parts.filter((partArg) => partArg.kind === 'html').length > 1
377
- || parts.filter((partArg) => partArg.kind === 'attachment').length >
378
- plugins.serveZoneInterfaces.data.coreMailLimits.attachmentCount
379
- || parts
380
- .filter((partArg) => partArg.kind === 'attachment')
381
- .reduce((totalArg, partArg) => totalArg + partArg.lengthBytes, 0) >
382
- plugins.serveZoneInterfaces.data.coreMailLimits.aggregateAttachmentBytes
383
- ) {
384
- throw new Error('CoreMail message part set is invalid.');
385
- }
386
- const headers = value.headers === undefined
387
- ? undefined
388
- : (() => {
389
- if (!Array.isArray(value.headers) || value.headers.length > 32) {
390
- throw new Error('CoreMail custom headers are invalid.');
391
- }
392
- const seen = new Set<string>();
393
- return value.headers.map((entryArg, indexArg) => {
394
- const record = requirePlainRecord(entryArg, `message.headers[${indexArg}]`);
395
- requireExactKeys(record, ['name', 'value'], [], `message.headers[${indexArg}]`);
396
- if (
397
- typeof record.name !== 'string'
398
- || !/^[A-Za-z][A-Za-z0-9-]{0,62}$/.test(record.name)
399
- ) {
400
- throw new Error('CoreMail header name is invalid.');
401
- }
402
- const lowerName = record.name.toLowerCase();
403
- if (forbiddenHeaderNames.has(lowerName) || seen.has(lowerName)) {
404
- throw new Error('CoreMail header is transport-owned or duplicated.');
405
- }
406
- seen.add(lowerName);
407
- return {
408
- name: record.name,
409
- value: normalizeDisplayText(
410
- record.value,
411
- `message.headers[${indexArg}].value`,
412
- 768,
413
- true,
414
- ),
415
- };
416
- });
417
- })();
418
- return {
419
- sender,
420
- recipients: {
421
- to,
422
- ...(cc ? { cc } : {}),
423
- ...(bcc ? { bcc } : {}),
424
- },
425
- ...(value.replyTo === undefined
426
- ? {}
427
- : { replyTo: normalizeMailbox(value.replyTo, 'message.replyTo') }),
428
- subject: normalizeDisplayText(value.subject, 'message.subject', 768, true),
429
- ...(headers ? { headers } : {}),
430
- parts,
431
- };
208
+ return message;
432
209
  };
433
210
 
434
211
  export const createCoreMailSubmissionDigest = (