Socket
Socket
Sign inDemoInstall

rsocket-core

Package Overview
Dependencies
Maintainers
6
Versions
31
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rsocket-core - npm Package Compare versions

Comparing version 0.0.27 to 0.0.28

build/RSocketError.js

165

build/AuthMetadata.js

@@ -1,55 +0,11 @@

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.encodeWellKnownAuthMetadata = encodeWellKnownAuthMetadata;
exports.encodeCustomAuthMetadata = encodeCustomAuthMetadata;
exports.encodeSimpleAuthMetadata = encodeSimpleAuthMetadata;
exports.encodeBearerAuthMetadata = encodeBearerAuthMetadata;
exports.decodeAuthMetadata = decodeAuthMetadata;
exports.decodeSimpleAuthPayload = decodeSimpleAuthPayload;
// @flow
var _LiteBuffer = require('./LiteBuffer');
var _RSocketBufferUtils = require('./RSocketBufferUtils');
var _WellKnownAuthType = _interopRequireWildcard(
require('./WellKnownAuthType')
);
function _getRequireWildcardCache() {
if (typeof WeakMap !== 'function') return null;
var cache = new WeakMap();
_getRequireWildcardCache = function () {
return cache;
};
return cache;
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
}
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
return {default: obj};
}
var cache = _getRequireWildcardCache();
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor =
Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor
? Object.getOwnPropertyDescriptor(obj, key)
: null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
import {LiteBuffer as Buffer} from './LiteBuffer';
import {createBuffer, toBuffer} from './RSocketBufferUtils';
import WellKnownAuthType, {
UNPARSEABLE_AUTH_TYPE,
UNKNOWN_RESERVED_AUTH_TYPE,
SIMPLE,
BEARER,
} from './WellKnownAuthType';

@@ -63,2 +19,12 @@ const authTypeIdBytesLength = 1;

type AuthMetadata = {|
type: {|
identifier: number,
string: string,
|},
payload: Buffer,
|};
type UsernameAndPassword = {|username: Buffer, password: Buffer|};
/**

@@ -71,13 +37,16 @@ * Encode Auth metadata with the given {@link WellKnownAuthType} and auth payload {@link Buffer}

*/
function encodeWellKnownAuthMetadata(authType, authPayloadBuffer) {
export function encodeWellKnownAuthMetadata(
authType: WellKnownAuthType,
authPayloadBuffer: Buffer,
): Buffer {
if (
authType === _WellKnownAuthType.UNPARSEABLE_AUTH_TYPE ||
authType === _WellKnownAuthType.UNKNOWN_RESERVED_AUTH_TYPE
authType === UNPARSEABLE_AUTH_TYPE ||
authType === UNKNOWN_RESERVED_AUTH_TYPE
) {
throw new Error(
`Illegal WellKnownAuthType[${authType.toString()}]. Only allowed AuthType should be used`
`Illegal WellKnownAuthType[${authType.toString()}]. Only allowed AuthType should be used`,
);
}
const buffer = (0, _RSocketBufferUtils.createBuffer)(authTypeIdBytesLength);
const buffer = createBuffer(authTypeIdBytesLength);

@@ -87,3 +56,3 @@ // eslint-disable-next-line no-bitwise

return _LiteBuffer.LiteBuffer.concat([buffer, authPayloadBuffer]);
return Buffer.concat([buffer, authPayloadBuffer]);
}

@@ -98,6 +67,7 @@

*/
function encodeCustomAuthMetadata(customAuthType, authPayloadBuffer) {
const customAuthTypeBuffer = (0, _RSocketBufferUtils.toBuffer)(
customAuthType
);
export function encodeCustomAuthMetadata(
customAuthType: string,
authPayloadBuffer: Buffer,
): Buffer {
const customAuthTypeBuffer = toBuffer(customAuthType);

@@ -112,8 +82,8 @@ if (customAuthTypeBuffer.byteLength !== customAuthType.length) {

throw new Error(
'Custom auth type must have a strictly positive length that fits on 7 unsigned bits, ie 1-128'
'Custom auth type must have a strictly positive length that fits on 7 unsigned bits, ie 1-128',
);
}
const buffer = (0, _RSocketBufferUtils.createBuffer)(
customAuthTypeBytesLength + customAuthTypeBuffer.byteLength
const buffer = createBuffer(
customAuthTypeBytesLength + customAuthTypeBuffer.byteLength,
);

@@ -126,3 +96,3 @@

return _LiteBuffer.LiteBuffer.concat([buffer, authPayloadBuffer]);
return Buffer.concat([buffer, authPayloadBuffer]);
}

@@ -137,5 +107,8 @@

*/
function encodeSimpleAuthMetadata(username, password) {
const usernameBuffer = (0, _RSocketBufferUtils.toBuffer)(username);
const passwordBuffer = (0, _RSocketBufferUtils.toBuffer)(password);
export function encodeSimpleAuthMetadata(
username: string | Buffer,
password: string | Buffer,
): Buffer {
const usernameBuffer = toBuffer(username);
const passwordBuffer = toBuffer(password);
const usernameLength = usernameBuffer.byteLength;

@@ -145,3 +118,3 @@

throw new Error(
`Username should be shorter than or equal to 65535 bytes length in UTF-8 encoding but the given was ${usernameLength}`
`Username should be shorter than or equal to 65535 bytes length in UTF-8 encoding but the given was ${usernameLength}`,
);

@@ -151,15 +124,9 @@ }

const capacity = authTypeIdBytesLength + usernameLengthBytesLength;
const buffer = (0, _RSocketBufferUtils.createBuffer)(capacity);
const buffer = createBuffer(capacity);
// eslint-disable-next-line no-bitwise
buffer.writeUInt8(
_WellKnownAuthType.SIMPLE.identifier | streamMetadataKnownMask
);
buffer.writeUInt8(SIMPLE.identifier | streamMetadataKnownMask);
buffer.writeUInt16BE(usernameLength, 1);
return _LiteBuffer.LiteBuffer.concat([
buffer,
usernameBuffer,
passwordBuffer,
]);
return Buffer.concat([buffer, usernameBuffer, passwordBuffer]);
}

@@ -173,12 +140,10 @@

*/
function encodeBearerAuthMetadata(token) {
const tokenBuffer = (0, _RSocketBufferUtils.toBuffer)(token);
const buffer = (0, _RSocketBufferUtils.createBuffer)(authTypeIdBytesLength);
export function encodeBearerAuthMetadata(token: string | Buffer): Buffer {
const tokenBuffer = toBuffer(token);
const buffer = createBuffer(authTypeIdBytesLength);
// eslint-disable-next-line no-bitwise
buffer.writeUInt8(
_WellKnownAuthType.BEARER.identifier | streamMetadataKnownMask
);
buffer.writeUInt8(BEARER.identifier | streamMetadataKnownMask);
return _LiteBuffer.LiteBuffer.concat([buffer, tokenBuffer]);
return Buffer.concat([buffer, tokenBuffer]);
}

@@ -192,6 +157,6 @@

*/
function decodeAuthMetadata(metadata) {
export function decodeAuthMetadata(metadata: Buffer): AuthMetadata {
if (metadata.byteLength < 1) {
throw new Error(
'Unable to decode Auth metadata. Not enough readable bytes'
'Unable to decode Auth metadata. Not enough readable bytes',
);

@@ -205,3 +170,3 @@ }

if (normalizedId !== lengthOrId) {
const authType = _WellKnownAuthType.default.fromIdentifier(normalizedId);
const authType = WellKnownAuthType.fromIdentifier(normalizedId);

@@ -220,3 +185,3 @@ return {

throw new Error(
'Unable to decode custom Auth type. Malformed length or auth type string'
'Unable to decode custom Auth type. Malformed length or auth type string',
);

@@ -228,5 +193,4 @@ }

customAuthTypeBytesLength,
customAuthTypeBytesLength + realLength
customAuthTypeBytesLength + realLength,
);
const payload = metadata.slice(realLength + customAuthTypeBytesLength);

@@ -237,3 +201,3 @@

type: {
identifier: _WellKnownAuthType.UNPARSEABLE_AUTH_TYPE.identifier,
identifier: UNPARSEABLE_AUTH_TYPE.identifier,
string: customAuthTypeString,

@@ -251,6 +215,8 @@ },

*/
function decodeSimpleAuthPayload(authPayload) {
export function decodeSimpleAuthPayload(
authPayload: Buffer,
): UsernameAndPassword {
if (authPayload.byteLength < usernameLengthBytesLength) {
throw new Error(
'Unable to decode Simple Auth Payload. Not enough readable bytes'
'Unable to decode Simple Auth Payload. Not enough readable bytes',
);

@@ -263,3 +229,3 @@ }

throw new Error(
'Unable to decode Simple Auth Payload. Not enough readable bytes'
'Unable to decode Simple Auth Payload. Not enough readable bytes',
);

@@ -270,7 +236,6 @@ }

usernameLengthBytesLength,
usernameLengthBytesLength + usernameLength
usernameLengthBytesLength + usernameLength,
);
const password = authPayload.slice(
usernameLengthBytesLength + usernameLength
usernameLengthBytesLength + usernameLength,
);

@@ -277,0 +242,0 @@

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.encodeCompositeMetadata = encodeCompositeMetadata;
exports.encodeAndAddCustomMetadata = encodeAndAddCustomMetadata;
exports.encodeAndAddWellKnownMetadata = encodeAndAddWellKnownMetadata;
exports.decodeMimeAndContentBuffersSlices = decodeMimeAndContentBuffersSlices;
exports.decodeMimeTypeFromMimeBuffer = decodeMimeTypeFromMimeBuffer;
exports.encodeCustomMetadataHeader = encodeCustomMetadataHeader;
exports.encodeWellKnownMetadataHeader = encodeWellKnownMetadataHeader;
exports.decodeCompositeMetadata = decodeCompositeMetadata;
exports.WellKnownMimeTypeEntry = exports.ReservedMimeTypeEntry = exports.ExplicitMimeTimeEntry = exports.CompositeMetadata = void 0;
// @flow
var _LiteBuffer = require('./LiteBuffer');
var _RSocketBufferUtils = require('./RSocketBufferUtils');
import {LiteBuffer as Buffer} from './LiteBuffer';
import {readUInt24BE, writeUInt24BE} from './RSocketBufferUtils';
import {createBuffer} from './RSocketBufferUtils';
import WellKnownMimeType, {
UNKNOWN_RESERVED_MIME_TYPE,
UNPARSEABLE_MIME_TYPE,
} from './WellKnownMimeType';
var _WellKnownMimeType = _interopRequireWildcard(
require('./WellKnownMimeType')
);
function _getRequireWildcardCache() {
if (typeof WeakMap !== 'function') return null;
var cache = new WeakMap();
_getRequireWildcardCache = function () {
return cache;
};
return cache;
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
}
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
return {default: obj};
}
var cache = _getRequireWildcardCache();
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor =
Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor
? Object.getOwnPropertyDescriptor(obj, key)
: null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
// $FlowFixMe
export class CompositeMetadata implements Iterable<Entry> {
_buffer: Buffer;
// $FlowFixMe
class CompositeMetadata {
constructor(buffer) {
constructor(buffer: Buffer) {
this._buffer = buffer;
}
iterator() {
iterator(): Iterator<Entry> {
return decodeCompositeMetadata(this._buffer);

@@ -71,3 +25,3 @@ }

// $FlowFixMe
[Symbol.iterator]() {
[Symbol.iterator](): Iterator<Entry> {
return decodeCompositeMetadata(this._buffer);

@@ -83,5 +37,9 @@ }

* @returns {Buffer}
*/ exports.CompositeMetadata = CompositeMetadata;
function encodeCompositeMetadata(metadata) {
let encodedCompositeMetadata = (0, _RSocketBufferUtils.createBuffer)(0);
*/
export function encodeCompositeMetadata(
metadata:
| Map<string | WellKnownMimeType | number, Buffer | (() => Buffer)>
| Array<[string | WellKnownMimeType | number, Buffer | (() => Buffer)]>,
): Buffer {
let encodedCompositeMetadata = createBuffer(0);
for (const [metadataKey, metadataValue] of metadata) {

@@ -92,3 +50,3 @@ const metadataRealValue =

if (
metadataKey instanceof _WellKnownMimeType.default ||
metadataKey instanceof WellKnownMimeType ||
typeof metadataKey === 'number' ||

@@ -99,4 +57,4 @@ metadataKey.constructor.name === 'WellKnownMimeType'

encodedCompositeMetadata,
metadataKey,
metadataRealValue
(metadataKey: any),
metadataRealValue,
);

@@ -106,4 +64,4 @@ } else {

encodedCompositeMetadata,
metadataKey,
metadataRealValue
(metadataKey: any),
metadataRealValue,
);

@@ -130,12 +88,14 @@ }

// see #encodeMetadataHeader(ByteBufAllocator, String, int)
function encodeAndAddCustomMetadata(
compositeMetaData,
customMimeType,
metadata
) {
return _LiteBuffer.LiteBuffer.concat([
compositeMetaData,
encodeCustomMetadataHeader(customMimeType, metadata.byteLength),
metadata,
]);
export function encodeAndAddCustomMetadata(
compositeMetaData: Buffer,
customMimeType: string,
metadata: Buffer,
): Buffer {
return Buffer.concat(
([
compositeMetaData,
encodeCustomMetadataHeader(customMimeType, metadata.byteLength),
metadata,
]: Buffer[]),
);
}

@@ -153,20 +113,22 @@

// see #encodeMetadataHeader(ByteBufAllocator, byte, int)
function encodeAndAddWellKnownMetadata(
compositeMetadata,
knownMimeType,
metadata
) {
let mimeTypeId;
export function encodeAndAddWellKnownMetadata(
compositeMetadata: Buffer,
knownMimeType: WellKnownMimeType | number,
metadata: Buffer,
): Buffer {
let mimeTypeId: number;
if (Number.isInteger(knownMimeType)) {
mimeTypeId = knownMimeType;
mimeTypeId = ((knownMimeType: any): number);
} else {
mimeTypeId = knownMimeType.identifier;
mimeTypeId = ((knownMimeType: any): WellKnownMimeType).identifier;
}
return _LiteBuffer.LiteBuffer.concat([
compositeMetadata,
encodeWellKnownMetadataHeader(mimeTypeId, metadata.byteLength),
metadata,
]);
return Buffer.concat(
([
compositeMetadata,
encodeWellKnownMetadataHeader(mimeTypeId, metadata.byteLength),
metadata,
]: Buffer[]),
);
}

@@ -204,5 +166,8 @@

*/
function decodeMimeAndContentBuffersSlices(compositeMetadata, entryIndex) {
const mimeIdOrLength = compositeMetadata.readInt8(entryIndex);
let mime;
export function decodeMimeAndContentBuffersSlices(
compositeMetadata: Buffer,
entryIndex: number,
): Buffer[] {
const mimeIdOrLength: number = compositeMetadata.readInt8(entryIndex);
let mime: Buffer;
let toSkip = entryIndex;

@@ -233,3 +198,3 @@ if (

throw new Error(
'Metadata is malformed. Inappropriately formed Mime Length'
'Metadata is malformed. Inappropriately formed Mime Length',
);

@@ -241,6 +206,3 @@ }

// ensures the length medium can be read
const metadataLength = (0, _RSocketBufferUtils.readUInt24BE)(
compositeMetadata,
toSkip
);
const metadataLength = readUInt24BE(compositeMetadata, toSkip);
toSkip += 3;

@@ -252,3 +214,3 @@ if (compositeMetadata.byteLength >= metadataLength + toSkip) {

throw new Error(
'Metadata is malformed. Inappropriately formed Metadata Length or malformed content'
'Metadata is malformed. Inappropriately formed Metadata Length or malformed content',
);

@@ -258,3 +220,3 @@ }

throw new Error(
'Metadata is malformed. Metadata Length is absent or malformed'
'Metadata is malformed. Metadata Length is absent or malformed',
);

@@ -282,3 +244,5 @@ }

*/
function decodeMimeTypeFromMimeBuffer(flyweightMimeBuffer) {
export function decodeMimeTypeFromMimeBuffer(
flyweightMimeBuffer: Buffer,
): string {
if (flyweightMimeBuffer.length < 2) {

@@ -293,6 +257,7 @@ throw new Error('Unable to decode explicit MIME type');

function encodeCustomMetadataHeader(customMime, metadataLength) {
const metadataHeader = (0, _RSocketBufferUtils.createBuffer)(
4 + customMime.length
);
export function encodeCustomMetadataHeader(
customMime: string,
metadataLength: number,
): Buffer {
const metadataHeader: Buffer = createBuffer(4 + customMime.length);
// reserve 1 byte for the customMime length

@@ -305,3 +270,3 @@ // /!\ careful not to read that first byte, which is random at this point

// (which produces the right result since ASCII chars are still encoded on 1 byte in UTF8)
const customMimeLength = metadataHeader.write(customMime, 1);
const customMimeLength: number = metadataHeader.write(customMime, 1);
if (!isAscii(metadataHeader, 1)) {

@@ -312,3 +277,3 @@ throw new Error('Custom mime type must be US_ASCII characters only');

throw new Error(
'Custom mime type must have a strictly positive length that fits on 7 unsigned bits, ie 1-128'
'Custom mime type must have a strictly positive length that fits on 7 unsigned bits, ie 1-128',
);

@@ -320,7 +285,3 @@ }

(0, _RSocketBufferUtils.writeUInt24BE)(
metadataHeader,
metadataLength,
customMimeLength + 1
);
writeUInt24BE(metadataHeader, metadataLength, customMimeLength + 1);

@@ -343,7 +304,10 @@ return metadataHeader;

*/
function encodeWellKnownMetadataHeader(mimeType, metadataLength) {
const buffer = _LiteBuffer.LiteBuffer.alloc(4);
export function encodeWellKnownMetadataHeader(
mimeType: number,
metadataLength: number,
): Buffer {
const buffer: Buffer = Buffer.alloc(4);
buffer.writeUInt8(mimeType | STREAM_METADATA_KNOWN_MASK);
(0, _RSocketBufferUtils.writeUInt24BE)(buffer, metadataLength, 1);
writeUInt24BE(buffer, metadataLength, 1);

@@ -360,3 +324,5 @@ return buffer;

*/
function* decodeCompositeMetadata(buffer) {
export function* decodeCompositeMetadata(
buffer: Buffer,
): Generator<Entry, void, any> {
const length = buffer.byteLength;

@@ -384,4 +350,4 @@ let entryIndex = 0;

const id = decodeMimeIdFromMimeBuffer(header);
const type = _WellKnownMimeType.default.fromIdentifier(id);
if (_WellKnownMimeType.UNKNOWN_RESERVED_MIME_TYPE === type) {
const type = WellKnownMimeType.fromIdentifier(id);
if (UNKNOWN_RESERVED_MIME_TYPE === type) {
yield new ReservedMimeTypeEntry(data, id);

@@ -395,4 +361,23 @@ continue;

class ExplicitMimeTimeEntry {
constructor(content, type) {
export interface Entry {
/**
* Returns the un-decoded content of the {@link Entry}.
*
* @return the un-decoded content of the {@link Entry}
*/
+content: Buffer,
/**
* Returns the MIME type of the entry, if it can be decoded.
*
* @return the MIME type of the entry, if it can be decoded, otherwise {@code null}.
*/
+mimeType: ?string,
}
export class ExplicitMimeTimeEntry implements Entry {
_content: Buffer;
_type: string;
constructor(content: Buffer, type: string) {
this._content = content;

@@ -402,14 +387,16 @@ this._type = type;

get content() {
get content(): Buffer {
return this._content;
}
get mimeType() {
get mimeType(): string {
return this._type;
}
}
exports.ExplicitMimeTimeEntry = ExplicitMimeTimeEntry;
class ReservedMimeTypeEntry {
constructor(content, type) {
export class ReservedMimeTypeEntry implements Entry {
_content: Buffer;
_type: number;
constructor(content: Buffer, type: number) {
this._content = content;

@@ -419,3 +406,3 @@ this._type = type;

get content() {
get content(): Buffer {
return this._content;

@@ -428,3 +415,3 @@ }

*/
get mimeType() {
get mimeType(): ?string {
return undefined;

@@ -439,10 +426,12 @@ }

*/
get type() {
get type(): number {
return this._type;
}
}
exports.ReservedMimeTypeEntry = ReservedMimeTypeEntry;
class WellKnownMimeTypeEntry {
constructor(content, type) {
export class WellKnownMimeTypeEntry implements Entry {
_content: Buffer;
_type: WellKnownMimeType;
constructor(content: Buffer, type: WellKnownMimeType) {
this._content = content;

@@ -452,7 +441,7 @@ this._type = type;

get content() {
get content(): Buffer {
return this._content;
}
get mimeType() {
get mimeType(): string {
return this._type.string;

@@ -466,3 +455,3 @@ }

*/
get type() {
get type(): WellKnownMimeType {
return this._type;

@@ -486,6 +475,6 @@ }

* @see #decodeMimeTypeFromMimeBuffer(ByteBuf)
*/ exports.WellKnownMimeTypeEntry = WellKnownMimeTypeEntry;
function decodeMimeIdFromMimeBuffer(mimeBuffer) {
*/
function decodeMimeIdFromMimeBuffer(mimeBuffer: Buffer): number {
if (!isWellKnownMimeType(mimeBuffer)) {
return _WellKnownMimeType.UNPARSEABLE_MIME_TYPE.identifier;
return UNPARSEABLE_MIME_TYPE.identifier;
}

@@ -495,3 +484,7 @@ return mimeBuffer.readInt8() & STREAM_METADATA_LENGTH_MASK;

function computeNextEntryIndex(currentEntryIndex, headerSlice, contentSlice) {
function computeNextEntryIndex(
currentEntryIndex: number,
headerSlice: Buffer,
contentSlice: Buffer,
): number {
return (

@@ -505,3 +498,3 @@ currentEntryIndex +

function isWellKnownMimeType(header) {
function isWellKnownMimeType(header: Buffer): boolean {
return header.byteLength === 1;

@@ -513,3 +506,3 @@ }

function isAscii(buffer, offset) {
function isAscii(buffer: Buffer, offset: number): boolean {
let isAscii = true;

@@ -516,0 +509,0 @@ for (let i = offset, length = buffer.length; i < length; i++) {

@@ -15,803 +15,178 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
Object.defineProperty(exports, 'RSocketClient', {
enumerable: true,
get: function () {
return _RSocketClient.default;
},
});
Object.defineProperty(exports, 'RSocketServer', {
enumerable: true,
get: function () {
return _RSocketServer.default;
},
});
Object.defineProperty(exports, 'RSocketResumableTransport', {
enumerable: true,
get: function () {
return _RSocketResumableTransport.default;
},
});
Object.defineProperty(exports, 'WellKnownMimeType', {
enumerable: true,
get: function () {
return _WellKnownMimeType.default;
},
});
Object.defineProperty(exports, 'UNPARSEABLE_MIME_TYPE', {
enumerable: true,
get: function () {
return _WellKnownMimeType.UNPARSEABLE_MIME_TYPE;
},
});
Object.defineProperty(exports, 'UNKNOWN_RESERVED_MIME_TYPE', {
enumerable: true,
get: function () {
return _WellKnownMimeType.UNKNOWN_RESERVED_MIME_TYPE;
},
});
Object.defineProperty(exports, 'APPLICATION_AVRO', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_AVRO;
},
});
Object.defineProperty(exports, 'APPLICATION_CBOR', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_CBOR;
},
});
Object.defineProperty(exports, 'APPLICATION_GRAPHQL', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_GRAPHQL;
},
});
Object.defineProperty(exports, 'APPLICATION_GZIP', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_GZIP;
},
});
Object.defineProperty(exports, 'APPLICATION_JAVASCRIPT', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_JAVASCRIPT;
},
});
Object.defineProperty(exports, 'APPLICATION_JSON', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_JSON;
},
});
Object.defineProperty(exports, 'APPLICATION_OCTET_STREAM', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_OCTET_STREAM;
},
});
Object.defineProperty(exports, 'APPLICATION_PDF', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_PDF;
},
});
Object.defineProperty(exports, 'APPLICATION_THRIFT', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_THRIFT;
},
});
Object.defineProperty(exports, 'APPLICATION_PROTOBUF', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_PROTOBUF;
},
});
Object.defineProperty(exports, 'APPLICATION_XML', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_XML;
},
});
Object.defineProperty(exports, 'APPLICATION_ZIP', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_ZIP;
},
});
Object.defineProperty(exports, 'AUDIO_AAC', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_AAC;
},
});
Object.defineProperty(exports, 'AUDIO_MP3', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_MP3;
},
});
Object.defineProperty(exports, 'AUDIO_MP4', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_MP4;
},
});
Object.defineProperty(exports, 'AUDIO_MPEG3', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_MPEG3;
},
});
Object.defineProperty(exports, 'AUDIO_MPEG', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_MPEG;
},
});
Object.defineProperty(exports, 'AUDIO_OGG', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_OGG;
},
});
Object.defineProperty(exports, 'AUDIO_OPUS', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_OPUS;
},
});
Object.defineProperty(exports, 'AUDIO_VORBIS', {
enumerable: true,
get: function () {
return _WellKnownMimeType.AUDIO_VORBIS;
},
});
Object.defineProperty(exports, 'IMAGE_BMP', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_BMP;
},
});
Object.defineProperty(exports, 'IMAGE_GIG', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_GIG;
},
});
Object.defineProperty(exports, 'IMAGE_HEIC_SEQUENCE', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_HEIC_SEQUENCE;
},
});
Object.defineProperty(exports, 'IMAGE_HEIC', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_HEIC;
},
});
Object.defineProperty(exports, 'IMAGE_HEIF_SEQUENCE', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_HEIF_SEQUENCE;
},
});
Object.defineProperty(exports, 'IMAGE_HEIF', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_HEIF;
},
});
Object.defineProperty(exports, 'IMAGE_JPEG', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_JPEG;
},
});
Object.defineProperty(exports, 'IMAGE_PNG', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_PNG;
},
});
Object.defineProperty(exports, 'IMAGE_TIFF', {
enumerable: true,
get: function () {
return _WellKnownMimeType.IMAGE_TIFF;
},
});
Object.defineProperty(exports, 'MULTIPART_MIXED', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MULTIPART_MIXED;
},
});
Object.defineProperty(exports, 'TEXT_CSS', {
enumerable: true,
get: function () {
return _WellKnownMimeType.TEXT_CSS;
},
});
Object.defineProperty(exports, 'TEXT_CSV', {
enumerable: true,
get: function () {
return _WellKnownMimeType.TEXT_CSV;
},
});
Object.defineProperty(exports, 'TEXT_HTML', {
enumerable: true,
get: function () {
return _WellKnownMimeType.TEXT_HTML;
},
});
Object.defineProperty(exports, 'TEXT_PLAIN', {
enumerable: true,
get: function () {
return _WellKnownMimeType.TEXT_PLAIN;
},
});
Object.defineProperty(exports, 'TEXT_XML', {
enumerable: true,
get: function () {
return _WellKnownMimeType.TEXT_XML;
},
});
Object.defineProperty(exports, 'VIDEO_H264', {
enumerable: true,
get: function () {
return _WellKnownMimeType.VIDEO_H264;
},
});
Object.defineProperty(exports, 'VIDEO_H265', {
enumerable: true,
get: function () {
return _WellKnownMimeType.VIDEO_H265;
},
});
Object.defineProperty(exports, 'VIDEO_VP8', {
enumerable: true,
get: function () {
return _WellKnownMimeType.VIDEO_VP8;
},
});
Object.defineProperty(exports, 'APPLICATION_HESSIAN', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_HESSIAN;
},
});
Object.defineProperty(exports, 'APPLICATION_JAVA_OBJECT', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_JAVA_OBJECT;
},
});
Object.defineProperty(exports, 'APPLICATION_CLOUDEVENTS_JSON', {
enumerable: true,
get: function () {
return _WellKnownMimeType.APPLICATION_CLOUDEVENTS_JSON;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_MIMETYPE', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_MIMETYPE;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_ACCEPT_MIMETYPES', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_ACCEPT_MIMETYPES;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_AUTHENTICATION', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_AUTHENTICATION;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_TRACING_ZIPKIN', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_TRACING_ZIPKIN;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_ROUTING', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_ROUTING;
},
});
Object.defineProperty(exports, 'MESSAGE_RSOCKET_COMPOSITE_METADATA', {
enumerable: true,
get: function () {
return _WellKnownMimeType.MESSAGE_RSOCKET_COMPOSITE_METADATA;
},
});
Object.defineProperty(exports, 'WellKnownAuthType', {
enumerable: true,
get: function () {
return _WellKnownAuthType.default;
},
});
Object.defineProperty(exports, 'UNPARSEABLE_AUTH_TYPE', {
enumerable: true,
get: function () {
return _WellKnownAuthType.UNPARSEABLE_AUTH_TYPE;
},
});
Object.defineProperty(exports, 'UNKNOWN_RESERVED_AUTH_TYPE', {
enumerable: true,
get: function () {
return _WellKnownAuthType.UNKNOWN_RESERVED_AUTH_TYPE;
},
});
Object.defineProperty(exports, 'SIMPLE', {
enumerable: true,
get: function () {
return _WellKnownAuthType.SIMPLE;
},
});
Object.defineProperty(exports, 'BEARER', {
enumerable: true,
get: function () {
return _WellKnownAuthType.BEARER;
},
});
Object.defineProperty(exports, 'CONNECTION_STREAM_ID', {
enumerable: true,
get: function () {
return _RSocketFrame.CONNECTION_STREAM_ID;
},
});
Object.defineProperty(exports, 'ERROR_CODES', {
enumerable: true,
get: function () {
return _RSocketFrame.ERROR_CODES;
},
});
Object.defineProperty(exports, 'ERROR_EXPLANATIONS', {
enumerable: true,
get: function () {
return _RSocketFrame.ERROR_EXPLANATIONS;
},
});
Object.defineProperty(exports, 'FLAGS_MASK', {
enumerable: true,
get: function () {
return _RSocketFrame.FLAGS_MASK;
},
});
Object.defineProperty(exports, 'FLAGS', {
enumerable: true,
get: function () {
return _RSocketFrame.FLAGS;
},
});
Object.defineProperty(exports, 'FRAME_TYPE_OFFFSET', {
enumerable: true,
get: function () {
return _RSocketFrame.FRAME_TYPE_OFFFSET;
},
});
Object.defineProperty(exports, 'FRAME_TYPES', {
enumerable: true,
get: function () {
return _RSocketFrame.FRAME_TYPES;
},
});
Object.defineProperty(exports, 'MAX_CODE', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_CODE;
},
});
Object.defineProperty(exports, 'MAX_KEEPALIVE', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_KEEPALIVE;
},
});
Object.defineProperty(exports, 'MAX_LIFETIME', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_LIFETIME;
},
});
Object.defineProperty(exports, 'MAX_MIME_LENGTH', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_MIME_LENGTH;
},
});
Object.defineProperty(exports, 'MAX_RESUME_LENGTH', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_RESUME_LENGTH;
},
});
Object.defineProperty(exports, 'MAX_STREAM_ID', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_STREAM_ID;
},
});
Object.defineProperty(exports, 'MAX_VERSION', {
enumerable: true,
get: function () {
return _RSocketFrame.MAX_VERSION;
},
});
Object.defineProperty(exports, 'createErrorFromFrame', {
enumerable: true,
get: function () {
return _RSocketFrame.createErrorFromFrame;
},
});
Object.defineProperty(exports, 'getErrorCodeExplanation', {
enumerable: true,
get: function () {
return _RSocketFrame.getErrorCodeExplanation;
},
});
Object.defineProperty(exports, 'isComplete', {
enumerable: true,
get: function () {
return _RSocketFrame.isComplete;
},
});
Object.defineProperty(exports, 'isIgnore', {
enumerable: true,
get: function () {
return _RSocketFrame.isIgnore;
},
});
Object.defineProperty(exports, 'isLease', {
enumerable: true,
get: function () {
return _RSocketFrame.isLease;
},
});
Object.defineProperty(exports, 'isMetadata', {
enumerable: true,
get: function () {
return _RSocketFrame.isMetadata;
},
});
Object.defineProperty(exports, 'isNext', {
enumerable: true,
get: function () {
return _RSocketFrame.isNext;
},
});
Object.defineProperty(exports, 'isRespond', {
enumerable: true,
get: function () {
return _RSocketFrame.isRespond;
},
});
Object.defineProperty(exports, 'isResumeEnable', {
enumerable: true,
get: function () {
return _RSocketFrame.isResumeEnable;
},
});
Object.defineProperty(exports, 'printFrame', {
enumerable: true,
get: function () {
return _RSocketFrame.printFrame;
},
});
Object.defineProperty(exports, 'deserializeFrame', {
enumerable: true,
get: function () {
return _RSocketBinaryFraming.deserializeFrame;
},
});
Object.defineProperty(exports, 'deserializeFrameWithLength', {
enumerable: true,
get: function () {
return _RSocketBinaryFraming.deserializeFrameWithLength;
},
});
Object.defineProperty(exports, 'deserializeFrames', {
enumerable: true,
get: function () {
return _RSocketBinaryFraming.deserializeFrames;
},
});
Object.defineProperty(exports, 'serializeFrame', {
enumerable: true,
get: function () {
return _RSocketBinaryFraming.serializeFrame;
},
});
Object.defineProperty(exports, 'serializeFrameWithLength', {
enumerable: true,
get: function () {
return _RSocketBinaryFraming.serializeFrameWithLength;
},
});
Object.defineProperty(exports, 'byteLength', {
enumerable: true,
get: function () {
return _RSocketBufferUtils.byteLength;
},
});
Object.defineProperty(exports, 'createBuffer', {
enumerable: true,
get: function () {
return _RSocketBufferUtils.createBuffer;
},
});
Object.defineProperty(exports, 'readUInt24BE', {
enumerable: true,
get: function () {
return _RSocketBufferUtils.readUInt24BE;
},
});
Object.defineProperty(exports, 'toBuffer', {
enumerable: true,
get: function () {
return _RSocketBufferUtils.toBuffer;
},
});
Object.defineProperty(exports, 'writeUInt24BE', {
enumerable: true,
get: function () {
return _RSocketBufferUtils.writeUInt24BE;
},
});
Object.defineProperty(exports, 'BufferEncoders', {
enumerable: true,
get: function () {
return _RSocketEncoding.BufferEncoders;
},
});
Object.defineProperty(exports, 'BufferEncoder', {
enumerable: true,
get: function () {
return _RSocketEncoding.BufferEncoder;
},
});
Object.defineProperty(exports, 'Utf8Encoders', {
enumerable: true,
get: function () {
return _RSocketEncoding.Utf8Encoders;
},
});
Object.defineProperty(exports, 'UTF8Encoder', {
enumerable: true,
get: function () {
return _RSocketEncoding.UTF8Encoder;
},
});
Object.defineProperty(exports, 'IdentitySerializer', {
enumerable: true,
get: function () {
return _RSocketSerialization.IdentitySerializer;
},
});
Object.defineProperty(exports, 'IdentitySerializers', {
enumerable: true,
get: function () {
return _RSocketSerialization.IdentitySerializers;
},
});
Object.defineProperty(exports, 'JsonSerializer', {
enumerable: true,
get: function () {
return _RSocketSerialization.JsonSerializer;
},
});
Object.defineProperty(exports, 'JsonSerializers', {
enumerable: true,
get: function () {
return _RSocketSerialization.JsonSerializers;
},
});
Object.defineProperty(exports, 'Leases', {
enumerable: true,
get: function () {
return _RSocketLease.Leases;
},
});
Object.defineProperty(exports, 'Lease', {
enumerable: true,
get: function () {
return _RSocketLease.Lease;
},
});
Object.defineProperty(exports, 'CompositeMetadata', {
enumerable: true,
get: function () {
return _CompositeMetadata.CompositeMetadata;
},
});
Object.defineProperty(exports, 'ReservedMimeTypeEntry', {
enumerable: true,
get: function () {
return _CompositeMetadata.ReservedMimeTypeEntry;
},
});
Object.defineProperty(exports, 'WellKnownMimeTypeEntry', {
enumerable: true,
get: function () {
return _CompositeMetadata.WellKnownMimeTypeEntry;
},
});
Object.defineProperty(exports, 'ExplicitMimeTimeEntry', {
enumerable: true,
get: function () {
return _CompositeMetadata.ExplicitMimeTimeEntry;
},
});
Object.defineProperty(exports, 'encodeAndAddCustomMetadata', {
enumerable: true,
get: function () {
return _CompositeMetadata.encodeAndAddCustomMetadata;
},
});
Object.defineProperty(exports, 'encodeAndAddWellKnownMetadata', {
enumerable: true,
get: function () {
return _CompositeMetadata.encodeAndAddWellKnownMetadata;
},
});
Object.defineProperty(exports, 'encodeCompositeMetadata', {
enumerable: true,
get: function () {
return _CompositeMetadata.encodeCompositeMetadata;
},
});
Object.defineProperty(exports, 'decodeCompositeMetadata', {
enumerable: true,
get: function () {
return _CompositeMetadata.decodeCompositeMetadata;
},
});
Object.defineProperty(exports, 'RoutingMetadata', {
enumerable: true,
get: function () {
return _RoutingMetadata.RoutingMetadata;
},
});
Object.defineProperty(exports, 'encodeRoute', {
enumerable: true,
get: function () {
return _RoutingMetadata.encodeRoute;
},
});
Object.defineProperty(exports, 'encodeRoutes', {
enumerable: true,
get: function () {
return _RoutingMetadata.encodeRoutes;
},
});
Object.defineProperty(exports, 'decodeRoutes', {
enumerable: true,
get: function () {
return _RoutingMetadata.decodeRoutes;
},
});
Object.defineProperty(exports, 'encodeSimpleAuthMetadata', {
enumerable: true,
get: function () {
return _AuthMetadata.encodeSimpleAuthMetadata;
},
});
Object.defineProperty(exports, 'encodeBearerAuthMetadata', {
enumerable: true,
get: function () {
return _AuthMetadata.encodeBearerAuthMetadata;
},
});
Object.defineProperty(exports, 'encodeWellKnownAuthMetadata', {
enumerable: true,
get: function () {
return _AuthMetadata.encodeWellKnownAuthMetadata;
},
});
Object.defineProperty(exports, 'encodeCustomAuthMetadata', {
enumerable: true,
get: function () {
return _AuthMetadata.encodeCustomAuthMetadata;
},
});
Object.defineProperty(exports, 'decodeSimpleAuthPayload', {
enumerable: true,
get: function () {
return _AuthMetadata.decodeSimpleAuthPayload;
},
});
Object.defineProperty(exports, 'decodeAuthMetadata', {
enumerable: true,
get: function () {
return _AuthMetadata.decodeAuthMetadata;
},
});
var _RSocketClient = _interopRequireDefault(require('./RSocketClient'));
export type {ClientConfig} from './RSocketClient';
var _RSocketServer = _interopRequireDefault(require('./RSocketServer'));
export type {Entry} from './CompositeMetadata';
var _RSocketResumableTransport = _interopRequireDefault(
require('./RSocketResumableTransport')
);
export type {ServerConfig, TransportServer} from './RSocketServer';
var _WellKnownMimeType = _interopRequireWildcard(
require('./WellKnownMimeType')
);
export type {Encodable} from 'rsocket-types';
var _WellKnownAuthType = _interopRequireWildcard(
require('./WellKnownAuthType')
);
export type {Encoder, Encoders} from './RSocketEncoding';
var _RSocketFrame = require('./RSocketFrame');
export type {Serializer, PayloadSerializers} from './RSocketSerialization';
var _RSocketBinaryFraming = require('./RSocketBinaryFraming');
export type {LeaseStats} from './RSocketLease';
var _RSocketBufferUtils = require('./RSocketBufferUtils');
import RSocketClient from './RSocketClient';
var _RSocketEncoding = require('./RSocketEncoding');
export {RSocketClient};
var _RSocketSerialization = require('./RSocketSerialization');
import RSocketServer from './RSocketServer';
var _RSocketLease = require('./RSocketLease');
export {RSocketServer};
var _CompositeMetadata = require('./CompositeMetadata');
import RSocketError from './RSocketError';
var _RoutingMetadata = require('./RoutingMetadata');
export {RSocketError};
var _AuthMetadata = require('./AuthMetadata');
function _getRequireWildcardCache() {
if (typeof WeakMap !== 'function') return null;
var cache = new WeakMap();
_getRequireWildcardCache = function () {
return cache;
};
return cache;
}
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
}
if (obj === null || (typeof obj !== 'object' && typeof obj !== 'function')) {
return {default: obj};
}
var cache = _getRequireWildcardCache();
if (cache && cache.has(obj)) {
return cache.get(obj);
}
var newObj = {};
var hasPropertyDescriptor =
Object.defineProperty && Object.getOwnPropertyDescriptor;
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) {
var desc = hasPropertyDescriptor
? Object.getOwnPropertyDescriptor(obj, key)
: null;
if (desc && (desc.get || desc.set)) {
Object.defineProperty(newObj, key, desc);
} else {
newObj[key] = obj[key];
}
}
}
newObj.default = obj;
if (cache) {
cache.set(obj, newObj);
}
return newObj;
}
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import RSocketResumableTransport from './RSocketResumableTransport';
export {RSocketResumableTransport};
import WellKnownMimeType from './WellKnownMimeType';
export {WellKnownMimeType};
import WellKnownAuthType from './WellKnownAuthType';
export {WellKnownAuthType};
export {
CONNECTION_STREAM_ID,
ERROR_CODES,
ERROR_EXPLANATIONS,
FLAGS_MASK,
FLAGS,
FRAME_TYPE_OFFFSET,
FRAME_TYPES,
MAX_CODE,
MAX_KEEPALIVE,
MAX_LIFETIME,
MAX_MIME_LENGTH,
MAX_RESUME_LENGTH,
MAX_STREAM_ID,
MAX_VERSION,
createErrorFromFrame,
getErrorCodeExplanation,
isComplete,
isIgnore,
isLease,
isMetadata,
isNext,
isRespond,
isResumeEnable,
printFrame,
} from './RSocketFrame';
export {
deserializeFrame,
deserializeFrameWithLength,
deserializeFrames,
serializeFrame,
serializeFrameWithLength,
} from './RSocketBinaryFraming';
export {
byteLength,
createBuffer,
readUInt24BE,
toBuffer,
writeUInt24BE,
} from './RSocketBufferUtils';
export {
BufferEncoders,
BufferEncoder,
Utf8Encoders,
UTF8Encoder,
} from './RSocketEncoding';
export {
IdentitySerializer,
IdentitySerializers,
JsonSerializer,
JsonSerializers,
} from './RSocketSerialization';
export {Leases, Lease} from './RSocketLease';
export {
UNPARSEABLE_MIME_TYPE,
UNKNOWN_RESERVED_MIME_TYPE,
APPLICATION_AVRO,
APPLICATION_CBOR,
APPLICATION_GRAPHQL,
APPLICATION_GZIP,
APPLICATION_JAVASCRIPT,
APPLICATION_JSON,
APPLICATION_OCTET_STREAM,
APPLICATION_PDF,
APPLICATION_THRIFT,
APPLICATION_PROTOBUF,
APPLICATION_XML,
APPLICATION_ZIP,
AUDIO_AAC,
AUDIO_MP3,
AUDIO_MP4,
AUDIO_MPEG3,
AUDIO_MPEG,
AUDIO_OGG,
AUDIO_OPUS,
AUDIO_VORBIS,
IMAGE_BMP,
IMAGE_GIG,
IMAGE_HEIC_SEQUENCE,
IMAGE_HEIC,
IMAGE_HEIF_SEQUENCE,
IMAGE_HEIF,
IMAGE_JPEG,
IMAGE_PNG,
IMAGE_TIFF,
MULTIPART_MIXED,
TEXT_CSS,
TEXT_CSV,
TEXT_HTML,
TEXT_PLAIN,
TEXT_XML,
VIDEO_H264,
VIDEO_H265,
VIDEO_VP8,
APPLICATION_HESSIAN,
APPLICATION_JAVA_OBJECT,
APPLICATION_CLOUDEVENTS_JSON,
MESSAGE_RSOCKET_MIMETYPE,
MESSAGE_RSOCKET_ACCEPT_MIMETYPES,
MESSAGE_RSOCKET_AUTHENTICATION,
MESSAGE_RSOCKET_TRACING_ZIPKIN,
MESSAGE_RSOCKET_ROUTING,
MESSAGE_RSOCKET_COMPOSITE_METADATA,
} from './WellKnownMimeType';
export {
CompositeMetadata,
ReservedMimeTypeEntry,
WellKnownMimeTypeEntry,
ExplicitMimeTimeEntry,
encodeAndAddCustomMetadata,
encodeAndAddWellKnownMetadata,
encodeCompositeMetadata,
decodeCompositeMetadata,
} from './CompositeMetadata';
export {
RoutingMetadata,
encodeRoute,
encodeRoutes,
decodeRoutes,
} from './RoutingMetadata';
export {
encodeSimpleAuthMetadata,
encodeBearerAuthMetadata,
encodeWellKnownAuthMetadata,
encodeCustomAuthMetadata,
decodeSimpleAuthPayload,
decodeAuthMetadata,
} from './AuthMetadata';
export {
UNPARSEABLE_AUTH_TYPE,
UNKNOWN_RESERVED_AUTH_TYPE,
SIMPLE,
BEARER,
} from './WellKnownAuthType';

