diff --git a/.changeset/yellow-adults-attack.md b/.changeset/yellow-adults-attack.md new file mode 100644 index 000000000..94e99601d --- /dev/null +++ b/.changeset/yellow-adults-attack.md @@ -0,0 +1,5 @@ +--- +"@tma.js/bridge": patch +--- + +Rework the `hasWebviewProxy` function considering that the passed value is more likely to be window object diff --git a/packages/bridge/src/env/hasWebviewProxy.test.ts b/packages/bridge/src/env/hasWebviewProxy.test.ts index de0dabc62..65d2666a0 100644 --- a/packages/bridge/src/env/hasWebviewProxy.test.ts +++ b/packages/bridge/src/env/hasWebviewProxy.test.ts @@ -7,6 +7,7 @@ it('should return true if passed object contains path property "TelegramWebviewP expect(hasWebviewProxy({ TelegramWebviewProxy: {} })).toBe(false); expect(hasWebviewProxy({ TelegramWebviewProxy: { postEvent: [] } })).toBe(false); expect(hasWebviewProxy({ + a: 'b', TelegramWebviewProxy: { postEvent: () => { }, diff --git a/packages/bridge/src/env/hasWebviewProxy.ts b/packages/bridge/src/env/hasWebviewProxy.ts index b93398cbe..6b6df1b85 100644 --- a/packages/bridge/src/env/hasWebviewProxy.ts +++ b/packages/bridge/src/env/hasWebviewProxy.ts @@ -1,4 +1,4 @@ -import { looseObject, function as fn, is } from 'valibot'; +import * as v from 'valibot'; /** * Returns true in case, passed value contains path `TelegramWebviewProxy.postEvent` property and @@ -10,8 +10,8 @@ export function hasWebviewProxy(value: T): value is T & { postEvent: (...args: unknown[]) => unknown; }; } { - return is( - looseObject({ TelegramWebviewProxy: looseObject({ postEvent: fn() }) }), - value, + return typeof value === 'object' && !!value && !Array.isArray(value) && v.is( + v.looseObject({ TelegramWebviewProxy: v.looseObject({ postEvent: v.function() }) }), + { TelegramWebviewProxy: (value as Record).TelegramWebviewProxy }, ); }