@tma.js/bridge 1.3.12 → 1.4.1

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 (56) hide show
  1. package/dist/dts/errors/MethodUnsupportedError.d.ts +8 -0
  2. package/dist/dts/errors/ParameterUnsupportedError.d.ts +8 -0
  3. package/dist/dts/errors/index.d.ts +2 -0
  4. package/dist/dts/events/events.d.ts +8 -3
  5. package/dist/dts/events/index.d.ts +2 -2
  6. package/dist/dts/events/parsers/clipboardTextReceived.d.ts +13 -0
  7. package/dist/dts/events/parsers/customMethodInvoked.d.ts +16 -0
  8. package/dist/dts/events/parsers/index.d.ts +9 -0
  9. package/dist/dts/events/parsers/invoiceClosed.d.ts +12 -0
  10. package/dist/dts/events/parsers/phoneRequested.d.ts +8 -0
  11. package/dist/dts/events/parsers/popupClosed.d.ts +8 -0
  12. package/dist/dts/events/parsers/qrTextReceived.d.ts +7 -0
  13. package/dist/dts/events/parsers/theme-changed.d.ts +42 -0
  14. package/dist/dts/events/parsers/viewportChanged.d.ts +19 -0
  15. package/dist/dts/events/parsers/writeAccessRequested.d.ts +8 -0
  16. package/dist/dts/index.d.ts +1 -0
  17. package/dist/dts/methods/createPostEvent.d.ts +10 -0
  18. package/dist/dts/methods/index.d.ts +5 -4
  19. package/dist/dts/methods/{params.d.ts → methods.d.ts} +30 -18
  20. package/dist/dts/methods/postEvent.d.ts +1 -1
  21. package/dist/dts/request.d.ts +10 -10
  22. package/dist/dts/supports.d.ts +2 -9
  23. package/dist/index.cjs +1 -1
  24. package/dist/index.cjs.map +1 -1
  25. package/dist/index.iife.js +1 -1
  26. package/dist/index.iife.js.map +1 -1
  27. package/dist/index.mjs +201 -153
  28. package/dist/index.mjs.map +1 -1
  29. package/package.json +2 -2
  30. package/src/errors/MethodUnsupportedError.ts +13 -0
  31. package/src/errors/ParameterUnsupportedError.ts +13 -0
  32. package/src/errors/index.ts +2 -0
  33. package/src/events/emitter.ts +20 -19
  34. package/src/events/events.ts +11 -6
  35. package/src/events/index.ts +2 -2
  36. package/src/events/parsers/clipboardTextReceived.ts +27 -0
  37. package/src/events/parsers/customMethodInvoked.ts +26 -0
  38. package/src/events/parsers/index.ts +9 -0
  39. package/src/events/parsers/invoiceClosed.ts +26 -0
  40. package/src/events/parsers/phoneRequested.ts +14 -0
  41. package/src/events/parsers/popupClosed.ts +19 -0
  42. package/src/events/parsers/qrTextReceived.ts +14 -0
  43. package/src/events/parsers/theme-changed.ts +58 -0
  44. package/src/events/parsers/viewportChanged.ts +33 -0
  45. package/src/events/parsers/writeAccessRequested.ts +14 -0
  46. package/src/index.ts +1 -0
  47. package/src/methods/createPostEvent.ts +39 -0
  48. package/src/methods/index.ts +5 -4
  49. package/src/methods/{params.ts → methods.ts} +33 -18
  50. package/src/methods/postEvent.ts +1 -1
  51. package/src/request.ts +27 -30
  52. package/src/supports.ts +19 -40
  53. package/dist/dts/events/parsing.d.ts +0 -38
  54. package/dist/dts/events/payloads.d.ts +0 -98
  55. package/src/events/parsing.ts +0 -104
  56. package/src/events/payloads.ts +0 -116
