@tma.js/bridge 1.4.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +44 -13
- package/dist/dts/applyPolyfills.d.ts +5 -0
- package/dist/dts/base64-url.d.ts +24 -0
- package/dist/dts/env/hasWebviewProxy.d.ts +10 -0
- package/dist/dts/env/isIframe.d.ts +5 -0
- package/dist/dts/env/isTMA.d.ts +31 -0
- package/dist/dts/env/mockTelegramEnv.d.ts +57 -0
- package/dist/dts/errors.d.ts +27 -0
- package/dist/dts/events/createEmitter.d.ts +58 -0
- package/dist/dts/events/emitEvent.d.ts +33 -0
- package/dist/dts/events/emitter.d.ts +2 -11
- package/dist/dts/events/types/events.d.ts +721 -0
- package/dist/dts/events/types/index.d.ts +3 -0
- package/dist/dts/events/types/listening.d.ts +5 -0
- package/dist/dts/events/types/misc.d.ts +16 -0
- package/dist/dts/globals.d.ts +45 -14
- package/dist/dts/index.d.ts +24 -7
- package/dist/dts/launch-params.d.ts +32 -0
- package/dist/dts/methods/captureSameReq.d.ts +10 -0
- package/dist/dts/methods/createPostEvent.d.ts +27 -7
- package/dist/dts/methods/postEvent.d.ts +31 -25
- package/dist/dts/methods/postMessage.d.ts +7 -0
- package/dist/dts/methods/supports.d.ts +15 -0
- package/dist/dts/methods/types/custom-method.d.ts +59 -0
- package/dist/dts/methods/types/index.d.ts +6 -0
- package/dist/dts/methods/types/methods.d.ts +756 -0
- package/dist/dts/methods/types/misc.d.ts +27 -0
- package/dist/dts/methods/{popup.d.ts → types/popup.d.ts} +1 -1
- package/dist/dts/methods/types/utils.d.ts +9 -0
- package/dist/dts/obj-prop-helpers.d.ts +39 -0
- package/dist/dts/start-param.d.ts +53 -0
- package/dist/dts/utils/compareVersions.d.ts +10 -0
- package/dist/dts/utils/invokeCustomMethod.d.ts +34 -0
- package/dist/dts/utils/request.d.ts +90 -0
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.iife.js +3 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.js +977 -0
- package/dist/index.js.map +1 -0
- package/package.json +26 -26
- package/dist/dts/env.d.ts +0 -29
- package/dist/dts/errors/MethodUnsupportedError.d.ts +0 -8
- package/dist/dts/errors/ParameterUnsupportedError.d.ts +0 -8
- package/dist/dts/errors/index.d.ts +0 -2
- package/dist/dts/events/events.d.ts +0 -130
- package/dist/dts/events/index.d.ts +0 -7
- package/dist/dts/events/off.d.ts +0 -7
- package/dist/dts/events/on.d.ts +0 -10
- package/dist/dts/events/onTelegramEvent.d.ts +0 -7
- package/dist/dts/events/once.d.ts +0 -9
- package/dist/dts/events/parsers/clipboardTextReceived.d.ts +0 -13
- package/dist/dts/events/parsers/customMethodInvoked.d.ts +0 -16
- package/dist/dts/events/parsers/index.d.ts +0 -9
- package/dist/dts/events/parsers/invoiceClosed.d.ts +0 -12
- package/dist/dts/events/parsers/phoneRequested.d.ts +0 -8
- package/dist/dts/events/parsers/popupClosed.d.ts +0 -8
- package/dist/dts/events/parsers/qrTextReceived.d.ts +0 -7
- package/dist/dts/events/parsers/theme-changed.d.ts +0 -42
- package/dist/dts/events/parsers/viewportChanged.d.ts +0 -19
- package/dist/dts/events/parsers/writeAccessRequested.d.ts +0 -8
- package/dist/dts/events/subscribe.d.ts +0 -9
- package/dist/dts/events/unsubscribe.d.ts +0 -6
- package/dist/dts/methods/index.d.ts +0 -6
- package/dist/dts/methods/invoke-custom-method.d.ts +0 -24
- package/dist/dts/methods/methods.d.ts +0 -330
- package/dist/dts/request.d.ts +0 -66
- package/dist/dts/shared.d.ts +0 -5
- package/dist/dts/supports.d.ts +0 -15
- package/dist/index.mjs +0 -317
- package/dist/index.mjs.map +0 -1
- package/src/env.ts +0 -49
- package/src/errors/MethodUnsupportedError.ts +0 -13
- package/src/errors/ParameterUnsupportedError.ts +0 -13
- package/src/errors/index.ts +0 -2
- package/src/events/emitter.ts +0 -126
- package/src/events/events.ts +0 -169
- package/src/events/index.ts +0 -7
- package/src/events/off.ts +0 -12
- package/src/events/on.ts +0 -17
- package/src/events/onTelegramEvent.ts +0 -83
- package/src/events/once.ts +0 -16
- package/src/events/parsers/clipboardTextReceived.ts +0 -27
- package/src/events/parsers/customMethodInvoked.ts +0 -26
- package/src/events/parsers/index.ts +0 -9
- package/src/events/parsers/invoiceClosed.ts +0 -26
- package/src/events/parsers/phoneRequested.ts +0 -14
- package/src/events/parsers/popupClosed.ts +0 -19
- package/src/events/parsers/qrTextReceived.ts +0 -14
- package/src/events/parsers/theme-changed.ts +0 -58
- package/src/events/parsers/viewportChanged.ts +0 -33
- package/src/events/parsers/writeAccessRequested.ts +0 -14
- package/src/events/subscribe.ts +0 -16
- package/src/events/unsubscribe.ts +0 -11
- package/src/globals.ts +0 -38
- package/src/index.ts +0 -7
- package/src/methods/createPostEvent.ts +0 -39
- package/src/methods/haptic.ts +0 -52
- package/src/methods/index.ts +0 -6
- package/src/methods/invoke-custom-method.ts +0 -25
- package/src/methods/methods.ts +0 -373
- package/src/methods/popup.ts +0 -53
- package/src/methods/postEvent.ts +0 -101
- package/src/request.ts +0 -168
- package/src/shared.ts +0 -5
- package/src/supports.ts +0 -82
- /package/dist/dts/methods/{haptic.d.ts → types/haptic-feedback.d.ts} +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RGB } from '@tma.js/types';
|
|
2
|
+
type KnownColorKey = 'bg_color' | 'secondary_bg_color';
|
|
3
|
+
/**
|
|
4
|
+
* Color key which could be used to update header color.
|
|
5
|
+
*/
|
|
6
|
+
export type HeaderColorKey = KnownColorKey;
|
|
7
|
+
/**
|
|
8
|
+
* Color key which could be used to update Mini App background color.
|
|
9
|
+
*/
|
|
10
|
+
export type BackgroundColor = RGB;
|
|
11
|
+
/**
|
|
12
|
+
* Color key which could be used to update bottom bar background color.
|
|
13
|
+
*/
|
|
14
|
+
export type BottomBarColor = RGB;
|
|
15
|
+
/**
|
|
16
|
+
* Position of the secondary button related to the main one.
|
|
17
|
+
*/
|
|
18
|
+
export type SecondaryButtonPosition = 'left' | 'right' | 'top' | 'bottom';
|
|
19
|
+
/**
|
|
20
|
+
* Values expected by the `web_app_open_link.try_browser` option.
|
|
21
|
+
*/
|
|
22
|
+
export type OpenLinkBrowser = 'google-chrome' | 'chrome' | 'mozilla-firefox' | 'firefox' | 'microsoft-edge' | 'edge' | 'opera' | 'opera-mini' | 'brave' | 'brave-browser' | 'duckduckgo' | 'duckduckgo-browser' | 'samsung' | 'samsung-browser' | 'vivaldi' | 'vivaldi-browser' | 'kiwi' | 'kiwi-browser' | 'uc' | 'uc-browser' | 'tor' | 'tor-browser';
|
|
23
|
+
/**
|
|
24
|
+
* Chat type which could be used when calling `web_app_switch_inline_query` method.
|
|
25
|
+
*/
|
|
26
|
+
export type SwitchInlineQueryChatType = 'users' | 'bots' | 'groups' | 'channels';
|
|
27
|
+
export {};
|
|
@@ -17,7 +17,7 @@ export interface PopupParams {
|
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
19
|
* Describes the native popup button.
|
|
20
|
-
* @see https://docs.telegram-mini-apps.com/
|
|
20
|
+
* @see https://docs.telegram-mini-apps.com/platform/methods#popupbutton
|
|
21
21
|
*/
|
|
22
22
|
export type PopupButton = {
|
|
23
23
|
/**
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
type UnionKeys<T> = T extends T ? keyof T : never;
|
|
2
|
+
/**
|
|
3
|
+
* Creates Mini Apps method parameters types.
|
|
4
|
+
*/
|
|
5
|
+
export interface CreateMethodParams<Params = never, VersionedParam extends UnionKeys<Params> = never> {
|
|
6
|
+
params: Params;
|
|
7
|
+
versionedParams: VersionedParam;
|
|
8
|
+
}
|
|
9
|
+
export {};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines a property, that is a functions compose. Trying to set a value in this property
|
|
3
|
+
* will lead to adding it to a function's pool. The property value will always be equal to a
|
|
4
|
+
* function, calling all collected functions in the pool.
|
|
5
|
+
*
|
|
6
|
+
* Returned function performs a cleanup. It does one of the following:
|
|
7
|
+
* 1. Removes the property if no functions were to the pool added other than the initial one.
|
|
8
|
+
* 2. Sets the value equal to the first added function to the pool after the initial one if
|
|
9
|
+
* the only one additional function was added at all. In other words, if the pool length is equal
|
|
10
|
+
* to 2, the second item will be selected as the property value.
|
|
11
|
+
* 3. Leaves the value equal to a function calling all pool functions, but removes the initially
|
|
12
|
+
* added one.
|
|
13
|
+
* @param obj - object.
|
|
14
|
+
* @param propertyName - object property.
|
|
15
|
+
* @param initialFn - an initial function to set.
|
|
16
|
+
*/
|
|
17
|
+
export declare function defineFnComposer(obj: any, propertyName: string, initialFn: (...args: any) => any): void;
|
|
18
|
+
/**
|
|
19
|
+
* Wires the specified property in the object preventing it from being overwritten. Instead, it
|
|
20
|
+
* enhances the previous value by merging the current one with the passed one.
|
|
21
|
+
* @param obj - object.
|
|
22
|
+
* @param prop - object property to rewire.
|
|
23
|
+
*/
|
|
24
|
+
export declare function defineMergeableProperty(obj: any, prop: string): void;
|
|
25
|
+
/**
|
|
26
|
+
* Defines an enumerable and configurable property with a getter and setter.
|
|
27
|
+
* @param obj - object.
|
|
28
|
+
* @param prop - object property name.
|
|
29
|
+
* @param get - getter to use.
|
|
30
|
+
* @param set - setter to use.
|
|
31
|
+
*/
|
|
32
|
+
export declare function defineProxiedProperty(obj: any, prop: string, get: () => unknown, set: (v: any) => void): void;
|
|
33
|
+
/**
|
|
34
|
+
* Defines an enumerable, configurable and writable property with the initial value.
|
|
35
|
+
* @param obj - object.
|
|
36
|
+
* @param prop - object property name.
|
|
37
|
+
* @param value - value to set.
|
|
38
|
+
*/
|
|
39
|
+
export declare function defineStaticProperty(obj: any, prop: string, value: any): void;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { DecodeBase64UrlError } from './base64-url.js';
|
|
2
|
+
import * as E from 'fp-ts/Either';
|
|
3
|
+
import * as J from 'fp-ts/Json';
|
|
4
|
+
/**
|
|
5
|
+
* Creates a safe start parameter value. If the value is not a string, the
|
|
6
|
+
* function applies JSON.stringify to it, so make sure you are not passing an
|
|
7
|
+
* object with circular references.
|
|
8
|
+
*
|
|
9
|
+
* @param value - value to create start parameter from.
|
|
10
|
+
* @see Learn more about start parameter:
|
|
11
|
+
* https://docs.telegram-mini-apps.com/platform/start-parameter
|
|
12
|
+
*/
|
|
13
|
+
export declare function createStartParamFp(value: unknown): E.Either<Error, string>;
|
|
14
|
+
/**
|
|
15
|
+
* @see createStartParamFp
|
|
16
|
+
*/
|
|
17
|
+
export declare const createStartParam: (value: unknown) => Error;
|
|
18
|
+
/**
|
|
19
|
+
* @see decodeStartParamFp
|
|
20
|
+
*/
|
|
21
|
+
export declare function decodeStartParam<T>(value: string, parse: (value: string) => T): T;
|
|
22
|
+
/**
|
|
23
|
+
* @see decodeStartParamFp
|
|
24
|
+
*/
|
|
25
|
+
export declare function decodeStartParam(value: string, as: 'json'): J.Json;
|
|
26
|
+
/**
|
|
27
|
+
* @see decodeStartParamFp
|
|
28
|
+
*/
|
|
29
|
+
export declare function decodeStartParam(value: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Decodes a start parameter using a custom parser.
|
|
32
|
+
* @param value - a start parameter value.
|
|
33
|
+
* @param parse - a custom value parser.
|
|
34
|
+
*/
|
|
35
|
+
export declare function decodeStartParamFp<L, R>(value: string, parse: (value: string) => E.Either<L, R>): E.Either<L | DecodeBase64UrlError, R>;
|
|
36
|
+
/**
|
|
37
|
+
* Decodes a start parameter assuming that the result is a JSON value.
|
|
38
|
+
* @param value - a start parameter value.
|
|
39
|
+
* @param as - result kind.
|
|
40
|
+
*/
|
|
41
|
+
export declare function decodeStartParamFp(value: string, as: 'json'): E.Either<SyntaxError | DecodeBase64UrlError, J.Json>;
|
|
42
|
+
/**
|
|
43
|
+
* Decodes a start parameter and returns its decoded representation.
|
|
44
|
+
* @param value - a value to decode.
|
|
45
|
+
*/
|
|
46
|
+
export declare function decodeStartParamFp(value: string): E.Either<DecodeBase64UrlError, string>;
|
|
47
|
+
/**
|
|
48
|
+
* @returns True if the passed value is safe to be used to create a start parameter value from it.
|
|
49
|
+
* If true is returned, the value can be safely passed to the `createStartParam` function.
|
|
50
|
+
* @param value - value to check.
|
|
51
|
+
* @see createStartParam
|
|
52
|
+
*/
|
|
53
|
+
export declare function isSafeToCreateStartParam(value: string): boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Version } from '@tma.js/types';
|
|
2
|
+
/**
|
|
3
|
+
* @param a - first version.
|
|
4
|
+
* @param b - second version.
|
|
5
|
+
* @returns
|
|
6
|
+
* - `1` if the version "a" is greater than "b".
|
|
7
|
+
* - `0` the version "a" is equal to "b".
|
|
8
|
+
* - `-1` the version "a" is lower than "b".
|
|
9
|
+
*/
|
|
10
|
+
export declare function compareVersions(a: Version, b: Version): number;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { BetterPromise } from 'better-promises';
|
|
2
|
+
import { CustomMethodName, CustomMethodParams } from '../methods/types/index.js';
|
|
3
|
+
import { InvokeCustomMethodFailedError } from '../errors.js';
|
|
4
|
+
import { RequestOptions, RequestFpOptions, RequestError } from './request.js';
|
|
5
|
+
import * as TE from 'fp-ts/TaskEither';
|
|
6
|
+
export type InvokeCustomMethodError = RequestError | InvokeCustomMethodFailedError;
|
|
7
|
+
export type InvokeCustomMethodOptions = Omit<RequestOptions<'custom_method_invoked'>, 'capture'>;
|
|
8
|
+
export type InvokeCustomMethodFn = typeof invokeCustomMethod;
|
|
9
|
+
export type InvokeCustomMethodFpOptions = Omit<RequestFpOptions<'custom_method_invoked'>, 'capture'>;
|
|
10
|
+
export type InvokeCustomMethodFpFn = typeof invokeCustomMethodFp;
|
|
11
|
+
/**
|
|
12
|
+
* Invokes known custom method. Returns method execution result.
|
|
13
|
+
* @param method - method name.
|
|
14
|
+
* @param params - method parameters.
|
|
15
|
+
* @param requestId - request identifier.
|
|
16
|
+
* @param options - additional options.
|
|
17
|
+
*/
|
|
18
|
+
export declare function invokeCustomMethodFp<M extends CustomMethodName>(method: M, params: CustomMethodParams<M>, requestId: string, options?: InvokeCustomMethodFpOptions): TE.TaskEither<InvokeCustomMethodError, unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Invokes unknown custom method. Returns method execution result.
|
|
21
|
+
* @param method - method name.
|
|
22
|
+
* @param params - method parameters.
|
|
23
|
+
* @param requestId - request identifier.
|
|
24
|
+
* @param options - additional options.
|
|
25
|
+
*/
|
|
26
|
+
export declare function invokeCustomMethodFp(method: string, params: object, requestId: string, options?: InvokeCustomMethodFpOptions): TE.TaskEither<RequestError, unknown>;
|
|
27
|
+
/**
|
|
28
|
+
* @see invokeCustomMethodFp
|
|
29
|
+
*/
|
|
30
|
+
export declare function invokeCustomMethod<M extends CustomMethodName>(method: M, params: CustomMethodParams<M>, requestId: string, options?: InvokeCustomMethodOptions): BetterPromise<unknown>;
|
|
31
|
+
/**
|
|
32
|
+
* @see invokeCustomMethodFp
|
|
33
|
+
*/
|
|
34
|
+
export declare function invokeCustomMethod(method: string, params: object, requestId: string, options?: InvokeCustomMethodOptions): BetterPromise<unknown>;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { BetterPromise, BetterPromiseOptions, TimeoutError, CancelledError } from 'better-promises';
|
|
2
|
+
import { If, IsNever } from '@tma.js/toolkit';
|
|
3
|
+
import { PostEventError, PostEventFn, PostEventFpFn } from '../methods/postEvent.js';
|
|
4
|
+
import { MethodNameWithOptionalParams, MethodNameWithoutParams, MethodNameWithRequiredParams, MethodParams } from '../methods/types/index.js';
|
|
5
|
+
import { EventName, EventPayload } from '../events/types/index.js';
|
|
6
|
+
import * as TE from 'fp-ts/TaskEither';
|
|
7
|
+
type AnyEventName = EventName | EventName[];
|
|
8
|
+
export type RequestError = PostEventError | TimeoutError | CancelledError | unknown;
|
|
9
|
+
/**
|
|
10
|
+
* @example
|
|
11
|
+
* { event: 'scan_qr_closed' }
|
|
12
|
+
* @example
|
|
13
|
+
* {
|
|
14
|
+
* event: 'popup_closed',
|
|
15
|
+
* payload: { button_id: 'ok' }
|
|
16
|
+
* }
|
|
17
|
+
*/
|
|
18
|
+
export type RequestCaptureFnEventsPayload<E extends EventName[]> = E extends (infer U extends EventName)[] ? {
|
|
19
|
+
[K in U]: If<IsNever<EventPayload<K>>, {
|
|
20
|
+
event: K;
|
|
21
|
+
}, {
|
|
22
|
+
event: K;
|
|
23
|
+
payload: EventPayload<K>;
|
|
24
|
+
}>;
|
|
25
|
+
}[U] : never;
|
|
26
|
+
export type RequestCaptureEventsFn<E extends EventName[]> = (payload: RequestCaptureFnEventsPayload<E>) => boolean;
|
|
27
|
+
export type RequestCaptureEventFn<E extends EventName> = If<IsNever<EventPayload<E>>, () => boolean, (payload: EventPayload<E>) => boolean>;
|
|
28
|
+
export type RequestCaptureFn<E extends AnyEventName> = E extends EventName[] ? RequestCaptureEventsFn<E> : E extends EventName ? RequestCaptureEventFn<E> : never;
|
|
29
|
+
export interface RequestOptions<E extends AnyEventName> extends Omit<RequestFpOptions<E>, 'postEvent'> {
|
|
30
|
+
/**
|
|
31
|
+
* Custom function to call mini apps methods.
|
|
32
|
+
*/
|
|
33
|
+
postEvent?: PostEventFn;
|
|
34
|
+
}
|
|
35
|
+
export type RequestResult<E extends AnyEventName> = E extends (infer U extends EventName)[] ? U extends infer K extends EventName ? If<IsNever<EventPayload<K>>, undefined, EventPayload<K>> : never : E extends EventName ? If<IsNever<EventPayload<E>>, undefined, EventPayload<E>> : never;
|
|
36
|
+
export interface RequestFpOptions<E extends AnyEventName> extends Pick<BetterPromiseOptions, 'abortSignal' | 'timeout'> {
|
|
37
|
+
/**
|
|
38
|
+
* A function that should return true if the event should be captured.
|
|
39
|
+
* The first compatible request will be captured if this property is omitted.
|
|
40
|
+
*/
|
|
41
|
+
capture?: RequestCaptureFn<E>;
|
|
42
|
+
/**
|
|
43
|
+
* A custom function to call mini apps methods.
|
|
44
|
+
*/
|
|
45
|
+
postEvent?: PostEventFpFn;
|
|
46
|
+
}
|
|
47
|
+
export type RequestFn = typeof request;
|
|
48
|
+
export type RequestFpFn = typeof requestFp;
|
|
49
|
+
/**
|
|
50
|
+
* Calls a method waiting for the specified event(-s) to occur.
|
|
51
|
+
* @param method - method name.
|
|
52
|
+
* @param eventOrEvents - tracked event or events.
|
|
53
|
+
* @param options - additional options.
|
|
54
|
+
*/
|
|
55
|
+
export declare function requestFp<M extends MethodNameWithRequiredParams, E extends AnyEventName>(method: M, eventOrEvents: E, options: RequestFpOptions<E> & {
|
|
56
|
+
params: MethodParams<M>;
|
|
57
|
+
}): TE.TaskEither<RequestError, RequestResult<E>>;
|
|
58
|
+
/**
|
|
59
|
+
* Calls a method waiting for the specified event(-s) to occur.
|
|
60
|
+
* @param method - method name.
|
|
61
|
+
* @param eventOrEvents - tracked event or events.
|
|
62
|
+
* @param options - additional options.
|
|
63
|
+
*/
|
|
64
|
+
export declare function requestFp<M extends MethodNameWithOptionalParams, E extends AnyEventName>(method: M, eventOrEvents: E, options?: RequestFpOptions<E> & {
|
|
65
|
+
params?: MethodParams<M>;
|
|
66
|
+
}): TE.TaskEither<RequestError, RequestResult<E>>;
|
|
67
|
+
/**
|
|
68
|
+
* Calls a method waiting for the specified event(-s) to occur.
|
|
69
|
+
* @param method - method name.
|
|
70
|
+
* @param eventOrEvents - tracked event or events.
|
|
71
|
+
* @param options - additional options.
|
|
72
|
+
*/
|
|
73
|
+
export declare function requestFp<M extends MethodNameWithoutParams, E extends AnyEventName>(method: M, eventOrEvents: E, options?: RequestFpOptions<E>): TE.TaskEither<RequestError, RequestResult<E>>;
|
|
74
|
+
/**
|
|
75
|
+
* @see requestFp
|
|
76
|
+
*/
|
|
77
|
+
export declare function request<M extends MethodNameWithRequiredParams, E extends AnyEventName>(method: M, eventOrEvents: E, options: RequestOptions<E> & {
|
|
78
|
+
params: MethodParams<M>;
|
|
79
|
+
}): BetterPromise<RequestResult<E>>;
|
|
80
|
+
/**
|
|
81
|
+
* @see requestFp
|
|
82
|
+
*/
|
|
83
|
+
export declare function request<M extends MethodNameWithOptionalParams, E extends AnyEventName>(method: M, eventOrEvents: E, options?: RequestOptions<E> & {
|
|
84
|
+
params?: MethodParams<M>;
|
|
85
|
+
}): BetterPromise<RequestResult<E>>;
|
|
86
|
+
/**
|
|
87
|
+
* @see requestFp
|
|
88
|
+
*/
|
|
89
|
+
export declare function request<M extends MethodNameWithoutParams, E extends AnyEventName>(method: M, eventOrEvents: E, options?: RequestOptions<E>): BetterPromise<RequestResult<E>>;
|
|
90
|
+
export {};
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("@tma.js/
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("valibot"),b=require("better-promises"),g=require("@tma.js/toolkit"),h=require("@tma.js/transformers"),P=require("error-kid"),E=require("@tma.js/signals"),xe=require("mitt");function R(e){return u.is(u.looseObject({TelegramWebviewProxy:u.looseObject({postEvent:u.function()})}),e)}function U(){try{return window.self!==window.top}catch{return!0}}var Me=function(e,t,r){if(r||arguments.length===2)for(var n=0,o=t.length,a;n<o;n++)(a||!(n in t))&&(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))};function Fe(e){return e}function S(e,t,r,n,o,a,i,c,p){switch(arguments.length){case 1:return e;case 2:return function(){return t(e.apply(this,arguments))};case 3:return function(){return r(t(e.apply(this,arguments)))};case 4:return function(){return n(r(t(e.apply(this,arguments))))};case 5:return function(){return o(n(r(t(e.apply(this,arguments)))))};case 6:return function(){return a(o(n(r(t(e.apply(this,arguments))))))};case 7:return function(){return i(a(o(n(r(t(e.apply(this,arguments)))))))};case 8:return function(){return c(i(a(o(n(r(t(e.apply(this,arguments))))))))};case 9:return function(){return p(c(i(a(o(n(r(t(e.apply(this,arguments)))))))))}}}function m(e,t,r,n,o,a,i,c,p){switch(arguments.length){case 1:return e;case 2:return t(e);case 3:return r(t(e));case 4:return n(r(t(e)));case 5:return o(n(r(t(e))));case 6:return a(o(n(r(t(e)))));case 7:return i(a(o(n(r(t(e))))));case 8:return c(i(a(o(n(r(t(e)))))));case 9:return p(c(i(a(o(n(r(t(e))))))));default:{for(var s=arguments[0],l=1;l<arguments.length;l++)s=arguments[l](s);return s}}}var I=function(e,t){var r=typeof e=="number"?function(n){return n.length>=e}:e;return function(){var n=Array.from(arguments);return r(arguments)?t.apply(this,n):function(o){return t.apply(void 0,Me([o],n,!1))}}},Ae={_tag:"None"},Ce=function(e){return{_tag:"Some",value:e}},Le=function(e){return e._tag==="Left"},Z=function(e){return{_tag:"Left",left:e}},V=function(e){return{_tag:"Right",right:e}},w=Z,f=V,ee=I(2,function(e,t){return k(e)?e:t(e.right)}),qe=function(e){return function(t){return k(t)?t:f(e(t.right))}},$e=function(e){return function(t){return k(t)?w(e(t.left)):t}},k=Le,te=function(e,t){return function(r){return k(r)?e(r.left):t(r.right)}},je=te,F=te,Re=F,W=function(e,t){try{return f(e())}catch(r){return w(t(r))}},Ue=ee,Ie=ee,We=Ae,Oe=Ce,Be=function(e){return e._tag==="None"},Ge=function(e,t){return function(r){return Be(r)?e():t(r.value)}},De=Ge;function ze(e){return S(f,e.of)}function Je(e){return S(w,e.of)}function Ne(e){return function(t,r){return e.chain(t,function(n){return k(n)?e.of(n):r(n.right)})}}function Qe(e){return function(t,r){return function(n){return e.map(n,F(t,r))}}}var re=function(e,t){return m(e,He(t))},Ke=function(e,t){return m(e,Ye(t))},He=function(e){return function(t){return function(){return Promise.resolve().then(t).then(e)}}},Ye=function(e){return function(t){return function(){return Promise.all([Promise.resolve().then(t),Promise.resolve().then(e)]).then(function(r){var n=r[0],o=r[1];return n(o)})}}},ne=function(e){return function(){return Promise.resolve(e)}},Xe=I(2,function(e,t){return function(){return Promise.resolve().then(e).then(function(r){return t(r)()})}}),ae="Task",Ze={URI:ae,map:re},oe={of:ne},Ve={URI:ae,map:re,of:ne,ap:Ke,chain:Xe},et=function(e,t,r,n){function o(a){return a instanceof r?a:new r(function(i){i(a)})}return new(r||(r=Promise))(function(a,i){function c(l){try{s(n.next(l))}catch(d){i(d)}}function p(l){try{s(n.throw(l))}catch(d){i(d)}}function s(l){l.done?a(l.value):o(l.value).then(c,p)}s((n=n.apply(e,t||[])).next())})},tt=function(e,t){var r={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},n,o,a,i;return i={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(i[Symbol.iterator]=function(){return this}),i;function c(s){return function(l){return p([s,l])}}function p(s){if(n)throw new TypeError("Generator is already executing.");for(;i&&(i=0,s[0]&&(r=0)),r;)try{if(n=1,o&&(a=s[0]&2?o.return:s[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,s[1])).done)return a;switch(o=0,a&&(s=[s[0]&2,a.value]),s[0]){case 0:case 1:a=s;break;case 4:return r.label++,{value:s[1],done:!1};case 5:r.label++,o=s[1],s=[0];continue;case 7:s=r.ops.pop(),r.trys.pop();continue;default:if(a=r.trys,!(a=a.length>0&&a[a.length-1])&&(s[0]===6||s[0]===2)){r=0;continue}if(s[0]===3&&(!a||s[1]>a[0]&&s[1]<a[3])){r.label=s[1];break}if(s[0]===6&&r.label<a[1]){r.label=a[1],a=s;break}if(a&&r.label<a[2]){r.label=a[2],r.ops.push(s);break}a[2]&&r.ops.pop(),r.trys.pop();continue}s=t.call(e,r)}catch(l){s=[6,l],o=0}finally{n=a=0}if(s[0]&5)throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}},se=Je(oe),ie=ze(oe),A=Qe(Ze),rt=function(e,t){return function(){return et(void 0,void 0,void 0,function(){var r;return tt(this,function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,e().then(V)];case 1:return[2,n.sent()];case 2:return r=n.sent(),[2,Z(t(r))];case 3:return[2]}})})}},nt=I(2,Ne(Ve)),at=nt;class ce extends P.errorClass("MethodUnsupportedError",(t,r)=>[`Method "${t}" is unsupported in Mini Apps version ${r}`]){}class ue extends P.errorClass("MethodParameterUnsupportedError",(t,r,n)=>[`Parameter "${r}" of "${t}" method is unsupported in Mini Apps version ${n}`]){}class pe extends P.errorClassWithData("LaunchParamsRetrieveError",t=>({errors:t}),t=>[["Unable to retrieve launch parameters from any known source. Perhaps, you have opened your app outside Telegram?","📖 Refer to docs for more information:","https://docs.telegram-mini-apps.com/packages/tma-js-bridge/environment","","Collected errors:",...t.map(({source:r,error:n})=>`Source: ${r} / ${n instanceof Error?n.message:String(n)}`)].join(`
|
|
2
|
+
`)]){}class le extends P.errorClass("InvalidLaunchParamsError",(t,r)=>[`Invalid value for launch params: ${t}`,{cause:r}]){}class _e extends P.errorClass("UnknownEnvError"){}class fe extends P.errorClass("InvokeCustomMethodError",t=>[`Server returned error: ${t}`]){}const N="launchParams";function Q(e){return e.replace(/^[^?#]*[?#]/,"").replace(/[?#]/g,"&")}const ge=S(T,Ue(h.parseLaunchParamsQueryFp)),ot=g.eitherFnToSimple(ge),me=S(T,qe(e=>{const t=new URLSearchParams(e).get("tgWebAppData");return t?Oe(t):We})),st=S(me,Re(e=>{throw e},e=>e),De(()=>{},e=>e));function T(){const e=[];for(const[t,r]of[[()=>Q(window.location.href),"window.location.href"],[()=>{const n=performance.getEntriesByType("navigation")[0];return n&&Q(n.name)},"performance navigation entries"],[()=>g.getStorageValue(N),"local storage"]]){const n=t();if(!n){e.push({source:r,error:new Error("Source is empty")});continue}const o=m(h.parseLaunchParamsQueryFp(n),je(a=>a,()=>!0));if(typeof o!="boolean"){e.push({source:r,error:o});continue}return g.setStorageValue(N,n),f(n)}return w(new pe(e))}const it=g.eitherFnToSimple(T);function ct(e,t){const r=new Map,n=xe(),o=(a,i,c=!1)=>{const p=r.get(a)||new Map;r.set(a,p);const s=p.get(i)||[];p.set(i,s);const l=s.findIndex(d=>d[1]===c);if(l>=0&&(n.off(a,s[l][0]),s.splice(l,1),!s.length&&(p.delete(i),!p.size))){const d=r.size;r.delete(a),d&&!r.size&&t()}};return{on(a,i,c){!r.size&&e();const p=()=>{o(a,i,c)},s=(...q)=>{c&&p(),a==="*"?i({name:q[0],payload:q[1]}):i(...q)};n.on(a,s);const l=r.get(a)||new Map;r.set(a,l);const d=l.get(i)||[];return l.set(i,d),d.push([s,c||!1]),p},off:o,emit:n.emit,clear(){const a=r.size;n.all.clear(),r.clear(),a&&t()}}}function x(e,t){window.dispatchEvent(new MessageEvent("message",{data:JSON.stringify({eventType:e,eventData:t}),source:window.parent}))}function $(e,t,r){const n=[r],o=e[t];typeof o=="function"&&n.push(o);const a=(...c)=>{n.forEach(p=>p(...c))},i=Object.assign((...c)=>{a(...c)},{unwrap(){const{length:c}=n;if(c===1){delete e[t];return}if(c===2){H(e,t,n[1]);return}n.unshift(1),H(e,t,a)}});de(e,t,()=>i,c=>n.push(c))}function K(e,t){const r=e[t];de(e,t,()=>r,n=>{Object.entries(n).forEach(([o,a])=>{r[o]=a})})}function de(e,t,r,n){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:r,set:n})}function H(e,t,r){Object.defineProperty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r})}const ut={clipboard_text_received:u.looseObject({req_id:u.string(),data:u.nullish(u.string())}),custom_method_invoked:u.looseObject({req_id:u.string(),result:u.optional(u.unknown()),error:u.optional(u.string())}),popup_closed:u.nullish(u.looseObject({button_id:u.nullish(u.string(),()=>{})}),{}),viewport_changed:u.nullish(u.looseObject({height:u.number(),width:u.nullish(u.number(),()=>window.innerWidth),is_state_stable:u.boolean(),is_expanded:u.boolean()}),()=>({height:window.innerHeight,is_state_stable:!0,is_expanded:!0})),theme_changed:u.looseObject({theme_params:h.themeParams()})};function Y(e){if(e.source!==window.parent)return;let t;try{t=u.parse(h.pipeJsonToSchema(h.miniAppsMessage()),e.data)}catch{return}const{eventType:r,eventData:n}=t,o=ut[r];let a;try{a=o?u.parse(o,n):n}catch(i){return v().forceError([`An error occurred processing the "${r}" event from the Telegram application.`,"Please, file an issue here:","https://github.com/Telegram-Mini-Apps/telegram-apps/issues/new/choose"].join(`
|
|
3
|
+
`),t,i)}pt(r,a)}const{on:O,off:he,emit:pt,clear:we}=ct(()=>{const e=window;!e.TelegramGameProxy&&(e.TelegramGameProxy={}),$(e.TelegramGameProxy,"receiveEvent",x),K(e,"TelegramGameProxy"),!e.Telegram&&(e.Telegram={}),!e.Telegram.WebView&&(e.Telegram.WebView={}),$(e.Telegram.WebView,"receiveEvent",x),K(e.Telegram,"WebView"),$(e,"TelegramGameProxy_receiveEvent",x),window.addEventListener("message",Y)},()=>{[["TelegramGameProxy_receiveEvent"],["TelegramGameProxy","receiveEvent"],["Telegram","WebView","receiveEvent"]].forEach(e=>{const t=window;let r=[void 0,t];for(const a of e)if(r=[r[1],r[1][a]],!r[1])return;const[n,o]=r;"unwrap"in o&&(o.unwrap(),n&&n!==t&&!Object.keys(n).length&&delete t[e[0]])}),window.removeEventListener("message",Y)}),M=E.signal(!1),B=E.signal("https://web.telegram.org"),lt=e=>{v().log("Event received:",e)},G=E.computed(M);function _t(e){e!==M()&&(M.set(e),(e?O:he)("*",lt))}const D=E.computed(B);function ft(e){B.set(e),v().log("New target origin set",e)}const y=E.signal((...e)=>{window.parent.postMessage(...e)}),v=E.signal(g.createLogger("Bridge",{bgColor:"#9147ff",textColor:"white",shouldLog:G}));function gt(){we(),[y,B,D,M,G,v].forEach(e=>{e.unsubAll(),"reset"in e&&e.reset()})}const ve=(...e)=>y()(...e);function be(e,t){m(C(e,t),$e(r=>{throw r}))}function C(e,t){v().log("Posting event:",t?{eventType:e,eventData:t}:{eventType:e});const r=window,n=JSON.stringify({eventType:e,eventData:t});return U()?(ve(n,D()),f(void 0)):R(r)?(r.TelegramWebviewProxy.postEvent(e,JSON.stringify(t)),f(void 0)):u.is(u.looseObject({external:u.looseObject({notify:u.function()})}),r)?(r.external.notify(n),f(void 0)):w(new _e)}function L(e,t,r){r||(r={});const{capture:n=()=>!0,postEvent:o=C}=r,[a,i]=g.createCbCollector(),c=new b.BetterPromise(p=>{(Array.isArray(t)?t:[t]).forEach(s=>{a(O(s,l=>{(Array.isArray(t)?n({event:s,payload:l}):n(l))&&p(l)}))})},r).finally(i);return m(o(e,r.params),F(p=>se(p),()=>rt(()=>c,p=>p)))}function mt(e,t,r){const{postEvent:n}=r||{};return b.BetterPromise.fn(()=>m(L(e,t,{...r,postEvent:n?(...o)=>{try{return n(...o),f(void 0)}catch(a){return w(a)}}:C}),A(o=>{throw o},o=>o))())}function dt(e,t){const r=ye(e,t);return typeof r=="function"?b.BetterPromise.fn(()=>m(r,A(n=>{throw n},n=>n))()):r}function ye(e,t){const r=R(window);if(!e)return r||m(T(),F(()=>!1,()=>!0));if(r)return ie(!0);const{timeout:n=100}=t||{};return m(L("web_app_request_theme","theme_changed",{...t,timeout:n}),A(o=>b.TimeoutError.is(o)?f(!1):w(o),()=>f(!0)))}function ht({launchParams:e,onEvent:t,resetPostMessage:r}={}){if(e){const a=typeof e=="string"||e instanceof URLSearchParams?e.toString():h.serializeLaunchParamsQuery({...e,tgWebAppData:void 0})+(e.tgWebAppData?`&tgWebAppData=${encodeURIComponent(e.tgWebAppData.toString())}`:"");try{h.parseLaunchParamsQuery(a)}catch(i){throw new le(a,i)}g.setStorageValue("launchParams",a)}if(U()){if(!t)return;r&&y.reset();const a=y();y.set((...i)=>{const[c]=i,p=()=>{a(...i)};try{const s=u.parse(h.pipeJsonToSchema(h.miniAppsMessage()),c);t([s.eventType,s.eventData],p)}catch{p()}});return}const n=window.TelegramWebviewProxy||{},o=n.postEvent||(()=>{});window.TelegramWebviewProxy={...n,postEvent(a,i){const c=()=>{o(a,i)};t?t([a,i?JSON.parse(i):void 0],c):c()}},v().log("Environment was mocked by the mockTelegramEnv function")}function Pe(e){return({req_id:t})=>t===e}function X(e){return e.split(".").map(Number)}function Ee(e,t){const r=X(e),n=X(t),o=Math.max(r.length,n.length);for(let a=0;a<o;a+=1){const i=r[a]||0,c=n[a]||0;if(i!==c)return i>c?1:-1}return 0}function _(e,t){return Ee(e,t)<=0}function j(e,t,r){if(typeof r=="string"){if(e==="web_app_open_link"){if(t==="try_instant_view")return _("6.4",r);if(t==="try_browser")return _("7.6",r)}if(e==="web_app_set_header_color"&&t==="color")return _("6.9",r);if(e==="web_app_close"&&t==="return_back")return _("7.6",r);if(e==="web_app_setup_main_button"&&t==="has_shine_effect")return _("7.10",r)}switch(e){case"web_app_open_tg_link":case"web_app_open_invoice":case"web_app_setup_back_button":case"web_app_set_background_color":case"web_app_set_header_color":case"web_app_trigger_haptic_feedback":return _("6.1",t);case"web_app_open_popup":return _("6.2",t);case"web_app_close_scan_qr_popup":case"web_app_open_scan_qr_popup":case"web_app_read_text_from_clipboard":return _("6.4",t);case"web_app_switch_inline_query":return _("6.7",t);case"web_app_invoke_custom_method":case"web_app_request_write_access":case"web_app_request_phone":return _("6.9",t);case"web_app_setup_settings_button":return _("6.10",t);case"web_app_biometry_get_info":case"web_app_biometry_open_settings":case"web_app_biometry_request_access":case"web_app_biometry_request_auth":case"web_app_biometry_update_token":return _("7.2",t);case"web_app_setup_swipe_behavior":return _("7.7",t);case"web_app_share_to_story":return _("7.8",t);case"web_app_setup_secondary_button":case"web_app_set_bottom_bar_color":return _("7.10",t);case"web_app_request_safe_area":case"web_app_request_content_safe_area":case"web_app_request_fullscreen":case"web_app_exit_fullscreen":case"web_app_set_emoji_status":case"web_app_add_to_home_screen":case"web_app_check_home_screen":case"web_app_request_emoji_status_access":case"web_app_check_location":case"web_app_open_location_settings":case"web_app_request_file_download":case"web_app_request_location":case"web_app_send_prepared_message":case"web_app_start_accelerometer":case"web_app_start_device_orientation":case"web_app_start_gyroscope":case"web_app_stop_accelerometer":case"web_app_stop_device_orientation":case"web_app_stop_gyroscope":case"web_app_toggle_orientation_lock":return _("8.0",t);case"web_app_device_storage_clear":case"web_app_device_storage_get_key":case"web_app_device_storage_save_key":case"web_app_secure_storage_clear":case"web_app_secure_storage_get_key":case"web_app_secure_storage_restore_key":case"web_app_secure_storage_save_key":return _("9.0",t);case"web_app_hide_keyboard":return _("9.1",t);default:return["iframe_ready","iframe_will_reload","web_app_close","web_app_data_send","web_app_expand","web_app_open_link","web_app_ready","web_app_request_theme","web_app_request_viewport","web_app_setup_main_button","web_app_setup_closing_behavior"].includes(e)}}function wt(e,t="strict"){const r=typeof t=="function"?t:n=>{const{method:o,version:a}=n,i="param"in n?new ue(o,n.param,a):new ce(o,a);if(t==="strict")throw i;return v().forceWarn(i.message)};return(n,o)=>j(n,e)?n==="web_app_set_header_color"&&u.is(u.looseObject({color:u.any()}),o)&&!j(n,"color",e)?r({version:e,method:n,param:"color"}):be(n,o):r({version:e,method:n})}function Se(e,t,r,n){return m(L("web_app_invoke_custom_method","custom_method_invoked",{...n||{},params:{method:e,params:t,req_id:r},capture:Pe(r)}),at(({result:o,error:a})=>a?se(new fe(a)):ie(o)))}function vt(e,t,r,n){return b.BetterPromise.fn(()=>m(Se(e,t,r,n),A(o=>{throw o},o=>o))())}function bt(){Object.hasOwn||(Object.hasOwn=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)})}function z(e){return W(()=>decodeURIComponent(atob(e).replace(/-/g,"+").replace(/_/g,"/").split("").map(t=>"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)).join("")),t=>t)}const yt=g.eitherFnToSimple(z);function J(e){return btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(t,r)=>String.fromCharCode(parseInt(`0x${r}`)))).replace(/\+/g,"-").replace(/\//g,"_")}var Pt=function(e){return W(function(){return JSON.parse(e)},Fe)};function ke(e){const t=J(typeof e=="string"?e:JSON.stringify(e));return t.length>512?w(new Error("Value is too long for start parameter")):f(t)}const Et=g.eitherFnToSimple(ke);function St(e,t){return g.eitherGet(Te(e,typeof t=="function"?r=>W(()=>t(r),n=>n):t))}function Te(e,t){return m(z(e),Ie(r=>t?typeof t=="function"?t(r):Pt(r):f(r)))}function kt(e){return J(e).length<=512}Object.defineProperty(exports,"CancelledError",{enumerable:!0,get:()=>b.CancelledError});Object.defineProperty(exports,"TimeoutError",{enumerable:!0,get:()=>b.TimeoutError});Object.defineProperty(exports,"createLogger",{enumerable:!0,get:()=>g.createLogger});Object.defineProperty(exports,"deepSnakeToCamelObjKeys",{enumerable:!0,get:()=>g.deepSnakeToCamelObjKeys});exports.InvalidLaunchParamsError=le;exports.InvokeCustomMethodFailedError=fe;exports.LaunchParamsRetrieveError=pe;exports.MethodParameterUnsupportedError=ue;exports.MethodUnsupportedError=ce;exports.UnknownEnvError=_e;exports.applyPolyfills=bt;exports.captureSameReq=Pe;exports.compareVersions=Ee;exports.createPostEvent=wt;exports.createStartParam=Et;exports.createStartParamFp=ke;exports.debug=G;exports.decodeBase64Url=yt;exports.decodeBase64UrlFp=z;exports.decodeStartParam=St;exports.decodeStartParamFp=Te;exports.emitEvent=x;exports.encodeBase64Url=J;exports.hasWebviewProxy=R;exports.invokeCustomMethod=vt;exports.invokeCustomMethodFp=Se;exports.isIframe=U;exports.isSafeToCreateStartParam=kt;exports.isTMA=dt;exports.isTMAFp=ye;exports.logger=v;exports.mockTelegramEnv=ht;exports.off=he;exports.offAll=we;exports.on=O;exports.postEvent=be;exports.postEventFp=C;exports.postMessage=ve;exports.postMessageImpl=y;exports.request=mt;exports.requestFp=L;exports.resetGlobals=gt;exports.retrieveLaunchParams=ot;exports.retrieveLaunchParamsFp=ge;exports.retrieveRawInitData=st;exports.retrieveRawInitDataFp=me;exports.retrieveRawLaunchParams=it;exports.retrieveRawLaunchParamsFp=T;exports.setDebug=_t;exports.setTargetOrigin=ft;exports.supports=j;exports.targetOrigin=D;
|
|
2
4
|
//# sourceMappingURL=index.cjs.map
|