@rayfold/server 0.1.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/LICENSE +202 -0
- package/NOTICE +10 -0
- package/README.md +70 -0
- package/args.d.ts +15 -0
- package/args.js +226 -0
- package/args.js.map +1 -0
- package/batch.d.ts +54 -0
- package/batch.js +483 -0
- package/batch.js.map +1 -0
- package/bindings.d.ts +37 -0
- package/bindings.js +284 -0
- package/bindings.js.map +1 -0
- package/capability-scope.d.ts +8 -0
- package/capability-scope.js +19 -0
- package/capability-scope.js.map +1 -0
- package/capability.d.ts +56 -0
- package/capability.js +112 -0
- package/capability.js.map +1 -0
- package/context.d.ts +74 -0
- package/context.js +109 -0
- package/context.js.map +1 -0
- package/core.d.ts +18 -0
- package/core.js +18 -0
- package/core.js.map +1 -0
- package/cost.d.ts +15 -0
- package/cost.js +110 -0
- package/cost.js.map +1 -0
- package/executor.d.ts +89 -0
- package/executor.js +695 -0
- package/executor.js.map +1 -0
- package/guard.d.ts +33 -0
- package/guard.js +65 -0
- package/guard.js.map +1 -0
- package/http.d.ts +33 -0
- package/http.js +379 -0
- package/http.js.map +1 -0
- package/index.d.ts +8 -0
- package/index.js +9 -0
- package/index.js.map +1 -0
- package/instrumentation.d.ts +36 -0
- package/instrumentation.js +2 -0
- package/instrumentation.js.map +1 -0
- package/live.d.ts +37 -0
- package/live.js +240 -0
- package/live.js.map +1 -0
- package/mcp.d.ts +55 -0
- package/mcp.js +314 -0
- package/mcp.js.map +1 -0
- package/openapi.d.ts +11 -0
- package/openapi.js +124 -0
- package/openapi.js.map +1 -0
- package/package.json +53 -0
- package/policy.d.ts +17 -0
- package/policy.js +64 -0
- package/policy.js.map +1 -0
- package/protocol.d.ts +139 -0
- package/protocol.js +98 -0
- package/protocol.js.map +1 -0
- package/server.d.ts +58 -0
- package/server.js +79 -0
- package/server.js.map +1 -0
- package/usage.d.ts +39 -0
- package/usage.js +44 -0
- package/usage.js.map +1 -0
- package/views.d.ts +33 -0
- package/views.js +108 -0
- package/views.js.map +1 -0
- package/wiring.d.ts +16 -0
- package/wiring.js +57 -0
- package/wiring.js.map +1 -0
- package/ws.d.ts +21 -0
- package/ws.js +209 -0
- package/ws.js.map +1 -0
package/executor.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Operation execution and shape projection.\n * Level-wise batching: every field of every object at one nesting level is resolved with one loader\n * call, across lists and pages, so N+1 cannot occur (spec 01 §4 @load, spec 02).\n */\nimport type { Instrumentation } from \"./instrumentation.ts\";\nimport {\n annotation,\n base64urlBytes,\n baseName,\n fieldsOf,\n type Annotation,\n type FieldDef,\n type OpDef,\n type RayfoldSchemaIR,\n type Shape,\n type ShapeItem,\n type ShapeValue,\n type TypeDef,\n type TypeRef,\n} from \"@rayfold/schema\";\nimport { coerceArgs } from \"./args.ts\";\nimport type { RayfoldContext , PolicyHint } from \"./context.ts\";\nimport { decide, decisionError, pushableFilter } from \"./policy.ts\";\nimport { RayfoldError, VersionConflict, toWireError, type Frame, type PatchOp, type WireError } from \"./protocol.ts\";\nimport type { UsageSink } from \"./usage.ts\";\nimport { defaultShape, isScalarLike } from \"./views.ts\";\n\nexport type FieldResolver<P = unknown, A = Record<string, unknown>, R = unknown> = (\n parents: P[],\n args: A,\n ctx: RayfoldContext<never>,\n) => R[] | Promise<R[]>;\nexport type SingleFieldResolver<P = unknown, A = Record<string, unknown>, R = unknown> = (\n parent: P,\n args: A,\n ctx: RayfoldContext<never>,\n) => R | Promise<R>;\nexport type RootResolver<A = Record<string, unknown>, R = unknown> = (args: A, ctx: RayfoldContext<never>) => R | Promise<R>;\nexport type StreamResolver<A = Record<string, unknown>, R = unknown> = (args: A, ctx: RayfoldContext<never>) => AsyncIterable<R>;\n\nexport interface Resolvers {\n Query?: Record<string, RootResolver<never, unknown>>;\n Command?: Record<string, RootResolver<never, unknown>>;\n Stream?: Record<string, StreamResolver<never, unknown>>;\n /** Entity/object field loaders, batch by default: (parents[], args, ctx) => results[] */\n [typeName: string]: Record<string, FieldResolver<never, never, unknown> | SingleFieldResolver<never, never, unknown> | RootResolver<never, unknown> | StreamResolver<never, unknown>> | undefined;\n}\n\nconst COMMAND_RESULT = Symbol.for(\"rayfold.commandResult\");\nexport interface CommandResult<R = unknown> {\n [COMMAND_RESULT]: true;\n result: R;\n patch?: PatchOp[];\n emit?: Array<{ event: string; payload: Record<string, unknown> }>;\n}\n/** Wrap a command's return value to attach extra patches or events. */\nexport function ok<R>(result: R, extra: { patch?: PatchOp[]; emit?: Array<{ event: string; payload: Record<string, unknown> }> } = {}): CommandResult<R> {\n return { [COMMAND_RESULT]: true, result, ...extra };\n}\nfunction isCommandResult(v: unknown): v is CommandResult {\n return !!v && typeof v === \"object\" && (v as Record<symbol, unknown>)[COMMAND_RESULT] === true;\n}\n\nexport interface ExecutorOptions {\n maxDepth: number;\n maxFields: number;\n instrumentation?: Instrumentation;\n /** Records which members each client asked for (spec 11). Nothing is recorded without one. */\n usage?: UsageSink;\n}\n\ninterface Slot {\n value: Record<string, unknown>;\n out: Record<string, unknown>;\n path: string;\n /** Replaces this slot's output in its parent (used when a type-level policy denies it). */\n assign?: (v: unknown) => void;\n}\n\ninterface DeferredJob {\n slots: Slot[];\n type: TypeRef;\n shape: Shape;\n explicit: boolean;\n}\n\ninterface ProjectState {\n ctx: RayfoldContext;\n errors: WireError[];\n deferred: DeferredJob[];\n /** true when the caller sent a shape; default views never fail on policy */\n explicit: boolean;\n}\n\ntype Emit = (frame: Frame) => void;\n\n/** Marks output objects whose `$type` is the only way to know their type (union members). */\nconst UNION_MEMBER = Symbol.for(\"rayfold.unionMember\");\n\n/** Compact mode: drop `$type` except on union members; keep everything else identical. */\n/** Compact form of a query frame (`data` or `at`): `$type` stripped where the schema fixes it, `meta` dropped. */\nexport function compactQueryFrame(f: Frame): Frame {\n if (!(\"data\" in f)) return f;\n const { meta: _meta, ...rest } = f as Frame & { meta?: unknown };\n return { ...rest, data: stripTypes(f.data) } as Frame;\n}\n\nexport function stripTypes(v: unknown): unknown {\n if (v === null || typeof v !== \"object\") return v;\n if (Array.isArray(v)) return v.map(stripTypes);\n const o = v as Record<string, unknown>;\n const out: Record<string, unknown> = {};\n for (const [k, x] of Object.entries(o)) {\n if (k === \"$type\" && !(o as Record<symbol, unknown>)[UNION_MEMBER]) continue;\n out[k] = stripTypes(x);\n }\n return out;\n}\n\nexport class Executor {\n constructor(\n private readonly ir: RayfoldSchemaIR,\n private readonly resolvers: Resolvers,\n private readonly opts: ExecutorOptions,\n ) {}\n\n // ---------------------------------------------------------------- queries\n\n async runQuery(op: OpDef, args: Record<string, unknown>, shape: Shape, explicit: boolean, cost: number, ctx: RayfoldContext, emit: Emit): Promise<unknown> {\n this.checkOpPolicy(op, \"read\", args, ctx);\n ctx.policy = this.policyHint(op.returns);\n const fn = this.resolvers.Query?.[op.name];\n if (!fn) throw new RayfoldError(\"unimplemented\", `No resolver for query ${op.name}`);\n const raw = await fn(args as never, ctx as RayfoldContext<never>);\n const st: ProjectState = { ctx, errors: [], deferred: [], explicit };\n const data = await this.projectValue(raw, op.returns, shape, \"\", st);\n const frame: Frame = ctx.compact ? { id: ctx.opId, data: stripTypes(data) } : { id: ctx.opId, data, meta: { cost } };\n if (st.errors.length) frame.errors = st.errors;\n if (st.deferred.length === 0) frame.fin = true;\n emit(frame);\n await this.flushDeferred(st, emit);\n return data;\n }\n\n // --------------------------------------------------------------- commands\n\n async runCommand(\n op: OpDef,\n args: Record<string, unknown>,\n shape: Shape,\n explicit: boolean,\n cost: number,\n ctx: RayfoldContext,\n emit: Emit,\n ): Promise<{ result: unknown; frame: Frame; full: Frame; compact: Frame; patch: PatchOp[] }> {\n this.checkOpPolicy(op, \"write\", args, ctx);\n const fn = this.resolvers.Command?.[op.name];\n if (!fn) throw new RayfoldError(\"unimplemented\", `No resolver for command ${op.name}`);\n let raw: unknown;\n try {\n raw = await fn(args as never, ctx as RayfoldContext<never>);\n } catch (e) {\n if (e instanceof VersionConflict) throw await this.conflictWithCurrent(op, shape, ctx, e);\n throw this.checkDeclaredError(op, e);\n }\n const cr: CommandResult = isCommandResult(raw) ? raw : ok(raw);\n const st: ProjectState = { ctx, errors: [], deferred: [], explicit };\n const data = await this.projectValue(cr.result, op.returns, shape, \"\", st);\n // Deferred blocks make no sense on a command result: resolve them inline.\n while (st.deferred.length) {\n const job = st.deferred.shift()!;\n await this.projectMany(job.slots, job.type, job.shape, st);\n }\n const extra = cr.patch ?? [];\n const patch = derivePatches(data).concat(extra);\n if (!ctx.simulate) {\n for (const ev of cr.emit ?? []) {\n if (!op.emits.includes(ev.event)) throw new RayfoldError(\"internal\", `${op.name} emitted undeclared event ${ev.event}`);\n ctx.events.publish(ev.event, ev.payload);\n }\n }\n // Compact frames omit `set` patches that restate entities already in `ok`: the client derives them by normalizing `ok`.\n const full: Frame = { id: ctx.opId, ok: data, patch, meta: { cost }, fin: true };\n const compact: Frame = { id: ctx.opId, ok: stripTypes(data), patch: extra, fin: true };\n if (st.errors.length) full.errors = compact.errors = st.errors;\n const frame = ctx.compact ? compact : full;\n emit(frame);\n // Both forms are returned so an idempotent replay can answer in the form the retry asks for.\n return { result: data, frame, full, compact, patch };\n }\n\n /** VersionConflict -> failed_precondition carrying the current entity in the op's shape. */\n private async conflictWithCurrent(op: OpDef, shape: Shape, ctx: RayfoldContext, e: VersionConflict): Promise<RayfoldError> {\n let current: unknown = null;\n if (e.current !== null && e.current !== undefined) {\n const st: ProjectState = { ctx: { ...ctx, compact: false }, errors: [], deferred: [], explicit: false };\n current = await this.projectValue(e.current, { ...op.returns, nullable: true }, shape, \"\", st);\n while (st.deferred.length) {\n const job = st.deferred.shift()!;\n await this.projectMany(job.slots, job.type, job.shape, st);\n }\n }\n return new RayfoldError(\"failed_precondition\", e.message, { type: \"VersionConflict\", data: { key: e.key, expected: e.expected, actual: e.actual, current } });\n }\n\n private checkDeclaredError(op: OpDef, e: unknown): unknown {\n if (e instanceof RayfoldError && e.code === \"domain\") {\n if (!e.type || !op.throws.includes(e.type)) {\n return new RayfoldError(\"internal\", `${op.name} raised undeclared error ${e.type ?? \"?\"}`);\n }\n }\n return e;\n }\n\n // ---------------------------------------------------------------- streams\n\n async runStream(op: OpDef, args: Record<string, unknown>, shape: Shape, explicit: boolean, ctx: RayfoldContext, emit: Emit): Promise<void> {\n this.checkOpPolicy(op, \"read\", args, ctx);\n ctx.policy = this.policyHint(op.returns);\n const fn = this.resolvers.Stream?.[op.name];\n if (!fn) throw new RayfoldError(\"unimplemented\", `No resolver for stream ${op.name}`);\n const iterable = fn(args as never, ctx as RayfoldContext<never>);\n const iterator = iterable[Symbol.asyncIterator]();\n try {\n for (;;) {\n if (ctx.signal.aborted) break;\n const next = await raceAbort(iterator.next(), ctx.signal);\n if (next.done) break;\n const st: ProjectState = { ctx, errors: [], deferred: [], explicit };\n const item = await this.projectValue(next.value, op.returns, shape, \"\", st);\n while (st.deferred.length) {\n const job = st.deferred.shift()!;\n await this.projectMany(job.slots, job.type, job.shape, st);\n }\n const frame: Frame = { id: ctx.opId, item: ctx.compact ? stripTypes(item) : item };\n if (st.errors.length) (frame as { meta?: unknown }).meta = { errors: st.errors };\n emit(frame);\n }\n } finally {\n await iterator.return?.();\n }\n if (ctx.signal.aborted) throw ctx.signal.reason instanceof RayfoldError ? ctx.signal.reason : new RayfoldError(\"canceled\", \"Canceled\");\n emit({ id: ctx.opId, fin: true });\n }\n\n // ------------------------------------------------------------- projection\n\n /** The command's write policy, checked before an idempotent replay is served. */\n authorize(op: OpDef, args: Record<string, unknown>, ctx: RayfoldContext): void {\n this.checkOpPolicy(op, \"write\", args, ctx);\n }\n\n private checkOpPolicy(op: OpDef, mode: \"read\" | \"write\", args: Record<string, unknown>, ctx: RayfoldContext): void {\n const d = decide(op.annotations, mode, { viewer: ctx.viewer, args, this: null, now: ctx.now });\n if (d !== \"allow\") throw decisionError(d, `${op.name}()`);\n }\n\n private async flushDeferred(st: ProjectState, emit: Emit): Promise<void> {\n if (!st.deferred.length) return;\n while (st.deferred.length) {\n const job = st.deferred.shift()!;\n const fresh = job.slots.map((s) => ({ value: s.value, out: {}, path: s.path }));\n const sub: ProjectState = { ctx: st.ctx, errors: [], deferred: st.deferred, explicit: job.explicit };\n await this.projectMany(fresh, job.type, job.shape, sub);\n for (const s of fresh) {\n delete (s.out as Record<string, unknown>)[\"$type\"]; // the parent frame carried it; a delta never repeats it\n const f: Frame = { id: st.ctx.opId, at: s.path, data: st.ctx.compact ? stripTypes(s.out) : s.out };\n const errs = sub.errors.filter((e) => e.path?.startsWith(s.path));\n if (errs.length) f.errors = errs;\n emit(f);\n }\n }\n emit({ id: st.ctx.opId, fin: true });\n }\n\n /** Project one value (object, list, or null) of static type `t`. */\n private async projectValue(value: unknown, t: TypeRef, shape: Shape, path: string, st: ProjectState): Promise<unknown> {\n if (value === null || value === undefined) {\n if (!t.nullable) throw new RayfoldError(\"internal\", `Non-null ${path || \"result\"} resolved to null`, { path });\n return null;\n }\n if (t.kind === \"list\") {\n if (!Array.isArray(value)) throw new RayfoldError(\"internal\", `${path || \"result\"} should be a list`, { path });\n const outs: unknown[] = new Array(value.length);\n const slots: Slot[] = [];\n value.forEach((v, i) => {\n const p = path ? `${path}.${i}` : String(i);\n if (v === null || v === undefined) {\n if (!t.of.nullable) throw new RayfoldError(\"internal\", `Non-null ${p} resolved to null`, { path: p });\n outs[i] = null;\n } else if (t.of.kind === \"list\") {\n // nested lists: recurse per element (rare)\n slots.push({ value: { __nested: v }, out: {}, path: p });\n } else {\n const s: Slot = { value: v as Record<string, unknown>, out: {}, path: p, assign: (x) => (outs[i] = x) };\n slots.push(s);\n outs[i] = s.out;\n }\n });\n if (t.of.kind === \"list\") {\n for (const s of slots) outs[Number(s.path.split(\".\").pop())] = await this.projectValue(s.value[\"__nested\"], t.of, shape, s.path, st);\n } else if (isScalarLike(this.ir, t.of)) {\n return value.map((v) => (v === null ? null : serializeScalar(this.ir, t.of, v)));\n } else {\n await this.projectMany(slots, t.of, shape, st);\n }\n return outs;\n }\n if (isScalarLike(this.ir, t)) return serializeScalar(this.ir, t, value);\n if (typeof value !== \"object\") throw new RayfoldError(\"internal\", `${path || \"result\"} should be an object`, { path });\n const holder: { v: unknown } = { v: undefined };\n const slot: Slot = { value: value as Record<string, unknown>, out: {}, path, assign: (v) => (holder.v = v) };\n holder.v = slot.out;\n await this.projectMany([slot], t, shape, st);\n return holder.v;\n }\n\n /** Project all `slots` (objects of static type `t`) through `shape`, batching each field once. */\n private async projectMany(slots: Slot[], t: TypeRef, shape: Shape, st: ProjectState): Promise<void> {\n if (!slots.length) return;\n const def = this.ir.types[t.kind === \"named\" ? t.name : baseName(t)];\n if (!def) throw new RayfoldError(\"internal\", `Unknown type ${baseName(t)}`);\n\n if (def.kind === \"union\") {\n const groups = new Map<string, Slot[]>();\n for (const s of slots) {\n const tn = s.value[\"$type\"];\n if (typeof tn !== \"string\" || !def.members.includes(tn)) {\n throw new RayfoldError(\"internal\", `Union ${def.name} value at ${s.path} lacks a valid $type`, { path: s.path });\n }\n s.out[\"$type\"] = tn;\n Object.defineProperty(s.out, UNION_MEMBER, { value: true, enumerable: false });\n (groups.get(tn) ?? groups.set(tn, []).get(tn)!).push(s);\n }\n for (const [tn, group] of groups) {\n const memberShape: Shape = { items: [] };\n for (const it of shape.items) {\n if (it.kind === \"on\" && it.type === tn) memberShape.items.push(...it.shape.items);\n else if (it.kind === \"spread\") memberShape.items.push(it);\n else if (it.kind === \"field\") memberShape.items.push(it);\n }\n const ref: TypeRef = { kind: \"named\", name: tn, nullable: false };\n await this.projectMany(group, ref, memberShape.items.length ? memberShape : defaultShape(this.ir, ref), st);\n }\n return;\n }\n\n // An interface position (spec 01 §2.1): like a union, the concrete type is known only from the value's `$type`,\n // so the slots are grouped by it and projected as that entity. `...on Concrete` then selects fields the interface\n // does not declare, and `$type` survives compact mode because the schema does not fix it here.\n if (def.kind === \"object\" && def.interface) {\n const members = implementorsOf(this.ir, def.name);\n const groups = new Map<string, Slot[]>();\n for (const s of slots) {\n const tn = s.value[\"$type\"];\n if (typeof tn !== \"string\" || !members.has(tn)) {\n throw new RayfoldError(\"internal\", `Interface ${def.name} value at ${s.path} lacks a valid $type`, { path: s.path });\n }\n s.out[\"$type\"] = tn;\n Object.defineProperty(s.out, UNION_MEMBER, { value: true, enumerable: false });\n (groups.get(tn) ?? groups.set(tn, []).get(tn)!).push(s);\n }\n for (const [tn, group] of groups) await this.projectMany(group, { kind: \"named\", name: tn, nullable: false }, shape, st);\n return;\n }\n if (!(\"fields\" in def)) throw new RayfoldError(\"internal\", `Cannot project ${def.kind} ${def.name}`);\n\n // Type-level read policy (spec 06 §2 step 2).\n let allowed = slots;\n if (def.annotations.length) {\n allowed = [];\n for (const s of slots) {\n const d = decide(def.annotations, \"read\", { viewer: st.ctx.viewer, args: {}, this: s.value, now: st.ctx.now });\n if (d === \"allow\") allowed.push(s);\n // At a nullable position a denied entity reads as null even for an explicit shape, so the answer never tells\n // \"exists but forbidden\" apart from \"does not exist\" (spec 06 section 2, spec 12).\n else if (st.explicit && !t.nullable) throw decisionError(d, `${def.name} at ${s.path || \"result\"}`).withPath(s.path);\n else markNull(s);\n }\n }\n if (def.kind === \"entity\") for (const s of allowed) s.out[\"$type\"] = def.name;\n\n const fields = fieldsOf(this.ir, t) ?? def.fields;\n const { groups, defers } = this.flatten(shape, def, fields, st);\n // What this client asked for, for `rayfold check --unused` (spec 11). Only the member's path is kept.\n if (this.opts.usage) {\n const client = String(st.ctx.meta.client ?? \"\");\n const at = st.ctx.now();\n for (const g of groups) this.opts.usage.record({ op: st.ctx.opName, path: `${def.name}.${g.field.name}`, client }, at);\n }\n\n // Phase 1: resolve every field group at this level (batched), collecting children.\n const children: Array<{ slots: Slot[]; type: TypeRef; shape: Shape; explicit: boolean }> = [];\n for (const g of groups) {\n const field = g.field;\n const lazy = annotation(field, \"lazy\") !== undefined && !g.eager;\n if (lazy) {\n st.deferred.push({ slots: allowed, type: t, shape: { items: [{ ...g.item, eager: true }] }, explicit: st.explicit });\n continue;\n }\n let targets = allowed;\n if (field.annotations.length) {\n targets = [];\n for (const s of allowed) {\n const d = decide(field.annotations, \"read\", { viewer: st.ctx.viewer, args: g.args, this: s.value, now: st.ctx.now });\n if (d === \"allow\") targets.push(s);\n else if (st.explicit && !g.partial) throw decisionError(d, `${def.name}.${field.name}`).withPath(join(s.path, g.alias));\n else if (st.explicit) {\n st.errors.push({ ...decisionError(d, `${def.name}.${field.name}`).toWire(), path: join(s.path, g.alias) });\n s.out[g.alias] = null;\n }\n }\n }\n if (!targets.length) continue;\n let values: unknown[];\n try {\n values = await this.loadField(def, field, targets, g.args, st.ctx);\n } catch (e) {\n if (g.partial) {\n const w = toWireError(e);\n for (const s of targets) {\n st.errors.push({ ...w, path: join(s.path, g.alias) });\n s.out[g.alias] = null;\n }\n continue;\n }\n throw e instanceof RayfoldError ? e.withPath(join(targets[0]!.path, g.alias)) : e;\n }\n if (!Array.isArray(values) || values.length !== targets.length) {\n throw new RayfoldError(\"internal\", `Loader for ${def.name}.${field.name} returned ${Array.isArray(values) ? values.length : \"non-array\"} for ${targets.length} parents`);\n }\n const scalar = isScalarLike(this.ir, field.type);\n const childSlots: Slot[] = [];\n targets.forEach((s, i) => {\n const v = values[i];\n const p = join(s.path, g.alias);\n if (v === null || v === undefined) {\n if (!field.type.nullable) {\n const err = new RayfoldError(\"internal\", `Non-null field ${def.name}.${field.name} resolved to null`, { path: p });\n if (!g.partial) throw err;\n st.errors.push(err.toWire());\n }\n s.out[g.alias] = null;\n return;\n }\n if (scalar) {\n s.out[g.alias] = field.type.kind === \"list\" ? (v as unknown[]).map((x) => (x === null ? null : serializeScalar(this.ir, field.type, x))) : serializeScalar(this.ir, field.type, v);\n return;\n }\n if (field.type.kind === \"list\") {\n if (!Array.isArray(v)) throw new RayfoldError(\"internal\", `${p} should be a list`, { path: p });\n const arr: unknown[] = new Array(v.length);\n v.forEach((el, j) => {\n if (el === null || el === undefined) {\n if (!(field.type as { of: TypeRef }).of.nullable) throw new RayfoldError(\"internal\", `Non-null ${p}.${j} resolved to null`, { path: `${p}.${j}` });\n arr[j] = null;\n } else {\n const cs: Slot = { value: el as Record<string, unknown>, out: {}, path: `${p}.${j}`, assign: (x) => (arr[j] = x) };\n childSlots.push(cs);\n arr[j] = cs.out;\n }\n });\n s.out[g.alias] = arr;\n } else {\n const cs: Slot = { value: v as Record<string, unknown>, out: {}, path: p, assign: (x) => (s.out[g.alias] = x) };\n childSlots.push(cs);\n s.out[g.alias] = cs.out;\n }\n });\n if (childSlots.length) {\n const childType: TypeRef = field.type.kind === \"list\" ? field.type.of : field.type;\n const sub = g.shape ?? defaultShape(this.ir, childType);\n children.push({ slots: childSlots, type: childType, shape: sub, explicit: g.shape ? st.explicit : false });\n }\n }\n\n // Phase 2: recurse one level deeper, one call per field group (keeps batching across parents).\n for (const c of children) {\n if (c.explicit === st.explicit) await this.projectMany(c.slots, c.type, c.shape, st);\n else await this.projectMany(c.slots, c.type, c.shape, { ...st, explicit: c.explicit });\n }\n\n // Deferred blocks run after the enclosing frame is emitted.\n for (const d of defers) st.deferred.push({ slots: allowed, type: t, shape: d.shape, explicit: st.explicit });\n }\n\n /** Resolve field values for all targets with one loader call (or property access). */\n private async loadField(def: TypeDef, field: FieldDef, targets: Slot[], args: Record<string, unknown>, ctx: RayfoldContext): Promise<unknown[]> {\n const resolver = this.resolvers[def.name]?.[field.name];\n if (!resolver) {\n if (field.args.length) throw new RayfoldError(\"unimplemented\", `No loader for ${def.name}.${field.name}`);\n return targets.map((s) => s.value[field.name]);\n }\n // the loader gets the read policy of what it loads, so it can filter at the source (spec 06 section 4)\n const hinted: RayfoldContext = { ...ctx, policy: this.policyHint(field.type) };\n const load = annotation(field, \"load\");\n const single = load && typeof load.args[\"value\"] === \"object\" && load.args[\"value\"] && \"$ident\" in load.args[\"value\"] && (load.args[\"value\"] as { $ident: string }).$ident === \"single\";\n // One load per (field, arguments, entity) for the whole batch: an entity another op already loaded, or is\n // loading right now, or that appears twice at this level, is not loaded again. What is remembered is the load\n // in flight, not its result, so ops running at the same time share it. Only entities take part: they have identity.\n const memo = ctx.batch as Map<string, Promise<unknown>>;\n const prefix = `${def.name}.${field.name}|${JSON.stringify(args)}`;\n const keys = targets.map((s): string | null => {\n if (def.kind !== \"entity\") return null;\n const id = s.value[\"id\"];\n return typeof id === \"string\" || typeof id === \"number\" ? `${prefix}|${id}` : null;\n });\n const waiting: Array<Promise<unknown>> = [];\n const need: Slot[] = [];\n const settlers: Array<{ resolve: (v: unknown) => void; reject: (e: unknown) => void }> = [];\n const mine = new Map<string, number>();\n targets.forEach((s, i) => {\n const k = keys[i]!;\n const already = k === null ? undefined : memo.get(k);\n if (already) {\n waiting.push(already);\n return;\n }\n if (k !== null && mine.has(k)) {\n waiting.push(waiting[mine.get(k)!]!);\n return;\n }\n let settle!: { resolve: (v: unknown) => void; reject: (e: unknown) => void };\n const pending = new Promise<unknown>((resolve, reject) => (settle = { resolve, reject }));\n // The group's failure is reported by the throw below; this keeps a shared load that nobody awaited quiet.\n pending.catch(() => {});\n waiting.push(pending);\n settlers.push(settle);\n if (k !== null) {\n memo.set(k, pending);\n mine.set(k, i);\n }\n need.push(s);\n });\n\n if (need.length) {\n const call = async (): Promise<unknown[]> => {\n if (single) {\n const fn = resolver as SingleFieldResolver<never, never, unknown>;\n return Promise.all(need.map((s) => fn(s.value as never, args as never, hinted as RayfoldContext<never>)));\n }\n const fn = resolver as FieldResolver<never, never, unknown>;\n return fn(need.map((s) => s.value) as never[], args as never, hinted as RayfoldContext<never>);\n };\n const hook = this.opts.instrumentation?.loader;\n try {\n const loaded = await (hook ? hook({ type: def.name, field: field.name, parents: need.length }, call) : call());\n if (!Array.isArray(loaded) || loaded.length !== need.length) {\n throw new RayfoldError(\"internal\", `Loader for ${def.name}.${field.name} returned ${Array.isArray(loaded) ? loaded.length : \"a non-list\"} for ${need.length} parents`);\n }\n loaded.forEach((v, n) => settlers[n]!.resolve(v));\n } catch (e) {\n for (const k of mine.keys()) memo.delete(k); // a load that failed is not remembered\n for (const s of settlers) s.reject(e);\n throw e;\n }\n }\n return Promise.all(waiting);\n }\n\n /** The pushable read policy of the entity a resolver loads, handed to it as ctx.policy.filter (spec 06 section 4). */\n private policyHint(t: TypeRef): PolicyHint {\n const def = this.ir.types[baseName(t)];\n const filter = def && \"fields\" in def ? pushableFilter(def.annotations) : undefined;\n return filter ? { filter } : {};\n }\n\n /** Expand spreads/type conditions and group field selections by (name, args). */\n private flatten(\n shape: Shape,\n def: TypeDef,\n fields: FieldDef[],\n st: ProjectState,\n ): { groups: FieldGroup[]; defers: Array<{ shape: Shape }> } {\n const groups: FieldGroup[] = [];\n const defers: Array<{ shape: Shape }> = [];\n const byAlias = new Map<string, FieldGroup>();\n const visit = (items: ShapeItem[], seen: Set<string>): void => {\n for (const it of items) {\n switch (it.kind) {\n case \"field\": {\n const f = fields.find((x) => x.name === it.name);\n if (!f) throw new RayfoldError(\"invalid_argument\", `${def.name} has no field ${it.name}`);\n const alias = it.alias ?? it.name;\n const args = f.args.length ? coerceArgs(this.ir, f.args, substituteVars(it.args ?? {}, st.ctx), `${def.name}.${it.name}`) : {};\n const existing = byAlias.get(alias);\n if (existing) {\n if (existing.field !== f || JSON.stringify(existing.args) !== JSON.stringify(args)) {\n throw new RayfoldError(\"invalid_argument\", `Conflicting selections for ${alias} on ${def.name}`);\n }\n if (it.shape) existing.shape = existing.shape ? mergeShapes(existing.shape, it.shape) : it.shape;\n if (it.eager) existing.eager = true;\n if (it.partial) existing.partial = true;\n continue;\n }\n const g: FieldGroup = { field: f, alias, args, item: it, eager: !!it.eager, partial: !!it.partial || annotation(f, \"partial\") !== undefined };\n if (it.shape) g.shape = it.shape;\n byAlias.set(alias, g);\n groups.push(g);\n break;\n }\n case \"spread\": {\n const key = `${it.type}.${it.view}`;\n const v = this.ir.views[key];\n if (!v) throw new RayfoldError(\"invalid_argument\", `Unknown view ${key}`);\n if (seen.has(key)) throw new RayfoldError(\"invalid_argument\", `View cycle at ${key}`);\n visit(v.shape.items, new Set([...seen, key]));\n break;\n }\n case \"on\":\n if (it.type === def.name || (def.kind === \"entity\" && def.implements.includes(it.type))) visit(it.shape.items, seen);\n break;\n case \"defer\":\n defers.push({ shape: it.shape });\n break;\n }\n }\n };\n visit(shape.items, new Set());\n return { groups, defers };\n }\n}\n\ninterface FieldGroup {\n field: FieldDef;\n alias: string;\n args: Record<string, unknown>;\n item: Extract<ShapeItem, { kind: \"field\" }>;\n shape?: Shape;\n eager: boolean;\n partial: boolean;\n}\n\nfunction mergeShapes(a: Shape, b: Shape): Shape {\n return { items: [...a.items, ...b.items] };\n}\n\nfunction join(path: string, name: string): string {\n return path ? `${path}.${name}` : name;\n}\n\n/** Entities that implement an interface, memoised per schema. */\nfunction implementorsOf(ir: RayfoldSchemaIR, iface: string): Set<string> {\n let memo = implementors.get(ir);\n if (!memo) implementors.set(ir, (memo = new Map()));\n let set = memo.get(iface);\n if (!set) {\n set = new Set(Object.values(ir.types).filter((t) => t.kind === \"entity\" && t.implements.includes(iface)).map((t) => t.name));\n memo.set(iface, set);\n }\n return set;\n}\nconst implementors = new WeakMap<RayfoldSchemaIR, Map<string, Set<string>>>();\n\nfunction markNull(s: Slot): void {\n // A denied entity inside a default view becomes null in its parent (spec 06 §3).\n for (const k of Object.keys(s.out)) delete s.out[k];\n s.assign?.(null);\n}\n\nfunction substituteVars(args: Record<string, ShapeValue>, ctx: RayfoldContext): Record<string, unknown> {\n const vars = ctx.vars ?? {};\n const walk = (v: ShapeValue): unknown => {\n if (v === null || typeof v !== \"object\") return v;\n if (Array.isArray(v)) return v.map((x) => walk(x as ShapeValue));\n if (\"$var\" in v && typeof v[\"$var\"] === \"string\") {\n const name = v[\"$var\"];\n if (!(name in vars)) throw new RayfoldError(\"invalid_argument\", `Missing shape variable $${name}`);\n return vars[name];\n }\n const o: Record<string, unknown> = {};\n for (const [k, x] of Object.entries(v)) o[k] = walk(x as ShapeValue);\n return o;\n };\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(args)) out[k] = walk(v);\n return out;\n}\n\nfunction serializeScalar(ir: RayfoldSchemaIR, t: TypeRef, v: unknown): unknown {\n const name = baseName(t);\n const def = ir.types[name];\n if (def?.kind === \"enum\") return v;\n switch (name) {\n case \"Instant\":\n return v instanceof Date ? v.toISOString() : v;\n case \"Date\":\n return v instanceof Date ? v.toISOString().slice(0, 10) : v;\n case \"Long\":\n return typeof v === \"bigint\" ? v.toString() : typeof v === \"number\" && Math.abs(v) > Number.MAX_SAFE_INTEGER ? String(v) : v;\n case \"Decimal\":\n return typeof v === \"number\" ? String(v) : v;\n case \"Bytes\":\n return v instanceof Uint8Array ? base64urlBytes(v) : v;\n default:\n return v;\n }\n}\n\n/** Every entity object in a projected result becomes a `set` patch (spec 04 §2). */\nexport function derivePatches(data: unknown): PatchOp[] {\n const out = new Map<string, Record<string, unknown>>();\n const walk = (v: unknown): void => {\n if (v === null || typeof v !== \"object\") return;\n if (Array.isArray(v)) {\n v.forEach(walk);\n return;\n }\n const o = v as Record<string, unknown>;\n const tn = o[\"$type\"];\n if (typeof tn === \"string\" && (typeof o[\"id\"] === \"string\" || typeof o[\"id\"] === \"number\")) {\n const key = `${tn}:${o[\"id\"]}`;\n const shallow: Record<string, unknown> = out.get(key) ?? {};\n for (const [k, x] of Object.entries(o)) shallow[k] = toRef(x);\n out.set(key, shallow);\n }\n for (const x of Object.values(o)) walk(x);\n };\n walk(data);\n return [...out.entries()].map(([key, value]) => ({ set: key, value }));\n}\n\nfunction toRef(v: unknown): unknown {\n if (v === null || typeof v !== \"object\") return v;\n if (Array.isArray(v)) return v.map(toRef);\n const o = v as Record<string, unknown>;\n if (typeof o[\"$type\"] === \"string\" && o[\"id\"] !== undefined) return { $ref: `${o[\"$type\"]}:${o[\"id\"]}` };\n const out: Record<string, unknown> = {};\n for (const [k, x] of Object.entries(o)) out[k] = toRef(x);\n return out;\n}\n\nfunction raceAbort<T>(p: Promise<T>, signal: AbortSignal): Promise<T> {\n if (signal.aborted) return Promise.reject(new RayfoldError(\"canceled\", \"Canceled\"));\n return new Promise<T>((resolve, reject) => {\n const onAbort = () => reject(new RayfoldError(\"canceled\", \"Canceled\"));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n p.then(\n (v) => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve(v);\n },\n (e) => {\n signal.removeEventListener(\"abort\", onAbort);\n reject(e);\n },\n );\n });\n}\n\nexport function annotationsOf(x: { annotations: Annotation[] }): Annotation[] {\n return x.annotations;\n}\n"]}
|
package/guard.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Checks every HTTP entry point applies before doing any work (spec 12).
|
|
3
|
+
* - Host: a server reached on a loopback address answers only loopback host names. This defeats DNS rebinding,
|
|
4
|
+
* where a web page renames its own domain to 127.0.0.1 and reads or drives a local server as if same-origin.
|
|
5
|
+
* - Origin: a state-changing request sent by a browser from another origin is refused unless that origin is allowed.
|
|
6
|
+
* Together with JSON-only content types this stops cross-site request forgery.
|
|
7
|
+
*/
|
|
8
|
+
import type { IncomingMessage, ServerResponse } from "node:http";
|
|
9
|
+
import { RayfoldError } from "./protocol.js";
|
|
10
|
+
export interface OriginOptions {
|
|
11
|
+
/** Browser origins allowed besides the server's own, such as "https://app.example.com". "*" allows any. */
|
|
12
|
+
allowedOrigins?: readonly string[];
|
|
13
|
+
/** Host names this server answers to. Default: any, but a loopback-bound server answers loopback names only. */
|
|
14
|
+
allowedHosts?: readonly string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function isLoopbackAddress(a: string | undefined): boolean;
|
|
17
|
+
/** null when the Host header is acceptable, otherwise the reason. */
|
|
18
|
+
export declare function hostProblem(req: IncomingMessage, o?: OriginOptions): string | null;
|
|
19
|
+
/** null when the request is not a cross-origin browser request, or its origin is allowed; otherwise the reason. */
|
|
20
|
+
export declare function originProblem(req: IncomingMessage, o?: OriginOptions): string | null;
|
|
21
|
+
/** The media type of the request body, lower-cased, without parameters. */
|
|
22
|
+
export declare function mediaType(req: IncomingMessage): string;
|
|
23
|
+
/** A request body over the transport's limit. Answered 413 Content Too Large, never 429: retrying cannot help. */
|
|
24
|
+
export declare class BodyTooLarge extends RayfoldError {
|
|
25
|
+
readonly max: number;
|
|
26
|
+
constructor(max: number);
|
|
27
|
+
}
|
|
28
|
+
/** The 413 refusal for a body over the limit. */
|
|
29
|
+
export declare function refuseBody(res: ServerResponse, e: BodyTooLarge): void;
|
|
30
|
+
/** Where an RFC 9457 `type` points: the documentation site has a page for each problem type. */
|
|
31
|
+
export declare const PROBLEM_TYPE_BASE = "https://eddyboutros.github.io/rayfold/errors/";
|
|
32
|
+
/** An RFC 9457 refusal written before any operation ran. */
|
|
33
|
+
export declare function refuse(res: ServerResponse, status: number, code: string, detail: string, problemType?: string, headers?: Record<string, string>): void;
|
package/guard.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { RayfoldError } from "./protocol.js";
|
|
2
|
+
const LOOPBACK_NAMES = new Set(["localhost", "127.0.0.1", "[::1]"]);
|
|
3
|
+
export function isLoopbackAddress(a) {
|
|
4
|
+
return !!a && (a === "::1" || a.startsWith("127.") || a.startsWith("::ffff:127."));
|
|
5
|
+
}
|
|
6
|
+
function hostName(host) {
|
|
7
|
+
const h = host.trim().toLowerCase();
|
|
8
|
+
if (h.startsWith("["))
|
|
9
|
+
return h.slice(0, h.indexOf("]") + 1);
|
|
10
|
+
const i = h.lastIndexOf(":");
|
|
11
|
+
return i >= 0 ? h.slice(0, i) : h;
|
|
12
|
+
}
|
|
13
|
+
/** null when the Host header is acceptable, otherwise the reason. */
|
|
14
|
+
export function hostProblem(req, o = {}) {
|
|
15
|
+
const host = req.headers.host;
|
|
16
|
+
if (!host)
|
|
17
|
+
return "Missing Host header";
|
|
18
|
+
const name = hostName(host);
|
|
19
|
+
if (o.allowedHosts)
|
|
20
|
+
return o.allowedHosts.includes(name) || o.allowedHosts.includes(host.toLowerCase()) ? null : `Host ${host} is not allowed`;
|
|
21
|
+
if (isLoopbackAddress(req.socket.localAddress) && !LOOPBACK_NAMES.has(name))
|
|
22
|
+
return `Host ${host} is not allowed on a loopback server`;
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
/** null when the request is not a cross-origin browser request, or its origin is allowed; otherwise the reason. */
|
|
26
|
+
export function originProblem(req, o = {}) {
|
|
27
|
+
const origin = req.headers.origin;
|
|
28
|
+
if (origin === undefined)
|
|
29
|
+
return null; // browsers send Origin on every state-changing request; other clients need not
|
|
30
|
+
if (o.allowedOrigins?.includes("*") || o.allowedOrigins?.includes(origin))
|
|
31
|
+
return null;
|
|
32
|
+
try {
|
|
33
|
+
if (new URL(origin).host === (req.headers.host ?? "").toLowerCase())
|
|
34
|
+
return null; // same origin (Host is checked on its own)
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
/* "null" and malformed origins are never allowed */
|
|
38
|
+
}
|
|
39
|
+
return `Origin ${origin} is not allowed`;
|
|
40
|
+
}
|
|
41
|
+
/** The media type of the request body, lower-cased, without parameters. */
|
|
42
|
+
export function mediaType(req) {
|
|
43
|
+
return (req.headers["content-type"] ?? "").split(";")[0].trim().toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
/** A request body over the transport's limit. Answered 413 Content Too Large, never 429: retrying cannot help. */
|
|
46
|
+
export class BodyTooLarge extends RayfoldError {
|
|
47
|
+
max;
|
|
48
|
+
constructor(max) {
|
|
49
|
+
super("resource_exhausted", `Body exceeds ${max} bytes`);
|
|
50
|
+
this.max = max;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/** The 413 refusal for a body over the limit. */
|
|
54
|
+
export function refuseBody(res, e) {
|
|
55
|
+
refuse(res, 413, "resource_exhausted", e.message, "payload_too_large");
|
|
56
|
+
}
|
|
57
|
+
/** Where an RFC 9457 `type` points: the documentation site has a page for each problem type. */
|
|
58
|
+
export const PROBLEM_TYPE_BASE = "https://eddyboutros.github.io/rayfold/errors/";
|
|
59
|
+
/** An RFC 9457 refusal written before any operation ran. */
|
|
60
|
+
export function refuse(res, status, code, detail, problemType = code, headers = {}) {
|
|
61
|
+
res
|
|
62
|
+
.writeHead(status, { "Content-Type": "application/problem+json", "Cache-Control": "no-store", "X-Content-Type-Options": "nosniff", ...headers })
|
|
63
|
+
.end(JSON.stringify({ type: PROBLEM_TYPE_BASE + problemType, title: problemType.replace(/_/g, " "), status, detail, code }));
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=guard.js.map
|
package/guard.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Checks every HTTP entry point applies before doing any work (spec 12).\n * - Host: a server reached on a loopback address answers only loopback host names. This defeats DNS rebinding,\n * where a web page renames its own domain to 127.0.0.1 and reads or drives a local server as if same-origin.\n * - Origin: a state-changing request sent by a browser from another origin is refused unless that origin is allowed.\n * Together with JSON-only content types this stops cross-site request forgery.\n */\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport { RayfoldError } from \"./protocol.ts\";\n\nexport interface OriginOptions {\n /** Browser origins allowed besides the server's own, such as \"https://app.example.com\". \"*\" allows any. */\n allowedOrigins?: readonly string[];\n /** Host names this server answers to. Default: any, but a loopback-bound server answers loopback names only. */\n allowedHosts?: readonly string[];\n}\n\nconst LOOPBACK_NAMES = new Set([\"localhost\", \"127.0.0.1\", \"[::1]\"]);\n\nexport function isLoopbackAddress(a: string | undefined): boolean {\n return !!a && (a === \"::1\" || a.startsWith(\"127.\") || a.startsWith(\"::ffff:127.\"));\n}\n\nfunction hostName(host: string): string {\n const h = host.trim().toLowerCase();\n if (h.startsWith(\"[\")) return h.slice(0, h.indexOf(\"]\") + 1);\n const i = h.lastIndexOf(\":\");\n return i >= 0 ? h.slice(0, i) : h;\n}\n\n/** null when the Host header is acceptable, otherwise the reason. */\nexport function hostProblem(req: IncomingMessage, o: OriginOptions = {}): string | null {\n const host = req.headers.host;\n if (!host) return \"Missing Host header\";\n const name = hostName(host);\n if (o.allowedHosts) return o.allowedHosts.includes(name) || o.allowedHosts.includes(host.toLowerCase()) ? null : `Host ${host} is not allowed`;\n if (isLoopbackAddress(req.socket.localAddress) && !LOOPBACK_NAMES.has(name)) return `Host ${host} is not allowed on a loopback server`;\n return null;\n}\n\n/** null when the request is not a cross-origin browser request, or its origin is allowed; otherwise the reason. */\nexport function originProblem(req: IncomingMessage, o: OriginOptions = {}): string | null {\n const origin = req.headers.origin;\n if (origin === undefined) return null; // browsers send Origin on every state-changing request; other clients need not\n if (o.allowedOrigins?.includes(\"*\") || o.allowedOrigins?.includes(origin)) return null;\n try {\n if (new URL(origin).host === (req.headers.host ?? \"\").toLowerCase()) return null; // same origin (Host is checked on its own)\n } catch {\n /* \"null\" and malformed origins are never allowed */\n }\n return `Origin ${origin} is not allowed`;\n}\n\n/** The media type of the request body, lower-cased, without parameters. */\nexport function mediaType(req: IncomingMessage): string {\n return (req.headers[\"content-type\"] ?? \"\").split(\";\")[0]!.trim().toLowerCase();\n}\n\n/** A request body over the transport's limit. Answered 413 Content Too Large, never 429: retrying cannot help. */\nexport class BodyTooLarge extends RayfoldError {\n constructor(readonly max: number) {\n super(\"resource_exhausted\", `Body exceeds ${max} bytes`);\n }\n}\n\n/** The 413 refusal for a body over the limit. */\nexport function refuseBody(res: ServerResponse, e: BodyTooLarge): void {\n refuse(res, 413, \"resource_exhausted\", e.message, \"payload_too_large\");\n}\n\n/** Where an RFC 9457 `type` points: the documentation site has a page for each problem type. */\nexport const PROBLEM_TYPE_BASE = \"https://eddyboutros.github.io/rayfold/errors/\";\n\n/** An RFC 9457 refusal written before any operation ran. */\nexport function refuse(res: ServerResponse, status: number, code: string, detail: string, problemType = code, headers: Record<string, string> = {}): void {\n res\n .writeHead(status, { \"Content-Type\": \"application/problem+json\", \"Cache-Control\": \"no-store\", \"X-Content-Type-Options\": \"nosniff\", ...headers })\n .end(JSON.stringify({ type: PROBLEM_TYPE_BASE + problemType, title: problemType.replace(/_/g, \" \"), status, detail, code }));\n}\n"]}
|
package/http.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** HTTP transport for Node. Spec: spec/04-frames-and-transport.md §4. */
|
|
2
|
+
import { type IncomingMessage, type Server, type ServerResponse } from "node:http";
|
|
3
|
+
import { type RayfoldSchemaIR } from "@rayfold/schema";
|
|
4
|
+
import type { RayfoldServer } from "./server.js";
|
|
5
|
+
import { type Frame, type RequestEnvelope } from "./protocol.js";
|
|
6
|
+
import { RbCodec } from "@rayfold/rb";
|
|
7
|
+
import { type OriginOptions } from "./guard.js";
|
|
8
|
+
export interface HttpOptions extends OriginOptions {
|
|
9
|
+
/** What GET {path}/manifest serves: the schema without policy expressions (default), the full IR, or nothing. */
|
|
10
|
+
manifest?: "redacted" | "full" | "off";
|
|
11
|
+
/** Path prefix, default "/rayfold". */
|
|
12
|
+
path?: string;
|
|
13
|
+
/** Turn the incoming request into a viewer (e.g. parse a Bearer token). */
|
|
14
|
+
viewer?: (req: IncomingMessage) => unknown | Promise<unknown>;
|
|
15
|
+
/** Max request body in bytes, default 1 MiB. */
|
|
16
|
+
maxBody?: number;
|
|
17
|
+
/** Extra CORS origin to allow (development). */
|
|
18
|
+
cors?: string;
|
|
19
|
+
/**
|
|
20
|
+
* When a whole interval of this many milliseconds passes without a frame, a streaming response gets a keep-alive: an
|
|
21
|
+
* empty line, or a zero-length RB frame (spec 04 section 4), so proxies do not close an idle live query. Default 15 000.
|
|
22
|
+
*/
|
|
23
|
+
keepAliveMs?: number;
|
|
24
|
+
}
|
|
25
|
+
/** One RB codec per server: its key dictionary comes from the schema. */
|
|
26
|
+
export declare function codecFor(server: RayfoldServer): RbCodec;
|
|
27
|
+
/** The IR without policy expressions: clients need names and types, not how access is decided. */
|
|
28
|
+
export declare function publicIR(ir: RayfoldSchemaIR): RayfoldSchemaIR;
|
|
29
|
+
export declare function createHttpHandler(server: RayfoldServer, opts?: HttpOptions): (req: IncomingMessage, res: ServerResponse) => Promise<void>;
|
|
30
|
+
/** Cache-Control/ETag for safe requests (spec 07 §2): min over @cache of ops and entity types touched. */
|
|
31
|
+
export declare function applyCacheHeaders(server: RayfoldServer, envelope: RequestEnvelope, frames: Frame[], viewer: unknown, res: ServerResponse): void;
|
|
32
|
+
/** Start a Node HTTP server hosting the Rayfold endpoint. */
|
|
33
|
+
export declare function listen(server: RayfoldServer, port: number, opts?: HttpOptions): Promise<Server>;
|