package/dist/index.mjs CHANGED
@@ -1,58 +1,85 @@
1
- import { isRecord as f, withTimeout as R, compareVersions as N } from "@tma.js/utils";
2
- import { Logger as J } from "@tma.js/logger";
3
- import { EventEmitter as S } from "@tma.js/event-emitter";
4
- import { rgb as T, number as q, createValueParserGenerator as G, json as s, boolean as x, string as i } from "@tma.js/parsing";
5
- let v = "https://web.telegram.org";
6
- const u = new J("[Bridge]", !1);
7
- function ue(e) {
1
+ import { compareVersions as J, isRecord as p, withTimeout as L } from "@tma.js/utils";
2
+ import { Logger as N } from "@tma.js/logger";
3
+ import { EventEmitter as T } from "@tma.js/event-emitter";
4
+ import { json as s, string as o, rgb as j, toRecord as I, number as q, boolean as v } from "@tma.js/parsing";
5
+ class b extends Error {
6
+ constructor(t, r) {
7
+ super(`Method "${t}" is unsupported in the Mini Apps version ${r}.`), Object.setPrototypeOf(this, b.prototype);
8
+ }
9
+ }
10
+ class h extends Error {
11
+ constructor(t, r, n) {
12
+ super(`Parameter "${r}" in method "${t}" is unsupported in the Mini Apps version ${n}.`), Object.setPrototypeOf(this, h.prototype);
13
+ }
14
+ }
15
+ function S() {
16
+ return s({
17
+ req_id: o(),
18
+ data: (e) => e === null ? e : o().optional().parse(e)
19
+ });
20
+ }
21
+ function G() {
22
+ return s({
23
+ req_id: o(),
24
+ result: (e) => e,
25
+ error: o().optional()
26
+ });
27
+ }
28
+ function H() {
29
+ return s({
30
+ slug: o(),
31
+ status: o()
32
+ });
33
+ }
34
+ function z() {
35
+ return s({ status: o() });
36
+ }
37
+ function B() {
38
+ return s({
39
+ button_id: (e) => e == null ? void 0 : o().parse(e)
40
+ });
41
+ }
42
+ function U() {
43
+ return s({
44
+ data: o().optional()
45
+ });
46
+ }
47
+ function F() {
48
+ return s({
49
+ theme_params: (e) => {
50
+ const t = j().optional();
51
+ return Object.entries(I(e)).reduce((r, [n, i]) => (r[n] = t.parse(i), r), {});
52
+ }
53
+ });
54
+ }
55
+ function K() {
56
+ return s({
57
+ height: q(),
58
+ width: (e) => e == null ? window.innerWidth : q().parse(e),
59
+ is_state_stable: v(),
60
+ is_expanded: v()
61
+ });
62
+ }
63
+ function Q() {
64
+ return s({ status: o() });
65
+ }
66
+ let P = "https://web.telegram.org";
67
+ const _ = new N("[Bridge]", !1);
68
+ function _e(e) {
8
69
  if (e) {
9
- u.enable();
70
+ _.enable();
10
71
  return;
11
72
  }
12
- u.disable();
73
+ _.disable();
13
74
  }
14
- function de(e) {
15
- v = e;
16
- }
17
- function I() {
18
- return v;
19
- }
20
- function L(e) {
21
- return e == null;
22
- }
23
- const _ = T().optional(), M = q(), H = G(
24
- (e) => e == null ? window.innerWidth : M.parse(e)
25
- ), $ = s({
26
- theme_params: s({
27
- bg_color: _,
28
- text_color: _,
29
- hint_color: _,
30
- link_color: _,
31
- button_color: _,
32
- button_text_color: _,
33
- secondary_bg_color: _
34
- })
35
- }), U = s({
36
- height: q(),
37
- width: H(),
38
- is_state_stable: x(),
39
- is_expanded: x()
40
- }), j = s({
41
- button_id: i({ isEmpty: L }).optional()
42
- }), z = s({
43
- data: i().optional()
44
- }), B = s({
45
- slug: i(),
46
- status: i()
47
- }), F = s({
48
- req_id: i(),
49
- data: (e) => e === null ? e : i().optional().parse(e)
50
- }), K = s({ status: i() }), Q = s({ status: i() }), X = s({
51
- req_id: i(),
52
- result: (e) => e,
53
- error: i().optional()
54
- }), Y = s({
55
- eventType: i(),
75
+ function ae(e) {
76
+ P = e;
77
+ }
78
+ function X() {
79
+ return P;
80
+ }
81
+ const Y = s({
82
+ eventType: o(),
56
83
  eventData: (e) => e
57
84
  });
58
85
  function Z(e, t) {
@@ -60,7 +87,7 @@ function Z(e, t) {
60
87
  data: JSON.stringify({ eventType: e, eventData: t })
61
88
  }));
62
89
  }
63
- function V() {
90
+ function D() {
64
91
  const e = window;
65
92
  "TelegramGameProxy_receiveEvent" in e || [
66
93
  ["TelegramGameProxy_receiveEvent"],
@@ -71,8 +98,8 @@ function V() {
71
98
  // Android and iOS.
72
99
  ].forEach((t) => {
73
100
  let r = e;
74
- t.forEach((n, o, c) => {
75
- if (o === c.length - 1) {
101
+ t.forEach((n, i, c) => {
102
+ if (i === c.length - 1) {
76
103
  r[n] = Z;
77
104
  return;
78
105
  }
@@ -80,8 +107,8 @@ function V() {
80
107
  });
81
108
  });
82
109
  }
83
- function D(e) {
84
- V(), window.addEventListener("message", (t) => {
110
+ function V(e) {
111
+ D(), window.addEventListener("message", (t) => {
85
112
  try {
86
113
  const { eventType: r, eventData: n } = Y.parse(t.data);
87
114
  e(r, n);
@@ -89,10 +116,10 @@ function D(e) {
89
116
  }
90
117
  });
91
118
  }
92
- const b = "__telegram-cached-emitter__";
119
+ const g = "__telegram-cached-emitter__";
93
120
  function O() {
94
- const e = new S(), t = (r, ...n) => {
95
- u.log("Emitting processed event:", r, ...n), e.emit(r, ...n);
121
+ const e = new T(), t = (r, ...n) => {
122
+ _.log("Emitting processed event:", r, ...n), e.emit(r, ...n);
96
123
  };
97
124
  return window.addEventListener("resize", () => {
98
125
  t("viewport_changed", {
@@ -101,169 +128,190 @@ function O() {
101
128
  is_state_stable: !0,
102
129
  is_expanded: !0
103
130
  });
104
- }), D((r, n) => {
105
- u.log("Received raw event:", r, n);
131
+ }), V((r, n) => {
132
+ _.log("Received raw event:", r, n);
106
133
  try {
107
134
  switch (r) {
108
135
  case "viewport_changed":
109
- return t(r, U.parse(n));
136
+ return t(r, K().parse(n));
110
137
  case "theme_changed":
111
- return t(r, $.parse(n));
138
+ return t(r, F().parse(n));
112
139
  case "popup_closed":
113
140
  return (
114
141
  // Sent on desktop.
115
- n == null ? t(r, {}) : t(r, j.parse(n))
142
+ n == null ? t(r, {}) : t(r, B().parse(n))
116
143
  );
117
144
  case "set_custom_style":
118
- return t(r, i().parse(n));
145
+ return t(r, o().parse(n));
119
146
  case "qr_text_received":
120
- return t(r, z.parse(n));
147
+ return t(r, U().parse(n));
121
148
  case "clipboard_text_received":
122
- return t(r, F.parse(n));
149
+ return t(r, S().parse(n));
123
150
  case "invoice_closed":
124
- return t(r, B.parse(n));
151
+ return t(r, H().parse(n));
125
152
  case "phone_requested":
126
- return t("phone_requested", Q.parse(n));
153
+ return t("phone_requested", z().parse(n));
127
154
  case "custom_method_invoked":
128
- return t("custom_method_invoked", X.parse(n));
155
+ return t("custom_method_invoked", G().parse(n));
129
156
  case "write_access_requested":
130
- return t("write_access_requested", K.parse(n));
157
+ return t("write_access_requested", Q().parse(n));
131
158
  case "main_button_pressed":
132
159
  case "back_button_pressed":
133
160
  case "settings_button_pressed":
134
161
  case "scan_qr_popup_closed":
162
+ case "reload_iframe":
135
163
  return t(r);
136
164
  default:
137
165
  return t(r, n);
138
166
  }
139
- } catch (o) {
140
- u.error("Error processing event:", o);
167
+ } catch (i) {
168
+ _.error("Error processing event:", i);
141
169
  }
142
170
  }), e;
143
171
  }
144
- function p() {
172
+ function d() {
145
173
  const e = window;
146
- return e[b] === void 0 && (e[b] = O()), e[b];
174
+ return e[g] === void 0 && (e[g] = O()), e[g];
147
175
  }
148
- function P(e, t) {
149
- p().off(e, t);
176
+ function A(e, t) {
177
+ d().off(e, t);
150
178
  }
151
179
  function ee(e, t) {
152
- return p().on(e, t), () => P(e, t);
180
+ return d().on(e, t), () => A(e, t);
153
181
  }
154
182
  function pe(e, t) {
155
- return p().once(e, t), () => P(e, t);
183
+ return d().once(e, t), () => A(e, t);
156
184
  }
157
185
  function te(e) {
158
- p().unsubscribe(e);
186
+ d().unsubscribe(e);
187
+ }
188
+ function de(e) {
189
+ return d().subscribe(e), () => te(e);
159
190
  }
160
- function le(e) {
161
- return p().subscribe(e), () => te(e);
191
+ function u(e, t) {
192
+ return J(e, t) <= 0;
193
+ }
194
+ function k(e, t, r) {
195
+ if (typeof r == "string") {
196
+ if (e === "web_app_open_link" && t === "try_instant_view")
197
+ return u("6.4", r);
198
+ if (e === "web_app_set_header_color" && t === "color")
199
+ return u("6.9", r);
200
+ }
201
+ switch (e) {
202
+ case "web_app_open_tg_link":
203
+ case "web_app_open_invoice":
204
+ case "web_app_setup_back_button":
205
+ case "web_app_set_background_color":
206
+ case "web_app_set_header_color":
207
+ case "web_app_trigger_haptic_feedback":
208
+ return u("6.1", t);
209
+ case "web_app_open_popup":
210
+ return u("6.2", t);
211
+ case "web_app_close_scan_qr_popup":
212
+ case "web_app_open_scan_qr_popup":
213
+ case "web_app_read_text_from_clipboard":
214
+ return u("6.4", t);
215
+ case "web_app_switch_inline_query":
216
+ return u("6.7", t);
217
+ case "web_app_invoke_custom_method":
218
+ case "web_app_request_write_access":
219
+ case "web_app_request_phone":
220
+ return u("6.9", t);
221
+ case "web_app_setup_settings_button":
222
+ return u("6.10", t);
223
+ default:
224
+ return !0;
225
+ }
226
+ }
227
+ function fe(e) {
228
+ return (t, r) => {
229
+ if (!k(t, e))
230
+ throw new b(t, e);
231
+ if (p(r)) {
232
+ let n;
233
+ if (t === "web_app_open_link" && "try_instant_view" in r ? n = "try_instant_view" : t === "web_app_set_header_color" && "color" in r && (n = "color"), n && !k(t, n, e))
234
+ throw new h(t, n, e);
235
+ }
236
+ return W(t, r);
237
+ };
162
238
  }
163
239
  function re(e) {
164
- return "external" in e && f(e.external) && "notify" in e.external && typeof e.external.notify == "function";
240
+ return "external" in e && p(e.external) && "notify" in e.external && typeof e.external.notify == "function";
165
241
  }
166
242
  function ne(e) {
167
- return "TelegramWebviewProxy" in e && f(e.TelegramWebviewProxy) && "postEvent" in e.TelegramWebviewProxy && typeof e.TelegramWebviewProxy.postEvent == "function";
243
+ return "TelegramWebviewProxy" in e && p(e.TelegramWebviewProxy) && "postEvent" in e.TelegramWebviewProxy && typeof e.TelegramWebviewProxy.postEvent == "function";
168
244
  }
169
- function oe() {
245
+ function ie() {
170
246
  try {
171
247
  return window.self !== window.top;
172
248
  } catch {
173
249
  return !0;
174
250
  }
175
251
  }
176
- function ie(e, t, r) {
177
- let n = {}, o;
178
- t === void 0 && r === void 0 ? n = {} : t !== void 0 && r !== void 0 ? (n = r, o = t) : t !== void 0 && ("targetOrigin" in t ? n = t : o = t);
179
- const { targetOrigin: c = I() } = n;
180
- if (u.log(`Calling method "${e}"`, o), oe()) {
252
+ function W(e, t, r) {
253
+ let n = {}, i;
254
+ t === void 0 && r === void 0 ? n = {} : t !== void 0 && r !== void 0 ? (n = r, i = t) : t !== void 0 && ("targetOrigin" in t ? n = t : i = t);
255
+ const { targetOrigin: c = X() } = n;
256
+ if (_.log(`Calling method "${e}"`, i), ie()) {
181
257
  window.parent.postMessage(JSON.stringify({
182
258
  eventType: e,
183
- eventData: o
259
+ eventData: i
184
260
  }), c);
185
261
  return;
186
262
  }
187
263
  if (re(window)) {
188
- window.external.notify(JSON.stringify({ eventType: e, eventData: o }));
264
+ window.external.notify(JSON.stringify({ eventType: e, eventData: i }));
189
265
  return;
190
266
  }
191
267
  if (ne(window)) {
192
- window.TelegramWebviewProxy.postEvent(e, JSON.stringify(o));
268
+ window.TelegramWebviewProxy.postEvent(e, JSON.stringify(i));
193
269
  return;
194
270
  }
195
271
  throw new Error(
196
272
  "Unable to determine current environment and possible way to send event."
197
273
  );
198
274
  }
199
- function fe(e, t, r, n) {
200
- let o, c, w, g;
201
- typeof t == "string" || Array.isArray(t) ? (w = Array.isArray(t) ? t : [t], o = r) : (c = t, w = Array.isArray(r) ? r : [r], o = n), f(c) && typeof c.req_id == "string" && (g = c.req_id);
202
- const { postEvent: k = ie, timeout: h } = o || {}, m = o && "capture" in o ? o.capture : null, y = new Promise((W, A) => {
203
- const C = w.map((d) => ee(d, (l) => {
204
- typeof g == "string" && (!f(l) || l.req_id !== g) || typeof m == "function" && !m(l) || (E(), W(l));
205
- })), E = () => C.forEach((d) => d());
275
+ function we(e, t, r, n) {
276
+ let i, c, w, l;
277
+ typeof t == "string" || Array.isArray(t) ? (w = Array.isArray(t) ? t : [t], i = r) : (c = t, w = Array.isArray(r) ? r : [r], i = n), p(c) && typeof c.req_id == "string" && (l = c.req_id);
278
+ const { postEvent: R = W, timeout: E } = i || {}, m = i && "capture" in i ? i.capture : null, y = new Promise(($, C) => {
279
+ const M = w.map((a) => ee(a, (f) => {
280
+ typeof l == "string" && (!p(f) || f.req_id !== l) || typeof m == "function" && !m(f) || (x(), $(f));
281
+ })), x = () => M.forEach((a) => a());
206
282
  try {
207
- k(e, c);
208
- } catch (d) {
209
- E(), A(d);
283
+ R(e, c);
284
+ } catch (a) {
285
+ x(), C(a);
210
286
  }
211
287
  });
212
- return typeof h == "number" ? R(y, h) : y;
213
- }
214
- function a(e, t) {
215
- return N(e, t) <= 0;
216
- }
217
- function we(e, t) {
218
- return e === "web_app_open_link" && "try_instant_view" in t ? ["try_instant_view"] : e === "web_app_set_header_color" && "color" in t ? ["color"] : [];
219
- }
220
- function ge(e, t, r) {
221
- if (typeof r == "string") {
222
- if (e === "web_app_open_link" && t === "try_instant_view")
223
- return a("6.4", r);
224
- if (e === "web_app_set_header_color" && t === "color")
225
- return a("6.9", r);
226
- }
227
- switch (e) {
228
- case "web_app_open_tg_link":
229
- case "web_app_open_invoice":
230
- case "web_app_setup_back_button":
231
- case "web_app_set_background_color":
232
- case "web_app_set_header_color":
233
- case "web_app_trigger_haptic_feedback":
234
- return a("6.1", t);
235
- case "web_app_open_popup":
236
- return a("6.2", t);
237
- case "web_app_close_scan_qr_popup":
238
- case "web_app_open_scan_qr_popup":
239
- case "web_app_read_text_from_clipboard":
240
- return a("6.4", t);
241
- case "web_app_switch_inline_query":
242
- return a("6.7", t);
243
- case "web_app_invoke_custom_method":
244
- case "web_app_request_write_access":
245
- case "web_app_request_phone":
246
- return a("6.9", t);
247
- case "web_app_setup_settings_button":
248
- return a("6.10", t);
249
- default:
250
- return !0;
251
- }
288
+ return typeof E == "number" ? L(y, E) : y;
252
289
  }
253
290
  export {
254
- we as detectSupportParams,
291
+ b as MethodUnsupportedError,
292
+ h as ParameterUnsupportedError,
293
+ S as clipboardTextReceived,
294
+ fe as createPostEvent,
295
+ G as customMethodInvoked,
255
296
  re as hasExternalNotify,
256
297
  ne as hasWebviewProxy,
257
- oe as isIframe,
258
- P as off,
298
+ H as invoiceClosed,
299
+ ie as isIframe,
300
+ A as off,
259
301
  ee as on,
260
302
  pe as once,
261
- ie as postEvent,
262
- fe as request,
263
- ue as setDebug,
264
- de as setTargetOrigin,
265
- le as subscribe,
266
- ge as supports,
267
- te as unsubscribe
303
+ z as phoneRequested,
304
+ B as popupClosed,
305
+ W as postEvent,
306
+ U as qrTextReceived,
307
+ we as request,
308
+ _e as setDebug,
309
+ ae as setTargetOrigin,
310
+ de as subscribe,
311
+ k as supports,
312
+ F as themeChanged,
313
+ te as unsubscribe,
314
+ K as viewportChanged,
315
+ Q as writeAccessRequested
268
316
  };
269
317
  //# sourceMappingURL=index.mjs.map