Implement JS flipper client
Summary: Standardize WS implementation for JS environments. Why do we need a separate server implementation for browsers? Browser targets cannot authenticate via the default certificate exchange flow. We need a dedicated client for them that works over an insecure channel (without the cert exchange). Major changes: 1. Renamed `flipper-js-client-sdk` to `js-flipper` for consistency with `react-native-flipper` 2. Updated `js-flipper` implementation to match our other existing clients Documentation will be updated in a separate subsequent PR. https://fb.quip.com/2mboA0xbgoxl Reviewed By: mweststrate Differential Revision: D31688105 fbshipit-source-id: 418aa80e0fd86361c089cf54b0d44a8b4f748efa
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2be631ea4d
commit
9a47f41056
44
js/js-flipper/src/__tests__/utils.ts
Normal file
44
js/js-flipper/src/__tests__/utils.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
// TODO: Share with desktop/flipper-server-core/src/comms/__tests__/utils.ts
|
||||
export class WSMessageAccumulator {
|
||||
private messages: unknown[] = [];
|
||||
private newMessageSubscribers: ((newMessageContent: unknown) => void)[] = [];
|
||||
|
||||
constructor(private readonly timeout = 1000) {}
|
||||
|
||||
get newMessage(): Promise<unknown> {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timer = setTimeout(() => {
|
||||
reject(new Error('Timeout exceeded'));
|
||||
}, this.timeout);
|
||||
|
||||
this.newMessageSubscribers.push((newMessageContent: unknown) => {
|
||||
clearTimeout(timer);
|
||||
resolve(newMessageContent);
|
||||
});
|
||||
|
||||
this.consume();
|
||||
});
|
||||
}
|
||||
|
||||
add(newMessageContent: unknown) {
|
||||
this.messages.push(newMessageContent);
|
||||
this.consume();
|
||||
}
|
||||
|
||||
private consume() {
|
||||
if (this.messages.length && this.newMessageSubscribers.length) {
|
||||
const message = this.messages.shift();
|
||||
const subscriber = this.newMessageSubscribers.shift();
|
||||
subscriber!(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user