@@ -7,3 +7,3 @@ /**

*
*
* @flow
*/

@@ -21,3 +21,7 @@ 'use strict';

*/
function invariant(condition, format, ...args) {
function invariant(
condition: mixed,
format: string,
...args: Array<mixed>
): void {
if (!condition) {

@@ -29,3 +33,3 @@ let error;

'Minified exception occurred; use the non-minified ' +
'dev environment for the full error message and additional helpful warnings.'
'dev environment for the full error message and additional helpful warnings.',
);

@@ -38,3 +42,3 @@ } else {

error.framesToPop = 1; // Skip invariant's own stack frame.
(error: any).framesToPop = 1; // Skip invariant's own stack frame.

@@ -41,0 +45,0 @@ throw error;

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.LiteBuffer = exports.Buffer = void 0;
// @flow
var _buffer = _interopRequireDefault(require('buffer'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import type {Buffer as NodeBuffer} from 'buffer';
import ExistingBufferModule from 'buffer';
const hasGlobalBuffer =
typeof global !== 'undefined' && global.hasOwnProperty('Buffer');
const hasBufferModule = _buffer.default.hasOwnProperty('Buffer');
const hasBufferModule = ExistingBufferModule.hasOwnProperty('Buffer');
function notImplemented(msg) {
function notImplemented(msg?: string): void {
const message = msg ? `Not implemented: ${msg}` : 'Not implemented';

@@ -24,3 +21,3 @@ throw new Error(message);

// inlined properly. That prioritizes the common case.
function normalizeEncoding(enc) {
function normalizeEncoding(enc: string | null): ?string {
if (enc == null || enc === 'utf8' || enc === 'utf-8') {

@@ -44,3 +41,3 @@ return 'utf8';

// https://github.com/nodejs/node/blob/ba684805b6c0eded76e5cd89ee00328ac7a59365/lib/internal/util.js#L130
function slowCases(enc) {
function slowCases(enc: string): ?string {
switch (enc.length) {

@@ -150,3 +147,3 @@ case 4:

function checkEncoding(encoding = 'utf8', strict = true) {
function checkEncoding(encoding = 'utf8', strict = true): string {
if (typeof encoding !== 'string' || (strict && encoding === '')) {

@@ -169,37 +166,36 @@ if (!strict) {

return normalized;
return ((normalized: any): string);
}
interface EncodingOp {
byteLength(string: string): number,
}
// https://github.com/nodejs/node/blob/56dbe466fdbc598baea3bfce289bf52b97b8b8f7/lib/buffer.js#L598
const encodingOps = {
const encodingOps: {[key: string]: EncodingOp} = {
ascii: {
byteLength: (string) => string.length,
byteLength: (string: string): number => string.length,
},
base64: {
byteLength: (string) => base64ByteLength(string, string.length),
byteLength: (string: string): number =>
base64ByteLength(string, string.length),
},
hex: {
byteLength: (string) => string.length >>> 1,
byteLength: (string: string): number => string.length >>> 1,
},
latin1: {
byteLength: (string) => string.length,
byteLength: (string: string): number => string.length,
},
ucs2: {
byteLength: (string) => string.length * 2,
byteLength: (string: string): number => string.length * 2,
},
utf16le: {
byteLength: (string) => string.length * 2,
byteLength: (string: string): number => string.length * 2,
},
utf8: {
byteLength: (string) => utf8ToBytes(string).length,
byteLength: (string: string): number => utf8ToBytes(string).length,
},
};
function base64ByteLength(str, bytes) {
function base64ByteLength(str: string, bytes: number): number {
// Handle padding

@@ -231,3 +227,3 @@ if (str.charCodeAt(bytes - 1) === 0x3d) {

String,
codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH))
codePoints.slice(i, (i += MAX_ARGUMENTS_LENGTH)),
);

@@ -238,3 +234,3 @@ }

function utf8ToBytes(str, pUnits = Infinity) {
function utf8ToBytes(str: string, pUnits: number = Infinity): number[] {
let units = pUnits;

@@ -313,3 +309,3 @@ let codePoint;

((codePoint >> 0x6) & 0x3f) | 0x80,
(codePoint & 0x3f) | 0x80
(codePoint & 0x3f) | 0x80,
);

@@ -324,3 +320,3 @@ } else if (codePoint < 0x110000) {

((codePoint >> 0x6) & 0x3f) | 0x80,
(codePoint & 0x3f) | 0x80
(codePoint & 0x3f) | 0x80,
);

@@ -335,3 +331,3 @@ } else {

function utf8Slice(buf, start, end) {
function utf8Slice(buf: Buffer, start: number, end: number) {
end = Math.min(buf.length, end);

@@ -421,3 +417,8 @@ const res = [];

function utf8Write(buf, input, offset, length) {
function utf8Write(
buf: Buffer,
input: string,
offset: number,
length: number,
): number {
return blitBuffer(

@@ -427,8 +428,13 @@ utf8ToBytes(input, buf.length - offset),

offset,
length
length,
);
}
function blitBuffer(src, dst, offset, length) {
let i = 0;
function blitBuffer(
src: number[],
dst: Buffer,
offset: number,
length: number,
): number {
let i: number = 0;
for (; i < length; ++i) {

@@ -446,4 +452,8 @@ if (i + offset >= dst.length || i >= src.length) {

*/
class Buffer extends Uint8Array {
constructor(value, byteOffset, length) {
export class Buffer extends Uint8Array {
constructor(
value: number | Buffer | $TypedArray | ArrayBuffer | number[],
byteOffset?: number,
length?: number,
) {
if (typeof value == 'number') {

@@ -456,3 +466,3 @@ super(value);

length || (isInstance(value, Array) ? value.length : value.byteLength);
super(value, offset, realLength);
super((value: any), offset, realLength);
}

@@ -463,6 +473,10 @@ }

*/
static alloc(size, fill = 0, encoding = 'utf8') {
static alloc(
size: number,
fill: number | string | Uint8Array | Buffer = 0,
encoding: string = 'utf8',
): Buffer {
if (typeof size !== 'number') {
throw new TypeError(
`The "size" argument must be of type number. Received type ${typeof size}`
`The "size" argument must be of type number. Received type ${typeof size}`,
);

@@ -489,3 +503,3 @@ }

throw new TypeError(
`The argument "value" is invalid. Received ${fill.constructor.name} []`
`The argument "value" is invalid. Received ${fill.constructor.name} []`,
);

@@ -518,3 +532,3 @@ }

static allocUnsafe(size) {
static allocUnsafe(size: number): Buffer {
return new Buffer(size);

@@ -528,3 +542,6 @@ }

*/
static byteLength(string, encoding = 'utf8') {
static byteLength(
string: string | Buffer | ArrayBuffer,
encoding: string = 'utf8',
): number {
if (typeof string != 'string') {

@@ -542,3 +559,3 @@ return string.byteLength;

*/
static concat(list, totalLength) {
static concat(list: Buffer[] | Uint8Array[], totalLength?: number): Buffer {
if (totalLength == undefined) {

@@ -569,7 +586,8 @@ totalLength = 0;

static from(
value,
byteOffsetOrEncoding,
value: string | Buffer | $TypedArray | ArrayBuffer | number[],
byteOffsetOrEncoding?: number | string,
//$FlowFixMe
length
) {
length?: number,
//$FlowFixMe
): Buffer {
const offset =

@@ -608,3 +626,3 @@ typeof byteOffsetOrEncoding === 'string'

*/
static isBuffer(obj) {
static isBuffer(obj: any): boolean {
return (

@@ -616,3 +634,3 @@ isInstance(obj, Buffer) ||

static isEncoding(encoding) {
static isEncoding(encoding: any): boolean {
return (

@@ -630,7 +648,7 @@ typeof encoding === 'string' &&

copy(
targetBuffer,
targetStart = 0,
sourceStart = 0,
sourceEnd = this.length
) {
targetBuffer: Buffer | Uint8Array,
targetStart: number = 0,
sourceStart: number = 0,
sourceEnd: number = this.length,
): number {
const sourceBuffer = this.subarray(sourceStart, sourceEnd);

@@ -644,7 +662,7 @@ targetBuffer.set(sourceBuffer, targetStart);

*/
equals(otherBuffer) {
equals(otherBuffer: Uint8Array | Buffer): boolean {
if (!isInstance(otherBuffer, Uint8Array)) {
throw new TypeError(
// eslint-disable-next-line max-len
`The "otherBuffer" argument must be an instance of Buffer or Uint8Array. Received type ${typeof otherBuffer}`
`The "otherBuffer" argument must be an instance of Buffer or Uint8Array. Received type ${typeof otherBuffer}`,
);

@@ -669,101 +687,101 @@ }

readDoubleBE(offset = 0) {
readDoubleBE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getFloat64(offset);
}
readDoubleLE(offset = 0) {
readDoubleLE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getFloat64(offset, true);
}
readFloatBE(offset = 0) {
readFloatBE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getFloat32(offset);
}
readFloatLE(offset = 0) {
readFloatLE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getFloat32(offset, true);
}
readInt8(offset = 0) {
readInt8(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt8(
offset
offset,
);
}
readInt16BE(offset = 0) {
readInt16BE(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt16(
offset
offset,
);
}
readInt16LE(offset = 0) {
readInt16LE(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt16(
offset,
true
true,
);
}
readInt32BE(offset = 0) {
readInt32BE(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt32(
offset
offset,
);
}
readInt32LE(offset = 0) {
readInt32LE(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getInt32(
offset,
true
true,
);
}
readUInt8(offset = 0) {
readUInt8(offset: number = 0): number {
return new DataView(this.buffer, this.byteOffset, this.byteLength).getUint8(
offset
offset,
);
}
readUInt16BE(offset = 0) {
readUInt16BE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getUint16(offset);
}
readUInt16LE(offset = 0) {
readUInt16LE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getUint16(offset, true);
}
readUInt32BE(offset = 0) {
readUInt32BE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getUint32(offset);
}
readUInt32LE(offset = 0) {
readUInt32LE(offset: number = 0): number {
return new DataView(
this.buffer,
this.byteOffset,
this.byteLength
this.byteLength,
).getUint32(offset, true);

@@ -777,3 +795,3 @@ }

// $FlowFixMe
slice(begin = 0, end = this.length) {
slice(begin: number = 0, end: number = this.length): Buffer {
// workaround for https://github.com/microsoft/TypeScript/issues/38665

@@ -784,3 +802,3 @@ return this.subarray(begin, end);

// $FlowFixMe
subarray(begin = 0, end = this.length) {
subarray(begin: number = 0, end: number = this.length): Buffer {
return new Buffer(super.subarray(begin, end));

@@ -793,3 +811,3 @@ }

*/
toJSON() {
toJSON(): any {
return {data: Array.from(this), type: 'Buffer'};

@@ -802,3 +820,7 @@ }

*/
toString(encoding = 'utf8', start = 0, end = this.length) {
toString(
encoding: string = 'utf8',
start: number = 0,
end: number = this.length,
): string {
encoding = checkEncoding(encoding);

@@ -817,3 +839,7 @@

slowToString(encoding = 'utf8', start = 0, end = this.length) {
slowToString(
encoding: string = 'utf8',
start: number = 0,
end: number = this.length,
): string {
if (start === undefined || start < 0) {

@@ -858,3 +884,8 @@ start = 0;

*/
write(string, offset = 0, length = this.length, encoding = 'utf8') {
write(
string: string,
offset: number = 0,
length: number = this.length,
encoding: string = 'utf8',
): number {
encoding = checkEncoding(encoding);

@@ -878,135 +909,120 @@ switch (encoding) {

writeDoubleBE(value, offset = 0) {
writeDoubleBE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat64(
offset,
value
value,
);
return offset + 8;
}
writeDoubleLE(value, offset = 0) {
writeDoubleLE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat64(
offset,
value,
true
true,
);
return offset + 8;
}
writeFloatBE(value, offset = 0) {
writeFloatBE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat32(
offset,
value
value,
);
return offset + 4;
}
writeFloatLE(value, offset = 0) {
writeFloatLE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setFloat32(
offset,
value,
true
true,
);
return offset + 4;
}
writeInt8(value, offset = 0) {
writeInt8(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setInt8(
offset,
value
value,
);
return offset + 1;
}
writeInt16BE(value, offset = 0) {
writeInt16BE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setInt16(
offset,
value
value,
);
return offset + 2;
}
writeInt16LE(value, offset = 0) {
writeInt16LE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setInt16(
offset,
value,
true
true,
);
return offset + 2;
}
writeInt32BE(value, offset = 0) {
writeInt32BE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint32(
offset,
value
value,
);
return offset + 4;
}
writeInt32LE(value, offset = 0) {
writeInt32LE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setInt32(
offset,
value,
true
true,
);
return offset + 4;
}
writeUInt8(value, offset = 0) {
writeUInt8(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint8(
offset,
value
value,
);
return offset + 1;
}
writeUInt16BE(value, offset = 0) {
writeUInt16BE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint16(
offset,
value
value,
);
return offset + 2;
}
writeUInt16LE(value, offset = 0) {
writeUInt16LE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint16(
offset,
value,
true
true,
);
return offset + 2;
}
writeUInt32BE(value, offset = 0) {
writeUInt32BE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint32(
offset,
value
value,
);
return offset + 4;
}
writeUInt32LE(value, offset = 0) {
writeUInt32LE(value: number, offset: number = 0): number {
new DataView(this.buffer, this.byteOffset, this.byteLength).setUint32(
offset,
value,
true
true,
);
return offset + 4;
}
}
exports.Buffer = Buffer;

@@ -1018,3 +1034,3 @@ if (!hasGlobalBuffer) {

// $FlowFixMe
Object.defineProperty(_buffer.default, 'Buffer', {
Object.defineProperty(ExistingBufferModule, 'Buffer', {
configurable: true,

@@ -1035,3 +1051,2 @@ enumerable: false,

const LiteBuffer = hasGlobalBuffer ? global.Buffer : Buffer;
exports.LiteBuffer = LiteBuffer;
export const LiteBuffer: NodeBuffer = hasGlobalBuffer ? global.Buffer : Buffer;

@@ -1,62 +0,64 @@

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.ReassemblyDuplexConnection = void 0;
import type {
DuplexConnection,
Frame,
ISubscriber,
ISubscription,
Encodable,
ConnectionStatus,
} from 'rsocket-types';
import {LiteBuffer as Buffer} from './LiteBuffer';
import {Flowable} from 'rsocket-flowable';
import {
CONNECTION_STREAM_ID,
isComplete,
isFollows,
FRAME_TYPES,
FLAGS,
} from './RSocketFrame';
var _LiteBuffer = require('./LiteBuffer');
var _rsocketFlowable = require('rsocket-flowable');
var _RSocketFrame = require('./RSocketFrame');
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
export class ReassemblyDuplexConnection implements DuplexConnection {
_source: DuplexConnection;
class ReassemblyDuplexConnection {
constructor(source) {
constructor(source: DuplexConnection) {
this._source = source;
}
sendOne(frame) {
sendOne(frame: Frame): void {
this._source.sendOne(frame);
}
send(input) {
send(input: Flowable<Frame>): void {
this._source.send(input);
}
receive() {
receive(): Flowable<Frame> {
return this._source
.receive()
.lift((actual) => new ReassemblySubscriber(actual));
.lift(actual => new ReassemblySubscriber(actual));
}
close() {
close(): void {
this._source.close();
}
connect() {
connect(): void {
this._source.connect();
}
connectionStatus() {
connectionStatus(): Flowable<ConnectionStatus> {
return this._source.connectionStatus();
}
}
exports.ReassemblyDuplexConnection = ReassemblyDuplexConnection;
class ReassemblySubscriber {
constructor(actual) {
_defineProperty(this, '_framesReassemblyMap', new Map());
class ReassemblySubscriber implements ISubscriber<Frame>, ISubscription {
_framesReassemblyMap: Map<number, Frame> = new Map();
_actual: ISubscriber<Frame>;
_subscription: ISubscription;
constructor(actual: ISubscriber<Frame>) {
this._actual = actual;
}
request(n) {
request(n: number) {
this._subscription.request(n);

@@ -70,3 +72,3 @@ }

onSubscribe(s) {
onSubscribe(s: ISubscription): void {
if (this._subscription == null) {

@@ -80,18 +82,17 @@ this._subscription = s;

onComplete() {
onComplete(): void {
this._actual.onComplete();
}
onError(error) {
onError(error: Error): void {
this._actual.onError(error);
}
onNext(frame) {
onNext(frame: Frame): void {
const streamId = frame.streamId;
if (streamId !== _RSocketFrame.CONNECTION_STREAM_ID) {
const hasFollowsFlag = (0, _RSocketFrame.isFollows)(frame.flags);
const hasCompleteFlag = (0, _RSocketFrame.isComplete)(frame.flags);
if (streamId !== CONNECTION_STREAM_ID) {
const hasFollowsFlag = isFollows(frame.flags);
const hasCompleteFlag = isComplete(frame.flags);
const isCancelOrError =
frame.type === _RSocketFrame.FRAME_TYPES.ERROR ||
frame.type === _RSocketFrame.FRAME_TYPES.CANCEL;
frame.type === FRAME_TYPES.ERROR || frame.type === FRAME_TYPES.CANCEL;

@@ -106,3 +107,3 @@ const storedFrame = this._framesReassemblyMap.get(streamId);

storedFrame.metadata,
frame.metadata
frame.metadata,
);

@@ -119,3 +120,3 @@ }

if (hasCompleteFlag) {
storedFrame.flags |= _RSocketFrame.FLAGS.COMPLETE;
storedFrame.flags |= FLAGS.COMPLETE;
}

@@ -140,3 +141,3 @@

const concatContent = (a, b) => {
const concatContent = (a: Encodable, b: Encodable): Encodable => {
switch (a.constructor.name) {

@@ -151,4 +152,4 @@ case 'String':

default:
return _LiteBuffer.LiteBuffer.concat([a, b]);
return Buffer.concat([a, b]);
}
};

@@ -1,18 +0,16 @@

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.encodeRoutes = encodeRoutes;
exports.encodeRoute = encodeRoute;
exports.decodeRoutes = decodeRoutes;
exports.RoutingMetadata = void 0;
// $FlowFixMe
// @flow
var _LiteBuffer = require('./LiteBuffer');
var _RSocketBufferUtils = require('./RSocketBufferUtils'); // $FlowFixMe
import {LiteBuffer as Buffer} from './LiteBuffer';
import {createBuffer, toBuffer} from './RSocketBufferUtils';
// $FlowFixMe
class RoutingMetadata {
constructor(buffer) {
export class RoutingMetadata implements Iterable<string> {
_buffer: Buffer;
constructor(buffer: Buffer) {
this._buffer = buffer;
}
iterator() {
iterator(): Iterator<string> {
return decodeRoutes(this._buffer);

@@ -22,3 +20,3 @@ }

// $FlowFixMe
[Symbol.iterator]() {
[Symbol.iterator](): Iterator<string> {
return decodeRoutes(this._buffer);

@@ -33,4 +31,4 @@ }

* @returns {Buffer} with encoded content
*/ exports.RoutingMetadata = RoutingMetadata;
function encodeRoutes(...routes) {
*/
export function encodeRoutes(...routes: string[]): Buffer {
if (routes.length < 1) {

@@ -40,24 +38,24 @@ throw new Error('routes should be non empty array');

return _LiteBuffer.LiteBuffer.concat(
routes.map((route) => encodeRoute(route))
);
return Buffer.concat(routes.map(route => encodeRoute(route)));
}
function encodeRoute(route) {
const encodedRoute = (0, _RSocketBufferUtils.toBuffer)(route, 'utf8');
export function encodeRoute(route: string): Buffer {
const encodedRoute = toBuffer(route, 'utf8');
if (encodedRoute.length > 255) {
throw new Error(
`route length should fit into unsigned byte length but the given one is ${encodedRoute.length}`
`route length should fit into unsigned byte length but the given one is ${encodedRoute.length}`,
);
}
const encodedLength = (0, _RSocketBufferUtils.createBuffer)(1);
const encodedLength = createBuffer(1);
encodedLength.writeUInt8(encodedRoute.length);
return _LiteBuffer.LiteBuffer.concat([encodedLength, encodedRoute]);
return Buffer.concat([encodedLength, encodedRoute]);
}
function* decodeRoutes(routeMetadataBuffer) {
export function* decodeRoutes(
routeMetadataBuffer: Buffer,
): Generator<string, void, any> {
const length = routeMetadataBuffer.byteLength;

@@ -71,3 +69,3 @@ let offset = 0;

throw new Error(
`Malformed RouteMetadata. Offset(${offset}) + RouteLength(${routeLength}) is greater than TotalLength`
`Malformed RouteMetadata. Offset(${offset}) + RouteLength(${routeLength}) is greater than TotalLength`,
);

@@ -79,5 +77,4 @@ }

offset,
offset + routeLength
offset + routeLength,
);
offset += routeLength;

@@ -84,0 +81,0 @@ yield route;

@@ -15,3 +15,3 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/

@@ -21,23 +21,47 @@

/* eslint-disable consistent-return, no-bitwise */ Object.defineProperty(
exports,
'__esModule',
{value: true}
);
exports.deserializeFrameWithLength = deserializeFrameWithLength;
exports.deserializeFrames = deserializeFrames;
exports.serializeFrameWithLength = serializeFrameWithLength;
exports.deserializeFrame = deserializeFrame;
exports.serializeFrame = serializeFrame;
exports.sizeOfFrame = sizeOfFrame;
/* eslint-disable consistent-return, no-bitwise */
var _Invariant = _interopRequireDefault(require('./Invariant'));
var _RSocketFrame = require('./RSocketFrame');
import type {
CancelFrame,
ErrorFrame,
Frame,
KeepAliveFrame,
LeaseFrame,
PayloadFrame,
MetadataPushFrame,
RequestChannelFrame,
RequestFnfFrame,
RequestNFrame,
RequestResponseFrame,
RequestStreamFrame,
ResumeFrame,
ResumeOkFrame,
SetupFrame,
} from 'rsocket-types';
import type {Encoders} from './RSocketEncoding';
var _RSocketEncoding = require('./RSocketEncoding');
var _RSocketBufferUtils = require('./RSocketBufferUtils');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import invariant from './Invariant';
import {
getFrameTypeName,
isMetadata,
FLAGS,
FLAGS_MASK,
FRAME_TYPE_OFFFSET,
FRAME_TYPES,
MAX_CODE,
MAX_KEEPALIVE,
MAX_LIFETIME,
MAX_RESUME_LENGTH,
} from './RSocketFrame';
import {Utf8Encoders} from './RSocketEncoding';
import {
createBuffer,
readUInt24BE,
readUInt64BE,
writeUInt24BE,
writeUInt64BE,
} from './RSocketBufferUtils';
type FrameWithPayload = {data: any, flags: number, metadata: any};
/**

@@ -58,7 +82,10 @@ * Frame header is:

*/
function deserializeFrameWithLength(buffer, encoders) {
const frameLength = (0, _RSocketBufferUtils.readUInt24BE)(buffer, 0);
export function deserializeFrameWithLength(
buffer: Buffer,
encoders?: ?Encoders<*>,
): Frame {
const frameLength = readUInt24BE(buffer, 0);
return deserializeFrame(
buffer.slice(UINT24_SIZE, UINT24_SIZE + frameLength),
encoders
encoders,
);

@@ -72,7 +99,10 @@ }

*/
function deserializeFrames(buffer, encoders) {
export function deserializeFrames(
buffer: Buffer,
encoders?: ?Encoders<*>,
): [Array<Frame>, Buffer] {
const frames = [];
let offset = 0;
while (offset + UINT24_SIZE < buffer.length) {
const frameLength = (0, _RSocketBufferUtils.readUInt24BE)(buffer, offset);
const frameLength = readUInt24BE(buffer, offset);
const frameStart = offset + UINT24_SIZE;

@@ -95,8 +125,9 @@ const frameEnd = frameStart + frameLength;

*/
function serializeFrameWithLength(frame, encoders) {
export function serializeFrameWithLength(
frame: Frame,
encoders?: ?Encoders<*>,
): Buffer {
const buffer = serializeFrame(frame, encoders);
const lengthPrefixed = (0, _RSocketBufferUtils.createBuffer)(
buffer.length + UINT24_SIZE
);
(0, _RSocketBufferUtils.writeUInt24BE)(lengthPrefixed, buffer.length, 0);
const lengthPrefixed = createBuffer(buffer.length + UINT24_SIZE);
writeUInt24BE(lengthPrefixed, buffer.length, 0);
buffer.copy(lengthPrefixed, UINT24_SIZE, 0, buffer.length);

@@ -109,51 +140,53 @@ return lengthPrefixed;

*/
function deserializeFrame(buffer, encoders) {
encoders = encoders || _RSocketEncoding.Utf8Encoders;
export function deserializeFrame(
buffer: Buffer,
encoders?: ?Encoders<*>,
): Frame {
encoders = encoders || Utf8Encoders;
let offset = 0;
const streamId = buffer.readInt32BE(offset);
offset += 4;
(0, _Invariant.default)(
invariant(
streamId >= 0,
'RSocketBinaryFraming: Invalid frame, expected a positive stream id, got `%s.',
streamId
streamId,
);
const typeAndFlags = buffer.readUInt16BE(offset);
offset += 2;
const type = typeAndFlags >>> _RSocketFrame.FRAME_TYPE_OFFFSET; // keep highest 6 bits
const flags = typeAndFlags & _RSocketFrame.FLAGS_MASK; // keep lowest 10 bits
const type = typeAndFlags >>> FRAME_TYPE_OFFFSET; // keep highest 6 bits
const flags = typeAndFlags & FLAGS_MASK; // keep lowest 10 bits
switch (type) {
case _RSocketFrame.FRAME_TYPES.SETUP:
case FRAME_TYPES.SETUP:
return deserializeSetupFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.PAYLOAD:
case FRAME_TYPES.PAYLOAD:
return deserializePayloadFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.ERROR:
case FRAME_TYPES.ERROR:
return deserializeErrorFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.KEEPALIVE:
case FRAME_TYPES.KEEPALIVE:
return deserializeKeepAliveFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_FNF:
return deserializeRequestFnfFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_RESPONSE:
return deserializeRequestResponseFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_STREAM:
return deserializeRequestStreamFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_CHANNEL:
return deserializeRequestChannelFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.METADATA_PUSH:
case FRAME_TYPES.METADATA_PUSH:
return deserializeMetadataPushFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_N:
case FRAME_TYPES.REQUEST_N:
return deserializeRequestNFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME:
case FRAME_TYPES.RESUME:
return deserializeResumeFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME_OK:
case FRAME_TYPES.RESUME_OK:
return deserializeResumeOkFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.CANCEL:
case FRAME_TYPES.CANCEL:
return deserializeCancelFrame(buffer, streamId, flags, encoders);
case _RSocketFrame.FRAME_TYPES.LEASE:
case FRAME_TYPES.LEASE:
return deserializeLeaseFrame(buffer, streamId, flags, encoders);
default:
(0, _Invariant.default)(
invariant(
false,
'RSocketBinaryFraming: Unsupported frame type `%s`.',
(0, _RSocketFrame.getFrameTypeName)(type)
getFrameTypeName(type),
);

@@ -166,36 +199,36 @@ }

*/
function serializeFrame(frame, encoders) {
encoders = encoders || _RSocketEncoding.Utf8Encoders;
export function serializeFrame(frame: Frame, encoders?: ?Encoders<*>): Buffer {
encoders = encoders || Utf8Encoders;
switch (frame.type) {
case _RSocketFrame.FRAME_TYPES.SETUP:
case FRAME_TYPES.SETUP:
return serializeSetupFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.PAYLOAD:
case FRAME_TYPES.PAYLOAD:
return serializePayloadFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.ERROR:
case FRAME_TYPES.ERROR:
return serializeErrorFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.KEEPALIVE:
case FRAME_TYPES.KEEPALIVE:
return serializeKeepAliveFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_RESPONSE:
return serializeRequestFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_CHANNEL:
return serializeRequestManyFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.METADATA_PUSH:
case FRAME_TYPES.METADATA_PUSH:
return serializeMetadataPushFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_N:
case FRAME_TYPES.REQUEST_N:
return serializeRequestNFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME:
case FRAME_TYPES.RESUME:
return serializeResumeFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME_OK:
case FRAME_TYPES.RESUME_OK:
return serializeResumeOkFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.CANCEL:
case FRAME_TYPES.CANCEL:
return serializeCancelFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.LEASE:
case FRAME_TYPES.LEASE:
return serializeLeaseFrame(frame, encoders);
default:
(0, _Invariant.default)(
invariant(
false,
'RSocketBinaryFraming: Unsupported frame type `%s`.',
(0, _RSocketFrame.getFrameTypeName)(frame.type)
getFrameTypeName(frame.type),
);

@@ -207,36 +240,36 @@ }

*/
function sizeOfFrame(frame, encoders) {
encoders = encoders || _RSocketEncoding.Utf8Encoders;
export function sizeOfFrame(frame: Frame, encoders?: ?Encoders<*>): number {
encoders = encoders || Utf8Encoders;
switch (frame.type) {
case _RSocketFrame.FRAME_TYPES.SETUP:
case FRAME_TYPES.SETUP:
return sizeOfSetupFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.PAYLOAD:
case FRAME_TYPES.PAYLOAD:
return sizeOfPayloadFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.ERROR:
case FRAME_TYPES.ERROR:
return sizeOfErrorFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.KEEPALIVE:
case FRAME_TYPES.KEEPALIVE:
return sizeOfKeepAliveFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_RESPONSE:
return sizeOfRequestFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_CHANNEL:
return sizeOfRequestManyFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.METADATA_PUSH:
case FRAME_TYPES.METADATA_PUSH:
return sizeOfMetadataPushFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.REQUEST_N:
case FRAME_TYPES.REQUEST_N:
return sizeOfRequestNFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME:
case FRAME_TYPES.RESUME:
return sizeOfResumeFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.RESUME_OK:
case FRAME_TYPES.RESUME_OK:
return sizeOfResumeOkFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.CANCEL:
case FRAME_TYPES.CANCEL:
return sizeOfCancelFrame(frame, encoders);
case _RSocketFrame.FRAME_TYPES.LEASE:
case FRAME_TYPES.LEASE:
return sizeOfLeaseFrame(frame, encoders);
default:
(0, _Invariant.default)(
invariant(
false,
'RSocketBinaryFraming: Unsupported frame type `%s`.',
(0, _RSocketFrame.getFrameTypeName)(frame.type)
getFrameTypeName(frame.type),
);

@@ -257,3 +290,3 @@ }

const RESUME_TOKEN_LENGTH_SIZE = 2;
function serializeSetupFrame(frame, encoders) {
function serializeSetupFrame(frame: SetupFrame, encoders: Encoders<*>): Buffer {
const resumeTokenLength =

@@ -272,3 +305,3 @@ frame.resumeToken != null

const payloadLength = getPayloadLength(frame, encoders);
const buffer = (0, _RSocketBufferUtils.createBuffer)(
const buffer = createBuffer(
FRAME_HEADER_SIZE +

@@ -279,5 +312,4 @@ SETUP_FIXED_SIZE + //

dataMimeTypeLength +
payloadLength
payloadLength,
);
let offset = writeHeader(frame, buffer);

@@ -289,3 +321,3 @@ offset = buffer.writeUInt16BE(frame.majorVersion, offset);

if (frame.flags & _RSocketFrame.FLAGS.RESUME_ENABLE) {
if (frame.flags & FLAGS.RESUME_ENABLE) {
offset = buffer.writeUInt16BE(resumeTokenLength, offset);

@@ -297,3 +329,3 @@ if (frame.resumeToken != null) {

offset,
offset + resumeTokenLength
offset + resumeTokenLength,
);

@@ -309,3 +341,3 @@ }

offset,
offset + metadataMimeTypeLength
offset + metadataMimeTypeLength,
);

@@ -320,3 +352,3 @@ }

offset,
offset + dataMimeTypeLength
offset + dataMimeTypeLength,
);

@@ -329,3 +361,3 @@ }

function sizeOfSetupFrame(frame, encoders) {
function sizeOfSetupFrame(frame: SetupFrame, encoders: Encoders<*>): number {
const resumeTokenLength =

@@ -357,8 +389,12 @@ frame.resumeToken != null

*/
function deserializeSetupFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeSetupFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): SetupFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid SETUP frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid SETUP frame, expected stream id to be 0.',
);
const length = buffer.length;

@@ -373,8 +409,8 @@ let offset = FRAME_HEADER_SIZE;

offset += 4;
(0, _Invariant.default)(
keepAlive >= 0 && keepAlive <= _RSocketFrame.MAX_KEEPALIVE,
invariant(
keepAlive >= 0 && keepAlive <= MAX_KEEPALIVE,
'RSocketBinaryFraming: Invalid SETUP frame, expected keepAlive to be ' +
'>= 0 and <= %s. Got `%s`.',
_RSocketFrame.MAX_KEEPALIVE,
keepAlive
MAX_KEEPALIVE,
keepAlive,
);

@@ -384,29 +420,26 @@

offset += 4;
(0, _Invariant.default)(
lifetime >= 0 && lifetime <= _RSocketFrame.MAX_LIFETIME,
invariant(
lifetime >= 0 && lifetime <= MAX_LIFETIME,
'RSocketBinaryFraming: Invalid SETUP frame, expected lifetime to be ' +
'>= 0 and <= %s. Got `%s`.',
_RSocketFrame.MAX_LIFETIME,
lifetime
MAX_LIFETIME,
lifetime,
);
let resumeToken = null;
if (flags & _RSocketFrame.FLAGS.RESUME_ENABLE) {
if (flags & FLAGS.RESUME_ENABLE) {
const resumeTokenLength = buffer.readInt16BE(offset);
offset += 2;
(0, _Invariant.default)(
resumeTokenLength >= 0 &&
resumeTokenLength <= _RSocketFrame.MAX_RESUME_LENGTH,
invariant(
resumeTokenLength >= 0 && resumeTokenLength <= MAX_RESUME_LENGTH,
'RSocketBinaryFraming: Invalid SETUP frame, expected resumeToken length ' +
'to be >= 0 and <= %s. Got `%s`.',
_RSocketFrame.MAX_RESUME_LENGTH,
resumeTokenLength
MAX_RESUME_LENGTH,
resumeTokenLength,
);
resumeToken = encoders.resumeToken.decode(
buffer,
offset,
offset + resumeTokenLength
offset + resumeTokenLength,
);
offset += resumeTokenLength;

@@ -420,5 +453,4 @@ }

offset,
offset + metadataMimeTypeLength
offset + metadataMimeTypeLength,
);
offset += metadataMimeTypeLength;

@@ -431,8 +463,7 @@

offset,
offset + dataMimeTypeLength
offset + dataMimeTypeLength,
);
offset += dataMimeTypeLength;
const frame = {
const frame: SetupFrame = {
data: null,

@@ -450,5 +481,4 @@ dataMimeType,

streamId,
type: _RSocketFrame.FRAME_TYPES.SETUP,
type: FRAME_TYPES.SETUP,
};
readPayload(buffer, frame, encoders, offset);

@@ -464,9 +494,8 @@ return frame;

const ERROR_FIXED_SIZE = 4;
function serializeErrorFrame(frame, encoders) {
function serializeErrorFrame(frame: ErrorFrame, encoders: Encoders<*>): Buffer {
const messageLength =
frame.message != null ? encoders.message.byteLength(frame.message) : 0;
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + ERROR_FIXED_SIZE + messageLength
const buffer = createBuffer(
FRAME_HEADER_SIZE + ERROR_FIXED_SIZE + messageLength,
);
let offset = writeHeader(frame, buffer);

@@ -479,3 +508,3 @@ offset = buffer.writeUInt32BE(frame.code, offset);

offset,
offset + messageLength
offset + messageLength,
);

@@ -486,3 +515,3 @@ }

function sizeOfErrorFrame(frame, encoders) {
function sizeOfErrorFrame(frame: ErrorFrame, encoders: Encoders<*>): number {
const messageLength =

@@ -496,3 +525,8 @@ frame.message != null ? encoders.message.byteLength(frame.message) : 0;

*/
function deserializeErrorFrame(buffer, streamId, flags, encoders) {
function deserializeErrorFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): ErrorFrame {
const length = buffer.length;

@@ -502,9 +536,8 @@ let offset = FRAME_HEADER_SIZE;

offset += 4;
(0, _Invariant.default)(
code >= 0 && code <= _RSocketFrame.MAX_CODE,
invariant(
code >= 0 && code <= MAX_CODE,
'RSocketBinaryFraming: Invalid ERROR frame, expected code to be >= 0 and <= %s. Got `%s`.',
_RSocketFrame.MAX_CODE,
code
MAX_CODE,
code,
);
const messageLength = buffer.length - offset;

@@ -523,3 +556,3 @@ let message = '';

streamId,
type: _RSocketFrame.FRAME_TYPES.ERROR,
type: FRAME_TYPES.ERROR,
};

@@ -534,15 +567,13 @@ }

const KEEPALIVE_FIXED_SIZE = 8;
function serializeKeepAliveFrame(frame, encoders) {
function serializeKeepAliveFrame(
frame: KeepAliveFrame,
encoders: Encoders<*>,
): Buffer {
const dataLength =
frame.data != null ? encoders.data.byteLength(frame.data) : 0;
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + KEEPALIVE_FIXED_SIZE + dataLength
const buffer = createBuffer(
FRAME_HEADER_SIZE + KEEPALIVE_FIXED_SIZE + dataLength,
);
let offset = writeHeader(frame, buffer);
offset = (0, _RSocketBufferUtils.writeUInt64BE)(
buffer,
frame.lastReceivedPosition,
offset
);
offset = writeUInt64BE(buffer, frame.lastReceivedPosition, offset);
if (frame.data != null) {

@@ -554,3 +585,6 @@ encoders.data.encode(frame.data, buffer, offset, offset + dataLength);

function sizeOfKeepAliveFrame(frame, encoders) {
function sizeOfKeepAliveFrame(
frame: KeepAliveFrame,
encoders: Encoders<*>,
): number {
const dataLength =

@@ -564,14 +598,15 @@ frame.data != null ? encoders.data.byteLength(frame.data) : 0;

*/
function deserializeKeepAliveFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeKeepAliveFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): KeepAliveFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid KEEPALIVE frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid KEEPALIVE frame, expected stream id to be 0.',
);
const length = buffer.length;
let offset = FRAME_HEADER_SIZE;
const lastReceivedPosition = (0, _RSocketBufferUtils.readUInt64BE)(
buffer,
offset
);
const lastReceivedPosition = readUInt64BE(buffer, offset);
offset += 8;

@@ -589,3 +624,3 @@ let data = null;

streamId,
type: _RSocketFrame.FRAME_TYPES.KEEPALIVE,
type: FRAME_TYPES.KEEPALIVE,
};

@@ -600,9 +635,8 @@ }

const LEASE_FIXED_SIZE = 8;
function serializeLeaseFrame(frame, encoders) {
function serializeLeaseFrame(frame: LeaseFrame, encoders: Encoders<*>): Buffer {
const metaLength =
frame.metadata != null ? encoders.metadata.byteLength(frame.metadata) : 0;
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + LEASE_FIXED_SIZE + metaLength
const buffer = createBuffer(
FRAME_HEADER_SIZE + LEASE_FIXED_SIZE + metaLength,
);
let offset = writeHeader(frame, buffer);

@@ -616,3 +650,3 @@ offset = buffer.writeUInt32BE(frame.ttl, offset);

offset,
offset + metaLength
offset + metaLength,
);

@@ -623,3 +657,3 @@ }

function sizeOfLeaseFrame(frame, encoders) {
function sizeOfLeaseFrame(frame: LeaseFrame, encoders: Encoders<*>): number {
const metaLength =

@@ -633,8 +667,12 @@ frame.metadata != null ? encoders.metadata.byteLength(frame.metadata) : 0;

*/
function deserializeLeaseFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeLeaseFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): LeaseFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid LEASE frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid LEASE frame, expected stream id to be 0.',
);
const length = buffer.length;

@@ -657,3 +695,3 @@ let offset = FRAME_HEADER_SIZE;

ttl,
type: _RSocketFrame.FRAME_TYPES.LEASE,
type: FRAME_TYPES.LEASE,
};

@@ -668,7 +706,8 @@ }

*/
function serializeRequestFrame(frame, encoders) {
function serializeRequestFrame(
frame: RequestFnfFrame | RequestResponseFrame,
encoders: Encoders<*>,
): Buffer {
const payloadLength = getPayloadLength(frame, encoders);
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + payloadLength
);
const buffer = createBuffer(FRAME_HEADER_SIZE + payloadLength);
const offset = writeHeader(frame, buffer);

@@ -679,3 +718,6 @@ writePayload(frame, buffer, encoders, offset);

function sizeOfRequestFrame(frame, encoders) {
function sizeOfRequestFrame(
frame: RequestFnfFrame | RequestResponseFrame,
encoders: Encoders<*>,
): number {
const payloadLength = getPayloadLength(frame, encoders);

@@ -689,9 +731,11 @@ return FRAME_HEADER_SIZE + payloadLength;

*/
function serializeMetadataPushFrame(frame, encoders) {
function serializeMetadataPushFrame(
frame: MetadataPushFrame,
encoders: Encoders<*>,
): Buffer {
const metadata = frame.metadata;
if (metadata != null) {
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + encoders.metadata.byteLength(metadata)
const buffer = createBuffer(
FRAME_HEADER_SIZE + encoders.metadata.byteLength(metadata),
);
const offset = writeHeader(frame, buffer);

@@ -701,3 +745,3 @@ encoders.metadata.encode(metadata, buffer, offset, buffer.length);

} else {
const buffer = (0, _RSocketBufferUtils.createBuffer)(FRAME_HEADER_SIZE);
const buffer = createBuffer(FRAME_HEADER_SIZE);
writeHeader(frame, buffer);

@@ -708,3 +752,6 @@ return buffer;

function sizeOfMetadataPushFrame(frame, encoders) {
function sizeOfMetadataPushFrame(
frame: MetadataPushFrame,
encoders: Encoders<*>,
): number {
return (

@@ -716,10 +763,14 @@ FRAME_HEADER_SIZE +

function deserializeRequestFnfFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeRequestFnfFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): RequestFnfFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid REQUEST_FNF frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid REQUEST_FNF frame, expected stream id to be > 0.',
);
const length = buffer.length;
const frame = {
const frame: RequestFnfFrame = {
data: null,

@@ -730,5 +781,4 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_FNF,
type: FRAME_TYPES.REQUEST_FNF,
};
readPayload(buffer, frame, encoders, FRAME_HEADER_SIZE);

@@ -738,10 +788,14 @@ return frame;

function deserializeRequestResponseFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeRequestResponseFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): RequestResponseFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid REQUEST_RESPONSE frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid REQUEST_RESPONSE frame, expected stream id to be > 0.',
);
const length = buffer.length;
const frame = {
const frame: RequestResponseFrame = {
data: null,

@@ -752,5 +806,4 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE,
type: FRAME_TYPES.REQUEST_RESPONSE,
};
readPayload(buffer, frame, encoders, FRAME_HEADER_SIZE);

@@ -760,8 +813,12 @@ return frame;

function deserializeMetadataPushFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeMetadataPushFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): MetadataPushFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid METADATA_PUSH frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid METADATA_PUSH frame, expected stream id to be 0.',
);
const length = buffer.length;

@@ -776,3 +833,3 @@ return {

streamId,
type: _RSocketFrame.FRAME_TYPES.METADATA_PUSH,
type: FRAME_TYPES.METADATA_PUSH,
};

@@ -790,8 +847,10 @@ }

const REQUEST_MANY_HEADER = 4;
function serializeRequestManyFrame(frame, encoders) {
function serializeRequestManyFrame(
frame: RequestStreamFrame | RequestChannelFrame,
encoders: Encoders<*>,
): Buffer {
const payloadLength = getPayloadLength(frame, encoders);
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + REQUEST_MANY_HEADER + payloadLength
const buffer = createBuffer(
FRAME_HEADER_SIZE + REQUEST_MANY_HEADER + payloadLength,
);
let offset = writeHeader(frame, buffer);

@@ -803,3 +862,6 @@ offset = buffer.writeUInt32BE(frame.requestN, offset);

function sizeOfRequestManyFrame(frame, encoders) {
function sizeOfRequestManyFrame(
frame: RequestStreamFrame | RequestChannelFrame,
encoders: Encoders<*>,
): number {
const payloadLength = getPayloadLength(frame, encoders);

@@ -809,8 +871,12 @@ return FRAME_HEADER_SIZE + REQUEST_MANY_HEADER + payloadLength;

function deserializeRequestStreamFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeRequestStreamFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): RequestStreamFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid REQUEST_STREAM frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid REQUEST_STREAM frame, expected stream id to be > 0.',
);
const length = buffer.length;

@@ -820,9 +886,8 @@ let offset = FRAME_HEADER_SIZE;

offset += 4;
(0, _Invariant.default)(
invariant(
requestN > 0,
'RSocketBinaryFraming: Invalid REQUEST_STREAM frame, expected requestN to be > 0, got `%s`.',
requestN
requestN,
);
const frame = {
const frame: RequestStreamFrame = {
data: null,

@@ -834,5 +899,4 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_STREAM,
type: FRAME_TYPES.REQUEST_STREAM,
};
readPayload(buffer, frame, encoders, offset);

@@ -842,8 +906,12 @@ return frame;

function deserializeRequestChannelFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeRequestChannelFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): RequestChannelFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid REQUEST_CHANNEL frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid REQUEST_CHANNEL frame, expected stream id to be > 0.',
);
const length = buffer.length;

@@ -853,9 +921,8 @@ let offset = FRAME_HEADER_SIZE;

offset += 4;
(0, _Invariant.default)(
invariant(
requestN > 0,
'RSocketBinaryFraming: Invalid REQUEST_STREAM frame, expected requestN to be > 0, got `%s`.',
requestN
requestN,
);
const frame = {
const frame: RequestChannelFrame = {
data: null,

@@ -867,5 +934,4 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL,
type: FRAME_TYPES.REQUEST_CHANNEL,
};
readPayload(buffer, frame, encoders, offset);

@@ -881,6 +947,7 @@ return frame;

const REQUEST_N_HEADER = 4;
function serializeRequestNFrame(frame, encoders) {
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + REQUEST_N_HEADER
);
function serializeRequestNFrame(
frame: RequestNFrame,
encoders: Encoders<*>,
): Buffer {
const buffer = createBuffer(FRAME_HEADER_SIZE + REQUEST_N_HEADER);
const offset = writeHeader(frame, buffer);

@@ -891,20 +958,26 @@ buffer.writeUInt32BE(frame.requestN, offset);

function sizeOfRequestNFrame(frame, encoders) {
function sizeOfRequestNFrame(
frame: RequestNFrame,
encoders: Encoders<*>,
): number {
return FRAME_HEADER_SIZE + REQUEST_N_HEADER;
}
function deserializeRequestNFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeRequestNFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): RequestNFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid REQUEST_N frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid REQUEST_N frame, expected stream id to be > 0.',
);
const length = buffer.length;
const requestN = buffer.readInt32BE(FRAME_HEADER_SIZE);
(0, _Invariant.default)(
invariant(
requestN > 0,
'RSocketBinaryFraming: Invalid REQUEST_STREAM frame, expected requestN to be > 0, got `%s`.',
requestN
requestN,
);
return {

@@ -915,3 +988,3 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_N,
type: FRAME_TYPES.REQUEST_N,
};

@@ -923,4 +996,7 @@ }

*/
function serializeCancelFrame(frame, encoders) {
const buffer = (0, _RSocketBufferUtils.createBuffer)(FRAME_HEADER_SIZE);
function serializeCancelFrame(
frame: CancelFrame,
encoders: Encoders<*>,
): Buffer {
const buffer = createBuffer(FRAME_HEADER_SIZE);
writeHeader(frame, buffer);

@@ -930,12 +1006,16 @@ return buffer;

function sizeOfCancelFrame(frame, encoders) {
function sizeOfCancelFrame(frame: CancelFrame, encoders: Encoders<*>): number {
return FRAME_HEADER_SIZE;
}
function deserializeCancelFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeCancelFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): CancelFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid CANCEL frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid CANCEL frame, expected stream id to be > 0.',
);
const length = buffer.length;

@@ -946,3 +1026,3 @@ return {

streamId,
type: _RSocketFrame.FRAME_TYPES.CANCEL,
type: FRAME_TYPES.CANCEL,
};

@@ -954,7 +1034,8 @@ }

*/
function serializePayloadFrame(frame, encoders) {
function serializePayloadFrame(
frame: PayloadFrame,
encoders: Encoders<*>,
): Buffer {
const payloadLength = getPayloadLength(frame, encoders);
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + payloadLength
);
const buffer = createBuffer(FRAME_HEADER_SIZE + payloadLength);
const offset = writeHeader(frame, buffer);

@@ -965,3 +1046,6 @@ writePayload(frame, buffer, encoders, offset);

function sizeOfPayloadFrame(frame, encoders) {
function sizeOfPayloadFrame(
frame: PayloadFrame,
encoders: Encoders<*>,
): number {
const payloadLength = getPayloadLength(frame, encoders);

@@ -971,10 +1055,14 @@ return FRAME_HEADER_SIZE + payloadLength;

function deserializePayloadFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializePayloadFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): PayloadFrame {
invariant(
streamId > 0,
'RSocketBinaryFraming: Invalid PAYLOAD frame, expected stream id to be > 0.'
'RSocketBinaryFraming: Invalid PAYLOAD frame, expected stream id to be > 0.',
);
const length = buffer.length;
const frame = {
const frame: PayloadFrame = {
data: null,

@@ -985,5 +1073,4 @@ flags,

streamId,
type: _RSocketFrame.FRAME_TYPES.PAYLOAD,
type: FRAME_TYPES.PAYLOAD,
};
readPayload(buffer, frame, encoders, FRAME_HEADER_SIZE);

@@ -1004,8 +1091,10 @@ return frame;

const RESUME_FIXED_SIZE = 22;
function serializeResumeFrame(frame, encoders) {
function serializeResumeFrame(
frame: ResumeFrame,
encoders: Encoders<*>,
): Buffer {
const resumeTokenLength = encoders.resumeToken.byteLength(frame.resumeToken);
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + RESUME_FIXED_SIZE + resumeTokenLength
const buffer = createBuffer(
FRAME_HEADER_SIZE + RESUME_FIXED_SIZE + resumeTokenLength,
);
let offset = writeHeader(frame, buffer);

@@ -1019,15 +1108,10 @@ offset = buffer.writeUInt16BE(frame.majorVersion, offset);

offset,
offset + resumeTokenLength
offset + resumeTokenLength,
);
offset = (0, _RSocketBufferUtils.writeUInt64BE)(
buffer,
frame.serverPosition,
offset
);
(0, _RSocketBufferUtils.writeUInt64BE)(buffer, frame.clientPosition, offset);
offset = writeUInt64BE(buffer, frame.serverPosition, offset);
writeUInt64BE(buffer, frame.clientPosition, offset);
return buffer;
}
function sizeOfResumeFrame(frame, encoders) {
function sizeOfResumeFrame(frame: ResumeFrame, encoders: Encoders<*>): number {
const resumeTokenLength = encoders.resumeToken.byteLength(frame.resumeToken);

@@ -1037,8 +1121,12 @@ return FRAME_HEADER_SIZE + RESUME_FIXED_SIZE + resumeTokenLength;

function deserializeResumeFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeResumeFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): ResumeFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid RESUME frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid RESUME frame, expected stream id to be 0.',
);
const length = buffer.length;

@@ -1053,21 +1141,18 @@ let offset = FRAME_HEADER_SIZE;

offset += 2;
(0, _Invariant.default)(
resumeTokenLength >= 0 &&
resumeTokenLength <= _RSocketFrame.MAX_RESUME_LENGTH,
invariant(
resumeTokenLength >= 0 && resumeTokenLength <= MAX_RESUME_LENGTH,
'RSocketBinaryFraming: Invalid SETUP frame, expected resumeToken length ' +
'to be >= 0 and <= %s. Got `%s`.',
_RSocketFrame.MAX_RESUME_LENGTH,
resumeTokenLength
MAX_RESUME_LENGTH,
resumeTokenLength,
);
const resumeToken = encoders.resumeToken.decode(
buffer,
offset,
offset + resumeTokenLength
offset + resumeTokenLength,
);
offset += resumeTokenLength;
const serverPosition = (0, _RSocketBufferUtils.readUInt64BE)(buffer, offset);
const serverPosition = readUInt64BE(buffer, offset);
offset += 8;
const clientPosition = (0, _RSocketBufferUtils.readUInt64BE)(buffer, offset);
const clientPosition = readUInt64BE(buffer, offset);
offset += 8;

@@ -1083,3 +1168,3 @@ return {

streamId,
type: _RSocketFrame.FRAME_TYPES.RESUME,
type: FRAME_TYPES.RESUME,
};

@@ -1095,26 +1180,31 @@ }

const RESUME_OK_FIXED_SIZE = 8;
function serializeResumeOkFrame(frame, encoders) {
const buffer = (0, _RSocketBufferUtils.createBuffer)(
FRAME_HEADER_SIZE + RESUME_OK_FIXED_SIZE
);
function serializeResumeOkFrame(
frame: ResumeOkFrame,
encoders: Encoders<*>,
): Buffer {
const buffer = createBuffer(FRAME_HEADER_SIZE + RESUME_OK_FIXED_SIZE);
const offset = writeHeader(frame, buffer);
(0, _RSocketBufferUtils.writeUInt64BE)(buffer, frame.clientPosition, offset);
writeUInt64BE(buffer, frame.clientPosition, offset);
return buffer;
}
function sizeOfResumeOkFrame(frame, encoders) {
function sizeOfResumeOkFrame(
frame: ResumeOkFrame,
encoders: Encoders<*>,
): number {
return FRAME_HEADER_SIZE + RESUME_OK_FIXED_SIZE;
}
function deserializeResumeOkFrame(buffer, streamId, flags, encoders) {
(0, _Invariant.default)(
function deserializeResumeOkFrame(
buffer: Buffer,
streamId: number,
flags: number,
encoders: Encoders<*>,
): ResumeOkFrame {
invariant(
streamId === 0,
'RSocketBinaryFraming: Invalid RESUME frame, expected stream id to be 0.'
'RSocketBinaryFraming: Invalid RESUME frame, expected stream id to be 0.',
);
const length = buffer.length;
const clientPosition = (0, _RSocketBufferUtils.readUInt64BE)(
buffer,
FRAME_HEADER_SIZE
);
const clientPosition = readUInt64BE(buffer, FRAME_HEADER_SIZE);
return {

@@ -1125,3 +1215,3 @@ clientPosition,

streamId,
type: _RSocketFrame.FRAME_TYPES.RESUME_OK,
type: FRAME_TYPES.RESUME_OK,
};

@@ -1133,9 +1223,8 @@ }

*/
function writeHeader(frame, buffer) {
function writeHeader(frame: Frame, buffer: Buffer): number {
const offset = buffer.writeInt32BE(frame.streamId, 0);
// shift frame to high 6 bits, extract lowest 10 bits from flags
return buffer.writeUInt16BE(
(frame.type << _RSocketFrame.FRAME_TYPE_OFFFSET) |
(frame.flags & _RSocketFrame.FLAGS_MASK),
offset
(frame.type << FRAME_TYPE_OFFFSET) | (frame.flags & FLAGS_MASK),
offset,
);

@@ -1148,3 +1237,6 @@ }

*/
function getPayloadLength(frame, encoders) {
function getPayloadLength(
frame: FrameWithPayload,
encoders: Encoders<*>,
): number {
let payloadLength = 0;

@@ -1154,3 +1246,3 @@ if (frame.data != null) {

}
if ((0, _RSocketFrame.isMetadata)(frame.flags)) {
if (isMetadata(frame.flags)) {
payloadLength += UINT24_SIZE;

@@ -1168,11 +1260,12 @@ if (frame.metadata != null) {

*/
function writePayload(frame, buffer, encoders, offset) {
if ((0, _RSocketFrame.isMetadata)(frame.flags)) {
function writePayload(
frame: FrameWithPayload,
buffer: Buffer,
encoders: Encoders<*>,
offset: number,
): void {
if (isMetadata(frame.flags)) {
if (frame.metadata != null) {
const metaLength = encoders.metadata.byteLength(frame.metadata);
offset = (0, _RSocketBufferUtils.writeUInt24BE)(
buffer,
metaLength,
offset
);
offset = writeUInt24BE(buffer, metaLength, offset);
offset = encoders.metadata.encode(

@@ -1182,6 +1275,6 @@ frame.metadata,

offset,
offset + metaLength
offset + metaLength,
);
} else {
offset = (0, _RSocketBufferUtils.writeUInt24BE)(buffer, 0, offset);
offset = writeUInt24BE(buffer, 0, offset);
}

@@ -1198,5 +1291,10 @@ }

*/
function readPayload(buffer, frame, encoders, offset) {
if ((0, _RSocketFrame.isMetadata)(frame.flags)) {
const metaLength = (0, _RSocketBufferUtils.readUInt24BE)(buffer, offset);
function readPayload(
buffer: Buffer,
frame: FrameWithPayload,
encoders: Encoders<*>,
offset: number,
): void {
if (isMetadata(frame.flags)) {
const metaLength = readUInt24BE(buffer, offset);
offset += UINT24_SIZE;

@@ -1207,5 +1305,4 @@ if (metaLength > 0) {

offset,
offset + metaLength
offset + metaLength,
);
offset += metaLength;

@@ -1212,0 +1309,0 @@ }

@@ -15,3 +15,3 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/

@@ -21,14 +21,8 @@

/* eslint-disable no-bitwise */ Object.defineProperty(exports, '__esModule', {
value: true,
});
exports.readUInt24BE = readUInt24BE;
exports.writeUInt24BE = writeUInt24BE;
exports.readUInt64BE = readUInt64BE;
exports.writeUInt64BE = writeUInt64BE;
exports.byteLength = byteLength;
exports.createBuffer = exports.toBuffer = void 0;
/* eslint-disable no-bitwise */
var _LiteBuffer = require('./LiteBuffer');
import {LiteBuffer as Buffer} from './LiteBuffer';
export type Encoding = 'ascii' | 'base64' | 'hex' | 'utf8';
/**

@@ -42,3 +36,3 @@ * Mimimum value that would overflow bitwise operators (2^32).

*/
function readUInt24BE(buffer, offset) {
export function readUInt24BE(buffer: Buffer, offset: number): number {
const val1 = buffer.readUInt8(offset) << 16;

@@ -54,3 +48,7 @@ const val2 = buffer.readUInt8(offset + 1) << 8;

*/
function writeUInt24BE(buffer, value, offset) {
export function writeUInt24BE(
buffer: Buffer,
value: number,
offset: number,
): number {
offset = buffer.writeUInt8(value >>> 16, offset); // 3rd byte

@@ -65,3 +63,3 @@ offset = buffer.writeUInt8((value >>> 8) & 0xff, offset); // 2nd byte

*/
function readUInt64BE(buffer, offset) {
export function readUInt64BE(buffer: Buffer, offset: number): number {
const high = buffer.readUInt32BE(offset);

@@ -76,3 +74,7 @@ const low = buffer.readUInt32BE(offset + 4);

*/
function writeUInt64BE(buffer, value, offset) {
export function writeUInt64BE(
buffer: Buffer,
value: number,
offset: number,
): number {
const high = (value / BITWISE_OVERFLOW) | 0;

@@ -88,7 +90,7 @@ const low = value % BITWISE_OVERFLOW;

*/
function byteLength(data, encoding) {
export function byteLength(data: any, encoding: Encoding): number {
if (data == null) {
return 0;
}
return _LiteBuffer.LiteBuffer.byteLength(data, encoding);
return Buffer.byteLength(data, encoding);
}

@@ -99,20 +101,17 @@

*/
const toBuffer =
typeof _LiteBuffer.LiteBuffer.from === 'function'
? (...args) => {
export const toBuffer: (...args: any[]) => Buffer =
typeof Buffer.from === 'function'
? (...args: any[]) => {
// Buffer.from(buffer) copies which we don't want here
if (args[0] instanceof _LiteBuffer.LiteBuffer) {
if (args[0] instanceof Buffer) {
return args[0];
}
return _LiteBuffer.LiteBuffer.from.apply(_LiteBuffer.LiteBuffer, args);
return Buffer.from.apply(Buffer, args);
}
: (...args) => {
: (...args: any[]) => {
// Buffer.from(buffer) copies which we don't want here
if (args[0] instanceof _LiteBuffer.LiteBuffer) {
if (args[0] instanceof Buffer) {
return args[0];
}
return new (_LiteBuffer.LiteBuffer.bind.apply(_LiteBuffer.LiteBuffer, [
_LiteBuffer.LiteBuffer,
...args,
]))();
return new (Buffer.bind.apply(Buffer, [Buffer, ...args]))();
};

@@ -122,8 +121,7 @@

* Function to create a buffer of a given sized filled with zeros.
*/ exports.toBuffer = toBuffer;
const createBuffer =
typeof _LiteBuffer.LiteBuffer.alloc === 'function'
? (length) => _LiteBuffer.LiteBuffer.alloc(length)
*/
export const createBuffer: (...args: any[]) => Buffer =
typeof Buffer.alloc === 'function'
? (length: number) => Buffer.alloc(length)
: // $FlowFixMe
(length) => new _LiteBuffer.LiteBuffer(length).fill(0);
exports.createBuffer = createBuffer;
(length: number) => new Buffer(length).fill(0);

@@ -15,22 +15,42 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.default = void 0;
var _rsocketFlowable = require('rsocket-flowable');
var _Invariant = _interopRequireDefault(require('./Invariant'));
var _RSocketFrame = require('./RSocketFrame');
var _RSocketVersion = require('./RSocketVersion');
var _RSocketMachine = require('./RSocketMachine');
var _RSocketLease = require('./RSocketLease');
import type {
ConnectionStatus,
DuplexConnection,
Payload,
ReactiveSocket,
SetupFrame,
Responder,
} from 'rsocket-types';
import type {PayloadSerializers} from './RSocketSerialization';
var _RSocketSerialization = require('./RSocketSerialization');
var _ReassemblyDuplexConnection = require('./ReassemblyDuplexConnection');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import {Flowable, Single, every} from 'rsocket-flowable';
import invariant from './Invariant';
import {CONNECTION_STREAM_ID, FLAGS, FRAME_TYPES} from './RSocketFrame';
import {MAJOR_VERSION, MINOR_VERSION} from './RSocketVersion';
import {createClientMachine} from './RSocketMachine';
import {Lease, Leases} from './RSocketLease';
import {RequesterLeaseHandler, ResponderLeaseHandler} from './RSocketLease';
import {IdentitySerializers} from './RSocketSerialization';
import {ReassemblyDuplexConnection} from './ReassemblyDuplexConnection';
export type ClientConfig<D, M> = {|
serializers?: PayloadSerializers<D, M>,
setup: {|
payload?: Payload<D, M>,
dataMimeType: string,
keepAlive: number,
lifetime: number,
metadataMimeType: string,
|},
transport: DuplexConnection,
responder?: Responder<D, M>,
errorHandler?: (Error) => void,
leases?: () => Leases<*>,
|};
/**

@@ -46,4 +66,9 @@ * RSocketClient: A client in an RSocket connection that will communicates with

*/
class RSocketClient {
constructor(config) {
export default class RSocketClient<D, M> {
_cancel: ?() => void;
_config: ClientConfig<D, M>;
_connection: ?Single<ReactiveSocket<D, M>>;
_socket: ?RSocketClientSocket<D, M>;
constructor(config: ClientConfig<D, M>) {
this._checkConfig(config);

@@ -56,17 +81,16 @@ this._cancel = null;

close() {
close(): void {
this._config.transport.close();
}
connect() {
(0, _Invariant.default)(
connect(): Single<ReactiveSocket<D, M>> {
invariant(
!this._connection,
'RSocketClient: Unexpected call to connect(), already connected.'
'RSocketClient: Unexpected call to connect(), already connected.',
);
this._connection = new _rsocketFlowable.Single((subscriber) => {
this._connection = new Single(subscriber => {
const transport = this._config.transport;
let subscription;
transport.connectionStatus().subscribe({
onNext: (status) => {
onNext: status => {
if (status.kind === 'CONNECTED') {

@@ -77,6 +101,4 @@ subscription && subscription.cancel();

this._config,
new _ReassemblyDuplexConnection.ReassemblyDuplexConnection(
transport
)
)
new ReassemblyDuplexConnection(transport),
),
);

@@ -91,3 +113,3 @@ } else if (status.kind === 'ERROR') {

},
onSubscribe: (_subscription) => {
onSubscribe: _subscription => {
subscription = _subscription;

@@ -101,3 +123,2 @@ subscriber.onSubscribe(() => {

});
transport.connect();

@@ -108,3 +129,3 @@ });

_checkConfig(config) {
_checkConfig(config: ClientConfig<D, M>) {
const setup = config.setup;

@@ -125,3 +146,3 @@ const keepAlive = setup && setup.keepAlive;

console.warn(
'rsocket-js: Due to a browser bug, Internet Explorer and Edge users may experience WebSocket instability with keepAlive values longer than 30 seconds.'
'rsocket-js: Due to a browser bug, Internet Explorer and Edge users may experience WebSocket instability with keepAlive values longer than 30 seconds.',
);

@@ -137,24 +158,24 @@ }

* @private
*/ exports.default = RSocketClient;
class RSocketClientSocket {
constructor(config, connection) {
let requesterLeaseHandler;
let responderLeaseHandler;
*/
class RSocketClientSocket<D, M> implements ReactiveSocket<D, M> {
_machine: ReactiveSocket<D, M>;
constructor(config: ClientConfig<D, M>, connection: DuplexConnection) {
let requesterLeaseHandler: ?RequesterLeaseHandler;
let responderLeaseHandler: ?ResponderLeaseHandler;
const leasesSupplier = config.leases;
if (leasesSupplier) {
const lease = leasesSupplier();
requesterLeaseHandler = new _RSocketLease.RequesterLeaseHandler(
lease._receiver
requesterLeaseHandler = new RequesterLeaseHandler((lease: any)._receiver);
responderLeaseHandler = new ResponderLeaseHandler(
(lease: any)._sender,
(lease: any)._stats,
);
responderLeaseHandler = new _RSocketLease.ResponderLeaseHandler(
lease._sender,
lease._stats
);
}
const {keepAlive, lifetime} = config.setup;
this._machine = (0, _RSocketMachine.createClientMachine)(
this._machine = createClientMachine(
connection,
(subscriber) => connection.receive().subscribe(subscriber),
subscriber => connection.receive().subscribe(subscriber),
lifetime,

@@ -165,3 +186,3 @@ config.serializers,

requesterLeaseHandler,
responderLeaseHandler
responderLeaseHandler,
);

@@ -173,46 +194,45 @@

// Send KEEPALIVE frames
const keepAliveFrames = (0, _rsocketFlowable.every)(keepAlive).map(() => ({
const keepAliveFrames = every(keepAlive).map(() => ({
data: null,
flags: _RSocketFrame.FLAGS.RESPOND,
flags: FLAGS.RESPOND,
lastReceivedPosition: 0,
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.KEEPALIVE,
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.KEEPALIVE,
}));
connection.send(keepAliveFrames);
}
fireAndForget(payload) {
fireAndForget(payload: Payload<D, M>): void {
this._machine.fireAndForget(payload);
}
requestResponse(payload) {
requestResponse(payload: Payload<D, M>): Single<Payload<D, M>> {
return this._machine.requestResponse(payload);
}
requestStream(payload) {
requestStream(payload: Payload<D, M>): Flowable<Payload<D, M>> {
return this._machine.requestStream(payload);
}
requestChannel(payloads) {
requestChannel(payloads: Flowable<Payload<D, M>>): Flowable<Payload<D, M>> {
return this._machine.requestChannel(payloads);
}
metadataPush(payload) {
metadataPush(payload: Payload<D, M>): Single<void> {
return this._machine.metadataPush(payload);
}
close() {
close(): void {
this._machine.close();
}
connectionStatus() {
connectionStatus(): Flowable<ConnectionStatus> {
return this._machine.connectionStatus();
}
availability() {
availability(): number {
return this._machine.availability();
}
_buildSetupFrame(config) {
_buildSetupFrame(config: ClientConfig<D, M>): SetupFrame {
const {

@@ -226,4 +246,3 @@ dataMimeType,

const serializers =
config.serializers || _RSocketSerialization.IdentitySerializers;
const serializers = config.serializers || (IdentitySerializers: any);
const data = payload ? serializers.data.serialize(payload.data) : undefined;

@@ -235,3 +254,3 @@ const metadata = payload

if (metadata !== undefined) {
flags |= _RSocketFrame.FLAGS.METADATA;
flags |= FLAGS.METADATA;
}

@@ -241,14 +260,14 @@ return {

dataMimeType,
flags: flags | (config.leases ? _RSocketFrame.FLAGS.LEASE : 0),
flags: flags | (config.leases ? FLAGS.LEASE : 0),
keepAlive,
lifetime,
majorVersion: _RSocketVersion.MAJOR_VERSION,
majorVersion: MAJOR_VERSION,
metadata,
metadataMimeType,
minorVersion: _RSocketVersion.MINOR_VERSION,
minorVersion: MINOR_VERSION,
resumeToken: null,
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.SETUP,
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.SETUP,
};
}
}

@@ -15,27 +15,55 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.BufferEncoders = exports.Utf8Encoders = exports.BufferEncoder = exports.UTF8Encoder = void 0;
var _RSocketBufferUtils = require('./RSocketBufferUtils');
var _Invariant = _interopRequireDefault(require('./Invariant'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import type {Encodable} from 'rsocket-types';
const UTF8Encoder = {
byteLength: (value) => (0, _RSocketBufferUtils.byteLength)(value, 'utf8'),
decode: (buffer, start, end) => {
import {byteLength} from './RSocketBufferUtils';
import invariant from './Invariant';
/**
* Commonly used subset of the allowed Node Buffer Encoder types.
*/
export type Encoder<T: Encodable> = {|
byteLength: (value: Encodable) => number,
encode: (
value: Encodable,
buffer: Buffer,
start: number,
end: number,
) => number,
decode: (buffer: Buffer, start: number, end: number) => T,
|};
/**
* The Encoders object specifies how values should be serialized/deserialized
* to/from binary.
*/
export type Encoders<T: Encodable> = {|
data: Encoder<T>,
dataMimeType: Encoder<string>,
message: Encoder<string>,
metadata: Encoder<T>,
metadataMimeType: Encoder<string>,
resumeToken: Encoder<T>,
|};
export const UTF8Encoder: Encoder<string> = {
byteLength: (value: Encodable) => byteLength(value, 'utf8'),
decode: (buffer: Buffer, start: number, end: number): string => {
return buffer.toString('utf8', start, end);
},
encode: (value, buffer, start, end) => {
(0, _Invariant.default)(
encode: (
value: Encodable,
buffer: Buffer,
start: number,
end: number,
): number => {
invariant(
typeof value === 'string',
'RSocketEncoding: Expected value to be a string, got `%s`.',
value
value,
);
buffer.write(value, start, end - start, 'utf8');

@@ -45,25 +73,27 @@ return end;

};
exports.UTF8Encoder = UTF8Encoder;
const BufferEncoder = {
byteLength: (value) => {
(0, _Invariant.default)(
export const BufferEncoder: Encoder<Buffer> = {
byteLength: (value: Encodable) => {
invariant(
Buffer.isBuffer(value),
'RSocketEncoding: Expected value to be a buffer, got `%s`.',
value
value,
);
return value.length;
return (value: any).length;
},
decode: (buffer, start, end) => {
decode: (buffer: Buffer, start: number, end: number): Buffer => {
return buffer.slice(start, end);
},
encode: (value, buffer, start, end) => {
(0, _Invariant.default)(
encode: (
value: Encodable,
buffer: Buffer,
start: number,
end: number,
): number => {
invariant(
Buffer.isBuffer(value),
'RSocketEncoding: Expected value to be a buffer, got `%s`.',
value
value,
);
value.copy(buffer, start, 0, value.length);
(value: any).copy(buffer, start, 0, value.length);
return end;

@@ -75,4 +105,4 @@ },

* Encode all values as UTF8 strings.
*/ exports.BufferEncoder = BufferEncoder;
const Utf8Encoders = {
*/
export const Utf8Encoders: Encoders<string> = {
data: UTF8Encoder,

@@ -88,4 +118,4 @@ dataMimeType: UTF8Encoder,

* Encode all values as buffers.
*/ exports.Utf8Encoders = Utf8Encoders;
const BufferEncoders = {
*/
export const BufferEncoders: Encoders<Buffer> = {
data: BufferEncoder,

@@ -98,2 +128,1 @@ dataMimeType: UTF8Encoder,

};
exports.BufferEncoders = BufferEncoders;

@@ -15,76 +15,13 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
/* eslint-disable max-len, no-bitwise */ Object.defineProperty(
exports,
'__esModule',
{value: true}
);
exports.isIgnore = isIgnore;
exports.isMetadata = isMetadata;
exports.isComplete = isComplete;
exports.isNext = isNext;
exports.isRespond = isRespond;
exports.isResumeEnable = isResumeEnable;
exports.isLease = isLease;
exports.isFollows = isFollows;
exports.isResumePositionFrameType = isResumePositionFrameType;
exports.getFrameTypeName = getFrameTypeName;
exports.createErrorFromFrame = createErrorFromFrame;
exports.getErrorCodeExplanation = getErrorCodeExplanation;
exports.printFrame = printFrame;
exports.MAX_VERSION = exports.MAX_TTL = exports.MAX_STREAM_ID = exports.MAX_RESUME_LENGTH = exports.MAX_REQUEST_N = exports.MAX_REQUEST_COUNT = exports.MAX_MIME_LENGTH = exports.MAX_METADATA_LENGTH = exports.MAX_LIFETIME = exports.MAX_KEEPALIVE = exports.MAX_CODE = exports.FRAME_TYPE_OFFFSET = exports.FLAGS_MASK = exports.ERROR_EXPLANATIONS = exports.ERROR_CODES = exports.FLAGS = exports.FRAME_TYPE_NAMES = exports.FRAME_TYPES = exports.CONNECTION_STREAM_ID = void 0;
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly)
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(
target,
key,
Object.getOwnPropertyDescriptor(source, key)
);
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
/* eslint-disable max-len, no-bitwise */
const CONNECTION_STREAM_ID = 0;
exports.CONNECTION_STREAM_ID = CONNECTION_STREAM_ID;
import type {ErrorFrame, Frame} from 'rsocket-types';
const FRAME_TYPES = {
export const CONNECTION_STREAM_ID = 0;
export const FRAME_TYPES = {
CANCEL: 0x09, // Cancel Request: Cancel outstanding request.

@@ -109,5 +46,3 @@ ERROR: 0x0b, // Error: Error at connection or application level.

// Maps frame type codes to type names
exports.FRAME_TYPES = FRAME_TYPES;
const FRAME_TYPE_NAMES = {};
exports.FRAME_TYPE_NAMES = FRAME_TYPE_NAMES;
export const FRAME_TYPE_NAMES: {[typeCode: number]: string} = {};
for (const name in FRAME_TYPES) {

@@ -118,3 +53,3 @@ const value = FRAME_TYPES[name];

const FLAGS = {
export const FLAGS = {
COMPLETE: 0x40, // PAYLOAD, REQUEST_CHANNEL: indicates stream completion, if set onComplete will be invoked on receiver.

@@ -131,4 +66,3 @@ FOLLOWS: 0x80, // PAYLOAD, REQUEST_XXX: indicates that frame was fragmented and requires reassembly

// Maps error names to codes
exports.FLAGS = FLAGS;
const ERROR_CODES = {
export const ERROR_CODES = {
APPLICATION_ERROR: 0x00000201,

@@ -149,5 +83,3 @@ CANCELED: 0x00000203,

// Maps error codes to names
exports.ERROR_CODES = ERROR_CODES;
const ERROR_EXPLANATIONS = {};
exports.ERROR_EXPLANATIONS = ERROR_EXPLANATIONS;
export const ERROR_EXPLANATIONS: {[code: number]: string} = {};
for (const explanation in ERROR_CODES) {

@@ -158,32 +90,21 @@ const code = ERROR_CODES[explanation];

const FLAGS_MASK = 0x3ff; // low 10 bits
exports.FLAGS_MASK = FLAGS_MASK;
const FRAME_TYPE_OFFFSET = 10; // frame type is offset 10 bytes within the uint16 containing type + flags
exports.FRAME_TYPE_OFFFSET = FRAME_TYPE_OFFFSET;
const MAX_CODE = 0x7fffffff; // uint31
exports.MAX_CODE = MAX_CODE;
const MAX_KEEPALIVE = 0x7fffffff; // uint31
exports.MAX_KEEPALIVE = MAX_KEEPALIVE;
const MAX_LIFETIME = 0x7fffffff; // uint31
exports.MAX_LIFETIME = MAX_LIFETIME;
const MAX_METADATA_LENGTH = 0xffffff; // uint24
exports.MAX_METADATA_LENGTH = MAX_METADATA_LENGTH;
const MAX_MIME_LENGTH = 0xff; // int8
exports.MAX_MIME_LENGTH = MAX_MIME_LENGTH;
const MAX_REQUEST_COUNT = 0x7fffffff; // uint31
exports.MAX_REQUEST_COUNT = MAX_REQUEST_COUNT;
const MAX_REQUEST_N = 0x7fffffff; // uint31
exports.MAX_REQUEST_N = MAX_REQUEST_N;
const MAX_RESUME_LENGTH = 0xffff; // uint16
exports.MAX_RESUME_LENGTH = MAX_RESUME_LENGTH;
const MAX_STREAM_ID = 0x7fffffff; // uint31
exports.MAX_STREAM_ID = MAX_STREAM_ID;
const MAX_TTL = 0x7fffffff; // uint31
exports.MAX_TTL = MAX_TTL;
const MAX_VERSION = 0xffff; // uint16
export const FLAGS_MASK = 0x3ff; // low 10 bits
export const FRAME_TYPE_OFFFSET = 10; // frame type is offset 10 bytes within the uint16 containing type + flags
export const MAX_CODE = 0x7fffffff; // uint31
export const MAX_KEEPALIVE = 0x7fffffff; // uint31
export const MAX_LIFETIME = 0x7fffffff; // uint31
export const MAX_METADATA_LENGTH = 0xffffff; // uint24
export const MAX_MIME_LENGTH = 0xff; // int8
export const MAX_REQUEST_COUNT = 0x7fffffff; // uint31
export const MAX_REQUEST_N = 0x7fffffff; // uint31
export const MAX_RESUME_LENGTH = 0xffff; // uint16
export const MAX_STREAM_ID = 0x7fffffff; // uint31
export const MAX_TTL = 0x7fffffff; // uint31
export const MAX_VERSION = 0xffff; // uint16
/**
* Returns true iff the flags have the IGNORE bit set.
*/ exports.MAX_VERSION = MAX_VERSION;
function isIgnore(flags) {
*/
export function isIgnore(flags: number): boolean {
return (flags & FLAGS.IGNORE) === FLAGS.IGNORE;

@@ -195,3 +116,3 @@ }

*/
function isMetadata(flags) {
export function isMetadata(flags: number): boolean {
return (flags & FLAGS.METADATA) === FLAGS.METADATA;

@@ -203,3 +124,3 @@ }

*/
function isComplete(flags) {
export function isComplete(flags: number): boolean {
return (flags & FLAGS.COMPLETE) === FLAGS.COMPLETE;

@@ -211,3 +132,3 @@ }

*/
function isNext(flags) {
export function isNext(flags: number): boolean {
return (flags & FLAGS.NEXT) === FLAGS.NEXT;

@@ -219,3 +140,3 @@ }

*/
function isRespond(flags) {
export function isRespond(flags: number): boolean {
return (flags & FLAGS.RESPOND) === FLAGS.RESPOND;

@@ -227,3 +148,3 @@ }

*/
function isResumeEnable(flags) {
export function isResumeEnable(flags: number): boolean {
return (flags & FLAGS.RESUME_ENABLE) === FLAGS.RESUME_ENABLE;

@@ -235,7 +156,7 @@ }

*/
function isLease(flags) {
export function isLease(flags: number): boolean {
return (flags & FLAGS.LEASE) === FLAGS.LEASE;
}
function isFollows(flags) {
export function isFollows(flags: number): boolean {
return (flags & FLAGS.FOLLOWS) === FLAGS.FOLLOWS;

@@ -248,3 +169,3 @@ }

*/
function isResumePositionFrameType(type) {
export function isResumePositionFrameType(type: number): boolean {
return (

@@ -262,3 +183,3 @@ type === FRAME_TYPES.CANCEL ||

function getFrameTypeName(type) {
export function getFrameTypeName(type: number): string {
const name = FRAME_TYPE_NAMES[type];

@@ -270,3 +191,3 @@ return name != null ? name : toHex(type);

let index = 0;
return format.replace(/%s/g, (match) => args[index++]);
return format.replace(/%s/g, match => args[index++]);
}

@@ -283,3 +204,3 @@

*/
function createErrorFromFrame(frame) {
export function createErrorFromFrame(frame: ErrorFrame): Error {
const {code, message} = frame;

@@ -292,7 +213,6 @@ const explanation = getErrorCodeExplanation(code);

explanation,
message
)
message,
),
);
error.source = {
(error: any).source = {
code,

@@ -302,3 +222,2 @@ explanation,

};
return error;

@@ -311,3 +230,3 @@ }

*/
function getErrorCodeExplanation(code) {
export function getErrorCodeExplanation(code: number): string {
const explanation = ERROR_EXPLANATIONS[code];

@@ -327,4 +246,4 @@ if (explanation != null) {

*/
function printFrame(frame) {
const obj = _objectSpread({}, frame);
export function printFrame(frame: Frame): string {
const obj: Object = {...frame};
obj.type = getFrameTypeName(frame.type) + ` (${toHex(frame.type)})`;

@@ -348,4 +267,4 @@ const flagNames = [];

function toHex(n) {
function toHex(n: number): string {
return '0x' + n.toString(16);
}

@@ -15,39 +15,39 @@ /** Copyright 2015-2019 the original author or authors.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.ResponderLeaseHandler = exports.RequesterLeaseHandler = exports.Leases = exports.Lease = void 0;
var _Invariant = _interopRequireDefault(require('./Invariant'));
var _rsocketFlowable = require('rsocket-flowable');
import type {Encodable} from 'rsocket-types';
var _RSocketFrame = require('./RSocketFrame');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
import invariant from './Invariant';
import {Flowable} from 'rsocket-flowable';
import type {LeaseFrame, ISubscriber, ISubscription} from 'rsocket-types';
import {MAX_REQUEST_N} from './RSocketFrame';
export type EventType = 'Accept' | 'Reject' | 'Terminate';
export interface LeaseStats {
onEvent(event: EventType): void,
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
export interface Disposable {
dispose(): void,
isDisposed(): boolean,
}
class Lease {
constructor(timeToLiveMillis, allowedRequests, metadata) {
(0, _Invariant.default)(
timeToLiveMillis > 0,
'Lease time-to-live must be positive'
);
(0, _Invariant.default)(
allowedRequests > 0,
'Lease allowed requests must be positive'
);
export class Lease {
allowedRequests: number;
startingAllowedRequests: number;
timeToLiveMillis: number;
expiry: number;
metadata: ?Encodable;
constructor(
timeToLiveMillis: number,
allowedRequests: number,
metadata: ?Encodable,
) {
invariant(timeToLiveMillis > 0, 'Lease time-to-live must be positive');
invariant(allowedRequests > 0, 'Lease allowed requests must be positive');
this.timeToLiveMillis = timeToLiveMillis;

@@ -60,7 +60,7 @@ this.allowedRequests = allowedRequests;

expired() {
expired(): boolean {
return Date.now() > this.expiry;
}
valid() {
valid(): boolean {
return this.allowedRequests > 0 && !this.expired();

@@ -70,7 +70,7 @@ }

// todo hide
_use() {
_use(): boolean {
if (this.expired()) {
return false;
}
const allowed = this.allowedRequests;
const allowed: number = this.allowedRequests;
const success = allowed > 0;

@@ -83,11 +83,9 @@ if (success) {

}
exports.Lease = Lease;
class Leases {
constructor() {
_defineProperty(this, '_sender', () => _rsocketFlowable.Flowable.never());
_defineProperty(this, '_receiver', (leases) => {});
}
export class Leases<T: LeaseStats> {
_sender: (?T) => Flowable<Lease> = () => Flowable.never();
_receiver: (Flowable<Lease>) => void = leases => {};
_stats: ?T;
sender(sender) {
sender(sender: (?T) => Flowable<Lease>): Leases<T> {
this._sender = sender;

@@ -97,3 +95,3 @@ return this;

receiver(receiver) {
receiver(receiver: (Flowable<Lease>) => void): Leases<T> {
this._receiver = receiver;

@@ -103,3 +101,3 @@ return this;

stats(stats) {
stats(stats: T): Leases<T> {
this._stats = stats;

@@ -109,11 +107,19 @@ return this;

}
exports.Leases = Leases;
class RequesterLeaseHandler {
export interface LeaseHandler {
use(): boolean,
errorMessage(): string,
}
export class RequesterLeaseHandler implements LeaseHandler, Disposable {
_isDisposed: boolean;
_subscriber: ?ISubscriber<Lease>;
/*negative value means received lease was not signalled due to missing requestN*/
_requestN: number = -1;
_lease: ?Lease;
constructor(leaseReceiver) {
_defineProperty(this, '_requestN', -1);
constructor(leaseReceiver: (Flowable<Lease>) => void) {
leaseReceiver(
new _rsocketFlowable.Flowable((subscriber) => {
new Flowable(subscriber => {
if (this._subscriber) {

@@ -132,6 +138,6 @@ subscriber.onError(new Error('only 1 subscriber is allowed'));

},
request: (n) => {
request: n => {
if (n <= 0) {
subscriber.onError(
new Error(`request demand must be positive: ${n}`)
new Error(`request demand must be positive: ${n}`),
);

@@ -144,3 +150,3 @@ }

Number.MAX_SAFE_INTEGER,
Math.max(0, curReqN) + n
Math.max(0, curReqN) + n,
);

@@ -150,7 +156,7 @@ }

});
})
}),
);
}
use() {
use(): boolean {
const l = this._lease;

@@ -160,7 +166,7 @@ return l ? l._use() : false;

errorMessage() {
errorMessage(): string {
return _errorMessage(this._lease);
}
receive(frame) {
receive(frame: LeaseFrame): void {
if (!this.isDisposed()) {

@@ -174,3 +180,3 @@ const timeToLiveMillis = frame.ttl;

availability() {
availability(): number {
const l = this._lease;

@@ -183,3 +189,3 @@ if (l && l.valid()) {

dispose() {
dispose(): void {
if (!this._isDisposed) {

@@ -194,7 +200,7 @@ this._isDisposed = true;

isDisposed() {
isDisposed(): boolean {
return this._isDisposed;
}
_onRequestN(requestN) {
_onRequestN(requestN: number) {
const l = this._lease;

@@ -207,3 +213,3 @@ const s = this._subscriber;

_onLease(lease) {
_onLease(lease: Lease) {
const s = this._subscriber;

@@ -218,6 +224,14 @@ const newReqN = this._requestN - 1;

}
exports.RequesterLeaseHandler = RequesterLeaseHandler;
class ResponderLeaseHandler {
constructor(leaseSender, stats, errorConsumer) {
export class ResponderLeaseHandler implements LeaseHandler {
_lease: ?Lease;
_leaseSender: (?LeaseStats) => Flowable<Lease>;
_stats: ?LeaseStats;
_errorConsumer: ?(Error) => void;
constructor(
leaseSender: (?LeaseStats) => Flowable<Lease>,
stats: ?LeaseStats,
errorConsumer: ?(Error) => void,
) {
this._leaseSender = leaseSender;

@@ -228,3 +242,3 @@ this._stats = stats;

use() {
use(): boolean {
const l = this._lease;

@@ -236,13 +250,13 @@ const success = l ? l._use() : false;

errorMessage() {
errorMessage(): string {
return _errorMessage(this._lease);
}
send(send) {
let subscription;
let isDisposed;
send(send: (Lease) => void): Disposable {
let subscription: ?ISubscription;
let isDisposed: boolean;
this._leaseSender(this._stats).subscribe({
onComplete: () => this._onStatsEvent(),
onError: (error) => {
onError: error => {
this._onStatsEvent();

@@ -254,7 +268,7 @@ const errConsumer = this._errorConsumer;

},
onNext: (lease) => {
onNext: lease => {
this._lease = lease;
send(lease);
},
onSubscribe: (s) => {
onSubscribe: s => {
if (isDisposed) {

@@ -264,3 +278,3 @@ s.cancel();

}
s.request(_RSocketFrame.MAX_REQUEST_N);
s.request(MAX_REQUEST_N);
subscription = s;

@@ -271,3 +285,3 @@ },

return {
dispose() {
dispose(): void {
if (!isDisposed) {

@@ -282,3 +296,3 @@ isDisposed = true;

isDisposed() {
isDisposed(): boolean {
return isDisposed;

@@ -289,3 +303,3 @@ },

_onStatsEvent(success) {
_onStatsEvent(success?: boolean) {
const s = this._stats;

@@ -299,5 +313,4 @@ if (s) {

}
exports.ResponderLeaseHandler = ResponderLeaseHandler;
function _errorMessage(lease) {
function _errorMessage(lease: ?Lease): string {
if (!lease) {

@@ -304,0 +317,0 @@ return 'Lease was not received yet';

@@ -15,72 +15,64 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.createServerMachine = createServerMachine;
exports.createClientMachine = createClientMachine;
var _rsocketFlowable = require('rsocket-flowable');
var _RSocketFrame = require('./RSocketFrame');
import type {
CancelFrame,
ConnectionStatus,
DuplexConnection,
Frame,
FrameWithData,
Payload,
Responder,
PartialResponder,
ReactiveSocket,
RequestFnfFrame,
RequestNFrame,
RequestResponseFrame,
RequestStreamFrame,
RequestChannelFrame,
MetadataPushFrame,
} from 'rsocket-types';
import type {ISubject, ISubscription, IPartialSubscriber} from 'rsocket-types';
import type {PayloadSerializers} from './RSocketSerialization';
var _RSocketSerialization = require('./RSocketSerialization');
var _RSocketLease = require('./RSocketLease');
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly)
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(
target,
key,
Object.getOwnPropertyDescriptor(source, key)
);
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
import {Flowable, FlowableProcessor, Single} from 'rsocket-flowable';
import {
createErrorFromFrame,
getFrameTypeName,
isComplete,
isNext,
isRespond,
CONNECTION_STREAM_ID,
ERROR_CODES,
FLAGS,
FRAME_TYPES,
MAX_REQUEST_N,
MAX_STREAM_ID,
} from './RSocketFrame';
import {IdentitySerializers} from './RSocketSerialization';
import {
LeaseHandler,
RequesterLeaseHandler,
ResponderLeaseHandler,
Disposable,
} from './RSocketLease';
import RSocketError from './RSocketError';
class ResponderWrapper {
constructor(responder) {
type Role = 'CLIENT' | 'SERVER';
class ResponderWrapper<D, M> implements Responder<D, M> {
_responder: PartialResponder<D, M>;
constructor(responder: ?PartialResponder<D, M>) {
this._responder = responder || {};
}
setResponder(responder) {
setResponder(responder: ?PartialResponder<D, M>): void {
this._responder = responder || {};
}
fireAndForget(payload) {
fireAndForget(payload: Payload<D, M>): void {
if (this._responder.fireAndForget) {

@@ -95,4 +87,4 @@ try {

requestResponse(payload) {
let error;
requestResponse(payload: Payload<D, M>): Single<Payload<D, M>> {
let error: ?Error;
if (this._responder.requestResponse) {

@@ -106,7 +98,7 @@ try {

}
return _rsocketFlowable.Single.error(error || new Error('not implemented'));
return Single.error(error || new Error('not implemented'));
}
requestStream(payload) {
let error;
requestStream(payload: Payload<D, M>): Flowable<Payload<D, M>> {
let error: ?Error;
if (this._responder.requestStream) {

@@ -120,9 +112,7 @@ try {

}
return _rsocketFlowable.Flowable.error(
error || new Error('not implemented')
);
return Flowable.error(error || new Error('not implemented'));
}
requestChannel(payloads) {
let error;
requestChannel(payloads: Flowable<Payload<D, M>>): Flowable<Payload<D, M>> {
let error: ?Error;
if (this._responder.requestChannel) {

@@ -136,9 +126,7 @@ try {

}
return _rsocketFlowable.Flowable.error(
error || new Error('not implemented')
);
return Flowable.error(error || new Error('not implemented'));
}
metadataPush(payload) {
let error;
metadataPush(payload: Payload<D, M>): Single<void> {
let error: ?Error;
if (this._responder.metadataPush) {

@@ -152,15 +140,19 @@ try {

}
return _rsocketFlowable.Single.error(error || new Error('not implemented'));
return Single.error(error || new Error('not implemented'));
}
}
function createServerMachine(
connection,
connectionPublisher,
keepAliveTimeout,
serializers,
errorHandler,
requesterLeaseHandler,
responderLeaseHandler
) {
export interface RSocketMachine<D, M> extends ReactiveSocket<D, M> {
setRequestHandler(requestHandler: ?PartialResponder<D, M>): void,
}
export function createServerMachine<D, M>(
connection: DuplexConnection,
connectionPublisher: (partialSubscriber: IPartialSubscriber<Frame>) => void,
keepAliveTimeout: number,
serializers?: ?PayloadSerializers<D, M>,
errorHandler?: (Error) => void,
requesterLeaseHandler?: ?RequesterLeaseHandler,
responderLeaseHandler?: ?ResponderLeaseHandler,
): RSocketMachine<D, M> {
return new RSocketMachineImpl(

@@ -175,16 +167,16 @@ 'SERVER',

requesterLeaseHandler,
responderLeaseHandler
responderLeaseHandler,
);
}
function createClientMachine(
connection,
connectionPublisher,
keepAliveTimeout,
serializers,
requestHandler,
errorHandler,
requesterLeaseHandler,
responderLeaseHandler
) {
export function createClientMachine<D, M>(
connection: DuplexConnection,
connectionPublisher: (partialSubscriber: IPartialSubscriber<Frame>) => void,
keepAliveTimeout: number,
serializers?: ?PayloadSerializers<D, M>,
requestHandler?: ?PartialResponder<D, M>,
errorHandler?: (Error) => void,
requesterLeaseHandler?: ?RequesterLeaseHandler,
responderLeaseHandler?: ?ResponderLeaseHandler,
): RSocketMachine<D, M> {
return new RSocketMachineImpl(

@@ -199,68 +191,32 @@ 'CLIENT',

requesterLeaseHandler,
responderLeaseHandler
responderLeaseHandler,
);
}
class RSocketMachineImpl {
class RSocketMachineImpl<D, M> implements RSocketMachine<D, M> {
_requestHandler: ResponderWrapper<D, M>;
_connection: DuplexConnection;
_nextStreamId: number;
_receivers: Map<number, ISubject<Payload<D, M>>>;
_subscriptions: Map<number, ISubscription>;
_serializers: PayloadSerializers<D, M>;
_connectionAvailability: number = 1.0;
_requesterLeaseHandler: ?RequesterLeaseHandler;
_responderLeaseHandler: ?ResponderLeaseHandler;
_responderLeaseSenderDisposable: ?Disposable;
_errorHandler: ?(Error) => void;
_keepAliveLastReceivedMillis: number;
_keepAliveTimerHandle: ?TimeoutID;
constructor(
role,
connection,
connectionPublisher,
keepAliveTimeout,
serializers,
requestHandler,
errorHandler,
requesterLeaseHandler,
responderLeaseHandler
role: Role,
connection: DuplexConnection,
connectionPublisher: (partialSubscriber: IPartialSubscriber<Frame>) => void,
keepAliveTimeout: number,
serializers: ?PayloadSerializers<D, M>,
requestHandler: ?PartialResponder<D, M>,
errorHandler: ?(Error) => void,
requesterLeaseHandler: ?RequesterLeaseHandler,
responderLeaseHandler: ?ResponderLeaseHandler,
) {
_defineProperty(this, '_connectionAvailability', 1.0);
_defineProperty(
this,
'_handleTransportClose',
() => {
this._handleError(new Error('RSocket: The connection was closed.'));
}
);
_defineProperty(
this,
'_handleError',
(error) => {
// Error any open request streams
this._receivers.forEach((receiver) => {
receiver.onError(error);
});
this._receivers.clear();
// Cancel any active subscriptions
this._subscriptions.forEach((subscription) => {
subscription.cancel();
});
this._subscriptions.clear();
this._connectionAvailability = 0.0;
this._dispose(
this._requesterLeaseHandler,
this._responderLeaseSenderDisposable
);
const handle = this._keepAliveTimerHandle;
if (handle) {
clearTimeout(handle);
this._keepAliveTimerHandle = null;
}
}
);
_defineProperty(
this,
'_handleFrame',
(frame) => {
const {streamId} = frame;
if (streamId === _RSocketFrame.CONNECTION_STREAM_ID) {
this._handleConnectionFrame(frame);
} else {
this._handleStreamFrame(streamId, frame);
}
}
);
this._connection = connection;

@@ -272,6 +228,7 @@ this._requesterLeaseHandler = requesterLeaseHandler;

this._subscriptions = new Map();
this._serializers =
serializers || _RSocketSerialization.IdentitySerializers;
this._serializers = serializers || (IdentitySerializers: any);
this._requestHandler = new ResponderWrapper(requestHandler);
this._errorHandler = errorHandler; // Subscribe to completion/errors before sending anything
this._errorHandler = errorHandler;
// Subscribe to completion/errors before sending anything
connectionPublisher({

@@ -281,13 +238,15 @@ onComplete: this._handleTransportClose,

onNext: this._handleFrame,
onSubscribe: (subscription) =>
onSubscribe: subscription =>
subscription.request(Number.MAX_SAFE_INTEGER),
});
const responderHandler = this._responderLeaseHandler;
if (responderHandler) {
this._responderLeaseSenderDisposable = responderHandler.send(
this._leaseFrameSender()
this._leaseFrameSender(),
);
} // Cleanup when the connection closes
}
// Cleanup when the connection closes
this._connection.connectionStatus().subscribe({
onNext: (status) => {
onNext: status => {
if (status.kind === 'CLOSED') {

@@ -299,5 +258,6 @@ this._handleTransportClose();

},
onSubscribe: (subscription) =>
onSubscribe: subscription =>
subscription.request(Number.MAX_SAFE_INTEGER),
});
const MIN_TICK_DURATION = 100;

@@ -310,3 +270,3 @@ this._keepAliveLastReceivedMillis = Date.now();

this._handleConnectionError(
new Error(`No keep-alive acks for ${keepAliveTimeout} millis`)
new Error(`No keep-alive acks for ${keepAliveTimeout} millis`),
);

@@ -316,3 +276,3 @@ } else {

keepAliveHandler,
Math.max(MIN_TICK_DURATION, keepAliveTimeout - noKeepAliveDuration)
Math.max(MIN_TICK_DURATION, keepAliveTimeout - noKeepAliveDuration),
);

@@ -323,12 +283,16 @@ }

}
setRequestHandler(requestHandler) {
setRequestHandler(requestHandler: ?PartialResponder<D, M>): void {
this._requestHandler.setResponder(requestHandler);
}
close() {
close(): void {
this._connection.close();
}
connectionStatus() {
connectionStatus(): Flowable<ConnectionStatus> {
return this._connection.connectionStatus();
}
availability() {
availability(): number {
const r = this._requesterLeaseHandler;

@@ -338,3 +302,4 @@ const requesterAvailability = r ? r.availability() : 1.0;

}
fireAndForget(payload) {
fireAndForget(payload: Payload<D, M>): void {
if (this._useLeaseOrError(this._requesterLeaseHandler)) {

@@ -348,20 +313,22 @@ return;

data,
flags: payload.metadata !== undefined ? _RSocketFrame.FLAGS.METADATA : 0,
flags: payload.metadata !== undefined ? FLAGS.METADATA : 0,
metadata,
streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_FNF,
type: FRAME_TYPES.REQUEST_FNF,
};
this._connection.sendOne(frame);
}
requestResponse(payload) {
requestResponse(payload: Payload<D, M>): Single<Payload<D, M>> {
const leaseError = this._useLeaseOrError(this._requesterLeaseHandler);
if (leaseError) {
return _rsocketFlowable.Single.error(new Error(leaseError));
return Single.error(new Error(leaseError));
}
const streamId = this._getNextStreamId(this._receivers);
return new _rsocketFlowable.Single((subscriber) => {
return new Single(subscriber => {
this._receivers.set(streamId, {
onComplete: () => {},
onError: (error) => subscriber.onError(error),
onNext: (data) => subscriber.onComplete(data),
onError: error => subscriber.onError(error),
onNext: data => subscriber.onComplete(data),
});

@@ -372,9 +339,9 @@ const data = this._serializers.data.serialize(payload.data);

data,
flags:
payload.metadata !== undefined ? _RSocketFrame.FLAGS.METADATA : 0,
flags: payload.metadata !== undefined ? FLAGS.METADATA : 0,
metadata,
streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE,
type: FRAME_TYPES.REQUEST_RESPONSE,
};
this._connection.sendOne(frame);
subscriber.onSubscribe(() => {

@@ -385,3 +352,3 @@ this._receivers.delete(streamId);

streamId,
type: _RSocketFrame.FRAME_TYPES.CANCEL,
type: FRAME_TYPES.CANCEL,
};

@@ -392,11 +359,15 @@ this._connection.sendOne(cancelFrame);

}
requestStream(payload) {
requestStream(payload: Payload<D, M>): Flowable<Payload<D, M>> {
const leaseError = this._useLeaseOrError(this._requesterLeaseHandler);
if (leaseError) {
return _rsocketFlowable.Flowable.error(new Error(leaseError));
return Flowable.error(new Error(leaseError));
}
const streamId = this._getNextStreamId(this._receivers);
return new _rsocketFlowable.Flowable((subscriber) => {
return new Flowable(subscriber => {
this._receivers.set(streamId, subscriber);
let initialized = false;
subscriber.onSubscribe({

@@ -411,9 +382,9 @@ cancel: () => {

streamId,
type: _RSocketFrame.FRAME_TYPES.CANCEL,
type: FRAME_TYPES.CANCEL,
};
this._connection.sendOne(cancelFrame);
},
request: (n) => {
if (n > _RSocketFrame.MAX_REQUEST_N) {
n = _RSocketFrame.MAX_REQUEST_N;
request: n => {
if (n > MAX_REQUEST_N) {
n = MAX_REQUEST_N;
}

@@ -425,3 +396,3 @@ if (initialized) {

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_N,
type: FRAME_TYPES.REQUEST_N,
};

@@ -433,14 +404,11 @@ this._connection.sendOne(requestNFrame);

const metadata = this._serializers.metadata.serialize(
payload.metadata
payload.metadata,
);
const requestStreamFrame = {
data,
flags:
payload.metadata !== undefined
? _RSocketFrame.FLAGS.METADATA
: 0,
flags: payload.metadata !== undefined ? FLAGS.METADATA : 0,
metadata,
requestN: n,
streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_STREAM,
type: FRAME_TYPES.REQUEST_STREAM,
};

@@ -451,15 +419,19 @@ this._connection.sendOne(requestStreamFrame);

});
}, _RSocketFrame.MAX_REQUEST_N);
}, MAX_REQUEST_N);
}
requestChannel(payloads) {
requestChannel(payloads: Flowable<Payload<D, M>>): Flowable<Payload<D, M>> {
const leaseError = this._useLeaseOrError(this._requesterLeaseHandler);
if (leaseError) {
return _rsocketFlowable.Flowable.error(new Error(leaseError));
return Flowable.error(new Error(leaseError));
}
const streamId = this._getNextStreamId(this._receivers);
let payloadsSubscribed = false;
return new _rsocketFlowable.Flowable((subscriber) => {
return new Flowable(subscriber => {
try {
this._receivers.set(streamId, subscriber);
let initialized = false;
subscriber.onSubscribe({

@@ -474,9 +446,9 @@ cancel: () => {

streamId,
type: _RSocketFrame.FRAME_TYPES.CANCEL,
type: FRAME_TYPES.CANCEL,
};
this._connection.sendOne(cancelFrame);
},
request: (n) => {
if (n > _RSocketFrame.MAX_REQUEST_N) {
n = _RSocketFrame.MAX_REQUEST_N;
request: n => {
if (n > MAX_REQUEST_N) {
n = MAX_REQUEST_N;
}

@@ -488,3 +460,3 @@ if (initialized) {

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_N,
type: FRAME_TYPES.REQUEST_N,
};

@@ -499,9 +471,10 @@ this._connection.sendOne(requestNFrame);

},
onError: (error) => {
this._sendStreamError(streamId, error.message);
}, //Subscriber methods
onNext: (payload) => {
onError: error => {
this._sendStreamError(streamId, error);
},
//Subscriber methods
onNext: payload => {
const data = this._serializers.data.serialize(payload.data);
const metadata = this._serializers.metadata.serialize(
payload.metadata
payload.metadata,
);

@@ -513,9 +486,7 @@ if (!initialized) {

flags:
payload.metadata !== undefined
? _RSocketFrame.FLAGS.METADATA
: 0,
payload.metadata !== undefined ? FLAGS.METADATA : 0,
metadata,
requestN: n,
streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL,
type: FRAME_TYPES.REQUEST_CHANNEL,
};

@@ -527,9 +498,7 @@ this._connection.sendOne(requestChannelFrame);

flags:
_RSocketFrame.FLAGS.NEXT |
(payload.metadata !== undefined
? _RSocketFrame.FLAGS.METADATA
: 0),
FLAGS.NEXT |
(payload.metadata !== undefined ? FLAGS.METADATA : 0),
metadata,
streamId,
type: _RSocketFrame.FRAME_TYPES.PAYLOAD,
type: FRAME_TYPES.PAYLOAD,
};

@@ -539,3 +508,3 @@ this._connection.sendOne(payloadFrame);

},
onSubscribe: (subscription) => {
onSubscribe: subscription => {
this._subscriptions.set(streamId, subscription);

@@ -548,3 +517,3 @@ subscription.request(1);

'RSocketClient: re-entrant call to request n before initial' +
' channel established.'
' channel established.',
);

@@ -558,6 +527,7 @@ }

}
}, _RSocketFrame.MAX_REQUEST_N);
}, MAX_REQUEST_N);
}
metadataPush(payload) {
return new _rsocketFlowable.Single((subscriber) => {
metadataPush(payload: Payload<D, M>): Single<void> {
return new Single(subscriber => {
const metadata = this._serializers.metadata.serialize(payload.metadata);

@@ -568,5 +538,6 @@ const frame = {

streamId: 0,
type: _RSocketFrame.FRAME_TYPES.METADATA_PUSH,
type: FRAME_TYPES.METADATA_PUSH,
};
this._connection.sendOne(frame);
subscriber.onSubscribe(() => {});

@@ -576,11 +547,12 @@ subscriber.onComplete();

}
_getNextStreamId(streamIds) {
_getNextStreamId(streamIds: Map<number, ISubject<Payload<D, M>>>): number {
const streamId = this._nextStreamId;
do {
this._nextStreamId =
(this._nextStreamId + 2) & _RSocketFrame.MAX_STREAM_ID;
this._nextStreamId = (this._nextStreamId + 2) & MAX_STREAM_ID;
} while (this._nextStreamId === 0 || streamIds.has(streamId));
return streamId;
}
_useLeaseOrError(leaseHandler) {
_useLeaseOrError(leaseHandler: ?LeaseHandler): ?string {
if (leaseHandler) {

@@ -592,4 +564,5 @@ if (!leaseHandler.use()) {

}
_leaseFrameSender() {
return (lease) =>
return lease =>
this._connection.sendOne({

@@ -599,9 +572,10 @@ flags: 0,

requestCount: lease.allowedRequests,
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
streamId: CONNECTION_STREAM_ID,
ttl: lease.timeToLiveMillis,
type: _RSocketFrame.FRAME_TYPES.LEASE,
type: FRAME_TYPES.LEASE,
});
}
_dispose(...disposables) {
disposables.forEach((d) => {
_dispose(...disposables: Array<?Disposable>) {
disposables.forEach(d => {
if (d) {

@@ -612,8 +586,9 @@ d.dispose();

}
_isRequest(frameType) {
_isRequest(frameType: number) {
switch (frameType) {
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_CHANNEL:
return true;

@@ -624,5 +599,37 @@ default:

}
/**
* Handle the connection closing normally: this is an error for any open streams.
*/ _handleConnectionError(error) {
*/
_handleTransportClose = (): void => {
this._handleError(new Error('RSocket: The connection was closed.'));
};
/**
* Handle the transport connection closing abnormally or a connection-level protocol error.
*/
_handleError = (error: Error) => {
// Error any open request streams
this._receivers.forEach(receiver => {
receiver.onError(error);
});
this._receivers.clear();
// Cancel any active subscriptions
this._subscriptions.forEach(subscription => {
subscription.cancel();
});
this._subscriptions.clear();
this._connectionAvailability = 0.0;
this._dispose(
this._requesterLeaseHandler,
this._responderLeaseSenderDisposable,
);
const handle = this._keepAliveTimerHandle;
if (handle) {
clearTimeout(handle);
this._keepAliveTimerHandle = null;
}
};
_handleConnectionError(error: Error): void {
this._handleError(error);

@@ -635,31 +642,38 @@ this._connection.close();

}
/**
* Handle a frame received from the transport client.
*/ /**
*/
_handleFrame = (frame: Frame) => {
const {streamId} = frame;
if (streamId === CONNECTION_STREAM_ID) {
this._handleConnectionFrame(frame);
} else {
this._handleStreamFrame(streamId, frame);
}
};
/**
* Handle connection frames (stream id === 0).
*/ _handleConnectionFrame(frame) {
*/
_handleConnectionFrame(frame: Frame): void {
switch (frame.type) {
case _RSocketFrame.FRAME_TYPES.ERROR:
const error = (0, _RSocketFrame.createErrorFromFrame)(frame);
case FRAME_TYPES.ERROR:
const error = createErrorFromFrame(frame);
this._handleConnectionError(error);
break;
case _RSocketFrame.FRAME_TYPES.EXT:
case FRAME_TYPES.EXT:
// Extensions are not supported
break;
case _RSocketFrame.FRAME_TYPES.KEEPALIVE:
case FRAME_TYPES.KEEPALIVE:
this._keepAliveLastReceivedMillis = Date.now();
if ((0, _RSocketFrame.isRespond)(frame.flags)) {
this._connection.sendOne(
_objectSpread(
_objectSpread({}, frame),
{},
{
flags: frame.flags ^ _RSocketFrame.FLAGS.RESPOND, // eslint-disable-line no-bitwise
lastReceivedPosition: 0,
}
)
);
if (isRespond(frame.flags)) {
this._connection.sendOne({
...frame,
flags: frame.flags ^ FLAGS.RESPOND, // eslint-disable-line no-bitwise
lastReceivedPosition: 0,
});
}
break;
case _RSocketFrame.FRAME_TYPES.LEASE:
case FRAME_TYPES.LEASE:
const r = this._requesterLeaseHandler;

@@ -670,24 +684,24 @@ if (r) {

break;
case _RSocketFrame.FRAME_TYPES.METADATA_PUSH:
case FRAME_TYPES.METADATA_PUSH:
this._handleMetadataPush(frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_STREAM:
// TODO #18064706: handle requests from server
break;
case _RSocketFrame.FRAME_TYPES.RESERVED:
case FRAME_TYPES.RESERVED:
// No-op
break;
case _RSocketFrame.FRAME_TYPES.RESUME:
case _RSocketFrame.FRAME_TYPES.RESUME_OK:
case FRAME_TYPES.RESUME:
case FRAME_TYPES.RESUME_OK:
// TODO #18065016: support resumption
break;
default:
if (false) {
if (__DEV__) {
console.log(
'RSocketClient: Unsupported frame type `%s` on stream `%s`.',
(0, _RSocketFrame.getFrameTypeName)(frame.type),
_RSocketFrame.CONNECTION_STREAM_ID
getFrameTypeName(frame.type),
CONNECTION_STREAM_ID,
);

@@ -702,7 +716,7 @@ }

*/
_handleStreamFrame(streamId, frame) {
_handleStreamFrame(streamId: number, frame: Frame): void {
if (this._isRequest(frame.type)) {
const leaseError = this._useLeaseOrError(this._responderLeaseHandler);
if (leaseError) {
this._sendStreamError(streamId, leaseError);
this._sendStreamError(streamId, new Error(leaseError));
return;

@@ -712,28 +726,28 @@ }

switch (frame.type) {
case _RSocketFrame.FRAME_TYPES.CANCEL:
case FRAME_TYPES.CANCEL:
this._handleCancel(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_N:
case FRAME_TYPES.REQUEST_N:
this._handleRequestN(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_FNF:
case FRAME_TYPES.REQUEST_FNF:
this._handleFireAndForget(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_RESPONSE:
case FRAME_TYPES.REQUEST_RESPONSE:
this._handleRequestResponse(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_STREAM:
case FRAME_TYPES.REQUEST_STREAM:
this._handleRequestStream(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.REQUEST_CHANNEL:
case FRAME_TYPES.REQUEST_CHANNEL:
this._handleRequestChannel(streamId, frame);
break;
case _RSocketFrame.FRAME_TYPES.ERROR:
const error = (0, _RSocketFrame.createErrorFromFrame)(frame);
case FRAME_TYPES.ERROR:
const error = createErrorFromFrame(frame);
this._handleStreamError(streamId, error);
break;
case _RSocketFrame.FRAME_TYPES.PAYLOAD:
case FRAME_TYPES.PAYLOAD:
const receiver = this._receivers.get(streamId);
if (receiver != null) {
if ((0, _RSocketFrame.isNext)(frame.flags)) {
if (isNext(frame.flags)) {
const payload = {

@@ -743,6 +757,5 @@ data: this._serializers.data.deserialize(frame.data),

};
receiver.onNext(payload);
}
if ((0, _RSocketFrame.isComplete)(frame.flags)) {
if (isComplete(frame.flags)) {
this._receivers.delete(streamId);

@@ -754,7 +767,7 @@ receiver.onComplete();

default:
if (false) {
if (__DEV__) {
console.log(
'RSocketClient: Unsupported frame type `%s` on stream `%s`.',
(0, _RSocketFrame.getFrameTypeName)(frame.type),
streamId
getFrameTypeName(frame.type),
streamId,
);

@@ -766,3 +779,3 @@ }

_handleCancel(streamId, frame) {
_handleCancel(streamId: number, frame: CancelFrame): void {
const subscription = this._subscriptions.get(streamId);

@@ -775,3 +788,3 @@ if (subscription) {

_handleRequestN(streamId, frame) {
_handleRequestN(streamId: number, frame: RequestNFrame): void {
const subscription = this._subscriptions.get(streamId);

@@ -783,3 +796,3 @@ if (subscription) {

_handleFireAndForget(streamId, frame) {
_handleFireAndForget(streamId: number, frame: RequestFnfFrame): void {
const payload = this._deserializePayload(frame);

@@ -789,10 +802,10 @@ this._requestHandler.fireAndForget(payload);

_handleRequestResponse(streamId, frame) {
_handleRequestResponse(streamId: number, frame: RequestResponseFrame): void {
const payload = this._deserializePayload(frame);
this._requestHandler.requestResponse(payload).subscribe({
onComplete: (payload) => {
onComplete: payload => {
this._sendStreamPayload(streamId, payload, true);
},
onError: (error) => this._sendStreamError(streamId, error.message),
onSubscribe: (cancel) => {
onError: error => this._sendStreamError(streamId, error),
onSubscribe: cancel => {
const subscription = {

@@ -802,3 +815,2 @@ cancel,

};
this._subscriptions.set(streamId, subscription);

@@ -809,9 +821,9 @@ },

_handleRequestStream(streamId, frame) {
_handleRequestStream(streamId: number, frame: RequestStreamFrame): void {
const payload = this._deserializePayload(frame);
this._requestHandler.requestStream(payload).subscribe({
onComplete: () => this._sendStreamComplete(streamId),
onError: (error) => this._sendStreamError(streamId, error.message),
onNext: (payload) => this._sendStreamPayload(streamId, payload),
onSubscribe: (subscription) => {
onError: error => this._sendStreamError(streamId, error),
onNext: payload => this._sendStreamPayload(streamId, payload),
onSubscribe: subscription => {
this._subscriptions.set(streamId, subscription);

@@ -823,3 +835,3 @@ subscription.request(frame.requestN);

_handleRequestChannel(streamId, frame) {
_handleRequestChannel(streamId: number, frame: RequestChannelFrame): void {
const existingSubscription = this._subscriptions.get(streamId);

@@ -831,3 +843,3 @@ if (existingSubscription) {

const payloads = new _rsocketFlowable.Flowable((subscriber) => {
const payloads = new Flowable(subscriber => {
let firstRequest = true;

@@ -841,10 +853,9 @@

streamId,
type: _RSocketFrame.FRAME_TYPES.CANCEL,
type: FRAME_TYPES.CANCEL,
};
this._connection.sendOne(cancelFrame);
},
request: (n) => {
if (n > _RSocketFrame.MAX_REQUEST_N) {
n = _RSocketFrame.MAX_REQUEST_N;
request: n => {
if (n > MAX_REQUEST_N) {
n = MAX_REQUEST_N;
}

@@ -860,5 +871,4 @@ if (firstRequest) {

streamId,
type: _RSocketFrame.FRAME_TYPES.REQUEST_N,
type: FRAME_TYPES.REQUEST_N,
};
this._connection.sendOne(requestNFrame);

@@ -874,8 +884,6 @@ }

});
}, _RSocketFrame.MAX_REQUEST_N);
const framesToPayloads = new _rsocketFlowable.FlowableProcessor(
payloads,
(frame) => this._deserializePayload(frame)
}, MAX_REQUEST_N);
const framesToPayloads = new FlowableProcessor(payloads, frame =>
this._deserializePayload(frame),
);
this._receivers.set(streamId, framesToPayloads);

@@ -885,5 +893,5 @@

onComplete: () => this._sendStreamComplete(streamId),
onError: (error) => this._sendStreamError(streamId, error.message),
onNext: (payload) => this._sendStreamPayload(streamId, payload),
onSubscribe: (subscription) => {
onError: error => this._sendStreamError(streamId, error),
onNext: payload => this._sendStreamPayload(streamId, payload),
onSubscribe: subscription => {
this._subscriptions.set(streamId, subscription);

@@ -895,43 +903,54 @@ subscription.request(frame.requestN);

_handleMetadataPush(frame) {
_handleMetadataPush(frame: MetadataPushFrame): void {
const payload = this._deserializeMetadataPushPayload(frame);
this._requestHandler.metadataPush(payload).subscribe({
onComplete: () => {},
onError: (error) => {},
onSubscribe: (cancel) => {},
onError: error => {},
onSubscribe: cancel => {},
});
}
_sendStreamComplete(streamId) {
_sendStreamComplete(streamId: number): void {
this._subscriptions.delete(streamId);
this._connection.sendOne({
data: null,
flags: _RSocketFrame.FLAGS.COMPLETE,
flags: FLAGS.COMPLETE,
metadata: null,
streamId,
type: _RSocketFrame.FRAME_TYPES.PAYLOAD,
type: FRAME_TYPES.PAYLOAD,
});
}
_sendStreamError(streamId, errorMessage) {
_sendStreamError(streamId: number, err: Error): void {
this._subscriptions.delete(streamId);
this._connection.sendOne({
code: _RSocketFrame.ERROR_CODES.APPLICATION_ERROR,
code:
err instanceof RSocketError
? err.errorCode
: ERROR_CODES.APPLICATION_ERROR,
flags: 0,
message: errorMessage,
message: err.message,
streamId,
type: _RSocketFrame.FRAME_TYPES.ERROR,
type: FRAME_TYPES.ERROR,
});
const error = new Error(`terminated from the requester: ${errorMessage}`);
const error = new Error(`terminated from the requester: ${err.message}`);
this._handleStreamError(streamId, error);
}
_sendStreamPayload(streamId, payload, complete = false) {
let flags = _RSocketFrame.FLAGS.NEXT;
_sendStreamPayload(
streamId: number,
payload: Payload<D, M>,
complete?: boolean = false,
): void {
let flags = FLAGS.NEXT;
if (complete) {
// eslint-disable-next-line no-bitwise
flags |= _RSocketFrame.FLAGS.COMPLETE;
flags |= FLAGS.COMPLETE;
this._subscriptions.delete(streamId);
}
if (payload.metadata !== undefined &&
payload.metadata !== null) {
// eslint-disable-next-line no-bitwise
flags |= FLAGS.METADATA;
}
const data = this._serializers.data.serialize(payload.data);

@@ -944,11 +963,11 @@ const metadata = this._serializers.metadata.serialize(payload.metadata);

streamId,
type: _RSocketFrame.FRAME_TYPES.PAYLOAD,
type: FRAME_TYPES.PAYLOAD,
});
}
_deserializePayload(frame) {
_deserializePayload(frame: FrameWithData): Payload<D, M> {
return deserializePayload(this._serializers, frame);
}
_deserializeMetadataPushPayload(frame) {
_deserializeMetadataPushPayload(frame: MetadataPushFrame): Payload<D, M> {
return deserializeMetadataPushPayload(this._serializers, frame);

@@ -960,3 +979,3 @@ }

*/
_handleStreamError(streamId, error) {
_handleStreamError(streamId: number, error: Error): void {
const receiver = this._receivers.get(streamId);

@@ -970,3 +989,6 @@ if (receiver != null) {

function deserializePayload(serializers, frame) {
function deserializePayload<D, M>(
serializers: PayloadSerializers<D, M>,
frame: FrameWithData,
): Payload<D, M> {
return {

@@ -978,3 +1000,6 @@ data: serializers.data.deserialize(frame.data),

function deserializeMetadataPushPayload(serializers, frame) {
function deserializeMetadataPushPayload<D, M>(
serializers: PayloadSerializers<D, M>,
frame: MetadataPushFrame,
): Payload<D, M> {
return {

@@ -981,0 +1006,0 @@ data: null,

@@ -15,65 +15,34 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.default = void 0;
var _rsocketFlowable = require('rsocket-flowable');
var _Invariant = _interopRequireDefault(require('./Invariant'));
var _RSocketFrame = require('./RSocketFrame');
import type {
ConnectionStatus,
DuplexConnection,
Frame,
SetupFrame,
} from 'rsocket-types';
import type {ISubject, ISubscription} from 'rsocket-types';
var _rsocketTypes = require('rsocket-types');
import {Flowable} from 'rsocket-flowable';
import invariant from './Invariant';
import {
createErrorFromFrame,
isResumePositionFrameType,
CONNECTION_STREAM_ID,
FLAGS,
FRAME_TYPES,
} from './RSocketFrame';
import {CONNECTION_STATUS} from 'rsocket-types';
import type {Encodable} from 'rsocket-types';
import {sizeOfFrame} from './RSocketBinaryFraming';
import type {Encoders} from './RSocketEncoding';
var _RSocketBinaryFraming = require('./RSocketBinaryFraming');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly)
symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};
if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(
target,
key,
Object.getOwnPropertyDescriptor(source, key)
);
});
}
}
return target;
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
export type Options = {|
bufferSize: number,
resumeToken: Encodable,
sessionDurationSeconds: number,
|};

@@ -137,10 +106,34 @@ /**

*/
class RSocketResumableTransport {
constructor(source, options, encoders) {
(0, _Invariant.default)(
export default class RSocketResumableTransport implements DuplexConnection {
_encoders: ?Encoders<*>;
_bufferSize: number;
_sentFramesSize: number;
_position: {
client: number, // earliest client frame still buffered
server: number, // latest server frame received
};
_currentConnection: ?DuplexConnection;
_statusSubscription: ?ISubscription;
_receiveSubscription: ?ISubscription;
_receivers: Set<ISubject<Frame>>;
_resumeToken: Encodable;
_sessionTimeoutMillis: number;
_sessionTimeoutHandle: ?TimeoutID;
_senders: Set<ISubscription>;
_sentFrames: Array<Frame>;
_setupFrame: ?SetupFrame;
_source: () => DuplexConnection;
_status: ConnectionStatus;
_statusSubscribers: Set<ISubject<ConnectionStatus>>;
constructor(
source: () => DuplexConnection,
options: Options,
encoders: ?Encoders<*>,
) {
invariant(
options.bufferSize >= 0,
'RSocketResumableTransport: bufferSize option must be >= 0, got `%s`.',
options.bufferSize
options.bufferSize,
);
this._encoders = encoders;

@@ -153,3 +146,2 @@ this._bufferSize = options.bufferSize;

};
this._currentConnection = null;

@@ -166,18 +158,17 @@ this._statusSubscription = null;

this._source = source;
this._status = _rsocketTypes.CONNECTION_STATUS.NOT_CONNECTED;
this._status = CONNECTION_STATUS.NOT_CONNECTED;
this._statusSubscribers = new Set();
}
close() {
close(): void {
this._close();
}
connect() {
(0, _Invariant.default)(
connect(): void {
invariant(
!this._isTerminated(),
'RSocketResumableTransport: Cannot connect(), connection terminated (%s: %s).',
this._status.kind,
this._status.kind === 'ERROR' ? this._status.error.message : 'no message'
this._status.kind === 'ERROR' ? this._status.error.message : 'no message',
);
try {

@@ -188,6 +179,6 @@ this._disconnect();

this._statusSubscription = null;
this._setConnectionStatus(_rsocketTypes.CONNECTION_STATUS.CONNECTING);
this._setConnectionStatus(CONNECTION_STATUS.CONNECTING);
const connection = this._source();
connection.connectionStatus().subscribe({
onNext: (status) => {
onNext: status => {
if (status.kind === this._status.kind) {

@@ -212,12 +203,10 @@ return;

() => this._close(this._resumeTimeoutError()),
this._sessionTimeoutMillis
this._sessionTimeoutMillis,
);
}
this._disconnect();
this._setConnectionStatus(
_rsocketTypes.CONNECTION_STATUS.NOT_CONNECTED
);
this._setConnectionStatus(CONNECTION_STATUS.NOT_CONNECTED);
}
},
onSubscribe: (subscription) => {
onSubscribe: subscription => {
this._statusSubscription = subscription;

@@ -227,3 +216,2 @@ subscription.request(Number.MAX_SAFE_INTEGER);

});
connection.connect();

@@ -235,4 +223,4 @@ } catch (error) {

connectionStatus() {
return new _rsocketFlowable.Flowable((subscriber) => {
connectionStatus(): Flowable<ConnectionStatus> {
return new Flowable(subscriber => {
subscriber.onSubscribe({

@@ -250,4 +238,4 @@ cancel: () => {

receive() {
return new _rsocketFlowable.Flowable((subject) => {
receive(): Flowable<Frame> {
return new Flowable(subject => {
let added = false;

@@ -268,3 +256,3 @@ subject.onSubscribe({

sendOne(frame) {
sendOne(frame: Frame): void {
try {

@@ -277,3 +265,3 @@ this._writeFrame(frame);

send(frames) {
send(frames: Flowable<Frame>): void {
let subscription;

@@ -284,8 +272,8 @@ frames.subscribe({

},
onError: (error) => {
onError: error => {
subscription && this._senders.delete(subscription);
this._close(error);
},
onNext: (frame) => this._writeFrame(frame),
onSubscribe: (_subscription) => {
onNext: frame => this._writeFrame(frame),
onSubscribe: _subscription => {
subscription = _subscription;

@@ -298,3 +286,3 @@ this._senders.add(subscription);

_close(error) {
_close(error?: Error): void {
if (this._isTerminated()) {

@@ -306,10 +294,10 @@ return;

} else {
this._setConnectionStatus(_rsocketTypes.CONNECTION_STATUS.CLOSED);
this._setConnectionStatus(CONNECTION_STATUS.CLOSED);
}
const receivers = this._receivers;
receivers.forEach((r) => r.onComplete());
receivers.forEach(r => r.onComplete());
receivers.clear();
const senders = this._senders;
senders.forEach((s) => s.cancel());
senders.forEach(s => s.cancel());
senders.clear();

@@ -321,3 +309,3 @@ this._sentFrames.length = 0;

_disconnect() {
_disconnect(): void {
if (this._statusSubscription) {

@@ -337,8 +325,8 @@ this._statusSubscription.cancel();

_handleConnected(connection) {
_handleConnected(connection: DuplexConnection): void {
this._currentConnection = connection;
this._flushFrames();
this._setConnectionStatus(_rsocketTypes.CONNECTION_STATUS.CONNECTED);
this._setConnectionStatus(CONNECTION_STATUS.CONNECTED);
connection.receive().subscribe({
onNext: (frame) => {
onNext: frame => {
try {

@@ -350,3 +338,3 @@ this._receiveFrame(frame);

},
onSubscribe: (subscription) => {
onSubscribe: subscription => {
this._receiveSubscription = subscription;

@@ -358,3 +346,3 @@ subscription.request(Number.MAX_SAFE_INTEGER);

_handleResume(connection) {
_handleResume(connection: DuplexConnection): void {
connection

@@ -364,5 +352,5 @@ .receive()

.subscribe({
onNext: (frame) => {
onNext: frame => {
try {
if (frame.type === _RSocketFrame.FRAME_TYPES.RESUME_OK) {
if (frame.type === FRAME_TYPES.RESUME_OK) {
const {clientPosition} = frame;

@@ -383,5 +371,4 @@ // clientPosition indicates which frames the server is missing:

const frameSize = this._onReleasedTailFrame(
this._sentFrames[index]
this._sentFrames[index],
);
if (!frameSize) {

@@ -406,9 +393,8 @@ this._close(this._absentLengthError(frame));

const error =
frame.type === _RSocketFrame.FRAME_TYPES.ERROR
? (0, _RSocketFrame.createErrorFromFrame)(frame)
frame.type === FRAME_TYPES.ERROR
? createErrorFromFrame(frame)
: new Error(
'RSocketResumableTransport: Resumption failed for an ' +
'unspecified reason.'
'unspecified reason.',
);
this._close(error);

@@ -420,3 +406,3 @@ }

},
onSubscribe: (subscription) => {
onSubscribe: subscription => {
this._receiveSubscription = subscription;

@@ -426,9 +412,7 @@ subscription.request(1);

});
const setupFrame = this._setupFrame;
(0, _Invariant.default)(
invariant(
setupFrame,
'RSocketResumableTransport: Cannot resume, setup frame has not been sent.'
'RSocketResumableTransport: Cannot resume, setup frame has not been sent.',
);
connection.sendOne({

@@ -441,10 +425,10 @@ clientPosition: this._position.client,

serverPosition: this._position.server,
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.RESUME,
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.RESUME,
});
}
_absentLengthError(frame) {
_absentLengthError(frame: Frame) {
return new Error(
'RSocketResumableTransport: absent frame.length for type ' + frame.type
'RSocketResumableTransport: absent frame.length for type ' + frame.type,
);

@@ -455,3 +439,3 @@ }

return new Error(
'RSocketResumableTransport: local frames are inconsistent with remote implied position'
'RSocketResumableTransport: local frames are inconsistent with remote implied position',
);

@@ -463,3 +447,3 @@ }

'RSocketResumableTransport: resumption failed, server is ' +
'missing frames that are no longer in the client buffer.'
'missing frames that are no longer in the client buffer.',
);

@@ -472,7 +456,7 @@ }

_isTerminated() {
_isTerminated(): boolean {
return this._isTerminationStatus(this._status);
}
_isTerminationStatus(status) {
_isTerminationStatus(status: ConnectionStatus): boolean {
const kind = status.kind;

@@ -482,3 +466,3 @@ return kind === 'CLOSED' || kind === 'ERROR';

_setConnectionStatus(status) {
_setConnectionStatus(status: ConnectionStatus): void {
if (status.kind === this._status.kind) {

@@ -488,7 +472,7 @@ return;

this._status = status;
this._statusSubscribers.forEach((subscriber) => subscriber.onNext(status));
this._statusSubscribers.forEach(subscriber => subscriber.onNext(status));
}
_receiveFrame(frame) {
if ((0, _RSocketFrame.isResumePositionFrameType)(frame.type)) {
_receiveFrame(frame: Frame): void {
if (isResumePositionFrameType(frame.type)) {
if (frame.length) {

@@ -499,7 +483,7 @@ this._position.server += frame.length;

// TODO: trim _sentFrames on KEEPALIVE frame
this._receivers.forEach((subscriber) => subscriber.onNext(frame));
this._receivers.forEach(subscriber => subscriber.onNext(frame));
}
_flushFrames() {
this._sentFrames.forEach((frame) => {
_flushFrames(): void {
this._sentFrames.forEach(frame => {
const connection = this._currentConnection;

@@ -512,3 +496,3 @@ if (connection) {

_onReleasedTailFrame(frame) {
_onReleasedTailFrame(frame: Frame): ?number {
const removedFrameSize = frame.length;

@@ -522,24 +506,17 @@ if (removedFrameSize) {

_writeFrame(frame) {
_writeFrame(frame: Frame): void {
// Ensure that SETUP frames contain the resume token
if (frame.type === _RSocketFrame.FRAME_TYPES.SETUP) {
frame = _objectSpread(
_objectSpread({}, frame),
{},
{
flags: frame.flags | _RSocketFrame.FLAGS.RESUME_ENABLE, // eslint-disable-line no-bitwise
resumeToken: this._resumeToken,
}
);
this._setupFrame = frame; // frame can only be a SetupFrame
if (frame.type === FRAME_TYPES.SETUP) {
frame = {
...frame,
flags: frame.flags | FLAGS.RESUME_ENABLE, // eslint-disable-line no-bitwise
resumeToken: this._resumeToken,
};
this._setupFrame = (frame: $FlowIssue); // frame can only be a SetupFrame
}
frame.length = (0, _RSocketBinaryFraming.sizeOfFrame)(
frame,
this._encoders
);
frame.length = sizeOfFrame(frame, this._encoders);
// If connected, immediately write frames to the low-level transport
// and consider them "sent". The resumption protocol will figure out
// which frames may not have been received and recover.
if ((0, _RSocketFrame.isResumePositionFrameType)(frame.type)) {
if (isResumePositionFrameType(frame.type)) {
let available = this._bufferSize - this._sentFramesSize;

@@ -579,2 +556,1 @@ const frameSize = frame.length;

}
exports.default = RSocketResumableTransport;

@@ -15,17 +15,28 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.IdentitySerializers = exports.IdentitySerializer = exports.JsonSerializers = exports.JsonSerializer = void 0;
var _LiteBuffer = require('./LiteBuffer');
var _Invariant = _interopRequireDefault(require('./Invariant'));
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
}
import type {Encodable} from 'rsocket-types';
import {LiteBuffer as Buffer} from './LiteBuffer';
import invariant from './Invariant';
/**
* A Serializer transforms data between the application encoding used in
* Payloads and the Encodable type accepted by the transport client.
*/
export type Serializer<T> = {|
deserialize: (data: ?Encodable) => ?T,
serialize: (data: ?T) => ?Encodable,
|};
export type PayloadSerializers<D, M> = {|
data: Serializer<D>,
metadata: Serializer<M>,
|};
// JSON serializer
const JsonSerializer = {
deserialize: (data) => {
export const JsonSerializer: Serializer<*> = {
deserialize: data => {
let str;

@@ -36,7 +47,7 @@ if (data == null) {

str = data;
} else if (_LiteBuffer.LiteBuffer.isBuffer(data)) {
const buffer = data;
} else if (Buffer.isBuffer(data)) {
const buffer: Buffer = data;
str = buffer.toString('utf8');
} else {
const buffer = _LiteBuffer.LiteBuffer.from(data);
const buffer: Buffer = Buffer.from(data);
str = buffer.toString('utf8');

@@ -48,5 +59,4 @@ }

};
exports.JsonSerializer = JsonSerializer;
const JsonSerializers = {
export const JsonSerializers = {
data: JsonSerializer,

@@ -57,25 +67,21 @@ metadata: JsonSerializer,

// Pass-through serializer
exports.JsonSerializers = JsonSerializers;
const IdentitySerializer = {
deserialize: (data) => {
(0, _Invariant.default)(
export const IdentitySerializer: Serializer<Encodable> = {
deserialize: data => {
invariant(
data == null ||
typeof data === 'string' ||
_LiteBuffer.LiteBuffer.isBuffer(data) ||
Buffer.isBuffer(data) ||
data instanceof Uint8Array,
'RSocketSerialization: Expected data to be a string, Buffer, or ' +
'Uint8Array. Got `%s`.',
data
data,
);
return data;
},
serialize: (data) => data,
serialize: data => data,
};
exports.IdentitySerializer = IdentitySerializer;
const IdentitySerializers = {
export const IdentitySerializers = {
data: IdentitySerializer,
metadata: IdentitySerializer,
};
exports.IdentitySerializers = IdentitySerializers;

@@ -15,34 +15,51 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.default = void 0;
var _rsocketFlowable = require('rsocket-flowable');
var _Invariant = _interopRequireDefault(require('./Invariant'));
var _RSocketFrame = require('./RSocketFrame');
import type {
DuplexConnection,
Frame,
FrameWithData,
Payload,
ReactiveSocket,
PartialResponder,
} from 'rsocket-types';
import type {
ISubscription,
ISubscriber,
IPartialSubscriber,
} from 'rsocket-types';
import type {PayloadSerializers} from './RSocketSerialization';
var _RSocketSerialization = require('./RSocketSerialization');
var _RSocketMachine = require('./RSocketMachine');
var _RSocketLease = require('./RSocketLease');
import {Flowable} from 'rsocket-flowable';
import invariant from './Invariant';
import {
getFrameTypeName,
CONNECTION_STREAM_ID,
ERROR_CODES,
FRAME_TYPES,
FLAGS,
} from './RSocketFrame';
import {IdentitySerializers} from './RSocketSerialization';
import {createServerMachine} from './RSocketMachine';
import {Leases} from './RSocketLease';
import {RequesterLeaseHandler, ResponderLeaseHandler} from './RSocketLease';
import {ReassemblyDuplexConnection} from './ReassemblyDuplexConnection';
var _ReassemblyDuplexConnection = require('./ReassemblyDuplexConnection');
function _interopRequireDefault(obj) {
return obj && obj.__esModule ? obj : {default: obj};
export interface TransportServer {
start(): Flowable<DuplexConnection>,
stop(): void,
}
function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true,
});
} else {
obj[key] = value;
}
return obj;
}
export type ServerConfig<D, M> = {|
getRequestHandler: (
socket: ReactiveSocket<D, M>,
payload: Payload<D, M>,
) => PartialResponder<D, M>,
serializers?: PayloadSerializers<D, M>,
transport: TransportServer,
errorHandler?: (Error) => void,
leases?: () => Leases<*>,
|};

@@ -53,144 +70,9 @@ /**

*/
class RSocketServer {
constructor(config) {
_defineProperty(
this,
'_handleTransportComplete',
export default class RSocketServer<D, M> {
_config: ServerConfig<D, M>;
_connections: Set<ReactiveSocket<D, M>>;
_started: boolean;
_subscription: ?ISubscription;
() => {
this._handleTransportError(
new Error('RSocketServer: Connection closed unexpectedly.')
);
}
);
_defineProperty(
this,
'_handleTransportError',
(error) => {
this._connections.forEach((connection) => {
// TODO: Allow passing in error
connection.close();
});
}
);
_defineProperty(
this,
'_handleTransportConnection',
(connection) => {
const swapper = new SubscriberSwapper();
let subscription;
connection = new _ReassemblyDuplexConnection.ReassemblyDuplexConnection(
connection
);
connection.receive().subscribe(
swapper.swap({
onError: (error) => console.error(error),
onNext: (frame) => {
switch (frame.type) {
case _RSocketFrame.FRAME_TYPES.RESUME:
connection.sendOne({
code: _RSocketFrame.ERROR_CODES.REJECTED_RESUME,
flags: 0,
message: 'RSocketServer: RESUME not supported.',
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.ERROR,
});
connection.close();
break;
case _RSocketFrame.FRAME_TYPES.SETUP:
if (this._setupLeaseError(frame)) {
connection.sendOne({
code: _RSocketFrame.ERROR_CODES.INVALID_SETUP,
flags: 0,
message: 'RSocketServer: LEASE not supported.',
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.ERROR,
});
connection.close();
break;
}
const serializers = this._getSerializers();
let requesterLeaseHandler;
let responderLeaseHandler;
const leasesSupplier = this._config.leases;
if (leasesSupplier) {
const lease = leasesSupplier();
requesterLeaseHandler = new _RSocketLease.RequesterLeaseHandler(
lease._receiver
);
responderLeaseHandler = new _RSocketLease.ResponderLeaseHandler(
lease._sender,
lease._stats
);
}
const serverMachine = (0,
_RSocketMachine.createServerMachine)(
connection,
(subscriber) => {
swapper.swap(subscriber);
},
frame.lifetime,
serializers,
this._config.errorHandler,
requesterLeaseHandler,
responderLeaseHandler
);
try {
const requestHandler = this._config.getRequestHandler(
serverMachine,
deserializePayload(serializers, frame)
);
serverMachine.setRequestHandler(requestHandler);
this._connections.add(serverMachine);
connection.connectionStatus().subscribe({
onNext: (status) => {
if (
status.kind === 'CLOSED' ||
status.kind === 'ERROR'
) {
this._connections.delete(serverMachine);
}
},
onSubscribe: (subscription) =>
subscription.request(Number.MAX_SAFE_INTEGER),
});
} catch (error) {
connection.sendOne({
code: _RSocketFrame.ERROR_CODES.REJECTED_SETUP,
flags: 0,
message:
'Application rejected setup, reason: ' + error.message,
streamId: _RSocketFrame.CONNECTION_STREAM_ID,
type: _RSocketFrame.FRAME_TYPES.ERROR,
});
connection.close();
}
break;
default:
(0, _Invariant.default)(
false,
'RSocketServer: Expected first frame to be SETUP or RESUME, ' +
'got `%s`.',
(0, _RSocketFrame.getFrameTypeName)(frame.type)
);
}
},
onSubscribe: (_subscription) => {
subscription = _subscription;
subscription.request(1);
},
})
);
}
);
constructor(config: ServerConfig<D, M>) {
this._config = config;

@@ -201,6 +83,7 @@ this._connections = new Set();

}
start() {
(0, _Invariant.default)(
start(): void {
invariant(
!this._started,
'RSocketServer: Unexpected call to start(), already started.'
'RSocketServer: Unexpected call to start(), already started.',
);

@@ -212,3 +95,3 @@ this._started = true;

onNext: this._handleTransportConnection,
onSubscribe: (subscription) => {
onSubscribe: subscription => {
this._subscription = subscription;

@@ -219,3 +102,4 @@ subscription.request(Number.MAX_SAFE_INTEGER);

}
stop() {
stop(): void {
if (this._subscription) {

@@ -226,15 +110,128 @@ this._subscription.cancel();

this._handleTransportError(
new Error('RSocketServer: Connection terminated via stop().')
new Error('RSocketServer: Connection terminated via stop().'),
);
}
_getSerializers() {
return (
this._config.serializers || _RSocketSerialization.IdentitySerializers
_handleTransportComplete = (): void => {
this._handleTransportError(
new Error('RSocketServer: Connection closed unexpectedly.'),
);
};
_handleTransportError = (error: Error): void => {
this._connections.forEach(connection => {
// TODO: Allow passing in error
connection.close();
});
};
_handleTransportConnection = (connection: DuplexConnection): void => {
const swapper: SubscriberSwapper<Frame> = new SubscriberSwapper();
let subscription;
connection = new ReassemblyDuplexConnection(connection);
connection.receive().subscribe(
swapper.swap({
onError: error => console.error(error),
onNext: frame => {
switch (frame.type) {
case FRAME_TYPES.RESUME:
connection.sendOne({
code: ERROR_CODES.REJECTED_RESUME,
flags: 0,
message: 'RSocketServer: RESUME not supported.',
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.ERROR,
});
connection.close();
break;
case FRAME_TYPES.SETUP:
if (this._setupLeaseError(frame)) {
connection.sendOne({
code: ERROR_CODES.INVALID_SETUP,
flags: 0,
message: 'RSocketServer: LEASE not supported.',
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.ERROR,
});
connection.close();
break;
}
const serializers = this._getSerializers();
let requesterLeaseHandler: RequesterLeaseHandler;
let responderLeaseHandler: ResponderLeaseHandler;
const leasesSupplier = this._config.leases;
if (leasesSupplier) {
const lease = leasesSupplier();
requesterLeaseHandler = new RequesterLeaseHandler(
(lease: any)._receiver,
);
responderLeaseHandler = new ResponderLeaseHandler(
(lease: any)._sender,
(lease: any)._stats,
);
}
const serverMachine = createServerMachine(
connection,
subscriber => {
swapper.swap(subscriber);
},
frame.lifetime,
serializers,
this._config.errorHandler,
requesterLeaseHandler,
responderLeaseHandler,
);
try {
const requestHandler = this._config.getRequestHandler(
serverMachine,
deserializePayload(serializers, frame),
);
serverMachine.setRequestHandler(requestHandler);
this._connections.add(serverMachine);
connection.connectionStatus().subscribe({
onNext: status => {
if (status.kind === 'CLOSED' || status.kind === 'ERROR') {
this._connections.delete(serverMachine);
}
},
onSubscribe: subscription =>
subscription.request(Number.MAX_SAFE_INTEGER),
});
} catch (error) {
connection.sendOne({
code: ERROR_CODES.REJECTED_SETUP,
flags: 0,
message:
'Application rejected setup, reason: ' + error.message,
streamId: CONNECTION_STREAM_ID,
type: FRAME_TYPES.ERROR,
});
connection.close();
}
break;
default:
invariant(
false,
'RSocketServer: Expected first frame to be SETUP or RESUME, ' +
'got `%s`.',
getFrameTypeName(frame.type),
);
}
},
onSubscribe: _subscription => {
subscription = _subscription;
subscription.request(1);
},
}),
);
};
_getSerializers(): PayloadSerializers<D, M> {
return this._config.serializers || (IdentitySerializers: any);
}
_setupLeaseError(frame) {
const clientLeaseEnabled =
(frame.flags & _RSocketFrame.FLAGS.LEASE) === _RSocketFrame.FLAGS.LEASE;
_setupLeaseError(frame: Frame): boolean {
const clientLeaseEnabled = (frame.flags & FLAGS.LEASE) === FLAGS.LEASE;
const serverLeaseEnabled = this._config.leases;

@@ -244,10 +241,12 @@ return clientLeaseEnabled && !serverLeaseEnabled;

}
exports.default = RSocketServer;
class SubscriberSwapper {
constructor(target) {
class SubscriberSwapper<T> implements ISubscriber<T> {
_target: ?IPartialSubscriber<T>;
_subscription: ?ISubscription;
constructor(target?: IPartialSubscriber<T>) {
this._target = target;
}
swap(next) {
swap(next: IPartialSubscriber<T>): ISubscriber<T> {
this._target = next;

@@ -261,15 +260,15 @@ if (this._subscription) {

onComplete() {
(0, _Invariant.default)(this._target, 'must have target');
invariant(this._target, 'must have target');
this._target.onComplete && this._target.onComplete();
}
onError(error) {
(0, _Invariant.default)(this._target, 'must have target');
invariant(this._target, 'must have target');
this._target.onError && this._target.onError(error);
}
onNext(value) {
(0, _Invariant.default)(this._target, 'must have target');
onNext(value: T) {
invariant(this._target, 'must have target');
this._target.onNext && this._target.onNext(value);
}
onSubscribe(subscription) {
(0, _Invariant.default)(this._target, 'must have target');
onSubscribe(subscription: ISubscription) {
invariant(this._target, 'must have target');
this._subscription = subscription;

@@ -280,3 +279,6 @@ this._target.onSubscribe && this._target.onSubscribe(subscription);

function deserializePayload(serializers, frame) {
function deserializePayload<D, M>(
serializers: PayloadSerializers<D, M>,
frame: FrameWithData,
): Payload<D, M> {
return {

@@ -283,0 +285,0 @@ data: serializers.data.deserialize(frame.data),

@@ -15,12 +15,8 @@ /** Copyright (c) Facebook, Inc. and its affiliates.

*
*
* @flow
*/
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.MINOR_VERSION = exports.MAJOR_VERSION = void 0;
const MAJOR_VERSION = 1;
exports.MAJOR_VERSION = MAJOR_VERSION;
const MINOR_VERSION = 0;
exports.MINOR_VERSION = MINOR_VERSION;
export const MAJOR_VERSION = 1;
export const MINOR_VERSION = 0;
'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.TYPES_BY_AUTH_STRING = exports.TYPES_BY_AUTH_ID = exports.BEARER = exports.SIMPLE = exports.UNKNOWN_RESERVED_AUTH_TYPE = exports.UNPARSEABLE_AUTH_TYPE = exports.default = void 0;
// @flow
class WellKnownAuthType {
constructor(str, identifier) {
export default class WellKnownAuthType {
_identifier: number;
_string: string;
constructor(str: string, identifier: number) {
this._string = str;

@@ -25,3 +27,3 @@ this._identifier = identifier;

*/
static fromIdentifier(id) {
static fromIdentifier(id: number): WellKnownAuthType {
if (id < 0x00 || id > 0x7f) {

@@ -42,3 +44,3 @@ return UNPARSEABLE_AUTH_TYPE;

*/
static fromString(authTypeString) {
static fromString(authTypeString: string): WellKnownAuthType {
if (!authTypeString) {

@@ -57,3 +59,3 @@ throw new Error('type must be non-null');

/** @return the byte identifier of the mime type, guaranteed to be positive or zero. */
get identifier() {
get identifier(): number {
return this._identifier;

@@ -66,3 +68,3 @@ }

*/
get string() {
get string(): string {
return this._string;

@@ -72,31 +74,23 @@ }

/** @see #string() */
toString() {
toString(): string {
return this._string;
}
}
exports.default = WellKnownAuthType;
const UNPARSEABLE_AUTH_TYPE = new WellKnownAuthType(
export const UNPARSEABLE_AUTH_TYPE: WellKnownAuthType = new WellKnownAuthType(
'UNPARSEABLE_AUTH_TYPE_DO_NOT_USE',
-2
-2,
);
exports.UNPARSEABLE_AUTH_TYPE = UNPARSEABLE_AUTH_TYPE;
const UNKNOWN_RESERVED_AUTH_TYPE = new WellKnownAuthType(
export const UNKNOWN_RESERVED_AUTH_TYPE: WellKnownAuthType = new WellKnownAuthType(
'UNKNOWN_YET_RESERVED_DO_NOT_USE',
-1
-1,
);
exports.UNKNOWN_RESERVED_AUTH_TYPE = UNKNOWN_RESERVED_AUTH_TYPE;
const SIMPLE = new WellKnownAuthType('simple', 0x00);
exports.SIMPLE = SIMPLE;
const BEARER = new WellKnownAuthType('bearer', 0x01);
exports.BEARER = BEARER;
export const SIMPLE: WellKnownAuthType = new WellKnownAuthType('simple', 0x00);
export const BEARER: WellKnownAuthType = new WellKnownAuthType('bearer', 0x01);
const TYPES_BY_AUTH_ID = new Array(128);
exports.TYPES_BY_AUTH_ID = TYPES_BY_AUTH_ID;
const TYPES_BY_AUTH_STRING = new Map();
exports.TYPES_BY_AUTH_STRING = TYPES_BY_AUTH_STRING;
export const TYPES_BY_AUTH_ID: WellKnownAuthType[] = new Array(128);
export const TYPES_BY_AUTH_STRING: Map<string, WellKnownAuthType> = new Map();
const ALL_MIME_TYPES = [
const ALL_MIME_TYPES: WellKnownAuthType[] = [
UNPARSEABLE_AUTH_TYPE,

@@ -103,0 +97,0 @@ UNKNOWN_RESERVED_AUTH_TYPE,

'use strict';
Object.defineProperty(exports, '__esModule', {value: true});
exports.TYPES_BY_MIME_STRING = exports.TYPES_BY_MIME_ID = exports.MESSAGE_RSOCKET_COMPOSITE_METADATA = exports.MESSAGE_RSOCKET_ROUTING = exports.MESSAGE_RSOCKET_TRACING_ZIPKIN = exports.MESSAGE_RSOCKET_AUTHENTICATION = exports.MESSAGE_RSOCKET_ACCEPT_MIMETYPES = exports.MESSAGE_RSOCKET_MIMETYPE = exports.APPLICATION_CLOUDEVENTS_JSON = exports.APPLICATION_JAVA_OBJECT = exports.APPLICATION_HESSIAN = exports.VIDEO_VP8 = exports.VIDEO_H265 = exports.VIDEO_H264 = exports.TEXT_XML = exports.TEXT_PLAIN = exports.TEXT_HTML = exports.TEXT_CSV = exports.TEXT_CSS = exports.MULTIPART_MIXED = exports.IMAGE_TIFF = exports.IMAGE_PNG = exports.IMAGE_JPEG = exports.IMAGE_HEIF = exports.IMAGE_HEIF_SEQUENCE = exports.IMAGE_HEIC = exports.IMAGE_HEIC_SEQUENCE = exports.IMAGE_GIG = exports.IMAGE_BMP = exports.AUDIO_VORBIS = exports.AUDIO_OPUS = exports.AUDIO_OGG = exports.AUDIO_MPEG = exports.AUDIO_MPEG3 = exports.AUDIO_MP4 = exports.AUDIO_MP3 = exports.AUDIO_AAC = exports.APPLICATION_ZIP = exports.APPLICATION_XML = exports.APPLICATION_PROTOBUF = exports.APPLICATION_THRIFT = exports.APPLICATION_PDF = exports.APPLICATION_OCTET_STREAM = exports.APPLICATION_JSON = exports.APPLICATION_JAVASCRIPT = exports.APPLICATION_GZIP = exports.APPLICATION_GRAPHQL = exports.APPLICATION_CBOR = exports.APPLICATION_AVRO = exports.UNKNOWN_RESERVED_MIME_TYPE = exports.UNPARSEABLE_MIME_TYPE = exports.default = void 0;
// @flow
class WellKnownMimeType {
constructor(str, identifier) {
export default class WellKnownMimeType {
_identifier: number;
_string: string;
constructor(str: string, identifier: number) {
this._string = str;

@@ -25,3 +27,3 @@ this._identifier = identifier;

*/
static fromIdentifier(id) {
static fromIdentifier(id: number): WellKnownMimeType {
if (id < 0x00 || id > 0x7f) {

@@ -42,3 +44,3 @@ return UNPARSEABLE_MIME_TYPE;

*/
static fromString(mimeType) {
static fromString(mimeType: string): WellKnownMimeType {
if (!mimeType) {

@@ -57,3 +59,3 @@ throw new Error('type must be non-null');

/** @return the byte identifier of the mime type, guaranteed to be positive or zero. */
get identifier() {
get identifier(): number {
return this._identifier;

@@ -66,3 +68,3 @@ }

*/
get string() {
get string(): string {
return this._string;

@@ -72,207 +74,211 @@ }

/** @see #getString() */
toString() {
toString(): string {
return this._string;
}
}
exports.default = WellKnownMimeType;
const UNPARSEABLE_MIME_TYPE = new WellKnownMimeType(
export const UNPARSEABLE_MIME_TYPE: WellKnownMimeType = new WellKnownMimeType(
'UNPARSEABLE_MIME_TYPE_DO_NOT_USE',
-2
-2,
);
exports.UNPARSEABLE_MIME_TYPE = UNPARSEABLE_MIME_TYPE;
const UNKNOWN_RESERVED_MIME_TYPE = new WellKnownMimeType(
export const UNKNOWN_RESERVED_MIME_TYPE: WellKnownMimeType = new WellKnownMimeType(
'UNKNOWN_YET_RESERVED_DO_NOT_USE',
-1
-1,
);
exports.UNKNOWN_RESERVED_MIME_TYPE = UNKNOWN_RESERVED_MIME_TYPE;
const APPLICATION_AVRO = new WellKnownMimeType('application/avro', 0x00);
exports.APPLICATION_AVRO = APPLICATION_AVRO;
const APPLICATION_CBOR = new WellKnownMimeType('application/cbor', 0x01);
exports.APPLICATION_CBOR = APPLICATION_CBOR;
const APPLICATION_GRAPHQL = new WellKnownMimeType('application/graphql', 0x02);
exports.APPLICATION_GRAPHQL = APPLICATION_GRAPHQL;
const APPLICATION_GZIP = new WellKnownMimeType('application/gzip', 0x03);
exports.APPLICATION_GZIP = APPLICATION_GZIP;
const APPLICATION_JAVASCRIPT = new WellKnownMimeType(
export const APPLICATION_AVRO: WellKnownMimeType = new WellKnownMimeType(
'application/avro',
0x00,
);
export const APPLICATION_CBOR: WellKnownMimeType = new WellKnownMimeType(
'application/cbor',
0x01,
);
export const APPLICATION_GRAPHQL: WellKnownMimeType = new WellKnownMimeType(
'application/graphql',
0x02,
);
export const APPLICATION_GZIP: WellKnownMimeType = new WellKnownMimeType(
'application/gzip',
0x03,
);
export const APPLICATION_JAVASCRIPT: WellKnownMimeType = new WellKnownMimeType(
'application/javascript',
0x04
0x04,
);
exports.APPLICATION_JAVASCRIPT = APPLICATION_JAVASCRIPT;
const APPLICATION_JSON = new WellKnownMimeType('application/json', 0x05);
exports.APPLICATION_JSON = APPLICATION_JSON;
const APPLICATION_OCTET_STREAM = new WellKnownMimeType(
export const APPLICATION_JSON: WellKnownMimeType = new WellKnownMimeType(
'application/json',
0x05,
);
export const APPLICATION_OCTET_STREAM: WellKnownMimeType = new WellKnownMimeType(
'application/octet-stream',
0x06
0x06,
);
exports.APPLICATION_OCTET_STREAM = APPLICATION_OCTET_STREAM;
const APPLICATION_PDF = new WellKnownMimeType('application/pdf', 0x07);
exports.APPLICATION_PDF = APPLICATION_PDF;
const APPLICATION_THRIFT = new WellKnownMimeType(
export const APPLICATION_PDF: WellKnownMimeType = new WellKnownMimeType(
'application/pdf',
0x07,
);
export const APPLICATION_THRIFT: WellKnownMimeType = new WellKnownMimeType(
'application/vnd.apache.thrift.binary',
0x08
0x08,
);
exports.APPLICATION_THRIFT = APPLICATION_THRIFT;
const APPLICATION_PROTOBUF = new WellKnownMimeType(
export const APPLICATION_PROTOBUF: WellKnownMimeType = new WellKnownMimeType(
'application/vnd.google.protobuf',
0x09
0x09,
);
exports.APPLICATION_PROTOBUF = APPLICATION_PROTOBUF;
const APPLICATION_XML = new WellKnownMimeType('application/xml', 0x0a);
exports.APPLICATION_XML = APPLICATION_XML;
const APPLICATION_ZIP = new WellKnownMimeType('application/zip', 0x0b);
exports.APPLICATION_ZIP = APPLICATION_ZIP;
const AUDIO_AAC = new WellKnownMimeType('audio/aac', 0x0c);
exports.AUDIO_AAC = AUDIO_AAC;
const AUDIO_MP3 = new WellKnownMimeType('audio/mp3', 0x0d);
exports.AUDIO_MP3 = AUDIO_MP3;
const AUDIO_MP4 = new WellKnownMimeType('audio/mp4', 0x0e);
exports.AUDIO_MP4 = AUDIO_MP4;
const AUDIO_MPEG3 = new WellKnownMimeType('audio/mpeg3', 0x0f);
exports.AUDIO_MPEG3 = AUDIO_MPEG3;
const AUDIO_MPEG = new WellKnownMimeType('audio/mpeg', 0x10);
exports.AUDIO_MPEG = AUDIO_MPEG;
const AUDIO_OGG = new WellKnownMimeType('audio/ogg', 0x11);
exports.AUDIO_OGG = AUDIO_OGG;
const AUDIO_OPUS = new WellKnownMimeType('audio/opus', 0x12);
exports.AUDIO_OPUS = AUDIO_OPUS;
const AUDIO_VORBIS = new WellKnownMimeType('audio/vorbis', 0x13);
exports.AUDIO_VORBIS = AUDIO_VORBIS;
const IMAGE_BMP = new WellKnownMimeType('image/bmp', 0x14);
exports.IMAGE_BMP = IMAGE_BMP;
const IMAGE_GIG = new WellKnownMimeType('image/gif', 0x15);
exports.IMAGE_GIG = IMAGE_GIG;
const IMAGE_HEIC_SEQUENCE = new WellKnownMimeType('image/heic-sequence', 0x16);
exports.IMAGE_HEIC_SEQUENCE = IMAGE_HEIC_SEQUENCE;
const IMAGE_HEIC = new WellKnownMimeType('image/heic', 0x17);
exports.IMAGE_HEIC = IMAGE_HEIC;
const IMAGE_HEIF_SEQUENCE = new WellKnownMimeType('image/heif-sequence', 0x18);
exports.IMAGE_HEIF_SEQUENCE = IMAGE_HEIF_SEQUENCE;
const IMAGE_HEIF = new WellKnownMimeType('image/heif', 0x19);
exports.IMAGE_HEIF = IMAGE_HEIF;
const IMAGE_JPEG = new WellKnownMimeType('image/jpeg', 0x1a);
exports.IMAGE_JPEG = IMAGE_JPEG;
const IMAGE_PNG = new WellKnownMimeType('image/png', 0x1b);
exports.IMAGE_PNG = IMAGE_PNG;
const IMAGE_TIFF = new WellKnownMimeType('image/tiff', 0x1c);
exports.IMAGE_TIFF = IMAGE_TIFF;
const MULTIPART_MIXED = new WellKnownMimeType('multipart/mixed', 0x1d);
exports.MULTIPART_MIXED = MULTIPART_MIXED;
const TEXT_CSS = new WellKnownMimeType('text/css', 0x1e);
exports.TEXT_CSS = TEXT_CSS;
const TEXT_CSV = new WellKnownMimeType('text/csv', 0x1f);
exports.TEXT_CSV = TEXT_CSV;
const TEXT_HTML = new WellKnownMimeType('text/html', 0x20);
exports.TEXT_HTML = TEXT_HTML;
const TEXT_PLAIN = new WellKnownMimeType('text/plain', 0x21);
exports.TEXT_PLAIN = TEXT_PLAIN;
const TEXT_XML = new WellKnownMimeType('text/xml', 0x22);
exports.TEXT_XML = TEXT_XML;
const VIDEO_H264 = new WellKnownMimeType('video/H264', 0x23);
exports.VIDEO_H264 = VIDEO_H264;
const VIDEO_H265 = new WellKnownMimeType('video/H265', 0x24);
exports.VIDEO_H265 = VIDEO_H265;
const VIDEO_VP8 = new WellKnownMimeType('video/VP8', 0x25);
exports.VIDEO_VP8 = VIDEO_VP8;
const APPLICATION_HESSIAN = new WellKnownMimeType(
export const APPLICATION_XML: WellKnownMimeType = new WellKnownMimeType(
'application/xml',
0x0a,
);
export const APPLICATION_ZIP: WellKnownMimeType = new WellKnownMimeType(
'application/zip',
0x0b,
);
export const AUDIO_AAC: WellKnownMimeType = new WellKnownMimeType(
'audio/aac',
0x0c,
);
export const AUDIO_MP3: WellKnownMimeType = new WellKnownMimeType(
'audio/mp3',
0x0d,
);
export const AUDIO_MP4: WellKnownMimeType = new WellKnownMimeType(
'audio/mp4',
0x0e,
);
export const AUDIO_MPEG3: WellKnownMimeType = new WellKnownMimeType(
'audio/mpeg3',
0x0f,
);
export const AUDIO_MPEG: WellKnownMimeType = new WellKnownMimeType(
'audio/mpeg',
0x10,
);
export const AUDIO_OGG: WellKnownMimeType = new WellKnownMimeType(
'audio/ogg',
0x11,
);
export const AUDIO_OPUS: WellKnownMimeType = new WellKnownMimeType(
'audio/opus',
0x12,
);
export const AUDIO_VORBIS: WellKnownMimeType = new WellKnownMimeType(
'audio/vorbis',
0x13,
);
export const IMAGE_BMP: WellKnownMimeType = new WellKnownMimeType(
'image/bmp',
0x14,
);
export const IMAGE_GIG: WellKnownMimeType = new WellKnownMimeType(
'image/gif',
0x15,
);
export const IMAGE_HEIC_SEQUENCE: WellKnownMimeType = new WellKnownMimeType(
'image/heic-sequence',
0x16,
);
export const IMAGE_HEIC: WellKnownMimeType = new WellKnownMimeType(
'image/heic',
0x17,
);
export const IMAGE_HEIF_SEQUENCE: WellKnownMimeType = new WellKnownMimeType(
'image/heif-sequence',
0x18,
);
export const IMAGE_HEIF: WellKnownMimeType = new WellKnownMimeType(
'image/heif',
0x19,
);
export const IMAGE_JPEG: WellKnownMimeType = new WellKnownMimeType(
'image/jpeg',
0x1a,
);
export const IMAGE_PNG: WellKnownMimeType = new WellKnownMimeType(
'image/png',
0x1b,
);
export const IMAGE_TIFF: WellKnownMimeType = new WellKnownMimeType(
'image/tiff',
0x1c,
);
export const MULTIPART_MIXED: WellKnownMimeType = new WellKnownMimeType(
'multipart/mixed',
0x1d,
);
export const TEXT_CSS: WellKnownMimeType = new WellKnownMimeType(
'text/css',
0x1e,
);
export const TEXT_CSV: WellKnownMimeType = new WellKnownMimeType(
'text/csv',
0x1f,
);
export const TEXT_HTML: WellKnownMimeType = new WellKnownMimeType(
'text/html',
0x20,
);
export const TEXT_PLAIN: WellKnownMimeType = new WellKnownMimeType(
'text/plain',
0x21,
);
export const TEXT_XML: WellKnownMimeType = new WellKnownMimeType(
'text/xml',
0x22,
);
export const VIDEO_H264: WellKnownMimeType = new WellKnownMimeType(
'video/H264',
0x23,
);
export const VIDEO_H265: WellKnownMimeType = new WellKnownMimeType(
'video/H265',
0x24,
);
export const VIDEO_VP8: WellKnownMimeType = new WellKnownMimeType(
'video/VP8',
0x25,
);
export const APPLICATION_HESSIAN: WellKnownMimeType = new WellKnownMimeType(
'application/x-hessian',
0x26
0x26,
);
exports.APPLICATION_HESSIAN = APPLICATION_HESSIAN;
const APPLICATION_JAVA_OBJECT = new WellKnownMimeType(
export const APPLICATION_JAVA_OBJECT: WellKnownMimeType = new WellKnownMimeType(
'application/x-java-object',
0x27
0x27,
);
exports.APPLICATION_JAVA_OBJECT = APPLICATION_JAVA_OBJECT;
const APPLICATION_CLOUDEVENTS_JSON = new WellKnownMimeType(
export const APPLICATION_CLOUDEVENTS_JSON: WellKnownMimeType = new WellKnownMimeType(
'application/cloudevents+json',
0x28
0x28,
);
// ... reserved for future use ...
exports.APPLICATION_CLOUDEVENTS_JSON = APPLICATION_CLOUDEVENTS_JSON;
const MESSAGE_RSOCKET_MIMETYPE = new WellKnownMimeType(
export const MESSAGE_RSOCKET_MIMETYPE: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.mime-type.v0',
0x7a
0x7a,
);
exports.MESSAGE_RSOCKET_MIMETYPE = MESSAGE_RSOCKET_MIMETYPE;
const MESSAGE_RSOCKET_ACCEPT_MIMETYPES = new WellKnownMimeType(
export const MESSAGE_RSOCKET_ACCEPT_MIMETYPES: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.accept-mime-types.v0',
0x7b
0x7b,
);
exports.MESSAGE_RSOCKET_ACCEPT_MIMETYPES = MESSAGE_RSOCKET_ACCEPT_MIMETYPES;
const MESSAGE_RSOCKET_AUTHENTICATION = new WellKnownMimeType(
export const MESSAGE_RSOCKET_AUTHENTICATION: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.authentication.v0',
0x7c
0x7c,
);
exports.MESSAGE_RSOCKET_AUTHENTICATION = MESSAGE_RSOCKET_AUTHENTICATION;
const MESSAGE_RSOCKET_TRACING_ZIPKIN = new WellKnownMimeType(
export const MESSAGE_RSOCKET_TRACING_ZIPKIN: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.tracing-zipkin.v0',
0x7d
0x7d,
);
exports.MESSAGE_RSOCKET_TRACING_ZIPKIN = MESSAGE_RSOCKET_TRACING_ZIPKIN;
const MESSAGE_RSOCKET_ROUTING = new WellKnownMimeType(
export const MESSAGE_RSOCKET_ROUTING: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.routing.v0',
0x7e
0x7e,
);
exports.MESSAGE_RSOCKET_ROUTING = MESSAGE_RSOCKET_ROUTING;
const MESSAGE_RSOCKET_COMPOSITE_METADATA = new WellKnownMimeType(
export const MESSAGE_RSOCKET_COMPOSITE_METADATA: WellKnownMimeType = new WellKnownMimeType(
'message/x.rsocket.composite-metadata.v0',
0x7f
0x7f,
);
exports.MESSAGE_RSOCKET_COMPOSITE_METADATA = MESSAGE_RSOCKET_COMPOSITE_METADATA;
const TYPES_BY_MIME_ID = new Array(128);
exports.TYPES_BY_MIME_ID = TYPES_BY_MIME_ID;
const TYPES_BY_MIME_STRING = new Map();
exports.TYPES_BY_MIME_STRING = TYPES_BY_MIME_STRING;
export const TYPES_BY_MIME_ID: WellKnownMimeType[] = new Array(128);
export const TYPES_BY_MIME_STRING: Map<string, WellKnownMimeType> = new Map();
const ALL_MIME_TYPES = [
const ALL_MIME_TYPES: WellKnownMimeType[] = [
UNPARSEABLE_MIME_TYPE,

@@ -279,0 +285,0 @@ UNKNOWN_RESERVED_MIME_TYPE,

{
"name": "rsocket-core",
"description": "RSocket core",
"version": "0.0.27",
"version": "0.0.28",
"repository": {

@@ -12,6 +12,6 @@ "type": "git",

"dependencies": {
"rsocket-flowable": "^0.0.27",
"rsocket-types": "^0.0.27"
"rsocket-flowable": "^0.0.28",
"rsocket-types": "^0.0.28"
},
"gitHead": "23da9b0e9377ba52d3294cf4763cbbf3de7ba7b1"
"gitHead": "1dd3eb28183991d663392d87877225bf862946e2"
}

@@ -0,0 +0,0 @@ # rsocket-core

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc