@tma.js/sdk 1.4.3 → 1.4.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/dts/bridge/events/events.d.ts +16 -16
- package/dist/dts/bridge/methods/methods.d.ts +27 -27
- package/dist/dts/bridge/methods/popup.d.ts +1 -1
- package/dist/dts/{init/css → css}/bindMiniAppCSSVars.d.ts +2 -2
- package/dist/dts/{init/css → css}/bindThemeCSSVars.d.ts +1 -1
- package/dist/dts/{init/css → css}/bindViewportCSSVars.d.ts +1 -1
- package/dist/dts/css/index.d.ts +4 -0
- package/dist/dts/index.d.ts +1 -0
- package/dist/dts/init-data/types.d.ts +3 -3
- package/dist/dts/launch-params/types.d.ts +1 -1
- package/dist/dts/theme-params/types.d.ts +1 -1
- package/dist/index.cjs +1 -2
- package/dist/index.iife.js +1 -2
- package/dist/index.mjs +126 -115
- package/package.json +2 -3
- package/dist/index.cjs.map +0 -1
- package/dist/index.iife.js.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/src/__tests__/globals.ts +0 -39
- package/src/back-button/BackButton.ts +0 -90
- package/src/back-button/__tests__/BackButton.ts +0 -129
- package/src/back-button/index.ts +0 -2
- package/src/back-button/types.ts +0 -14
- package/src/bridge/__tests__/parseMessage.ts +0 -23
- package/src/bridge/__tests__/request.ts +0 -236
- package/src/bridge/env/__tests__/hasExternalNotify.ts +0 -15
- package/src/bridge/env/__tests__/hasWebviewProxy.ts +0 -15
- package/src/bridge/env/__tests__/isIframe.ts +0 -30
- package/src/bridge/env/hasExternalNotify.ts +0 -19
- package/src/bridge/env/hasWebviewProxy.ts +0 -19
- package/src/bridge/env/index.ts +0 -3
- package/src/bridge/env/isIframe.ts +0 -11
- package/src/bridge/errors/MethodUnsupportedError.ts +0 -13
- package/src/bridge/errors/ParameterUnsupportedError.ts +0 -13
- package/src/bridge/errors/index.ts +0 -2
- package/src/bridge/events/__tests__/createEmitter.ts +0 -143
- package/src/bridge/events/__tests__/off.ts +0 -34
- package/src/bridge/events/__tests__/on.ts +0 -49
- package/src/bridge/events/__tests__/onTelegramEvent.ts +0 -49
- package/src/bridge/events/__tests__/once.ts +0 -64
- package/src/bridge/events/__tests__/singletonEmitter.ts +0 -22
- package/src/bridge/events/__tests__/subscribe.ts +0 -49
- package/src/bridge/events/__tests__/unsubscribe.ts +0 -34
- package/src/bridge/events/createEmitter.ts +0 -108
- package/src/bridge/events/events.ts +0 -170
- package/src/bridge/events/index.ts +0 -9
- package/src/bridge/events/off.ts +0 -14
- package/src/bridge/events/on.ts +0 -19
- package/src/bridge/events/onTelegramEvent.ts +0 -81
- package/src/bridge/events/once.ts +0 -18
- package/src/bridge/events/parsers/__tests__/clipboardTextReceived.ts +0 -21
- package/src/bridge/events/parsers/__tests__/invoiceClosed.ts +0 -12
- package/src/bridge/events/parsers/__tests__/popupClosed.ts +0 -10
- package/src/bridge/events/parsers/__tests__/qrTextReceived.ts +0 -9
- package/src/bridge/events/parsers/__tests__/theme-changed.ts +0 -42
- package/src/bridge/events/parsers/__tests__/viewportChanged.ts +0 -49
- package/src/bridge/events/parsers/clipboardTextReceived.ts +0 -26
- package/src/bridge/events/parsers/customMethodInvoked.ts +0 -25
- package/src/bridge/events/parsers/index.ts +0 -9
- package/src/bridge/events/parsers/invoiceClosed.ts +0 -26
- package/src/bridge/events/parsers/phoneRequested.ts +0 -14
- package/src/bridge/events/parsers/popupClosed.ts +0 -19
- package/src/bridge/events/parsers/qrTextReceived.ts +0 -14
- package/src/bridge/events/parsers/theme-changed.ts +0 -58
- package/src/bridge/events/parsers/viewportChanged.ts +0 -33
- package/src/bridge/events/parsers/writeAccessRequested.ts +0 -14
- package/src/bridge/events/singletonEmitter.ts +0 -19
- package/src/bridge/events/subscribe.ts +0 -15
- package/src/bridge/events/unsubscribe.ts +0 -10
- package/src/bridge/index.ts +0 -7
- package/src/bridge/invokeCustomMethod.ts +0 -56
- package/src/bridge/methods/__tests__/createPostEvent.ts +0 -37
- package/src/bridge/methods/__tests__/postEvent.ts +0 -137
- package/src/bridge/methods/createPostEvent.ts +0 -40
- package/src/bridge/methods/custom-methods.ts +0 -68
- package/src/bridge/methods/haptic.ts +0 -52
- package/src/bridge/methods/index.ts +0 -6
- package/src/bridge/methods/methods.ts +0 -370
- package/src/bridge/methods/popup.ts +0 -53
- package/src/bridge/methods/postEvent.ts +0 -101
- package/src/bridge/parseMessage.ts +0 -28
- package/src/bridge/request.ts +0 -176
- package/src/classnames/__tests__/classNames.ts +0 -20
- package/src/classnames/__tests__/mergeClassNames.ts +0 -21
- package/src/classnames/classNames.ts +0 -34
- package/src/classnames/index.ts +0 -2
- package/src/classnames/mergeClassNames.ts +0 -60
- package/src/closing-behavior/ClosingBehavior.ts +0 -64
- package/src/closing-behavior/__tests__/ClosingBehavior.ts +0 -86
- package/src/closing-behavior/index.ts +0 -2
- package/src/closing-behavior/types.ts +0 -12
- package/src/cloud-storage/CloudStorage.ts +0 -138
- package/src/cloud-storage/index.ts +0 -1
- package/src/colors/__tests__/isColorDark.ts +0 -12
- package/src/colors/__tests__/isRGB.ts +0 -13
- package/src/colors/__tests__/isRGBShort.ts +0 -13
- package/src/colors/__tests__/toRGB.ts +0 -23
- package/src/colors/index.ts +0 -5
- package/src/colors/isColorDark.ts +0 -22
- package/src/colors/isRGB.ts +0 -9
- package/src/colors/isRGBShort.ts +0 -9
- package/src/colors/toRGB.ts +0 -49
- package/src/colors/types.ts +0 -9
- package/src/event-emitter/EventEmitter.ts +0 -146
- package/src/event-emitter/__tests__/EventEmitter.ts +0 -145
- package/src/event-emitter/index.ts +0 -2
- package/src/event-emitter/types.ts +0 -60
- package/src/globals.ts +0 -38
- package/src/haptic-feedback/HapticFeedback.ts +0 -70
- package/src/haptic-feedback/__tests__/HapticFeedback.ts +0 -68
- package/src/haptic-feedback/index.ts +0 -1
- package/src/index.ts +0 -179
- package/src/init/catchCustomStyles.ts +0 -17
- package/src/init/creators/__tests__/createViewport.ts +0 -96
- package/src/init/creators/createBackButton.ts +0 -25
- package/src/init/creators/createClosingBehavior.ts +0 -24
- package/src/init/creators/createMainButton.ts +0 -51
- package/src/init/creators/createMiniApp.ts +0 -48
- package/src/init/creators/createRequestIdGenerator.ts +0 -13
- package/src/init/creators/createSettingsButton.ts +0 -25
- package/src/init/creators/createThemeParams.ts +0 -11
- package/src/init/creators/createViewport.ts +0 -94
- package/src/init/creators/index.ts +0 -8
- package/src/init/css/bindMiniAppCSSVars.ts +0 -48
- package/src/init/css/bindThemeCSSVars.ts +0 -31
- package/src/init/css/bindViewportCSSVars.ts +0 -36
- package/src/init/css/index.ts +0 -1
- package/src/init/css/processCSSVarsOption.ts +0 -57
- package/src/init/css/setCSSVar.ts +0 -8
- package/src/init/index.ts +0 -2
- package/src/init/init.ts +0 -134
- package/src/init/types.ts +0 -94
- package/src/init-data/InitData.ts +0 -96
- package/src/init-data/__tests__/InitData.ts +0 -98
- package/src/init-data/__tests__/chatParser.ts +0 -102
- package/src/init-data/__tests__/initDataParser.ts +0 -136
- package/src/init-data/__tests__/parseInitData.ts +0 -136
- package/src/init-data/__tests__/userParser.ts +0 -96
- package/src/init-data/chatParser.ts +0 -19
- package/src/init-data/index.ts +0 -6
- package/src/init-data/initDataParser.ts +0 -41
- package/src/init-data/parseInitData.ts +0 -10
- package/src/init-data/types.ts +0 -164
- package/src/init-data/userParser.ts +0 -45
- package/src/invoice/Invoice.ts +0 -123
- package/src/invoice/index.ts +0 -2
- package/src/invoice/types.ts +0 -11
- package/src/launch-params/__tests__/retrieveFromUrl.ts +0 -19
- package/src/launch-params/computeLaunchData.ts +0 -81
- package/src/launch-params/computePageReload.ts +0 -13
- package/src/launch-params/getFirstNavigationEntry.ts +0 -10
- package/src/launch-params/index.ts +0 -13
- package/src/launch-params/launchParamsParser.ts +0 -45
- package/src/launch-params/parseLaunchParams.ts +0 -10
- package/src/launch-params/retrieveCurrent.ts +0 -27
- package/src/launch-params/retrieveFromLocation.ts +0 -10
- package/src/launch-params/retrieveFromPerformance.ts +0 -18
- package/src/launch-params/retrieveFromUrl.ts +0 -19
- package/src/launch-params/retrieveLaunchData.ts +0 -30
- package/src/launch-params/serializeLaunchParams.ts +0 -37
- package/src/launch-params/storage.ts +0 -33
- package/src/launch-params/types.ts +0 -62
- package/src/logger/Logger.ts +0 -72
- package/src/logger/__tests__/Logger.ts +0 -107
- package/src/logger/index.ts +0 -1
- package/src/main-button/MainButton.ts +0 -239
- package/src/main-button/__tests__/MainButton.ts +0 -346
- package/src/main-button/index.ts +0 -2
- package/src/main-button/types.ts +0 -26
- package/src/mini-app/MiniApp.ts +0 -348
- package/src/mini-app/__tests__/MiniApp.ts +0 -140
- package/src/mini-app/contactParser.ts +0 -29
- package/src/mini-app/index.ts +0 -2
- package/src/mini-app/types.ts +0 -38
- package/src/misc/__tests__/isRecord.ts +0 -21
- package/src/misc/index.ts +0 -2
- package/src/misc/isRecord.ts +0 -7
- package/src/misc/isTMA.ts +0 -13
- package/src/navigation/HashNavigator/HashNavigator.ts +0 -220
- package/src/navigation/HashNavigator/__tests__/HashNavigator.ts +0 -144
- package/src/navigation/HashNavigator/__tests__/drop.ts +0 -42
- package/src/navigation/HashNavigator/__tests__/go.ts +0 -9
- package/src/navigation/HashNavigator/drop.ts +0 -36
- package/src/navigation/HashNavigator/go.ts +0 -28
- package/src/navigation/HashNavigator/index.ts +0 -2
- package/src/navigation/HashNavigator/types.ts +0 -41
- package/src/navigation/Navigator/Navigator.ts +0 -282
- package/src/navigation/Navigator/index.ts +0 -2
- package/src/navigation/Navigator/types.ts +0 -55
- package/src/navigation/ensurePrefix.ts +0 -9
- package/src/navigation/getHash.ts +0 -17
- package/src/navigation/index.ts +0 -4
- package/src/parsing/ArrayValueParser.ts +0 -79
- package/src/parsing/ParseError.ts +0 -27
- package/src/parsing/ParseSchemaFieldError.ts +0 -21
- package/src/parsing/ValueParser.ts +0 -71
- package/src/parsing/__tests__/ArrayValueParser.ts +0 -18
- package/src/parsing/__tests__/toRecord.ts +0 -10
- package/src/parsing/createValueParserGenerator.ts +0 -16
- package/src/parsing/index.ts +0 -10
- package/src/parsing/parseBySchema.ts +0 -65
- package/src/parsing/parsers/__tests__/array.ts +0 -39
- package/src/parsing/parsers/__tests__/boolean.ts +0 -31
- package/src/parsing/parsers/__tests__/date.ts +0 -25
- package/src/parsing/parsers/__tests__/json.ts +0 -80
- package/src/parsing/parsers/__tests__/number.ts +0 -23
- package/src/parsing/parsers/__tests__/rgb.ts +0 -22
- package/src/parsing/parsers/__tests__/searchParams.ts +0 -105
- package/src/parsing/parsers/__tests__/string.ts +0 -25
- package/src/parsing/parsers/array.ts +0 -9
- package/src/parsing/parsers/boolean.ts +0 -22
- package/src/parsing/parsers/date.ts +0 -11
- package/src/parsing/parsers/index.ts +0 -8
- package/src/parsing/parsers/json.ts +0 -17
- package/src/parsing/parsers/number.ts +0 -21
- package/src/parsing/parsers/rgb.ts +0 -10
- package/src/parsing/parsers/searchParams.ts +0 -24
- package/src/parsing/parsers/string.ts +0 -12
- package/src/parsing/toRecord.ts +0 -27
- package/src/parsing/types.ts +0 -32
- package/src/parsing/unexpectedTypeError.ts +0 -6
- package/src/popup/Popup.ts +0 -91
- package/src/popup/__tests__/Popup.ts +0 -130
- package/src/popup/__tests__/preparePopupParams.ts +0 -85
- package/src/popup/index.ts +0 -2
- package/src/popup/preparePopupParams.ts +0 -59
- package/src/popup/types.ts +0 -69
- package/src/qr-scanner/QRScanner.ts +0 -95
- package/src/qr-scanner/index.ts +0 -2
- package/src/qr-scanner/types.ts +0 -11
- package/src/settings-button/SettingsButton.ts +0 -85
- package/src/settings-button/index.ts +0 -2
- package/src/settings-button/types.ts +0 -15
- package/src/state/State.ts +0 -67
- package/src/state/index.ts +0 -2
- package/src/state/types.ts +0 -31
- package/src/storage.ts +0 -69
- package/src/supports/__tests__/supports.ts +0 -123
- package/src/supports/createSupportsFunc.ts +0 -18
- package/src/supports/createSupportsParamFunc.ts +0 -27
- package/src/supports/index.ts +0 -4
- package/src/supports/supports.ts +0 -84
- package/src/supports/types.ts +0 -1
- package/src/theme-params/ThemeParams.ts +0 -131
- package/src/theme-params/__tests__/keys.ts +0 -19
- package/src/theme-params/__tests__/parseThemeParams.ts +0 -29
- package/src/theme-params/__tests__/serializeThemeParams.ts +0 -29
- package/src/theme-params/__tests__/themeParamsParser.ts +0 -29
- package/src/theme-params/index.ts +0 -6
- package/src/theme-params/keys.ts +0 -24
- package/src/theme-params/parseThemeParams.ts +0 -10
- package/src/theme-params/requestThemeParams.ts +0 -13
- package/src/theme-params/serializeThemeParams.ts +0 -20
- package/src/theme-params/themeParamsParser.ts +0 -22
- package/src/theme-params/types.ts +0 -33
- package/src/timeout/TimeoutError.ts +0 -6
- package/src/timeout/__tests__/isTimeoutError.ts +0 -9
- package/src/timeout/__tests__/withTimeout.ts +0 -28
- package/src/timeout/index.ts +0 -4
- package/src/timeout/isTimeoutError.ts +0 -9
- package/src/timeout/sleep.ts +0 -10
- package/src/timeout/withTimeout.ts +0 -24
- package/src/types/index.ts +0 -4
- package/src/types/methods.ts +0 -18
- package/src/types/platform.ts +0 -14
- package/src/types/request-id.ts +0 -10
- package/src/types/utils.ts +0 -50
- package/src/utils/Utils.ts +0 -107
- package/src/utils/index.ts +0 -1
- package/src/version/__tests__/compareVersions.ts +0 -19
- package/src/version/compareVersions.ts +0 -28
- package/src/version/index.ts +0 -2
- package/src/version/types.ts +0 -4
- package/src/viewport/Viewport.ts +0 -171
- package/src/viewport/__tests__/isStableViewportPlatform.ts +0 -15
- package/src/viewport/__tests__/utils.ts +0 -12
- package/src/viewport/index.ts +0 -4
- package/src/viewport/isStableViewportPlatform.ts +0 -10
- package/src/viewport/requestViewport.ts +0 -23
- package/src/viewport/types.ts +0 -23
- package/src/viewport/utils.ts +0 -7
- /package/dist/dts/{init/css → css}/setCSSVar.d.ts +0 -0
package/src/__tests__/globals.ts
DELETED
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { afterEach, describe, expect, it, vi } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
logger,
|
|
5
|
-
setDebug,
|
|
6
|
-
setTargetOrigin,
|
|
7
|
-
targetOrigin,
|
|
8
|
-
} from '../globals';
|
|
9
|
-
|
|
10
|
-
afterEach(() => {
|
|
11
|
-
vi.restoreAllMocks();
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
describe('logger', () => {
|
|
15
|
-
it('should log message in case, debug mode is enabled. Otherwise no output should be shown', () => {
|
|
16
|
-
const spy = vi
|
|
17
|
-
.spyOn(console, 'log')
|
|
18
|
-
.mockImplementation(() => {
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
logger.log(123);
|
|
22
|
-
expect(spy).not.toHaveBeenCalled();
|
|
23
|
-
|
|
24
|
-
setDebug(true);
|
|
25
|
-
logger.log('Some log');
|
|
26
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
27
|
-
|
|
28
|
-
setDebug(false);
|
|
29
|
-
logger.log('Another log');
|
|
30
|
-
expect(spy).toHaveBeenCalledTimes(1);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
describe('setTargetOrigin', () => {
|
|
35
|
-
it('should return set value via targetOrigin() function', () => {
|
|
36
|
-
setTargetOrigin('my test');
|
|
37
|
-
expect(targetOrigin()).toEqual('my test');
|
|
38
|
-
});
|
|
39
|
-
});
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
off,
|
|
3
|
-
on,
|
|
4
|
-
type PostEvent,
|
|
5
|
-
postEvent as defaultPostEvent,
|
|
6
|
-
} from '~/bridge/index.js';
|
|
7
|
-
import { EventEmitter } from '~/event-emitter/index.js';
|
|
8
|
-
import { State } from '~/state/index.js';
|
|
9
|
-
import { createSupportsFunc, type SupportsFunc } from '~/supports/index.js';
|
|
10
|
-
import type { Version } from '~/version/index.js';
|
|
11
|
-
|
|
12
|
-
import type { BackButtonEvents, BackButtonState } from './types.js';
|
|
13
|
-
|
|
14
|
-
type Emitter = EventEmitter<BackButtonEvents>;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Class which controls the back button displayed in the header of the Mini App in the Telegram
|
|
18
|
-
* interface. It is mostly used in case, when you want to provide a way to go bach in routing
|
|
19
|
-
* history or "rollback" some action.
|
|
20
|
-
*/
|
|
21
|
-
export class BackButton {
|
|
22
|
-
private readonly ee: Emitter = new EventEmitter();
|
|
23
|
-
|
|
24
|
-
private readonly state: State<BackButtonState>;
|
|
25
|
-
|
|
26
|
-
constructor(
|
|
27
|
-
isVisible: boolean,
|
|
28
|
-
version: Version,
|
|
29
|
-
private readonly postEvent: PostEvent = defaultPostEvent,
|
|
30
|
-
) {
|
|
31
|
-
this.state = new State({ isVisible }, this.ee);
|
|
32
|
-
this.supports = createSupportsFunc(version, {
|
|
33
|
-
show: 'web_app_setup_back_button',
|
|
34
|
-
hide: 'web_app_setup_back_button',
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
private set isVisible(visible: boolean) {
|
|
39
|
-
this.state.set('isVisible', visible);
|
|
40
|
-
this.postEvent('web_app_setup_back_button', { is_visible: visible });
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* True if BackButton is currently visible.
|
|
45
|
-
*/
|
|
46
|
-
get isVisible(): boolean {
|
|
47
|
-
return this.state.get('isVisible');
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Hides the BackButton.
|
|
52
|
-
*/
|
|
53
|
-
hide(): void {
|
|
54
|
-
this.isVisible = false;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Adds event listener.
|
|
59
|
-
* @param event - event name.
|
|
60
|
-
* @param listener - event listener.
|
|
61
|
-
*/
|
|
62
|
-
on: Emitter['on'] = (event, listener) => (
|
|
63
|
-
event === 'click'
|
|
64
|
-
? on('back_button_pressed', listener)
|
|
65
|
-
: this.ee.on(event, listener)
|
|
66
|
-
);
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Removes event listener.
|
|
70
|
-
* @param event - event name.
|
|
71
|
-
* @param listener - event listener.
|
|
72
|
-
*/
|
|
73
|
-
off: Emitter['off'] = (event, listener) => (
|
|
74
|
-
event === 'click'
|
|
75
|
-
? off('back_button_pressed', listener)
|
|
76
|
-
: this.ee.off(event, listener)
|
|
77
|
-
);
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Shows the BackButton.
|
|
81
|
-
*/
|
|
82
|
-
show(): void {
|
|
83
|
-
this.isVisible = true;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Checks if specified method is supported by current component.
|
|
88
|
-
*/
|
|
89
|
-
supports: SupportsFunc<'show' | 'hide'>;
|
|
90
|
-
}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it, vi } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { BackButton } from '../BackButton';
|
|
4
|
-
|
|
5
|
-
describe('hide', () => {
|
|
6
|
-
it('should call "web_app_setup_back_button" method with "is_visible" equal to false', () => {
|
|
7
|
-
const postEvent = vi.fn();
|
|
8
|
-
const backButton = new BackButton(false, '', postEvent);
|
|
9
|
-
|
|
10
|
-
expect(postEvent).toHaveBeenCalledTimes(0);
|
|
11
|
-
backButton.hide();
|
|
12
|
-
expect(postEvent).toHaveBeenCalledTimes(1);
|
|
13
|
-
expect(postEvent).toHaveBeenCalledWith('web_app_setup_back_button', { is_visible: false });
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
it('should emit "isVisibleChanged" event with false value', () => {
|
|
17
|
-
const backButton = new BackButton(true, '', vi.fn());
|
|
18
|
-
const listener = vi.fn();
|
|
19
|
-
|
|
20
|
-
backButton.on('change:isVisible', listener);
|
|
21
|
-
expect(listener).toHaveBeenCalledTimes(0);
|
|
22
|
-
backButton.hide();
|
|
23
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
24
|
-
expect(listener).toHaveBeenCalledWith(false);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
describe('show', () => {
|
|
29
|
-
it('should call "web_app_setup_back_button" method with "is_visible" equal to true', () => {
|
|
30
|
-
const postEvent = vi.fn();
|
|
31
|
-
const backButton = new BackButton(false, '', postEvent);
|
|
32
|
-
|
|
33
|
-
expect(postEvent).toHaveBeenCalledTimes(0);
|
|
34
|
-
backButton.show();
|
|
35
|
-
expect(postEvent).toHaveBeenCalledTimes(1);
|
|
36
|
-
expect(postEvent).toHaveBeenCalledWith('web_app_setup_back_button', { is_visible: true });
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
it('should emit "isVisibleChanged" event with true value', () => {
|
|
40
|
-
const backButton = new BackButton(false, '', vi.fn());
|
|
41
|
-
const listener = vi.fn();
|
|
42
|
-
|
|
43
|
-
backButton.on('change:isVisible', listener);
|
|
44
|
-
expect(listener).toHaveBeenCalledTimes(0);
|
|
45
|
-
backButton.show();
|
|
46
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
47
|
-
expect(listener).toHaveBeenCalledWith(true);
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
|
|
51
|
-
// FIXME
|
|
52
|
-
// it('on', () => {
|
|
53
|
-
// it('"click" event', () => {
|
|
54
|
-
// it('should add event listener to bridge\'s '
|
|
55
|
-
// + '"back_button_pressed" event', () => {
|
|
56
|
-
// const on = vi.fn();
|
|
57
|
-
// const backButton = new BackButton({ on } as any, '');
|
|
58
|
-
// const listener = vi.fn();
|
|
59
|
-
//
|
|
60
|
-
// expect(on).toHaveBeenCalledTimes(0);
|
|
61
|
-
// backButton.on('click', listener);
|
|
62
|
-
// expect(on).toHaveBeenCalledTimes(1);
|
|
63
|
-
// expect(on).toHaveBeenCalledWith('back_button_pressed', listener);
|
|
64
|
-
// });
|
|
65
|
-
// });
|
|
66
|
-
// });
|
|
67
|
-
|
|
68
|
-
describe('off', () => {
|
|
69
|
-
// FIXME
|
|
70
|
-
// it('"click" event', () => {
|
|
71
|
-
// it('should remove event listener from bridge\'s '
|
|
72
|
-
// + '"back_button_pressed" event', () => {
|
|
73
|
-
// const on = vi.fn();
|
|
74
|
-
// const off = vi.fn();
|
|
75
|
-
// const backButton = new BackButton({ on, off } as any, '');
|
|
76
|
-
// const listener = vi.fn();
|
|
77
|
-
//
|
|
78
|
-
// expect(on).toHaveBeenCalledTimes(0);
|
|
79
|
-
// backButton.on('click', listener);
|
|
80
|
-
// expect(on).toHaveBeenCalledTimes(1);
|
|
81
|
-
// expect(on).toHaveBeenCalledWith('back_button_pressed', listener);
|
|
82
|
-
//
|
|
83
|
-
// // TODO: We should probably emit back_button_pressed event to
|
|
84
|
-
// // make sure, listener was removed.
|
|
85
|
-
//
|
|
86
|
-
// expect(off).toHaveBeenCalledTimes(0);
|
|
87
|
-
// backButton.off('click', listener);
|
|
88
|
-
// expect(off).toHaveBeenCalledTimes(1);
|
|
89
|
-
// expect(off).toHaveBeenCalledWith('back_button_pressed', listener);
|
|
90
|
-
// });
|
|
91
|
-
// });
|
|
92
|
-
|
|
93
|
-
describe('"isVisibleChanged" event', () => {
|
|
94
|
-
it('should remove event listener from event', () => {
|
|
95
|
-
const listener = vi.fn();
|
|
96
|
-
const backButton = new BackButton(false, '', vi.fn());
|
|
97
|
-
|
|
98
|
-
backButton.on('change:isVisible', listener);
|
|
99
|
-
|
|
100
|
-
expect(listener).toHaveBeenCalledTimes(0);
|
|
101
|
-
backButton.show();
|
|
102
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
103
|
-
|
|
104
|
-
backButton.off('change:isVisible', listener);
|
|
105
|
-
|
|
106
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
107
|
-
backButton.hide();
|
|
108
|
-
expect(listener).toHaveBeenCalledTimes(1);
|
|
109
|
-
});
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
describe('supports', () => {
|
|
114
|
-
describe('show / hide', () => {
|
|
115
|
-
it('should return true in case, BackButton version is 6.1 or higher. False, otherwise', () => {
|
|
116
|
-
const backButton1 = new BackButton(false, '6.0');
|
|
117
|
-
expect(backButton1.supports('show')).toBe(false);
|
|
118
|
-
expect(backButton1.supports('hide')).toBe(false);
|
|
119
|
-
|
|
120
|
-
const backButton2 = new BackButton(false, '6.1');
|
|
121
|
-
expect(backButton2.supports('show')).toBe(true);
|
|
122
|
-
expect(backButton2.supports('hide')).toBe(true);
|
|
123
|
-
|
|
124
|
-
const backButton3 = new BackButton(false, '6.2');
|
|
125
|
-
expect(backButton3.supports('show')).toBe(true);
|
|
126
|
-
expect(backButton3.supports('hide')).toBe(true);
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
});
|
package/src/back-button/index.ts
DELETED
package/src/back-button/types.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type { MiniAppsEventListener } from '~/bridge/index.js';
|
|
2
|
-
import type { StateEvents } from '~/state/index.js';
|
|
3
|
-
|
|
4
|
-
export interface BackButtonState {
|
|
5
|
-
isVisible: boolean;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export interface BackButtonEvents extends StateEvents<BackButtonState> {
|
|
9
|
-
click: MiniAppsEventListener<'main_button_pressed'>;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export type BackButtonEventName = keyof BackButtonEvents;
|
|
13
|
-
|
|
14
|
-
export type BackButtonEventListener<E extends BackButtonEventName> = BackButtonEvents[E];
|
|
@@ -1,23 +0,0 @@
|
|
|
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,236 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
import {
|
|
3
|
-
expect,
|
|
4
|
-
it,
|
|
5
|
-
vi,
|
|
6
|
-
SpyInstance,
|
|
7
|
-
beforeEach,
|
|
8
|
-
afterEach,
|
|
9
|
-
describe,
|
|
10
|
-
beforeAll,
|
|
11
|
-
afterAll,
|
|
12
|
-
} from 'vitest';
|
|
13
|
-
|
|
14
|
-
import { request } from '../request';
|
|
15
|
-
import { type PostEvent, postEvent as globalPostEvent } from '../methods/postEvent';
|
|
16
|
-
import { createWindow } from '../../../test-utils/createWindow';
|
|
17
|
-
import { dispatchWindowMessageEvent } from '../../../test-utils/dispatchWindowMessageEvent';
|
|
18
|
-
|
|
19
|
-
vi.mock('../methods/postEvent.js', async () => {
|
|
20
|
-
const { postEvent: actualPostEvent } = await vi
|
|
21
|
-
.importActual('../methods/postEvent.js') as { postEvent: PostEvent };
|
|
22
|
-
|
|
23
|
-
return {
|
|
24
|
-
postEvent: vi.fn(actualPostEvent),
|
|
25
|
-
};
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
let windowSpy: SpyInstance<[], Window & typeof globalThis>;
|
|
29
|
-
|
|
30
|
-
beforeAll(() => {
|
|
31
|
-
vi.useFakeTimers();
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
afterAll(() => {
|
|
35
|
-
vi.useRealTimers();
|
|
36
|
-
});
|
|
37
|
-
|
|
38
|
-
beforeEach(() => {
|
|
39
|
-
windowSpy = createWindow({ env: 'iframe' });
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
afterEach(() => {
|
|
43
|
-
windowSpy.mockRestore();
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
function emptyCatch() {
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
describe('options', () => {
|
|
51
|
-
describe('timeout', () => {
|
|
52
|
-
it('should throw an error in case, timeout was reached', () => {
|
|
53
|
-
const promise = request('web_app_request_phone', 'phone_requested', {
|
|
54
|
-
timeout: 1000,
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
vi.advanceTimersByTime(1500);
|
|
58
|
-
|
|
59
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
60
|
-
expect(promise).rejects.toEqual(new Error('Async call timeout exceeded. Timeout: 1000'));
|
|
61
|
-
});
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
it('should not throw an error in case, data was received before timeout', () => {
|
|
65
|
-
const promise = request('web_app_request_phone', 'phone_requested', {
|
|
66
|
-
timeout: 1000,
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
vi.advanceTimersByTime(500);
|
|
70
|
-
dispatchWindowMessageEvent('phone_requested', { status: 'allowed' });
|
|
71
|
-
vi.advanceTimersByTime(1000);
|
|
72
|
-
|
|
73
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
74
|
-
expect(promise).resolves.toStrictEqual({ status: 'allowed' });
|
|
75
|
-
});
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
describe('postEvent', () => {
|
|
80
|
-
it('should use specified postEvent property', () => {
|
|
81
|
-
const postEvent = vi.fn();
|
|
82
|
-
request('web_app_request_phone', 'phone_requested', { postEvent });
|
|
83
|
-
expect(postEvent).toHaveBeenCalledWith('web_app_request_phone', undefined);
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
it('should use global postEvent function if according property was not specified', () => {
|
|
87
|
-
request('web_app_request_phone', 'phone_requested');
|
|
88
|
-
expect(globalPostEvent).toHaveBeenCalledWith('web_app_request_phone', undefined);
|
|
89
|
-
});
|
|
90
|
-
|
|
91
|
-
it('should reject promise in case, postEvent threw an error', () => {
|
|
92
|
-
const promise = request('web_app_request_phone', 'phone_requested', {
|
|
93
|
-
postEvent: () => {
|
|
94
|
-
throw new Error('Nope!');
|
|
95
|
-
},
|
|
96
|
-
});
|
|
97
|
-
expect(promise).rejects.toStrictEqual(Error('Nope!'));
|
|
98
|
-
});
|
|
99
|
-
});
|
|
100
|
-
|
|
101
|
-
describe('capture', () => {
|
|
102
|
-
it('should capture an event in case, capture method returned true', () => {
|
|
103
|
-
const promise = request('web_app_request_phone', 'phone_requested', {
|
|
104
|
-
timeout: 1000,
|
|
105
|
-
capture: ({ status }) => status === 'allowed',
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
vi.advanceTimersByTime(500);
|
|
109
|
-
dispatchWindowMessageEvent('phone_requested', { status: 'allowed' });
|
|
110
|
-
vi.advanceTimersByTime(1000);
|
|
111
|
-
|
|
112
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
113
|
-
expect(promise).resolves.toStrictEqual({ status: 'allowed' });
|
|
114
|
-
});
|
|
115
|
-
});
|
|
116
|
-
|
|
117
|
-
it('should not capture an event in case, capture method returned false', () => {
|
|
118
|
-
const promise = request('web_app_request_phone', 'phone_requested', {
|
|
119
|
-
timeout: 500,
|
|
120
|
-
capture: ({ status }) => status === 'allowed',
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
dispatchWindowMessageEvent('phone_requested', { status: 'declined' });
|
|
124
|
-
vi.advanceTimersByTime(1000);
|
|
125
|
-
|
|
126
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
127
|
-
expect(promise).rejects.toEqual(new Error('Async call timeout exceeded. Timeout: 500'));
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
});
|
|
131
|
-
});
|
|
132
|
-
|
|
133
|
-
describe('with request id', () => {
|
|
134
|
-
it('should ignore event with the different request id', () => {
|
|
135
|
-
const promise = request('web_app_read_text_from_clipboard', { req_id: 'a' }, 'clipboard_text_received', {
|
|
136
|
-
timeout: 1000,
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
dispatchWindowMessageEvent('clipboard_text_received', { req_id: 'b' });
|
|
140
|
-
vi.advanceTimersByTime(1500);
|
|
141
|
-
|
|
142
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
143
|
-
expect(promise).rejects.toEqual(new Error('Async call timeout exceeded. Timeout: 1000'));
|
|
144
|
-
});
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
it('should capture event with the same request id', () => {
|
|
148
|
-
const promise = request('web_app_read_text_from_clipboard', { req_id: 'a' }, 'clipboard_text_received', {
|
|
149
|
-
timeout: 1000,
|
|
150
|
-
});
|
|
151
|
-
|
|
152
|
-
dispatchWindowMessageEvent('clipboard_text_received', {
|
|
153
|
-
req_id: 'a',
|
|
154
|
-
data: 'from clipboard',
|
|
155
|
-
});
|
|
156
|
-
vi.advanceTimersByTime(1500);
|
|
157
|
-
|
|
158
|
-
return promise.catch(emptyCatch).finally(() => {
|
|
159
|
-
expect(promise).resolves.toStrictEqual({
|
|
160
|
-
req_id: 'a',
|
|
161
|
-
data: 'from clipboard',
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
});
|
|
165
|
-
});
|
|
166
|
-
|
|
167
|
-
describe('multiple events', () => {
|
|
168
|
-
describe('no params', () => {
|
|
169
|
-
it('should handle any of the specified events', () => {
|
|
170
|
-
const promise = request(
|
|
171
|
-
'web_app_request_phone',
|
|
172
|
-
['phone_requested', 'write_access_requested'],
|
|
173
|
-
{ timeout: 1000 },
|
|
174
|
-
);
|
|
175
|
-
const promise2 = request(
|
|
176
|
-
'web_app_request_phone',
|
|
177
|
-
['phone_requested', 'write_access_requested'],
|
|
178
|
-
{ timeout: 1000 },
|
|
179
|
-
);
|
|
180
|
-
|
|
181
|
-
dispatchWindowMessageEvent('phone_requested', { status: 'allowed' });
|
|
182
|
-
dispatchWindowMessageEvent('write_access_requested', { status: 'declined' });
|
|
183
|
-
vi.advanceTimersByTime(1500);
|
|
184
|
-
|
|
185
|
-
return Promise
|
|
186
|
-
.all([promise, promise2])
|
|
187
|
-
.catch(emptyCatch)
|
|
188
|
-
.finally(() => {
|
|
189
|
-
expect(promise).resolves.toStrictEqual({ status: 'allowed' });
|
|
190
|
-
expect(promise2).resolves.toStrictEqual({ status: 'declined' });
|
|
191
|
-
});
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
|
|
195
|
-
describe('with params', () => {
|
|
196
|
-
it('should handle any of the specified events', () => {
|
|
197
|
-
const promise = request(
|
|
198
|
-
'web_app_data_send',
|
|
199
|
-
{ data: 'abc' },
|
|
200
|
-
['phone_requested', 'write_access_requested'],
|
|
201
|
-
{ timeout: 1000 },
|
|
202
|
-
);
|
|
203
|
-
const promise2 = request(
|
|
204
|
-
'web_app_data_send',
|
|
205
|
-
{ data: 'abc' },
|
|
206
|
-
['phone_requested', 'write_access_requested'],
|
|
207
|
-
{ timeout: 1000 },
|
|
208
|
-
);
|
|
209
|
-
|
|
210
|
-
dispatchWindowMessageEvent('phone_requested', { status: 'allowed' });
|
|
211
|
-
dispatchWindowMessageEvent('write_access_requested', { status: 'declined' });
|
|
212
|
-
vi.advanceTimersByTime(1500);
|
|
213
|
-
|
|
214
|
-
return Promise
|
|
215
|
-
.all([promise, promise2])
|
|
216
|
-
.catch(emptyCatch)
|
|
217
|
-
.finally(() => {
|
|
218
|
-
expect(promise).resolves.toStrictEqual({ status: 'allowed' });
|
|
219
|
-
expect(promise2).resolves.toStrictEqual({ status: 'declined' });
|
|
220
|
-
});
|
|
221
|
-
});
|
|
222
|
-
});
|
|
223
|
-
});
|
|
224
|
-
|
|
225
|
-
// it('no params methods', () => {
|
|
226
|
-
// it('should properly handle ')
|
|
227
|
-
// });
|
|
228
|
-
|
|
229
|
-
// it('with request id', () => {
|
|
230
|
-
// const promise = request('web_app_read_text_from_clipboard', { req_id: 'a' }, 'clipboard_text_received');
|
|
231
|
-
//
|
|
232
|
-
// dispatchWindowEvent('clipboard_text_received', { req_id: 'b' });
|
|
233
|
-
// expect(promise).resolves.toHaveLength(0);
|
|
234
|
-
// dispatchWindowEvent('clipboard_text_received', { req_id: 'a' });
|
|
235
|
-
// expect(promise).resolves.toHaveLength(1);
|
|
236
|
-
// });
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { expect, it } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { hasExternalNotify } from '../hasExternalNotify.js';
|
|
4
|
-
|
|
5
|
-
it('should return true if passed object contains path property "external.notify" and "notify" is a function property.', () => {
|
|
6
|
-
expect(hasExternalNotify({})).toBe(false);
|
|
7
|
-
expect(hasExternalNotify({ external: {} })).toBe(false);
|
|
8
|
-
expect(hasExternalNotify({ external: { notify: [] } })).toBe(false);
|
|
9
|
-
expect(hasExternalNotify({
|
|
10
|
-
external: {
|
|
11
|
-
notify: () => {
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
})).toBe(true);
|
|
15
|
-
});
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { expect, it } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { hasWebviewProxy } from '../hasWebviewProxy.js';
|
|
4
|
-
|
|
5
|
-
it('should return true if passed object contains path property "TelegramWebviewProxy.postEvent" and "postEvent" is a function property.', () => {
|
|
6
|
-
expect(hasWebviewProxy({})).toBe(false);
|
|
7
|
-
expect(hasWebviewProxy({ TelegramWebviewProxy: {} })).toBe(false);
|
|
8
|
-
expect(hasWebviewProxy({ TelegramWebviewProxy: { postEvent: [] } })).toBe(false);
|
|
9
|
-
expect(hasWebviewProxy({
|
|
10
|
-
TelegramWebviewProxy: {
|
|
11
|
-
postEvent: () => {
|
|
12
|
-
},
|
|
13
|
-
},
|
|
14
|
-
})).toBe(true);
|
|
15
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { afterAll, afterEach, expect, it, vi } from 'vitest';
|
|
2
|
-
|
|
3
|
-
import { isIframe } from '../isIframe.js';
|
|
4
|
-
|
|
5
|
-
const windowSpy = vi.spyOn(window, 'window', 'get');
|
|
6
|
-
|
|
7
|
-
afterEach(() => {
|
|
8
|
-
windowSpy.mockReset();
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
afterAll(() => {
|
|
12
|
-
windowSpy.mockRestore();
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
it('should return true in case window.self !== window.top. Otherwise, false.', () => {
|
|
16
|
-
windowSpy.mockImplementation(() => ({ self: 900, top: 1000 }) as any);
|
|
17
|
-
expect(isIframe()).toBe(true);
|
|
18
|
-
|
|
19
|
-
windowSpy.mockImplementation(() => ({ self: 900, top: 900 }) as any);
|
|
20
|
-
expect(isIframe()).toBe(false);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('should return true in case window.self getter threw an error', () => {
|
|
24
|
-
windowSpy.mockImplementation(() => ({
|
|
25
|
-
get self() {
|
|
26
|
-
throw new Error();
|
|
27
|
-
},
|
|
28
|
-
}) as any);
|
|
29
|
-
expect(isIframe()).toBe(true);
|
|
30
|
-
});
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { isRecord } from '~/misc/index.js';
|
|
2
|
-
|
|
3
|
-
type WithExternalNotify<T> = T & {
|
|
4
|
-
external: {
|
|
5
|
-
notify: (...args: any) => any;
|
|
6
|
-
};
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Returns true in case, passed value contains path `external.notify` property and `notify` is a
|
|
11
|
-
* function.
|
|
12
|
-
* @param value - value to check.
|
|
13
|
-
*/
|
|
14
|
-
export function hasExternalNotify<T extends {}>(value: T): value is WithExternalNotify<T> {
|
|
15
|
-
return 'external' in value
|
|
16
|
-
&& isRecord(value.external)
|
|
17
|
-
&& 'notify' in value.external
|
|
18
|
-
&& typeof value.external.notify === 'function';
|
|
19
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { isRecord } from '~/misc/index.js';
|
|
2
|
-
|
|
3
|
-
type WithWebviewProxy<T> = T & {
|
|
4
|
-
TelegramWebviewProxy: {
|
|
5
|
-
postEvent: (...args: any) => any;
|
|
6
|
-
}
|
|
7
|
-
};
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Returns true in case, passed value contains path `TelegramWebviewProxy.postEvent` property and
|
|
11
|
-
* `postEvent` is a function.
|
|
12
|
-
* @param value - value to check.
|
|
13
|
-
*/
|
|
14
|
-
export function hasWebviewProxy<T extends {}>(value: T): value is WithWebviewProxy<T> {
|
|
15
|
-
return 'TelegramWebviewProxy' in value
|
|
16
|
-
&& isRecord(value.TelegramWebviewProxy)
|
|
17
|
-
&& 'postEvent' in value.TelegramWebviewProxy
|
|
18
|
-
&& typeof value.TelegramWebviewProxy.postEvent === 'function';
|
|
19
|
-
}
|
package/src/bridge/env/index.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import type { Version } from '~/version/index.js';
|
|
2
|
-
|
|
3
|
-
import type { MiniAppsMethodName } from '../methods/index.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Error thrown in case, unsupported method was called.
|
|
7
|
-
*/
|
|
8
|
-
export class MethodUnsupportedError extends Error {
|
|
9
|
-
constructor(method: MiniAppsMethodName, version: Version) {
|
|
10
|
-
super(`Method "${method}" is unsupported in the Mini Apps version ${version}.`);
|
|
11
|
-
Object.setPrototypeOf(this, MethodUnsupportedError.prototype);
|
|
12
|
-
}
|
|
13
|
-
}
|