max-nestjs 0.0.4 → 0.0.6

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 (82) hide show
  1. package/dist/constants.d.ts +20 -0
  2. package/dist/constants.js +29 -0
  3. package/dist/constants.js.map +1 -0
  4. package/dist/{max-user.decorator.js → decorators/auth.js} +2 -2
  5. package/dist/decorators/auth.js.map +1 -0
  6. package/dist/decorators/common.d.ts +28 -0
  7. package/dist/decorators/common.js +42 -0
  8. package/dist/decorators/common.js.map +1 -0
  9. package/dist/decorators/index.d.ts +2 -0
  10. package/dist/decorators/index.js +19 -0
  11. package/dist/decorators/index.js.map +1 -0
  12. package/dist/execution-context.d.ts +20 -0
  13. package/dist/execution-context.js +43 -0
  14. package/dist/execution-context.js.map +1 -0
  15. package/dist/guards/auth.guard.d.ts +9 -0
  16. package/dist/guards/auth.guard.js +41 -0
  17. package/dist/guards/auth.guard.js.map +1 -0
  18. package/dist/index.d.ts +11 -7
  19. package/dist/index.js +24 -7
  20. package/dist/index.js.map +1 -1
  21. package/dist/interfaces.d.ts +44 -0
  22. package/dist/{max.interface.js → interfaces.js} +1 -1
  23. package/dist/interfaces.js.map +1 -0
  24. package/dist/max.module.d.ts +21 -3
  25. package/dist/max.module.js +151 -28
  26. package/dist/max.module.js.map +1 -1
  27. package/dist/params.factory.d.ts +7 -0
  28. package/dist/params.factory.js +31 -0
  29. package/dist/params.factory.js.map +1 -0
  30. package/dist/scenes/base-scene.d.ts +22 -0
  31. package/dist/scenes/base-scene.js +39 -0
  32. package/dist/scenes/base-scene.js.map +1 -0
  33. package/dist/scenes/context.d.ts +17 -0
  34. package/dist/scenes/context.js +16 -0
  35. package/dist/scenes/context.js.map +1 -0
  36. package/dist/scenes/index.d.ts +11 -0
  37. package/dist/scenes/index.js +21 -0
  38. package/dist/scenes/index.js.map +1 -0
  39. package/dist/scenes/scene-context.d.ts +38 -0
  40. package/dist/scenes/scene-context.js +95 -0
  41. package/dist/scenes/scene-context.js.map +1 -0
  42. package/dist/scenes/session.d.ts +36 -0
  43. package/dist/scenes/session.js +63 -0
  44. package/dist/scenes/session.js.map +1 -0
  45. package/dist/scenes/stage.d.ts +35 -0
  46. package/dist/scenes/stage.js +66 -0
  47. package/dist/scenes/stage.js.map +1 -0
  48. package/dist/scenes/wizard-context.d.ts +28 -0
  49. package/dist/scenes/wizard-context.js +36 -0
  50. package/dist/scenes/wizard-context.js.map +1 -0
  51. package/dist/scenes/wizard-scene.d.ts +19 -0
  52. package/dist/scenes/wizard-scene.js +49 -0
  53. package/dist/scenes/wizard-scene.js.map +1 -0
  54. package/dist/services/base-explorer.service.d.ts +7 -0
  55. package/dist/services/base-explorer.service.js +29 -0
  56. package/dist/services/base-explorer.service.js.map +1 -0
  57. package/dist/services/index.d.ts +3 -0
  58. package/dist/services/index.js +10 -0
  59. package/dist/services/index.js.map +1 -0
  60. package/dist/services/listeners-explorer.service.d.ts +33 -0
  61. package/dist/services/listeners-explorer.service.js +179 -0
  62. package/dist/services/listeners-explorer.service.js.map +1 -0
  63. package/dist/services/metadata-accessor.service.d.ts +12 -0
  64. package/dist/services/metadata-accessor.service.js +44 -0
  65. package/dist/services/metadata-accessor.service.js.map +1 -0
  66. package/dist/types.d.ts +0 -1
  67. package/dist/utils.d.ts +12 -0
  68. package/dist/utils.js +41 -0
  69. package/dist/utils.js.map +1 -0
  70. package/dist/validation.d.ts +9 -0
  71. package/dist/{max-auth.guard.js → validation.js} +11 -19
  72. package/dist/validation.js.map +1 -0
  73. package/package.json +4 -3
  74. package/dist/max-auth.guard.d.ts +0 -9
  75. package/dist/max-auth.guard.js.map +0 -1
  76. package/dist/max-user.decorator.js.map +0 -1
  77. package/dist/max.constants.d.ts +0 -3
  78. package/dist/max.constants.js +0 -7
  79. package/dist/max.constants.js.map +0 -1
  80. package/dist/max.interface.d.ts +0 -17
  81. package/dist/max.interface.js.map +0 -1
  82. /package/dist/{max-user.decorator.d.ts → decorators/auth.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/scenes/session.ts"],"names":[],"mappings":";;;AAqDA,0BAkCC;AA3ED,gDAAgD;AAChD,MAAa,kBAAkB;IAA/B;QACmB,UAAK,GAAG,IAAI,GAAG,EAAa,CAAA;IAa/C,CAAC;IAXC,GAAG,CAAC,GAAW;QACb,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC5B,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC5B,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;CACF;AAdD,gDAcC;AAWD;;;GAGG;AACI,MAAM,oBAAoB,GAAG,CAAC,GAAY,EAAsB,EAAE;IACvE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAA;IAE/F,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AAC1D,CAAC,CAAA;AAJY,QAAA,oBAAoB,wBAIhC;AAED;;;;GAIG;AACH,SAAgB,OAAO,CACrB,OAA8B;IAE9B,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAA;IAC/C,MAAM,aAAa,GAAG,OAAO,EAAE,aAAa,IAAI,4BAAoB,CAAA;IACpE,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,IAAI,kBAAkB,EAAK,CAAA;IAC3D,MAAM,cAAc,GAAG,OAAO,EAAE,cAAc,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAM,CAAC,CAAA;IAEnE,OAAO,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QACzB,MAAM,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,CAAA;QAE9B,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,IAAI,EAAE,CAAA;QACf,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,CAAA;QAEzD,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,QAAQ,EAAE;YACnC,YAAY,EAAE,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK;YAChB,GAAG,EAAE,CAAC,KAAQ,EAAE,EAAE;gBAChB,KAAK,GAAG,KAAK,CAAA;YACf,CAAC;SACF,CAAC,CAAA;QAEF,MAAM,IAAI,EAAE,CAAA;QAEZ,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,MAAM,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QAC7B,CAAC;IACH,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { Composer, Context, MiddlewareFn } from '@maxhub/max-bot-api';
2
+ import { BaseScene } from './base-scene';
3
+ import { SceneContextScene, SceneContextSceneOptions, SceneSessionData } from './scene-context';
4
+ /**
5
+ * Реестр сцен. В отличие от telegraf-Stage middleware разбит на две фазы, чтобы
6
+ * обработчики `@Update` (команды) могли выполняться между ними и иметь приоритет
7
+ * над шагами сцены: `attachMiddleware` (создаёт `ctx.scene`) → команды →
8
+ * `executeMiddleware` (запускает текущую сцену). У @maxhub/max-bot-api нет
9
+ * `Composer.lazy/optional/unwrap`, поэтому диспетчеризация сделана вручную.
10
+ *
11
+ * Тип сцены `ctx.scene` обеспечивается подклассом контекста (см. `SceneContext`/
12
+ * `WizardContext`), поэтому здесь generic'и намеренно ослаблены (как `Stage<any>`
13
+ * в nestjs-telegraf).
14
+ */
15
+ export declare class Stage<C extends Context = Context, D extends SceneSessionData = SceneSessionData> extends Composer<C> {
16
+ options: Partial<SceneContextSceneOptions<D>>;
17
+ scenes: Map<string, BaseScene<C>>;
18
+ constructor(scenes?: ReadonlyArray<BaseScene<C>>, options?: Partial<SceneContextSceneOptions<D>>);
19
+ register(...scenes: ReadonlyArray<BaseScene<C>>): this;
20
+ /** Фаза 1: привязывает `ctx.scene`. Должна выполняться раньше обработчиков. */
21
+ attachMiddleware(): MiddlewareFn<C>;
22
+ /** Фаза 2: выполняет зарегистрированные composer'ы и текущую сцену. */
23
+ executeMiddleware(): MiddlewareFn<C>;
24
+ /** Полный middleware (обе фазы подряд) — для простых случаев. */
25
+ middleware(): MiddlewareFn<C>;
26
+ static enter<C extends Context & {
27
+ scene: SceneContextScene<never>;
28
+ }>(sceneId: string, initialState?: object, silent?: boolean): (ctx: C) => Promise<unknown>;
29
+ static leave<C extends Context & {
30
+ scene: SceneContextScene<never>;
31
+ }>(): (ctx: C) => Promise<void>;
32
+ static reenter<C extends Context & {
33
+ scene: SceneContextScene<never>;
34
+ }>(): (ctx: C) => Promise<unknown> | undefined;
35
+ }
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Stage = void 0;
4
+ const max_bot_api_1 = require("@maxhub/max-bot-api");
5
+ const scene_context_1 = require("./scene-context");
6
+ /**
7
+ * Реестр сцен. В отличие от telegraf-Stage middleware разбит на две фазы, чтобы
8
+ * обработчики `@Update` (команды) могли выполняться между ними и иметь приоритет
9
+ * над шагами сцены: `attachMiddleware` (создаёт `ctx.scene`) → команды →
10
+ * `executeMiddleware` (запускает текущую сцену). У @maxhub/max-bot-api нет
11
+ * `Composer.lazy/optional/unwrap`, поэтому диспетчеризация сделана вручную.
12
+ *
13
+ * Тип сцены `ctx.scene` обеспечивается подклассом контекста (см. `SceneContext`/
14
+ * `WizardContext`), поэтому здесь generic'и намеренно ослаблены (как `Stage<any>`
15
+ * в nestjs-telegraf).
16
+ */
17
+ class Stage extends max_bot_api_1.Composer {
18
+ constructor(scenes = [], options) {
19
+ super();
20
+ this.options = { ...options };
21
+ this.scenes = new Map();
22
+ scenes.forEach((scene) => this.register(scene));
23
+ }
24
+ register(...scenes) {
25
+ scenes.forEach((scene) => {
26
+ if (scene?.id == null || typeof scene.middleware !== 'function') {
27
+ throw new Error('max-bot-nestjs: unsupported scene');
28
+ }
29
+ this.scenes.set(scene.id, scene);
30
+ });
31
+ return this;
32
+ }
33
+ /** Фаза 1: привязывает `ctx.scene`. Должна выполняться раньше обработчиков. */
34
+ attachMiddleware() {
35
+ return (ctx, next) => {
36
+ const scene = new scene_context_1.SceneContextScene(ctx, this.scenes, this.options);
37
+ ctx.scene = scene;
38
+ return next();
39
+ };
40
+ }
41
+ /** Фаза 2: выполняет зарегистрированные composer'ы и текущую сцену. */
42
+ executeMiddleware() {
43
+ return max_bot_api_1.Composer.compose([
44
+ super.middleware(),
45
+ (ctx, next) => {
46
+ const current = ctx.scene.current;
47
+ return current ? current.middleware()(ctx, next) : next();
48
+ }
49
+ ]);
50
+ }
51
+ /** Полный middleware (обе фазы подряд) — для простых случаев. */
52
+ middleware() {
53
+ return max_bot_api_1.Composer.compose([this.attachMiddleware(), this.executeMiddleware()]);
54
+ }
55
+ static enter(sceneId, initialState, silent) {
56
+ return (ctx) => ctx.scene.enter(sceneId, initialState, silent);
57
+ }
58
+ static leave() {
59
+ return (ctx) => ctx.scene.leave();
60
+ }
61
+ static reenter() {
62
+ return (ctx) => ctx.scene.reenter();
63
+ }
64
+ }
65
+ exports.Stage = Stage;
66
+ //# sourceMappingURL=stage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage.js","sourceRoot":"","sources":["../../src/scenes/stage.ts"],"names":[],"mappings":";;;AAAA,qDAAqE;AAErE,mDAA+F;AAE/F;;;;;;;;;;GAUG;AACH,MAAa,KAGX,SAAQ,sBAAW;IAInB,YACE,SAAsC,EAAE,EACxC,OAA8C;QAE9C,KAAK,EAAE,CAAA;QACP,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,OAAO,EAAE,CAAA;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,EAAwB,CAAA;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,QAAQ,CAAC,GAAG,MAAmC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YACvB,IAAI,KAAK,EAAE,EAAE,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;gBAChE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;YACtD,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAClC,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,+EAA+E;IAC/E,gBAAgB;QACd,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACnB,MAAM,KAAK,GAAG,IAAI,iCAAiB,CAAC,GAAY,EAAE,IAAI,CAAC,MAAe,EAAE,IAAI,CAAC,OAAO,CAAC,CACpF;YAAC,GAA2B,CAAC,KAAK,GAAG,KAAK,CAAA;YAC3C,OAAO,IAAI,EAAE,CAAA;QACf,CAAC,CAAA;IACH,CAAC;IAED,uEAAuE;IACvE,iBAAiB;QACf,OAAO,sBAAQ,CAAC,OAAO,CAAI;YACzB,KAAK,CAAC,UAAU,EAAE;YAClB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACZ,MAAM,OAAO,GAAI,GAAsD,CAAC,KAAK,CAAC,OAAO,CAAA;gBACrF,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,GAAY,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;YACpE,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,iEAAiE;IACjE,UAAU;QACR,OAAO,sBAAQ,CAAC,OAAO,CAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAA;IACjF,CAAC;IAED,MAAM,CAAC,KAAK,CACV,OAAe,EACf,YAAqB,EACrB,MAAgB;QAEhB,OAAO,CAAC,GAAM,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,CAAC,CAAA;IACnE,CAAC;IAED,MAAM,CAAC,KAAK;QACV,OAAO,CAAC,GAAM,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,OAAO,CAAC,GAAM,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;IACxC,CAAC;CACF;AAnED,sBAmEC"}
@@ -0,0 +1,28 @@
1
+ import { Context, MiddlewareFn } from '@maxhub/max-bot-api';
2
+ import { SceneContextScene, SceneSession, SceneSessionData } from './scene-context';
3
+ export interface WizardSessionData extends SceneSessionData {
4
+ cursor: number;
5
+ }
6
+ export interface WizardSession<S extends WizardSessionData = WizardSessionData> extends SceneSession<S> {
7
+ }
8
+ /** Контекст wizard-сцены: сессия со сценами + доступ к текущей сцене. */
9
+ export type WizardSessionContext = Context & {
10
+ session?: WizardSession;
11
+ scene: SceneContextScene<WizardSessionContext, WizardSessionData>;
12
+ };
13
+ /**
14
+ * `ctx.wizard` — курсор по шагам wizard-сцены. Курсор хранится в
15
+ * `ctx.scene.session.cursor`. Порт telegraf `scenes/wizard/context.ts`.
16
+ */
17
+ export declare class WizardContextWizard<C extends WizardSessionContext = WizardSessionContext> {
18
+ private readonly ctx;
19
+ private readonly steps;
20
+ readonly state: object;
21
+ constructor(ctx: C, steps: ReadonlyArray<MiddlewareFn<C>>);
22
+ get step(): MiddlewareFn<C> | undefined;
23
+ get cursor(): number;
24
+ set cursor(cursor: number);
25
+ selectStep(index: number): this;
26
+ next(): this;
27
+ back(): this;
28
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WizardContextWizard = void 0;
4
+ /**
5
+ * `ctx.wizard` — курсор по шагам wizard-сцены. Курсор хранится в
6
+ * `ctx.scene.session.cursor`. Порт telegraf `scenes/wizard/context.ts`.
7
+ */
8
+ class WizardContextWizard {
9
+ constructor(ctx, steps) {
10
+ this.ctx = ctx;
11
+ this.steps = steps;
12
+ this.state = ctx.scene.state;
13
+ this.cursor = ctx.scene.session.cursor ?? 0;
14
+ }
15
+ get step() {
16
+ return this.steps[this.cursor];
17
+ }
18
+ get cursor() {
19
+ return this.ctx.scene.session.cursor;
20
+ }
21
+ set cursor(cursor) {
22
+ this.ctx.scene.session.cursor = cursor;
23
+ }
24
+ selectStep(index) {
25
+ this.cursor = index;
26
+ return this;
27
+ }
28
+ next() {
29
+ return this.selectStep(this.cursor + 1);
30
+ }
31
+ back() {
32
+ return this.selectStep(this.cursor - 1);
33
+ }
34
+ }
35
+ exports.WizardContextWizard = WizardContextWizard;
36
+ //# sourceMappingURL=wizard-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-context.js","sourceRoot":"","sources":["../../src/scenes/wizard-context.ts"],"names":[],"mappings":";;;AAgBA;;;GAGG;AACH,MAAa,mBAAmB;IAG9B,YACmB,GAAM,EACN,KAAqC;QADrC,QAAG,GAAH,GAAG,CAAG;QACN,UAAK,GAAL,KAAK,CAAgC;QAEtD,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAA;QAC5B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAA;IACtC,CAAC;IAED,IAAI,MAAM,CAAC,MAAc;QACvB,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAA;IACxC,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAA;QACnB,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACzC,CAAC;CACF;AAnCD,kDAmCC"}
@@ -0,0 +1,19 @@
1
+ import { MiddlewareFn } from '@maxhub/max-bot-api';
2
+ import { BaseScene, SceneOptions } from './base-scene';
3
+ import { WizardContextWizard, WizardSessionContext } from './wizard-context';
4
+ type WizardContext = WizardSessionContext & {
5
+ wizard: WizardContextWizard<WizardSessionContext>;
6
+ };
7
+ /**
8
+ * Wizard-сцена: линейная последовательность шагов (`steps`), курсор по которым
9
+ * хранит `ctx.wizard`. Порт telegraf `scenes/wizard/index.ts` без `Composer.unwrap`
10
+ * (шаги уже скомпонованы в `MiddlewareFn`).
11
+ */
12
+ export declare class WizardScene<C extends WizardContext = WizardContext> extends BaseScene<C> {
13
+ steps: Array<MiddlewareFn<C>>;
14
+ constructor(id: string, ...steps: Array<MiddlewareFn<C>>);
15
+ constructor(id: string, options: SceneOptions<C>, ...steps: Array<MiddlewareFn<C>>);
16
+ middleware(): MiddlewareFn<C>;
17
+ enterMiddleware(): MiddlewareFn<C>;
18
+ }
19
+ export {};
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WizardScene = void 0;
4
+ const max_bot_api_1 = require("@maxhub/max-bot-api");
5
+ const base_scene_1 = require("./base-scene");
6
+ const wizard_context_1 = require("./wizard-context");
7
+ /**
8
+ * Wizard-сцена: линейная последовательность шагов (`steps`), курсор по которым
9
+ * хранит `ctx.wizard`. Порт telegraf `scenes/wizard/index.ts` без `Composer.unwrap`
10
+ * (шаги уже скомпонованы в `MiddlewareFn`).
11
+ */
12
+ class WizardScene extends base_scene_1.BaseScene {
13
+ constructor(id, options, ...steps) {
14
+ let opts;
15
+ let resolvedSteps;
16
+ if (typeof options === 'function') {
17
+ opts = undefined;
18
+ resolvedSteps = [options, ...steps];
19
+ }
20
+ else {
21
+ opts = options;
22
+ resolvedSteps = steps;
23
+ }
24
+ super(id, opts);
25
+ this.steps = resolvedSteps;
26
+ }
27
+ middleware() {
28
+ return max_bot_api_1.Composer.compose([
29
+ (ctx, next) => {
30
+ ;
31
+ ctx.wizard = new wizard_context_1.WizardContextWizard(ctx, this.steps);
32
+ return next();
33
+ },
34
+ super.middleware(),
35
+ (ctx, next) => {
36
+ if (ctx.wizard.step === undefined) {
37
+ ctx.wizard.selectStep(0);
38
+ return ctx.scene.leave();
39
+ }
40
+ return ctx.wizard.step(ctx, next);
41
+ }
42
+ ]);
43
+ }
44
+ enterMiddleware() {
45
+ return max_bot_api_1.Composer.compose([this.enterHandler, this.middleware()]);
46
+ }
47
+ }
48
+ exports.WizardScene = WizardScene;
49
+ //# sourceMappingURL=wizard-scene.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wizard-scene.js","sourceRoot":"","sources":["../../src/scenes/wizard-scene.ts"],"names":[],"mappings":";;;AAAA,qDAA4D;AAC5D,6CAAsD;AACtD,qDAA4E;AAM5E;;;;GAIG;AACH,MAAa,WAAqD,SAAQ,sBAAY;IAKpF,YACE,EAAU,EACV,OAA2C,EAC3C,GAAG,KAA6B;QAEhC,IAAI,IAAiC,CAAA;QACrC,IAAI,aAAqC,CAAA;QAEzC,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;YAClC,IAAI,GAAG,SAAS,CAAA;YAChB,aAAa,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,CAAA;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,GAAG,OAAO,CAAA;YACd,aAAa,GAAG,KAAK,CAAA;QACvB,CAAC;QAED,KAAK,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;QACf,IAAI,CAAC,KAAK,GAAG,aAAa,CAAA;IAC5B,CAAC;IAED,UAAU;QACR,OAAO,sBAAQ,CAAC,OAAO,CAAI;YACzB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACZ,CAAC;gBAAC,GAA4B,CAAC,MAAM,GAAG,IAAI,oCAAmB,CAAC,GAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;gBACzF,OAAO,IAAI,EAAE,CAAA;YACf,CAAC;YACD,KAAK,CAAC,UAAU,EAAE;YAClB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBACZ,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;oBAClC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;oBACxB,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;gBAC1B,CAAC;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YACnC,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;IAED,eAAe;QACb,OAAO,sBAAQ,CAAC,OAAO,CAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;IACpE,CAAC;CACF;AA7CD,kCA6CC"}
@@ -0,0 +1,7 @@
1
+ import { InstanceWrapper } from '@nestjs/core/injector/instance-wrapper';
2
+ import { Module } from '@nestjs/core/injector/module';
3
+ /** Обход модулей/провайдеров. Порт nestjs-telegraf без lodash. */
4
+ export declare class BaseExplorerService {
5
+ getModules(modulesContainer: Map<string, Module>, include: Function[]): Module[];
6
+ flatMap<T>(modules: Module[], callback: (instance: InstanceWrapper, moduleRef: Module) => T | undefined): T[];
7
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseExplorerService = void 0;
4
+ /** Обход модулей/провайдеров. Порт nestjs-telegraf без lodash. */
5
+ class BaseExplorerService {
6
+ getModules(modulesContainer, include) {
7
+ if (!include || include.length === 0) {
8
+ return [...modulesContainer.values()];
9
+ }
10
+ return [...modulesContainer.values()].filter(({ metatype }) => include.includes(metatype));
11
+ }
12
+ flatMap(modules, callback) {
13
+ const visited = new Set();
14
+ const unwrap = (moduleRef) => {
15
+ if (visited.has(moduleRef)) {
16
+ return [];
17
+ }
18
+ visited.add(moduleRef);
19
+ const defined = [...moduleRef.providers.values()].map((wrapper) => callback(wrapper, moduleRef));
20
+ const imported = moduleRef.imports?.size
21
+ ? [...moduleRef.imports.values()].flatMap((cur) => unwrap(cur))
22
+ : [];
23
+ return [...defined, ...imported].filter((value) => !!value);
24
+ };
25
+ return modules.flatMap(unwrap);
26
+ }
27
+ }
28
+ exports.BaseExplorerService = BaseExplorerService;
29
+ //# sourceMappingURL=base-explorer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-explorer.service.js","sourceRoot":"","sources":["../../src/services/base-explorer.service.ts"],"names":[],"mappings":";;;AAGA,kEAAkE;AAClE,MAAa,mBAAmB;IAC9B,UAAU,CAAC,gBAAqC,EAAE,OAAmB;QACnE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAA;QACvC,CAAC;QACD,OAAO,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAC5D,OAAO,CAAC,QAAQ,CAAC,QAAoB,CAAC,CACvC,CAAA;IACH,CAAC;IAED,OAAO,CACL,OAAiB,EACjB,QAAyE;QAEzE,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QAEjC,MAAM,MAAM,GAAG,CAAC,SAAiB,EAAO,EAAE;YACxC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC3B,OAAO,EAAE,CAAA;YACX,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAEtB,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAChE,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,CAC7B,CAAA;YAED,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,EAAE,IAAI;gBACtC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC/D,CAAC,CAAC,EAAE,CAAA;YAEN,OAAO,CAAC,GAAG,OAAO,EAAE,GAAG,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QACzE,CAAC,CAAA;QAED,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;CACF;AAnCD,kDAmCC"}
@@ -0,0 +1,3 @@
1
+ export { MetadataAccessorService } from './metadata-accessor.service';
2
+ export { BaseExplorerService } from './base-explorer.service';
3
+ export { ListenersExplorerService } from './listeners-explorer.service';
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ListenersExplorerService = exports.BaseExplorerService = exports.MetadataAccessorService = void 0;
4
+ var metadata_accessor_service_1 = require("./metadata-accessor.service");
5
+ Object.defineProperty(exports, "MetadataAccessorService", { enumerable: true, get: function () { return metadata_accessor_service_1.MetadataAccessorService; } });
6
+ var base_explorer_service_1 = require("./base-explorer.service");
7
+ Object.defineProperty(exports, "BaseExplorerService", { enumerable: true, get: function () { return base_explorer_service_1.BaseExplorerService; } });
8
+ var listeners_explorer_service_1 = require("./listeners-explorer.service");
9
+ Object.defineProperty(exports, "ListenersExplorerService", { enumerable: true, get: function () { return listeners_explorer_service_1.ListenersExplorerService; } });
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":";;;AAAA,yEAAqE;AAA5D,oIAAA,uBAAuB,OAAA;AAChC,iEAA6D;AAApD,4HAAA,mBAAmB,OAAA;AAC5B,2EAAuE;AAA9D,sIAAA,wBAAwB,OAAA"}
@@ -0,0 +1,33 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { ModuleRef, ModulesContainer } from '@nestjs/core';
3
+ import { MetadataScanner } from '@nestjs/core/metadata-scanner';
4
+ import { ExternalContextCreator } from '@nestjs/core/helpers/external-context-creator';
5
+ import { Stage } from '../scenes';
6
+ import { MetadataAccessorService } from './metadata-accessor.service';
7
+ import { BaseExplorerService } from './base-explorer.service';
8
+ import { MaxModuleOptions } from '../interfaces';
9
+ export declare class ListenersExplorerService extends BaseExplorerService implements OnModuleInit {
10
+ private readonly stage;
11
+ private readonly options;
12
+ private readonly botName;
13
+ private readonly moduleRef;
14
+ private readonly metadataAccessor;
15
+ private readonly metadataScanner;
16
+ private readonly modulesContainer;
17
+ private readonly externalContextCreator;
18
+ private readonly paramsFactory;
19
+ private bot;
20
+ constructor(stage: Stage, options: MaxModuleOptions, botName: string, moduleRef: ModuleRef, metadataAccessor: MetadataAccessorService, metadataScanner: MetadataScanner, modulesContainer: ModulesContainer, externalContextCreator: ExternalContextCreator);
21
+ onModuleInit(): void;
22
+ private explore;
23
+ private exploreUpdates;
24
+ private registerComposers;
25
+ private registerScenes;
26
+ private filterUpdates;
27
+ private filterComposers;
28
+ private filterScenes;
29
+ private registerListeners;
30
+ private registerWizardListeners;
31
+ private registerIfListener;
32
+ private createContextCallback;
33
+ }
@@ -0,0 +1,179 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ListenersExplorerService = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const core_1 = require("@nestjs/core");
18
+ const metadata_scanner_1 = require("@nestjs/core/metadata-scanner");
19
+ const external_context_creator_1 = require("@nestjs/core/helpers/external-context-creator");
20
+ const max_bot_api_1 = require("@maxhub/max-bot-api");
21
+ const scenes_1 = require("../scenes");
22
+ const metadata_accessor_service_1 = require("./metadata-accessor.service");
23
+ const base_explorer_service_1 = require("./base-explorer.service");
24
+ const params_factory_1 = require("../params.factory");
25
+ const constants_1 = require("../constants");
26
+ let ListenersExplorerService = class ListenersExplorerService extends base_explorer_service_1.BaseExplorerService {
27
+ constructor(stage, options, botName, moduleRef, metadataAccessor, metadataScanner, modulesContainer, externalContextCreator) {
28
+ super();
29
+ this.stage = stage;
30
+ this.options = options;
31
+ this.botName = botName;
32
+ this.moduleRef = moduleRef;
33
+ this.metadataAccessor = metadataAccessor;
34
+ this.metadataScanner = metadataScanner;
35
+ this.modulesContainer = modulesContainer;
36
+ this.externalContextCreator = externalContextCreator;
37
+ this.paramsFactory = new params_factory_1.MaxParamsFactory();
38
+ }
39
+ onModuleInit() {
40
+ this.bot = this.moduleRef.get(this.botName, { strict: false });
41
+ // session middleware уже применён в фабрике бота. Порядок здесь:
42
+ // attach(ctx.scene) → @Update-обработчики (команды) → execute(сцены).
43
+ this.bot.use(this.stage.attachMiddleware());
44
+ this.explore();
45
+ this.exploreUpdates();
46
+ this.bot.use(this.stage.executeMiddleware());
47
+ }
48
+ explore() {
49
+ const modules = this.getModules(this.modulesContainer, this.options.include || []);
50
+ this.registerComposers(modules);
51
+ this.registerScenes(modules);
52
+ }
53
+ exploreUpdates() {
54
+ const modules = this.getModules(this.modulesContainer, this.options.include || []);
55
+ const updates = this.flatMap(modules, (wrapper) => this.filterUpdates(wrapper));
56
+ updates.forEach((wrapper) => this.registerListeners(this.bot, wrapper));
57
+ }
58
+ registerComposers(modules) {
59
+ const composers = this.flatMap(modules, (wrapper) => this.filterComposers(wrapper));
60
+ composers.forEach((wrapper) => {
61
+ const composer = new max_bot_api_1.Composer();
62
+ this.registerListeners(composer, wrapper);
63
+ this.stage.use(composer);
64
+ });
65
+ }
66
+ registerScenes(modules) {
67
+ const scenes = this.flatMap(modules, (wrapper) => this.filterScenes(wrapper));
68
+ const sceneIds = new Set();
69
+ scenes.forEach((wrapper) => {
70
+ const metadata = this.metadataAccessor.getSceneMetadata(wrapper.instance.constructor);
71
+ if (!metadata)
72
+ return;
73
+ const { sceneId, type, options } = metadata;
74
+ if (sceneIds.has(sceneId)) {
75
+ throw new Error(`max-bot-nestjs: two scenes with the same id "${sceneId}"`);
76
+ }
77
+ sceneIds.add(sceneId);
78
+ if (type === 'base') {
79
+ const scene = new scenes_1.BaseScene(sceneId, options);
80
+ this.stage.register(scene);
81
+ this.registerListeners(scene, wrapper);
82
+ }
83
+ else {
84
+ // Wizard создаётся без шагов; шаги проставляются из @WizardStep ниже.
85
+ const scene = options ? new scenes_1.WizardScene(sceneId, options) : new scenes_1.WizardScene(sceneId);
86
+ this.stage.register(scene);
87
+ this.registerWizardListeners(scene, wrapper);
88
+ }
89
+ });
90
+ }
91
+ filterUpdates(wrapper) {
92
+ return wrapper.instance && this.metadataAccessor.isUpdate(wrapper.metatype)
93
+ ? wrapper
94
+ : undefined;
95
+ }
96
+ filterComposers(wrapper) {
97
+ return wrapper.instance && this.metadataAccessor.isComposer(wrapper.metatype)
98
+ ? wrapper
99
+ : undefined;
100
+ }
101
+ filterScenes(wrapper) {
102
+ return wrapper.instance && this.metadataAccessor.isScene(wrapper.metatype)
103
+ ? wrapper
104
+ : undefined;
105
+ }
106
+ registerListeners(composer, wrapper) {
107
+ const { instance } = wrapper;
108
+ const prototype = Object.getPrototypeOf(instance);
109
+ this.metadataScanner
110
+ .getAllMethodNames(prototype)
111
+ .forEach((name) => this.registerIfListener(composer, instance, prototype, name));
112
+ }
113
+ registerWizardListeners(wizard, wrapper) {
114
+ const { instance } = wrapper;
115
+ const prototype = Object.getPrototypeOf(instance);
116
+ const wizardSteps = [];
117
+ const basicListeners = [];
118
+ this.metadataScanner.getAllMethodNames(prototype).forEach((methodName) => {
119
+ const metadata = this.metadataAccessor.getWizardStepMetadata(prototype[methodName]);
120
+ if (!metadata) {
121
+ basicListeners.push(methodName);
122
+ return;
123
+ }
124
+ wizardSteps.push({ step: metadata.step, methodName });
125
+ });
126
+ for (const methodName of basicListeners) {
127
+ this.registerIfListener(wizard, instance, prototype, methodName);
128
+ }
129
+ const grouped = wizardSteps
130
+ .sort((a, b) => a.step - b.step)
131
+ .reduce((acc, cur) => {
132
+ ;
133
+ (acc[cur.step] ??= []).push(cur);
134
+ return acc;
135
+ }, {});
136
+ wizard.steps = Object.values(grouped).map((stepsMetadata) => {
137
+ const composer = new max_bot_api_1.Composer();
138
+ stepsMetadata.forEach((stepMethod) => {
139
+ this.registerIfListener(composer, instance, prototype, stepMethod.methodName, [
140
+ { method: 'use', args: [] }
141
+ ]);
142
+ });
143
+ return composer.middleware();
144
+ });
145
+ }
146
+ registerIfListener(composer, instance, prototype, methodName, defaultMetadata) {
147
+ const methodRef = prototype[methodName];
148
+ const metadata = this.metadataAccessor.getListenerMetadata(methodRef) || defaultMetadata;
149
+ if (!metadata || metadata.length < 1) {
150
+ return;
151
+ }
152
+ const handler = this.createContextCallback(instance, prototype, methodName);
153
+ const target = composer;
154
+ for (const { method, args } of metadata) {
155
+ target[method](...args, async (ctx, next) => {
156
+ const result = await handler(ctx, next);
157
+ if (result) {
158
+ await ctx.reply(String(result));
159
+ }
160
+ });
161
+ }
162
+ }
163
+ createContextCallback(instance, prototype, methodName) {
164
+ return this.externalContextCreator.create(instance, prototype[methodName], methodName, constants_1.PARAM_ARGS_METADATA, this.paramsFactory, undefined, undefined, undefined, 'max');
165
+ }
166
+ };
167
+ exports.ListenersExplorerService = ListenersExplorerService;
168
+ exports.ListenersExplorerService = ListenersExplorerService = __decorate([
169
+ (0, common_1.Injectable)(),
170
+ __param(0, (0, common_1.Inject)(constants_1.MAX_STAGE)),
171
+ __param(1, (0, common_1.Inject)(constants_1.MAX_MODULE_OPTIONS)),
172
+ __param(2, (0, common_1.Inject)(constants_1.MAX_BOT_NAME)),
173
+ __metadata("design:paramtypes", [scenes_1.Stage, Object, String, core_1.ModuleRef,
174
+ metadata_accessor_service_1.MetadataAccessorService,
175
+ metadata_scanner_1.MetadataScanner,
176
+ core_1.ModulesContainer,
177
+ external_context_creator_1.ExternalContextCreator])
178
+ ], ListenersExplorerService);
179
+ //# sourceMappingURL=listeners-explorer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listeners-explorer.service.js","sourceRoot":"","sources":["../../src/services/listeners-explorer.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAiE;AACjE,uCAA0D;AAG1D,oEAA+D;AAC/D,4FAAsF;AACtF,qDAA4D;AAC5D,sCAAyD;AACzD,2EAAqE;AACrE,mEAA6D;AAC7D,sDAAoD;AACpD,4CAA+F;AAIxF,IAAM,wBAAwB,GAA9B,MAAM,wBAAyB,SAAQ,2CAAmB;IAI/D,YACqB,KAA6B,EACpB,OAA0C,EAChD,OAAgC,EACrC,SAAoB,EACpB,gBAAyC,EACzC,eAAgC,EAChC,gBAAkC,EAClC,sBAA8C;QAE/D,KAAK,EAAE,CAAA;QAT6B,UAAK,GAAL,KAAK,CAAO;QACH,YAAO,GAAP,OAAO,CAAkB;QAC/B,YAAO,GAAP,OAAO,CAAQ;QACrC,cAAS,GAAT,SAAS,CAAW;QACpB,qBAAgB,GAAhB,gBAAgB,CAAyB;QACzC,oBAAe,GAAf,eAAe,CAAiB;QAChC,qBAAgB,GAAhB,gBAAgB,CAAkB;QAClC,2BAAsB,GAAtB,sBAAsB,CAAwB;QAXhD,kBAAa,GAAG,IAAI,iCAAgB,EAAE,CAAA;IAcvD,CAAC;IAED,YAAY;QACV,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAe,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;QAE5E,iEAAiE;QACjE,sEAAsE;QACtE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,OAAO,EAAE,CAAA;QACd,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAA;IAC9C,CAAC;IAEO,OAAO;QACb,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;QAClF,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;QAC/B,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;IAEO,cAAc;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;QAClF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;QAC/E,OAAO,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;IACzE,CAAC;IAEO,iBAAiB,CAAC,OAAiB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAA;QACnF,SAAS,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,MAAM,QAAQ,GAAG,IAAI,sBAAQ,EAAE,CAAA;YAC/B,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,cAAc,CAAC,OAAiB;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAA;QAC7E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAA;QAElC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAA;YACrF,IAAI,CAAC,QAAQ;gBAAE,OAAM;YAErB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,QAAQ,CAAA;YAC3C,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,GAAG,CAAC,CAAA;YAC7E,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;YAErB,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,KAAK,GAAG,IAAI,kBAAS,CAAU,OAAO,EAAE,OAAO,CAAC,CAAA;gBACtD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;gBAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YACxC,CAAC;iBAAM,CAAC;gBACN,sEAAsE;gBACtE,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,oBAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,oBAAW,CAAC,OAAO,CAAC,CAAA;gBACpF,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAsC,CAAC,CAAA;gBAC3D,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAC9C,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,aAAa,CAAC,OAAwB;QAC5C,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAoB,CAAC;YACrF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAEO,eAAe,CAAC,OAAwB;QAC9C,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,OAAO,CAAC,QAAoB,CAAC;YACvF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAEO,YAAY,CAAC,OAAwB;QAC3C,OAAO,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,QAAoB,CAAC;YACpF,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,SAAS,CAAA;IACf,CAAC;IAEO,iBAAiB,CAAC,QAAuB,EAAE,OAAwB;QACzE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACjD,IAAI,CAAC,eAAe;aACjB,iBAAiB,CAAC,SAAS,CAAC;aAC5B,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAAA;IACpF,CAAC;IAEO,uBAAuB,CAAC,MAAmB,EAAE,OAAwB;QAC3E,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAA;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QAEjD,MAAM,WAAW,GAA2C,EAAE,CAAA;QAC9D,MAAM,cAAc,GAAa,EAAE,CAAA;QAEnC,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAA;YACnF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;gBAC/B,OAAM;YACR,CAAC;YACD,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QAEF,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAClE,CAAC;QAED,MAAM,OAAO,GAAG,WAAW;aACxB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;aAC/B,MAAM,CAAyD,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC3E,CAAC;YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;YACjC,OAAO,GAAG,CAAA;QACZ,CAAC,EAAE,EAAE,CAAC,CAAA;QAER,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;YAC1D,MAAM,QAAQ,GAAG,IAAI,sBAAQ,EAAE,CAAA;YAC/B,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBACnC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,EAAE;oBAC5E,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE;iBAC5B,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YACF,OAAO,QAAQ,CAAC,UAAU,EAAE,CAAA;QAC9B,CAAC,CAAC,CAAA;IACJ,CAAC;IAEO,kBAAkB,CACxB,QAAuB,EACvB,QAAgB,EAChB,SAAiB,EACjB,UAAkB,EAClB,eAAoC;QAEpC,MAAM,SAAS,GAAI,SAAqC,CAAC,UAAU,CAAa,CAAA;QAChF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,eAAe,CAAA;QACxF,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrC,OAAM;QACR,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;QAC3E,MAAM,MAAM,GAAG,QAAmE,CAAA;QAElF,KAAK,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,GAAY,EAAE,IAAyB,EAAE,EAAE;gBACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;gBACvC,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEO,qBAAqB,CAAC,QAAgB,EAAE,SAAiB,EAAE,UAAkB;QACnF,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAM,CACvC,QAAQ,EACP,SAA0D,CAAC,UAAU,CAAC,EACvE,UAAU,EACV,+BAAmB,EACnB,IAAI,CAAC,aAAa,EAClB,SAAS,EACT,SAAS,EACT,SAAS,EACT,KAAK,CACN,CAAA;IACH,CAAC;CACF,CAAA;AAnLY,4DAAwB;mCAAxB,wBAAwB;IADpC,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,qBAAS,CAAC,CAAA;IACjB,WAAA,IAAA,eAAM,EAAC,8BAAkB,CAAC,CAAA;IAC1B,WAAA,IAAA,eAAM,EAAC,wBAAY,CAAC,CAAA;qCAFsB,cAAK,kBAGpB,gBAAS;QACF,mDAAuB;QACxB,kCAAe;QACd,uBAAgB;QACV,iDAAsB;GAZtD,wBAAwB,CAmLpC"}
@@ -0,0 +1,12 @@
1
+ import { Reflector } from '@nestjs/core';
2
+ import { ListenerMetadata, SceneMetadata, WizardStepMetadata } from '../interfaces';
3
+ export declare class MetadataAccessorService {
4
+ private readonly reflector;
5
+ constructor(reflector: Reflector);
6
+ isComposer(target?: Function): boolean;
7
+ isUpdate(target?: Function): boolean;
8
+ isScene(target?: Function): boolean;
9
+ getListenerMetadata(target: Function): ListenerMetadata[] | undefined;
10
+ getSceneMetadata(target: Function): SceneMetadata | undefined;
11
+ getWizardStepMetadata(target: Function): WizardStepMetadata | undefined;
12
+ }
@@ -0,0 +1,44 @@
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
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.MetadataAccessorService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const constants_1 = require("../constants");
16
+ let MetadataAccessorService = class MetadataAccessorService {
17
+ constructor(reflector) {
18
+ this.reflector = reflector;
19
+ }
20
+ isComposer(target) {
21
+ return !!target && !!this.reflector.get(constants_1.COMPOSER_METADATA, target);
22
+ }
23
+ isUpdate(target) {
24
+ return !!target && !!this.reflector.get(constants_1.UPDATE_METADATA, target);
25
+ }
26
+ isScene(target) {
27
+ return !!target && !!this.reflector.get(constants_1.SCENE_METADATA, target);
28
+ }
29
+ getListenerMetadata(target) {
30
+ return this.reflector.get(constants_1.LISTENERS_METADATA, target);
31
+ }
32
+ getSceneMetadata(target) {
33
+ return this.reflector.get(constants_1.SCENE_METADATA, target);
34
+ }
35
+ getWizardStepMetadata(target) {
36
+ return this.reflector.get(constants_1.WIZARD_STEP_METADATA, target);
37
+ }
38
+ };
39
+ exports.MetadataAccessorService = MetadataAccessorService;
40
+ exports.MetadataAccessorService = MetadataAccessorService = __decorate([
41
+ (0, common_1.Injectable)(),
42
+ __metadata("design:paramtypes", [core_1.Reflector])
43
+ ], MetadataAccessorService);
44
+ //# sourceMappingURL=metadata-accessor.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metadata-accessor.service.js","sourceRoot":"","sources":["../../src/services/metadata-accessor.service.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA2C;AAC3C,uCAAwC;AACxC,4CAMqB;AAId,IAAM,uBAAuB,GAA7B,MAAM,uBAAuB;IAClC,YAA6B,SAAoB;QAApB,cAAS,GAAT,SAAS,CAAW;IAAG,CAAC;IAErD,UAAU,CAAC,MAAiB;QAC1B,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAAiB,EAAE,MAAM,CAAC,CAAA;IACpE,CAAC;IAED,QAAQ,CAAC,MAAiB;QACxB,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,2BAAe,EAAE,MAAM,CAAC,CAAA;IAClE,CAAC;IAED,OAAO,CAAC,MAAiB;QACvB,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAc,EAAE,MAAM,CAAC,CAAA;IACjE,CAAC;IAED,mBAAmB,CAAC,MAAgB;QAClC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,8BAAkB,EAAE,MAAM,CAAC,CAAA;IACvD,CAAC;IAED,gBAAgB,CAAC,MAAgB;QAC/B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,0BAAc,EAAE,MAAM,CAAC,CAAA;IACnD,CAAC;IAED,qBAAqB,CAAC,MAAgB;QACpC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,gCAAoB,EAAE,MAAM,CAAC,CAAA;IACzD,CAAC;CACF,CAAA;AA1BY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,mBAAU,GAAE;qCAE6B,gBAAS;GADtC,uBAAuB,CA0BnC"}
package/dist/types.d.ts CHANGED
@@ -9,5 +9,4 @@ export interface MaxInitData extends Omit<Partial<MaxBridgeInitData>, 'hash' | '
9
9
  }
10
10
  export interface MaxRequest extends Request {
11
11
  maxInitData: MaxInitData;
12
- maxUser: MaxUserData;
13
12
  }
@@ -0,0 +1,12 @@
1
+ import { MaxParamtype } from './constants';
2
+ import { ListenerMetadata } from './interfaces';
3
+ /** DI-токен бота по имени (`undefined` → дефолтный бот). */
4
+ export declare const getBotToken: (name?: string) => string;
5
+ /**
6
+ * Фабрика декораторов-слушателей методов (`@Command`, `@On`, ...). Складывает в
7
+ * метаданные метода список `{ method, args }`, который explorer применяет к
8
+ * composer'у: `composer[method](...args, handler)`. Порт nestjs-telegraf.
9
+ */
10
+ export declare function createListenerDecorator<T = unknown>(method: ListenerMetadata['method']): (...args: T[]) => MethodDecorator;
11
+ /** Фабрика параметр-декораторов (`@Ctx`, `@Message`, ...). Порт nestjs-telegraf. */
12
+ export declare const createParamDecorator: (paramtype: MaxParamtype) => (data?: string) => ParameterDecorator;