@lilaquadrat/studio 10.0.0-beta.5 → 10.0.0-beta.51

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 (212) hide show
  1. package/eslint.config.js +146 -0
  2. package/lib/fastify-plugins.d.ts +4 -0
  3. package/lib/fastify-plugins.js +5 -0
  4. package/lib/fastify-plugins.js.map +1 -0
  5. package/lib/helpers.d.ts +4 -2
  6. package/lib/helpers.js +13 -2
  7. package/lib/helpers.js.map +1 -1
  8. package/lib/main.d.ts +1 -3
  9. package/lib/main.js +7 -3
  10. package/lib/main.js.map +1 -1
  11. package/lib/models.d.ts +4 -4
  12. package/lib/models.js +4 -4
  13. package/lib/models.js.map +1 -1
  14. package/lib/services.d.ts +5 -8
  15. package/lib/services.js +27 -9
  16. package/lib/services.js.map +1 -1
  17. package/lib/src/Immutable.class.d.ts +8 -1
  18. package/lib/src/Immutable.class.js +52 -8
  19. package/lib/src/Immutable.class.js.map +1 -1
  20. package/lib/src/ShareClientFactory.class.d.ts +1 -3
  21. package/lib/src/ShareClientFactory.class.js +1 -9
  22. package/lib/src/ShareClientFactory.class.js.map +1 -1
  23. package/lib/src/classes/models.class.js.map +1 -1
  24. package/lib/src/classes/modelv2.class.d.ts +2 -0
  25. package/lib/src/classes/modelv2.class.js +1 -1
  26. package/lib/src/classes/modelv2.class.js.map +1 -1
  27. package/lib/src/classes/mongo.class.js +4 -14
  28. package/lib/src/classes/mongo.class.js.map +1 -1
  29. package/lib/src/functions/handleError.d.ts +2 -3
  30. package/lib/src/functions/handleError.js +3 -16
  31. package/lib/src/functions/handleError.js.map +1 -1
  32. package/lib/src/functions/optionsHelper.d.ts +4 -4
  33. package/lib/src/functions/optionsHelper.js +5 -4
  34. package/lib/src/functions/optionsHelper.js.map +1 -1
  35. package/lib/src/functions/respondCode.d.ts +2 -1
  36. package/lib/src/functions/respondCode.js +1 -1
  37. package/lib/src/functions/respondCode.js.map +1 -1
  38. package/lib/src/helpers/ControllerHelper.d.ts +73 -0
  39. package/lib/src/helpers/ControllerHelper.js +242 -0
  40. package/lib/src/helpers/ControllerHelper.js.map +1 -0
  41. package/lib/src/helpers/EnvMapper.d.ts +0 -0
  42. package/lib/src/helpers/EnvMapper.js +1 -0
  43. package/lib/src/helpers/EnvMapper.js.map +1 -0
  44. package/lib/src/helpers/auth0config.d.ts +6 -0
  45. package/lib/src/helpers/auth0config.js +23 -0
  46. package/lib/src/helpers/auth0config.js.map +1 -0
  47. package/lib/src/helpers/authPlugin.d.ts +29 -0
  48. package/lib/src/helpers/authPlugin.js +77 -0
  49. package/lib/src/helpers/authPlugin.js.map +1 -0
  50. package/lib/src/helpers/cacheHelper.d.ts +69 -0
  51. package/lib/src/helpers/cacheHelper.js +235 -0
  52. package/lib/src/helpers/cacheHelper.js.map +1 -0
  53. package/lib/src/helpers/createSasToken.d.ts +0 -2
  54. package/lib/src/helpers/createSasToken.js +35 -32
  55. package/lib/src/helpers/createSasToken.js.map +1 -1
  56. package/lib/src/helpers/getSecrets.d.ts +1 -1
  57. package/lib/src/helpers/getSecrets.js +10 -12
  58. package/lib/src/helpers/getSecrets.js.map +1 -1
  59. package/lib/src/helpers/queryAssertionPlugin.d.ts +3 -0
  60. package/lib/src/helpers/queryAssertionPlugin.js +20 -0
  61. package/lib/src/helpers/queryAssertionPlugin.js.map +1 -0
  62. package/lib/src/helpers/safeObjectId.d.ts +1 -1
  63. package/lib/src/helpers/safeObjectId.js +5 -1
  64. package/lib/src/helpers/safeObjectId.js.map +1 -1
  65. package/lib/src/helpers/storageSdkFactory.d.ts +2 -0
  66. package/lib/src/helpers/storageSdkFactory.js +11 -0
  67. package/lib/src/helpers/storageSdkFactory.js.map +1 -0
  68. package/lib/src/helpers/studioAppPlugin.d.ts +3 -0
  69. package/lib/src/helpers/studioAppPlugin.js +16 -0
  70. package/lib/src/helpers/studioAppPlugin.js.map +1 -0
  71. package/lib/src/logger.js +154 -32
  72. package/lib/src/logger.js.map +1 -1
  73. package/lib/src/models/customers.model.js +14 -4
  74. package/lib/src/models/customers.model.js.map +1 -1
  75. package/lib/src/models/design.model.d.ts +4 -0
  76. package/lib/src/models/design.model.js +58 -0
  77. package/lib/src/models/design.model.js.map +1 -0
  78. package/lib/src/models/domain.model.js +1 -1
  79. package/lib/src/models/domain.model.js.map +1 -1
  80. package/lib/src/models/editor.model.js +7 -0
  81. package/lib/src/models/editor.model.js.map +1 -1
  82. package/lib/src/models/emailLimit.model.d.ts +4 -0
  83. package/lib/src/models/emailLimit.model.js +31 -0
  84. package/lib/src/models/emailLimit.model.js.map +1 -0
  85. package/lib/src/models/hosting.model.js +1 -3
  86. package/lib/src/models/hosting.model.js.map +1 -1
  87. package/lib/src/models/hostingSettings.model.js +6 -4
  88. package/lib/src/models/hostingSettings.model.js.map +1 -1
  89. package/lib/src/models/invoice.model.d.ts +4 -0
  90. package/lib/src/models/invoice.model.js +235 -0
  91. package/lib/src/models/invoice.model.js.map +1 -0
  92. package/lib/src/models/mailFrom.model.js +53 -10
  93. package/lib/src/models/mailFrom.model.js.map +1 -1
  94. package/lib/src/models/project.model.js +2 -4
  95. package/lib/src/models/project.model.js.map +1 -1
  96. package/lib/src/models/publish-method.model.js +79 -430
  97. package/lib/src/models/publish-method.model.js.map +1 -1
  98. package/lib/src/models/storage.model.js +11 -3
  99. package/lib/src/models/storage.model.js.map +1 -1
  100. package/lib/src/prompts/textGeneration.js +88 -0
  101. package/lib/src/prompts/textGeneration.js.map +1 -1
  102. package/lib/src/prompts/textGenerationMulti.js +78 -44
  103. package/lib/src/prompts/textGenerationMulti.js.map +1 -1
  104. package/lib/src/services/access.service.d.ts +0 -37
  105. package/lib/src/services/access.service.js +119 -108
  106. package/lib/src/services/access.service.js.map +1 -1
  107. package/lib/src/services/ai.service.d.ts +4 -3
  108. package/lib/src/services/ai.service.js +22 -29
  109. package/lib/src/services/ai.service.js.map +1 -1
  110. package/lib/src/services/auth.service.d.ts +10 -0
  111. package/lib/src/services/auth.service.js +63 -0
  112. package/lib/src/services/auth.service.js.map +1 -0
  113. package/lib/src/services/conf.service.d.ts +3 -31
  114. package/lib/src/services/conf.service.js +58 -167
  115. package/lib/src/services/conf.service.js.map +1 -1
  116. package/lib/src/services/customers.service.d.ts +8 -4
  117. package/lib/src/services/customers.service.js +34 -7
  118. package/lib/src/services/customers.service.js.map +1 -1
  119. package/lib/src/services/designs.service.d.ts +7 -0
  120. package/lib/src/services/designs.service.js +10 -0
  121. package/lib/src/services/designs.service.js.map +1 -0
  122. package/lib/src/services/domains.service.d.ts +18 -91
  123. package/lib/src/services/domains.service.js +91 -559
  124. package/lib/src/services/domains.service.js.map +1 -1
  125. package/lib/src/services/editor.service.d.ts +4 -0
  126. package/lib/src/services/editor.service.js +28 -0
  127. package/lib/src/services/editor.service.js.map +1 -1
  128. package/lib/src/services/emailLimit.service.d.ts +21 -0
  129. package/lib/src/services/emailLimit.service.js +51 -0
  130. package/lib/src/services/emailLimit.service.js.map +1 -0
  131. package/lib/src/services/hosting.service.d.ts +12 -24
  132. package/lib/src/services/hosting.service.js +32 -122
  133. package/lib/src/services/hosting.service.js.map +1 -1
  134. package/lib/src/services/hostingAdmin.service.d.ts +1 -1
  135. package/lib/src/services/hostingAdmin.service.js +2 -2
  136. package/lib/src/services/hostingAdmin.service.js.map +1 -1
  137. package/lib/src/services/import.service.d.ts +6 -22
  138. package/lib/src/services/import.service.js +63 -65
  139. package/lib/src/services/import.service.js.map +1 -1
  140. package/lib/src/services/invoices.service.d.ts +30 -0
  141. package/lib/src/services/invoices.service.js +265 -0
  142. package/lib/src/services/invoices.service.js.map +1 -0
  143. package/lib/src/services/jetstream.service.d.ts +5 -3
  144. package/lib/src/services/jetstream.service.js +63 -7
  145. package/lib/src/services/jetstream.service.js.map +1 -1
  146. package/lib/src/services/listParticipants.service.d.ts +2 -5
  147. package/lib/src/services/listParticipants.service.js +17 -14
  148. package/lib/src/services/listParticipants.service.js.map +1 -1
  149. package/lib/src/services/mailFrom.service.d.ts +14 -1
  150. package/lib/src/services/mailFrom.service.js +55 -0
  151. package/lib/src/services/mailFrom.service.js.map +1 -1
  152. package/lib/src/services/me.service.d.ts +22 -12
  153. package/lib/src/services/me.service.js +58 -89
  154. package/lib/src/services/me.service.js.map +1 -1
  155. package/lib/src/services/publish.service.d.ts +3 -7
  156. package/lib/src/services/publish.service.js +32 -32
  157. package/lib/src/services/publish.service.js.map +1 -1
  158. package/lib/src/services/publishData.service.d.ts +10 -7
  159. package/lib/src/services/publishData.service.js +32 -75
  160. package/lib/src/services/publishData.service.js.map +1 -1
  161. package/lib/src/services/spamAnalasys.service.d.ts +4 -4
  162. package/lib/src/services/spamAnalasys.service.js +36 -44
  163. package/lib/src/services/spamAnalasys.service.js.map +1 -1
  164. package/lib/src/services/storage.service.d.ts +22 -29
  165. package/lib/src/services/storage.service.js +123 -57
  166. package/lib/src/services/storage.service.js.map +1 -1
  167. package/lib/src/services/structures.service.d.ts +1 -1
  168. package/lib/src/services/upload.service.js +6 -1
  169. package/lib/src/services/upload.service.js.map +1 -1
  170. package/package.json +28 -29
  171. package/lib/src/AzureBlobStorage.share.d.ts +0 -19
  172. package/lib/src/AzureBlobStorage.share.js +0 -162
  173. package/lib/src/AzureBlobStorage.share.js.map +0 -1
  174. package/lib/src/AzureFileStorage.share.d.ts +0 -22
  175. package/lib/src/AzureFileStorage.share.js +0 -139
  176. package/lib/src/AzureFileStorage.share.js.map +0 -1
  177. package/lib/src/AzureVault.d.ts +0 -14
  178. package/lib/src/AzureVault.js +0 -28
  179. package/lib/src/AzureVault.js.map +0 -1
  180. package/lib/src/dns.challenge.class.d.ts +0 -17
  181. package/lib/src/dns.challenge.class.js +0 -41
  182. package/lib/src/dns.challenge.class.js.map +0 -1
  183. package/lib/src/http.challenge.class.d.ts +0 -33
  184. package/lib/src/http.challenge.class.js +0 -58
  185. package/lib/src/http.challenge.class.js.map +0 -1
  186. package/lib/src/models/certificate-action.model.d.ts +0 -5
  187. package/lib/src/models/certificate-action.model.js +0 -230
  188. package/lib/src/models/certificate-action.model.js.map +0 -1
  189. package/lib/src/models/certificate.model.d.ts +0 -4
  190. package/lib/src/models/certificate.model.js +0 -96
  191. package/lib/src/models/certificate.model.js.map +0 -1
  192. package/lib/src/models/editorBase.model.d.ts +0 -4
  193. package/lib/src/models/editorBase.model.js +0 -39
  194. package/lib/src/models/editorBase.model.js.map +0 -1
  195. package/lib/src/services/certificates.service.d.ts +0 -56
  196. package/lib/src/services/certificates.service.js +0 -169
  197. package/lib/src/services/certificates.service.js.map +0 -1
  198. package/lib/src/services/certificatesAction.service.d.ts +0 -41
  199. package/lib/src/services/certificatesAction.service.js +0 -188
  200. package/lib/src/services/certificatesAction.service.js.map +0 -1
  201. package/lib/src/services/editorBase.service.d.ts +0 -46
  202. package/lib/src/services/editorBase.service.js +0 -161
  203. package/lib/src/services/editorBase.service.js.map +0 -1
  204. package/lib/src/services/handleFile.service.d.ts +0 -9
  205. package/lib/src/services/handleFile.service.js +0 -45
  206. package/lib/src/services/handleFile.service.js.map +0 -1
  207. package/lib/src/services/media.service.d.ts +0 -35
  208. package/lib/src/services/media.service.js +0 -418
  209. package/lib/src/services/media.service.js.map +0 -1
  210. package/lib/src/services/share.service.d.ts +0 -6
  211. package/lib/src/services/share.service.js +0 -4
  212. package/lib/src/services/share.service.js.map +0 -1
