sip.js
Version:
A SIP library for JavaScript
144 lines (143 loc) • 5.42 kB
TypeScript
import { OutgoingRegisterRequest } from "../core/messages/methods/register.js";
import { Emitter } from "./emitter.js";
import { RegistererOptions } from "./registerer-options.js";
import { RegistererRegisterOptions } from "./registerer-register-options.js";
import { RegistererState } from "./registerer-state.js";
import { RegistererUnregisterOptions } from "./registerer-unregister-options.js";
import { UserAgent } from "./user-agent.js";
/**
* A registerer registers a contact for an address of record (outgoing REGISTER).
* @public
*/
export declare class Registerer {
private static readonly defaultExpires;
private static readonly defaultRefreshFrequency;
private disposed;
private id;
private expires;
private refreshFrequency;
private logger;
private options;
private request;
private userAgent;
private registrationExpiredTimer;
private registrationTimer;
/** The contacts returned from the most recent accepted REGISTER request. */
private _contacts;
/** The number of seconds to wait before retrying to register. */
private _retryAfter;
/** The registration state. */
private _state;
/** Emits when the registration state changes. */
private _stateEventEmitter;
/** True is waiting for final response to outstanding REGISTER request. */
private _waiting;
/** Emits when waiting changes. */
private _waitingEventEmitter;
/**
* Constructs a new instance of the `Registerer` class.
* @param userAgent - User agent. See {@link UserAgent} for details.
* @param options - Options bucket. See {@link RegistererOptions} for details.
*/
constructor(userAgent: UserAgent, options?: RegistererOptions);
/** Default registerer options. */
private static defaultOptions;
/**
* Strip properties with undefined values from options.
* This is a work around while waiting for missing vs undefined to be addressed (or not)...
* https://github.com/Microsoft/TypeScript/issues/13195
* @param options - Options to reduce
*/
private static stripUndefinedProperties;
/** The registered contacts. */
get contacts(): Array<string>;
/**
* The number of seconds to wait before retrying to register.
* @defaultValue `undefined`
* @remarks
* When the server rejects a registration request, if it provides a suggested
* duration to wait before retrying, that value is available here when and if
* the state transitions to `Unsubscribed`. It is also available during the
* callback to `onReject` after a call to `register`. (Note that if the state
* if already `Unsubscribed`, a rejected request created by `register` will
* not cause the state to transition to `Unsubscribed`. One way to avoid this
* case is to dispose of `Registerer` when unregistered and create a new
* `Registerer` for any attempts to retry registering.)
* @example
* ```ts
* // Checking for retry after on state change
* registerer.stateChange.addListener((newState) => {
* switch (newState) {
* case RegistererState.Unregistered:
* const retryAfter = registerer.retryAfter;
* break;
* }
* });
*
* // Checking for retry after on request rejection
* registerer.register({
* requestDelegate: {
* onReject: () => {
* const retryAfter = registerer.retryAfter;
* }
* }
* });
* ```
*/
get retryAfter(): number | undefined;
/** The registration state. */
get state(): RegistererState;
/** Emits when the registerer state changes. */
get stateChange(): Emitter<RegistererState>;
/** Destructor. */
dispose(): Promise<void>;
/**
* Sends the REGISTER request.
* @remarks
* If successful, sends re-REGISTER requests prior to registration expiration until `unsubscribe()` is called.
* Rejects with `RequestPendingError` if a REGISTER request is already in progress.
*/
register(options?: RegistererRegisterOptions): Promise<OutgoingRegisterRequest>;
/**
* Sends the REGISTER request with expires equal to zero.
* @remarks
* Rejects with `RequestPendingError` if a REGISTER request is already in progress.
*/
unregister(options?: RegistererUnregisterOptions): Promise<OutgoingRegisterRequest>;
/**
* Clear registration timers.
*/
private clearTimers;
/**
* Generate Contact Header
*/
private generateContactHeader;
/**
* Helper function, called when registered.
*/
private registered;
/**
* Helper function, called when unregistered.
*/
private unregistered;
/**
* Helper function, called when terminated.
*/
private terminated;
/**
* Transition registration state.
*/
private stateTransition;
/** True if the registerer is currently waiting for final response to a REGISTER request. */
private get waiting();
/** Emits when the registerer waiting state changes. */
private get waitingChange();
/**
* Toggle waiting.
*/
private waitingToggle;
/** Hopefully helpful as the standard behavior has been found to be unexpected. */
private waitingWarning;
/** Hopefully helpful as the standard behavior has been found to be unexpected. */
private stateError;
}