File tree Expand file tree Collapse file tree 3 files changed +30
-7
lines changed
packages-exp/auth-exp/src
platform_browser/messagechannel Expand file tree Collapse file tree 3 files changed +30
-7
lines changed Original file line number Diff line number Diff line change
1
+ import { expect } from 'chai' ;
2
+ import { _generateEventId } from './event_id' ;
3
+
4
+ describe ( 'core/util/event_id' , ( ) => {
5
+ it ( 'sub-15 digit id' , ( ) => {
6
+ expect ( _generateEventId ( '' , 10 ) ) . to . have . length ( 10 ) ;
7
+ } ) ;
8
+
9
+ it ( '15 digit id' , ( ) => {
10
+ expect ( _generateEventId ( '' , 15 ) ) . to . have . length ( 15 ) ;
11
+ } ) ;
12
+
13
+ it ( 'above-15 digit id' , ( ) => {
14
+ expect ( _generateEventId ( '' , 20 ) ) . to . have . length ( 20 ) ;
15
+ } ) ;
16
+ } ) ;
Original file line number Diff line number Diff line change 15
15
* limitations under the License.
16
16
*/
17
17
18
- export function _generateEventId ( prefix ?: string ) : string {
19
- return `${ prefix ? prefix : '' } ${ Math . floor ( Math . random ( ) * 1000000000 ) } ` ;
18
+ const MAX_RANDOM_DIGITS = 15 ;
19
+
20
+ export function _generateEventId ( prefix = '' , digits = 10 ) : string {
21
+ // This array breaks down digits into a list of numbers, maxed at 15, that
22
+ // sums to digits. For example, 10 becomes [10] and 16 becomes [15, 1].
23
+ const digitBreakdown = Array ( Math . floor ( digits / MAX_RANDOM_DIGITS ) ) . fill ( MAX_RANDOM_DIGITS ) ;
24
+ if ( digits % MAX_RANDOM_DIGITS ) {
25
+ digitBreakdown . push ( digits % MAX_RANDOM_DIGITS ) ;
26
+ }
27
+
28
+ const random = digitBreakdown . map ( digits => Math . floor ( Math . random ( ) * Math . pow ( 10 , digits ) ) . toString ( ) . padStart ( digits , '0' ) ) . join ( '' ) ;
29
+ return prefix + random ;
20
30
}
Original file line number Diff line number Diff line change 15
15
* limitations under the License.
16
16
*/
17
17
18
+ import { _generateEventId } from '../../core/util/event_id' ;
18
19
import {
19
20
_SenderRequest ,
20
21
_EventType ,
@@ -32,10 +33,6 @@ interface MessageHandler {
32
33
onMessage : EventListenerOrEventListenerObject ;
33
34
}
34
35
35
- function generateEventId ( prefix = '' , digits = 20 ) : string {
36
- return `${ prefix } ${ Math . floor ( Math . random ( ) * Math . pow ( 10 , digits ) ) } ` ;
37
- }
38
-
39
36
/**
40
37
* Interface for sending messages and waiting for a completion response.
41
38
*
@@ -91,7 +88,7 @@ export class Sender {
91
88
let completionTimer : any ;
92
89
let handler : MessageHandler ;
93
90
return new Promise < _ReceiverMessageResponse < T > > ( ( resolve , reject ) => {
94
- const eventId = generateEventId ( ) ;
91
+ const eventId = _generateEventId ( '' , 20 ) ;
95
92
messageChannel . port1 . start ( ) ;
96
93
const ackTimer = setTimeout ( ( ) => {
97
94
reject ( new Error ( _MessageError . UNSUPPORTED_EVENT ) ) ;
You can’t perform that action at this time.
0 commit comments