@hatk/hatk 0.0.1-alpha.101 → 0.0.1-alpha.102
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/spaces/credential.d.ts +16 -0
- package/dist/spaces/credential.d.ts.map +1 -1
- package/dist/spaces/credential.js +45 -0
- package/dist/spaces/index.d.ts +2 -1
- package/dist/spaces/index.d.ts.map +1 -1
- package/dist/spaces/index.js +2 -1
- package/dist/xrpc.d.ts +21 -0
- package/dist/xrpc.d.ts.map +1 -1
- package/dist/xrpc.js +12 -0
- package/package.json +1 -1
|
@@ -61,6 +61,22 @@ export declare function getSpaceCredential(oauthConfig: OAuthConfig, space: stri
|
|
|
61
61
|
refresh?: boolean;
|
|
62
62
|
}): Promise<SpaceCredential>;
|
|
63
63
|
export declare function forgetSpaceCredential(space: string): void;
|
|
64
|
+
/**
|
|
65
|
+
* `readerDid`'s own credential for `space`, minted with their stored session.
|
|
66
|
+
*
|
|
67
|
+
* Throws a {@link SpaceCredentialError} when they may not read it, carrying the
|
|
68
|
+
* authority's status and code, and caches only successes — a refusal is asked
|
|
69
|
+
* again next time rather than remembered. `refresh` mints anew, for a read the
|
|
70
|
+
* host refused despite a credential that had not expired by our clock.
|
|
71
|
+
*/
|
|
72
|
+
export declare function readerSpaceCredential(oauthConfig: OAuthConfig, readerDid: string, space: string, opts?: {
|
|
73
|
+
refresh?: boolean;
|
|
74
|
+
}): Promise<SpaceCredential>;
|
|
75
|
+
/**
|
|
76
|
+
* Drop `readerDid`'s cached credential for `space`, after something that may
|
|
77
|
+
* have changed their standing in it — leaving it, say. The next read mints anew.
|
|
78
|
+
*/
|
|
79
|
+
export declare function forgetReaderSpaceCredential(readerDid: string, space: string): void;
|
|
64
80
|
/** For tests: drop every cached credential. */
|
|
65
81
|
export declare function resetSpaceCredentials(): void;
|
|
66
82
|
//# sourceMappingURL=credential.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/spaces/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAa/C,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAIlB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CACtE;AA4CD,wEAAwE;AACxE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAwC1B;AAUD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAwB1B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzD;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"credential.d.ts","sourceRoot":"","sources":["../../src/spaces/credential.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAa/C,qBAAa,oBAAqB,SAAQ,KAAK;IAE3C,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM;gBADZ,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM;CAIlB;AAED,iFAAiF;AACjF,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEjD;AAED,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;CACtE;AA4CD,wEAAwE;AACxE,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,eAAe,CAAC,CAwC1B;AAUD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,EAAE,EACpB,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAwB1B;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAEzD;AAgBD;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GAC/B,OAAO,CAAC,eAAe,CAAC,CAgB1B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAElF;AAED,+CAA+C;AAC/C,wBAAgB,qBAAqB,IAAI,IAAI,CAG5C"}
|
|
@@ -169,7 +169,52 @@ export async function getSpaceCredential(oauthConfig, space, candidates, opts =
|
|
|
169
169
|
export function forgetSpaceCredential(space) {
|
|
170
170
|
cache.delete(space);
|
|
171
171
|
}
|
|
172
|
+
// --- Per reader ---
|
|
173
|
+
/**
|
|
174
|
+
* Credentials minted as one particular reader, for reads made on their behalf.
|
|
175
|
+
*
|
|
176
|
+
* Kept apart from the cache above, which holds whichever session works for a
|
|
177
|
+
* space and is right for indexing it. A read made for a viewer has to be made
|
|
178
|
+
* as that viewer: the authority's answer is the authorization.
|
|
179
|
+
*/
|
|
180
|
+
const readerCache = new Map();
|
|
181
|
+
/** Pairs held at once. Past this the least recently used goes. */
|
|
182
|
+
const MAX_READER_CREDENTIALS = 5000;
|
|
183
|
+
/**
|
|
184
|
+
* `readerDid`'s own credential for `space`, minted with their stored session.
|
|
185
|
+
*
|
|
186
|
+
* Throws a {@link SpaceCredentialError} when they may not read it, carrying the
|
|
187
|
+
* authority's status and code, and caches only successes — a refusal is asked
|
|
188
|
+
* again next time rather than remembered. `refresh` mints anew, for a read the
|
|
189
|
+
* host refused despite a credential that had not expired by our clock.
|
|
190
|
+
*/
|
|
191
|
+
export async function readerSpaceCredential(oauthConfig, readerDid, space, opts = {}) {
|
|
192
|
+
const key = `${readerDid} ${space}`;
|
|
193
|
+
const cached = readerCache.get(key);
|
|
194
|
+
readerCache.delete(key);
|
|
195
|
+
if (!opts.refresh && fresh(cached)) {
|
|
196
|
+
readerCache.set(key, cached);
|
|
197
|
+
return cached;
|
|
198
|
+
}
|
|
199
|
+
const credential = await mintSpaceCredential(oauthConfig, space, readerDid);
|
|
200
|
+
readerCache.set(key, credential);
|
|
201
|
+
while (readerCache.size > MAX_READER_CREDENTIALS) {
|
|
202
|
+
const oldest = readerCache.keys().next();
|
|
203
|
+
if (oldest.done)
|
|
204
|
+
break;
|
|
205
|
+
readerCache.delete(oldest.value);
|
|
206
|
+
}
|
|
207
|
+
return credential;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Drop `readerDid`'s cached credential for `space`, after something that may
|
|
211
|
+
* have changed their standing in it — leaving it, say. The next read mints anew.
|
|
212
|
+
*/
|
|
213
|
+
export function forgetReaderSpaceCredential(readerDid, space) {
|
|
214
|
+
readerCache.delete(`${readerDid} ${space}`);
|
|
215
|
+
}
|
|
172
216
|
/** For tests: drop every cached credential. */
|
|
173
217
|
export function resetSpaceCredentials() {
|
|
174
218
|
cache.clear();
|
|
219
|
+
readerCache.clear();
|
|
175
220
|
}
|
package/dist/spaces/index.d.ts
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import type { OAuthConfig, SpacesConfig } from '../config.ts';
|
|
9
9
|
import { unwatchSpace, watchSpace } from './engine.ts';
|
|
10
10
|
export { collectionsForSpaceType, reconcileAll, reconcileSpace, syncSpaceRepo, unwatchSpace, watchSpace, } from './engine.ts';
|
|
11
|
-
export { getSpaceCredential, mintSpaceCredential, isNotAuthorized, isSpaceGone } from './credential.ts';
|
|
11
|
+
export { getSpaceCredential, mintSpaceCredential, readerSpaceCredential, forgetReaderSpaceCredential, isNotAuthorized, isSpaceGone, SpaceCredentialError, type SpaceCredential, } from './credential.ts';
|
|
12
12
|
export { listSpaceRepos, listSpaceWatches, type SpaceWatch } from './store.ts';
|
|
13
13
|
export { isSpaceReadable, readableSpaces, withReadableSpaces } from './visibility.ts';
|
|
14
14
|
export { UngatedSpaceQueryError, spaceBackedCollections } from './guard.ts';
|
|
@@ -21,6 +21,7 @@ export { forgetViewerSpaces, readableSpacesFor, viewerCredential } from './viewe
|
|
|
21
21
|
export declare function serverDpopProof(method: string, url: string, accessToken?: string, nonce?: string): Promise<string>;
|
|
22
22
|
export { handleWriteNotice } from './engine.ts';
|
|
23
23
|
export { clearPendingNotices, NoticeError, parseWriteNotice, scheduleNoticeSync, verifyNotice, type WriteNotice, } from './notify.ts';
|
|
24
|
+
export { generateSpaceSigKey, spaceSigHeaders, type SpaceSigKey } from './signature.ts';
|
|
24
25
|
export * from './uri.ts';
|
|
25
26
|
export { asPreset, blobCid, resetSpaceBlobCache, type SpaceBlobPreset, spaceBlobUrl } from './blob.ts';
|
|
26
27
|
export { records, requireSpace, spaceRecords } from './records.ts';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spaces/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG7D,OAAO,EAA+D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAOnH,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/spaces/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAG7D,OAAO,EAA+D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAOnH,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,YAAY,EACZ,UAAU,GACX,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,qBAAqB,EACrB,2BAA2B,EAC3B,eAAe,EACf,WAAW,EACX,oBAAoB,EACpB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAA;AAC9E,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACrF,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAErF;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,MAAM,CAAC,CAIjB;AACD,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,KAAK,WAAW,GACjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACvF,cAAc,UAAU,CAAA;AACxB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AACtG,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAWlE,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAE9C;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYzG;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAA;IACpB,KAAK,EAAE,WAAW,GAAG,IAAI,CAAA;IACzB,GAAG,EAAE,MAAM,CAAA;IACX,6CAA6C;IAC7C,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CACzB;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,kBAAkB,GAAG,IAAI,CAqD1D;AAED,wBAAgB,UAAU,IAAI,IAAI,CAMjC;AAED,+FAA+F;AAC/F,OAAO,EAAE,UAAU,IAAI,WAAW,EAAE,YAAY,IAAI,aAAa,EAAE,CAAA"}
|
package/dist/spaces/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { clearPendingNotices } from "./notify.js";
|
|
|
14
14
|
import { getServerKey } from "../oauth/db.js";
|
|
15
15
|
import { createDpopProof } from "../oauth/dpop.js";
|
|
16
16
|
export { collectionsForSpaceType, reconcileAll, reconcileSpace, syncSpaceRepo, unwatchSpace, watchSpace, } from "./engine.js";
|
|
17
|
-
export { getSpaceCredential, mintSpaceCredential, isNotAuthorized, isSpaceGone } from "./credential.js";
|
|
17
|
+
export { getSpaceCredential, mintSpaceCredential, readerSpaceCredential, forgetReaderSpaceCredential, isNotAuthorized, isSpaceGone, SpaceCredentialError, } from "./credential.js";
|
|
18
18
|
export { listSpaceRepos, listSpaceWatches } from "./store.js";
|
|
19
19
|
export { isSpaceReadable, readableSpaces, withReadableSpaces } from "./visibility.js";
|
|
20
20
|
export { UngatedSpaceQueryError, spaceBackedCollections } from "./guard.js";
|
|
@@ -32,6 +32,7 @@ export async function serverDpopProof(method, url, accessToken, nonce) {
|
|
|
32
32
|
}
|
|
33
33
|
export { handleWriteNotice } from "./engine.js";
|
|
34
34
|
export { clearPendingNotices, NoticeError, parseWriteNotice, scheduleNoticeSync, verifyNotice, } from "./notify.js";
|
|
35
|
+
export { generateSpaceSigKey, spaceSigHeaders } from "./signature.js";
|
|
35
36
|
export * from "./uri.js";
|
|
36
37
|
export { asPreset, blobCid, resetSpaceBlobCache, spaceBlobUrl } from "./blob.js";
|
|
37
38
|
export { records, requireSpace, spaceRecords } from "./records.js";
|
package/dist/xrpc.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type SpaceCredential } from './spaces/credential.ts';
|
|
1
2
|
import type { BaseContext } from './hydrate.ts';
|
|
2
3
|
import type { Row, FlatRow } from './lex-types.ts';
|
|
3
4
|
import type { OAuthConfig, CdnConfig } from './config.ts';
|
|
@@ -82,6 +83,26 @@ export interface XrpcContext<P = Record<string, string>, Records extends Record<
|
|
|
82
83
|
* the granted scopes still apply. See {@link pdsXrpc}.
|
|
83
84
|
*/
|
|
84
85
|
pds: (nsid: string, options?: PdsXrpcOptions) => Promise<Record<string, unknown>>;
|
|
86
|
+
/**
|
|
87
|
+
* The viewer's own credential for a space, minted with their session and
|
|
88
|
+
* cached until shortly before it expires. Its `fetch` presents it to any
|
|
89
|
+
* host in the space, signed for the repo a request names (or the authority).
|
|
90
|
+
*
|
|
91
|
+
* For reads an app makes itself, as the viewer, that the index does not
|
|
92
|
+
* serve. Throws a `SpaceCredentialError` — `status` and `code` are the
|
|
93
|
+
* authority's — when the viewer may not read the space, and with status 401
|
|
94
|
+
* when there is no viewer. Pass `refresh` after a host refuses a credential
|
|
95
|
+
* that had not yet expired.
|
|
96
|
+
*/
|
|
97
|
+
spaceCredential: (space: string, opts?: {
|
|
98
|
+
refresh?: boolean;
|
|
99
|
+
}) => Promise<SpaceCredential>;
|
|
100
|
+
/**
|
|
101
|
+
* Drop the viewer's cached credential for a space, after something that may
|
|
102
|
+
* have changed their standing in it, such as leaving. Does nothing without a
|
|
103
|
+
* viewer.
|
|
104
|
+
*/
|
|
105
|
+
forgetSpaceCredential: (space: string) => void;
|
|
85
106
|
/**
|
|
86
107
|
* The record helpers and `pds` above, acting as another account this app
|
|
87
108
|
* holds a session for — one it obtained with {@link obtainSession}, say.
|
package/dist/xrpc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../src/xrpc.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"xrpc.d.ts","sourceRoot":"","sources":["../src/xrpc.ts"],"names":[],"mappings":"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"}
|
package/dist/xrpc.js
CHANGED
|
@@ -27,6 +27,7 @@ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExte
|
|
|
27
27
|
* ```
|
|
28
28
|
*/
|
|
29
29
|
import { guardedQuerySQL, unfilteredQuerySQL } from "./spaces/guard.js";
|
|
30
|
+
import { forgetReaderSpaceCredential, readerSpaceCredential, SpaceCredentialError, } from "./spaces/credential.js";
|
|
30
31
|
import { resolve, relative } from 'node:path';
|
|
31
32
|
import { readdirSync, statSync } from 'node:fs';
|
|
32
33
|
import { log, emit, timer } from "./logger.js";
|
|
@@ -138,6 +139,17 @@ export function buildXrpcContext(params, cursor, limit, viewer, input) {
|
|
|
138
139
|
return uri !== null;
|
|
139
140
|
},
|
|
140
141
|
...accountHelpers(viewer),
|
|
142
|
+
spaceCredential: async (space, opts) => {
|
|
143
|
+
if (!_oauthConfig)
|
|
144
|
+
throw new Error('No OAuth config — cannot read a space');
|
|
145
|
+
if (!viewer)
|
|
146
|
+
throw new SpaceCredentialError(401, 'AuthRequired', 'Authentication required to read a space');
|
|
147
|
+
return readerSpaceCredential(_oauthConfig, viewer.did, space, opts);
|
|
148
|
+
},
|
|
149
|
+
forgetSpaceCredential: (space) => {
|
|
150
|
+
if (viewer)
|
|
151
|
+
forgetReaderSpaceCredential(viewer.did, space);
|
|
152
|
+
},
|
|
141
153
|
asAccount: (did) => accountHelpers({ did }),
|
|
142
154
|
obtainSession: async (url, body, opts) => {
|
|
143
155
|
if (!_oauthConfig)
|