@norcy/react-native-toolkit 0.1.163 → 0.1.165
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/lib/commonjs/SentryManager.js +33 -25
- package/lib/commonjs/SentryManager.js.map +1 -1
- package/lib/commonjs/Tool.js +11 -0
- package/lib/commonjs/Tool.js.map +1 -1
- package/lib/module/SentryManager.js +34 -26
- package/lib/module/SentryManager.js.map +1 -1
- package/lib/module/Tool.js +12 -1
- package/lib/module/Tool.js.map +1 -1
- package/lib/typescript/Tool.d.ts +2 -0
- package/package.json +1 -1
- package/src/SentryManager.ts +37 -27
- package/src/Tool.ts +18 -1
|
@@ -10,39 +10,47 @@ var _Tool = require("./Tool");
|
|
|
10
10
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
11
11
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
12
12
|
let isReady = false;
|
|
13
|
+
const doInit = () => {
|
|
14
|
+
console.log('使用 Sentry');
|
|
15
|
+
Sentry.init({
|
|
16
|
+
dsn: _Tool.ToolkitConfig.SentryDSN,
|
|
17
|
+
tracesSampleRate: 1.0
|
|
18
|
+
});
|
|
19
|
+
_Notification.Notification.addListener('onLoginSuccess', _ref => {
|
|
20
|
+
let {
|
|
21
|
+
user
|
|
22
|
+
} = _ref;
|
|
23
|
+
const sentryUser = {
|
|
24
|
+
id: user.AVUser.get('objectId'),
|
|
25
|
+
email: user.email,
|
|
26
|
+
username: user.nickname
|
|
27
|
+
};
|
|
28
|
+
Sentry.setUser(sentryUser);
|
|
29
|
+
});
|
|
30
|
+
_Notification.Notification.addListener('onLogout', () => {
|
|
31
|
+
Sentry.setUser(null);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Sentry.nativeCrash();
|
|
35
|
+
// Sentry.captureException(new Error('测试77!'));
|
|
36
|
+
// throw new Error('My first Sentry error!');
|
|
37
|
+
};
|
|
38
|
+
|
|
13
39
|
const SentryManager = exports.SentryManager = {
|
|
14
40
|
init: () => {
|
|
15
41
|
isReady = !__DEV__ && !!_Tool.ToolkitConfig.SentryDSN;
|
|
16
42
|
if (!isReady) {
|
|
17
43
|
console.log('不使用 Sentry');
|
|
18
44
|
} else {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
let {
|
|
27
|
-
user
|
|
28
|
-
} = _ref;
|
|
29
|
-
const sentryUser = {
|
|
30
|
-
id: user.AVUser.get('objectId'),
|
|
31
|
-
email: user.email,
|
|
32
|
-
username: user.nickname
|
|
33
|
-
};
|
|
34
|
-
Sentry.setUser(sentryUser);
|
|
35
|
-
});
|
|
36
|
-
_Notification.Notification.addListener('onLogout', () => {
|
|
37
|
-
Sentry.setUser(null);
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
// Sentry.nativeCrash();
|
|
41
|
-
// Sentry.captureException(new Error('测试77!'));
|
|
42
|
-
// throw new Error('My first Sentry error!');
|
|
45
|
+
if (_Tool.Tool.isAgreed()) {
|
|
46
|
+
doInit();
|
|
47
|
+
} else {
|
|
48
|
+
_Notification.Notification.addListenerOnce('onAgree', () => {
|
|
49
|
+
doInit();
|
|
50
|
+
});
|
|
51
|
+
}
|
|
43
52
|
}
|
|
44
53
|
},
|
|
45
|
-
|
|
46
54
|
setTag: (key, value) => {
|
|
47
55
|
if (isReady) {
|
|
48
56
|
if (key.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Sentry","_interopRequireWildcard","require","_Notification","_Tool","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isReady","
|
|
1
|
+
{"version":3,"names":["Sentry","_interopRequireWildcard","require","_Notification","_Tool","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isReady","doInit","console","log","init","dsn","ToolkitConfig","SentryDSN","tracesSampleRate","Notification","addListener","_ref","user","sentryUser","id","AVUser","email","username","nickname","setUser","SentryManager","exports","__DEV__","Tool","isAgreed","addListenerOnce","setTag","value","length"],"sources":["SentryManager.ts"],"sourcesContent":["import * as Sentry from '@sentry/react-native';\nimport { LoginSuccessResultType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { Tool, ToolkitConfig } from './Tool';\n\nlet isReady = false;\n\nconst doInit = () => {\n console.log('使用 Sentry');\n Sentry.init({\n dsn: ToolkitConfig.SentryDSN,\n tracesSampleRate: 1.0,\n });\n\n Notification.addListener(\n 'onLoginSuccess',\n ({ user }: LoginSuccessResultType) => {\n const sentryUser: Sentry.User = {\n id: user.AVUser.get('objectId'),\n email: user.email,\n username: user.nickname,\n };\n Sentry.setUser(sentryUser);\n }\n );\n\n Notification.addListener('onLogout', () => {\n Sentry.setUser(null);\n });\n\n // Sentry.nativeCrash();\n // Sentry.captureException(new Error('测试77!'));\n // throw new Error('My first Sentry error!');\n};\n\nexport const SentryManager = {\n init: () => {\n isReady = !__DEV__ && !!ToolkitConfig.SentryDSN;\n if (!isReady) {\n console.log('不使用 Sentry');\n } else {\n if (Tool.isAgreed()) {\n doInit();\n } else {\n Notification.addListenerOnce('onAgree', () => {\n doInit();\n });\n }\n }\n },\n\n setTag: (key: string, value: any) => {\n if (isReady) {\n if (key.length) {\n Sentry.setTag(key, value);\n }\n }\n },\n};\n"],"mappings":"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"}
|
package/lib/commonjs/Tool.js
CHANGED
|
@@ -363,6 +363,17 @@ const Tool = exports.Tool = {
|
|
|
363
363
|
if ((0, _reactNativeDeviceInfo.hasHmsSync)()) return true;
|
|
364
364
|
} catch {}
|
|
365
365
|
return [(0, _reactNativeDeviceInfo.getManufacturerSync)(), (0, _reactNativeDeviceInfo.getBrand)(), (0, _reactNativeDeviceInfo.getDeviceId)()].some(name => name.toLowerCase().includes('huawei') || name.toLowerCase().includes('honor'));
|
|
366
|
+
},
|
|
367
|
+
isAgreed: () => {
|
|
368
|
+
if (_reactNative.Platform.OS === 'ios') {
|
|
369
|
+
return true;
|
|
370
|
+
}
|
|
371
|
+
return _reactNativeToolkit.SyncPrefData.getPrefString('Sync_AgreeMode') === '1';
|
|
372
|
+
},
|
|
373
|
+
onAgree: () => {
|
|
374
|
+
_reactNativeToolkit.SyncPrefData.setPrefString('Sync_AgreeMode', '1');
|
|
375
|
+
_reactNative.NativeModules.NCYAPI.onAgree && _reactNative.NativeModules.NCYAPI.onAgree();
|
|
376
|
+
_reactNativeToolkit.Notification.postNotification('onAgree');
|
|
366
377
|
}
|
|
367
378
|
};
|
|
368
379
|
//# sourceMappingURL=Tool.js.map
|
package/lib/commonjs/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeToolkit","require","_cameraroll","_interopRequireDefault","_react","_reactNative","_reactNativeDeviceInfo","_reactNativeInAppReview","_reactNativeSimpleToast","_PrefData","_ReportUtil","obj","__esModule","default","ToolkitConfig","exports","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","ReportUtil","AppLink","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","Alert","alert","requestAppStoreReview","Platform","OS","InAppReview","isAvailable","RequestInAppReview","then","hasFlowFinishedSuccessfully","console","log","catch","error","goAppStoreReview","Linking","canOpenURL","supported","openURL","iOSReviewUrl","NativeModules","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","beforeRequest","permission","PermissionsAndroid","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","sure","status","request","requestManagePermission","savePicture","albumName","errorCode","errMsg","CameraRoll","save","type","album","AppName","JSON","stringify","extension","ReactNativeBlobUtil","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","PrefData","BuildInPrefs","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","Vibration","isPad","isTablet","isHorizontalPad","isLandscapeSync","isHuaweiDevice","hasHmsSync","getManufacturerSync","getBrand","getDeviceId","some","name","includes"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport {\n getBrand,\n getDeviceId,\n getManufacturerSync,\n hasHmsSync,\n isLandscapeSync,\n isTablet,\n} from 'react-native-device-info';\nimport InAppReview from 'react-native-in-app-review';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n requestAppStoreReview: () => {\n if (Platform.OS === 'ios' && InAppReview.isAvailable()) {\n // trigger UI InAppreview\n InAppReview.RequestInAppReview()\n .then((hasFlowFinishedSuccessfully) => {\n console.log(\n 'InAppReview in ios has launched successfully',\n hasFlowFinishedSuccessfully\n );\n })\n .catch((error) => {\n console.log(error);\n });\n return true;\n } else {\n Tool.goAppStoreReview();\n return false;\n }\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async (beforeRequest?: () => Promise<boolean>) => {\n if (Platform.OS !== 'android') {\n return true;\n }\n\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n if (beforeRequest) {\n const sure = await beforeRequest();\n if (!sure) {\n return false;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (\n url: string,\n albumName?: string,\n beforeRequest?: () => Promise<boolean>\n ) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission(beforeRequest))\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n\n isHuaweiDevice: () => {\n if (Platform.OS !== 'android') return false;\n try {\n if (hasHmsSync()) return true;\n } catch {}\n return [getManufacturerSync(), getBrand(), getDeviceId()].some(\n (name) =>\n name.toLowerCase().includes('huawei') ||\n name.toLowerCase().includes('honor')\n );\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_reactNativeToolkit","require","_cameraroll","_interopRequireDefault","_react","_reactNative","_reactNativeDeviceInfo","_reactNativeInAppReview","_reactNativeSimpleToast","_PrefData","_ReportUtil","obj","__esModule","default","ToolkitConfig","exports","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","ReportUtil","AppLink","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","Alert","alert","requestAppStoreReview","Platform","OS","InAppReview","isAvailable","RequestInAppReview","then","hasFlowFinishedSuccessfully","console","log","catch","error","goAppStoreReview","Linking","canOpenURL","supported","openURL","iOSReviewUrl","NativeModules","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","beforeRequest","permission","PermissionsAndroid","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","sure","status","request","requestManagePermission","savePicture","albumName","errorCode","errMsg","CameraRoll","save","type","album","AppName","JSON","stringify","extension","ReactNativeBlobUtil","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","PrefData","BuildInPrefs","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","Vibration","isPad","isTablet","isHorizontalPad","isLandscapeSync","isHuaweiDevice","hasHmsSync","getManufacturerSync","getBrand","getDeviceId","some","name","includes","isAgreed","SyncPrefData","getPrefString","onAgree","setPrefString","Notification","postNotification"],"sources":["Tool.ts"],"sourcesContent":["import {\n AppLink,\n Notification,\n SyncPrefData,\n} from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport {\n getBrand,\n getDeviceId,\n getManufacturerSync,\n hasHmsSync,\n isLandscapeSync,\n isTablet,\n} from 'react-native-device-info';\nimport InAppReview from 'react-native-in-app-review';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n requestAppStoreReview: () => {\n if (Platform.OS === 'ios' && InAppReview.isAvailable()) {\n // trigger UI InAppreview\n InAppReview.RequestInAppReview()\n .then((hasFlowFinishedSuccessfully) => {\n console.log(\n 'InAppReview in ios has launched successfully',\n hasFlowFinishedSuccessfully\n );\n })\n .catch((error) => {\n console.log(error);\n });\n return true;\n } else {\n Tool.goAppStoreReview();\n return false;\n }\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async (beforeRequest?: () => Promise<boolean>) => {\n if (Platform.OS !== 'android') {\n return true;\n }\n\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n if (beforeRequest) {\n const sure = await beforeRequest();\n if (!sure) {\n return false;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (\n url: string,\n albumName?: string,\n beforeRequest?: () => Promise<boolean>\n ) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission(beforeRequest))\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n\n isHuaweiDevice: () => {\n if (Platform.OS !== 'android') return false;\n try {\n if (hasHmsSync()) return true;\n } catch {}\n return [getManufacturerSync(), getBrand(), getDeviceId()].some(\n (name) =>\n name.toLowerCase().includes('huawei') ||\n name.toLowerCase().includes('honor')\n );\n },\n\n isAgreed: () => {\n if (Platform.OS === 'ios') {\n return true;\n }\n return SyncPrefData.getPrefString('Sync_AgreeMode') === '1';\n },\n\n onAgree: () => {\n SyncPrefData.setPrefString('Sync_AgreeMode', '1');\n NativeModules.NCYAPI.onAgree && NativeModules.NCYAPI.onAgree();\n Notification.postNotification('onAgree');\n },\n};\n"],"mappings":"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"}
|
|
@@ -1,40 +1,48 @@
|
|
|
1
1
|
import * as Sentry from '@sentry/react-native';
|
|
2
2
|
import { Notification } from './Notification';
|
|
3
|
-
import { ToolkitConfig } from './Tool';
|
|
3
|
+
import { Tool, ToolkitConfig } from './Tool';
|
|
4
4
|
let isReady = false;
|
|
5
|
+
const doInit = () => {
|
|
6
|
+
console.log('使用 Sentry');
|
|
7
|
+
Sentry.init({
|
|
8
|
+
dsn: ToolkitConfig.SentryDSN,
|
|
9
|
+
tracesSampleRate: 1.0
|
|
10
|
+
});
|
|
11
|
+
Notification.addListener('onLoginSuccess', _ref => {
|
|
12
|
+
let {
|
|
13
|
+
user
|
|
14
|
+
} = _ref;
|
|
15
|
+
const sentryUser = {
|
|
16
|
+
id: user.AVUser.get('objectId'),
|
|
17
|
+
email: user.email,
|
|
18
|
+
username: user.nickname
|
|
19
|
+
};
|
|
20
|
+
Sentry.setUser(sentryUser);
|
|
21
|
+
});
|
|
22
|
+
Notification.addListener('onLogout', () => {
|
|
23
|
+
Sentry.setUser(null);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
// Sentry.nativeCrash();
|
|
27
|
+
// Sentry.captureException(new Error('测试77!'));
|
|
28
|
+
// throw new Error('My first Sentry error!');
|
|
29
|
+
};
|
|
30
|
+
|
|
5
31
|
export const SentryManager = {
|
|
6
32
|
init: () => {
|
|
7
33
|
isReady = !__DEV__ && !!ToolkitConfig.SentryDSN;
|
|
8
34
|
if (!isReady) {
|
|
9
35
|
console.log('不使用 Sentry');
|
|
10
36
|
} else {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
let {
|
|
19
|
-
user
|
|
20
|
-
} = _ref;
|
|
21
|
-
const sentryUser = {
|
|
22
|
-
id: user.AVUser.get('objectId'),
|
|
23
|
-
email: user.email,
|
|
24
|
-
username: user.nickname
|
|
25
|
-
};
|
|
26
|
-
Sentry.setUser(sentryUser);
|
|
27
|
-
});
|
|
28
|
-
Notification.addListener('onLogout', () => {
|
|
29
|
-
Sentry.setUser(null);
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
// Sentry.nativeCrash();
|
|
33
|
-
// Sentry.captureException(new Error('测试77!'));
|
|
34
|
-
// throw new Error('My first Sentry error!');
|
|
37
|
+
if (Tool.isAgreed()) {
|
|
38
|
+
doInit();
|
|
39
|
+
} else {
|
|
40
|
+
Notification.addListenerOnce('onAgree', () => {
|
|
41
|
+
doInit();
|
|
42
|
+
});
|
|
43
|
+
}
|
|
35
44
|
}
|
|
36
45
|
},
|
|
37
|
-
|
|
38
46
|
setTag: (key, value) => {
|
|
39
47
|
if (isReady) {
|
|
40
48
|
if (key.length) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Sentry","Notification","
|
|
1
|
+
{"version":3,"names":["Sentry","Notification","Tool","ToolkitConfig","isReady","doInit","console","log","init","dsn","SentryDSN","tracesSampleRate","addListener","_ref","user","sentryUser","id","AVUser","get","email","username","nickname","setUser","SentryManager","__DEV__","isAgreed","addListenerOnce","setTag","key","value","length"],"sources":["SentryManager.ts"],"sourcesContent":["import * as Sentry from '@sentry/react-native';\nimport { LoginSuccessResultType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { Tool, ToolkitConfig } from './Tool';\n\nlet isReady = false;\n\nconst doInit = () => {\n console.log('使用 Sentry');\n Sentry.init({\n dsn: ToolkitConfig.SentryDSN,\n tracesSampleRate: 1.0,\n });\n\n Notification.addListener(\n 'onLoginSuccess',\n ({ user }: LoginSuccessResultType) => {\n const sentryUser: Sentry.User = {\n id: user.AVUser.get('objectId'),\n email: user.email,\n username: user.nickname,\n };\n Sentry.setUser(sentryUser);\n }\n );\n\n Notification.addListener('onLogout', () => {\n Sentry.setUser(null);\n });\n\n // Sentry.nativeCrash();\n // Sentry.captureException(new Error('测试77!'));\n // throw new Error('My first Sentry error!');\n};\n\nexport const SentryManager = {\n init: () => {\n isReady = !__DEV__ && !!ToolkitConfig.SentryDSN;\n if (!isReady) {\n console.log('不使用 Sentry');\n } else {\n if (Tool.isAgreed()) {\n doInit();\n } else {\n Notification.addListenerOnce('onAgree', () => {\n doInit();\n });\n }\n }\n },\n\n setTag: (key: string, value: any) => {\n if (isReady) {\n if (key.length) {\n Sentry.setTag(key, value);\n }\n }\n },\n};\n"],"mappings":"AAAA,OAAO,KAAKA,MAAM,MAAM,sBAAsB;AAE9C,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,IAAI,EAAEC,aAAa,QAAQ,QAAQ;AAE5C,IAAIC,OAAO,GAAG,KAAK;AAEnB,MAAMC,MAAM,GAAGA,CAAA,KAAM;EACnBC,OAAO,CAACC,GAAG,CAAC,WAAW,CAAC;EACxBP,MAAM,CAACQ,IAAI,CAAC;IACVC,GAAG,EAAEN,aAAa,CAACO,SAAS;IAC5BC,gBAAgB,EAAE;EACpB,CAAC,CAAC;EAEFV,YAAY,CAACW,WAAW,CACtB,gBAAgB,EAChBC,IAAA,IAAsC;IAAA,IAArC;MAAEC;IAA6B,CAAC,GAAAD,IAAA;IAC/B,MAAME,UAAuB,GAAG;MAC9BC,EAAE,EAAEF,IAAI,CAACG,MAAM,CAACC,GAAG,CAAC,UAAU,CAAC;MAC/BC,KAAK,EAAEL,IAAI,CAACK,KAAK;MACjBC,QAAQ,EAAEN,IAAI,CAACO;IACjB,CAAC;IACDrB,MAAM,CAACsB,OAAO,CAACP,UAAU,CAAC;EAC5B,CACF,CAAC;EAEDd,YAAY,CAACW,WAAW,CAAC,UAAU,EAAE,MAAM;IACzCZ,MAAM,CAACsB,OAAO,CAAC,IAAI,CAAC;EACtB,CAAC,CAAC;;EAEF;EACA;EACA;AACF,CAAC;;AAED,OAAO,MAAMC,aAAa,GAAG;EAC3Bf,IAAI,EAAEA,CAAA,KAAM;IACVJ,OAAO,GAAG,CAACoB,OAAO,IAAI,CAAC,CAACrB,aAAa,CAACO,SAAS;IAC/C,IAAI,CAACN,OAAO,EAAE;MACZE,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;IAC3B,CAAC,MAAM;MACL,IAAIL,IAAI,CAACuB,QAAQ,CAAC,CAAC,EAAE;QACnBpB,MAAM,CAAC,CAAC;MACV,CAAC,MAAM;QACLJ,YAAY,CAACyB,eAAe,CAAC,SAAS,EAAE,MAAM;UAC5CrB,MAAM,CAAC,CAAC;QACV,CAAC,CAAC;MACJ;IACF;EACF,CAAC;EAEDsB,MAAM,EAAEA,CAACC,GAAW,EAAEC,KAAU,KAAK;IACnC,IAAIzB,OAAO,EAAE;MACX,IAAIwB,GAAG,CAACE,MAAM,EAAE;QACd9B,MAAM,CAAC2B,MAAM,CAACC,GAAG,EAAEC,KAAK,CAAC;MAC3B;IACF;EACF;AACF,CAAC"}
|
package/lib/module/Tool.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AppLink } from '@norcy/react-native-toolkit';
|
|
1
|
+
import { AppLink, Notification, SyncPrefData } from '@norcy/react-native-toolkit';
|
|
2
2
|
import CameraRoll from '@react-native-community/cameraroll';
|
|
3
3
|
import { useState } from 'react';
|
|
4
4
|
import { Alert, Linking, NativeModules, PermissionsAndroid, Platform, Vibration } from 'react-native';
|
|
@@ -355,6 +355,17 @@ export const Tool = {
|
|
|
355
355
|
if (hasHmsSync()) return true;
|
|
356
356
|
} catch {}
|
|
357
357
|
return [getManufacturerSync(), getBrand(), getDeviceId()].some(name => name.toLowerCase().includes('huawei') || name.toLowerCase().includes('honor'));
|
|
358
|
+
},
|
|
359
|
+
isAgreed: () => {
|
|
360
|
+
if (Platform.OS === 'ios') {
|
|
361
|
+
return true;
|
|
362
|
+
}
|
|
363
|
+
return SyncPrefData.getPrefString('Sync_AgreeMode') === '1';
|
|
364
|
+
},
|
|
365
|
+
onAgree: () => {
|
|
366
|
+
SyncPrefData.setPrefString('Sync_AgreeMode', '1');
|
|
367
|
+
NativeModules.NCYAPI.onAgree && NativeModules.NCYAPI.onAgree();
|
|
368
|
+
Notification.postNotification('onAgree');
|
|
358
369
|
}
|
|
359
370
|
};
|
|
360
371
|
//# sourceMappingURL=Tool.js.map
|
package/lib/module/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["AppLink","CameraRoll","useState","Alert","Linking","NativeModules","PermissionsAndroid","Platform","Vibration","getBrand","getDeviceId","getManufacturerSync","hasHmsSync","isLandscapeSync","isTablet","InAppReview","Toast","BuildInPrefs","PrefData","ReportUtil","ToolkitConfig","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","alert","requestAppStoreReview","OS","isAvailable","RequestInAppReview","then","hasFlowFinishedSuccessfully","console","log","catch","error","goAppStoreReview","canOpenURL","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","beforeRequest","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","sure","status","request","requestManagePermission","savePicture","albumName","errorCode","errMsg","save","type","album","AppName","JSON","stringify","extension","ReactNativeBlobUtil","require","default","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","isPad","isHorizontalPad","isHuaweiDevice","some","name","includes"],"sources":["Tool.ts"],"sourcesContent":["import { AppLink } from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport {\n getBrand,\n getDeviceId,\n getManufacturerSync,\n hasHmsSync,\n isLandscapeSync,\n isTablet,\n} from 'react-native-device-info';\nimport InAppReview from 'react-native-in-app-review';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n requestAppStoreReview: () => {\n if (Platform.OS === 'ios' && InAppReview.isAvailable()) {\n // trigger UI InAppreview\n InAppReview.RequestInAppReview()\n .then((hasFlowFinishedSuccessfully) => {\n console.log(\n 'InAppReview in ios has launched successfully',\n hasFlowFinishedSuccessfully\n );\n })\n .catch((error) => {\n console.log(error);\n });\n return true;\n } else {\n Tool.goAppStoreReview();\n return false;\n }\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async (beforeRequest?: () => Promise<boolean>) => {\n if (Platform.OS !== 'android') {\n return true;\n }\n\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n if (beforeRequest) {\n const sure = await beforeRequest();\n if (!sure) {\n return false;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (\n url: string,\n albumName?: string,\n beforeRequest?: () => Promise<boolean>\n ) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission(beforeRequest))\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n\n isHuaweiDevice: () => {\n if (Platform.OS !== 'android') return false;\n try {\n if (hasHmsSync()) return true;\n } catch {}\n return [getManufacturerSync(), getBrand(), getDeviceId()].some(\n (name) =>\n name.toLowerCase().includes('huawei') ||\n name.toLowerCase().includes('honor')\n );\n },\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["AppLink","Notification","SyncPrefData","CameraRoll","useState","Alert","Linking","NativeModules","PermissionsAndroid","Platform","Vibration","getBrand","getDeviceId","getManufacturerSync","hasHmsSync","isLandscapeSync","isTablet","InAppReview","Toast","BuildInPrefs","PrefData","ReportUtil","ToolkitConfig","initToolkitConfig","config","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","_getAlertDataFromConfig","undefined","ret","title","message","buttons","button","push","text","onPress","report","open","style","androidVibratePermissionStatus","VibrateEnable","Tool","sleep","delay","Promise","resolve","setTimeout","formatDate","date","fmt","o","getMonth","getDate","getHours","getMinutes","getSeconds","Math","floor","getMilliseconds","test","replace","RegExp","$1","getFullYear","substr","length","k","jsonify","keys","reduce","result","key","isChinese","value","isRemoteURL","str","startsWith","get_url_extension","url","_url$split$","split","pop","trim","generateObjectId","timestamp","Date","getTime","random","toLowerCase","humanFileSize","bytes","si","arguments","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER","alertWithConfig","alertData","alert","requestAppStoreReview","OS","isAvailable","RequestInAppReview","then","hasFlowFinishedSuccessfully","console","log","catch","error","goAppStoreReview","canOpenURL","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsiteAlias","notifyMe","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","beforeRequest","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","NCYAPI","checkManagePermission","sure","status","request","requestManagePermission","savePicture","albumName","errorCode","errMsg","save","type","album","AppName","JSON","stringify","extension","ReactNativeBlobUtil","require","default","res","fileCache","appendExt","path","e1","setVibrateEnable","enable","Vibrate","getVibrateEnable","vibrate","getValue","_NativeModules$NCYVib","NCYVibration","isPad","isHorizontalPad","isHuaweiDevice","some","name","includes","isAgreed","getPrefString","onAgree","setPrefString","postNotification"],"sources":["Tool.ts"],"sourcesContent":["import {\n AppLink,\n Notification,\n SyncPrefData,\n} from '@norcy/react-native-toolkit';\nimport CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Alert,\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n Vibration,\n} from 'react-native';\nimport {\n getBrand,\n getDeviceId,\n getManufacturerSync,\n hasHmsSync,\n isLandscapeSync,\n isTablet,\n} from 'react-native-device-info';\nimport InAppReview from 'react-native-in-app-review';\nimport Toast from 'react-native-simple-toast';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { ReportUtil } from './ReportUtil';\n\nexport interface ToolkitConfigType {\n iOSStoreUrl: string;\n AndroidStoreUrl: string;\n iOSStoreScheme: string;\n AndroidStoreScheme: string;\n iOSReviewUrl: string;\n AndroidPackageName: string;\n\n AppName: string;\n AppWebsite: string;\n AppWebsiteAlias: string;\n AppScheme: string;\n\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n RC_PROXY_URL: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\n}\n\ninterface AlertConfig {\n title?: string;\n message?: string;\n buttons: {\n text: string;\n target?: string;\n report?: string;\n }[];\n}\n\nexport let ToolkitConfig: ToolkitConfigType;\n\nexport const initToolkitConfig = (config: ToolkitConfigType) => {\n ToolkitConfig = config;\n};\n\nconst _isPlainObject = (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n};\n\nconst _jsonify = (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(_jsonify);\n return target;\n};\n\nconst _getAlertDataFromConfig = (config?: AlertConfig) => {\n if (!config) {\n return undefined;\n }\n\n const ret: any = {\n title: config.title,\n message: config.message,\n };\n\n const buttons: any = [];\n\n for (const button of config.buttons) {\n if (button.target) {\n buttons.push({\n text: button.text,\n onPress: () => {\n button.report && ReportUtil.report(button.report);\n AppLink.open(button.target);\n },\n });\n } else {\n buttons.push({\n text: button.text,\n style: 'cancel',\n });\n }\n }\n\n ret.buttons = buttons;\n\n return ret;\n};\n\nlet androidVibratePermissionStatus = -1;\n\nlet VibrateEnable: boolean | undefined;\n\nexport const Tool = {\n sleep: (delay: number) =>\n new Promise((resolve) => setTimeout(resolve, delay)),\n\n formatDate(date: Date, fmt?: string): string {\n fmt = fmt ? fmt : 'yyyy-MM-dd';\n var o: { [key: string]: number } = {\n 'M+': date.getMonth() + 1, //月份\n 'd+': date.getDate(), //日\n 'h+': date.getHours(), //小时\n 'm+': date.getMinutes(), //分\n 's+': date.getSeconds(), //秒\n 'q+': Math.floor((date.getMonth() + 3) / 3), //季度\n 'S': date.getMilliseconds(), //毫秒\n };\n\n // 获取年份\n if (/(y+)/i.test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (date.getFullYear() + '').substr(4 - RegExp.$1.length)\n );\n }\n\n for (var k in o) {\n if (new RegExp('(' + k + ')', 'i').test(fmt)) {\n fmt = fmt.replace(\n RegExp.$1,\n (RegExp.$1.length === 1\n ? o[k]\n : ('00' + o[k]).substr(('' + o[k]).length)\n ).toString()\n );\n }\n }\n return fmt;\n },\n\n jsonify: (target: any) =>\n _isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: _jsonify(target[key]),\n }),\n {}\n )\n : _jsonify(target),\n\n isChinese: (value: string) => {\n return /[\\u4E00-\\u9FA5]+/g.test(value);\n },\n\n isRemoteURL: (str: string) => {\n return str.startsWith('http');\n },\n\n get_url_extension: (url: string) => {\n return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();\n },\n\n generateObjectId: () => {\n var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise\n return (\n timestamp +\n 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {\n return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise\n })\n );\n },\n\n /**\n * Format bytes as human-readable text.\n *\n * @param bytes Number of bytes.\n * @param si True to use metric (SI) units, aka powers of 1000. False to use\n * binary (IEC), aka powers of 1024.\n * @param dp Number of decimal places to display.\n *\n * @return Formatted string.\n */\n humanFileSize: (bytes: number, si = false, dp = 1) => {\n const thresh = si ? 1000 : 1024;\n\n if (Math.abs(bytes) < thresh) {\n return bytes + ' B';\n }\n\n const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n let u = -1;\n const r = 10 ** dp;\n\n do {\n bytes /= thresh;\n ++u;\n } while (\n Math.round(Math.abs(bytes) * r) / r >= thresh &&\n u < units.length - 1\n );\n\n return bytes.toFixed(dp) + ' ' + units[u];\n },\n\n useForceUpdate: () => {\n const [, setValue] = useState(0);\n return () => setValue((value) => value + 1);\n },\n\n showToast: (toast: string) => {\n if (toast) {\n Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n }\n },\n\n alertWithConfig: (config?: AlertConfig) => {\n const alertData = _getAlertDataFromConfig(config);\n if (alertData) {\n Alert.alert(alertData.title, alertData.message, alertData.buttons);\n return true;\n }\n return false;\n },\n\n requestAppStoreReview: () => {\n if (Platform.OS === 'ios' && InAppReview.isAvailable()) {\n // trigger UI InAppreview\n InAppReview.RequestInAppReview()\n .then((hasFlowFinishedSuccessfully) => {\n console.log(\n 'InAppReview in ios has launched successfully',\n hasFlowFinishedSuccessfully\n );\n })\n .catch((error) => {\n console.log(error);\n });\n return true;\n } else {\n Tool.goAppStoreReview();\n return false;\n }\n },\n\n goAppStoreReview: () => {\n ReportUtil.report('StoreReview');\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSReviewUrl);\n }\n });\n } else {\n if (NativeModules.CheckPackageInstallation) {\n NativeModules.CheckPackageInstallation.isPackageInstalled(\n 'com.coolapk.market',\n (isInstalled: boolean) => {\n if (isInstalled) {\n if (NativeModules.CheckPackageInstallation.goToMarket) {\n NativeModules.CheckPackageInstallation.goToMarket(\n ToolkitConfig.AndroidPackageName,\n 'com.coolapk.market',\n 'com.coolapk.market.activity.AppViewActivity'\n );\n } else {\n Tool.showToast('请用酷安市场打开');\n Linking.openURL(ToolkitConfig.AndroidStoreScheme);\n }\n } else {\n Tool.showToast('需要先安装酷安市场');\n }\n }\n );\n }\n }\n },\n\n goUpgrade: () => {\n if (Platform.OS === 'ios') {\n Linking.canOpenURL('itms-apps://').then((supported) => {\n if (supported) {\n Linking.openURL(ToolkitConfig.iOSStoreScheme);\n }\n });\n } else {\n // 使用短链别名,不然 Android 的 AppLink 会直接吃掉官网,导致 App 内无法使用浏览器打开官网\n Linking.openURL(ToolkitConfig.AppWebsiteAlias);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async (beforeRequest?: () => Promise<boolean>) => {\n if (Platform.OS !== 'android') {\n return true;\n }\n\n const permission = PermissionsAndroid.PERMISSIONS.WRITE_EXTERNAL_STORAGE;\n\n const hasPermission = await PermissionsAndroid.check(permission);\n if (hasPermission) {\n return true;\n }\n\n // 对 MANAGE_EXTERNAL_STORAGE 再检查一次\n if (NativeModules.NCYAPI.checkManagePermission) {\n if (await NativeModules.NCYAPI.checkManagePermission()) {\n return true;\n }\n }\n\n if (beforeRequest) {\n const sure = await beforeRequest();\n if (!sure) {\n return false;\n }\n }\n\n const status = await PermissionsAndroid.request(permission);\n if (status === 'granted') {\n return true;\n }\n\n if (NativeModules.NCYAPI.requestManagePermission) {\n if (await NativeModules.NCYAPI.requestManagePermission()) {\n return true;\n }\n }\n\n return false;\n },\n\n savePicture: async (\n url: string,\n albumName?: string,\n beforeRequest?: () => Promise<boolean>\n ) => {\n console.log('savePicture', url);\n\n if (!url) {\n return { errorCode: -5, errMsg: 'url is empty' };\n }\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission(beforeRequest))\n ) {\n return { errorCode: -1 };\n }\n\n // iOS 或本地图片直接保存\n if (Platform.OS === 'ios' || !Tool.isRemoteURL(url)) {\n try {\n await CameraRoll.save(url, {\n type: 'photo',\n album: albumName ?? ToolkitConfig.AppName,\n });\n return { errorCode: 0 };\n } catch (error: any) {\n console.error(error);\n return { errorCode: -2, errMsg: JSON.stringify(error) };\n }\n }\n\n // 安卓远程图片需要下载\n const extension = Tool.get_url_extension(url);\n try {\n if (!NativeModules.ReactNativeBlobUtil) {\n Tool.goUpgrade();\n return { errorCode: -5, errMsg: 'low version' };\n }\n let ReactNativeBlobUtil = require('react-native-blob-util').default;\n const res = await ReactNativeBlobUtil!\n .config({\n fileCache: true,\n appendExt: extension,\n })\n .fetch('GET', url, {});\n // the temp file path\n console.log('The file saved to ', res.path());\n try {\n await CameraRoll.save('file://' + res.path(), {\n type: 'photo',\n album: albumName,\n });\n return { errorCode: 0 };\n } catch (e1) {\n console.error(e1 + '\\n' + res.path());\n return { errorCode: -3, errMsg: JSON.stringify(e1) };\n }\n } catch (error) {\n console.error(error);\n return { errorCode: -4, errMsg: JSON.stringify(error) };\n }\n },\n\n setVibrateEnable: (enable: boolean) => {\n PrefData.setValue(BuildInPrefs.Vibrate, enable);\n VibrateEnable = enable;\n },\n\n getVibrateEnable: () => {\n return VibrateEnable === undefined ? true : VibrateEnable;\n },\n\n vibrate: async () => {\n try {\n if (VibrateEnable === undefined) {\n VibrateEnable = PrefData.getValue(BuildInPrefs.Vibrate);\n }\n if (!VibrateEnable) {\n return;\n }\n if (Platform.OS === 'ios') {\n NativeModules.NCYVibration?.vibrate();\n } else {\n if (androidVibratePermissionStatus === -1) {\n androidVibratePermissionStatus = (await PermissionsAndroid.check(\n // @ts-ignore\n 'android.permission.VIBRATE'\n ))\n ? 1\n : 0;\n }\n if (androidVibratePermissionStatus === 1) {\n Vibration.vibrate(5);\n }\n }\n } catch (error) {}\n },\n\n isPad: () => {\n if (Platform.OS === 'ios') {\n return Platform.isPad;\n } else {\n return isTablet();\n }\n },\n\n isHorizontalPad: () => {\n return isLandscapeSync() && Tool.isPad();\n },\n\n isHuaweiDevice: () => {\n if (Platform.OS !== 'android') return false;\n try {\n if (hasHmsSync()) return true;\n } catch {}\n return [getManufacturerSync(), getBrand(), getDeviceId()].some(\n (name) =>\n name.toLowerCase().includes('huawei') ||\n name.toLowerCase().includes('honor')\n );\n },\n\n isAgreed: () => {\n if (Platform.OS === 'ios') {\n return true;\n }\n return SyncPrefData.getPrefString('Sync_AgreeMode') === '1';\n },\n\n onAgree: () => {\n SyncPrefData.setPrefString('Sync_AgreeMode', '1');\n NativeModules.NCYAPI.onAgree && NativeModules.NCYAPI.onAgree();\n Notification.postNotification('onAgree');\n },\n};\n"],"mappings":"AAAA,SACEA,OAAO,EACPC,YAAY,EACZC,YAAY,QACP,6BAA6B;AACpC,OAAOC,UAAU,MAAM,oCAAoC;AAC3D,SAASC,QAAQ,QAAQ,OAAO;AAChC,SACEC,KAAK,EACLC,OAAO,EACPC,aAAa,EACbC,kBAAkB,EAClBC,QAAQ,EACRC,SAAS,QACJ,cAAc;AACrB,SACEC,QAAQ,EACRC,WAAW,EACXC,mBAAmB,EACnBC,UAAU,EACVC,eAAe,EACfC,QAAQ,QACH,0BAA0B;AACjC,OAAOC,WAAW,MAAM,4BAA4B;AACpD,OAAOC,KAAK,MAAM,2BAA2B;AAC7C,SAASC,YAAY,EAAEC,QAAQ,QAAQ,YAAY;AACnD,SAASC,UAAU,QAAQ,cAAc;AAwCzC,OAAO,IAAIC,aAAgC;AAE3C,OAAO,MAAMC,iBAAiB,GAAIC,MAAyB,IAAK;EAC9DF,aAAa,GAAGE,MAAM;AACxB,CAAC;AAED,MAAMC,cAAc,GAAIC,MAAW,IAAK;EACtC,OACEA,MAAM,IACNA,MAAM,CAACC,QAAQ,CAAC,CAAC,KAAK,iBAAiB,IACvCC,MAAM,CAACC,cAAc,CAACH,MAAM,CAAC,KAAKE,MAAM,CAACE,SAAS;AAEtD,CAAC;AAED,MAAMC,QAAQ,GAAIL,MAAW,IAAU;EACrC,IAAIA,MAAM,IAAI,OAAOA,MAAM,CAACM,MAAM,KAAK,UAAU,EAAE,OAAON,MAAM,CAACM,MAAM,CAAC,CAAC;EACzE;EACA,IAAIC,KAAK,CAACC,OAAO,CAACR,MAAM,CAAC,EAAE,OAAOA,MAAM,CAACS,GAAG,CAACJ,QAAQ,CAAC;EACtD,OAAOL,MAAM;AACf,CAAC;AAED,MAAMU,uBAAuB,GAAIZ,MAAoB,IAAK;EACxD,IAAI,CAACA,MAAM,EAAE;IACX,OAAOa,SAAS;EAClB;EAEA,MAAMC,GAAQ,GAAG;IACfC,KAAK,EAAEf,MAAM,CAACe,KAAK;IACnBC,OAAO,EAAEhB,MAAM,CAACgB;EAClB,CAAC;EAED,MAAMC,OAAY,GAAG,EAAE;EAEvB,KAAK,MAAMC,MAAM,IAAIlB,MAAM,CAACiB,OAAO,EAAE;IACnC,IAAIC,MAAM,CAAChB,MAAM,EAAE;MACjBe,OAAO,CAACE,IAAI,CAAC;QACXC,IAAI,EAAEF,MAAM,CAACE,IAAI;QACjBC,OAAO,EAAEA,CAAA,KAAM;UACbH,MAAM,CAACI,MAAM,IAAIzB,UAAU,CAACyB,MAAM,CAACJ,MAAM,CAACI,MAAM,CAAC;UACjD9C,OAAO,CAAC+C,IAAI,CAACL,MAAM,CAAChB,MAAM,CAAC;QAC7B;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACLe,OAAO,CAACE,IAAI,CAAC;QACXC,IAAI,EAAEF,MAAM,CAACE,IAAI;QACjBI,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;EACF;EAEAV,GAAG,CAACG,OAAO,GAAGA,OAAO;EAErB,OAAOH,GAAG;AACZ,CAAC;AAED,IAAIW,8BAA8B,GAAG,CAAC,CAAC;AAEvC,IAAIC,aAAkC;AAEtC,OAAO,MAAMC,IAAI,GAAG;EAClBC,KAAK,EAAGC,KAAa,IACnB,IAAIC,OAAO,CAAEC,OAAO,IAAKC,UAAU,CAACD,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEtDI,UAAUA,CAACC,IAAU,EAAEC,GAAY,EAAU;IAC3CA,GAAG,GAAGA,GAAG,GAAGA,GAAG,GAAG,YAAY;IAC9B,IAAIC,CAA4B,GAAG;MACjC,IAAI,EAAEF,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC;MAAE;MAC3B,IAAI,EAAEH,IAAI,CAACI,OAAO,CAAC,CAAC;MAAE;MACtB,IAAI,EAAEJ,IAAI,CAACK,QAAQ,CAAC,CAAC;MAAE;MACvB,IAAI,EAAEL,IAAI,CAACM,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEN,IAAI,CAACO,UAAU,CAAC,CAAC;MAAE;MACzB,IAAI,EAAEC,IAAI,CAACC,KAAK,CAAC,CAACT,IAAI,CAACG,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;MAAE;MAC7C,GAAG,EAAEH,IAAI,CAACU,eAAe,CAAC,CAAC,CAAE;IAC/B,CAAC;;IAED;IACA,IAAI,OAAO,CAACC,IAAI,CAACV,GAAG,CAAC,EAAE;MACrBA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACd,IAAI,CAACe,WAAW,CAAC,CAAC,GAAG,EAAE,EAAEC,MAAM,CAAC,CAAC,GAAGH,MAAM,CAACC,EAAE,CAACG,MAAM,CACvD,CAAC;IACH;IAEA,KAAK,IAAIC,CAAC,IAAIhB,CAAC,EAAE;MACf,IAAI,IAAIW,MAAM,CAAC,GAAG,GAAGK,CAAC,GAAG,GAAG,EAAE,GAAG,CAAC,CAACP,IAAI,CAACV,GAAG,CAAC,EAAE;QAC5CA,GAAG,GAAGA,GAAG,CAACW,OAAO,CACfC,MAAM,CAACC,EAAE,EACT,CAACD,MAAM,CAACC,EAAE,CAACG,MAAM,KAAK,CAAC,GACnBf,CAAC,CAACgB,CAAC,CAAC,GACJ,CAAC,IAAI,GAAGhB,CAAC,CAACgB,CAAC,CAAC,EAAEF,MAAM,CAAC,CAAC,EAAE,GAAGd,CAAC,CAACgB,CAAC,CAAC,EAAED,MAAM,CAAC,EAC1ChD,QAAQ,CAAC,CACb,CAAC;MACH;IACF;IACA,OAAOgC,GAAG;EACZ,CAAC;EAEDkB,OAAO,EAAGnD,MAAW,IACnBD,cAAc,CAACC,MAAM,CAAC,GAClBE,MAAM,CAACkD,IAAI,CAACpD,MAAM,CAAC,CAACqD,MAAM,CACxB,CAACC,MAAM,EAAEC,GAAG,MAAM;IAChB,GAAGD,MAAM;IACT,CAACC,GAAG,GAAGlD,QAAQ,CAACL,MAAM,CAACuD,GAAG,CAAC;EAC7B,CAAC,CAAC,EACF,CAAC,CACH,CAAC,GACDlD,QAAQ,CAACL,MAAM,CAAC;EAEtBwD,SAAS,EAAGC,KAAa,IAAK;IAC5B,OAAO,mBAAmB,CAACd,IAAI,CAACc,KAAK,CAAC;EACxC,CAAC;EAEDC,WAAW,EAAGC,GAAW,IAAK;IAC5B,OAAOA,GAAG,CAACC,UAAU,CAAC,MAAM,CAAC;EAC/B,CAAC;EAEDC,iBAAiB,EAAGC,GAAW,IAAK;IAAA,IAAAC,WAAA;IAClC,QAAAA,WAAA,GAAOD,GAAG,CAACE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAAD,WAAA,gBAAAA,WAAA,GAApBA,WAAA,CAAsBC,KAAK,CAAC,GAAG,CAAC,cAAAD,WAAA,gBAAAA,WAAA,GAAhCA,WAAA,CAAkCE,GAAG,CAAC,CAAC,cAAAF,WAAA,uBAAvCA,WAAA,CAAyCG,IAAI,CAAC,CAAC;EACxD,CAAC;EAEDC,gBAAgB,EAAEA,CAAA,KAAM;IACtB,IAAIC,SAAS,GAAG,CAAE,IAAIC,IAAI,CAAC,CAAC,CAACC,OAAO,CAAC,CAAC,GAAG,IAAI,GAAI,CAAC,EAAErE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;IAClE,OACEmE,SAAS,GACT,kBAAkB,CAACxB,OAAO,CAAC,MAAM,EAAE,YAAY;MAC7C,OAAO,CAAEJ,IAAI,CAAC+B,MAAM,CAAC,CAAC,GAAG,EAAE,GAAI,CAAC,EAAEtE,QAAQ,CAAC,EAAE,CAAC,CAACuE,WAAW,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC;EAEN,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACEC,aAAa,EAAE,SAAAA,CAACC,KAAa,EAAyB;IAAA,IAAvBC,EAAE,GAAAC,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAjE,SAAA,GAAAiE,SAAA,MAAG,KAAK;IAAA,IAAEC,EAAE,GAAAD,SAAA,CAAA3B,MAAA,QAAA2B,SAAA,QAAAjE,SAAA,GAAAiE,SAAA,MAAG,CAAC;IAC/C,MAAME,MAAM,GAAGH,EAAE,GAAG,IAAI,GAAG,IAAI;IAE/B,IAAInC,IAAI,CAACuC,GAAG,CAACL,KAAK,CAAC,GAAGI,MAAM,EAAE;MAC5B,OAAOJ,KAAK,GAAG,IAAI;IACrB;IAEA,MAAMM,KAAK,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;IAC9D,IAAIC,CAAC,GAAG,CAAC,CAAC;IACV,MAAMC,CAAC,GAAG,EAAE,IAAIL,EAAE;IAElB,GAAG;MACDH,KAAK,IAAII,MAAM;MACf,EAAEG,CAAC;IACL,CAAC,QACCzC,IAAI,CAAC2C,KAAK,CAAC3C,IAAI,CAACuC,GAAG,CAACL,KAAK,CAAC,GAAGQ,CAAC,CAAC,GAAGA,CAAC,IAAIJ,MAAM,IAC7CG,CAAC,GAAGD,KAAK,CAAC/B,MAAM,GAAG,CAAC;IAGtB,OAAOyB,KAAK,CAACU,OAAO,CAACP,EAAE,CAAC,GAAG,GAAG,GAAGG,KAAK,CAACC,CAAC,CAAC;EAC3C,CAAC;EAEDI,cAAc,EAAEA,CAAA,KAAM;IACpB,MAAM,GAAGC,QAAQ,CAAC,GAAG5G,QAAQ,CAAC,CAAC,CAAC;IAChC,OAAO,MAAM4G,QAAQ,CAAE7B,KAAK,IAAKA,KAAK,GAAG,CAAC,CAAC;EAC7C,CAAC;EAED8B,SAAS,EAAGC,KAAa,IAAK;IAC5B,IAAIA,KAAK,EAAE;MACThG,KAAK,CAACiG,eAAe,CAACD,KAAK,EAAEhG,KAAK,CAACkG,KAAK,EAAElG,KAAK,CAACmG,MAAM,CAAC;IACzD;EACF,CAAC;EAEDC,eAAe,EAAG9F,MAAoB,IAAK;IACzC,MAAM+F,SAAS,GAAGnF,uBAAuB,CAACZ,MAAM,CAAC;IACjD,IAAI+F,SAAS,EAAE;MACblH,KAAK,CAACmH,KAAK,CAACD,SAAS,CAAChF,KAAK,EAAEgF,SAAS,CAAC/E,OAAO,EAAE+E,SAAS,CAAC9E,OAAO,CAAC;MAClE,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC;EAEDgF,qBAAqB,EAAEA,CAAA,KAAM;IAC3B,IAAIhH,QAAQ,CAACiH,EAAE,KAAK,KAAK,IAAIzG,WAAW,CAAC0G,WAAW,CAAC,CAAC,EAAE;MACtD;MACA1G,WAAW,CAAC2G,kBAAkB,CAAC,CAAC,CAC7BC,IAAI,CAAEC,2BAA2B,IAAK;QACrCC,OAAO,CAACC,GAAG,CACT,8CAA8C,EAC9CF,2BACF,CAAC;MACH,CAAC,CAAC,CACDG,KAAK,CAAEC,KAAK,IAAK;QAChBH,OAAO,CAACC,GAAG,CAACE,KAAK,CAAC;MACpB,CAAC,CAAC;MACJ,OAAO,IAAI;IACb,CAAC,MAAM;MACL/E,IAAI,CAACgF,gBAAgB,CAAC,CAAC;MACvB,OAAO,KAAK;IACd;EACF,CAAC;EAEDA,gBAAgB,EAAEA,CAAA,KAAM;IACtB9G,UAAU,CAACyB,MAAM,CAAC,aAAa,CAAC;IAChC,IAAIrC,QAAQ,CAACiH,EAAE,KAAK,KAAK,EAAE;MACzBpH,OAAO,CAAC8H,UAAU,CAAC,cAAc,CAAC,CAACP,IAAI,CAAEQ,SAAS,IAAK;QACrD,IAAIA,SAAS,EAAE;UACb/H,OAAO,CAACgI,OAAO,CAAChH,aAAa,CAACiH,YAAY,CAAC;QAC7C;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACL,IAAIhI,aAAa,CAACiI,wBAAwB,EAAE;QAC1CjI,aAAa,CAACiI,wBAAwB,CAACC,kBAAkB,CACvD,oBAAoB,EACnBC,WAAoB,IAAK;UACxB,IAAIA,WAAW,EAAE;YACf,IAAInI,aAAa,CAACiI,wBAAwB,CAACG,UAAU,EAAE;cACrDpI,aAAa,CAACiI,wBAAwB,CAACG,UAAU,CAC/CrH,aAAa,CAACsH,kBAAkB,EAChC,oBAAoB,EACpB,6CACF,CAAC;YACH,CAAC,MAAM;cACLzF,IAAI,CAAC8D,SAAS,CAAC,UAAU,CAAC;cAC1B3G,OAAO,CAACgI,OAAO,CAAChH,aAAa,CAACuH,kBAAkB,CAAC;YACnD;UACF,CAAC,MAAM;YACL1F,IAAI,CAAC8D,SAAS,CAAC,WAAW,CAAC;UAC7B;QACF,CACF,CAAC;MACH;IACF;EACF,CAAC;EAED6B,SAAS,EAAEA,CAAA,KAAM;IACf,IAAIrI,QAAQ,CAACiH,EAAE,KAAK,KAAK,EAAE;MACzBpH,OAAO,CAAC8H,UAAU,CAAC,cAAc,CAAC,CAACP,IAAI,CAAEQ,SAAS,IAAK;QACrD,IAAIA,SAAS,EAAE;UACb/H,OAAO,CAACgI,OAAO,CAAChH,aAAa,CAACyH,cAAc,CAAC;QAC/C;MACF,CAAC,CAAC;IACJ,CAAC,MAAM;MACL;MACAzI,OAAO,CAACgI,OAAO,CAAChH,aAAa,CAAC0H,eAAe,CAAC;IAChD;EACF,CAAC;EAEDC,QAAQ,EAAE,MAAOrG,IAAY,IAAK;IAChC,IAAI,CAACsG,OAAO,EAAE;MACZ,MAAMC,KAAK,CAAC7H,aAAa,CAAC8H,WAAW,GAAGC,kBAAkB,CAACzG,IAAI,CAAC,CAAC;IACnE;EACF,CAAC;EAED0G,yBAAyB,EAAE,MAAOC,aAAsC,IAAK;IAC3E,IAAI9I,QAAQ,CAACiH,EAAE,KAAK,SAAS,EAAE;MAC7B,OAAO,IAAI;IACb;IAEA,MAAM8B,UAAU,GAAGhJ,kBAAkB,CAACiJ,WAAW,CAACC,sBAAsB;IAExE,MAAMC,aAAa,GAAG,MAAMnJ,kBAAkB,CAACoJ,KAAK,CAACJ,UAAU,CAAC;IAChE,IAAIG,aAAa,EAAE;MACjB,OAAO,IAAI;IACb;;IAEA;IACA,IAAIpJ,aAAa,CAACsJ,MAAM,CAACC,qBAAqB,EAAE;MAC9C,IAAI,MAAMvJ,aAAa,CAACsJ,MAAM,CAACC,qBAAqB,CAAC,CAAC,EAAE;QACtD,OAAO,IAAI;MACb;IACF;IAEA,IAAIP,aAAa,EAAE;MACjB,MAAMQ,IAAI,GAAG,MAAMR,aAAa,CAAC,CAAC;MAClC,IAAI,CAACQ,IAAI,EAAE;QACT,OAAO,KAAK;MACd;IACF;IAEA,MAAMC,MAAM,GAAG,MAAMxJ,kBAAkB,CAACyJ,OAAO,CAACT,UAAU,CAAC;IAC3D,IAAIQ,MAAM,KAAK,SAAS,EAAE;MACxB,OAAO,IAAI;IACb;IAEA,IAAIzJ,aAAa,CAACsJ,MAAM,CAACK,uBAAuB,EAAE;MAChD,IAAI,MAAM3J,aAAa,CAACsJ,MAAM,CAACK,uBAAuB,CAAC,CAAC,EAAE;QACxD,OAAO,IAAI;MACb;IACF;IAEA,OAAO,KAAK;EACd,CAAC;EAEDC,WAAW,EAAE,MAAAA,CACX3E,GAAW,EACX4E,SAAkB,EAClBb,aAAsC,KACnC;IACHxB,OAAO,CAACC,GAAG,CAAC,aAAa,EAAExC,GAAG,CAAC;IAE/B,IAAI,CAACA,GAAG,EAAE;MACR,OAAO;QAAE6E,SAAS,EAAE,CAAC,CAAC;QAAEC,MAAM,EAAE;MAAe,CAAC;IAClD;;IAEA;IACA,IACE7J,QAAQ,CAACiH,EAAE,KAAK,SAAS,IACzB,EAAE,MAAMvE,IAAI,CAACmG,yBAAyB,CAACC,aAAa,CAAC,CAAC,EACtD;MACA,OAAO;QAAEc,SAAS,EAAE,CAAC;MAAE,CAAC;IAC1B;;IAEA;IACA,IAAI5J,QAAQ,CAACiH,EAAE,KAAK,KAAK,IAAI,CAACvE,IAAI,CAACiC,WAAW,CAACI,GAAG,CAAC,EAAE;MACnD,IAAI;QACF,MAAMrF,UAAU,CAACoK,IAAI,CAAC/E,GAAG,EAAE;UACzBgF,IAAI,EAAE,OAAO;UACbC,KAAK,EAAEL,SAAS,aAATA,SAAS,cAATA,SAAS,GAAI9I,aAAa,CAACoJ;QACpC,CAAC,CAAC;QACF,OAAO;UAAEL,SAAS,EAAE;QAAE,CAAC;MACzB,CAAC,CAAC,OAAOnC,KAAU,EAAE;QACnBH,OAAO,CAACG,KAAK,CAACA,KAAK,CAAC;QACpB,OAAO;UAAEmC,SAAS,EAAE,CAAC,CAAC;UAAEC,MAAM,EAAEK,IAAI,CAACC,SAAS,CAAC1C,KAAK;QAAE,CAAC;MACzD;IACF;;IAEA;IACA,MAAM2C,SAAS,GAAG1H,IAAI,CAACoC,iBAAiB,CAACC,GAAG,CAAC;IAC7C,IAAI;MACF,IAAI,CAACjF,aAAa,CAACuK,mBAAmB,EAAE;QACtC3H,IAAI,CAAC2F,SAAS,CAAC,CAAC;QAChB,OAAO;UAAEuB,SAAS,EAAE,CAAC,CAAC;UAAEC,MAAM,EAAE;QAAc,CAAC;MACjD;MACA,IAAIQ,mBAAmB,GAAGC,OAAO,CAAC,wBAAwB,CAAC,CAACC,OAAO;MACnE,MAAMC,GAAG,GAAG,MAAMH,mBAAmB,CAClCtJ,MAAM,CAAC;QACN0J,SAAS,EAAE,IAAI;QACfC,SAAS,EAAEN;MACb,CAAC,CAAC,CACD1B,KAAK,CAAC,KAAK,EAAE3D,GAAG,EAAE,CAAC,CAAC,CAAC;MACxB;MACAuC,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEiD,GAAG,CAACG,IAAI,CAAC,CAAC,CAAC;MAC7C,IAAI;QACF,MAAMjL,UAAU,CAACoK,IAAI,CAAC,SAAS,GAAGU,GAAG,CAACG,IAAI,CAAC,CAAC,EAAE;UAC5CZ,IAAI,EAAE,OAAO;UACbC,KAAK,EAAEL;QACT,CAAC,CAAC;QACF,OAAO;UAAEC,SAAS,EAAE;QAAE,CAAC;MACzB,CAAC,CAAC,OAAOgB,EAAE,EAAE;QACXtD,OAAO,CAACG,KAAK,CAACmD,EAAE,GAAG,IAAI,GAAGJ,GAAG,CAACG,IAAI,CAAC,CAAC,CAAC;QACrC,OAAO;UAAEf,SAAS,EAAE,CAAC,CAAC;UAAEC,MAAM,EAAEK,IAAI,CAACC,SAAS,CAACS,EAAE;QAAE,CAAC;MACtD;IACF,CAAC,CAAC,OAAOnD,KAAK,EAAE;MACdH,OAAO,CAACG,KAAK,CAACA,KAAK,CAAC;MACpB,OAAO;QAAEmC,SAAS,EAAE,CAAC,CAAC;QAAEC,MAAM,EAAEK,IAAI,CAACC,SAAS,CAAC1C,KAAK;MAAE,CAAC;IACzD;EACF,CAAC;EAEDoD,gBAAgB,EAAGC,MAAe,IAAK;IACrCnK,QAAQ,CAAC4F,QAAQ,CAAC7F,YAAY,CAACqK,OAAO,EAAED,MAAM,CAAC;IAC/CrI,aAAa,GAAGqI,MAAM;EACxB,CAAC;EAEDE,gBAAgB,EAAEA,CAAA,KAAM;IACtB,OAAOvI,aAAa,KAAKb,SAAS,GAAG,IAAI,GAAGa,aAAa;EAC3D,CAAC;EAEDwI,OAAO,EAAE,MAAAA,CAAA,KAAY;IACnB,IAAI;MACF,IAAIxI,aAAa,KAAKb,SAAS,EAAE;QAC/Ba,aAAa,GAAG9B,QAAQ,CAACuK,QAAQ,CAACxK,YAAY,CAACqK,OAAO,CAAC;MACzD;MACA,IAAI,CAACtI,aAAa,EAAE;QAClB;MACF;MACA,IAAIzC,QAAQ,CAACiH,EAAE,KAAK,KAAK,EAAE;QAAA,IAAAkE,qBAAA;QACzB,CAAAA,qBAAA,GAAArL,aAAa,CAACsL,YAAY,cAAAD,qBAAA,eAA1BA,qBAAA,CAA4BF,OAAO,CAAC,CAAC;MACvC,CAAC,MAAM;QACL,IAAIzI,8BAA8B,KAAK,CAAC,CAAC,EAAE;UACzCA,8BAA8B,GAAG,CAAC,MAAMzC,kBAAkB,CAACoJ,KAAK;UAC9D;UACA,4BACF,CAAC,IACG,CAAC,GACD,CAAC;QACP;QACA,IAAI3G,8BAA8B,KAAK,CAAC,EAAE;UACxCvC,SAAS,CAACgL,OAAO,CAAC,CAAC,CAAC;QACtB;MACF;IACF,CAAC,CAAC,OAAOxD,KAAK,EAAE,CAAC;EACnB,CAAC;EAED4D,KAAK,EAAEA,CAAA,KAAM;IACX,IAAIrL,QAAQ,CAACiH,EAAE,KAAK,KAAK,EAAE;MACzB,OAAOjH,QAAQ,CAACqL,KAAK;IACvB,CAAC,MAAM;MACL,OAAO9K,QAAQ,CAAC,CAAC;IACnB;EACF,CAAC;EAED+K,eAAe,EAAEA,CAAA,KAAM;IACrB,OAAOhL,eAAe,CAAC,CAAC,IAAIoC,IAAI,CAAC2I,KAAK,CAAC,CAAC;EAC1C,CAAC;EAEDE,cAAc,EAAEA,CAAA,KAAM;IACpB,IAAIvL,QAAQ,CAACiH,EAAE,KAAK,SAAS,EAAE,OAAO,KAAK;IAC3C,IAAI;MACF,IAAI5G,UAAU,CAAC,CAAC,EAAE,OAAO,IAAI;IAC/B,CAAC,CAAC,MAAM,CAAC;IACT,OAAO,CAACD,mBAAmB,CAAC,CAAC,EAAEF,QAAQ,CAAC,CAAC,EAAEC,WAAW,CAAC,CAAC,CAAC,CAACqL,IAAI,CAC3DC,IAAI,IACHA,IAAI,CAAChG,WAAW,CAAC,CAAC,CAACiG,QAAQ,CAAC,QAAQ,CAAC,IACrCD,IAAI,CAAChG,WAAW,CAAC,CAAC,CAACiG,QAAQ,CAAC,OAAO,CACvC,CAAC;EACH,CAAC;EAEDC,QAAQ,EAAEA,CAAA,KAAM;IACd,IAAI3L,QAAQ,CAACiH,EAAE,KAAK,KAAK,EAAE;MACzB,OAAO,IAAI;IACb;IACA,OAAOxH,YAAY,CAACmM,aAAa,CAAC,gBAAgB,CAAC,KAAK,GAAG;EAC7D,CAAC;EAEDC,OAAO,EAAEA,CAAA,KAAM;IACbpM,YAAY,CAACqM,aAAa,CAAC,gBAAgB,EAAE,GAAG,CAAC;IACjDhM,aAAa,CAACsJ,MAAM,CAACyC,OAAO,IAAI/L,aAAa,CAACsJ,MAAM,CAACyC,OAAO,CAAC,CAAC;IAC9DrM,YAAY,CAACuM,gBAAgB,CAAC,SAAS,CAAC;EAC1C;AACF,CAAC"}
|
package/lib/typescript/Tool.d.ts
CHANGED
package/package.json
CHANGED
package/src/SentryManager.ts
CHANGED
|
@@ -1,41 +1,51 @@
|
|
|
1
1
|
import * as Sentry from '@sentry/react-native';
|
|
2
2
|
import { LoginSuccessResultType } from './LoginManager';
|
|
3
3
|
import { Notification } from './Notification';
|
|
4
|
-
import { ToolkitConfig } from './Tool';
|
|
4
|
+
import { Tool, ToolkitConfig } from './Tool';
|
|
5
5
|
|
|
6
6
|
let isReady = false;
|
|
7
|
+
|
|
8
|
+
const doInit = () => {
|
|
9
|
+
console.log('使用 Sentry');
|
|
10
|
+
Sentry.init({
|
|
11
|
+
dsn: ToolkitConfig.SentryDSN,
|
|
12
|
+
tracesSampleRate: 1.0,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
Notification.addListener(
|
|
16
|
+
'onLoginSuccess',
|
|
17
|
+
({ user }: LoginSuccessResultType) => {
|
|
18
|
+
const sentryUser: Sentry.User = {
|
|
19
|
+
id: user.AVUser.get('objectId'),
|
|
20
|
+
email: user.email,
|
|
21
|
+
username: user.nickname,
|
|
22
|
+
};
|
|
23
|
+
Sentry.setUser(sentryUser);
|
|
24
|
+
}
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
Notification.addListener('onLogout', () => {
|
|
28
|
+
Sentry.setUser(null);
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Sentry.nativeCrash();
|
|
32
|
+
// Sentry.captureException(new Error('测试77!'));
|
|
33
|
+
// throw new Error('My first Sentry error!');
|
|
34
|
+
};
|
|
35
|
+
|
|
7
36
|
export const SentryManager = {
|
|
8
37
|
init: () => {
|
|
9
38
|
isReady = !__DEV__ && !!ToolkitConfig.SentryDSN;
|
|
10
39
|
if (!isReady) {
|
|
11
40
|
console.log('不使用 Sentry');
|
|
12
41
|
} else {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Notification.addListener(
|
|
21
|
-
'onLoginSuccess',
|
|
22
|
-
({ user }: LoginSuccessResultType) => {
|
|
23
|
-
const sentryUser: Sentry.User = {
|
|
24
|
-
id: user.AVUser.get('objectId'),
|
|
25
|
-
email: user.email,
|
|
26
|
-
username: user.nickname,
|
|
27
|
-
};
|
|
28
|
-
Sentry.setUser(sentryUser);
|
|
29
|
-
}
|
|
30
|
-
);
|
|
31
|
-
|
|
32
|
-
Notification.addListener('onLogout', () => {
|
|
33
|
-
Sentry.setUser(null);
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
// Sentry.nativeCrash();
|
|
37
|
-
// Sentry.captureException(new Error('测试77!'));
|
|
38
|
-
// throw new Error('My first Sentry error!');
|
|
42
|
+
if (Tool.isAgreed()) {
|
|
43
|
+
doInit();
|
|
44
|
+
} else {
|
|
45
|
+
Notification.addListenerOnce('onAgree', () => {
|
|
46
|
+
doInit();
|
|
47
|
+
});
|
|
48
|
+
}
|
|
39
49
|
}
|
|
40
50
|
},
|
|
41
51
|
|
package/src/Tool.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
AppLink,
|
|
3
|
+
Notification,
|
|
4
|
+
SyncPrefData,
|
|
5
|
+
} from '@norcy/react-native-toolkit';
|
|
2
6
|
import CameraRoll from '@react-native-community/cameraroll';
|
|
3
7
|
import { useState } from 'react';
|
|
4
8
|
import {
|
|
@@ -477,4 +481,17 @@ export const Tool = {
|
|
|
477
481
|
name.toLowerCase().includes('honor')
|
|
478
482
|
);
|
|
479
483
|
},
|
|
484
|
+
|
|
485
|
+
isAgreed: () => {
|
|
486
|
+
if (Platform.OS === 'ios') {
|
|
487
|
+
return true;
|
|
488
|
+
}
|
|
489
|
+
return SyncPrefData.getPrefString('Sync_AgreeMode') === '1';
|
|
490
|
+
},
|
|
491
|
+
|
|
492
|
+
onAgree: () => {
|
|
493
|
+
SyncPrefData.setPrefString('Sync_AgreeMode', '1');
|
|
494
|
+
NativeModules.NCYAPI.onAgree && NativeModules.NCYAPI.onAgree();
|
|
495
|
+
Notification.postNotification('onAgree');
|
|
496
|
+
},
|
|
480
497
|
};
|