@crvouga/mockingbird-service-posthog 3.6.0 → 3.7.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/CHANGELOG.md +7 -1
- package/dist/{chunk-YTVQ24KD.js → chunk-2ZTMN4SX.js} +112 -28
- package/dist/chunk-2ZTMN4SX.js.map +7 -0
- package/dist/{chunk-GW65C4DF.js → chunk-E3VNLDYM.js} +103 -12
- package/dist/chunk-E3VNLDYM.js.map +7 -0
- package/dist/cli.js +2 -2
- package/dist/index.d.ts +28 -0
- package/dist/index.js +1 -1
- package/dist/server.d.ts +69 -0
- package/dist/server.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-GW65C4DF.js.map +0 -7
- package/dist/chunk-YTVQ24KD.js.map +0 -7
package/dist/cli.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -248,9 +248,15 @@ declare class Collection<T> {
|
|
|
248
248
|
}>;
|
|
249
249
|
}
|
|
250
250
|
|
|
251
|
+
/**
|
|
252
|
+
* What names an id base: a non-negative safe integer (or its decimal string) or `"boot"`,
|
|
253
|
+
* which derives the base from the wall clock when the runtime is created.
|
|
254
|
+
*/
|
|
255
|
+
type IdBase = number | string;
|
|
251
256
|
/**
|
|
252
257
|
* Sequential id source persisted in SQLite. Ids are deterministic for a given
|
|
253
258
|
* sequence history (`cus_` + 14 opaque chars), so reproductions stay stable.
|
|
259
|
+
* A runtime's `idBase` is mixed in, so a different base reissues none of another's ids.
|
|
254
260
|
*/
|
|
255
261
|
declare class IdSequence {
|
|
256
262
|
private readonly sqlite;
|
|
@@ -355,6 +361,15 @@ type FaultRule = {
|
|
|
355
361
|
requestHeaders?: Record<string, string>;
|
|
356
362
|
/** Fault only requests carrying these query parameters. `"*"` matches any value. */
|
|
357
363
|
query?: Record<string, string>;
|
|
364
|
+
/**
|
|
365
|
+
* Fault only requests whose JSON body carries these fields. Each key is a dotted path into
|
|
366
|
+
* the parsed body (`"patient_details.email"`; a number steps into an array, `"items.0.sku"`)
|
|
367
|
+
* and each value is what the field must equal: a string, number, boolean or `null`, compared
|
|
368
|
+
* strictly (`3` is not `"3"`). `"*"` matches any value that is present. A request whose body
|
|
369
|
+
* is missing, is not JSON, or is not a JSON object never matches. Not `body`, which is the
|
|
370
|
+
* response a rule injects.
|
|
371
|
+
*/
|
|
372
|
+
requestBody?: Record<string, RequestBodyValue>;
|
|
358
373
|
/**
|
|
359
374
|
* Fault only this namespace. Omit (or `"*"`) to fault every namespace — which is what
|
|
360
375
|
* an in-process caller usually wants, and what a parallel worker usually does not:
|
|
@@ -421,6 +436,8 @@ type FaultRule = {
|
|
|
421
436
|
/** The preset this rule was expanded from, if any. */
|
|
422
437
|
fromPreset?: string;
|
|
423
438
|
};
|
|
439
|
+
/** What a field of the request body must equal in {@link FaultRule.requestBody}. */
|
|
440
|
+
type RequestBodyValue = string | number | boolean | null;
|
|
424
441
|
/** A fault that fired for one request. */
|
|
425
442
|
type FaultHit = {
|
|
426
443
|
id: string;
|
|
@@ -458,6 +475,11 @@ type FaultCandidate = {
|
|
|
458
475
|
/** Request headers and query, for rules that match on them. */
|
|
459
476
|
headers?: Headers;
|
|
460
477
|
query?: URLSearchParams;
|
|
478
|
+
/**
|
|
479
|
+
* The request body parsed as JSON, read only when a rule matches on `requestBody`. Resolve
|
|
480
|
+
* `undefined` for a body that is missing or not JSON. It must leave the request readable.
|
|
481
|
+
*/
|
|
482
|
+
readJson?: () => Promise<unknown>;
|
|
461
483
|
/** The namespace clock, for `from` / `until`. Rules with a window are skipped without it. */
|
|
462
484
|
now?: number;
|
|
463
485
|
/** How to spend a delay for this request. Default: the registry's own sleep. */
|
|
@@ -980,6 +1002,12 @@ type ServiceRuntime<T extends ServiceInstance> = FetchAPI & {
|
|
|
980
1002
|
mount(prefix: string): MountedAPI;
|
|
981
1003
|
readonly sqlite: SqliteClient$1;
|
|
982
1004
|
readonly clock: Clock;
|
|
1005
|
+
/**
|
|
1006
|
+
* Change the id base ({@link RuntimeOptions.idBase}) for ids generated from now on, and
|
|
1007
|
+
* return the number it resolved to. Set it before the first request so a boot's ids stay
|
|
1008
|
+
* one run.
|
|
1009
|
+
*/
|
|
1010
|
+
setIdBase(base: IdBase): number;
|
|
983
1011
|
readonly faults: FaultRegistry;
|
|
984
1012
|
/** Baseline response time per namespace. */
|
|
985
1013
|
readonly latency: LatencyRegistry;
|
package/dist/index.js
CHANGED
package/dist/server.d.ts
CHANGED
|
@@ -133,6 +133,12 @@ interface SqliteClient$2 {
|
|
|
133
133
|
transaction<T>(fn: () => T): T;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
/**
|
|
137
|
+
* What names an id base: a non-negative safe integer (or its decimal string) or `"boot"`,
|
|
138
|
+
* which derives the base from the wall clock when the runtime is created.
|
|
139
|
+
*/
|
|
140
|
+
type IdBase$1 = number | string;
|
|
141
|
+
|
|
136
142
|
/**
|
|
137
143
|
* The single source of time for a service.
|
|
138
144
|
*
|
|
@@ -215,6 +221,15 @@ type FaultRule$1 = {
|
|
|
215
221
|
requestHeaders?: Record<string, string>;
|
|
216
222
|
/** Fault only requests carrying these query parameters. `"*"` matches any value. */
|
|
217
223
|
query?: Record<string, string>;
|
|
224
|
+
/**
|
|
225
|
+
* Fault only requests whose JSON body carries these fields. Each key is a dotted path into
|
|
226
|
+
* the parsed body (`"patient_details.email"`; a number steps into an array, `"items.0.sku"`)
|
|
227
|
+
* and each value is what the field must equal: a string, number, boolean or `null`, compared
|
|
228
|
+
* strictly (`3` is not `"3"`). `"*"` matches any value that is present. A request whose body
|
|
229
|
+
* is missing, is not JSON, or is not a JSON object never matches. Not `body`, which is the
|
|
230
|
+
* response a rule injects.
|
|
231
|
+
*/
|
|
232
|
+
requestBody?: Record<string, RequestBodyValue$1>;
|
|
218
233
|
/**
|
|
219
234
|
* Fault only this namespace. Omit (or `"*"`) to fault every namespace — which is what
|
|
220
235
|
* an in-process caller usually wants, and what a parallel worker usually does not:
|
|
@@ -281,6 +296,8 @@ type FaultRule$1 = {
|
|
|
281
296
|
/** The preset this rule was expanded from, if any. */
|
|
282
297
|
fromPreset?: string;
|
|
283
298
|
};
|
|
299
|
+
/** What a field of the request body must equal in {@link FaultRule.requestBody}. */
|
|
300
|
+
type RequestBodyValue$1 = string | number | boolean | null;
|
|
284
301
|
/** A fault that fired for one request. */
|
|
285
302
|
type FaultHit$1 = {
|
|
286
303
|
id: string;
|
|
@@ -305,6 +322,11 @@ type FaultCandidate$1 = {
|
|
|
305
322
|
/** Request headers and query, for rules that match on them. */
|
|
306
323
|
headers?: Headers;
|
|
307
324
|
query?: URLSearchParams;
|
|
325
|
+
/**
|
|
326
|
+
* The request body parsed as JSON, read only when a rule matches on `requestBody`. Resolve
|
|
327
|
+
* `undefined` for a body that is missing or not JSON. It must leave the request readable.
|
|
328
|
+
*/
|
|
329
|
+
readJson?: () => Promise<unknown>;
|
|
308
330
|
/** The namespace clock, for `from` / `until`. Rules with a window are skipped without it. */
|
|
309
331
|
now?: number;
|
|
310
332
|
/** How to spend a delay for this request. Default: the registry's own sleep. */
|
|
@@ -827,6 +849,12 @@ type ServiceRuntime$1<T extends ServiceInstance$1> = FetchAPI$2 & {
|
|
|
827
849
|
mount(prefix: string): MountedAPI$1;
|
|
828
850
|
readonly sqlite: SqliteClient$2;
|
|
829
851
|
readonly clock: Clock$1;
|
|
852
|
+
/**
|
|
853
|
+
* Change the id base ({@link RuntimeOptions.idBase}) for ids generated from now on, and
|
|
854
|
+
* return the number it resolved to. Set it before the first request so a boot's ids stay
|
|
855
|
+
* one run.
|
|
856
|
+
*/
|
|
857
|
+
setIdBase(base: IdBase$1): number;
|
|
830
858
|
readonly faults: FaultRegistry$1;
|
|
831
859
|
/** Baseline response time per namespace. */
|
|
832
860
|
readonly latency: LatencyRegistry$1;
|
|
@@ -932,6 +960,12 @@ type CommonServeOptions = {
|
|
|
932
960
|
/** Synthetic provider fixture objects supplied by a fleet entry. */
|
|
933
961
|
fixtures?: Record<string, unknown>;
|
|
934
962
|
baseUrl?: string;
|
|
963
|
+
/**
|
|
964
|
+
* Boot settings from `--settings`, `MOCKINGBIRD_SETTINGS` or a fleet entry's `settings`,
|
|
965
|
+
* already checked by the target's {@link ServeTarget.parseSettings}. Pass them to the
|
|
966
|
+
* service's own `settings` option so they become every namespace's defaults.
|
|
967
|
+
*/
|
|
968
|
+
settings?: Record<string, unknown>;
|
|
935
969
|
};
|
|
936
970
|
/**
|
|
937
971
|
* What a service contributes to `serve`: how to build its runtime from CLI flags,
|
|
@@ -944,6 +978,13 @@ type ServeTarget = {
|
|
|
944
978
|
defaultPort: number;
|
|
945
979
|
/** Serve flags beyond the common ones. */
|
|
946
980
|
options?: Record<string, CliOption>;
|
|
981
|
+
/**
|
|
982
|
+
* Check the boot settings a caller supplied (`--settings`, `MOCKINGBIRD_SETTINGS`, a fleet
|
|
983
|
+
* entry's `settings`) against the service's settings schema, returning them normalized
|
|
984
|
+
* or throwing a message naming the bad field. A target without one takes no boot settings,
|
|
985
|
+
* and supplying some is refused before a port is bound.
|
|
986
|
+
*/
|
|
987
|
+
parseSettings?(settings: Record<string, unknown>): Record<string, unknown>;
|
|
947
988
|
create(values: CliValues, common: CommonServeOptions): Promise<ServiceRuntime$1<ServiceInstance$1>> | ServiceRuntime$1<ServiceInstance$1>;
|
|
948
989
|
/** Startup lines after the listen address, e.g. the loaded corpus version. */
|
|
949
990
|
banner?(runtime: ServiceRuntime$1<ServiceInstance$1>): string[];
|
|
@@ -1125,9 +1166,15 @@ declare class Collection<T> {
|
|
|
1125
1166
|
}>;
|
|
1126
1167
|
}
|
|
1127
1168
|
|
|
1169
|
+
/**
|
|
1170
|
+
* What names an id base: a non-negative safe integer (or its decimal string) or `"boot"`,
|
|
1171
|
+
* which derives the base from the wall clock when the runtime is created.
|
|
1172
|
+
*/
|
|
1173
|
+
type IdBase = number | string;
|
|
1128
1174
|
/**
|
|
1129
1175
|
* Sequential id source persisted in SQLite. Ids are deterministic for a given
|
|
1130
1176
|
* sequence history (`cus_` + 14 opaque chars), so reproductions stay stable.
|
|
1177
|
+
* A runtime's `idBase` is mixed in, so a different base reissues none of another's ids.
|
|
1131
1178
|
*/
|
|
1132
1179
|
declare class IdSequence {
|
|
1133
1180
|
private readonly sqlite;
|
|
@@ -1232,6 +1279,15 @@ type FaultRule = {
|
|
|
1232
1279
|
requestHeaders?: Record<string, string>;
|
|
1233
1280
|
/** Fault only requests carrying these query parameters. `"*"` matches any value. */
|
|
1234
1281
|
query?: Record<string, string>;
|
|
1282
|
+
/**
|
|
1283
|
+
* Fault only requests whose JSON body carries these fields. Each key is a dotted path into
|
|
1284
|
+
* the parsed body (`"patient_details.email"`; a number steps into an array, `"items.0.sku"`)
|
|
1285
|
+
* and each value is what the field must equal: a string, number, boolean or `null`, compared
|
|
1286
|
+
* strictly (`3` is not `"3"`). `"*"` matches any value that is present. A request whose body
|
|
1287
|
+
* is missing, is not JSON, or is not a JSON object never matches. Not `body`, which is the
|
|
1288
|
+
* response a rule injects.
|
|
1289
|
+
*/
|
|
1290
|
+
requestBody?: Record<string, RequestBodyValue>;
|
|
1235
1291
|
/**
|
|
1236
1292
|
* Fault only this namespace. Omit (or `"*"`) to fault every namespace — which is what
|
|
1237
1293
|
* an in-process caller usually wants, and what a parallel worker usually does not:
|
|
@@ -1298,6 +1354,8 @@ type FaultRule = {
|
|
|
1298
1354
|
/** The preset this rule was expanded from, if any. */
|
|
1299
1355
|
fromPreset?: string;
|
|
1300
1356
|
};
|
|
1357
|
+
/** What a field of the request body must equal in {@link FaultRule.requestBody}. */
|
|
1358
|
+
type RequestBodyValue = string | number | boolean | null;
|
|
1301
1359
|
/** A fault that fired for one request. */
|
|
1302
1360
|
type FaultHit = {
|
|
1303
1361
|
id: string;
|
|
@@ -1322,6 +1380,11 @@ type FaultCandidate = {
|
|
|
1322
1380
|
/** Request headers and query, for rules that match on them. */
|
|
1323
1381
|
headers?: Headers;
|
|
1324
1382
|
query?: URLSearchParams;
|
|
1383
|
+
/**
|
|
1384
|
+
* The request body parsed as JSON, read only when a rule matches on `requestBody`. Resolve
|
|
1385
|
+
* `undefined` for a body that is missing or not JSON. It must leave the request readable.
|
|
1386
|
+
*/
|
|
1387
|
+
readJson?: () => Promise<unknown>;
|
|
1325
1388
|
/** The namespace clock, for `from` / `until`. Rules with a window are skipped without it. */
|
|
1326
1389
|
now?: number;
|
|
1327
1390
|
/** How to spend a delay for this request. Default: the registry's own sleep. */
|
|
@@ -1844,6 +1907,12 @@ type ServiceRuntime<T extends ServiceInstance> = FetchAPI$1 & {
|
|
|
1844
1907
|
mount(prefix: string): MountedAPI;
|
|
1845
1908
|
readonly sqlite: SqliteClient$1;
|
|
1846
1909
|
readonly clock: Clock;
|
|
1910
|
+
/**
|
|
1911
|
+
* Change the id base ({@link RuntimeOptions.idBase}) for ids generated from now on, and
|
|
1912
|
+
* return the number it resolved to. Set it before the first request so a boot's ids stay
|
|
1913
|
+
* one run.
|
|
1914
|
+
*/
|
|
1915
|
+
setIdBase(base: IdBase): number;
|
|
1847
1916
|
readonly faults: FaultRegistry;
|
|
1848
1917
|
/** Baseline response time per namespace. */
|
|
1849
1918
|
readonly latency: LatencyRegistry;
|
package/dist/server.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@crvouga/mockingbird-service-posthog",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.7.0",
|
|
4
4
|
"description": "Stateful emulator of PostHog: /flags v2 and legacy /decide evaluation with per-test flag, variant and payload control, remote config, gzip/base64 capture (/batch/, /e/, /i/v0/e/), recordings intake, and the feature-flag management and HogQL API slice.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|