@webda/core 2.0.0-beta.1 → 2.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.
Files changed (279) hide show
  1. package/lib/application.d.ts +9 -21
  2. package/lib/application.js +71 -84
  3. package/lib/application.js.map +1 -1
  4. package/lib/application.spec.js +121 -140
  5. package/lib/application.spec.js.map +1 -1
  6. package/lib/core.d.ts +86 -46
  7. package/lib/core.js +254 -316
  8. package/lib/core.js.map +1 -1
  9. package/lib/core.spec.js +326 -391
  10. package/lib/core.spec.js.map +1 -1
  11. package/lib/index.d.ts +49 -45
  12. package/lib/index.js +54 -67
  13. package/lib/index.js.map +1 -1
  14. package/lib/models/aclmodel.d.ts +2 -2
  15. package/lib/models/aclmodel.js +63 -90
  16. package/lib/models/aclmodel.js.map +1 -1
  17. package/lib/models/aclmodel.spec.js +127 -151
  18. package/lib/models/aclmodel.spec.js.map +1 -1
  19. package/lib/models/coremodel.d.ts +84 -11
  20. package/lib/models/coremodel.js +104 -103
  21. package/lib/models/coremodel.js.map +1 -1
  22. package/lib/models/coremodel.spec.js +91 -91
  23. package/lib/models/coremodel.spec.js.map +1 -1
  24. package/lib/models/deployment.js +1 -2
  25. package/lib/models/ident.d.ts +5 -3
  26. package/lib/models/ident.js +4 -9
  27. package/lib/models/ident.js.map +1 -1
  28. package/lib/models/ident.spec.js +9 -11
  29. package/lib/models/ident.spec.js.map +1 -1
  30. package/lib/models/ownermodel.d.ts +12 -2
  31. package/lib/models/ownermodel.js +54 -62
  32. package/lib/models/ownermodel.js.map +1 -1
  33. package/lib/models/ownermodel.spec.js +129 -152
  34. package/lib/models/ownermodel.spec.js.map +1 -1
  35. package/lib/models/rolemodel.d.ts +2 -2
  36. package/lib/models/rolemodel.js +24 -40
  37. package/lib/models/rolemodel.js.map +1 -1
  38. package/lib/models/rolemodel.spec.js +44 -61
  39. package/lib/models/rolemodel.spec.js.map +1 -1
  40. package/lib/models/user.d.ts +5 -5
  41. package/lib/models/user.js +3 -8
  42. package/lib/models/user.js.map +1 -1
  43. package/lib/models/user.spec.js +14 -16
  44. package/lib/models/user.spec.js.map +1 -1
  45. package/lib/queues/filequeue.d.ts +2 -2
  46. package/lib/queues/filequeue.js +72 -93
  47. package/lib/queues/filequeue.js.map +1 -1
  48. package/lib/queues/filequeue.spec.js +53 -70
  49. package/lib/queues/filequeue.spec.js.map +1 -1
  50. package/lib/queues/memoryqueue.d.ts +2 -2
  51. package/lib/queues/memoryqueue.js +37 -61
  52. package/lib/queues/memoryqueue.js.map +1 -1
  53. package/lib/queues/memoryqueue.spec.js +142 -165
  54. package/lib/queues/memoryqueue.spec.js.map +1 -1
  55. package/lib/queues/pubsubservice.d.ts +2 -2
  56. package/lib/queues/pubsubservice.js +3 -7
  57. package/lib/queues/pubsubservice.js.map +1 -1
  58. package/lib/queues/queue.spec.d.ts +1 -1
  59. package/lib/queues/queue.spec.js +42 -56
  60. package/lib/queues/queue.spec.js.map +1 -1
  61. package/lib/queues/queueservice.d.ts +4 -4
  62. package/lib/queues/queueservice.js +52 -67
  63. package/lib/queues/queueservice.js.map +1 -1
  64. package/lib/router.d.ts +7 -3
  65. package/lib/router.js +49 -48
  66. package/lib/router.js.map +1 -1
  67. package/lib/router.spec.js +64 -61
  68. package/lib/router.spec.js.map +1 -1
  69. package/lib/services/asyncevents.d.ts +2 -2
  70. package/lib/services/asyncevents.js +44 -64
  71. package/lib/services/asyncevents.js.map +1 -1
  72. package/lib/services/asyncevents.spec.js +81 -98
  73. package/lib/services/asyncevents.spec.js.map +1 -1
  74. package/lib/services/authentication.d.ts +28 -19
  75. package/lib/services/authentication.js +539 -571
  76. package/lib/services/authentication.js.map +1 -1
  77. package/lib/services/authentication.spec.js +411 -447
  78. package/lib/services/authentication.spec.js.map +1 -1
  79. package/lib/services/binary.d.ts +8 -6
  80. package/lib/services/binary.js +212 -244
  81. package/lib/services/binary.js.map +1 -1
  82. package/lib/services/binary.spec.d.ts +3 -3
  83. package/lib/services/binary.spec.js +390 -443
  84. package/lib/services/binary.spec.js.map +1 -1
  85. package/lib/services/cloudbinary.d.ts +3 -3
  86. package/lib/services/cloudbinary.js +46 -71
  87. package/lib/services/cloudbinary.js.map +1 -1
  88. package/lib/services/cloudbinary.spec.d.ts +3 -3
  89. package/lib/services/cloudbinary.spec.js +133 -162
  90. package/lib/services/cloudbinary.spec.js.map +1 -1
  91. package/lib/services/configuration.d.ts +6 -3
  92. package/lib/services/configuration.js +78 -103
  93. package/lib/services/configuration.js.map +1 -1
  94. package/lib/services/configuration.spec.js +63 -83
  95. package/lib/services/configuration.spec.js.map +1 -1
  96. package/lib/services/cron.d.ts +3 -2
  97. package/lib/services/cron.js +9 -13
  98. package/lib/services/cron.js.map +1 -1
  99. package/lib/services/cron.spec.js +18 -21
  100. package/lib/services/cron.spec.js.map +1 -1
  101. package/lib/services/cryptoservice.d.ts +258 -0
  102. package/lib/services/cryptoservice.js +312 -0
  103. package/lib/services/cryptoservice.js.map +1 -0
  104. package/lib/services/cryptoservice.spec.d.ts +1 -0
  105. package/lib/services/cryptoservice.spec.js +137 -0
  106. package/lib/services/cryptoservice.spec.js.map +1 -0
  107. package/lib/services/debugmailer.d.ts +1 -1
  108. package/lib/services/debugmailer.js +13 -34
  109. package/lib/services/debugmailer.js.map +1 -1
  110. package/lib/services/debugmailer.spec.js +16 -29
  111. package/lib/services/debugmailer.spec.js.map +1 -1
  112. package/lib/services/echo.d.ts +2 -2
  113. package/lib/services/echo.js +15 -31
  114. package/lib/services/echo.js.map +1 -1
  115. package/lib/services/echo.spec.js +27 -40
  116. package/lib/services/echo.spec.js.map +1 -1
  117. package/lib/services/filebinary.d.ts +15 -5
  118. package/lib/services/filebinary.js +171 -200
  119. package/lib/services/filebinary.js.map +1 -1
  120. package/lib/services/filebinary.spec.d.ts +2 -1
  121. package/lib/services/filebinary.spec.js +106 -117
  122. package/lib/services/filebinary.spec.js.map +1 -1
  123. package/lib/services/fileconfiguration.d.ts +2 -2
  124. package/lib/services/fileconfiguration.js +25 -43
  125. package/lib/services/fileconfiguration.js.map +1 -1
  126. package/lib/services/fileconfiguration.spec.js +79 -109
  127. package/lib/services/fileconfiguration.spec.js.map +1 -1
  128. package/lib/services/invitationservice.d.ts +9 -9
  129. package/lib/services/invitationservice.js +275 -313
  130. package/lib/services/invitationservice.js.map +1 -1
  131. package/lib/services/invitationservice.spec.js +442 -448
  132. package/lib/services/invitationservice.spec.js.map +1 -1
  133. package/lib/services/kubernetesconfiguration.d.ts +2 -2
  134. package/lib/services/kubernetesconfiguration.js +41 -59
  135. package/lib/services/kubernetesconfiguration.js.map +1 -1
  136. package/lib/services/kubernetesconfiguration.spec.js +80 -98
  137. package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
  138. package/lib/services/mailer.d.ts +4 -4
  139. package/lib/services/mailer.js +62 -86
  140. package/lib/services/mailer.js.map +1 -1
  141. package/lib/services/mailer.spec.js +86 -127
  142. package/lib/services/mailer.spec.js.map +1 -1
  143. package/lib/services/notificationservice.d.ts +4 -4
  144. package/lib/services/notificationservice.js +23 -42
  145. package/lib/services/notificationservice.js.map +1 -1
  146. package/lib/services/notificationservice.spec.js +47 -73
  147. package/lib/services/notificationservice.spec.js.map +1 -1
  148. package/lib/services/oauth.d.ts +32 -6
  149. package/lib/services/oauth.js +73 -78
  150. package/lib/services/oauth.js.map +1 -1
  151. package/lib/services/oauth.spec.js +128 -147
  152. package/lib/services/oauth.spec.js.map +1 -1
  153. package/lib/services/proxy.d.ts +74 -0
  154. package/lib/services/proxy.js +126 -0
  155. package/lib/services/proxy.js.map +1 -0
  156. package/lib/services/proxy.spec.d.ts +1 -0
  157. package/lib/services/proxy.spec.js +59 -0
  158. package/lib/services/proxy.spec.js.map +1 -0
  159. package/lib/services/resource.d.ts +2 -2
  160. package/lib/services/resource.js +12 -18
  161. package/lib/services/resource.js.map +1 -1
  162. package/lib/services/resource.spec.js +67 -99
  163. package/lib/services/resource.spec.js.map +1 -1
  164. package/lib/services/service.d.ts +33 -7
  165. package/lib/services/service.js +74 -42
  166. package/lib/services/service.js.map +1 -1
  167. package/lib/services/service.spec.js +62 -67
  168. package/lib/services/service.spec.js.map +1 -1
  169. package/lib/services/version.d.ts +1 -1
  170. package/lib/services/version.js +3 -8
  171. package/lib/services/version.js.map +1 -1
  172. package/lib/services/version.spec.js +11 -24
  173. package/lib/services/version.spec.js.map +1 -1
  174. package/lib/stores/aggregator.d.ts +3 -3
  175. package/lib/stores/aggregator.js +37 -57
  176. package/lib/stores/aggregator.js.map +1 -1
  177. package/lib/stores/file.d.ts +3 -3
  178. package/lib/stores/file.js +93 -131
  179. package/lib/stores/file.js.map +1 -1
  180. package/lib/stores/file.spec.d.ts +2 -2
  181. package/lib/stores/file.spec.js +261 -289
  182. package/lib/stores/file.spec.js.map +1 -1
  183. package/lib/stores/mapper.d.ts +4 -4
  184. package/lib/stores/mapper.js +112 -137
  185. package/lib/stores/mapper.js.map +1 -1
  186. package/lib/stores/mapper.spec.js +131 -150
  187. package/lib/stores/mapper.spec.js.map +1 -1
  188. package/lib/stores/memory.d.ts +67 -6
  189. package/lib/stores/memory.js +155 -117
  190. package/lib/stores/memory.js.map +1 -1
  191. package/lib/stores/memory.spec.d.ts +3 -2
  192. package/lib/stores/memory.spec.js +127 -105
  193. package/lib/stores/memory.spec.js.map +1 -1
  194. package/lib/stores/store.d.ts +35 -15
  195. package/lib/stores/store.js +839 -821
  196. package/lib/stores/store.js.map +1 -1
  197. package/lib/stores/store.spec.d.ts +6 -4
  198. package/lib/stores/store.spec.js +627 -647
  199. package/lib/stores/store.spec.js.map +1 -1
  200. package/lib/stores/webdaql/WebdaQLLexer.d.ts +4 -4
  201. package/lib/stores/webdaql/WebdaQLLexer.js +9 -13
  202. package/lib/stores/webdaql/WebdaQLLexer.js.map +1 -1
  203. package/lib/stores/webdaql/WebdaQLParserLexer.d.ts +4 -4
  204. package/lib/stores/webdaql/WebdaQLParserLexer.js +9 -13
  205. package/lib/stores/webdaql/WebdaQLParserLexer.js.map +1 -1
  206. package/lib/stores/webdaql/WebdaQLParserListener.d.ts +2 -2
  207. package/lib/stores/webdaql/WebdaQLParserListener.js +1 -2
  208. package/lib/stores/webdaql/WebdaQLParserListener.js.map +1 -1
  209. package/lib/stores/webdaql/WebdaQLParserParser.d.ts +10 -10
  210. package/lib/stores/webdaql/WebdaQLParserParser.js +62 -91
  211. package/lib/stores/webdaql/WebdaQLParserParser.js.map +1 -1
  212. package/lib/stores/webdaql/WebdaQLParserVisitor.d.ts +2 -2
  213. package/lib/stores/webdaql/WebdaQLParserVisitor.js +1 -2
  214. package/lib/stores/webdaql/WebdaQLParserVisitor.js.map +1 -1
  215. package/lib/stores/webdaql/query.d.ts +4 -5
  216. package/lib/stores/webdaql/query.js +16 -19
  217. package/lib/stores/webdaql/query.js.map +1 -1
  218. package/lib/stores/webdaql/query.spec.js +30 -32
  219. package/lib/stores/webdaql/query.spec.js.map +1 -1
  220. package/lib/test.d.ts +3 -3
  221. package/lib/test.js +74 -94
  222. package/lib/test.js.map +1 -1
  223. package/lib/unpackedapplication.d.ts +1 -1
  224. package/lib/unpackedapplication.js +25 -31
  225. package/lib/unpackedapplication.js.map +1 -1
  226. package/lib/utils/abstractdeployer.js +1 -5
  227. package/lib/utils/abstractdeployer.js.map +1 -1
  228. package/lib/utils/abstractdeployer.spec.js +6 -8
  229. package/lib/utils/abstractdeployer.spec.js.map +1 -1
  230. package/lib/utils/context.d.ts +61 -29
  231. package/lib/utils/context.js +133 -127
  232. package/lib/utils/context.js.map +1 -1
  233. package/lib/utils/context.spec.js +147 -153
  234. package/lib/utils/context.spec.js.map +1 -1
  235. package/lib/utils/cookie.d.ts +66 -45
  236. package/lib/utils/cookie.js +69 -158
  237. package/lib/utils/cookie.js.map +1 -1
  238. package/lib/utils/cookie.spec.js +220 -238
  239. package/lib/utils/cookie.spec.js.map +1 -1
  240. package/lib/utils/esm.d.ts +4 -0
  241. package/lib/utils/esm.js +10 -0
  242. package/lib/utils/esm.js.map +1 -0
  243. package/lib/utils/httpcontext.d.ts +37 -9
  244. package/lib/utils/httpcontext.js +86 -57
  245. package/lib/utils/httpcontext.js.map +1 -1
  246. package/lib/utils/httpcontext.spec.js +37 -48
  247. package/lib/utils/httpcontext.spec.js.map +1 -1
  248. package/lib/utils/logger.d.ts +2 -2
  249. package/lib/utils/logger.js +15 -28
  250. package/lib/utils/logger.js.map +1 -1
  251. package/lib/utils/logger.spec.js +9 -11
  252. package/lib/utils/logger.spec.js.map +1 -1
  253. package/lib/utils/serializers.js +17 -20
  254. package/lib/utils/serializers.js.map +1 -1
  255. package/lib/utils/serializers.spec.js +43 -44
  256. package/lib/utils/serializers.spec.js.map +1 -1
  257. package/lib/utils/session.d.ts +120 -0
  258. package/lib/utils/session.js +155 -0
  259. package/lib/utils/session.js.map +1 -0
  260. package/lib/utils/session.spec.d.ts +1 -0
  261. package/lib/utils/session.spec.js +66 -0
  262. package/lib/utils/session.spec.js.map +1 -0
  263. package/lib/utils/waiter.d.ts +1 -1
  264. package/lib/utils/waiter.js +32 -52
  265. package/lib/utils/waiter.js.map +1 -1
  266. package/lib/utils/waiter.spec.js +75 -92
  267. package/lib/utils/waiter.spec.js.map +1 -1
  268. package/package.json +22 -14
  269. package/test/config-invitation.json +1 -3
  270. package/test/config.json +3 -3
  271. package/test/config.old.json +1 -2
  272. package/test/moddas/annotatedservice.js +5 -5
  273. package/test/moddas/debugmailer.js +2 -3
  274. package/test/moddas/fakeservice.js +2 -3
  275. package/test/moddas/voidstore.js +6 -4
  276. package/test/models/ident.js +2 -6
  277. package/test/models/task.js +3 -7
  278. package/test/package.json +2 -1
  279. package/webda.module.json +956 -188
