@@ -25,9 +25,38 @@ defv = o => {
25
25
} ;
26
26
} ;
27
27
28
+ const uuid_compression = {
29
+ encode : v => {
30
+ const undecorated = v . replace ( / - / g, "" ) ;
31
+ const base64 = Buffer
32
+ . from ( undecorated , 'hex' )
33
+ . toString ( 'base64' ) ;
34
+ return base64 ;
35
+ } ,
36
+ decode : v => {
37
+ // if already a uuid, return that
38
+ if ( v . includes ( '-' ) ) return v ;
39
+
40
+ const undecorated = Buffer
41
+ . from ( v , 'base64' )
42
+ . toString ( 'hex' ) ;
43
+ return [
44
+ undecorated . slice ( 0 , 8 ) ,
45
+ undecorated . slice ( 8 , 12 ) ,
46
+ undecorated . slice ( 12 , 16 ) ,
47
+ undecorated . slice ( 16 , 20 ) ,
48
+ undecorated . slice ( 20 ) ,
49
+ ] . join ( '-' ) ;
50
+ }
51
+ } ;
52
+
28
53
const compression = {
29
54
auth : def ( {
30
- uuid : 'u' ,
55
+ uuid : {
56
+ short : 'u' ,
57
+ ...uuid_compression ,
58
+ } ,
59
+ version : 'v' ,
31
60
type : {
32
61
short : 't' ,
33
62
values : defv ( {
@@ -36,8 +65,14 @@ const compression = {
36
65
'app-under-user' : 'au' ,
37
66
} ) ,
38
67
} ,
39
- user_uid : 'uu' ,
40
- app_uid : 'au' ,
68
+ user_uid : {
69
+ short : 'uu' ,
70
+ ...uuid_compression ,
71
+ } ,
72
+ app_uid : {
73
+ short : 'au' ,
74
+ ...uuid_compression ,
75
+ } ,
41
76
} ) ,
42
77
} ;
43
78
@@ -76,6 +111,8 @@ class TokenService extends BaseService {
76
111
const context = this . compression [ scope ] ;
77
112
const payload = jwt . verify ( token , secret ) ;
78
113
114
+ console . log ( 'payloda' , payload )
115
+
79
116
return this . _decompress_payload ( context , payload ) ;
80
117
}
81
118
@@ -96,6 +133,8 @@ class TokenService extends BaseService {
96
133
if ( compress_info . short ) k = compress_info . short ;
97
134
if ( compress_info . values && compress_info . values . to_short [ v ] ) {
98
135
v = compress_info . values . to_short [ v ] ;
136
+ } else if ( compress_info . encode ) {
137
+ v = compress_info . encode ( v ) ;
99
138
}
100
139
101
140
compressed [ k ] = v ;
@@ -124,6 +163,8 @@ class TokenService extends BaseService {
124
163
if ( compress_info . short ) k = fullkey ;
125
164
if ( compress_info . values && compress_info . values . to_long [ v ] ) {
126
165
v = compress_info . values . to_long [ v ] ;
166
+ } else if ( compress_info . decode ) {
167
+ v = compress_info . decode ( v ) ;
127
168
}
128
169
129
170
decompressed [ k ] = v ;
@@ -133,38 +174,49 @@ class TokenService extends BaseService {
133
174
}
134
175
135
176
_test ( { assert } ) {
177
+ const U1 = '843f1d83-3c30-48c7-8964-62aff1a912d0' ;
178
+ const U2 = '42e9c36b-8a53-4c3e-8e18-fe549b10a44d' ;
179
+ const U3 = 'c22ef816-edb6-47c5-8c41-31c6520fa9e6' ;
136
180
// Test compression
137
181
{
138
182
const context = this . compression . auth ;
139
183
const payload = {
140
- uuid : '123' ,
184
+ uuid : U1 ,
141
185
type : 'session' ,
142
- user_uid : '456' ,
143
- app_uid : '789' ,
186
+ user_uid : U2 ,
187
+ app_uid : U3 ,
144
188
} ;
145
189
146
190
const compressed = this . _compress_payload ( context , payload ) ;
147
- assert ( ( ) => compressed . u === '123' ) ;
191
+ assert ( ( ) => compressed . u === uuid_compression . encode ( U1 ) ) ;
148
192
assert ( ( ) => compressed . t === 's' ) ;
149
- assert ( ( ) => compressed . uu === '456' ) ;
150
- assert ( ( ) => compressed . au === '789' ) ;
193
+ assert ( ( ) => compressed . uu === uuid_compression . encode ( U2 ) ) ;
194
+ assert ( ( ) => compressed . au === uuid_compression . encode ( U3 ) ) ;
151
195
}
152
196
153
197
// Test decompression
154
198
{
155
199
const context = this . compression . auth ;
156
200
const payload = {
157
- u : '123' ,
201
+ u : uuid_compression . encode ( U1 ) ,
158
202
t : 's' ,
159
- uu : '456' ,
160
- au : '789' ,
203
+ uu : uuid_compression . encode ( U2 ) ,
204
+ au : uuid_compression . encode ( U3 ) ,
161
205
} ;
162
206
163
207
const decompressed = this . _decompress_payload ( context , payload ) ;
164
- assert ( ( ) => decompressed . uuid === '123' ) ;
208
+ assert ( ( ) => decompressed . uuid === U1 ) ;
165
209
assert ( ( ) => decompressed . type === 'session' ) ;
166
- assert ( ( ) => decompressed . user_uid === '456' ) ;
167
- assert ( ( ) => decompressed . app_uid === '789' ) ;
210
+ assert ( ( ) => decompressed . user_uid === U2 ) ;
211
+ assert ( ( ) => decompressed . app_uid === U3 ) ;
212
+ }
213
+
214
+ // Test UUID preservation
215
+ {
216
+ const payload = { uuid : U1 } ;
217
+ const compressed = this . _compress_payload ( this . compression . auth , payload ) ;
218
+ const decompressed = this . _decompress_payload ( this . compression . auth , compressed ) ;
219
+ assert ( ( ) => decompressed . uuid === U1 ) ;
168
220
}
169
221
}
170
222
}
0 commit comments