1
+ import type { Client } from "@versia/client" ;
1
2
import type { ApplicationData } from "@versia/client/types" ;
2
3
import { nanoid } from "nanoid" ;
3
4
import { toast } from "vue-sonner" ;
4
5
import * as m from "~/paraglide/messages.js" ;
5
6
6
- export const signIn = async ( appData : Ref < ApplicationData | null > ) => {
7
+ export const signIn = async (
8
+ appData : Ref < ApplicationData | null > ,
9
+ origin : URL ,
10
+ ) => {
7
11
const id = toast . loading ( m . level_due_ox_greet ( ) ) ;
8
12
13
+ const redirectUri = new URL ( "/" , useRequestURL ( ) . origin ) ;
14
+
15
+ const client = useClient ( origin ) ;
16
+
17
+ redirectUri . searchParams . append ( "origin" , client . value . url . origin ) ;
18
+
9
19
const output = await client . value . createApp ( "Versia" , {
10
20
scopes : [ "read" , "write" , "follow" , "push" ] ,
11
- redirect_uris : new URL ( "/" , useRequestURL ( ) . origin ) . toString ( ) ,
21
+ redirect_uris : redirectUri . toString ( ) ,
12
22
website : useBaseUrl ( ) . value ,
13
23
} ) ;
14
24
@@ -25,7 +35,7 @@ export const signIn = async (appData: Ref<ApplicationData | null>) => {
25
35
output . data . client_secret ,
26
36
{
27
37
scopes : [ "read" , "write" , "follow" , "push" ] ,
28
- redirect_uri : new URL ( "/" , useRequestURL ( ) . origin ) . toString ( ) ,
38
+ redirect_uri : redirectUri . toString ( ) ,
29
39
} ,
30
40
) ;
31
41
@@ -35,19 +45,33 @@ export const signIn = async (appData: Ref<ApplicationData | null>) => {
35
45
return ;
36
46
}
37
47
38
- window . location . href = url ;
48
+ // Add "instance_switch_uri" parameter to URL
49
+ const toRedirect = new URL ( url ) ;
50
+
51
+ toRedirect . searchParams . append ( "instance_switch_uri" , useRequestURL ( ) . href ) ;
52
+
53
+ window . location . href = toRedirect . toString ( ) ;
39
54
} ;
40
55
41
- export const signInWithCode = ( code : string , appData : ApplicationData ) => {
56
+ export const signInWithCode = (
57
+ code : string ,
58
+ appData : ApplicationData ,
59
+ origin : URL ,
60
+ ) => {
61
+ const client = useClient ( origin ) ;
62
+ const redirectUri = new URL ( "/" , useRequestURL ( ) . origin ) ;
63
+
64
+ redirectUri . searchParams . append ( "origin" , client . value . url . origin ) ;
65
+
42
66
client . value
43
67
?. fetchAccessToken (
44
68
appData . client_id ,
45
69
appData . client_secret ,
46
70
code ,
47
- new URL ( "/" , useRequestURL ( ) . origin ) . toString ( ) ,
71
+ redirectUri . toString ( ) ,
48
72
)
49
73
. then ( async ( res ) => {
50
- const tempClient = useClient ( res . data ) . value ;
74
+ const tempClient = useClient ( origin , res . data ) . value ;
51
75
52
76
const [ accountOutput , instanceOutput ] = await Promise . all ( [
53
77
tempClient . verifyAccountCredentials ( ) ,
0 commit comments