@advicenxt/sbp-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.
Files changed (63) hide show
  1. package/benchmarks/bench.ts +272 -0
  2. package/dist/auth.d.ts +20 -0
  3. package/dist/auth.d.ts.map +1 -0
  4. package/dist/auth.js +69 -0
  5. package/dist/auth.js.map +1 -0
  6. package/dist/blackboard.d.ts +84 -0
  7. package/dist/blackboard.d.ts.map +1 -0
  8. package/dist/blackboard.js +502 -0
  9. package/dist/blackboard.js.map +1 -0
  10. package/dist/cli.d.ts +7 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +102 -0
  13. package/dist/cli.js.map +1 -0
  14. package/dist/conditions.d.ts +27 -0
  15. package/dist/conditions.d.ts.map +1 -0
  16. package/dist/conditions.js +240 -0
  17. package/dist/conditions.js.map +1 -0
  18. package/dist/decay.d.ts +21 -0
  19. package/dist/decay.d.ts.map +1 -0
  20. package/dist/decay.js +88 -0
  21. package/dist/decay.js.map +1 -0
  22. package/dist/index.d.ts +13 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +13 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/rate-limiter.d.ts +21 -0
  27. package/dist/rate-limiter.d.ts.map +1 -0
  28. package/dist/rate-limiter.js +75 -0
  29. package/dist/rate-limiter.js.map +1 -0
  30. package/dist/server.d.ts +63 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +401 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/store.d.ts +54 -0
  35. package/dist/store.d.ts.map +1 -0
  36. package/dist/store.js +55 -0
  37. package/dist/store.js.map +1 -0
  38. package/dist/types.d.ts +247 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +26 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/validation.d.ts +296 -0
  43. package/dist/validation.d.ts.map +1 -0
  44. package/dist/validation.js +205 -0
  45. package/dist/validation.js.map +1 -0
  46. package/eslint.config.js +26 -0
  47. package/package.json +66 -0
  48. package/src/auth.ts +89 -0
  49. package/src/blackboard.test.ts +287 -0
  50. package/src/blackboard.ts +651 -0
  51. package/src/cli.ts +116 -0
  52. package/src/conditions.ts +305 -0
  53. package/src/conformance.test.ts +686 -0
  54. package/src/decay.ts +103 -0
  55. package/src/index.ts +24 -0
  56. package/src/rate-limiter.ts +104 -0
  57. package/src/server.integration.test.ts +436 -0
  58. package/src/server.ts +500 -0
  59. package/src/store.ts +108 -0
  60. package/src/types.ts +314 -0
  61. package/src/validation.ts +251 -0
  62. package/tsconfig.eslint.json +5 -0
  63. package/tsconfig.json +20 -0