@@ -1,96 +0,0 @@
1
- import Modelv2 from '../classes/modelv2.class.js';
2
- const model = new Modelv2('certificates', 'certificates');
3
- model.addIndex({
4
- key: {
5
- domains: 1,
6
- company: 1,
7
- project: 1,
8
- },
9
- name: 'domains',
10
- }, 1);
11
- model.setSchema({
12
- type: 'object',
13
- properties: {
14
- company: { type: 'string' },
15
- project: { type: 'string' },
16
- filename: { type: 'string' },
17
- type: { enum: ['domain'] },
18
- contentType: { enum: ['pem', 'pfx'] },
19
- domains: {
20
- type: 'array',
21
- items: {
22
- type: 'string',
23
- minLength: 3,
24
- maxLength: 50,
25
- },
26
- },
27
- valid: {
28
- type: 'object',
29
- properties: {
30
- from: { type: 'object' },
31
- to: { type: 'object' },
32
- },
33
- },
34
- additionalProperties: false,
35
- },
36
- required: ['domains', 'company', 'project', 'type', 'contentType'],
37
- additionalProperties: false,
38
- }, 'create-domain');
39
- model.setSchema({
40
- type: 'object',
41
- properties: {
42
- company: { type: 'string' },
43
- project: { type: 'string' },
44
- filename: { type: 'string' },
45
- type: { enum: ['wildcard'] },
46
- contentType: { enum: ['pem', 'pfx'] },
47
- domains: {
48
- type: 'array',
49
- items: {
50
- type: 'string',
51
- minLength: 3,
52
- maxLength: 50,
53
- },
54
- },
55
- valid: {
56
- type: 'object',
57
- properties: {
58
- from: { type: 'object' },
59
- to: { type: 'object' },
60
- },
61
- },
62
- additionalProperties: false,
63
- },
64
- required: ['domains', 'type', 'contentType'],
65
- additionalProperties: false,
66
- }, 'create-wildcard');
67
- model.setSchema({
68
- type: 'object',
69
- properties: {
70
- company: { type: 'string' },
71
- project: { type: 'string' },
72
- filename: { type: 'string' },
73
- type: { enum: ['domain', 'wildcard'] },
74
- contentType: { enum: ['pem', 'pfx'] },
75
- domains: {
76
- type: 'array',
77
- items: {
78
- type: 'string',
79
- minLength: 3,
80
- maxLength: 50,
81
- },
82
- },
83
- valid: {
84
- type: 'object',
85
- properties: {
86
- from: { type: 'object' },
87
- to: { type: 'object' },
88
- },
89
- },
90
- additionalProperties: false,
91
- },
92
- required: ['domains', 'type', 'contentType'],
93
- additionalProperties: false,
94
- }, 'change');
95
- export default model;
96
- //# sourceMappingURL=certificate.model.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"certificate.model.js","sourceRoot":"","sources":["../../../src/models/certificate.model.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import Modelv2 from '../classes/modelv2.class.js';
2
- import { EditorBase } from '@lilaquadrat/interfaces';
3
- declare const model: Modelv2<EditorBase, string>;
4
- export default model;
@@ -1,39 +0,0 @@
1
- import Modelv2 from '../classes/modelv2.class.js';
2
- const model = new Modelv2('editorBase', 'editorBase');
3
- model.addIndex({
4
- key: {
5
- company: 1,
6
- project: 1,
7
- type: 1,
8
- },
9
- unique: true,
10
- name: 'unique-id-project',
11
- }, 2);
12
- model.setSchema({
13
- type: 'object',
14
- properties: {
15
- company: { type: 'string' },
16
- project: { type: 'string' },
17
- type: { type: 'string' },
18
- version: { type: 'string' },
19
- custom: { type: 'boolean' },
20
- date: { type: 'object' },
21
- },
22
- required: ['date', 'type', 'company', 'project'],
23
- additionalProperties: false,
24
- }, 'create');
25
- model.setSchema({
26
- type: 'object',
27
- properties: {
28
- company: { type: 'string' },
29
- project: { type: 'string' },
30
- type: { type: 'string' },
31
- version: { type: 'string' },
32
- custom: { type: 'boolean' },
33
- date: { type: 'object' },
34
- },
35
- required: ['date', 'type', 'company', 'project'],
36
- additionalProperties: false,
37
- }, 'change');
38
- export default model;
39
- //# sourceMappingURL=editorBase.model.js.map
@@ -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"}
@@ -1,56 +0,0 @@
1
- import { PeerCertificate } from 'tls';
2
- import { ClientSecretCredential, DefaultAzureCredential } from '@azure/identity';
3
- import Immutable from '../Immutable.class.js';
4
- import { BasicData, Certificate, CertificateAction, ShareClientInterface, UserApp, WildcardCertificates } from '@lilaquadrat/interfaces';
5
- export declare class CertificatesService extends Immutable<Certificate> {
6
- model: import("../classes/modelv2.class.js").default<Certificate, "change" | "create-domain" | "create-wildcard">;
7
- shareClient?: ShareClientInterface;
8
- acme_email?: string;
9
- acme_directory: string;
10
- constructor(acme_email?: string, acmeMode?: 'staging' | 'live', shareClient?: ShareClientInterface);
11
- exists(domain: string, company: string, project: string): Promise<number>;
12
- /**
13
- * gets a valid domain based certificate for the provided domain, if no certificate matches, a new one will be requested
14
- */
15
- getOrRequest(domain: string, company: string, project: string, user: string, app: string): Promise<{
16
- type: 'certificate';
17
- data: BasicData<Certificate>;
18
- } | {
19
- type: 'request';
20
- data: BasicData<CertificateAction>['_id'];
21
- }>;
22
- getOrRequestWildcard(domain: string, options: Required<UserApp> & {
23
- forceFile?: boolean;
24
- saveInVault?: boolean;
25
- }): Promise<{
26
- type: 'certificate';
27
- data: BasicData<Certificate>;
28
- } | {
29
- type: 'request';
30
- data: BasicData<CertificateAction>['_id'];
31
- }>;
32
- getCertificateDetails(cert: string): PeerCertificate;
33
- getBase(inputDomains: string[], type: 'wildcard' | 'domain', privateKey: string, privateServerKey: string): Promise<{
34
- acme: any;
35
- account: any;
36
- accountKey: any;
37
- csr: any;
38
- domains: string[];
39
- }>;
40
- /**
41
- * creates a letsencrypt wildcard SSL certificate on the given azure subscription
42
- */
43
- createWildcard(domain: string, privateKey: string, privateServerKey: string, credentials: ClientSecretCredential | DefaultAzureCredential, azureSubscriptionId: string): Promise<WildcardCertificates>;
44
- convertToPfx(certificate: string, privateKey: string, tempName: string): Promise<Buffer<ArrayBufferLike>>;
45
- /**
46
- * creates a letsencrypt certificate for all given domain
47
- * http challenge will be used
48
- */
49
- createSSl(domains: string[], company: string, project: string, privateKey: string, privateServerKey: string): Promise<WildcardCertificates>;
50
- /**
51
- * calls ``http://DOMAIN/.studio/check/`` to check if the response code is 202
52
- */
53
- checkResponses(domains: string[]): Promise<boolean>;
54
- }
55
- declare const _default: CertificatesService;
56
- export default _default;
@@ -1,169 +0,0 @@
1
- import tls from 'tls';
2
- import net from 'net';
3
- import fs from 'fs';
4
- import ACME from '@root/acme';
5
- import CSR from '@root/csr';
6
- import PEM from '@root/pem/packer';
7
- import Keypairs from '@root/keypairs';
8
- import { exec } from 'child_process';
9
- import fetch from 'node-fetch';
10
- import { X509Certificate } from 'node:crypto';
11
- import CertificateModel from '../models/certificate.model.js';
12
- import Immutable from '../Immutable.class.js';
13
- import certificatesActionsService from './certificatesAction.service.js';
14
- import HttpSslChallenge from '../http.challenge.class.js';
15
- import logger from '../logger.js';
16
- import DnsSslChallenge from '../dns.challenge.class.js';
17
- export class CertificatesService extends Immutable {
18
- constructor(acme_email, acmeMode, shareClient) {
19
- super();
20
- this.model = CertificateModel;
21
- this.shareClient = shareClient;
22
- this.acme_email = acme_email;
23
- this.acme_directory = acmeMode === 'live'
24
- ? 'https://acme-v02.api.letsencrypt.org/directory'
25
- : 'https://acme-staging-v02.api.letsencrypt.org/directory';
26
- }
27
- exists(domain, company, project) {
28
- return this.model.db.countDocuments({ domains: { $in: [domain] }, company, project });
29
- }
30
- /**
31
- * gets a valid domain based certificate for the provided domain, if no certificate matches, a new one will be requested
32
- */
33
- async getOrRequest(domain, company, project, user, app) {
34
- const certificate = await this.model.db.findOne({
35
- domains: {
36
- $in: [domain],
37
- },
38
- 'valid.from': { $lte: new Date() },
39
- 'valid.to': { $gte: new Date() },
40
- company,
41
- project,
42
- });
43
- if (certificate)
44
- return { type: 'certificate', data: certificate };
45
- const request = await certificatesActionsService.request([domain], 'domain', 'pem', true, {
46
- company,
47
- project,
48
- user,
49
- app,
50
- timeout: 120,
51
- forceFile: true,
52
- });
53
- return {
54
- type: 'request',
55
- data: request._id,
56
- };
57
- }
58
- async getOrRequestWildcard(domain, options) {
59
- const certificate = await this.model.db.findOne({ domains: { $in: [domain] } });
60
- if (certificate)
61
- return { type: 'certificate', data: certificate };
62
- const request = await certificatesActionsService.request([domain], 'wildcard', 'pem', true, options);
63
- return {
64
- type: 'request',
65
- data: request._id,
66
- };
67
- }
68
- getCertificateDetails(cert) {
69
- const secureContext = tls.createSecureContext({ cert });
70
- const secureSocket = new tls.TLSSocket(new net.Socket(), { secureContext });
71
- const details = secureSocket.getCertificate();
72
- secureSocket.destroy();
73
- return details;
74
- }
75
- async getBase(inputDomains, type, privateKey, privateServerKey) {
76
- const domains = type === 'wildcard' ? [`*.${inputDomains[0]}`] : inputDomains;
77
- const acme = ACME.create({ maintainerEmail: this.acme_email, packageAgent: 'lilastudio/v1.4', notify: () => { } });
78
- await acme.init(this.acme_directory);
79
- const accountKey = await Keypairs.import({ pem: privateKey });
80
- const serverKey = await Keypairs.import({ pem: privateServerKey });
81
- const account = await acme.accounts.create({ accountKey, subscriberEmail: this.acme_email, agreeToTerms: true });
82
- const der = await CSR.csr({
83
- domains,
84
- jwk: serverKey,
85
- encoding: 'der',
86
- });
87
- const csr = await PEM.packBlock({ type: 'CERTIFICATE REQUEST', bytes: der });
88
- return {
89
- acme,
90
- account,
91
- accountKey,
92
- csr,
93
- domains,
94
- };
95
- }
96
- /**
97
- * creates a letsencrypt wildcard SSL certificate on the given azure subscription
98
- */
99
- async createWildcard(domain, privateKey, privateServerKey, credentials, azureSubscriptionId) {
100
- const optionsBase = await this.getBase([domain], 'wildcard', privateKey, privateServerKey);
101
- const options = {
102
- account: optionsBase.account,
103
- accountKey: optionsBase.accountKey,
104
- csr: optionsBase.csr,
105
- domains: optionsBase.domains,
106
- challenges: {
107
- 'dns-01': new DnsSslChallenge(domain, credentials, process.env.AZURE_RESOURCE_GROUP, azureSubscriptionId),
108
- },
109
- };
110
- const certificate = await optionsBase.acme.certificates.create(options);
111
- const crypto = new X509Certificate(`${certificate.cert}\n${certificate.chain}\n`);
112
- certificate.valid = {
113
- from: new Date(crypto.validFrom),
114
- to: new Date(crypto.validTo),
115
- };
116
- return certificate;
117
- }
118
- convertToPfx(certificate, privateKey, tempName) {
119
- return new Promise((resolve, reject) => {
120
- exec(`openssl pkcs12 -export -passout pass: -inkey <(echo "${privateKey}") -in <(echo "${certificate}") -out ${tempName}.pfx`, { timeout: 5000 }, (e, stdout, stderr) => {
121
- // if (this.debug) {
122
- logger.debug('stdout ', stdout);
123
- logger.debug('stderr ', stderr);
124
- // }
125
- if (e instanceof Error) {
126
- return reject(e);
127
- }
128
- const content = fs.readFileSync(`${tempName}.pfx`);
129
- fs.rm(`${tempName}.pfx`, () => { });
130
- return resolve(content);
131
- });
132
- });
133
- }
134
- /**
135
- * creates a letsencrypt certificate for all given domain
136
- * http challenge will be used
137
- */
138
- async createSSl(domains, company, project, privateKey, privateServerKey) {
139
- if (!this.shareClient)
140
- throw new Error('SHARECLIENT_NOT_INITIALIZED');
141
- const optionsBase = await this.getBase(domains, 'domain', privateKey, privateServerKey);
142
- const options = {
143
- account: optionsBase.account,
144
- accountKey: optionsBase.accountKey,
145
- csr: optionsBase.csr,
146
- domains: optionsBase.domains,
147
- challenges: {
148
- 'http-01': new HttpSslChallenge(company, project, this.shareClient),
149
- },
150
- };
151
- const certificate = await optionsBase.acme.certificates.create(options);
152
- const crypto = new X509Certificate(`${certificate.cert}\n${certificate.chain}\n`);
153
- certificate.valid = {
154
- from: new Date(crypto.validFrom),
155
- to: new Date(crypto.validTo),
156
- };
157
- return certificate;
158
- }
159
- /**
160
- * calls ``http://DOMAIN/.studio/check/`` to check if the response code is 202
161
- */
162
- checkResponses(domains) {
163
- const PromiseArray = domains.map((single) => fetch(`http://${single}/.studio/check/`, { timeout: 5000 }));
164
- return Promise.all(PromiseArray)
165
- .then((responses) => responses.filter((single) => single.status !== 202).length === 0);
166
- }
167
- }
168
- export default new CertificatesService();
169
- //# 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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"}
@@ -1,41 +0,0 @@
1
- import { QueueClient, QueueServiceClient } from '@azure/storage-queue';
2
- import { ObjectId } from 'mongodb';
3
- import Immutable from '../Immutable.class.js';
4
- import { CertificateAction, Certificate, BasicData, CertificateActionResult, CreateResult, ListCustomQueries, Options, SkipLimitSort, UserApp, UserAppWithOptions } from '@lilaquadrat/interfaces';
5
- export declare class CertificatesActionsService extends Immutable<CertificateAction> {
6
- model: import("../classes/modelv2.class.js").default<CertificateAction, import("../models/certificate-action.model.js").CertificateActions>;
7
- service: QueueServiceClient;
8
- client: QueueClient;
9
- constructor(connectionString: string, storageAccount?: string);
10
- request(domains: CertificateAction['domains'], type: 'domain', contentType: CertificateAction['contentType'], renew: boolean, options: Required<UserApp> & Required<Options> & {
11
- timeout?: number;
12
- forceFile?: CertificateAction['forceFile'];
13
- saveInVault?: CertificateAction['saveInVault'];
14
- }): Promise<CreateResult<CertificateAction>>;
15
- request(domains: CertificateAction['domains'], type: 'wildcard', contentType: CertificateAction['contentType'], renew: boolean, options: Required<UserApp> & {
16
- timeout?: number;
17
- forceFile?: CertificateAction['forceFile'];
18
- saveInVault?: CertificateAction['saveInVault'];
19
- }): Promise<CreateResult<CertificateAction>>;
20
- planRenew(certificate: Certificate, validPercent: number, options: Required<UserApp> & Options & {
21
- timeout?: number;
22
- forceFile?: CertificateAction['forceFile'];
23
- saveInVault?: CertificateAction['saveInVault'];
24
- }): Promise<void> | Promise<CreateResult<BasicData<CertificateAction>>>;
25
- planRetry(certificateAction: BasicData<CertificateAction>, error: CertificateActionResult, retryTimeout: number | undefined, user: string, app: string): Promise<boolean>;
26
- addToQueue(actionInternalId: ObjectId, visibilityTimeout?: number): Promise<import("@azure/storage-queue").QueueSendMessageResponse>;
27
- single(actionInternalId: ObjectId): Promise<import("mongodb").WithId<CertificateAction> | null>;
28
- latest(domain: string, company: string, project: string): Promise<import("mongodb").WithId<CertificateAction>>;
29
- getPlanned(): Promise<import("mongodb").WithId<CertificateAction>[]>;
30
- handlePlanned(): Promise<Promise<import("@azure/storage-queue").QueueSendMessageResponse>[]>;
31
- setState(actionInternalId: ObjectId, state: CertificateAction['state'], user: string, app: string): Promise<import("mongodb").UpdateResult<BasicData<CertificateAction>>>;
32
- setResult(actionInternalId: ObjectId, result: CertificateActionResult, state: CertificateAction['state'], user: string, app: string): Promise<import("mongodb").UpdateResult<BasicData<CertificateAction>>>;
33
- getCustomQuery(filter: {
34
- domain?: string;
35
- state?: CertificateAction['state'];
36
- }, options: UserAppWithOptions & SkipLimitSort): ListCustomQueries<CertificateAction>;
37
- actionExistsForDomain(domain: string): Promise<boolean>;
38
- cancel(internalId: ObjectId, options: Required<UserApp>): Promise<import("mongodb").UpdateResult<BasicData<CertificateAction>>>;
39
- }
40
- declare const _default: CertificatesActionsService;
41
- export default _default;
@@ -1,188 +0,0 @@
1
- import { QueueServiceClient } from '@azure/storage-queue';
2
- import dayjs from 'dayjs';
3
- import logger from '../logger.js';
4
- import Immutable from '../Immutable.class.js';
5
- import CertificateActionModel from '../models/certificate-action.model.js';
6
- import hardCopy from '../helpers/hardCopy.js';
7
- import { DefaultAzureCredential } from '@azure/identity';
8
- export class CertificatesActionsService extends Immutable {
9
- constructor(connectionString, storageAccount) {
10
- super();
11
- this.model = CertificateActionModel;
12
- if (storageAccount) {
13
- logger.info('certificates-action.use.storage_account');
14
- const credentials = new DefaultAzureCredential();
15
- this.service = new QueueServiceClient(`https://${storageAccount}.queue.core.windows.net`, credentials);
16
- }
17
- else if (connectionString) {
18
- logger.info('certificates-action.use.connection_string');
19
- this.service = QueueServiceClient.fromConnectionString(connectionString);
20
- }
21
- if (this.service) {
22
- this.client = this.service.getQueueClient('certs');
23
- }
24
- }
25
- async request(domains, type, contentType, renew, options) {
26
- const actionObject = {
27
- domains,
28
- type,
29
- contentType,
30
- renew,
31
- state: 'new',
32
- maxRetries: 5,
33
- };
34
- if (options.company)
35
- actionObject.company = options.company;
36
- if (options.project)
37
- actionObject.project = options.project;
38
- if (options.forceFile)
39
- actionObject.forceFile = true;
40
- if (options.saveInVault)
41
- actionObject.saveInVault = true;
42
- const action = type === 'wildcard'
43
- ? 'create-wildcard'
44
- : 'create-domain';
45
- const newAction = await this.create(actionObject, options.user, options.app, undefined, undefined, action);
46
- await this.addToQueue(newAction._id, options.timeout);
47
- return newAction;
48
- }
49
- planRenew(certificate, validPercent, options) {
50
- const validDays = dayjs(certificate.valid.to).diff(certificate.valid.from, 'days');
51
- const renewInDays = Math.floor((validDays * (validPercent / 100)));
52
- if (renewInDays < 1) {
53
- logger.info('cant plan renew of certificate, renew in days is smaller than 1');
54
- return new Promise((resolve) => resolve());
55
- }
56
- const renewObject = {
57
- planned: dayjs(certificate.valid.from).add(renewInDays, 'days').toDate(),
58
- type: certificate.type,
59
- contentType: certificate.contentType,
60
- domains: certificate.domains,
61
- state: 'new',
62
- renew: true,
63
- maxRetries: 5,
64
- };
65
- if (certificate.company)
66
- renewObject.company = certificate.company;
67
- if (certificate.project)
68
- renewObject.project = certificate.project;
69
- if (options.forceFile)
70
- renewObject.forceFile = true;
71
- if (options.saveInVault)
72
- renewObject.saveInVault = true;
73
- const action = certificate.type === 'wildcard'
74
- ? 'create-wildcard'
75
- : 'create-domain';
76
- return this.create(renewObject, options.user, options.app, undefined, undefined, action);
77
- }
78
- async planRetry(certificateAction, error, retryTimeout = 86400, user, app) {
79
- const retry = certificateAction.retryCount !== certificateAction.maxRetries;
80
- const renewObject = {
81
- ...hardCopy(certificateAction),
82
- state: retry ? 'retry' : 'failed',
83
- renew: true,
84
- };
85
- if (!renewObject.results && error)
86
- renewObject.results = [];
87
- renewObject.results?.push(error);
88
- if (retry) {
89
- renewObject.retryCount = renewObject.retryCount
90
- ? renewObject.retryCount += 1
91
- : 1;
92
- }
93
- delete renewObject._id;
94
- delete renewObject.history;
95
- // hardCopy converts the Date Object to a string, validation expects a object
96
- if (renewObject.planned)
97
- renewObject.planned = new Date(renewObject.planned);
98
- await this.immutable(certificateAction._id, renewObject, user, 'change', app);
99
- if (retry)
100
- await this.addToQueue(certificateAction._id, retryTimeout);
101
- return true;
102
- }
103
- async addToQueue(actionInternalId, visibilityTimeout = 0) {
104
- await this.client.createIfNotExists();
105
- return this.client.sendMessage(Buffer.from(JSON.stringify({ _id: actionInternalId })).toString('base64'), { visibilityTimeout });
106
- }
107
- single(actionInternalId) {
108
- return this.model.db.findOne({ _id: actionInternalId });
109
- }
110
- async latest(domain, company, project) {
111
- const latest = await this.model.db.find({ domains: { $in: [domain] }, company, project }).sort({ _id: -1 }).limit(1).toArray();
112
- return latest[0];
113
- }
114
- getPlanned() {
115
- const select = {
116
- state: 'new',
117
- planned: { $lte: new Date(), $exists: true },
118
- };
119
- return CertificateActionModel.db.find(select, { sort: { planned: -1 } })
120
- .toArray();
121
- }
122
- async handlePlanned() {
123
- const planned = await this.getPlanned();
124
- const all = planned.map((single) => this.addToQueue(single._id));
125
- return all;
126
- }
127
- setState(actionInternalId, state, user, app) {
128
- return this.immutable(actionInternalId, { state }, user, 'change', app, undefined, undefined, 'stateChange');
129
- }
130
- async setResult(actionInternalId, result, state, user, app) {
131
- const baseAction = await this.model.db.findOne({ _id: actionInternalId }, { projection: { state: 1, results: 1 } });
132
- if (!baseAction)
133
- throw new Error('BASE_ACTION_MISSING');
134
- delete baseAction._id;
135
- baseAction.state = state;
136
- if (!baseAction.results && result)
137
- baseAction.results = [];
138
- baseAction.results?.push(result);
139
- return this.immutable(actionInternalId, baseAction, user, 'change', app, undefined, undefined, 'stateChangeResult');
140
- }
141
- getCustomQuery(filter, options) {
142
- const match = {};
143
- if (filter?.state) {
144
- match.state = filter.state;
145
- }
146
- // if (filter?.mode) {
147
- // match.mode = filter.mode;
148
- // }
149
- if (filter?.domain) {
150
- match.domains = { $in: [filter.domain] };
151
- }
152
- const aggregation = [
153
- {
154
- $match: match,
155
- },
156
- {
157
- $project: {
158
- type: 1,
159
- domains: 1,
160
- renew: 1,
161
- company: 1,
162
- project: 1,
163
- state: 1,
164
- planned: 1,
165
- history: 1,
166
- },
167
- },
168
- ];
169
- aggregation.push({
170
- $sort: options.sort || { _id: -1 },
171
- });
172
- if (options.skip) { }
173
- aggregation.push({
174
- $skip: options.skip,
175
- }, {
176
- $limit: options.limit,
177
- });
178
- return { aggregation, countQuery: match };
179
- }
180
- async actionExistsForDomain(domain) {
181
- return await this.model.db.countDocuments({ domains: { $in: [domain] }, state: { $in: ['new', 'planned', 'retry'] } }) > 0;
182
- }
183
- async cancel(internalId, options) {
184
- return this.immutable({ _id: internalId }, { state: 'canceled' }, options.user, 'change', options.app, undefined, undefined, 'stateChange');
185
- }
186
- }
187
- export default new CertificatesActionsService(process.env.PUBLISH_QUEUE_CONNECTION_STRING, process.env.STORAGE_ACCOUNT);
188
- //# 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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"}