@estiva-app/interop 0.13.0 → 0.15.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 +57 -0
- package/README.md +66 -10
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/projection.d.ts +132 -29
- package/dist/projection.d.ts.map +1 -1
- package/dist/projection.js +294 -14
- package/dist/projection.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +5 -0
- package/src/projection.ts +365 -34
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,63 @@ how a declaration is read, is a MAJOR — in `0.x`, a MINOR — even when no
|
|
|
6
6
|
TypeScript signature moved. A consumer upgrading must be able to tell whether
|
|
7
7
|
manifests already published still mean what they meant.
|
|
8
8
|
|
|
9
|
+
## 0.15.0 — 2026-09-08
|
|
10
|
+
|
|
11
|
+
**No manifest changes meaning, and nothing already published is read
|
|
12
|
+
differently.** This adds a reader. Every declaration it consumes — `projections`
|
|
13
|
+
for which kinds are files, `records` for the fold and for `hiddenWhen`, `widget`
|
|
14
|
+
for the fallback chain — is one manifests already carry, read in a new place.
|
|
15
|
+
|
|
16
|
+
The folder read model RFC 0.4 §4 and §5 specify: given a folder id, list what is
|
|
17
|
+
in it **across apps**, resolving each file through the manifest of whoever owns
|
|
18
|
+
it. Both reference apps consume this, so it belongs here rather than in either.
|
|
19
|
+
|
|
20
|
+
- **`resolveFolderContents(folder, query, lookupPeople?, cache?)`** returns the
|
|
21
|
+
folder's identity and its files as ordinary `ForeignObject`s — the same shape
|
|
22
|
+
an `naddr` in a message resolves to, carrying the same slots, actions and link
|
|
23
|
+
back into the owning app.
|
|
24
|
+
- **`listFolders(query)`** is the sidebar's half: every folder this identity can
|
|
25
|
+
see, named. It asks by kind rather than by walking anything, which is §4.2's
|
|
26
|
+
own post-mortem on REW-11 — discovering children only through their parent
|
|
27
|
+
loses them when the parent goes.
|
|
28
|
+
- **`KIND_FOLDER_STATE`** is `30890`, allocated by RFC 0.4 §12.1. Relay-signed,
|
|
29
|
+
addressable and **global**: §4.2 shows three of the four properties a folder
|
|
30
|
+
needs are impossible if its state carries an `h`.
|
|
31
|
+
|
|
32
|
+
**A topic and a project are peers because §5.2 made them peers**, not because
|
|
33
|
+
anything here special-cases either. A channel turned out to be addressable — the
|
|
34
|
+
relay emits a `kind:39000` per channel whose `d` is the channel uuid — so one
|
|
35
|
+
tag type, `a`, names every file, and a folder listing a topic beside a project
|
|
36
|
+
needs no second mechanism.
|
|
37
|
+
|
|
38
|
+
**Two rules in here are product decisions rather than mechanism**, and both are
|
|
39
|
+
worth reading before changing:
|
|
40
|
+
|
|
41
|
+
- **A file the reader cannot see is absent, not "unavailable".** A deliberate
|
|
42
|
+
divergence from upstream NIP-MP, whose fold requires the opposite for public
|
|
43
|
+
repositories. The count is the disclosure: a folder rendering three rows and
|
|
44
|
+
two placeholders has told an outsider how much they are missing. Nothing in
|
|
45
|
+
the return value counts what was dropped, and a test asserts that.
|
|
46
|
+
- **A file is anything addressable.** A `kind:9` message carries no `d`, so it
|
|
47
|
+
is conversation rather than contents. That is the whole discriminator, and it
|
|
48
|
+
needs no kind numbers.
|
|
49
|
+
|
|
50
|
+
**A folder with no state event still lists**, by containment — `h`, plus
|
|
51
|
+
`buzz-channel` for a record published globally, which on production today is
|
|
52
|
+
nine of nineteen projects. Kept because both wire shapes coexist permanently: no
|
|
53
|
+
migration is available, and a reader that understood only folder state would
|
|
54
|
+
show every folder on production as empty. It is an approximation and says so
|
|
55
|
+
(`source: 'channel'`), because containment by `h` **cannot list a topic** — under
|
|
56
|
+
`h` the topic is the container rather than something inside it.
|
|
57
|
+
|
|
58
|
+
Measured against production reading three folders through one cache: 24, 25 and
|
|
59
|
+
9 files cost 5, 5 and 4 round trips warm. Flat in the number of files, linear in
|
|
60
|
+
the number of apps.
|
|
61
|
+
|
|
62
|
+
**0.13.0 and 0.14.0 have no entries here.** Both were published; neither
|
|
63
|
+
updated this file. Not reconstructed here, because their commit messages are
|
|
64
|
+
detailed and the person who made them should say what they meant.
|
|
65
|
+
|
|
9
66
|
## 0.12.0 — 2026-09-04
|
|
10
67
|
|
|
11
68
|
**No manifest changes meaning, and nothing is read differently.** This adds a
|
package/README.md
CHANGED
|
@@ -263,7 +263,6 @@ this suite knows nothing about, which is the point.
|
|
|
263
263
|
"records": {
|
|
264
264
|
"changeKind": 1851, "targetTag": "a", "fieldTag": "field", "valueTag": "value",
|
|
265
265
|
"order": ["ts", "created_at", "id"], "rule": "last-write-wins-per-field"
|
|
266
|
-
// "folder": "identifier" — only if your object *is* a container; see below
|
|
267
266
|
},
|
|
268
267
|
"projections": {
|
|
269
268
|
"31800": {
|
|
@@ -301,7 +300,7 @@ A chat app now renders your candidate — with your stages, your colours, your
|
|
|
301
300
|
recruiter — in **its** design language, and lets someone move a stage without
|
|
302
301
|
leaving the conversation. It knows nothing about hiring.
|
|
303
302
|
|
|
304
|
-
|
|
303
|
+
Six things that will bite, each of them something we got wrong first:
|
|
305
304
|
|
|
306
305
|
- **`title` is required.** It is what makes ignoring an unknown slot safe.
|
|
307
306
|
- **A mutable field must be a `fold`, never a `tag`.** A status that can be set
|
|
@@ -323,14 +322,71 @@ Seven things that will bite, each of them something we got wrong first:
|
|
|
323
322
|
nothing else. `"Add"` is not rejected anywhere — your action is simply never
|
|
324
323
|
the one chosen, and nothing tells you. `actionProblems()` is exported for the
|
|
325
324
|
same reason as the check above: run it in your own tests before you sign.
|
|
326
|
-
- **
|
|
327
|
-
write
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
325
|
+
- **Your objects need a Folder tag to be actionable.** A consumer finds where to
|
|
326
|
+
write by reading `h`, then the relay's `buzz-channel`, on the object being
|
|
327
|
+
acted on; an object carrying neither is refused for having nowhere to go.
|
|
328
|
+
`folderOf()` is exported so you can check what a consumer will conclude about
|
|
329
|
+
your records.
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## 5. Read a whole folder, across every app in it
|
|
334
|
+
|
|
335
|
+
A Folder is where the suite's navigation lives: teams you belong to, and the
|
|
336
|
+
files inside them. `resolveFolderContents` answers *"what is in this folder?"*
|
|
337
|
+
without knowing what any of the answers are.
|
|
338
|
+
|
|
339
|
+
```ts
|
|
340
|
+
import { resolveFolderContents, createProjectionCache } from '@estiva-app/interop'
|
|
341
|
+
|
|
342
|
+
const cache = createProjectionCache()
|
|
343
|
+
const folder = await resolveFolderContents(folderId, query, undefined, cache)
|
|
344
|
+
|
|
345
|
+
folder.name // the folder names itself
|
|
346
|
+
folder.files // ForeignObjects, exactly as §1 draws them
|
|
347
|
+
folder.source // 'state' | 'channel' — see below
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
Every file comes back as the same `ForeignObject` §1 renders, so a folder view
|
|
351
|
+
is §1 in a loop. **A project from one app and a topic from another sit side by
|
|
352
|
+
side as peers**, because RFC 0.4 §5.2 established that one tag type — `a` —
|
|
353
|
+
names every file, topics included. Nothing here special-cases either.
|
|
354
|
+
|
|
355
|
+
Reuse one `ProjectionCache` across folders. Round trips are flat in the number
|
|
356
|
+
of files and linear in the number of *apps*: 24, 25 and 9 files measured at 5, 5
|
|
357
|
+
and 4 requests warm.
|
|
358
|
+
|
|
359
|
+
### A file you cannot see is absent, not greyed out
|
|
360
|
+
|
|
361
|
+
**The count is the disclosure.** A folder that renders three rows and two
|
|
362
|
+
placeholders has told an outsider exactly how much they are missing, which for a
|
|
363
|
+
folder named after a person is the sensitive part. So an address that resolves
|
|
364
|
+
to nothing is dropped, and nothing in the return value counts what was dropped.
|
|
365
|
+
|
|
366
|
+
This is a deliberate divergence from upstream NIP-MP, whose fold requires the
|
|
367
|
+
opposite for public repositories. It is also why this does not reuse
|
|
368
|
+
`resolveForeignObject`, which returns `unreachable: true` — right for one pasted
|
|
369
|
+
link, wrong for a list.
|
|
370
|
+
|
|
371
|
+
### `source` tells you which model you are looking at
|
|
372
|
+
|
|
373
|
+
`'state'` means the relay maintains the folder's contents. `'channel'` is the
|
|
374
|
+
approximation available before that exists: containment read off each file's own
|
|
375
|
+
`h` tag. It lists an app's records perfectly well and **cannot list a topic**,
|
|
376
|
+
because under `h` a topic is the container rather than something inside it. A UI
|
|
377
|
+
explaining a short list should read this field.
|
|
378
|
+
|
|
379
|
+
### A sidebar
|
|
380
|
+
|
|
381
|
+
```ts
|
|
382
|
+
import { listFolders } from '@estiva-app/interop'
|
|
383
|
+
|
|
384
|
+
const folders = await listFolders(query) // { id, name, hasState }[]
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Asks for folders by kind rather than walking anything else. Discovering things
|
|
388
|
+
only through their parent loses them when the parent goes — the failure RFC 0.4
|
|
389
|
+
§4.2 records, one level up from where it was first paid for.
|
|
334
390
|
|
|
335
391
|
---
|
|
336
392
|
|
package/dist/index.d.ts
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* of every app that installed it, which is the objection that rules out
|
|
25
25
|
* iframes.
|
|
26
26
|
*/
|
|
27
|
-
export { resolveManifest, resolveForeignObject, resolveForeignEvent, resolveFolderProject, commentKindsOf, buildActionEvent, pickWidget, widgetChainProblem, actionProblems, folderOf, MIN_ACTION_DESCRIPTION, CLOSED_WIDGETS, contentFormatOf, BODY_SLOT, CONTENT_FORMAT_TAG, BLOCK_DOCUMENT_FORMAT, type ContentFormat, peopleViaRelay, createProjectionCache, createPeopleCache, MANIFEST_TTL_MS, PROFILE_HIT_TTL_MS, PROFILE_MISS_TTL_MS, type PeopleCache, type PeopleCacheOptions, type ProjectionCache, type ResolvedManifest, type QueryFn, type PeopleFn, type People, type ForeignObject, type FolderProject, type ResolvedSlot, type ResolvedAction, type ActionFormField, type ManifestAction, type ActionEffect, ACTION_EFFECTS, type UnsignedActionEvent, } from './projection.js';
|
|
27
|
+
export { resolveManifest, resolveForeignObject, resolveForeignEvent, resolveFolderProject, resolveFolderContents, listFolders, KIND_FOLDER_STATE, commentKindsOf, buildActionEvent, pickWidget, widgetChainProblem, actionProblems, folderOf, MIN_ACTION_DESCRIPTION, CLOSED_WIDGETS, contentFormatOf, BODY_SLOT, CONTENT_FORMAT_TAG, BLOCK_DOCUMENT_FORMAT, type ContentFormat, peopleViaRelay, createProjectionCache, createPeopleCache, MANIFEST_TTL_MS, PROFILE_HIT_TTL_MS, PROFILE_MISS_TTL_MS, type PeopleCache, type PeopleCacheOptions, type ProjectionCache, type ResolvedManifest, type QueryFn, type PeopleFn, type People, type ForeignObject, type FolderProject, type FolderContents, type FolderSummary, type ResolvedSlot, type ResolvedAction, type ActionFormField, type ManifestAction, type ActionEffect, ACTION_EFFECTS, type UnsignedActionEvent, } from './projection.js';
|
|
28
28
|
/**
|
|
29
29
|
* RFC 0.5 §7's URL grammar — how an object is named in an address bar, and how
|
|
30
30
|
* a pasted link is matched back to one.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,aAAa,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAA;AAExB;;;;;;;GAOG;AACH,OAAO,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EACrB,KAAK,aAAa,EAClB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,KAAK,WAAW,EAChB,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,cAAc,EACd,KAAK,mBAAmB,GACzB,MAAM,iBAAiB,CAAA;AAExB;;;;;;;GAOG;AACH,OAAO,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,EACd,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
* of every app that installed it, which is the objection that rules out
|
|
25
25
|
* iframes.
|
|
26
26
|
*/
|
|
27
|
-
export { resolveManifest, resolveForeignObject, resolveForeignEvent, resolveFolderProject, commentKindsOf, buildActionEvent, pickWidget, widgetChainProblem, actionProblems, folderOf, MIN_ACTION_DESCRIPTION, CLOSED_WIDGETS, contentFormatOf, BODY_SLOT, CONTENT_FORMAT_TAG, BLOCK_DOCUMENT_FORMAT, peopleViaRelay, createProjectionCache, createPeopleCache, MANIFEST_TTL_MS, PROFILE_HIT_TTL_MS, PROFILE_MISS_TTL_MS, ACTION_EFFECTS, } from './projection.js';
|
|
27
|
+
export { resolveManifest, resolveForeignObject, resolveForeignEvent, resolveFolderProject, resolveFolderContents, listFolders, KIND_FOLDER_STATE, commentKindsOf, buildActionEvent, pickWidget, widgetChainProblem, actionProblems, folderOf, MIN_ACTION_DESCRIPTION, CLOSED_WIDGETS, contentFormatOf, BODY_SLOT, CONTENT_FORMAT_TAG, BLOCK_DOCUMENT_FORMAT, peopleViaRelay, createProjectionCache, createPeopleCache, MANIFEST_TTL_MS, PROFILE_HIT_TTL_MS, PROFILE_MISS_TTL_MS, ACTION_EFFECTS, } from './projection.js';
|
|
28
28
|
/**
|
|
29
29
|
* RFC 0.5 §7's URL grammar — how an object is named in an address bar, and how
|
|
30
30
|
* a pasted link is matched back to one.
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EAErB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,QAAQ,EACR,sBAAsB,EACtB,cAAc,EACd,eAAe,EACf,SAAS,EACT,kBAAkB,EAClB,qBAAqB,EAErB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EAiBnB,cAAc,GAEf,MAAM,iBAAiB,CAAA;AAExB;;;;;;;GAOG;AACH,OAAO,EACL,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,cAAc,GAGf,MAAM,gBAAgB,CAAA"}
|
package/dist/projection.d.ts
CHANGED
|
@@ -135,25 +135,6 @@ interface RecordsRule {
|
|
|
135
135
|
field: string;
|
|
136
136
|
equals: string;
|
|
137
137
|
};
|
|
138
|
-
/**
|
|
139
|
-
* Where this app's objects say which Folder they belong to — PRO-18.
|
|
140
|
-
*
|
|
141
|
-
* Absent, and the answer is the tags: NIP-29's `h`, or the relay's own
|
|
142
|
-
* `buzz-channel` for a record published *globally* while still naming a
|
|
143
|
-
* Folder. {@link folderOf} reads both and always has to.
|
|
144
|
-
*
|
|
145
|
-
* `"identifier"` is the third case and the reason this field exists: an
|
|
146
|
-
* object that **is** a container names no Folder because it is one, and its
|
|
147
|
-
* `d` is that Folder's id. A Peek topic is the case in hand — a `kind:39000`
|
|
148
|
-
* whose identifier is the channel — and without this an action performed on
|
|
149
|
-
* one fails with "that object has no Folder, so there is nowhere to write",
|
|
150
|
-
* which is true of the tags and false of the object.
|
|
151
|
-
*
|
|
152
|
-
* Declared rather than inferred from the kind. A consumer that special-cased
|
|
153
|
-
* 39000 would know what Peek is, which is the one thing this layer may not
|
|
154
|
-
* do; the owner says it, and the rule works for an app nobody here wrote.
|
|
155
|
-
*/
|
|
156
|
-
folder?: 'identifier';
|
|
157
138
|
}
|
|
158
139
|
interface SlotSpec {
|
|
159
140
|
/**
|
|
@@ -401,7 +382,7 @@ interface Manifest {
|
|
|
401
382
|
}[]>;
|
|
402
383
|
}
|
|
403
384
|
/**
|
|
404
|
-
* Which Folder an object belongs to —
|
|
385
|
+
* Which Folder an object belongs to — both spellings, in one place.
|
|
405
386
|
*
|
|
406
387
|
* **This lived in Peek and had to move** (PRO-18). Its comment there said so:
|
|
407
388
|
* reading only `h` made five of Ship's fifteen projects unactionable, because
|
|
@@ -411,17 +392,20 @@ interface Manifest {
|
|
|
411
392
|
* are the relay's and NIP-29's, so knowing them is not knowing what any app
|
|
412
393
|
* is.
|
|
413
394
|
*
|
|
414
|
-
*
|
|
415
|
-
*
|
|
416
|
-
*
|
|
417
|
-
*
|
|
418
|
-
*
|
|
419
|
-
*
|
|
395
|
+
* **0.13.0 had a third case and 0.14.0 withdrew it.** A manifest could declare
|
|
396
|
+
* `records.folder: "identifier"`, meaning *my objects are containers, so the
|
|
397
|
+
* Folder is the object's own `d`*. Its only instance was a Peek topic, and
|
|
398
|
+
* RFC 0.5 §1 retires that shape: a Folder holds several files of the same kind
|
|
399
|
+
* — three topics and two projects — so a topic becomes a file inside a Folder
|
|
400
|
+
* and carries an `h` like everything else. A vocabulary field whose only
|
|
401
|
+
* instance is going away is one every future producer has to read and none can
|
|
402
|
+
* use.
|
|
403
|
+
*
|
|
404
|
+
* Returns `null` when neither tag says — which is a real answer. An object with
|
|
405
|
+
* no Folder has nowhere for a write to go, and guessing at one publishes into
|
|
420
406
|
* somebody else's channel.
|
|
421
407
|
*/
|
|
422
|
-
export declare function folderOf(root: SignedEvent
|
|
423
|
-
folder?: 'identifier';
|
|
424
|
-
}): string | null;
|
|
408
|
+
export declare function folderOf(root: SignedEvent): string | null;
|
|
425
409
|
/** What {@link resolveManifest} answers with. */
|
|
426
410
|
export interface ResolvedManifest {
|
|
427
411
|
manifest: Manifest;
|
|
@@ -892,4 +876,123 @@ export declare function buildActionEvent(args: {
|
|
|
892
876
|
* the one slot out of them.
|
|
893
877
|
*/
|
|
894
878
|
export declare function resolveFolderProjectSlotsForTest(manifest: Manifest, root: SignedEvent): string | undefined;
|
|
879
|
+
/**
|
|
880
|
+
* The Folder as the relay maintains it — RFC 0.4 §12.1.
|
|
881
|
+
*
|
|
882
|
+
* Relay-signed, addressable, and **global**. §4.2 is worth reading before
|
|
883
|
+
* changing that last word: three of the four properties a folder must have are
|
|
884
|
+
* impossible if its state carries an `h`, because `h` files it under a channel
|
|
885
|
+
* and gates reads by access. Exploring folders you are not in, following one,
|
|
886
|
+
* and a file having one home while being referenced from elsewhere all need an
|
|
887
|
+
* address that resolves without membership. So the channel keeps doing access
|
|
888
|
+
* and conversation, and the folder becomes a layer above it.
|
|
889
|
+
*
|
|
890
|
+
* **Read-only here.** A client changes a folder by publishing a `kind:1852`
|
|
891
|
+
* command and the relay emits the new state (§4.1). A folder is not a
|
|
892
|
+
* user-signed event because NIP-01 addressable events are single-signer by
|
|
893
|
+
* construction — the address is `(pubkey, kind, d)`, so a second person adding
|
|
894
|
+
* a file would not replace your folder, they would create a different one.
|
|
895
|
+
*/
|
|
896
|
+
export declare const KIND_FOLDER_STATE = 30890;
|
|
897
|
+
/** One folder, enough to draw a sidebar row. */
|
|
898
|
+
export interface FolderSummary {
|
|
899
|
+
/**
|
|
900
|
+
* The folder's uuid. **One uuid, three roles** — the channel id, the `h` on
|
|
901
|
+
* everything in it, and the `d` on both its `39000` and its `30890` (§5.2,
|
|
902
|
+
* measured across all of production's channels).
|
|
903
|
+
*/
|
|
904
|
+
id: string;
|
|
905
|
+
name?: string;
|
|
906
|
+
/** True once the relay maintains state for it, rather than it being a bare channel. */
|
|
907
|
+
hasState: boolean;
|
|
908
|
+
}
|
|
909
|
+
/** A folder and everything in it, each file drawn through its owner's manifest. */
|
|
910
|
+
export interface FolderContents extends FolderSummary {
|
|
911
|
+
/** The folder state's address, absent until a state event exists. */
|
|
912
|
+
address?: string;
|
|
913
|
+
/**
|
|
914
|
+
* The files this folder holds.
|
|
915
|
+
*
|
|
916
|
+
* **Peers by construction, not by special case.** A Peek topic and a Ship
|
|
917
|
+
* project sit side by side because both are `a` tags in one list, and §5.2's
|
|
918
|
+
* finding is exactly that one tag type is enough to name either: a channel
|
|
919
|
+
* turned out to be addressable after all, so a topic needs no wrapper and no
|
|
920
|
+
* second mechanism. Nothing in this function knows what either app is.
|
|
921
|
+
*
|
|
922
|
+
* Ordered as the folder lists them. A file that resolved to nothing is
|
|
923
|
+
* **absent rather than marked** — see {@link resolveFolderContents}.
|
|
924
|
+
*/
|
|
925
|
+
files: ForeignObject[];
|
|
926
|
+
/**
|
|
927
|
+
* Where the list came from, because the two are not equivalent.
|
|
928
|
+
*
|
|
929
|
+
* `state` is the model. `channel` is the approximation available before a
|
|
930
|
+
* folder has any state: containment inferred from `h`, which can list an
|
|
931
|
+
* app's records and **can never list a topic**, because under `h` the topic
|
|
932
|
+
* *is* the container rather than a thing inside it. A consumer that needs to
|
|
933
|
+
* explain a short list is reading this field.
|
|
934
|
+
*/
|
|
935
|
+
source: 'state' | 'channel';
|
|
936
|
+
}
|
|
937
|
+
/**
|
|
938
|
+
* Every folder this identity can see, for a sidebar.
|
|
939
|
+
*
|
|
940
|
+
* Both shapes in one pass: folders the relay maintains state for, and bare
|
|
941
|
+
* channels that have none yet. A channel with state appears once, named by its
|
|
942
|
+
* state — the folder's name is the folder's to say.
|
|
943
|
+
*
|
|
944
|
+
* **A direct route, deliberately.** §4.2's post-mortem on REW-11 is that
|
|
945
|
+
* discovering children only through their parent loses them when the parent
|
|
946
|
+
* goes; a sidebar built by walking something else would inherit exactly that.
|
|
947
|
+
* This asks for folders by kind.
|
|
948
|
+
*/
|
|
949
|
+
export declare function listFolders(query: QueryFn): Promise<FolderSummary[]>;
|
|
950
|
+
/**
|
|
951
|
+
* Everything in one folder, resolved through the manifests of the apps that own it.
|
|
952
|
+
*
|
|
953
|
+
* The cross-app read the whole model rests on: given a folder id, list its
|
|
954
|
+
* files whatever kind they are and whoever wrote them, so two apps drawing the
|
|
955
|
+
* same folder show the same things. Both apps consume this rather than either
|
|
956
|
+
* one owning it.
|
|
957
|
+
*
|
|
958
|
+
* ## A file the reader cannot see is absent, not "unavailable"
|
|
959
|
+
*
|
|
960
|
+
* The one rule here that is a product decision rather than a mechanism, and a
|
|
961
|
+
* deliberate divergence from upstream's NIP-MP, whose fold requires the
|
|
962
|
+
* opposite for public repositories. **The count is the disclosure**: a folder
|
|
963
|
+
* that renders three rows and two greyed-out placeholders has told an outsider
|
|
964
|
+
* how much they are missing, which for a folder named after a person is the
|
|
965
|
+
* sensitive part. So an address that resolves to nothing is dropped, and
|
|
966
|
+
* nothing in the return value counts what was dropped.
|
|
967
|
+
*
|
|
968
|
+
* This is why the batch below cannot use {@link resolveForeignObject}
|
|
969
|
+
* unchanged: that returns `unreachable: true` so an inline reference can say
|
|
970
|
+
* "you may not have access", which is right for one pasted link and wrong for
|
|
971
|
+
* a list.
|
|
972
|
+
*
|
|
973
|
+
* ## Round trips do not grow with the folder
|
|
974
|
+
*
|
|
975
|
+
* **Flat in the number of files, linear in the number of apps.** The folder
|
|
976
|
+
* itself, the handler sweep, the contents, one query for every root at once
|
|
977
|
+
* and every change with it, and one for the people — then two more per
|
|
978
|
+
* distinct `(kind, author)` for NIP-89 discovery, which {@link ProjectionCache}
|
|
979
|
+
* memoises away.
|
|
980
|
+
*
|
|
981
|
+
* Measured against production, reading three folders through one cache:
|
|
982
|
+
*
|
|
983
|
+
* | folder | files | cold | warm |
|
|
984
|
+
* | --- | --- | --- | --- |
|
|
985
|
+
* | Shared foundation packages | 24 | 11 | 5 |
|
|
986
|
+
* | Feedback on Peek | 25 | 9 | 5 |
|
|
987
|
+
* | Folders | 9 | 6 | 4 |
|
|
988
|
+
*
|
|
989
|
+
* Twenty-five files and nine cost the same warm, which is the property worth
|
|
990
|
+
* having. A resolve per file would have been four *each* against a relay that
|
|
991
|
+
* meters reads at 300 a minute — a folder of twenty-five would not have loaded.
|
|
992
|
+
*/
|
|
993
|
+
export declare function resolveFolderContents(folder: string, query: QueryFn,
|
|
994
|
+
/** Defaults to asking the relay. The browser passes a cached lookup. */
|
|
995
|
+
lookupPeople?: PeopleFn,
|
|
996
|
+
/** See {@link ProjectionCache}. Omitting it is exactly the old behaviour. */
|
|
997
|
+
cache?: ProjectionCache): Promise<FolderContents>;
|
|
895
998
|
//# sourceMappingURL=projection.d.ts.map
|
package/dist/projection.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAiF,KAAK,cAAc,EAAqB,MAAM,sBAAsB,CAAA;AAC5J,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEnF,+EAA+E;AAC/E,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAA;AAEpF,oDAAoD;AACpD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,EAAE,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAE5C;;;;;;GAMG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAA;AAE7D,4DAA4D;AAC5D;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAc,CAAA;AAE7C;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,QAAS,CAAA;AAEzC,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,yEAAyE;IACzE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,WAAW;IAC1B,kEAAkE;IAClE,OAAO,CAAC,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAA;IACtC,uDAAuD;IACvD,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAAA;IAClC,sDAAsD;IACtD,KAAK,IAAI,IAAI,CAAA;CACd;AAKD,wBAAgB,iBAAiB,CAAC,OAAO,GAAE,kBAAuB,GAAG,WAAW,CAiC/E;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAevD;AA0CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAK3D;AAED,0DAA0D;AAC1D,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ;;;;;;;;;;OAUG;IACH,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../src/projection.ts"],"names":[],"mappings":"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"}
|