@@ -7,6 +7,9 @@ const moduleTypeWhiteList = ['core', 'prebid-module'];
7
7
8
8
export let storageCallbacks = [ ] ;
9
9
10
+ export const STORAGE_TYPE_LOCALSTORAGE = 'html5' ;
11
+ export const STORAGE_TYPE_COOKIES = 'cookie' ;
12
+
10
13
/**
11
14
* Storage options
12
15
* @typedef {Object } storageOptions
@@ -26,20 +29,22 @@ export let storageCallbacks = [];
26
29
* @param {storageOptions } options
27
30
*/
28
31
export function newStorageManager ( { gvlid, moduleName, bidderCode, moduleType} = { } , { bidderSettings = defaultBidderSettings } = { } ) {
29
- function isBidderAllowed ( ) {
32
+ function isBidderAllowed ( storageType ) {
30
33
if ( bidderCode == null ) {
31
34
return true ;
32
35
}
33
36
const storageAllowed = bidderSettings . get ( bidderCode , 'storageAllowed' ) ;
34
- return storageAllowed == null ? false : storageAllowed ;
37
+ if ( ! storageAllowed || storageAllowed === true ) return ! ! storageAllowed ;
38
+ if ( Array . isArray ( storageAllowed ) ) return storageAllowed . some ( ( e ) => e === storageType ) ;
39
+ return storageAllowed === storageType ;
35
40
}
36
41
37
42
if ( moduleTypeWhiteList . includes ( moduleType ) ) {
38
43
gvlid = gvlid || VENDORLESS_GVLID ;
39
44
}
40
45
41
- function isValid ( cb ) {
42
- if ( ! isBidderAllowed ( ) ) {
46
+ function isValid ( cb , storageType ) {
47
+ if ( ! isBidderAllowed ( storageType ) ) {
43
48
logInfo ( `bidderSettings denied access to device storage for bidder '${ bidderCode } '` ) ;
44
49
const result = { valid : false } ;
45
50
return cb ( result ) ;
@@ -63,6 +68,17 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
63
68
}
64
69
}
65
70
71
+ function schedule ( operation , storageType , done ) {
72
+ if ( done && typeof done === 'function' ) {
73
+ storageCallbacks . push ( function ( ) {
74
+ let result = isValid ( operation , storageType ) ;
75
+ done ( result ) ;
76
+ } ) ;
77
+ } else {
78
+ return isValid ( operation , storageType ) ;
79
+ }
80
+ }
81
+
66
82
/**
67
83
* @param {string } key
68
84
* @param {string } value
@@ -83,14 +99,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
83
99
document . cookie = `${ key } =${ encodeURIComponent ( value ) } ${ expiresPortion } ; path=/${ domainPortion } ${ sameSite ? `; SameSite=${ sameSite } ` : '' } ${ secure } ` ;
84
100
}
85
101
}
86
- if ( done && typeof done === 'function' ) {
87
- storageCallbacks . push ( function ( ) {
88
- let result = isValid ( cb ) ;
89
- done ( result ) ;
90
- } ) ;
91
- } else {
92
- return isValid ( cb ) ;
93
- }
102
+ return schedule ( cb , STORAGE_TYPE_COOKIES , done ) ;
94
103
} ;
95
104
96
105
/**
@@ -105,14 +114,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
105
114
}
106
115
return null ;
107
116
}
108
- if ( done && typeof done === 'function' ) {
109
- storageCallbacks . push ( function ( ) {
110
- let result = isValid ( cb ) ;
111
- done ( result ) ;
112
- } ) ;
113
- } else {
114
- return isValid ( cb ) ;
115
- }
117
+ return schedule ( cb , STORAGE_TYPE_COOKIES , done ) ;
116
118
} ;
117
119
118
120
/**
@@ -133,14 +135,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
133
135
}
134
136
return false ;
135
137
}
136
- if ( done && typeof done === 'function' ) {
137
- storageCallbacks . push ( function ( ) {
138
- let result = isValid ( cb ) ;
139
- done ( result ) ;
140
- } ) ;
141
- } else {
142
- return isValid ( cb ) ;
143
- }
138
+ return schedule ( cb , STORAGE_TYPE_LOCALSTORAGE , done ) ;
144
139
}
145
140
146
141
/**
@@ -153,14 +148,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
153
148
}
154
149
return false ;
155
150
}
156
- if ( done && typeof done === 'function' ) {
157
- storageCallbacks . push ( function ( ) {
158
- let result = isValid ( cb ) ;
159
- done ( result ) ;
160
- } ) ;
161
- } else {
162
- return isValid ( cb ) ;
163
- }
151
+ return schedule ( cb , STORAGE_TYPE_COOKIES , done ) ;
164
152
}
165
153
166
154
/**
@@ -173,14 +161,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
173
161
window . localStorage . setItem ( key , value ) ;
174
162
}
175
163
}
176
- if ( done && typeof done === 'function' ) {
177
- storageCallbacks . push ( function ( ) {
178
- let result = isValid ( cb ) ;
179
- done ( result ) ;
180
- } ) ;
181
- } else {
182
- return isValid ( cb ) ;
183
- }
164
+ return schedule ( cb , STORAGE_TYPE_LOCALSTORAGE , done ) ;
184
165
}
185
166
186
167
/**
@@ -194,14 +175,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
194
175
}
195
176
return null ;
196
177
}
197
- if ( done && typeof done === 'function' ) {
198
- storageCallbacks . push ( function ( ) {
199
- let result = isValid ( cb ) ;
200
- done ( result ) ;
201
- } ) ;
202
- } else {
203
- return isValid ( cb ) ;
204
- }
178
+ return schedule ( cb , STORAGE_TYPE_LOCALSTORAGE , done ) ;
205
179
}
206
180
207
181
/**
@@ -213,14 +187,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
213
187
window . localStorage . removeItem ( key ) ;
214
188
}
215
189
}
216
- if ( done && typeof done === 'function' ) {
217
- storageCallbacks . push ( function ( ) {
218
- let result = isValid ( cb ) ;
219
- done ( result ) ;
220
- } ) ;
221
- } else {
222
- return isValid ( cb ) ;
223
- }
190
+ return schedule ( cb , STORAGE_TYPE_LOCALSTORAGE , done ) ;
224
191
}
225
192
226
193
/**
@@ -237,14 +204,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
237
204
}
238
205
return false ;
239
206
}
240
- if ( done && typeof done === 'function' ) {
241
- storageCallbacks . push ( function ( ) {
242
- let result = isValid ( cb ) ;
243
- done ( result ) ;
244
- } ) ;
245
- } else {
246
- return isValid ( cb ) ;
247
- }
207
+ return schedule ( cb , STORAGE_TYPE_LOCALSTORAGE , done ) ;
248
208
}
249
209
250
210
/**
@@ -273,14 +233,7 @@ export function newStorageManager({gvlid, moduleName, bidderCode, moduleType} =
273
233
}
274
234
}
275
235
276
- if ( done && typeof done === 'function' ) {
277
- storageCallbacks . push ( function ( ) {
278
- let result = isValid ( cb ) ;
279
- done ( result ) ;
280
- } ) ;
281
- } else {
282
- return isValid ( cb ) ;
283
- }
236
+ return schedule ( cb , STORAGE_TYPE_COOKIES , done ) ;
284
237
}
285
238
286
239
return {
0 commit comments