orpc-fn 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 +21 -0
- package/README.md +250 -0
- package/dist/bound-call.d.ts +23 -0
- package/dist/bound-call.d.ts.map +1 -0
- package/dist/bound-call.js +23 -0
- package/dist/bound-call.js.map +1 -0
- package/dist/client.d.ts +44 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +49 -0
- package/dist/client.js.map +1 -0
- package/dist/create-fn.d.ts +97 -0
- package/dist/create-fn.d.ts.map +1 -0
- package/dist/create-fn.js +224 -0
- package/dist/create-fn.js.map +1 -0
- package/dist/expected-client-error.d.ts +11 -0
- package/dist/expected-client-error.d.ts.map +1 -0
- package/dist/expected-client-error.js +21 -0
- package/dist/expected-client-error.js.map +1 -0
- package/dist/expo.d.ts +66 -0
- package/dist/expo.d.ts.map +1 -0
- package/dist/expo.js +74 -0
- package/dist/expo.js.map +1 -0
- package/dist/hono.d.ts +81 -0
- package/dist/hono.d.ts.map +1 -0
- package/dist/hono.js +138 -0
- package/dist/hono.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/json-schema.d.ts +47 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +44 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/live/codec.d.ts +9 -0
- package/dist/live/codec.d.ts.map +1 -0
- package/dist/live/codec.js +27 -0
- package/dist/live/codec.js.map +1 -0
- package/dist/live/fn-live.d.ts +155 -0
- package/dist/live/fn-live.d.ts.map +1 -0
- package/dist/live/fn-live.js +210 -0
- package/dist/live/fn-live.js.map +1 -0
- package/dist/live/index.d.ts +4 -0
- package/dist/live/index.d.ts.map +1 -0
- package/dist/live/index.js +5 -0
- package/dist/live/index.js.map +1 -0
- package/dist/live/ioredis.d.ts +29 -0
- package/dist/live/ioredis.d.ts.map +1 -0
- package/dist/live/ioredis.js +49 -0
- package/dist/live/ioredis.js.map +1 -0
- package/dist/live/memory.d.ts +10 -0
- package/dist/live/memory.d.ts.map +1 -0
- package/dist/live/memory.js +45 -0
- package/dist/live/memory.js.map +1 -0
- package/dist/live/pub-sub.d.ts +211 -0
- package/dist/live/pub-sub.d.ts.map +1 -0
- package/dist/live/pub-sub.js +529 -0
- package/dist/live/pub-sub.js.map +1 -0
- package/dist/live/redis-bun.d.ts +26 -0
- package/dist/live/redis-bun.d.ts.map +1 -0
- package/dist/live/redis-bun.js +59 -0
- package/dist/live/redis-bun.js.map +1 -0
- package/dist/live/redis.d.ts +45 -0
- package/dist/live/redis.d.ts.map +1 -0
- package/dist/live/redis.js +214 -0
- package/dist/live/redis.js.map +1 -0
- package/dist/live/transport.d.ts +35 -0
- package/dist/live/transport.d.ts.map +1 -0
- package/dist/live/transport.js +2 -0
- package/dist/live/transport.js.map +1 -0
- package/dist/logger.d.ts +15 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +15 -0
- package/dist/logger.js.map +1 -0
- package/dist/mastra.d.ts +44 -0
- package/dist/mastra.d.ts.map +1 -0
- package/dist/mastra.js +78 -0
- package/dist/mastra.js.map +1 -0
- package/dist/mcp.d.ts +39 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +38 -0
- package/dist/mcp.js.map +1 -0
- package/dist/meta.d.ts +35 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +30 -0
- package/dist/meta.js.map +1 -0
- package/dist/otel.d.ts +66 -0
- package/dist/otel.d.ts.map +1 -0
- package/dist/otel.js +63 -0
- package/dist/otel.js.map +1 -0
- package/dist/router.d.ts +13 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +14 -0
- package/dist/router.js.map +1 -0
- package/dist/stream.d.ts +13 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/stream.js +44 -0
- package/dist/stream.js.map +1 -0
- package/dist/types.d.ts +196 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/package.json +157 -0
- package/src/bound-call.ts +50 -0
- package/src/client.ts +82 -0
- package/src/create-fn.ts +461 -0
- package/src/expected-client-error.ts +23 -0
- package/src/expo.ts +127 -0
- package/src/hono.ts +247 -0
- package/src/index.ts +45 -0
- package/src/json-schema.ts +82 -0
- package/src/live/codec.ts +31 -0
- package/src/live/fn-live.ts +470 -0
- package/src/live/index.ts +31 -0
- package/src/live/ioredis.ts +74 -0
- package/src/live/memory.ts +50 -0
- package/src/live/pub-sub.ts +828 -0
- package/src/live/redis-bun.ts +76 -0
- package/src/live/redis.ts +255 -0
- package/src/live/transport.ts +41 -0
- package/src/logger.ts +28 -0
- package/src/mastra.ts +140 -0
- package/src/mcp.ts +73 -0
- package/src/meta.ts +72 -0
- package/src/otel.ts +151 -0
- package/src/router.ts +15 -0
- package/src/stream.ts +54 -0
- package/src/types.ts +389 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import type { Schema } from '@orpc/contract';
|
|
2
|
+
import type { ZodObject, ZodRawShape, ZodType, z } from 'zod';
|
|
3
|
+
import type { FnLogger } from '../logger.js';
|
|
4
|
+
import { type SpanLike, type Tracing } from '../otel.js';
|
|
5
|
+
import type { BuildProcedure, FnContext, FnDefinition, FnProcedure, MaybePromise, ProcedureKey, ProcedureOption } from '../types.js';
|
|
6
|
+
import type { PubSubTransport } from './transport.js';
|
|
7
|
+
/** Any Zod object schema, including `.strict()`, `.passthrough()` and `.catchall()`. */
|
|
8
|
+
export type ObjectSchema = ZodObject<ZodRawShape, z.core.$ZodObjectConfig>;
|
|
9
|
+
/**
|
|
10
|
+
* A static channel name, or one derived from (partial) subscriber input or
|
|
11
|
+
* event data.
|
|
12
|
+
*/
|
|
13
|
+
export type ChannelDefinition<TInput, TEventData, TContext = unknown> = string | ((params: Partial<TInput> | Partial<TEventData>, context?: TContext) => string);
|
|
14
|
+
/** Decides whether one event reaches one subscriber. */
|
|
15
|
+
export type FilterFn<TInput, TEventData> = (params: {
|
|
16
|
+
input: TInput;
|
|
17
|
+
data: TEventData;
|
|
18
|
+
}) => MaybePromise<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Checked when a subscription opens, before anything is sent. `true` allows
|
|
21
|
+
* everyone; a function returns false (or throws) to refuse with FORBIDDEN.
|
|
22
|
+
*/
|
|
23
|
+
export type AuthFn<TInput, TContext> = ((params: {
|
|
24
|
+
input: TInput;
|
|
25
|
+
ctx: TContext;
|
|
26
|
+
}) => MaybePromise<boolean>) | true;
|
|
27
|
+
export type PublisherConfig = {
|
|
28
|
+
/** Required name for tracing (e.g. 'chat.messages'). */
|
|
29
|
+
name: string;
|
|
30
|
+
/**
|
|
31
|
+
* Store recent events in a backlog list; new subscribers receive it before
|
|
32
|
+
* live events. Default: false
|
|
33
|
+
*/
|
|
34
|
+
useBacklog?: boolean;
|
|
35
|
+
/** Maximum backlog items to keep (default: 50). */
|
|
36
|
+
backlogSize?: number;
|
|
37
|
+
/** Backlog TTL in seconds (default: 30). */
|
|
38
|
+
backlogTtl?: number;
|
|
39
|
+
/**
|
|
40
|
+
* Also publish every payload to this channel (with its own backlog when
|
|
41
|
+
* `useBacklog`). Subscribers still use `channel`. Equal to the primary
|
|
42
|
+
* channel means no duplicate work.
|
|
43
|
+
*/
|
|
44
|
+
mirrorChannel?: string;
|
|
45
|
+
};
|
|
46
|
+
export type PubSubOptions<TDef extends FnDefinition, TInputSchema extends ObjectSchema, TEventSchema extends ZodType, TKey extends ProcedureKey<TDef>> = PublisherConfig & {
|
|
47
|
+
channel: ChannelDefinition<z.output<TInputSchema>, z.output<TEventSchema>, FnContext<TDef, TKey>>;
|
|
48
|
+
/** What the subscriber provides. */
|
|
49
|
+
inputSchema: TInputSchema;
|
|
50
|
+
/** What gets published. */
|
|
51
|
+
eventSchema: TEventSchema;
|
|
52
|
+
filterFn?: FilterFn<z.output<TInputSchema>, z.output<TEventSchema>>;
|
|
53
|
+
authFn?: AuthFn<z.output<TInputSchema>, FnContext<TDef, TKey>>;
|
|
54
|
+
/**
|
|
55
|
+
* When a slow subscriber's queue overflows (drop-oldest), enqueue this
|
|
56
|
+
* marker INSTEAD of the new event so the subscriber resyncs from its
|
|
57
|
+
* cursor. A wholly dropped item leaves no per-item gap a consumer could
|
|
58
|
+
* detect, so the marker is the only reliable live signal of loss. Return
|
|
59
|
+
* null to skip.
|
|
60
|
+
*/
|
|
61
|
+
overflowMarker?: (input: z.output<TInputSchema>) => z.output<TEventSchema> | null;
|
|
62
|
+
tags?: TDef['tag'][];
|
|
63
|
+
summary?: string;
|
|
64
|
+
description?: string;
|
|
65
|
+
};
|
|
66
|
+
export type PubSub<TDef extends FnDefinition, TInputSchema extends ObjectSchema, TEventSchema extends ZodType, TKey extends ProcedureKey<TDef>> = {
|
|
67
|
+
subscribe: FnProcedure<TDef, TKey, TInputSchema, Schema<AsyncGenerator<z.output<TEventSchema>, void, unknown>, AsyncGenerator<z.output<TEventSchema>, void, unknown>>>;
|
|
68
|
+
publish: (data: z.input<TEventSchema>) => Promise<void>;
|
|
69
|
+
/** Publish a batch in one atomic round-trip; items may target different channels. */
|
|
70
|
+
publishMany: (items: readonly z.input<TEventSchema>[]) => Promise<void>;
|
|
71
|
+
getChannelName: (params: Partial<z.output<TInputSchema>> | Partial<z.output<TEventSchema>>, context?: FnContext<TDef, TKey>) => string;
|
|
72
|
+
};
|
|
73
|
+
export type CreatePubSub<TDef extends FnDefinition> = <TInputSchema extends ObjectSchema, TEventSchema extends ZodType, TKey extends ProcedureKey<TDef> = TDef['default']>(options: PubSubOptions<TDef, TInputSchema, TEventSchema, NoInfer<TKey>> &
|
|
74
|
+
/** Which `procedures` builder the subscribe route uses. */
|
|
75
|
+
ProcedureOption<TDef, TKey>) => PubSub<TDef, TInputSchema, TEventSchema, TKey>;
|
|
76
|
+
export type PublisherOptions<TEventSchema extends ZodType> = PublisherConfig & {
|
|
77
|
+
/** Static channel name, or a resolver over (partial) parsed event data. */
|
|
78
|
+
channel: string | ((params: Partial<z.output<TEventSchema>>) => string);
|
|
79
|
+
eventSchema: TEventSchema;
|
|
80
|
+
};
|
|
81
|
+
export type Publisher<TEventSchema extends ZodType> = {
|
|
82
|
+
publish: (data: z.input<TEventSchema>) => Promise<void>;
|
|
83
|
+
publishMany: (items: readonly z.input<TEventSchema>[]) => Promise<void>;
|
|
84
|
+
getChannelName: (params: Partial<z.output<TEventSchema>>) => string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Publish-only counterpart to `createPubSub`, for buses whose subscribe side
|
|
88
|
+
* lives elsewhere (e.g. an `fnLive` route sharing the channel and schema).
|
|
89
|
+
*/
|
|
90
|
+
export type CreatePublisher = <TEventSchema extends ZodType>(options: PublisherOptions<TEventSchema>) => Publisher<TEventSchema>;
|
|
91
|
+
export type PubSubRuntimeOptions = {
|
|
92
|
+
transport: PubSubTransport;
|
|
93
|
+
/**
|
|
94
|
+
* Called once per event dropped from a slow subscriber's queue. Events wait
|
|
95
|
+
* there before the subscriber's filter runs, so drops count unfiltered events.
|
|
96
|
+
*/
|
|
97
|
+
onDrop?: (count: number, info: {
|
|
98
|
+
name: string;
|
|
99
|
+
channel: string;
|
|
100
|
+
}) => void;
|
|
101
|
+
/** Per-subscriber queue bound before drop-oldest (default: 1000). */
|
|
102
|
+
maxQueueSize?: number;
|
|
103
|
+
};
|
|
104
|
+
/** @internal */
|
|
105
|
+
export type LiveRuntimeOptions = {
|
|
106
|
+
buildProcedure: BuildProcedure;
|
|
107
|
+
tracing: Tracing;
|
|
108
|
+
createLogger: (scope: string, span: SpanLike | undefined) => FnLogger;
|
|
109
|
+
pubsub?: PubSubRuntimeOptions | undefined;
|
|
110
|
+
};
|
|
111
|
+
/**
|
|
112
|
+
* Bounded drop-oldest FIFO with "one overflow marker per overflow episode"
|
|
113
|
+
* semantics.
|
|
114
|
+
*
|
|
115
|
+
* On the FIRST overflow of an episode the oldest message is dropped and the
|
|
116
|
+
* marker from `createOverflowMarker` is enqueued INSTEAD of the new event - the
|
|
117
|
+
* subscriber's resync-from-cursor recovers the loss. While that marker is still
|
|
118
|
+
* queued, further overflows drop the oldest NON-marker message (the marker
|
|
119
|
+
* itself is never displaced) and enqueue the new event WITHOUT a second marker:
|
|
120
|
+
* the pending marker's resync already covers every drop that happens before it
|
|
121
|
+
* is delivered. Without this dedupe a sustained overflow converges the whole
|
|
122
|
+
* queue to markers - one full snapshot re-run per queued slot. Dequeuing the
|
|
123
|
+
* marker ends the episode; the next overflow starts a fresh one.
|
|
124
|
+
*
|
|
125
|
+
* `createOverflowMarker` absent (or returning null) falls back to plain
|
|
126
|
+
* drop-oldest with the new event enqueued.
|
|
127
|
+
*/
|
|
128
|
+
export declare function createBoundedEventQueue<T>(opts: {
|
|
129
|
+
maxSize: number;
|
|
130
|
+
createOverflowMarker?: () => T | null;
|
|
131
|
+
/** Called once per dropped message (metrics/counters). */
|
|
132
|
+
onDrop?: () => void;
|
|
133
|
+
}): {
|
|
134
|
+
readonly length: number;
|
|
135
|
+
enqueue(data: T): void;
|
|
136
|
+
dequeue(): T | undefined;
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* One subscriber's ordered, bounded delivery. Events wait in a bounded
|
|
140
|
+
* drop-oldest queue (see {@link createBoundedEventQueue}) BEFORE the
|
|
141
|
+
* subscriber's filter runs; the filter runs in order as the consumer reads,
|
|
142
|
+
* so a slow async filter neither reorders events nor lets pending work grow
|
|
143
|
+
* past `maxSize`. Overflow markers skip the filter.
|
|
144
|
+
*/
|
|
145
|
+
export declare function createSubscriberDelivery<T>(options: {
|
|
146
|
+
maxSize: number;
|
|
147
|
+
accept?: ((data: T) => MaybePromise<boolean>) | undefined;
|
|
148
|
+
overflowMarker?: (() => T | null) | undefined;
|
|
149
|
+
onFilterError: (error: unknown) => void;
|
|
150
|
+
onDrop: () => void;
|
|
151
|
+
}): {
|
|
152
|
+
push(data: T): void;
|
|
153
|
+
events: AsyncGenerator<T, void, unknown>;
|
|
154
|
+
/** Stop delivering; a parked read ends at once. */
|
|
155
|
+
close(): void;
|
|
156
|
+
};
|
|
157
|
+
type Input = Record<string, unknown>;
|
|
158
|
+
/** An open subscription: registered, authorized and subscribed. */
|
|
159
|
+
export type LiveSubscription = {
|
|
160
|
+
/** Live events, after the backlog replay. Ends when closed or aborted. */
|
|
161
|
+
events: AsyncGenerator<unknown, void, unknown>;
|
|
162
|
+
/** Release everything; safe to call more than once, and before `events` runs. */
|
|
163
|
+
close: () => void;
|
|
164
|
+
};
|
|
165
|
+
/** @internal Untyped options; `PubSubOptions` is the typed surface. */
|
|
166
|
+
export type ChannelOptions = PublisherConfig & {
|
|
167
|
+
channel: ChannelDefinition<Input, unknown>;
|
|
168
|
+
eventSchema: ZodType;
|
|
169
|
+
filterFn?: FilterFn<Input, unknown>;
|
|
170
|
+
authFn?: AuthFn<Input, unknown>;
|
|
171
|
+
overflowMarker?: (input: Input) => unknown;
|
|
172
|
+
};
|
|
173
|
+
/** @internal */
|
|
174
|
+
export type Channel = {
|
|
175
|
+
/** Authorize and subscribe; resolves once events can be delivered. */
|
|
176
|
+
open: (options: {
|
|
177
|
+
input: Input;
|
|
178
|
+
context: unknown;
|
|
179
|
+
signal: AbortSignal | undefined;
|
|
180
|
+
}) => Promise<LiveSubscription>;
|
|
181
|
+
publish: (data: unknown) => Promise<void>;
|
|
182
|
+
publishMany: (items: readonly unknown[]) => Promise<void>;
|
|
183
|
+
getChannelName: (params: Input, context?: unknown) => string;
|
|
184
|
+
};
|
|
185
|
+
/** @internal */
|
|
186
|
+
export declare function createLiveRuntime(options: LiveRuntimeOptions): {
|
|
187
|
+
createChannel: (channelOptions: ChannelOptions) => Channel;
|
|
188
|
+
createPubSub: (pubsubOptions: ChannelOptions & {
|
|
189
|
+
inputSchema: ZodType;
|
|
190
|
+
procedure?: string;
|
|
191
|
+
tags?: string[];
|
|
192
|
+
summary?: string;
|
|
193
|
+
description?: string;
|
|
194
|
+
}) => {
|
|
195
|
+
subscribe: import("@orpc/server").AnyProcedure;
|
|
196
|
+
publish: (data: unknown) => Promise<void>;
|
|
197
|
+
publishMany: (items: readonly unknown[]) => Promise<void>;
|
|
198
|
+
getChannelName: (params: Input, context?: unknown) => string;
|
|
199
|
+
};
|
|
200
|
+
createPublisher: (publisherOptions: PublisherOptions<ZodType>) => {
|
|
201
|
+
publish: (data: unknown) => Promise<void>;
|
|
202
|
+
publishMany: (items: readonly unknown[]) => Promise<void>;
|
|
203
|
+
getChannelName: (params: Input) => string;
|
|
204
|
+
};
|
|
205
|
+
/** Open subscriptions of this instance (drain progress, gauges). */
|
|
206
|
+
activePubSubSubscriberCount: () => number;
|
|
207
|
+
/** End every open subscription; returns how many were closed. */
|
|
208
|
+
drainPubSubSubscribers: () => number;
|
|
209
|
+
};
|
|
210
|
+
export {};
|
|
211
|
+
//# sourceMappingURL=pub-sub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pub-sub.d.ts","sourceRoot":"","sources":["../../src/live/pub-sub.ts"],"names":[],"mappings":"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"}
|