@norcy/react-native-toolkit 0.1.21 → 0.1.23

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.
@@ -4,6 +4,18 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.Tool = void 0;
7
+ var _react = require("react");
8
+ var _reactNativeSimpleToast = _interopRequireDefault(require("react-native-simple-toast"));
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const _isPlainObject = target => {
11
+ return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
12
+ };
13
+ const _jsonify = target => {
14
+ if (target && typeof target.toJSON === 'function') return target.toJSON();
15
+ // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
16
+ if (Array.isArray(target)) return target.map(_jsonify);
17
+ return target;
18
+ };
7
19
  const Tool = exports.Tool = {
8
20
  sleep: delay => new Promise(resolve => setTimeout(resolve, delay)),
9
21
  formatDate(date, fmt) {
@@ -35,18 +47,59 @@ const Tool = exports.Tool = {
35
47
  }
36
48
  return fmt;
37
49
  },
38
- isPlainObject: target => {
39
- return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
50
+ jsonify: target => _isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
51
+ ...result,
52
+ [key]: _jsonify(target[key])
53
+ }), {}) : _jsonify(target),
54
+ isChinese: value => {
55
+ return /[\u4E00-\u9FA5]+/g.test(value);
40
56
  },
41
- _jsonify: target => {
42
- if (target && typeof target.toJSON === 'function') return target.toJSON();
43
- // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
44
- if (Array.isArray(target)) return target.map(Tool._jsonify);
45
- return target;
57
+ isRemoteURL: str => {
58
+ return str.startsWith('http');
46
59
  },
47
- jsonify: target => Tool.isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
48
- ...result,
49
- [key]: Tool._jsonify(target[key])
50
- }), {}) : Tool._jsonify(target)
60
+ get_url_extension: url => {
61
+ var _url$split$;
62
+ return (_url$split$ = url.split(/[#?]/)[0]) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.split('.')) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.pop()) === null || _url$split$ === void 0 ? void 0 : _url$split$.trim();
63
+ },
64
+ generateObjectId: () => {
65
+ var timestamp = (new Date().getTime() / 1000 | 0).toString(16); // eslint-disable-line no-bitwise
66
+ return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
67
+ return (Math.random() * 16 | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
68
+ });
69
+ },
70
+
71
+ /**
72
+ * Format bytes as human-readable text.
73
+ *
74
+ * @param bytes Number of bytes.
75
+ * @param si True to use metric (SI) units, aka powers of 1000. False to use
76
+ * binary (IEC), aka powers of 1024.
77
+ * @param dp Number of decimal places to display.
78
+ *
79
+ * @return Formatted string.
80
+ */
81
+ humanFileSize: function (bytes) {
82
+ let si = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
83
+ let dp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
84
+ const thresh = si ? 1000 : 1024;
85
+ if (Math.abs(bytes) < thresh) {
86
+ return bytes + ' B';
87
+ }
88
+ const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
89
+ let u = -1;
90
+ const r = 10 ** dp;
91
+ do {
92
+ bytes /= thresh;
93
+ ++u;
94
+ } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
95
+ return bytes.toFixed(dp) + ' ' + units[u];
96
+ },
97
+ useForceUpdate: () => {
98
+ const [, setValue] = (0, _react.useState)(0);
99
+ return () => setValue(value => value + 1);
100
+ },
101
+ showToast: toast => {
102
+ _reactNativeSimpleToast.default.showWithGravity(toast, _reactNativeSimpleToast.default.SHORT, _reactNativeSimpleToast.default.CENTER);
103
+ }
51
104
  };
52
105
  //# sourceMappingURL=Tool.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Tool","exports","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","toString","isPlainObject","target","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","jsonify","keys","reduce","result","key"],"sources":["Tool.ts"],"sourcesContent":["export 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 isPlainObject: (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n },\n\n _jsonify: (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(Tool._jsonify);\n return target;\n },\n\n jsonify: (target: any) =>\n Tool.isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: Tool._jsonify(target[key]),\n }),\n {}\n )\n : Tool._jsonify(target),\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","require","_reactNativeSimpleToast","_interopRequireDefault","obj","__esModule","default","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","Tool","exports","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","undefined","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","useState","showToast","toast","Toast","showWithGravity","SHORT","CENTER"],"sources":["Tool.ts"],"sourcesContent":["import { useState } from 'react';\nimport Toast from 'react-native-simple-toast';\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\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 Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n};\n"],"mappings":"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"}
@@ -150,7 +150,7 @@ const VipManager = exports.VipManager = {
150
150
  console.log('获取商品');
151
151
  if (targetOffering !== null && targetOffering.availablePackages.length !== 0) {
152
152
  let packages = targetOffering.availablePackages;
153
- // 如果是订阅的,非试用的,展示永久 VIP
153
+ // 如果是订阅的,非试用的,过滤订阅产品,只展示永久 VIP
154
154
  if (VipManager.isVip() && !VipManager.isTrailVip()) {
155
155
  packages = packages.filter(item => {
156
156
  return item;
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","_reactNativePurchases","_interopRequireDefault","_DevConfig","_LoginManager","_Notification","_PrefData","_Tool","_VipAndroidManager","obj","__esModule","default","_customerInfo","_RC_ENTITLEMENT_ID","VipManager","exports","init","_ref","RC_API_KEY","RC_ENTITLEMENT_ID","WeChatPayServer","console","log","VipAndroidManager","Purchases","configure","apiKey","refreshVip","Notification","addListener","_ref2","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","LoginManager","isLogin","errorCode","Platform","OS","customerInfo","entitlements","active","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","all","NormalVip","availablePackages","length","packages","isVip","isTrailVip","filter","item","_customerInfo2","_customerInfo3","_isVip","isActive","isSandbox","DevConfig","hasValue","BuildInPrefs","DevVip","getValue","_VipManager$vipEndTim","vipEndTime","vipCountDay","_customerInfo4","time","expirationDate","date","Date","Tool","formatDate","_customerInfo5","diff","getTime","Math","max","ceil","_LoginManager$current","vipType","currentUser","includes","_customerInfo6","getCustomerInfo","updateVipInfo","postNotification","_customerInfo7","_LoginManager$current2","keys","values","productIdentifier","oldVipType","push","_customerInfo8","expireDate","_LoginManager$current3","oldVipEndTime","batchUpdateUser"],"sources":["VipManager.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport Purchases, {\n CustomerInfo,\n PurchasesPackage,\n} from 'react-native-purchases';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { UserType } from './constant';\n\nlet _customerInfo: CustomerInfo | null;\nlet _RC_ENTITLEMENT_ID: string = '';\n\nexport const VipManager = {\n init: ({\n RC_API_KEY,\n RC_ENTITLEMENT_ID,\n WeChatPayServer,\n }: {\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n }) => {\n console.log('Vip 模块初始化');\n\n VipAndroidManager.init({ WeChatPayServer });\n\n _RC_ENTITLEMENT_ID = RC_ENTITLEMENT_ID;\n\n Purchases.configure({\n apiKey: RC_API_KEY,\n });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: { error: any; user: UserType }) => {\n console.log('Vip 模块用户登录');\n if (!error && user) {\n try {\n await Purchases.logIn(user.AVUser.get('objectId'));\n await Purchases.setAttributes({ nickname: user.nickname });\n await VipManager.refreshVip();\n } catch (e) {\n console.error(e);\n }\n }\n }\n );\n\n Notification.addListener('onLogout', () => {\n Purchases.logOut();\n _customerInfo = null;\n });\n },\n\n purchase: async (purchasePackage: PurchasesPackage) => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n if (!purchasePackage) {\n return { errorCode: -4 };\n }\n\n console.log('购买商品', purchasePackage);\n\n if (Platform.OS === 'android') {\n return await VipAndroidManager.purchase(purchasePackage);\n }\n\n try {\n const { customerInfo } = await Purchases.purchasePackage(purchasePackage);\n\n await VipManager.refreshVip(customerInfo);\n if (\n typeof customerInfo.entitlements.active[_RC_ENTITLEMENT_ID] !==\n 'undefined'\n ) {\n console.log('购买成功');\n return { errorCode: 0 };\n } else {\n console.log('购买失败(-5)');\n return { errorCode: -5, errorMsg: '' };\n }\n } catch (e: any) {\n if (!e.userCancelled) {\n console.log('购买失败(-5)', e.message);\n return { errorCode: -5, errorMsg: e.message };\n } else {\n console.log('购买取消(-2)');\n return { errorCode: -2 };\n }\n }\n },\n\n recover: async () => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n try {\n if (Platform.OS === 'android') {\n return await VipAndroidManager.recover();\n }\n\n console.log('iOS 恢复购买');\n const customerInfo = await Purchases.restorePurchases();\n await VipManager.refreshVip(customerInfo);\n if (customerInfo.entitlements.active?.vip) {\n console.log('恢复成功');\n return { errorCode: 0 };\n } else {\n console.log('恢复失败(-2)');\n return { errorCode: -2 };\n }\n } catch (e: any) {\n console.log('恢复失败(-3)', e.message);\n return { errorCode: -3, errorMsg: e.message };\n }\n },\n\n getPackages: async (): Promise<PurchasesPackage[]> => {\n if (VipManager.isForeverVip()) {\n return [];\n }\n\n if (Platform.OS === 'android' || __DEV__) {\n return VipAndroidManager.getPackages();\n }\n\n try {\n const offerings = await Purchases.getOfferings();\n let targetOffering = offerings.current;\n if (__DEV__) {\n targetOffering = offerings.all.NormalVip;\n }\n console.log('获取商品');\n if (\n targetOffering !== null &&\n targetOffering.availablePackages.length !== 0\n ) {\n let packages = targetOffering.availablePackages;\n // 如果是订阅的,非试用的,展示永久 VIP\n if (VipManager.isVip() && !VipManager.isTrailVip()) {\n packages = packages.filter((item) => {\n return item;\n // TODO\n // return item.product.productCategory === 'NON_SUBSCRIPTION';\n });\n }\n return packages;\n } else {\n return [];\n }\n } catch (e) {\n console.error('Get Product Fail', e);\n return [];\n }\n },\n\n isVip: () => {\n let _isVip = _customerInfo?.entitlements?.active?.vip?.isActive;\n if (\n _isVip &&\n !__DEV__ &&\n _customerInfo?.entitlements?.active?.vip.isSandbox\n ) {\n _isVip = false;\n }\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevVip)) {\n _isVip = DevConfig.getValue(BuildInPrefs.DevVip);\n }\n }\n return _isVip;\n },\n\n isForeverVip: () => {\n // 苹果的永久会员是非订阅制的,因此 RevenueCat 的 vipEndTime 会空\n return (\n VipManager.isVip() &&\n (VipManager.vipEndTime()?.length === 0 ||\n VipManager.vipCountDay() >= 36500)\n );\n },\n\n vipEndTime: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n return Tool.formatDate(date, 'yyyy-MM-dd');\n } else {\n return '';\n }\n },\n\n vipCountDay: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n const diff = date.getTime() - new Date().getTime();\n return Math.max(Math.ceil(diff / (24 * 60 * 60 * 1000)), 0);\n }\n return 0;\n },\n\n isTrailVip: () => {\n if (VipManager.isForeverVip()) {\n return false;\n }\n if (!VipManager.isVip()) {\n return false;\n }\n const vipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType?.includes('rc_promo_')) {\n return true;\n }\n return false;\n },\n\n refreshVip: async (customerInfo?: CustomerInfo) => {\n try {\n console.log('刷新 VIP');\n if (customerInfo) {\n _customerInfo = customerInfo;\n } else {\n _customerInfo = await Purchases.getCustomerInfo();\n }\n console.log('VIP 信息', _customerInfo?.entitlements?.active);\n console.log('是否是 VIP', VipManager.isVip());\n console.log('VipInfo 过期时间', VipManager.vipEndTime());\n\n await updateVipInfo();\n Notification.postNotification('onVipRefresh', {});\n } catch (e) {\n console.error(e);\n Notification.postNotification('onVipRefresh', { e });\n }\n },\n};\n\nconst updateVipInfo = async () => {\n if (!VipManager.isVip() || !LoginManager.isLogin()) {\n return;\n }\n\n const keys = [];\n const values = [];\n\n const vipType = _customerInfo?.entitlements?.active?.vip?.productIdentifier;\n const oldVipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType && vipType !== oldVipType) {\n keys.push('vipType');\n values.push(vipType);\n }\n\n let vipEndTime;\n if (VipManager.isForeverVip()) {\n vipEndTime = new Date(10413763200000); // 约定 2300-01-01 00:00:00 为永久会员\n } else {\n const expireDate = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (expireDate) {\n vipEndTime = new Date(expireDate);\n }\n }\n if (vipEndTime) {\n const oldVipEndTime = LoginManager.currentUser()?.AVUser.get('vipEndTime');\n if (vipEndTime.getTime() !== oldVipEndTime?.getTime()) {\n keys.push('vipEndTime');\n values.push(vipEndTime);\n }\n }\n\n if (keys.length > 0) {\n await LoginManager.batchUpdateUser(keys, values);\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["_reactNative","require","_reactNativePurchases","_interopRequireDefault","_DevConfig","_LoginManager","_Notification","_PrefData","_Tool","_VipAndroidManager","obj","__esModule","default","_customerInfo","_RC_ENTITLEMENT_ID","VipManager","exports","init","_ref","RC_API_KEY","RC_ENTITLEMENT_ID","WeChatPayServer","console","log","VipAndroidManager","Purchases","configure","apiKey","refreshVip","Notification","addListener","_ref2","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","LoginManager","isLogin","errorCode","Platform","OS","customerInfo","entitlements","active","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","all","NormalVip","availablePackages","length","packages","isVip","isTrailVip","filter","item","_customerInfo2","_customerInfo3","_isVip","isActive","isSandbox","DevConfig","hasValue","BuildInPrefs","DevVip","getValue","_VipManager$vipEndTim","vipEndTime","vipCountDay","_customerInfo4","time","expirationDate","date","Date","Tool","formatDate","_customerInfo5","diff","getTime","Math","max","ceil","_LoginManager$current","vipType","currentUser","includes","_customerInfo6","getCustomerInfo","updateVipInfo","postNotification","_customerInfo7","_LoginManager$current2","keys","values","productIdentifier","oldVipType","push","_customerInfo8","expireDate","_LoginManager$current3","oldVipEndTime","batchUpdateUser"],"sources":["VipManager.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport Purchases, {\n CustomerInfo,\n PurchasesPackage,\n} from 'react-native-purchases';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { UserType } from './constant';\n\nlet _customerInfo: CustomerInfo | null;\nlet _RC_ENTITLEMENT_ID: string = '';\n\nexport const VipManager = {\n init: ({\n RC_API_KEY,\n RC_ENTITLEMENT_ID,\n WeChatPayServer,\n }: {\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n }) => {\n console.log('Vip 模块初始化');\n\n VipAndroidManager.init({ WeChatPayServer });\n\n _RC_ENTITLEMENT_ID = RC_ENTITLEMENT_ID;\n\n Purchases.configure({\n apiKey: RC_API_KEY,\n });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: { error: any; user: UserType }) => {\n console.log('Vip 模块用户登录');\n if (!error && user) {\n try {\n await Purchases.logIn(user.AVUser.get('objectId'));\n await Purchases.setAttributes({ nickname: user.nickname });\n await VipManager.refreshVip();\n } catch (e) {\n console.error(e);\n }\n }\n }\n );\n\n Notification.addListener('onLogout', () => {\n Purchases.logOut();\n _customerInfo = null;\n });\n },\n\n purchase: async (purchasePackage: PurchasesPackage) => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n if (!purchasePackage) {\n return { errorCode: -4 };\n }\n\n console.log('购买商品', purchasePackage);\n\n if (Platform.OS === 'android') {\n return await VipAndroidManager.purchase(purchasePackage);\n }\n\n try {\n const { customerInfo } = await Purchases.purchasePackage(purchasePackage);\n\n await VipManager.refreshVip(customerInfo);\n if (\n typeof customerInfo.entitlements.active[_RC_ENTITLEMENT_ID] !==\n 'undefined'\n ) {\n console.log('购买成功');\n return { errorCode: 0 };\n } else {\n console.log('购买失败(-5)');\n return { errorCode: -5, errorMsg: '' };\n }\n } catch (e: any) {\n if (!e.userCancelled) {\n console.log('购买失败(-5)', e.message);\n return { errorCode: -5, errorMsg: e.message };\n } else {\n console.log('购买取消(-2)');\n return { errorCode: -2 };\n }\n }\n },\n\n recover: async () => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n try {\n if (Platform.OS === 'android') {\n return await VipAndroidManager.recover();\n }\n\n console.log('iOS 恢复购买');\n const customerInfo = await Purchases.restorePurchases();\n await VipManager.refreshVip(customerInfo);\n if (customerInfo.entitlements.active?.vip) {\n console.log('恢复成功');\n return { errorCode: 0 };\n } else {\n console.log('恢复失败(-2)');\n return { errorCode: -2 };\n }\n } catch (e: any) {\n console.log('恢复失败(-3)', e.message);\n return { errorCode: -3, errorMsg: e.message };\n }\n },\n\n getPackages: async (): Promise<PurchasesPackage[]> => {\n if (VipManager.isForeverVip()) {\n return [];\n }\n\n if (Platform.OS === 'android' || __DEV__) {\n return VipAndroidManager.getPackages();\n }\n\n try {\n const offerings = await Purchases.getOfferings();\n let targetOffering = offerings.current;\n if (__DEV__) {\n targetOffering = offerings.all.NormalVip;\n }\n console.log('获取商品');\n if (\n targetOffering !== null &&\n targetOffering.availablePackages.length !== 0\n ) {\n let packages = targetOffering.availablePackages;\n // 如果是订阅的,非试用的,过滤订阅产品,只展示永久 VIP\n if (VipManager.isVip() && !VipManager.isTrailVip()) {\n packages = packages.filter((item) => {\n return item;\n // TODO\n // return item.product.productCategory === 'NON_SUBSCRIPTION';\n });\n }\n return packages;\n } else {\n return [];\n }\n } catch (e) {\n console.error('Get Product Fail', e);\n return [];\n }\n },\n\n isVip: () => {\n let _isVip = _customerInfo?.entitlements?.active?.vip?.isActive;\n if (\n _isVip &&\n !__DEV__ &&\n _customerInfo?.entitlements?.active?.vip.isSandbox\n ) {\n _isVip = false;\n }\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevVip)) {\n _isVip = DevConfig.getValue(BuildInPrefs.DevVip);\n }\n }\n return _isVip;\n },\n\n isForeverVip: () => {\n // 苹果的永久会员是非订阅制的,因此 RevenueCat 的 vipEndTime 会空\n return (\n VipManager.isVip() &&\n (VipManager.vipEndTime()?.length === 0 ||\n VipManager.vipCountDay() >= 36500)\n );\n },\n\n vipEndTime: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n return Tool.formatDate(date, 'yyyy-MM-dd');\n } else {\n return '';\n }\n },\n\n vipCountDay: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n const diff = date.getTime() - new Date().getTime();\n return Math.max(Math.ceil(diff / (24 * 60 * 60 * 1000)), 0);\n }\n return 0;\n },\n\n isTrailVip: () => {\n if (VipManager.isForeverVip()) {\n return false;\n }\n if (!VipManager.isVip()) {\n return false;\n }\n const vipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType?.includes('rc_promo_')) {\n return true;\n }\n return false;\n },\n\n refreshVip: async (customerInfo?: CustomerInfo) => {\n try {\n console.log('刷新 VIP');\n if (customerInfo) {\n _customerInfo = customerInfo;\n } else {\n _customerInfo = await Purchases.getCustomerInfo();\n }\n console.log('VIP 信息', _customerInfo?.entitlements?.active);\n console.log('是否是 VIP', VipManager.isVip());\n console.log('VipInfo 过期时间', VipManager.vipEndTime());\n\n await updateVipInfo();\n Notification.postNotification('onVipRefresh', {});\n } catch (e) {\n console.error(e);\n Notification.postNotification('onVipRefresh', { e });\n }\n },\n};\n\nconst updateVipInfo = async () => {\n if (!VipManager.isVip() || !LoginManager.isLogin()) {\n return;\n }\n\n const keys = [];\n const values = [];\n\n const vipType = _customerInfo?.entitlements?.active?.vip?.productIdentifier;\n const oldVipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType && vipType !== oldVipType) {\n keys.push('vipType');\n values.push(vipType);\n }\n\n let vipEndTime;\n if (VipManager.isForeverVip()) {\n vipEndTime = new Date(10413763200000); // 约定 2300-01-01 00:00:00 为永久会员\n } else {\n const expireDate = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (expireDate) {\n vipEndTime = new Date(expireDate);\n }\n }\n if (vipEndTime) {\n const oldVipEndTime = LoginManager.currentUser()?.AVUser.get('vipEndTime');\n if (vipEndTime.getTime() !== oldVipEndTime?.getTime()) {\n keys.push('vipEndTime');\n values.push(vipEndTime);\n }\n }\n\n if (keys.length > 0) {\n await LoginManager.batchUpdateUser(keys, values);\n }\n};\n"],"mappings":"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"}
@@ -1,3 +1,14 @@
1
+ import { useState } from 'react';
2
+ import Toast from 'react-native-simple-toast';
3
+ const _isPlainObject = target => {
4
+ return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
5
+ };
6
+ const _jsonify = target => {
7
+ if (target && typeof target.toJSON === 'function') return target.toJSON();
8
+ // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
9
+ if (Array.isArray(target)) return target.map(_jsonify);
10
+ return target;
11
+ };
1
12
  export const Tool = {
2
13
  sleep: delay => new Promise(resolve => setTimeout(resolve, delay)),
3
14
  formatDate(date, fmt) {
@@ -29,18 +40,59 @@ export const Tool = {
29
40
  }
30
41
  return fmt;
31
42
  },
32
- isPlainObject: target => {
33
- return target && target.toString() === '[object Object]' && Object.getPrototypeOf(target) === Object.prototype;
43
+ jsonify: target => _isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
44
+ ...result,
45
+ [key]: _jsonify(target[key])
46
+ }), {}) : _jsonify(target),
47
+ isChinese: value => {
48
+ return /[\u4E00-\u9FA5]+/g.test(value);
34
49
  },
35
- _jsonify: target => {
36
- if (target && typeof target.toJSON === 'function') return target.toJSON();
37
- // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
38
- if (Array.isArray(target)) return target.map(Tool._jsonify);
39
- return target;
50
+ isRemoteURL: str => {
51
+ return str.startsWith('http');
40
52
  },
41
- jsonify: target => Tool.isPlainObject(target) ? Object.keys(target).reduce((result, key) => ({
42
- ...result,
43
- [key]: Tool._jsonify(target[key])
44
- }), {}) : Tool._jsonify(target)
53
+ get_url_extension: url => {
54
+ var _url$split$;
55
+ return (_url$split$ = url.split(/[#?]/)[0]) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.split('.')) === null || _url$split$ === void 0 || (_url$split$ = _url$split$.pop()) === null || _url$split$ === void 0 ? void 0 : _url$split$.trim();
56
+ },
57
+ generateObjectId: () => {
58
+ var timestamp = (new Date().getTime() / 1000 | 0).toString(16); // eslint-disable-line no-bitwise
59
+ return timestamp + 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
60
+ return (Math.random() * 16 | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
61
+ });
62
+ },
63
+
64
+ /**
65
+ * Format bytes as human-readable text.
66
+ *
67
+ * @param bytes Number of bytes.
68
+ * @param si True to use metric (SI) units, aka powers of 1000. False to use
69
+ * binary (IEC), aka powers of 1024.
70
+ * @param dp Number of decimal places to display.
71
+ *
72
+ * @return Formatted string.
73
+ */
74
+ humanFileSize: function (bytes) {
75
+ let si = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
76
+ let dp = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
77
+ const thresh = si ? 1000 : 1024;
78
+ if (Math.abs(bytes) < thresh) {
79
+ return bytes + ' B';
80
+ }
81
+ const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
82
+ let u = -1;
83
+ const r = 10 ** dp;
84
+ do {
85
+ bytes /= thresh;
86
+ ++u;
87
+ } while (Math.round(Math.abs(bytes) * r) / r >= thresh && u < units.length - 1);
88
+ return bytes.toFixed(dp) + ' ' + units[u];
89
+ },
90
+ useForceUpdate: () => {
91
+ const [, setValue] = useState(0);
92
+ return () => setValue(value => value + 1);
93
+ },
94
+ showToast: toast => {
95
+ Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
96
+ }
45
97
  };
46
98
  //# sourceMappingURL=Tool.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["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","toString","isPlainObject","target","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","jsonify","keys","reduce","result","key"],"sources":["Tool.ts"],"sourcesContent":["export 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 isPlainObject: (target: any) => {\n return (\n target &&\n target.toString() === '[object Object]' &&\n Object.getPrototypeOf(target) === Object.prototype\n );\n },\n\n _jsonify: (target: any): any => {\n if (target && typeof target.toJSON === 'function') return target.toJSON();\n // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值\n if (Array.isArray(target)) return target.map(Tool._jsonify);\n return target;\n },\n\n jsonify: (target: any) =>\n Tool.isPlainObject(target)\n ? Object.keys(target).reduce(\n (result, key) => ({\n ...result,\n [key]: Tool._jsonify(target[key]),\n }),\n {}\n )\n : Tool._jsonify(target),\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useState","Toast","_isPlainObject","target","toString","Object","getPrototypeOf","prototype","_jsonify","toJSON","Array","isArray","map","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","undefined","dp","thresh","abs","units","u","r","round","toFixed","useForceUpdate","setValue","showToast","toast","showWithGravity","SHORT","CENTER"],"sources":["Tool.ts"],"sourcesContent":["import { useState } from 'react';\nimport Toast from 'react-native-simple-toast';\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\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 Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);\n },\n};\n"],"mappings":"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"}
@@ -143,7 +143,7 @@ export const VipManager = {
143
143
  console.log('获取商品');
144
144
  if (targetOffering !== null && targetOffering.availablePackages.length !== 0) {
145
145
  let packages = targetOffering.availablePackages;
146
- // 如果是订阅的,非试用的,展示永久 VIP
146
+ // 如果是订阅的,非试用的,过滤订阅产品,只展示永久 VIP
147
147
  if (VipManager.isVip() && !VipManager.isTrailVip()) {
148
148
  packages = packages.filter(item => {
149
149
  return item;
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","Purchases","DevConfig","LoginManager","Notification","BuildInPrefs","Tool","VipAndroidManager","_customerInfo","_RC_ENTITLEMENT_ID","VipManager","init","_ref","RC_API_KEY","RC_ENTITLEMENT_ID","WeChatPayServer","console","log","configure","apiKey","refreshVip","addListener","_ref2","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","isLogin","errorCode","OS","customerInfo","entitlements","active","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","all","NormalVip","availablePackages","length","packages","isVip","isTrailVip","filter","item","_customerInfo2","_customerInfo3","_isVip","isActive","isSandbox","hasValue","DevVip","getValue","_VipManager$vipEndTim","vipEndTime","vipCountDay","_customerInfo4","time","expirationDate","date","Date","formatDate","_customerInfo5","diff","getTime","Math","max","ceil","_LoginManager$current","vipType","currentUser","includes","_customerInfo6","getCustomerInfo","updateVipInfo","postNotification","_customerInfo7","_LoginManager$current2","keys","values","productIdentifier","oldVipType","push","_customerInfo8","expireDate","_LoginManager$current3","oldVipEndTime","batchUpdateUser"],"sources":["VipManager.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport Purchases, {\n CustomerInfo,\n PurchasesPackage,\n} from 'react-native-purchases';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { UserType } from './constant';\n\nlet _customerInfo: CustomerInfo | null;\nlet _RC_ENTITLEMENT_ID: string = '';\n\nexport const VipManager = {\n init: ({\n RC_API_KEY,\n RC_ENTITLEMENT_ID,\n WeChatPayServer,\n }: {\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n }) => {\n console.log('Vip 模块初始化');\n\n VipAndroidManager.init({ WeChatPayServer });\n\n _RC_ENTITLEMENT_ID = RC_ENTITLEMENT_ID;\n\n Purchases.configure({\n apiKey: RC_API_KEY,\n });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: { error: any; user: UserType }) => {\n console.log('Vip 模块用户登录');\n if (!error && user) {\n try {\n await Purchases.logIn(user.AVUser.get('objectId'));\n await Purchases.setAttributes({ nickname: user.nickname });\n await VipManager.refreshVip();\n } catch (e) {\n console.error(e);\n }\n }\n }\n );\n\n Notification.addListener('onLogout', () => {\n Purchases.logOut();\n _customerInfo = null;\n });\n },\n\n purchase: async (purchasePackage: PurchasesPackage) => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n if (!purchasePackage) {\n return { errorCode: -4 };\n }\n\n console.log('购买商品', purchasePackage);\n\n if (Platform.OS === 'android') {\n return await VipAndroidManager.purchase(purchasePackage);\n }\n\n try {\n const { customerInfo } = await Purchases.purchasePackage(purchasePackage);\n\n await VipManager.refreshVip(customerInfo);\n if (\n typeof customerInfo.entitlements.active[_RC_ENTITLEMENT_ID] !==\n 'undefined'\n ) {\n console.log('购买成功');\n return { errorCode: 0 };\n } else {\n console.log('购买失败(-5)');\n return { errorCode: -5, errorMsg: '' };\n }\n } catch (e: any) {\n if (!e.userCancelled) {\n console.log('购买失败(-5)', e.message);\n return { errorCode: -5, errorMsg: e.message };\n } else {\n console.log('购买取消(-2)');\n return { errorCode: -2 };\n }\n }\n },\n\n recover: async () => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n try {\n if (Platform.OS === 'android') {\n return await VipAndroidManager.recover();\n }\n\n console.log('iOS 恢复购买');\n const customerInfo = await Purchases.restorePurchases();\n await VipManager.refreshVip(customerInfo);\n if (customerInfo.entitlements.active?.vip) {\n console.log('恢复成功');\n return { errorCode: 0 };\n } else {\n console.log('恢复失败(-2)');\n return { errorCode: -2 };\n }\n } catch (e: any) {\n console.log('恢复失败(-3)', e.message);\n return { errorCode: -3, errorMsg: e.message };\n }\n },\n\n getPackages: async (): Promise<PurchasesPackage[]> => {\n if (VipManager.isForeverVip()) {\n return [];\n }\n\n if (Platform.OS === 'android' || __DEV__) {\n return VipAndroidManager.getPackages();\n }\n\n try {\n const offerings = await Purchases.getOfferings();\n let targetOffering = offerings.current;\n if (__DEV__) {\n targetOffering = offerings.all.NormalVip;\n }\n console.log('获取商品');\n if (\n targetOffering !== null &&\n targetOffering.availablePackages.length !== 0\n ) {\n let packages = targetOffering.availablePackages;\n // 如果是订阅的,非试用的,展示永久 VIP\n if (VipManager.isVip() && !VipManager.isTrailVip()) {\n packages = packages.filter((item) => {\n return item;\n // TODO\n // return item.product.productCategory === 'NON_SUBSCRIPTION';\n });\n }\n return packages;\n } else {\n return [];\n }\n } catch (e) {\n console.error('Get Product Fail', e);\n return [];\n }\n },\n\n isVip: () => {\n let _isVip = _customerInfo?.entitlements?.active?.vip?.isActive;\n if (\n _isVip &&\n !__DEV__ &&\n _customerInfo?.entitlements?.active?.vip.isSandbox\n ) {\n _isVip = false;\n }\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevVip)) {\n _isVip = DevConfig.getValue(BuildInPrefs.DevVip);\n }\n }\n return _isVip;\n },\n\n isForeverVip: () => {\n // 苹果的永久会员是非订阅制的,因此 RevenueCat 的 vipEndTime 会空\n return (\n VipManager.isVip() &&\n (VipManager.vipEndTime()?.length === 0 ||\n VipManager.vipCountDay() >= 36500)\n );\n },\n\n vipEndTime: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n return Tool.formatDate(date, 'yyyy-MM-dd');\n } else {\n return '';\n }\n },\n\n vipCountDay: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n const diff = date.getTime() - new Date().getTime();\n return Math.max(Math.ceil(diff / (24 * 60 * 60 * 1000)), 0);\n }\n return 0;\n },\n\n isTrailVip: () => {\n if (VipManager.isForeverVip()) {\n return false;\n }\n if (!VipManager.isVip()) {\n return false;\n }\n const vipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType?.includes('rc_promo_')) {\n return true;\n }\n return false;\n },\n\n refreshVip: async (customerInfo?: CustomerInfo) => {\n try {\n console.log('刷新 VIP');\n if (customerInfo) {\n _customerInfo = customerInfo;\n } else {\n _customerInfo = await Purchases.getCustomerInfo();\n }\n console.log('VIP 信息', _customerInfo?.entitlements?.active);\n console.log('是否是 VIP', VipManager.isVip());\n console.log('VipInfo 过期时间', VipManager.vipEndTime());\n\n await updateVipInfo();\n Notification.postNotification('onVipRefresh', {});\n } catch (e) {\n console.error(e);\n Notification.postNotification('onVipRefresh', { e });\n }\n },\n};\n\nconst updateVipInfo = async () => {\n if (!VipManager.isVip() || !LoginManager.isLogin()) {\n return;\n }\n\n const keys = [];\n const values = [];\n\n const vipType = _customerInfo?.entitlements?.active?.vip?.productIdentifier;\n const oldVipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType && vipType !== oldVipType) {\n keys.push('vipType');\n values.push(vipType);\n }\n\n let vipEndTime;\n if (VipManager.isForeverVip()) {\n vipEndTime = new Date(10413763200000); // 约定 2300-01-01 00:00:00 为永久会员\n } else {\n const expireDate = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (expireDate) {\n vipEndTime = new Date(expireDate);\n }\n }\n if (vipEndTime) {\n const oldVipEndTime = LoginManager.currentUser()?.AVUser.get('vipEndTime');\n if (vipEndTime.getTime() !== oldVipEndTime?.getTime()) {\n keys.push('vipEndTime');\n values.push(vipEndTime);\n }\n }\n\n if (keys.length > 0) {\n await LoginManager.batchUpdateUser(keys, values);\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Platform","Purchases","DevConfig","LoginManager","Notification","BuildInPrefs","Tool","VipAndroidManager","_customerInfo","_RC_ENTITLEMENT_ID","VipManager","init","_ref","RC_API_KEY","RC_ENTITLEMENT_ID","WeChatPayServer","console","log","configure","apiKey","refreshVip","addListener","_ref2","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","isLogin","errorCode","OS","customerInfo","entitlements","active","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","all","NormalVip","availablePackages","length","packages","isVip","isTrailVip","filter","item","_customerInfo2","_customerInfo3","_isVip","isActive","isSandbox","hasValue","DevVip","getValue","_VipManager$vipEndTim","vipEndTime","vipCountDay","_customerInfo4","time","expirationDate","date","Date","formatDate","_customerInfo5","diff","getTime","Math","max","ceil","_LoginManager$current","vipType","currentUser","includes","_customerInfo6","getCustomerInfo","updateVipInfo","postNotification","_customerInfo7","_LoginManager$current2","keys","values","productIdentifier","oldVipType","push","_customerInfo8","expireDate","_LoginManager$current3","oldVipEndTime","batchUpdateUser"],"sources":["VipManager.ts"],"sourcesContent":["import { Platform } from 'react-native';\nimport Purchases, {\n CustomerInfo,\n PurchasesPackage,\n} from 'react-native-purchases';\nimport { DevConfig } from './DevConfig';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { UserType } from './constant';\n\nlet _customerInfo: CustomerInfo | null;\nlet _RC_ENTITLEMENT_ID: string = '';\n\nexport const VipManager = {\n init: ({\n RC_API_KEY,\n RC_ENTITLEMENT_ID,\n WeChatPayServer,\n }: {\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n }) => {\n console.log('Vip 模块初始化');\n\n VipAndroidManager.init({ WeChatPayServer });\n\n _RC_ENTITLEMENT_ID = RC_ENTITLEMENT_ID;\n\n Purchases.configure({\n apiKey: RC_API_KEY,\n });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: { error: any; user: UserType }) => {\n console.log('Vip 模块用户登录');\n if (!error && user) {\n try {\n await Purchases.logIn(user.AVUser.get('objectId'));\n await Purchases.setAttributes({ nickname: user.nickname });\n await VipManager.refreshVip();\n } catch (e) {\n console.error(e);\n }\n }\n }\n );\n\n Notification.addListener('onLogout', () => {\n Purchases.logOut();\n _customerInfo = null;\n });\n },\n\n purchase: async (purchasePackage: PurchasesPackage) => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n if (!purchasePackage) {\n return { errorCode: -4 };\n }\n\n console.log('购买商品', purchasePackage);\n\n if (Platform.OS === 'android') {\n return await VipAndroidManager.purchase(purchasePackage);\n }\n\n try {\n const { customerInfo } = await Purchases.purchasePackage(purchasePackage);\n\n await VipManager.refreshVip(customerInfo);\n if (\n typeof customerInfo.entitlements.active[_RC_ENTITLEMENT_ID] !==\n 'undefined'\n ) {\n console.log('购买成功');\n return { errorCode: 0 };\n } else {\n console.log('购买失败(-5)');\n return { errorCode: -5, errorMsg: '' };\n }\n } catch (e: any) {\n if (!e.userCancelled) {\n console.log('购买失败(-5)', e.message);\n return { errorCode: -5, errorMsg: e.message };\n } else {\n console.log('购买取消(-2)');\n return { errorCode: -2 };\n }\n }\n },\n\n recover: async () => {\n if (!LoginManager.isLogin()) {\n return { errorCode: -1 };\n }\n\n try {\n if (Platform.OS === 'android') {\n return await VipAndroidManager.recover();\n }\n\n console.log('iOS 恢复购买');\n const customerInfo = await Purchases.restorePurchases();\n await VipManager.refreshVip(customerInfo);\n if (customerInfo.entitlements.active?.vip) {\n console.log('恢复成功');\n return { errorCode: 0 };\n } else {\n console.log('恢复失败(-2)');\n return { errorCode: -2 };\n }\n } catch (e: any) {\n console.log('恢复失败(-3)', e.message);\n return { errorCode: -3, errorMsg: e.message };\n }\n },\n\n getPackages: async (): Promise<PurchasesPackage[]> => {\n if (VipManager.isForeverVip()) {\n return [];\n }\n\n if (Platform.OS === 'android' || __DEV__) {\n return VipAndroidManager.getPackages();\n }\n\n try {\n const offerings = await Purchases.getOfferings();\n let targetOffering = offerings.current;\n if (__DEV__) {\n targetOffering = offerings.all.NormalVip;\n }\n console.log('获取商品');\n if (\n targetOffering !== null &&\n targetOffering.availablePackages.length !== 0\n ) {\n let packages = targetOffering.availablePackages;\n // 如果是订阅的,非试用的,过滤订阅产品,只展示永久 VIP\n if (VipManager.isVip() && !VipManager.isTrailVip()) {\n packages = packages.filter((item) => {\n return item;\n // TODO\n // return item.product.productCategory === 'NON_SUBSCRIPTION';\n });\n }\n return packages;\n } else {\n return [];\n }\n } catch (e) {\n console.error('Get Product Fail', e);\n return [];\n }\n },\n\n isVip: () => {\n let _isVip = _customerInfo?.entitlements?.active?.vip?.isActive;\n if (\n _isVip &&\n !__DEV__ &&\n _customerInfo?.entitlements?.active?.vip.isSandbox\n ) {\n _isVip = false;\n }\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevVip)) {\n _isVip = DevConfig.getValue(BuildInPrefs.DevVip);\n }\n }\n return _isVip;\n },\n\n isForeverVip: () => {\n // 苹果的永久会员是非订阅制的,因此 RevenueCat 的 vipEndTime 会空\n return (\n VipManager.isVip() &&\n (VipManager.vipEndTime()?.length === 0 ||\n VipManager.vipCountDay() >= 36500)\n );\n },\n\n vipEndTime: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n return Tool.formatDate(date, 'yyyy-MM-dd');\n } else {\n return '';\n }\n },\n\n vipCountDay: () => {\n const time = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (VipManager.isVip() && time) {\n const date = new Date(time);\n const diff = date.getTime() - new Date().getTime();\n return Math.max(Math.ceil(diff / (24 * 60 * 60 * 1000)), 0);\n }\n return 0;\n },\n\n isTrailVip: () => {\n if (VipManager.isForeverVip()) {\n return false;\n }\n if (!VipManager.isVip()) {\n return false;\n }\n const vipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType?.includes('rc_promo_')) {\n return true;\n }\n return false;\n },\n\n refreshVip: async (customerInfo?: CustomerInfo) => {\n try {\n console.log('刷新 VIP');\n if (customerInfo) {\n _customerInfo = customerInfo;\n } else {\n _customerInfo = await Purchases.getCustomerInfo();\n }\n console.log('VIP 信息', _customerInfo?.entitlements?.active);\n console.log('是否是 VIP', VipManager.isVip());\n console.log('VipInfo 过期时间', VipManager.vipEndTime());\n\n await updateVipInfo();\n Notification.postNotification('onVipRefresh', {});\n } catch (e) {\n console.error(e);\n Notification.postNotification('onVipRefresh', { e });\n }\n },\n};\n\nconst updateVipInfo = async () => {\n if (!VipManager.isVip() || !LoginManager.isLogin()) {\n return;\n }\n\n const keys = [];\n const values = [];\n\n const vipType = _customerInfo?.entitlements?.active?.vip?.productIdentifier;\n const oldVipType = LoginManager.currentUser()?.AVUser.get('vipType');\n if (vipType && vipType !== oldVipType) {\n keys.push('vipType');\n values.push(vipType);\n }\n\n let vipEndTime;\n if (VipManager.isForeverVip()) {\n vipEndTime = new Date(10413763200000); // 约定 2300-01-01 00:00:00 为永久会员\n } else {\n const expireDate = _customerInfo?.entitlements?.active?.vip?.expirationDate;\n if (expireDate) {\n vipEndTime = new Date(expireDate);\n }\n }\n if (vipEndTime) {\n const oldVipEndTime = LoginManager.currentUser()?.AVUser.get('vipEndTime');\n if (vipEndTime.getTime() !== oldVipEndTime?.getTime()) {\n keys.push('vipEndTime');\n values.push(vipEndTime);\n }\n }\n\n if (keys.length > 0) {\n await LoginManager.batchUpdateUser(keys, values);\n }\n};\n"],"mappings":"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"}
@@ -1,7 +1,22 @@
1
1
  export declare const Tool: {
2
2
  sleep: (delay: number) => Promise<unknown>;
3
3
  formatDate(date: Date, fmt: string): string;
4
- isPlainObject: (target: any) => any;
5
- _jsonify: (target: any) => any;
6
4
  jsonify: (target: any) => any;
5
+ isChinese: (value: string) => boolean;
6
+ isRemoteURL: (str: string) => boolean;
7
+ get_url_extension: (url: string) => string | undefined;
8
+ generateObjectId: () => string;
9
+ /**
10
+ * Format bytes as human-readable text.
11
+ *
12
+ * @param bytes Number of bytes.
13
+ * @param si True to use metric (SI) units, aka powers of 1000. False to use
14
+ * binary (IEC), aka powers of 1024.
15
+ * @param dp Number of decimal places to display.
16
+ *
17
+ * @return Formatted string.
18
+ */
19
+ humanFileSize: (bytes: number, si?: boolean, dp?: number) => string;
20
+ useForceUpdate: () => () => void;
21
+ showToast: (toast: string) => void;
7
22
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@norcy/react-native-toolkit",
3
- "version": "0.1.21",
3
+ "version": "0.1.23",
4
4
  "description": "My Toolkit",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -61,6 +61,7 @@
61
61
  "react-native": "0.62.2",
62
62
  "release-it": "^13.5.8",
63
63
  "typescript": "^5.0.2",
64
+ "@sentry/cli": "^2.12.0",
64
65
  "@invertase/react-native-apple-authentication": "^2.1.2",
65
66
  "react-native-device-info": "^10.0.2",
66
67
  "@sentry/react-native": "^3.4.3",
@@ -68,7 +69,8 @@
68
69
  "@react-native-community/async-storage": "^1.12.0",
69
70
  "i18n-js": "^4.2.2",
70
71
  "react-native-wechat-lib": "^1.1.26",
71
- "react-native-purchases": "5.6.0"
72
+ "react-native-purchases": "5.6.0",
73
+ "react-native-simple-toast": "^1.1.3"
72
74
  },
73
75
  "peerDependencies": {
74
76
  "react": "*",
@@ -80,7 +82,8 @@
80
82
  "@react-native-community/async-storage": "*",
81
83
  "i18n-js": "*",
82
84
  "react-native-wechat-lib": "*",
83
- "react-native-purchases": "*"
85
+ "react-native-purchases": "*",
86
+ "react-native-simple-toast": "*"
84
87
  },
85
88
  "jest": {
86
89
  "preset": "react-native",
package/src/Tool.ts CHANGED
@@ -1,3 +1,21 @@
1
+ import { useState } from 'react';
2
+ import Toast from 'react-native-simple-toast';
3
+
4
+ const _isPlainObject = (target: any) => {
5
+ return (
6
+ target &&
7
+ target.toString() === '[object Object]' &&
8
+ Object.getPrototypeOf(target) === Object.prototype
9
+ );
10
+ };
11
+
12
+ const _jsonify = (target: any): any => {
13
+ if (target && typeof target.toJSON === 'function') return target.toJSON();
14
+ // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
15
+ if (Array.isArray(target)) return target.map(_jsonify);
16
+ return target;
17
+ };
18
+
1
19
  export const Tool = {
2
20
  sleep: (delay: number) =>
3
21
  new Promise((resolve) => setTimeout(resolve, delay)),
@@ -36,29 +54,77 @@ export const Tool = {
36
54
  return fmt;
37
55
  },
38
56
 
39
- isPlainObject: (target: any) => {
40
- return (
41
- target &&
42
- target.toString() === '[object Object]' &&
43
- Object.getPrototypeOf(target) === Object.prototype
44
- );
45
- },
46
-
47
- _jsonify: (target: any): any => {
48
- if (target && typeof target.toJSON === 'function') return target.toJSON();
49
- // map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值
50
- if (Array.isArray(target)) return target.map(Tool._jsonify);
51
- return target;
52
- },
53
-
54
57
  jsonify: (target: any) =>
55
- Tool.isPlainObject(target)
58
+ _isPlainObject(target)
56
59
  ? Object.keys(target).reduce(
57
60
  (result, key) => ({
58
61
  ...result,
59
- [key]: Tool._jsonify(target[key]),
62
+ [key]: _jsonify(target[key]),
60
63
  }),
61
64
  {}
62
65
  )
63
- : Tool._jsonify(target),
66
+ : _jsonify(target),
67
+
68
+ isChinese: (value: string) => {
69
+ return /[\u4E00-\u9FA5]+/g.test(value);
70
+ },
71
+
72
+ isRemoteURL: (str: string) => {
73
+ return str.startsWith('http');
74
+ },
75
+
76
+ get_url_extension: (url: string) => {
77
+ return url.split(/[#?]/)[0]?.split('.')?.pop()?.trim();
78
+ },
79
+
80
+ generateObjectId: () => {
81
+ var timestamp = ((new Date().getTime() / 1000) | 0).toString(16); // eslint-disable-line no-bitwise
82
+ return (
83
+ timestamp +
84
+ 'xxxxxxxxxxxxxxxx'.replace(/[x]/g, function () {
85
+ return ((Math.random() * 16) | 0).toString(16).toLowerCase(); // eslint-disable-line no-bitwise
86
+ })
87
+ );
88
+ },
89
+
90
+ /**
91
+ * Format bytes as human-readable text.
92
+ *
93
+ * @param bytes Number of bytes.
94
+ * @param si True to use metric (SI) units, aka powers of 1000. False to use
95
+ * binary (IEC), aka powers of 1024.
96
+ * @param dp Number of decimal places to display.
97
+ *
98
+ * @return Formatted string.
99
+ */
100
+ humanFileSize: (bytes: number, si = false, dp = 1) => {
101
+ const thresh = si ? 1000 : 1024;
102
+
103
+ if (Math.abs(bytes) < thresh) {
104
+ return bytes + ' B';
105
+ }
106
+
107
+ const units = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
108
+ let u = -1;
109
+ const r = 10 ** dp;
110
+
111
+ do {
112
+ bytes /= thresh;
113
+ ++u;
114
+ } while (
115
+ Math.round(Math.abs(bytes) * r) / r >= thresh &&
116
+ u < units.length - 1
117
+ );
118
+
119
+ return bytes.toFixed(dp) + ' ' + units[u];
120
+ },
121
+
122
+ useForceUpdate: () => {
123
+ const [, setValue] = useState(0);
124
+ return () => setValue((value) => value + 1);
125
+ },
126
+
127
+ showToast: (toast: string) => {
128
+ Toast.showWithGravity(toast, Toast.SHORT, Toast.CENTER);
129
+ },
64
130
  };
package/src/VipManager.ts CHANGED
@@ -145,7 +145,7 @@ export const VipManager = {
145
145
  targetOffering.availablePackages.length !== 0
146
146
  ) {
147
147
  let packages = targetOffering.availablePackages;
148
- // 如果是订阅的,非试用的,展示永久 VIP
148
+ // 如果是订阅的,非试用的,过滤订阅产品,只展示永久 VIP
149
149
  if (VipManager.isVip() && !VipManager.isTrailVip()) {
150
150
  packages = packages.filter((item) => {
151
151
  return item;