UNPKG

mailinator-client

Version:
86 lines (85 loc) 3.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports._resolveTemplateUrl = exports.StreamDomainMessagesRequest = void 0; const WebSocket = require("ws"); const Constants_1 = require("../Constants"); const DEFAULT_BASE_URL = 'https://api.mailinator.com'; const _resolveTemplateUrl = (baseUrl, domain, full, limit, throttleInterval, del) => { const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl; const webSocketBaseUrl = normalizedBaseUrl .replace(/^https:\/\//i, 'wss://') .replace(/^http:\/\//i, 'ws://'); const url = new URL(`${webSocketBaseUrl}/api/v2/domains/${domain}/stream`); if (full !== undefined) { url.searchParams.set('full', full.toString()); } if (limit !== undefined) { url.searchParams.set('limit', limit.toString()); } if (throttleInterval !== undefined) { url.searchParams.set('throttleInterval', throttleInterval); } if (del !== undefined) { url.searchParams.set('delete', del); } return url.toString(); }; exports._resolveTemplateUrl = _resolveTemplateUrl; class StreamDomainMessagesRequest { constructor(domain, full, limit, throttleInterval, del, options = {}) { this.domain = domain; this.full = full; this.limit = limit; this.throttleInterval = throttleInterval; this.del = del; this.options = options; } execute(apiToken, handlers) { const url = _resolveTemplateUrl(this.options.baseUrl || DEFAULT_BASE_URL, this.domain, this.full, this.limit, this.throttleInterval, this.del); const socket = this.options.webSocketFactory ? this.options.webSocketFactory(url, apiToken) : new WebSocket(url, { headers: { [Constants_1.AUTHORIZATION]: apiToken } }); socket.on('open', () => { if (handlers.onOpen) { handlers.onOpen(); } }); socket.on('message', (payload) => { try { const message = JSON.parse(payload.toString()); handlers.onMessage(message); } catch (error) { if (handlers.onError) { if (error instanceof Error) { handlers.onError(error); } else { handlers.onError(new Error('Failed to parse stream payload.')); } } } }); socket.on('error', (error) => { if (handlers.onError) { handlers.onError(error); } }); socket.on('close', (code, reason) => { if (handlers.onClose) { handlers.onClose(code, reason.toString()); } }); return { close: (code, reason) => { socket.close(code, reason); }, socket }; } } exports.StreamDomainMessagesRequest = StreamDomainMessagesRequest;