{"version":3,"sources":["../src/index.ts","../src/seal.ts"],"sourcesContent":["/// SPDX-License-Identifier: GPL-3.0-or-later\n/// SPDX-FileCopyrightText: Copyright © 2016-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport {\n    AnyValue,\n    Assertion,\n    Bytes,\n    Dataspace,\n    IdentitySet,\n    Record,\n    Ref,\n    Relay,\n    Schemas,\n    Supervisor,\n    Turn,\n    assertionFacetObserver,\n    canonicalEncode,\n    decode,\n    fromJS,\n    isEmbedded,\n    parse,\n    stringify,\n    underlying,\n    Embeddable,\n    SaltyCrypto,\n    Question,\n    Answer,\n    Result,\n    resultOk,\n    resultError,\n} from \"@syndicate-lang/core\";\nimport G = Schemas.gatekeeper;\nimport S = Schemas.sturdy;\nimport N = Schemas.noise;\nimport T = Schemas.transportAddress;\nimport E = Schemas.stdenv;\nimport R = Schemas.rpc;\n\nexport * from './seal.js';\n\ntype TransportState = {\n    addr: AnyValue,\n    control: Ref,\n    peer: Ref,\n};\n\nexport type Options = boolean /* debug */ | Partial<IOptions>;\nexport type IOptions = {\n    debug: boolean;\n    inboundHook: (url: string, data: Uint8Array) => Uint8Array;\n    outboundHook: (url: string, data: Uint8Array) => Uint8Array;\n};\n\nexport function boot(ds = Dataspace.local, options0: Options = {}, WebSocketConstructor?: typeof WebSocket) {\n    const options1: Partial<IOptions> = typeof options0 === 'boolean'\n        ? { debug: options0 }\n        : Object.assign({}, options0);\n    const options: IOptions = {\n        debug: options1.debug ?? false,\n        inboundHook: options1.inboundHook ?? ((_, data) => data),\n        outboundHook: options1.outboundHook ?? ((_, data) => data),\n    };\n\n    spawn named 'transportConnector' {\n        at ds {\n            during Question(G.ConnectTransport(T.WebSocket($url: string))) => {\n                let counter = 0;\n                Supervisor.always(() => ['wsTransport', fromJS(url), counter++], () => {\n                    console.log('connecting', url, counter);\n                    connectWs(url);\n                });\n            }\n        }\n    }\n\n    function connectWs(url: string) {\n        const facet = Turn.activeFacet;\n        facet.preventInertCheck();\n        const controlEntity = {\n            message(a0: Assertion): void {\n                const a = G.toTransportControl(a0);\n                if (!a) return;\n                stop facet; // ForceDisconnect\n            },\n        };\n        let final = false;\n        function succeed(ws: WebSocket) {\n            if (final) return;\n            final = true;\n            console.log('opened', url);\n            on stop {\n                console.log('closing', url);\n                ws.close();\n            }\n            ws.onclose = () => facet.turn(() => { stop facet; });\n            ws.onerror = () => facet.turn(() => Turn.active.crash(new Error(\"WebSocket error\")));\n            const relay = new Relay.Relay({\n                debug: options.debug,\n                trustPeer: true,\n                packetWriter: bs => ws.send(options.outboundHook(url, bs)),\n                setup: r => ws.onmessage = e => r.accept(options.inboundHook(url, new Uint8Array(e.data))),\n                initialOid: 0,\n            });\n            console.log('succeed', url);\n            at ds {\n                assert Answer(G.ConnectTransport(fromJS<Ref>(T.WebSocket(url))), resultOk(G.ConnectedTransport({\n                    \"addr\": fromJS<Ref>(T.WebSocket(url)),\n                    \"control\": create controlEntity,\n                    \"responderSession\": relay.peer!,\n                })));\n            }\n        }\n        function fail(detail: Assertion) {\n            if (final) return;\n            final = true;\n            console.log('fail', url, detail);\n            at ds {\n                assert Answer(G.ConnectTransport(fromJS<Ref>(T.WebSocket(url))), resultError(detail));\n            }\n            setTimeout(() => facet.turn(() => { stop facet; }), 10000);\n        }\n        try {\n            const ws = new (WebSocketConstructor ?? WebSocket)(url);\n            ws.binaryType = 'arraybuffer';\n            ws.onopen = () => facet.turn(() => succeed(ws));\n            ws.onclose = () => facet.turn(() => fail(Symbol.for('closed')));\n            ws.onerror = () => facet.turn(() => fail(Symbol.for('websocket-error-event')));\n        } catch (e) {\n            console.error('Failed opening websocket', url, e);\n            fail(Symbol.for('websocket-exception'));\n        }\n    }\n\n    spawn named 'pathResolver' {\n        at ds {\n            during Question(G.ResolvePath($route0)) => {\n                const route = G.toRoute(route0);\n                if (!route) return;\n                field candidates: IdentitySet<TransportState> = new IdentitySet();\n                route.transports.forEach(addr => {\n                    console.log('tracking', addr);\n                    assert Question(G.ConnectTransport(addr));\n                    during Answer(G.ConnectTransport(addr), resultOk(G.ConnectedTransport({\n                        \"addr\": addr,\n                        \"control\": $control: Ref,\n                        \"responderSession\": $peer: Ref,\n                    }))) => {\n                        const entry = { addr, control, peer };\n                        candidates.value.add(entry);\n                        candidates.changed();\n                        on stop {\n                            candidates.value.delete(entry);\n                            candidates.changed();\n                        }\n                    }\n                });\n                field best: TransportState | null = null;\n                field rootPeer: Ref | null = null;\n                dataflow {\n                    best.suppressCycleWarning();\n                    best.value = null;\n                    for (const c of candidates.value) {\n                        best.value = c;\n                        break;\n                    }\n                    rootPeer.value = best.value?.peer ?? null;\n                }\n                resolve(() => ({ ref: rootPeer.value, error: false }), route.pathSteps, (r) => {\n                    console.log('leaf', best.value?.addr);\n                    assert Answer(G.ResolvePath(route), resultOk(G.ResolvedPath({\n                        \"addr\": best.value!.addr,\n                        \"control\": best.value!.control,\n                        \"responderSession\": r().ref!,\n                    }))) when (r().ref);\n                    assert Answer(G.ResolvePath(route), resultError(r().error)) when (!r().ref);\n                });\n            }\n        }\n    }\n\n    function resolve(\n        e: () => { ref: Ref | null, error: AnyValue }, // gross\n        steps: G.PathStep[],\n        k: (r: () => { ref: Ref | null, error: AnyValue }) => void,\n    ) {\n        if (steps.length === 0) {\n            k(e);\n        } else {\n            const [step, ...more] = steps;\n            at ds {\n                const q = () => G.ResolvePathStep({ origin: (e().ref!), pathStep: step });\n                assert Question(q()) when (e().ref);\n                during Answer(((q)()) /* omg */, $a: Result) when (e().ref) => {\n                    switch (a._variant) {\n                        case \"Ok\":\n                            // Include a call to our e() in the e we pass in to the recursive\n                            // call to resolve(). e() returning non-null is a precondition for\n                            // the call; if that precondition ever changes, we want to NOT\n                            // reevaluate the body of any assertion, so we should test it\n                            // before we do.\n                            //\n                            // Concrete example of a problem that occurs if the `e() && ...`\n                            // isn't there: connected all OK, the websocket disconnects,\n                            // best.value gets set null, the previous assertion of ResolvePath\n                            // at the end of the chain gets reevaluated because\n                            // resolved.responderSession is still non-null, it includes\n                            // best.value!, which is now null, boom. With the call to e(), we\n                            // short circuit and so the assertion becomes null at that point.\n                            //\n                            const nextRef = G.toResolvedPathStep(a.value.value);\n                            const nextResult = (nextRef === void 0)\n                                ? { ref: null, error: 'bad ResolvedPathStep' }\n                                : { ref: nextRef, error: false };\n                            const nextE = () => {\n                                const result = e();\n                                return result.ref ? nextResult : result;\n                            };\n                            resolve(nextE, more, k);\n                            break;\n                        case \"Error\":\n                            k(() => ({ ref: null, error: a.value.error }));\n                            break;\n                    }\n                }\n            }\n        }\n    }\n\n    spawn named 'noiseStep' {\n        at ds {\n            during Question($q(G.ResolvePathStep({\n                origin: $origin: Ref,\n                pathStep: G.PathStep({\n                    stepType: N.$noise,\n                    detail: $spec: N.NoisePathStepDetail,\n                }),\n            }))) => {\n                const algorithms = SaltyCrypto.Noise_25519_ChaChaPoly_BLAKE2s;\n                const protocol =\n                    spec.protocol._variant === \"present\" ? spec.protocol.protocol :\n                    spec.protocol._variant === \"absent\" ? N.fromDefaultProtocol(N.DefaultProtocol()) as string :\n                    (() => { throw new Error(\"Invalid noise protocol name\"); })();\n\n                const patternName0 = SaltyCrypto.matchPattern(algorithms, protocol);\n                if (patternName0 === null) throw new Error(\"Unsupported protocol \" + protocol);\n                const patternName = patternName0;\n\n                const preSharedKeys =\n                    spec.preSharedKeys._variant === \"present\" ? spec.preSharedKeys.preSharedKeys :\n                    spec.preSharedKeys._variant === \"absent\" ? [] :\n                    (() => { throw new Error(\"Invalid pre-shared keys\"); })();\n                const prologue = underlying(canonicalEncode(spec.service));\n\n                react {\n                    at origin {\n                        assert G.Resolve({\n                            \"step\": G.Step({\n                                \"stepType\": N.$noise,\n                                \"detail\": fromJS(N.ServiceSelector(spec.service)),\n                            }),\n                            \"observer\": create assertionFacetObserver(e => {\n                                const response = R.toResult(e);\n                                if (!response) return;\n                                switch (response._variant) {\n                                    case \"Ok\":\n                                        if (isEmbedded(response.value.value)) {\n                                            runSession(response.value.value);\n                                        }\n                                        break;\n                                    case \"Error\":\n                                        stop {\n                                            at ds {\n                                                assert Answer(q, response);\n                                            }\n                                        }\n                                }\n                            }),\n                        });\n                    }\n                }\n\n                function runSession(responderSession: Ref) {\n                    const H = new SaltyCrypto.Handshake(\n                        algorithms,\n                        patternName,\n                        'initiator',\n                        {\n                            prologue,\n                            remoteStaticPublicKey: underlying(spec.key),\n                            preSharedKeys: preSharedKeys.map(underlying),\n                        });\n                    let transportState: SaltyCrypto.TransportState | null = null;\n                    let relay: Relay.Relay | null = null;\n\n                    const { packet, finished } = H.writeMessage(new Uint8Array());\n                    at responderSession {\n                        assert N.Initiator(create ({ message: handlePacket }));\n                        send message Bytes.from(packet);\n                    }\n                    maybeTransition(finished);\n\n                    function maybeTransition(s: SaltyCrypto.TransportState | null) {\n                        if (transportState !== null) {\n                            throw new Error(\"Unexpected double-transition to transport state\");\n                        }\n                        transportState = s;\n                        if (transportState !== null) {\n                            actuallyTransition();\n                        }\n                    }\n\n                    function actuallyTransition() {\n                        const noiseSessionFacet = Turn.activeFacet;\n                        const peer = new Relay.Relay({\n                            debug: options.debug,\n                            trustPeer: true,\n                            packetWriter: bs => noiseSessionFacet.turn(() => {\n                                const fragments = transportState!.send.encrypt_large(bs).map(Bytes.from);\n                                at responderSession! {\n                                    send message ((fragments.length === 1)\n                                        ? N.Packet.complete(fragments[0])\n                                        : N.Packet.fragmented(fragments));\n                                }\n                            }),\n                            setup: r => relay = r,\n                            initialOid: 0,\n                        }).peer!;\n                        assert Answer(q, resultOk(peer));\n                    }\n\n                    function handlePacket(body: Assertion) {\n                        const p = N.asPacket(body);\n                        if (transportState) {\n                            const packet = transportState.recv.decrypt_large(\n                                p._variant === 'complete'\n                                    ? [underlying(p.value)]\n                                    : p.value.map(underlying));\n                            relay!.accept(packet);\n                        } else {\n                            if (p._variant !== 'complete') {\n                                throw new Error(\"Unexpected fragmentation in handshake\");\n                            }\n                            const { message, finished } = H!.readMessage(underlying(p.value));\n                            if (message.byteLength !== 0) {\n                                throw new Error(\"Unexpected payload during handshake\");\n                            }\n                            maybeTransition(finished);\n                        }\n                    }\n                }\n            }\n        }\n    }\n\n    spawn named 'sturdyRefStep' {\n        at ds {\n            during Question($q(G.ResolvePathStep({\n                origin: $origin: Ref,\n                pathStep: G.PathStep({\n                    stepType: S.$ref,\n                    detail: $parameters: S.SturdyPathStepDetail,\n                }),\n            }))) => {\n                at origin {\n                    assert G.Resolve({\n                        \"step\": G.Step({\n                            \"stepType\": S.$ref,\n                            \"detail\": fromJS(parameters),\n                        }),\n                        \"observer\": create assertionFacetObserver(e => {\n                            const response = R.toResult(e);\n                            if (!response) return;\n                            at ds { assert Answer(q, response); }\n                        }),\n                    });\n                }\n            }\n        }\n    }\n}\n\nexport function unpackStandardRoute<R extends Embeddable>(route: E.StandardRoute<R>): G.Route<R> {\n    if (route._variant === 'general') return route.value;\n\n    const { transports, key, service, sig, oid } = route;\n\n    const protocol = N.NoiseProtocol.absent<R>();\n    const preSharedKeys = N.NoisePreSharedKeys.absent<R>();\n    const caveats = route.caveats.length\n        ? S.CaveatsField.present<R>(route.caveats)\n        : S.CaveatsField.absent<R>();\n\n    return G.Route({\n        transports: transports.map(t => {\n            switch (t._variant) {\n                case 'wsUrl': return T.fromWebSocket(T.WebSocket(t.value));\n                default: {\n                    const x = stringify(E.fromStandardTransport(t));\n                    throw new Error(`Unsupported transport: ${x}`);\n                }\n            }\n        }),\n        pathSteps: [\n            G.PathStep({\n                stepType: N.$noise,\n                detail: N.fromNoiseSpec(N.NoiseSpec({ service, key, protocol, preSharedKeys })),\n            }),\n            G.PathStep({\n                stepType: S.$ref,\n                detail: S.fromParameters(S.Parameters({ oid, sig, caveats })),\n            }),\n        ],\n    });\n}\n\n// We support a couple of variations here: a string containing Base64-encoded machine-oriented\n// Preserves, or a string containing text-syntax Preserves.\nexport function decodeStandardRoute(s: string): G.Route | null {\n    try {\n        let routeValue: AnyValue;\n        // A valid text-syntax representation of a StandardRoute must start with\n        // either '[' or '<', neither of which is valid Base64.\n        if (s[0] === '[' || s[0] === '<') {\n            routeValue = parse(s);\n        } else {\n            routeValue = decode(Bytes.fromBase64(s.replace(/[^-_+/A-Za-z0-9=]/g, '')));\n        }\n        const route = E.toStandardRoute(routeValue);\n        return route === void 0 ? null : unpackStandardRoute(route);\n    } catch (e) {\n        console.error('Decoding standard route:', e);\n        return null;\n    }\n}\n\nexport type Routeish = G.Route | Record<AnyValue, Array<AnyValue>, Ref>;\n\nexport function contactRemote(\n    route: Routeish | (() => Routeish),\n    connectedFacet: (\n        remoteObject: Ref,\n        controlObject: Ref,\n        transportAddr: AnyValue,\n    ) => void,\n    ds = Dataspace.local,\n) {\n    const routeFn = typeof route === 'function' ? route : () => route;\n    field routeField: G.Route = null!;\n    dataflow {\n        const r = routeFn();\n        routeField.value = 'pathSteps' in r ? r : G.asRoute(r);\n    }\n    at ds {\n        assert Question(G.ResolvePath(routeField.value));\n        during Answer(G.ResolvePath(routeField.value), resultOk(G.ResolvedPath({\n            \"addr\": $addr,\n            \"control\": $control: Ref,\n            \"responderSession\": $resolved: Ref,\n        }))) => {\n            connectedFacet(resolved, control, addr);\n        }\n    }\n}\n","/// SPDX-License-Identifier: GPL-3.0-or-later\n/// SPDX-FileCopyrightText: Copyright © 2024-2025 Tony Garnock-Jones <tonyg@leastfixedpoint.com>\n\nimport { Bytes, Value, encode, decode, isEmbedded, isSequence } from \"@preserves/core\";\nimport { SaltyCrypto, Ref } from \"@syndicate-lang/core\";\n\nconst aead = SaltyCrypto.ChaCha20Poly1305_RFC8439;\n\nexport type Sealed = [Bytes, number, number, number];\n\nexport function makeSeal() {\n    const key = new DataView(SaltyCrypto.randomBytes(aead.KEYBYTES).buffer);\n    const n = new SaltyCrypto.Nonce();\n    return {\n        seal(v: Value<Ref>): Promise<Sealed> {\n            return new Promise(k => {\n                at this.sealer {\n                    send message [v, create ({\n                        message(reply) { k(reply as Sealed); }\n                    })];\n                }\n            });\n        },\n\n        unseal(sealed: Sealed): Promise<{ ok: true, value: Value } | { ok: false }> {\n            return new Promise(k => {\n                at this.unsealer {\n                    send message [sealed, create ({\n                        message(reply) { k(reply as any); }\n                    })];\n                }\n            });\n        },\n\n        sealer: create ({\n            message(req) {\n                if (isSequence(req) && req.length === 2 && isEmbedded(req[1])) {\n                    try {\n                        const [term, k] = req;\n                        const m = encode(term);\n                        const c = aead.encrypt(m._view, key, n);\n                        at k { send message [Bytes.from(c), n.lo, n.hi, n.extra]; }\n                        n.increment();\n                    } catch (_e) { console.error('Failed sealing: ' + _e); }\n                }\n            }\n        }),\n\n        unsealer: create ({\n            message(req) {\n                if (\n                    isSequence(req) && req.length === 2 && isEmbedded(req[1]) &&\n                        isSequence(req[0]) && req[0].length === 4 &&\n                        Bytes.isBytes(req[0][0]) &&\n                        typeof req[0][1] === 'number' &&\n                        typeof req[0][2] === 'number' &&\n                        typeof req[0][3] === 'number'\n                ) {\n                    const [[c, lo, hi, extra], k] = req;\n                    try {\n                        const n = new SaltyCrypto.Nonce(lo, hi, extra);\n                        const m = aead.decrypt(c._view, key, n);\n                        at k { send message { ok: true, value: decode(Bytes.from(m)) }; }\n                    } catch (e) {\n                        at k { send message { ok: false }; }\n                    }\n                }\n            },\n        }),\n    };\n}\n"],"mappings":"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","names":["__SYNDICATE__","Bytes","Dataspace","IdentitySet","Ref","Relay","Schemas","Supervisor","Turn","assertionFacetObserver","canonicalEncode","decode","fromJS","isEmbedded","parse","stringify","underlying","SaltyCrypto","Question","Answer","Result","resultOk","resultError","__SYNDICATE__","Bytes","encode","decode","isEmbedded","isSequence","SaltyCrypto","aead","makeSeal","key","n","v","k","currentSyndicateTarget","reply","sealed","req","term","m","c","_e","lo","hi","extra","e","G","Schemas","S","N","T","E","R","boot","ds","Dataspace","options0","WebSocketConstructor","_a","_b","_c","options1","options","data","currentSyndicateFacet","currentSyndicateTarget","Question","__vs","url","counter","Supervisor","fromJS","connectWs","facet","Turn","controlEntity","a0","final","succeed","ws","relay","Relay","bs","r","e","Answer","resultOk","fail","detail","resultError","route0","route","candidates","IdentitySet","addr","__v_0","Ref","control","__v_1","entry","best","rootPeer","c","resolve","steps","k","step","more","q","Result","a","nextRef","nextResult","result","runSession","responderSession","H","SaltyCrypto","algorithms","patternName","prologue","underlying","spec","preSharedKeys","transportState","packet","finished","handlePacket","Bytes","maybeTransition","s","actuallyTransition","noiseSessionFacet","peer","fragments","body","p","message","origin","__v_2","protocol","patternName0","canonicalEncode","assertionFacetObserver","response","isEmbedded","parameters","unpackStandardRoute","transports","key","service","sig","oid","caveats","t","x","stringify","decodeStandardRoute","routeValue","parse","decode","contactRemote","connectedFacet","routeFn","routeField"]}