{"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":["src_exports","__export","boot","contactRemote","decodeStandardRoute","makeSeal","unpackStandardRoute","__toCommonJS","__SYNDICATE__","import_core","__SYNDICATE__","import_core","aead","makeSeal","key","n","v","k","currentSyndicateTarget","reply","sealed","req","term","m","c","_e","lo","hi","extra","e","G","S","N","T","E","R","boot","ds","options0","WebSocketConstructor","_a","_b","_c","options1","options","_","data","currentSyndicateFacet","currentSyndicateTarget","__vs","url","counter","connectWs","facet","controlEntity","a0","final","succeed","ws","relay","bs","e","fail","detail","route0","route","candidates","addr","__v_0","control","__v_1","entry","best","rootPeer","c","resolve","steps","k","step","more","q","a","nextRef","nextResult","result","runSession","responderSession","algorithms","patternName","prologue","spec","preSharedKeys","transportState","packet","finished","handlePacket","maybeTransition","s","actuallyTransition","noiseSessionFacet","peer","fragments","r","body","p","message","origin","__v_2","protocol","patternName0","response","parameters","unpackStandardRoute","transports","key","service","sig","oid","caveats","t","x","decodeStandardRoute","routeValue","contactRemote","connectedFacet","routeFn","routeField"]}