stitchkit 0.75.0 → 0.75.1
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.
|
@@ -64,6 +64,18 @@ export interface WatchHubConfig {
|
|
|
64
64
|
/**
|
|
65
65
|
* Perform one read. Supplied by the application, so a watched read goes
|
|
66
66
|
* through the same authorization as the request it mirrors.
|
|
67
|
+
*
|
|
68
|
+
* **It is given no subscriber, and that is the guard, not an omission.** A key
|
|
69
|
+
* shares one read across everyone asking it, so a key that did not separate
|
|
70
|
+
* callers would hand one caller's answer to another. Here it cannot: an answer
|
|
71
|
+
* that depends on who is asking has to carry the asker in `args`, and `args`
|
|
72
|
+
* are what the key's digest is taken over — so two callers who differ get two
|
|
73
|
+
* keys and two reads, by construction rather than by discipline.
|
|
74
|
+
*
|
|
75
|
+
* The one way to defeat that is to resolve an identity from ambient state
|
|
76
|
+
* *inside* this function — a request-scoped context, a module-level "current
|
|
77
|
+
* user". Then every subscriber to that key receives whatever the first read
|
|
78
|
+
* happened to resolve. Do not; put the identity in the arguments.
|
|
67
79
|
*/
|
|
68
80
|
read(operation: WatchOperation, args: unknown): Promise<unknown>;
|
|
69
81
|
/** Whether an operation may be watched at all. Refusal is answered in words. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch-hub.d.ts","sourceRoot":"","sources":["../../src/application/watch-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,oDAAoD;IACpD,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,yEAAyE;IACzE,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B
|
|
1
|
+
{"version":3,"file":"watch-hub.d.ts","sourceRoot":"","sources":["../../src/application/watch-hub.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,OAAO,EAAE,KAAK,aAAa,EAAiB,MAAM,sBAAsB,CAAC;AAEzE,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,eAAe,EACpB,KAAK,eAAe,EAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAE9C,mFAAmF;AACnF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IACpC,oDAAoD;IACpD,KAAK,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3E,KAAK,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC3B,yEAAyE;IACzE,MAAM,IAAI,IAAI,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjE,gFAAgF;IAChF,SAAS,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC;IAC9C,oFAAoF;IACpF,aAAa,CAAC,SAAS,EAAE,cAAc,GAAG,SAAS,MAAM,EAAE,CAAC;IAC5D,mFAAmF;IACnF,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC3D,kEAAkE;IAClE,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yFAAyF;IACzF,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACjD,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,UAAU,EAAE,eAAe,GAAG,eAAe,CAAC;IACrD;;;;;;OAMG;IACH,SAAS,IAAI,MAAM,CAAC;IACpB,qEAAqE;IACrE,IAAI,IAAI,MAAM,CAAC;IACf,KAAK,IAAI,IAAI,CAAC;CACf;AAqBD;;;;;GAKG;AACH,wBAAsB,QAAQ,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAU1F;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,QAAQ,CA0M/D"}
|
package/llms-full.txt
CHANGED
|
@@ -7636,6 +7636,20 @@ order-independent — `{a, b}` and `{b, a}` are the same question, which a plain
|
|
|
7636
7636
|
`JSON.stringify` key would get wrong exactly when two components happen to build
|
|
7637
7637
|
their argument object in a different order.
|
|
7638
7638
|
|
|
7639
|
+
### Who shares with whom
|
|
7640
|
+
|
|
7641
|
+
A key is `(service, action, digest of arguments)`, and everyone on that key gets
|
|
7642
|
+
one read. So the question a sharing primitive has to answer is what keeps one
|
|
7643
|
+
caller's answer from reaching another — and here the answer is structural:
|
|
7644
|
+
`read` is **given no subscriber**. An answer that depends on who is asking has to
|
|
7645
|
+
carry the asker in its arguments, and the arguments are what the digest is taken
|
|
7646
|
+
over, so two callers who differ get two keys and two reads.
|
|
7647
|
+
|
|
7648
|
+
The one way to defeat that is to resolve an identity from ambient state *inside*
|
|
7649
|
+
`read` — a request-scoped context, a module-level "current user". Then every
|
|
7650
|
+
subscriber on that key receives whatever the first read happened to resolve.
|
|
7651
|
+
Put the identity in the arguments instead.
|
|
7652
|
+
|
|
7639
7653
|
### Three states, not two
|
|
7640
7654
|
|
|
7641
7655
|
`state.phase` comes from `LiveStatePhase`, the vocabulary the live-state
|
package/package.json
CHANGED