Compare commits

...

4 Commits

Author SHA1 Message Date
2ecb2f3aa0 1.0.5 2024-02-16 20:42:26 +01:00
01dcdebda5 fix(core): update 2024-02-16 20:42:26 +01:00
2adcc249de 1.0.4 2024-02-16 13:41:05 +01:00
543e696bfc fix(core): update 2024-02-16 13:41:04 +01:00
20 changed files with 1548 additions and 228 deletions

View File

@ -1,6 +1,6 @@
{
"name": "@serve.zone/platformservice",
"version": "1.0.3",
"version": "1.0.5",
"description": "contains the platformservice container with mail, sms, letter, ai services.",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
@ -23,6 +23,9 @@
"dependencies": {
"@api.global/typedrequest": "^3.0.4",
"@api.global/typedserver": "^3.0.20",
"@api.global/typedsocket": "^3.0.0",
"@apiclient.xyz/cloudflare": "^6.0.3",
"@apiclient.xyz/letterxpress": "^1.0.16",
"@push.rocks/projectinfo": "^5.0.1",
"@push.rocks/qenv": "^6.0.5",
"@push.rocks/smartdata": "^5.0.7",
@ -30,8 +33,14 @@
"@push.rocks/smartlog": "^3.0.3",
"@push.rocks/smartmail": "^1.0.24",
"@push.rocks/smartpath": "^5.0.5",
"@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartrequest": "^2.0.21",
"@push.rocks/smartrx": "^3.0.7",
"@push.rocks/smartstate": "^2.0.0",
"@serve.zone/interfaces": "^1.0.34"
"@serve.zone/interfaces": "^1.0.34",
"@tsclass/tsclass": "^4.0.51",
"mailauth": "^4.6.5",
"mailparser": "^3.6.7",
"uuid": "^9.0.1"
}
}

1517
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -3,6 +3,6 @@
*/
export const commitinfo = {
name: '@serve.zone/platformservice',
version: '1.0.3',
version: '1.0.5',
description: 'contains the platformservice container with mail, sms, letter, ai services.'
}

View File

