@authon/vue 0.2.1 → 0.3.1
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.ko.md +47 -0
- package/README.md +158 -68
- package/dist/index.cjs +263 -72
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +90 -22
- package/dist/index.d.ts +90 -22
- package/dist/index.js +224 -36
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -30,6 +30,9 @@ __export(index_exports, {
|
|
|
30
30
|
AuthonUserButton: () => AuthonUserButton,
|
|
31
31
|
createAuthon: () => createAuthon,
|
|
32
32
|
useAuthon: () => useAuthon,
|
|
33
|
+
useAuthonPasskeys: () => useAuthonPasskeys,
|
|
34
|
+
useAuthonPasswordless: () => useAuthonPasswordless,
|
|
35
|
+
useAuthonWeb3: () => useAuthonWeb3,
|
|
33
36
|
useUser: () => useUser
|
|
34
37
|
});
|
|
35
38
|
module.exports = __toCommonJS(index_exports);
|
|
@@ -43,7 +46,9 @@ function createAuthon(options) {
|
|
|
43
46
|
isSignedIn: false,
|
|
44
47
|
isLoading: true,
|
|
45
48
|
user: null,
|
|
46
|
-
client: null
|
|
49
|
+
client: null,
|
|
50
|
+
publishableKey: options.publishableKey,
|
|
51
|
+
apiUrl: options.config?.apiUrl ?? "https://api.authon.dev"
|
|
47
52
|
});
|
|
48
53
|
return {
|
|
49
54
|
install(app) {
|
|
@@ -114,60 +119,243 @@ function useUser() {
|
|
|
114
119
|
};
|
|
115
120
|
}
|
|
116
121
|
|
|
117
|
-
// src/
|
|
122
|
+
// src/useAuthonWeb3.ts
|
|
118
123
|
var import_vue3 = require("vue");
|
|
119
|
-
var
|
|
124
|
+
var import_vue4 = require("vue");
|
|
125
|
+
function useAuthonWeb3() {
|
|
126
|
+
const state = (0, import_vue4.inject)(AUTHON_KEY);
|
|
127
|
+
if (!state) {
|
|
128
|
+
throw new Error("useAuthonWeb3() must be called inside a component tree with createAuthon() installed");
|
|
129
|
+
}
|
|
130
|
+
const s = state;
|
|
131
|
+
const isLoading = (0, import_vue3.ref)(false);
|
|
132
|
+
const error = (0, import_vue3.ref)(null);
|
|
133
|
+
async function wrap(fn) {
|
|
134
|
+
isLoading.value = true;
|
|
135
|
+
error.value = null;
|
|
136
|
+
try {
|
|
137
|
+
return await fn();
|
|
138
|
+
} catch (err) {
|
|
139
|
+
error.value = err instanceof Error ? err : new Error(String(err));
|
|
140
|
+
return null;
|
|
141
|
+
} finally {
|
|
142
|
+
isLoading.value = false;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async function getNonce(address, chain, walletType, chainId) {
|
|
146
|
+
return wrap(() => s.client.web3GetNonce(address, chain, walletType, chainId));
|
|
147
|
+
}
|
|
148
|
+
async function verify(message, signature, address, chain, walletType) {
|
|
149
|
+
const result = await wrap(
|
|
150
|
+
() => s.client.web3Verify(message, signature, address, chain, walletType)
|
|
151
|
+
);
|
|
152
|
+
return result !== null;
|
|
153
|
+
}
|
|
154
|
+
async function listWallets() {
|
|
155
|
+
return wrap(() => s.client.listWallets());
|
|
156
|
+
}
|
|
157
|
+
async function linkWallet(params) {
|
|
158
|
+
return wrap(() => s.client.linkWallet(params));
|
|
159
|
+
}
|
|
160
|
+
async function unlinkWallet(walletId) {
|
|
161
|
+
const result = await wrap(() => s.client.unlinkWallet(walletId));
|
|
162
|
+
return result !== null;
|
|
163
|
+
}
|
|
164
|
+
return {
|
|
165
|
+
getNonce,
|
|
166
|
+
verify,
|
|
167
|
+
listWallets,
|
|
168
|
+
linkWallet,
|
|
169
|
+
unlinkWallet,
|
|
170
|
+
isLoading,
|
|
171
|
+
error
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// src/useAuthonPasswordless.ts
|
|
176
|
+
var import_vue5 = require("vue");
|
|
177
|
+
function useAuthonPasswordless() {
|
|
178
|
+
const state = (0, import_vue5.inject)(AUTHON_KEY);
|
|
179
|
+
if (!state) {
|
|
180
|
+
throw new Error("useAuthonPasswordless() must be called inside a component tree with createAuthon() installed");
|
|
181
|
+
}
|
|
182
|
+
const s = state;
|
|
183
|
+
const isLoading = (0, import_vue5.ref)(false);
|
|
184
|
+
const error = (0, import_vue5.ref)(null);
|
|
185
|
+
async function wrap(fn) {
|
|
186
|
+
isLoading.value = true;
|
|
187
|
+
error.value = null;
|
|
188
|
+
try {
|
|
189
|
+
return await fn();
|
|
190
|
+
} catch (err) {
|
|
191
|
+
error.value = err instanceof Error ? err : new Error(String(err));
|
|
192
|
+
return null;
|
|
193
|
+
} finally {
|
|
194
|
+
isLoading.value = false;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
async function sendMagicLink(email) {
|
|
198
|
+
const result = await wrap(() => s.client.sendMagicLink(email));
|
|
199
|
+
return result !== null;
|
|
200
|
+
}
|
|
201
|
+
async function sendEmailOtp(email) {
|
|
202
|
+
const result = await wrap(() => s.client.sendEmailOtp(email));
|
|
203
|
+
return result !== null;
|
|
204
|
+
}
|
|
205
|
+
async function verifyPasswordless(opts) {
|
|
206
|
+
const result = await wrap(() => s.client.verifyPasswordless(opts));
|
|
207
|
+
return result !== null;
|
|
208
|
+
}
|
|
209
|
+
return {
|
|
210
|
+
sendMagicLink,
|
|
211
|
+
sendEmailOtp,
|
|
212
|
+
verifyPasswordless,
|
|
213
|
+
isLoading,
|
|
214
|
+
error
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
// src/useAuthonPasskeys.ts
|
|
219
|
+
var import_vue6 = require("vue");
|
|
220
|
+
function useAuthonPasskeys() {
|
|
221
|
+
const state = (0, import_vue6.inject)(AUTHON_KEY);
|
|
222
|
+
if (!state) {
|
|
223
|
+
throw new Error("useAuthonPasskeys() must be called inside a component tree with createAuthon() installed");
|
|
224
|
+
}
|
|
225
|
+
const s = state;
|
|
226
|
+
const isLoading = (0, import_vue6.ref)(false);
|
|
227
|
+
const error = (0, import_vue6.ref)(null);
|
|
228
|
+
async function wrap(fn) {
|
|
229
|
+
isLoading.value = true;
|
|
230
|
+
error.value = null;
|
|
231
|
+
try {
|
|
232
|
+
return await fn();
|
|
233
|
+
} catch (err) {
|
|
234
|
+
error.value = err instanceof Error ? err : new Error(String(err));
|
|
235
|
+
return null;
|
|
236
|
+
} finally {
|
|
237
|
+
isLoading.value = false;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
async function registerPasskey(name) {
|
|
241
|
+
return wrap(() => s.client.registerPasskey(name));
|
|
242
|
+
}
|
|
243
|
+
async function authenticateWithPasskey(email) {
|
|
244
|
+
const result = await wrap(() => s.client.authenticateWithPasskey(email));
|
|
245
|
+
return result !== null;
|
|
246
|
+
}
|
|
247
|
+
async function listPasskeys() {
|
|
248
|
+
return wrap(() => s.client.listPasskeys());
|
|
249
|
+
}
|
|
250
|
+
async function renamePasskey(id, name) {
|
|
251
|
+
return wrap(() => s.client.renamePasskey(id, name));
|
|
252
|
+
}
|
|
253
|
+
async function revokePasskey(id) {
|
|
254
|
+
const result = await wrap(() => s.client.revokePasskey(id));
|
|
255
|
+
return result !== null;
|
|
256
|
+
}
|
|
257
|
+
return {
|
|
258
|
+
registerPasskey,
|
|
259
|
+
authenticateWithPasskey,
|
|
260
|
+
listPasskeys,
|
|
261
|
+
renamePasskey,
|
|
262
|
+
revokePasskey,
|
|
263
|
+
isLoading,
|
|
264
|
+
error
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// src/components.ts
|
|
269
|
+
var import_vue7 = require("vue");
|
|
270
|
+
var import_js2 = require("@authon/js");
|
|
271
|
+
var _embeddedCounter = 0;
|
|
272
|
+
function requireState2() {
|
|
273
|
+
const state = (0, import_vue7.inject)(AUTHON_KEY);
|
|
274
|
+
if (!state) {
|
|
275
|
+
throw new Error("AuthonSignIn/AuthonSignUp must be used inside a component tree with createAuthon() installed");
|
|
276
|
+
}
|
|
277
|
+
return state;
|
|
278
|
+
}
|
|
279
|
+
var AuthonSignIn = (0, import_vue7.defineComponent)({
|
|
120
280
|
name: "AuthonSignIn",
|
|
121
281
|
props: {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
default: "popup"
|
|
125
|
-
}
|
|
282
|
+
afterSignInUrl: { type: String, default: void 0 },
|
|
283
|
+
appearance: { type: Object, default: void 0 }
|
|
126
284
|
},
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
285
|
+
emits: ["signIn"],
|
|
286
|
+
setup(props, { emit }) {
|
|
287
|
+
const state = requireState2();
|
|
288
|
+
const containerId = (0, import_vue7.ref)(`authon-signin-${++_embeddedCounter}`);
|
|
289
|
+
let embeddedClient = null;
|
|
290
|
+
let cleanupSignedIn = null;
|
|
291
|
+
(0, import_vue7.onMounted)(() => {
|
|
292
|
+
embeddedClient = new import_js2.Authon(state.publishableKey, {
|
|
293
|
+
apiUrl: state.apiUrl,
|
|
294
|
+
mode: "embedded",
|
|
295
|
+
containerId: containerId.value,
|
|
296
|
+
appearance: props.appearance
|
|
297
|
+
});
|
|
298
|
+
cleanupSignedIn = embeddedClient.on("signedIn", (user) => {
|
|
299
|
+
state.user = user;
|
|
300
|
+
state.isSignedIn = true;
|
|
301
|
+
emit("signIn", user);
|
|
302
|
+
if (props.afterSignInUrl) {
|
|
303
|
+
window.location.href = props.afterSignInUrl;
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
embeddedClient.openSignIn();
|
|
133
307
|
});
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
};
|
|
308
|
+
(0, import_vue7.onUnmounted)(() => {
|
|
309
|
+
cleanupSignedIn?.();
|
|
310
|
+
embeddedClient?.destroy();
|
|
311
|
+
embeddedClient = null;
|
|
312
|
+
});
|
|
313
|
+
return () => (0, import_vue7.h)("div", { id: containerId.value });
|
|
140
314
|
}
|
|
141
315
|
});
|
|
142
|
-
var AuthonSignUp = (0,
|
|
316
|
+
var AuthonSignUp = (0, import_vue7.defineComponent)({
|
|
143
317
|
name: "AuthonSignUp",
|
|
144
318
|
props: {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
default: "popup"
|
|
148
|
-
}
|
|
319
|
+
afterSignUpUrl: { type: String, default: void 0 },
|
|
320
|
+
appearance: { type: Object, default: void 0 }
|
|
149
321
|
},
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
322
|
+
emits: ["signUp"],
|
|
323
|
+
setup(props, { emit }) {
|
|
324
|
+
const state = requireState2();
|
|
325
|
+
const containerId = (0, import_vue7.ref)(`authon-signup-${++_embeddedCounter}`);
|
|
326
|
+
let embeddedClient = null;
|
|
327
|
+
let cleanupSignedIn = null;
|
|
328
|
+
(0, import_vue7.onMounted)(() => {
|
|
329
|
+
embeddedClient = new import_js2.Authon(state.publishableKey, {
|
|
330
|
+
apiUrl: state.apiUrl,
|
|
331
|
+
mode: "embedded",
|
|
332
|
+
containerId: containerId.value,
|
|
333
|
+
appearance: props.appearance
|
|
334
|
+
});
|
|
335
|
+
cleanupSignedIn = embeddedClient.on("signedIn", (user) => {
|
|
336
|
+
state.user = user;
|
|
337
|
+
state.isSignedIn = true;
|
|
338
|
+
emit("signUp", user);
|
|
339
|
+
if (props.afterSignUpUrl) {
|
|
340
|
+
window.location.href = props.afterSignUpUrl;
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
embeddedClient.openSignUp();
|
|
156
344
|
});
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
};
|
|
345
|
+
(0, import_vue7.onUnmounted)(() => {
|
|
346
|
+
cleanupSignedIn?.();
|
|
347
|
+
embeddedClient?.destroy();
|
|
348
|
+
embeddedClient = null;
|
|
349
|
+
});
|
|
350
|
+
return () => (0, import_vue7.h)("div", { id: containerId.value });
|
|
163
351
|
}
|
|
164
352
|
});
|
|
165
|
-
var AuthonUserButton = (0,
|
|
353
|
+
var AuthonUserButton = (0, import_vue7.defineComponent)({
|
|
166
354
|
name: "AuthonUserButton",
|
|
167
355
|
setup() {
|
|
168
356
|
const { user, isSignedIn, signOut, openSignIn } = useAuthon();
|
|
169
|
-
const open = (0,
|
|
170
|
-
const initials = (0,
|
|
357
|
+
const open = (0, import_vue7.ref)(false);
|
|
358
|
+
const initials = (0, import_vue7.computed)(() => {
|
|
171
359
|
if (!user) return "?";
|
|
172
360
|
const u = user;
|
|
173
361
|
if (u.displayName) {
|
|
@@ -177,7 +365,7 @@ var AuthonUserButton = (0, import_vue3.defineComponent)({
|
|
|
177
365
|
});
|
|
178
366
|
return () => {
|
|
179
367
|
if (!isSignedIn) {
|
|
180
|
-
return (0,
|
|
368
|
+
return (0, import_vue7.h)(
|
|
181
369
|
"button",
|
|
182
370
|
{
|
|
183
371
|
onClick: () => openSignIn(),
|
|
@@ -198,8 +386,8 @@ var AuthonUserButton = (0, import_vue3.defineComponent)({
|
|
|
198
386
|
const avatarUrl = user?.avatarUrl;
|
|
199
387
|
const displayName = user?.displayName;
|
|
200
388
|
const email = user?.email;
|
|
201
|
-
return (0,
|
|
202
|
-
(0,
|
|
389
|
+
return (0, import_vue7.h)("div", { style: { position: "relative", display: "inline-block" } }, [
|
|
390
|
+
(0, import_vue7.h)(
|
|
203
391
|
"button",
|
|
204
392
|
{
|
|
205
393
|
onClick: () => open.value = !open.value,
|
|
@@ -220,9 +408,9 @@ var AuthonUserButton = (0, import_vue3.defineComponent)({
|
|
|
220
408
|
fontWeight: 700
|
|
221
409
|
}
|
|
222
410
|
},
|
|
223
|
-
avatarUrl ? [(0,
|
|
411
|
+
avatarUrl ? [(0, import_vue7.h)("img", { src: avatarUrl, alt: displayName ?? "avatar", style: { width: "100%", height: "100%", objectFit: "cover" } })] : [initials.value]
|
|
224
412
|
),
|
|
225
|
-
open.value ? (0,
|
|
413
|
+
open.value ? (0, import_vue7.h)(
|
|
226
414
|
"div",
|
|
227
415
|
{
|
|
228
416
|
style: {
|
|
@@ -239,11 +427,11 @@ var AuthonUserButton = (0, import_vue3.defineComponent)({
|
|
|
239
427
|
}
|
|
240
428
|
},
|
|
241
429
|
[
|
|
242
|
-
(0,
|
|
243
|
-
displayName && (0,
|
|
244
|
-
email && (0,
|
|
430
|
+
(0, import_vue7.h)("div", { style: { padding: "12px 16px", borderBottom: "1px solid #f3f4f6" } }, [
|
|
431
|
+
displayName && (0, import_vue7.h)("div", { style: { fontSize: "14px", fontWeight: 600, color: "#111827" } }, displayName),
|
|
432
|
+
email && (0, import_vue7.h)("div", { style: { fontSize: "12px", color: "#6b7280", marginTop: "2px" } }, email)
|
|
245
433
|
]),
|
|
246
|
-
(0,
|
|
434
|
+
(0, import_vue7.h)(
|
|
247
435
|
"button",
|
|
248
436
|
{
|
|
249
437
|
onClick: async () => {
|
|
@@ -271,7 +459,7 @@ var AuthonUserButton = (0, import_vue3.defineComponent)({
|
|
|
271
459
|
};
|
|
272
460
|
}
|
|
273
461
|
});
|
|
274
|
-
var AuthonSignedIn = (0,
|
|
462
|
+
var AuthonSignedIn = (0, import_vue7.defineComponent)({
|
|
275
463
|
name: "AuthonSignedIn",
|
|
276
464
|
setup(_, { slots }) {
|
|
277
465
|
const { isSignedIn, isLoading } = useAuthon();
|
|
@@ -281,7 +469,7 @@ var AuthonSignedIn = (0, import_vue3.defineComponent)({
|
|
|
281
469
|
};
|
|
282
470
|
}
|
|
283
471
|
});
|
|
284
|
-
var AuthonSignedOut = (0,
|
|
472
|
+
var AuthonSignedOut = (0, import_vue7.defineComponent)({
|
|
285
473
|
name: "AuthonSignedOut",
|
|
286
474
|
setup(_, { slots }) {
|
|
287
475
|
const { isSignedIn, isLoading } = useAuthon();
|
|
@@ -293,10 +481,10 @@ var AuthonSignedOut = (0, import_vue3.defineComponent)({
|
|
|
293
481
|
});
|
|
294
482
|
|
|
295
483
|
// src/SocialButton.ts
|
|
296
|
-
var
|
|
484
|
+
var import_vue8 = require("vue");
|
|
297
485
|
var import_shared = require("@authon/shared");
|
|
298
|
-
var
|
|
299
|
-
var AuthonSocialButton = (0,
|
|
486
|
+
var import_js3 = require("@authon/js");
|
|
487
|
+
var AuthonSocialButton = (0, import_vue8.defineComponent)({
|
|
300
488
|
name: "AuthonSocialButton",
|
|
301
489
|
props: {
|
|
302
490
|
provider: { type: String, required: true },
|
|
@@ -311,16 +499,16 @@ var AuthonSocialButton = (0, import_vue4.defineComponent)({
|
|
|
311
499
|
size: { type: Number, default: 48 }
|
|
312
500
|
},
|
|
313
501
|
setup(props) {
|
|
314
|
-
const colors = (0,
|
|
315
|
-
const displayName = (0,
|
|
316
|
-
const buttonLabel = (0,
|
|
317
|
-
const needsBorder = (0,
|
|
318
|
-
const resolvedIconSize = (0,
|
|
319
|
-
const iconSvg = (0,
|
|
320
|
-
const config = (0,
|
|
502
|
+
const colors = (0, import_vue8.computed)(() => import_shared.PROVIDER_COLORS[props.provider] || { bg: "#333", text: "#fff" });
|
|
503
|
+
const displayName = (0, import_vue8.computed)(() => import_shared.PROVIDER_DISPLAY_NAMES[props.provider] || props.provider);
|
|
504
|
+
const buttonLabel = (0, import_vue8.computed)(() => props.label ?? `Continue with ${displayName.value}`);
|
|
505
|
+
const needsBorder = (0, import_vue8.computed)(() => colors.value.bg.toLowerCase() === "#ffffff");
|
|
506
|
+
const resolvedIconSize = (0, import_vue8.computed)(() => props.iconSize ?? (props.compact ? 24 : 20));
|
|
507
|
+
const iconSvg = (0, import_vue8.computed)(() => {
|
|
508
|
+
const config = (0, import_js3.getProviderButtonConfig)(props.provider);
|
|
321
509
|
return config.iconSvg.replace(/width="\d+"/, `width="${resolvedIconSize.value}"`).replace(/height="\d+"/, `height="${resolvedIconSize.value}"`);
|
|
322
510
|
});
|
|
323
|
-
const spinner = () => (0,
|
|
511
|
+
const spinner = () => (0, import_vue8.h)("span", {
|
|
324
512
|
style: {
|
|
325
513
|
display: "inline-block",
|
|
326
514
|
width: "16px",
|
|
@@ -331,14 +519,14 @@ var AuthonSocialButton = (0, import_vue4.defineComponent)({
|
|
|
331
519
|
animation: "authon-spin 0.6s linear infinite"
|
|
332
520
|
}
|
|
333
521
|
});
|
|
334
|
-
const icon = () => (0,
|
|
522
|
+
const icon = () => (0, import_vue8.h)("span", {
|
|
335
523
|
style: { display: "flex", alignItems: "center", flexShrink: 0 },
|
|
336
524
|
innerHTML: iconSvg.value
|
|
337
525
|
});
|
|
338
526
|
return () => {
|
|
339
527
|
const borderStyle = needsBorder.value ? { border: "1px solid #dadce0" } : {};
|
|
340
528
|
if (props.compact) {
|
|
341
|
-
return (0,
|
|
529
|
+
return (0, import_vue8.h)(
|
|
342
530
|
"button",
|
|
343
531
|
{
|
|
344
532
|
style: {
|
|
@@ -362,7 +550,7 @@ var AuthonSocialButton = (0, import_vue4.defineComponent)({
|
|
|
362
550
|
[props.loading ? spinner() : icon()]
|
|
363
551
|
);
|
|
364
552
|
}
|
|
365
|
-
return (0,
|
|
553
|
+
return (0, import_vue8.h)(
|
|
366
554
|
"button",
|
|
367
555
|
{
|
|
368
556
|
style: {
|
|
@@ -389,13 +577,13 @@ var AuthonSocialButton = (0, import_vue4.defineComponent)({
|
|
|
389
577
|
},
|
|
390
578
|
props.loading ? [spinner()] : [
|
|
391
579
|
icon(),
|
|
392
|
-
(0,
|
|
580
|
+
(0, import_vue8.h)("span", { style: { fontSize: "15px", fontWeight: 600, whiteSpace: "nowrap" } }, buttonLabel.value)
|
|
393
581
|
]
|
|
394
582
|
);
|
|
395
583
|
};
|
|
396
584
|
}
|
|
397
585
|
});
|
|
398
|
-
var AuthonSocialButtons = (0,
|
|
586
|
+
var AuthonSocialButtons = (0, import_vue8.defineComponent)({
|
|
399
587
|
name: "AuthonSocialButtons",
|
|
400
588
|
props: {
|
|
401
589
|
onSuccess: { type: Function, default: void 0 },
|
|
@@ -406,10 +594,10 @@ var AuthonSocialButtons = (0, import_vue4.defineComponent)({
|
|
|
406
594
|
},
|
|
407
595
|
setup(props) {
|
|
408
596
|
const { client } = useAuthon();
|
|
409
|
-
const providers = (0,
|
|
410
|
-
const loadingProvider = (0,
|
|
411
|
-
const resolvedGap = (0,
|
|
412
|
-
(0,
|
|
597
|
+
const providers = (0, import_vue8.ref)([]);
|
|
598
|
+
const loadingProvider = (0, import_vue8.ref)(null);
|
|
599
|
+
const resolvedGap = (0, import_vue8.computed)(() => props.gap ?? (props.compact ? 12 : 10));
|
|
600
|
+
(0, import_vue8.onMounted)(async () => {
|
|
413
601
|
if (client) {
|
|
414
602
|
providers.value = await client.getProviders();
|
|
415
603
|
}
|
|
@@ -430,11 +618,11 @@ var AuthonSocialButtons = (0, import_vue4.defineComponent)({
|
|
|
430
618
|
return () => {
|
|
431
619
|
if (providers.value.length === 0) return null;
|
|
432
620
|
const containerStyle = props.compact ? { display: "flex", flexDirection: "row", flexWrap: "wrap", justifyContent: "center", gap: `${resolvedGap.value}px` } : { display: "flex", flexDirection: "column", gap: `${resolvedGap.value}px` };
|
|
433
|
-
return (0,
|
|
621
|
+
return (0, import_vue8.h)(
|
|
434
622
|
"div",
|
|
435
623
|
{ style: containerStyle },
|
|
436
624
|
providers.value.map(
|
|
437
|
-
(provider) => (0,
|
|
625
|
+
(provider) => (0, import_vue8.h)(AuthonSocialButton, {
|
|
438
626
|
key: provider,
|
|
439
627
|
provider,
|
|
440
628
|
onClick: handleClick,
|
|
@@ -460,6 +648,9 @@ var AuthonSocialButtons = (0, import_vue4.defineComponent)({
|
|
|
460
648
|
AuthonUserButton,
|
|
461
649
|
createAuthon,
|
|
462
650
|
useAuthon,
|
|
651
|
+
useAuthonPasskeys,
|
|
652
|
+
useAuthonPasswordless,
|
|
653
|
+
useAuthonWeb3,
|
|
463
654
|
useUser
|
|
464
655
|
});
|
|
465
656
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/composables.ts","../src/components.ts","../src/SocialButton.ts"],"sourcesContent":["export { createAuthon, AUTHON_KEY } from './plugin';\nexport type { AuthonState, AuthonPluginOptions } from './plugin';\nexport { useAuthon, useUser } from './composables';\nexport {\n AuthonSignIn,\n AuthonSignUp,\n AuthonUserButton,\n AuthonSignedIn,\n AuthonSignedOut,\n} from './components';\nexport { AuthonSocialButton, AuthonSocialButtons } from './SocialButton';\n","import type { App } from 'vue';\nimport { reactive } from 'vue';\nimport { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\nexport const AUTHON_KEY = Symbol('authon');\n\nexport interface AuthonState {\n isSignedIn: boolean;\n isLoading: boolean;\n user: AuthonUser | null;\n client: Authon | null;\n}\n\nexport interface AuthonPluginOptions {\n publishableKey: string;\n config?: AuthonConfig;\n}\n\nexport function createAuthon(options: AuthonPluginOptions) {\n const state = reactive<AuthonState>({\n isSignedIn: false,\n isLoading: true,\n user: null,\n client: null,\n });\n\n return {\n install(app: App) {\n const client = new Authon(options.publishableKey, options.config);\n state.client = client as unknown as Authon;\n\n client.on('signedIn', (user) => {\n state.user = user as AuthonUser;\n state.isSignedIn = true;\n state.isLoading = false;\n });\n\n client.on('signedOut', () => {\n state.user = null;\n state.isSignedIn = false;\n });\n\n client.on('error', () => {\n state.isLoading = false;\n });\n\n const existingUser = client.getUser();\n if (existingUser) {\n state.user = existingUser as AuthonUser;\n state.isSignedIn = true;\n }\n state.isLoading = false;\n\n app.provide(AUTHON_KEY, state);\n\n app.config.globalProperties.$authon = state;\n },\n };\n}\n","import { inject, computed } from 'vue';\nimport type { ComputedRef } from 'vue';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\nimport type { AuthonUser } from '@authon/shared';\n\nfunction requireState(): AuthonState {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('useAuthon() must be called inside a component tree with createAuthon() installed');\n }\n return state;\n}\n\nexport function useAuthon(): AuthonState & {\n signOut: () => Promise<void>;\n openSignIn: () => Promise<void>;\n openSignUp: () => Promise<void>;\n getToken: () => string | null;\n} {\n const s = requireState();\n\n async function signOut(): Promise<void> {\n await s.client?.signOut();\n s.user = null;\n s.isSignedIn = false;\n }\n\n async function openSignIn(): Promise<void> {\n await s.client?.openSignIn();\n }\n\n async function openSignUp(): Promise<void> {\n await s.client?.openSignUp();\n }\n\n function getToken(): string | null {\n return s.client?.getToken() ?? null;\n }\n\n return {\n ...s,\n signOut,\n openSignIn,\n openSignUp,\n getToken,\n };\n}\n\nexport function useUser(): { user: ComputedRef<AuthonUser | null>; isLoading: ComputedRef<boolean> } {\n const s = requireState();\n return {\n user: computed(() => s.user),\n isLoading: computed(() => s.isLoading),\n };\n}\n","import { defineComponent, h, onMounted, ref, computed } from 'vue';\nimport { useAuthon } from './composables';\n\nexport const AuthonSignIn = defineComponent({\n name: 'AuthonSignIn',\n props: {\n mode: {\n type: String as () => 'popup' | 'embedded',\n default: 'popup',\n },\n },\n setup(props) {\n const { client } = useAuthon();\n\n onMounted(() => {\n if (props.mode === 'popup') {\n client?.openSignIn();\n }\n });\n\n return () => {\n if (props.mode === 'embedded') {\n return h('div', { id: 'authon-signin-container' });\n }\n return null;\n };\n },\n});\n\nexport const AuthonSignUp = defineComponent({\n name: 'AuthonSignUp',\n props: {\n mode: {\n type: String as () => 'popup' | 'embedded',\n default: 'popup',\n },\n },\n setup(props) {\n const { client } = useAuthon();\n\n onMounted(() => {\n if (props.mode === 'popup') {\n client?.openSignUp();\n }\n });\n\n return () => {\n if (props.mode === 'embedded') {\n return h('div', { id: 'authon-signup-container' });\n }\n return null;\n };\n },\n});\n\nexport const AuthonUserButton = defineComponent({\n name: 'AuthonUserButton',\n setup() {\n const { user, isSignedIn, signOut, openSignIn } = useAuthon();\n const open = ref(false);\n\n const initials = computed(() => {\n if (!user) return '?';\n const u = user as typeof user;\n if ((u as { displayName?: string | null }).displayName) {\n return ((u as { displayName: string }).displayName)\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n }\n return ((u as { email?: string | null }).email?.[0] ?? '?').toUpperCase();\n });\n\n return () => {\n if (!isSignedIn) {\n return h(\n 'button',\n {\n onClick: () => openSignIn(),\n style: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n background: 'linear-gradient(135deg, #7c3aed, #4f46e5)',\n color: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n },\n },\n 'Sign In',\n );\n }\n\n const avatarUrl = (user as { avatarUrl?: string | null } | null)?.avatarUrl;\n const displayName = (user as { displayName?: string | null } | null)?.displayName;\n const email = (user as { email?: string | null } | null)?.email;\n\n return h('div', { style: { position: 'relative', display: 'inline-block' } }, [\n h(\n 'button',\n {\n onClick: () => (open.value = !open.value),\n style: {\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n border: '2px solid #7c3aed',\n background: avatarUrl ? 'transparent' : 'linear-gradient(135deg, #7c3aed, #4f46e5)',\n cursor: 'pointer',\n padding: 0,\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n fontSize: '13px',\n fontWeight: 700,\n },\n },\n avatarUrl\n ? [h('img', { src: avatarUrl, alt: displayName ?? 'avatar', style: { width: '100%', height: '100%', objectFit: 'cover' } })]\n : [initials.value],\n ),\n open.value\n ? h(\n 'div',\n {\n style: {\n position: 'absolute',\n right: 0,\n top: '44px',\n minWidth: '200px',\n background: '#fff',\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n zIndex: 9999,\n overflow: 'hidden',\n },\n },\n [\n h('div', { style: { padding: '12px 16px', borderBottom: '1px solid #f3f4f6' } }, [\n displayName && h('div', { style: { fontSize: '14px', fontWeight: 600, color: '#111827' } }, displayName),\n email && h('div', { style: { fontSize: '12px', color: '#6b7280', marginTop: '2px' } }, email),\n ]),\n h(\n 'button',\n {\n onClick: async () => {\n open.value = false;\n await signOut();\n },\n style: {\n display: 'block',\n width: '100%',\n padding: '10px 16px',\n textAlign: 'left',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#ef4444',\n fontWeight: 500,\n },\n },\n 'Sign out',\n ),\n ],\n )\n : null,\n ]);\n };\n },\n});\n\nexport const AuthonSignedIn = defineComponent({\n name: 'AuthonSignedIn',\n setup(_, { slots }) {\n const { isSignedIn, isLoading } = useAuthon();\n return () => {\n if (isLoading || !isSignedIn) return null;\n return slots.default?.();\n };\n },\n});\n\nexport const AuthonSignedOut = defineComponent({\n name: 'AuthonSignedOut',\n setup(_, { slots }) {\n const { isSignedIn, isLoading } = useAuthon();\n return () => {\n if (isLoading || isSignedIn) return null;\n return slots.default?.();\n };\n },\n});\n","import { defineComponent, h, ref, computed, onMounted, type PropType } from 'vue';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES, type OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from './composables';\n\nexport const AuthonSocialButton = defineComponent({\n name: 'AuthonSocialButton',\n props: {\n provider: { type: String as PropType<OAuthProviderType>, required: true },\n onClick: { type: Function as PropType<(provider: OAuthProviderType) => void | Promise<void>>, required: true },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n label: { type: String, default: undefined },\n compact: { type: Boolean, default: false },\n iconSize: { type: Number, default: undefined },\n borderRadius: { type: Number, default: 10 },\n height: { type: Number, default: 48 },\n size: { type: Number, default: 48 },\n },\n setup(props) {\n const colors = computed(() => PROVIDER_COLORS[props.provider] || { bg: '#333', text: '#fff' });\n const displayName = computed(() => PROVIDER_DISPLAY_NAMES[props.provider] || props.provider);\n const buttonLabel = computed(() => props.label ?? `Continue with ${displayName.value}`);\n const needsBorder = computed(() => colors.value.bg.toLowerCase() === '#ffffff');\n const resolvedIconSize = computed(() => props.iconSize ?? (props.compact ? 24 : 20));\n\n const iconSvg = computed(() => {\n const config = getProviderButtonConfig(props.provider);\n return config.iconSvg\n .replace(/width=\"\\d+\"/, `width=\"${resolvedIconSize.value}\"`)\n .replace(/height=\"\\d+\"/, `height=\"${resolvedIconSize.value}\"`);\n });\n\n const spinner = () =>\n h('span', {\n style: {\n display: 'inline-block',\n width: '16px',\n height: '16px',\n border: `2px solid ${colors.value.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n },\n });\n\n const icon = () =>\n h('span', {\n style: { display: 'flex', alignItems: 'center', flexShrink: 0 },\n innerHTML: iconSvg.value,\n });\n\n return () => {\n const borderStyle = needsBorder.value ? { border: '1px solid #dadce0' } : {};\n\n if (props.compact) {\n return h(\n 'button',\n {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n padding: 0,\n backgroundColor: colors.value.bg,\n borderRadius: `${props.borderRadius}px`,\n width: `${props.size}px`,\n height: `${props.size}px`,\n ...borderStyle,\n },\n onClick: () => props.onClick(props.provider),\n disabled: props.disabled || props.loading,\n 'aria-label': `Sign in with ${displayName.value}`,\n },\n [props.loading ? spinner() : icon()],\n );\n }\n\n return h(\n 'button',\n {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '10px',\n paddingLeft: '16px',\n paddingRight: '16px',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'opacity 0.15s',\n width: '100%',\n backgroundColor: colors.value.bg,\n color: colors.value.text,\n borderRadius: `${props.borderRadius}px`,\n height: `${props.height}px`,\n ...borderStyle,\n },\n onClick: () => props.onClick(props.provider),\n disabled: props.disabled || props.loading,\n 'aria-label': `Sign in with ${displayName.value}`,\n },\n props.loading\n ? [spinner()]\n : [\n icon(),\n h('span', { style: { fontSize: '15px', fontWeight: 600, whiteSpace: 'nowrap' } }, buttonLabel.value),\n ],\n );\n };\n },\n});\n\nexport const AuthonSocialButtons = defineComponent({\n name: 'AuthonSocialButtons',\n props: {\n onSuccess: { type: Function as PropType<() => void>, default: undefined },\n onError: { type: Function as PropType<(error: Error) => void>, default: undefined },\n gap: { type: Number, default: undefined },\n compact: { type: Boolean, default: false },\n labels: { type: Object as PropType<Partial<Record<OAuthProviderType, string>>>, default: undefined },\n },\n setup(props) {\n const { client } = useAuthon();\n const providers = ref<OAuthProviderType[]>([]);\n const loadingProvider = ref<string | null>(null);\n const resolvedGap = computed(() => props.gap ?? (props.compact ? 12 : 10));\n\n onMounted(async () => {\n if (client) {\n providers.value = await client.getProviders();\n }\n });\n\n const handleClick = async (provider: OAuthProviderType) => {\n if (!client) return;\n loadingProvider.value = provider;\n try {\n await client.signInWithOAuth(provider);\n props.onSuccess?.();\n } catch (e: any) {\n const error = e instanceof Error ? e : new Error(String(e));\n props.onError?.(error);\n } finally {\n loadingProvider.value = null;\n }\n };\n\n return () => {\n if (providers.value.length === 0) return null;\n\n const containerStyle = props.compact\n ? { display: 'flex', flexDirection: 'row' as const, flexWrap: 'wrap' as const, justifyContent: 'center', gap: `${resolvedGap.value}px` }\n : { display: 'flex', flexDirection: 'column' as const, gap: `${resolvedGap.value}px` };\n\n return h(\n 'div',\n { style: containerStyle },\n providers.value.map((provider) =>\n h(AuthonSocialButton, {\n key: provider,\n provider,\n onClick: handleClick,\n loading: loadingProvider.value === provider,\n disabled: !!loadingProvider.value,\n compact: props.compact,\n label: props.labels?.[provider],\n }),\n ),\n );\n };\n },\n});\n"],"mappings":"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","names":["import_vue","import_vue","import_vue","import_js"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/plugin.ts","../src/composables.ts","../src/useAuthonWeb3.ts","../src/useAuthonPasswordless.ts","../src/useAuthonPasskeys.ts","../src/components.ts","../src/SocialButton.ts"],"sourcesContent":["export { createAuthon, AUTHON_KEY } from './plugin';\nexport type { AuthonState, AuthonPluginOptions } from './plugin';\nexport { useAuthon, useUser } from './composables';\nexport { useAuthonWeb3 } from './useAuthonWeb3';\nexport type { UseAuthonWeb3Return, LinkWalletParams } from './useAuthonWeb3';\nexport { useAuthonPasswordless } from './useAuthonPasswordless';\nexport type { UseAuthonPasswordlessReturn } from './useAuthonPasswordless';\nexport { useAuthonPasskeys } from './useAuthonPasskeys';\nexport type { UseAuthonPasskeysReturn } from './useAuthonPasskeys';\nexport {\n AuthonSignIn,\n AuthonSignUp,\n AuthonUserButton,\n AuthonSignedIn,\n AuthonSignedOut,\n} from './components';\nexport { AuthonSocialButton, AuthonSocialButtons } from './SocialButton';\n","import type { App } from 'vue';\nimport { reactive } from 'vue';\nimport { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport type { AuthonUser } from '@authon/shared';\n\nexport const AUTHON_KEY = Symbol('authon');\n\nexport interface AuthonState {\n isSignedIn: boolean;\n isLoading: boolean;\n user: AuthonUser | null;\n client: Authon | null;\n publishableKey: string;\n apiUrl: string;\n}\n\nexport interface AuthonPluginOptions {\n publishableKey: string;\n config?: AuthonConfig;\n}\n\nexport function createAuthon(options: AuthonPluginOptions) {\n const state = reactive<AuthonState>({\n isSignedIn: false,\n isLoading: true,\n user: null,\n client: null,\n publishableKey: options.publishableKey,\n apiUrl: options.config?.apiUrl ?? 'https://api.authon.dev',\n });\n\n return {\n install(app: App) {\n const client = new Authon(options.publishableKey, options.config);\n state.client = client as unknown as Authon;\n\n client.on('signedIn', (user) => {\n state.user = user as AuthonUser;\n state.isSignedIn = true;\n state.isLoading = false;\n });\n\n client.on('signedOut', () => {\n state.user = null;\n state.isSignedIn = false;\n });\n\n client.on('error', () => {\n state.isLoading = false;\n });\n\n const existingUser = client.getUser();\n if (existingUser) {\n state.user = existingUser as AuthonUser;\n state.isSignedIn = true;\n }\n state.isLoading = false;\n\n app.provide(AUTHON_KEY, state);\n\n app.config.globalProperties.$authon = state;\n },\n };\n}\n","import { inject, computed } from 'vue';\nimport type { ComputedRef } from 'vue';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\nimport type { AuthonUser } from '@authon/shared';\n\nfunction requireState(): AuthonState {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('useAuthon() must be called inside a component tree with createAuthon() installed');\n }\n return state;\n}\n\nexport function useAuthon(): AuthonState & {\n signOut: () => Promise<void>;\n openSignIn: () => Promise<void>;\n openSignUp: () => Promise<void>;\n getToken: () => string | null;\n} {\n const s = requireState();\n\n async function signOut(): Promise<void> {\n await s.client?.signOut();\n s.user = null;\n s.isSignedIn = false;\n }\n\n async function openSignIn(): Promise<void> {\n await s.client?.openSignIn();\n }\n\n async function openSignUp(): Promise<void> {\n await s.client?.openSignUp();\n }\n\n function getToken(): string | null {\n return s.client?.getToken() ?? null;\n }\n\n return {\n ...s,\n signOut,\n openSignIn,\n openSignUp,\n getToken,\n };\n}\n\nexport function useUser(): { user: ComputedRef<AuthonUser | null>; isLoading: ComputedRef<boolean> } {\n const s = requireState();\n return {\n user: computed(() => s.user),\n isLoading: computed(() => s.isLoading),\n };\n}\n","import { ref } from 'vue';\nimport type { Ref } from 'vue';\nimport type { Web3Chain, Web3NonceResponse, Web3Wallet, Web3WalletType } from '@authon/shared';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\nimport { inject } from 'vue';\n\nexport interface LinkWalletParams {\n address: string;\n chain: Web3Chain;\n walletType: Web3WalletType;\n chainId?: number;\n message: string;\n signature: string;\n}\n\nexport interface UseAuthonWeb3Return {\n getNonce: (\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n chainId?: number,\n ) => Promise<Web3NonceResponse | null>;\n verify: (\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ) => Promise<boolean>;\n listWallets: () => Promise<Web3Wallet[] | null>;\n linkWallet: (params: LinkWalletParams) => Promise<Web3Wallet | null>;\n unlinkWallet: (walletId: string) => Promise<boolean>;\n isLoading: Ref<boolean>;\n error: Ref<Error | null>;\n}\n\nexport function useAuthonWeb3(): UseAuthonWeb3Return {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('useAuthonWeb3() must be called inside a component tree with createAuthon() installed');\n }\n const s = state;\n\n const isLoading = ref<boolean>(false);\n const error = ref<Error | null>(null);\n\n async function wrap<T>(fn: () => Promise<T>): Promise<T | null> {\n isLoading.value = true;\n error.value = null;\n try {\n return await fn();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n return null;\n } finally {\n isLoading.value = false;\n }\n }\n\n async function getNonce(\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n chainId?: number,\n ): Promise<Web3NonceResponse | null> {\n return wrap(() => s.client!.web3GetNonce(address, chain, walletType, chainId));\n }\n\n async function verify(\n message: string,\n signature: string,\n address: string,\n chain: Web3Chain,\n walletType: Web3WalletType,\n ): Promise<boolean> {\n const result = await wrap(() =>\n s.client!.web3Verify(message, signature, address, chain, walletType),\n );\n return result !== null;\n }\n\n async function listWallets(): Promise<Web3Wallet[] | null> {\n return wrap(() => s.client!.listWallets());\n }\n\n async function linkWallet(params: LinkWalletParams): Promise<Web3Wallet | null> {\n return wrap(() => s.client!.linkWallet(params));\n }\n\n async function unlinkWallet(walletId: string): Promise<boolean> {\n const result = await wrap(() => s.client!.unlinkWallet(walletId));\n return result !== null;\n }\n\n return {\n getNonce,\n verify,\n listWallets,\n linkWallet,\n unlinkWallet,\n isLoading,\n error,\n };\n}\n","import { ref, inject } from 'vue';\nimport type { Ref } from 'vue';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\n\nexport interface UseAuthonPasswordlessReturn {\n sendMagicLink: (email: string) => Promise<boolean>;\n sendEmailOtp: (email: string) => Promise<boolean>;\n verifyPasswordless: (opts: { token?: string; email?: string; code?: string }) => Promise<boolean>;\n isLoading: Ref<boolean>;\n error: Ref<Error | null>;\n}\n\nexport function useAuthonPasswordless(): UseAuthonPasswordlessReturn {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('useAuthonPasswordless() must be called inside a component tree with createAuthon() installed');\n }\n const s = state;\n\n const isLoading = ref<boolean>(false);\n const error = ref<Error | null>(null);\n\n async function wrap<T>(fn: () => Promise<T>): Promise<T | null> {\n isLoading.value = true;\n error.value = null;\n try {\n return await fn();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n return null;\n } finally {\n isLoading.value = false;\n }\n }\n\n async function sendMagicLink(email: string): Promise<boolean> {\n const result = await wrap(() => s.client!.sendMagicLink(email));\n return result !== null;\n }\n\n async function sendEmailOtp(email: string): Promise<boolean> {\n const result = await wrap(() => s.client!.sendEmailOtp(email));\n return result !== null;\n }\n\n async function verifyPasswordless(opts: {\n token?: string;\n email?: string;\n code?: string;\n }): Promise<boolean> {\n const result = await wrap(() => s.client!.verifyPasswordless(opts));\n return result !== null;\n }\n\n return {\n sendMagicLink,\n sendEmailOtp,\n verifyPasswordless,\n isLoading,\n error,\n };\n}\n","import { ref, inject } from 'vue';\nimport type { Ref } from 'vue';\nimport type { PasskeyCredential } from '@authon/shared';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\n\nexport interface UseAuthonPasskeysReturn {\n registerPasskey: (name?: string) => Promise<PasskeyCredential | null>;\n authenticateWithPasskey: (email?: string) => Promise<boolean>;\n listPasskeys: () => Promise<PasskeyCredential[] | null>;\n renamePasskey: (id: string, name: string) => Promise<PasskeyCredential | null>;\n revokePasskey: (id: string) => Promise<boolean>;\n isLoading: Ref<boolean>;\n error: Ref<Error | null>;\n}\n\nexport function useAuthonPasskeys(): UseAuthonPasskeysReturn {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('useAuthonPasskeys() must be called inside a component tree with createAuthon() installed');\n }\n const s = state;\n\n const isLoading = ref<boolean>(false);\n const error = ref<Error | null>(null);\n\n async function wrap<T>(fn: () => Promise<T>): Promise<T | null> {\n isLoading.value = true;\n error.value = null;\n try {\n return await fn();\n } catch (err) {\n error.value = err instanceof Error ? err : new Error(String(err));\n return null;\n } finally {\n isLoading.value = false;\n }\n }\n\n async function registerPasskey(name?: string): Promise<PasskeyCredential | null> {\n return wrap(() => s.client!.registerPasskey(name));\n }\n\n async function authenticateWithPasskey(email?: string): Promise<boolean> {\n const result = await wrap(() => s.client!.authenticateWithPasskey(email));\n return result !== null;\n }\n\n async function listPasskeys(): Promise<PasskeyCredential[] | null> {\n return wrap(() => s.client!.listPasskeys());\n }\n\n async function renamePasskey(id: string, name: string): Promise<PasskeyCredential | null> {\n return wrap(() => s.client!.renamePasskey(id, name));\n }\n\n async function revokePasskey(id: string): Promise<boolean> {\n const result = await wrap(() => s.client!.revokePasskey(id));\n return result !== null;\n }\n\n return {\n registerPasskey,\n authenticateWithPasskey,\n listPasskeys,\n renamePasskey,\n revokePasskey,\n isLoading,\n error,\n };\n}\n","import { defineComponent, h, inject, onMounted, onUnmounted, ref, computed } from 'vue';\nimport { Authon } from '@authon/js';\nimport type { AuthonConfig } from '@authon/js';\nimport { AUTHON_KEY } from './plugin';\nimport type { AuthonState } from './plugin';\nimport { useAuthon } from './composables';\n\nlet _embeddedCounter = 0;\n\nfunction requireState(): AuthonState {\n const state = inject<AuthonState>(AUTHON_KEY);\n if (!state) {\n throw new Error('AuthonSignIn/AuthonSignUp must be used inside a component tree with createAuthon() installed');\n }\n return state;\n}\n\nexport const AuthonSignIn = defineComponent({\n name: 'AuthonSignIn',\n props: {\n afterSignInUrl: { type: String, default: undefined },\n appearance: { type: Object as () => AuthonConfig['appearance'], default: undefined },\n },\n emits: ['signIn'],\n setup(props, { emit }) {\n const state = requireState();\n const containerId = ref(`authon-signin-${++_embeddedCounter}`);\n let embeddedClient: Authon | null = null;\n let cleanupSignedIn: (() => void) | null = null;\n\n onMounted(() => {\n embeddedClient = new Authon(state.publishableKey, {\n apiUrl: state.apiUrl,\n mode: 'embedded',\n containerId: containerId.value,\n appearance: props.appearance,\n });\n\n cleanupSignedIn = embeddedClient.on('signedIn', (user) => {\n state.user = user;\n state.isSignedIn = true;\n emit('signIn', user);\n if (props.afterSignInUrl) {\n window.location.href = props.afterSignInUrl;\n }\n });\n\n embeddedClient.openSignIn();\n });\n\n onUnmounted(() => {\n cleanupSignedIn?.();\n embeddedClient?.destroy();\n embeddedClient = null;\n });\n\n return () => h('div', { id: containerId.value });\n },\n});\n\nexport const AuthonSignUp = defineComponent({\n name: 'AuthonSignUp',\n props: {\n afterSignUpUrl: { type: String, default: undefined },\n appearance: { type: Object as () => AuthonConfig['appearance'], default: undefined },\n },\n emits: ['signUp'],\n setup(props, { emit }) {\n const state = requireState();\n const containerId = ref(`authon-signup-${++_embeddedCounter}`);\n let embeddedClient: Authon | null = null;\n let cleanupSignedIn: (() => void) | null = null;\n\n onMounted(() => {\n embeddedClient = new Authon(state.publishableKey, {\n apiUrl: state.apiUrl,\n mode: 'embedded',\n containerId: containerId.value,\n appearance: props.appearance,\n });\n\n cleanupSignedIn = embeddedClient.on('signedIn', (user) => {\n state.user = user;\n state.isSignedIn = true;\n emit('signUp', user);\n if (props.afterSignUpUrl) {\n window.location.href = props.afterSignUpUrl;\n }\n });\n\n embeddedClient.openSignUp();\n });\n\n onUnmounted(() => {\n cleanupSignedIn?.();\n embeddedClient?.destroy();\n embeddedClient = null;\n });\n\n return () => h('div', { id: containerId.value });\n },\n});\n\nexport const AuthonUserButton = defineComponent({\n name: 'AuthonUserButton',\n setup() {\n const { user, isSignedIn, signOut, openSignIn } = useAuthon();\n const open = ref(false);\n\n const initials = computed(() => {\n if (!user) return '?';\n const u = user as typeof user;\n if ((u as { displayName?: string | null }).displayName) {\n return ((u as { displayName: string }).displayName)\n .split(' ')\n .map((n: string) => n[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n }\n return ((u as { email?: string | null }).email?.[0] ?? '?').toUpperCase();\n });\n\n return () => {\n if (!isSignedIn) {\n return h(\n 'button',\n {\n onClick: () => openSignIn(),\n style: {\n padding: '8px 16px',\n borderRadius: '8px',\n border: 'none',\n background: 'linear-gradient(135deg, #7c3aed, #4f46e5)',\n color: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n fontWeight: 600,\n },\n },\n 'Sign In',\n );\n }\n\n const avatarUrl = (user as { avatarUrl?: string | null } | null)?.avatarUrl;\n const displayName = (user as { displayName?: string | null } | null)?.displayName;\n const email = (user as { email?: string | null } | null)?.email;\n\n return h('div', { style: { position: 'relative', display: 'inline-block' } }, [\n h(\n 'button',\n {\n onClick: () => (open.value = !open.value),\n style: {\n width: '36px',\n height: '36px',\n borderRadius: '50%',\n border: '2px solid #7c3aed',\n background: avatarUrl ? 'transparent' : 'linear-gradient(135deg, #7c3aed, #4f46e5)',\n cursor: 'pointer',\n padding: 0,\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#fff',\n fontSize: '13px',\n fontWeight: 700,\n },\n },\n avatarUrl\n ? [h('img', { src: avatarUrl, alt: displayName ?? 'avatar', style: { width: '100%', height: '100%', objectFit: 'cover' } })]\n : [initials.value],\n ),\n open.value\n ? h(\n 'div',\n {\n style: {\n position: 'absolute',\n right: 0,\n top: '44px',\n minWidth: '200px',\n background: '#fff',\n border: '1px solid #e5e7eb',\n borderRadius: '12px',\n boxShadow: '0 8px 24px rgba(0,0,0,0.12)',\n zIndex: 9999,\n overflow: 'hidden',\n },\n },\n [\n h('div', { style: { padding: '12px 16px', borderBottom: '1px solid #f3f4f6' } }, [\n displayName && h('div', { style: { fontSize: '14px', fontWeight: 600, color: '#111827' } }, displayName),\n email && h('div', { style: { fontSize: '12px', color: '#6b7280', marginTop: '2px' } }, email),\n ]),\n h(\n 'button',\n {\n onClick: async () => {\n open.value = false;\n await signOut();\n },\n style: {\n display: 'block',\n width: '100%',\n padding: '10px 16px',\n textAlign: 'left',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#ef4444',\n fontWeight: 500,\n },\n },\n 'Sign out',\n ),\n ],\n )\n : null,\n ]);\n };\n },\n});\n\nexport const AuthonSignedIn = defineComponent({\n name: 'AuthonSignedIn',\n setup(_, { slots }) {\n const { isSignedIn, isLoading } = useAuthon();\n return () => {\n if (isLoading || !isSignedIn) return null;\n return slots.default?.();\n };\n },\n});\n\nexport const AuthonSignedOut = defineComponent({\n name: 'AuthonSignedOut',\n setup(_, { slots }) {\n const { isSignedIn, isLoading } = useAuthon();\n return () => {\n if (isLoading || isSignedIn) return null;\n return slots.default?.();\n };\n },\n});\n","import { defineComponent, h, ref, computed, onMounted, type PropType } from 'vue';\nimport { PROVIDER_COLORS, PROVIDER_DISPLAY_NAMES, type OAuthProviderType } from '@authon/shared';\nimport { getProviderButtonConfig } from '@authon/js';\nimport { useAuthon } from './composables';\n\nexport const AuthonSocialButton = defineComponent({\n name: 'AuthonSocialButton',\n props: {\n provider: { type: String as PropType<OAuthProviderType>, required: true },\n onClick: { type: Function as PropType<(provider: OAuthProviderType) => void | Promise<void>>, required: true },\n loading: { type: Boolean, default: false },\n disabled: { type: Boolean, default: false },\n label: { type: String, default: undefined },\n compact: { type: Boolean, default: false },\n iconSize: { type: Number, default: undefined },\n borderRadius: { type: Number, default: 10 },\n height: { type: Number, default: 48 },\n size: { type: Number, default: 48 },\n },\n setup(props) {\n const colors = computed(() => PROVIDER_COLORS[props.provider] || { bg: '#333', text: '#fff' });\n const displayName = computed(() => PROVIDER_DISPLAY_NAMES[props.provider] || props.provider);\n const buttonLabel = computed(() => props.label ?? `Continue with ${displayName.value}`);\n const needsBorder = computed(() => colors.value.bg.toLowerCase() === '#ffffff');\n const resolvedIconSize = computed(() => props.iconSize ?? (props.compact ? 24 : 20));\n\n const iconSvg = computed(() => {\n const config = getProviderButtonConfig(props.provider);\n return config.iconSvg\n .replace(/width=\"\\d+\"/, `width=\"${resolvedIconSize.value}\"`)\n .replace(/height=\"\\d+\"/, `height=\"${resolvedIconSize.value}\"`);\n });\n\n const spinner = () =>\n h('span', {\n style: {\n display: 'inline-block',\n width: '16px',\n height: '16px',\n border: `2px solid ${colors.value.text}`,\n borderTopColor: 'transparent',\n borderRadius: '50%',\n animation: 'authon-spin 0.6s linear infinite',\n },\n });\n\n const icon = () =>\n h('span', {\n style: { display: 'flex', alignItems: 'center', flexShrink: 0 },\n innerHTML: iconSvg.value,\n });\n\n return () => {\n const borderStyle = needsBorder.value ? { border: '1px solid #dadce0' } : {};\n\n if (props.compact) {\n return h(\n 'button',\n {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: 'none',\n cursor: 'pointer',\n transition: 'opacity 0.15s',\n padding: 0,\n backgroundColor: colors.value.bg,\n borderRadius: `${props.borderRadius}px`,\n width: `${props.size}px`,\n height: `${props.size}px`,\n ...borderStyle,\n },\n onClick: () => props.onClick(props.provider),\n disabled: props.disabled || props.loading,\n 'aria-label': `Sign in with ${displayName.value}`,\n },\n [props.loading ? spinner() : icon()],\n );\n }\n\n return h(\n 'button',\n {\n style: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '10px',\n paddingLeft: '16px',\n paddingRight: '16px',\n border: 'none',\n cursor: 'pointer',\n fontFamily: 'inherit',\n transition: 'opacity 0.15s',\n width: '100%',\n backgroundColor: colors.value.bg,\n color: colors.value.text,\n borderRadius: `${props.borderRadius}px`,\n height: `${props.height}px`,\n ...borderStyle,\n },\n onClick: () => props.onClick(props.provider),\n disabled: props.disabled || props.loading,\n 'aria-label': `Sign in with ${displayName.value}`,\n },\n props.loading\n ? [spinner()]\n : [\n icon(),\n h('span', { style: { fontSize: '15px', fontWeight: 600, whiteSpace: 'nowrap' } }, buttonLabel.value),\n ],\n );\n };\n },\n});\n\nexport const AuthonSocialButtons = defineComponent({\n name: 'AuthonSocialButtons',\n props: {\n onSuccess: { type: Function as PropType<() => void>, default: undefined },\n onError: { type: Function as PropType<(error: Error) => void>, default: undefined },\n gap: { type: Number, default: undefined },\n compact: { type: Boolean, default: false },\n labels: { type: Object as PropType<Partial<Record<OAuthProviderType, string>>>, default: undefined },\n },\n setup(props) {\n const { client } = useAuthon();\n const providers = ref<OAuthProviderType[]>([]);\n const loadingProvider = ref<string | null>(null);\n const resolvedGap = computed(() => props.gap ?? (props.compact ? 12 : 10));\n\n onMounted(async () => {\n if (client) {\n providers.value = await client.getProviders();\n }\n });\n\n const handleClick = async (provider: OAuthProviderType) => {\n if (!client) return;\n loadingProvider.value = provider;\n try {\n await client.signInWithOAuth(provider);\n props.onSuccess?.();\n } catch (e: any) {\n const error = e instanceof Error ? e : new Error(String(e));\n props.onError?.(error);\n } finally {\n loadingProvider.value = null;\n }\n };\n\n return () => {\n if (providers.value.length === 0) return null;\n\n const containerStyle = props.compact\n ? { display: 'flex', flexDirection: 'row' as const, flexWrap: 'wrap' as const, justifyContent: 'center', gap: `${resolvedGap.value}px` }\n : { display: 'flex', flexDirection: 'column' as const, gap: `${resolvedGap.value}px` };\n\n return h(\n 'div',\n { style: containerStyle },\n providers.value.map((provider) =>\n h(AuthonSocialButton, {\n key: provider,\n provider,\n onClick: handleClick,\n loading: loadingProvider.value === provider,\n disabled: !!loadingProvider.value,\n compact: props.compact,\n label: props.labels?.[provider],\n }),\n ),\n );\n };\n },\n});\n"],"mappings":"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","names":["import_vue","import_vue","import_vue","import_vue","import_vue","import_vue","import_js","requireState","import_vue","import_js"]}
|