UNPKG

sip.js

Version:

A SIP library for JavaScript

144 lines (143 loc) 5.42 kB
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; }