@tma.js/sdk 0.13.3 → 1.0.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.
- package/dist/dts/{components/BackButton → back-button}/BackButton.d.ts +12 -9
- package/dist/dts/back-button/index.d.ts +2 -0
- package/dist/dts/{components/BackButton → back-button}/types.d.ts +3 -2
- package/dist/dts/bridge/env/hasExternalNotify.d.ts +12 -0
- package/dist/dts/bridge/env/hasWebviewProxy.d.ts +12 -0
- package/dist/dts/bridge/env/index.d.ts +3 -0
- package/dist/dts/bridge/env/isIframe.d.ts +5 -0
- package/dist/dts/bridge/errors/MethodUnsupportedError.d.ts +8 -0
- package/dist/dts/bridge/errors/ParameterUnsupportedError.d.ts +8 -0
- package/dist/dts/bridge/errors/index.d.ts +2 -0
- package/dist/dts/bridge/events/createEmitter.d.ts +6 -0
- package/dist/dts/bridge/events/events.d.ts +130 -0
- package/dist/dts/bridge/events/index.d.ts +9 -0
- package/dist/dts/bridge/events/off.d.ts +7 -0
- package/dist/dts/bridge/events/on.d.ts +10 -0
- package/dist/dts/bridge/events/onTelegramEvent.d.ts +7 -0
- package/dist/dts/bridge/events/once.d.ts +9 -0
- package/dist/dts/bridge/events/parsers/clipboardTextReceived.d.ts +13 -0
- package/dist/dts/bridge/events/parsers/customMethodInvoked.d.ts +16 -0
- package/dist/dts/bridge/events/parsers/index.d.ts +9 -0
- package/dist/dts/bridge/events/parsers/invoiceClosed.d.ts +12 -0
- package/dist/dts/bridge/events/parsers/phoneRequested.d.ts +8 -0
- package/dist/dts/bridge/events/parsers/popupClosed.d.ts +8 -0
- package/dist/dts/bridge/events/parsers/qrTextReceived.d.ts +7 -0
- package/dist/dts/bridge/events/parsers/theme-changed.d.ts +42 -0
- package/dist/dts/bridge/events/parsers/viewportChanged.d.ts +19 -0
- package/dist/dts/bridge/events/parsers/writeAccessRequested.d.ts +8 -0
- package/dist/dts/bridge/events/singletonEmitter.d.ts +6 -0
- package/dist/dts/bridge/events/subscribe.d.ts +9 -0
- package/dist/dts/bridge/events/unsubscribe.d.ts +6 -0
- package/dist/dts/bridge/index.d.ts +5 -0
- package/dist/dts/bridge/methods/createPostEvent.d.ts +10 -0
- package/dist/dts/bridge/methods/haptic.d.ts +40 -0
- package/dist/dts/bridge/methods/index.d.ts +6 -0
- package/dist/dts/bridge/methods/invoke-custom-method.d.ts +24 -0
- package/dist/dts/bridge/methods/methods.d.ts +329 -0
- package/dist/dts/bridge/methods/popup.d.ts +49 -0
- package/dist/dts/bridge/methods/postEvent.d.ts +29 -0
- package/dist/dts/bridge/request.d.ts +65 -0
- package/dist/dts/classnames/classNames.d.ts +10 -0
- package/dist/dts/classnames/index.d.ts +2 -0
- package/dist/dts/classnames/mergeClassNames.d.ts +32 -0
- package/dist/dts/{components/ClosingBehaviour/ClosingBehaviour.d.ts → closing-behavior/ClosingBehavior.d.ts} +5 -4
- package/dist/dts/closing-behavior/index.d.ts +2 -0
- package/dist/dts/closing-behavior/types.d.ts +7 -0
- package/dist/dts/{components/CloudStorage → cloud-storage}/CloudStorage.d.ts +19 -11
- package/dist/dts/colors/index.d.ts +5 -0
- package/dist/dts/colors/isColorDark.d.ts +6 -0
- package/dist/dts/colors/isRGB.d.ts +6 -0
- package/dist/dts/colors/isRGBShort.d.ts +6 -0
- package/dist/dts/colors/toRGB.d.ts +11 -0
- package/dist/dts/colors/types.d.ts +8 -0
- package/dist/dts/event-emitter/EventEmitter.d.ts +64 -0
- package/dist/dts/event-emitter/index.d.ts +2 -0
- package/dist/dts/event-emitter/types.d.ts +44 -0
- package/dist/dts/globals.d.ts +22 -0
- package/dist/dts/{components/HapticFeedback → haptic-feedback}/HapticFeedback.d.ts +3 -3
- package/dist/dts/index.d.ts +24 -6
- package/dist/dts/init/catchCustomStyles.d.ts +4 -0
- package/dist/dts/init/creators/createBackButton.d.ts +2 -2
- package/dist/dts/init/creators/createClosingBehavior.d.ts +3 -3
- package/dist/dts/init/creators/createMainButton.d.ts +3 -3
- package/dist/dts/init/creators/createMiniApp.d.ts +14 -0
- package/dist/dts/init/creators/createRequestIdGenerator.d.ts +1 -1
- package/dist/dts/init/creators/createThemeParams.d.ts +2 -3
- package/dist/dts/init/creators/createViewport.d.ts +16 -9
- package/dist/dts/init/creators/index.d.ts +1 -1
- package/dist/dts/init/css/bindMiniAppCSSVars.d.ts +16 -0
- package/dist/dts/init/css/bindThemeCSSVars.d.ts +12 -0
- package/dist/dts/init/css/bindViewportCSSVars.d.ts +20 -0
- package/dist/dts/init/css/index.d.ts +1 -0
- package/dist/dts/init/css/processCSSVarsOption.d.ts +12 -0
- package/dist/dts/init/css/setCSSVar.d.ts +6 -0
- package/dist/dts/init/init.d.ts +5 -5
- package/dist/dts/init/types.d.ts +42 -69
- package/dist/dts/init-data/InitData.d.ts +53 -0
- package/dist/dts/init-data/chatParser.d.ts +5 -0
- package/dist/dts/init-data/index.d.ts +6 -0
- package/dist/dts/init-data/initDataParser.d.ts +5 -0
- package/dist/dts/init-data/parseInitData.d.ts +6 -0
- package/dist/dts/init-data/types.d.ts +133 -0
- package/dist/dts/init-data/userParser.d.ts +5 -0
- package/dist/dts/invoice/Invoice.d.ts +43 -0
- package/dist/dts/invoice/index.d.ts +2 -0
- package/dist/dts/invoice/types.d.ts +7 -0
- package/dist/dts/launch-params/computeLaunchData.d.ts +6 -0
- package/dist/dts/launch-params/computePageReload.d.ts +6 -0
- package/dist/dts/launch-params/getFirstNavigationEntry.d.ts +6 -0
- package/dist/dts/launch-params/index.d.ts +12 -0
- package/dist/dts/launch-params/launchParamsParser.d.ts +5 -0
- package/dist/dts/launch-params/parseLaunchParams.d.ts +6 -0
- package/dist/dts/launch-params/retrieveCurrent.d.ts +5 -0
- package/dist/dts/launch-params/retrieveFromLocation.d.ts +6 -0
- package/dist/dts/launch-params/retrieveFromPerformance.d.ts +8 -0
- package/dist/dts/launch-params/retrieveLaunchData.d.ts +6 -0
- package/dist/dts/launch-params/serializeLaunchParams.d.ts +6 -0
- package/dist/dts/launch-params/storage.d.ts +13 -0
- package/dist/dts/launch-params/types.d.ts +48 -0
- package/dist/dts/logger/Logger.d.ts +38 -0
- package/dist/dts/logger/index.d.ts +1 -0
- package/dist/dts/main-button/MainButton.d.ts +104 -0
- package/dist/dts/main-button/index.d.ts +2 -0
- package/dist/dts/main-button/types.d.ts +20 -0
- package/dist/dts/mini-app/MiniApp.d.ts +99 -0
- package/dist/dts/mini-app/index.d.ts +2 -0
- package/dist/dts/mini-app/types.d.ts +19 -0
- package/dist/dts/misc/index.d.ts +2 -0
- package/dist/dts/misc/isRecord.d.ts +5 -0
- package/dist/dts/misc/isTMA.d.ts +4 -0
- package/dist/dts/navigation/HashNavigator/HashNavigator.d.ts +43 -0
- package/dist/dts/navigation/HashNavigator/drop.d.ts +4 -0
- package/dist/dts/navigation/HashNavigator/go.d.ts +5 -0
- package/dist/dts/navigation/HashNavigator/index.d.ts +2 -0
- package/dist/dts/navigation/HashNavigator/types.d.ts +34 -0
- package/dist/dts/navigation/Navigator/Navigator.d.ts +104 -0
- package/dist/dts/navigation/Navigator/index.d.ts +2 -0
- package/dist/dts/navigation/Navigator/types.d.ts +44 -0
- package/dist/dts/navigation/ensurePrefix.d.ts +7 -0
- package/dist/dts/navigation/getHash.d.ts +14 -0
- package/dist/dts/navigation/index.d.ts +4 -0
- package/dist/dts/parsing/ArrayValueParser.d.ts +18 -0
- package/dist/dts/parsing/ParseError.d.ts +22 -0
- package/dist/dts/parsing/ParseSchemaFieldError.d.ts +17 -0
- package/dist/dts/parsing/ValueParser.d.ts +36 -0
- package/dist/dts/parsing/createValueParserGenerator.d.ts +9 -0
- package/dist/dts/parsing/index.d.ts +10 -0
- package/dist/dts/parsing/parseBySchema.d.ts +8 -0
- package/dist/dts/parsing/parsers/array.d.ts +6 -0
- package/dist/dts/parsing/parsers/boolean.d.ts +4 -0
- package/dist/dts/parsing/parsers/date.d.ts +4 -0
- package/dist/dts/parsing/parsers/index.d.ts +8 -0
- package/dist/dts/parsing/parsers/json.d.ts +8 -0
- package/dist/dts/parsing/parsers/number.d.ts +4 -0
- package/dist/dts/parsing/parsers/rgb.d.ts +4 -0
- package/dist/dts/parsing/parsers/searchParams.d.ts +8 -0
- package/dist/dts/parsing/parsers/string.d.ts +4 -0
- package/dist/dts/parsing/toRecord.d.ts +7 -0
- package/dist/dts/parsing/types.d.ts +30 -0
- package/dist/dts/parsing/unexpectedTypeError.d.ts +4 -0
- package/dist/dts/{components/Popup → popup}/Popup.d.ts +10 -9
- package/dist/dts/popup/index.d.ts +2 -0
- package/dist/dts/popup/preparePopupParams.d.ts +7 -0
- package/dist/dts/{components/Popup → popup}/types.d.ts +4 -4
- package/dist/dts/{components/QRScanner → qr-scanner}/QRScanner.d.ts +6 -5
- package/dist/dts/qr-scanner/index.d.ts +2 -0
- package/dist/dts/{components/QRScanner → qr-scanner}/types.d.ts +1 -1
- package/dist/dts/state/State.d.ts +19 -7
- package/dist/dts/state/types.d.ts +4 -7
- package/dist/dts/storage.d.ts +4 -4
- package/dist/dts/supports/createSupportsFunc.d.ts +10 -0
- package/dist/dts/supports/createSupportsParamFunc.d.ts +15 -0
- package/dist/dts/supports/index.d.ts +4 -0
- package/dist/dts/supports/supports.d.ts +15 -0
- package/dist/dts/supports/types.d.ts +1 -0
- package/dist/dts/theme-params/ThemeParams.d.ts +62 -0
- package/dist/dts/theme-params/index.d.ts +6 -0
- package/dist/dts/theme-params/keys.d.ts +11 -0
- package/dist/dts/theme-params/parseThemeParams.d.ts +6 -0
- package/dist/dts/theme-params/requestThemeParams.d.ts +7 -0
- package/dist/dts/theme-params/serializeThemeParams.d.ts +5 -0
- package/dist/dts/theme-params/themeParamsParser.d.ts +2 -0
- package/dist/dts/theme-params/types.d.ts +14 -0
- package/dist/dts/timeout/TimeoutError.d.ts +3 -0
- package/dist/dts/timeout/index.d.ts +3 -0
- package/dist/dts/timeout/isTimeoutError.d.ts +6 -0
- package/dist/dts/timeout/withTimeout.d.ts +14 -0
- package/dist/dts/types/index.d.ts +3 -0
- package/dist/dts/types/platform.d.ts +4 -0
- package/dist/dts/types/request-id.d.ts +9 -0
- package/dist/dts/types/utils.d.ts +36 -0
- package/dist/dts/utils/Utils.d.ts +45 -0
- package/dist/dts/utils/index.d.ts +1 -0
- package/dist/dts/version/compareVersions.d.ts +8 -0
- package/dist/dts/version/index.d.ts +2 -0
- package/dist/dts/version/types.d.ts +4 -0
- package/dist/dts/{components/Viewport → viewport}/Viewport.d.ts +16 -38
- package/dist/dts/viewport/index.d.ts +3 -0
- package/dist/dts/viewport/requestViewport.d.ts +12 -0
- package/dist/dts/{components/Viewport → viewport}/types.d.ts +9 -1
- package/dist/dts/viewport/utils.d.ts +5 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.iife.js +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.mjs +2254 -1027
- package/dist/index.mjs.map +1 -1
- package/package.json +7 -16
- package/src/{components/BackButton → back-button}/BackButton.ts +23 -21
- package/src/back-button/index.ts +2 -0
- package/src/{components/BackButton → back-button}/types.ts +3 -2
- package/src/bridge/env/hasExternalNotify.ts +19 -0
- package/src/bridge/env/hasWebviewProxy.ts +19 -0
- package/src/bridge/env/index.ts +3 -0
- package/src/bridge/env/isIframe.ts +11 -0
- package/src/bridge/errors/MethodUnsupportedError.ts +13 -0
- package/src/bridge/errors/ParameterUnsupportedError.ts +13 -0
- package/src/bridge/errors/index.ts +2 -0
- package/src/bridge/events/createEmitter.ts +108 -0
- package/src/bridge/events/events.ts +170 -0
- package/src/bridge/events/index.ts +9 -0
- package/src/bridge/events/off.ts +14 -0
- package/src/bridge/events/on.ts +19 -0
- package/src/bridge/events/onTelegramEvent.ts +83 -0
- package/src/bridge/events/once.ts +18 -0
- package/src/bridge/events/parsers/clipboardTextReceived.ts +26 -0
- package/src/bridge/events/parsers/customMethodInvoked.ts +25 -0
- package/src/bridge/events/parsers/index.ts +9 -0
- package/src/bridge/events/parsers/invoiceClosed.ts +26 -0
- package/src/bridge/events/parsers/phoneRequested.ts +14 -0
- package/src/bridge/events/parsers/popupClosed.ts +19 -0
- package/src/bridge/events/parsers/qrTextReceived.ts +14 -0
- package/src/bridge/events/parsers/theme-changed.ts +58 -0
- package/src/bridge/events/parsers/viewportChanged.ts +33 -0
- package/src/bridge/events/parsers/writeAccessRequested.ts +14 -0
- package/src/bridge/events/singletonEmitter.ts +19 -0
- package/src/bridge/events/subscribe.ts +15 -0
- package/src/bridge/events/unsubscribe.ts +10 -0
- package/src/bridge/index.ts +5 -0
- package/src/bridge/methods/createPostEvent.ts +40 -0
- package/src/bridge/methods/haptic.ts +52 -0
- package/src/bridge/methods/index.ts +6 -0
- package/src/bridge/methods/invoke-custom-method.ts +25 -0
- package/src/bridge/methods/methods.ts +372 -0
- package/src/bridge/methods/popup.ts +53 -0
- package/src/bridge/methods/postEvent.ts +101 -0
- package/src/bridge/request.ts +185 -0
- package/src/classnames/classNames.ts +34 -0
- package/src/classnames/index.ts +2 -0
- package/src/classnames/mergeClassNames.ts +68 -0
- package/src/{components/ClosingBehaviour/ClosingBehaviour.ts → closing-behavior/ClosingBehavior.ts} +12 -10
- package/src/closing-behavior/index.ts +2 -0
- package/src/closing-behavior/types.ts +12 -0
- package/src/{components/CloudStorage → cloud-storage}/CloudStorage.ts +50 -28
- package/src/colors/index.ts +5 -0
- package/src/colors/isColorDark.ts +22 -0
- package/src/colors/isRGB.ts +9 -0
- package/src/colors/isRGBShort.ts +9 -0
- package/src/colors/toRGB.ts +49 -0
- package/src/colors/types.ts +9 -0
- package/src/event-emitter/EventEmitter.ts +146 -0
- package/src/event-emitter/index.ts +2 -0
- package/src/event-emitter/types.ts +60 -0
- package/src/globals.ts +38 -0
- package/src/{components/HapticFeedback → haptic-feedback}/HapticFeedback.ts +16 -8
- package/src/index.ts +171 -6
- package/src/init/catchCustomStyles.ts +17 -0
- package/src/init/creators/createBackButton.ts +4 -6
- package/src/init/creators/createClosingBehavior.ts +6 -8
- package/src/init/creators/createMainButton.ts +13 -20
- package/src/init/creators/createMiniApp.ts +44 -0
- package/src/init/creators/createRequestIdGenerator.ts +1 -1
- package/src/init/creators/createThemeParams.ts +3 -6
- package/src/init/creators/createViewport.ts +92 -42
- package/src/init/creators/index.ts +1 -1
- package/src/init/css/bindMiniAppCSSVars.ts +48 -0
- package/src/init/css/bindThemeCSSVars.ts +31 -0
- package/src/init/css/bindViewportCSSVars.ts +36 -0
- package/src/init/css/index.ts +1 -0
- package/src/init/css/processCSSVarsOption.ts +57 -0
- package/src/init/css/setCSSVar.ts +8 -0
- package/src/init/init.ts +119 -154
- package/src/init/types.ts +42 -87
- package/src/init-data/InitData.ts +96 -0
- package/src/init-data/chatParser.ts +19 -0
- package/src/init-data/index.ts +6 -0
- package/src/init-data/initDataParser.ts +41 -0
- package/src/init-data/parseInitData.ts +10 -0
- package/src/init-data/types.ts +164 -0
- package/src/init-data/userParser.ts +45 -0
- package/src/invoice/Invoice.ts +123 -0
- package/src/invoice/index.ts +2 -0
- package/src/invoice/types.ts +11 -0
- package/src/launch-params/computeLaunchData.ts +81 -0
- package/src/launch-params/computePageReload.ts +13 -0
- package/src/launch-params/getFirstNavigationEntry.ts +10 -0
- package/src/launch-params/index.ts +12 -0
- package/src/launch-params/launchParamsParser.ts +41 -0
- package/src/launch-params/parseLaunchParams.ts +10 -0
- package/src/launch-params/retrieveCurrent.ts +27 -0
- package/src/launch-params/retrieveFromLocation.ts +10 -0
- package/src/launch-params/retrieveFromPerformance.ts +23 -0
- package/src/launch-params/retrieveLaunchData.ts +30 -0
- package/src/launch-params/serializeLaunchParams.ts +37 -0
- package/src/launch-params/storage.ts +33 -0
- package/src/launch-params/types.ts +57 -0
- package/src/logger/Logger.ts +72 -0
- package/src/logger/index.ts +1 -0
- package/src/main-button/MainButton.ts +239 -0
- package/src/main-button/index.ts +2 -0
- package/src/main-button/types.ts +26 -0
- package/src/mini-app/MiniApp.ts +237 -0
- package/src/mini-app/index.ts +2 -0
- package/src/mini-app/types.ts +25 -0
- package/src/misc/index.ts +2 -0
- package/src/misc/isRecord.ts +7 -0
- package/src/misc/isTMA.ts +13 -0
- package/src/navigation/HashNavigator/HashNavigator.ts +220 -0
- package/src/navigation/HashNavigator/drop.ts +36 -0
- package/src/navigation/HashNavigator/go.ts +28 -0
- package/src/navigation/HashNavigator/index.ts +2 -0
- package/src/navigation/HashNavigator/types.ts +41 -0
- package/src/navigation/Navigator/Navigator.ts +282 -0
- package/src/navigation/Navigator/index.ts +2 -0
- package/src/navigation/Navigator/types.ts +55 -0
- package/src/navigation/ensurePrefix.ts +9 -0
- package/src/navigation/getHash.ts +17 -0
- package/src/navigation/index.ts +4 -0
- package/src/parsing/ArrayValueParser.ts +79 -0
- package/src/parsing/ParseError.ts +27 -0
- package/src/parsing/ParseSchemaFieldError.ts +21 -0
- package/src/parsing/ValueParser.ts +71 -0
- package/src/parsing/createValueParserGenerator.ts +16 -0
- package/src/parsing/index.ts +10 -0
- package/src/parsing/parseBySchema.ts +65 -0
- package/src/parsing/parsers/array.ts +9 -0
- package/src/parsing/parsers/boolean.ts +22 -0
- package/src/parsing/parsers/date.ts +13 -0
- package/src/parsing/parsers/index.ts +8 -0
- package/src/parsing/parsers/json.ts +17 -0
- package/src/parsing/parsers/number.ts +21 -0
- package/src/parsing/parsers/rgb.ts +12 -0
- package/src/parsing/parsers/searchParams.ts +24 -0
- package/src/parsing/parsers/string.ts +12 -0
- package/src/parsing/toRecord.ts +27 -0
- package/src/parsing/types.ts +32 -0
- package/src/parsing/unexpectedTypeError.ts +6 -0
- package/src/{components/Popup → popup}/Popup.ts +38 -28
- package/src/popup/index.ts +2 -0
- package/src/{components/Popup/utils.ts → popup/preparePopupParams.ts} +3 -3
- package/src/{components/Popup → popup}/types.ts +4 -4
- package/src/{components/QRScanner → qr-scanner}/QRScanner.ts +18 -10
- package/src/qr-scanner/index.ts +2 -0
- package/src/{components/QRScanner → qr-scanner}/types.ts +1 -1
- package/src/state/State.ts +31 -21
- package/src/state/types.ts +5 -8
- package/src/storage.ts +6 -4
- package/src/supports/createSupportsFunc.ts +18 -0
- package/src/supports/createSupportsParamFunc.ts +27 -0
- package/src/supports/index.ts +4 -0
- package/src/supports/supports.ts +84 -0
- package/src/supports/types.ts +1 -0
- package/src/theme-params/ThemeParams.ts +131 -0
- package/src/theme-params/index.ts +6 -0
- package/src/theme-params/keys.ts +24 -0
- package/src/theme-params/parseThemeParams.ts +10 -0
- package/src/theme-params/requestThemeParams.ts +13 -0
- package/src/theme-params/serializeThemeParams.ts +20 -0
- package/src/theme-params/themeParamsParser.ts +20 -0
- package/src/theme-params/types.ts +33 -0
- package/src/timeout/TimeoutError.ts +6 -0
- package/src/timeout/index.ts +3 -0
- package/src/timeout/isTimeoutError.ts +9 -0
- package/src/timeout/withTimeout.ts +36 -0
- package/src/types/index.ts +3 -0
- package/src/types/platform.ts +14 -0
- package/src/types/request-id.ts +10 -0
- package/src/types/utils.ts +50 -0
- package/src/utils/Utils.ts +107 -0
- package/src/utils/index.ts +1 -0
- package/src/version/compareVersions.ts +28 -0
- package/src/version/index.ts +2 -0
- package/src/version/types.ts +4 -0
- package/src/{components/Viewport → viewport}/Viewport.ts +72 -98
- package/src/viewport/index.ts +3 -0
- package/src/viewport/requestViewport.ts +23 -0
- package/src/{components/Viewport → viewport}/types.ts +10 -1
- package/src/viewport/utils.ts +7 -0
- package/dist/dts/components/BackButton/index.d.ts +0 -2
- package/dist/dts/components/ClosingBehaviour/index.d.ts +0 -2
- package/dist/dts/components/ClosingBehaviour/types.d.ts +0 -7
- package/dist/dts/components/InitData/InitData.d.ts +0 -60
- package/dist/dts/components/InitData/index.d.ts +0 -1
- package/dist/dts/components/MainButton/MainButton.d.ts +0 -114
- package/dist/dts/components/MainButton/index.d.ts +0 -2
- package/dist/dts/components/MainButton/types.d.ts +0 -15
- package/dist/dts/components/Popup/index.d.ts +0 -2
- package/dist/dts/components/Popup/utils.d.ts +0 -7
- package/dist/dts/components/QRScanner/index.d.ts +0 -2
- package/dist/dts/components/ThemeParams/ThemeParams.d.ts +0 -85
- package/dist/dts/components/ThemeParams/index.d.ts +0 -2
- package/dist/dts/components/ThemeParams/types.d.ts +0 -6
- package/dist/dts/components/Viewport/index.d.ts +0 -2
- package/dist/dts/components/WebApp/WebApp.d.ts +0 -146
- package/dist/dts/components/WebApp/index.d.ts +0 -2
- package/dist/dts/components/WebApp/types.d.ts +0 -11
- package/dist/dts/components/index.d.ts +0 -11
- package/dist/dts/env.d.ts +0 -10
- package/dist/dts/errors/MethodNotSupportedError.d.ts +0 -6
- package/dist/dts/errors/ParameterNotSupportedError.d.ts +0 -6
- package/dist/dts/errors/index.d.ts +0 -2
- package/dist/dts/init/creators/createWebApp.d.ts +0 -16
- package/dist/dts/init/css.d.ts +0 -50
- package/dist/dts/supports.d.ts +0 -22
- package/dist/dts/types.d.ts +0 -10
- package/dist/dts/url.d.ts +0 -7
- package/src/components/BackButton/index.ts +0 -2
- package/src/components/ClosingBehaviour/index.ts +0 -6
- package/src/components/ClosingBehaviour/types.ts +0 -12
- package/src/components/InitData/InitData.ts +0 -139
- package/src/components/InitData/index.ts +0 -1
- package/src/components/MainButton/MainButton.ts +0 -242
- package/src/components/MainButton/index.ts +0 -2
- package/src/components/MainButton/types.ts +0 -20
- package/src/components/Popup/index.ts +0 -8
- package/src/components/QRScanner/index.ts +0 -2
- package/src/components/ThemeParams/ThemeParams.ts +0 -168
- package/src/components/ThemeParams/index.ts +0 -2
- package/src/components/ThemeParams/types.ts +0 -11
- package/src/components/Viewport/index.ts +0 -2
- package/src/components/WebApp/WebApp.ts +0 -311
- package/src/components/WebApp/index.ts +0 -2
- package/src/components/WebApp/types.ts +0 -17
- package/src/components/index.ts +0 -11
- package/src/env.ts +0 -22
- package/src/errors/MethodNotSupportedError.ts +0 -9
- package/src/errors/ParameterNotSupportedError.ts +0 -9
- package/src/errors/index.ts +0 -2
- package/src/init/creators/createWebApp.ts +0 -52
- package/src/init/css.ts +0 -142
- package/src/supports.ts +0 -44
- package/src/types.ts +0 -13
- package/src/url.ts +0 -23
- /package/dist/dts/{components/CloudStorage → cloud-storage}/index.d.ts +0 -0
- /package/dist/dts/{components/HapticFeedback → haptic-feedback}/index.d.ts +0 -0
- /package/src/{components/CloudStorage → cloud-storage}/index.ts +0 -0
- /package/src/{components/HapticFeedback → haptic-feedback}/index.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tma.js/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.1",
|
|
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",
|
|
@@ -36,28 +36,19 @@
|
|
|
36
36
|
"default": "./dist/index.cjs"
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
|
-
"dependencies": {
|
|
40
|
-
"@tma.js/bridge": "1.4.1",
|
|
41
|
-
"@tma.js/colors": "0.0.5",
|
|
42
|
-
"@tma.js/init-data": "0.2.22",
|
|
43
|
-
"@tma.js/utils": "0.5.6",
|
|
44
|
-
"@tma.js/util-types": "0.0.3",
|
|
45
|
-
"@tma.js/parsing": "1.0.1",
|
|
46
|
-
"@tma.js/theme-params": "1.0.0",
|
|
47
|
-
"@tma.js/launch-params": "1.0.1",
|
|
48
|
-
"@tma.js/event-emitter": "0.1.0"
|
|
49
|
-
},
|
|
50
39
|
"devDependencies": {
|
|
51
|
-
"
|
|
40
|
+
"build-utils": "0.0.1",
|
|
52
41
|
"eslint-config-custom": "0.1.0",
|
|
53
|
-
"
|
|
42
|
+
"test-utils": "0.0.1",
|
|
43
|
+
"tsconfig": "0.0.2"
|
|
54
44
|
},
|
|
55
45
|
"publishConfig": {
|
|
56
46
|
"access": "public"
|
|
57
47
|
},
|
|
58
48
|
"scripts": {
|
|
59
|
-
"test": "vitest",
|
|
60
|
-
"lint": "eslint
|
|
49
|
+
"test": "vitest --run",
|
|
50
|
+
"lint": "eslint src/**/*",
|
|
51
|
+
"lint:fix": "pnpm run lint --fix",
|
|
61
52
|
"typecheck": "tsc --noEmit -p tsconfig.build.json",
|
|
62
53
|
"build": "pnpm run build:default && pnpm run build:iife",
|
|
63
54
|
"build:default": "vite build --config vite.config.ts",
|
|
@@ -1,21 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
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';
|
|
3
11
|
|
|
4
|
-
import type {
|
|
12
|
+
import type { BackButtonEvents, BackButtonState } from './types.js';
|
|
5
13
|
|
|
6
|
-
|
|
7
|
-
import { State } from '../../state/index.js';
|
|
8
|
-
|
|
9
|
-
import type { BackButtonEvents, BackButtonState, BackButtonEventListener } from './types.js';
|
|
14
|
+
type Emitter = EventEmitter<BackButtonEvents>;
|
|
10
15
|
|
|
11
16
|
/**
|
|
12
|
-
* Class which controls the back button displayed in the header
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* action.
|
|
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.
|
|
16
20
|
*/
|
|
17
21
|
export class BackButton {
|
|
18
|
-
private readonly ee = new EventEmitter
|
|
22
|
+
private readonly ee: Emitter = new EventEmitter();
|
|
19
23
|
|
|
20
24
|
private readonly state: State<BackButtonState>;
|
|
21
25
|
|
|
@@ -55,9 +59,9 @@ export class BackButton {
|
|
|
55
59
|
* @param event - event name.
|
|
56
60
|
* @param listener - event listener.
|
|
57
61
|
*/
|
|
58
|
-
on:
|
|
62
|
+
on: Emitter['on'] = (event, listener) => (
|
|
59
63
|
event === 'click'
|
|
60
|
-
? on('back_button_pressed', listener
|
|
64
|
+
? on('back_button_pressed', listener)
|
|
61
65
|
: this.ee.on(event, listener)
|
|
62
66
|
);
|
|
63
67
|
|
|
@@ -66,13 +70,11 @@ export class BackButton {
|
|
|
66
70
|
* @param event - event name.
|
|
67
71
|
* @param listener - event listener.
|
|
68
72
|
*/
|
|
69
|
-
off:
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
this.ee.off(event, listener);
|
|
75
|
-
};
|
|
73
|
+
off: Emitter['off'] = (event, listener) => (
|
|
74
|
+
event === 'click'
|
|
75
|
+
? off('back_button_pressed', listener)
|
|
76
|
+
: this.ee.off(event, listener)
|
|
77
|
+
);
|
|
76
78
|
|
|
77
79
|
/**
|
|
78
80
|
* Shows the BackButton.
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { MiniAppsEventListener } from '~/bridge/index.js';
|
|
2
|
+
import type { StateEvents } from '~/state/index.js';
|
|
2
3
|
|
|
3
4
|
export interface BackButtonState {
|
|
4
5
|
isVisible: boolean;
|
|
5
6
|
}
|
|
6
7
|
|
|
7
8
|
export interface BackButtonEvents extends StateEvents<BackButtonState> {
|
|
8
|
-
click:
|
|
9
|
+
click: MiniAppsEventListener<'main_button_pressed'>;
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export type BackButtonEventName = keyof BackButtonEvents;
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
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 parameter was used.
|
|
7
|
+
*/
|
|
8
|
+
export class ParameterUnsupportedError extends Error {
|
|
9
|
+
constructor(method: MiniAppsMethodName, param: string, version: Version) {
|
|
10
|
+
super(`Parameter "${param}" in method "${method}" is unsupported in the Mini Apps version ${version}.`);
|
|
11
|
+
Object.setPrototypeOf(this, ParameterUnsupportedError.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { EventEmitter } from '~/event-emitter/index.js';
|
|
2
|
+
import { logger } from '~/globals.js';
|
|
3
|
+
import { string } from '~/parsing/index.js';
|
|
4
|
+
|
|
5
|
+
import type { MiniAppsEventEmitter, MiniAppsEventName } from './events.js';
|
|
6
|
+
import { onTelegramEvent } from './onTelegramEvent.js';
|
|
7
|
+
import {
|
|
8
|
+
clipboardTextReceived,
|
|
9
|
+
customMethodInvoked,
|
|
10
|
+
invoiceClosed,
|
|
11
|
+
phoneRequested,
|
|
12
|
+
popupClosed,
|
|
13
|
+
qrTextReceived,
|
|
14
|
+
themeChanged,
|
|
15
|
+
viewportChanged,
|
|
16
|
+
writeAccessRequested,
|
|
17
|
+
} from './parsers/index.js';
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Returns event emitter which could be safely used, to process events from
|
|
21
|
+
* Telegram native application.
|
|
22
|
+
*/
|
|
23
|
+
export function createEmitter(): MiniAppsEventEmitter {
|
|
24
|
+
const emitter: MiniAppsEventEmitter = new EventEmitter();
|
|
25
|
+
const emit: MiniAppsEventEmitter['emit'] = (event: any, ...data: any[]) => {
|
|
26
|
+
logger.log('Emitting processed event:', event, ...data);
|
|
27
|
+
emitter.emit(event, ...data);
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
// Desktop version of Telegram is sometimes not sending the viewport_changed
|
|
31
|
+
// event. For example, when main button is shown. That's why we should
|
|
32
|
+
// add our own listener to make sure, viewport information is always fresh.
|
|
33
|
+
// Issue: https://github.com/Telegram-Mini-Apps/tma.js/issues/10
|
|
34
|
+
window.addEventListener('resize', () => {
|
|
35
|
+
emit('viewport_changed', {
|
|
36
|
+
width: window.innerWidth,
|
|
37
|
+
height: window.innerHeight,
|
|
38
|
+
is_state_stable: true,
|
|
39
|
+
is_expanded: true,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// In case, any Telegram event was received, we should prepare data before
|
|
44
|
+
// passing it to emitter.
|
|
45
|
+
onTelegramEvent((eventType: MiniAppsEventName | string, eventData): void => {
|
|
46
|
+
logger.log('Received raw event:', eventType, eventData);
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
switch (eventType) {
|
|
50
|
+
case 'viewport_changed':
|
|
51
|
+
return emit(eventType, viewportChanged().parse(eventData));
|
|
52
|
+
|
|
53
|
+
case 'theme_changed':
|
|
54
|
+
return emit(eventType, themeChanged().parse(eventData));
|
|
55
|
+
|
|
56
|
+
case 'popup_closed':
|
|
57
|
+
// FIXME: Payloads are different on different platforms.
|
|
58
|
+
// Issue: https://github.com/Telegram-Mini-Apps/tma.js/issues/2
|
|
59
|
+
if (
|
|
60
|
+
// Sent on desktop.
|
|
61
|
+
eventData === undefined
|
|
62
|
+
// Sent on iOS.
|
|
63
|
+
|| eventData === null
|
|
64
|
+
) {
|
|
65
|
+
return emit(eventType, {});
|
|
66
|
+
}
|
|
67
|
+
return emit(eventType, popupClosed().parse(eventData));
|
|
68
|
+
|
|
69
|
+
case 'set_custom_style':
|
|
70
|
+
return emit(eventType, string().parse(eventData));
|
|
71
|
+
|
|
72
|
+
case 'qr_text_received':
|
|
73
|
+
return emit(eventType, qrTextReceived().parse(eventData));
|
|
74
|
+
|
|
75
|
+
case 'clipboard_text_received':
|
|
76
|
+
return emit(eventType, clipboardTextReceived().parse(eventData));
|
|
77
|
+
|
|
78
|
+
case 'invoice_closed':
|
|
79
|
+
return emit(eventType, invoiceClosed().parse(eventData));
|
|
80
|
+
|
|
81
|
+
case 'phone_requested':
|
|
82
|
+
return emit('phone_requested', phoneRequested().parse(eventData));
|
|
83
|
+
|
|
84
|
+
case 'custom_method_invoked':
|
|
85
|
+
return emit('custom_method_invoked', customMethodInvoked().parse(eventData));
|
|
86
|
+
|
|
87
|
+
case 'write_access_requested':
|
|
88
|
+
return emit('write_access_requested', writeAccessRequested().parse(eventData));
|
|
89
|
+
|
|
90
|
+
// Events which have no parameters.
|
|
91
|
+
case 'main_button_pressed':
|
|
92
|
+
case 'back_button_pressed':
|
|
93
|
+
case 'settings_button_pressed':
|
|
94
|
+
case 'scan_qr_popup_closed':
|
|
95
|
+
case 'reload_iframe':
|
|
96
|
+
return emit(eventType);
|
|
97
|
+
|
|
98
|
+
// All other event listeners will receive unknown type of data.
|
|
99
|
+
default:
|
|
100
|
+
return emit(eventType as any, eventData);
|
|
101
|
+
}
|
|
102
|
+
} catch (cause) {
|
|
103
|
+
logger.error('Error processing event:', cause);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return emitter;
|
|
108
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
AnySubscribeListener,
|
|
3
|
+
EventEmitter,
|
|
4
|
+
EventListener,
|
|
5
|
+
EventParams,
|
|
6
|
+
} from '~/event-emitter/index.js';
|
|
7
|
+
import type { IsNever, Not } from '~/types/index.js';
|
|
8
|
+
|
|
9
|
+
import type {
|
|
10
|
+
ClipboardTextReceivedPayload,
|
|
11
|
+
CustomMethodInvokedPayload,
|
|
12
|
+
InvoiceClosedPayload,
|
|
13
|
+
PhoneRequestedPayload,
|
|
14
|
+
PopupClosedPayload,
|
|
15
|
+
QrTextReceivedPayload,
|
|
16
|
+
ThemeChangedPayload,
|
|
17
|
+
ViewportChangedPayload,
|
|
18
|
+
WriteAccessRequestedPayload,
|
|
19
|
+
} from './parsers/index.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Map where key is known event name, and value is its listener.
|
|
23
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events
|
|
24
|
+
*/
|
|
25
|
+
export interface MiniAppsEvents {
|
|
26
|
+
/**
|
|
27
|
+
* User clicked back button.
|
|
28
|
+
* @since v6.1
|
|
29
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#back-button-pressed
|
|
30
|
+
*/
|
|
31
|
+
back_button_pressed: () => void;
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Telegram application attempted to extract text from clipboard.
|
|
35
|
+
* @param payload - event payload.
|
|
36
|
+
* @since v6.4
|
|
37
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#clipboard-text-received
|
|
38
|
+
*/
|
|
39
|
+
clipboard_text_received: (payload: ClipboardTextReceivedPayload) => void;
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Custom method invocation completed.
|
|
43
|
+
* @param payload - event payload.
|
|
44
|
+
* @since v6.9
|
|
45
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#custom-method-invoked
|
|
46
|
+
*/
|
|
47
|
+
custom_method_invoked: (payload: CustomMethodInvokedPayload) => void;
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* An invoice was closed.
|
|
51
|
+
* @param payload - invoice close information.
|
|
52
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#invoice-closed
|
|
53
|
+
*/
|
|
54
|
+
invoice_closed: (payload: InvoiceClosedPayload) => void;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* User clicked the Main Button.
|
|
58
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#main-button-pressed
|
|
59
|
+
*/
|
|
60
|
+
main_button_pressed: () => void;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Application received phone access request status.
|
|
64
|
+
* @param payload - event payload.
|
|
65
|
+
* @since v6.9
|
|
66
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#phone-requested
|
|
67
|
+
*/
|
|
68
|
+
phone_requested: (payload: PhoneRequestedPayload) => void;
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Popup was closed.
|
|
72
|
+
* @param payload - event payload.
|
|
73
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#popup-closed
|
|
74
|
+
*/
|
|
75
|
+
popup_closed: (payload: PopupClosedPayload) => void;
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Parent iframe requested current iframe reload.
|
|
79
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#reload-iframe
|
|
80
|
+
*/
|
|
81
|
+
reload_iframe: () => void;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* The QR scanner scanned some QR and extracted its content.
|
|
85
|
+
* @param payload - event payload.
|
|
86
|
+
* @since v6.4
|
|
87
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#qr-text-received
|
|
88
|
+
*/
|
|
89
|
+
qr_text_received: (payload: QrTextReceivedPayload) => void;
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* QR scanner was closed.
|
|
93
|
+
* @since v6.4
|
|
94
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#scan-qr-popup-closed
|
|
95
|
+
*/
|
|
96
|
+
scan_qr_popup_closed: () => void;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* The event which is usually sent by the Telegram web application. Its payload represents
|
|
100
|
+
* `<style/>` tag html content, a developer could use. The stylesheet described in the payload
|
|
101
|
+
* will help the developer to stylize the app scrollbar (but he is still able to do it himself).
|
|
102
|
+
* @param html - `style` tag inner HTML.
|
|
103
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#set-custom-style
|
|
104
|
+
*/
|
|
105
|
+
set_custom_style: (html: string) => void;
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Occurs when the Settings Button was pressed.
|
|
109
|
+
* @since v6.1
|
|
110
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#settings-button-pressed
|
|
111
|
+
*/
|
|
112
|
+
settings_button_pressed: () => void;
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Occurs whenever theme settings are changed in the user's Telegram app
|
|
116
|
+
* (including switching to night mode).
|
|
117
|
+
* @param payload - event payload.
|
|
118
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#theme-changed
|
|
119
|
+
*/
|
|
120
|
+
theme_changed: (payload: ThemeChangedPayload) => void;
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Occurs whenever the viewport has been changed. For example, when the user started
|
|
124
|
+
* dragging the application or called the expansion method.
|
|
125
|
+
* @param payload - event payload.
|
|
126
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#viewport-changed
|
|
127
|
+
*/
|
|
128
|
+
viewport_changed: (payload: ViewportChangedPayload) => void;
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Application received write access request status.
|
|
132
|
+
* @param payload - event payload.
|
|
133
|
+
* @since v6.9
|
|
134
|
+
* @see https://docs.telegram-mini-apps.com/platform/apps-communication/events#write-access-requested
|
|
135
|
+
*/
|
|
136
|
+
write_access_requested: (payload: WriteAccessRequestedPayload) => void;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Any known event name.
|
|
141
|
+
*/
|
|
142
|
+
export type MiniAppsEventName = keyof MiniAppsEvents;
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Parameters of specified event.
|
|
146
|
+
*/
|
|
147
|
+
export type MiniAppsEventParams<E extends MiniAppsEventName> = EventParams<MiniAppsEvents[E]>[0];
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Returns event listener for specified event name.
|
|
151
|
+
*/
|
|
152
|
+
export type MiniAppsEventListener<E extends MiniAppsEventName> = EventListener<MiniAppsEvents[E]>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Event emitter, based describe events map.
|
|
156
|
+
*/
|
|
157
|
+
export type MiniAppsEventEmitter = EventEmitter<MiniAppsEvents>;
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Returns true in case, event has parameters.
|
|
161
|
+
*/
|
|
162
|
+
export type MiniAppsEventHasParams<E extends MiniAppsEventName> =
|
|
163
|
+
Not<IsNever<MiniAppsEventParams<E>>>;
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Event listener used in `subscribe` and `unsubscribe` functions.
|
|
167
|
+
*/
|
|
168
|
+
export type MiniAppsGlobalEventListener =
|
|
169
|
+
| AnySubscribeListener<MiniAppsEvents>
|
|
170
|
+
| ((event: string, data: unknown) => void);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './createEmitter.js';
|
|
2
|
+
export * from './events.js';
|
|
3
|
+
export * from './off.js';
|
|
4
|
+
export * from './on.js';
|
|
5
|
+
export * from './once.js';
|
|
6
|
+
export * from './parsers/index.js';
|
|
7
|
+
export * from './singletonEmitter.js';
|
|
8
|
+
export * from './subscribe.js';
|
|
9
|
+
export * from './unsubscribe.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MiniAppsEventListener, MiniAppsEventName } from './events.js';
|
|
2
|
+
import { singletonEmitter } from './singletonEmitter.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Removes listener from specified event.
|
|
6
|
+
* @param event - event to listen.
|
|
7
|
+
* @param listener - event listener.
|
|
8
|
+
*/
|
|
9
|
+
export function off<E extends MiniAppsEventName>(
|
|
10
|
+
event: E,
|
|
11
|
+
listener: MiniAppsEventListener<E>,
|
|
12
|
+
): void {
|
|
13
|
+
singletonEmitter().off(event, listener);
|
|
14
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MiniAppsEventListener, MiniAppsEventName } from './events.js';
|
|
2
|
+
import { off } from './off.js';
|
|
3
|
+
import { singletonEmitter } from './singletonEmitter.js';
|
|
4
|
+
|
|
5
|
+
type StopListening = () => void;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Adds new listener to the specified event. Returns handler
|
|
9
|
+
* which allows to stop listening to event.
|
|
10
|
+
* @param event - event name.
|
|
11
|
+
* @param listener - event listener.
|
|
12
|
+
*/
|
|
13
|
+
export function on<E extends MiniAppsEventName>(
|
|
14
|
+
event: E,
|
|
15
|
+
listener: MiniAppsEventListener<E>,
|
|
16
|
+
): StopListening {
|
|
17
|
+
singletonEmitter().on(event, listener);
|
|
18
|
+
return () => off(event, listener);
|
|
19
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
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
|
+
});
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Emits event sent from Telegram native application like it was sent in
|
|
13
|
+
* default web environment between 2 iframes. It dispatches new MessageEvent
|
|
14
|
+
* and expects it to be handled via `window.addEventListener('message', ...)`
|
|
15
|
+
* as developer would do it to handle messages sent from parent iframe.
|
|
16
|
+
* @param eventType - event name.
|
|
17
|
+
* @param eventData - event payload.
|
|
18
|
+
*/
|
|
19
|
+
function emitEvent(eventType: string, eventData: unknown): void {
|
|
20
|
+
window.dispatchEvent(new MessageEvent('message', {
|
|
21
|
+
data: JSON.stringify({ eventType, eventData }),
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Defines special handlers by known paths, which are recognized by
|
|
27
|
+
* Telegram as ports to receive events. This function also sets special
|
|
28
|
+
* function in global window object to prevent duplicate declaration.
|
|
29
|
+
*/
|
|
30
|
+
function defineEventHandlers(): void {
|
|
31
|
+
const wnd: any = window;
|
|
32
|
+
|
|
33
|
+
// Prevent from duplicate event handlers definition.
|
|
34
|
+
if ('TelegramGameProxy_receiveEvent' in wnd) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Iterate over each path, where "receiveEvent" function should be
|
|
39
|
+
// defined. This function is called by external environment in case,
|
|
40
|
+
// it wants to emit some event.
|
|
41
|
+
[
|
|
42
|
+
['TelegramGameProxy_receiveEvent'], // Windows Phone.
|
|
43
|
+
['TelegramGameProxy', 'receiveEvent'], // Desktop.
|
|
44
|
+
['Telegram', 'WebView', 'receiveEvent'], // Android and iOS.
|
|
45
|
+
].forEach((path) => {
|
|
46
|
+
// Path starts from "window" object.
|
|
47
|
+
let pointer = wnd;
|
|
48
|
+
|
|
49
|
+
path.forEach((item, idx, arr) => {
|
|
50
|
+
// We are on the last iteration, where function property name is passed.
|
|
51
|
+
if (idx === arr.length - 1) {
|
|
52
|
+
pointer[item] = emitEvent;
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (!(item in pointer)) {
|
|
57
|
+
pointer[item] = {};
|
|
58
|
+
}
|
|
59
|
+
pointer = pointer[item];
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Adds listener to window "message" event assuming, that this event could
|
|
66
|
+
* be sent by Telegram native application. Calls passed callback with event
|
|
67
|
+
* type and data.
|
|
68
|
+
* @param cb - callback to call.
|
|
69
|
+
*/
|
|
70
|
+
export function onTelegramEvent(cb: (eventType: string, eventData: unknown) => void): void {
|
|
71
|
+
// Define event handlers to make sure, message handler will work correctly.
|
|
72
|
+
defineEventHandlers();
|
|
73
|
+
|
|
74
|
+
// We expect Telegram to send us new event through "message" event.
|
|
75
|
+
window.addEventListener('message', (event) => {
|
|
76
|
+
try {
|
|
77
|
+
const { eventType, eventData } = eventDataJson.parse(event.data);
|
|
78
|
+
cb(eventType, eventData);
|
|
79
|
+
} catch {
|
|
80
|
+
// We ignore incorrect messages as they could be generated by any other code.
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MiniAppsEventListener, MiniAppsEventName } from './events.js';
|
|
2
|
+
import { off } from './off.js';
|
|
3
|
+
import { singletonEmitter } from './singletonEmitter.js';
|
|
4
|
+
|
|
5
|
+
type StopListening = () => void;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Works the same as "on" method, but after catching the event, will remove event listener.
|
|
9
|
+
* @param event - event name.
|
|
10
|
+
* @param listener - event listener.
|
|
11
|
+
*/
|
|
12
|
+
export function once<E extends MiniAppsEventName>(
|
|
13
|
+
event: E,
|
|
14
|
+
listener: MiniAppsEventListener<E>,
|
|
15
|
+
): StopListening {
|
|
16
|
+
singletonEmitter().once(event, listener);
|
|
17
|
+
return () => off(event, listener);
|
|
18
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { json, string } from '~/parsing/index.js';
|
|
2
|
+
import type { RequestId } from '~/types/index.js';
|
|
3
|
+
|
|
4
|
+
export interface ClipboardTextReceivedPayload {
|
|
5
|
+
/**
|
|
6
|
+
* Passed during the `web_app_read_text_from_clipboard` method invocation `req_id` value.
|
|
7
|
+
*/
|
|
8
|
+
req_id: RequestId;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Data extracted from the clipboard. The returned value will have the type `string` only in
|
|
12
|
+
* the case, application has access to the clipboard.
|
|
13
|
+
*/
|
|
14
|
+
data?: string | null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function clipboardTextReceived() {
|
|
18
|
+
return json<ClipboardTextReceivedPayload>({
|
|
19
|
+
req_id: string(),
|
|
20
|
+
data: (value) => (
|
|
21
|
+
value === null
|
|
22
|
+
? value
|
|
23
|
+
: string().optional().parse(value)
|
|
24
|
+
),
|
|
25
|
+
});
|
|
26
|
+
}
|