@@ -0,0 +1,247 @@
1
+ /**
2
+ * SBP Core Types
3
+ * Stigmergic Blackboard Protocol v0.1
4
+ */
5
+ export interface ExponentialDecay {
6
+ type: "exponential";
7
+ half_life_ms: number;
8
+ }
9
+ export interface LinearDecay {
10
+ type: "linear";
11
+ rate_per_ms: number;
12
+ }
13
+ export interface StepDecay {
14
+ type: "step";
15
+ steps: Array<{
16
+ at_ms: number;
17
+ intensity: number;
18
+ }>;
19
+ }
20
+ export interface ImmortalDecay {
21
+ type: "immortal";
22
+ }
23
+ export type DecayModel = ExponentialDecay | LinearDecay | StepDecay | ImmortalDecay;
24
+ export interface Pheromone {
25
+ id: string;
26
+ trail: string;
27
+ type: string;
28
+ emitted_at: number;
29
+ last_reinforced_at: number;
30
+ initial_intensity: number;
31
+ decay_model: DecayModel;
32
+ payload: Record<string, unknown>;
33
+ source_agent?: string;
34
+ tags: string[];
35
+ ttl_floor: number;
36
+ }
37
+ export interface PheromoneSnapshot {
38
+ id: string;
39
+ trail: string;
40
+ type: string;
41
+ current_intensity: number;
42
+ payload: Record<string, unknown>;
43
+ age_ms: number;
44
+ tags: string[];
45
+ }
46
+ export interface TagFilter {
47
+ any?: string[];
48
+ all?: string[];
49
+ none?: string[];
50
+ }
51
+ export interface ThresholdCondition {
52
+ type: "threshold";
53
+ trail: string;
54
+ signal_type: string;
55
+ tags?: TagFilter;
56
+ aggregation: "sum" | "max" | "avg" | "count" | "any";
57
+ operator: ">=" | ">" | "<=" | "<" | "==" | "!=";
58
+ value: number;
59
+ }
60
+ export interface CompositeCondition {
61
+ type: "composite";
62
+ operator: "and" | "or" | "not";
63
+ conditions: ScentCondition[];
64
+ }
65
+ export interface RateCondition {
66
+ type: "rate";
67
+ trail: string;
68
+ signal_type: string;
69
+ metric: "emissions_per_second" | "intensity_delta";
70
+ window_ms: number;
71
+ operator: ">=" | ">" | "<=" | "<";
72
+ value: number;
73
+ }
74
+ export interface PatternCondition {
75
+ type: "pattern";
76
+ /** Sequence of pheromone types to match */
77
+ sequence: Array<{
78
+ trail: string;
79
+ signal_type: string;
80
+ min_intensity?: number;
81
+ }>;
82
+ /** Time window in which the full sequence must appear */
83
+ window_ms: number;
84
+ /** Whether the sequence must appear in order (default: true) */
85
+ ordered?: boolean;
86
+ }
87
+ export type ScentCondition = ThresholdCondition | CompositeCondition | RateCondition | PatternCondition;
88
+ export type MergeStrategy = "reinforce" | "replace" | "max" | "add" | "new";
89
+ export type TriggerMode = "level" | "edge_rising" | "edge_falling";
90
+ export interface Scent {
91
+ scent_id: string;
92
+ agent_endpoint: string;
93
+ condition: ScentCondition;
94
+ cooldown_ms: number;
95
+ activation_payload: Record<string, unknown>;
96
+ trigger_mode: TriggerMode;
97
+ hysteresis: number;
98
+ max_execution_ms: number;
99
+ last_triggered_at: number | null;
100
+ last_condition_met: boolean;
101
+ context_trails?: string[];
102
+ }
103
+ export interface EmitParams {
104
+ trail: string;
105
+ type: string;
106
+ intensity: number;
107
+ decay?: DecayModel;
108
+ payload?: Record<string, unknown>;
109
+ tags?: string[];
110
+ merge_strategy?: MergeStrategy;
111
+ source_agent?: string;
112
+ }
113
+ export interface EmitResult {
114
+ pheromone_id: string;
115
+ action: "created" | "reinforced" | "replaced" | "merged";
116
+ previous_intensity?: number;
117
+ new_intensity: number;
118
+ }
119
+ export interface SniffParams {
120
+ trails?: string[];
121
+ types?: string[];
122
+ min_intensity?: number;
123
+ max_age_ms?: number;
124
+ tags?: TagFilter;
125
+ limit?: number;
126
+ include_evaporated?: boolean;
127
+ }
128
+ export interface AggregateStats {
129
+ count: number;
130
+ sum_intensity: number;
131
+ max_intensity: number;
132
+ avg_intensity: number;
133
+ }
134
+ export interface SniffResult {
135
+ timestamp: number;
136
+ pheromones: PheromoneSnapshot[];
137
+ aggregates: Record<string, AggregateStats>;
138
+ }
139
+ export interface RegisterScentParams {
140
+ scent_id: string;
141
+ agent_endpoint: string;
142
+ condition: ScentCondition;
143
+ cooldown_ms?: number;
144
+ activation_payload?: Record<string, unknown>;
145
+ trigger_mode?: TriggerMode;
146
+ hysteresis?: number;
147
+ max_execution_ms?: number;
148
+ context_trails?: string[];
149
+ }
150
+ export interface RegisterScentResult {
151
+ scent_id: string;
152
+ status: "registered" | "updated";
153
+ current_condition_state: {
154
+ met: boolean;
155
+ partial?: Record<string, boolean>;
156
+ };
157
+ }
158
+ export interface DeregisterScentParams {
159
+ scent_id: string;
160
+ }
161
+ export interface DeregisterScentResult {
162
+ scent_id: string;
163
+ status: "deregistered" | "not_found";
164
+ }
165
+ export interface TriggerPayload {
166
+ scent_id: string;
167
+ triggered_at: number;
168
+ condition_snapshot: Record<string, {
169
+ value: number;
170
+ pheromone_ids: string[];
171
+ }>;
172
+ context_pheromones: PheromoneSnapshot[];
173
+ activation_payload: Record<string, unknown>;
174
+ }
175
+ export interface EvaporateParams {
176
+ trail?: string;
177
+ types?: string[];
178
+ older_than_ms?: number;
179
+ below_intensity?: number;
180
+ tags?: TagFilter;
181
+ }
182
+ export interface EvaporateResult {
183
+ evaporated_count: number;
184
+ trails_affected: string[];
185
+ }
186
+ export interface InspectParams {
187
+ include?: Array<"trails" | "scents" | "stats">;
188
+ }
189
+ export interface TrailInfo {
190
+ name: string;
191
+ pheromone_count: number;
192
+ total_intensity: number;
193
+ avg_intensity: number;
194
+ }
195
+ export interface ScentInfo {
196
+ scent_id: string;
197
+ agent_endpoint: string;
198
+ condition_met: boolean;
199
+ in_cooldown: boolean;
200
+ last_triggered_at: number | null;
201
+ }
202
+ export interface InspectResult {
203
+ timestamp: number;
204
+ trails?: TrailInfo[];
205
+ scents?: ScentInfo[];
206
+ stats?: {
207
+ total_pheromones: number;
208
+ active_pheromones: number;
209
+ total_scents: number;
210
+ uptime_ms: number;
211
+ };
212
+ }
213
+ export interface JsonRpcRequest<T = unknown> {
214
+ jsonrpc: "2.0";
215
+ id: string | number;
216
+ method: string;
217
+ params: T;
218
+ }
219
+ export interface JsonRpcSuccessResponse<T = unknown> {
220
+ jsonrpc: "2.0";
221
+ id: string | number;
222
+ result: T;
223
+ }
224
+ export interface JsonRpcErrorResponse {
225
+ jsonrpc: "2.0";
226
+ id: string | number | null;
227
+ error: {
228
+ code: number;
229
+ message: string;
230
+ data?: unknown;
231
+ };
232
+ }
233
+ export type JsonRpcResponse<T = unknown> = JsonRpcSuccessResponse<T> | JsonRpcErrorResponse;
234
+ export declare const SBP_ERROR_CODES: {
235
+ readonly TRAIL_NOT_FOUND: -32001;
236
+ readonly SCENT_NOT_FOUND: -32002;
237
+ readonly PAYLOAD_VALIDATION_FAILED: -32003;
238
+ readonly RATE_LIMITED: -32004;
239
+ readonly UNAUTHORIZED: -32005;
240
+ readonly INVALID_CONDITION: -32006;
241
+ };
242
+ export declare class SbpError extends Error {
243
+ code: number;
244
+ data?: unknown | undefined;
245
+ constructor(code: number, message: string, data?: unknown | undefined);
246
+ }
247
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * SBP Core Types
3
+ * Stigmergic Blackboard Protocol v0.1
4
+ */
5
+ // ============================================================================
6
+ // ERROR CODES
7
+ // ============================================================================
8
+ export const SBP_ERROR_CODES = {
9
+ TRAIL_NOT_FOUND: -32001,
10
+ SCENT_NOT_FOUND: -32002,
11
+ PAYLOAD_VALIDATION_FAILED: -32003,
12
+ RATE_LIMITED: -32004,
13
+ UNAUTHORIZED: -32005,
14
+ INVALID_CONDITION: -32006,
15
+ };
16
+ export class SbpError extends Error {
17
+ code;
18
+ data;
19
+ constructor(code, message, data) {
20
+ super(message);
21
+ this.code = code;
22
+ this.data = data;
23
+ this.name = "SbpError";
24
+ }
25
+ }
26
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgSH,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,eAAe,EAAE,CAAC,KAAK;IACvB,eAAe,EAAE,CAAC,KAAK;IACvB,yBAAyB,EAAE,CAAC,KAAK;IACjC,YAAY,EAAE,CAAC,KAAK;IACpB,YAAY,EAAE,CAAC,KAAK;IACpB,iBAAiB,EAAE,CAAC,KAAK;CACjB,CAAC;AAEX,MAAM,OAAO,QAAS,SAAQ,KAAK;IAExB;IAEA;IAHT,YACS,IAAY,EACnB,OAAe,EACR,IAAc;QAErB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAQ;QAEZ,SAAI,GAAJ,IAAI,CAAU;QAGrB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,296 @@
1
+ /**
2
+ * SBP Input Validation
3
+ * Zod schemas for all JSON-RPC params and protocol messages
4
+ */
5
+ import { z } from "zod";
6
+ export declare const EmitParamsSchema: z.ZodObject<{
7
+ trail: z.ZodString;
8
+ type: z.ZodString;
9
+ intensity: z.ZodNumber;
10
+ decay: z.ZodOptional<z.ZodDiscriminatedUnion<"type", [z.ZodObject<{
11
+ type: z.ZodLiteral<"exponential">;
12
+ half_life_ms: z.ZodNumber;
13
+ }, "strip", z.ZodTypeAny, {
14
+ half_life_ms: number;
15
+ type: "exponential";
16
+ }, {
17
+ half_life_ms: number;
18
+ type: "exponential";
19
+ }>, z.ZodObject<{
20
+ type: z.ZodLiteral<"linear">;
21
+ rate_per_ms: z.ZodNumber;
22
+ }, "strip", z.ZodTypeAny, {
23
+ type: "linear";
24
+ rate_per_ms: number;
25
+ }, {
26
+ type: "linear";
27
+ rate_per_ms: number;
28
+ }>, z.ZodObject<{
29
+ type: z.ZodLiteral<"step">;
30
+ steps: z.ZodArray<z.ZodObject<{
31
+ at_ms: z.ZodNumber;
32
+ intensity: z.ZodNumber;
33
+ }, "strip", z.ZodTypeAny, {
34
+ intensity: number;
35
+ at_ms: number;
36
+ }, {
37
+ intensity: number;
38
+ at_ms: number;
39
+ }>, "many">;
40
+ }, "strip", z.ZodTypeAny, {
41
+ type: "step";
42
+ steps: {
43
+ intensity: number;
44
+ at_ms: number;
45
+ }[];
46
+ }, {
47
+ type: "step";
48
+ steps: {
49
+ intensity: number;
50
+ at_ms: number;
51
+ }[];
52
+ }>, z.ZodObject<{
53
+ type: z.ZodLiteral<"immortal">;
54
+ }, "strip", z.ZodTypeAny, {
55
+ type: "immortal";
56
+ }, {
57
+ type: "immortal";
58
+ }>]>>;
59
+ payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
60
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
61
+ merge_strategy: z.ZodOptional<z.ZodEnum<["reinforce", "replace", "max", "add", "new"]>>;
62
+ source_agent: z.ZodOptional<z.ZodString>;
63
+ }, "strip", z.ZodTypeAny, {
64
+ trail: string;
65
+ type: string;
66
+ intensity: number;
67
+ decay?: {
68
+ half_life_ms: number;
69
+ type: "exponential";
70
+ } | {
71
+ type: "linear";
72
+ rate_per_ms: number;
73
+ } | {
74
+ type: "step";
75
+ steps: {
76
+ intensity: number;
77
+ at_ms: number;
78
+ }[];
79
+ } | {
80
+ type: "immortal";
81
+ } | undefined;
82
+ payload?: Record<string, unknown> | undefined;
83
+ tags?: string[] | undefined;
84
+ merge_strategy?: "max" | "reinforce" | "replace" | "add" | "new" | undefined;
85
+ source_agent?: string | undefined;
86
+ }, {
87
+ trail: string;
88
+ type: string;
89
+ intensity: number;
90
+ decay?: {
91
+ half_life_ms: number;
92
+ type: "exponential";
93
+ } | {
94
+ type: "linear";
95
+ rate_per_ms: number;
96
+ } | {
97
+ type: "step";
98
+ steps: {
99
+ intensity: number;
100
+ at_ms: number;
101
+ }[];
102
+ } | {
103
+ type: "immortal";
104
+ } | undefined;
105
+ payload?: Record<string, unknown> | undefined;
106
+ tags?: string[] | undefined;
107
+ merge_strategy?: "max" | "reinforce" | "replace" | "add" | "new" | undefined;
108
+ source_agent?: string | undefined;
109
+ }>;
110
+ export declare const SniffParamsSchema: z.ZodObject<{
111
+ trails: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
112
+ types: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
113
+ min_intensity: z.ZodOptional<z.ZodNumber>;
114
+ max_age_ms: z.ZodOptional<z.ZodNumber>;
115
+ tags: z.ZodOptional<z.ZodObject<{
116
+ any: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
117
+ all: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
118
+ none: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
119
+ }, "strict", z.ZodTypeAny, {
120
+ any?: string[] | undefined;
121
+ all?: string[] | undefined;
122
+ none?: string[] | undefined;
123
+ }, {
124
+ any?: string[] | undefined;
125
+ all?: string[] | undefined;
126
+ none?: string[] | undefined;
127
+ }>>;
128
+ limit: z.ZodOptional<z.ZodNumber>;
129
+ include_evaporated: z.ZodOptional<z.ZodBoolean>;
130
+ }, "strip", z.ZodTypeAny, {
131
+ trails?: string[] | undefined;
132
+ tags?: {
133
+ any?: string[] | undefined;
134
+ all?: string[] | undefined;
135
+ none?: string[] | undefined;
136
+ } | undefined;
137
+ types?: string[] | undefined;
138
+ min_intensity?: number | undefined;
139
+ max_age_ms?: number | undefined;
140
+ limit?: number | undefined;
141
+ include_evaporated?: boolean | undefined;
142
+ }, {
143
+ trails?: string[] | undefined;
144
+ tags?: {
145
+ any?: string[] | undefined;
146
+ all?: string[] | undefined;
147
+ none?: string[] | undefined;
148
+ } | undefined;
149
+ types?: string[] | undefined;
150
+ min_intensity?: number | undefined;
151
+ max_age_ms?: number | undefined;
152
+ limit?: number | undefined;
153
+ include_evaporated?: boolean | undefined;
154
+ }>;
155
+ export declare const RegisterScentParamsSchema: z.ZodObject<{
156
+ scent_id: z.ZodString;
157
+ agent_endpoint: z.ZodDefault<z.ZodOptional<z.ZodString>>;
158
+ condition: z.ZodType<any, z.ZodTypeDef, any>;
159
+ cooldown_ms: z.ZodOptional<z.ZodNumber>;
160
+ activation_payload: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
161
+ trigger_mode: z.ZodOptional<z.ZodEnum<["level", "edge_rising", "edge_falling"]>>;
162
+ hysteresis: z.ZodOptional<z.ZodNumber>;
163
+ max_execution_ms: z.ZodOptional<z.ZodNumber>;
164
+ context_trails: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
165
+ }, "strip", z.ZodTypeAny, {
166
+ scent_id: string;
167
+ agent_endpoint: string;
168
+ condition?: any;
169
+ cooldown_ms?: number | undefined;
170
+ activation_payload?: Record<string, unknown> | undefined;
171
+ trigger_mode?: "level" | "edge_rising" | "edge_falling" | undefined;
172
+ hysteresis?: number | undefined;
173
+ max_execution_ms?: number | undefined;
174
+ context_trails?: string[] | undefined;
175
+ }, {
176
+ scent_id: string;
177
+ agent_endpoint?: string | undefined;
178
+ condition?: any;
179
+ cooldown_ms?: number | undefined;
180
+ activation_payload?: Record<string, unknown> | undefined;
181
+ trigger_mode?: "level" | "edge_rising" | "edge_falling" | undefined;
182
+ hysteresis?: number | undefined;
183
+ max_execution_ms?: number | undefined;
184
+ context_trails?: string[] | undefined;
185
+ }>;
186
+ export declare const DeregisterScentParamsSchema: z.ZodObject<{
187
+ scent_id: z.ZodString;
188
+ }, "strip", z.ZodTypeAny, {
189
+ scent_id: string;
190
+ }, {
191
+ scent_id: string;
192
+ }>;
193
+ export declare const EvaporateParamsSchema: z.ZodObject<{
194
+ trail: z.ZodOptional<z.ZodString>;
195
+ types: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
196
+ older_than_ms: z.ZodOptional<z.ZodNumber>;
197
+ below_intensity: z.ZodOptional<z.ZodNumber>;
198
+ tags: z.ZodOptional<z.ZodObject<{
199
+ any: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
200
+ all: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
201
+ none: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
202
+ }, "strict", z.ZodTypeAny, {
203
+ any?: string[] | undefined;
204
+ all?: string[] | undefined;
205
+ none?: string[] | undefined;
206
+ }, {
207
+ any?: string[] | undefined;
208
+ all?: string[] | undefined;
209
+ none?: string[] | undefined;
210
+ }>>;
211
+ }, "strip", z.ZodTypeAny, {
212
+ trail?: string | undefined;
213
+ tags?: {
214
+ any?: string[] | undefined;
215
+ all?: string[] | undefined;
216
+ none?: string[] | undefined;
217
+ } | undefined;
218
+ types?: string[] | undefined;
219
+ older_than_ms?: number | undefined;
220
+ below_intensity?: number | undefined;
221
+ }, {
222
+ trail?: string | undefined;
223
+ tags?: {
224
+ any?: string[] | undefined;
225
+ all?: string[] | undefined;
226
+ none?: string[] | undefined;
227
+ } | undefined;
228
+ types?: string[] | undefined;
229
+ older_than_ms?: number | undefined;
230
+ below_intensity?: number | undefined;
231
+ }>;
232
+ export declare const InspectParamsSchema: z.ZodObject<{
233
+ include: z.ZodOptional<z.ZodArray<z.ZodEnum<["trails", "scents", "stats"]>, "many">>;
234
+ }, "strip", z.ZodTypeAny, {
235
+ include?: ("trails" | "scents" | "stats")[] | undefined;
236
+ }, {
237
+ include?: ("trails" | "scents" | "stats")[] | undefined;
238
+ }>;
239
+ export declare const SubscribeParamsSchema: z.ZodObject<{
240
+ scent_id: z.ZodString;
241
+ }, "strip", z.ZodTypeAny, {
242
+ scent_id: string;
243
+ }, {
244
+ scent_id: string;
245
+ }>;
246
+ export declare const UnsubscribeParamsSchema: z.ZodObject<{
247
+ scent_id: z.ZodString;
248
+ }, "strip", z.ZodTypeAny, {
249
+ scent_id: string;
250
+ }, {
251
+ scent_id: string;
252
+ }>;
253
+ export declare const JsonRpcRequestSchema: z.ZodObject<{
254
+ jsonrpc: z.ZodLiteral<"2.0">;
255
+ id: z.ZodUnion<[z.ZodString, z.ZodNumber]>;
256
+ method: z.ZodString;
257
+ params: z.ZodDefault<z.ZodOptional<z.ZodUnknown>>;
258
+ }, "strip", z.ZodTypeAny, {
259
+ id: string | number;
260
+ method: string;
261
+ jsonrpc: "2.0";
262
+ params?: unknown;
263
+ }, {
264
+ id: string | number;
265
+ method: string;
266
+ jsonrpc: "2.0";
267
+ params?: unknown;
268
+ }>;
269
+ export interface ValidationError {
270
+ code: -32600 | -32602;
271
+ message: string;
272
+ data?: unknown;
273
+ }
274
+ /**
275
+ * Validate a JSON-RPC request envelope.
276
+ * Returns the parsed request or a JSON-RPC error.
277
+ */
278
+ export declare function validateEnvelope(body: unknown): {
279
+ ok: true;
280
+ request: z.infer<typeof JsonRpcRequestSchema>;
281
+ } | {
282
+ ok: false;
283
+ error: ValidationError;
284
+ };
285
+ /**
286
+ * Validate method-specific params.
287
+ * Returns the parsed params or a JSON-RPC error.
288
+ */
289
+ export declare function validateParams(method: string, params: unknown): {
290
+ ok: true;
291
+ params: unknown;
292
+ } | {
293
+ ok: false;
294
+ error: ValidationError;
295
+ };
296
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA4GxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS3B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAUpC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;EAEtC,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMhC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;EAE9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;EAEhC,CAAC;AAEH,eAAO,MAAM,uBAAuB;;;;;;EAElC,CAAC;AAMH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;EAK/B,CAAC;AAkBH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,OAAO,GACZ;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAarG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACd;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAmBvE"}