@atom8n/decorators 1.2.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 (137) hide show
  1. package/dist/build.tsbuildinfo +1 -0
  2. package/dist/command/command-metadata.d.ts +7 -0
  3. package/dist/command/command-metadata.js +29 -0
  4. package/dist/command/command-metadata.js.map +1 -0
  5. package/dist/command/command.d.ts +2 -0
  6. package/dist/command/command.js +17 -0
  7. package/dist/command/command.js.map +1 -0
  8. package/dist/command/index.d.ts +3 -0
  9. package/dist/command/index.js +8 -0
  10. package/dist/command/index.js.map +1 -0
  11. package/dist/command/types.d.ts +24 -0
  12. package/dist/command/types.js +3 -0
  13. package/dist/command/types.js.map +1 -0
  14. package/dist/context-establishment/context-establishment-hook-metadata.d.ts +12 -0
  15. package/dist/context-establishment/context-establishment-hook-metadata.js +36 -0
  16. package/dist/context-establishment/context-establishment-hook-metadata.js.map +1 -0
  17. package/dist/context-establishment/context-establishment-hook.d.ts +25 -0
  18. package/dist/context-establishment/context-establishment-hook.js +3 -0
  19. package/dist/context-establishment/context-establishment-hook.js.map +1 -0
  20. package/dist/context-establishment/index.d.ts +2 -0
  21. package/dist/context-establishment/index.js +7 -0
  22. package/dist/context-establishment/index.js.map +1 -0
  23. package/dist/controller/args.d.ts +3 -0
  24. package/dist/controller/args.js +14 -0
  25. package/dist/controller/args.js.map +1 -0
  26. package/dist/controller/controller-registry-metadata.d.ts +7 -0
  27. package/dist/controller/controller-registry-metadata.js +46 -0
  28. package/dist/controller/controller-registry-metadata.js.map +1 -0
  29. package/dist/controller/index.d.ts +9 -0
  30. package/dist/controller/index.js +29 -0
  31. package/dist/controller/index.js.map +1 -0
  32. package/dist/controller/licensed.d.ts +2 -0
  33. package/dist/controller/licensed.js +11 -0
  34. package/dist/controller/licensed.js.map +1 -0
  35. package/dist/controller/middleware.d.ts +1 -0
  36. package/dist/controller/middleware.js +11 -0
  37. package/dist/controller/middleware.js.map +1 -0
  38. package/dist/controller/rest-controller.d.ts +1 -0
  39. package/dist/controller/rest-controller.js +13 -0
  40. package/dist/controller/rest-controller.js.map +1 -0
  41. package/dist/controller/root-level-controller.d.ts +1 -0
  42. package/dist/controller/root-level-controller.js +13 -0
  43. package/dist/controller/root-level-controller.js.map +1 -0
  44. package/dist/controller/route.d.ts +19 -0
  45. package/dist/controller/route.js +25 -0
  46. package/dist/controller/route.js.map +1 -0
  47. package/dist/controller/scoped.d.ts +3 -0
  48. package/dist/controller/scoped.js +14 -0
  49. package/dist/controller/scoped.js.map +1 -0
  50. package/dist/controller/types.d.ts +46 -0
  51. package/dist/controller/types.js +3 -0
  52. package/dist/controller/types.js.map +1 -0
  53. package/dist/credential-resolver/credential-resolver-metadata.d.ts +12 -0
  54. package/dist/credential-resolver/credential-resolver-metadata.js +36 -0
  55. package/dist/credential-resolver/credential-resolver-metadata.js.map +1 -0
  56. package/dist/credential-resolver/credential-resolver.d.ts +24 -0
  57. package/dist/credential-resolver/credential-resolver.js +3 -0
  58. package/dist/credential-resolver/credential-resolver.js.map +1 -0
  59. package/dist/credential-resolver/errors.d.ts +9 -0
  60. package/dist/credential-resolver/errors.js +25 -0
  61. package/dist/credential-resolver/errors.js.map +1 -0
  62. package/dist/credential-resolver/index.d.ts +3 -0
  63. package/dist/credential-resolver/index.js +22 -0
  64. package/dist/credential-resolver/index.js.map +1 -0
  65. package/dist/debounce.d.ts +1 -0
  66. package/dist/debounce.js +20 -0
  67. package/dist/debounce.js.map +1 -0
  68. package/dist/errors.d.ts +4 -0
  69. package/dist/errors.js +11 -0
  70. package/dist/errors.js.map +1 -0
  71. package/dist/execution-lifecycle/index.d.ts +3 -0
  72. package/dist/execution-lifecycle/index.js +8 -0
  73. package/dist/execution-lifecycle/index.js.map +1 -0
  74. package/dist/execution-lifecycle/lifecycle-metadata.d.ts +41 -0
  75. package/dist/execution-lifecycle/lifecycle-metadata.js +26 -0
  76. package/dist/execution-lifecycle/lifecycle-metadata.js.map +1 -0
  77. package/dist/execution-lifecycle/on-lifecycle-event.d.ts +2 -0
  78. package/dist/execution-lifecycle/on-lifecycle-event.js +20 -0
  79. package/dist/execution-lifecycle/on-lifecycle-event.js.map +1 -0
  80. package/dist/index.d.ts +15 -0
  81. package/dist/index.js +36 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/memoized.d.ts +1 -0
  84. package/dist/memoized.js +23 -0
  85. package/dist/memoized.js.map +1 -0
  86. package/dist/module/index.d.ts +3 -0
  87. package/dist/module/index.js +8 -0
  88. package/dist/module/index.js.map +1 -0
  89. package/dist/module/module-metadata.d.ts +15 -0
  90. package/dist/module/module-metadata.js +32 -0
  91. package/dist/module/module-metadata.js.map +1 -0
  92. package/dist/module/module.d.ts +38 -0
  93. package/dist/module/module.js +15 -0
  94. package/dist/module/module.js.map +1 -0
  95. package/dist/multi-main/index.d.ts +2 -0
  96. package/dist/multi-main/index.js +9 -0
  97. package/dist/multi-main/index.js.map +1 -0
  98. package/dist/multi-main/multi-main-metadata.d.ts +11 -0
  99. package/dist/multi-main/multi-main-metadata.js +28 -0
  100. package/dist/multi-main/multi-main-metadata.js.map +1 -0
  101. package/dist/multi-main/on-multi-main-event.d.ts +2 -0
  102. package/dist/multi-main/on-multi-main-event.js +23 -0
  103. package/dist/multi-main/on-multi-main-event.js.map +1 -0
  104. package/dist/pubsub/index.d.ts +3 -0
  105. package/dist/pubsub/index.js +8 -0
  106. package/dist/pubsub/index.js.map +1 -0
  107. package/dist/pubsub/on-pubsub-event.d.ts +2 -0
  108. package/dist/pubsub/on-pubsub-event.js +21 -0
  109. package/dist/pubsub/on-pubsub-event.js.map +1 -0
  110. package/dist/pubsub/pubsub-metadata.d.ts +19 -0
  111. package/dist/pubsub/pubsub-metadata.js +26 -0
  112. package/dist/pubsub/pubsub-metadata.js.map +1 -0
  113. package/dist/redactable.d.ts +7 -0
  114. package/dist/redactable.js +34 -0
  115. package/dist/redactable.js.map +1 -0
  116. package/dist/shutdown/constants.d.ts +3 -0
  117. package/dist/shutdown/constants.js +7 -0
  118. package/dist/shutdown/constants.js.map +1 -0
  119. package/dist/shutdown/index.d.ts +4 -0
  120. package/dist/shutdown/index.js +12 -0
  121. package/dist/shutdown/index.js.map +1 -0
  122. package/dist/shutdown/on-shutdown.d.ts +1 -0
  123. package/dist/shutdown/on-shutdown.js +20 -0
  124. package/dist/shutdown/on-shutdown.js.map +1 -0
  125. package/dist/shutdown/shutdown-metadata.d.ts +7 -0
  126. package/dist/shutdown/shutdown-metadata.js +36 -0
  127. package/dist/shutdown/shutdown-metadata.js.map +1 -0
  128. package/dist/shutdown/types.d.ts +8 -0
  129. package/dist/shutdown/types.js +3 -0
  130. package/dist/shutdown/types.js.map +1 -0
  131. package/dist/timed.d.ts +9 -0
  132. package/dist/timed.js +26 -0
  133. package/dist/timed.js.map +1 -0
  134. package/dist/types.d.ts +9 -0
  135. package/dist/types.js +3 -0
  136. package/dist/types.js.map +1 -0
  137. package/package.json +36 -0
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnLeaderStepdown = exports.OnLeaderTakeover = void 0;
4
+ const di_1 = require("@n8n/di");
5
+ const multi_main_metadata_1 = require("./multi-main-metadata");
6
+ const errors_1 = require("../errors");
7
+ const OnMultiMainEvent = (eventName) => (prototype, propertyKey, descriptor) => {
8
+ const eventHandlerClass = prototype.constructor;
9
+ const methodName = String(propertyKey);
10
+ if (typeof descriptor?.value !== 'function') {
11
+ throw new errors_1.NonMethodError(`${eventHandlerClass.name}.${methodName}()`);
12
+ }
13
+ di_1.Container.get(multi_main_metadata_1.MultiMainMetadata).register({
14
+ eventHandlerClass,
15
+ methodName,
16
+ eventName,
17
+ });
18
+ };
19
+ const OnLeaderTakeover = () => OnMultiMainEvent(multi_main_metadata_1.LEADER_TAKEOVER_EVENT_NAME);
20
+ exports.OnLeaderTakeover = OnLeaderTakeover;
21
+ const OnLeaderStepdown = () => OnMultiMainEvent(multi_main_metadata_1.LEADER_STEPDOWN_EVENT_NAME);
22
+ exports.OnLeaderStepdown = OnLeaderStepdown;
23
+ //# sourceMappingURL=on-multi-main-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-multi-main-event.js","sourceRoot":"","sources":["../../src/multi-main/on-multi-main-event.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AAGpC,+DAI+B;AAC/B,sCAA2C;AAG3C,MAAM,gBAAgB,GACrB,CAAC,SAAyB,EAAmB,EAAE,CAC/C,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;IACtC,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAgC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7C,MAAM,IAAI,uBAAc,CAAC,GAAG,iBAAiB,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,cAAS,CAAC,GAAG,CAAC,uCAAiB,CAAC,CAAC,QAAQ,CAAC;QACzC,iBAAiB;QACjB,UAAU;QACV,SAAS;KACT,CAAC,CAAC;AACJ,CAAC,CAAC;AAiBI,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,gDAA0B,CAAC,CAAC;AAAtE,QAAA,gBAAgB,oBAAsD;AAiB5E,MAAM,gBAAgB,GAAG,GAAG,EAAE,CAAC,gBAAgB,CAAC,gDAA0B,CAAC,CAAC;AAAtE,QAAA,gBAAgB,oBAAsD"}
@@ -0,0 +1,3 @@
1
+ export type { PubSubEventName } from './pubsub-metadata';
2
+ export { PubSubMetadata } from './pubsub-metadata';
3
+ export { OnPubSubEvent } from './on-pubsub-event';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnPubSubEvent = exports.PubSubMetadata = void 0;
4
+ var pubsub_metadata_1 = require("./pubsub-metadata");
5
+ Object.defineProperty(exports, "PubSubMetadata", { enumerable: true, get: function () { return pubsub_metadata_1.PubSubMetadata; } });
6
+ var on_pubsub_event_1 = require("./on-pubsub-event");
7
+ Object.defineProperty(exports, "OnPubSubEvent", { enumerable: true, get: function () { return on_pubsub_event_1.OnPubSubEvent; } });
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/pubsub/index.ts"],"names":[],"mappings":";;;AACA,qDAAmD;AAA1C,iHAAA,cAAc,OAAA;AACvB,qDAAkD;AAAzC,gHAAA,aAAa,OAAA"}
@@ -0,0 +1,2 @@
1
+ import type { PubSubEventName, PubSubEventFilter } from './pubsub-metadata';
2
+ export declare const OnPubSubEvent: (eventName: PubSubEventName, filter?: PubSubEventFilter) => MethodDecorator;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnPubSubEvent = void 0;
4
+ const di_1 = require("@n8n/di");
5
+ const pubsub_metadata_1 = require("./pubsub-metadata");
6
+ const errors_1 = require("../errors");
7
+ const OnPubSubEvent = (eventName, filter) => (prototype, propertyKey, descriptor) => {
8
+ const eventHandlerClass = prototype.constructor;
9
+ const methodName = String(propertyKey);
10
+ if (typeof descriptor?.value !== 'function') {
11
+ throw new errors_1.NonMethodError(`${eventHandlerClass.name}.${methodName}()`);
12
+ }
13
+ di_1.Container.get(pubsub_metadata_1.PubSubMetadata).register({
14
+ eventHandlerClass,
15
+ methodName,
16
+ eventName,
17
+ filter,
18
+ });
19
+ };
20
+ exports.OnPubSubEvent = OnPubSubEvent;
21
+ //# sourceMappingURL=on-pubsub-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-pubsub-event.js","sourceRoot":"","sources":["../../src/pubsub/on-pubsub-event.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AAEpC,uDAAmD;AAEnD,sCAA2C;AAsBpC,MAAM,aAAa,GACzB,CAAC,SAA0B,EAAE,MAA0B,EAAmB,EAAE,CAC5E,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;IACtC,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAgC,CAAC;IACrE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7C,MAAM,IAAI,uBAAc,CAAC,GAAG,iBAAiB,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,CAAC;IACvE,CAAC;IAED,cAAS,CAAC,GAAG,CAAC,gCAAc,CAAC,CAAC,QAAQ,CAAC;QACtC,iBAAiB;QACjB,UAAU;QACV,SAAS;QACT,MAAM;KACN,CAAC,CAAC;AACJ,CAAC,CAAC;AAhBU,QAAA,aAAa,iBAgBvB"}
@@ -0,0 +1,19 @@
1
+ import type { InstanceRole, InstanceType } from '@n8n/constants';
2
+ import type { EventHandler } from '../types';
3
+ export type PubSubEventName = 'add-webhooks-triggers-and-pollers' | 'remove-triggers-and-pollers' | 'clear-test-webhooks' | 'display-workflow-activation' | 'display-workflow-deactivation' | 'display-workflow-activation-error' | 'community-package-install' | 'community-package-uninstall' | 'community-package-update' | 'get-worker-status' | 'reload-external-secrets-providers' | 'reload-license' | 'reload-oidc-config' | 'reload-saml-config' | 'reload-overwrite-credentials' | 'response-to-get-worker-status' | 'restart-event-bus' | 'relay-execution-lifecycle-event' | 'reload-sso-provisioning-configuration';
4
+ export type PubSubEventFilter = {
5
+ instanceType: 'main';
6
+ instanceRole?: Omit<InstanceRole, 'unset'>;
7
+ } | {
8
+ instanceType: Omit<InstanceType, 'main'>;
9
+ instanceRole?: never;
10
+ };
11
+ type PubSubEventHandler = EventHandler<PubSubEventName> & {
12
+ filter?: PubSubEventFilter;
13
+ };
14
+ export declare class PubSubMetadata {
15
+ private readonly handlers;
16
+ register(handler: PubSubEventHandler): void;
17
+ getHandlers(): PubSubEventHandler[];
18
+ }
19
+ export {};
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.PubSubMetadata = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ let PubSubMetadata = class PubSubMetadata {
12
+ constructor() {
13
+ this.handlers = [];
14
+ }
15
+ register(handler) {
16
+ this.handlers.push(handler);
17
+ }
18
+ getHandlers() {
19
+ return this.handlers;
20
+ }
21
+ };
22
+ exports.PubSubMetadata = PubSubMetadata;
23
+ exports.PubSubMetadata = PubSubMetadata = __decorate([
24
+ (0, di_1.Service)()
25
+ ], PubSubMetadata);
26
+ //# sourceMappingURL=pubsub-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub-metadata.js","sourceRoot":"","sources":["../../src/pubsub/pubsub-metadata.ts"],"names":[],"mappings":";;;;;;;;;AACA,gCAAkC;AAsC3B,IAAM,cAAc,GAApB,MAAM,cAAc;IAApB;QACW,aAAQ,GAAyB,EAAE,CAAC;IAStD,CAAC;IAPA,QAAQ,CAAC,OAA2B;QACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,WAAW;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD,CAAA;AAVY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,YAAO,GAAE;GACG,cAAc,CAU1B"}
@@ -0,0 +1,7 @@
1
+ import { UnexpectedError } from 'n8n-workflow';
2
+ export declare class RedactableError extends UnexpectedError {
3
+ constructor(fieldName: string, args: string);
4
+ }
5
+ type FieldName = 'user' | 'inviter' | 'invitee';
6
+ export declare const Redactable: (fieldName?: FieldName) => MethodDecorator;
7
+ export {};
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Redactable = exports.RedactableError = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ class RedactableError extends n8n_workflow_1.UnexpectedError {
6
+ constructor(fieldName, args) {
7
+ super(`Failed to find "${fieldName}" property in argument "${args.toString()}". Please set the decorator \`@Redactable()\` only on \`LogStreamingEventRelay\` methods where the argument contains a "${fieldName}" property.`);
8
+ }
9
+ }
10
+ exports.RedactableError = RedactableError;
11
+ function toRedactable(userLike) {
12
+ return {
13
+ userId: userLike.id,
14
+ _email: userLike.email,
15
+ _firstName: userLike.firstName,
16
+ _lastName: userLike.lastName,
17
+ globalRole: userLike.role?.slug,
18
+ };
19
+ }
20
+ const Redactable = (fieldName = 'user') => (_target, _propertyName, propertyDescriptor) => {
21
+ const originalMethod = propertyDescriptor.value;
22
+ propertyDescriptor.value = function (...args) {
23
+ const index = args.findIndex((arg) => arg[fieldName] !== undefined);
24
+ if (index === -1)
25
+ throw new RedactableError(fieldName, args.toString());
26
+ const userLike = args[index]?.[fieldName];
27
+ if (userLike)
28
+ args[index][fieldName] = toRedactable(userLike);
29
+ return originalMethod.apply(this, args);
30
+ };
31
+ return propertyDescriptor;
32
+ };
33
+ exports.Redactable = Redactable;
34
+ //# sourceMappingURL=redactable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redactable.js","sourceRoot":"","sources":["../src/redactable.ts"],"names":[],"mappings":";;;AAAA,+CAA+C;AAY/C,MAAa,eAAgB,SAAQ,8BAAe;IACnD,YAAY,SAAiB,EAAE,IAAY;QAC1C,KAAK,CACJ,mBAAmB,SAAS,2BAA2B,IAAI,CAAC,QAAQ,EAAE,2HAA2H,SAAS,aAAa,CACvN,CAAC;IACH,CAAC;CACD;AAND,0CAMC;AAED,SAAS,YAAY,CAAC,QAAkB;IACvC,OAAO;QACN,MAAM,EAAE,QAAQ,CAAC,EAAE;QACnB,MAAM,EAAE,QAAQ,CAAC,KAAK;QACtB,UAAU,EAAE,QAAQ,CAAC,SAAS;QAC9B,SAAS,EAAE,QAAQ,CAAC,QAAQ;QAC5B,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI;KAC/B,CAAC;AACH,CAAC;AAgBM,MAAM,UAAU,GACtB,CAAC,YAAuB,MAAM,EAAmB,EAAE,CACnD,CAAC,OAAO,EAAE,aAAa,EAAE,kBAAsC,EAAE,EAAE;IAElE,MAAM,cAAc,GAAG,kBAAkB,CAAC,KAAiB,CAAC;IAI5D,kBAAkB,CAAC,KAAK,GAAG,UAAU,GAAG,IAAgB;QACvD,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC,CAAC;QAEpE,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,MAAM,IAAI,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAExE,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC;QAG1C,IAAI,QAAQ;YAAE,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QAG9D,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC;IAEF,OAAO,kBAAkB,CAAC;AAC3B,CAAC,CAAC;AAvBU,QAAA,UAAU,cAuBpB"}
@@ -0,0 +1,3 @@
1
+ export declare const LOWEST_SHUTDOWN_PRIORITY = 0;
2
+ export declare const DEFAULT_SHUTDOWN_PRIORITY = 100;
3
+ export declare const HIGHEST_SHUTDOWN_PRIORITY = 200;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HIGHEST_SHUTDOWN_PRIORITY = exports.DEFAULT_SHUTDOWN_PRIORITY = exports.LOWEST_SHUTDOWN_PRIORITY = void 0;
4
+ exports.LOWEST_SHUTDOWN_PRIORITY = 0;
5
+ exports.DEFAULT_SHUTDOWN_PRIORITY = 100;
6
+ exports.HIGHEST_SHUTDOWN_PRIORITY = 200;
7
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/shutdown/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,wBAAwB,GAAG,CAAC,CAAC;AAC7B,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAChC,QAAA,yBAAyB,GAAG,GAAG,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { HIGHEST_SHUTDOWN_PRIORITY, DEFAULT_SHUTDOWN_PRIORITY, LOWEST_SHUTDOWN_PRIORITY, } from './constants';
2
+ export { ShutdownMetadata } from './shutdown-metadata';
3
+ export { OnShutdown } from './on-shutdown';
4
+ export type { ShutdownHandler, ShutdownServiceClass } from './types';
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnShutdown = exports.ShutdownMetadata = exports.LOWEST_SHUTDOWN_PRIORITY = exports.DEFAULT_SHUTDOWN_PRIORITY = exports.HIGHEST_SHUTDOWN_PRIORITY = void 0;
4
+ var constants_1 = require("./constants");
5
+ Object.defineProperty(exports, "HIGHEST_SHUTDOWN_PRIORITY", { enumerable: true, get: function () { return constants_1.HIGHEST_SHUTDOWN_PRIORITY; } });
6
+ Object.defineProperty(exports, "DEFAULT_SHUTDOWN_PRIORITY", { enumerable: true, get: function () { return constants_1.DEFAULT_SHUTDOWN_PRIORITY; } });
7
+ Object.defineProperty(exports, "LOWEST_SHUTDOWN_PRIORITY", { enumerable: true, get: function () { return constants_1.LOWEST_SHUTDOWN_PRIORITY; } });
8
+ var shutdown_metadata_1 = require("./shutdown-metadata");
9
+ Object.defineProperty(exports, "ShutdownMetadata", { enumerable: true, get: function () { return shutdown_metadata_1.ShutdownMetadata; } });
10
+ var on_shutdown_1 = require("./on-shutdown");
11
+ Object.defineProperty(exports, "OnShutdown", { enumerable: true, get: function () { return on_shutdown_1.OnShutdown; } });
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shutdown/index.ts"],"names":[],"mappings":";;;AAAA,yCAIqB;AAHpB,sHAAA,yBAAyB,OAAA;AACzB,sHAAA,yBAAyB,OAAA;AACzB,qHAAA,wBAAwB,OAAA;AAEzB,yDAAuD;AAA9C,qHAAA,gBAAgB,OAAA;AACzB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA"}
@@ -0,0 +1 @@
1
+ export declare const OnShutdown: (priority?: number) => MethodDecorator;
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OnShutdown = void 0;
4
+ const di_1 = require("@n8n/di");
5
+ const n8n_workflow_1 = require("n8n-workflow");
6
+ const constants_1 = require("./constants");
7
+ const shutdown_metadata_1 = require("./shutdown-metadata");
8
+ const OnShutdown = (priority = constants_1.DEFAULT_SHUTDOWN_PRIORITY) => (prototype, propertyKey, descriptor) => {
9
+ const serviceClass = prototype.constructor;
10
+ const methodName = String(propertyKey);
11
+ if (typeof descriptor?.value === 'function') {
12
+ di_1.Container.get(shutdown_metadata_1.ShutdownMetadata).register(priority, { serviceClass, methodName });
13
+ }
14
+ else {
15
+ const name = `${serviceClass.name}.${methodName}()`;
16
+ throw new n8n_workflow_1.UnexpectedError(`${name} must be a method on ${serviceClass.name} to use "OnShutdown"`);
17
+ }
18
+ };
19
+ exports.OnShutdown = OnShutdown;
20
+ //# sourceMappingURL=on-shutdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"on-shutdown.js","sourceRoot":"","sources":["../../src/shutdown/on-shutdown.ts"],"names":[],"mappings":";;;AAAA,gCAAoC;AACpC,+CAA+C;AAE/C,2CAAwD;AACxD,2DAAuD;AAsBhD,MAAM,UAAU,GACtB,CAAC,QAAQ,GAAG,qCAAyB,EAAmB,EAAE,CAC1D,CAAC,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE;IACtC,MAAM,YAAY,GAAG,SAAS,CAAC,WAAmC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;IAEvC,IAAI,OAAO,UAAU,EAAE,KAAK,KAAK,UAAU,EAAE,CAAC;QAC7C,cAAS,CAAC,GAAG,CAAC,oCAAgB,CAAC,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACP,MAAM,IAAI,GAAG,GAAG,YAAY,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC;QACpD,MAAM,IAAI,8BAAe,CACxB,GAAG,IAAI,wBAAwB,YAAY,CAAC,IAAI,sBAAsB,CACtE,CAAC;IACH,CAAC;AACF,CAAC,CAAC;AAdU,QAAA,UAAU,cAcpB"}
@@ -0,0 +1,7 @@
1
+ import type { ShutdownHandler } from './types';
2
+ export declare class ShutdownMetadata {
3
+ private handlersByPriority;
4
+ register(priority: number, handler: ShutdownHandler): void;
5
+ getHandlersByPriority(): ShutdownHandler[][];
6
+ clear(): void;
7
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ 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
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.ShutdownMetadata = void 0;
10
+ const di_1 = require("@n8n/di");
11
+ const n8n_workflow_1 = require("n8n-workflow");
12
+ const constants_1 = require("./constants");
13
+ let ShutdownMetadata = class ShutdownMetadata {
14
+ constructor() {
15
+ this.handlersByPriority = [];
16
+ }
17
+ register(priority, handler) {
18
+ if (priority < constants_1.LOWEST_SHUTDOWN_PRIORITY || priority > constants_1.HIGHEST_SHUTDOWN_PRIORITY) {
19
+ throw new n8n_workflow_1.UserError(`Invalid shutdown priority. Please set it between ${constants_1.LOWEST_SHUTDOWN_PRIORITY} and ${constants_1.HIGHEST_SHUTDOWN_PRIORITY}.`, { extra: { priority } });
20
+ }
21
+ if (!this.handlersByPriority[priority])
22
+ this.handlersByPriority[priority] = [];
23
+ this.handlersByPriority[priority].push(handler);
24
+ }
25
+ getHandlersByPriority() {
26
+ return this.handlersByPriority;
27
+ }
28
+ clear() {
29
+ this.handlersByPriority = [];
30
+ }
31
+ };
32
+ exports.ShutdownMetadata = ShutdownMetadata;
33
+ exports.ShutdownMetadata = ShutdownMetadata = __decorate([
34
+ (0, di_1.Service)()
35
+ ], ShutdownMetadata);
36
+ //# sourceMappingURL=shutdown-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-metadata.js","sourceRoot":"","sources":["../../src/shutdown/shutdown-metadata.ts"],"names":[],"mappings":";;;;;;;;;AAAA,gCAAkC;AAClC,+CAAyC;AAEzC,2CAAkF;AAI3E,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAAtB;QACE,uBAAkB,GAAwB,EAAE,CAAC;IAsBtD,CAAC;IApBA,QAAQ,CAAC,QAAgB,EAAE,OAAwB;QAClD,IAAI,QAAQ,GAAG,oCAAwB,IAAI,QAAQ,GAAG,qCAAyB,EAAE,CAAC;YACjF,MAAM,IAAI,wBAAS,CAClB,oDAAoD,oCAAwB,QAAQ,qCAAyB,GAAG,EAChH,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,CACvB,CAAC;QACH,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC;YAAE,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAE/E,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACjD,CAAC;IAED,qBAAqB;QACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC;IAChC,CAAC;IAED,KAAK;QACJ,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC9B,CAAC;CACD,CAAA;AAvBY,4CAAgB;2BAAhB,gBAAgB;IAD5B,IAAA,YAAO,GAAE;GACG,gBAAgB,CAuB5B"}
@@ -0,0 +1,8 @@
1
+ import type { Class } from '../types';
2
+ type ShutdownHandlerFn = () => Promise<void> | void;
3
+ export type ShutdownServiceClass = Class<Record<string, ShutdownHandlerFn>>;
4
+ export interface ShutdownHandler {
5
+ serviceClass: ShutdownServiceClass;
6
+ methodName: string;
7
+ }
8
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shutdown/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export interface TimedOptions {
2
+ threshold?: number;
3
+ logArgs?: boolean;
4
+ }
5
+ interface Logger {
6
+ warn(message: string, meta?: object): void;
7
+ }
8
+ export declare const Timed: (logger: Logger, msg?: string) => (options?: TimedOptions) => MethodDecorator;
9
+ export {};
package/dist/timed.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Timed = void 0;
4
+ const Timed = (logger, msg = 'Slow method call') => (options = {}) => (_target, propertyKey, descriptor) => {
5
+ const originalMethod = descriptor.value;
6
+ const thresholdMs = options.threshold ?? 100;
7
+ const logArgs = options.logArgs ?? false;
8
+ descriptor.value = async function (...args) {
9
+ const methodName = `${this.constructor.name}.${String(propertyKey)}`;
10
+ const start = performance.now();
11
+ const result = await originalMethod.apply(this, args);
12
+ const durationMs = performance.now() - start;
13
+ if (durationMs > thresholdMs) {
14
+ logger.warn(msg, {
15
+ method: methodName,
16
+ durationMs: Math.round(durationMs),
17
+ thresholdMs,
18
+ params: logArgs ? args : '[hidden]',
19
+ });
20
+ }
21
+ return result;
22
+ };
23
+ return descriptor;
24
+ };
25
+ exports.Timed = Timed;
26
+ //# sourceMappingURL=timed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timed.js","sourceRoot":"","sources":["../src/timed.ts"],"names":[],"mappings":";;;AAcO,MAAM,KAAK,GACjB,CAAC,MAAc,EAAE,GAAG,GAAG,kBAAkB,EAAE,EAAE,CAC7C,CAAC,UAAwB,EAAE,EAAmB,EAAE,CAChD,CAAC,OAAO,EAAE,WAAW,EAAE,UAA8B,EAAE,EAAE;IACxD,MAAM,cAAc,GAAG,UAAU,CAAC,KAAwC,CAAC;IAC3E,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,GAAG,CAAC;IAC7C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC;IAEzC,UAAU,CAAC,KAAK,GAAG,KAAK,WAAW,GAAG,IAAe;QACpD,MAAM,UAAU,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAE7C,IAAI,UAAU,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBAChB,MAAM,EAAE,UAAU;gBAClB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;gBAClC,WAAW;gBACX,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;aACnC,CAAC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;IAEF,OAAO,UAAU,CAAC;AACnB,CAAC,CAAC;AA3BU,QAAA,KAAK,SA2Bf"}
@@ -0,0 +1,9 @@
1
+ export type Class<T = object, A extends unknown[] = unknown[]> = new (...args: A) => T;
2
+ type EventHandlerFn = () => Promise<void> | void;
3
+ export type EventHandlerClass = Class<Record<string, EventHandlerFn>>;
4
+ export type EventHandler<T extends string> = {
5
+ eventHandlerClass: EventHandlerClass;
6
+ methodName: string;
7
+ eventName: T;
8
+ };
9
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "@atom8n/decorators",
3
+ "version": "1.2.0",
4
+ "scripts": {
5
+ "clean": "rimraf dist .turbo",
6
+ "dev": "pnpm watch",
7
+ "typecheck": "tsc --noEmit",
8
+ "build": "tsc -p tsconfig.build.json",
9
+ "format": "biome format --write .",
10
+ "format:check": "biome ci .",
11
+ "lint": "eslint . --quiet",
12
+ "lint:fix": "eslint . --fix",
13
+ "watch": "tsc -p tsconfig.build.json --watch",
14
+ "test": "jest",
15
+ "test:unit": "jest",
16
+ "test:dev": "jest --watch"
17
+ },
18
+ "main": "dist/index.js",
19
+ "module": "src/index.ts",
20
+ "types": "dist/index.d.ts",
21
+ "files": [
22
+ "dist/**/*"
23
+ ],
24
+ "devDependencies": {
25
+ "@atom8n/typescript-config": "1.3.0",
26
+ "@types/express": "catalog:",
27
+ "@types/lodash": "catalog:"
28
+ },
29
+ "dependencies": {
30
+ "@atom8n/constants": "0.15.0",
31
+ "@atom8n/di": "0.10.0",
32
+ "@atom8n/permissions": "0.45.0",
33
+ "lodash": "catalog:",
34
+ "@atom8n/n8n-workflow": "2.2.0"
35
+ }
36
+ }