@mtcute/dispatcher 0.6.0 → 0.8.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 (194) hide show
  1. package/README.md +3 -3
  2. package/cjs/callback-data-builder.d.ts +1 -1
  3. package/cjs/callback-data-builder.js +5 -5
  4. package/cjs/callback-data-builder.js.map +1 -1
  5. package/cjs/context/base.d.ts +2 -1
  6. package/cjs/context/base.js.map +1 -1
  7. package/cjs/context/callback-query.d.ts +3 -2
  8. package/cjs/context/callback-query.js +3 -3
  9. package/cjs/context/callback-query.js.map +1 -1
  10. package/cjs/context/chat-join-request.d.ts +2 -1
  11. package/cjs/context/chat-join-request.js +2 -2
  12. package/cjs/context/chat-join-request.js.map +1 -1
  13. package/cjs/context/chosen-inline-result.d.ts +2 -1
  14. package/cjs/context/chosen-inline-result.js +3 -3
  15. package/cjs/context/chosen-inline-result.js.map +1 -1
  16. package/cjs/context/inline-query.d.ts +2 -1
  17. package/cjs/context/inline-query.js +2 -2
  18. package/cjs/context/inline-query.js.map +1 -1
  19. package/cjs/context/message.d.ts +4 -6
  20. package/cjs/context/message.js +3 -3
  21. package/cjs/context/message.js.map +1 -1
  22. package/cjs/context/parse.js.map +1 -1
  23. package/cjs/context/pre-checkout-query.d.ts +2 -1
  24. package/cjs/context/pre-checkout-query.js +2 -2
  25. package/cjs/context/pre-checkout-query.js.map +1 -1
  26. package/cjs/dispatcher.d.ts +15 -9
  27. package/cjs/dispatcher.js +41 -78
  28. package/cjs/dispatcher.js.map +1 -1
  29. package/cjs/filters/bots.d.ts +6 -6
  30. package/cjs/filters/bots.js +2 -2
  31. package/cjs/filters/bots.js.map +1 -1
  32. package/cjs/filters/chat.d.ts +1 -1
  33. package/cjs/filters/chat.js +1 -1
  34. package/cjs/filters/chat.js.map +1 -1
  35. package/cjs/filters/group.d.ts +1 -1
  36. package/cjs/filters/group.js.map +1 -1
  37. package/cjs/filters/logic.js.map +1 -1
  38. package/cjs/filters/message.d.ts +75 -67
  39. package/cjs/filters/message.js +3 -3
  40. package/cjs/filters/message.js.map +1 -1
  41. package/cjs/filters/state.d.ts +2 -2
  42. package/cjs/filters/state.js.map +1 -1
  43. package/cjs/filters/text.d.ts +1 -1
  44. package/cjs/filters/text.js.map +1 -1
  45. package/cjs/filters/types.d.ts +2 -2
  46. package/cjs/filters/types.js.map +1 -1
  47. package/cjs/filters/updates.d.ts +1 -1
  48. package/cjs/filters/updates.js.map +1 -1
  49. package/cjs/filters/user.d.ts +1 -1
  50. package/cjs/filters/user.js +4 -4
  51. package/cjs/filters/user.js.map +1 -1
  52. package/cjs/handler.d.ts +4 -3
  53. package/cjs/handler.js.map +1 -1
  54. package/cjs/propagation.js +1 -1
  55. package/cjs/propagation.js.map +1 -1
  56. package/cjs/state/index.d.ts +3 -1
  57. package/cjs/state/index.js +3 -1
  58. package/cjs/state/index.js.map +1 -1
  59. package/cjs/state/key.d.ts +2 -2
  60. package/cjs/state/key.js +2 -2
  61. package/cjs/state/key.js.map +1 -1
  62. package/cjs/state/provider.d.ts +5 -0
  63. package/cjs/state/provider.js +3 -0
  64. package/cjs/state/provider.js.map +1 -0
  65. package/cjs/state/providers/index.d.ts +2 -0
  66. package/cjs/state/providers/index.js +19 -0
  67. package/cjs/state/providers/index.js.map +1 -0
  68. package/cjs/state/providers/memory.d.ts +29 -0
  69. package/cjs/state/providers/memory.js +76 -0
  70. package/cjs/state/providers/memory.js.map +1 -0
  71. package/cjs/state/providers/sqlite.d.ts +29 -0
  72. package/cjs/state/providers/sqlite.js +89 -0
  73. package/cjs/state/providers/sqlite.js.map +1 -0
  74. package/cjs/state/repository.d.ts +62 -0
  75. package/cjs/state/repository.js +3 -0
  76. package/cjs/state/repository.js.map +1 -0
  77. package/cjs/state/service.d.ts +19 -0
  78. package/cjs/state/service.js +68 -0
  79. package/cjs/state/service.js.map +1 -0
  80. package/cjs/state/update-state.d.ts +3 -3
  81. package/cjs/state/update-state.js +7 -7
  82. package/cjs/state/update-state.js.map +1 -1
  83. package/cjs/wizard.d.ts +2 -2
  84. package/cjs/wizard.js +1 -1
  85. package/cjs/wizard.js.map +1 -1
  86. package/esm/callback-data-builder.d.ts +1 -1
  87. package/esm/callback-data-builder.js +1 -1
  88. package/esm/callback-data-builder.js.map +1 -1
  89. package/esm/context/base.d.ts +2 -1
  90. package/esm/context/base.js.map +1 -1
  91. package/esm/context/callback-query.d.ts +3 -2
  92. package/esm/context/callback-query.js +1 -1
  93. package/esm/context/callback-query.js.map +1 -1
  94. package/esm/context/chat-join-request.d.ts +2 -1
  95. package/esm/context/chat-join-request.js +1 -1
  96. package/esm/context/chat-join-request.js.map +1 -1
  97. package/esm/context/chosen-inline-result.d.ts +2 -1
  98. package/esm/context/chosen-inline-result.js +1 -1
  99. package/esm/context/chosen-inline-result.js.map +1 -1
  100. package/esm/context/inline-query.d.ts +2 -1
  101. package/esm/context/inline-query.js +1 -1
  102. package/esm/context/inline-query.js.map +1 -1
  103. package/esm/context/message.d.ts +4 -6
  104. package/esm/context/message.js +1 -1
  105. package/esm/context/message.js.map +1 -1
  106. package/esm/context/parse.js.map +1 -1
  107. package/esm/context/pre-checkout-query.d.ts +2 -1
  108. package/esm/context/pre-checkout-query.js +1 -1
  109. package/esm/context/pre-checkout-query.js.map +1 -1
  110. package/esm/dispatcher.d.ts +15 -9
  111. package/esm/dispatcher.js +29 -66
  112. package/esm/dispatcher.js.map +1 -1
  113. package/esm/filters/bots.d.ts +6 -6
  114. package/esm/filters/bots.js +2 -2
  115. package/esm/filters/bots.js.map +1 -1
  116. package/esm/filters/chat.d.ts +2 -2
  117. package/esm/filters/chat.js +1 -1
  118. package/esm/filters/chat.js.map +1 -1
  119. package/esm/filters/group.d.ts +1 -1
  120. package/esm/filters/group.js.map +1 -1
  121. package/esm/filters/logic.js.map +1 -1
  122. package/esm/filters/message.d.ts +77 -69
  123. package/esm/filters/message.js +1 -1
  124. package/esm/filters/message.js.map +1 -1
  125. package/esm/filters/state.d.ts +2 -2
  126. package/esm/filters/state.js.map +1 -1
  127. package/esm/filters/text.d.ts +1 -1
  128. package/esm/filters/text.js.map +1 -1
  129. package/esm/filters/types.d.ts +2 -2
  130. package/esm/filters/types.js.map +1 -1
  131. package/esm/filters/updates.d.ts +1 -1
  132. package/esm/filters/updates.js.map +1 -1
  133. package/esm/filters/user.d.ts +1 -1
  134. package/esm/filters/user.js +3 -3
  135. package/esm/filters/user.js.map +1 -1
  136. package/esm/handler.d.ts +4 -3
  137. package/esm/handler.js.map +1 -1
  138. package/esm/propagation.js +1 -1
  139. package/esm/propagation.js.map +1 -1
  140. package/esm/state/index.d.ts +3 -1
  141. package/esm/state/index.js +3 -1
  142. package/esm/state/index.js.map +1 -1
  143. package/esm/state/key.d.ts +2 -2
  144. package/esm/state/key.js +1 -1
  145. package/esm/state/key.js.map +1 -1
  146. package/esm/state/provider.d.ts +5 -0
  147. package/esm/state/provider.js +2 -0
  148. package/esm/state/provider.js.map +1 -0
  149. package/esm/state/providers/index.d.ts +2 -0
  150. package/esm/state/providers/index.js +3 -0
  151. package/esm/state/providers/index.js.map +1 -0
  152. package/esm/state/providers/memory.d.ts +29 -0
  153. package/esm/state/providers/memory.js +72 -0
  154. package/esm/state/providers/memory.js.map +1 -0
  155. package/esm/state/providers/sqlite.d.ts +29 -0
  156. package/esm/state/providers/sqlite.js +85 -0
  157. package/esm/state/providers/sqlite.js.map +1 -0
  158. package/esm/state/repository.d.ts +62 -0
  159. package/esm/state/repository.js +2 -0
  160. package/esm/state/repository.js.map +1 -0
  161. package/esm/state/service.d.ts +19 -0
  162. package/esm/state/service.js +64 -0
  163. package/esm/state/service.js.map +1 -0
  164. package/esm/state/update-state.d.ts +3 -3
  165. package/esm/state/update-state.js +2 -2
  166. package/esm/state/update-state.js.map +1 -1
  167. package/esm/wizard.d.ts +2 -2
  168. package/esm/wizard.js +1 -1
  169. package/esm/wizard.js.map +1 -1
  170. package/package.json +11 -3
  171. package/cjs/callback-data-builder.test.d.ts +0 -1
  172. package/cjs/callback-data-builder.test.js +0 -74
  173. package/cjs/callback-data-builder.test.js.map +0 -1
  174. package/cjs/filters/bots.test.d.ts +0 -1
  175. package/cjs/filters/bots.test.js +0 -120
  176. package/cjs/filters/bots.test.js.map +0 -1
  177. package/cjs/filters/logic.test.d.ts +0 -1
  178. package/cjs/filters/logic.test.js +0 -169
  179. package/cjs/filters/logic.test.js.map +0 -1
  180. package/cjs/state/storage.d.ts +0 -96
  181. package/cjs/state/storage.js +0 -17
  182. package/cjs/state/storage.js.map +0 -1
  183. package/esm/callback-data-builder.test.d.ts +0 -1
  184. package/esm/callback-data-builder.test.js +0 -72
  185. package/esm/callback-data-builder.test.js.map +0 -1
  186. package/esm/filters/bots.test.d.ts +0 -1
  187. package/esm/filters/bots.test.js +0 -118
  188. package/esm/filters/bots.test.js.map +0 -1
  189. package/esm/filters/logic.test.d.ts +0 -1
  190. package/esm/filters/logic.test.js +0 -167
  191. package/esm/filters/logic.test.js.map +0 -1
  192. package/esm/state/storage.d.ts +0 -96
  193. package/esm/state/storage.js +0 -13
  194. package/esm/state/storage.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"logic.test.js","sourceRoot":"","sources":["../../../src/filters/logic.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it, vi } from 'vitest'\n\nimport { and, not, or } from './logic.js'\n\ndescribe('filters.not', () => {\n it('should negate a given sync filter', () => {\n const filter = vi.fn().mockReturnValue(true)\n const negated = not(filter)\n\n expect(negated(1)).toBe(false)\n expect(filter).toHaveBeenCalledTimes(1)\n expect(filter).toHaveBeenCalledWith(1, undefined)\n })\n\n it('should negate a given async filter', async () => {\n const filter = vi.fn().mockResolvedValue(true)\n const negated = not(filter)\n\n await expect(negated(1)).resolves.toBe(false)\n expect(filter).toHaveBeenCalledTimes(1)\n expect(filter).toHaveBeenCalledWith(1, undefined)\n })\n})\n\ndescribe('filters.and', () => {\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should combine %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should not continue execution after false (%s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).not.toHaveBeenCalled()\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should combine %s, %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b, c)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).toHaveBeenCalledTimes(1)\n expect(c).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should not continue execution after false (%s, %s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n\n const combined = and(a, b, c)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).not.toHaveBeenCalled()\n })\n})\n\ndescribe('filters.or', () => {\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should combine %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync'],\n ['sync', 'async'],\n ['async', 'sync'],\n ['async', 'async'],\n ])('should not continue execution after true (%s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const b = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).not.toHaveBeenCalled()\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should combine %s, %s and %s filters', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b, c)\n\n expect(await combined(1)).toBe(false)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).toHaveBeenCalledTimes(1)\n expect(c).toHaveBeenCalledWith(1, undefined)\n })\n\n it.each([\n ['sync', 'sync', 'sync'],\n ['sync', 'sync', 'async'],\n ['sync', 'async', 'sync'],\n ['sync', 'async', 'async'],\n ['async', 'sync', 'sync'],\n ['async', 'sync', 'async'],\n ['async', 'async', 'sync'],\n ['async', 'async', 'async'],\n ])('should not continue execution after true (%s, %s and %s filters)', async (aType, bType) => {\n const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false))\n const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true))\n const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false))\n\n const combined = or(a, b, c)\n\n expect(await combined(1)).toBe(true)\n expect(a).toHaveBeenCalledTimes(1)\n expect(a).toHaveBeenCalledWith(1, undefined)\n expect(b).toHaveBeenCalledTimes(1)\n expect(b).toHaveBeenCalledWith(1, undefined)\n expect(c).not.toHaveBeenCalled()\n })\n})\n"]}
