Files
discord-decomp/modules/links/native/handleURL.tsx
T
2026-11-01 12:12:55 +02:00

326 lines
10 KiB
TypeScript

// Metro module 3881 (f3882).
import ActionSheetStore from "../../action_sheet/native/ActionSheetStore";
import { WebBrowserType } from "../../../Constants";
import Logger from "../../debug/Logger";
import { LINKING_SCHEMAS_VALUES } from "./LinkingSchemas";
import { LINKING_WHITELIST_VALUES } from "./LinkingWhitelist";
import Module3888 from "../../../_bundle/Module3888";
import { presentFailedToast } from "../../toast/native/ToastUtils";
import { intl, t } from "../../../intl/index.native";
import { getBrowserManagerSelectedBrowser, browserManagerOpenUrl } from "./BrowserManager";
import { isIOS } from "../../../utils/PlatformUtils";
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
import Url from "../../../_bundle/Url_1469";
import parseURL from "../../../utils/native/parseURL";
import handleSupportedURL from "./handleSupportedURL";
function $mk114414($env) {
return function tryHandleUniversalLink(a0) {
let env31324 = {
$parent: $env
};
env31324[0] = a0;
return new Promise((resolve) => {
const r2 = env31324.$parent;
let env31918 = {
$parent: r2
};
env31918[0] = resolve;
(0, r2[1])(r2[2][5]).tryOpenUrlAsUniversalLink(env31324[0]).then(() => {
env31918.$parent[7].info("Universal link opened successfully.");
(0, env31918[0])(true);
}).catch(() => {
env31918.$parent[7].info("URL is not a handled universal link.");
(0, env31918[0])(false);
});
});
};
}
function $mk114415($env) {
return function tryHandleCustomScheme(a0) {
let r63;
const r1 = $env;
let env31325 = {
$parent: $env
};
let r2 = a0;
env31325[0] = a0;
for (const item of LINKING_SCHEMAS_VALUES) {
const { regex, protocol } = item;
const r35 = regex.exec(r2);
const r37 = r35 == null ? void 0 : r35[1];
if (r37 != null) {
const r41 = protocol + r37;
r2 = r41;
env31325[0] = r41;
}
}
const r48 = r2.indexOf("://") !== -1 ? r2.split("://")[0] : null;
if (r48 !== "http" && r48 !== "https") {
c2204_7.info("tryHandleCustomScheme", r2);
r63 = new Promise((resolve) => {
const r2 = env31325.$parent;
let env31919 = {
$parent: r2
};
env31919[0] = resolve;
(0, r2[1])(r2[2][5]).tryOpenScheme(env31325[0]).then(() => {
env31919.$parent[7].info("Custom scheme opened successfully.");
(0, env31919[0])(true);
}).catch(() => {
env31919.$parent[7].info("Custom scheme failed to open.");
(0, env31919[0])(false);
});
});
} else {
r63 = new Promise($mk117842(r1));
}
return r63;
};
}
function $mk114416($env) {
return function tryHandleWhitelistedURL(a0) {
const r0 = $env;
let env31326 = {
$parent: $env
};
env31326[0] = a0;
const _loop = function _loop(c31920_0) {
return env31326[1].exec(env31326[0]) !== null ? {
v: new Promise((c32113_0) => {
env31326.$parent[4].canOpenURL(c31920_0).then((result) => {
const r3 = env31326.$parent;
if (result) {
(0, r3[1])(r3[2][7]).performURLNavigation(env31326[0]);
c32113_0(true);
} else {
r3[7].info("Whitelisted URL, but cannot be opened (app likely not installed).");
c32113_0(false);
}
}).catch((a0) => {
env31326.$parent[7].info("Whitelisted URL encountered an error.", {
error: a0
});
c32113_0(false);
});
})
} : 0;
};
for (const item of LINKING_WHITELIST_VALUES) {
env31326[1] = item.regex;
const r31 = _loop(item.protocol);
if (r31 === 0) {
continue;
}
if (!r31) {
continue;
}
return r31.v;
}
return new Promise($mk117845(r0));
};
}
function $mk117842($env) {
return (a0) => {
c2204_7.info("URL is not a custom scheme.");
a0(false);
};
}
function $mk117845($env) {
return (a0) => {
c2204_7.info("URL is not whitelisted.");
a0(false);
};
}
let c2204_7;
let env2204 = {};
const sanitizeURLPart = function sanitizeURLPart(a0) {
return a0 != null ? a0.replace(/[^\x00-\x7F]+/g, (a0) => encodeURIComponent(a0)) : a0;
};
c2204_7 = new Logger("handleURL");
export default async function handleURL(c24875_0, c24875_1, c24875_2) {
let forceExternalBrowser;
let c24875_3, c24875_4, c24875_5;
let c24875_6 = 0;
const r13 = env2204;
try {
let env29236;
c24875_4 = r13;
const r19 = env29236 = {
$parent: r13
};
c24875_3 = r19;
env29236[2] = void 0;
env29236[3] = void 0;
env29236[0] = c24875_0;
env29236[1] = c24875_1;
let r40 = c24875_2;
if (r40 === void 0) {
r40 = {};
}
L15: {
L12: {
const allowExternal = r40.allowExternal;
if (allowExternal !== void 0) {
env29236[2] = allowExternal;
forceExternalBrowser = r40.forceExternalBrowser;
if (forceExternalBrowser !== void 0) {
break L12;
}
} else {
env29236[2] = true;
forceExternalBrowser = r40.forceExternalBrowser;
if (forceExternalBrowser !== void 0) {
break L12;
}
}
env29236[3] = false;
env29236[5] = void 0;
env29236[6] = void 0;
env29236[7] = void 0;
env29236[8] = void 0;
env29236[9] = void 0;
env29236[4] = function openInBrowser() {
if (Module3888.sanitizeUrl(env29236[0]) != null) {
let SAFARI = WebBrowserType.SAFARI;
if (!(!env29236[0].startsWith("https:") && !env29236[0].startsWith("http:"))) {
let r40 = getBrowserManagerSelectedBrowser();
let r41 = env29236[1];
if (r41 == null) {
r41 = r40;
}
const r42 = env29236[3] && r41 === WebBrowserType.IN_APP;
SAFARI = r41;
if (r42) {
if (r40 === WebBrowserType.IN_APP) {
r40 = isIOS() ? WebBrowserType.SAFARI : WebBrowserType.CHROME;
}
SAFARI = r40;
}
}
if (WebBrowserType.IN_APP === SAFARI) {
browserManagerOpenUrl(env29236[0], WebBrowserType.IN_APP).catch(() => {
presentFailedToast(`${intl.string(t.HryVrx)} ${env29236[0]}`);
});
if (isIOS() && ActionSheetStore.isOpen()) {
ActionSheetActionCreators.hideAllActionSheets();
}
} else if (WebBrowserType.CHROME === SAFARI) {
browserManagerOpenUrl(env29236[0], WebBrowserType.CHROME).catch(() => {
presentFailedToast(`${intl.string(t.HryVrx)} ${env29236[0]}`);
});
} else {
WebBrowserType.SAFARI;
browserManagerOpenUrl(env29236[0], WebBrowserType.SAFARI);
}
} else {
presentFailedToast(intl.string(t.XiqzAp));
}
};
break L15;
}
env29236[3] = forceExternalBrowser;
env29236[5] = void 0;
env29236[6] = void 0;
env29236[7] = void 0;
env29236[8] = void 0;
env29236[9] = void 0;
env29236[4] = function openInBrowser() {
if (Module3888.sanitizeUrl(env29236[0]) != null) {
let SAFARI = WebBrowserType.SAFARI;
if (!(!env29236[0].startsWith("https:") && !env29236[0].startsWith("http:"))) {
let r40 = getBrowserManagerSelectedBrowser();
let r41 = env29236[1];
if (r41 == null) {
r41 = r40;
}
const r42 = env29236[3] && r41 === WebBrowserType.IN_APP;
SAFARI = r41;
if (r42) {
if (r40 === WebBrowserType.IN_APP) {
r40 = isIOS() ? WebBrowserType.SAFARI : WebBrowserType.CHROME;
}
SAFARI = r40;
}
}
if (WebBrowserType.IN_APP === SAFARI) {
browserManagerOpenUrl(env29236[0], WebBrowserType.IN_APP).catch(() => {
presentFailedToast(`${intl.string(t.HryVrx)} ${env29236[0]}`);
});
if (isIOS() && ActionSheetStore.isOpen()) {
ActionSheetActionCreators.hideAllActionSheets();
}
} else if (WebBrowserType.CHROME === SAFARI) {
browserManagerOpenUrl(env29236[0], WebBrowserType.CHROME).catch(() => {
presentFailedToast(`${intl.string(t.HryVrx)} ${env29236[0]}`);
});
} else {
WebBrowserType.SAFARI;
browserManagerOpenUrl(env29236[0], WebBrowserType.SAFARI);
}
} else {
presentFailedToast(intl.string(t.XiqzAp));
}
};
}
await void 0;
if (env29236[3]) {
(0, env29236[4])();
} else {
if (!/^[a-zA-Z0-9+-.]+:/.test(env29236[0])) {
env29236[0] = "https://" + env29236[0];
}
if (/^https?:/i.test(env29236[0])) {
c24875_6 = 1;
env29236[5] = Url.parse(env29236[0]);
const r103 = env29236[5];
r103.pathname = sanitizeURLPart(env29236[5].pathname);
env29236[5].search = sanitizeURLPart(env29236[5].search);
env29236[5].hash = sanitizeURLPart(env29236[5].hash);
env29236[0] = Url.format(env29236[5]);
c24875_6 = 0;
}
env29236[6] = parseURL(env29236[0]).payload;
if (!handleSupportedURL({
payload: env29236[6],
safe: true
})) {
if (env29236[2]) {
const r126 = env29236[0];
env29236[7] = await $mk114414(env2204)(r126);
if (!env29236[7]) {
const r151 = env29236[0];
env29236[8] = await $mk114415(env2204)(r151);
if (!env29236[8]) {
const r176 = env29236[0];
env29236[9] = await $mk114416(env2204)(r176);
if (!env29236[9]) {
(0, env29236[4])();
}
}
}
}
}
}
} catch ($e) {
const r36 = $e;
let r8 = r36;
c24875_5 = r36;
if (c24875_6 !== 0) {
while (true) {
try {
c24875_6 = 0;
} catch (r206) {
r8 = r206;
c24875_5 = r206;
if (c24875_6 === 0) {
break;
}
continue;
}
return void 0;
}
}
throw r8;
}
};