@fdm-monster/server 1.6.0-rc1 → 1.6.0-rc3

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 (168) hide show
  1. package/.gitattributes +2 -0
  2. package/.yarn/install-state.gz +0 -0
  3. package/.yarn/releases/yarn-4.1.0.cjs +893 -0
  4. package/.yarnrc.yml +4 -0
  5. package/README.md +1 -1
  6. package/dist/consoles/sqlite-torm.js +31 -0
  7. package/dist/consoles/sqlite-torm.js.map +1 -0
  8. package/dist/consoles/typeorm-generate.js +194 -0
  9. package/dist/consoles/typeorm-generate.js.map +1 -0
  10. package/dist/consoles/typeorm-migrate.js +48 -0
  11. package/dist/consoles/typeorm-migrate.js.map +1 -0
  12. package/dist/container.js +64 -19
  13. package/dist/container.js.map +1 -1
  14. package/dist/container.tokens.js +2 -0
  15. package/dist/container.tokens.js.map +1 -1
  16. package/dist/controllers/batch-call.controller.js +15 -5
  17. package/dist/controllers/batch-call.controller.js.map +1 -1
  18. package/dist/controllers/dto/update-client-dist.dto.js +38 -0
  19. package/dist/controllers/dto/update-client-dist.dto.js.map +1 -0
  20. package/dist/controllers/printer-files.controller.js +2 -8
  21. package/dist/controllers/printer-files.controller.js.map +1 -1
  22. package/dist/controllers/printer.controller.js +2 -1
  23. package/dist/controllers/printer.controller.js.map +1 -1
  24. package/dist/controllers/server-private.controller.js +25 -6
  25. package/dist/controllers/server-private.controller.js.map +1 -1
  26. package/dist/controllers/validation/batch-controller.validation.js +9 -0
  27. package/dist/controllers/validation/batch-controller.validation.js.map +1 -1
  28. package/dist/data-source.js +66 -0
  29. package/dist/data-source.js.map +1 -0
  30. package/dist/entities/camera-stream.entity.js +94 -0
  31. package/dist/entities/camera-stream.entity.js.map +1 -0
  32. package/dist/entities/custom-gcode.entity.js +50 -0
  33. package/dist/entities/custom-gcode.entity.js.map +1 -0
  34. package/dist/entities/floor-position.entity.js +78 -0
  35. package/dist/entities/floor-position.entity.js.map +1 -0
  36. package/dist/entities/floor.entity.js +53 -0
  37. package/dist/entities/floor.entity.js.map +1 -0
  38. package/dist/entities/index.js +58 -0
  39. package/dist/entities/index.js.map +1 -0
  40. package/dist/entities/permission.entity.js +38 -0
  41. package/dist/entities/permission.entity.js.map +1 -0
  42. package/dist/entities/print-completion.entity.js +91 -0
  43. package/dist/entities/print-completion.entity.js.map +1 -0
  44. package/dist/entities/printer-file.entity.js +140 -0
  45. package/dist/entities/printer-file.entity.js.map +1 -0
  46. package/dist/entities/printer.entity.js +105 -0
  47. package/dist/entities/printer.entity.js.map +1 -0
  48. package/dist/entities/refresh-token.entity.js +70 -0
  49. package/dist/entities/refresh-token.entity.js.map +1 -0
  50. package/dist/entities/role.entity.js +46 -0
  51. package/dist/entities/role.entity.js.map +1 -0
  52. package/dist/entities/settings.entity.js +89 -0
  53. package/dist/entities/settings.entity.js.map +1 -0
  54. package/dist/entities/user-role.entity.js +70 -0
  55. package/dist/entities/user-role.entity.js.map +1 -0
  56. package/dist/entities/user.entity.js +90 -0
  57. package/dist/entities/user.entity.js.map +1 -0
  58. package/dist/middleware/exception.filter.js +2 -1
  59. package/dist/middleware/exception.filter.js.map +1 -1
  60. package/dist/middleware/passport.js.map +1 -1
  61. package/dist/migrations/1706829146617-InitSqlite.js +670 -0
  62. package/dist/migrations/1706829146617-InitSqlite.js.map +1 -0
  63. package/dist/models/Floor.js.map +1 -1
  64. package/dist/models/PrinterFile.js +4 -0
  65. package/dist/models/PrinterFile.js.map +1 -1
  66. package/dist/server.constants.js +4 -2
  67. package/dist/server.constants.js.map +1 -1
  68. package/dist/server.core.js +10 -1
  69. package/dist/server.core.js.map +1 -1
  70. package/dist/server.host.js +11 -3
  71. package/dist/server.host.js.map +1 -1
  72. package/dist/services/batch-call.service.js +67 -20
  73. package/dist/services/batch-call.service.js.map +1 -1
  74. package/dist/services/core/client-bundle.service.js +98 -27
  75. package/dist/services/core/client-bundle.service.js.map +1 -1
  76. package/dist/services/core/github.service.js +18 -14
  77. package/dist/services/core/github.service.js.map +1 -1
  78. package/dist/services/core/task-manager.service.js +1 -1
  79. package/dist/services/core/task-manager.service.js.map +1 -1
  80. package/dist/services/core/yaml.service.js.map +1 -1
  81. package/dist/services/floor.service.js +1 -1
  82. package/dist/services/floor.service.js.map +1 -1
  83. package/dist/services/interfaces/printer-file.dto.js +29 -3
  84. package/dist/services/interfaces/printer-file.dto.js.map +1 -1
  85. package/dist/services/octoprint/dto/connection-state.dto.js +0 -25
  86. package/dist/services/octoprint/dto/connection-state.dto.js.map +1 -1
  87. package/dist/services/octoprint/dto/connection.dto.js +6 -0
  88. package/dist/services/octoprint/dto/connection.dto.js.map +1 -0
  89. package/dist/services/octoprint/dto/octoprint-event.dto.js.map +1 -1
  90. package/dist/services/octoprint/models/octoprint-file.dto.js +6 -0
  91. package/dist/services/octoprint/models/octoprint-file.dto.js.map +1 -0
  92. package/dist/services/octoprint/octoprint-api.routes.js +9 -3
  93. package/dist/services/octoprint/octoprint-api.routes.js.map +1 -1
  94. package/dist/services/octoprint/octoprint-api.service.js +17 -2
  95. package/dist/services/octoprint/octoprint-api.service.js.map +1 -1
  96. package/dist/services/octoprint/octoprint-sockio.adapter.js +53 -45
  97. package/dist/services/octoprint/octoprint-sockio.adapter.js.map +1 -1
  98. package/dist/services/octoprint/utils/file.utils.js +44 -0
  99. package/dist/services/octoprint/utils/file.utils.js.map +1 -0
  100. package/dist/services/orm/base.service.js +3 -0
  101. package/dist/services/orm/base.service.js.map +1 -1
  102. package/dist/services/orm/camera-stream.service.js +25 -0
  103. package/dist/services/orm/camera-stream.service.js.map +1 -0
  104. package/dist/services/orm/custom-gcode.service.js +42 -0
  105. package/dist/services/orm/custom-gcode.service.js.map +1 -0
  106. package/dist/services/orm/floor-position.service.js +55 -0
  107. package/dist/services/orm/floor-position.service.js.map +1 -0
  108. package/dist/services/orm/floor.service.js +122 -0
  109. package/dist/services/orm/floor.service.js.map +1 -0
  110. package/dist/services/orm/permission.service.js +77 -0
  111. package/dist/services/orm/permission.service.js.map +1 -0
  112. package/dist/services/orm/print-completion.service.js +90 -0
  113. package/dist/services/orm/print-completion.service.js.map +1 -0
  114. package/dist/services/orm/printer-files.service.js +123 -0
  115. package/dist/services/orm/printer-files.service.js.map +1 -0
  116. package/dist/services/orm/printer.service.js +145 -0
  117. package/dist/services/orm/printer.service.js.map +1 -0
  118. package/dist/services/orm/refresh-token.service.js +107 -0
  119. package/dist/services/orm/refresh-token.service.js.map +1 -0
  120. package/dist/services/orm/role.service.js +131 -0
  121. package/dist/services/orm/role.service.js.map +1 -0
  122. package/dist/services/orm/settings.service.js +208 -0
  123. package/dist/services/orm/settings.service.js.map +1 -0
  124. package/dist/services/orm/user-role.service.js +55 -0
  125. package/dist/services/orm/user-role.service.js.map +1 -0
  126. package/dist/services/orm/user.service.js +146 -0
  127. package/dist/services/orm/user.service.js.map +1 -0
  128. package/dist/services/orm-migration.service.js +20 -0
  129. package/dist/services/orm-migration.service.js.map +1 -0
  130. package/dist/services/printer-files.service.js +3 -0
  131. package/dist/services/printer-files.service.js.map +1 -1
  132. package/dist/services/typeorm/typeorm.service.js +48 -0
  133. package/dist/services/typeorm/typeorm.service.js.map +1 -0
  134. package/dist/state/file.cache.js +2 -9
  135. package/dist/state/file.cache.js.map +1 -1
  136. package/dist/state/printer-connection.cache.js +21 -0
  137. package/dist/state/printer-connection.cache.js.map +1 -0
  138. package/dist/state/printer-events.cache.js +16 -7
  139. package/dist/state/printer-events.cache.js.map +1 -1
  140. package/dist/state/printer-files.store.js +3 -4
  141. package/dist/state/printer-files.store.js.map +1 -1
  142. package/dist/state/printer-socket.store.js +3 -3
  143. package/dist/state/printer-socket.store.js.map +1 -1
  144. package/dist/state/printer.cache.js +3 -0
  145. package/dist/state/printer.cache.js.map +1 -1
  146. package/dist/state/settings.store.js +3 -0
  147. package/dist/state/settings.store.js.map +1 -1
  148. package/dist/state/test-printer-socket.store.js +1 -1
  149. package/dist/task.presets.js.map +1 -1
  150. package/dist/tasks/boot.task.js +30 -18
  151. package/dist/tasks/boot.task.js.map +1 -1
  152. package/dist/tasks/print-completion.socketio.task.js +15 -1
  153. package/dist/tasks/print-completion.socketio.task.js.map +1 -1
  154. package/dist/tasks/printer-file-clean.task.js +14 -0
  155. package/dist/tasks/printer-file-clean.task.js.map +1 -1
  156. package/dist/tasks/printer-state-update-poll.task.js +89 -0
  157. package/dist/tasks/printer-state-update-poll.task.js.map +1 -0
  158. package/dist/tasks/printer-websocket-restore.task.js +4 -3
  159. package/dist/tasks/printer-websocket-restore.task.js.map +1 -1
  160. package/dist/tasks/printer-websocket.task.js +1 -1
  161. package/dist/tasks/printer-websocket.task.js.map +1 -1
  162. package/dist/tasks/socketio.task.js +1 -1
  163. package/dist/tasks/socketio.task.js.map +1 -1
  164. package/dist/tasks.js +2 -1
  165. package/dist/tasks.js.map +1 -1
  166. package/dist/utils/semver.utils.js +19 -4
  167. package/dist/utils/semver.utils.js.map +1 -1
  168. package/package.json +31 -30
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PermissionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PermissionService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _permissiondto = require("../interfaces/permission.dto");
14
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
15
+ const _authorizationconstants = require("../../constants/authorization.constants");
16
+ class PermissionService extends (0, _baseservice.BaseService)(_entities.Permission, _permissiondto.PermissionDto) {
17
+ logger;
18
+ _permissions = [];
19
+ constructor({ loggerFactory, typeormService }){
20
+ super({
21
+ typeormService
22
+ });
23
+ }
24
+ get permissions() {
25
+ return this._permissions;
26
+ }
27
+ toDto(permission) {
28
+ return {
29
+ id: permission.id,
30
+ name: permission.name
31
+ };
32
+ }
33
+ authorizePermission(requiredPermission, assignedPermissions) {
34
+ return !!assignedPermissions.find((assignedPermission)=>{
35
+ const normalizePermission = this.normalizePermission(assignedPermission);
36
+ if (!normalizePermission) return false;
37
+ return normalizePermission === requiredPermission;
38
+ });
39
+ }
40
+ async getPermissionByName(permissionName) {
41
+ const permission = this.permissions.find((r)=>r.name === permissionName);
42
+ if (!permission) throw new _runtimeexceptions.NotFoundException("Permission not found");
43
+ return permission;
44
+ }
45
+ async getPermission(permissionId) {
46
+ const permission = this.permissions.find((r)=>r.id === permissionId);
47
+ if (!permission) throw new _runtimeexceptions.NotFoundException(`Permission Id '${permissionId}' not found`);
48
+ return permission;
49
+ }
50
+ async syncPermissions() {
51
+ this._permissions = [];
52
+ const permissionDefinition = (0, _authorizationconstants.flattenPermissionDefinition)();
53
+ for (let permission of permissionDefinition){
54
+ const storedPermission = await this.repository.findOneBy({
55
+ name: permission
56
+ });
57
+ if (!storedPermission) {
58
+ const newPermission = await this.create({
59
+ name: permission
60
+ });
61
+ this._permissions.push(newPermission);
62
+ } else {
63
+ this._permissions.push(storedPermission);
64
+ }
65
+ }
66
+ }
67
+ normalizePermission(assignedPermission) {
68
+ const permissionInstance = this.permissions.find((r)=>r.id === assignedPermission || r.name === assignedPermission);
69
+ if (!permissionInstance) {
70
+ this.logger.warn(`The permission by ID ${assignedPermission} did not exist. Skipping.`);
71
+ return;
72
+ }
73
+ return permissionInstance.name;
74
+ }
75
+ }
76
+
77
+ //# sourceMappingURL=permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/permission.service.ts"],"names":["PermissionService","BaseService","Permission","PermissionDto","logger","_permissions","constructor","loggerFactory","typeormService","permissions","toDto","permission","id","name","authorizePermission","requiredPermission","assignedPermissions","find","assignedPermission","normalizePermission","getPermissionByName","permissionName","r","NotFoundException","getPermission","permissionId","syncPermissions","permissionDefinition","flattenPermissionDefinition","storedPermission","repository","findOneBy","newPermission","create","push","permissionInstance","warn"],"mappings":";;;;+BAWaA;;;eAAAA;;;6BATe;0BACD;+BACG;mCACI;wCAIU;AAErC,MAAMA,0BACHC,IAAAA,wBAAW,EAACC,oBAAU,EAAEC,4BAAa;IAGrCC,OAAsB;IACtBC,eAA6B,EAAE,CAAC;IAExCC,YAAY,EAAEC,aAAa,EAAEC,cAAc,EAAqE,CAAE;QAChH,KAAK,CAAC;YAAEA;QAAe;IACzB;IACA,IAAIC,cAAc;QAChB,OAAO,IAAI,CAACJ,YAAY;IAC1B;IAEAK,MAAMC,UAAsB,EAA+B;QACzD,OAAO;YACLC,IAAID,WAAWC,EAAE;YACjBC,MAAMF,WAAWE,IAAI;QACvB;IACF;IAEAC,oBAAoBC,kBAA0B,EAAEC,mBAA6B,EAAW;QACtF,OAAO,CAAC,CAACA,oBAAoBC,IAAI,CAAC,CAACC;YACjC,MAAMC,sBAAsB,IAAI,CAACA,mBAAmB,CAACD;YACrD,IAAI,CAACC,qBAAqB,OAAO;YACjC,OAAOA,wBAAwBJ;QACjC;IACF;IAEA,MAAMK,oBAAoBC,cAAsB,EAAuB;QACrE,MAAMV,aAAa,IAAI,CAACF,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAET,IAAI,KAAKQ;QAC3D,IAAI,CAACV,YAAY,MAAM,IAAIY,oCAAiB,CAAC;QAC7C,OAAOZ;IACT;IAEA,MAAMa,cAAcC,YAA0B,EAAuB;QACnE,MAAMd,aAAa,IAAI,CAACF,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAEV,EAAE,KAAKa;QACzD,IAAI,CAACd,YAAY,MAAM,IAAIY,oCAAiB,CAAC,CAAC,eAAe,EAAEE,aAAa,WAAW,CAAC;QAExF,OAAOd;IACT;IAEA,MAAMe,kBAAiC;QACrC,IAAI,CAACrB,YAAY,GAAG,EAAE;QAEtB,MAAMsB,uBAAuBC,IAAAA,mDAA2B;QACxD,KAAK,IAAIjB,cAAcgB,qBAAsB;YAC3C,MAAME,mBAAmB,MAAM,IAAI,CAACC,UAAU,CAACC,SAAS,CAAC;gBAAElB,MAAMF;YAAW;YAC5E,IAAI,CAACkB,kBAAkB;gBACrB,MAAMG,gBAAgB,MAAM,IAAI,CAACC,MAAM,CAAC;oBACtCpB,MAAMF;gBACR;gBACA,IAAI,CAACN,YAAY,CAAC6B,IAAI,CAACF;YACzB,OAAO;gBACL,IAAI,CAAC3B,YAAY,CAAC6B,IAAI,CAACL;YACzB;QACF;IACF;IAEAV,oBAAoBD,kBAAmC,EAAU;QAC/D,MAAMiB,qBAAqB,IAAI,CAAC1B,WAAW,CAACQ,IAAI,CAAC,CAACK,IAAMA,EAAEV,EAAE,KAAKM,sBAAsBI,EAAET,IAAI,KAAKK;QAClG,IAAI,CAACiB,oBAAoB;YACvB,IAAI,CAAC/B,MAAM,CAACgC,IAAI,CAAC,CAAC,qBAAqB,EAAElB,mBAAmB,yBAAyB,CAAC;YACtF;QACF;QACA,OAAOiB,mBAAmBtB,IAAI;IAChC;AACF"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrintCompletionService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrintCompletionService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _printcompletiondto = require("../interfaces/print-completion.dto");
14
+ const _typeorm = require("typeorm");
15
+ const _octoprintwebsocketconstants = require("../octoprint/constants/octoprint-websocket.constants");
16
+ const _arrayutil = require("../../utils/array.util");
17
+ const _printcompletionshared = require("../print-completion.shared");
18
+ class PrintCompletionService extends (0, _baseservice.BaseService)(_entities.PrintCompletion, _printcompletiondto.PrintCompletionDto) {
19
+ logger;
20
+ constructor({ typeormService, loggerFactory }){
21
+ super({
22
+ typeormService
23
+ });
24
+ this.logger = loggerFactory(PrintCompletionService.name);
25
+ }
26
+ toDto(entity) {
27
+ return {
28
+ id: entity.id,
29
+ completionLog: entity.completionLog,
30
+ context: entity.context,
31
+ fileName: entity.fileName,
32
+ createdAt: entity.createdAt,
33
+ printerReference: entity.printerReference,
34
+ status: entity.status,
35
+ printerId: entity.printerId
36
+ };
37
+ }
38
+ async create(input) {
39
+ return await super.create(input);
40
+ }
41
+ async findPrintCompletion(correlationId) {
42
+ const completions = await this.repository.findBy({});
43
+ console.log({
44
+ context: {
45
+ correlationId
46
+ }
47
+ });
48
+ return completions.filter((c)=>c.context?.correlationId === correlationId);
49
+ }
50
+ async updateContext(correlationId, context) {
51
+ const completionEntry = await this.repository.findOneBy({
52
+ context: {
53
+ correlationId
54
+ },
55
+ status: _octoprintwebsocketconstants.EVENT_TYPES.PrintStarted
56
+ });
57
+ if (!completionEntry) {
58
+ this.logger.warn(`Print with correlationId ${correlationId} could not be updated with new context as it was not found`);
59
+ return;
60
+ }
61
+ completionEntry.context = context;
62
+ await this.update(completionEntry.id, completionEntry);
63
+ }
64
+ async listGroupByPrinterStatus() {
65
+ const limitedCompletions = await this.listPaged();
66
+ const printCompletionsAggr = (0, _arrayutil.groupArrayBy)(limitedCompletions, (val)=>val.printerId.toString());
67
+ const completions = Object.entries(printCompletionsAggr).map(([pc, val])=>({
68
+ printerId: parseInt(pc),
69
+ printEvents: val
70
+ }));
71
+ return (0, _printcompletionshared.processCompletions)(completions);
72
+ }
73
+ async loadPrintContexts() {
74
+ const completions = await this.repository.find({
75
+ where: {
76
+ status: (0, _typeorm.Not)((0, _typeorm.In)([
77
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintDone,
78
+ _octoprintwebsocketconstants.EVENT_TYPES.PrintFailed
79
+ ]))
80
+ },
81
+ order: {
82
+ printerId: 1,
83
+ createdAt: -1
84
+ }
85
+ });
86
+ return (0, _arrayutil.groupArrayBy)(completions, (val)=>val.id.toString());
87
+ }
88
+ }
89
+
90
+ //# sourceMappingURL=print-completion.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/print-completion.service.ts"],"names":["PrintCompletionService","BaseService","PrintCompletion","PrintCompletionDto","logger","constructor","typeormService","loggerFactory","name","toDto","entity","id","completionLog","context","fileName","createdAt","printerReference","status","printerId","create","input","findPrintCompletion","correlationId","completions","repository","findBy","console","log","filter","c","updateContext","completionEntry","findOneBy","EVENT_TYPES","PrintStarted","warn","update","listGroupByPrinterStatus","limitedCompletions","listPaged","printCompletionsAggr","groupArrayBy","val","toString","Object","entries","map","pc","parseInt","printEvents","processCompletions","loadPrintContexts","find","where","Not","In","PrintDone","PrintFailed","order"],"mappings":";;;;+BAaaA;;;eAAAA;;;6BAbe;0BACI;oCACqD;yBAG7D;6CACI;2BACC;uCAI2B;AAEjD,MAAMA,+BACHC,IAAAA,wBAAW,EAACC,yBAAe,EAAEC,sCAAkB;IAGvDC,OAAsB;IAEtBC,YAAY,EAAEC,cAAc,EAAEC,aAAa,EAAqE,CAAE;QAChH,KAAK,CAAC;YAAED;QAAe;QACvB,IAAI,CAACF,MAAM,GAAGG,cAAcP,uBAAuBQ,IAAI;IACzD;IAEAC,MAAMC,MAAuB,EAAoC;QAC/D,OAAO;YACLC,IAAID,OAAOC,EAAE;YACbC,eAAeF,OAAOE,aAAa;YACnCC,SAASH,OAAOG,OAAO;YACvBC,UAAUJ,OAAOI,QAAQ;YACzBC,WAAWL,OAAOK,SAAS;YAC3BC,kBAAkBN,OAAOM,gBAAgB;YACzCC,QAAQP,OAAOO,MAAM;YACrBC,WAAWR,OAAOQ,SAAS;QAC7B;IACF;IAEA,MAAMC,OAAOC,KAA6C,EAAE;QAC1D,OAAO,MAAM,KAAK,CAACD,OAAOC;IAC5B;IAEA,MAAMC,oBAAoBC,aAAqB,EAAE;QAC/C,MAAMC,cAAc,MAAM,IAAI,CAACC,UAAU,CAACC,MAAM,CAAC,CAAC;QAClDC,QAAQC,GAAG,CAAC;YAAEd,SAAS;gBAAES;YAAc;QAAE;QACzC,OAAOC,YAAYK,MAAM,CAAC,CAACC,IAAMA,EAAEhB,OAAO,EAAES,kBAAkBA;IAChE;IAEA,MAAMQ,cAAcR,aAAqB,EAAET,OAA+B,EAAiB;QACzF,MAAMkB,kBAAkB,MAAM,IAAI,CAACP,UAAU,CAACQ,SAAS,CAAC;YACtDnB,SAAS;gBAAES;YAAc;YACzBL,QAAQgB,wCAAW,CAACC,YAAY;QAClC;QACA,IAAI,CAACH,iBAAiB;YACpB,IAAI,CAAC3B,MAAM,CAAC+B,IAAI,CAAC,CAAC,yBAAyB,EAAEb,cAAc,0DAA0D,CAAC;YACtH;QACF;QACAS,gBAAgBlB,OAAO,GAAGA;QAC1B,MAAM,IAAI,CAACuB,MAAM,CAACL,gBAAgBpB,EAAE,EAAEoB;IACxC;IAEA,MAAMM,2BAA2D;QAC/D,MAAMC,qBAAqB,MAAM,IAAI,CAACC,SAAS;QAC/C,MAAMC,uBAAuBC,IAAAA,uBAAY,EAACH,oBAAoB,CAACI,MAAQA,IAAIxB,SAAS,CAACyB,QAAQ;QAC7F,MAAMpB,cAAcqB,OAAOC,OAAO,CAACL,sBAAsBM,GAAG,CAAC,CAAC,CAACC,IAAIL,IAAI,GAAM,CAAA;gBAC3ExB,WAAW8B,SAASD;gBACpBE,aAAaP;YACf,CAAA;QACA,OAAOQ,IAAAA,yCAAkB,EAAC3B;IAC5B;IAEA,MAAM4B,oBAAgE;QACpE,MAAM5B,cAAc,MAAM,IAAI,CAACC,UAAU,CAAC4B,IAAI,CAAC;YAC7CC,OAAO;gBACLpC,QAAQqC,IAAAA,YAAG,EAACC,IAAAA,WAAE,EAAC;oBAACtB,wCAAW,CAACuB,SAAS;oBAAEvB,wCAAW,CAACwB,WAAW;iBAAC;YACjE;YACAC,OAAO;gBACLxC,WAAW;gBACXH,WAAW,CAAC;YACd;QACF;QAEA,OAAO0B,IAAAA,uBAAY,EAAClB,aAAa,CAACmB,MAAQA,IAAI/B,EAAE,CAACgC,QAAQ;IAC3D;AACF"}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterFilesService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterFilesService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _printerfileentity = require("../../entities/printer-file.entity");
13
+ const _printerfiledto = require("../interfaces/printer-file.dto");
14
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
15
+ const _errorutils = require("../../utils/error.utils");
16
+ class PrinterFilesService extends (0, _baseservice.BaseService)(_printerfileentity.PrinterFile, _printerfiledto.PrinterFileDto) {
17
+ printerService;
18
+ logger;
19
+ constructor({ printerService, loggerFactory, typeormService }){
20
+ super({
21
+ typeormService
22
+ });
23
+ this.printerService = printerService;
24
+ this.logger = loggerFactory(PrinterFilesService.name);
25
+ }
26
+ toDto(entity) {
27
+ return {
28
+ id: entity.id,
29
+ printerId: entity.printerId,
30
+ name: entity.name,
31
+ date: entity.date,
32
+ display: entity.display,
33
+ gcodeAnalysis: entity.gcodeAnalysis,
34
+ hash: entity.hash,
35
+ origin: entity.origin,
36
+ path: entity.path,
37
+ prints: entity.prints,
38
+ refs: entity.refs,
39
+ size: entity.size,
40
+ statistics: entity.statistics,
41
+ type: entity.type,
42
+ typePath: entity.typePath
43
+ };
44
+ }
45
+ async getPrinterFiles(printerId) {
46
+ const printer = await this.printerService.get(printerId);
47
+ return this.listPrinterFiles(printer.id);
48
+ }
49
+ async updateFiles(printerId, newFiles) {
50
+ const savedFiles = await this.getPrinterFiles(printerId);
51
+ const newPaths = newFiles.map((f)=>f.path);
52
+ const deletableSavedFiles = savedFiles.filter((f)=>!newPaths.includes(f.path));
53
+ const deletableSavedFilePaths = deletableSavedFiles.map((f)=>f.path);
54
+ await this.deletePrinterFiles(printerId, deletableSavedFilePaths, false);
55
+ for (const newFile of newFiles){
56
+ try {
57
+ await this.appendOrReplaceFile(printerId, newFile);
58
+ } catch (e) {
59
+ this.logger.error(`Error appending file ${(0, _errorutils.errorSummary)(e)}`);
60
+ throw e;
61
+ }
62
+ }
63
+ return await this.getPrinterFiles(printerId);
64
+ }
65
+ async appendOrReplaceFile(printerId, addedFile) {
66
+ const printer = await this.printerService.get(printerId);
67
+ addedFile.printerId = printer.id;
68
+ if (!addedFile.customData) {
69
+ addedFile.customData = {};
70
+ }
71
+ const foundFile = await this.getPrinterFile(printer.id, addedFile.path);
72
+ if (!foundFile) {
73
+ await this.create(addedFile);
74
+ } else {
75
+ await this.repository.update({
76
+ printerId: printer.id,
77
+ path: addedFile.path
78
+ }, addedFile);
79
+ }
80
+ return await this.getPrinterFiles(printer.id);
81
+ }
82
+ async clearFiles(printerId) {
83
+ const printer = await this.printerService.get(printerId);
84
+ await this.repository.delete({
85
+ printerId: printer.id
86
+ });
87
+ }
88
+ async deletePrinterFiles(printerId, filePaths, throwError) {
89
+ const printer = await this.printerService.get(printerId);
90
+ if (filePaths?.length === 0) return;
91
+ if (!filePaths?.length) {
92
+ throw new Error("Cant delete specific printer files without specific file path array being provided");
93
+ }
94
+ for (const filePath of filePaths){
95
+ const file = await this.getPrinterFile(printer.id, filePath);
96
+ if (!file) {
97
+ if (throwError) {
98
+ throw new _runtimeexceptions.NotFoundException(`A file removal was ordered but this file was not found in database for printer Id ${printer.id}`, filePath);
99
+ } else {
100
+ this.logger.warn("File was not found in PrinterFile table");
101
+ return;
102
+ }
103
+ }
104
+ await this.delete(file.id);
105
+ }
106
+ }
107
+ async listPrinterFiles(printerId) {
108
+ return await this.list({
109
+ where: {
110
+ printerId
111
+ }
112
+ });
113
+ }
114
+ async getPrinterFile(printerId, filePath) {
115
+ const printer = await this.printerService.get(printerId);
116
+ return this.repository.findOneBy({
117
+ printerId: printer.id,
118
+ path: filePath
119
+ });
120
+ }
121
+ }
122
+
123
+ //# sourceMappingURL=printer-files.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/printer-files.service.ts"],"names":["PrinterFilesService","BaseService","PrinterFile","PrinterFileDto","printerService","logger","constructor","loggerFactory","typeormService","name","toDto","entity","id","printerId","date","display","gcodeAnalysis","hash","origin","path","prints","refs","size","statistics","type","typePath","getPrinterFiles","printer","get","listPrinterFiles","updateFiles","newFiles","savedFiles","newPaths","map","f","deletableSavedFiles","filter","includes","deletableSavedFilePaths","deletePrinterFiles","newFile","appendOrReplaceFile","e","error","errorSummary","addedFile","customData","foundFile","getPrinterFile","create","repository","update","clearFiles","delete","filePaths","throwError","length","Error","filePath","file","NotFoundException","warn","list","where","findOneBy"],"mappings":"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"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PrinterService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PrinterService;
9
+ }
10
+ });
11
+ const _printerdto = require("../interfaces/printer.dto");
12
+ const _printerentity = require("../../entities/printer.entity");
13
+ const _baseservice = require("./base.service");
14
+ const _urlutils = require("../../utils/url.utils");
15
+ const _validators = require("../../handlers/validators");
16
+ const _printerservicevalidation = require("../validators/printer-service.validation");
17
+ const _eventconstants = require("../../constants/event.constants");
18
+ class PrinterService extends (0, _baseservice.BaseService)(_printerentity.Printer, _printerdto.PrinterDto) {
19
+ logger;
20
+ eventEmitter2;
21
+ constructor({ loggerFactory, typeormService, eventEmitter2 }){
22
+ super({
23
+ typeormService
24
+ });
25
+ this.logger = loggerFactory(PrinterService.name);
26
+ this.eventEmitter2 = eventEmitter2;
27
+ }
28
+ toUnsafeDto(entity) {
29
+ return {
30
+ ...this.toDto(entity),
31
+ apiKey: entity.apiKey,
32
+ printerURL: entity.printerURL
33
+ };
34
+ }
35
+ toDto(entity) {
36
+ return {
37
+ id: entity.id,
38
+ name: entity.name,
39
+ enabled: entity.enabled,
40
+ disabledReason: entity.disabledReason,
41
+ dateAdded: entity.dateAdded
42
+ };
43
+ }
44
+ async list() {
45
+ return this.repository.find({
46
+ order: {
47
+ dateAdded: "ASC"
48
+ }
49
+ });
50
+ }
51
+ async create(newPrinter, emitEvent = true) {
52
+ if (newPrinter.id) {
53
+ delete newPrinter.id;
54
+ }
55
+ const mergedPrinter = await this.validateAndDefault(newPrinter);
56
+ mergedPrinter.dateAdded = Date.now();
57
+ const printer = await super.create(mergedPrinter);
58
+ if (emitEvent) {
59
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerCreated, {
60
+ printer
61
+ });
62
+ }
63
+ return printer;
64
+ }
65
+ async update(printerId, partial) {
66
+ const printer = await this.get(printerId);
67
+ if (partial.printerURL) {
68
+ partial.printerURL = (0, _urlutils.normalizeURLWithProtocol)(partial.printerURL);
69
+ }
70
+ Object.assign(printer, partial);
71
+ const { printerURL, apiKey, enabled, name } = await (0, _validators.validateInput)(printer, _printerservicevalidation.createPrinterRules);
72
+ const updatedPrinter = await super.update(printerId, {
73
+ printerURL,
74
+ name,
75
+ apiKey,
76
+ enabled
77
+ });
78
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printerUpdated, {
79
+ printer,
80
+ updatedPrinter
81
+ });
82
+ return updatedPrinter;
83
+ }
84
+ async batchImport(printers) {
85
+ if (!printers?.length) return [];
86
+ this.logger.log(`Validating ${printers.length} printer objects`);
87
+ for (let printer of printers){
88
+ await this.validateAndDefault(printer);
89
+ }
90
+ const newPrinters = [];
91
+ for (let printer of printers){
92
+ const createdPrinter = await this.create(printer, false);
93
+ newPrinters.push(createdPrinter);
94
+ }
95
+ this.logger.log(`Successfully created ${printers.length} printers`);
96
+ this.eventEmitter2.emit(_eventconstants.printerEvents.batchPrinterCreated, {
97
+ printers: newPrinters
98
+ });
99
+ return newPrinters;
100
+ }
101
+ async deleteMany(printerIds, emitEvent = true) {
102
+ const result = await this.repository.delete(printerIds);
103
+ if (emitEvent) {
104
+ this.eventEmitter2.emit(_eventconstants.printerEvents.printersDeleted, {
105
+ printerIds
106
+ });
107
+ }
108
+ return result;
109
+ }
110
+ updateConnectionSettings(printerId, partial) {
111
+ return this.update(printerId, partial);
112
+ }
113
+ updateDisabledReason(printerId, disabledReason) {
114
+ return this.update(printerId, {
115
+ disabledReason
116
+ });
117
+ }
118
+ updateEnabled(printerId, enabled) {
119
+ return this.update(printerId, {
120
+ enabled
121
+ });
122
+ }
123
+ updateFeedRate(printerId, feedRate) {
124
+ return this.update(printerId, {
125
+ feedRate
126
+ });
127
+ }
128
+ updateFlowRate(printerId, flowRate) {
129
+ return this.update(printerId, {
130
+ flowRate
131
+ });
132
+ }
133
+ async validateAndDefault(printer) {
134
+ const mergedPrinter = {
135
+ enabled: true,
136
+ ...printer
137
+ };
138
+ if (mergedPrinter.printerURL?.length) {
139
+ mergedPrinter.printerURL = (0, _urlutils.normalizeURLWithProtocol)(mergedPrinter.printerURL);
140
+ }
141
+ return await (0, _validators.validateInput)(mergedPrinter, _printerservicevalidation.createPrinterRules);
142
+ }
143
+ }
144
+
145
+ //# sourceMappingURL=printer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/printer.service.ts"],"names":["PrinterService","BaseService","Printer","PrinterDto","logger","eventEmitter2","constructor","loggerFactory","typeormService","name","toUnsafeDto","entity","toDto","apiKey","printerURL","id","enabled","disabledReason","dateAdded","list","repository","find","order","create","newPrinter","emitEvent","mergedPrinter","validateAndDefault","Date","now","printer","emit","printerEvents","printerCreated","update","printerId","partial","get","normalizeURLWithProtocol","Object","assign","validateInput","createPrinterRules","updatedPrinter","printerUpdated","batchImport","printers","length","log","newPrinters","createdPrinter","push","batchPrinterCreated","deleteMany","printerIds","result","delete","printersDeleted","updateConnectionSettings","updateDisabledReason","updateEnabled","updateFeedRate","feedRate","updateFlowRate","flowRate"],"mappings":";;;;+BAeaA;;;eAAAA;;;4BAdgC;+BACrB;6BACI;0BAIa;4BACX;0CACK;gCACL;AAKvB,MAAMA,uBACHC,IAAAA,wBAAW,EAACC,sBAAO,EAAEC,sBAAU;IAGvCC,OAAsB;IACtBC,cAA6B;IAE7BC,YAAY,EACVC,aAAa,EACbC,cAAc,EACdH,aAAa,EAKd,CAAE;QACD,KAAK,CAAC;YAAEG;QAAe;QACvB,IAAI,CAACJ,MAAM,GAAGG,cAAcP,eAAeS,IAAI;QAC/C,IAAI,CAACJ,aAAa,GAAGA;IACvB;IAEAK,YAAYC,MAAe,EAAkC;QAC3D,OAAO;YACL,GAAG,IAAI,CAACC,KAAK,CAACD,OAAO;YACrBE,QAAQF,OAAOE,MAAM;YACrBC,YAAYH,OAAOG,UAAU;QAC/B;IACF;IAEAF,MAAMD,MAAe,EAA4B;QAC/C,OAAO;YACLI,IAAIJ,OAAOI,EAAE;YACbN,MAAME,OAAOF,IAAI;YACjBO,SAASL,OAAOK,OAAO;YACvBC,gBAAgBN,OAAOM,cAAc;YACrCC,WAAWP,OAAOO,SAAS;QAC7B;IACF;IAEA,MAAMC,OAA2B;QAC/B,OAAO,IAAI,CAACC,UAAU,CAACC,IAAI,CAAC;YAC1BC,OAAO;gBACLJ,WAAW;YACb;QACF;IACF;IAKA,MAAMK,OAAOC,UAA0C,EAAEC,YAAY,IAAI,EAAoB;QAC3F,IAAID,WAAWT,EAAE,EAAE;YACjB,OAAOS,WAAWT,EAAE;QACtB;QAEA,MAAMW,gBAAgB,MAAM,IAAI,CAACC,kBAAkB,CAACH;QACpDE,cAAcR,SAAS,GAAGU,KAAKC,GAAG;QAClC,MAAMC,UAAU,MAAM,KAAK,CAACP,OAAOG;QACnC,IAAID,WAAW;YACb,IAAI,CAACpB,aAAa,CAAC0B,IAAI,CAACC,6BAAa,CAACC,cAAc,EAAE;gBAAEH;YAAQ;QAClE;QACA,OAAOA;IACT;IAKA,MAAMI,OAAOC,SAAuB,EAAEC,OAAyB,EAAoB;QACjF,MAAMN,UAAU,MAAM,IAAI,CAACO,GAAG,CAACF;QAC/B,IAAIC,QAAQtB,UAAU,EAAE;YACtBsB,QAAQtB,UAAU,GAAGwB,IAAAA,kCAAwB,EAACF,QAAQtB,UAAU;QAClE;QACAyB,OAAOC,MAAM,CAACV,SAASM;QACvB,MAAM,EAAEtB,UAAU,EAAED,MAAM,EAAEG,OAAO,EAAEP,IAAI,EAAE,GAAG,MAAMgC,IAAAA,yBAAa,EAACX,SAASY,4CAAkB;QAE7F,MAAMC,iBAAiB,MAAM,KAAK,CAACT,OAAOC,WAAW;YACnDrB;YACAL;YACAI;YACAG;QACF;QACA,IAAI,CAACX,aAAa,CAAC0B,IAAI,CAACC,6BAAa,CAACY,cAAc,EAAE;YAAEd;YAASa;QAAe;QAChF,OAAOA;IACT;IAEA,MAAME,YAAYC,QAA4B,EAAsB;QAClE,IAAI,CAACA,UAAUC,QAAQ,OAAO,EAAE;QAEhC,IAAI,CAAC3C,MAAM,CAAC4C,GAAG,CAAC,CAAC,WAAW,EAAEF,SAASC,MAAM,CAAC,gBAAgB,CAAC;QAC/D,KAAK,IAAIjB,WAAWgB,SAAU;YAC5B,MAAM,IAAI,CAACnB,kBAAkB,CAACG;QAChC;QAGA,MAAMmB,cAAc,EAAE;QACtB,KAAK,IAAInB,WAAWgB,SAAU;YAC5B,MAAMI,iBAAiB,MAAM,IAAI,CAAC3B,MAAM,CAACO,SAAS;YAClDmB,YAAYE,IAAI,CAACD;QACnB;QAEA,IAAI,CAAC9C,MAAM,CAAC4C,GAAG,CAAC,CAAC,qBAAqB,EAAEF,SAASC,MAAM,CAAC,SAAS,CAAC;QAClE,IAAI,CAAC1C,aAAa,CAAC0B,IAAI,CAACC,6BAAa,CAACoB,mBAAmB,EAAE;YAAEN,UAAUG;QAAY;QACnF,OAAOA;IACT;IAEA,MAAMI,WAAWC,UAA0B,EAAE7B,YAAY,IAAI,EAAyB;QACpF,MAAM8B,SAAS,MAAM,IAAI,CAACnC,UAAU,CAACoC,MAAM,CAACF;QAC5C,IAAI7B,WAAW;YACb,IAAI,CAACpB,aAAa,CAAC0B,IAAI,CAACC,6BAAa,CAACyB,eAAe,EAAE;gBAAEH;YAAW;QACtE;QACA,OAAOC;IACT;IAEAG,yBAAyBvB,SAAuB,EAAEC,OAA+C,EAAoB;QACnH,OAAO,IAAI,CAACF,MAAM,CAACC,WAAWC;IAChC;IAEAuB,qBAAqBxB,SAAuB,EAAElB,cAAsB,EAAoB;QACtF,OAAO,IAAI,CAACiB,MAAM,CAACC,WAAW;YAAElB;QAAe;IACjD;IAEA2C,cAAczB,SAAuB,EAAEnB,OAAgB,EAAoB;QACzE,OAAO,IAAI,CAACkB,MAAM,CAACC,WAAW;YAAEnB;QAAQ;IAC1C;IAEA6C,eAAe1B,SAAuB,EAAE2B,QAAgB,EAAoB;QAC1E,OAAO,IAAI,CAAC5B,MAAM,CAACC,WAAW;YAAE2B;QAAS;IAC3C;IAEAC,eAAe5B,SAAuB,EAAE6B,QAAgB,EAAoB;QAC1E,OAAO,IAAI,CAAC9B,MAAM,CAACC,WAAW;YAAE6B;QAAS;IAC3C;IAEA,MAAcrC,mBAAmBG,OAAgB,EAAoB;QACnE,MAAMJ,gBAAgB;YACpBV,SAAS;YACT,GAAGc,OAAO;QACZ;QACA,IAAIJ,cAAcZ,UAAU,EAAEiC,QAAQ;YACpCrB,cAAcZ,UAAU,GAAGwB,IAAAA,kCAAwB,EAACZ,cAAcZ,UAAU;QAC9E;QACA,OAAO,MAAM2B,IAAAA,yBAAa,EAACf,eAAegB,4CAAkB;IAC9D;AACF"}
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "RefreshTokenService", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return RefreshTokenService;
9
+ }
10
+ });
11
+ const _baseservice = require("./base.service");
12
+ const _entities = require("../../entities");
13
+ const _refreshtokendto = require("../interfaces/refresh-token.dto");
14
+ const _runtimeexceptions = require("../../exceptions/runtime.exceptions");
15
+ const _uuid = require("uuid");
16
+ const _serverconstants = require("../../server.constants");
17
+ const _typeorm = require("typeorm");
18
+ const _authorizationconstants = require("../../constants/authorization.constants");
19
+ class RefreshTokenService extends (0, _baseservice.BaseService)(_entities.RefreshToken, _refreshtokendto.RefreshTokenDto) {
20
+ settingsStore;
21
+ logger;
22
+ constructor({ typeormService, settingsStore, loggerFactory }){
23
+ super({
24
+ typeormService
25
+ });
26
+ this.settingsStore = settingsStore;
27
+ this.logger = loggerFactory(RefreshTokenService.name);
28
+ }
29
+ toDto(entity) {
30
+ return {
31
+ id: entity.id,
32
+ userId: entity.userId,
33
+ expiresAt: entity.expiresAt,
34
+ refreshAttemptsUsed: entity.refreshAttemptsUsed
35
+ };
36
+ }
37
+ async getRefreshToken(refreshToken, throwNotFoundError = true) {
38
+ const entity = await this.repository.findOneBy({
39
+ refreshToken
40
+ });
41
+ if (!entity) {
42
+ if (throwNotFoundError) {
43
+ throw new _runtimeexceptions.AuthenticationError(`The entity ${_entities.RefreshToken.name} '${refreshToken}' was not found.`, _authorizationconstants.AUTH_ERROR_REASON.InvalidOrExpiredRefreshToken);
44
+ }
45
+ return null;
46
+ }
47
+ return entity;
48
+ }
49
+ async createRefreshTokenForUserId(userId) {
50
+ const { refreshTokenExpiry } = await this.settingsStore.getCredentialSettings();
51
+ const refreshToken = (0, _uuid.v4)();
52
+ const timespan = refreshTokenExpiry ?? _serverconstants.AppConstants.DEFAULT_REFRESH_TOKEN_EXPIRY;
53
+ if (!refreshTokenExpiry) {
54
+ this.logger.warn(`Refresh token expiry not set in Settings:credentials, using default ${timespan} seconds}`);
55
+ }
56
+ await this.create({
57
+ userId,
58
+ expiresAt: Date.now() + timespan * 1000,
59
+ refreshToken,
60
+ refreshAttemptsUsed: 0
61
+ });
62
+ return refreshToken;
63
+ }
64
+ async updateRefreshTokenAttempts(refreshToken, refreshAttemptsUsed) {
65
+ await this.getRefreshToken(refreshToken, true);
66
+ await this.repository.update({
67
+ refreshToken
68
+ }, {
69
+ refreshAttemptsUsed
70
+ });
71
+ }
72
+ async purgeAllOutdatedRefreshTokens() {
73
+ const result = await this.repository.delete({
74
+ expiresAt: (0, _typeorm.LessThan)(Date.now())
75
+ });
76
+ if (result.affected) {
77
+ this.logger.debug(`Removed ${result.affected} outdated refresh tokens`);
78
+ }
79
+ }
80
+ async deleteRefreshTokenByUserId(userId) {
81
+ const result = await this.repository.delete({
82
+ userId
83
+ });
84
+ if (result.affected) {
85
+ this.logger.debug(`Removed ${result.affected} login refresh tokens for user ${userId}`);
86
+ }
87
+ }
88
+ async deleteRefreshToken(refreshToken) {
89
+ const result = await this.repository.delete({
90
+ refreshToken
91
+ });
92
+ if (result.affected) {
93
+ this.logger.debug(`Removed ${result.affected} login refresh tokens`);
94
+ }
95
+ }
96
+ async purgeOutdatedRefreshTokensByUserId(userId) {
97
+ const result = await this.repository.delete({
98
+ userId,
99
+ expiresAt: (0, _typeorm.LessThan)(Date.now())
100
+ });
101
+ if (result.affected) {
102
+ this.logger.debug(`Removed ${result.affected} outdated login refresh tokens for user ${userId}`);
103
+ }
104
+ }
105
+ }
106
+
107
+ //# sourceMappingURL=refresh-token.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/services/orm/refresh-token.service.ts"],"names":["RefreshTokenService","BaseService","RefreshToken","RefreshTokenDto","settingsStore","logger","constructor","typeormService","loggerFactory","name","toDto","entity","id","userId","expiresAt","refreshAttemptsUsed","getRefreshToken","refreshToken","throwNotFoundError","repository","findOneBy","AuthenticationError","AUTH_ERROR_REASON","InvalidOrExpiredRefreshToken","createRefreshTokenForUserId","refreshTokenExpiry","getCredentialSettings","uuidv4","timespan","AppConstants","DEFAULT_REFRESH_TOKEN_EXPIRY","warn","create","Date","now","updateRefreshTokenAttempts","update","purgeAllOutdatedRefreshTokens","result","delete","LessThan","affected","debug","deleteRefreshTokenByUserId","deleteRefreshToken","purgeOutdatedRefreshTokensByUserId"],"mappings":"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"}