@lilaquadrat/studio 10.0.0-beta.41 → 10.0.0-beta.43

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.
Files changed (33) hide show
  1. package/lib/models.d.ts +2 -4
  2. package/lib/models.js +2 -4
  3. package/lib/models.js.map +1 -1
  4. package/lib/services.d.ts +2 -1
  5. package/lib/services.js +2 -1
  6. package/lib/services.js.map +1 -1
  7. package/lib/src/models/design.model.d.ts +4 -0
  8. package/lib/src/models/design.model.js +58 -0
  9. package/lib/src/models/design.model.js.map +1 -0
  10. package/lib/src/services/conf.service.js +2 -1
  11. package/lib/src/services/conf.service.js.map +1 -1
  12. package/lib/src/services/designs.service.d.ts +7 -0
  13. package/lib/src/services/designs.service.js +10 -0
  14. package/lib/src/services/designs.service.js.map +1 -0
  15. package/package.json +3 -3
  16. package/lib/src/models/certificate-action.model.d.ts +0 -5
  17. package/lib/src/models/certificate-action.model.js +0 -229
  18. package/lib/src/models/certificate-action.model.js.map +0 -1
  19. package/lib/src/models/certificate.model.d.ts +0 -4
  20. package/lib/src/models/certificate.model.js +0 -96
  21. package/lib/src/models/certificate.model.js.map +0 -1
  22. package/lib/src/models/editorBase.model.d.ts +0 -4
  23. package/lib/src/models/editorBase.model.js +0 -39
  24. package/lib/src/models/editorBase.model.js.map +0 -1
  25. package/lib/src/services/certificates.service.d.ts +0 -0
  26. package/lib/src/services/certificates.service.js +0 -199
  27. package/lib/src/services/certificates.service.js.map +0 -1
  28. package/lib/src/services/certificatesAction.service.d.ts +0 -0
  29. package/lib/src/services/certificatesAction.service.js +0 -237
  30. package/lib/src/services/certificatesAction.service.js.map +0 -1
  31. package/lib/src/services/editorBase.service.d.ts +0 -0
  32. package/lib/src/services/editorBase.service.js +0 -185
  33. package/lib/src/services/editorBase.service.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorBase.model.js","sourceRoot":"","sources":["../../../src/models/editorBase.model.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAGlD,MAAM,KAAK,GAAG,IAAI,OAAO,CAAa,YAAY,EAAE,YAAY,CAAC,CAAC;AAElE,KAAK,CAAC,QAAQ,CACZ;IACE,GAAG,EAAE;QACH,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,CAAC;QACV,IAAI,EAAE,CAAC;KACR;IACD,MAAM,EAAE,IAAI;IACZ,IAAI,EAAE,mBAAmB;CAC1B,EACD,CAAC,CACF,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACzB;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;IAChD,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,KAAK,CAAC,SAAS,CACb;IACE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACxB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;KACzB;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC;IAChD,oBAAoB,EAAE,KAAK;CAC5B,EACD,QAAQ,CACT,CAAC;AAEF,eAAe,KAAK,CAAC"}
