@leaven-graphql/ws 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.
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @leaven-graphql/ws - Subscription manager
3
+ *
4
+ * Copyright 2026 Pegasus Heavy Industries LLC
5
+ * Licensed under the Apache License, Version 2.0
6
+ */
7
+ import type { GraphQLSchema } from 'graphql';
8
+ import { type GraphQLRequest, type GraphQLResponse } from '@leaven-graphql/core';
9
+ /**
10
+ * Subscription status
11
+ */
12
+ export type SubscriptionStatus = 'pending' | 'active' | 'completed' | 'error';
13
+ /**
14
+ * Active subscription
15
+ */
16
+ export interface Subscription {
17
+ /** Unique subscription ID */
18
+ id: string;
19
+ /** Connection ID */
20
+ connectionId: string;
21
+ /** The original request */
22
+ request: GraphQLRequest;
23
+ /** Subscription status */
24
+ status: SubscriptionStatus;
25
+ /** When the subscription was created */
26
+ createdAt: number;
27
+ /** Async iterator */
28
+ iterator?: AsyncIterableIterator<GraphQLResponse>;
29
+ /** Cleanup function */
30
+ cleanup?: () => void;
31
+ }
32
+ /**
33
+ * Subscription manager configuration
34
+ */
35
+ export interface SubscriptionManagerConfig {
36
+ /** GraphQL schema */
37
+ schema: GraphQLSchema;
38
+ /** Maximum subscriptions per connection */
39
+ maxSubscriptionsPerConnection?: number;
40
+ /** Subscription timeout in milliseconds */
41
+ subscriptionTimeout?: number;
42
+ }
43
+ /**
44
+ * Manages GraphQL subscriptions
45
+ */
46
+ export declare class SubscriptionManager {
47
+ private readonly executor;
48
+ private readonly subscriptions;
49
+ private readonly connectionSubscriptions;
50
+ private readonly maxSubscriptionsPerConnection;
51
+ private readonly subscriptionTimeout;
52
+ constructor(config: SubscriptionManagerConfig);
53
+ /**
54
+ * Create a new subscription
55
+ */
56
+ subscribe<TContext = unknown>(connectionId: string, subscriptionId: string, request: GraphQLRequest, context: TContext, onNext: (result: GraphQLResponse) => void, onComplete: () => void, onError: (errors: readonly {
57
+ message: string;
58
+ }[]) => void): Promise<Subscription>;
59
+ /**
60
+ * Consume an async iterator and call callbacks
61
+ */
62
+ private consumeIterator;
63
+ /**
64
+ * Unsubscribe from a subscription
65
+ */
66
+ unsubscribe(subscriptionId: string): boolean;
67
+ /**
68
+ * Unsubscribe all subscriptions for a connection
69
+ */
70
+ unsubscribeConnection(connectionId: string): number;
71
+ /**
72
+ * Get a subscription by ID
73
+ */
74
+ getSubscription(subscriptionId: string): Subscription | undefined;
75
+ /**
76
+ * Get all subscriptions for a connection
77
+ */
78
+ getConnectionSubscriptions(connectionId: string): Subscription[];
79
+ /**
80
+ * Get the total number of active subscriptions
81
+ */
82
+ get subscriptionCount(): number;
83
+ /**
84
+ * Get the number of active connections
85
+ */
86
+ get connectionCount(): number;
87
+ /**
88
+ * Clear all subscriptions
89
+ */
90
+ clear(): void;
91
+ }
92
+ /**
93
+ * Create a new subscription manager
94
+ */
95
+ export declare function createSubscriptionManager(config: SubscriptionManagerConfig): SubscriptionManager;
96
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAkB,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEjG;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,6BAA6B;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,OAAO,EAAE,cAAc,CAAC;IACxB,0BAA0B;IAC1B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,qBAAqB,CAAC,eAAe,CAAC,CAAC;IAClD,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,qBAAqB;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,2CAA2C;IAC3C,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,2CAA2C;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4B;IAC1D,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAA2B;IACnE,OAAO,CAAC,QAAQ,CAAC,6BAA6B,CAAS;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAS;gBAEjC,MAAM,EAAE,yBAAyB;IAQ7C;;OAEG;IACU,SAAS,CAAC,QAAQ,GAAG,OAAO,EACvC,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,QAAQ,EACjB,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,EACzC,UAAU,EAAE,MAAM,IAAI,EACtB,OAAO,EAAE,CAAC,MAAM,EAAE,SAAS;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,KAAK,IAAI,GACxD,OAAO,CAAC,YAAY,CAAC;IAqExB;;OAEG;YACW,eAAe;IAkC7B;;OAEG;IACI,WAAW,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO;IA4BnD;;OAEG;IACI,qBAAqB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM;IAgB1D;;OAEG;IACI,eAAe,CAAC,cAAc,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIxE;;OAEG;IACI,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,YAAY,EAAE;IAiBvE;;OAEG;IACH,IAAW,iBAAiB,IAAI,MAAM,CAErC;IAED;;OAEG;IACH,IAAW,eAAe,IAAI,MAAM,CAEnC;IAED;;OAEG;IACI,KAAK,IAAI,IAAI;CAKrB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,yBAAyB,GAChC,mBAAmB,CAErB"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * @leaven-graphql/ws - GraphQL over WebSocket protocol
3
+ *
4
+ * Copyright 2026 Pegasus Heavy Industries LLC
5
+ * Licensed under the Apache License, Version 2.0
6
+ *
7
+ * Implements graphql-ws protocol
8
+ */
9
+ /**
10
+ * Message types as defined by graphql-ws protocol
11
+ */
12
+ export declare enum MessageType {
13
+ ConnectionInit = "connection_init",
14
+ ConnectionAck = "connection_ack",
15
+ Ping = "ping",
16
+ Pong = "pong",
17
+ Subscribe = "subscribe",
18
+ Next = "next",
19
+ Error = "error",
20
+ Complete = "complete"
21
+ }
22
+ /**
23
+ * Connection init message
24
+ */
25
+ export interface ConnectionInitMessage {
26
+ type: MessageType.ConnectionInit;
27
+ payload?: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Connection ack message
31
+ */
32
+ export interface ConnectionAckMessage {
33
+ type: MessageType.ConnectionAck;
34
+ payload?: Record<string, unknown>;
35
+ }
36
+ /**
37
+ * Ping message
38
+ */
39
+ export interface PingMessage {
40
+ type: MessageType.Ping;
41
+ payload?: Record<string, unknown>;
42
+ }
43
+ /**
44
+ * Pong message
45
+ */
46
+ export interface PongMessage {
47
+ type: MessageType.Pong;
48
+ payload?: Record<string, unknown>;
49
+ }
50
+ /**
51
+ * Subscribe message
52
+ */
53
+ export interface SubscribeMessage {
54
+ id: string;
55
+ type: MessageType.Subscribe;
56
+ payload: {
57
+ operationName?: string;
58
+ query: string;
59
+ variables?: Record<string, unknown>;
60
+ extensions?: Record<string, unknown>;
61
+ };
62
+ }
63
+ /**
64
+ * Next message (data result)
65
+ */
66
+ export interface NextMessage {
67
+ id: string;
68
+ type: MessageType.Next;
69
+ payload: {
70
+ data?: Record<string, unknown> | null;
71
+ errors?: readonly {
72
+ message: string;
73
+ [key: string]: unknown;
74
+ }[];
75
+ extensions?: Record<string, unknown>;
76
+ };
77
+ }
78
+ /**
79
+ * Error message
80
+ */
81
+ export interface ErrorMessage {
82
+ id: string;
83
+ type: MessageType.Error;
84
+ payload: readonly {
85
+ message: string;
86
+ [key: string]: unknown;
87
+ }[];
88
+ }
89
+ /**
90
+ * Complete message
91
+ */
92
+ export interface CompleteMessage {
93
+ id: string;
94
+ type: MessageType.Complete;
95
+ }
96
+ /**
97
+ * All message types
98
+ */
99
+ export type Message = ConnectionInitMessage | ConnectionAckMessage | PingMessage | PongMessage | SubscribeMessage | NextMessage | ErrorMessage | CompleteMessage;
100
+ /**
101
+ * Parse a WebSocket message
102
+ */
103
+ export declare function parseMessage(data: string | Buffer): Message;
104
+ /**
105
+ * Format a message for sending
106
+ */
107
+ export declare function formatMessage(message: Message): string;
108
+ /**
109
+ * Create a connection ack message
110
+ */
111
+ export declare function createConnectionAck(payload?: Record<string, unknown>): ConnectionAckMessage;
112
+ /**
113
+ * Create a next message
114
+ */
115
+ export declare function createNextMessage(id: string, data: Record<string, unknown> | null | undefined, errors?: readonly {
116
+ message: string;
117
+ }[]): NextMessage;
118
+ /**
119
+ * Create an error message
120
+ */
121
+ export declare function createErrorMessage(id: string, errors: readonly {
122
+ message: string;
123
+ [key: string]: unknown;
124
+ }[]): ErrorMessage;
125
+ /**
126
+ * Create a complete message
127
+ */
128
+ export declare function createCompleteMessage(id: string): CompleteMessage;
129
+ /**
130
+ * Create a pong message
131
+ */
132
+ export declare function createPongMessage(payload?: Record<string, unknown>): PongMessage;
133
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @leaven-graphql/ws - PubSub implementation
3
+ *
4
+ * Copyright 2026 Pegasus Heavy Industries LLC
5
+ * Licensed under the Apache License, Version 2.0
6
+ */
7
+ /**
8
+ * Subscribe function type
9
+ */
10
+ export type SubscribeFn<T = unknown> = (topic: string, callback: (payload: T) => void) => () => void;
11
+ /**
12
+ * Publish function type
13
+ */
14
+ export type PublishFn<T = unknown> = (topic: string, payload: T) => void;
15
+ /**
16
+ * PubSub engine interface
17
+ */
18
+ export interface PubSubEngine {
19
+ subscribe: SubscribeFn;
20
+ publish: PublishFn;
21
+ }
22
+ /**
23
+ * PubSub configuration
24
+ */
25
+ export interface PubSubConfig {
26
+ /** Maximum subscribers per topic */
27
+ maxSubscribersPerTopic?: number;
28
+ /** Enable topic wildcards */
29
+ wildcards?: boolean;
30
+ }
31
+ /**
32
+ * In-memory PubSub implementation
33
+ */
34
+ export declare class PubSub implements PubSubEngine {
35
+ private readonly subscribers;
36
+ private readonly maxSubscribersPerTopic;
37
+ private readonly wildcards;
38
+ private nextId;
39
+ constructor(config?: PubSubConfig);
40
+ /**
41
+ * Subscribe to a topic
42
+ */
43
+ subscribe<T = unknown>(topic: string, callback: (payload: T) => void): () => void;
44
+ /**
45
+ * Publish to a topic
46
+ */
47
+ publish<T = unknown>(topic: string, payload: T): void;
48
+ /**
49
+ * Publish to wildcard subscribers
50
+ */
51
+ private publishToWildcards;
52
+ /**
53
+ * Check if a topic pattern matches
54
+ */
55
+ private matchesWildcard;
56
+ /**
57
+ * Create an async iterator for a topic
58
+ */
59
+ asyncIterator<T = unknown>(topic: string | string[]): AsyncIterableIterator<T>;
60
+ /**
61
+ * Get the number of subscribers for a topic
62
+ */
63
+ getSubscriberCount(topic: string): number;
64
+ /**
65
+ * Get all topics with subscribers
66
+ */
67
+ getTopics(): string[];
68
+ /**
69
+ * Clear all subscriptions
70
+ */
71
+ clear(): void;
72
+ }
73
+ /**
74
+ * Create a new PubSub instance
75
+ */
76
+ export declare function createPubSub(config?: PubSubConfig): PubSub;
77
+ //# sourceMappingURL=pubsub.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../src/pubsub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,OAAO,IAAI,CACrC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,KAC3B,MAAM,IAAI,CAAC;AAEhB;;GAEG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;AAEzE;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,WAAW,CAAC;IACvB,OAAO,EAAE,SAAS,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,oCAAoC;IACpC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6BAA6B;IAC7B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAUD;;GAEG;AACH,qBAAa,MAAO,YAAW,YAAY;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA+B;IAC3D,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAS;IAChD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAU;IACpC,OAAO,CAAC,MAAM,CAAS;gBAEX,MAAM,GAAE,YAAiB;IAOrC;;OAEG;IACI,SAAS,CAAC,CAAC,GAAG,OAAO,EAC1B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,GAC7B,MAAM,IAAI;IA4Bb;;OAEG;IACI,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI;IAmB5D;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgB1B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACI,aAAa,CAAC,CAAC,GAAG,OAAO,EAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GACvB,qBAAqB,CAAC,CAAC,CAAC;IA8D3B;;OAEG;IACI,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIhD;;OAEG;IACI,SAAS,IAAI,MAAM,EAAE;IAI5B;;OAEG;IACI,KAAK,IAAI,IAAI;CAGrB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAE1D"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@leaven-graphql/ws",
3
+ "version": "0.1.0",
4
+ "description": "WebSocket subscriptions support for Leaven GraphQL",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "keywords": [
19
+ "graphql",
20
+ "bun",
21
+ "websocket",
22
+ "subscriptions"
23
+ ],
24
+ "author": "Pegasus Heavy Industries LLC",
25
+ "license": "Apache-2.0",
26
+ "dependencies": {
27
+ "graphql": "^16.8.0",
28
+ "@leaven-graphql/core": "0.1.0",
29
+ "@leaven-graphql/context": "0.1.0",
30
+ "@leaven-graphql/errors": "0.1.0"
31
+ },
32
+ "devDependencies": {
33
+ "@types/bun": "^1.1.0",
34
+ "typescript": "^5.3.0"
35
+ },
36
+ "peerDependencies": {
37
+ "graphql": "^16.0.0"
38
+ },
39
+ "scripts": {
40
+ "build": "bun build ./src/index.ts --outdir ./dist --target bun && tsc -p tsconfig.build.json",
41
+ "clean": "rm -rf dist",
42
+ "test": "bun test",
43
+ "typecheck": "tsc --noEmit"
44
+ }
45
+ }