@candypoets/nipworker 0.0.77 → 0.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/NarrowTypes.js +1 -0
- package/dist/NarrowTypes.js.map +1 -0
- package/dist/cache/index.d.ts +4 -4
- package/dist/cache/index.d.ts.map +1 -1
- package/dist/cache/index.js +2 -2
- package/dist/cache/index.js.map +1 -1
- package/dist/cache/pkg/cache.d.ts +10 -9
- package/dist/cache/pkg/cache_bg.wasm.d.ts +9 -8
- package/dist/connections/index.d.ts +8 -5
- package/dist/connections/index.d.ts.map +1 -1
- package/dist/connections/index.js +2 -2
- package/dist/connections/index.js.map +1 -1
- package/dist/connections/pkg/connections.d.ts +10 -10
- package/dist/connections/pkg/connections_bg.wasm.d.ts +8 -8
- package/dist/crypto/index.d.ts +6 -4
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js +2 -2
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/pkg/crypto.d.ts +114 -86
- package/dist/crypto/pkg/crypto_bg.wasm.d.ts +11 -8
- package/dist/generated/message.d.ts +91 -0
- package/dist/generated/message.d.ts.map +1 -0
- package/dist/generated/nostr/fb/image-data.d.ts +6 -2
- package/dist/generated/nostr/fb/image-data.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind0parsed.d.ts +100 -0
- package/dist/generated/nostr/fb/kind0parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind10002parsed.d.ts +25 -0
- package/dist/generated/nostr/fb/kind10002parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind10019parsed.d.ts +38 -0
- package/dist/generated/nostr/fb/kind10019parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind17375parsed.d.ts +38 -0
- package/dist/generated/nostr/fb/kind17375parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind17parsed.d.ts +42 -0
- package/dist/generated/nostr/fb/kind17parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind1parsed.d.ts +50 -0
- package/dist/generated/nostr/fb/kind1parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts +6 -2
- package/dist/generated/nostr/fb/kind30023-parsed.d.ts.map +1 -1
- package/dist/generated/nostr/fb/kind30023parsed.d.ts +58 -0
- package/dist/generated/nostr/fb/kind30023parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind3parsed.d.ts +25 -0
- package/dist/generated/nostr/fb/kind3parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind4parsed.d.ts +39 -0
- package/dist/generated/nostr/fb/kind4parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind6parsed.d.ts +22 -0
- package/dist/generated/nostr/fb/kind6parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind7374parsed.d.ts +31 -0
- package/dist/generated/nostr/fb/kind7374parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind7375parsed.d.ts +41 -0
- package/dist/generated/nostr/fb/kind7375parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind7376parsed.d.ts +58 -0
- package/dist/generated/nostr/fb/kind7376parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind7parsed.d.ts +42 -0
- package/dist/generated/nostr/fb/kind7parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind9321parsed.d.ts +64 -0
- package/dist/generated/nostr/fb/kind9321parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/kind9735parsed.d.ts +64 -0
- package/dist/generated/nostr/fb/kind9735parsed.d.ts.map +1 -0
- package/dist/generated/nostr/fb/p2pkwitness.d.ts +27 -0
- package/dist/generated/nostr/fb/p2pkwitness.d.ts.map +1 -0
- package/dist/hooks.d.ts +5 -0
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +1 -1
- package/dist/hooks.js.map +1 -1
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index2.js +1 -1
- package/dist/index2.js.map +1 -1
- package/dist/lib/ArrayBufferReader.d.ts +73 -0
- package/dist/lib/ArrayBufferReader.d.ts.map +1 -0
- package/dist/lib/ByteString.d.ts.map +1 -1
- package/dist/parser/index.d.ts +8 -6
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +2 -2
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/pkg/rust_worker.d.ts +1 -1
- package/dist/utils.js +4 -4
- package/dist/utils.js.map +1 -1
- package/package.json +4 -2
- package/dist/generated/nostr/fb/kind39089-parsed.d.ts +0 -43
- package/dist/generated/nostr/fb/kind39089-parsed.d.ts.map +0 -1
- package/dist/generated/nostr/fb/set-pub-key.d.ts +0 -24
- package/dist/generated/nostr/fb/set-pub-key.d.ts.map +0 -1
- package/dist/lib/SharedBuffer.d.ts +0 -62
- package/dist/lib/SharedBuffer.d.ts.map +0 -1
- package/dist/ring-buffer.js +0 -1
- package/dist/ring-buffer.js.map +0 -1
- package/dist/ws/connection.d.ts +0 -37
- package/dist/ws/connection.d.ts.map +0 -1
- package/dist/ws/index.d.ts +0 -2
- package/dist/ws/index.d.ts.map +0 -1
- package/dist/ws/index.js +0 -1
- package/dist/ws/index.js.map +0 -1
- package/dist/ws/registry.d.ts +0 -31
- package/dist/ws/registry.d.ts.map +0 -1
- package/dist/ws/ring-buffer.d.ts +0 -34
- package/dist/ws/ring-buffer.d.ts.map +0 -1
- package/dist/ws/runtime.d.ts +0 -23
- package/dist/ws/runtime.d.ts.map +0 -1
- package/dist/ws/types.d.ts +0 -55
- package/dist/ws/types.d.ts.map +0 -1
package/dist/ws/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/ws/types.ts","../../src/ws/connection.ts","../../src/ws/registry.ts","../../src/ws/index.ts"],"sourcesContent":["export enum ConnectionStatus {\n\tIdle = 'idle',\n\tConnecting = 'connecting',\n\tReady = 'ready',\n\tClosing = 'closing',\n\tClosed = 'closed',\n\tError = 'error'\n}\n\nexport enum MsgKind {\n\tUnknown = 0,\n\tEvent = 1,\n\tEose = 2,\n\tOk = 3,\n\tClosed = 4,\n\tNotice = 5,\n\tAuth = 6\n}\n\n// MsgKind is defined in FlatBuffers schema; import from generated code\n// export type { MsgKind } from '../fb/worker_messages_generated';\n\nexport interface RelayConfig {\n\tconnectTimeoutMs?: number;\n\twriteTimeoutMs?: number;\n\tretryBaseMs?: number;\n\tretryMaxMs?: number;\n\tretryMultiplier?: number;\n\tretryJitter?: number;\n\tretry?: {\n\t\tbaseMs: number;\n\t\tmaxMs: number;\n\t\tmultiplier: number;\n\t\tjitter: number;\n\t};\n\tidleTimeoutMs?: number;\n}\n\nexport interface RelayStats {\n\tsent: number;\n\treceived: number;\n\treconnects: number;\n\tlastActivity: number; // timestamp\n\tuptime?: number;\n\tdropped: number; // for ring buffer overwrites\n}\n\nexport interface InboundEnvelope {\n\trelays: string[];\n\tframes: string[];\n}\n\nexport interface WorkerLine {\n\trelay: {\n\t\turl: string;\n\t};\n\tkind: number; // MsgKind from generated\n\tsub_id?: string;\n\traw: Uint8Array; // UTF-8 bytes\n}\n\nexport type FrameCallback = (frame: string) => void;\nexport type MessageHandler = (\n\turl: string,\n\tkind: MsgKind,\n\tsubId: string | null,\n\trawText: string\n) => void;\n","import { ConnectionStatus, RelayConfig, RelayStats } from './types';\n\n// Callback invoked for every incoming websocket text frame\nexport type MessageHandler = (\n\turl: string,\n\tsubId: string | null, // present for EVENT/EOSE/CLOSED\n\trawText: string\n) => void;\n\nexport class RelayConnection {\n\tprivate wantReconnect = true;\n\tprivate url: string;\n\tprivate config: RelayConfig;\n\tprivate status: ConnectionStatus = ConnectionStatus.Closed;\n\tprivate ws: WebSocket | null = null;\n\tprivate reconnectTimer: number | null = null;\n\tprivate abortController: AbortController | null = null;\n\n\tprivate attempts: number = 0; // reconnection attempts after first failure\n\tprivate givenUp: boolean = false; // set when attempts reached cap\n\tprivate lastActivity: number = Date.now();\n\tprivate stats: RelayStats = {\n\t\tdropped: 0,\n\t\tsent: 0,\n\t\treceived: 0,\n\t\treconnects: 0, // mirrors attempts for visibility\n\t\tlastActivity: Date.now()\n\t};\n\tprivate readyWaiters: Array<(ok: boolean) => void> = [];\n\tpublic messageHandler: MessageHandler | null = null;\n\n\tconstructor(url: string, config: Partial<RelayConfig> = {}) {\n\t\tthis.url = url;\n\t\tthis.config = {\n\t\t\tconnectTimeoutMs: 5_000,\n\t\t\twriteTimeoutMs: 10_000,\n\t\t\tretry: {\n\t\t\t\tbaseMs: 300,\n\t\t\t\tmaxMs: 10_000,\n\t\t\t\tmultiplier: 1.6,\n\t\t\t\tjitter: 0.1\n\t\t\t},\n\t\t\tmaxReconnectAttempts: 2, // default: 2 retries\n\t\t\tidleTimeoutMs: 300_000,\n\t\t\t...config\n\t\t};\n\t}\n\n\tgetUrl(): string {\n\t\treturn this.url;\n\t}\n\tgetStatus(): ConnectionStatus {\n\t\treturn this.status;\n\t}\n\tgetStats(): RelayStats {\n\t\treturn { ...this.stats, reconnects: this.attempts, lastActivity: this.lastActivity };\n\t}\n\tgetLastActivity(): number {\n\t\treturn this.lastActivity;\n\t}\n\thasGivenUp(): boolean {\n\t\treturn this.givenUp;\n\t}\n\n\tsetMessageHandler(handler: MessageHandler): void {\n\t\tthis.messageHandler = handler;\n\t}\n\n\t// Fire-and-forget connect. It never throws. Use waitForReady() to await.\n\tconnect(): void {\n\t\tif (this.givenUp) return;\n\t\tif (this.status === ConnectionStatus.Connecting || this.status === ConnectionStatus.Ready)\n\t\t\treturn;\n\n\t\t// Clear pending reconnect\n\t\tif (this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\n\t\tthis.status = ConnectionStatus.Connecting;\n\t\tthis.abortController = new AbortController();\n\t\tconst signal = this.abortController.signal;\n\n\t\ttry {\n\t\t\tthis.ws = new WebSocket(this.url);\n\t\t\tthis.ws.binaryType = 'arraybuffer';\n\n\t\t\tconst cleanup = () => {\n\t\t\t\tif (!this.ws) return;\n\t\t\t\tthis.ws.onopen = null as any;\n\t\t\t\tthis.ws.onclose = null as any;\n\t\t\t\tthis.ws.onerror = null as any;\n\t\t\t\tthis.ws.onmessage = null as any;\n\t\t\t};\n\n\t\t\tconst onOpen = () => {\n\t\t\t\t// Clear connect timeout\n\t\t\t\tclearTimeout(to);\n\t\t\t\t// Success: reset attempts and flags\n\t\t\t\tthis.status = ConnectionStatus.Ready;\n\t\t\t\tthis.attempts = 0;\n\t\t\t\tthis.givenUp = false;\n\t\t\t\tthis.lastActivity = Date.now();\n\t\t\t\tthis.stats.lastActivity = this.lastActivity;\n\t\t\t\tthis.resolveReady(true);\n\t\t\t};\n\n\t\t\tconst onClose = (ev: CloseEvent) => {\n\t\t\t\t// Clear connect timeout\n\t\t\t\tclearTimeout(to);\n\t\t\t\tcleanup();\n\t\t\t\tthis.status = ConnectionStatus.Closed;\n\t\t\t\tthis.resolveReady(false);\n\t\t\t\tif (ev.code !== 1000) {\n\t\t\t\t\tthis.scheduleReconnect();\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tconst onError = (_ev: Event) => {\n\t\t\t\t// Clear connect timeout\n\t\t\t\tclearTimeout(to);\n\t\t\t\t// Treat like close; don’t throw\n\t\t\t\tcleanup();\n\t\t\t\tthis.status = ConnectionStatus.Closed;\n\t\t\t\tthis.resolveReady(false);\n\t\t\t\tthis.scheduleReconnect();\n\t\t\t};\n\n\t\t\tconst onMessage = (event: MessageEvent) => {\n\t\t\t\tthis.lastActivity = Date.now();\n\t\t\t\tthis.stats.lastActivity = this.lastActivity;\n\t\t\t\tthis.stats.received++;\n\n\t\t\t\tif (typeof event.data === 'string') {\n\t\t\t\t\tconst rawText = event.data;\n\t\t\t\t\tconst subId = this.extractSubId(rawText);\n\t\t\t\t\tif (this.messageHandler) {\n\t\t\t\t\t\tthis.messageHandler(this.url, subId, rawText);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// Attach\n\t\t\tthis.ws.onopen = onOpen;\n\t\t\tthis.ws.onclose = onClose;\n\t\t\tthis.ws.onerror = onError;\n\t\t\tthis.ws.onmessage = onMessage;\n\n\t\t\t// Timeout and abort\n\t\t\tconst to = setTimeout(() => {\n\t\t\t\tif (this.status === ConnectionStatus.Connecting) {\n\t\t\t\t\tcleanup();\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.ws?.close();\n\t\t\t\t\t} catch {}\n\t\t\t\t\tthis.status = ConnectionStatus.Closed;\n\t\t\t\t\tthis.resolveReady(false);\n\t\t\t\t\tthis.scheduleReconnect();\n\t\t\t\t}\n\t\t\t}, this.config.connectTimeoutMs);\n\n\t\t\tconst onAbort = () => {\n\t\t\t\tclearTimeout(to);\n\t\t\t\tcleanup();\n\t\t\t\ttry {\n\t\t\t\t\tthis.ws?.close();\n\t\t\t\t} catch {}\n\t\t\t\tthis.status = ConnectionStatus.Closed;\n\t\t\t\tthis.resolveReady(false);\n\t\t\t\tif (this.wantReconnect) this.scheduleReconnect(); // guard here\n\t\t\t};\n\n\t\t\tsignal.addEventListener('abort', onAbort);\n\t\t} catch {\n\t\t\tthis.status = ConnectionStatus.Closed;\n\t\t\tthis.resolveReady(false);\n\t\t\tthis.scheduleReconnect();\n\t\t}\n\t}\n\n\tasync sendMessage(frame: string): Promise<void> {\n\t\tif (this.status !== ConnectionStatus.Ready || !this.ws) {\n\t\t\tthrow new Error('Connection not ready');\n\t\t}\n\t\tthis.ws.send(frame);\n\t\tthis.stats.sent++;\n\t\tthis.lastActivity = Date.now();\n\t\tthis.stats.lastActivity = this.lastActivity;\n\t}\n\n\tasync waitForReady(timeoutMs: number = this.config.connectTimeoutMs ?? 5_000): Promise<void> {\n\t\tif (this.status === ConnectionStatus.Ready) return;\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst timer = setTimeout(() => {\n\t\t\t\tthis.removeReadyResolver(resolver);\n\t\t\t\treject(new Error('Timeout waiting for ready'));\n\t\t\t}, timeoutMs);\n\n\t\t\tconst resolver = (ok: boolean) => {\n\t\t\t\tclearTimeout(timer);\n\t\t\t\tif (ok) resolve();\n\t\t\t\telse reject(new Error('Connection closed'));\n\t\t\t};\n\t\t\tthis.readyWaiters.push(resolver);\n\t\t});\n\t}\n\n\tasync close(): Promise<void> {\n\t\tthis.wantReconnect = false;\n\t\tif (this.abortController) this.abortController.abort();\n\t\tif (this.reconnectTimer) {\n\t\t\tclearTimeout(this.reconnectTimer);\n\t\t\tthis.reconnectTimer = null;\n\t\t}\n\t\tthis.closeWebSocket();\n\t\tthis.status = ConnectionStatus.Closed;\n\t\tthis.resolveReady(false);\n\t}\n\n\tshouldCloseDueToInactivity(): boolean {\n\t\treturn Date.now() - this.lastActivity > (this.config.idleTimeoutMs ?? 300_000);\n\t}\n\n\t// Internals\n\n\tprivate resolveReady(ok: boolean) {\n\t\tif (this.readyWaiters.length === 0) return;\n\t\tconst waiters = this.readyWaiters.slice();\n\t\tthis.readyWaiters.length = 0;\n\t\tfor (const fn of waiters) {\n\t\t\ttry {\n\t\t\t\tfn(ok);\n\t\t\t} catch {}\n\t\t}\n\t}\n\n\tprivate removeReadyResolver(fn: (ok: boolean) => void) {\n\t\tconst idx = this.readyWaiters.indexOf(fn);\n\t\tif (idx >= 0) this.readyWaiters.splice(idx, 1);\n\t}\n\n\tprivate closeWebSocket() {\n\t\tif (this.ws) {\n\t\t\ttry {\n\t\t\t\tthis.ws.close(1000, 'Normal closure');\n\t\t\t} catch {}\n\t\t\tthis.ws = null;\n\t\t}\n\t}\n\n\tprivate scheduleReconnect(): void {\n\t\tif (!this.wantReconnect) return;\n\t\tif (this.status !== ConnectionStatus.Closed || !this.config.retry?.baseMs) return;\n\n\t\tconst cap = this.config.maxReconnectAttempts ?? 2;\n\t\tif (cap > 0 && this.attempts >= cap) {\n\t\t\tthis.givenUp = true;\n\t\t\treturn;\n\t\t}\n\n\t\tconst base = this.config.retry.baseMs;\n\t\tconst max = this.config.retry.maxMs ?? 10_000;\n\t\tconst mult = this.config.retry.multiplier ?? 1.6;\n\t\tconst jitter = this.config.retry.jitter ?? 0.1;\n\n\t\t// Calculate delay using current attempts\n\t\tconst delay =\n\t\t\tMath.min(base * Math.pow(mult, this.attempts), max) *\n\t\t\t(1 + (Math.random() - 0.5) * jitter * 2);\n\n\t\tthis.reconnectTimer = setTimeout(() => {\n\t\t\t// Increment attempts when actually trying again\n\t\t\tthis.attempts++;\n\t\t\tthis.stats.reconnects = this.attempts;\n\t\t\tthis.connect();\n\t\t}, delay) as unknown as number;\n\t}\n\n\tprivate extractSubId(s: string): string | null {\n\t\tlet i = 0;\n\t\tconst n = s.length;\n\n\t\t// Skip leading whitespace\n\t\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\t\tif (i >= n || s[i] !== '[') return null;\n\t\ti++;\n\n\t\t// Skip whitespace before first element\n\t\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\t\tif (i >= n) return null;\n\n\t\t// Skip first element (kind or similar)\n\t\tif (s[i] === '\"') {\n\t\t\t// Fast-skip a quoted string (no escape handling, consistent with existing code)\n\t\t\ti++;\n\t\t\twhile (i < n && s[i] !== '\"') i++;\n\t\t\tif (i >= n) return null;\n\t\t\ti++; // past closing quote\n\t\t} else {\n\t\t\t// Non-quoted first element; skip until comma or end of array\n\t\t\twhile (i < n && s[i] !== ',' && s[i] !== ']') i++;\n\t\t}\n\n\t\t// Move to the comma after first element\n\t\twhile (i < n && s[i] !== ',') i++;\n\t\tif (i >= n || s[i] !== ',') return null;\n\t\ti++; // skip comma\n\n\t\t// Skip whitespace before second element\n\t\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\t\tif (i >= n) return null;\n\n\t\t// Extract second element only if it's a quoted string\n\t\tif (s[i] === '\"') {\n\t\t\ti++;\n\t\t\tconst start = i;\n\t\t\twhile (i < n && s[i] !== '\"') i++;\n\t\t\tif (i > n) return null;\n\t\t\treturn s.slice(start, i);\n\t\t}\n\t\treturn null;\n\t}\n}\n","import { RelayConfig, ConnectionStatus } from './types';\nimport { RelayConnection } from './connection';\n\nexport class ConnectionRegistry {\n\tprivate connections = new Map<string, RelayConnection>();\n\tprivate disabledRelays = new Set<string>();\n\tprivate nextAllowed = new Map<string, number>(); // cooldown timestamps per URL (ms)\n\tprivate subCounts = new Map<string, number>(); // active subscription count per URL\n\tprivate config: RelayConfig;\n\n\tprivate readonly cooldownMs = 60_000; // after failures\n\n\tconstructor(config: RelayConfig) {\n\t\tthis.config = { maxReconnectAttempts: 2, ...config };\n\t}\n\n\tprivate now(): number {\n\t\treturn Date.now();\n\t}\n\n\tprivate detectKind(frame: string): 'REQ' | 'CLOSE' | 'OTHER' {\n\t\tconst m = frame.match(/^\\s*\\[\\s*\"([^\"]+)\"/);\n\t\tif (!m) return 'OTHER';\n\t\tconst k = m[1].toUpperCase();\n\t\tif (k === 'REQ') return 'REQ';\n\t\tif (k === 'CLOSE') return 'CLOSE';\n\t\treturn 'OTHER';\n\t}\n\n\tprivate getCount(url: string): number {\n\t\treturn this.subCounts.get(url) ?? 0;\n\t}\n\tprivate setCount(url: string, value: number): void {\n\t\tthis.subCounts.set(url, Math.max(0, value));\n\t}\n\n\t// Replace bumpCount with a pure counter that returns the new value.\n\tprivate bumpCount(url: string, delta: number): number {\n\t\tconst next = Math.max(0, this.getCount(url) + delta);\n\t\tthis.subCounts.set(url, next);\n\t\treturn next;\n\t}\n\n\tprivate giveUpOrCooldown(url: string, conn?: RelayConnection) {\n\t\tif (conn?.hasGivenUp()) {\n\t\t\tif (!this.disabledRelays.has(url)) {\n\t\t\t\tconsole.warn(`[registry] disabling relay ${url}: max attempts reached`);\n\t\t\t}\n\t\t\tthis.disabledRelays.add(url);\n\t\t\tthis.nextAllowed.set(url, this.now() + this.cooldownMs);\n\t\t} else {\n\t\t\tthis.nextAllowed.set(url, this.now() + Math.min(this.cooldownMs, 10_000));\n\t\t}\n\t}\n\n\tprivate isCoolingDown(url: string): boolean {\n\t\tconst at = this.nextAllowed.get(url) ?? 0;\n\t\treturn this.now() < at;\n\t}\n\n\tasync ensureConnection(url: string): Promise<RelayConnection> {\n\t\tif (url.includes('proxy')) throw new Error(`Bad relay url`);\n\t\tif (this.disabledRelays.has(url)) {\n\t\t\tthrow new Error(`Relay disabled: ${url}`);\n\t\t}\n\t\tif (this.isCoolingDown(url)) {\n\t\t\tthrow new Error(\n\t\t\t\t`Relay ${url} cooling down until ${new Date(this.nextAllowed.get(url)!).toISOString()}`\n\t\t\t);\n\t\t}\n\n\t\tlet conn = this.connections.get(url);\n\t\tif (!conn) {\n\t\t\tconn = new RelayConnection(url, this.config);\n\t\t\tthis.connections.set(url, conn);\n\t\t\tconn.connect(); // fire-and-forget\n\t\t} else if (conn.getStatus() !== ConnectionStatus.Ready) {\n\t\t\t// nudge reconnect on existing connection\n\t\t\tconn.connect();\n\t\t}\n\n\t\tif (conn.getStatus() !== ConnectionStatus.Ready) {\n\t\t\ttry {\n\t\t\t\tawait conn.waitForReady(this.config.connectTimeoutMs ?? 5_000);\n\t\t\t} catch (e) {\n\t\t\t\tthis.giveUpOrCooldown(url, conn);\n\t\t\t\tthrow e;\n\t\t\t}\n\t\t}\n\n\t\tif (conn.getStatus() !== ConnectionStatus.Ready) {\n\t\t\tthis.giveUpOrCooldown(url, conn);\n\t\t\tthrow new Error(`Relay ${url} not ready`);\n\t\t}\n\n\t\treturn conn;\n\t}\n\n\t// Update sendFrame to disconnect immediately when count becomes 0 after a CLOSE.\n\tasync sendFrame(url: string, frame: string): Promise<void> {\n\t\tif (this.disabledRelays.has(url) || this.isCoolingDown(url)) return;\n\n\t\tconst kind = this.detectKind(frame);\n\t\tconst conn = await this.ensureConnection(url);\n\n\t\ttry {\n\t\t\tawait conn.sendMessage(frame);\n\t\t} catch (e) {\n\t\t\tthis.giveUpOrCooldown(url, conn);\n\t\t\tawait this.disconnect(url);\n\t\t\tthrow e;\n\t\t}\n\n\t\t// Track the sub count for visibility and lifecycle decisions\n\t\tif (kind === 'REQ') {\n\t\t\tthis.bumpCount(url, +1);\n\t\t} else if (kind === 'CLOSE') {\n\t\t\tconst newCount = this.bumpCount(url, -1);\n\t\t\tif (newCount === 0) {\n\t\t\t\tconsole.log('disconnecting', url);\n\t\t\t\t// Immediately disconnect when no more active REQ for this relay\n\t\t\t\tawait this.disconnect(url);\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate async sendAllFramesToRelay(url: string, frames: string[]): Promise<void> {\n\t\tfor (const frame of frames) {\n\t\t\tawait this.sendFrame(url, frame);\n\t\t}\n\t}\n\n\tasync sendToRelays(\n\t\trelays: string[],\n\t\tframes: string[],\n\t\tmaxSuccesses = 5,\n\t\tmaxConcurrency = 5\n\t): Promise<void> {\n\t\tconst available = relays.filter(\n\t\t\t(url) => !this.disabledRelays.has(url) && !this.isCoolingDown(url)\n\t\t);\n\n\t\tconst target = Math.min(maxSuccesses, available.length);\n\t\tif (target === 0) return;\n\n\t\tlet index = 0;\n\t\tlet successes = 0;\n\t\tlet inFlight = 0;\n\n\t\tlet resolveDone!: () => void;\n\t\tconst done = new Promise<void>((resolve) => {\n\t\t\tresolveDone = resolve;\n\t\t});\n\n\t\tconst maybeFinish = () => {\n\t\t\tif (successes >= target || (index >= available.length && inFlight === 0)) {\n\t\t\t\tresolveDone();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t\tconst launch = () => {\n\t\t\t// Fill available “slots” up to maxConcurrency.\n\t\t\twhile (inFlight < maxConcurrency && index < available.length && successes < target) {\n\t\t\t\tconst url = available[index++];\n\t\t\t\tinFlight++;\n\n\t\t\t\tthis.sendAllFramesToRelay(url, frames)\n\t\t\t\t\t.then(() => {\n\t\t\t\t\t\tsuccesses++;\n\t\t\t\t\t})\n\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t// ignore failures; just move on\n\t\t\t\t\t})\n\t\t\t\t\t.finally(() => {\n\t\t\t\t\t\tinFlight--;\n\t\t\t\t\t\tif (!maybeFinish()) {\n\t\t\t\t\t\t\tlaunch(); // backfill the freed slot\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\t\t};\n\n\t\tlaunch();\n\t\tawait done;\n\t}\n\n\tasync disconnect(url: string): Promise<void> {\n\t\tconst connection = this.connections.get(url);\n\t\tif (connection) {\n\t\t\tawait connection.close();\n\t\t\tthis.connections.delete(url);\n\t\t}\n\t\t// No pending-disconnects to cancel anymore\n\t\tthis.subCounts.delete(url);\n\t}\n\n\tasync disconnectAll(): Promise<void> {\n\t\tfor (const [url] of this.connections) {\n\t\t\tawait this.disconnect(url);\n\t\t}\n\t}\n\n\tenableRelay(url: string): void {\n\t\tthis.disabledRelays.delete(url);\n\t\tthis.nextAllowed.delete(url);\n\t}\n\n\tisRelayDisabled(url: string): boolean {\n\t\treturn this.disabledRelays.has(url);\n\t}\n\n\tgetActiveReqCount(url: string): number {\n\t\treturn this.getCount(url);\n\t}\n\n\tgetConnectionStatus(url: string): ConnectionStatus | undefined {\n\t\tconst connection = this.connections.get(url);\n\t\treturn connection ? connection.getStatus() : undefined;\n\t}\n\n\tgetAllStatuses(): Map<string, ConnectionStatus> {\n\t\treturn new Map(\n\t\t\tArray.from(this.connections.entries()).map(([url, conn]) => [url, conn.getStatus()])\n\t\t);\n\t}\n}\n","/* Worker runtime (dedicated Web Worker, module) */\nimport { ByteRingBuffer } from './ring-buffer';\nimport { ConnectionRegistry } from './registry';\n\nconst __encoder = new TextEncoder();\nconst __urlBytesCache = new Map<string, Uint8Array>();\nfunction __getUrlBytes(url: string): Uint8Array {\n\tconst cached = __urlBytesCache.get(url);\n\tif (cached) return cached;\n\tconst bytes = __encoder.encode(url);\n\t__urlBytesCache.set(url, bytes);\n\treturn bytes;\n}\n\nfunction writeEnvelope(outputRing: ByteRingBuffer, url: string, rawText: string): void {\n\tconst urlBytes = __getUrlBytes(url);\n\tconst rawBytes = __encoder.encode(rawText);\n\tconst totalLen = 2 + urlBytes.length + 4 + rawBytes.length;\n\tconst out = new Uint8Array(totalLen);\n\tconst view = new DataView(out.buffer, out.byteOffset, out.byteLength);\n\tlet o = 0;\n\tview.setUint16(o, urlBytes.length, false);\n\to += 2;\n\tout.set(urlBytes, o);\n\to += urlBytes.length;\n\tview.setUint32(o, rawBytes.length, false);\n\to += 4;\n\tout.set(rawBytes, o);\n\toutputRing.write(out);\n}\n\nfunction extractSubIdFast(s: string): string | null {\n\tlet i = 0,\n\t\tn = s.length;\n\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\tif (i >= n || s[i] !== '[') return null;\n\ti++;\n\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\tif (i >= n) return null;\n\tif (s[i] === '\"') {\n\t\ti++;\n\t\twhile (i < n && s[i] !== '\"') i++;\n\t\tif (i >= n) return null;\n\t\ti++;\n\t} else {\n\t\twhile (i < n && s[i] !== ',' && s[i] !== ']') i++;\n\t}\n\twhile (i < n && s[i] !== ',') i++;\n\tif (i >= n || s[i] !== ',') return null;\n\ti++;\n\twhile (i < n && s.charCodeAt(i) <= 32) i++;\n\tif (i >= n) return null;\n\tif (s[i] === '\"') {\n\t\ti++;\n\t\tconst start = i;\n\t\twhile (i < n && s[i] !== '\"') i++;\n\t\tif (i > n) return null;\n\t\treturn s.slice(start, i);\n\t}\n\treturn null;\n}\n\ntype InitMsg = {\n\ttype: 'init';\n\tpayload: {\n\t\tinRings: SharedArrayBuffer[];\n\t\toutRings: SharedArrayBuffer[];\n\t\trelayConfig: any;\n\t};\n};\n\nlet inputRings: ByteRingBuffer[] = [];\nlet outputRings: ByteRingBuffer[] = [];\nlet registry: ConnectionRegistry | null = null;\nconst subIdToRing = new Map<string, ByteRingBuffer>();\nconst decoder = new TextDecoder();\n\nfunction hashSubId(sub_id: string): number {\n\tconst target = sub_id.includes('_') ? (sub_id.split('_')[1] ?? '') : sub_id;\n\tlet hash = 0;\n\tfor (let i = 0; i < target.length; i++) hash = (hash << 5) - hash + target.charCodeAt(i);\n\treturn Math.abs(hash) % outputRings.length;\n}\n\nfunction getOutRingForSubId(subId: string): ByteRingBuffer {\n\tlet ring = subIdToRing.get(subId);\n\tif (ring) return ring;\n\tring = outputRings[hashSubId(subId)];\n\tsubIdToRing.set(subId, ring);\n\treturn ring;\n}\n\nlet lastRingIndex = 0;\nlet backoffMs = 10;\nconst MIN_BACKOFF_MS = 10;\nconst MAX_BACKOFF_MS = 100;\nlet loopTimer: number | null = null;\n\nfunction scheduleLoop() {\n\tloopTimer = setTimeout(processLoop, backoffMs) as unknown as number;\n}\n\nfunction processLoop() {\n\tlet processed = 0;\n\tconst ringCount = inputRings.length;\n\tif (ringCount === 0) {\n\t\tbackoffMs = Math.min(backoffMs * 2, MAX_BACKOFF_MS);\n\t\treturn scheduleLoop();\n\t}\n\n\tlet madeProgress: boolean;\n\tdo {\n\t\tmadeProgress = false;\n\t\tfor (let i = 0; i < ringCount; i++) {\n\t\t\tconst idx = (lastRingIndex + i) % ringCount;\n\t\t\tconst ring = inputRings[idx];\n\t\t\tconst record = ring.read();\n\t\t\tif (!record) continue;\n\n\t\t\tmadeProgress = true;\n\t\t\tprocessed++;\n\n\t\t\tconst envelopeStr = decoder.decode(record);\n\t\t\tlet envelope: any;\n\t\t\ttry {\n\t\t\t\tenvelope = JSON.parse(envelopeStr);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!Array.isArray(envelope.relays) || !Array.isArray(envelope.frames)) continue;\n\n\t\t\tregistry?.sendToRelays(envelope.relays, envelope.frames).catch(console.error);\n\t\t\tlastRingIndex = (idx + 1) % ringCount;\n\t\t}\n\t} while (madeProgress);\n\n\tbackoffMs = processed > 0 ? MIN_BACKOFF_MS : Math.min(backoffMs * 2, MAX_BACKOFF_MS);\n\tscheduleLoop();\n}\n\nself.addEventListener('message', (evt: MessageEvent<InitMsg>) => {\n\tconst msg = evt.data;\n\tif (!msg || msg.type === 'init') {\n\t\tinputRings = msg.payload.inRings.map((s) => new ByteRingBuffer(s));\n\t\toutputRings = msg.payload.outRings.map((s) => new ByteRingBuffer(s));\n\t\tregistry = new ConnectionRegistry(msg.payload.relayConfig || {});\n\n\t\tconst onIncoming = (url: string, subId: string | null, rawText: string) => {\n\t\t\tconst sid = subId ?? extractSubIdFast(rawText);\n\t\t\tif (sid) writeEnvelope(getOutRingForSubId(sid), url, rawText);\n\t\t};\n\n\t\tconst originalEnsure = registry.ensureConnection.bind(registry);\n\t\tregistry.ensureConnection = async (url: string) => {\n\t\t\tconst conn = await originalEnsure(url);\n\t\t\tif (!conn.messageHandler) conn.setMessageHandler(onIncoming);\n\t\t\treturn conn;\n\t\t};\n\n\t\t// Kick off the polling loop (no Atomics)\n\t\tbackoffMs = MIN_BACKOFF_MS;\n\t\tif (loopTimer !== null) clearTimeout(loopTimer as any);\n\t\t// scheduleLoop();\n\t\treturn;\n\t}\n\n\t// NEW: minimal wake signal to reset backoff and run soon\n\tif (msg?.type === 'wake') {\n\t\t// ensure these are in scope: backoffMs, MIN_BACKOFF_MS, loopTimer, scheduleLoop\n\t\tbackoffMs = MIN_BACKOFF_MS;\n\t\tif (loopTimer !== null) {\n\t\t\tclearTimeout(loopTimer as any);\n\t\t\tloopTimer = null;\n\t\t}\n\t\tscheduleLoop();\n\t\treturn;\n\t}\n});\n"],"names":["ConnectionStatus","RelayConnection","url","config","handler","signal","cleanup","onOpen","to","onClose","ev","onError","_ev","onMessage","event","rawText","subId","onAbort","frame","timeoutMs","resolve","reject","timer","resolver","ok","waiters","fn","idx","cap","base","max","mult","jitter","delay","s","i","n","start","ConnectionRegistry","m","k","value","delta","next","conn","at","e","kind","frames","relays","maxSuccesses","maxConcurrency","available","target","index","successes","inFlight","resolveDone","done","maybeFinish","launch","connection","__encoder","__urlBytesCache","__getUrlBytes","cached","bytes","writeEnvelope","outputRing","urlBytes","rawBytes","totalLen","out","view","o","extractSubIdFast","inputRings","outputRings","registry","subIdToRing","decoder","hashSubId","sub_id","hash","getOutRingForSubId","ring","lastRingIndex","backoffMs","MIN_BACKOFF_MS","MAX_BACKOFF_MS","loopTimer","scheduleLoop","processLoop","processed","ringCount","madeProgress","record","envelopeStr","envelope","evt","msg","ByteRingBuffer","onIncoming","sid","originalEnsure"],"mappings":"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"}
|
package/dist/ws/registry.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { RelayConfig, ConnectionStatus } from './types';
|
|
2
|
-
import { RelayConnection } from './connection';
|
|
3
|
-
|
|
4
|
-
export declare class ConnectionRegistry {
|
|
5
|
-
private connections;
|
|
6
|
-
private disabledRelays;
|
|
7
|
-
private nextAllowed;
|
|
8
|
-
private subCounts;
|
|
9
|
-
private config;
|
|
10
|
-
private readonly cooldownMs;
|
|
11
|
-
constructor(config: RelayConfig);
|
|
12
|
-
private now;
|
|
13
|
-
private detectKind;
|
|
14
|
-
private getCount;
|
|
15
|
-
private setCount;
|
|
16
|
-
private bumpCount;
|
|
17
|
-
private giveUpOrCooldown;
|
|
18
|
-
private isCoolingDown;
|
|
19
|
-
ensureConnection(url: string): Promise<RelayConnection>;
|
|
20
|
-
sendFrame(url: string, frame: string): Promise<void>;
|
|
21
|
-
private sendAllFramesToRelay;
|
|
22
|
-
sendToRelays(relays: string[], frames: string[], maxSuccesses?: number, maxConcurrency?: number): Promise<void>;
|
|
23
|
-
disconnect(url: string): Promise<void>;
|
|
24
|
-
disconnectAll(): Promise<void>;
|
|
25
|
-
enableRelay(url: string): void;
|
|
26
|
-
isRelayDisabled(url: string): boolean;
|
|
27
|
-
getActiveReqCount(url: string): number;
|
|
28
|
-
getConnectionStatus(url: string): ConnectionStatus | undefined;
|
|
29
|
-
getAllStatuses(): Map<string, ConnectionStatus>;
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ws/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,kBAAkB;IAC9B,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAc;IAE5B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAU;gBAEzB,MAAM,EAAE,WAAW;IAI/B,OAAO,CAAC,GAAG;IAIX,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,aAAa;IAKf,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAuCvD,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YA2B5C,oBAAoB;IAM5B,YAAY,CACjB,MAAM,EAAE,MAAM,EAAE,EAChB,MAAM,EAAE,MAAM,EAAE,EAChB,YAAY,SAAI,EAChB,cAAc,SAAI,GAChB,OAAO,CAAC,IAAI,CAAC;IAmDV,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUtC,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAK9B,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIrC,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAItC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAK9D,cAAc,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;CAK/C"}
|
package/dist/ws/ring-buffer.d.ts
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
export declare class ByteRingBuffer {
|
|
2
|
-
private readonly sab;
|
|
3
|
-
private readonly dataView;
|
|
4
|
-
private readonly dataStart;
|
|
5
|
-
private readonly capacity;
|
|
6
|
-
private dropped;
|
|
7
|
-
constructor(buffer: SharedArrayBuffer);
|
|
8
|
-
private getHead;
|
|
9
|
-
private setHead;
|
|
10
|
-
private getTail;
|
|
11
|
-
private setTail;
|
|
12
|
-
private getSeq;
|
|
13
|
-
private setSeq;
|
|
14
|
-
getFreeSpace(): number;
|
|
15
|
-
getDropped(): number;
|
|
16
|
-
hasRecords(): boolean;
|
|
17
|
-
readNext(): {
|
|
18
|
-
payload: Uint8Array;
|
|
19
|
-
} | null;
|
|
20
|
-
/**
|
|
21
|
-
* Writes a payload to the ring buffer, overwriting old records if necessary.
|
|
22
|
-
* Returns the sequence number if successful, -1 if dropped (couldn't make space).
|
|
23
|
-
*/
|
|
24
|
-
write(payload: Uint8Array): number;
|
|
25
|
-
/**
|
|
26
|
-
* Reads the next committed payload or null if none ready.
|
|
27
|
-
* Advances tail on success.
|
|
28
|
-
*/
|
|
29
|
-
read(): Uint8Array | null;
|
|
30
|
-
private skipRecord;
|
|
31
|
-
private copyBytes;
|
|
32
|
-
private copyFromRing;
|
|
33
|
-
}
|
|
34
|
-
//# sourceMappingURL=ring-buffer.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ring-buffer.d.ts","sourceRoot":"","sources":["../../src/ws/ring-buffer.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAc;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,OAAO,CAAa;gBAEhB,MAAM,EAAE,iBAAiB;IASrC,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,MAAM;IAId,YAAY,IAAI,MAAM;IAOtB,UAAU,IAAI,MAAM;IAIpB,UAAU,IAAI,OAAO;IAIrB,QAAQ,IAAI;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI;IAK1C;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,UAAU,GAAG,MAAM;IAqDlC;;;OAGG;IACH,IAAI,IAAI,UAAU,GAAG,IAAI;IA0BzB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,SAAS;IAsBjB,OAAO,CAAC,YAAY;CAqBpB"}
|
package/dist/ws/runtime.d.ts
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
export type WSRuntimeInit = {
|
|
2
|
-
inRings: SharedArrayBuffer[];
|
|
3
|
-
outRings: SharedArrayBuffer[];
|
|
4
|
-
relayConfig: any;
|
|
5
|
-
};
|
|
6
|
-
export declare class WSRuntime {
|
|
7
|
-
private inputRings;
|
|
8
|
-
private outputRings;
|
|
9
|
-
private registry;
|
|
10
|
-
private subIdToRing;
|
|
11
|
-
private decoder;
|
|
12
|
-
private lastRingIndex;
|
|
13
|
-
private backoffMs;
|
|
14
|
-
private loopTimer;
|
|
15
|
-
constructor(init: WSRuntimeInit);
|
|
16
|
-
wake(): void;
|
|
17
|
-
destroy(): void;
|
|
18
|
-
private scheduleLoop;
|
|
19
|
-
private processLoop;
|
|
20
|
-
private hashSubId;
|
|
21
|
-
private getOutRingForSubId;
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/ws/runtime.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/ws/runtime.ts"],"names":[],"mappings":"AAgEA,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,WAAW,EAAE,GAAG,CAAC;CACjB,CAAC;AAEF,qBAAa,SAAS;IACrB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,WAAW,CAAwB;IAC3C,OAAO,CAAC,QAAQ,CAAmC;IACnD,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,OAAO,CAAqB;IAEpC,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,SAAS,CAA8C;gBAEnD,IAAI,EAAE,aAAa;IAuBxB,IAAI,IAAI,IAAI;IASZ,OAAO,IAAI,IAAI;IAatB,OAAO,CAAC,YAAY,CAElB;IAEF,OAAO,CAAC,WAAW,CAqCjB;IAEF,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,kBAAkB;CAO1B"}
|
package/dist/ws/types.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
export declare enum ConnectionStatus {
|
|
2
|
-
Idle = "idle",
|
|
3
|
-
Connecting = "connecting",
|
|
4
|
-
Ready = "ready",
|
|
5
|
-
Closing = "closing",
|
|
6
|
-
Closed = "closed",
|
|
7
|
-
Error = "error"
|
|
8
|
-
}
|
|
9
|
-
export declare enum MsgKind {
|
|
10
|
-
Unknown = 0,
|
|
11
|
-
Event = 1,
|
|
12
|
-
Eose = 2,
|
|
13
|
-
Ok = 3,
|
|
14
|
-
Closed = 4,
|
|
15
|
-
Notice = 5,
|
|
16
|
-
Auth = 6
|
|
17
|
-
}
|
|
18
|
-
export interface RelayConfig {
|
|
19
|
-
connectTimeoutMs?: number;
|
|
20
|
-
writeTimeoutMs?: number;
|
|
21
|
-
retryBaseMs?: number;
|
|
22
|
-
retryMaxMs?: number;
|
|
23
|
-
retryMultiplier?: number;
|
|
24
|
-
retryJitter?: number;
|
|
25
|
-
retry?: {
|
|
26
|
-
baseMs: number;
|
|
27
|
-
maxMs: number;
|
|
28
|
-
multiplier: number;
|
|
29
|
-
jitter: number;
|
|
30
|
-
};
|
|
31
|
-
idleTimeoutMs?: number;
|
|
32
|
-
}
|
|
33
|
-
export interface RelayStats {
|
|
34
|
-
sent: number;
|
|
35
|
-
received: number;
|
|
36
|
-
reconnects: number;
|
|
37
|
-
lastActivity: number;
|
|
38
|
-
uptime?: number;
|
|
39
|
-
dropped: number;
|
|
40
|
-
}
|
|
41
|
-
export interface InboundEnvelope {
|
|
42
|
-
relays: string[];
|
|
43
|
-
frames: string[];
|
|
44
|
-
}
|
|
45
|
-
export interface WorkerLine {
|
|
46
|
-
relay: {
|
|
47
|
-
url: string;
|
|
48
|
-
};
|
|
49
|
-
kind: number;
|
|
50
|
-
sub_id?: string;
|
|
51
|
-
raw: Uint8Array;
|
|
52
|
-
}
|
|
53
|
-
export type FrameCallback = (frame: string) => void;
|
|
54
|
-
export type MessageHandler = (url: string, kind: MsgKind, subId: string | null, rawText: string) => void;
|
|
55
|
-
//# sourceMappingURL=types.d.ts.map
|
package/dist/ws/types.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ws/types.ts"],"names":[],"mappings":"AAAA,oBAAY,gBAAgB;IAC3B,IAAI,SAAS;IACb,UAAU,eAAe;IACzB,KAAK,UAAU;IACf,OAAO,YAAY;IACnB,MAAM,WAAW;IACjB,KAAK,UAAU;CACf;AAED,oBAAY,OAAO;IAClB,OAAO,IAAI;IACX,KAAK,IAAI;IACT,IAAI,IAAI;IACR,EAAE,IAAI;IACN,MAAM,IAAI;IACV,MAAM,IAAI;IACV,IAAI,IAAI;CACR;AAKD,MAAM,WAAW,WAAW;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC/B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IAC1B,KAAK,EAAE;QACN,GAAG,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,UAAU,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AACpD,MAAM,MAAM,cAAc,GAAG,CAC5B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,MAAM,GAAG,IAAI,EACpB,OAAO,EAAE,MAAM,KACX,IAAI,CAAC"}
|