File without changes
@@ -1,199 +0,0 @@
1
- // import tls, { PeerCertificate } from 'tls';
2
- // import net from 'net';
3
- // import { ClientSecretCredential, DefaultAzureCredential } from '@azure/identity';
4
- // import fs from 'fs';
5
- // import ACME from '@root/acme';
6
- // import CSR from '@root/csr';
7
- // import PEM from '@root/pem/packer';
8
- // import Keypairs from '@root/keypairs';
9
- // import { exec } from 'child_process';
10
- // import fetch from 'node-fetch';
11
- // import { X509Certificate } from 'node:crypto';
12
- // import CertificateModel from '../models/certificate.model.js';
13
- // import Immutable from '../Immutable.class.js';
14
- // import certificatesActionsService from './certificatesAction.service.js';
15
- // import HttpSslChallenge from '../http.challenge.class.js';
16
- // import logger from '../logger.js';
17
- // import DnsSslChallenge from '../dns.challenge.class.js';
18
- // import { BasicData, Certificate, CertificateAction, ShareClientInterface, UserApp, WildcardCertificates } from '@lilaquadrat/interfaces';
19
- // export class CertificatesService extends Immutable<Certificate> {
20
- // model = CertificateModel;
21
- // shareClient?: ShareClientInterface;
22
- // acme_email?: string;
23
- // acme_directory: string;
24
- // constructor(acme_email?: string, acmeMode?: 'staging' | 'live', shareClient?: ShareClientInterface) {
25
- // super();
26
- // this.shareClient = shareClient;
27
- // this.acme_email = acme_email;
28
- // this.acme_directory = acmeMode === 'live'
29
- // ? 'https://acme-v02.api.letsencrypt.org/directory'
30
- // : 'https://acme-staging-v02.api.letsencrypt.org/directory';
31
- // }
32
- // exists(domain: string, company: string, project: string) {
33
- // return this.model.db.countDocuments({ domains: { $in: [domain] }, company, project });
34
- // }
35
- // /**
36
- // * gets a valid domain based certificate for the provided domain, if no certificate matches, a new one will be requested
37
- // */
38
- // async getOrRequest(domain: string, company: string, project: string, user: string, app: string):
39
- // Promise<{ type: 'certificate', data: BasicData<Certificate> } | { type: 'request', data: BasicData<CertificateAction>['_id'] }> {
40
- // const certificate = await this.model.db.findOne({
41
- // domains: {
42
- // $in: [domain],
43
- // },
44
- // 'valid.from': { $lte: new Date() },
45
- // 'valid.to': { $gte: new Date() },
46
- // company,
47
- // project,
48
- // });
49
- // if (certificate) return { type: 'certificate', data: certificate };
50
- // const request = await certificatesActionsService.request(
51
- // [domain],
52
- // 'domain',
53
- // 'pem',
54
- // true,
55
- // {
56
- // company,
57
- // project,
58
- // user,
59
- // app,
60
- // timeout: 120,
61
- // forceFile: true,
62
- // },
63
- // );
64
- // return {
65
- // type: 'request',
66
- // data: request._id,
67
- // };
68
- // }
69
- // async getOrRequestWildcard(domain: string, options: Required<UserApp> & { forceFile?: boolean, saveInVault?: boolean }):
70
- // Promise<{ type: 'certificate', data: BasicData<Certificate> } | { type: 'request', data: BasicData<CertificateAction>['_id'] }> {
71
- // const certificate = await this.model.db.findOne({ domains: { $in: [domain] } });
72
- // if (certificate) return { type: 'certificate', data: certificate };
73
- // const request = await certificatesActionsService.request(
74
- // [domain],
75
- // 'wildcard',
76
- // 'pem',
77
- // true,
78
- // options,
79
- // );
80
- // return {
81
- // type: 'request',
82
- // data: request._id,
83
- // };
84
- // }
85
- // getCertificateDetails(cert: string): PeerCertificate {
86
- // const secureContext = tls.createSecureContext({ cert });
87
- // const secureSocket = new tls.TLSSocket(new net.Socket(), { secureContext });
88
- // const details = secureSocket.getCertificate() as PeerCertificate;
89
- // secureSocket.destroy();
90
- // return details;
91
- // }
92
- // async getBase(inputDomains: string[], type: 'wildcard' | 'domain', privateKey: string, privateServerKey: string) {
93
- // const domains = type === 'wildcard' ? [`*.${inputDomains[0]}`] : inputDomains;
94
- // const acme = ACME.create({ maintainerEmail: this.acme_email, packageAgent: 'lilastudio/v1.4', notify: () => { } });
95
- // await acme.init(this.acme_directory);
96
- // const accountKey = await Keypairs.import({ pem: privateKey });
97
- // const serverKey = await Keypairs.import({ pem: privateServerKey });
98
- // const account = await acme.accounts.create({ accountKey, subscriberEmail: this.acme_email, agreeToTerms: true });
99
- // const der = await CSR.csr(
100
- // {
101
- // domains,
102
- // jwk: serverKey,
103
- // encoding: 'der',
104
- // },
105
- // );
106
- // const csr = await PEM.packBlock({ type: 'CERTIFICATE REQUEST', bytes: der });
107
- // return {
108
- // acme,
109
- // account,
110
- // accountKey,
111
- // csr,
112
- // domains,
113
- // };
114
- // }
115
- // /**
116
- // * creates a letsencrypt wildcard SSL certificate on the given azure subscription
117
- // */
118
- // async createWildcard(
119
- // domain: string,
120
- // privateKey: string,
121
- // privateServerKey: string,
122
- // credentials: ClientSecretCredential | DefaultAzureCredential,
123
- // azureSubscriptionId: string,
124
- // ) {
125
- // const optionsBase = await this.getBase([domain], 'wildcard', privateKey, privateServerKey);
126
- // const options = {
127
- // account: optionsBase.account,
128
- // accountKey: optionsBase.accountKey,
129
- // csr: optionsBase.csr,
130
- // domains: optionsBase.domains,
131
- // challenges: {
132
- // 'dns-01': new DnsSslChallenge(domain, credentials, process.env.AZURE_RESOURCE_GROUP as string, azureSubscriptionId),
133
- // },
134
- // };
135
- // const certificate: WildcardCertificates = await optionsBase.acme.certificates.create(options);
136
- // const crypto = new X509Certificate(`${certificate.cert}\n${certificate.chain}\n`);
137
- // certificate.valid = {
138
- // from: new Date(crypto.validFrom),
139
- // to: new Date(crypto.validTo),
140
- // };
141
- // return certificate;
142
- // }
143
- // convertToPfx(certificate: string, privateKey: string, tempName: string) {
144
- // return new Promise<Buffer>((resolve, reject) => {
145
- // exec(`openssl pkcs12 -export -passout pass: -inkey <(echo "${privateKey}") -in <(echo "${certificate}") -out ${tempName}.pfx`, { timeout: 5000 }, (e, stdout, stderr) => {
146
- // // if (this.debug) {
147
- // logger.debug('stdout ', stdout);
148
- // logger.debug('stderr ', stderr);
149
- // // }
150
- // if (e instanceof Error) {
151
- // return reject(e);
152
- // }
153
- // const content = fs.readFileSync(`${tempName}.pfx`);
154
- // fs.rm(`${tempName}.pfx`, () => {});
155
- // return resolve(content);
156
- // });
157
- // });
158
- // }
159
- // /**
160
- // * creates a letsencrypt certificate for all given domain
161
- // * http challenge will be used
162
- // */
163
- // async createSSl(
164
- // domains: string[],
165
- // company: string,
166
- // project: string,
167
- // privateKey: string,
168
- // privateServerKey: string,
169
- // ) {
170
- // if (!this.shareClient) throw new Error('SHARECLIENT_NOT_INITIALIZED');
171
- // const optionsBase = await this.getBase(domains, 'domain', privateKey, privateServerKey);
172
- // const options = {
173
- // account: optionsBase.account,
174
- // accountKey: optionsBase.accountKey,
175
- // csr: optionsBase.csr,
176
- // domains: optionsBase.domains,
177
- // challenges: {
178
- // 'http-01': new HttpSslChallenge(company, project, this.shareClient),
179
- // },
180
- // };
181
- // const certificate: WildcardCertificates = await optionsBase.acme.certificates.create(options);
182
- // const crypto = new X509Certificate(`${certificate.cert}\n${certificate.chain}\n`);
183
- // certificate.valid = {
184
- // from: new Date(crypto.validFrom),
185
- // to: new Date(crypto.validTo),
186
- // };
187
- // return certificate;
188
- // }
189
- // /**
190
- // * calls ``http://DOMAIN/.studio/check/`` to check if the response code is 202
191
- // */
192
- // checkResponses(domains: string[]) {
193
- // const PromiseArray = domains.map((single) => fetch(`http://${single}/.studio/check/`, { timeout: 5000 }));
194
- // return Promise.all(PromiseArray)
195
- // .then((responses) => responses.filter((single) => single.status !== 202).length === 0);
196
- // }
197
- // }
198
- // export default new CertificatesService();
199
- //# sourceMappingURL=certificates.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"certificates.service.js","sourceRoot":"","sources":["../../../src/services/certificates.service.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1,237 +0,0 @@
1
- // import { QueueClient, QueueServiceClient } from '@azure/storage-queue';
2
- // import { Filter, ObjectId } from 'mongodb';
3
- // import dayjs from 'dayjs';
4
- // import logger from '../logger.js';
5
- // import Immutable from '../Immutable.class.js';
6
- // import CertificateActionModel from '../models/certificate-action.model.js';
7
- // import hardCopy from '../helpers/hardCopy.js';
8
- // import { CertificateAction, Certificate, BasicData, CertificateActionResult, CreateResult, ListCustomQueries, Options, SkipLimitSort, UserApp, UserAppWithOptions } from '@lilaquadrat/interfaces';
9
- // import { DefaultAzureCredential } from '@azure/identity';
10
- // export class CertificatesActionsService extends Immutable<CertificateAction> {
11
- // model = CertificateActionModel;
12
- // service: QueueServiceClient;
13
- // client: QueueClient;
14
- // constructor(connectionString: string, storageAccount?: string) {
15
- // super();
16
- // if (storageAccount) {
17
- // logger.info('certificates-action.use.storage_account');
18
- // const credentials = new DefaultAzureCredential();
19
- // this.service = new QueueServiceClient(`https://${storageAccount}.queue.core.windows.net`, credentials);
20
- // } else if (connectionString) {
21
- // logger.info('certificates-action.use.connection_string');
22
- // this.service = QueueServiceClient.fromConnectionString(connectionString);
23
- // }
24
- // if (this.service) {
25
- // this.client = this.service.getQueueClient('certs');
26
- // }
27
- // }
28
- // async request(
29
- // domains: CertificateAction['domains'],
30
- // type: 'domain',
31
- // contentType: CertificateAction['contentType'],
32
- // renew: boolean,
33
- // options: Required<UserApp> & Required<Options> & { timeout?: number, forceFile?: CertificateAction['forceFile'], saveInVault?: CertificateAction['saveInVault'] },
34
- // ): Promise<CreateResult<CertificateAction>>;
35
- // async request(
36
- // domains: CertificateAction['domains'],
37
- // type: 'wildcard',
38
- // contentType: CertificateAction['contentType'],
39
- // renew: boolean,
40
- // options: Required<UserApp> & { timeout?: number, forceFile?: CertificateAction['forceFile'], saveInVault?: CertificateAction['saveInVault'] },
41
- // ): Promise<CreateResult<CertificateAction>>;
42
- // async request(
43
- // domains: CertificateAction['domains'],
44
- // type: CertificateAction['type'],
45
- // contentType: CertificateAction['contentType'],
46
- // renew: boolean,
47
- // options: Required<UserApp> & Options & { timeout?: number, forceFile?: CertificateAction['forceFile'], saveInVault?: CertificateAction['saveInVault'] },
48
- // ): Promise<CreateResult<CertificateAction>> {
49
- // const actionObject: CertificateAction = {
50
- // domains,
51
- // type,
52
- // contentType,
53
- // renew,
54
- // state: 'new',
55
- // maxRetries: 5,
56
- // };
57
- // if (options.company) actionObject.company = options.company;
58
- // if (options.project) actionObject.project = options.project;
59
- // if (options.forceFile) actionObject.forceFile = true;
60
- // if (options.saveInVault) actionObject.saveInVault = true;
61
- // const action = type === 'wildcard'
62
- // ? 'create-wildcard'
63
- // : 'create-domain';
64
- // const newAction = await this.create(actionObject, options.user, options.app, undefined, undefined, action);
65
- // await this.addToQueue(newAction._id, options.timeout);
66
- // return newAction;
67
- // }
68
- // planRenew(
69
- // certificate: Certificate,
70
- // validPercent: number,
71
- // options: Required<UserApp> & Options & { timeout?: number, forceFile?: CertificateAction['forceFile'], saveInVault?: CertificateAction['saveInVault'] },
72
- // ) {
73
- // const validDays = dayjs(certificate.valid.to).diff(certificate.valid.from, 'days');
74
- // const renewInDays = Math.floor((validDays * (validPercent / 100)));
75
- // if (renewInDays < 1) {
76
- // logger.info('cant plan renew of certificate, renew in days is smaller than 1');
77
- // return new Promise<void>((resolve) => resolve());
78
- // }
79
- // const renewObject: CertificateAction = {
80
- // planned: dayjs(certificate.valid.from).add(renewInDays, 'days').toDate(),
81
- // type: certificate.type,
82
- // contentType: certificate.contentType,
83
- // domains: certificate.domains,
84
- // state: 'new',
85
- // renew: true,
86
- // maxRetries: 5,
87
- // };
88
- // if (certificate.company) renewObject.company = certificate.company;
89
- // if (certificate.project) renewObject.project = certificate.project;
90
- // if (options.forceFile) renewObject.forceFile = true;
91
- // if (options.saveInVault) renewObject.saveInVault = true;
92
- // const action = certificate.type === 'wildcard'
93
- // ? 'create-wildcard'
94
- // : 'create-domain';
95
- // return this.create(renewObject, options.user, options.app, undefined, undefined, action);
96
- // }
97
- // async planRetry(certificateAction: BasicData<CertificateAction>, error: CertificateActionResult, retryTimeout = 86400, user: string, app: string) {
98
- // const retry = certificateAction.retryCount !== certificateAction.maxRetries;
99
- // const renewObject: BasicData<CertificateAction> = {
100
- // ...hardCopy(certificateAction),
101
- // state: retry ? 'retry' : 'failed',
102
- // renew: true,
103
- // };
104
- // if (!renewObject.results && error) renewObject.results = [];
105
- // renewObject.results?.push(error);
106
- // if (retry) {
107
- // renewObject.retryCount = renewObject.retryCount
108
- // ? renewObject.retryCount += 1
109
- // : 1;
110
- // }
111
- // delete renewObject._id;
112
- // delete renewObject.history;
113
- // // hardCopy converts the Date Object to a string, validation expects a object
114
- // if (renewObject.planned) renewObject.planned = new Date(renewObject.planned);
115
- // await this.immutable(certificateAction._id, renewObject, user, 'change', app);
116
- // if (retry) await this.addToQueue(certificateAction._id as ObjectId, retryTimeout);
117
- // return true;
118
- // }
119
- // async addToQueue(actionInternalId: ObjectId, visibilityTimeout: number = 0) {
120
- // await this.client.createIfNotExists();
121
- // return this.client.sendMessage(Buffer.from(JSON.stringify({ _id: actionInternalId })).toString('base64'), { visibilityTimeout });
122
- // }
123
- // single(actionInternalId: ObjectId) {
124
- // return this.model.db.findOne({ _id: actionInternalId });
125
- // }
126
- // async latest(domain: string, company: string, project: string) {
127
- // const latest = await this.model.db.find({ domains: { $in: [domain] }, company, project }).sort({ _id: -1 }).limit(1).toArray();
128
- // return latest[0];
129
- // }
130
- // getPlanned() {
131
- // const select: any = {
132
- // state: 'new',
133
- // planned: { $lte: new Date(), $exists: true },
134
- // };
135
- // return CertificateActionModel.db.find(
136
- // select,
137
- // { sort: { planned: -1 } },
138
- // )
139
- // .toArray();
140
- // }
141
- // async handlePlanned() {
142
- // const planned = await this.getPlanned();
143
- // const all = planned.map((single) => this.addToQueue(single._id));
144
- // return all;
145
- // }
146
- // setState(actionInternalId: ObjectId, state: CertificateAction['state'], user: string, app: string) {
147
- // return this.immutable(
148
- // actionInternalId,
149
- // { state },
150
- // user,
151
- // 'change',
152
- // app,
153
- // undefined,
154
- // undefined,
155
- // 'stateChange',
156
- // );
157
- // }
158
- // async setResult(
159
- // actionInternalId: ObjectId,
160
- // result: CertificateActionResult,
161
- // state: CertificateAction['state'],
162
- // user: string,
163
- // app: string,
164
- // ) {
165
- // const baseAction: Partial<BasicData<CertificateAction>> | null = await this.model.db.findOne(
166
- // { _id: actionInternalId }, { projection: { state: 1, results: 1 } },
167
- // );
168
- // if (!baseAction) throw new Error('BASE_ACTION_MISSING');
169
- // delete baseAction._id;
170
- // baseAction.state = state;
171
- // if (!baseAction.results && result) baseAction.results = [];
172
- // baseAction.results?.push(result);
173
- // return this.immutable(
174
- // actionInternalId,
175
- // baseAction,
176
- // user,
177
- // 'change',
178
- // app,
179
- // undefined,
180
- // undefined,
181
- // 'stateChangeResult',
182
- // );
183
- // }
184
- // getCustomQuery(filter: { domain?: string, state?: CertificateAction['state'] }, options: UserAppWithOptions & SkipLimitSort): ListCustomQueries<CertificateAction> {
185
- // const match: Filter<CertificateAction> = {};
186
- // if (filter?.state) {
187
- // match.state = filter.state;
188
- // }
189
- // // if (filter?.mode) {
190
- // // match.mode = filter.mode;
191
- // // }
192
- // if (filter?.domain) {
193
- // match.domains = { $in: [filter.domain] };
194
- // }
195
- // const aggregation: Object[] = [
196
- // {
197
- // $match: match,
198
- // },
199
- // {
200
- // $project: {
201
- // type: 1,
202
- // domains: 1,
203
- // renew: 1,
204
- // company: 1,
205
- // project: 1,
206
- // state: 1,
207
- // planned: 1,
208
- // history: 1,
209
- // },
210
- // },
211
- // ];
212
- // aggregation.push({
213
- // $sort: options.sort || { _id: -1 },
214
- // });
215
- // if (options.skip) { }
216
- // aggregation.push(
217
- // {
218
- // $skip: options.skip,
219
- // },
220
- // {
221
- // $limit: options.limit,
222
- // },
223
- // );
224
- // return { aggregation, countQuery: match };
225
- // }
226
- // async actionExistsForDomain(domain: string) {
227
- // return await this.model.db.countDocuments({ domains: { $in: [domain] }, state: { $in: ['new', 'planned', 'retry'] } }) > 0;
228
- // }
229
- // async cancel(internalId: ObjectId, options: Required<UserApp>) {
230
- // return this.immutable({ _id: internalId }, { state: 'canceled' }, options.user, 'change', options.app, undefined, undefined, 'stateChange');
231
- // }
232
- // }
233
- // export default new CertificatesActionsService(
234
- // process.env.PUBLISH_QUEUE_CONNECTION_STRING as string,
235
- // process.env.STORAGE_ACCOUNT as string,
236
- // );
237
- //# sourceMappingURL=certificatesAction.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"certificatesAction.service.js","sourceRoot":"","sources":["../../../src/services/certificatesAction.service.ts"],"names":[],"mappings":"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"}
File without changes
@@ -1,185 +0,0 @@
1
- // import Immutable from '../Immutable.class.js';
2
- // import { EditorBaseModel } from '../../models.js';
3
- // import { logger, ShareClientFactory } from '../../main.js';
4
- // import { HandleFileService } from '../../services.js';
5
- // import { AvailableStorageTypes, EditorBase, ShareClientInterface } from '@lilaquadrat/interfaces';
6
- // class EditorBaseService extends Immutable<EditorBase> {
7
- // model = EditorBaseModel;
8
- // get shareClient(): ShareClientInterface {
9
- // const shareClient = ShareClientFactory(
10
- // process.env.STORAGE_TYPE as AvailableStorageTypes,
11
- // {
12
- // endpoint: process.env.STORAGE_ENDPOINT as string,
13
- // accessKey: process.env.STORAGE_ACCESSKEY as string,
14
- // secretKey: process.env.STORAGE_SECRETKEY as string,
15
- // container: 'customers',
16
- // },
17
- // );
18
- // return shareClient;
19
- // }
20
- // /**
21
- // * creates basic CDN folders for this project
22
- // *
23
- // * @param {string} project
24
- // * @param {string} customer
25
- // * @returns
26
- // * @memberof ProjectClass
27
- // */
28
- // createBase(company: string, project: string) {
29
- // const { shareClient } = this;
30
- // /**
31
- // * create the project folder for the customer
32
- // */
33
- // return shareClient
34
- // .createFolder(company, project)
35
- // .then(() => shareClient.createFolder(`${company}/${project}`, 'editor'))
36
- // .then(() => shareClient.createFolder(`${company}/${project}`, 'upload'));
37
- // }
38
- // /** copy basic editor setup into the project */
39
- // async copyBase(
40
- // company: string,
41
- // project: string,
42
- // type: 'app' | 'server',
43
- // path: string = 'lilaquadrat/base/editorBase',
44
- // user: string,
45
- // app: string,
46
- // ) {
47
- // const base = await this.single('lilaquadrat', 'base', type);
48
- // if (!base) throw new Error('BASE_NOT_FOUND');
49
- // console.log('base', base);
50
- // if (base.version === '3') {
51
- // await this.copyEditorBasev3(company, project, type, path);
52
- // } else {
53
- // await this.copyEditorBase(company, project, type, path);
54
- // }
55
- // return this.upsertType(company, project, type, base.version, false, user, app);
56
- // }
57
- // copyEditorBase(
58
- // company: string,
59
- // project: string,
60
- // type: 'app' | 'server',
61
- // path: string = 'lilaquadrat/base/editorBase',
62
- // ) {
63
- // const filter = type === 'app' ? /(.(js|css|woff)|index\.html)$/i : /.(json|server\.html)$/i;
64
- // return this.shareClient
65
- // .list(path, filter)
66
- // .then((foundFiles) => {
67
- // logger.info(`projects.create.${company}.${project}.files.copy`);
68
- // logger.info(`projects.create.${company}.${project}.files.copy.${foundFiles.length}`);
69
- // logger.debug(path);
70
- // logger.debug(`${company}/${project}/editor`);
71
- // return this.shareClient.copy(
72
- // foundFiles,
73
- // path,
74
- // `${company}/${project}/editor`,
75
- // );
76
- // });
77
- // }
78
- // async copyEditorBasev3(
79
- // company: string,
80
- // project: string,
81
- // type: 'app' | 'server',
82
- // path: string = 'lilaquadrat/base/editorBase',
83
- // ) {
84
- // let files: string[];
85
- // let assets: string[];
86
- // const targetFolder: string = `${company}/${project}/editor`;
87
- // logger.info(`projects.create.${company}.${project}.files.copy`);
88
- // if (type === 'server') {
89
- // logger.info(`projects.create.v3.${company}.${project}.files.copy.server`);
90
- // await this.shareClient.copy(['index.server.html', 'index.mail.html', 'server-entry.js', 'ssr-manifest.json'], `${path}/server`, targetFolder);
91
- // }
92
- // if (type === 'app') {
93
- // assets = await this.shareClient.list(`${path}/app`, /(.(js|css|woff|png|map|webmanifest))$/i);
94
- // logger.info(`projects.create.v3.${company}.${project}.files.copy.app.${assets.length}`);
95
- // await this.shareClient.copy(assets, `${path}/app`, targetFolder);
96
- // logger.info(`projects.create.v3.${company}.${project}.files.copy.index`);
97
- // await this.shareClient.copy(['index.html'], `${path}/app`, targetFolder);
98
- // }
99
- // return true;
100
- // }
101
- // single(company: string, project: string, type: 'app' | 'server') {
102
- // return this.model.db.findOne({ company, project, type });
103
- // }
104
- // /**
105
- // * updates/adds new entry at editorBase to make update process possible
106
- // */
107
- // upsertType(company: string, project: string, type: 'app' | 'server', version: string, custom: boolean, user: string, app: string) {
108
- // return this.immutableUpsert(
109
- // { company, project, type },
110
- // {
111
- // company,
112
- // project,
113
- // type,
114
- // date: new Date(),
115
- // custom,
116
- // version,
117
- // },
118
- // user,
119
- // 'change',
120
- // app,
121
- // );
122
- // }
123
- // async updateFiles(file: Buffer, type: 'app' | 'server', version: string, options: { company: string, project: string, user: string, app: string, isBase?: boolean }) {
124
- // let targetFolder: string = 'editor';
125
- // let cleanFolder: string = 'editor';
126
- // if (options.isBase) {
127
- // if (type === 'app') {
128
- // targetFolder = 'editorBase/app';
129
- // cleanFolder = 'editorBase/app';
130
- // }
131
- // if (type === 'server') {
132
- // targetFolder = 'editorBase/server';
133
- // cleanFolder = 'editorBase/server';
134
- // }
135
- // } else {
136
- // if (version === '3') {
137
- // targetFolder = 'editor';
138
- // } else {
139
- // targetFolder = 'editor';
140
- // cleanFolder = 'editor';
141
- // }
142
- // }
143
- // if (type === 'app') await HandleFileService.clean(options.company, options.project, cleanFolder);
144
- // return HandleFileService.add(options.company, options.project, file, targetFolder)
145
- // .then(() => this.upsertType(options.company, options.project, type, version, !options.isBase, options.user, options.app));
146
- // }
147
- // syncFiles(company: string, project: string, user: string, app: string, isBase = false) {
148
- // return this.syncFilesType(company, project, 'app', user, app, isBase)
149
- // .then(() => this.syncFilesType(company, project, 'server', user, app, isBase));
150
- // }
151
- // async syncFilesType(
152
- // company: string,
153
- // project: string,
154
- // type: 'app' | 'server',
155
- // user: string,
156
- // app: string,
157
- // isBase = false,
158
- // reset?: boolean,
159
- // ) {
160
- // /**
161
- // if its not a reset to the standard renderer, we need to check if that the target is NOT a custom renderer
162
- // */
163
- // if (!reset) {
164
- // const target = await this.single(company, project, type);
165
- // if (target?.custom) throw new Error('CANT_SYNC_CUSTOM_RENDERER');
166
- // }
167
- // const base = await this.single('lilaquadrat', 'base', type);
168
- // if (!base) throw new Error('BASE_NOT_FOUND');
169
- // if (type === 'app') await HandleFileService.clean(company, project, isBase ? 'editorBase' : 'editor');
170
- // return this.copyBase(company, project, type, 'lilaquadrat/base/editorBase', user, app)
171
- // .then(() => this.upsertType(company, project, type, base.version, false, user, app));
172
- // }
173
- // async updateAvailable(company: string, project: string, type: 'app' | 'server') {
174
- // const companyBase = await this.model.db.findOne({ company, project, type });
175
- // const systemBase = await this.model.db.findOne({ company: 'lilaquadrat', project: 'base', type });
176
- // if (!systemBase) return false;
177
- // if (!companyBase) return true;
178
- // // if the used base is a customized, dont show an available update
179
- // if (companyBase.custom) return false;
180
- // if (companyBase.date < systemBase.date) return true;
181
- // return false;
182
- // }
183
- // }
184
- // export default new EditorBaseService();
185
- //# sourceMappingURL=editorBase.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"editorBase.service.js","sourceRoot":"","sources":["../../../src/services/editorBase.service.ts"],"names":[],"mappings":"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"}