@norcy/react-native-toolkit 0.1.48 → 0.1.50
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/.DS_Store +0 -0
- package/.vscode/settings.json +9 -0
- package/ios/.DS_Store +0 -0
- package/ios/ReactNativeToolkit.xcodeproj/project.xcworkspace/contents.xcworkspacedata +4 -0
- package/lib/commonjs/ConfigDataModel.js +31 -11
- package/lib/commonjs/ConfigDataModel.js.map +1 -1
- package/lib/commonjs/MessageModel.js +45 -16
- package/lib/commonjs/MessageModel.js.map +1 -1
- package/lib/commonjs/Tool.js +6 -0
- package/lib/commonjs/Tool.js.map +1 -1
- package/lib/commonjs/VipAndroidManager.js +5 -2
- package/lib/commonjs/VipAndroidManager.js.map +1 -1
- package/lib/commonjs/VipManager.js +8 -7
- package/lib/commonjs/VipManager.js.map +1 -1
- package/lib/module/ConfigDataModel.js +31 -11
- package/lib/module/ConfigDataModel.js.map +1 -1
- package/lib/module/MessageModel.js +45 -16
- package/lib/module/MessageModel.js.map +1 -1
- package/lib/module/Tool.js +6 -0
- package/lib/module/Tool.js.map +1 -1
- package/lib/module/VipAndroidManager.js +5 -2
- package/lib/module/VipAndroidManager.js.map +1 -1
- package/lib/module/VipManager.js +8 -7
- package/lib/module/VipManager.js.map +1 -1
- package/lib/typescript/MessageModel.d.ts +1 -0
- package/lib/typescript/Tool.d.ts +2 -2
- package/lib/typescript/VipAndroidManager.d.ts +2 -1
- package/package.json +1 -1
- package/src/.DS_Store +0 -0
- package/src/ConfigDataModel.ts +34 -12
- package/src/MessageModel.ts +52 -18
- package/src/Tool.ts +4 -0
- package/src/VipAndroidManager.ts +6 -2
- package/src/VipManager.ts +8 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativePurchases","_interopRequireDefault","_DevConfig","_LoginManager","_Notification","_PrefData","_Tool","_VipAndroidManager","obj","__esModule","default","_customerInfo","isReady","VipManager","exports","init","ToolkitConfig","RC_API_KEY","console","log","Purchases","configure","apiKey","refreshVip","Notification","addListener","_ref","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","errorCode","LoginManager","isLogin","Platform","OS","VipAndroidManager","customerInfo","entitlements","active","RC_ENTITLEMENT_ID","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","availablePackages","length","packages","isVip","isTrailVip","filter","item","productItem","product","productCategory","_customerInfo2","_customerInfo3","_isVip2","_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, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool, ToolkitConfig } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nlet _customerInfo: CustomerInfo | null;\nlet isReady = false;\n\nexport const VipManager = {\n init: () => {\n isReady = !!ToolkitConfig.RC_API_KEY;\n\n if (!isReady) {\n console.log('VIP 模块未初始化');\n return;\n }\n\n console.log('Vip 模块初始化');\n\n Purchases.configure({ apiKey: ToolkitConfig.RC_API_KEY });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: LoginResultDataType) => {\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 (!isReady) {\n console.log('VIP 模块未初始化');\n return { errorCode: -99 };\n }\n\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[\n ToolkitConfig.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 (!isReady) {\n console.log('VIP 模块未初始化');\n return { errorCode: -99 };\n }\n\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 (!isReady) {\n console.log('VIP 模块未初始化');\n return [];\n }\n\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 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 const productItem: any = item.product;\n return productItem.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 if (!isReady) {\n console.log('VIP 模块未初始化');\n return false;\n }\n\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) ? true : false;\n }\n }\n return _isVip ?? false;\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 if (!isReady) {\n console.log('VIP 模块未初始化');\n return;\n }\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":";;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,qBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAIA,IAAAG,UAAA,GAAAH,OAAA;AACA,IAAAI,aAAA,GAAAJ,OAAA;AACA,IAAAK,aAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,KAAA,GAAAP,OAAA;AACA,IAAAQ,kBAAA,GAAAR,OAAA;AAAwD,SAAAE,uBAAAO,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAExD,IAAIG,aAAkC;AACtC,IAAIC,OAAO,GAAG,KAAK;AAEZ,MAAMC,UAAU,GAAAC,OAAA,CAAAD,UAAA,GAAG;EACxBE,IAAI,EAAEA,CAAA,KAAM;IACVH,OAAO,GAAG,CAAC,CAACI,mBAAa,CAACC,UAAU;IAEpC,IAAI,CAACL,OAAO,EAAE;MACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB;IACF;IAEAD,OAAO,CAACC,GAAG,CAAC,WAAW,CAAC;IAExBC,6BAAS,CAACC,SAAS,CAAC;MAAEC,MAAM,EAAEN,mBAAa,CAACC;IAAW,CAAC,CAAC;IAEzDJ,UAAU,CAACU,UAAU,CAAC,CAAC;IAEvBC,0BAAY,CAACC,WAAW,CACtB,SAAS,EACT,MAAAC,IAAA,IAAgD;MAAA,IAAzC;QAAEC,KAAK;QAAEC;MAA0B,CAAC,GAAAF,IAAA;MACzCR,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,IAAI,CAACQ,KAAK,IAAIC,IAAI,EAAE;QAClB,IAAI;UACF,MAAMR,6BAAS,CAACS,KAAK,CAACD,IAAI,CAACE,MAAM,CAACC,GAAG,CAAC,UAAU,CAAC,CAAC;UAClD,MAAMX,6BAAS,CAACY,aAAa,CAAC;YAAEC,QAAQ,EAAEL,IAAI,CAACK;UAAS,CAAC,CAAC;UAC1D,MAAMpB,UAAU,CAACU,UAAU,CAAC,CAAC;QAC/B,CAAC,CAAC,OAAOW,CAAC,EAAE;UACVhB,OAAO,CAACS,KAAK,CAACO,CAAC,CAAC;QAClB;MACF;IACF,CACF,CAAC;IAEDV,0BAAY,CAACC,WAAW,CAAC,UAAU,EAAE,MAAM;MACzCL,6BAAS,CAACe,MAAM,CAAC,CAAC;MAClBxB,aAAa,GAAG,IAAI;IACtB,CAAC,CAAC;EACJ,CAAC;EAEDyB,QAAQ,EAAE,MAAOC,eAAiC,IAAK;IACrD,IAAI,CAACzB,OAAO,EAAE;MACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,OAAO;QAAEmB,SAAS,EAAE,CAAC;MAAG,CAAC;IAC3B;IAEA,IAAI,CAACC,0BAAY,CAACC,OAAO,CAAC,CAAC,EAAE;MAC3B,OAAO;QAAEF,SAAS,EAAE,CAAC;MAAE,CAAC;IAC1B;IAEA,IAAI,CAACD,eAAe,EAAE;MACpB,OAAO;QAAEC,SAAS,EAAE,CAAC;MAAE,CAAC;IAC1B;IAEApB,OAAO,CAACC,GAAG,CAAC,MAAM,EAAEkB,eAAe,CAAC;IAEpC,IAAII,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;MAC7B,OAAO,MAAMC,oCAAiB,CAACP,QAAQ,CAACC,eAAe,CAAC;IAC1D;IAEA,IAAI;MACF,MAAM;QAAEO;MAAa,CAAC,GAAG,MAAMxB,6BAAS,CAACiB,eAAe,CAACA,eAAe,CAAC;MAEzE,MAAMxB,UAAU,CAACU,UAAU,CAACqB,YAAY,CAAC;MACzC,IACE,OAAOA,YAAY,CAACC,YAAY,CAACC,MAAM,CACrC9B,mBAAa,CAAC+B,iBAAiB,CAChC,KAAK,WAAW,EACjB;QACA7B,OAAO,CAACC,GAAG,CAAC,MAAM,CAAC;QACnB,OAAO;UAAEmB,SAAS,EAAE;QAAE,CAAC;MACzB,CAAC,MAAM;QACLpB,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;QACvB,OAAO;UAAEmB,SAAS,EAAE,CAAC,CAAC;UAAEU,QAAQ,EAAE;QAAG,CAAC;MACxC;IACF,CAAC,CAAC,OAAOd,CAAM,EAAE;MACf,IAAI,CAACA,CAAC,CAACe,aAAa,EAAE;QACpB/B,OAAO,CAACC,GAAG,CAAC,UAAU,EAAEe,CAAC,CAACgB,OAAO,CAAC;QAClC,OAAO;UAAEZ,SAAS,EAAE,CAAC,CAAC;UAAEU,QAAQ,EAAEd,CAAC,CAACgB;QAAQ,CAAC;MAC/C,CAAC,MAAM;QACLhC,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;QACvB,OAAO;UAAEmB,SAAS,EAAE,CAAC;QAAE,CAAC;MAC1B;IACF;EACF,CAAC;EAEDa,OAAO,EAAE,MAAAA,CAAA,KAAY;IACnB,IAAI,CAACvC,OAAO,EAAE;MACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,OAAO;QAAEmB,SAAS,EAAE,CAAC;MAAG,CAAC;IAC3B;IAEA,IAAI,CAACC,0BAAY,CAACC,OAAO,CAAC,CAAC,EAAE;MAC3B,OAAO;QAAEF,SAAS,EAAE,CAAC;MAAE,CAAC;IAC1B;IAEA,IAAI;MAAA,IAAAc,qBAAA;MACF,IAAIX,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;QAC7B,OAAO,MAAMC,oCAAiB,CAACQ,OAAO,CAAC,CAAC;MAC1C;MAEAjC,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;MACvB,MAAMyB,YAAY,GAAG,MAAMxB,6BAAS,CAACiC,gBAAgB,CAAC,CAAC;MACvD,MAAMxC,UAAU,CAACU,UAAU,CAACqB,YAAY,CAAC;MACzC,KAAAQ,qBAAA,GAAIR,YAAY,CAACC,YAAY,CAACC,MAAM,cAAAM,qBAAA,eAAhCA,qBAAA,CAAkCE,GAAG,EAAE;QACzCpC,OAAO,CAACC,GAAG,CAAC,MAAM,CAAC;QACnB,OAAO;UAAEmB,SAAS,EAAE;QAAE,CAAC;MACzB,CAAC,MAAM;QACLpB,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;QACvB,OAAO;UAAEmB,SAAS,EAAE,CAAC;QAAE,CAAC;MAC1B;IACF,CAAC,CAAC,OAAOJ,CAAM,EAAE;MACfhB,OAAO,CAACC,GAAG,CAAC,UAAU,EAAEe,CAAC,CAACgB,OAAO,CAAC;MAClC,OAAO;QAAEZ,SAAS,EAAE,CAAC,CAAC;QAAEU,QAAQ,EAAEd,CAAC,CAACgB;MAAQ,CAAC;IAC/C;EACF,CAAC;EAEDK,WAAW,EAAE,MAAAA,CAAA,KAAyC;IACpD,IAAI,CAAC3C,OAAO,EAAE;MACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,OAAO,EAAE;IACX;IAEA,IAAIN,UAAU,CAAC2C,YAAY,CAAC,CAAC,EAAE;MAC7B,OAAO,EAAE;IACX;IAEA,IAAIf,qBAAQ,CAACC,EAAE,KAAK,SAAS,IAAIe,OAAO,EAAE;MACxC,OAAOd,oCAAiB,CAACY,WAAW,CAAC,CAAC;IACxC;IAEA,IAAI;MACF,MAAMG,SAAS,GAAG,MAAMtC,6BAAS,CAACuC,YAAY,CAAC,CAAC;MAChD,IAAIC,cAAc,GAAGF,SAAS,CAACG,OAAO;MACtC3C,OAAO,CAACC,GAAG,CAAC,MAAM,CAAC;MACnB,IACEyC,cAAc,KAAK,IAAI,IACvBA,cAAc,CAACE,iBAAiB,CAACC,MAAM,KAAK,CAAC,EAC7C;QACA,IAAIC,QAAQ,GAAGJ,cAAc,CAACE,iBAAiB;QAC/C;QACA,IAAIjD,UAAU,CAACoD,KAAK,CAAC,CAAC,IAAI,CAACpD,UAAU,CAACqD,UAAU,CAAC,CAAC,EAAE;UAClDF,QAAQ,GAAGA,QAAQ,CAACG,MAAM,CAAEC,IAAI,IAAK;YACnC,MAAMC,WAAgB,GAAGD,IAAI,CAACE,OAAO;YACrC,OAAOD,WAAW,CAACE,eAAe,KAAK,kBAAkB;UAC3D,CAAC,CAAC;QACJ;QACA,OAAOP,QAAQ;MACjB,CAAC,MAAM;QACL,OAAO,EAAE;MACX;IACF,CAAC,CAAC,OAAO9B,CAAC,EAAE;MACVhB,OAAO,CAACS,KAAK,CAAC,kBAAkB,EAAEO,CAAC,CAAC;MACpC,OAAO,EAAE;IACX;EACF,CAAC;EAED+B,KAAK,EAAEA,CAAA,KAAM;IAAA,IAAAO,cAAA,EAAAC,cAAA,EAAAC,OAAA;IACX,IAAI,CAAC9D,OAAO,EAAE;MACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,OAAO,KAAK;IACd;IAEA,IAAIwD,MAAM,IAAAH,cAAA,GAAG7D,aAAa,cAAA6D,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAe3B,YAAY,cAAA2B,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6B1B,MAAM,cAAA0B,cAAA,gBAAAA,cAAA,GAAnCA,cAAA,CAAqClB,GAAG,cAAAkB,cAAA,uBAAxCA,cAAA,CAA0CI,QAAQ;IAC/D,IACED,MAAM,IACN,CAAClB,OAAO,KAAAgB,cAAA,GACR9D,aAAa,cAAA8D,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAe5B,YAAY,cAAA4B,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6B3B,MAAM,cAAA2B,cAAA,eAAnCA,cAAA,CAAqCnB,GAAG,CAACuB,SAAS,EAClD;MACAF,MAAM,GAAG,KAAK;IAChB;IACA,IAAIlB,OAAO,EAAE;MACX,IAAIqB,oBAAS,CAACC,QAAQ,CAACC,sBAAY,CAACC,MAAM,CAAC,EAAE;QAC3CN,MAAM,GAAGG,oBAAS,CAACI,QAAQ,CAACF,sBAAY,CAACC,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK;MACjE;IACF;IACA,QAAAP,OAAA,GAAOC,MAAM,cAAAD,OAAA,cAAAA,OAAA,GAAI,KAAK;EACxB,CAAC;EAEDlB,YAAY,EAAEA,CAAA,KAAM;IAAA,IAAA2B,qBAAA;IAClB;IACA,OACEtE,UAAU,CAACoD,KAAK,CAAC,CAAC,KACjB,EAAAkB,qBAAA,GAAAtE,UAAU,CAACuE,UAAU,CAAC,CAAC,cAAAD,qBAAA,uBAAvBA,qBAAA,CAAyBpB,MAAM,MAAK,CAAC,IACpClD,UAAU,CAACwE,WAAW,CAAC,CAAC,IAAI,KAAK,CAAC;EAExC,CAAC;EAEDD,UAAU,EAAEA,CAAA,KAAM;IAAA,IAAAE,cAAA;IAChB,MAAMC,IAAI,IAAAD,cAAA,GAAG3E,aAAa,cAAA2E,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAezC,YAAY,cAAAyC,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6BxC,MAAM,cAAAwC,cAAA,gBAAAA,cAAA,GAAnCA,cAAA,CAAqChC,GAAG,cAAAgC,cAAA,uBAAxCA,cAAA,CAA0CE,cAAc;IACrE,IAAI3E,UAAU,CAACoD,KAAK,CAAC,CAAC,IAAIsB,IAAI,EAAE;MAC9B,MAAME,IAAI,GAAG,IAAIC,IAAI,CAACH,IAAI,CAAC;MAC3B,OAAOI,UAAI,CAACC,UAAU,CAACH,IAAI,EAAE,YAAY,CAAC;IAC5C,CAAC,MAAM;MACL,OAAO,EAAE;IACX;EACF,CAAC;EAEDJ,WAAW,EAAEA,CAAA,KAAM;IAAA,IAAAQ,cAAA;IACjB,MAAMN,IAAI,IAAAM,cAAA,GAAGlF,aAAa,cAAAkF,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAehD,YAAY,cAAAgD,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6B/C,MAAM,cAAA+C,cAAA,gBAAAA,cAAA,GAAnCA,cAAA,CAAqCvC,GAAG,cAAAuC,cAAA,uBAAxCA,cAAA,CAA0CL,cAAc;IACrE,IAAI3E,UAAU,CAACoD,KAAK,CAAC,CAAC,IAAIsB,IAAI,EAAE;MAC9B,MAAME,IAAI,GAAG,IAAIC,IAAI,CAACH,IAAI,CAAC;MAC3B,MAAMO,IAAI,GAAGL,IAAI,CAACM,OAAO,CAAC,CAAC,GAAG,IAAIL,IAAI,CAAC,CAAC,CAACK,OAAO,CAAC,CAAC;MAClD,OAAOC,IAAI,CAACC,GAAG,CAACD,IAAI,CAACE,IAAI,CAACJ,IAAI,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7D;IACA,OAAO,CAAC;EACV,CAAC;EAED5B,UAAU,EAAEA,CAAA,KAAM;IAAA,IAAAiC,qBAAA;IAChB,IAAItF,UAAU,CAAC2C,YAAY,CAAC,CAAC,EAAE;MAC7B,OAAO,KAAK;IACd;IACA,IAAI,CAAC3C,UAAU,CAACoD,KAAK,CAAC,CAAC,EAAE;MACvB,OAAO,KAAK;IACd;IACA,MAAMmC,OAAO,IAAAD,qBAAA,GAAG5D,0BAAY,CAAC8D,WAAW,CAAC,CAAC,cAAAF,qBAAA,uBAA1BA,qBAAA,CAA4BrE,MAAM,CAACC,GAAG,CAAC,SAAS,CAAC;IACjE,IAAIqE,OAAO,aAAPA,OAAO,eAAPA,OAAO,CAAEE,QAAQ,CAAC,WAAW,CAAC,EAAE;MAClC,OAAO,IAAI;IACb;IACA,OAAO,KAAK;EACd,CAAC;EAED/E,UAAU,EAAE,MAAOqB,YAA2B,IAAK;IACjD,IAAI;MAAA,IAAA2D,cAAA;MACF,IAAI,CAAC3F,OAAO,EAAE;QACZM,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;QACzB;MACF;MACAD,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;MACrB,IAAIyB,YAAY,EAAE;QAChBjC,aAAa,GAAGiC,YAAY;MAC9B,CAAC,MAAM;QACLjC,aAAa,GAAG,MAAMS,6BAAS,CAACoF,eAAe,CAAC,CAAC;MACnD;MACAtF,OAAO,CAACC,GAAG,CAAC,QAAQ,GAAAoF,cAAA,GAAE5F,aAAa,cAAA4F,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAe1D,YAAY,cAAA0D,cAAA,uBAA3BA,cAAA,CAA6BzD,MAAM,CAAC;MAC1D5B,OAAO,CAACC,GAAG,CAAC,SAAS,EAAEN,UAAU,CAACoD,KAAK,CAAC,CAAC,CAAC;MAC1C/C,OAAO,CAACC,GAAG,CAAC,cAAc,EAAEN,UAAU,CAACuE,UAAU,CAAC,CAAC,CAAC;MAEpD,MAAMqB,aAAa,CAAC,CAAC;MACrBjF,0BAAY,CAACkF,gBAAgB,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IACnD,CAAC,CAAC,OAAOxE,CAAC,EAAE;MACVhB,OAAO,CAACS,KAAK,CAACO,CAAC,CAAC;MAChBV,0BAAY,CAACkF,gBAAgB,CAAC,cAAc,EAAE;QAAExE;MAAE,CAAC,CAAC;IACtD;EACF;AACF,CAAC;AAED,MAAMuE,aAAa,GAAG,MAAAA,CAAA,KAAY;EAAA,IAAAE,cAAA,EAAAC,sBAAA;EAChC,IAAI,CAAC/F,UAAU,CAACoD,KAAK,CAAC,CAAC,IAAI,CAAC1B,0BAAY,CAACC,OAAO,CAAC,CAAC,EAAE;IAClD;EACF;EAEA,MAAMqE,IAAI,GAAG,EAAE;EACf,MAAMC,MAAM,GAAG,EAAE;EAEjB,MAAMV,OAAO,IAAAO,cAAA,GAAGhG,aAAa,cAAAgG,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAe9D,YAAY,cAAA8D,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6B7D,MAAM,cAAA6D,cAAA,gBAAAA,cAAA,GAAnCA,cAAA,CAAqCrD,GAAG,cAAAqD,cAAA,uBAAxCA,cAAA,CAA0CI,iBAAiB;EAC3E,MAAMC,UAAU,IAAAJ,sBAAA,GAAGrE,0BAAY,CAAC8D,WAAW,CAAC,CAAC,cAAAO,sBAAA,uBAA1BA,sBAAA,CAA4B9E,MAAM,CAACC,GAAG,CAAC,SAAS,CAAC;EACpE,IAAIqE,OAAO,IAAIA,OAAO,KAAKY,UAAU,EAAE;IACrCH,IAAI,CAACI,IAAI,CAAC,SAAS,CAAC;IACpBH,MAAM,CAACG,IAAI,CAACb,OAAO,CAAC;EACtB;EAEA,IAAIhB,UAAU;EACd,IAAIvE,UAAU,CAAC2C,YAAY,CAAC,CAAC,EAAE;IAC7B4B,UAAU,GAAG,IAAIM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;EACzC,CAAC,MAAM;IAAA,IAAAwB,cAAA;IACL,MAAMC,UAAU,IAAAD,cAAA,GAAGvG,aAAa,cAAAuG,cAAA,gBAAAA,cAAA,GAAbA,cAAA,CAAerE,YAAY,cAAAqE,cAAA,gBAAAA,cAAA,GAA3BA,cAAA,CAA6BpE,MAAM,cAAAoE,cAAA,gBAAAA,cAAA,GAAnCA,cAAA,CAAqC5D,GAAG,cAAA4D,cAAA,uBAAxCA,cAAA,CAA0C1B,cAAc;IAC3E,IAAI2B,UAAU,EAAE;MACd/B,UAAU,GAAG,IAAIM,IAAI,CAACyB,UAAU,CAAC;IACnC;EACF;EACA,IAAI/B,UAAU,EAAE;IAAA,IAAAgC,sBAAA;IACd,MAAMC,aAAa,IAAAD,sBAAA,GAAG7E,0BAAY,CAAC8D,WAAW,CAAC,CAAC,cAAAe,sBAAA,uBAA1BA,sBAAA,CAA4BtF,MAAM,CAACC,GAAG,CAAC,YAAY,CAAC;IAC1E,IAAIqD,UAAU,CAACW,OAAO,CAAC,CAAC,MAAKsB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEtB,OAAO,CAAC,CAAC,GAAE;MACrDc,IAAI,CAACI,IAAI,CAAC,YAAY,CAAC;MACvBH,MAAM,CAACG,IAAI,CAAC7B,UAAU,CAAC;IACzB;EACF;EAEA,IAAIyB,IAAI,CAAC9C,MAAM,GAAG,CAAC,EAAE;IACnB,MAAMxB,0BAAY,CAAC+E,eAAe,CAACT,IAAI,EAAEC,MAAM,CAAC;EAClD;AACF,CAAC"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativePurchases","_interopRequireDefault","_DevConfig","_LoginManager","_Notification","_PrefData","_Tool","_VipAndroidManager","obj","__esModule","default","_customerInfo","isReady","VipManager","exports","init","ToolkitConfig","RC_API_KEY","console","log","Purchases","configure","apiKey","refreshVip","Notification","addListener","_ref","error","user","logIn","AVUser","get","setAttributes","nickname","e","logOut","purchase","purchasePackage","errorCode","LoginManager","isLogin","Platform","OS","VipAndroidManager","customerInfo","entitlements","active","RC_ENTITLEMENT_ID","errorMsg","userCancelled","message","recover","_customerInfo$entitle","restorePurchases","vip","getPackages","isForeverVip","__DEV__","offerings","getOfferings","targetOffering","current","availablePackages","length","packages","isVip","isTrailVip","filter","item","productItem","product","productCategory","_customerInfo2","_customerInfo3","_isVip2","_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, LoginResultDataType } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { Tool, ToolkitConfig } from './Tool';\nimport { VipAndroidManager } from './VipAndroidManager';\n\nlet _customerInfo: CustomerInfo | null;\nlet isReady = false;\n\nexport const VipManager = {\n init: () => {\n isReady = !!ToolkitConfig.RC_API_KEY;\n\n if (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return;\n }\n\n console.log('Vip 模块初始化');\n\n Purchases.configure({ apiKey: ToolkitConfig.RC_API_KEY });\n\n VipManager.refreshVip();\n\n Notification.addListener(\n 'onLogin',\n async ({ error, user }: LoginResultDataType) => {\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 (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return { errorCode: -99 };\n }\n\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[\n ToolkitConfig.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 (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return { errorCode: -99 };\n }\n\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 (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return [];\n }\n\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 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 const productItem: any = item.product;\n return productItem.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 if (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return false;\n }\n\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) ? true : false;\n }\n }\n return _isVip ?? false;\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 if (!isReady) {\n console.log('VIP 模块无有效配置信息');\n return;\n }\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 // 必须确保通知正常发出,因为其他模块依赖这个时机\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,14 +1,15 @@
|
|
|
1
1
|
import { Platform } from 'react-native';
|
|
2
2
|
import { getReadableVersion } from 'react-native-device-info';
|
|
3
3
|
import { DevConfig } from './DevConfig';
|
|
4
|
+
import { Notification } from './Notification';
|
|
4
5
|
import { BuildInPrefs } from './PrefData';
|
|
6
|
+
import { VipAndroidManager } from './VipAndroidManager';
|
|
5
7
|
import { VipManager } from './VipManager';
|
|
6
8
|
const EventEmitter = require('events').EventEmitter;
|
|
7
9
|
const eventEmitter = new EventEmitter();
|
|
8
10
|
const semverGt = require('semver/functions/gt');
|
|
9
11
|
const semverGte = require('semver/functions/gte');
|
|
10
12
|
const semverCoerce = require('semver/functions/coerce');
|
|
11
|
-
let isDataLoaded = false;
|
|
12
13
|
let MyItems = {};
|
|
13
14
|
let VersionInfo = {
|
|
14
15
|
currentVersion: semverCoerce(getReadableVersion()).version,
|
|
@@ -80,24 +81,43 @@ const handleVersionInfo = () => {
|
|
|
80
81
|
}
|
|
81
82
|
}
|
|
82
83
|
};
|
|
84
|
+
let isDataReady = false;
|
|
85
|
+
let isVipStateReady = false;
|
|
86
|
+
let OnlineItems = [];
|
|
87
|
+
const _handleResponse = () => {
|
|
88
|
+
if (!isVipStateReady || !OnlineItems.length) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// 根据版本过滤
|
|
93
|
+
let items = _filterByVersion(OnlineItems);
|
|
94
|
+
// 根据 VIP 状态过滤
|
|
95
|
+
items = _filterByVip(items);
|
|
96
|
+
_updateKeyValues(items);
|
|
97
|
+
// 处理 Version 信息
|
|
98
|
+
handleVersionInfo();
|
|
99
|
+
console.log('Config 处理完毕');
|
|
100
|
+
isDataReady = true;
|
|
101
|
+
VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));
|
|
102
|
+
ConfigDataModel.emitChange();
|
|
103
|
+
};
|
|
83
104
|
const ConfigDataModel = {
|
|
84
105
|
init: defaultValues => {
|
|
85
106
|
MyItems = defaultValues;
|
|
107
|
+
// TODO 这里切换登录信息会复用
|
|
108
|
+
Notification.addListenerOnce('onVipRefresh', () => {
|
|
109
|
+
isVipStateReady = true;
|
|
110
|
+
_handleResponse();
|
|
111
|
+
});
|
|
112
|
+
ConfigDataModel.fetch();
|
|
86
113
|
},
|
|
87
114
|
fetch: () => {
|
|
88
115
|
const query = new AV.Query('Configs');
|
|
89
116
|
query.equalTo('valid', true).equalTo(Platform.OS, true);
|
|
90
117
|
query.find().then(items => {
|
|
91
|
-
// 根据版本过滤
|
|
92
|
-
items = _filterByVersion(items);
|
|
93
|
-
// 根据 VIP 状态过滤
|
|
94
|
-
items = _filterByVip(items);
|
|
95
|
-
_updateKeyValues(items);
|
|
96
|
-
// 处理 Version 信息
|
|
97
|
-
handleVersionInfo();
|
|
98
118
|
console.log('Config 抓取完毕');
|
|
99
|
-
|
|
100
|
-
|
|
119
|
+
OnlineItems = items;
|
|
120
|
+
_handleResponse();
|
|
101
121
|
}).catch(e => {
|
|
102
122
|
console.error(e);
|
|
103
123
|
});
|
|
@@ -112,7 +132,7 @@ const ConfigDataModel = {
|
|
|
112
132
|
eventEmitter.emit('change');
|
|
113
133
|
},
|
|
114
134
|
addListenerOnce: callback => {
|
|
115
|
-
if (
|
|
135
|
+
if (isDataReady) {
|
|
116
136
|
callback && callback();
|
|
117
137
|
return;
|
|
118
138
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Platform","getReadableVersion","DevConfig","BuildInPrefs","VipManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","isDataLoaded","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","__DEV__","hasValue","DevDanger","getValue","init","defaultValues","fetch","query","Query","equalTo","find","then","console","log","emitChange","catch","e","error","getVersionConfig","emit","addListenerOnce","callback","once"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { BuildInPrefs } from './PrefData';\nimport { VipManager } from './VipManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nlet isDataLoaded = false;\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: true,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('vipFilter');\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n if (\n semverGt(semverCoerce(configVersion).version, VersionInfo.latestVersion)\n ) {\n VersionInfo.latestVersion = semverCoerce(configVersion).version;\n\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (\n !semverGt(VersionInfo.currentVersion, semverCoerce(configVersion).version)\n ) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n },\n fetch: () => {\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n // 根据版本过滤\n items = _filterByVersion(items);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 抓取完毕');\n isDataLoaded = true;\n ConfigDataModel.emitChange();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["Platform","getReadableVersion","DevConfig","Notification","BuildInPrefs","VipAndroidManager","VipManager","EventEmitter","require","eventEmitter","semverGt","semverGte","semverCoerce","MyItems","VersionInfo","currentVersion","version","latestVersion","isDanger","hasNewVersion","AV","_filterByVersion","items","ret","curVer","item","_item$get","_item$get2","minVer","get","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_updateKeyValues","value","handleVersionInfo","key","OS","configVersion","ConfigDataModel","__DEV__","hasValue","DevDanger","getValue","isDataReady","isVipStateReady","OnlineItems","_handleResponse","length","console","log","setPackages","emitChange","init","defaultValues","addListenerOnce","fetch","query","Query","equalTo","find","then","catch","e","error","getVersionConfig","emit","callback","once"],"sources":["ConfigDataModel.ts"],"sourcesContent":["import { Object } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { DevConfig } from './DevConfig';\nimport { Notification } from './Notification';\nimport { BuildInPrefs } from './PrefData';\nimport { VipAndroidManager } from './VipAndroidManager';\nimport { VipManager } from './VipManager';\n\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface ConfigsType {\n [key: string]: any;\n}\nlet MyItems: ConfigsType = {};\nlet VersionInfo = {\n currentVersion: semverCoerce(getReadableVersion()).version,\n latestVersion: semverCoerce(getReadableVersion()).version,\n isDanger: true,\n hasNewVersion: false,\n};\n\nconst AV = require('leancloud-storage');\n\nconst _filterByVersion = (items: Object[]) => {\n let ret = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.get('minVer')?.trim();\n const maxVer = item.get('maxVer')?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Object[]) => {\n let ret = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.get('vipFilter');\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _updateKeyValues = (items: Object[]) => {\n for (const item of items) {\n let value = item.get('value');\n if (typeof value === 'string') {\n // 因为 leancloud 无法配置空白内容,所以 trim 下,这样就能以空格代替空白{\n value = value.trim();\n }\n MyItems[item.get('key')] = value;\n }\n};\n\nconst handleVersionInfo = () => {\n // online > current,则更新 latestVersion\n let key = 'ov';\n if (Platform.OS === 'android') {\n key = 'aov';\n }\n const configVersion = ConfigDataModel.get(key);\n if (configVersion) {\n if (\n semverGt(semverCoerce(configVersion).version, VersionInfo.latestVersion)\n ) {\n VersionInfo.latestVersion = semverCoerce(configVersion).version;\n\n VersionInfo.hasNewVersion = true;\n }\n // current <= online,才安全 ,防止忘记修改 online\n if (\n !semverGt(VersionInfo.currentVersion, semverCoerce(configVersion).version)\n ) {\n VersionInfo.isDanger = false;\n }\n }\n\n if (__DEV__) {\n if (DevConfig.hasValue(BuildInPrefs.DevDanger)) {\n VersionInfo.isDanger = DevConfig.getValue(BuildInPrefs.DevDanger);\n }\n }\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !OnlineItems.length) {\n return;\n }\n\n // 根据版本过滤\n let items = _filterByVersion(OnlineItems);\n // 根据 VIP 状态过滤\n items = _filterByVip(items);\n _updateKeyValues(items);\n // 处理 Version 信息\n handleVersionInfo();\n console.log('Config 处理完毕');\n isDataReady = true;\n VipAndroidManager.setPackages(ConfigDataModel.get('vip_android_products'));\n ConfigDataModel.emitChange();\n};\n\nconst ConfigDataModel = {\n init: (defaultValues: ConfigsType) => {\n MyItems = defaultValues;\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse();\n });\n ConfigDataModel.fetch();\n },\n\n fetch: () => {\n const query = new AV.Query('Configs');\n query.equalTo('valid', true).equalTo(Platform.OS, true);\n query\n .find()\n .then((items: Object[]) => {\n console.log('Config 抓取完毕');\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getVersionConfig: () => {\n return VersionInfo;\n },\n\n get: (key: string) => {\n return MyItems[key];\n },\n\n emitChange: () => {\n eventEmitter.emit('change');\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n\nexport { ConfigDataModel };\n"],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { getReadableVersion } from 'react-native-device-info';
|
|
|
3
3
|
import { ConfigDataModel } from './ConfigDataModel';
|
|
4
4
|
import { FrequenceManager } from './Frequence';
|
|
5
5
|
import { LoginManager } from './LoginManager';
|
|
6
|
+
import { Notification } from './Notification';
|
|
6
7
|
import { BuildInPrefs, PrefData } from './PrefData';
|
|
7
8
|
import { Tool, ToolkitConfig } from './Tool';
|
|
8
9
|
import { VipManager } from './VipManager';
|
|
@@ -12,7 +13,6 @@ const eventEmitter = new EventEmitter();
|
|
|
12
13
|
const semverGt = require('semver/functions/gt');
|
|
13
14
|
const semverGte = require('semver/functions/gte');
|
|
14
15
|
const semverCoerce = require('semver/functions/coerce');
|
|
15
|
-
let isDataLoaded = false;
|
|
16
16
|
let MyMessages = [];
|
|
17
17
|
const _filterByVersion = items => {
|
|
18
18
|
let ret = [];
|
|
@@ -107,26 +107,55 @@ const _handleReadMessages = items => {
|
|
|
107
107
|
}
|
|
108
108
|
return items;
|
|
109
109
|
};
|
|
110
|
+
let isDataReady = false;
|
|
111
|
+
let isVipStateReady = false;
|
|
112
|
+
let isConfigStateReady = false;
|
|
113
|
+
let OnlineItems = [];
|
|
114
|
+
const _handleResponse = () => {
|
|
115
|
+
var _ConfigDataModel$getV;
|
|
116
|
+
if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if ((_ConfigDataModel$getV = ConfigDataModel.getVersionConfig()) !== null && _ConfigDataModel$getV !== void 0 && _ConfigDataModel$getV.isDanger) {
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
MyMessages = OnlineItems.map(item => Tool.jsonify(item));
|
|
123
|
+
MyMessages = _filterByVersion(MyMessages);
|
|
124
|
+
MyMessages = _filterByVip(MyMessages);
|
|
125
|
+
MyMessages = _filterByUser(MyMessages);
|
|
126
|
+
MyMessages = _handleReadMessages(MyMessages);
|
|
127
|
+
|
|
128
|
+
// 由于强制插入的未读消息更改了时间,因此需要重新排序
|
|
129
|
+
MyMessages = MyMessages.sort((a, b) => {
|
|
130
|
+
let dateA = new Date(a.updatedAt).getTime();
|
|
131
|
+
let dateB = new Date(b.updatedAt).getTime();
|
|
132
|
+
return dateB - dateA;
|
|
133
|
+
});
|
|
134
|
+
console.log('Message 处理完毕');
|
|
135
|
+
isDataReady = true;
|
|
136
|
+
MessageModel.emitChange();
|
|
137
|
+
};
|
|
110
138
|
export const MessageModel = {
|
|
139
|
+
init: () => {
|
|
140
|
+
ConfigDataModel.addListenerOnce(() => {
|
|
141
|
+
isConfigStateReady = true;
|
|
142
|
+
_handleResponse();
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// TODO 这里切换登录信息会复用
|
|
146
|
+
Notification.addListenerOnce('onVipRefresh', () => {
|
|
147
|
+
isVipStateReady = true;
|
|
148
|
+
_handleResponse();
|
|
149
|
+
});
|
|
150
|
+
MessageModel.fetch();
|
|
151
|
+
},
|
|
111
152
|
fetch: () => {
|
|
112
153
|
const query = new AV.Query('Message');
|
|
113
154
|
query.equalTo('valid', true).equalTo(Platform.OS, true).descending('updatedAt');
|
|
114
155
|
query.find().then(async items => {
|
|
115
156
|
console.log('Message 抓取完毕');
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
MyMessages = _filterByVip(MyMessages);
|
|
119
|
-
MyMessages = _filterByUser(MyMessages);
|
|
120
|
-
MyMessages = _handleReadMessages(MyMessages);
|
|
121
|
-
|
|
122
|
-
// 由于强制插入的未读消息更改了时间,因此需要重新排序
|
|
123
|
-
MyMessages = MyMessages.sort((a, b) => {
|
|
124
|
-
let dateA = new Date(a.updatedAt).getTime();
|
|
125
|
-
let dateB = new Date(b.updatedAt).getTime();
|
|
126
|
-
return dateB - dateA;
|
|
127
|
-
});
|
|
128
|
-
isDataLoaded = true;
|
|
129
|
-
MessageModel.emitChange();
|
|
157
|
+
OnlineItems = items;
|
|
158
|
+
_handleResponse();
|
|
130
159
|
}).catch(e => {
|
|
131
160
|
console.error(e);
|
|
132
161
|
});
|
|
@@ -168,7 +197,7 @@ export const MessageModel = {
|
|
|
168
197
|
eventEmitter.emit('change', MyMessages.slice());
|
|
169
198
|
},
|
|
170
199
|
addListenerOnce: callback => {
|
|
171
|
-
if (
|
|
200
|
+
if (isDataReady) {
|
|
172
201
|
callback && callback();
|
|
173
202
|
return;
|
|
174
203
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Linking","Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","BuildInPrefs","PrefData","Tool","ToolkitConfig","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","isDataLoaded","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","markFinishForTime","markFinishForCount","MessageModel","fetch","query","Query","equalTo","OS","descending","find","then","console","log","map","jsonify","sort","a","b","dateA","getTime","dateB","emitChange","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","handleMessageAction","url","navigation","startsWith","iOSStoreUrl","AndroidStoreUrl","goAppStoreReview","canOpenURL","supported","openURL","navigate","emit","slice","addListenerOnce","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport { Linking, Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool, ToolkitConfig } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nlet isDataLoaded = false;\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nexport const MessageModel = {\n fetch: () => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: any[]) => {\n console.log('Message 抓取完毕');\n MyMessages = items.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n isDataLoaded = true;\n MessageModel.emitChange();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n handleMessageAction: (\n url: string,\n navigation: NavigationProp<ParamListBase>\n ) => {\n if (\n url.startsWith(ToolkitConfig.iOSStoreUrl) ||\n url.startsWith(ToolkitConfig.AndroidStoreUrl)\n ) {\n Tool.goAppStoreReview();\n return;\n }\n\n if (url?.length > 0) {\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n Linking.openURL(url);\n } else {\n navigation.navigate(url);\n }\n })\n .catch(() => {\n navigation.navigate(url);\n });\n }\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataLoaded) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"AACA,SAASA,OAAO,EAAEC,QAAQ,QAAQ,cAAc;AAChD,SAASC,kBAAkB,QAAQ,0BAA0B;AAC7D,SAASC,eAAe,QAAQ,mBAAmB;AACnD,SAAwBC,gBAAgB,QAAQ,aAAa;AAC7D,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,YAAY,EAAEC,QAAQ,QAAQ,YAAY;AACnD,SAASC,IAAI,EAAEC,aAAa,QAAQ,QAAQ;AAC5C,SAASC,UAAU,QAAQ,cAAc;AAEzC,MAAMC,EAAE,GAAGC,OAAO,CAAC,mBAAmB,CAAC;AACvC,MAAMC,YAAY,GAAGD,OAAO,CAAC,QAAQ,CAAC,CAACC,YAAY;AACnD,MAAMC,YAAY,GAAG,IAAID,YAAY,CAAC,CAAC;AACvC,MAAME,QAAQ,GAAGH,OAAO,CAAC,qBAAqB,CAAC;AAC/C,MAAMI,SAAS,GAAGJ,OAAO,CAAC,sBAAsB,CAAC;AACjD,MAAMK,YAAY,GAAGL,OAAO,CAAC,yBAAyB,CAAC;AAEvD,IAAIM,YAAY,GAAG,KAAK;AAsBxB,IAAIC,UAAqB,GAAG,EAAE;AAE9B,MAAMC,gBAAgB,GAAIC,KAAgB,IAAgB;EACxD,IAAIC,GAAc,GAAG,EAAE;EACvB,MAAMC,MAAM,GAAGN,YAAY,CAACf,kBAAkB,CAAC,CAAC,CAAC,CAACsB,OAAO;EACzD,KAAK,MAAMC,IAAI,IAAIJ,KAAK,EAAE;IAAA,IAAAK,YAAA,EAAAC,YAAA;IACxB,MAAMC,MAAM,IAAAF,YAAA,GAAGD,IAAI,CAACG,MAAM,cAAAF,YAAA,uBAAXA,YAAA,CAAaG,IAAI,CAAC,CAAC;IAClC,MAAMC,MAAM,IAAAH,YAAA,GAAGF,IAAI,CAACK,MAAM,cAAAH,YAAA,uBAAXA,YAAA,CAAaE,IAAI,CAAC,CAAC;IAClC;IACA,IAAI,CAAC,CAACD,MAAM,IAAIb,QAAQ,CAACE,YAAY,CAACW,MAAM,CAAC,CAACJ,OAAO,EAAED,MAAM,CAAC,EAAE;MAC9D;IACF;IACA,IAAI,CAAC,CAACO,MAAM,IAAId,SAAS,CAACO,MAAM,EAAEN,YAAY,CAACa,MAAM,CAAC,CAACN,OAAO,CAAC,EAAE;MAC/D;IACF;IAEAF,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC;EAChB;EACA,OAAOH,GAAG;AACZ,CAAC;AAED,MAAMU,YAAY,GAAIX,KAAgB,IAAgB;EACpD,IAAIC,GAAc,GAAG,EAAE;EACvB,MAAMW,KAAK,GAAGvB,UAAU,CAACuB,KAAK,CAAC,CAAC;EAChC,MAAMC,YAAY,GAAGxB,UAAU,CAACwB,YAAY,CAAC,CAAC;EAC9C,KAAK,MAAMT,IAAI,IAAIJ,KAAK,EAAE;IACxB,MAAMc,SAAS,GAAGV,IAAI,CAACU,SAAS;IAChC,IACEA,SAAS,KAAK,CAAC,IACdA,SAAS,KAAK,CAAC,IAAI,CAACF,KAAM,IAC1BE,SAAS,KAAK,CAAC,IAAI,CAACD,YAAa,EAClC;MACAZ,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC;IAChB;EACF;EACA,OAAOH,GAAG;AACZ,CAAC;AAED,MAAMc,aAAa,GAAIf,KAAgB,IAAgB;EACrD,IAAIC,GAAc,GAAG,EAAE;EACvB,KAAK,MAAMG,IAAI,IAAIJ,KAAK,EAAE;IACxB,MAAMgB,KAAK,GAAGZ,IAAI,CAACY,KAAK;IACxB,IAAIA,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEC,MAAM,EAAE;MACjB,IAAIjC,YAAY,CAACkC,OAAO,CAAC,CAAC,EAAE;QAAA,IAAAC,qBAAA;QAC1B,IACEH,KAAK,aAALA,KAAK,eAALA,KAAK,CAAEI,QAAQ,EAAAD,qBAAA,GAACnC,YAAY,CAACqC,WAAW,CAAC,CAAC,cAAAF,qBAAA,uBAA1BA,qBAAA,CAA4BG,MAAM,CAACC,GAAG,CAAC,UAAU,CAAC,CAAC,EACnE;UACAtB,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC;QAChB;MACF;IACF,CAAC,MAAM;MACLH,GAAG,CAACS,IAAI,CAACN,IAAI,CAAC;IAChB;EACF;EACA,OAAOH,GAAG;AACZ,CAAC;AAED,MAAMuB,mBAAmB,GAAIxB,KAAgB,IAAgB;EAC3D,IAAIyB,OAAO,EAAE;IACX;EAAA;;EAGF;EACA,MAAMC,QAAQ,GAAGxC,QAAQ,CAACyC,QAAQ,CAAC1C,YAAY,CAAC2C,QAAQ,CAAC;EACzD,KAAK,MAAMxB,IAAI,IAAIJ,KAAK,EAAE;IACxB,IAAI0B,QAAQ,CAACN,QAAQ,CAAChB,IAAI,CAACyB,QAAQ,CAAC,EAAE;MACpCzB,IAAI,CAAC0B,MAAM,GAAG,IAAI;IACpB;EACF;;EAEA;EACA,KAAK,MAAM1B,IAAI,IAAIJ,KAAK,EAAE;IAAA,IAAA+B,SAAA;IACxB,IAAI,CAAC3B,IAAI,CAAC0B,MAAM,EAAE;MAChB;IACF;IACA,IAAI1B,IAAI,CAAC4B,GAAG,KAAK,WAAW,EAAE;MAC5B;MACA;MACA,MAAMC,MAAM,GAAGnD,eAAe,CAACoD,gBAAgB,CAAC,CAAC;MACjD,IAAIpD,eAAe,CAACyC,GAAG,CAAC,eAAe,CAAC,IAAIU,MAAM,CAACE,aAAa,EAAE;QAChE/B,IAAI,CAAC0B,MAAM,GAAG,KAAK;QACnB1B,IAAI,CAACgC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MACxC;IACF,CAAC,MAAM,KAAAP,SAAA,GAAI3B,IAAI,CAAC4B,GAAG,cAAAD,SAAA,eAARA,SAAA,CAAUd,MAAM,EAAE;MAC3B,MAAMsB,SAAwB,GAAG;QAC/BP,GAAG,EAAE5B,IAAI,CAAC4B,GAAG;QACbQ,KAAK,EAAEpC,IAAI,CAACoC,KAAK;QACjBC,GAAG,EAAErC,IAAI,CAACqC;MACZ,CAAC;MACD,IAAI1D,gBAAgB,CAAC2D,MAAM,CAACH,SAAS,CAAC,EAAE;QACtC,IAAIA,SAAS,CAACE,GAAG,EAAE;UACjB1D,gBAAgB,CAAC4D,iBAAiB,CAACJ,SAAS,CAAC;QAC/C,CAAC,MAAM,IAAIA,SAAS,CAACC,KAAK,EAAE;UAC1BzD,gBAAgB,CAAC6D,kBAAkB,CAACL,SAAS,CAAC;QAChD;QAEAnC,IAAI,CAAC0B,MAAM,GAAG,KAAK;QACnB1B,IAAI,CAACgC,SAAS,GAAG,IAAIC,IAAI,CAAC,CAAC,CAACC,QAAQ,CAAC,CAAC;MACxC;IACF;EACF;EAEA,OAAOtC,KAAK;AACd,CAAC;AAED,OAAO,MAAM6C,YAAY,GAAG;EAC1BC,KAAK,EAAEA,CAAA,KAAM;IACX,MAAMC,KAAK,GAAG,IAAIzD,EAAE,CAAC0D,KAAK,CAAC,SAAS,CAAC;IACrCD,KAAK,CACFE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CACtBA,OAAO,CAACrE,QAAQ,CAACsE,EAAE,EAAE,IAAI,CAAC,CAC1BC,UAAU,CAAC,WAAW,CAAC;IAC1BJ,KAAK,CACFK,IAAI,CAAC,CAAC,CACNC,IAAI,CAAC,MAAOrD,KAAY,IAAK;MAC5BsD,OAAO,CAACC,GAAG,CAAC,cAAc,CAAC;MAC3BzD,UAAU,GAAGE,KAAK,CAACwD,GAAG,CAAEpD,IAAI,IAAKjB,IAAI,CAACsE,OAAO,CAACrD,IAAI,CAAC,CAAC;MACpDN,UAAU,GAAGC,gBAAgB,CAACD,UAAU,CAAC;MACzCA,UAAU,GAAGa,YAAY,CAACb,UAAU,CAAC;MACrCA,UAAU,GAAGiB,aAAa,CAACjB,UAAU,CAAC;MACtCA,UAAU,GAAG0B,mBAAmB,CAAC1B,UAAU,CAAC;;MAE5C;MACAA,UAAU,GAAGA,UAAU,CAAC4D,IAAI,CAAC,CAACC,CAAU,EAAEC,CAAU,KAAK;QACvD,IAAIC,KAAK,GAAG,IAAIxB,IAAI,CAACsB,CAAC,CAACvB,SAAS,CAAC,CAAC0B,OAAO,CAAC,CAAC;QAC3C,IAAIC,KAAK,GAAG,IAAI1B,IAAI,CAACuB,CAAC,CAACxB,SAAS,CAAC,CAAC0B,OAAO,CAAC,CAAC;QAC3C,OAAOC,KAAK,GAAGF,KAAK;MACtB,CAAC,CAAC;MACFhE,YAAY,GAAG,IAAI;MACnBgD,YAAY,CAACmB,UAAU,CAAC,CAAC;IAC3B,CAAC,CAAC,CACDC,KAAK,CAAEC,CAAM,IAAK;MACjBZ,OAAO,CAACa,KAAK,CAACD,CAAC,CAAC;IAClB,CAAC,CAAC;EACN,CAAC;EAEDE,iBAAiB,EAAEA,CAAA,KAAiB;IAClC,OAAOtE,UAAU,CAACuE,MAAM,CAAEjE,IAAI,IAAK,CAACA,IAAI,CAAC0B,MAAM,CAAC;EAClD,CAAC;EAEDwC,cAAc,EAAEA,CAAA,KAAiB;IAC/B,OAAOxE,UAAU;EACnB,CAAC;EAEDyE,eAAe,EAAE,MAAOC,OAAgB,IAAK;IAC3C,IAAIA,OAAO,CAAC1C,MAAM,IAAI,CAAC0C,OAAO,CAAC3C,QAAQ,EAAE;MACvC;IACF;IACA2C,OAAO,CAAC1C,MAAM,GAAG,IAAI;IACrB,MAAMJ,QAAQ,GAAGxC,QAAQ,CAACyC,QAAQ,CAAC1C,YAAY,CAAC2C,QAAQ,CAAC;IACzDF,QAAQ,CAAChB,IAAI,CAAC8D,OAAO,CAAC3C,QAAQ,CAAC;IAC/B,MAAM3C,QAAQ,CAACuF,QAAQ,CAACxF,YAAY,CAAC2C,QAAQ,EAAEF,QAAQ,CAAC;IACxDmB,YAAY,CAACmB,UAAU,CAAC,CAAC;EAC3B,CAAC;EAEDU,mBAAmB,EAAEA,CACnBC,GAAW,EACXC,UAAyC,KACtC;IACH,IACED,GAAG,CAACE,UAAU,CAACzF,aAAa,CAAC0F,WAAW,CAAC,IACzCH,GAAG,CAACE,UAAU,CAACzF,aAAa,CAAC2F,eAAe,CAAC,EAC7C;MACA5F,IAAI,CAAC6F,gBAAgB,CAAC,CAAC;MACvB;IACF;IAEA,IAAI,CAAAL,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAE1D,MAAM,IAAG,CAAC,EAAE;MACnBtC,OAAO,CAACsG,UAAU,CAACN,GAAG,CAAC,CACpBtB,IAAI,CAAE6B,SAAS,IAAK;QACnB,IAAIA,SAAS,EAAE;UACbvG,OAAO,CAACwG,OAAO,CAACR,GAAG,CAAC;QACtB,CAAC,MAAM;UACLC,UAAU,CAACQ,QAAQ,CAACT,GAAG,CAAC;QAC1B;MACF,CAAC,CAAC,CACDV,KAAK,CAAC,MAAM;QACXW,UAAU,CAACQ,QAAQ,CAACT,GAAG,CAAC;MAC1B,CAAC,CAAC;IACN;EACF,CAAC;EAEDX,UAAU,EAAEA,CAAA,KAAM;IAChBvE,YAAY,CAAC4F,IAAI,CAAC,QAAQ,EAAEvF,UAAU,CAACwF,KAAK,CAAC,CAAC,CAAC;EACjD,CAAC;EAEDC,eAAe,EAAGC,QAAkB,IAAK;IACvC,IAAI3F,YAAY,EAAE;MAChB2F,QAAQ,IAAIA,QAAQ,CAAC,CAAC;MACtB;IACF;IACA/F,YAAY,CAACgG,IAAI,CAAC,QAAQ,EAAED,QAAQ,CAAC;EACvC;AACF,CAAC"}
|
|
1
|
+
{"version":3,"names":["Linking","Platform","getReadableVersion","ConfigDataModel","FrequenceManager","LoginManager","Notification","BuildInPrefs","PrefData","Tool","ToolkitConfig","VipManager","AV","require","EventEmitter","eventEmitter","semverGt","semverGte","semverCoerce","MyMessages","_filterByVersion","items","ret","curVer","version","item","_item$minVer","_item$maxVer","minVer","trim","maxVer","push","_filterByVip","isVip","isForeverVip","vipFilter","_filterByUser","users","length","isLogin","_LoginManager$current","includes","currentUser","AVUser","get","_handleReadMessages","__DEV__","readMsgs","getValue","Messages","objectId","isRead","_item$key","key","config","getVersionConfig","hasNewVersion","updatedAt","Date","toString","freConfig","limit","gap","canRun","markFinishForTime","markFinishForCount","isDataReady","isVipStateReady","isConfigStateReady","OnlineItems","_handleResponse","_ConfigDataModel$getV","isDanger","map","jsonify","sort","a","b","dateA","getTime","dateB","console","log","MessageModel","emitChange","init","addListenerOnce","fetch","query","Query","equalTo","OS","descending","find","then","catch","e","error","getUnreadMessages","filter","getAllMessages","markMessageRead","message","setValue","handleMessageAction","url","navigation","startsWith","iOSStoreUrl","AndroidStoreUrl","goAppStoreReview","canOpenURL","supported","openURL","navigate","emit","slice","callback","once"],"sources":["MessageModel.ts"],"sourcesContent":["import { NavigationProp, ParamListBase } from '@react-navigation/native';\nimport { Object } from 'leancloud-storage';\nimport { Linking, Platform } from 'react-native';\nimport { getReadableVersion } from 'react-native-device-info';\nimport { ConfigDataModel } from './ConfigDataModel';\nimport { FreConfigType, FrequenceManager } from './Frequence';\nimport { LoginManager } from './LoginManager';\nimport { Notification } from './Notification';\nimport { BuildInPrefs, PrefData } from './PrefData';\nimport { Tool, ToolkitConfig } from './Tool';\nimport { VipManager } from './VipManager';\n\nconst AV = require('leancloud-storage');\nconst EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\nconst semverGt = require('semver/functions/gt');\nconst semverGte = require('semver/functions/gte');\nconst semverCoerce = require('semver/functions/coerce');\n\nexport interface Message {\n objectId: string;\n android: boolean;\n ios: boolean;\n title?: string;\n content?: string;\n maxVer?: string;\n minVer?: string;\n key?: string;\n updatedAt: string;\n valid: boolean;\n vipFilter?: number;\n isRead: boolean;\n users?: string[];\n limit?: number;\n gap?: number;\n url: string;\n actionTitle?: string;\n}\n\nlet MyMessages: Message[] = [];\n\nconst _filterByVersion = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const curVer = semverCoerce(getReadableVersion()).version;\n for (const item of items) {\n const minVer = item.minVer?.trim();\n const maxVer = item.maxVer?.trim();\n // 确保 cur 处于 [minVer, maxVer)\n if (!!minVer && semverGt(semverCoerce(minVer).version, curVer)) {\n continue;\n }\n if (!!maxVer && semverGte(curVer, semverCoerce(maxVer).version)) {\n continue;\n }\n\n ret.push(item);\n }\n return ret;\n};\n\nconst _filterByVip = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n const isVip = VipManager.isVip();\n const isForeverVip = VipManager.isForeverVip();\n for (const item of items) {\n const vipFilter = item.vipFilter;\n if (\n vipFilter === 0 ||\n (vipFilter === 1 && !isVip) ||\n (vipFilter === 2 && !isForeverVip)\n ) {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _filterByUser = (items: Message[]): Message[] => {\n let ret: Message[] = [];\n for (const item of items) {\n const users = item.users;\n if (users?.length) {\n if (LoginManager.isLogin()) {\n if (\n users?.includes(LoginManager.currentUser()?.AVUser.get('objectId'))\n ) {\n ret.push(item);\n }\n }\n } else {\n ret.push(item);\n }\n }\n return ret;\n};\n\nconst _handleReadMessages = (items: Message[]): Message[] => {\n if (__DEV__) {\n // return items;\n }\n\n // 根据已读状态标为已读\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n for (const item of items) {\n if (readMsgs.includes(item.objectId)) {\n item.isRead = true;\n }\n }\n\n // 挑选需要强制未读\n for (const item of items) {\n if (!item.isRead) {\n continue;\n }\n if (item.key === 'changeLog') {\n // 强制升级弹窗\n // Message 是在 Config 回包之后再请求的,因此此时 Config 的值一定是准确的\n const config = ConfigDataModel.getVersionConfig();\n if (ConfigDataModel.get('upgrade_alert') && config.hasNewVersion) {\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n } else if (item.key?.length) {\n const freConfig: FreConfigType = {\n key: item.key,\n limit: item.limit,\n gap: item.gap,\n };\n if (FrequenceManager.canRun(freConfig)) {\n if (freConfig.gap) {\n FrequenceManager.markFinishForTime(freConfig);\n } else if (freConfig.limit) {\n FrequenceManager.markFinishForCount(freConfig);\n }\n\n item.isRead = false;\n item.updatedAt = new Date().toString();\n }\n }\n }\n\n return items;\n};\n\nlet isDataReady = false;\nlet isVipStateReady = false;\nlet isConfigStateReady = false;\nlet OnlineItems: Object[] = [];\n\nconst _handleResponse = () => {\n if (!isVipStateReady || !isConfigStateReady || !OnlineItems.length) {\n return;\n }\n\n if (ConfigDataModel.getVersionConfig()?.isDanger) {\n return;\n }\n\n MyMessages = OnlineItems.map((item) => Tool.jsonify(item));\n MyMessages = _filterByVersion(MyMessages);\n MyMessages = _filterByVip(MyMessages);\n MyMessages = _filterByUser(MyMessages);\n MyMessages = _handleReadMessages(MyMessages);\n\n // 由于强制插入的未读消息更改了时间,因此需要重新排序\n MyMessages = MyMessages.sort((a: Message, b: Message) => {\n let dateA = new Date(a.updatedAt).getTime();\n let dateB = new Date(b.updatedAt).getTime();\n return dateB - dateA;\n });\n console.log('Message 处理完毕');\n isDataReady = true;\n MessageModel.emitChange();\n};\n\nexport const MessageModel = {\n init: () => {\n ConfigDataModel.addListenerOnce(() => {\n isConfigStateReady = true;\n _handleResponse();\n });\n\n // TODO 这里切换登录信息会复用\n Notification.addListenerOnce('onVipRefresh', () => {\n isVipStateReady = true;\n _handleResponse();\n });\n\n MessageModel.fetch();\n },\n\n fetch: () => {\n const query = new AV.Query('Message');\n query\n .equalTo('valid', true)\n .equalTo(Platform.OS, true)\n .descending('updatedAt');\n query\n .find()\n .then(async (items: Object[]) => {\n console.log('Message 抓取完毕');\n OnlineItems = items;\n _handleResponse();\n })\n .catch((e: any) => {\n console.error(e);\n });\n },\n\n getUnreadMessages: (): Message[] => {\n return MyMessages.filter((item) => !item.isRead);\n },\n\n getAllMessages: (): Message[] => {\n return MyMessages;\n },\n\n markMessageRead: async (message: Message) => {\n if (message.isRead || !message.objectId) {\n return;\n }\n message.isRead = true;\n const readMsgs = PrefData.getValue(BuildInPrefs.Messages);\n readMsgs.push(message.objectId);\n await PrefData.setValue(BuildInPrefs.Messages, readMsgs);\n MessageModel.emitChange();\n },\n\n handleMessageAction: (\n url: string,\n navigation: NavigationProp<ParamListBase>\n ) => {\n if (\n url.startsWith(ToolkitConfig.iOSStoreUrl) ||\n url.startsWith(ToolkitConfig.AndroidStoreUrl)\n ) {\n Tool.goAppStoreReview();\n return;\n }\n\n if (url?.length > 0) {\n Linking.canOpenURL(url)\n .then((supported) => {\n if (supported) {\n Linking.openURL(url);\n } else {\n navigation.navigate(url);\n }\n })\n .catch(() => {\n navigation.navigate(url);\n });\n }\n },\n\n emitChange: () => {\n eventEmitter.emit('change', MyMessages.slice());\n },\n\n addListenerOnce: (callback: Function) => {\n if (isDataReady) {\n callback && callback();\n return;\n }\n eventEmitter.once('change', callback);\n },\n};\n"],"mappings":"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"}
|
package/lib/module/Tool.js
CHANGED
|
@@ -154,6 +154,12 @@ export const Tool = {
|
|
|
154
154
|
},
|
|
155
155
|
savePicture: async (url, albumName) => {
|
|
156
156
|
console.log('savePicture', url);
|
|
157
|
+
if (!url) {
|
|
158
|
+
return {
|
|
159
|
+
errorCode: -5,
|
|
160
|
+
errMsg: 'url is empty'
|
|
161
|
+
};
|
|
162
|
+
}
|
|
157
163
|
|
|
158
164
|
// 检查权限
|
|
159
165
|
if (Platform.OS === 'android' && !(await Tool.hasAndroidWritePermission())) {
|
package/lib/module/Tool.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CameraRoll","useState","Linking","NativeModules","PermissionsAndroid","Platform","Toast","RNFetchBlob","ReportUtil","ToolkitConfig","initToolkitConfig","config","_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","goAppStoreReview","report","OS","canOpenURL","then","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsite","notifyMe","text","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","status","request","savePicture","albumName","console","log","errorCode","save","type","album","AppName","error","errMsg","JSON","stringify","extension","res","fileCache","appendExt","path","e1"],"sources":["Tool.ts"],"sourcesContent":["import CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport Toast from 'react-native-simple-toast';\nimport RNFetchBlob from 'rn-fetch-blob';\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\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\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\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 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 Linking.openURL(ToolkitConfig.AppWebsite);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\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 const status = await PermissionsAndroid.request(permission);\n return status === 'granted';\n },\n\n savePicture: async (url: string, albumName?: string) => {\n console.log('savePicture', url);\n\n // 检查权限\n if (\n Platform.OS === 'android' &&\n !(await Tool.hasAndroidWritePermission())\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 const res = await RNFetchBlob.config({\n fileCache: true,\n appendExt: extension,\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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["CameraRoll","useState","Linking","NativeModules","PermissionsAndroid","Platform","Toast","RNFetchBlob","ReportUtil","ToolkitConfig","initToolkitConfig","config","_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","goAppStoreReview","report","OS","canOpenURL","then","supported","openURL","iOSReviewUrl","CheckPackageInstallation","isPackageInstalled","isInstalled","goToMarket","AndroidPackageName","AndroidStoreScheme","goUpgrade","iOSStoreScheme","AppWebsite","notifyMe","text","__DEV__","fetch","PushDeerUrl","encodeURIComponent","hasAndroidWritePermission","permission","PERMISSIONS","WRITE_EXTERNAL_STORAGE","hasPermission","check","status","request","savePicture","albumName","console","log","errorCode","errMsg","save","type","album","AppName","error","JSON","stringify","extension","res","fileCache","appendExt","path","e1"],"sources":["Tool.ts"],"sourcesContent":["import CameraRoll from '@react-native-community/cameraroll';\nimport { useState } from 'react';\nimport {\n Linking,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport Toast from 'react-native-simple-toast';\nimport RNFetchBlob from 'rn-fetch-blob';\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\n PolicyUrl: string;\n TermsUrl: string;\n\n PushDeerUrl: string;\n\n RC_API_KEY: string;\n RC_ENTITLEMENT_ID: string;\n WeChatPayServer: string;\n WeiXinId: string;\n WeiXinSecret: string;\n\n SentryDSN: string;\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\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 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 Linking.openURL(ToolkitConfig.AppWebsite);\n }\n },\n\n notifyMe: async (text: string) => {\n if (!__DEV__) {\n await fetch(ToolkitConfig.PushDeerUrl + encodeURIComponent(text));\n }\n },\n\n hasAndroidWritePermission: async () => {\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 const status = await PermissionsAndroid.request(permission);\n return status === 'granted';\n },\n\n savePicture: async (url: string, albumName?: string) => {\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())\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 const res = await RNFetchBlob.config({\n fileCache: true,\n appendExt: extension,\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"],"mappings":"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"}
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import Purchases from 'react-native-purchases';
|
|
2
2
|
import * as WeChat from 'react-native-wechat-lib';
|
|
3
|
-
import { ConfigDataModel } from './ConfigDataModel';
|
|
4
3
|
import { LoginManager } from './LoginManager';
|
|
5
4
|
import { Tool, ToolkitConfig } from './Tool';
|
|
5
|
+
let AndroidPackages = [];
|
|
6
6
|
export const VipAndroidManager = {
|
|
7
|
+
setPackages: packages => {
|
|
8
|
+
AndroidPackages = packages;
|
|
9
|
+
},
|
|
7
10
|
queryOrder: async orderId => {
|
|
8
11
|
const user = LoginManager.currentUser();
|
|
9
12
|
// Step1:生成预订单
|
|
@@ -66,7 +69,7 @@ export const VipAndroidManager = {
|
|
|
66
69
|
}
|
|
67
70
|
},
|
|
68
71
|
getPackages: () => {
|
|
69
|
-
return
|
|
72
|
+
return AndroidPackages;
|
|
70
73
|
},
|
|
71
74
|
purchase: async purchasePackage => {
|
|
72
75
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Purchases","WeChat","
|
|
1
|
+
{"version":3,"names":["Purchases","WeChat","LoginManager","Tool","ToolkitConfig","AndroidPackages","VipAndroidManager","setPackages","packages","queryOrder","orderId","user","currentUser","rawResponse","fetch","WeChatPayServer","method","headers","body","JSON","stringify","AVUser","get","order","cmd","res","json","status","error","paid","e","recover","invalidateCustomerInfoCache","console","log","errorCode","errorMsg","getPackages","purchase","purchasePackage","_purchasePackage$prod","product","identifier","errCode","errStr","pay","payload","sleep"],"sources":["VipAndroidManager.ts"],"sourcesContent":["import Purchases, { PurchasesPackage } from 'react-native-purchases';\nimport * as WeChat from 'react-native-wechat-lib';\nimport { LoginManager } from './LoginManager';\nimport { Tool, ToolkitConfig } from './Tool';\nlet AndroidPackages: PurchasesPackage[] = [];\n\nexport const VipAndroidManager = {\n setPackages: (packages: PurchasesPackage[]) => {\n AndroidPackages = packages;\n },\n\n queryOrder: async (orderId?: string) => {\n const user = LoginManager.currentUser();\n // Step1:生成预订单\n try {\n const rawResponse = await fetch(ToolkitConfig.WeChatPayServer, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user: user?.AVUser.get('objectId'),\n order: orderId,\n cmd: 'check',\n }),\n });\n const res = await rawResponse.json();\n // console.log(res);\n if (rawResponse.status === 200 && !res.error) {\n return { paid: res.paid };\n } else {\n return { paid: false, e: res.error };\n }\n } catch (e) {\n return { paid: false, e: e };\n }\n },\n\n recover: async () => {\n const { paid, e } = await VipAndroidManager.queryOrder();\n if (paid && !e) {\n await Purchases.invalidateCustomerInfoCache();\n console.log('恢复成功');\n return { errorCode: 0 };\n } else {\n if (e) {\n console.log('恢复失败(-3)', JSON.stringify(e));\n return { errorCode: -3, errorMsg: JSON.stringify(e) };\n } else {\n console.log('恢复失败(-2)');\n return { errorCode: -2 };\n }\n }\n },\n\n getPackages: () => {\n return AndroidPackages;\n },\n\n purchase: async (purchasePackage: PurchasesPackage) => {\n try {\n const user = LoginManager.currentUser();\n // Step1:生成预订单\n const rawResponse = await fetch(ToolkitConfig.WeChatPayServer, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n user: user?.AVUser.get('objectId'),\n product: purchasePackage.product?.identifier,\n cmd: 'prepare',\n }),\n });\n const res = await rawResponse.json();\n // console.log(res);\n if (rawResponse.status === 200 && !res.error) {\n // Step2:调用微信支付 SDK\n const { errCode, errStr } = await WeChat.pay(res.payload);\n if (errCode) {\n console.log('购买失败(-5)', errStr);\n return { errorCode: -5, errorMsg: errStr };\n }\n // 虽然没什么问题,但保险起见还是延时下,让后台先更新\n await Tool.sleep(4000);\n // Step3:查询后台\n const { paid, e } = await VipAndroidManager.queryOrder(\n res.payload.order\n );\n if (paid && !e) {\n await Purchases.invalidateCustomerInfoCache();\n return { errorCode: 0 };\n } else {\n console.log('购买失败(-5)', JSON.stringify(e));\n return { errorCode: -5, errorMsg: JSON.stringify(e) };\n }\n } else {\n console.log('购买失败(-5)', JSON.stringify(res?.error));\n return { errorCode: -5, errorMsg: JSON.stringify(res?.error) };\n }\n } catch (e) {\n console.log('购买失败(-5)', JSON.stringify(e));\n return { errorCode: -5, errorMsg: JSON.stringify(e) };\n }\n },\n};\n"],"mappings":"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"}
|