@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.
- package/README.md +3 -3
- package/cjs/callback-data-builder.d.ts +1 -1
- package/cjs/callback-data-builder.js +5 -5
- package/cjs/callback-data-builder.js.map +1 -1
- package/cjs/context/base.d.ts +2 -1
- package/cjs/context/base.js.map +1 -1
- package/cjs/context/callback-query.d.ts +3 -2
- package/cjs/context/callback-query.js +3 -3
- package/cjs/context/callback-query.js.map +1 -1
- package/cjs/context/chat-join-request.d.ts +2 -1
- package/cjs/context/chat-join-request.js +2 -2
- package/cjs/context/chat-join-request.js.map +1 -1
- package/cjs/context/chosen-inline-result.d.ts +2 -1
- package/cjs/context/chosen-inline-result.js +3 -3
- package/cjs/context/chosen-inline-result.js.map +1 -1
- package/cjs/context/inline-query.d.ts +2 -1
- package/cjs/context/inline-query.js +2 -2
- package/cjs/context/inline-query.js.map +1 -1
- package/cjs/context/message.d.ts +4 -6
- package/cjs/context/message.js +3 -3
- package/cjs/context/message.js.map +1 -1
- package/cjs/context/parse.js.map +1 -1
- package/cjs/context/pre-checkout-query.d.ts +2 -1
- package/cjs/context/pre-checkout-query.js +2 -2
- package/cjs/context/pre-checkout-query.js.map +1 -1
- package/cjs/dispatcher.d.ts +15 -9
- package/cjs/dispatcher.js +41 -78
- package/cjs/dispatcher.js.map +1 -1
- package/cjs/filters/bots.d.ts +6 -6
- package/cjs/filters/bots.js +2 -2
- package/cjs/filters/bots.js.map +1 -1
- package/cjs/filters/chat.d.ts +1 -1
- package/cjs/filters/chat.js +1 -1
- package/cjs/filters/chat.js.map +1 -1
- package/cjs/filters/group.d.ts +1 -1
- package/cjs/filters/group.js.map +1 -1
- package/cjs/filters/logic.js.map +1 -1
- package/cjs/filters/message.d.ts +75 -67
- package/cjs/filters/message.js +3 -3
- package/cjs/filters/message.js.map +1 -1
- package/cjs/filters/state.d.ts +2 -2
- package/cjs/filters/state.js.map +1 -1
- package/cjs/filters/text.d.ts +1 -1
- package/cjs/filters/text.js.map +1 -1
- package/cjs/filters/types.d.ts +2 -2
- package/cjs/filters/types.js.map +1 -1
- package/cjs/filters/updates.d.ts +1 -1
- package/cjs/filters/updates.js.map +1 -1
- package/cjs/filters/user.d.ts +1 -1
- package/cjs/filters/user.js +4 -4
- package/cjs/filters/user.js.map +1 -1
- package/cjs/handler.d.ts +4 -3
- package/cjs/handler.js.map +1 -1
- package/cjs/propagation.js +1 -1
- package/cjs/propagation.js.map +1 -1
- package/cjs/state/index.d.ts +3 -1
- package/cjs/state/index.js +3 -1
- package/cjs/state/index.js.map +1 -1
- package/cjs/state/key.d.ts +2 -2
- package/cjs/state/key.js +2 -2
- package/cjs/state/key.js.map +1 -1
- package/cjs/state/provider.d.ts +5 -0
- package/cjs/state/provider.js +3 -0
- package/cjs/state/provider.js.map +1 -0
- package/cjs/state/providers/index.d.ts +2 -0
- package/cjs/state/providers/index.js +19 -0
- package/cjs/state/providers/index.js.map +1 -0
- package/cjs/state/providers/memory.d.ts +29 -0
- package/cjs/state/providers/memory.js +76 -0
- package/cjs/state/providers/memory.js.map +1 -0
- package/cjs/state/providers/sqlite.d.ts +29 -0
- package/cjs/state/providers/sqlite.js +89 -0
- package/cjs/state/providers/sqlite.js.map +1 -0
- package/cjs/state/repository.d.ts +62 -0
- package/cjs/state/repository.js +3 -0
- package/cjs/state/repository.js.map +1 -0
- package/cjs/state/service.d.ts +19 -0
- package/cjs/state/service.js +68 -0
- package/cjs/state/service.js.map +1 -0
- package/cjs/state/update-state.d.ts +3 -3
- package/cjs/state/update-state.js +7 -7
- package/cjs/state/update-state.js.map +1 -1
- package/cjs/wizard.d.ts +2 -2
- package/cjs/wizard.js +1 -1
- package/cjs/wizard.js.map +1 -1
- package/esm/callback-data-builder.d.ts +1 -1
- package/esm/callback-data-builder.js +1 -1
- package/esm/callback-data-builder.js.map +1 -1
- package/esm/context/base.d.ts +2 -1
- package/esm/context/base.js.map +1 -1
- package/esm/context/callback-query.d.ts +3 -2
- package/esm/context/callback-query.js +1 -1
- package/esm/context/callback-query.js.map +1 -1
- package/esm/context/chat-join-request.d.ts +2 -1
- package/esm/context/chat-join-request.js +1 -1
- package/esm/context/chat-join-request.js.map +1 -1
- package/esm/context/chosen-inline-result.d.ts +2 -1
- package/esm/context/chosen-inline-result.js +1 -1
- package/esm/context/chosen-inline-result.js.map +1 -1
- package/esm/context/inline-query.d.ts +2 -1
- package/esm/context/inline-query.js +1 -1
- package/esm/context/inline-query.js.map +1 -1
- package/esm/context/message.d.ts +4 -6
- package/esm/context/message.js +1 -1
- package/esm/context/message.js.map +1 -1
- package/esm/context/parse.js.map +1 -1
- package/esm/context/pre-checkout-query.d.ts +2 -1
- package/esm/context/pre-checkout-query.js +1 -1
- package/esm/context/pre-checkout-query.js.map +1 -1
- package/esm/dispatcher.d.ts +15 -9
- package/esm/dispatcher.js +29 -66
- package/esm/dispatcher.js.map +1 -1
- package/esm/filters/bots.d.ts +6 -6
- package/esm/filters/bots.js +2 -2
- package/esm/filters/bots.js.map +1 -1
- package/esm/filters/chat.d.ts +2 -2
- package/esm/filters/chat.js +1 -1
- package/esm/filters/chat.js.map +1 -1
- package/esm/filters/group.d.ts +1 -1
- package/esm/filters/group.js.map +1 -1
- package/esm/filters/logic.js.map +1 -1
- package/esm/filters/message.d.ts +77 -69
- package/esm/filters/message.js +1 -1
- package/esm/filters/message.js.map +1 -1
- package/esm/filters/state.d.ts +2 -2
- package/esm/filters/state.js.map +1 -1
- package/esm/filters/text.d.ts +1 -1
- package/esm/filters/text.js.map +1 -1
- package/esm/filters/types.d.ts +2 -2
- package/esm/filters/types.js.map +1 -1
- package/esm/filters/updates.d.ts +1 -1
- package/esm/filters/updates.js.map +1 -1
- package/esm/filters/user.d.ts +1 -1
- package/esm/filters/user.js +3 -3
- package/esm/filters/user.js.map +1 -1
- package/esm/handler.d.ts +4 -3
- package/esm/handler.js.map +1 -1
- package/esm/propagation.js +1 -1
- package/esm/propagation.js.map +1 -1
- package/esm/state/index.d.ts +3 -1
- package/esm/state/index.js +3 -1
- package/esm/state/index.js.map +1 -1
- package/esm/state/key.d.ts +2 -2
- package/esm/state/key.js +1 -1
- package/esm/state/key.js.map +1 -1
- package/esm/state/provider.d.ts +5 -0
- package/esm/state/provider.js +2 -0
- package/esm/state/provider.js.map +1 -0
- package/esm/state/providers/index.d.ts +2 -0
- package/esm/state/providers/index.js +3 -0
- package/esm/state/providers/index.js.map +1 -0
- package/esm/state/providers/memory.d.ts +29 -0
- package/esm/state/providers/memory.js +72 -0
- package/esm/state/providers/memory.js.map +1 -0
- package/esm/state/providers/sqlite.d.ts +29 -0
- package/esm/state/providers/sqlite.js +85 -0
- package/esm/state/providers/sqlite.js.map +1 -0
- package/esm/state/repository.d.ts +62 -0
- package/esm/state/repository.js +2 -0
- package/esm/state/repository.js.map +1 -0
- package/esm/state/service.d.ts +19 -0
- package/esm/state/service.js +64 -0
- package/esm/state/service.js.map +1 -0
- package/esm/state/update-state.d.ts +3 -3
- package/esm/state/update-state.js +2 -2
- package/esm/state/update-state.js.map +1 -1
- package/esm/wizard.d.ts +2 -2
- package/esm/wizard.js +1 -1
- package/esm/wizard.js.map +1 -1
- package/package.json +11 -3
- package/cjs/callback-data-builder.test.d.ts +0 -1
- package/cjs/callback-data-builder.test.js +0 -74
- package/cjs/callback-data-builder.test.js.map +0 -1
- package/cjs/filters/bots.test.d.ts +0 -1
- package/cjs/filters/bots.test.js +0 -120
- package/cjs/filters/bots.test.js.map +0 -1
- package/cjs/filters/logic.test.d.ts +0 -1
- package/cjs/filters/logic.test.js +0 -169
- package/cjs/filters/logic.test.js.map +0 -1
- package/cjs/state/storage.d.ts +0 -96
- package/cjs/state/storage.js +0 -17
- package/cjs/state/storage.js.map +0 -1
- package/esm/callback-data-builder.test.d.ts +0 -1
- package/esm/callback-data-builder.test.js +0 -72
- package/esm/callback-data-builder.test.js.map +0 -1
- package/esm/filters/bots.test.d.ts +0 -1
- package/esm/filters/bots.test.js +0 -118
- package/esm/filters/bots.test.js.map +0 -1
- package/esm/filters/logic.test.d.ts +0 -1
- package/esm/filters/logic.test.js +0 -167
- package/esm/filters/logic.test.js.map +0 -1
- package/esm/state/storage.d.ts +0 -96
- package/esm/state/storage.js +0 -13
- 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"]}
|
package/cjs/state/storage.d.ts
DELETED
|
@@ -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;
|
package/cjs/state/storage.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.isCompatibleStorage = void 0;
|
|
4
|
-
function isCompatibleStorage(storage) {
|
|
5
|
-
return (typeof storage === 'object' &&
|
|
6
|
-
storage !== null &&
|
|
7
|
-
'getState' in storage &&
|
|
8
|
-
'setState' in storage &&
|
|
9
|
-
'deleteState' in storage &&
|
|
10
|
-
'getCurrentScene' in storage &&
|
|
11
|
-
'setCurrentScene' in storage &&
|
|
12
|
-
'deleteCurrentScene' in storage &&
|
|
13
|
-
'getRateLimit' in storage &&
|
|
14
|
-
'resetRateLimit' in storage);
|
|
15
|
-
}
|
|
16
|
-
exports.isCompatibleStorage = isCompatibleStorage;
|
|
17
|
-
//# sourceMappingURL=storage.js.map
|
package/cjs/state/storage.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../src/state/storage.ts"],"names":[],"mappings":";;;AA4GA,SAAgB,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;AAbD,kDAaC","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"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { CallbackQuery, MtArgumentError, PeersIndex } from '@mtcute/client';
|
|
3
|
-
import { utf8EncodeToBuffer } from '@mtcute/client/utils.js';
|
|
4
|
-
import { createStub } from '@mtcute/test';
|
|
5
|
-
import { CallbackDataBuilder } from './callback-data-builder.js';
|
|
6
|
-
describe('CallbackDataBuilder', () => {
|
|
7
|
-
it('should correctly build data', () => {
|
|
8
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
9
|
-
expect(cdb.build({ foo: 'foo', bar: 'bar' })).toEqual('prefix:foo:bar');
|
|
10
|
-
});
|
|
11
|
-
it('should correctly throw on invalid data when building', () => {
|
|
12
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
13
|
-
expect(() => cdb.build({ foo: 'foo:1', bar: 'bar' })).toThrow(MtArgumentError);
|
|
14
|
-
});
|
|
15
|
-
it('should correctly throw on too long data when building', () => {
|
|
16
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
17
|
-
expect(() => cdb.build({
|
|
18
|
-
foo: 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo',
|
|
19
|
-
bar: 'bar',
|
|
20
|
-
})).toThrow(MtArgumentError);
|
|
21
|
-
});
|
|
22
|
-
it('should correctly parse data', () => {
|
|
23
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
24
|
-
expect(cdb.parse('prefix:foo:bar')).toEqual({ foo: 'foo', bar: 'bar' });
|
|
25
|
-
});
|
|
26
|
-
it('should throw on invalid prefix when parsing', () => {
|
|
27
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
28
|
-
expect(() => cdb.parse('123:foo:bar')).toThrow(MtArgumentError);
|
|
29
|
-
});
|
|
30
|
-
it('should throw on invalid parts count when parsing', () => {
|
|
31
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
32
|
-
expect(() => cdb.parse('prefix:foo:bar:baz')).toThrow(MtArgumentError);
|
|
33
|
-
});
|
|
34
|
-
describe('filter', () => {
|
|
35
|
-
const createCb = (data) => new CallbackQuery(createStub('updateBotCallbackQuery', {
|
|
36
|
-
data: utf8EncodeToBuffer(data),
|
|
37
|
-
}), new PeersIndex());
|
|
38
|
-
const getFilterMatch = (filter, data) => {
|
|
39
|
-
const cb = createCb(data);
|
|
40
|
-
const matched = filter(cb);
|
|
41
|
-
if (!matched)
|
|
42
|
-
return null;
|
|
43
|
-
// eslint-disable-next-line
|
|
44
|
-
return cb.match;
|
|
45
|
-
};
|
|
46
|
-
it('should create a filter without params', () => {
|
|
47
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
48
|
-
expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar')).toEqual({
|
|
49
|
-
foo: 'foo',
|
|
50
|
-
bar: 'bar',
|
|
51
|
-
});
|
|
52
|
-
expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar:baz')).toEqual(null);
|
|
53
|
-
});
|
|
54
|
-
it('should create a filter with params', () => {
|
|
55
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
56
|
-
expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:foo:bar')).toEqual({
|
|
57
|
-
foo: 'foo',
|
|
58
|
-
bar: 'bar',
|
|
59
|
-
});
|
|
60
|
-
expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:bar:bar')).toEqual(null);
|
|
61
|
-
});
|
|
62
|
-
it('should create a filter with regex params', () => {
|
|
63
|
-
const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar');
|
|
64
|
-
expect(getFilterMatch(cdb.filter({ foo: /\d+/ }), 'prefix:123:bar')).toEqual({
|
|
65
|
-
foo: '123',
|
|
66
|
-
bar: 'bar',
|
|
67
|
-
});
|
|
68
|
-
expect(getFilterMatch(cdb.filter({ foo: /\d+/ }), 'prefix:bar:bar')).toEqual(null);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
});
|
|
72
|
-
//# sourceMappingURL=callback-data-builder.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"callback-data-builder.test.js","sourceRoot":"","sources":["../../src/callback-data-builder.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { CallbackQuery, MtArgumentError, PeersIndex } from '@mtcute/client'\nimport { utf8EncodeToBuffer } from '@mtcute/client/utils.js'\nimport { createStub } from '@mtcute/test'\n\nimport { CallbackDataBuilder } from './callback-data-builder.js'\nimport { UpdateFilter } from './filters/index.js'\n\ndescribe('CallbackDataBuilder', () => {\n it('should correctly build data', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(cdb.build({ foo: 'foo', bar: 'bar' })).toEqual('prefix:foo:bar')\n })\n\n it('should correctly throw on invalid data when building', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.build({ foo: 'foo:1', bar: 'bar' })).toThrow(MtArgumentError)\n })\n\n it('should correctly throw on too long data when building', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() =>\n cdb.build({\n foo: 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo',\n bar: 'bar',\n }),\n ).toThrow(MtArgumentError)\n })\n\n it('should correctly parse data', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(cdb.parse('prefix:foo:bar')).toEqual({ foo: 'foo', bar: 'bar' })\n })\n\n it('should throw on invalid prefix when parsing', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.parse('123:foo:bar')).toThrow(MtArgumentError)\n })\n\n it('should throw on invalid parts count when parsing', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(() => cdb.parse('prefix:foo:bar:baz')).toThrow(MtArgumentError)\n })\n\n describe('filter', () => {\n const createCb = (data: string) =>\n new CallbackQuery(\n createStub('updateBotCallbackQuery', {\n data: utf8EncodeToBuffer(data),\n }),\n new PeersIndex(),\n )\n\n const getFilterMatch = (filter: UpdateFilter<CallbackQuery>, data: string) => {\n const cb = createCb(data)\n\n const matched = filter(cb)\n if (!matched) return null\n\n // eslint-disable-next-line\n return (cb as any).match\n }\n\n it('should create a filter without params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar')).toEqual({\n foo: 'foo',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter(), 'prefix:foo:bar:baz')).toEqual(null)\n })\n\n it('should create a filter with params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:foo:bar')).toEqual({\n foo: 'foo',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter({ foo: 'foo' }), 'prefix:bar:bar')).toEqual(null)\n })\n\n it('should create a filter with regex params', () => {\n const cdb = new CallbackDataBuilder('prefix', 'foo', 'bar')\n\n expect(getFilterMatch(cdb.filter({ foo: /\\d+/ }), 'prefix:123:bar')).toEqual({\n foo: '123',\n bar: 'bar',\n })\n expect(getFilterMatch(cdb.filter({ foo: /\\d+/ }), 'prefix:bar:bar')).toEqual(null)\n })\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
package/esm/filters/bots.test.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { Message, PeersIndex } from '@mtcute/client';
|
|
3
|
-
import { createStub, StubTelegramClient } from '@mtcute/test';
|
|
4
|
-
import { MessageContext } from '../index.js';
|
|
5
|
-
import { command, deeplink } from './bots.js';
|
|
6
|
-
const peers = new PeersIndex();
|
|
7
|
-
peers.users.set(1, createStub('user', { id: 1 }));
|
|
8
|
-
peers.chats.set(1, createStub('channel', { id: 1 }));
|
|
9
|
-
const createMessageContext = (partial) => new MessageContext(StubTelegramClient.full(), // eslint-disable-line
|
|
10
|
-
new Message(createStub('message', partial), peers, false));
|
|
11
|
-
describe('filters.command', () => {
|
|
12
|
-
const getParsedCommand = (text, ...params) => {
|
|
13
|
-
const ctx = createMessageContext({
|
|
14
|
-
message: text,
|
|
15
|
-
});
|
|
16
|
-
ctx.client.getAuthState = () => ({
|
|
17
|
-
isBot: true,
|
|
18
|
-
userId: 0,
|
|
19
|
-
selfUsername: 'testbot',
|
|
20
|
-
});
|
|
21
|
-
// eslint-disable-next-line
|
|
22
|
-
if (command(...params)(ctx))
|
|
23
|
-
return ctx.command;
|
|
24
|
-
return null;
|
|
25
|
-
};
|
|
26
|
-
it('should only parse given commands', () => {
|
|
27
|
-
expect(getParsedCommand('/start', 'start')).toEqual(['start']);
|
|
28
|
-
expect(getParsedCommand('/start', 'stop')).toEqual(null);
|
|
29
|
-
expect(getParsedCommand('/start', ['start', 'stop'])).toEqual(['start']);
|
|
30
|
-
});
|
|
31
|
-
it('should only parse commands to the current bot', () => {
|
|
32
|
-
expect(getParsedCommand('/start@testbot', 'start')).toEqual(['start']);
|
|
33
|
-
expect(getParsedCommand('/start@otherbot', 'start')).toEqual(null);
|
|
34
|
-
});
|
|
35
|
-
it('should parse command arguments', () => {
|
|
36
|
-
expect(getParsedCommand('/start foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
|
|
37
|
-
expect(getParsedCommand('/start@testbot foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz']);
|
|
38
|
-
});
|
|
39
|
-
it('should parse quoted command arguments', () => {
|
|
40
|
-
expect(getParsedCommand('/start foo "bar baz"', 'start')).toEqual(['start', 'foo', 'bar baz']);
|
|
41
|
-
expect(getParsedCommand('/start foo "bar \\" baz"', 'start')).toEqual(['start', 'foo', 'bar " baz']);
|
|
42
|
-
expect(getParsedCommand('/start foo "bar \\\\" baz"', 'start')).toEqual(['start', 'foo', 'bar \\" baz']);
|
|
43
|
-
});
|
|
44
|
-
it('should parse custom prefixes', () => {
|
|
45
|
-
expect(getParsedCommand('!start foo "bar baz"', 'start', { prefixes: '!' })).toEqual([
|
|
46
|
-
'start',
|
|
47
|
-
'foo',
|
|
48
|
-
'bar baz',
|
|
49
|
-
]);
|
|
50
|
-
});
|
|
51
|
-
it('should be case insensitive by default', () => {
|
|
52
|
-
expect(getParsedCommand('/START foo', 'start')).toEqual(['start', 'foo']);
|
|
53
|
-
expect(getParsedCommand('/START foo BAR', 'start')).toEqual(['start', 'foo', 'BAR']);
|
|
54
|
-
});
|
|
55
|
-
it('should be case sensitive if asked', () => {
|
|
56
|
-
expect(getParsedCommand('/START foo', 'start', { caseSensitive: true })).toEqual(null);
|
|
57
|
-
expect(getParsedCommand('/START foo', 'START', { caseSensitive: true })).toEqual(['START', 'foo']);
|
|
58
|
-
});
|
|
59
|
-
it('should accept multiple commands to match', () => {
|
|
60
|
-
expect(getParsedCommand('/foo', ['foo', 'bar'])).toEqual(['foo']);
|
|
61
|
-
expect(getParsedCommand('/bar', ['foo', 'bar'])).toEqual(['bar']);
|
|
62
|
-
expect(getParsedCommand('/baz', ['foo', 'bar'])).toEqual(null);
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
describe('filters.deeplink', () => {
|
|
66
|
-
it('should only match given param', () => {
|
|
67
|
-
const ctx = createMessageContext({
|
|
68
|
-
message: '/start foo',
|
|
69
|
-
peerId: { _: 'peerUser', userId: 1 },
|
|
70
|
-
});
|
|
71
|
-
expect(deeplink('bar')(ctx)).toEqual(false);
|
|
72
|
-
expect(deeplink('foo')(ctx)).toEqual(true);
|
|
73
|
-
// eslint-disable-next-line
|
|
74
|
-
expect(ctx.command).toEqual(['start', 'foo']);
|
|
75
|
-
});
|
|
76
|
-
it('should add regex matches', () => {
|
|
77
|
-
const ctx = createMessageContext({
|
|
78
|
-
message: '/start foo_123',
|
|
79
|
-
peerId: { _: 'peerUser', userId: 1 },
|
|
80
|
-
});
|
|
81
|
-
expect(deeplink(/^foo_(\d+)$/)(ctx)).toEqual(true);
|
|
82
|
-
// eslint-disable-next-line
|
|
83
|
-
expect(ctx.command).toEqual(['start', 'foo_123', '123']);
|
|
84
|
-
});
|
|
85
|
-
it('should accept multiple params', () => {
|
|
86
|
-
const ctx = createMessageContext({
|
|
87
|
-
message: '/start foo',
|
|
88
|
-
peerId: { _: 'peerUser', userId: 1 },
|
|
89
|
-
});
|
|
90
|
-
expect(deeplink(['foo', 'bar'])(ctx)).toEqual(true);
|
|
91
|
-
// eslint-disable-next-line
|
|
92
|
-
expect(ctx.command).toEqual(['start', 'foo']);
|
|
93
|
-
});
|
|
94
|
-
it('should accept multiple regex params', () => {
|
|
95
|
-
const ctx = createMessageContext({
|
|
96
|
-
message: '/start foo',
|
|
97
|
-
peerId: { _: 'peerUser', userId: 1 },
|
|
98
|
-
});
|
|
99
|
-
expect(deeplink([/foo/, /bar/])(ctx)).toEqual(true);
|
|
100
|
-
// eslint-disable-next-line
|
|
101
|
-
expect(ctx.command).toEqual(['start', 'foo']);
|
|
102
|
-
});
|
|
103
|
-
it('should fail for >1 arguments', () => {
|
|
104
|
-
const ctx = createMessageContext({
|
|
105
|
-
message: '/start foo bar',
|
|
106
|
-
peerId: { _: 'peerUser', userId: 1 },
|
|
107
|
-
});
|
|
108
|
-
expect(deeplink('foo')(ctx)).toEqual(false);
|
|
109
|
-
});
|
|
110
|
-
it('should fail for non-pm messages', () => {
|
|
111
|
-
const ctx = createMessageContext({
|
|
112
|
-
message: '/start foo',
|
|
113
|
-
peerId: { _: 'peerChannel', channelId: 1 },
|
|
114
|
-
});
|
|
115
|
-
expect(deeplink('foo')(ctx)).toEqual(false);
|
|
116
|
-
});
|
|
117
|
-
});
|
|
118
|
-
//# sourceMappingURL=bots.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bots.test.js","sourceRoot":"","sources":["../../../src/filters/bots.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { Message, PeersIndex, tl } from '@mtcute/client'\nimport { createStub, StubTelegramClient } from '@mtcute/test'\n\nimport { MessageContext } from '../index.js'\nimport { command, deeplink } from './bots.js'\n\nconst peers = new PeersIndex()\npeers.users.set(1, createStub('user', { id: 1 }))\npeers.chats.set(1, createStub('channel', { id: 1 }))\nconst createMessageContext = (partial: Partial<tl.RawMessage>) =>\n new MessageContext(\n StubTelegramClient.full(), // eslint-disable-line\n new Message(createStub('message', partial), peers, false),\n )\n\ndescribe('filters.command', () => {\n const getParsedCommand = (text: string, ...params: Parameters<typeof command>) => {\n const ctx = createMessageContext({\n message: text,\n })\n ctx.client.getAuthState = () => ({\n isBot: true,\n userId: 0,\n selfUsername: 'testbot',\n })\n\n // eslint-disable-next-line\n if (command(...params)(ctx)) return (ctx as any).command\n\n return null\n }\n\n it('should only parse given commands', () => {\n expect(getParsedCommand('/start', 'start')).toEqual(['start'])\n expect(getParsedCommand('/start', 'stop')).toEqual(null)\n expect(getParsedCommand('/start', ['start', 'stop'])).toEqual(['start'])\n })\n\n it('should only parse commands to the current bot', () => {\n expect(getParsedCommand('/start@testbot', 'start')).toEqual(['start'])\n expect(getParsedCommand('/start@otherbot', 'start')).toEqual(null)\n })\n\n it('should parse command arguments', () => {\n expect(getParsedCommand('/start foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz'])\n expect(getParsedCommand('/start@testbot foo bar baz', 'start')).toEqual(['start', 'foo', 'bar', 'baz'])\n })\n\n it('should parse quoted command arguments', () => {\n expect(getParsedCommand('/start foo \"bar baz\"', 'start')).toEqual(['start', 'foo', 'bar baz'])\n expect(getParsedCommand('/start foo \"bar \\\\\" baz\"', 'start')).toEqual(['start', 'foo', 'bar \" baz'])\n expect(getParsedCommand('/start foo \"bar \\\\\\\\\" baz\"', 'start')).toEqual(['start', 'foo', 'bar \\\\\" baz'])\n })\n\n it('should parse custom prefixes', () => {\n expect(getParsedCommand('!start foo \"bar baz\"', 'start', { prefixes: '!' })).toEqual([\n 'start',\n 'foo',\n 'bar baz',\n ])\n })\n\n it('should be case insensitive by default', () => {\n expect(getParsedCommand('/START foo', 'start')).toEqual(['start', 'foo'])\n expect(getParsedCommand('/START foo BAR', 'start')).toEqual(['start', 'foo', 'BAR'])\n })\n\n it('should be case sensitive if asked', () => {\n expect(getParsedCommand('/START foo', 'start', { caseSensitive: true })).toEqual(null)\n expect(getParsedCommand('/START foo', 'START', { caseSensitive: true })).toEqual(['START', 'foo'])\n })\n\n it('should accept multiple commands to match', () => {\n expect(getParsedCommand('/foo', ['foo', 'bar'])).toEqual(['foo'])\n expect(getParsedCommand('/bar', ['foo', 'bar'])).toEqual(['bar'])\n expect(getParsedCommand('/baz', ['foo', 'bar'])).toEqual(null)\n })\n})\n\ndescribe('filters.deeplink', () => {\n it('should only match given param', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink('bar')(ctx)).toEqual(false)\n expect(deeplink('foo')(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should add regex matches', () => {\n const ctx = createMessageContext({\n message: '/start foo_123',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink(/^foo_(\\d+)$/)(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo_123', '123'])\n })\n\n it('should accept multiple params', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink(['foo', 'bar'])(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should accept multiple regex params', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink([/foo/, /bar/])(ctx)).toEqual(true)\n // eslint-disable-next-line\n expect((ctx as any).command).toEqual(['start', 'foo'])\n })\n\n it('should fail for >1 arguments', () => {\n const ctx = createMessageContext({\n message: '/start foo bar',\n peerId: { _: 'peerUser', userId: 1 },\n })\n\n expect(deeplink('foo')(ctx)).toEqual(false)\n })\n\n it('should fail for non-pm messages', () => {\n const ctx = createMessageContext({\n message: '/start foo',\n peerId: { _: 'peerChannel', channelId: 1 },\n })\n\n expect(deeplink('foo')(ctx)).toEqual(false)\n })\n})\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
import { and, not, or } from './logic.js';
|
|
3
|
-
describe('filters.not', () => {
|
|
4
|
-
it('should negate a given sync filter', () => {
|
|
5
|
-
const filter = vi.fn().mockReturnValue(true);
|
|
6
|
-
const negated = not(filter);
|
|
7
|
-
expect(negated(1)).toBe(false);
|
|
8
|
-
expect(filter).toHaveBeenCalledTimes(1);
|
|
9
|
-
expect(filter).toHaveBeenCalledWith(1, undefined);
|
|
10
|
-
});
|
|
11
|
-
it('should negate a given async filter', async () => {
|
|
12
|
-
const filter = vi.fn().mockResolvedValue(true);
|
|
13
|
-
const negated = not(filter);
|
|
14
|
-
await expect(negated(1)).resolves.toBe(false);
|
|
15
|
-
expect(filter).toHaveBeenCalledTimes(1);
|
|
16
|
-
expect(filter).toHaveBeenCalledWith(1, undefined);
|
|
17
|
-
});
|
|
18
|
-
});
|
|
19
|
-
describe('filters.and', () => {
|
|
20
|
-
it.each([
|
|
21
|
-
['sync', 'sync'],
|
|
22
|
-
['sync', 'async'],
|
|
23
|
-
['async', 'sync'],
|
|
24
|
-
['async', 'async'],
|
|
25
|
-
])('should combine %s and %s filters', async (aType, bType) => {
|
|
26
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
|
|
27
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
28
|
-
const combined = and(a, b);
|
|
29
|
-
expect(await combined(1)).toBe(true);
|
|
30
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
31
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
32
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
33
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
34
|
-
});
|
|
35
|
-
it.each([
|
|
36
|
-
['sync', 'sync'],
|
|
37
|
-
['sync', 'async'],
|
|
38
|
-
['async', 'sync'],
|
|
39
|
-
['async', 'async'],
|
|
40
|
-
])('should not continue execution after false (%s and %s filters)', async (aType, bType) => {
|
|
41
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
|
|
42
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
43
|
-
const combined = and(a, b);
|
|
44
|
-
expect(await combined(1)).toBe(false);
|
|
45
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
46
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
47
|
-
expect(b).not.toHaveBeenCalled();
|
|
48
|
-
});
|
|
49
|
-
it.each([
|
|
50
|
-
['sync', 'sync', 'sync'],
|
|
51
|
-
['sync', 'sync', 'async'],
|
|
52
|
-
['sync', 'async', 'sync'],
|
|
53
|
-
['sync', 'async', 'async'],
|
|
54
|
-
['async', 'sync', 'sync'],
|
|
55
|
-
['async', 'sync', 'async'],
|
|
56
|
-
['async', 'async', 'sync'],
|
|
57
|
-
['async', 'async', 'async'],
|
|
58
|
-
])('should combine %s, %s and %s filters', async (aType, bType) => {
|
|
59
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
|
|
60
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
61
|
-
const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
62
|
-
const combined = and(a, b, c);
|
|
63
|
-
expect(await combined(1)).toBe(true);
|
|
64
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
65
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
66
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
67
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
68
|
-
expect(c).toHaveBeenCalledTimes(1);
|
|
69
|
-
expect(c).toHaveBeenCalledWith(1, undefined);
|
|
70
|
-
});
|
|
71
|
-
it.each([
|
|
72
|
-
['sync', 'sync', 'sync'],
|
|
73
|
-
['sync', 'sync', 'async'],
|
|
74
|
-
['sync', 'async', 'sync'],
|
|
75
|
-
['sync', 'async', 'async'],
|
|
76
|
-
['async', 'sync', 'sync'],
|
|
77
|
-
['async', 'sync', 'async'],
|
|
78
|
-
['async', 'async', 'sync'],
|
|
79
|
-
['async', 'async', 'async'],
|
|
80
|
-
])('should not continue execution after false (%s, %s and %s filters)', async (aType, bType) => {
|
|
81
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? true : Promise.resolve(true));
|
|
82
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
|
|
83
|
-
const c = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
84
|
-
const combined = and(a, b, c);
|
|
85
|
-
expect(await combined(1)).toBe(false);
|
|
86
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
87
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
88
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
89
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
90
|
-
expect(c).not.toHaveBeenCalled();
|
|
91
|
-
});
|
|
92
|
-
});
|
|
93
|
-
describe('filters.or', () => {
|
|
94
|
-
it.each([
|
|
95
|
-
['sync', 'sync'],
|
|
96
|
-
['sync', 'async'],
|
|
97
|
-
['async', 'sync'],
|
|
98
|
-
['async', 'async'],
|
|
99
|
-
])('should combine %s and %s filters', async (aType, bType) => {
|
|
100
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
|
|
101
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
|
|
102
|
-
const combined = or(a, b);
|
|
103
|
-
expect(await combined(1)).toBe(false);
|
|
104
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
105
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
106
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
107
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
108
|
-
});
|
|
109
|
-
it.each([
|
|
110
|
-
['sync', 'sync'],
|
|
111
|
-
['sync', 'async'],
|
|
112
|
-
['async', 'sync'],
|
|
113
|
-
['async', 'async'],
|
|
114
|
-
])('should not continue execution after true (%s and %s filters)', async (aType, bType) => {
|
|
115
|
-
const a = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
116
|
-
const b = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
|
|
117
|
-
const combined = or(a, b);
|
|
118
|
-
expect(await combined(1)).toBe(true);
|
|
119
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
120
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
121
|
-
expect(b).not.toHaveBeenCalled();
|
|
122
|
-
});
|
|
123
|
-
it.each([
|
|
124
|
-
['sync', 'sync', 'sync'],
|
|
125
|
-
['sync', 'sync', 'async'],
|
|
126
|
-
['sync', 'async', 'sync'],
|
|
127
|
-
['sync', 'async', 'async'],
|
|
128
|
-
['async', 'sync', 'sync'],
|
|
129
|
-
['async', 'sync', 'async'],
|
|
130
|
-
['async', 'async', 'sync'],
|
|
131
|
-
['async', 'async', 'async'],
|
|
132
|
-
])('should combine %s, %s and %s filters', async (aType, bType) => {
|
|
133
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
|
|
134
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
|
|
135
|
-
const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
|
|
136
|
-
const combined = or(a, b, c);
|
|
137
|
-
expect(await combined(1)).toBe(false);
|
|
138
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
139
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
140
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
141
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
142
|
-
expect(c).toHaveBeenCalledTimes(1);
|
|
143
|
-
expect(c).toHaveBeenCalledWith(1, undefined);
|
|
144
|
-
});
|
|
145
|
-
it.each([
|
|
146
|
-
['sync', 'sync', 'sync'],
|
|
147
|
-
['sync', 'sync', 'async'],
|
|
148
|
-
['sync', 'async', 'sync'],
|
|
149
|
-
['sync', 'async', 'async'],
|
|
150
|
-
['async', 'sync', 'sync'],
|
|
151
|
-
['async', 'sync', 'async'],
|
|
152
|
-
['async', 'async', 'sync'],
|
|
153
|
-
['async', 'async', 'async'],
|
|
154
|
-
])('should not continue execution after true (%s, %s and %s filters)', async (aType, bType) => {
|
|
155
|
-
const a = vi.fn().mockReturnValue(aType === 'sync' ? false : Promise.resolve(false));
|
|
156
|
-
const b = vi.fn().mockReturnValue(bType === 'sync' ? true : Promise.resolve(true));
|
|
157
|
-
const c = vi.fn().mockReturnValue(bType === 'sync' ? false : Promise.resolve(false));
|
|
158
|
-
const combined = or(a, b, c);
|
|
159
|
-
expect(await combined(1)).toBe(true);
|
|
160
|
-
expect(a).toHaveBeenCalledTimes(1);
|
|
161
|
-
expect(a).toHaveBeenCalledWith(1, undefined);
|
|
162
|
-
expect(b).toHaveBeenCalledTimes(1);
|
|
163
|
-
expect(b).toHaveBeenCalledWith(1, undefined);
|
|
164
|
-
expect(c).not.toHaveBeenCalled();
|
|
165
|
-
});
|
|
166
|
-
});
|
|
167
|
-
//# sourceMappingURL=logic.test.js.map
|