@@ -1,96 +0,0 @@
1
- import { MaybeAsync } from '@mtcute/client';
2
- /**
3
- * Interface for FSM storage for the dispatcher.
4
- *
5
- * All of the officially supported storages already implement
6
- * this interface, so you can just re-use it.
7
- *
8
- * Current scene is a special case of a `string` state,
9
- * Most of the time you can just store it the same way
10
- * as normal state, prefixing with something like `$current_state_`
11
- * (scene name can't start with `$`).
12
- * Alternatively, you can store them as simple strings
13
- */
14
- export interface IStateStorage {
15
- /**
16
- * Load state from some external storage.
17
- * Should be used either to load session content from file/network/etc
18
- * to memory, or to open required connections to fetch session content later
19
- *
20
- * This method may be called multiple times and should handle that.
21
- */
22
- load?(): MaybeAsync<void>;
23
- /**
24
- * Save state to some external storage.
25
- * Should be used to commit pending changes in the session.
26
- * For example, saving session content to file/network/etc,
27
- * or committing a database transaction
28
- */
29
- save?(): MaybeAsync<void>;
30
- /**
31
- * Cleanup storage and release all used resources.
32
- *
33
- * This method may be called multiple times and should handle that.
34
- */
35
- destroy?(): MaybeAsync<void>;
36
- /**
37
- * Retrieve state from the storage
38
- *
39
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
40
- */
41
- getState(key: string): MaybeAsync<unknown>;
42
- /**
43
- * Save state to the storage
44
- *
45
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
46
- * @param state Object representing the state
47
- * @param ttl TTL for the state, in seconds
48
- */
49
- setState(key: string, state: unknown, ttl?: number): MaybeAsync<void>;
50
- /**
51
- * Delete state from the storage
52
- *
53
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
54
- */
55
- deleteState(key: string): MaybeAsync<void>;
56
- /**
57
- * Retrieve the current scene UID from the storage
58
- *
59
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
60
- */
61
- getCurrentScene(key: string): MaybeAsync<string | null>;
62
- /**
63
- * Change current scene's UID from the storage
64
- *
65
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
66
- * @param scene New scene
67
- * @param ttl TTL for the scene, in seconds
68
- */
69
- setCurrentScene(key: string, scene: string, ttl?: number): MaybeAsync<void>;
70
- /**
71
- * Delete current scene from the storage, effectively "exiting" to root.
72
- *
73
- * @param key Key of the state, as defined by {@link StateKeyDelegate}
74
- */
75
- deleteCurrentScene(key: string): MaybeAsync<void>;
76
- /**
77
- * Get information about a rate limit.
78
- *
79
- * It is recommended that you use sliding window or leaky bucket
80
- * to implement rate limiting ([learn more](https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/)),
81
- *
82
- * @param key Key of the rate limit
83
- * @param limit Maximum number of requests in `window`
84
- * @param window Window size in seconds
85
- * @returns Tuple containing the number of remaining and
86
- * unix time in ms when the user can try again
87
- */
88
- getRateLimit(key: string, limit: number, window: number): MaybeAsync<[number, number]>;
89
- /**
90
- * Reset a rate limit.
91
- *
92
- * @param key Key of the rate limit
93
- */
94
- resetRateLimit(key: string): MaybeAsync<void>;
95
- }
96
- export declare function isCompatibleStorage(storage: unknown): storage is IStateStorage;
@@ -1,13 +0,0 @@
1
- export function isCompatibleStorage(storage) {
2
- return (typeof storage === 'object' &&
3
- storage !== null &&
4
- 'getState' in storage &&
5
- 'setState' in storage &&
6
- 'deleteState' in storage &&
7
- 'getCurrentScene' in storage &&
8
- 'setCurrentScene' in storage &&
9
- 'deleteCurrentScene' in storage &&
10
- 'getRateLimit' in storage &&
11
- 'resetRateLimit' in storage);
12
- }
13
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/state/storage.ts"],"names":[],"mappings":"AA4GA,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAChD,OAAO,CACH,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAO,KAAK,IAAI;QAChB,UAAU,IAAI,OAAO;QACrB,UAAU,IAAI,OAAO;QACrB,aAAa,IAAI,OAAO;QACxB,iBAAiB,IAAI,OAAO;QAC5B,iBAAiB,IAAI,OAAO;QAC5B,oBAAoB,IAAI,OAAO;QAC/B,cAAc,IAAI,OAAO;QACzB,gBAAgB,IAAI,OAAO,CAC9B,CAAA;AACL,CAAC","sourcesContent":["import { MaybeAsync } from '@mtcute/client'\n\n// ⚠️ Important: when modifying the below interface, also update it\n// in packages/core/src/storage/storage.test-utils.ts\n\n/**\n * Interface for FSM storage for the dispatcher.\n *\n * All of the officially supported storages already implement\n * this interface, so you can just re-use it.\n *\n * Current scene is a special case of a `string` state,\n * Most of the time you can just store it the same way\n * as normal state, prefixing with something like `$current_state_`\n * (scene name can't start with `$`).\n * Alternatively, you can store them as simple strings\n */\nexport interface IStateStorage {\n /**\n * Load state from some external storage.\n * Should be used either to load session content from file/network/etc\n * to memory, or to open required connections to fetch session content later\n *\n * This method may be called multiple times and should handle that.\n */\n load?(): MaybeAsync<void>\n /**\n * Save state to some external storage.\n * Should be used to commit pending changes in the session.\n * For example, saving session content to file/network/etc,\n * or committing a database transaction\n */\n save?(): MaybeAsync<void>\n /**\n * Cleanup storage and release all used resources.\n *\n * This method may be called multiple times and should handle that.\n */\n destroy?(): MaybeAsync<void>\n\n /**\n * Retrieve state from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n getState(key: string): MaybeAsync<unknown>\n\n /**\n * Save state to the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n * @param state Object representing the state\n * @param ttl TTL for the state, in seconds\n */\n setState(key: string, state: unknown, ttl?: number): MaybeAsync<void>\n\n /**\n * Delete state from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n deleteState(key: string): MaybeAsync<void>\n\n /**\n * Retrieve the current scene UID from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n getCurrentScene(key: string): MaybeAsync<string | null>\n\n /**\n * Change current scene's UID from the storage\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n * @param scene New scene\n * @param ttl TTL for the scene, in seconds\n */\n setCurrentScene(key: string, scene: string, ttl?: number): MaybeAsync<void>\n\n /**\n * Delete current scene from the storage, effectively \"exiting\" to root.\n *\n * @param key Key of the state, as defined by {@link StateKeyDelegate}\n */\n deleteCurrentScene(key: string): MaybeAsync<void>\n\n /**\n * Get information about a rate limit.\n *\n * It is recommended that you use sliding window or leaky bucket\n * to implement rate limiting ([learn more](https://konghq.com/blog/how-to-design-a-scalable-rate-limiting-algorithm/)),\n *\n * @param key Key of the rate limit\n * @param limit Maximum number of requests in `window`\n * @param window Window size in seconds\n * @returns Tuple containing the number of remaining and\n * unix time in ms when the user can try again\n */\n getRateLimit(key: string, limit: number, window: number): MaybeAsync<[number, number]>\n\n /**\n * Reset a rate limit.\n *\n * @param key Key of the rate limit\n */\n resetRateLimit(key: string): MaybeAsync<void>\n}\n\nexport function isCompatibleStorage(storage: unknown): storage is IStateStorage {\n return (\n typeof storage === 'object' &&\n storage !== null &&\n 'getState' in storage &&\n 'setState' in storage &&\n 'deleteState' in storage &&\n 'getCurrentScene' in storage &&\n 'setCurrentScene' in storage &&\n 'deleteCurrentScene' in storage &&\n 'getRateLimit' in storage &&\n 'resetRateLimit' in storage\n )\n}\n"]}