Skip to content

Commit

Permalink
refactor: move some defaults helpers out of utils
Browse files Browse the repository at this point in the history
tl;dr: there's a circular import here between utils.ts and defaults.ts. in the
following commits this results in a build error, so i'm making utils.ts no
longer depend on defaults.ts.
  • Loading branch information
owenpearson authored and lawrence-forooghian committed Aug 2, 2023
1 parent 8318287 commit 8a723fa
Show file tree
Hide file tree
Showing 7 changed files with 78 additions and 72 deletions.
3 changes: 2 additions & 1 deletion src/common/lib/client/auth.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import BaseRealtime from './baserealtime';
import ClientOptions from '../../types/ClientOptions';
import HttpMethods from '../../constants/HttpMethods';
import Platform from '../../platform';
import Defaults from '../util/defaults';

const MAX_TOKEN_LENGTH = Math.pow(2, 17);
function noop() {}
Expand Down Expand Up @@ -575,7 +576,7 @@ class Auth {
return client.baseUri(host) + path;
};

const requestHeaders = Utils.defaultPostHeaders(this.client.options);
const requestHeaders = Defaults.defaultPostHeaders(this.client.options);
if (authOptions.requestHeaders) Utils.mixin(requestHeaders, authOptions.requestHeaders);
Logger.logAction(
Logger.LOG_MICRO,
Expand Down
8 changes: 4 additions & 4 deletions src/common/lib/client/baserest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ class BaseRest {
return Utils.promisify(this, 'stats', [params]) as Promise<PaginatedResult<Stats>>;
}
}
const headers = Utils.defaultGetHeaders(this.options),
const headers = Defaults.defaultGetHeaders(this.options),
format = this.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.http.supportsLinkHeaders ? undefined : format;

