@tma.js/sdk 1.4.1 → 1.4.2

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tma.js/sdk",
3
- "version": "1.4.1",
3
+ "version": "1.4.2",
4
4
  "description": "TypeScript Source Development Kit for Telegram Mini Apps client application.",
5
5
  "author": "Vladislav Kibenko <wolfram.deus@gmail.com>",
6
6
  "homepage": "https://github.com/Telegram-Mini-Apps/tma.js#readme",
@@ -0,0 +1,23 @@
1
+ import { it, expect } from 'vitest';
2
+
3
+ import { parseMessage } from '../parseMessage';
4
+
5
+ it('should parse value as JSON with properties { eventType: string; eventData?: unknown }', () => {
6
+ expect(parseMessage({ eventType: 1 })).toEqual({ eventType: '1' });
7
+ expect(parseMessage({ eventType: 'test' })).toEqual({ eventType: 'test' });
8
+ expect(parseMessage({ eventType: 'test', eventData: 123 })).toEqual({
9
+ eventType: 'test',
10
+ eventData: 123,
11
+ });
12
+
13
+ expect(parseMessage('{"eventType":1}')).toEqual({ eventType: '1' });
14
+ expect(parseMessage('{"eventType":"test"}')).toEqual({ eventType: 'test' });
15
+ expect(parseMessage('{"eventType":"test","eventData":123}')).toEqual({
16
+ eventType: 'test',
17
+ eventData: 123,
18
+ });
19
+ });
20
+
21
+ it('should throw if eventType property is missing', () => {
22
+ expect(() => parseMessage({})).toThrow();
23
+ });
@@ -1,12 +1,4 @@
1
- import { json, string } from '~/parsing/index.js';
2
-
3
- /**
4
- * Extracts event data from native application event.
5
- */
6
- const eventDataJson = json<{ eventType: string; eventData?: unknown }>({
7
- eventType: string(),
8
- eventData: (value) => value,
9
- });
1
+ import { parseMessage } from '~/bridge/parseMessage.js';
10
2
 
11
3
  /**
12
4
  * Emits event sent from Telegram native application like it was sent in
@@ -74,7 +66,7 @@ export function onTelegramEvent(cb: (eventType: string, eventData: unknown) => v
74
66
  // We expect Telegram to send us new event through "message" event.
75
67
  window.addEventListener('message', (event) => {
76
68
  try {
77
- const { eventType, eventData } = eventDataJson.parse(event.data);
69
+ const { eventType, eventData } = parseMessage(event.data);
78
70
  cb(eventType, eventData);
79
71
  } catch {
80
72
  // We ignore incorrect messages as they could be generated by any other code.
@@ -2,5 +2,6 @@ export * from './env/index.js';
2
2
  export * from './errors/index.js';
3
3
  export * from './events/index.js';
4
4
  export * from './methods/index.js';
5
- export * from './invoke-custom-method.js';
5
+ export * from './invokeCustomMethod.js';
6
+ export * from './parseMessage.js';
6
7
  export * from './request.js';
@@ -0,0 +1,28 @@
1
+ import { json, string } from '~/parsing/index.js';
2
+
3
+ /**
4
+ * Message format used in communication between client and Telegram applications.
5
+ */
6
+ export interface MiniAppsMessage {
7
+ /**
8
+ * Event name.
9
+ */
10
+ eventType: string;
11
+ /**
12
+ * Event parameters.
13
+ */
14
+ eventData?: unknown;
15
+ }
16
+
17
+ const parser = json<MiniAppsMessage>({
18
+ eventType: string(),
19
+ eventData: (value) => value,
20
+ });
21
+
22
+ /**
23
+ * Parses value as a message between client and Telegram applications.
24
+ * @param value - value to parse.
25
+ */
26
+ export function parseMessage(value: unknown): MiniAppsMessage {
27
+ return parser.parse(value);
28
+ }
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export {
10
10
  on,
11
11
  off,
12
12
  once,
13
+ parseMessage,
13
14
  postEvent,
14
15
  request,
15
16
  subscribe,