@@ -1,39 +1,36 @@
1
- "use strict";
2
1
  var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
2
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
3
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
6
  };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- const mocha_1 = require("@testdeck/mocha");
10
- const assert = require("assert");
11
- const crontab = require("node-cron");
12
- const sinon = require("sinon");
13
- const __1 = require("..");
14
- const test_1 = require("../test");
15
- class MyService extends __1.Service {
7
+ import { suite, test } from "@testdeck/mocha";
8
+ import * as assert from "assert";
9
+ import * as sinon from "sinon";
10
+ import { Cron, CronDefinition, CronService, Service } from "...js";
11
+ import { WebdaTest } from "../test.js";
12
+ class MyService extends Service {
16
13
  test() {
17
14
  // Empty one
18
15
  }
19
16
  test2(myArg) { }
20
17
  }
21
18
  __decorate([
22
- (0, __1.Cron)("0/15 * * * *", "plop")
19
+ Cron("0/15 * * * *", "plop")
23
20
  ], MyService.prototype, "test", null);
24
21
  __decorate([
25
- (0, __1.Cron)("0/25 * * * *", undefined, "myArg")
22
+ Cron("0/25 * * * *", undefined, "myArg")
26
23
  ], MyService.prototype, "test2", null);
27
- let CronServiceTest = class CronServiceTest extends test_1.WebdaTest {
24
+ let CronServiceTest = class CronServiceTest extends WebdaTest {
28
25
  annotations() {
29
26
  this.registerService(new MyService(this.webda, "myService", {}));
30
- let def = new __1.CronDefinition("0/15 * * * *", [], "myservice", "test", "plop");
31
- let service = new __1.CronService(this.webda, "cron", {});
27
+ let def = new CronDefinition("0/15 * * * *", [], "myservice", "test", "plop");
28
+ let service = new CronService(this.webda, "cron", {});
32
29
  service.schedule("* * * * *", () => { }, "mine");
33
30
  assert.deepStrictEqual(service.getCrontab()[1], def);
34
31
  // for cov
35
32
  assert.deepStrictEqual(service.getCrontab()[1], def);
36
- const cron = sinon.stub(crontab, "schedule").callsFake((cron, cb) => {
33
+ const cron = sinon.stub(service, "crontabSchedule").callsFake((cron, cb) => {
37
34
  try {
38
35
  cb();
39
36
  }
@@ -55,21 +52,21 @@ let CronServiceTest = class CronServiceTest extends test_1.WebdaTest {
55
52
  }
56
53
  };
57
54
  __decorate([
58
- mocha_1.test
55
+ test
59
56
  ], CronServiceTest.prototype, "annotations", null);
60
57
  CronServiceTest = __decorate([
61
- mocha_1.suite
58
+ suite
62
59
  ], CronServiceTest);
63
60
  let CronDefinitionTest = class CronDefinitionTest {
64
61
  testString() {
65
- assert.strictEqual(new __1.CronDefinition("* * * * *").toString(), "* * * * *: .()");
66
- assert.strictEqual(new __1.CronDefinition("* * * * *", [{}, {}], "plop", "method", "desc").toString(), "* * * * *: plop.method([object Object],[object Object]) # desc");
62
+ assert.strictEqual(new CronDefinition("* * * * *").toString(), "* * * * *: .()");
63
+ assert.strictEqual(new CronDefinition("* * * * *", [{}, {}], "plop", "method", "desc").toString(), "* * * * *: plop.method([object Object],[object Object]) # desc");
67
64
  }
68
65
  };
69
66
  __decorate([
70
- mocha_1.test
67
+ test
71
68
  ], CronDefinitionTest.prototype, "testString", null);
72
69
  CronDefinitionTest = __decorate([
73
- mocha_1.suite
70
+ suite
74
71
  ], CronDefinitionTest);
75
72
  //# sourceMappingURL=cron.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cron.spec.js","sourceRoot":"","sources":["../../src/services/cron.spec.ts"],"names":[],"mappings":";;;;;;;;AAAA,2CAA8C;AAC9C,iCAAiC;AACjC,qCAAqC;AACrC,+BAA+B;AAC/B,0BAAgE;AAChE,kCAAoC;AAEpC,MAAM,SAAU,SAAQ,WAAO;IAE7B,IAAI;QACF,YAAY;IACd,CAAC;IAGD,KAAK,CAAC,KAAa,IAAG,CAAC;CACxB;AANC;IADC,IAAA,QAAI,EAAC,cAAc,EAAE,MAAM,CAAC;qCAG5B;AAGD;IADC,IAAA,QAAI,EAAC,cAAc,EAAE,SAAS,EAAE,OAAO,CAAC;sCAClB;AAGzB,IAAM,eAAe,GAArB,MAAM,eAAgB,SAAQ,gBAAS;IAErC,WAAW;QACT,IAAI,CAAC,eAAe,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,GAAG,GAAG,IAAI,kBAAc,CAAC,cAAc,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC9E,IAAI,OAAO,GAAG,IAAI,eAAW,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAChD,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,UAAU;QACV,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE;YAClE,IAAI;gBACF,EAAE,EAAE,CAAC;aACN;YAAC,OAAO,GAAG,EAAE,GAAE;QAClB,CAAC,CAAC,CAAC;QACH,IAAI;YACF,IAAI,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,MAAM,CAAC,CAAC;YAChD,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,SAAS,CAAC;YACrC,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;YACxB,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;SAClB;gBAAS;SACT;IACH,CAAC;CACF,CAAA;AA1BC;IADC,YAAI;kDA0BJ;AA3BG,eAAe;IADpB,aAAK;GACA,eAAe,CA4BpB;AAGD,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAEtB,UAAU;QACR,MAAM,CAAC,WAAW,CAAC,IAAI,kBAAc,CAAC,WAAW,CAAC,CAAC,QAAQ,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACjF,MAAM,CAAC,WAAW,CAChB,IAAI,kBAAc,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAC9E,gEAAgE,CACjE,CAAC;IACJ,CAAC;CACF,CAAA;AAPC;IADC,YAAI;oDAOJ;AARG,kBAAkB;IADvB,aAAK;GACA,kBAAkB,CASvB"}
1
+ {"version":3,"file":"cron.spec.js","sourceRoot":"","sources":["../../src/services/cron.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import { Context, RegistryEntry, Store } from "../index.js";
4
+ import { DeepPartial, Service, ServiceParameters } from "./service.js";
5
+ export interface KeysRegistry {
6
+ /**
7
+ * Contains the instanceId of the last
8
+ * service who rotated
9
+ */
10
+ rotationInstance: string;
11
+ /**
12
+ * Key storage
13
+ */
14
+ [keys: `key_${string}`]: {
15
+ publicKey: string;
16
+ privateKey: string;
17
+ symetric: string;
18
+ };
19
+ /**
20
+ * Current key
21
+ */
22
+ current: string;
23
+ }
24
+ /**
25
+ * JWT Options
26
+ */
27
+ export interface JWTOptions {
28
+ /**
29
+ * Secret to use with JWT
30
+ */
31
+ secretOrPublicKey?: string | Buffer | {
32
+ key: string;
33
+ passphrase: string;
34
+ };
35
+ /**
36
+ * Algorithm for JWT token
37
+ *
38
+ * @see https://www.npmjs.com/package/jsonwebtoken
39
+ * @default "HS256"
40
+ */
41
+ algorithm?: "HS256" | "HS384" | "HS512" | "RS256" | "RS384" | "RS512" | "PS256" | "PS384" | "PS512" | "ES256" | "ES384" | "ES512";
42
+ /**
43
+ * expressed in seconds or a string describing a time span zeit/ms.
44
+ *
45
+ * Eg: 60, "2 days", "10h", "7d". A numeric value is interpreted as a seconds count. If you use a string be sure you provide the time units (days, hours, etc), otherwise milliseconds unit is used by default ("120" is equal to "120ms").
46
+ */
47
+ expiresIn?: number | string;
48
+ /**
49
+ * Audience for the jwt
50
+ */
51
+ audience?: string;
52
+ /**
53
+ * Issuer of the token
54
+ */
55
+ issuer?: string;
56
+ /**
57
+ * Subject for JWT
58
+ */
59
+ subject?: string;
60
+ keyid?: any;
61
+ }
62
+ export declare class CryptoServiceParameters extends ServiceParameters {
63
+ /**
64
+ * Number of hours a key should be used for encryption
65
+ *
66
+ * if auto-rotate is not set this
67
+ */
68
+ keyActiveLifespan: number;
69
+ /**
70
+ * Number of hours allowed to decrypt data encrypted with this key
71
+ */
72
+ keyLifespan: number;
73
+ /**
74
+ * Try to rotate keys when they expire in days
75
+ */
76
+ autoRotate?: number;
77
+ /**
78
+ * Create first set of key if does not exist
79
+ */
80
+ autoCreate?: boolean;
81
+ /**
82
+ * To expose JWKS
83
+ *
84
+ * @see https://datatracker.ietf.org/doc/html/rfc7517
85
+ */
86
+ url?: string;
87
+ /**
88
+ * Type of asymetric key
89
+ *
90
+ * https://nodejs.org/api/crypto.html#cryptogeneratekeypairsynctype-options
91
+ * https://nodejs.org/docs/latest-v14.x/api/crypto.html#crypto_crypto_generatekeypairsync_type_options
92
+ */
93
+ asymetricType: "rsa" | "dsa" | "ec" | "ed25519" | "ed448" | "x25519" | "x448" | "dh";
94
+ /**
95
+ * Options for asymetric generation
96
+ */
97
+ asymetricOptions?: {
98
+ /**
99
+ * @default 2048
100
+ */
101
+ modulusLength?: number;
102
+ /**
103
+ * Only if asymetricType "ec"
104
+ */
105
+ namedCurve?: string;
106
+ publicKeyEncoding?: {
107
+ /**
108
+ * @default spki
109
+ */
110
+ type?: "spki" | "pkcs1";
111
+ format?: "pem";
112
+ };
113
+ privateKeyEncoding?: {
114
+ /**
115
+ * https://nodejs.org/docs/latest-v14.x/api/crypto.html#crypto_keyobject_export_options
116
+ * @default pkcs8
117
+ */
118
+ type?: "pkcs1" | "pkcs8" | "sec1";
119
+ format?: "pem";
120
+ cipher?: string;
121
+ passphrase?: string;
122
+ };
123
+ };
124
+ /**
125
+ * @default 256
126
+ */
127
+ symetricKeyLength?: number;
128
+ /**
129
+ * @default "aes-256-ctr"
130
+ */
131
+ symetricCipher?: string;
132
+ /**
133
+ * Default JWT options
134
+ */
135
+ jwt?: JWTOptions;
136
+ constructor(params: any);
137
+ }
138
+ interface KeysDefinition {
139
+ publicKey: string;
140
+ privateKey: string;
141
+ symetric: string;
142
+ }
143
+ /**
144
+ * @WebdaModda
145
+ */
146
+ export default class CryptoService<T extends CryptoServiceParameters = CryptoServiceParameters> extends Service<T> {
147
+ currentSymetricKey: string;
148
+ currentAsymetricKey: {
149
+ publicKey: string;
150
+ privateKey: string;
151
+ };
152
+ current: string;
153
+ age: number;
154
+ keys: {
155
+ [key: string]: KeysDefinition;
156
+ };
157
+ /**
158
+ * JWKS cache
159
+ */
160
+ jwks: {
161
+ [key: string]: {
162
+ n: string;
163
+ e: string;
164
+ };
165
+ };
166
+ registry: Store<RegistryEntry>;
167
+ /**
168
+ * @override
169
+ */
170
+ loadParameters(params: DeepPartial<T>): ServiceParameters;
171
+ /**
172
+ * @override
173
+ */
174
+ init(): Promise<this>;
175
+ /**
176
+ *
177
+ */
178
+ serveJWKS(context: Context): Promise<void>;
179
+ /**
180
+ * Load keys from registry
181
+ */
182
+ load(): Promise<boolean>;
183
+ /**
184
+ * Generate asymetric key
185
+ * @returns
186
+ */
187
+ generateAsymetricKeys(): {
188
+ publicKey: string;
189
+ privateKey: string;
190
+ };
191
+ /**
192
+ * Generate symetric key
193
+ * @returns
194
+ */
195
+ generateSymetricKey(): string;
196
+ /**
197
+ * Return current key set
198
+ */
199
+ getCurrentKeys(): Promise<{
200
+ id: string;
201
+ keys: KeysDefinition;
202
+ }>;
203
+ /**
204
+ * Retrieve a HMAC for a string
205
+ * @param data
206
+ * @param keyId to use
207
+ * @returns
208
+ */
209
+ hmac(data: string | any, keyId?: string): Promise<string>;
210
+ /**
211
+ * Verify a HMAC for a string
212
+ * @param data
213
+ * @returns
214
+ */
215
+ hmacVerify(data: string | any, hmac: string): Promise<boolean>;
216
+ /**
217
+ * JWT token generation
218
+ */
219
+ jwtSign(data: any, options?: JWTOptions): Promise<string>;
220
+ /**
221
+ *
222
+ * @param keyId
223
+ * @returns
224
+ */
225
+ checkKey(keyId: string): Promise<boolean>;
226
+ /**
227
+ * Get JWT key based on kid
228
+ */
229
+ getJWTKey(header: any, callback: any): Promise<void>;
230
+ /**
231
+ * JWT token verification
232
+ */
233
+ jwtVerify(token: string, options?: JWTOptions): Promise<string | any>;
234
+ /**
235
+ * Encrypt data
236
+ */
237
+ encrypt(data: any): Promise<string>;
238
+ /**
239
+ * Parse the JWT header section
240
+ */
241
+ getJWTHeader(token: string): any;
242
+ /**
243
+ * Decrypt data
244
+ */
245
+ decrypt(token: string): Promise<any>;
246
+ /**
247
+ * Get next id
248
+ */
249
+ getNextId(): {
250
+ id: string;
251
+ age: number;
252
+ };
253
+ /**
254
+ * Rotate keys
255
+ */
256
+ rotate(): Promise<void>;
257
+ }
258
+ export { CryptoService };
@@ -0,0 +1,312 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { createCipheriv, createDecipheriv, createHmac, generateKeyPairSync, randomBytes } from "crypto";
8
+ import jwt from "jsonwebtoken";
9
+ import { pem2jwk } from "pem-jwk";
10
+ import { JSONUtils } from "../utils/serializers.js";
11
+ import { Inject, Route, Service, ServiceParameters } from "./service.js";
12
+ export class CryptoServiceParameters extends ServiceParameters {
13
+ constructor(params) {
14
+ var _a, _b, _c, _d, _e, _f, _g, _h;
15
+ super(params);
16
+ this.symetricKeyLength ?? (this.symetricKeyLength = 256);
17
+ this.symetricCipher ?? (this.symetricCipher = "aes-256-ctr");
18
+ this.asymetricType ?? (this.asymetricType = "rsa");
19
+ this.asymetricOptions ?? (this.asymetricOptions = {});
20
+ (_a = this.asymetricOptions).modulusLength ?? (_a.modulusLength = 2048);
21
+ (_b = this.asymetricOptions).privateKeyEncoding ?? (_b.privateKeyEncoding = {});
22
+ (_c = this.asymetricOptions.privateKeyEncoding).format ?? (_c.format = "pem");
23
+ (_d = this.asymetricOptions.privateKeyEncoding).type ?? (_d.type = "pkcs8");
24
+ (_e = this.asymetricOptions).publicKeyEncoding ?? (_e.publicKeyEncoding = {});
25
+ (_f = this.asymetricOptions.publicKeyEncoding).format ?? (_f.format = "pem");
26
+ (_g = this.asymetricOptions.publicKeyEncoding).type ?? (_g.type = "spki");
27
+ this.jwt ?? (this.jwt = {});
28
+ (_h = this.jwt).algorithm ?? (_h.algorithm = "HS256");
29
+ }
30
+ }
31
+ /**
32
+ * @WebdaModda
33
+ */
34
+ export default class CryptoService extends Service {
35
+ constructor() {
36
+ super(...arguments);
37
+ /**
38
+ * JWKS cache
39
+ */
40
+ this.jwks = {};
41
+ }
42
+ /**
43
+ * @override
44
+ */
45
+ loadParameters(params) {
46
+ return new CryptoServiceParameters(params);
47
+ }
48
+ /**
49
+ * @override
50
+ */
51
+ async init() {
52
+ await super.init();
53
+ // Load keys
54
+ if (!(await this.load()) && this.parameters.autoCreate) {
55
+ await this.rotate();
56
+ }
57
+ return this;
58
+ }
59
+ /**
60
+ *
61
+ */
62
+ async serveJWKS(context) {
63
+ context.write({
64
+ keys: Object.keys(this.keys).map(k => {
65
+ if (!this.jwks[k]) {
66
+ /*
67
+ when Node >= 16
68
+ this.jwks[k] = createPublicKey(this.keys[k].publicKey).export({ format: "jwk" });
69
+ and remove pem-jwk
70
+ */
71
+ this.jwks[k] = pem2jwk(this.keys[k].publicKey);
72
+ }
73
+ return {
74
+ kty: "RSA",
75
+ kid: k,
76
+ n: this.jwks[k].n,
77
+ e: this.jwks[k].e
78
+ };
79
+ })
80
+ });
81
+ }
82
+ /**
83
+ * Load keys from registry
84
+ */
85
+ async load() {
86
+ let load = await this.registry.get("keys");
87
+ if (!load) {
88
+ return false;
89
+ }
90
+ this.keys = {};
91
+ Object.keys(load)
92
+ .filter(k => k.startsWith("key_"))
93
+ .forEach(k => {
94
+ this.keys[k.substring(4)] = load[k];
95
+ });
96
+ this.current = load.current.startsWith("init-") ? undefined : load.current;
97
+ this.age = parseInt(this.current, 36);
98
+ return true;
99
+ }
100
+ /**
101
+ * Generate asymetric key
102
+ * @returns
103
+ */
104
+ generateAsymetricKeys() {
105
+ const { publicKey, privateKey } = generateKeyPairSync(
106
+ // @ts-ignore
107
+ this.parameters.asymetricType, this.parameters.asymetricOptions);
108
+ return { publicKey, privateKey };
109
+ }
110
+ /**
111
+ * Generate symetric key
112
+ * @returns
113
+ */
114
+ generateSymetricKey() {
115
+ return randomBytes(this.parameters.symetricKeyLength / 8).toString("base64");
116
+ }
117
+ /**
118
+ * Return current key set
119
+ */
120
+ async getCurrentKeys() {
121
+ if (!this.keys || !this.current || !this.keys[this.current]) {
122
+ throw new Error("CryptoService not initialized");
123
+ }
124
+ return { keys: this.keys[this.current], id: this.current };
125
+ }
126
+ /**
127
+ * Retrieve a HMAC for a string
128
+ * @param data
129
+ * @param keyId to use
130
+ * @returns
131
+ */
132
+ async hmac(data, keyId) {
133
+ if (typeof data !== "string") {
134
+ data = JSONUtils.stringify(data);
135
+ }
136
+ let key = keyId ? { id: keyId, keys: this.keys[keyId] } : await this.getCurrentKeys();
137
+ return key.id + "." + createHmac("sha256", key.keys.symetric).update(data).digest("hex");
138
+ }
139
+ /**
140
+ * Verify a HMAC for a string
141
+ * @param data
142
+ * @returns
143
+ */
144
+ async hmacVerify(data, hmac) {
145
+ if (typeof data !== "string") {
146
+ data = JSONUtils.stringify(data);
147
+ }
148
+ let [keyId, mac] = hmac.split(".");
149
+ if (!(await this.checkKey(keyId))) {
150
+ return false;
151
+ }
152
+ return createHmac("sha256", this.keys[keyId].symetric).update(data).digest("hex") === mac;
153
+ }
154
+ /**
155
+ * JWT token generation
156
+ */
157
+ async jwtSign(data, options) {
158
+ let res = { ...this.parameters.jwt, ...options };
159
+ let key = res.secretOrPublicKey;
160
+ // Default to our current private key
161
+ if (!res.secretOrPublicKey) {
162
+ let keyInfo = await this.getCurrentKeys();
163
+ // Depending on the algo fallback to the right key
164
+ if (res.algorithm.startsWith("HS")) {
165
+ key = keyInfo.keys.symetric;
166
+ res.keyid = "S" + keyInfo.id;
167
+ }
168
+ else {
169
+ key = keyInfo.keys.privateKey;
170
+ res.keyid = "A" + keyInfo.id;
171
+ }
172
+ }
173
+ delete res.secretOrPublicKey;
174
+ return jwt.sign(data, key, res);
175
+ }
176
+ /**
177
+ *
178
+ * @param keyId
179
+ * @returns
180
+ */
181
+ async checkKey(keyId) {
182
+ if (!this.keys[keyId]) {
183
+ // Key is more recent than current one so try to reload
184
+ if (parseInt(keyId, 36) > this.age) {
185
+ await this.load();
186
+ }
187
+ // Key is still not found
188
+ if (!this.keys[keyId]) {
189
+ return false;
190
+ }
191
+ }
192
+ return true;
193
+ }
194
+ /**
195
+ * Get JWT key based on kid
196
+ */
197
+ async getJWTKey(header, callback) {
198
+ if (!header.kid) {
199
+ callback(new Error("Unknown key"));
200
+ return;
201
+ }
202
+ let keyId = header.kid.substring(1);
203
+ if (!(await this.checkKey(keyId))) {
204
+ callback(new Error("Unknown key"));
205
+ return;
206
+ }
207
+ // Check first letter that define Symetric or Asymetric
208
+ if (header.kid.startsWith("S")) {
209
+ callback(null, this.keys[keyId].symetric);
210
+ }
211
+ else if (header.kid.startsWith("A")) {
212
+ callback(null, this.keys[keyId].publicKey);
213
+ }
214
+ else {
215
+ callback(new Error("Unknown key"));
216
+ }
217
+ }
218
+ /**
219
+ * JWT token verification
220
+ */
221
+ async jwtVerify(token, options) {
222
+ return new Promise((resolve, reject) => {
223
+ jwt.verify(token, options?.secretOrPublicKey || this.getJWTKey.bind(this), {
224
+ ...options,
225
+ secretOrPublicKey: undefined
226
+ }, (err, result) => {
227
+ if (err) {
228
+ reject(err);
229
+ }
230
+ else {
231
+ resolve(result);
232
+ }
233
+ });
234
+ });
235
+ }
236
+ /**
237
+ * Encrypt data
238
+ */
239
+ async encrypt(data) {
240
+ let key = await this.getCurrentKeys();
241
+ // Initialization Vector
242
+ let iv = randomBytes(16);
243
+ let cipher = createCipheriv(this.parameters.symetricCipher, Buffer.from(key.keys.symetric, "base64"), iv);
244
+ let encrypted = Buffer.concat([iv, cipher.update(Buffer.from(JSON.stringify(data))), cipher.final()]).toString("base64");
245
+ return this.jwtSign(encrypted, { keyid: `S${key.id}`, secretOrPublicKey: key.keys.symetric });
246
+ }
247
+ /**
248
+ * Parse the JWT header section
249
+ */
250
+ getJWTHeader(token) {
251
+ return JSON.parse(Buffer.from(token.split(".")[0], "base64").toString());
252
+ }
253
+ /**
254
+ * Decrypt data
255
+ */
256
+ async decrypt(token) {
257
+ let input = Buffer.from(await this.jwtVerify(token), "base64");
258
+ let header = this.getJWTHeader(token);
259
+ let iv = input.slice(0, 16);
260
+ let decipher = createDecipheriv(this.parameters.symetricCipher, Buffer.from(this.keys[header.kid.substring(1)].symetric, "base64"), iv);
261
+ return JSON.parse(decipher.update(input.slice(16)).toString() + decipher.final().toString());
262
+ }
263
+ /**
264
+ * Get next id
265
+ */
266
+ getNextId() {
267
+ // Should be good for years as 8char
268
+ let age = Math.floor(Date.now() / 1000);
269
+ return { age, id: age.toString(36) };
270
+ }
271
+ /**
272
+ * Rotate keys
273
+ */
274
+ async rotate() {
275
+ const { age, id } = this.getNextId();
276
+ let next = {
277
+ current: id,
278
+ rotationInstance: this.getWebda().getInstanceId()
279
+ };
280
+ next[`key_${id}`] = {
281
+ ...this.generateAsymetricKeys(),
282
+ symetric: this.generateSymetricKey()
283
+ };
284
+ if (!(await this.registry.exists("keys"))) {
285
+ this.current = `init-${this.getWebda().getInstanceId()}`;
286
+ await this.registry.put("keys", { current: this.current });
287
+ }
288
+ if (await this.registry.conditionalPatch("keys", next, "current", this.current)) {
289
+ this.keys ?? (this.keys = {});
290
+ this.keys[id] = next[`key_${id}`];
291
+ this.current = id;
292
+ this.age = age;
293
+ }
294
+ else {
295
+ // Reload as something else has modified
296
+ await this.load();
297
+ }
298
+ }
299
+ }
300
+ __decorate([
301
+ Inject("Registry")
302
+ ], CryptoService.prototype, "registry", void 0);
303
+ __decorate([
304
+ Route(".", ["GET"], false, {
305
+ description: "Serve JWKS keys",
306
+ get: {
307
+ operationId: "getJWKS"
308
+ }
309
+ })
310
+ ], CryptoService.prototype, "serveJWKS", null);
311
+ export { CryptoService };
312
+ //# sourceMappingURL=cryptoservice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cryptoservice.js","sourceRoot":"","sources":["../../src/services/cryptoservice.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};