@keplr-wallet/wc-qrcode-modal 0.12.21 → 0.12.22-rc.0
Sign up to get free protection for your applications and to get access to all the features.
- package/build/index.d.ts +7 -2
- package/build/index.js +52 -6
- package/build/index.js.map +1 -1
- package/build/modal.js +12 -11
- package/build/modal.js.map +1 -1
- package/build/util.d.ts +2 -0
- package/build/util.js +29 -0
- package/build/util.js.map +1 -0
- package/package.json +6 -5
- package/src/index.tsx +45 -4
- package/src/modal.tsx +9 -11
- package/src/util.ts +43 -0
package/build/index.d.ts
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
import { ModalUIOptions } from "./modal";
|
2
|
-
|
2
|
+
import SignClient from "@walletconnect/sign-client";
|
3
|
+
import { ProposalTypes } from "@walletconnect/types";
|
4
|
+
import SessionProperties = ProposalTypes.SessionProperties;
|
5
|
+
export declare class KeplrQRCodeModalV2 {
|
6
|
+
readonly signClient: SignClient;
|
3
7
|
protected readonly uiOptions?: ModalUIOptions | undefined;
|
4
|
-
constructor(uiOptions?: ModalUIOptions | undefined);
|
8
|
+
constructor(signClient: SignClient, uiOptions?: ModalUIOptions | undefined);
|
9
|
+
connect(chainIds: string[]): Promise<SessionProperties | undefined>;
|
5
10
|
open(uri: string, cb: any): void;
|
6
11
|
close(): void;
|
7
12
|
}
|
package/build/index.js
CHANGED
@@ -1,19 +1,65 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9
|
+
});
|
10
|
+
};
|
2
11
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
12
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
13
|
};
|
5
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
15
|
+
exports.KeplrQRCodeModalV2 = void 0;
|
7
16
|
const react_1 = __importDefault(require("react"));
|
8
17
|
const react_dom_1 = __importDefault(require("react-dom"));
|
9
18
|
const modal_1 = require("./modal");
|
10
|
-
class
|
11
|
-
constructor(uiOptions) {
|
19
|
+
class KeplrQRCodeModalV2 {
|
20
|
+
constructor(signClient, uiOptions) {
|
21
|
+
this.signClient = signClient;
|
12
22
|
this.uiOptions = uiOptions;
|
13
23
|
}
|
24
|
+
connect(chainIds) {
|
25
|
+
return __awaiter(this, void 0, void 0, function* () {
|
26
|
+
const { uri, approval } = yield this.signClient.connect({
|
27
|
+
requiredNamespaces: {
|
28
|
+
cosmos: {
|
29
|
+
methods: [
|
30
|
+
"cosmos_getAccounts",
|
31
|
+
"cosmos_signDirect",
|
32
|
+
"cosmos_signAmino",
|
33
|
+
"keplr_getKey",
|
34
|
+
"keplr_signAmino",
|
35
|
+
"keplr_signDirect",
|
36
|
+
"keplr_signArbitrary",
|
37
|
+
"keplr_enable",
|
38
|
+
],
|
39
|
+
chains: [...chainIds.map((chainId) => `cosmos:${chainId}`)],
|
40
|
+
events: ["accountsChanged", "chainChanged", "keplr_accountsChanged"],
|
41
|
+
},
|
42
|
+
},
|
43
|
+
});
|
44
|
+
if (!uri) {
|
45
|
+
throw new Error("No uri");
|
46
|
+
}
|
47
|
+
try {
|
48
|
+
this.open(uri, () => { });
|
49
|
+
const session = yield approval();
|
50
|
+
return session.sessionProperties;
|
51
|
+
}
|
52
|
+
catch (e) {
|
53
|
+
console.error(e);
|
54
|
+
}
|
55
|
+
finally {
|
56
|
+
this.close();
|
57
|
+
}
|
58
|
+
});
|
59
|
+
}
|
14
60
|
open(uri, cb) {
|
15
61
|
const wrapper = document.createElement("div");
|
16
|
-
wrapper.setAttribute("id", "keplr-qrcode-modal-
|
62
|
+
wrapper.setAttribute("id", "keplr-qrcode-modal-v2");
|
17
63
|
document.body.appendChild(wrapper);
|
18
64
|
react_dom_1.default.render(react_1.default.createElement(modal_1.Modal, { uri: uri, close: () => {
|
19
65
|
this.close();
|
@@ -21,11 +67,11 @@ class KeplrQRCodeModalV1 {
|
|
21
67
|
}, uiOptions: this.uiOptions }), wrapper);
|
22
68
|
}
|
23
69
|
close() {
|
24
|
-
const wrapper = document.getElementById("keplr-qrcode-modal-
|
70
|
+
const wrapper = document.getElementById("keplr-qrcode-modal-v2");
|
25
71
|
if (wrapper) {
|
26
72
|
document.body.removeChild(wrapper);
|
27
73
|
}
|
28
74
|
}
|
29
75
|
}
|
30
|
-
exports.
|
76
|
+
exports.KeplrQRCodeModalV2 = KeplrQRCodeModalV2;
|
31
77
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,kDAA0B;AAC1B,0DAAiC;AACjC,mCAAgD;AAKhD,MAAa,kBAAkB;IAC7B,YACkB,UAAsB,EACnB,SAA0B;QAD7B,eAAU,GAAV,UAAU,CAAY;QACnB,cAAS,GAAT,SAAS,CAAiB;IAC5C,CAAC;IAEE,OAAO,CAAC,QAAkB;;YAC9B,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;gBACtD,kBAAkB,EAAE;oBAClB,MAAM,EAAE;wBACN,OAAO,EAAE;4BACP,oBAAoB;4BACpB,mBAAmB;4BACnB,kBAAkB;4BAClB,cAAc;4BACd,iBAAiB;4BACjB,kBAAkB;4BAClB,qBAAqB;4BACrB,cAAc;yBACf;wBACD,MAAM,EAAE,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;wBAC3D,MAAM,EAAE,CAAC,iBAAiB,EAAE,cAAc,EAAE,uBAAuB,CAAC;qBACrE;iBACF;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,GAAG,EAAE;gBACR,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC3B;YAED,IAAI;gBACF,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBACzB,MAAM,OAAO,GAAG,MAAM,QAAQ,EAAE,CAAC;gBACjC,OAAO,OAAO,CAAC,iBAAiB,CAAC;aAClC;YAAC,OAAO,CAAC,EAAE;gBACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;aAClB;oBAAS;gBACR,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;QACH,CAAC;KAAA;IAED,IAAI,CAAC,GAAW,EAAE,EAAO;QACvB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,uBAAuB,CAAC,CAAC;QACpD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAEnC,mBAAQ,CAAC,MAAM,CACb,8BAAC,aAAK,IACJ,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,GAAG,EAAE;gBACV,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,EAAE,EAAE,CAAC;YACP,CAAC,EACD,SAAS,EAAE,IAAI,CAAC,SAAS,GACzB,EACF,OAAO,CACR,CAAC;IACJ,CAAC;IAED,KAAK;QACH,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC;QACjE,IAAI,OAAO,EAAE;YACX,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;SACpC;IACH,CAAC;CACF;AAjED,gDAiEC"}
|
package/build/modal.js
CHANGED
@@ -28,31 +28,32 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
28
28
|
Object.defineProperty(exports, "__esModule", { value: true });
|
29
29
|
exports.Modal = void 0;
|
30
30
|
const react_1 = __importStar(require("react"));
|
31
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
32
|
-
// @ts-ignore
|
33
31
|
const qrcode_react_1 = __importDefault(require("qrcode.react"));
|
34
|
-
const
|
32
|
+
const util_1 = require("./util");
|
35
33
|
const Modal = ({ uiOptions, uri, close }) => {
|
36
34
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t;
|
37
|
-
const [checkMobile] = (0, react_1.useState)(() => (0,
|
38
|
-
const [checkAndroid] = (0, react_1.useState)(() => (0,
|
35
|
+
const [checkMobile] = (0, react_1.useState)(() => (0, util_1.isMobile)());
|
36
|
+
const [checkAndroid] = (0, react_1.useState)(() => (0, util_1.isAndroid)());
|
37
|
+
const saveMobileLinkInfo = (info) => {
|
38
|
+
localStorage.setItem("wallet-connect-v2-mobile-link", JSON.stringify(info));
|
39
|
+
};
|
39
40
|
const navigateToAppURL = (0, react_1.useMemo)(() => {
|
40
41
|
if (checkMobile) {
|
41
42
|
if (checkAndroid) {
|
42
43
|
// Save the mobile link.
|
43
|
-
|
44
|
+
saveMobileLinkInfo({
|
44
45
|
name: "Keplr",
|
45
|
-
href: "intent://
|
46
|
+
href: "intent://wcV2#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;",
|
46
47
|
});
|
47
|
-
return `intent://
|
48
|
+
return `intent://wcV2?${uri}#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;`;
|
48
49
|
}
|
49
50
|
else {
|
50
51
|
// Save the mobile link.
|
51
|
-
|
52
|
+
saveMobileLinkInfo({
|
52
53
|
name: "Keplr",
|
53
|
-
href:
|
54
|
+
href: `keplrwallet://wcV2`,
|
54
55
|
});
|
55
|
-
return `keplrwallet://
|
56
|
+
return `keplrwallet://wcV2?${uri}`;
|
56
57
|
}
|
57
58
|
}
|
58
59
|
}, [checkAndroid, checkMobile, uri]);
|
package/build/modal.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAMe;AACf,
|
1
|
+
{"version":3,"file":"modal.js","sourceRoot":"","sources":["../src/modal.tsx"],"names":[],"mappings":"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"}
|
package/build/util.d.ts
ADDED
package/build/util.js
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.isMobile = exports.isAndroid = void 0;
|
4
|
+
const detect_browser_1 = require("detect-browser");
|
5
|
+
function detectEnv(userAgent) {
|
6
|
+
return (0, detect_browser_1.detect)(userAgent);
|
7
|
+
}
|
8
|
+
function detectOS() {
|
9
|
+
const env = detectEnv();
|
10
|
+
return env && env.os ? env.os : undefined;
|
11
|
+
}
|
12
|
+
function isAndroid() {
|
13
|
+
const os = detectOS();
|
14
|
+
return os ? os.toLowerCase().includes("android") : false;
|
15
|
+
}
|
16
|
+
exports.isAndroid = isAndroid;
|
17
|
+
function isIOS() {
|
18
|
+
const os = detectOS();
|
19
|
+
return os
|
20
|
+
? os.toLowerCase().includes("ios") ||
|
21
|
+
(os.toLowerCase().includes("mac") && navigator.maxTouchPoints > 1)
|
22
|
+
: false;
|
23
|
+
}
|
24
|
+
function isMobile() {
|
25
|
+
const os = detectOS();
|
26
|
+
return os ? isAndroid() || isIOS() : false;
|
27
|
+
}
|
28
|
+
exports.isMobile = isMobile;
|
29
|
+
//# sourceMappingURL=util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;;AAAA,mDAOwB;AAExB,SAAS,SAAS,CAChB,SAAkB;IAQlB,OAAO,IAAA,uBAAM,EAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,QAAQ;IACf,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5C,CAAC;AAED,SAAgB,SAAS;IACvB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3D,CAAC;AAHD,8BAGC;AAED,SAAS,KAAK;IACZ,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE;QACP,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC;YAC9B,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;QACtE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAgB,QAAQ;IACtB,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IACtB,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC7C,CAAC;AAHD,4BAGC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@keplr-wallet/wc-qrcode-modal",
|
3
|
-
"version": "0.12.
|
3
|
+
"version": "0.12.22-rc.0",
|
4
4
|
"main": "build/index.js",
|
5
5
|
"author": "chainapsis",
|
6
6
|
"license": "Apache-2.0",
|
@@ -15,13 +15,14 @@
|
|
15
15
|
"lint-fix": "eslint --fix \"src/**/*\" && prettier --write \"src/**/*\""
|
16
16
|
},
|
17
17
|
"dependencies": {
|
18
|
-
"
|
19
|
-
"
|
20
|
-
"qrcode.react": "^1.0.1"
|
18
|
+
"detect-browser": "^5.3.0",
|
19
|
+
"qrcode.react": "^3.1.0"
|
21
20
|
},
|
22
21
|
"peerDependencies": {
|
22
|
+
"@walletconnect/sign-client": "^2",
|
23
|
+
"@walletconnect/types": "^2",
|
23
24
|
"react": "^16.8.0 || ^17 || ^18",
|
24
25
|
"react-dom": "^16.8.0 || ^17 || ^18"
|
25
26
|
},
|
26
|
-
"gitHead": "
|
27
|
+
"gitHead": "983c1890b6147bab0b843157644ae645a50a973c"
|
27
28
|
}
|
package/src/index.tsx
CHANGED
@@ -1,13 +1,54 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import ReactDom from "react-dom";
|
3
3
|
import { Modal, ModalUIOptions } from "./modal";
|
4
|
+
import SignClient from "@walletconnect/sign-client";
|
5
|
+
import { ProposalTypes } from "@walletconnect/types";
|
6
|
+
import SessionProperties = ProposalTypes.SessionProperties;
|
4
7
|
|
5
|
-
export class
|
6
|
-
constructor(
|
8
|
+
export class KeplrQRCodeModalV2 {
|
9
|
+
constructor(
|
10
|
+
public readonly signClient: SignClient,
|
11
|
+
protected readonly uiOptions?: ModalUIOptions
|
12
|
+
) {}
|
13
|
+
|
14
|
+
async connect(chainIds: string[]): Promise<SessionProperties | undefined> {
|
15
|
+
const { uri, approval } = await this.signClient.connect({
|
16
|
+
requiredNamespaces: {
|
17
|
+
cosmos: {
|
18
|
+
methods: [
|
19
|
+
"cosmos_getAccounts",
|
20
|
+
"cosmos_signDirect",
|
21
|
+
"cosmos_signAmino",
|
22
|
+
"keplr_getKey",
|
23
|
+
"keplr_signAmino",
|
24
|
+
"keplr_signDirect",
|
25
|
+
"keplr_signArbitrary",
|
26
|
+
"keplr_enable",
|
27
|
+
],
|
28
|
+
chains: [...chainIds.map((chainId) => `cosmos:${chainId}`)],
|
29
|
+
events: ["accountsChanged", "chainChanged", "keplr_accountsChanged"],
|
30
|
+
},
|
31
|
+
},
|
32
|
+
});
|
33
|
+
|
34
|
+
if (!uri) {
|
35
|
+
throw new Error("No uri");
|
36
|
+
}
|
37
|
+
|
38
|
+
try {
|
39
|
+
this.open(uri, () => {});
|
40
|
+
const session = await approval();
|
41
|
+
return session.sessionProperties;
|
42
|
+
} catch (e) {
|
43
|
+
console.error(e);
|
44
|
+
} finally {
|
45
|
+
this.close();
|
46
|
+
}
|
47
|
+
}
|
7
48
|
|
8
49
|
open(uri: string, cb: any) {
|
9
50
|
const wrapper = document.createElement("div");
|
10
|
-
wrapper.setAttribute("id", "keplr-qrcode-modal-
|
51
|
+
wrapper.setAttribute("id", "keplr-qrcode-modal-v2");
|
11
52
|
document.body.appendChild(wrapper);
|
12
53
|
|
13
54
|
ReactDom.render(
|
@@ -24,7 +65,7 @@ export class KeplrQRCodeModalV1 {
|
|
24
65
|
}
|
25
66
|
|
26
67
|
close() {
|
27
|
-
const wrapper = document.getElementById("keplr-qrcode-modal-
|
68
|
+
const wrapper = document.getElementById("keplr-qrcode-modal-v2");
|
28
69
|
if (wrapper) {
|
29
70
|
document.body.removeChild(wrapper);
|
30
71
|
}
|
package/src/modal.tsx
CHANGED
@@ -5,14 +5,8 @@ import React, {
|
|
5
5
|
useMemo,
|
6
6
|
useState,
|
7
7
|
} from "react";
|
8
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
9
|
-
// @ts-ignore
|
10
8
|
import QRCode from "qrcode.react";
|
11
|
-
import {
|
12
|
-
isMobile,
|
13
|
-
isAndroid,
|
14
|
-
saveMobileLinkInfo,
|
15
|
-
} from "@walletconnect/browser-utils";
|
9
|
+
import { isAndroid, isMobile } from "./util";
|
16
10
|
|
17
11
|
export type ModalUIOptions = {
|
18
12
|
backdrop?: {
|
@@ -54,24 +48,28 @@ export const Modal: FunctionComponent<{
|
|
54
48
|
const [checkMobile] = useState(() => isMobile());
|
55
49
|
const [checkAndroid] = useState(() => isAndroid());
|
56
50
|
|
51
|
+
const saveMobileLinkInfo = (info: { name: string; href: string }) => {
|
52
|
+
localStorage.setItem("wallet-connect-v2-mobile-link", JSON.stringify(info));
|
53
|
+
};
|
54
|
+
|
57
55
|
const navigateToAppURL = useMemo(() => {
|
58
56
|
if (checkMobile) {
|
59
57
|
if (checkAndroid) {
|
60
58
|
// Save the mobile link.
|
61
59
|
saveMobileLinkInfo({
|
62
60
|
name: "Keplr",
|
63
|
-
href: "intent://
|
61
|
+
href: "intent://wcV2#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;",
|
64
62
|
});
|
65
63
|
|
66
|
-
return `intent://
|
64
|
+
return `intent://wcV2?${uri}#Intent;package=com.chainapsis.keplr;scheme=keplrwallet;end;`;
|
67
65
|
} else {
|
68
66
|
// Save the mobile link.
|
69
67
|
saveMobileLinkInfo({
|
70
68
|
name: "Keplr",
|
71
|
-
href:
|
69
|
+
href: `keplrwallet://wcV2`,
|
72
70
|
});
|
73
71
|
|
74
|
-
return `keplrwallet://
|
72
|
+
return `keplrwallet://wcV2?${uri}`;
|
75
73
|
}
|
76
74
|
}
|
77
75
|
}, [checkAndroid, checkMobile, uri]);
|
package/src/util.ts
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
import {
|
2
|
+
detect,
|
3
|
+
BrowserInfo,
|
4
|
+
BotInfo,
|
5
|
+
NodeInfo,
|
6
|
+
SearchBotDeviceInfo,
|
7
|
+
ReactNativeInfo,
|
8
|
+
} from "detect-browser";
|
9
|
+
|
10
|
+
function detectEnv(
|
11
|
+
userAgent?: string
|
12
|
+
):
|
13
|
+
| BrowserInfo
|
14
|
+
| BotInfo
|
15
|
+
| NodeInfo
|
16
|
+
| SearchBotDeviceInfo
|
17
|
+
| ReactNativeInfo
|
18
|
+
| null {
|
19
|
+
return detect(userAgent);
|
20
|
+
}
|
21
|
+
|
22
|
+
function detectOS() {
|
23
|
+
const env = detectEnv();
|
24
|
+
return env && env.os ? env.os : undefined;
|
25
|
+
}
|
26
|
+
|
27
|
+
export function isAndroid(): boolean {
|
28
|
+
const os = detectOS();
|
29
|
+
return os ? os.toLowerCase().includes("android") : false;
|
30
|
+
}
|
31
|
+
|
32
|
+
function isIOS(): boolean {
|
33
|
+
const os = detectOS();
|
34
|
+
return os
|
35
|
+
? os.toLowerCase().includes("ios") ||
|
36
|
+
(os.toLowerCase().includes("mac") && navigator.maxTouchPoints > 1)
|
37
|
+
: false;
|
38
|
+
}
|
39
|
+
|
40
|
+
export function isMobile(): boolean {
|
41
|
+
const os = detectOS();
|
42
|
+
return os ? isAndroid() || isIOS() : false;
|
43
|
+
}
|