@@ -34,6 +34,7 @@ extension SessionStorage {
34
34
let migrations : [ StorageMigration ] = [
35
35
. sessionNewKey( clientID: clientID) ,
36
36
. storeSessionDirectly( clientID: clientID) ,
37
+ . useDefaultEncoder( clientID: clientID) ,
37
38
]
38
39
39
40
var key : String {
@@ -46,14 +47,16 @@ extension SessionStorage {
46
47
do {
47
48
try migration. run ( )
48
49
} catch {
49
- logger? . error ( " Storage migration failed: \( error. localizedDescription) " )
50
+ logger? . error (
51
+ " Storage migration ' \( migration. name) ' failed: \( error. localizedDescription) "
52
+ )
50
53
}
51
54
}
52
55
53
56
do {
54
57
let storedData = try storage. retrieve ( key: key)
55
58
return try storedData. flatMap {
56
- try AuthClient . Configuration . jsonDecoder . decode ( Session . self, from: $0)
59
+ try JSONDecoder ( ) . decode ( Session . self, from: $0)
57
60
}
58
61
} catch {
59
62
logger? . error ( " Failed to retrieve session: \( error. localizedDescription) " )
@@ -64,7 +67,7 @@ extension SessionStorage {
64
67
do {
65
68
try storage. store (
66
69
key: key,
67
- value: AuthClient . Configuration . jsonEncoder . encode ( session)
70
+ value: JSONEncoder ( ) . encode ( session)
68
71
)
69
72
} catch {
70
73
logger? . error ( " Failed to store session: \( error. localizedDescription) " )
@@ -82,14 +85,15 @@ extension SessionStorage {
82
85
}
83
86
84
87
struct StorageMigration {
88
+ var name : String
85
89
var run : @Sendable ( ) throws -> Void
86
90
}
87
91
88
92
extension StorageMigration {
89
93
/// Migrate stored session from `supabase.session` key to the custom provided storage key
90
94
/// or the default `supabase.auth.token` key.
91
95
static func sessionNewKey( clientID: AuthClientID ) -> StorageMigration {
92
- StorageMigration {
96
+ StorageMigration ( name : " sessionNewKey " ) {
93
97
let storage = Dependencies [ clientID] . configuration. localStorage
94
98
let newKey = SessionStorage . key ( clientID)
95
99
@@ -117,16 +121,38 @@ extension StorageMigration {
117
121
var expirationDate : Date
118
122
}
119
123
120
- return StorageMigration {
124
+ return StorageMigration ( name : " storeSessionDirectly " ) {
121
125
let storage = Dependencies [ clientID] . configuration. localStorage
122
126
let key = SessionStorage . key ( clientID)
123
127
124
128
if let data = try ? storage. retrieve ( key: key) ,
125
- let storedSession = try ? AuthClient . Configuration. jsonDecoder. decode ( StoredSession . self, from: data)
129
+ let storedSession = try ? AuthClient . Configuration. jsonDecoder. decode (
130
+ StoredSession . self,
131
+ from: data
132
+ )
126
133
{
127
134
let session = try AuthClient . Configuration. jsonEncoder. encode ( storedSession. session)
128
135
try storage. store ( key: key, value: session)
129
136
}
130
137
}
131
138
}
139
+
140
+ static func useDefaultEncoder( clientID: AuthClientID ) -> StorageMigration {
141
+ StorageMigration ( name: " useDefaultEncoder " ) {
142
+ let storage = Dependencies [ clientID] . configuration. localStorage
143
+ let key = SessionStorage . key ( clientID)
144
+
145
+ let storedData = try ? storage. retrieve ( key: key)
146
+ let sessionUsingOldDecoder = storedData. flatMap {
147
+ try ? AuthClient . Configuration. jsonDecoder. decode ( Session . self, from: $0)
148
+ }
149
+
150
+ if let sessionUsingOldDecoder {
151
+ try storage. store (
152
+ key: key,
153
+ value: JSONEncoder ( ) . encode ( sessionUsingOldDecoder)
154
+ )
155
+ }
156
+ }
157
+ }
132
158
}
0 commit comments