@choiceform/shared-auth 0.1.17 → 0.1.18
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/README.md +286 -134
- package/dist/__tests__/auth-utils.test.d.ts +5 -0
- package/dist/__tests__/auth-utils.test.d.ts.map +1 -0
- package/dist/__tests__/auth-utils.test.js +96 -0
- package/dist/__tests__/store.test.d.ts +5 -0
- package/dist/__tests__/store.test.d.ts.map +1 -0
- package/dist/__tests__/store.test.js +210 -0
- package/dist/__tests__/user-mapper.test.d.ts +5 -0
- package/dist/__tests__/user-mapper.test.d.ts.map +1 -0
- package/dist/__tests__/user-mapper.test.js +76 -0
- package/dist/api/auth-api.d.ts +93 -9
- package/dist/api/auth-api.d.ts.map +1 -1
- package/dist/api/auth-api.js +219 -80
- package/dist/api/client.d.ts +10 -0
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +10 -0
- package/dist/api/organization-api.d.ts +2 -7
- package/dist/api/organization-api.d.ts.map +1 -1
- package/dist/api/organization-api.js +2 -17
- package/dist/api/team-api.d.ts +1 -5
- package/dist/api/team-api.d.ts.map +1 -1
- package/dist/api/team-api.js +5 -11
- package/dist/components/auth-sync.d.ts +27 -0
- package/dist/components/auth-sync.d.ts.map +1 -0
- package/dist/components/auth-sync.js +117 -0
- package/dist/components/protected-route.d.ts +18 -0
- package/dist/components/protected-route.d.ts.map +1 -0
- package/dist/components/protected-route.js +34 -0
- package/dist/components/sign-in-page.d.ts +21 -0
- package/dist/components/sign-in-page.d.ts.map +1 -0
- package/dist/components/sign-in-page.js +31 -0
- package/dist/config.js +1 -1
- package/dist/core.d.ts +148 -71
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +109 -28
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/use-auth-init.d.ts +4 -0
- package/dist/hooks/use-auth-init.d.ts.map +1 -1
- package/dist/hooks/use-auth-init.js +16 -21
- package/dist/hooks/use-auth-sync.d.ts +60 -0
- package/dist/hooks/use-auth-sync.d.ts.map +1 -0
- package/dist/hooks/use-auth-sync.js +116 -0
- package/dist/hooks/use-email-verification.d.ts +85 -0
- package/dist/hooks/use-email-verification.d.ts.map +1 -0
- package/dist/hooks/use-email-verification.js +145 -0
- package/dist/hooks/use-protected-route.d.ts +67 -0
- package/dist/hooks/use-protected-route.d.ts.map +1 -0
- package/dist/hooks/use-protected-route.js +102 -0
- package/dist/index.d.ts +12 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -13
- package/dist/init.d.ts +127 -70
- package/dist/init.d.ts.map +1 -1
- package/dist/lib/auth-client.d.ts.map +1 -1
- package/dist/lib/auth-client.js +75 -2
- package/dist/services/auth-service.d.ts +101 -0
- package/dist/services/auth-service.d.ts.map +1 -0
- package/dist/services/auth-service.js +356 -0
- package/dist/services/callback-service.d.ts +33 -0
- package/dist/services/callback-service.d.ts.map +1 -0
- package/dist/services/callback-service.js +473 -0
- package/dist/services/companion-team.d.ts.map +1 -1
- package/dist/services/companion-team.js +41 -39
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/store/actions.d.ts +54 -51
- package/dist/store/actions.d.ts.map +1 -1
- package/dist/store/actions.js +111 -243
- package/dist/store/computed.d.ts +72 -1
- package/dist/store/computed.d.ts.map +1 -1
- package/dist/store/computed.js +90 -3
- package/dist/store/index.d.ts +3 -3
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +2 -2
- package/dist/store/state.d.ts +10 -0
- package/dist/store/state.d.ts.map +1 -1
- package/dist/store/state.js +11 -1
- package/dist/store/utils.d.ts +3 -34
- package/dist/store/utils.d.ts.map +1 -1
- package/dist/store/utils.js +2 -22
- package/dist/types/auth.d.ts +106 -0
- package/dist/types/auth.d.ts.map +1 -1
- package/dist/types/callback.d.ts +35 -0
- package/dist/types/callback.d.ts.map +1 -0
- package/dist/types/callback.js +1 -0
- package/dist/types/index.d.ts +4 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/organization.d.ts +19 -3
- package/dist/types/organization.d.ts.map +1 -1
- package/dist/types/team.d.ts +6 -2
- package/dist/types/team.d.ts.map +1 -1
- package/dist/types/user.d.ts +7 -3
- package/dist/types/user.d.ts.map +1 -1
- package/dist/utils/auth-utils.d.ts +60 -0
- package/dist/utils/auth-utils.d.ts.map +1 -0
- package/dist/utils/auth-utils.js +146 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/user-mapper.d.ts.map +1 -1
- package/dist/utils/user-mapper.js +2 -1
- package/package.json +10 -2
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 认证服务
|
|
3
|
+
*
|
|
4
|
+
* 封装所有认证相关的业务逻辑:
|
|
5
|
+
* - 登录(OAuth、MagicLink、Email/Password)
|
|
6
|
+
* - 注册
|
|
7
|
+
* - 登出
|
|
8
|
+
* - 账户删除
|
|
9
|
+
*
|
|
10
|
+
* 职责分离:
|
|
11
|
+
* - 调用 API 层发送请求
|
|
12
|
+
* - 调用 StoreActions 更新状态(不直接操作 authStore)
|
|
13
|
+
* - 处理业务流程(如注册后 onboard)
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* 创建认证服务
|
|
17
|
+
*/
|
|
18
|
+
export function createAuthService(config, betterAuthClient) {
|
|
19
|
+
const { authApi, storeActions, tokenStorage } = config;
|
|
20
|
+
// ============================================================
|
|
21
|
+
// Session 管理
|
|
22
|
+
// ============================================================
|
|
23
|
+
/**
|
|
24
|
+
* 使用 Token 获取并设置 session
|
|
25
|
+
* 成功后更新 authStore
|
|
26
|
+
*/
|
|
27
|
+
async function fetchAndSetSession(token) {
|
|
28
|
+
try {
|
|
29
|
+
if (!token) {
|
|
30
|
+
throw new Error("Token is required");
|
|
31
|
+
}
|
|
32
|
+
tokenStorage.save(token);
|
|
33
|
+
// 复用 authApi 的 getSessionWithToken
|
|
34
|
+
const userData = await authApi.getSessionWithToken(token);
|
|
35
|
+
if (userData) {
|
|
36
|
+
storeActions.setAuthenticated(userData);
|
|
37
|
+
return userData;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
storeActions.clearAuth();
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
storeActions.clearAuth();
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// ============================================================
|
|
50
|
+
// OAuth 登录
|
|
51
|
+
// ============================================================
|
|
52
|
+
/**
|
|
53
|
+
* OAuth 登录
|
|
54
|
+
* 跳转到第三方提供商进行认证
|
|
55
|
+
*/
|
|
56
|
+
async function signInWithOAuth(provider, callbackURL, newUserCallbackURL, errorCallbackURL) {
|
|
57
|
+
if (storeActions.isLoading()) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
try {
|
|
61
|
+
storeActions.setLoading(true);
|
|
62
|
+
storeActions.setError(null);
|
|
63
|
+
await betterAuthClient.signIn.social({
|
|
64
|
+
provider,
|
|
65
|
+
callbackURL,
|
|
66
|
+
newUserCallbackURL,
|
|
67
|
+
errorCallbackURL,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
const message = error instanceof Error ? error.message : "Sign in failed";
|
|
72
|
+
storeActions.setError(message);
|
|
73
|
+
storeActions.setLoading(false);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
// ============================================================
|
|
77
|
+
// Magic Link 登录
|
|
78
|
+
// ============================================================
|
|
79
|
+
/**
|
|
80
|
+
* Magic Link 登录
|
|
81
|
+
* 发送魔法链接到用户邮箱
|
|
82
|
+
*/
|
|
83
|
+
async function signInWithMagicLink(email, callbackURL, name, newUserCallbackURL) {
|
|
84
|
+
if (storeActions.isLoading()) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
if (!betterAuthClient.signIn.magicLink) {
|
|
88
|
+
storeActions.setError("Magic link is not available. Please add magicLinkClient() plugin.");
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
storeActions.setLoading(true);
|
|
93
|
+
storeActions.setError(null);
|
|
94
|
+
await betterAuthClient.signIn.magicLink({
|
|
95
|
+
email,
|
|
96
|
+
name,
|
|
97
|
+
callbackURL,
|
|
98
|
+
newUserCallbackURL,
|
|
99
|
+
});
|
|
100
|
+
storeActions.setLoading(false);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
const message = error instanceof Error ? error.message : "Failed to send magic link";
|
|
105
|
+
storeActions.setError(message);
|
|
106
|
+
storeActions.setLoading(false);
|
|
107
|
+
return false;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ============================================================
|
|
111
|
+
// Email/Password 登录
|
|
112
|
+
// ============================================================
|
|
113
|
+
/**
|
|
114
|
+
* Email/Password 登录
|
|
115
|
+
*/
|
|
116
|
+
async function signInWithEmail(email, password) {
|
|
117
|
+
if (storeActions.isLoading()) {
|
|
118
|
+
return { success: false };
|
|
119
|
+
}
|
|
120
|
+
if (!betterAuthClient.signIn.email) {
|
|
121
|
+
storeActions.setError("Email sign in is not available.");
|
|
122
|
+
return { success: false };
|
|
123
|
+
}
|
|
124
|
+
try {
|
|
125
|
+
storeActions.setLoading(true);
|
|
126
|
+
storeActions.setError(null);
|
|
127
|
+
let success = false;
|
|
128
|
+
let errorMessage = null;
|
|
129
|
+
await betterAuthClient.signIn.email({ email, password }, {
|
|
130
|
+
onSuccess: (context) => {
|
|
131
|
+
const token = context.response.headers.get("set-auth-token");
|
|
132
|
+
if (token) {
|
|
133
|
+
tokenStorage.save(token);
|
|
134
|
+
}
|
|
135
|
+
success = true;
|
|
136
|
+
},
|
|
137
|
+
onError: (context) => {
|
|
138
|
+
const errorCode = context.error.code;
|
|
139
|
+
if (errorCode) {
|
|
140
|
+
errorMessage = JSON.stringify({ code: errorCode, message: context.error.message });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
errorMessage = context.error.message || "Login failed";
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
});
|
|
147
|
+
if (errorMessage) {
|
|
148
|
+
storeActions.setError(errorMessage);
|
|
149
|
+
storeActions.setLoading(false);
|
|
150
|
+
return { success: false };
|
|
151
|
+
}
|
|
152
|
+
// 登录成功后获取 session
|
|
153
|
+
let emailVerified;
|
|
154
|
+
if (success) {
|
|
155
|
+
const token = tokenStorage.get();
|
|
156
|
+
if (token) {
|
|
157
|
+
const session = await fetchAndSetSession(token);
|
|
158
|
+
emailVerified = session?.emailVerified;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
storeActions.setLoading(false);
|
|
162
|
+
return { success, emailVerified };
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
const message = error instanceof Error ? error.message : "Login failed";
|
|
166
|
+
storeActions.setError(message);
|
|
167
|
+
storeActions.setLoading(false);
|
|
168
|
+
return { success: false };
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
// ============================================================
|
|
172
|
+
// Email/Password 注册
|
|
173
|
+
// ============================================================
|
|
174
|
+
/**
|
|
175
|
+
* Email/Password 注册
|
|
176
|
+
*
|
|
177
|
+
* 流程:
|
|
178
|
+
* 1. 调用 signUp.email 创建用户
|
|
179
|
+
* 2. 保存 token
|
|
180
|
+
* 3. 调用 onboard 创建默认组织和团队
|
|
181
|
+
* 4. 发送验证邮件(如果邮箱未验证)
|
|
182
|
+
*/
|
|
183
|
+
async function signUpWithEmail(email, password, name, callbackURL) {
|
|
184
|
+
if (storeActions.isLoading()) {
|
|
185
|
+
return { success: false };
|
|
186
|
+
}
|
|
187
|
+
if (!betterAuthClient.signUp?.email) {
|
|
188
|
+
storeActions.setError("Email sign up is not available.");
|
|
189
|
+
return { success: false };
|
|
190
|
+
}
|
|
191
|
+
try {
|
|
192
|
+
storeActions.setLoading(true);
|
|
193
|
+
storeActions.setError(null);
|
|
194
|
+
const finalCallbackURL = callbackURL ||
|
|
195
|
+
`${window.location.origin}/auth/callback?type=signup&email=${encodeURIComponent(email)}`;
|
|
196
|
+
let success = false;
|
|
197
|
+
let errorMessage = null;
|
|
198
|
+
await betterAuthClient.signUp.email({
|
|
199
|
+
email,
|
|
200
|
+
password,
|
|
201
|
+
name,
|
|
202
|
+
callbackURL: finalCallbackURL,
|
|
203
|
+
metadata: {},
|
|
204
|
+
}, {
|
|
205
|
+
onSuccess: (context) => {
|
|
206
|
+
const token = context.response.headers.get("set-auth-token");
|
|
207
|
+
if (token) {
|
|
208
|
+
tokenStorage.save(token);
|
|
209
|
+
}
|
|
210
|
+
success = true;
|
|
211
|
+
},
|
|
212
|
+
onError: (context) => {
|
|
213
|
+
const errorCode = context.error.code;
|
|
214
|
+
if (errorCode) {
|
|
215
|
+
errorMessage = JSON.stringify({ code: errorCode, message: context.error.message });
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
errorMessage = context.error.message || "Sign up failed";
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
});
|
|
222
|
+
if (errorMessage) {
|
|
223
|
+
storeActions.setError(errorMessage);
|
|
224
|
+
storeActions.setLoading(false);
|
|
225
|
+
return { success: false };
|
|
226
|
+
}
|
|
227
|
+
// 注册成功后的处理
|
|
228
|
+
let emailVerified;
|
|
229
|
+
if (success) {
|
|
230
|
+
const token = tokenStorage.get();
|
|
231
|
+
if (token) {
|
|
232
|
+
// 获取 session
|
|
233
|
+
const session = await fetchAndSetSession(token);
|
|
234
|
+
emailVerified = session?.emailVerified;
|
|
235
|
+
// 如果用户还没有默认组织,调用 onboard 创建
|
|
236
|
+
if (!session?.inherentOrganizationId) {
|
|
237
|
+
try {
|
|
238
|
+
await authApi.onboard(token);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
// onboard 失败不影响注册结果
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// 如果邮箱未验证,发送验证邮件
|
|
245
|
+
if (emailVerified !== true) {
|
|
246
|
+
try {
|
|
247
|
+
await authApi.resendVerificationEmail(email, finalCallbackURL);
|
|
248
|
+
}
|
|
249
|
+
catch {
|
|
250
|
+
// 发送验证邮件失败不影响注册结果
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
storeActions.setLoading(false);
|
|
256
|
+
return { success, emailVerified };
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
const message = error instanceof Error ? error.message : "Sign up failed";
|
|
260
|
+
storeActions.setError(message);
|
|
261
|
+
storeActions.setLoading(false);
|
|
262
|
+
return { success: false };
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// ============================================================
|
|
266
|
+
// 登出
|
|
267
|
+
// ============================================================
|
|
268
|
+
/**
|
|
269
|
+
* 登出
|
|
270
|
+
*/
|
|
271
|
+
async function signOut(redirectTo) {
|
|
272
|
+
if (storeActions.isLoading()) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
try {
|
|
276
|
+
storeActions.setLoading(true);
|
|
277
|
+
storeActions.setError(null);
|
|
278
|
+
await betterAuthClient.signOut();
|
|
279
|
+
storeActions.clearAuth();
|
|
280
|
+
if (redirectTo) {
|
|
281
|
+
window.location.href = redirectTo;
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
const message = error instanceof Error ? error.message : "Sign out failed";
|
|
286
|
+
storeActions.setError(message);
|
|
287
|
+
storeActions.clearAuth();
|
|
288
|
+
}
|
|
289
|
+
finally {
|
|
290
|
+
storeActions.setLoading(false);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// ============================================================
|
|
294
|
+
// 账户删除
|
|
295
|
+
// ============================================================
|
|
296
|
+
/**
|
|
297
|
+
* 删除用户账号
|
|
298
|
+
*
|
|
299
|
+
* Better Auth 流程:
|
|
300
|
+
* 1. 调用 deleteUser API
|
|
301
|
+
* 2. 后端发送验证邮件
|
|
302
|
+
* 3. 用户点击邮件中的链接确认删除
|
|
303
|
+
*/
|
|
304
|
+
async function deleteUser(callbackURL, password) {
|
|
305
|
+
if (storeActions.isLoading()) {
|
|
306
|
+
return { needsVerification: false, success: false };
|
|
307
|
+
}
|
|
308
|
+
if (!betterAuthClient.deleteUser) {
|
|
309
|
+
storeActions.setError("Delete user is not available.");
|
|
310
|
+
return { needsVerification: false, success: false };
|
|
311
|
+
}
|
|
312
|
+
try {
|
|
313
|
+
storeActions.setLoading(true);
|
|
314
|
+
storeActions.setError(null);
|
|
315
|
+
let errorMessage = null;
|
|
316
|
+
await betterAuthClient.deleteUser({ callbackURL, password }, {
|
|
317
|
+
onSuccess: () => {
|
|
318
|
+
// onSuccess 表示验证邮件已发送成功
|
|
319
|
+
},
|
|
320
|
+
onError: (context) => {
|
|
321
|
+
const error = context.error;
|
|
322
|
+
errorMessage = error.message || "Delete user failed";
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
storeActions.setLoading(false);
|
|
326
|
+
if (errorMessage) {
|
|
327
|
+
storeActions.setError(errorMessage);
|
|
328
|
+
return { needsVerification: false, success: false };
|
|
329
|
+
}
|
|
330
|
+
return { needsVerification: true, success: true };
|
|
331
|
+
}
|
|
332
|
+
catch (error) {
|
|
333
|
+
const message = error instanceof Error ? error.message : "Delete user failed";
|
|
334
|
+
storeActions.setError(message);
|
|
335
|
+
storeActions.setLoading(false);
|
|
336
|
+
return { needsVerification: false, success: false };
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
// ============================================================
|
|
340
|
+
// 返回公共方法
|
|
341
|
+
// ============================================================
|
|
342
|
+
return {
|
|
343
|
+
// Session
|
|
344
|
+
fetchAndSetSession,
|
|
345
|
+
// 登录
|
|
346
|
+
signInWithOAuth,
|
|
347
|
+
signInWithMagicLink,
|
|
348
|
+
signInWithEmail,
|
|
349
|
+
// 注册
|
|
350
|
+
signUpWithEmail,
|
|
351
|
+
// 登出
|
|
352
|
+
signOut,
|
|
353
|
+
// 账户
|
|
354
|
+
deleteUser,
|
|
355
|
+
};
|
|
356
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 认证回调服务
|
|
3
|
+
*
|
|
4
|
+
* 处理各种认证回调流程:
|
|
5
|
+
* - OAuth 回调(社交登录)
|
|
6
|
+
* - 邮箱验证回调
|
|
7
|
+
* - 删除用户回调
|
|
8
|
+
* - 密码重置回调
|
|
9
|
+
* - 团队邀请回调
|
|
10
|
+
* - 更改邮箱回调
|
|
11
|
+
*/
|
|
12
|
+
import type { AuthInstance } from "../core";
|
|
13
|
+
import { CallbackConfig, CallbackResult, CallbackType } from "../types";
|
|
14
|
+
/**
|
|
15
|
+
* 创建回调服务
|
|
16
|
+
*/
|
|
17
|
+
export declare function createCallbackService(auth: AuthInstance, config?: CallbackConfig): {
|
|
18
|
+
handleOAuthCallback: (token: string, isNewUser?: boolean) => Promise<CallbackResult>;
|
|
19
|
+
handleEmailVerificationCallback: (token: string) => Promise<CallbackResult>;
|
|
20
|
+
handleDeleteUserCallback: (token: string, userEmail?: string) => Promise<CallbackResult>;
|
|
21
|
+
handlePasswordResetCallback: (token: string | null) => CallbackResult;
|
|
22
|
+
handleInviteCallback: (invitationId: string | null) => Promise<CallbackResult>;
|
|
23
|
+
handleConfirmChangeEmailCallback: (token: string, newEmail?: string) => Promise<CallbackResult>;
|
|
24
|
+
handleVerifyChangeEmailCallback: (token: string) => Promise<CallbackResult>;
|
|
25
|
+
handleCallback: (type: CallbackType, token: string | null, options?: {
|
|
26
|
+
invitationId?: string;
|
|
27
|
+
isNewUser?: boolean;
|
|
28
|
+
newEmail?: string;
|
|
29
|
+
userEmail?: string;
|
|
30
|
+
}) => Promise<CallbackResult>;
|
|
31
|
+
};
|
|
32
|
+
export type CallbackService = ReturnType<typeof createCallbackService>;
|
|
33
|
+
//# sourceMappingURL=callback-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"callback-service.d.ts","sourceRoot":"","sources":["../../src/services/callback-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAavE;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,EAAE,MAAM,GAAE,cAAmB;iCAU1E,MAAM,cACF,OAAO,KACjB,OAAO,CAAC,cAAc,CAAC;6CAmD4B,MAAM,KAAG,OAAO,CAAC,cAAc,CAAC;sCAgE7E,MAAM,cACD,MAAM,KACjB,OAAO,CAAC,cAAc,CAAC;yCA0DkB,MAAM,GAAG,IAAI,KAAG,cAAc;yCAqBxB,MAAM,GAAG,IAAI,KAAG,OAAO,CAAC,cAAc,CAAC;8CAiFhF,MAAM,aACF,MAAM,KAChB,OAAO,CAAC,cAAc,CAAC;6CA0F4B,MAAM,KAAG,OAAO,CAAC,cAAc,CAAC;2BAoG9E,YAAY,SACX,MAAM,GAAG,IAAI,YACX;QACP,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,SAAS,CAAC,EAAE,OAAO,CAAA;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,KACA,OAAO,CAAC,cAAc,CAAC;EA0C3B;AAED,MAAM,MAAM,eAAe,GAAG,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAA"}
|