Expand Down Expand Up @@ -133,7 +133,7 @@ class BaseRest {

const _callback = callback || noop;

const headers = Utils.defaultGetHeaders(this.options);
const headers = Defaults.defaultGetHeaders(this.options);
if (this.options.headers) Utils.mixin(headers, this.options.headers);
const timeUri = (host: string) => {
return this.baseUri(host) + '/time';
Expand Down Expand Up @@ -186,8 +186,8 @@ class BaseRest {
const _method = method.toLowerCase() as HttpMethods;
const headers =
_method == 'get'
? Utils.defaultGetHeaders(this.options, { format, protocolVersion: version })
: Utils.defaultPostHeaders(this.options, { format, protocolVersion: version });
? Defaults.defaultGetHeaders(this.options, { format, protocolVersion: version })
: Defaults.defaultPostHeaders(this.options, { format, protocolVersion: version });

if (callback === undefined) {
return Utils.promisify(this, 'request', [method, path, version, params, body, customHeaders]) as Promise<
Expand Down
7 changes: 4 additions & 3 deletions src/common/lib/client/channel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import BaseRest from './baserest';
import BaseRealtime from './baserealtime';
import * as API from '../../../../ably';
import Platform from 'common/platform';
import Defaults from '../util/defaults';

interface RestHistoryParams {
start?: number;
Expand Down Expand Up @@ -89,7 +90,7 @@ class Channel extends EventEmitter {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

Utils.mixin(headers, client.options.headers);

Expand Down Expand Up @@ -142,7 +143,7 @@ class Channel extends EventEmitter {
options = client.options,
format = options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
idempotentRestPublishing = client.options.idempotentRestPublishing,
headers = Utils.defaultPostHeaders(client.options, { format });
headers = Defaults.defaultPostHeaders(client.options, { format });

Utils.mixin(headers, options.headers);

Expand Down Expand Up @@ -191,7 +192,7 @@ class Channel extends EventEmitter {
}

const format = this.client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json;
const headers = Utils.defaultPostHeaders(this.client.options, { format });
const headers = Defaults.defaultPostHeaders(this.client.options, { format });

Resource.get<API.Types.ChannelDetails>(this.client, this.basePath, headers, {}, format, callback || noop);
}
Expand Down
5 changes: 3 additions & 2 deletions src/common/lib/client/presence.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { CipherOptions } from '../types/message';
import { PaginatedResultCallback } from '../../types/utils';
import Channel from './channel';
import RealtimeChannel from './realtimechannel';
import Defaults from '../util/defaults';

class Presence extends EventEmitter {
channel: RealtimeChannel | Channel;
Expand All @@ -32,7 +33,7 @@ class Presence extends EventEmitter {
const client = this.channel.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.channel.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

Utils.mixin(headers, client.options.headers);

Expand Down Expand Up @@ -71,7 +72,7 @@ class Presence extends EventEmitter {
const client = this.channel.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.channel.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

Utils.mixin(headers, client.options.headers);

Expand Down
21 changes: 11 additions & 10 deletions src/common/lib/client/push.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import ErrorInfo from '../types/errorinfo';
import PushChannelSubscription from '../types/pushchannelsubscription';
import { ErrCallback, PaginatedResultCallback, StandardCallback } from '../../types/utils';
import BaseRest from './baserest';
import Defaults from '../util/defaults';

class Push {
client: BaseRest;
Expand All @@ -31,7 +32,7 @@ class Admin {
publish(recipient: any, payload: any, callback: ErrCallback) {
const client = this.client;
const format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultPostHeaders(client.options, { format }),
headers = Defaults.defaultPostHeaders(client.options, { format }),
params = {};
const body = Utils.mixin({ recipient: recipient }, payload);

Expand Down Expand Up @@ -59,7 +60,7 @@ class DeviceRegistrations {
const client = this.client;
const body = DeviceDetails.fromValues(device);
const format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultPostHeaders(client.options, { format }),
headers = Defaults.defaultPostHeaders(client.options, { format }),
params = {};

if (typeof callback !== 'function') {
Expand Down Expand Up @@ -95,7 +96,7 @@ class DeviceRegistrations {
get(deviceIdOrDetails: any, callback: StandardCallback<DeviceDetails>) {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultGetHeaders(client.options, { format }),
headers = Defaults.defaultGetHeaders(client.options, { format }),
deviceId = deviceIdOrDetails.id || deviceIdOrDetails;

if (typeof callback !== 'function') {
Expand Down Expand Up @@ -139,7 +140,7 @@ class DeviceRegistrations {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

if (typeof callback !== 'function') {
return Utils.promisify(this, 'list', arguments);
Expand All @@ -159,7 +160,7 @@ class DeviceRegistrations {
remove(deviceIdOrDetails: any, callback: ErrCallback) {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultGetHeaders(client.options, { format }),
headers = Defaults.defaultGetHeaders(client.options, { format }),
params = {},
deviceId = deviceIdOrDetails.id || deviceIdOrDetails;

Expand Down Expand Up @@ -195,7 +196,7 @@ class DeviceRegistrations {
removeWhere(params: any, callback: ErrCallback) {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

if (typeof callback !== 'function') {
return Utils.promisify(this, 'removeWhere', arguments);
Expand All @@ -220,7 +221,7 @@ class ChannelSubscriptions {
const client = this.client;
const body = PushChannelSubscription.fromValues(subscription);
const format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultPostHeaders(client.options, { format }),
headers = Defaults.defaultPostHeaders(client.options, { format }),
params = {};

if (typeof callback !== 'function') {
Expand Down Expand Up @@ -252,7 +253,7 @@ class ChannelSubscriptions {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

if (typeof callback !== 'function') {
return Utils.promisify(this, 'list', arguments);
Expand All @@ -272,7 +273,7 @@ class ChannelSubscriptions {
removeWhere(params: any, callback: PaginatedResultCallback<unknown>) {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

if (typeof callback !== 'function') {
return Utils.promisify(this, 'removeWhere', arguments);
Expand All @@ -292,7 +293,7 @@ class ChannelSubscriptions {
const client = this.client,
format = client.options.useBinaryProtocol ? Utils.Format.msgpack : Utils.Format.json,
envelope = this.client.http.supportsLinkHeaders ? undefined : format,
headers = Utils.defaultGetHeaders(client.options, { format });
headers = Defaults.defaultGetHeaders(client.options, { format });

if (typeof callback !== 'function') {
return Utils.promisify(this, 'listChannels', arguments);
Expand Down
54 changes: 54 additions & 0 deletions src/common/lib/util/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ type CompleteDefaults = IDefaults & {
getRealtimeHost(options: ClientOptions, production: boolean, environment: string): string;
objectifyOptions(options: ClientOptions | string): ClientOptions;
normaliseOptions(options: InternalClientOptions): NormalisedClientOptions;
defaultGetHeaders(options: NormalisedClientOptions, headersOptions?: HeadersOptions): Record<string, string>;
defaultPostHeaders(options: NormalisedClientOptions, headersOptions?: HeadersOptions): Record<string, string>;
};

const Defaults = {
Expand Down Expand Up @@ -87,6 +89,8 @@ const Defaults = {
checkHost,
objectifyOptions,
normaliseOptions,
defaultGetHeaders,
defaultPostHeaders,
};

export function getHost(options: ClientOptions, host?: string | null, ws?: boolean): string {
Expand Down Expand Up @@ -260,6 +264,56 @@ export function normaliseOptions(options: InternalClientOptions): NormalisedClie
};
}

const contentTypes = {
json: 'application/json',
xml: 'application/xml',
html: 'text/html',
msgpack: 'application/x-msgpack',
};

export interface HeadersOptions {
format?: Utils.Format;
protocolVersion?: number;
}

const defaultHeadersOptions: Required<HeadersOptions> = {
format: Utils.Format.json,
protocolVersion: Defaults.protocolVersion,
};

export function defaultGetHeaders(
options: NormalisedClientOptions,
{
format = defaultHeadersOptions.format,
protocolVersion = defaultHeadersOptions.protocolVersion,
}: HeadersOptions = {}
): Record<string, string> {
const accept = contentTypes[format];
return {
accept: accept,
'X-Ably-Version': protocolVersion.toString(),
'Ably-Agent': getAgentString(options),
};
}

export function defaultPostHeaders(
options: NormalisedClientOptions,
{
format = defaultHeadersOptions.format,
protocolVersion = defaultHeadersOptions.protocolVersion,
}: HeadersOptions = {}
): Record<string, string> {
let contentType;
const accept = (contentType = contentTypes[format]);

return {
accept: accept,
'content-type': contentType,
'X-Ably-Version': protocolVersion.toString(),
'Ably-Agent': getAgentString(options),
};
}

export default Defaults as CompleteDefaults;

export function getDefaults(platformDefaults: IDefaults) {
Expand Down
52 changes: 0 additions & 52 deletions src/common/lib/util/utils.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
import Platform from 'common/platform';
import Defaults, { getAgentString } from './defaults';
import ErrorInfo, { PartialErrorInfo } from 'common/lib/types/errorinfo';
import { NormalisedClientOptions } from 'common/types/ClientOptions';

function randomPosn(arrOrStr: Array<unknown> | string) {
return Math.floor(Math.random() * arrOrStr.length);
Expand Down Expand Up @@ -330,61 +328,11 @@ export function allSame(arr: Array<Record<string, unknown>>, prop: string): bool
});
}

const contentTypes = {
json: 'application/json',
xml: 'application/xml',
html: 'text/html',
msgpack: 'application/x-msgpack',
};

export enum Format {
msgpack = 'msgpack',
json = 'json',
}

export interface HeadersOptions {
format?: Format;
protocolVersion?: number;
}

const defaultHeadersOptions: Required<HeadersOptions> = {
format: Format.json,
protocolVersion: Defaults.protocolVersion,
};

export function defaultGetHeaders(
options: NormalisedClientOptions,
{
format = defaultHeadersOptions.format,
protocolVersion = defaultHeadersOptions.protocolVersion,
}: HeadersOptions = {}
): Record<string, string> {
const accept = contentTypes[format];
return {
accept: accept,
'X-Ably-Version': protocolVersion.toString(),
'Ably-Agent': getAgentString(options),
};
}

export function defaultPostHeaders(
options: NormalisedClientOptions,
{
format = defaultHeadersOptions.format,
protocolVersion = defaultHeadersOptions.protocolVersion,
}: HeadersOptions = {}
): Record<string, string> {
let contentType;
const accept = (contentType = contentTypes[format]);

return {
accept: accept,
'content-type': contentType,
'X-Ably-Version': protocolVersion.toString(),
'Ably-Agent': getAgentString(options),
};
}

export function arrPopRandomElement<T>(arr: Array<T>): T {
return arr.splice(randomPosn(arr), 1)[0];
}
Expand Down

0 comments on commit 8a723fa

Please sign in to comment.