@serve.zone/coremail 1.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/.smartconfig.json +50 -0
- package/changelog.md +10 -0
- package/cli.js +4 -0
- package/dist_ts/00_commitinfo_data.d.ts +8 -0
- package/dist_ts/00_commitinfo_data.js +9 -0
- package/dist_ts/classes.auth.d.ts +45 -0
- package/dist_ts/classes.auth.js +204 -0
- package/dist_ts/classes.config.d.ts +2 -0
- package/dist_ts/classes.config.js +72 -0
- package/dist_ts/classes.coremail.d.ts +41 -0
- package/dist_ts/classes.coremail.js +155 -0
- package/dist_ts/classes.desiredstate.d.ts +40 -0
- package/dist_ts/classes.desiredstate.js +382 -0
- package/dist_ts/classes.gateway.d.ts +62 -0
- package/dist_ts/classes.gateway.js +669 -0
- package/dist_ts/classes.inbound.d.ts +49 -0
- package/dist_ts/classes.inbound.js +702 -0
- package/dist_ts/classes.maintenance.d.ts +16 -0
- package/dist_ts/classes.maintenance.js +339 -0
- package/dist_ts/classes.models.d.ts +161 -0
- package/dist_ts/classes.models.js +595 -0
- package/dist_ts/classes.server.d.ts +40 -0
- package/dist_ts/classes.server.js +309 -0
- package/dist_ts/classes.storage.d.ts +32 -0
- package/dist_ts/classes.storage.js +317 -0
- package/dist_ts/classes.submissions.d.ts +33 -0
- package/dist_ts/classes.submissions.js +385 -0
- package/dist_ts/classes.transfer.d.ts +41 -0
- package/dist_ts/classes.transfer.js +289 -0
- package/dist_ts/coremail.cursor.d.ts +20 -0
- package/dist_ts/coremail.cursor.js +191 -0
- package/dist_ts/coremail.log.d.ts +3 -0
- package/dist_ts/coremail.log.js +11 -0
- package/dist_ts/coremail.mime.d.ts +8 -0
- package/dist_ts/coremail.mime.js +63 -0
- package/dist_ts/coremail.persistence.d.ts +148 -0
- package/dist_ts/coremail.persistence.js +695 -0
- package/dist_ts/coremail.quota.d.ts +29 -0
- package/dist_ts/coremail.quota.js +149 -0
- package/dist_ts/coremail.selectors.d.ts +3 -0
- package/dist_ts/coremail.selectors.js +21 -0
- package/dist_ts/coremail.validation.d.ts +9 -0
- package/dist_ts/coremail.validation.js +325 -0
- package/dist_ts/index.d.ts +4 -0
- package/dist_ts/index.js +39 -0
- package/dist_ts/interfaces.d.ts +92 -0
- package/dist_ts/interfaces.js +2 -0
- package/dist_ts/plugins.d.ts +11 -0
- package/dist_ts/plugins.js +12 -0
- package/license.md +19 -0
- package/package.json +48 -0
- package/readme.md +199 -0
- package/ts/00_commitinfo_data.ts +8 -0
- package/ts/classes.auth.ts +321 -0
- package/ts/classes.config.ts +104 -0
- package/ts/classes.coremail.ts +249 -0
- package/ts/classes.desiredstate.ts +508 -0
- package/ts/classes.gateway.ts +811 -0
- package/ts/classes.inbound.ts +898 -0
- package/ts/classes.maintenance.ts +335 -0
- package/ts/classes.models.ts +530 -0
- package/ts/classes.server.ts +444 -0
- package/ts/classes.storage.ts +448 -0
- package/ts/classes.submissions.ts +554 -0
- package/ts/classes.transfer.ts +379 -0
- package/ts/coremail.cursor.ts +328 -0
- package/ts/coremail.log.ts +21 -0
- package/ts/coremail.mime.ts +94 -0
- package/ts/coremail.persistence.ts +1156 -0
- package/ts/coremail.quota.ts +214 -0
- package/ts/coremail.selectors.ts +35 -0
- package/ts/coremail.validation.ts +446 -0
- package/ts/index.ts +38 -0
- package/ts/interfaces.ts +109 -0
- package/ts/plugins.ts +11 -0
package/ts/index.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { CoreMail } from './classes.coremail.js';
|
|
2
|
+
|
|
3
|
+
export { CoreMail } from './classes.coremail.js';
|
|
4
|
+
export { readCoreMailConfig } from './classes.config.js';
|
|
5
|
+
export type * from './interfaces.js';
|
|
6
|
+
|
|
7
|
+
export const runCli = async (): Promise<void> => {
|
|
8
|
+
const coreMail = new CoreMail();
|
|
9
|
+
let stopping = false;
|
|
10
|
+
const stop = async (): Promise<void> => {
|
|
11
|
+
if (stopping) return;
|
|
12
|
+
stopping = true;
|
|
13
|
+
process.off('SIGINT', onSigint);
|
|
14
|
+
process.off('SIGTERM', onSigterm);
|
|
15
|
+
try {
|
|
16
|
+
await coreMail.stop();
|
|
17
|
+
process.exitCode = 0;
|
|
18
|
+
} catch {
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const onSigint = () => {
|
|
23
|
+
void stop();
|
|
24
|
+
};
|
|
25
|
+
const onSigterm = () => {
|
|
26
|
+
void stop();
|
|
27
|
+
};
|
|
28
|
+
process.on('SIGINT', onSigint);
|
|
29
|
+
process.on('SIGTERM', onSigterm);
|
|
30
|
+
try {
|
|
31
|
+
await coreMail.start();
|
|
32
|
+
} catch (error) {
|
|
33
|
+
process.off('SIGINT', onSigint);
|
|
34
|
+
process.off('SIGTERM', onSigterm);
|
|
35
|
+
await coreMail.stop().catch(() => undefined);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
};
|
package/ts/interfaces.ts
ADDED
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import type * as plugins from './plugins.js';
|
|
2
|
+
|
|
3
|
+
export type TCoreMailSessionKind = 'control' | 'workload';
|
|
4
|
+
|
|
5
|
+
export interface ICoreMailReplicaRuntime {
|
|
6
|
+
taskId: string;
|
|
7
|
+
serviceId: string;
|
|
8
|
+
rolloutId: string;
|
|
9
|
+
rolloutGeneration: number;
|
|
10
|
+
imageDigest: plugins.serveZoneInterfaces.data.TCoreMailSha256;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface ICoreMailConfig {
|
|
14
|
+
port: number;
|
|
15
|
+
hostnames: string[];
|
|
16
|
+
mongoDescriptor: {
|
|
17
|
+
mongoDbUrl: string;
|
|
18
|
+
mongoDbName: string;
|
|
19
|
+
maxPoolSize: number;
|
|
20
|
+
maxIdleTimeMS: number;
|
|
21
|
+
serverSelectionTimeoutMS: number;
|
|
22
|
+
socketTimeoutMS: number;
|
|
23
|
+
};
|
|
24
|
+
storageDescriptor: Record<string, unknown>;
|
|
25
|
+
bucketName: string;
|
|
26
|
+
controlBootstrap: plugins.serveZoneInterfaces.data.ICoreMailControlBootstrap;
|
|
27
|
+
resolveRuntimeSecret: (secretKeyArg: string) => string;
|
|
28
|
+
replica: ICoreMailReplicaRuntime;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface ICoreMailControlSession {
|
|
32
|
+
kind: 'control';
|
|
33
|
+
peerId: string;
|
|
34
|
+
credentialId: string;
|
|
35
|
+
credentialVersion: number;
|
|
36
|
+
authenticatedAt: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface ICoreMailWorkloadSession {
|
|
40
|
+
kind: 'workload';
|
|
41
|
+
peerId: string;
|
|
42
|
+
tenantId: string;
|
|
43
|
+
serviceId: string;
|
|
44
|
+
bindingId: string;
|
|
45
|
+
bindingRevision: number;
|
|
46
|
+
configEpoch: number;
|
|
47
|
+
credentialId: string;
|
|
48
|
+
credentialVersion: number;
|
|
49
|
+
bindingState: 'active' | 'draining';
|
|
50
|
+
capabilities: plugins.serveZoneInterfaces.data.TCoreMailCapability[];
|
|
51
|
+
allowedOperations: plugins.serveZoneInterfaces.data.TCoreMailWorkloadOperation[];
|
|
52
|
+
coreMailTransferOrigin: string;
|
|
53
|
+
authenticatedAt: number;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export type TCoreMailSession = ICoreMailControlSession | ICoreMailWorkloadSession;
|
|
57
|
+
|
|
58
|
+
export type TTransferAuthorityKind = 'control' | 'gateway' | 'workload';
|
|
59
|
+
export type TTransferGrantPurpose =
|
|
60
|
+
| 'desired-state-upload'
|
|
61
|
+
| 'outbound-part-upload'
|
|
62
|
+
| 'outbound-mime-download'
|
|
63
|
+
| 'inbound-mime-upload'
|
|
64
|
+
| 'inbound-mime-download';
|
|
65
|
+
|
|
66
|
+
export interface ITransferAuthority {
|
|
67
|
+
kind: TTransferAuthorityKind;
|
|
68
|
+
tenantId: string;
|
|
69
|
+
serviceId: string;
|
|
70
|
+
bindingId: string;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface ISubmissionPartRecord {
|
|
74
|
+
partId: string;
|
|
75
|
+
kind: plugins.serveZoneInterfaces.data.TCoreMailPartKind;
|
|
76
|
+
contentType: string;
|
|
77
|
+
filename?: string;
|
|
78
|
+
contentId?: string;
|
|
79
|
+
sha256: plugins.serveZoneInterfaces.data.TCoreMailSha256;
|
|
80
|
+
lengthBytes: number;
|
|
81
|
+
objectKey: string;
|
|
82
|
+
state: 'missing' | 'uploading' | 'complete' | 'failed';
|
|
83
|
+
grantId?: string;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export interface ICoreMailReadiness {
|
|
87
|
+
live: boolean;
|
|
88
|
+
database: boolean;
|
|
89
|
+
objectStorage: boolean;
|
|
90
|
+
exactUpload: boolean;
|
|
91
|
+
exactPurge: boolean;
|
|
92
|
+
controlBootstrap: boolean;
|
|
93
|
+
gateway: boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export interface ICoreMailAuthLimiterSnapshot {
|
|
97
|
+
inFlight: number;
|
|
98
|
+
tokens: number;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export interface ICoreMailPeer {
|
|
102
|
+
id: string;
|
|
103
|
+
data: Map<string, unknown>;
|
|
104
|
+
close(code?: number, reason?: string): void;
|
|
105
|
+
terminate(): void;
|
|
106
|
+
context: {
|
|
107
|
+
state: Record<string, unknown>;
|
|
108
|
+
};
|
|
109
|
+
}
|
package/ts/plugins.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export * as typedrequest from '@api.global/typedrequest';
|
|
2
|
+
export * as typedrequestInterfaces from '@api.global/typedrequest-interfaces';
|
|
3
|
+
export * as typedserver from '@api.global/typedserver';
|
|
4
|
+
export * as typedsocket from '@api.global/typedsocket';
|
|
5
|
+
export * as projectinfo from '@push.rocks/projectinfo';
|
|
6
|
+
export * as smartbucket from '@push.rocks/smartbucket';
|
|
7
|
+
export * as smartdata from '@push.rocks/smartdata';
|
|
8
|
+
export * as smartlog from '@push.rocks/smartlog';
|
|
9
|
+
export * as serveZoneInterfaces from '@serve.zone/interfaces';
|
|
10
|
+
export * as argon2 from 'argon2';
|
|
11
|
+
export * as nodeCrypto from 'node:crypto';
|