@wowlabtech/mini-app-adapter 0.1.0 → 0.2.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/index.cjs +165 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +28 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.js +170 -1
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
package/dist/index.cjs
CHANGED
|
@@ -739,6 +739,25 @@ var BaseMiniAppAdapter = class {
|
|
|
739
739
|
return null;
|
|
740
740
|
}
|
|
741
741
|
async requestNotificationsPermission() {
|
|
742
|
+
if (typeof Notification === "undefined" || typeof Notification.requestPermission !== "function") {
|
|
743
|
+
return false;
|
|
744
|
+
}
|
|
745
|
+
try {
|
|
746
|
+
const permission = await Notification.requestPermission();
|
|
747
|
+
return permission === "granted";
|
|
748
|
+
} catch (error) {
|
|
749
|
+
console.warn("[tvm-app-adapter] requestNotificationsPermission fallback failed:", error);
|
|
750
|
+
return false;
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
async addToHomeScreen() {
|
|
754
|
+
return false;
|
|
755
|
+
}
|
|
756
|
+
async checkHomeScreenStatus() {
|
|
757
|
+
return "unknown";
|
|
758
|
+
}
|
|
759
|
+
async denyNotifications() {
|
|
760
|
+
console.warn("[tvm-app-adapter] denyNotifications fallback is not supported in this environment.");
|
|
742
761
|
return false;
|
|
743
762
|
}
|
|
744
763
|
enableVerticalSwipes() {
|
|
@@ -1464,6 +1483,50 @@ var TelegramMiniAppAdapter = class extends BaseMiniAppAdapter {
|
|
|
1464
1483
|
async shareStory(mediaUrl, options) {
|
|
1465
1484
|
(0, import_sdk.shareStory)(mediaUrl, options);
|
|
1466
1485
|
}
|
|
1486
|
+
async addToHomeScreen() {
|
|
1487
|
+
const isAvailable = typeof import_sdk.addToHomeScreen?.isAvailable === "function" ? import_sdk.addToHomeScreen.isAvailable() : true;
|
|
1488
|
+
if (!isAvailable) {
|
|
1489
|
+
return super.addToHomeScreen();
|
|
1490
|
+
}
|
|
1491
|
+
return new Promise((resolve) => {
|
|
1492
|
+
const cleanup = () => {
|
|
1493
|
+
(0, import_sdk.off)("home_screen_added", handleSuccess);
|
|
1494
|
+
(0, import_sdk.off)("home_screen_failed", handleFail);
|
|
1495
|
+
};
|
|
1496
|
+
const handleSuccess = () => {
|
|
1497
|
+
cleanup();
|
|
1498
|
+
resolve(true);
|
|
1499
|
+
};
|
|
1500
|
+
const handleFail = () => {
|
|
1501
|
+
cleanup();
|
|
1502
|
+
resolve(false);
|
|
1503
|
+
};
|
|
1504
|
+
(0, import_sdk.on)("home_screen_added", handleSuccess);
|
|
1505
|
+
(0, import_sdk.on)("home_screen_failed", handleFail);
|
|
1506
|
+
try {
|
|
1507
|
+
(0, import_sdk.addToHomeScreen)();
|
|
1508
|
+
} catch (error) {
|
|
1509
|
+
cleanup();
|
|
1510
|
+
console.warn("[tvm-app-adapter] Telegram addToHomeScreen failed:", error);
|
|
1511
|
+
resolve(false);
|
|
1512
|
+
}
|
|
1513
|
+
});
|
|
1514
|
+
}
|
|
1515
|
+
async checkHomeScreenStatus() {
|
|
1516
|
+
try {
|
|
1517
|
+
const status = await (0, import_sdk.checkHomeScreenStatus)();
|
|
1518
|
+
if (typeof status === "string") {
|
|
1519
|
+
return status;
|
|
1520
|
+
}
|
|
1521
|
+
if (typeof status === "boolean") {
|
|
1522
|
+
return status ? "added" : "not_added";
|
|
1523
|
+
}
|
|
1524
|
+
return "unknown";
|
|
1525
|
+
} catch (error) {
|
|
1526
|
+
console.warn("[tvm-app-adapter] Telegram checkHomeScreenStatus failed:", error);
|
|
1527
|
+
return "unknown";
|
|
1528
|
+
}
|
|
1529
|
+
}
|
|
1467
1530
|
async requestPhone() {
|
|
1468
1531
|
const contactFeature = ensureFeature(import_sdk.requestContact);
|
|
1469
1532
|
if (!contactFeature.ok) {
|
|
@@ -1803,6 +1866,39 @@ var VKMiniAppAdapter = class extends BaseMiniAppAdapter {
|
|
|
1803
1866
|
return false;
|
|
1804
1867
|
}
|
|
1805
1868
|
}
|
|
1869
|
+
async addToHomeScreen() {
|
|
1870
|
+
const supported = await this.supportsBridgeMethod("VKWebAppAddToHomeScreen");
|
|
1871
|
+
if (!supported) {
|
|
1872
|
+
console.warn("[tvm-app-adapter] VK addToHomeScreen not supported");
|
|
1873
|
+
return super.addToHomeScreen();
|
|
1874
|
+
}
|
|
1875
|
+
try {
|
|
1876
|
+
const response = await import_vk_bridge.default.send("VKWebAppAddToHomeScreen");
|
|
1877
|
+
if (response && typeof response === "object" && "result" in response) {
|
|
1878
|
+
return Boolean(response.result);
|
|
1879
|
+
}
|
|
1880
|
+
return true;
|
|
1881
|
+
} catch (error) {
|
|
1882
|
+
console.warn("[tvm-app-adapter] VK addToHomeScreen failed:", error);
|
|
1883
|
+
return false;
|
|
1884
|
+
}
|
|
1885
|
+
}
|
|
1886
|
+
async denyNotifications() {
|
|
1887
|
+
const supported = await this.supportsBridgeMethod("VKWebAppDenyNotifications");
|
|
1888
|
+
if (!supported) {
|
|
1889
|
+
return super.denyNotifications();
|
|
1890
|
+
}
|
|
1891
|
+
try {
|
|
1892
|
+
const response = await import_vk_bridge.default.send("VKWebAppDenyNotifications");
|
|
1893
|
+
if (response && typeof response === "object" && "result" in response) {
|
|
1894
|
+
return Boolean(response.result);
|
|
1895
|
+
}
|
|
1896
|
+
return true;
|
|
1897
|
+
} catch (error) {
|
|
1898
|
+
console.warn("[tvm-app-adapter] VK deny notifications failed:", error);
|
|
1899
|
+
return false;
|
|
1900
|
+
}
|
|
1901
|
+
}
|
|
1806
1902
|
async scanQRCode(options) {
|
|
1807
1903
|
const supportsQrScanner = await this.supportsBridgeMethod("VKWebAppOpenCodeReader");
|
|
1808
1904
|
if (!supportsQrScanner) {
|
|
@@ -1838,6 +1934,25 @@ var VKMiniAppAdapter = class extends BaseMiniAppAdapter {
|
|
|
1838
1934
|
};
|
|
1839
1935
|
await import_vk_bridge.default.send("VKWebAppShowStoryBox", bridgeOptions);
|
|
1840
1936
|
}
|
|
1937
|
+
shareUrl(url, text) {
|
|
1938
|
+
void this.shareUrlInternal(url, text);
|
|
1939
|
+
}
|
|
1940
|
+
async shareUrlInternal(url, text) {
|
|
1941
|
+
const supported = await this.supportsBridgeMethod("VKWebAppShare");
|
|
1942
|
+
if (!supported) {
|
|
1943
|
+
super.shareUrl(url, text ?? "");
|
|
1944
|
+
return;
|
|
1945
|
+
}
|
|
1946
|
+
try {
|
|
1947
|
+
await import_vk_bridge.default.send("VKWebAppShare", {
|
|
1948
|
+
link: url,
|
|
1949
|
+
...text ? { text } : {}
|
|
1950
|
+
});
|
|
1951
|
+
} catch (error) {
|
|
1952
|
+
console.warn("[tvm-app-adapter] VK shareUrl failed:", error);
|
|
1953
|
+
super.shareUrl(url, text ?? "");
|
|
1954
|
+
}
|
|
1955
|
+
}
|
|
1841
1956
|
async downloadFile(url, filename) {
|
|
1842
1957
|
const supported = await this.supportsBridgeMethod("VKWebAppDownloadFile");
|
|
1843
1958
|
if (!supported) {
|
|
@@ -2196,6 +2311,13 @@ var WebMiniAppAdapter = class extends BaseMiniAppAdapter {
|
|
|
2196
2311
|
languageCode: navigator.language,
|
|
2197
2312
|
isWebView: false
|
|
2198
2313
|
});
|
|
2314
|
+
__publicField(this, "deferredPrompt", null);
|
|
2315
|
+
if (typeof window !== "undefined") {
|
|
2316
|
+
window.addEventListener("beforeinstallprompt", (event) => {
|
|
2317
|
+
event.preventDefault();
|
|
2318
|
+
this.deferredPrompt = event;
|
|
2319
|
+
});
|
|
2320
|
+
}
|
|
2199
2321
|
}
|
|
2200
2322
|
async downloadFile(url, filename) {
|
|
2201
2323
|
try {
|
|
@@ -2344,6 +2466,49 @@ var WebMiniAppAdapter = class extends BaseMiniAppAdapter {
|
|
|
2344
2466
|
}
|
|
2345
2467
|
});
|
|
2346
2468
|
}
|
|
2469
|
+
shareUrl(url, text) {
|
|
2470
|
+
if (navigator.share) {
|
|
2471
|
+
try {
|
|
2472
|
+
navigator.share({ title: text, text, url });
|
|
2473
|
+
return;
|
|
2474
|
+
} catch (err) {
|
|
2475
|
+
console.warn("Share cancelled or failed:", err);
|
|
2476
|
+
}
|
|
2477
|
+
}
|
|
2478
|
+
const payload = text ? `${text}
|
|
2479
|
+
${url}` : url;
|
|
2480
|
+
this.copyTextToClipboard(payload).catch((err) => {
|
|
2481
|
+
console.warn("Share fallback (clipboard) failed:", err);
|
|
2482
|
+
});
|
|
2483
|
+
}
|
|
2484
|
+
async addToHomeScreen() {
|
|
2485
|
+
const isAndroid = /android/i.test(navigator.userAgent);
|
|
2486
|
+
if (!isAndroid || !this.deferredPrompt) {
|
|
2487
|
+
return super.addToHomeScreen();
|
|
2488
|
+
}
|
|
2489
|
+
try {
|
|
2490
|
+
this.deferredPrompt.prompt();
|
|
2491
|
+
const choice = await this.deferredPrompt.userChoice;
|
|
2492
|
+
this.deferredPrompt = null;
|
|
2493
|
+
return choice?.outcome === "accepted";
|
|
2494
|
+
} catch (error) {
|
|
2495
|
+
console.warn("[tvm-app-adapter] Web addToHomeScreen failed:", error);
|
|
2496
|
+
this.deferredPrompt = null;
|
|
2497
|
+
return false;
|
|
2498
|
+
}
|
|
2499
|
+
}
|
|
2500
|
+
async checkHomeScreenStatus() {
|
|
2501
|
+
try {
|
|
2502
|
+
const isStandalone = typeof window !== "undefined" && window.matchMedia?.("(display-mode: standalone)").matches || // iOS Safari specific flag
|
|
2503
|
+
typeof navigator !== "undefined" && navigator.standalone === true;
|
|
2504
|
+
if (isStandalone) {
|
|
2505
|
+
return "added";
|
|
2506
|
+
}
|
|
2507
|
+
return "unknown";
|
|
2508
|
+
} catch {
|
|
2509
|
+
return "unknown";
|
|
2510
|
+
}
|
|
2511
|
+
}
|
|
2347
2512
|
};
|
|
2348
2513
|
|
|
2349
2514
|
// src/adapters/index.ts
|