@hop-top/xrr 0.1.0-alpha.4 → 0.1.0-alpha.5

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 (94) hide show
  1. package/dist/adapters/exec.d.ts.map +1 -0
  2. package/dist/adapters/exec.js.map +1 -0
  3. package/dist/adapters/fs.d.ts.map +1 -0
  4. package/dist/adapters/fs.js.map +1 -0
  5. package/dist/adapters/grpc.d.ts +143 -0
  6. package/dist/adapters/grpc.d.ts.map +1 -0
  7. package/dist/adapters/grpc.js +532 -0
  8. package/dist/adapters/grpc.js.map +1 -0
  9. package/dist/adapters/http.d.ts.map +1 -0
  10. package/dist/adapters/http.js.map +1 -0
  11. package/dist/adapters/redis.d.ts.map +1 -0
  12. package/dist/adapters/redis.js.map +1 -0
  13. package/dist/adapters/sql.d.ts.map +1 -0
  14. package/dist/adapters/sql.js.map +1 -0
  15. package/dist/cassette.d.ts +28 -0
  16. package/dist/cassette.d.ts.map +1 -0
  17. package/dist/cassette.js +127 -0
  18. package/dist/cassette.js.map +1 -0
  19. package/dist/index.d.ts +30 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +18 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/redact.d.ts +63 -0
  24. package/dist/redact.d.ts.map +1 -0
  25. package/dist/redact.js +191 -0
  26. package/dist/redact.js.map +1 -0
  27. package/dist/session.d.ts +69 -0
  28. package/dist/session.d.ts.map +1 -0
  29. package/dist/session.js +147 -0
  30. package/dist/session.js.map +1 -0
  31. package/dist/stream.d.ts +76 -0
  32. package/dist/stream.d.ts.map +1 -0
  33. package/dist/stream.js +250 -0
  34. package/dist/stream.js.map +1 -0
  35. package/dist/streamScrub.d.ts +79 -0
  36. package/dist/streamScrub.d.ts.map +1 -0
  37. package/dist/streamScrub.js +12 -0
  38. package/dist/streamScrub.js.map +1 -0
  39. package/dist/streamSession.d.ts +169 -0
  40. package/dist/streamSession.d.ts.map +1 -0
  41. package/dist/streamSession.js +280 -0
  42. package/dist/streamSession.js.map +1 -0
  43. package/dist/streamfp.d.ts +84 -0
  44. package/dist/streamfp.d.ts.map +1 -0
  45. package/dist/streamfp.js +115 -0
  46. package/dist/streamfp.js.map +1 -0
  47. package/dist/xrr.d.ts.map +1 -0
  48. package/dist/xrr.js.map +1 -0
  49. package/package.json +25 -2
  50. package/src/adapters/grpc.ts +697 -0
  51. package/src/cassette.ts +121 -17
  52. package/src/index.ts +64 -0
  53. package/src/redact.ts +207 -0
  54. package/src/session.ts +131 -1
  55. package/src/stream.ts +302 -0
  56. package/src/streamScrub.ts +94 -0
  57. package/src/streamSession.ts +309 -0
  58. package/src/streamfp.ts +171 -0
  59. package/dist/src/adapters/exec.d.ts.map +0 -1
  60. package/dist/src/adapters/exec.js.map +0 -1
  61. package/dist/src/adapters/fs.d.ts.map +0 -1
  62. package/dist/src/adapters/fs.js.map +0 -1
  63. package/dist/src/adapters/http.d.ts.map +0 -1
  64. package/dist/src/adapters/http.js.map +0 -1
  65. package/dist/src/adapters/redis.d.ts.map +0 -1
  66. package/dist/src/adapters/redis.js.map +0 -1
  67. package/dist/src/adapters/sql.d.ts.map +0 -1
  68. package/dist/src/adapters/sql.js.map +0 -1
  69. package/dist/src/cassette.d.ts +0 -13
  70. package/dist/src/cassette.d.ts.map +0 -1
  71. package/dist/src/cassette.js +0 -54
  72. package/dist/src/cassette.js.map +0 -1
  73. package/dist/src/index.d.ts +0 -18
  74. package/dist/src/index.d.ts.map +0 -1
  75. package/dist/src/index.js +0 -12
  76. package/dist/src/index.js.map +0 -1
  77. package/dist/src/session.d.ts +0 -13
  78. package/dist/src/session.d.ts.map +0 -1
  79. package/dist/src/session.js +0 -46
  80. package/dist/src/session.js.map +0 -1
  81. package/dist/src/xrr.d.ts.map +0 -1
  82. package/dist/src/xrr.js.map +0 -1
  83. /package/dist/{src/adapters → adapters}/exec.d.ts +0 -0
  84. /package/dist/{src/adapters → adapters}/exec.js +0 -0
  85. /package/dist/{src/adapters → adapters}/fs.d.ts +0 -0
  86. /package/dist/{src/adapters → adapters}/fs.js +0 -0
  87. /package/dist/{src/adapters → adapters}/http.d.ts +0 -0
  88. /package/dist/{src/adapters → adapters}/http.js +0 -0
  89. /package/dist/{src/adapters → adapters}/redis.d.ts +0 -0
  90. /package/dist/{src/adapters → adapters}/redis.js +0 -0
  91. /package/dist/{src/adapters → adapters}/sql.d.ts +0 -0
  92. /package/dist/{src/adapters → adapters}/sql.js +0 -0
  93. /package/dist/{src/xrr.d.ts → xrr.d.ts} +0 -0
  94. /package/dist/{src/xrr.js → xrr.js} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.d.ts","sourceRoot":"","sources":["../../src/adapters/exec.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAUD,qBAAa,WAAY,YAAW,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC;IACpE,QAAQ,CAAC,EAAE,UAAU;IAEf,WAAW,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAOpD,YAAY,CAAC,GAAG,EAAE,WAAW,GAAG,OAAO;IAIvC,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO;IAI1C,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW;IAI1C,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY;CAG7C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exec.js","sourceRoot":"","sources":["../../src/adapters/exec.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAgBzC,SAAS,UAAU,CAAC,GAA4B;IAC9C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACb,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,WAAW;IACb,EAAE,GAAG,MAAM,CAAC;IAErB,KAAK,CAAC,WAAW,CAAC,GAAgB;QAChC,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAC9B,UAAU,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CACvD,CAAC;QACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,YAAY,CAAC,GAAgB;QAC3B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa,CAAC,IAAkB;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,OAAO,IAAmB,CAAC;IAC7B,CAAC;IAED,eAAe,CAAC,IAAa;QAC3B,OAAO,IAAoB,CAAC;IAC9B,CAAC;CACF"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../../src/adapters/fs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,IAAI,GACZ,OAAO,GACP,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,OAAO,GACP,SAAS,GACT,UAAU,GACV,UAAU,CAAC;AAEf,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,IAAI,CAAC;IACT,IAAI,EAAE,MAAM,CAAC;IACb,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAUD,qBAAa,SAAU,YAAW,OAAO,CAAC,SAAS,EAAE,UAAU,CAAC;IAC9D,QAAQ,CAAC,EAAE,QAAQ;IAEb,WAAW,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;IAmClD,YAAY,CAAC,GAAG,EAAE,SAAS,GAAG,OAAO;IAIrC,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO;IAIxC,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS;IAIxC,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU;CAG3C"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/adapters/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAiCzC,SAAS,UAAU,CAAC,GAA4B;IAC9C,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;SACb,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,SAAS;IACX,EAAE,GAAG,IAAI,CAAC;IAEnB,KAAK,CAAC,WAAW,CAAC,GAAc;QAC9B,MAAM,MAAM,GAA4B;YACtC,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,IAAI,EAAE,GAAG,CAAC,IAAI;SACf,CAAC;QACF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,WAAW,GAAG,UAAU,CAAC,QAAQ,CAAC;iBACtC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;iBACxB,MAAM,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC;QACvB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,IAAI,GAAG,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;YAC3B,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC;QAC1B,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACrD,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED,YAAY,CAAC,GAAc;QACzB,OAAO,GAAG,CAAC;IACb,CAAC;IAED,aAAa,CAAC,IAAgB;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CAAC,IAAa;QAC1B,OAAO,IAAiB,CAAC;IAC3B,CAAC;IAED,eAAe,CAAC,IAAa;QAC3B,OAAO,IAAkB,CAAC;IAC5B,CAAC;CACF"}
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Streaming gRPC adapter — records and replays server-, client-, and
3
+ * bidi-streamed RPCs through a @grpc/grpc-js client interceptor, on top of
4
+ * the core stream session API. See spec/cassette-format-streaming.md (gRPC
5
+ * Adapter Mapping) for the normative semantics.
6
+ *
7
+ * This is a recording seam, not a gRPC implementation. grpc-js composes
8
+ * client interceptors into a chain whose bottom link owns the channel; an
9
+ * interceptor returns an `InterceptingCall` wrapping the next link. The
10
+ * adapter dispatches on session mode at that seam:
11
+ *
12
+ * - passthrough: return the next call untouched.
13
+ * - record: wrap the next call, teeing every observed event (send frame,
14
+ * recv frame, half-close, terminal) into a StreamRecording.
15
+ * - replay: return an InterceptingCall over a synthetic bottom call that
16
+ * never touches the channel — frames and the terminal are served from
17
+ * the cassette, so no connection is attempted.
18
+ *
19
+ * Messages cross the interceptor boundary as *deserialized* objects:
20
+ * grpc-js serializes below the interceptor chain. Frames must hold
21
+ * protobuf wire bytes (spec: message_b64), so the adapter converts at the
22
+ * seam using the method's own codec — `requestSerialize` for sends (present
23
+ * on the interceptor's method_definition) and the service definition's
24
+ * `responseSerialize` / `responseDeserialize` for recvs. The runtime
25
+ * method_definition carries only the client half of the codec, which is why
26
+ * the adapter is constructed with the service definitions it records.
27
+ */
28
+ import type { ReqStream, StreamType, StreamedInteraction } from "../stream.js";
29
+ import type { FileSession } from "../session.js";
30
+ /** grpc-js `StatusObject`. */
31
+ export interface GrpcStatus {
32
+ code: number;
33
+ details: string;
34
+ metadata?: unknown;
35
+ }
36
+ /** grpc-js `InterceptingListener` (partial, as the bottom call sees it). */
37
+ export interface GrpcListener {
38
+ onReceiveMetadata?: (metadata: unknown) => void;
39
+ onReceiveMessage?: (message: unknown) => void;
40
+ onReceiveStatus?: (status: GrpcStatus) => void;
41
+ }
42
+ /** grpc-js `InterceptingCallInterface` — the bottom-call contract. */
43
+ export interface GrpcCall {
44
+ start(metadata: unknown, listener?: GrpcListener): void;
45
+ sendMessage(message: unknown): void;
46
+ sendMessageWithContext(context: unknown, message: unknown): void;
47
+ startRead(): void;
48
+ halfClose(): void;
49
+ cancelWithStatus(code: number, details: string): void;
50
+ getPeer(): string;
51
+ getAuthContext(): unknown;
52
+ }
53
+ /** The client half of a grpc-js `MethodDefinition`, as interceptors see it. */
54
+ export interface GrpcMethodDefinition {
55
+ path: string;
56
+ requestStream: boolean;
57
+ responseStream: boolean;
58
+ requestSerialize(value: unknown): Buffer;
59
+ responseDeserialize(bytes: Buffer): unknown;
60
+ /** Present on full service definitions; absent on the interceptor's copy. */
61
+ responseSerialize?(value: unknown): Buffer;
62
+ }
63
+ /** grpc-js `InterceptorOptions`. */
64
+ export interface GrpcInterceptorOptions {
65
+ method_definition: GrpcMethodDefinition;
66
+ [key: string]: unknown;
67
+ }
68
+ export type GrpcNextCall = (options: GrpcInterceptorOptions) => GrpcCall;
69
+ /** grpc-js `Interceptor`. */
70
+ export type GrpcInterceptor = (options: GrpcInterceptorOptions, nextCall: GrpcNextCall) => GrpcCall;
71
+ /**
72
+ * The pieces of `@grpc/grpc-js` the adapter needs handed in: the
73
+ * `InterceptingCall` constructor (the library composes interceptor chains
74
+ * out of it) and the `Metadata` constructor (replay synthesizes empty
75
+ * metadata — the format records none).
76
+ */
77
+ export interface GrpcRuntime {
78
+ InterceptingCall: new (nextCall: GrpcCall, requester?: unknown) => GrpcCall;
79
+ Metadata: new () => unknown;
80
+ }
81
+ /** A grpc-js `ServiceDefinition`: method name → full method definition. */
82
+ export type GrpcServiceDefinition = Record<string, GrpcMethodDefinition>;
83
+ /** A streamed cassette addressed by a request the recording never saw. */
84
+ export declare class GrpcAdapterError extends Error {
85
+ constructor(message: string);
86
+ }
87
+ /** Splits "/pkg.Service/Method" into its service and method identifiers. */
88
+ export declare function splitFullMethod(full: string): {
89
+ service: string;
90
+ method: string;
91
+ };
92
+ /**
93
+ * Maps grpc-js request/response stream flags to the spec's stream types.
94
+ * Unary-shaped methods (neither flag) are rejected: unary RPCs keep the v1
95
+ * unary format and never migrate to the stream path.
96
+ */
97
+ export declare function streamTypeOf(md: GrpcMethodDefinition): StreamType;
98
+ /**
99
+ * Builds the recording interceptor for a session.
100
+ *
101
+ * `services` supplies the full method definitions (including
102
+ * `responseSerialize`) keyed by their `path`, because the interceptor's own
103
+ * `method_definition` carries only the client half of the codec while recv
104
+ * frames must be persisted as wire bytes. Pass the `service` property of
105
+ * every generated client the session records (or any package definition
106
+ * entry); the constructor indexes them by path.
107
+ */
108
+ export declare class GrpcStreamAdapter {
109
+ private readonly session;
110
+ private readonly runtime;
111
+ readonly id = "grpc";
112
+ private readonly byPath;
113
+ constructor(session: FileSession, runtime: GrpcRuntime, services?: GrpcServiceDefinition[]);
114
+ /** Indexes one service definition's methods by their full path. */
115
+ registerService(service: GrpcServiceDefinition): this;
116
+ /**
117
+ * The grpc-js client interceptor. Pass it as `{ interceptors: [...] }` in
118
+ * client options (or per call). Streamed RPCs are recorded, replayed, or
119
+ * passed through per session mode; unary RPCs are rejected loudly rather
120
+ * than silently bypassed, so a misrouted call cannot look recorded.
121
+ */
122
+ interceptor(): GrpcInterceptor;
123
+ /**
124
+ * Resolves the codec for a method: the interceptor's own definition for
125
+ * the request half, the registered service definition for the response
126
+ * half. A recv-carrying method with no registered service definition
127
+ * fails loudly — silently skipping recv frames would write a cassette
128
+ * that replays as a truncated stream.
129
+ */
130
+ private codec;
131
+ }
132
+ /**
133
+ * Internal drain hook: resolves once every queued record/replay step has
134
+ * settled. grpc-js's call surface is synchronous while cassette IO is not,
135
+ * so the adapter serializes its work on an internal chain; tests that drive
136
+ * a call directly (rather than through a real client's IO) await this to
137
+ * observe a settled call. Not part of the public API.
138
+ */
139
+ export declare const drainCall: unique symbol;
140
+ /** Awaits a call's internal chain when it exposes the drain hook. */
141
+ export declare function drain(call: unknown): Promise<void>;
142
+ export type { ReqStream, StreamedInteraction };
143
+ //# sourceMappingURL=grpc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc.d.ts","sourceRoot":"","sources":["../../src/adapters/grpc.ts"],"names":[],"mappings":"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"}