@ -1,6 +1,10 @@
import * as plugins from './plugins.js';
import * as paths from './paths.js';
import { PlatformServiceDb } from './classes.platformservicedb.js'
import { EmailService } from './email/email.classes.emailservice.js';
import { SmsService } from './sms/smsservice.js';
import { LetterService } from './letter/classes.letterservice.js';
import { MtaService } from './mta/mta.classes.mta.js';
export class SzPlatformService {
public projectinfo: plugins.projectinfo.ProjectInfo;
@ -10,9 +14,28 @@ export class SzPlatformService {
public typedserver: plugins.typedserver.TypedServer;
public typedrouter = new plugins.typedrequest.TypedRouter();
// SubServices
public emailService: EmailService;
public letterService: LetterService;
public mtaService: MtaService;
public smsService: SmsService;
public async start() {
this.platformserviceDb = new PlatformServiceDb(this);
this.projectinfo = new plugins.projectinfo.ProjectInfo(paths.packageDir);
// lets start the sub services
this.emailService = new EmailService(this);
this.letterService = new LetterService(this, {
letterxpressUser: await this.serviceQenv.getEnvVarOnDemand('LETTER_API_USER'),
letterxpressToken: await this.serviceQenv.getEnvVarOnDemand('LETTER_API_TOKEN')
});
this.mtaService = new MtaService(this);
this.smsService = new SmsService(this, {
apiGatewayApiToken: await this.serviceQenv.getEnvVarOnDemand('SMS_API_TOKEN'),
});
// lets start the server finally
this.typedserver = new plugins.typedserver.TypedServer({
cors: true,
});

View File

@ -6,6 +6,11 @@ import { ApiManager } from './email.classes.apimanager.js';
import { logger } from '../logger.js';
import type { SzPlatformService } from '../classes.platformservice.js';
export interface IEmailConstructorOptions {
mailgunApiKey: string;
}
export class EmailService {
public platformServiceRef: SzPlatformService;

View File

@ -0,0 +1,17 @@
import type { SzPlatformService } from '../classes.platformservice.js';
import * as plugins from '../plugins.js';
export interface ILetterConstructorOptions {
letterxpressUser: string;
letterxpressToken: string;
}
export class LetterService {
public platformServiceRef: SzPlatformService;
public options: ILetterConstructorOptions;
constructor(platformServiceRefArg: SzPlatformService, optionsArg: ILetterConstructorOptions) {
this.platformServiceRef = platformServiceRefArg;
this.options = optionsArg;
}
}

0
ts/letter/index.ts Normal file
View File

View File

@ -1,4 +1,4 @@
import * as plugins from './plugins.js';
import * as plugins from '../plugins.js';
export class ApiManager {
public typedrouter = new plugins.typedrequest.TypedRouter();

View File

@ -1,8 +1,8 @@
import * as plugins from './plugins.js';
import * as paths from './paths.js';
import * as plugins from '../plugins.js';
import * as paths from '../paths.js';
import { Email } from './mta.classes.email.js';
import type { MTA } from './mta.classes.mta.js';
import type { MtaService } from './mta.classes.mta.js';
const readFile = plugins.util.promisify(plugins.fs.readFile);
const writeFile = plugins.util.promisify(plugins.fs.writeFile);
@ -16,7 +16,7 @@ export interface IKeyPaths {
export class DKIMCreator {
private keysDir: string;
constructor(metaRef: MTA, keysDir = paths.keysDir) {
constructor(metaRef: MtaService, keysDir = paths.keysDir) {
this.keysDir = keysDir;
}

View File

@ -1,10 +1,10 @@
import * as plugins from './plugins.js';
import { MTA } from './mta.classes.mta.js';
import * as plugins from '../plugins.js';
import { MtaService } from './mta.classes.mta.js';
class DKIMVerifier {
public mtaRef: MTA;
public mtaRef: MtaService;
constructor(mtaRefArg: MTA) {
constructor(mtaRefArg: MtaService) {
this.mtaRef = mtaRefArg;
}

View File

@ -1,10 +1,10 @@
import type { MTA } from './mta.classes.mta.js';
import * as plugins from './plugins.js';
import type { MtaService } from './mta.classes.mta.js';
import * as plugins from '../plugins.js';
export class DNSManager {
public mtaRef: MTA;
public mtaRef: MtaService;
constructor(mtaRefArg: MTA) {
constructor(mtaRefArg: MtaService) {
this.mtaRef = mtaRefArg;
}
}

View File

@ -1,16 +1,16 @@
import * as plugins from './plugins.js';
import * as paths from './paths.js';
import * as plugins from '../plugins.js';
import * as paths from '../paths.js';
import { Email } from './mta.classes.email.js';
import { EmailSignJob } from './mta.classes.emailsignjob.js';
import type { MTA } from './mta.classes.mta.js';
import type { MtaService } from './mta.classes.mta.js';
export class EmailSendJob {
mtaRef: MTA;
mtaRef: MtaService;
private email: Email;
private socket: plugins.net.Socket | plugins.tls.TLSSocket = null;
private mxRecord: string = null;
constructor(mtaRef: MTA, emailArg: Email) {
constructor(mtaRef: MtaService, emailArg: Email) {
this.email = emailArg;
this.mtaRef = mtaRef;
}

View File

@ -1,5 +1,5 @@
import * as plugins from './plugins.js';
import type { MTA } from './mta.classes.mta.js';
import * as plugins from '../plugins.js';
import type { MtaService } from './mta.classes.mta.js';
interface Headers {
[key: string]: string;
@ -13,10 +13,10 @@ interface IEmailSignJobOptions {
}
export class EmailSignJob {
mtaRef: MTA;
mtaRef: MtaService;
jobOptions: IEmailSignJobOptions;
constructor(mtaRefArg: MTA, options: IEmailSignJobOptions) {
constructor(mtaRefArg: MtaService, options: IEmailSignJobOptions) {
this.mtaRef = mtaRefArg;
this.jobOptions = options;
}

View File

@ -1,4 +1,4 @@
import * as plugins from './plugins.js';
import * as plugins from '../plugins.js';
import { Email } from './mta.classes.email.js';
import { EmailSendJob } from './mta.classes.emailsendjob.js';
@ -6,14 +6,17 @@ import { DKIMCreator } from './mta.classes.dkimcreator.js';
import { DKIMVerifier } from './mta.classes.dkimverifier.js';
import { SMTPServer } from './mta.classes.smtpserver.js';
import { DNSManager } from './mta.classes.dnsmanager.js';
import type { SzPlatformService } from '../classes.platformservice.js';
export class MTA {
export class MtaService {
public platformServiceRef: SzPlatformService;
public server: SMTPServer;
public dkimCreator: DKIMCreator;
public dkimVerifier: DKIMVerifier;
public dnsManager: DNSManager;
constructor() {
constructor(platformServiceRefArg: SzPlatformService) {
this.platformServiceRef = platformServiceRefArg;
this.dkimCreator = new DKIMCreator(this);
this.dkimVerifier = new DKIMVerifier(this);
this.dnsManager = new DNSManager(this);

View File

@ -1,7 +1,7 @@
import * as plugins from './plugins.js';
import * as paths from './paths.js';
import * as plugins from '../plugins.js';
import * as paths from '../paths.js';
import { Email } from './mta.classes.email.js';
import type { MTA } from './mta.classes.mta.js';
import type { MtaService } from './mta.classes.mta.js';
export interface ISmtpServerOptions {
port: number;
@ -10,12 +10,12 @@ export interface ISmtpServerOptions {
}
export class SMTPServer {
public mtaRef: MTA;
public mtaRef: MtaService;
private smtpServerOptions: ISmtpServerOptions;
private server: plugins.net.Server;
private emailBufferStringMap: Map<plugins.net.Socket, string>;
constructor(mtaRefArg: MTA, optionsArg: ISmtpServerOptions) {
constructor(mtaRefArg: MtaService, optionsArg: ISmtpServerOptions) {
console.log('SMTPServer instance is being created...');
this.mtaRef = mtaRefArg;

View File

@ -1,12 +0,0 @@
import * as plugins from './plugins.js';
export const cwd = plugins.path.join(
plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url),
'../'
);
export const assetsDir = plugins.path.join(cwd, './assets');
export const keysDir = plugins.path.join(assetsDir, './keys');
export const dnsRecordsDir = plugins.path.join(assetsDir, './dns-records');
export const sentEmailsDir = plugins.path.join(assetsDir, './sent-emails');
export const receivedEmailsDir = plugins.path.join(assetsDir, './received-emails');
plugins.smartfile.fs.ensureDirSync(keysDir);

View File

@ -1,67 +0,0 @@
// node native
import * as dns from 'dns';
import * as fs from 'fs';
import * as crypto from 'crypto';
import * as net from 'net';
import * as path from 'path';
import * as tls from 'tls';
import * as util from 'util';
export {
dns,
fs,
crypto,
net,
path,
tls,
util,
}
// @apiclient.xyz/cloudflare
import * as cloudflare from '@apiclient.xyz/cloudflare';
export {
cloudflare,
}
// @apiglobal scope
import * as typedrequest from '@apiglobal/typedrequest';
import * as typedsocket from '@apiglobal/typedsocket';
export {
typedrequest,
typedsocket,
}
// pushrocks scope
import * as smartfile from '@pushrocks/smartfile';
import * as smartpath from '@pushrocks/smartpath';
import * as smartpromise from '@pushrocks/smartpromise';
import * as smartrx from '@pushrocks/smartrx';
export {
smartfile,
smartpath,
smartpromise,
smartrx,
}
// tsclass scope
import * as tsclass from '@tsclass/tsclass';
export {
tsclass,
}
// third party
import * as mailauth from 'mailauth';
import { dkimSign } from 'mailauth/lib/dkim/sign.js';
import mailparser from 'mailparser';
import * as uuid from 'uuid';
export {
mailauth,
dkimSign,
mailparser,
uuid,
}

View File

@ -4,3 +4,9 @@ export const packageDir = plugins.path.join(
plugins.smartpath.get.dirnameFromImportMetaUrl(import.meta.url),
'../'
);
export const assetsDir = plugins.path.join(packageDir, './assets');
export const keysDir = plugins.path.join(assetsDir, './keys');
export const dnsRecordsDir = plugins.path.join(assetsDir, './dns-records');
export const sentEmailsDir = plugins.path.join(assetsDir, './sent-emails');
export const receivedEmailsDir = plugins.path.join(assetsDir, './received-emails');
plugins.smartfile.fs.ensureDirSync(keysDir);

View File

@ -1,8 +1,20 @@
// node native
import * as dns from 'dns';
import * as fs from 'fs';
import * as crypto from 'crypto';
import * as net from 'net';
import * as path from 'path';
import * as tls from 'tls';
import * as util from 'util';
export {
path
dns,
fs,
crypto,
net,
path,
tls,
util,
}
// @serve.zone scope
@ -15,10 +27,12 @@ export {
// @api.global scope
import * as typedrequest from '@api.global/typedrequest';
import * as typedserver from '@api.global/typedserver';
import * as typedsocket from '@api.global/typedsocket';
export {
typedrequest,
typedserver,
typedsocket,
}
// @push.rocks scope
@ -29,6 +43,35 @@ import * as smartfile from '@push.rocks/smartfile';
import * as smartlog from '@push.rocks/smartlog';
import * as smartmail from '@push.rocks/smartmail';
import * as smartpath from '@push.rocks/smartpath';
import * as smartpromise from '@push.rocks/smartpromise';
import * as smartrequest from '@push.rocks/smartrequest';
import * as smartrx from '@push.rocks/smartrx';
export { projectinfo, qenv, smartdata, smartfile, smartlog, smartmail, smartpath, smartrequest };
export { projectinfo, qenv, smartdata, smartfile, smartlog, smartmail, smartpath, smartpromise, smartrequest, smartrx };
// apiclient.xyz scope
import * as letterxpress from '@apiclient.xyz/letterxpress';
export {
letterxpress,
}
// tsclass scope
import * as tsclass from '@tsclass/tsclass';
export {
tsclass,
}
// third party
import * as mailauth from 'mailauth';
import { dkimSign } from 'mailauth/lib/dkim/sign.js';
import mailparser from 'mailparser';
import * as uuid from 'uuid';
export {
mailauth,
dkimSign,
mailparser,
uuid,
}

View File

@ -4,7 +4,7 @@ import { logger } from '../logger.js';
import type { SzPlatformService } from '../classes.platformservice.js';
export interface ISmsConstructorOptions {
apiToken: string;
apiGatewayApiToken: string;
}
export class SmsService {
@ -63,7 +63,7 @@ export class SmsService {
method: 'POST',
requestBody: JSON.stringify(payload),
headers: {
Authorization: `Basic ${Buffer.from(`${this.options.apiToken}:`).toString('base64')}`,
Authorization: `Basic ${Buffer.from(`${this.options.apiGatewayApiToken}:`).toString('base64')}`,
'Content-Type': 'application/json',
},
});