@rift-vs/rift-embedded 0.12.1-snapshot.104.g9a93306
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/dist/admin.d.ts +134 -0
- package/dist/admin.d.ts.map +1 -0
- package/dist/admin.js +310 -0
- package/dist/admin.js.map +1 -0
- package/dist/bridge.d.ts +42 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/bridge.js +53 -0
- package/dist/bridge.js.map +1 -0
- package/dist/create.d.ts +26 -0
- package/dist/create.d.ts.map +1 -0
- package/dist/create.js +90 -0
- package/dist/create.js.map +1 -0
- package/dist/debug-trace.d.ts +2 -0
- package/dist/debug-trace.d.ts.map +1 -0
- package/dist/debug-trace.js +27 -0
- package/dist/debug-trace.js.map +1 -0
- package/dist/ffi.d.ts +41 -0
- package/dist/ffi.d.ts.map +1 -0
- package/dist/ffi.js +165 -0
- package/dist/ffi.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/intercept-backend.d.ts +31 -0
- package/dist/intercept-backend.d.ts.map +1 -0
- package/dist/intercept-backend.js +37 -0
- package/dist/intercept-backend.js.map +1 -0
- package/dist/native-binding.d.ts +53 -0
- package/dist/native-binding.d.ts.map +1 -0
- package/dist/native-binding.js +35 -0
- package/dist/native-binding.js.map +1 -0
- package/dist/native-call.d.ts +77 -0
- package/dist/native-call.d.ts.map +1 -0
- package/dist/native-call.js +118 -0
- package/dist/native-call.js.map +1 -0
- package/dist/native.d.ts +76 -0
- package/dist/native.d.ts.map +1 -0
- package/dist/native.js +304 -0
- package/dist/native.js.map +1 -0
- package/dist/protocol.d.ts +30 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +7 -0
- package/dist/protocol.js.map +1 -0
- package/dist/worker.d.ts +13 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +86 -0
- package/dist/worker.js.map +1 -0
- package/package.json +49 -0
package/dist/admin.d.ts
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `EmbeddedAdmin` (issue #10) — the embedded transport's `AdminApi` implementation, backed by
|
|
3
|
+
* `librift_ffi` calls (`NativeEngineLike`) plus a local `Map<port, Imposter>` registry, and a
|
|
4
|
+
* lazily-started loopback admin plane (`AdminBridge`, over `rift_serve_admin`) for the handful of
|
|
5
|
+
* operations with no FFI symbol.
|
|
6
|
+
*
|
|
7
|
+
* Routing is deliberately FFI-first and never conditional on flags: `createImposter` always goes
|
|
8
|
+
* through `rift_create_imposter`, never the admin plane, so `inject`/scripted stubs work with no
|
|
9
|
+
* `allowInjection` flag — that flag only gates the HTTP admin surface the plane's bridge methods hit,
|
|
10
|
+
* and FFI calls never pass through it. The registry exists because several FFI calls (`rift_recorded`,
|
|
11
|
+
* `rift_replace_stubs`, ...) are scoped to a port with no "list all imposters" or "get one imposter"
|
|
12
|
+
* symbol — those are reconstructed locally from what this instance has created/observed.
|
|
13
|
+
*/
|
|
14
|
+
import type { Imposter, ImpostersConfig, RecordedRequest as WireRecordedRequest, Stub } from '@rift-vs/rift/internal';
|
|
15
|
+
import type { AdminApi, BuildInfo } from '@rift-vs/rift/internal';
|
|
16
|
+
import type { FlowScopedOptions } from '@rift-vs/rift/internal';
|
|
17
|
+
/** The subset of `NativeEngine`'s facade `EmbeddedAdmin` depends on — small enough that tests
|
|
18
|
+
* inject a FAKE returning canned FFI results, and the real `NativeEngine` satisfies it structurally
|
|
19
|
+
* as-is (see `create.ts`'s default `loadNativeEngine`). */
|
|
20
|
+
export interface NativeEngineLike {
|
|
21
|
+
readonly buildInfo: string;
|
|
22
|
+
createImposter(json: string): Promise<number>;
|
|
23
|
+
replaceStubs(port: number, json: string): Promise<number>;
|
|
24
|
+
deleteImposter(port: number): Promise<number>;
|
|
25
|
+
deleteAll(): Promise<number>;
|
|
26
|
+
applyConfig(json: string): Promise<string>;
|
|
27
|
+
recorded(port: number): Promise<string>;
|
|
28
|
+
flowStateGet(port: number, flowId: string, key: string): Promise<{
|
|
29
|
+
found: boolean;
|
|
30
|
+
value?: unknown;
|
|
31
|
+
}>;
|
|
32
|
+
flowStatePut(port: number, flowId: string, key: string, valueJson: string): Promise<number>;
|
|
33
|
+
flowStateDelete(port: number, flowId: string, key: string): Promise<number>;
|
|
34
|
+
spaceAddStub(port: number, flowId: string, json: string): Promise<number>;
|
|
35
|
+
spaceListStubs(port: number, flowId: string): Promise<string>;
|
|
36
|
+
spaceDelete(port: number, flowId: string): Promise<number>;
|
|
37
|
+
spaceRecorded(port: number, flowId: string): Promise<string>;
|
|
38
|
+
/** Intercept (TLS-MITM, issue #11) — adapted by `EmbeddedInterceptBackend`, not routed through
|
|
39
|
+
* this class (there's no imposter/registry state involved). */
|
|
40
|
+
startIntercept(optionsJson: string): Promise<Record<string, unknown>>;
|
|
41
|
+
interceptAddRules(json: string): Promise<number>;
|
|
42
|
+
interceptClearRules(): Promise<number>;
|
|
43
|
+
interceptListRules(): Promise<string>;
|
|
44
|
+
interceptCaPem(): Promise<string>;
|
|
45
|
+
interceptExportTruststore(format: string, password: string, outPath: string): Promise<number>;
|
|
46
|
+
serveAdmin(optionsJson: string): Promise<Record<string, unknown>>;
|
|
47
|
+
close(): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
/** Starts the loopback admin plane and reports where it landed. Injectable so bridge behavior
|
|
50
|
+
* (auth, routing, "starts exactly once") is testable against a fake HTTP server instead of a real
|
|
51
|
+
* `rift_serve_admin` call. */
|
|
52
|
+
export type StartAdminPlane = (native: NativeEngineLike, opts: {
|
|
53
|
+
apiKey: string;
|
|
54
|
+
}) => Promise<{
|
|
55
|
+
adminUrl: string;
|
|
56
|
+
}>;
|
|
57
|
+
export interface EmbeddedAdminOptions {
|
|
58
|
+
native: NativeEngineLike;
|
|
59
|
+
buildInfo: BuildInfo;
|
|
60
|
+
startAdminPlane?: StartAdminPlane;
|
|
61
|
+
}
|
|
62
|
+
export declare class EmbeddedAdmin implements AdminApi {
|
|
63
|
+
#private;
|
|
64
|
+
readonly url: string | undefined;
|
|
65
|
+
readonly buildInfo: BuildInfo;
|
|
66
|
+
constructor(opts: EmbeddedAdminOptions);
|
|
67
|
+
/** Starts the loopback admin plane on first use (idempotent — see `#ensurePlane`) and returns its
|
|
68
|
+
* URL. Not part of `AdminApi`; called by the `Engine.adminUrl()` hook `create.ts` wires up. */
|
|
69
|
+
adminUrl(): Promise<string>;
|
|
70
|
+
/** Always FFI — never the admin plane, so `inject`/scripted stubs work unconditionally (the
|
|
71
|
+
* plane's `allowInjection` gate only applies to bridge-routed HTTP calls, never to this path). */
|
|
72
|
+
createImposter(imposter: Imposter): Promise<Imposter>;
|
|
73
|
+
listImposters(opts?: {
|
|
74
|
+
replayable?: boolean;
|
|
75
|
+
}): Promise<ImpostersConfig>;
|
|
76
|
+
getImposter(port: number, opts?: {
|
|
77
|
+
replayable?: boolean;
|
|
78
|
+
removeProxies?: boolean;
|
|
79
|
+
}): Promise<Imposter>;
|
|
80
|
+
deleteImposter(port: number): Promise<Imposter>;
|
|
81
|
+
deleteAllImposters(): Promise<void>;
|
|
82
|
+
replaceImposters(config: ImpostersConfig): Promise<ImpostersConfig>;
|
|
83
|
+
addStub(port: number, stub: Stub, index?: number): Promise<void>;
|
|
84
|
+
replaceStubs(port: number, stubs: Stub[]): Promise<void>;
|
|
85
|
+
getStub(port: number, ref: number | {
|
|
86
|
+
id: string;
|
|
87
|
+
}): Promise<Stub>;
|
|
88
|
+
updateStub(port: number, ref: number | {
|
|
89
|
+
id: string;
|
|
90
|
+
}, stub: Stub): Promise<void>;
|
|
91
|
+
deleteStub(port: number, ref: number | {
|
|
92
|
+
id: string;
|
|
93
|
+
}): Promise<void>;
|
|
94
|
+
/** `flow_id=<id>` (the only `match` entry `engine.ts`'s `fetchRecorded` ever sends) routes to
|
|
95
|
+
* `rift_space_recorded` — the FFI's own flow-scoped journal — instead of a generic filter; any
|
|
96
|
+
* OTHER `match` entries (`field=value` / `field:key=value`) are evaluated client-side via the #6
|
|
97
|
+
* evaluator, since there is no server-side `match=` filtering to delegate to here. */
|
|
98
|
+
getSavedRequests(port: number, match?: string[]): Promise<WireRecordedRequest[]>;
|
|
99
|
+
deleteSavedRequests(port: number, match?: string[]): Promise<void>;
|
|
100
|
+
deleteSavedProxyResponses(port: number): Promise<void>;
|
|
101
|
+
enableImposter(port: number): Promise<void>;
|
|
102
|
+
disableImposter(port: number): Promise<void>;
|
|
103
|
+
getScenarios(port: number, opts?: FlowScopedOptions): Promise<{
|
|
104
|
+
flowId: string;
|
|
105
|
+
scenarios: Array<{
|
|
106
|
+
name: string;
|
|
107
|
+
state: string;
|
|
108
|
+
}>;
|
|
109
|
+
}>;
|
|
110
|
+
setScenarioState(port: number, name: string, state: string, opts?: FlowScopedOptions): Promise<void>;
|
|
111
|
+
resetScenarios(port: number, opts?: FlowScopedOptions): Promise<void>;
|
|
112
|
+
addSpaceStub(port: number, flowId: string, stub: Stub): Promise<void>;
|
|
113
|
+
listSpaceStubs(port: number, flowId: string): Promise<{
|
|
114
|
+
space: string;
|
|
115
|
+
stubs: Stub[];
|
|
116
|
+
}>;
|
|
117
|
+
/** No `rift_space_*` symbol returns the full space object — bridged (see `bridge.ts`). */
|
|
118
|
+
getSpace<T = unknown>(port: number, flowId: string): Promise<T>;
|
|
119
|
+
deleteSpace(port: number, flowId: string): Promise<void>;
|
|
120
|
+
getFlowState<T = unknown>(port: number, flowId: string, key: string): Promise<T | undefined>;
|
|
121
|
+
setFlowState(port: number, flowId: string, key: string, value: unknown): Promise<void>;
|
|
122
|
+
deleteFlowState(port: number, flowId: string, key: string): Promise<void>;
|
|
123
|
+
/** Synthesized from the parsed build info + no live plane — never starts one just to answer this. */
|
|
124
|
+
config(): Promise<Record<string, unknown>>;
|
|
125
|
+
logs(opts?: {
|
|
126
|
+
startIndex?: number;
|
|
127
|
+
endIndex?: number;
|
|
128
|
+
}): Promise<unknown[]>;
|
|
129
|
+
reload(): Promise<unknown>;
|
|
130
|
+
get closed(): boolean;
|
|
131
|
+
close(): Promise<void>;
|
|
132
|
+
[Symbol.asyncDispose](): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/admin.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `EmbeddedAdmin` (issue #10) — the embedded transport's `AdminApi` implementation, backed by
|
|
3
|
+
* `librift_ffi` calls (`NativeEngineLike`) plus a local `Map<port, Imposter>` registry, and a
|
|
4
|
+
* lazily-started loopback admin plane (`AdminBridge`, over `rift_serve_admin`) for the handful of
|
|
5
|
+
* operations with no FFI symbol.
|
|
6
|
+
*
|
|
7
|
+
* Routing is deliberately FFI-first and never conditional on flags: `createImposter` always goes
|
|
8
|
+
* through `rift_create_imposter`, never the admin plane, so `inject`/scripted stubs work with no
|
|
9
|
+
* `allowInjection` flag — that flag only gates the HTTP admin surface the plane's bridge methods hit,
|
|
10
|
+
* and FFI calls never pass through it. The registry exists because several FFI calls (`rift_recorded`,
|
|
11
|
+
* `rift_replace_stubs`, ...) are scoped to a port with no "list all imposters" or "get one imposter"
|
|
12
|
+
* symbol — those are reconstructed locally from what this instance has created/observed.
|
|
13
|
+
*/
|
|
14
|
+
import { randomUUID } from 'crypto';
|
|
15
|
+
import { ImposterNotFound, InvalidDefinition, RiftError } from '@rift-vs/rift';
|
|
16
|
+
import { toRecordedRequest } from '@rift-vs/rift/internal';
|
|
17
|
+
import { evalPredicates } from '@rift-vs/rift/internal';
|
|
18
|
+
import { AdminBridge } from './bridge.js';
|
|
19
|
+
async function defaultStartAdminPlane(native, opts) {
|
|
20
|
+
const result = await native.serveAdmin(JSON.stringify({ host: '127.0.0.1', port: 0, apiKey: opts.apiKey }));
|
|
21
|
+
const adminUrl = result['adminUrl'];
|
|
22
|
+
if (typeof adminUrl !== 'string') {
|
|
23
|
+
throw new RiftError('embedded admin plane (rift_serve_admin) did not report an adminUrl');
|
|
24
|
+
}
|
|
25
|
+
return { adminUrl };
|
|
26
|
+
}
|
|
27
|
+
const FLOW_ID_PREFIX = 'flow_id=';
|
|
28
|
+
/** Converts a `match=` filter string (`field=value` or `field:key=value`, e.g. `header:X-Y=z`) into
|
|
29
|
+
* an `equals` predicate, reusing the #6 evaluator (`evalPredicates`) instead of a bespoke matcher —
|
|
30
|
+
* there is no server-side `match=` filtering for the embedded transport to delegate to. */
|
|
31
|
+
function matchToPredicate(entry) {
|
|
32
|
+
const eq = entry.indexOf('=');
|
|
33
|
+
if (eq === -1) {
|
|
34
|
+
throw new InvalidDefinition(`malformed match entry (expected "field=value"): ${entry}`);
|
|
35
|
+
}
|
|
36
|
+
const left = entry.slice(0, eq);
|
|
37
|
+
const value = entry.slice(eq + 1);
|
|
38
|
+
const colon = left.indexOf(':');
|
|
39
|
+
if (colon === -1) {
|
|
40
|
+
return { equals: { [left]: value } };
|
|
41
|
+
}
|
|
42
|
+
const field = left.slice(0, colon);
|
|
43
|
+
const key = left.slice(colon + 1);
|
|
44
|
+
return { equals: { [field]: { [key]: value } } };
|
|
45
|
+
}
|
|
46
|
+
function stripProxyStubs(stubs) {
|
|
47
|
+
return stubs.filter((s) => !(s.responses ?? []).some((r) => r.proxy !== undefined));
|
|
48
|
+
}
|
|
49
|
+
export class EmbeddedAdmin {
|
|
50
|
+
url = undefined;
|
|
51
|
+
#native;
|
|
52
|
+
buildInfo;
|
|
53
|
+
#startAdminPlane;
|
|
54
|
+
#registry = new Map();
|
|
55
|
+
#planePromise;
|
|
56
|
+
#closed = false;
|
|
57
|
+
constructor(opts) {
|
|
58
|
+
this.#native = opts.native;
|
|
59
|
+
this.buildInfo = opts.buildInfo;
|
|
60
|
+
this.#startAdminPlane = opts.startAdminPlane ?? defaultStartAdminPlane;
|
|
61
|
+
}
|
|
62
|
+
/** Starts the loopback admin plane on first use (idempotent — see `#ensurePlane`) and returns its
|
|
63
|
+
* URL. Not part of `AdminApi`; called by the `Engine.adminUrl()` hook `create.ts` wires up. */
|
|
64
|
+
async adminUrl() {
|
|
65
|
+
const plane = await this.#ensurePlane();
|
|
66
|
+
return plane.adminUrl;
|
|
67
|
+
}
|
|
68
|
+
// --- imposters ---------------------------------------------------------------------------------
|
|
69
|
+
/** Always FFI — never the admin plane, so `inject`/scripted stubs work unconditionally (the
|
|
70
|
+
* plane's `allowInjection` gate only applies to bridge-routed HTTP calls, never to this path). */
|
|
71
|
+
async createImposter(imposter) {
|
|
72
|
+
const port = await this.#native.createImposter(JSON.stringify(imposter));
|
|
73
|
+
const stored = { ...imposter, port };
|
|
74
|
+
this.#registry.set(port, stored);
|
|
75
|
+
return stored;
|
|
76
|
+
}
|
|
77
|
+
async listImposters(opts) {
|
|
78
|
+
const imposters = await Promise.all([...this.#registry.values()].map((imp) => this.#project(imp, opts)));
|
|
79
|
+
return { imposters };
|
|
80
|
+
}
|
|
81
|
+
async getImposter(port, opts) {
|
|
82
|
+
return this.#project(this.#requireImposter(port), opts);
|
|
83
|
+
}
|
|
84
|
+
async deleteImposter(port) {
|
|
85
|
+
const imp = this.#requireImposter(port);
|
|
86
|
+
await this.#native.deleteImposter(port);
|
|
87
|
+
this.#registry.delete(port);
|
|
88
|
+
return imp;
|
|
89
|
+
}
|
|
90
|
+
async deleteAllImposters() {
|
|
91
|
+
await this.#native.deleteAll();
|
|
92
|
+
this.#registry.clear();
|
|
93
|
+
}
|
|
94
|
+
async replaceImposters(config) {
|
|
95
|
+
const raw = await this.#native.applyConfig(JSON.stringify(config));
|
|
96
|
+
const report = JSON.parse(raw);
|
|
97
|
+
// applyConfig has ALREADY mutated native state (partial-apply is possible — that's what `failed[]`
|
|
98
|
+
// reports), so reconcile the registry with whatever natively succeeded BEFORE surfacing failures.
|
|
99
|
+
// Build the replacement map fully first, then swap it in atomically — never clear-then-repopulate
|
|
100
|
+
// in place, which would leave the registry half-updated if a later entry is malformed.
|
|
101
|
+
const next = new Map();
|
|
102
|
+
for (const imp of report.imposters) {
|
|
103
|
+
if (imp.port === undefined)
|
|
104
|
+
throw new RiftError('applyConfig returned an imposter without a port');
|
|
105
|
+
next.set(imp.port, imp);
|
|
106
|
+
}
|
|
107
|
+
this.#registry = next;
|
|
108
|
+
if (report.failed !== undefined && report.failed.length > 0) {
|
|
109
|
+
const detail = report.failed
|
|
110
|
+
.map((f) => (f.port !== undefined ? `port ${f.port}: ${f.error}` : f.error))
|
|
111
|
+
.join('; ');
|
|
112
|
+
throw new InvalidDefinition(`applyConfig rejected ${report.failed.length} imposter(s): ${detail}`);
|
|
113
|
+
}
|
|
114
|
+
return { imposters: report.imposters };
|
|
115
|
+
}
|
|
116
|
+
// --- stubs (read-modify-write over the registry, then a single native.replaceStubs) ------------
|
|
117
|
+
async addStub(port, stub, index) {
|
|
118
|
+
const imp = this.#requireImposter(port);
|
|
119
|
+
const stubs = [...(imp.stubs ?? [])];
|
|
120
|
+
if (index !== undefined)
|
|
121
|
+
stubs.splice(index, 0, stub);
|
|
122
|
+
else
|
|
123
|
+
stubs.push(stub);
|
|
124
|
+
await this.#native.replaceStubs(port, JSON.stringify(stubs));
|
|
125
|
+
imp.stubs = stubs;
|
|
126
|
+
}
|
|
127
|
+
async replaceStubs(port, stubs) {
|
|
128
|
+
const imp = this.#requireImposter(port);
|
|
129
|
+
await this.#native.replaceStubs(port, JSON.stringify(stubs));
|
|
130
|
+
imp.stubs = [...stubs]; // copy so later caller-side mutation of `stubs` can't leak into the registry
|
|
131
|
+
}
|
|
132
|
+
async getStub(port, ref) {
|
|
133
|
+
const imp = this.#requireImposter(port);
|
|
134
|
+
const stubs = imp.stubs ?? [];
|
|
135
|
+
const stub = stubs[this.#stubIndex(stubs, ref)];
|
|
136
|
+
if (stub === undefined)
|
|
137
|
+
throw new ImposterNotFound('no such stub');
|
|
138
|
+
return stub;
|
|
139
|
+
}
|
|
140
|
+
async updateStub(port, ref, stub) {
|
|
141
|
+
const imp = this.#requireImposter(port);
|
|
142
|
+
const stubs = [...(imp.stubs ?? [])];
|
|
143
|
+
stubs[this.#stubIndex(stubs, ref)] = stub;
|
|
144
|
+
await this.#native.replaceStubs(port, JSON.stringify(stubs));
|
|
145
|
+
imp.stubs = stubs;
|
|
146
|
+
}
|
|
147
|
+
async deleteStub(port, ref) {
|
|
148
|
+
const imp = this.#requireImposter(port);
|
|
149
|
+
const stubs = [...(imp.stubs ?? [])];
|
|
150
|
+
stubs.splice(this.#stubIndex(stubs, ref), 1);
|
|
151
|
+
await this.#native.replaceStubs(port, JSON.stringify(stubs));
|
|
152
|
+
imp.stubs = stubs;
|
|
153
|
+
}
|
|
154
|
+
// --- saved requests ------------------------------------------------------------------------------
|
|
155
|
+
/** `flow_id=<id>` (the only `match` entry `engine.ts`'s `fetchRecorded` ever sends) routes to
|
|
156
|
+
* `rift_space_recorded` — the FFI's own flow-scoped journal — instead of a generic filter; any
|
|
157
|
+
* OTHER `match` entries (`field=value` / `field:key=value`) are evaluated client-side via the #6
|
|
158
|
+
* evaluator, since there is no server-side `match=` filtering to delegate to here. */
|
|
159
|
+
async getSavedRequests(port, match) {
|
|
160
|
+
this.#requireImposter(port);
|
|
161
|
+
const flowEntry = match?.find((m) => m.startsWith(FLOW_ID_PREFIX));
|
|
162
|
+
const rest = (match ?? []).filter((m) => m !== flowEntry);
|
|
163
|
+
const raw = flowEntry !== undefined
|
|
164
|
+
? await this.#native.spaceRecorded(port, flowEntry.slice(FLOW_ID_PREFIX.length))
|
|
165
|
+
: await this.#native.recorded(port);
|
|
166
|
+
const records = JSON.parse(raw);
|
|
167
|
+
if (rest.length === 0)
|
|
168
|
+
return records;
|
|
169
|
+
const predicates = rest.map(matchToPredicate);
|
|
170
|
+
return records.filter((r) => evalPredicates(predicates, toRecordedRequest(r)));
|
|
171
|
+
}
|
|
172
|
+
async deleteSavedRequests(port, match) {
|
|
173
|
+
const { bridge } = await this.#ensurePlane();
|
|
174
|
+
await bridge.deleteSavedRequests(port, match);
|
|
175
|
+
}
|
|
176
|
+
async deleteSavedProxyResponses(port) {
|
|
177
|
+
const { bridge } = await this.#ensurePlane();
|
|
178
|
+
await bridge.deleteSavedProxyResponses(port);
|
|
179
|
+
}
|
|
180
|
+
// --- enable/disable (bridge — no FFI symbol) -----------------------------------------------------
|
|
181
|
+
async enableImposter(port) {
|
|
182
|
+
const { bridge } = await this.#ensurePlane();
|
|
183
|
+
await bridge.enableImposter(port);
|
|
184
|
+
}
|
|
185
|
+
async disableImposter(port) {
|
|
186
|
+
const { bridge } = await this.#ensurePlane();
|
|
187
|
+
await bridge.disableImposter(port);
|
|
188
|
+
}
|
|
189
|
+
// --- scenarios (bridge — no FFI symbol) ------------------------------------------------------------
|
|
190
|
+
async getScenarios(port, opts) {
|
|
191
|
+
const { bridge } = await this.#ensurePlane();
|
|
192
|
+
return bridge.getScenarios(port, opts);
|
|
193
|
+
}
|
|
194
|
+
async setScenarioState(port, name, state, opts) {
|
|
195
|
+
const { bridge } = await this.#ensurePlane();
|
|
196
|
+
await bridge.setScenarioState(port, name, state, opts);
|
|
197
|
+
}
|
|
198
|
+
async resetScenarios(port, opts) {
|
|
199
|
+
const { bridge } = await this.#ensurePlane();
|
|
200
|
+
await bridge.resetScenarios(port, opts);
|
|
201
|
+
}
|
|
202
|
+
// --- spaces ---------------------------------------------------------------------------------------
|
|
203
|
+
async addSpaceStub(port, flowId, stub) {
|
|
204
|
+
await this.#native.spaceAddStub(port, flowId, JSON.stringify(stub));
|
|
205
|
+
}
|
|
206
|
+
async listSpaceStubs(port, flowId) {
|
|
207
|
+
const raw = await this.#native.spaceListStubs(port, flowId);
|
|
208
|
+
return JSON.parse(raw);
|
|
209
|
+
}
|
|
210
|
+
/** No `rift_space_*` symbol returns the full space object — bridged (see `bridge.ts`). */
|
|
211
|
+
async getSpace(port, flowId) {
|
|
212
|
+
const { bridge } = await this.#ensurePlane();
|
|
213
|
+
return bridge.getSpace(port, flowId);
|
|
214
|
+
}
|
|
215
|
+
async deleteSpace(port, flowId) {
|
|
216
|
+
await this.#native.spaceDelete(port, flowId);
|
|
217
|
+
}
|
|
218
|
+
// --- flow state -------------------------------------------------------------------------------------
|
|
219
|
+
async getFlowState(port, flowId, key) {
|
|
220
|
+
const result = await this.#native.flowStateGet(port, flowId, key);
|
|
221
|
+
return result.found ? result.value : undefined;
|
|
222
|
+
}
|
|
223
|
+
async setFlowState(port, flowId, key, value) {
|
|
224
|
+
await this.#native.flowStatePut(port, flowId, key, JSON.stringify(value));
|
|
225
|
+
}
|
|
226
|
+
async deleteFlowState(port, flowId, key) {
|
|
227
|
+
await this.#native.flowStateDelete(port, flowId, key);
|
|
228
|
+
}
|
|
229
|
+
// --- admin ------------------------------------------------------------------------------------------
|
|
230
|
+
/** Synthesized from the parsed build info + no live plane — never starts one just to answer this. */
|
|
231
|
+
async config() {
|
|
232
|
+
return {
|
|
233
|
+
options: {
|
|
234
|
+
version: this.buildInfo.version,
|
|
235
|
+
commit: this.buildInfo.commit,
|
|
236
|
+
builtAt: this.buildInfo.builtAt,
|
|
237
|
+
},
|
|
238
|
+
features: this.buildInfo.features,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
async logs(opts) {
|
|
242
|
+
const { bridge } = await this.#ensurePlane();
|
|
243
|
+
return bridge.logs(opts);
|
|
244
|
+
}
|
|
245
|
+
async reload() {
|
|
246
|
+
const { bridge } = await this.#ensurePlane();
|
|
247
|
+
return bridge.reload();
|
|
248
|
+
}
|
|
249
|
+
// --- disposal -----------------------------------------------------------------------------------------
|
|
250
|
+
get closed() {
|
|
251
|
+
return this.#closed;
|
|
252
|
+
}
|
|
253
|
+
async close() {
|
|
254
|
+
if (this.#closed)
|
|
255
|
+
return;
|
|
256
|
+
this.#closed = true;
|
|
257
|
+
// native.close() MUST run even if the plane failed to start or its teardown throws — otherwise
|
|
258
|
+
// the FFI handle / worker thread leaks and, since #closed is already set, can never be retried.
|
|
259
|
+
try {
|
|
260
|
+
if (this.#planePromise !== undefined) {
|
|
261
|
+
const plane = await this.#planePromise.catch(() => undefined);
|
|
262
|
+
await plane?.bridge.close();
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
finally {
|
|
266
|
+
await this.#native.close();
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
async [Symbol.asyncDispose]() {
|
|
270
|
+
await this.close();
|
|
271
|
+
}
|
|
272
|
+
// --- internals -------------------------------------------------------------------------------------------
|
|
273
|
+
#requireImposter(port) {
|
|
274
|
+
const imp = this.#registry.get(port);
|
|
275
|
+
if (imp === undefined)
|
|
276
|
+
throw new ImposterNotFound(`no imposter on port ${port}`);
|
|
277
|
+
return imp;
|
|
278
|
+
}
|
|
279
|
+
#stubIndex(stubs, ref) {
|
|
280
|
+
const index = typeof ref === 'number' ? ref : stubs.findIndex((s) => s.id === ref.id);
|
|
281
|
+
if (index < 0 || index >= stubs.length)
|
|
282
|
+
throw new ImposterNotFound('no such stub');
|
|
283
|
+
return index;
|
|
284
|
+
}
|
|
285
|
+
async #project(imp, opts) {
|
|
286
|
+
const stubs = opts?.removeProxies === true && imp.stubs !== undefined ? stripProxyStubs(imp.stubs) : imp.stubs;
|
|
287
|
+
const base = { ...imp, stubs };
|
|
288
|
+
if (opts?.replayable === true)
|
|
289
|
+
return base;
|
|
290
|
+
const raw = await this.#native.recorded(imp.port);
|
|
291
|
+
const numberOfRequests = JSON.parse(raw).length;
|
|
292
|
+
return { ...base, numberOfRequests };
|
|
293
|
+
}
|
|
294
|
+
/** Starts the loopback admin plane at most once: the promise is assigned synchronously (before
|
|
295
|
+
* any `await`), so concurrent first-uses — even two bridge calls issued without an `await`
|
|
296
|
+
* between them — observe the same in-flight promise instead of racing two `rift_serve_admin`
|
|
297
|
+
* calls. An `EmbeddedAdmin` that never calls a bridge method never starts the plane at all. */
|
|
298
|
+
#ensurePlane() {
|
|
299
|
+
if (this.#planePromise === undefined) {
|
|
300
|
+
this.#planePromise = this.#startPlane();
|
|
301
|
+
}
|
|
302
|
+
return this.#planePromise;
|
|
303
|
+
}
|
|
304
|
+
async #startPlane() {
|
|
305
|
+
const apiKey = randomUUID();
|
|
306
|
+
const { adminUrl } = await this.#startAdminPlane(this.#native, { apiKey });
|
|
307
|
+
return { bridge: new AdminBridge({ adminUrl, apiKey }), adminUrl };
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=admin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../src/admin.ts"],"names":[],"mappings":"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"}
|
package/dist/bridge.d.ts
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loopback admin-plane HTTP client (issue #10) — the embedded transport's fallback for the handful
|
|
3
|
+
* of admin operations `librift_ffi` has no C-ABI symbol for: scenarios, saved-request/proxy-response
|
|
4
|
+
* deletion, enable/disable, logs, reload, and `getSpace` (the one space operation without a
|
|
5
|
+
* `rift_space_*` counterpart — see `admin.ts`). Started lazily, at most once per `EmbeddedAdmin`
|
|
6
|
+
* (see its `#ensurePlane`), against the loopback `rift_serve_admin` plane.
|
|
7
|
+
*
|
|
8
|
+
* Reuses `RemoteClient` wholesale rather than re-deriving fetch/HTTP-status mapping a second time —
|
|
9
|
+
* the loopback plane speaks the exact same admin HTTP surface a remote/spawned engine does.
|
|
10
|
+
*/
|
|
11
|
+
import { type FlowScopedOptions } from '@rift-vs/rift/internal';
|
|
12
|
+
export interface BridgeOptions {
|
|
13
|
+
adminUrl: string;
|
|
14
|
+
apiKey: string;
|
|
15
|
+
}
|
|
16
|
+
export declare class AdminBridge {
|
|
17
|
+
#private;
|
|
18
|
+
constructor(opts: BridgeOptions);
|
|
19
|
+
getScenarios(port: number, opts?: FlowScopedOptions): Promise<{
|
|
20
|
+
flowId: string;
|
|
21
|
+
scenarios: Array<{
|
|
22
|
+
name: string;
|
|
23
|
+
state: string;
|
|
24
|
+
}>;
|
|
25
|
+
}>;
|
|
26
|
+
setScenarioState(port: number, name: string, state: string, opts?: FlowScopedOptions): Promise<void>;
|
|
27
|
+
resetScenarios(port: number, opts?: FlowScopedOptions): Promise<void>;
|
|
28
|
+
deleteSavedRequests(port: number, match?: string[]): Promise<void>;
|
|
29
|
+
deleteSavedProxyResponses(port: number): Promise<void>;
|
|
30
|
+
enableImposter(port: number): Promise<void>;
|
|
31
|
+
disableImposter(port: number): Promise<void>;
|
|
32
|
+
logs(opts?: {
|
|
33
|
+
startIndex?: number;
|
|
34
|
+
endIndex?: number;
|
|
35
|
+
}): Promise<unknown[]>;
|
|
36
|
+
reload(): Promise<unknown>;
|
|
37
|
+
/** No `rift_space_*` FFI symbol returns the full space object (only its stub list, via
|
|
38
|
+
* `spaceListStubs`) — bridged rather than reconstructed approximately from the FFI pieces. */
|
|
39
|
+
getSpace<T = unknown>(port: number, flowId: string): Promise<T>;
|
|
40
|
+
close(): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAgB,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE9E,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAW;;gBAGV,IAAI,EAAE,aAAa;IAI/B,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,iBAAiB,GACvB,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC;IAIjF,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIpG,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrE,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlE,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI3C,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5C,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAI3E,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAI1B;kGAC8F;IAC9F,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAIzD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
package/dist/bridge.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loopback admin-plane HTTP client (issue #10) — the embedded transport's fallback for the handful
|
|
3
|
+
* of admin operations `librift_ffi` has no C-ABI symbol for: scenarios, saved-request/proxy-response
|
|
4
|
+
* deletion, enable/disable, logs, reload, and `getSpace` (the one space operation without a
|
|
5
|
+
* `rift_space_*` counterpart — see `admin.ts`). Started lazily, at most once per `EmbeddedAdmin`
|
|
6
|
+
* (see its `#ensurePlane`), against the loopback `rift_serve_admin` plane.
|
|
7
|
+
*
|
|
8
|
+
* Reuses `RemoteClient` wholesale rather than re-deriving fetch/HTTP-status mapping a second time —
|
|
9
|
+
* the loopback plane speaks the exact same admin HTTP surface a remote/spawned engine does.
|
|
10
|
+
*/
|
|
11
|
+
import { RemoteClient } from '@rift-vs/rift/internal';
|
|
12
|
+
export class AdminBridge {
|
|
13
|
+
#client;
|
|
14
|
+
constructor(opts) {
|
|
15
|
+
this.#client = new RemoteClient(opts.adminUrl, { apiKey: opts.apiKey });
|
|
16
|
+
}
|
|
17
|
+
getScenarios(port, opts) {
|
|
18
|
+
return this.#client.getScenarios(port, opts);
|
|
19
|
+
}
|
|
20
|
+
setScenarioState(port, name, state, opts) {
|
|
21
|
+
return this.#client.setScenarioState(port, name, state, opts);
|
|
22
|
+
}
|
|
23
|
+
resetScenarios(port, opts) {
|
|
24
|
+
return this.#client.resetScenarios(port, opts);
|
|
25
|
+
}
|
|
26
|
+
deleteSavedRequests(port, match) {
|
|
27
|
+
return this.#client.deleteSavedRequests(port, match);
|
|
28
|
+
}
|
|
29
|
+
deleteSavedProxyResponses(port) {
|
|
30
|
+
return this.#client.deleteSavedProxyResponses(port);
|
|
31
|
+
}
|
|
32
|
+
enableImposter(port) {
|
|
33
|
+
return this.#client.enableImposter(port);
|
|
34
|
+
}
|
|
35
|
+
disableImposter(port) {
|
|
36
|
+
return this.#client.disableImposter(port);
|
|
37
|
+
}
|
|
38
|
+
logs(opts) {
|
|
39
|
+
return this.#client.logs(opts);
|
|
40
|
+
}
|
|
41
|
+
reload() {
|
|
42
|
+
return this.#client.reload();
|
|
43
|
+
}
|
|
44
|
+
/** No `rift_space_*` FFI symbol returns the full space object (only its stub list, via
|
|
45
|
+
* `spaceListStubs`) — bridged rather than reconstructed approximately from the FFI pieces. */
|
|
46
|
+
getSpace(port, flowId) {
|
|
47
|
+
return this.#client.getSpace(port, flowId);
|
|
48
|
+
}
|
|
49
|
+
async close() {
|
|
50
|
+
await this.#client.close();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAA0B,MAAM,wBAAwB,CAAC;AAO9E,MAAM,OAAO,WAAW;IACtB,OAAO,CAAe;IAEtB,YAAY,IAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,YAAY,CACV,IAAY,EACZ,IAAwB;QAExB,OAAO,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa,EAAE,IAAwB;QAClF,OAAO,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChE,CAAC;IAED,cAAc,CAAC,IAAY,EAAE,IAAwB;QACnD,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACjD,CAAC;IAED,mBAAmB,CAAC,IAAY,EAAE,KAAgB;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,yBAAyB,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,eAAe,CAAC,IAAY;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,IAAiD;QACpD,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED;kGAC8F;IAC9F,QAAQ,CAAc,IAAY,EAAE,MAAc;QAChD,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAI,IAAI,EAAE,MAAM,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACF"}
|
package/dist/create.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rift.embedded()` wiring (issue #10): resolves the `librift_ffi` cdylib, loads the `NativeEngine`,
|
|
3
|
+
* runs the version/feature preflight, and returns the same `RiftEngine` facade `rift.connect`/
|
|
4
|
+
* `rift.spawn` produce — backed by `EmbeddedAdmin` (./admin.ts) instead of an HTTP client.
|
|
5
|
+
*
|
|
6
|
+
* `loadNativeEngine` is injectable specifically so this whole pipeline — preflight, registry, stub
|
|
7
|
+
* routing, and the lazy admin-plane bridge — is unit-testable against a FAKE `NativeEngineLike` with
|
|
8
|
+
* no real cdylib/koffi involved (see test/unit/embedded-admin.test.ts). The default wiring (real
|
|
9
|
+
* `resolveCdylib` + `NativeEngine.load`) is only exercised by the real-cdylib integration suite,
|
|
10
|
+
* which self-skips without `RIFT_FFI_LIB`.
|
|
11
|
+
*/
|
|
12
|
+
import { Engine } from '@rift-vs/rift/internal';
|
|
13
|
+
import { type NativeEngineLike, type StartAdminPlane } from './admin.js';
|
|
14
|
+
import type { EmbeddedOptions } from '@rift-vs/rift';
|
|
15
|
+
export type { EmbeddedOptions };
|
|
16
|
+
export interface EmbeddedDeps {
|
|
17
|
+
/** Injectable native-engine loader; defaults to `resolveCdylib` + `NativeEngine.load`. Supplying
|
|
18
|
+
* this SKIPS `resolveCdylib` entirely — tests inject a fake loader with no real cdylib involved.
|
|
19
|
+
* Note: `options.keepAlive` is forwarded only by the DEFAULT loader; an injected loader owns its
|
|
20
|
+
* worker lifecycle and must handle keep-alive itself if it cares. */
|
|
21
|
+
loadNativeEngine?: (libPath: string) => Promise<NativeEngineLike>;
|
|
22
|
+
/** Injectable admin-plane starter, forwarded to `EmbeddedAdmin`; see `admin.ts`'s `StartAdminPlane`. */
|
|
23
|
+
startAdminPlane?: StartAdminPlane;
|
|
24
|
+
}
|
|
25
|
+
export declare function createEmbeddedEngine(options?: EmbeddedOptions, deps?: EmbeddedDeps): Promise<Engine>;
|
|
26
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../src/create.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAoD,MAAM,wBAAwB,CAAC;AAKlG,OAAO,EAAiB,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAKxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,YAAY,EAAE,eAAe,EAAE,CAAC;AAEhC,MAAM,WAAW,YAAY;IAC3B;;;yEAGqE;IACrE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAClE,wGAAwG;IACxG,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC;AAsDD,wBAAsB,oBAAoB,CACxC,OAAO,GAAE,eAAoB,EAC7B,IAAI,GAAE,YAAiB,GACtB,OAAO,CAAC,MAAM,CAAC,CA8BjB"}
|