@@ -154,20 +154,27 @@ function loadAuthAdapter(provider, authOptions) {
154
154
return ;
155
155
}
156
156
157
- const adapter = defaultAdapter instanceof AuthAdapter ? defaultAdapter : Object . assign ( { } , defaultAdapter ) ;
157
+ const adapter =
158
+ defaultAdapter instanceof AuthAdapter ? defaultAdapter : Object . assign ( { } , defaultAdapter ) ;
158
159
const keys = [
159
160
'validateAuthData' ,
160
161
'validateAppId' ,
161
162
'validateSetUp' ,
162
163
'validateLogin' ,
163
164
'validateUpdate' ,
164
165
'challenge' ,
165
- 'policy'
166
+ 'validateOptions' ,
167
+ 'policy' ,
168
+ 'afterFind' ,
166
169
] ;
167
170
const defaultAuthAdapter = new AuthAdapter ( ) ;
168
171
keys . forEach ( key => {
169
172
const existing = adapter ?. [ key ] ;
170
- if ( existing && typeof existing === 'function' && existing . toString ( ) === defaultAuthAdapter [ key ] . toString ( ) ) {
173
+ if (
174
+ existing &&
175
+ typeof existing === 'function' &&
176
+ existing . toString ( ) === defaultAuthAdapter [ key ] . toString ( )
177
+ ) {
171
178
adapter [ key ] = null ;
172
179
}
173
180
} ) ;
@@ -184,6 +191,9 @@ function loadAuthAdapter(provider, authOptions) {
184
191
} ) ;
185
192
}
186
193
}
194
+ if ( adapter . validateOptions ) {
195
+ adapter . validateOptions ( providerOptions ) ;
196
+ }
187
197
188
198
return { adapter, appIds, providerOptions } ;
189
199
}
@@ -204,9 +214,35 @@ module.exports = function (authOptions = {}, enableAnonymousUsers = true) {
204
214
return { validator : authDataValidator ( provider , adapter , appIds , providerOptions ) , adapter } ;
205
215
} ;
206
216
217
+ const runAfterFind = async authData => {
218
+ if ( ! authData ) {
219
+ return ;
220
+ }
221
+ const adapters = Object . keys ( authData ) ;
222
+ await Promise . all (
223
+ adapters . map ( async provider => {
224
+ const authAdapter = getValidatorForProvider ( provider ) ;
225
+ if ( ! authAdapter ) {
226
+ return ;
227
+ }
228
+ const {
229
+ adapter : { afterFind } ,
230
+ providerOptions,
231
+ } = authAdapter ;
232
+ if ( afterFind && typeof afterFind === 'function' ) {
233
+ const result = afterFind ( authData [ provider ] , providerOptions ) ;
234
+ if ( result ) {
235
+ authData [ provider ] = result ;
236
+ }
237
+ }
238
+ } )
239
+ ) ;
240
+ } ;
241
+
207
242
return Object . freeze ( {
208
243
getValidatorForProvider,
209
244
setEnableAnonymousUsers,
245
+ runAfterFind,
210
246
} ) ;
211
247
} ;
212
248
0 commit comments