UNPKG

socio

Version:

A WebSocket Real-Time Communication (RTC) API framework.

108 lines (107 loc) 4.67 kB
export var ServerMessageKind; (function (ServerMessageKind) { ServerMessageKind[ServerMessageKind["SUB"] = 0] = "SUB"; ServerMessageKind[ServerMessageKind["UNSUB"] = 1] = "UNSUB"; ServerMessageKind[ServerMessageKind["SQL"] = 2] = "SQL"; ServerMessageKind[ServerMessageKind["PING"] = 3] = "PING"; ServerMessageKind[ServerMessageKind["AUTH"] = 4] = "AUTH"; ServerMessageKind[ServerMessageKind["GET_PERM"] = 5] = "GET_PERM"; ServerMessageKind[ServerMessageKind["PROP_SUB"] = 6] = "PROP_SUB"; ServerMessageKind[ServerMessageKind["PROP_UNSUB"] = 7] = "PROP_UNSUB"; ServerMessageKind[ServerMessageKind["PROP_GET"] = 8] = "PROP_GET"; ServerMessageKind[ServerMessageKind["PROP_SET"] = 9] = "PROP_SET"; ServerMessageKind[ServerMessageKind["PROP_REG"] = 10] = "PROP_REG"; ServerMessageKind[ServerMessageKind["SERV"] = 11] = "SERV"; ServerMessageKind[ServerMessageKind["ADMIN"] = 12] = "ADMIN"; ServerMessageKind[ServerMessageKind["RECON"] = 13] = "RECON"; ServerMessageKind[ServerMessageKind["UP_FILES"] = 14] = "UP_FILES"; ServerMessageKind[ServerMessageKind["GET_FILES"] = 15] = "GET_FILES"; ServerMessageKind[ServerMessageKind["IDENTIFY"] = 16] = "IDENTIFY"; ServerMessageKind[ServerMessageKind["DISCOVERY"] = 17] = "DISCOVERY"; ServerMessageKind[ServerMessageKind["RPC"] = 18] = "RPC"; ServerMessageKind[ServerMessageKind["OK"] = 19] = "OK"; })(ServerMessageKind || (ServerMessageKind = {})); ; export var ClientMessageKind; (function (ClientMessageKind) { ClientMessageKind[ClientMessageKind["CON"] = 0] = "CON"; ClientMessageKind[ClientMessageKind["UPD"] = 1] = "UPD"; ClientMessageKind[ClientMessageKind["PONG"] = 2] = "PONG"; ClientMessageKind[ClientMessageKind["AUTH"] = 3] = "AUTH"; ClientMessageKind[ClientMessageKind["GET_PERM"] = 4] = "GET_PERM"; ClientMessageKind[ClientMessageKind["RES"] = 5] = "RES"; ClientMessageKind[ClientMessageKind["PROP_UPD"] = 6] = "PROP_UPD"; ClientMessageKind[ClientMessageKind["PROP_DROP"] = 7] = "PROP_DROP"; ClientMessageKind[ClientMessageKind["CMD"] = 8] = "CMD"; ClientMessageKind[ClientMessageKind["RECON"] = 9] = "RECON"; ClientMessageKind[ClientMessageKind["RECV_FILES"] = 10] = "RECV_FILES"; ClientMessageKind[ClientMessageKind["TIMEOUT"] = 11] = "TIMEOUT"; ClientMessageKind[ClientMessageKind["RPC"] = 12] = "RPC"; })(ClientMessageKind || (ClientMessageKind = {})); ; export const socio_string_markers_regex = /--(?<markers>(?:-?(?:socio|auth|perm))*)/i; export function SocioStringParse(str) { const markers = str.match(socio_string_markers_regex)?.groups?.markers; return { str, markers: markers ? markers.split('-') : [] }; } export function SocioMarkerHas(marker, { parsed = null, str = '' }) { return marker ? (parsed ? parsed.includes(marker) : (str ? SocioStringParse(str).markers.includes(marker) : false)) : false; } export function initLifecycleHooks() { return {}; } export function sleep(seconds = 2) { return new Promise(res => setTimeout(res, seconds * 1000)); } export function clamp(x, min, max) { return Math.min(Math.max(x, min), max); } export function GetAllMethodNamesOf(obj) { const methods = new Set(); while (obj = Reflect.getPrototypeOf(obj)) { Reflect.ownKeys(obj) .map(k => k.toString()) .filter(k => k != 'constructor' && !k.startsWith('__')).forEach((k) => methods.add(k)); } return [...methods]; } export const perMessageDeflate = { zlibDeflateOptions: { chunkSize: 1024, memLevel: 7, level: 3 }, zlibInflateOptions: { chunkSize: 10 * 1024 }, clientNoContextTakeover: true, serverNoContextTakeover: true, serverMaxWindowBits: 10, concurrencyLimit: 10, threshold: 1024 }; import yaml from 'js-yaml'; const mapType = new yaml.Type('!map', { kind: 'mapping', construct: (data) => new Map(Object.entries(data)), instanceOf: Map, represent: (map) => Object.fromEntries(map.entries()) }); const setType = new yaml.Type('!set', { kind: 'sequence', construct: data => new Set(data), instanceOf: Set, represent: (set) => Array.from(set) }); export const schema = yaml.DEFAULT_SCHEMA.extend([mapType, setType]); export function yaml_stringify(o) { return yaml.dump(o, { schema, indent: 1, noArrayIndent: true }); } export function yaml_parse(str) { return yaml.load(str, { schema }); } export function FastHash(str) { let hash = 0; for (let i = 0; i < str.length; i++) { hash = ((hash << 5) - hash) + str.charCodeAt(i); hash = hash & hash; } return hash; }