@norcy/react-native-toolkit 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/commonjs/LoginManager.js +354 -0
- package/lib/commonjs/LoginManager.js.map +1 -0
- package/lib/commonjs/Notification.js.map +1 -1
- package/lib/commonjs/constant.js.map +1 -1
- package/lib/commonjs/index.js +12 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/LoginManager.js +348 -0
- package/lib/module/LoginManager.js.map +1 -0
- package/lib/module/Notification.js.map +1 -1
- package/lib/module/constant.js.map +1 -1
- package/lib/module/index.js +1 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/LoginManager.d.ts +16 -0
- package/lib/typescript/Notification.d.ts +1 -1
- package/lib/typescript/constant.d.ts +15 -0
- package/lib/typescript/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/LoginManager.ts +355 -0
- package/src/Notification.ts +1 -1
- package/src/constant.ts +17 -0
- package/src/index.tsx +1 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { AppleLoginUtil, BuildInPrefs, LoginType, Notification, PrefData, WeChatLoginUtil } from '@norcy/react-native-toolkit';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
3
|
+
import { getUniqueIdSync } from 'react-native-device-info';
|
|
4
|
+
import { LoginState } from './constant';
|
|
5
|
+
import { i18n } from './i18n';
|
|
6
|
+
const AV = require('leancloud-storage');
|
|
7
|
+
let CURRENT_USER = null;
|
|
8
|
+
let WeiXinId = '';
|
|
9
|
+
let WeiXinSecret = '';
|
|
10
|
+
const AVUserToLocalUser = user => {
|
|
11
|
+
return {
|
|
12
|
+
nickname: user.get('nickname'),
|
|
13
|
+
email: user.get('email'),
|
|
14
|
+
headimgurl: user.get('headimgurl'),
|
|
15
|
+
type: user.get('type'),
|
|
16
|
+
AVUser: user
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
const onLoginFinish = _ref => {
|
|
20
|
+
let {
|
|
21
|
+
isAuto = false,
|
|
22
|
+
user,
|
|
23
|
+
error,
|
|
24
|
+
code
|
|
25
|
+
} = _ref;
|
|
26
|
+
const data = {
|
|
27
|
+
isAuto,
|
|
28
|
+
user,
|
|
29
|
+
error,
|
|
30
|
+
code
|
|
31
|
+
};
|
|
32
|
+
if (user) {
|
|
33
|
+
PrefData.setValue(BuildInPrefs.LastLoginType, user.type);
|
|
34
|
+
}
|
|
35
|
+
Notification.postNotification('onLogin', data);
|
|
36
|
+
};
|
|
37
|
+
const doLeanCloudLogin = async (authData, userData, callback) => {
|
|
38
|
+
console.log('Lean Cloud 开始登录', userData);
|
|
39
|
+
// loginType 空说明是老用户
|
|
40
|
+
const loginType = authData.loginType ? authData.loginType : 'apple';
|
|
41
|
+
let loginTypeNum = LoginType.LoginTypeApple;
|
|
42
|
+
if (loginType === 'wechat') {
|
|
43
|
+
loginTypeNum = LoginType.LoginTypeWeChat;
|
|
44
|
+
} else if (loginType === 'visitor') {
|
|
45
|
+
loginTypeNum = LoginType.LoginTypeVisitor;
|
|
46
|
+
}
|
|
47
|
+
AV.User.loginWithAuthData(authData, loginType, {
|
|
48
|
+
failOnNotExist: true
|
|
49
|
+
}).then(user => {
|
|
50
|
+
// 登录成功
|
|
51
|
+
console.log('Lean Cloud 登录成功');
|
|
52
|
+
// 每次重新鉴权都更新头像和昵称,避免微信头像过期
|
|
53
|
+
// if (userData?.nickname) {
|
|
54
|
+
// user.set('nickname', userData?.nickname);
|
|
55
|
+
// }
|
|
56
|
+
// if (userData?.headimgurl) {
|
|
57
|
+
// user.set('headimgurl', userData?.headimgurl);
|
|
58
|
+
// }
|
|
59
|
+
// user.save();
|
|
60
|
+
CURRENT_USER = AVUserToLocalUser(user);
|
|
61
|
+
callback({
|
|
62
|
+
user: CURRENT_USER
|
|
63
|
+
});
|
|
64
|
+
}, error => {
|
|
65
|
+
if (error.code === 211) {
|
|
66
|
+
// 创建用户,并补充资料
|
|
67
|
+
console.log('创建用户,并补充资料');
|
|
68
|
+
const newUser = new AV.User();
|
|
69
|
+
const email = userData === null || userData === void 0 ? void 0 : userData.email;
|
|
70
|
+
if (email) {
|
|
71
|
+
newUser.setEmail(email);
|
|
72
|
+
}
|
|
73
|
+
newUser.set('nickname', userData === null || userData === void 0 ? void 0 : userData.nickname);
|
|
74
|
+
newUser.set('headimgurl', userData === null || userData === void 0 ? void 0 : userData.headimgurl);
|
|
75
|
+
newUser.set('type', loginTypeNum);
|
|
76
|
+
if (Platform.OS === 'android') {
|
|
77
|
+
newUser.set('source', 2);
|
|
78
|
+
}
|
|
79
|
+
newUser.set('toLDB', 1);
|
|
80
|
+
newUser.loginWithAuthData(authData, loginType).then(user => {
|
|
81
|
+
// 登录成功
|
|
82
|
+
console.log('Lean Cloud 注册成功');
|
|
83
|
+
CURRENT_USER = AVUserToLocalUser(user);
|
|
84
|
+
CURRENT_USER.isNew = true;
|
|
85
|
+
// 标记为当前用户是在本机注册的 TODO
|
|
86
|
+
// PrefData.setValue(Prefs.RegisterInThisDevice, true);
|
|
87
|
+
callback({
|
|
88
|
+
user: CURRENT_USER
|
|
89
|
+
});
|
|
90
|
+
}, error2 => {
|
|
91
|
+
// 登录失败
|
|
92
|
+
console.log('Lean Cloud 登录失败', error2);
|
|
93
|
+
callback({
|
|
94
|
+
error: error2
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
} else {
|
|
98
|
+
// 登录失败
|
|
99
|
+
console.log('Lean Cloud 登录失败', error);
|
|
100
|
+
callback({
|
|
101
|
+
error: error
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
export const LoginManager = {
|
|
107
|
+
setup: (WeChatId, WeChatSecret) => {
|
|
108
|
+
WeiXinId = WeChatId;
|
|
109
|
+
WeChatSecret = WeChatSecret;
|
|
110
|
+
},
|
|
111
|
+
// 自动根据已有的 User 信息进行登录鉴权,如果 User 为空则失败
|
|
112
|
+
autoLogin: async () => {
|
|
113
|
+
const user = await AV.User.currentAsync();
|
|
114
|
+
if (user) {
|
|
115
|
+
console.log('自动登录成功');
|
|
116
|
+
CURRENT_USER = AVUserToLocalUser(user);
|
|
117
|
+
onLoginFinish({
|
|
118
|
+
isAuto: true,
|
|
119
|
+
user: CURRENT_USER
|
|
120
|
+
});
|
|
121
|
+
} else {
|
|
122
|
+
onLoginFinish({
|
|
123
|
+
isAuto: true,
|
|
124
|
+
error: 'User Not Login Yet'
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
// 如果 User 为空,则唤起苹果登录框;如果 User 不为空,直接鉴权
|
|
129
|
+
login: async function (type) {
|
|
130
|
+
let devAuthData = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
|
|
131
|
+
let loadingCallback = arguments.length > 2 ? arguments[2] : undefined;
|
|
132
|
+
// 如果之前已经鉴权过,则直接使用上次鉴权的 AuthData
|
|
133
|
+
const cuurentUser = await AV.User.currentAsync();
|
|
134
|
+
if (cuurentUser) {
|
|
135
|
+
await LoginManager.autoLogin();
|
|
136
|
+
return;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// 改为注入 delegate
|
|
140
|
+
if (__DEV__) {
|
|
141
|
+
if (devAuthData) {
|
|
142
|
+
doLeanCloudLogin(devAuthData, undefined, _ref2 => {
|
|
143
|
+
let {
|
|
144
|
+
user,
|
|
145
|
+
error
|
|
146
|
+
} = _ref2;
|
|
147
|
+
onLoginFinish({
|
|
148
|
+
user,
|
|
149
|
+
error
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (type === LoginType.LoginTypeApple) {
|
|
156
|
+
const {
|
|
157
|
+
user,
|
|
158
|
+
email,
|
|
159
|
+
identityToken,
|
|
160
|
+
error,
|
|
161
|
+
code
|
|
162
|
+
} = await AppleLoginUtil.requestAppleUserForLogin();
|
|
163
|
+
if (!user || error) {
|
|
164
|
+
onLoginFinish({
|
|
165
|
+
error,
|
|
166
|
+
code
|
|
167
|
+
});
|
|
168
|
+
return;
|
|
169
|
+
} else {
|
|
170
|
+
let userData = {
|
|
171
|
+
userId: user,
|
|
172
|
+
email: email,
|
|
173
|
+
authData: {
|
|
174
|
+
openid: user,
|
|
175
|
+
access_token: identityToken,
|
|
176
|
+
expires_in: 99999999,
|
|
177
|
+
loginType: 'apple'
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
AppleLoginUtil.fetchAndUpdateCredentialState(userData.userId, _ref3 => {
|
|
181
|
+
let {
|
|
182
|
+
result,
|
|
183
|
+
error: error2
|
|
184
|
+
} = _ref3;
|
|
185
|
+
if (error || result !== LoginState.AUTHORIZED) {
|
|
186
|
+
onLoginFinish({
|
|
187
|
+
error: error2
|
|
188
|
+
});
|
|
189
|
+
} else {
|
|
190
|
+
loadingCallback && loadingCallback();
|
|
191
|
+
doLeanCloudLogin(userData.authData, userData, _ref4 => {
|
|
192
|
+
let {
|
|
193
|
+
user: loginUser,
|
|
194
|
+
error: error3
|
|
195
|
+
} = _ref4;
|
|
196
|
+
onLoginFinish({
|
|
197
|
+
user: loginUser,
|
|
198
|
+
error: error3
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
} else if (type === LoginType.LoginTypeWeChat) {
|
|
205
|
+
WeChatLoginUtil.doLogin(WeiXinId, WeiXinSecret, _ref5 => {
|
|
206
|
+
let {
|
|
207
|
+
nickname,
|
|
208
|
+
headimgurl,
|
|
209
|
+
openid,
|
|
210
|
+
unionid,
|
|
211
|
+
error
|
|
212
|
+
} = _ref5;
|
|
213
|
+
if (error) {
|
|
214
|
+
onLoginFinish({
|
|
215
|
+
error
|
|
216
|
+
});
|
|
217
|
+
} else {
|
|
218
|
+
let userData = {
|
|
219
|
+
nickname: nickname,
|
|
220
|
+
headimgurl: headimgurl,
|
|
221
|
+
authData: {
|
|
222
|
+
openid: openid,
|
|
223
|
+
unionid: unionid,
|
|
224
|
+
access_token: openid,
|
|
225
|
+
expires_in: 99999999,
|
|
226
|
+
loginType: 'wechat'
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
loadingCallback && loadingCallback();
|
|
230
|
+
doLeanCloudLogin(userData.authData, userData, _ref6 => {
|
|
231
|
+
let {
|
|
232
|
+
user,
|
|
233
|
+
error: error2
|
|
234
|
+
} = _ref6;
|
|
235
|
+
onLoginFinish({
|
|
236
|
+
user,
|
|
237
|
+
error: error2
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
});
|
|
242
|
+
} else if (type === LoginType.LoginTypeVisitor) {
|
|
243
|
+
const uniqueId = getUniqueIdSync();
|
|
244
|
+
console.log(uniqueId);
|
|
245
|
+
let userData = {
|
|
246
|
+
nickname: i18n.t('游客'),
|
|
247
|
+
authData: {
|
|
248
|
+
openid: uniqueId,
|
|
249
|
+
access_token: uniqueId,
|
|
250
|
+
expires_in: 99999999,
|
|
251
|
+
loginType: 'visitor'
|
|
252
|
+
}
|
|
253
|
+
};
|
|
254
|
+
loadingCallback && loadingCallback();
|
|
255
|
+
doLeanCloudLogin(userData.authData, userData, _ref7 => {
|
|
256
|
+
let {
|
|
257
|
+
user,
|
|
258
|
+
error
|
|
259
|
+
} = _ref7;
|
|
260
|
+
onLoginFinish({
|
|
261
|
+
user,
|
|
262
|
+
error
|
|
263
|
+
});
|
|
264
|
+
});
|
|
265
|
+
} else {
|
|
266
|
+
onLoginFinish({
|
|
267
|
+
error: i18n.t('未知登录类型,不应该走到这')
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
logOut: callback => {
|
|
272
|
+
console.log('onLogout');
|
|
273
|
+
AV.User.logOut();
|
|
274
|
+
CURRENT_USER = null;
|
|
275
|
+
callback && callback();
|
|
276
|
+
Notification.postNotification('onLogout');
|
|
277
|
+
},
|
|
278
|
+
isLogin: () => {
|
|
279
|
+
return LoginManager.currentUser() != null;
|
|
280
|
+
},
|
|
281
|
+
isVisitor: () => {
|
|
282
|
+
var _LoginManager$current;
|
|
283
|
+
return LoginManager.isLogin() && ((_LoginManager$current = LoginManager.currentUser()) === null || _LoginManager$current === void 0 ? void 0 : _LoginManager$current.type) === LoginType.LoginTypeVisitor;
|
|
284
|
+
},
|
|
285
|
+
currentUser: () => {
|
|
286
|
+
// console.log('current user is ', CURRENT_USER);
|
|
287
|
+
return CURRENT_USER;
|
|
288
|
+
},
|
|
289
|
+
batchUpdateUser: async (keys, values, callback) => {
|
|
290
|
+
console.log('Batch Update User Begin: ' + keys + ' ' + values);
|
|
291
|
+
const user = await AV.User.currentAsync();
|
|
292
|
+
if (!user) {
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
const oldValues = [];
|
|
296
|
+
for (let i = 0; i < keys.length; i++) {
|
|
297
|
+
oldValues.push(user.get(keys[i]));
|
|
298
|
+
user.set(keys[i], values[i]);
|
|
299
|
+
}
|
|
300
|
+
try {
|
|
301
|
+
const newUser = await user.save();
|
|
302
|
+
CURRENT_USER = AVUserToLocalUser(newUser);
|
|
303
|
+
console.log('Batch Update User End', user);
|
|
304
|
+
callback && callback();
|
|
305
|
+
} catch (e) {
|
|
306
|
+
console.error(e);
|
|
307
|
+
for (let i = 0; i < keys.length; i++) {
|
|
308
|
+
user.set(keys[i], oldValues[i]);
|
|
309
|
+
}
|
|
310
|
+
callback && callback(e);
|
|
311
|
+
}
|
|
312
|
+
},
|
|
313
|
+
updateUser: (key, value, callback) => {
|
|
314
|
+
LoginManager.batchUpdateUser([key], [value], callback);
|
|
315
|
+
},
|
|
316
|
+
deleteUser: async callback => {
|
|
317
|
+
try {
|
|
318
|
+
if (!CURRENT_USER) {
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
if (CURRENT_USER.type === LoginType.LoginTypeApple) {
|
|
322
|
+
await AppleLoginUtil.requestDeleteAccount();
|
|
323
|
+
}
|
|
324
|
+
const user = await AV.User.currentAsync();
|
|
325
|
+
console.log('get user success');
|
|
326
|
+
await user.destroy();
|
|
327
|
+
console.log('delete user success');
|
|
328
|
+
callback();
|
|
329
|
+
} catch (error) {
|
|
330
|
+
console.error(error);
|
|
331
|
+
callback(error);
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
lastLoginType: () => {
|
|
335
|
+
return PrefData.getValue(BuildInPrefs.LastLoginType);
|
|
336
|
+
},
|
|
337
|
+
fetchWeChatAvatar: callback => {
|
|
338
|
+
WeChatLoginUtil.doLogin(WeiXinId, WeiXinSecret, _ref8 => {
|
|
339
|
+
let {
|
|
340
|
+
headimgurl
|
|
341
|
+
} = _ref8;
|
|
342
|
+
callback({
|
|
343
|
+
headimgurl
|
|
344
|
+
});
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
};
|
|
348
|
+
//# sourceMappingURL=LoginManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["AppleLoginUtil","BuildInPrefs","LoginType","Notification","PrefData","WeChatLoginUtil","Platform","getUniqueIdSync","LoginState","i18n","AV","require","CURRENT_USER","WeiXinId","WeiXinSecret","AVUserToLocalUser","user","nickname","get","email","headimgurl","type","AVUser","onLoginFinish","_ref","isAuto","error","code","data","setValue","LastLoginType","postNotification","doLeanCloudLogin","authData","userData","callback","console","log","loginType","loginTypeNum","LoginTypeApple","LoginTypeWeChat","LoginTypeVisitor","User","loginWithAuthData","failOnNotExist","then","newUser","setEmail","set","OS","isNew","error2","LoginManager","setup","WeChatId","WeChatSecret","autoLogin","currentAsync","login","devAuthData","arguments","length","undefined","loadingCallback","cuurentUser","__DEV__","_ref2","identityToken","requestAppleUserForLogin","userId","openid","access_token","expires_in","fetchAndUpdateCredentialState","_ref3","result","AUTHORIZED","_ref4","loginUser","error3","doLogin","_ref5","unionid","_ref6","uniqueId","t","_ref7","logOut","isLogin","currentUser","isVisitor","_LoginManager$current","batchUpdateUser","keys","values","oldValues","i","push","save","e","updateUser","key","value","deleteUser","requestDeleteAccount","destroy","lastLoginType","getValue","fetchWeChatAvatar","_ref8"],"sources":["LoginManager.ts"],"sourcesContent":["import {\n AppleLoginUtil,\n BuildInPrefs,\n LoginType,\n Notification,\n PrefData,\n WeChatLoginUtil,\n} from '@norcy/react-native-toolkit';\nimport { User } from 'leancloud-storage';\nimport { Platform } from 'react-native';\nimport { getUniqueIdSync } from 'react-native-device-info';\nimport {\n LoginAuthDataType,\n LoginState,\n LoginUserDataType,\n UserType,\n} from './constant';\nimport { i18n } from './i18n';\n\nconst AV = require('leancloud-storage');\n\nlet CURRENT_USER: UserType | null = null;\n\nlet WeiXinId = '';\nlet WeiXinSecret = '';\n\nconst AVUserToLocalUser = (user: User) => {\n return {\n nickname: user.get('nickname'),\n email: user.get('email'),\n headimgurl: user.get('headimgurl'),\n type: user.get('type'),\n AVUser: user,\n };\n};\n\nconst onLoginFinish = ({\n isAuto = false,\n user,\n error,\n code,\n}: {\n isAuto?: boolean;\n user?: UserType;\n error?: string | object;\n code?: number;\n}) => {\n const data = { isAuto, user, error, code };\n if (user) {\n PrefData.setValue(BuildInPrefs.LastLoginType, user.type);\n }\n Notification.postNotification('onLogin', data);\n};\n\nconst doLeanCloudLogin = async (\n authData: LoginAuthDataType,\n userData: LoginUserDataType | undefined,\n callback: ({ user, error }: { user?: UserType; error?: any }) => void\n) => {\n console.log('Lean Cloud 开始登录', userData);\n // loginType 空说明是老用户\n const loginType = authData.loginType ? authData.loginType : 'apple';\n let loginTypeNum = LoginType.LoginTypeApple;\n if (loginType === 'wechat') {\n loginTypeNum = LoginType.LoginTypeWeChat;\n } else if (loginType === 'visitor') {\n loginTypeNum = LoginType.LoginTypeVisitor;\n }\n\n AV.User.loginWithAuthData(authData, loginType, { failOnNotExist: true }).then(\n (user: User) => {\n // 登录成功\n console.log('Lean Cloud 登录成功');\n // 每次重新鉴权都更新头像和昵称,避免微信头像过期\n // if (userData?.nickname) {\n // user.set('nickname', userData?.nickname);\n // }\n // if (userData?.headimgurl) {\n // user.set('headimgurl', userData?.headimgurl);\n // }\n // user.save();\n CURRENT_USER = AVUserToLocalUser(user);\n callback({ user: CURRENT_USER });\n },\n (error: any) => {\n if (error.code === 211) {\n // 创建用户,并补充资料\n console.log('创建用户,并补充资料');\n const newUser = new AV.User();\n const email = userData?.email;\n if (email) {\n newUser.setEmail(email);\n }\n newUser.set('nickname', userData?.nickname);\n newUser.set('headimgurl', userData?.headimgurl);\n newUser.set('type', loginTypeNum);\n if (Platform.OS === 'android') {\n newUser.set('source', 2);\n }\n newUser.set('toLDB', 1);\n newUser.loginWithAuthData(authData, loginType).then(\n (user: User) => {\n // 登录成功\n console.log('Lean Cloud 注册成功');\n CURRENT_USER = AVUserToLocalUser(user);\n CURRENT_USER.isNew = true;\n // 标记为当前用户是在本机注册的 TODO\n // PrefData.setValue(Prefs.RegisterInThisDevice, true);\n callback({ user: CURRENT_USER });\n },\n (error2: any) => {\n // 登录失败\n console.log('Lean Cloud 登录失败', error2);\n callback({ error: error2 });\n }\n );\n } else {\n // 登录失败\n console.log('Lean Cloud 登录失败', error);\n callback({ error: error });\n }\n }\n );\n};\n\nexport const LoginManager = {\n setup: (WeChatId: string, WeChatSecret: string) => {\n WeiXinId = WeChatId;\n WeChatSecret = WeChatSecret;\n },\n\n // 自动根据已有的 User 信息进行登录鉴权,如果 User 为空则失败\n autoLogin: async () => {\n const user = await AV.User.currentAsync();\n if (user) {\n console.log('自动登录成功');\n CURRENT_USER = AVUserToLocalUser(user);\n onLoginFinish({ isAuto: true, user: CURRENT_USER });\n } else {\n onLoginFinish({ isAuto: true, error: 'User Not Login Yet' });\n }\n },\n\n // 如果 User 为空,则唤起苹果登录框;如果 User 不为空,直接鉴权\n login: async (\n type: LoginType,\n devAuthData: LoginAuthDataType | null = null,\n loadingCallback: Function\n ) => {\n // 如果之前已经鉴权过,则直接使用上次鉴权的 AuthData\n const cuurentUser = await AV.User.currentAsync();\n if (cuurentUser) {\n await LoginManager.autoLogin();\n return;\n }\n\n // 改为注入 delegate\n if (__DEV__) {\n if (devAuthData) {\n doLeanCloudLogin(devAuthData, undefined, ({ user, error }) => {\n onLoginFinish({ user, error });\n });\n return;\n }\n }\n\n if (type === LoginType.LoginTypeApple) {\n const { user, email, identityToken, error, code } =\n await AppleLoginUtil.requestAppleUserForLogin();\n if (!user || error) {\n onLoginFinish({ error, code });\n return;\n } else {\n let userData = {\n userId: user,\n email: email,\n authData: {\n openid: user,\n access_token: identityToken,\n expires_in: 99999999,\n loginType: 'apple',\n },\n };\n\n AppleLoginUtil.fetchAndUpdateCredentialState(\n userData.userId,\n ({ result, error: error2 }: { result: number; error: any }) => {\n if (error || result !== LoginState.AUTHORIZED) {\n onLoginFinish({ error: error2 });\n } else {\n loadingCallback && loadingCallback();\n doLeanCloudLogin(\n userData.authData,\n userData,\n ({ user: loginUser, error: error3 }) => {\n onLoginFinish({ user: loginUser, error: error3 });\n }\n );\n }\n }\n );\n }\n } else if (type === LoginType.LoginTypeWeChat) {\n WeChatLoginUtil.doLogin(\n WeiXinId,\n WeiXinSecret,\n ({\n nickname,\n headimgurl,\n openid,\n unionid,\n error,\n }: {\n nickname: string;\n headimgurl: string;\n openid: string;\n unionid: string;\n error: any;\n }) => {\n if (error) {\n onLoginFinish({ error });\n } else {\n let userData = {\n nickname: nickname,\n headimgurl: headimgurl,\n authData: {\n openid: openid,\n unionid: unionid,\n access_token: openid,\n expires_in: 99999999,\n loginType: 'wechat',\n },\n };\n loadingCallback && loadingCallback();\n doLeanCloudLogin(\n userData.authData,\n userData,\n ({ user, error: error2 }) => {\n onLoginFinish({ user, error: error2 });\n }\n );\n }\n }\n );\n } else if (type === LoginType.LoginTypeVisitor) {\n const uniqueId = getUniqueIdSync();\n console.log(uniqueId);\n let userData = {\n nickname: i18n.t('游客'),\n authData: {\n openid: uniqueId,\n access_token: uniqueId,\n expires_in: 99999999,\n loginType: 'visitor',\n },\n };\n loadingCallback && loadingCallback();\n doLeanCloudLogin(userData.authData, userData, ({ user, error }) => {\n onLoginFinish({ user, error });\n });\n } else {\n onLoginFinish({ error: i18n.t('未知登录类型,不应该走到这') });\n }\n },\n\n logOut: (callback: Function) => {\n console.log('onLogout');\n AV.User.logOut();\n CURRENT_USER = null;\n callback && callback();\n Notification.postNotification('onLogout');\n },\n\n isLogin: () => {\n return LoginManager.currentUser() != null;\n },\n\n isVisitor: () => {\n return (\n LoginManager.isLogin() &&\n LoginManager.currentUser()?.type === LoginType.LoginTypeVisitor\n );\n },\n\n currentUser: () => {\n // console.log('current user is ', CURRENT_USER);\n return CURRENT_USER;\n },\n\n batchUpdateUser: async (\n keys: string[],\n values: string[],\n callback: Function\n ) => {\n console.log('Batch Update User Begin: ' + keys + ' ' + values);\n const user = await AV.User.currentAsync();\n if (!user) {\n return;\n }\n const oldValues = [];\n for (let i = 0; i < keys.length; i++) {\n oldValues.push(user.get(keys[i]));\n user.set(keys[i], values[i]);\n }\n try {\n const newUser = await user.save();\n CURRENT_USER = AVUserToLocalUser(newUser);\n console.log('Batch Update User End', user);\n callback && callback();\n } catch (e) {\n console.error(e);\n for (let i = 0; i < keys.length; i++) {\n user.set(keys[i], oldValues[i]);\n }\n callback && callback(e);\n }\n },\n\n updateUser: (key: string, value: string, callback: Function) => {\n LoginManager.batchUpdateUser([key], [value], callback);\n },\n\n deleteUser: async (callback: Function) => {\n try {\n if (!CURRENT_USER) {\n return;\n }\n if (CURRENT_USER.type === LoginType.LoginTypeApple) {\n await AppleLoginUtil.requestDeleteAccount();\n }\n const user = await AV.User.currentAsync();\n console.log('get user success');\n await user.destroy();\n console.log('delete user success');\n callback();\n } catch (error) {\n console.error(error);\n callback(error);\n }\n },\n\n lastLoginType: () => {\n return PrefData.getValue(BuildInPrefs.LastLoginType);\n },\n\n fetchWeChatAvatar: (callback: Function) => {\n WeChatLoginUtil.doLogin(\n WeiXinId,\n WeiXinSecret,\n ({ headimgurl }: { headimgurl: string }) => {\n callback({ headimgurl });\n }\n );\n },\n};\n"],"mappings":"AAAA,SACEA,cAAc,EACdC,YAAY,EACZC,SAAS,EACTC,YAAY,EACZC,QAAQ,EACRC,eAAe,QACV,6BAA6B;AAEpC,SAASC,QAAQ,QAAQ,cAAc;AACvC,SAASC,eAAe,QAAQ,0BAA0B;AAC1D,SAEEC,UAAU,QAGL,YAAY;AACnB,SAASC,IAAI,QAAQ,QAAQ;AAE7B,MAAMC,EAAE,GAAGC,OAAO,CAAC,mBAAmB,CAAC;AAEvC,IAAIC,YAA6B,GAAG,IAAI;AAExC,IAAIC,QAAQ,GAAG,EAAE;AACjB,IAAIC,YAAY,GAAG,EAAE;AAErB,MAAMC,iBAAiB,GAAIC,IAAU,IAAK;EACxC,OAAO;IACLC,QAAQ,EAAED,IAAI,CAACE,GAAG,CAAC,UAAU,CAAC;IAC9BC,KAAK,EAAEH,IAAI,CAACE,GAAG,CAAC,OAAO,CAAC;IACxBE,UAAU,EAAEJ,IAAI,CAACE,GAAG,CAAC,YAAY,CAAC;IAClCG,IAAI,EAAEL,IAAI,CAACE,GAAG,CAAC,MAAM,CAAC;IACtBI,MAAM,EAAEN;EACV,CAAC;AACH,CAAC;AAED,MAAMO,aAAa,GAAGC,IAAA,IAUhB;EAAA,IAViB;IACrBC,MAAM,GAAG,KAAK;IACdT,IAAI;IACJU,KAAK;IACLC;EAMF,CAAC,GAAAH,IAAA;EACC,MAAMI,IAAI,GAAG;IAAEH,MAAM;IAAET,IAAI;IAAEU,KAAK;IAAEC;EAAK,CAAC;EAC1C,IAAIX,IAAI,EAAE;IACRZ,QAAQ,CAACyB,QAAQ,CAAC5B,YAAY,CAAC6B,aAAa,EAAEd,IAAI,CAACK,IAAI,CAAC;EAC1D;EACAlB,YAAY,CAAC4B,gBAAgB,CAAC,SAAS,EAAEH,IAAI,CAAC;AAChD,CAAC;AAED,MAAMI,gBAAgB,GAAG,MAAAA,CACvBC,QAA2B,EAC3BC,QAAuC,EACvCC,QAAqE,KAClE;EACHC,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEH,QAAQ,CAAC;EACxC;EACA,MAAMI,SAAS,GAAGL,QAAQ,CAACK,SAAS,GAAGL,QAAQ,CAACK,SAAS,GAAG,OAAO;EACnE,IAAIC,YAAY,GAAGrC,SAAS,CAACsC,cAAc;EAC3C,IAAIF,SAAS,KAAK,QAAQ,EAAE;IAC1BC,YAAY,GAAGrC,SAAS,CAACuC,eAAe;EAC1C,CAAC,MAAM,IAAIH,SAAS,KAAK,SAAS,EAAE;IAClCC,YAAY,GAAGrC,SAAS,CAACwC,gBAAgB;EAC3C;EAEAhC,EAAE,CAACiC,IAAI,CAACC,iBAAiB,CAACX,QAAQ,EAAEK,SAAS,EAAE;IAAEO,cAAc,EAAE;EAAK,CAAC,CAAC,CAACC,IAAI,CAC1E9B,IAAU,IAAK;IACd;IACAoB,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;IAC9B;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACAzB,YAAY,GAAGG,iBAAiB,CAACC,IAAI,CAAC;IACtCmB,QAAQ,CAAC;MAAEnB,IAAI,EAAEJ;IAAa,CAAC,CAAC;EAClC,CAAC,EACAc,KAAU,IAAK;IACd,IAAIA,KAAK,CAACC,IAAI,KAAK,GAAG,EAAE;MACtB;MACAS,OAAO,CAACC,GAAG,CAAC,YAAY,CAAC;MACzB,MAAMU,OAAO,GAAG,IAAIrC,EAAE,CAACiC,IAAI,CAAC,CAAC;MAC7B,MAAMxB,KAAK,GAAGe,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEf,KAAK;MAC7B,IAAIA,KAAK,EAAE;QACT4B,OAAO,CAACC,QAAQ,CAAC7B,KAAK,CAAC;MACzB;MACA4B,OAAO,CAACE,GAAG,CAAC,UAAU,EAAEf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEjB,QAAQ,CAAC;MAC3C8B,OAAO,CAACE,GAAG,CAAC,YAAY,EAAEf,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEd,UAAU,CAAC;MAC/C2B,OAAO,CAACE,GAAG,CAAC,MAAM,EAAEV,YAAY,CAAC;MACjC,IAAIjC,QAAQ,CAAC4C,EAAE,KAAK,SAAS,EAAE;QAC7BH,OAAO,CAACE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;MAC1B;MACAF,OAAO,CAACE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;MACvBF,OAAO,CAACH,iBAAiB,CAACX,QAAQ,EAAEK,SAAS,CAAC,CAACQ,IAAI,CAChD9B,IAAU,IAAK;QACd;QACAoB,OAAO,CAACC,GAAG,CAAC,iBAAiB,CAAC;QAC9BzB,YAAY,GAAGG,iBAAiB,CAACC,IAAI,CAAC;QACtCJ,YAAY,CAACuC,KAAK,GAAG,IAAI;QACzB;QACA;QACAhB,QAAQ,CAAC;UAAEnB,IAAI,EAAEJ;QAAa,CAAC,CAAC;MAClC,CAAC,EACAwC,MAAW,IAAK;QACf;QACAhB,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEe,MAAM,CAAC;QACtCjB,QAAQ,CAAC;UAAET,KAAK,EAAE0B;QAAO,CAAC,CAAC;MAC7B,CACF,CAAC;IACH,CAAC,MAAM;MACL;MACAhB,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAEX,KAAK,CAAC;MACrCS,QAAQ,CAAC;QAAET,KAAK,EAAEA;MAAM,CAAC,CAAC;IAC5B;EACF,CACF,CAAC;AACH,CAAC;AAED,OAAO,MAAM2B,YAAY,GAAG;EAC1BC,KAAK,EAAEA,CAACC,QAAgB,EAAEC,YAAoB,KAAK;IACjD3C,QAAQ,GAAG0C,QAAQ;IACnBC,YAAY,GAAGA,YAAY;EAC7B,CAAC;EAED;EACAC,SAAS,EAAE,MAAAA,CAAA,KAAY;IACrB,MAAMzC,IAAI,GAAG,MAAMN,EAAE,CAACiC,IAAI,CAACe,YAAY,CAAC,CAAC;IACzC,IAAI1C,IAAI,EAAE;MACRoB,OAAO,CAACC,GAAG,CAAC,QAAQ,CAAC;MACrBzB,YAAY,GAAGG,iBAAiB,CAACC,IAAI,CAAC;MACtCO,aAAa,CAAC;QAAEE,MAAM,EAAE,IAAI;QAAET,IAAI,EAAEJ;MAAa,CAAC,CAAC;IACrD,CAAC,MAAM;MACLW,aAAa,CAAC;QAAEE,MAAM,EAAE,IAAI;QAAEC,KAAK,EAAE;MAAqB,CAAC,CAAC;IAC9D;EACF,CAAC;EAED;EACAiC,KAAK,EAAE,eAAAA,CACLtC,IAAe,EAGZ;IAAA,IAFHuC,WAAqC,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,IAAI;IAAA,IAC5CG,eAAyB,GAAAH,SAAA,CAAAC,MAAA,OAAAD,SAAA,MAAAE,SAAA;IAEzB;IACA,MAAME,WAAW,GAAG,MAAMvD,EAAE,CAACiC,IAAI,CAACe,YAAY,CAAC,CAAC;IAChD,IAAIO,WAAW,EAAE;MACf,MAAMZ,YAAY,CAACI,SAAS,CAAC,CAAC;MAC9B;IACF;;IAEA;IACA,IAAIS,OAAO,EAAE;MACX,IAAIN,WAAW,EAAE;QACf5B,gBAAgB,CAAC4B,WAAW,EAAEG,SAAS,EAAEI,KAAA,IAAqB;UAAA,IAApB;YAAEnD,IAAI;YAAEU;UAAM,CAAC,GAAAyC,KAAA;UACvD5C,aAAa,CAAC;YAAEP,IAAI;YAAEU;UAAM,CAAC,CAAC;QAChC,CAAC,CAAC;QACF;MACF;IACF;IAEA,IAAIL,IAAI,KAAKnB,SAAS,CAACsC,cAAc,EAAE;MACrC,MAAM;QAAExB,IAAI;QAAEG,KAAK;QAAEiD,aAAa;QAAE1C,KAAK;QAAEC;MAAK,CAAC,GAC/C,MAAM3B,cAAc,CAACqE,wBAAwB,CAAC,CAAC;MACjD,IAAI,CAACrD,IAAI,IAAIU,KAAK,EAAE;QAClBH,aAAa,CAAC;UAAEG,KAAK;UAAEC;QAAK,CAAC,CAAC;QAC9B;MACF,CAAC,MAAM;QACL,IAAIO,QAAQ,GAAG;UACboC,MAAM,EAAEtD,IAAI;UACZG,KAAK,EAAEA,KAAK;UACZc,QAAQ,EAAE;YACRsC,MAAM,EAAEvD,IAAI;YACZwD,YAAY,EAAEJ,aAAa;YAC3BK,UAAU,EAAE,QAAQ;YACpBnC,SAAS,EAAE;UACb;QACF,CAAC;QAEDtC,cAAc,CAAC0E,6BAA6B,CAC1CxC,QAAQ,CAACoC,MAAM,EACfK,KAAA,IAA+D;UAAA,IAA9D;YAAEC,MAAM;YAAElD,KAAK,EAAE0B;UAAuC,CAAC,GAAAuB,KAAA;UACxD,IAAIjD,KAAK,IAAIkD,MAAM,KAAKpE,UAAU,CAACqE,UAAU,EAAE;YAC7CtD,aAAa,CAAC;cAAEG,KAAK,EAAE0B;YAAO,CAAC,CAAC;UAClC,CAAC,MAAM;YACLY,eAAe,IAAIA,eAAe,CAAC,CAAC;YACpChC,gBAAgB,CACdE,QAAQ,CAACD,QAAQ,EACjBC,QAAQ,EACR4C,KAAA,IAAwC;cAAA,IAAvC;gBAAE9D,IAAI,EAAE+D,SAAS;gBAAErD,KAAK,EAAEsD;cAAO,CAAC,GAAAF,KAAA;cACjCvD,aAAa,CAAC;gBAAEP,IAAI,EAAE+D,SAAS;gBAAErD,KAAK,EAAEsD;cAAO,CAAC,CAAC;YACnD,CACF,CAAC;UACH;QACF,CACF,CAAC;MACH;IACF,CAAC,MAAM,IAAI3D,IAAI,KAAKnB,SAAS,CAACuC,eAAe,EAAE;MAC7CpC,eAAe,CAAC4E,OAAO,CACrBpE,QAAQ,EACRC,YAAY,EACZoE,KAAA,IAYM;QAAA,IAZL;UACCjE,QAAQ;UACRG,UAAU;UACVmD,MAAM;UACNY,OAAO;UACPzD;QAOF,CAAC,GAAAwD,KAAA;QACC,IAAIxD,KAAK,EAAE;UACTH,aAAa,CAAC;YAAEG;UAAM,CAAC,CAAC;QAC1B,CAAC,MAAM;UACL,IAAIQ,QAAQ,GAAG;YACbjB,QAAQ,EAAEA,QAAQ;YAClBG,UAAU,EAAEA,UAAU;YACtBa,QAAQ,EAAE;cACRsC,MAAM,EAAEA,MAAM;cACdY,OAAO,EAAEA,OAAO;cAChBX,YAAY,EAAED,MAAM;cACpBE,UAAU,EAAE,QAAQ;cACpBnC,SAAS,EAAE;YACb;UACF,CAAC;UACD0B,eAAe,IAAIA,eAAe,CAAC,CAAC;UACpChC,gBAAgB,CACdE,QAAQ,CAACD,QAAQ,EACjBC,QAAQ,EACRkD,KAAA,IAA6B;YAAA,IAA5B;cAAEpE,IAAI;cAAEU,KAAK,EAAE0B;YAAO,CAAC,GAAAgC,KAAA;YACtB7D,aAAa,CAAC;cAAEP,IAAI;cAAEU,KAAK,EAAE0B;YAAO,CAAC,CAAC;UACxC,CACF,CAAC;QACH;MACF,CACF,CAAC;IACH,CAAC,MAAM,IAAI/B,IAAI,KAAKnB,SAAS,CAACwC,gBAAgB,EAAE;MAC9C,MAAM2C,QAAQ,GAAG9E,eAAe,CAAC,CAAC;MAClC6B,OAAO,CAACC,GAAG,CAACgD,QAAQ,CAAC;MACrB,IAAInD,QAAQ,GAAG;QACbjB,QAAQ,EAAER,IAAI,CAAC6E,CAAC,CAAC,IAAI,CAAC;QACtBrD,QAAQ,EAAE;UACRsC,MAAM,EAAEc,QAAQ;UAChBb,YAAY,EAAEa,QAAQ;UACtBZ,UAAU,EAAE,QAAQ;UACpBnC,SAAS,EAAE;QACb;MACF,CAAC;MACD0B,eAAe,IAAIA,eAAe,CAAC,CAAC;MACpChC,gBAAgB,CAACE,QAAQ,CAACD,QAAQ,EAAEC,QAAQ,EAAEqD,KAAA,IAAqB;QAAA,IAApB;UAAEvE,IAAI;UAAEU;QAAM,CAAC,GAAA6D,KAAA;QAC5DhE,aAAa,CAAC;UAAEP,IAAI;UAAEU;QAAM,CAAC,CAAC;MAChC,CAAC,CAAC;IACJ,CAAC,MAAM;MACLH,aAAa,CAAC;QAAEG,KAAK,EAAEjB,IAAI,CAAC6E,CAAC,CAAC,eAAe;MAAE,CAAC,CAAC;IACnD;EACF,CAAC;EAEDE,MAAM,EAAGrD,QAAkB,IAAK;IAC9BC,OAAO,CAACC,GAAG,CAAC,UAAU,CAAC;IACvB3B,EAAE,CAACiC,IAAI,CAAC6C,MAAM,CAAC,CAAC;IAChB5E,YAAY,GAAG,IAAI;IACnBuB,QAAQ,IAAIA,QAAQ,CAAC,CAAC;IACtBhC,YAAY,CAAC4B,gBAAgB,CAAC,UAAU,CAAC;EAC3C,CAAC;EAED0D,OAAO,EAAEA,CAAA,KAAM;IACb,OAAOpC,YAAY,CAACqC,WAAW,CAAC,CAAC,IAAI,IAAI;EAC3C,CAAC;EAEDC,SAAS,EAAEA,CAAA,KAAM;IAAA,IAAAC,qBAAA;IACf,OACEvC,YAAY,CAACoC,OAAO,CAAC,CAAC,IACtB,EAAAG,qBAAA,GAAAvC,YAAY,CAACqC,WAAW,CAAC,CAAC,cAAAE,qBAAA,uBAA1BA,qBAAA,CAA4BvE,IAAI,MAAKnB,SAAS,CAACwC,gBAAgB;EAEnE,CAAC;EAEDgD,WAAW,EAAEA,CAAA,KAAM;IACjB;IACA,OAAO9E,YAAY;EACrB,CAAC;EAEDiF,eAAe,EAAE,MAAAA,CACfC,IAAc,EACdC,MAAgB,EAChB5D,QAAkB,KACf;IACHC,OAAO,CAACC,GAAG,CAAC,2BAA2B,GAAGyD,IAAI,GAAG,GAAG,GAAGC,MAAM,CAAC;IAC9D,MAAM/E,IAAI,GAAG,MAAMN,EAAE,CAACiC,IAAI,CAACe,YAAY,CAAC,CAAC;IACzC,IAAI,CAAC1C,IAAI,EAAE;MACT;IACF;IACA,MAAMgF,SAAS,GAAG,EAAE;IACpB,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAAChC,MAAM,EAAEmC,CAAC,EAAE,EAAE;MACpCD,SAAS,CAACE,IAAI,CAAClF,IAAI,CAACE,GAAG,CAAC4E,IAAI,CAACG,CAAC,CAAC,CAAC,CAAC;MACjCjF,IAAI,CAACiC,GAAG,CAAC6C,IAAI,CAACG,CAAC,CAAC,EAAEF,MAAM,CAACE,CAAC,CAAC,CAAC;IAC9B;IACA,IAAI;MACF,MAAMlD,OAAO,GAAG,MAAM/B,IAAI,CAACmF,IAAI,CAAC,CAAC;MACjCvF,YAAY,GAAGG,iBAAiB,CAACgC,OAAO,CAAC;MACzCX,OAAO,CAACC,GAAG,CAAC,uBAAuB,EAAErB,IAAI,CAAC;MAC1CmB,QAAQ,IAAIA,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC,OAAOiE,CAAC,EAAE;MACVhE,OAAO,CAACV,KAAK,CAAC0E,CAAC,CAAC;MAChB,KAAK,IAAIH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGH,IAAI,CAAChC,MAAM,EAAEmC,CAAC,EAAE,EAAE;QACpCjF,IAAI,CAACiC,GAAG,CAAC6C,IAAI,CAACG,CAAC,CAAC,EAAED,SAAS,CAACC,CAAC,CAAC,CAAC;MACjC;MACA9D,QAAQ,IAAIA,QAAQ,CAACiE,CAAC,CAAC;IACzB;EACF,CAAC;EAEDC,UAAU,EAAEA,CAACC,GAAW,EAAEC,KAAa,EAAEpE,QAAkB,KAAK;IAC9DkB,YAAY,CAACwC,eAAe,CAAC,CAACS,GAAG,CAAC,EAAE,CAACC,KAAK,CAAC,EAAEpE,QAAQ,CAAC;EACxD,CAAC;EAEDqE,UAAU,EAAE,MAAOrE,QAAkB,IAAK;IACxC,IAAI;MACF,IAAI,CAACvB,YAAY,EAAE;QACjB;MACF;MACA,IAAIA,YAAY,CAACS,IAAI,KAAKnB,SAAS,CAACsC,cAAc,EAAE;QAClD,MAAMxC,cAAc,CAACyG,oBAAoB,CAAC,CAAC;MAC7C;MACA,MAAMzF,IAAI,GAAG,MAAMN,EAAE,CAACiC,IAAI,CAACe,YAAY,CAAC,CAAC;MACzCtB,OAAO,CAACC,GAAG,CAAC,kBAAkB,CAAC;MAC/B,MAAMrB,IAAI,CAAC0F,OAAO,CAAC,CAAC;MACpBtE,OAAO,CAACC,GAAG,CAAC,qBAAqB,CAAC;MAClCF,QAAQ,CAAC,CAAC;IACZ,CAAC,CAAC,OAAOT,KAAK,EAAE;MACdU,OAAO,CAACV,KAAK,CAACA,KAAK,CAAC;MACpBS,QAAQ,CAACT,KAAK,CAAC;IACjB;EACF,CAAC;EAEDiF,aAAa,EAAEA,CAAA,KAAM;IACnB,OAAOvG,QAAQ,CAACwG,QAAQ,CAAC3G,YAAY,CAAC6B,aAAa,CAAC;EACtD,CAAC;EAED+E,iBAAiB,EAAG1E,QAAkB,IAAK;IACzC9B,eAAe,CAAC4E,OAAO,CACrBpE,QAAQ,EACRC,YAAY,EACZgG,KAAA,IAA4C;MAAA,IAA3C;QAAE1F;MAAmC,CAAC,GAAA0F,KAAA;MACrC3E,QAAQ,CAAC;QAAEf;MAAW,CAAC,CAAC;IAC1B,CACF,CAAC;EACH;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EventEmitter","require","eventEmitter","ListenerToEvent","Notification","addListener","event","callback","key","toString","on","addListenerOnce","once","removeListener","removeAllListeners","keys","Object","postNotification","args","emit"],"sources":["Notification.ts"],"sourcesContent":["const EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\ninterface ListenerType {\n [key: string]: string;\n}\n\nconst ListenerToEvent: ListenerType = {};\n\nexport const Notification = {\n addListener: (event: string, callback: Function) => {\n const key = callback.toString();\n if (!ListenerToEvent[key]) {\n eventEmitter.on(event, callback);\n ListenerToEvent[key] = event;\n }\n return callback;\n },\n\n addListenerOnce: (event: string, callback: Function) => {\n eventEmitter.once(event, callback);\n },\n\n removeListener: (callback: Function) => {\n const key = callback.toString();\n const event = ListenerToEvent[key];\n delete ListenerToEvent[key];\n eventEmitter.removeListener(event, callback);\n },\n\n removeAllListeners: (event: string) => {\n const keys = Object.keys(ListenerToEvent);\n for (const key of keys) {\n if (ListenerToEvent[key] === event) {\n delete ListenerToEvent[key];\n }\n }\n eventEmitter.removeAllListeners(event);\n },\n\n postNotification: (event: string, args
|
|
1
|
+
{"version":3,"names":["EventEmitter","require","eventEmitter","ListenerToEvent","Notification","addListener","event","callback","key","toString","on","addListenerOnce","once","removeListener","removeAllListeners","keys","Object","postNotification","args","emit"],"sources":["Notification.ts"],"sourcesContent":["const EventEmitter = require('events').EventEmitter;\nconst eventEmitter = new EventEmitter();\n\ninterface ListenerType {\n [key: string]: string;\n}\n\nconst ListenerToEvent: ListenerType = {};\n\nexport const Notification = {\n addListener: (event: string, callback: Function) => {\n const key = callback.toString();\n if (!ListenerToEvent[key]) {\n eventEmitter.on(event, callback);\n ListenerToEvent[key] = event;\n }\n return callback;\n },\n\n addListenerOnce: (event: string, callback: Function) => {\n eventEmitter.once(event, callback);\n },\n\n removeListener: (callback: Function) => {\n const key = callback.toString();\n const event = ListenerToEvent[key];\n delete ListenerToEvent[key];\n eventEmitter.removeListener(event, callback);\n },\n\n removeAllListeners: (event: string) => {\n const keys = Object.keys(ListenerToEvent);\n for (const key of keys) {\n if (ListenerToEvent[key] === event) {\n delete ListenerToEvent[key];\n }\n }\n eventEmitter.removeAllListeners(event);\n },\n\n postNotification: (event: string, args?: object) => {\n eventEmitter.emit(event, args);\n },\n};\n"],"mappings":"AAAA,MAAMA,YAAY,GAAGC,OAAO,CAAC,QAAQ,CAAC,CAACD,YAAY;AACnD,MAAME,YAAY,GAAG,IAAIF,YAAY,CAAC,CAAC;AAMvC,MAAMG,eAA6B,GAAG,CAAC,CAAC;AAExC,OAAO,MAAMC,YAAY,GAAG;EAC1BC,WAAW,EAAEA,CAACC,KAAa,EAAEC,QAAkB,KAAK;IAClD,MAAMC,GAAG,GAAGD,QAAQ,CAACE,QAAQ,CAAC,CAAC;IAC/B,IAAI,CAACN,eAAe,CAACK,GAAG,CAAC,EAAE;MACzBN,YAAY,CAACQ,EAAE,CAACJ,KAAK,EAAEC,QAAQ,CAAC;MAChCJ,eAAe,CAACK,GAAG,CAAC,GAAGF,KAAK;IAC9B;IACA,OAAOC,QAAQ;EACjB,CAAC;EAEDI,eAAe,EAAEA,CAACL,KAAa,EAAEC,QAAkB,KAAK;IACtDL,YAAY,CAACU,IAAI,CAACN,KAAK,EAAEC,QAAQ,CAAC;EACpC,CAAC;EAEDM,cAAc,EAAGN,QAAkB,IAAK;IACtC,MAAMC,GAAG,GAAGD,QAAQ,CAACE,QAAQ,CAAC,CAAC;IAC/B,MAAMH,KAAK,GAAGH,eAAe,CAACK,GAAG,CAAC;IAClC,OAAOL,eAAe,CAACK,GAAG,CAAC;IAC3BN,YAAY,CAACW,cAAc,CAACP,KAAK,EAAEC,QAAQ,CAAC;EAC9C,CAAC;EAEDO,kBAAkB,EAAGR,KAAa,IAAK;IACrC,MAAMS,IAAI,GAAGC,MAAM,CAACD,IAAI,CAACZ,eAAe,CAAC;IACzC,KAAK,MAAMK,GAAG,IAAIO,IAAI,EAAE;MACtB,IAAIZ,eAAe,CAACK,GAAG,CAAC,KAAKF,KAAK,EAAE;QAClC,OAAOH,eAAe,CAACK,GAAG,CAAC;MAC7B;IACF;IACAN,YAAY,CAACY,kBAAkB,CAACR,KAAK,CAAC;EACxC,CAAC;EAEDW,gBAAgB,EAAEA,CAACX,KAAa,EAAEY,IAAa,KAAK;IAClDhB,YAAY,CAACiB,IAAI,CAACb,KAAK,EAAEY,IAAI,CAAC;EAChC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["LoginState","LoginType"],"sources":["constant.ts"],"sourcesContent":["import { User } from 'leancloud-storage';\n\nexport interface UserType {\n nickname: string;\n email: string;\n headimgurl: string;\n type: number;\n AVUser: User;\n}\n\nexport enum LoginState {\n NOTLOGIN,\n AUTHORIZED,\n}\n\nexport enum LoginType {\n LoginTypeApple,\n LoginTypeWeChat,\n LoginTypeVisitor,\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"names":["LoginState","LoginType"],"sources":["constant.ts"],"sourcesContent":["import { User } from 'leancloud-storage';\n\nexport interface UserType {\n nickname: string;\n email: string;\n headimgurl: string;\n type: number;\n isNew?: boolean;\n AVUser: User;\n}\n\nexport interface LoginAuthDataType {\n openid: string;\n unionid?: string;\n access_token: string | null;\n expires_in: number;\n loginType: string;\n}\n\nexport interface LoginUserDataType {\n userId?: string;\n nickname?: string;\n headimgurl?: string;\n email?: string | null;\n authData: LoginAuthDataType;\n}\n\nexport enum LoginState {\n NOTLOGIN,\n AUTHORIZED,\n}\n\nexport enum LoginType {\n LoginTypeApple,\n LoginTypeWeChat,\n LoginTypeVisitor,\n}\n"],"mappings":"AA2BA,WAAYA,UAAU,0BAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAVA,UAAU,CAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA;AAKtB,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAATA,SAAS,CAATA,SAAS;EAAA,OAATA,SAAS;AAAA"}
|
package/lib/module/index.js
CHANGED
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","ReactNativeToolkit"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\nexport * from './i18n';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAM5C,MAAM;EAAEC;AAAmB,CAAC,GAAGD,aAAa;AAE5C,eAAeC,kBAAkB;AACjC,cAAc,kBAAkB;AAChC,cAAc,gBAAgB;AAC9B,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,iBAAiB;AAC/B,cAAc,gBAAgB;AAC9B,cAAc,mBAAmB;AACjC,cAAc,YAAY;AAC1B,cAAc,QAAQ"}
|
|
1
|
+
{"version":3,"names":["NativeModules","ReactNativeToolkit"],"sources":["index.tsx"],"sourcesContent":["import { NativeModules } from 'react-native';\n\ntype ReactNativeToolkitType = {\n multiply(a: number, b: number): Promise<number>;\n};\n\nconst { ReactNativeToolkit } = NativeModules;\n\nexport default ReactNativeToolkit as ReactNativeToolkitType;\nexport * from './AppleLoginUtil';\nexport * from './LoginManager';\nexport * from './Notification';\nexport * from './PrefData';\nexport * from './ReportUtil';\nexport * from './SentryManager';\nexport * from './SyncPrefData';\nexport * from './WeChatLoginUtil';\nexport * from './constant';\nexport * from './i18n';\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,cAAc;AAM5C,MAAM;EAAEC;AAAmB,CAAC,GAAGD,aAAa;AAE5C,eAAeC,kBAAkB;AACjC,cAAc,kBAAkB;AAChC,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,YAAY;AAC1B,cAAc,cAAc;AAC5B,cAAc,iBAAiB;AAC/B,cAAc,gBAAgB;AAC9B,cAAc,mBAAmB;AACjC,cAAc,YAAY;AAC1B,cAAc,QAAQ"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { LoginType } from '@norcy/react-native-toolkit';
|
|
2
|
+
import { LoginAuthDataType, UserType } from './constant';
|
|
3
|
+
export declare const LoginManager: {
|
|
4
|
+
setup: (WeChatId: string, WeChatSecret: string) => void;
|
|
5
|
+
autoLogin: () => Promise<void>;
|
|
6
|
+
login: (type: LoginType, devAuthData: LoginAuthDataType | null | undefined, loadingCallback: Function) => Promise<void>;
|
|
7
|
+
logOut: (callback: Function) => void;
|
|
8
|
+
isLogin: () => boolean;
|
|
9
|
+
isVisitor: () => boolean;
|
|
10
|
+
currentUser: () => UserType | null;
|
|
11
|
+
batchUpdateUser: (keys: string[], values: string[], callback: Function) => Promise<void>;
|
|
12
|
+
updateUser: (key: string, value: string, callback: Function) => void;
|
|
13
|
+
deleteUser: (callback: Function) => Promise<void>;
|
|
14
|
+
lastLoginType: () => any;
|
|
15
|
+
fetchWeChatAvatar: (callback: Function) => void;
|
|
16
|
+
};
|
|
@@ -3,5 +3,5 @@ export declare const Notification: {
|
|
|
3
3
|
addListenerOnce: (event: string, callback: Function) => void;
|
|
4
4
|
removeListener: (callback: Function) => void;
|
|
5
5
|
removeAllListeners: (event: string) => void;
|
|
6
|
-
postNotification: (event: string, args
|
|
6
|
+
postNotification: (event: string, args?: object) => void;
|
|
7
7
|
};
|
|
@@ -4,8 +4,23 @@ export interface UserType {
|
|
|
4
4
|
email: string;
|
|
5
5
|
headimgurl: string;
|
|
6
6
|
type: number;
|
|
7
|
+
isNew?: boolean;
|
|
7
8
|
AVUser: User;
|
|
8
9
|
}
|
|
10
|
+
export interface LoginAuthDataType {
|
|
11
|
+
openid: string;
|
|
12
|
+
unionid?: string;
|
|
13
|
+
access_token: string | null;
|
|
14
|
+
expires_in: number;
|
|
15
|
+
loginType: string;
|
|
16
|
+
}
|
|
17
|
+
export interface LoginUserDataType {
|
|
18
|
+
userId?: string;
|
|
19
|
+
nickname?: string;
|
|
20
|
+
headimgurl?: string;
|
|
21
|
+
email?: string | null;
|
|
22
|
+
authData: LoginAuthDataType;
|
|
23
|
+
}
|
|
9
24
|
export declare enum LoginState {
|
|
10
25
|
NOTLOGIN = 0,
|
|
11
26
|
AUTHORIZED = 1
|
|
@@ -4,6 +4,7 @@ type ReactNativeToolkitType = {
|
|
|
4
4
|
declare const _default: ReactNativeToolkitType;
|
|
5
5
|
export default _default;
|
|
6
6
|
export * from './AppleLoginUtil';
|
|
7
|
+
export * from './LoginManager';
|
|
7
8
|
export * from './Notification';
|
|
8
9
|
export * from './PrefData';
|
|
9
10
|
export * from './ReportUtil';
|