@haverstack/core 0.37.0 → 0.39.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/README.md +19 -15
- package/dist/access.d.ts +4 -6
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +7 -8
- package/dist/access.js.map +1 -1
- package/dist/adapter-entry.d.ts +7 -6
- package/dist/adapter-entry.d.ts.map +1 -1
- package/dist/adapter-entry.js +6 -5
- package/dist/adapter-entry.js.map +1 -1
- package/dist/attachment-download.d.ts +3 -1
- package/dist/attachment-download.d.ts.map +1 -1
- package/dist/attachment-download.js +1 -1
- package/dist/attachment-download.js.map +1 -1
- package/dist/changes.d.ts +22 -16
- package/dist/changes.d.ts.map +1 -1
- package/dist/changes.js +43 -32
- package/dist/changes.js.map +1 -1
- package/dist/combine.d.ts +1 -1
- package/dist/combine.js +6 -6
- package/dist/combine.js.map +1 -1
- package/dist/errors.d.ts +24 -12
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +32 -17
- package/dist/errors.js.map +1 -1
- package/dist/grants.d.ts +17 -25
- package/dist/grants.d.ts.map +1 -1
- package/dist/grants.js +27 -14
- package/dist/grants.js.map +1 -1
- package/dist/identity-bindings.js +2 -2
- package/dist/index.d.ts +12 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -6
- package/dist/index.js.map +1 -1
- package/dist/query-validation.d.ts +28 -11
- package/dist/query-validation.d.ts.map +1 -1
- package/dist/query-validation.js +95 -36
- package/dist/query-validation.js.map +1 -1
- package/dist/record-changes.d.ts +11 -10
- package/dist/record-changes.d.ts.map +1 -1
- package/dist/record-changes.js +33 -25
- package/dist/record-changes.js.map +1 -1
- package/dist/record-id.d.ts +3 -3
- package/dist/record-id.js +8 -8
- package/dist/record-id.js.map +1 -1
- package/dist/scoped-stack.d.ts +71 -34
- package/dist/scoped-stack.d.ts.map +1 -1
- package/dist/scoped-stack.js +107 -88
- package/dist/scoped-stack.js.map +1 -1
- package/dist/stack-reads.d.ts +2 -2
- package/dist/stack-reads.js +5 -5
- package/dist/stack-reads.js.map +1 -1
- package/dist/stack.d.ts +132 -161
- package/dist/stack.d.ts.map +1 -1
- package/dist/stack.js +287 -288
- package/dist/stack.js.map +1 -1
- package/dist/testing.d.ts +17 -17
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +46 -42
- package/dist/testing.js.map +1 -1
- package/dist/types.d.ts +169 -143
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/dist/wire-body.d.ts +71 -0
- package/dist/wire-body.d.ts.map +1 -0
- package/dist/wire-body.js +138 -0
- package/dist/wire-body.js.map +1 -0
- package/dist/wire-entry.d.ts +9 -8
- package/dist/wire-entry.d.ts.map +1 -1
- package/dist/wire-entry.js +13 -14
- package/dist/wire-entry.js.map +1 -1
- package/dist/wire-record.d.ts +4 -4
- package/dist/wire-record.d.ts.map +1 -1
- package/dist/wire-record.js +35 -22
- package/dist/wire-record.js.map +1 -1
- package/dist/wire-request.d.ts +37 -4
- package/dist/wire-request.d.ts.map +1 -1
- package/dist/wire-request.js +288 -79
- package/dist/wire-request.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,kCAAkC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAehD,qBAAqB;AACrB,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,qEAAqE;AACrE,oEAAoE;AACpE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AA4EvF,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAE9D,YAAY;AAEZ,4EAA4E;AAC5E,sEAAsE;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
* See docs/spec/data-model.md § Capability-gated filters.
|
|
18
18
|
*/
|
|
19
19
|
import type { ValidationError } from './validate.js';
|
|
20
|
-
import type { Association, AuthorityAssociation, DataAssociation, JournalQuery, QuerySort, RecordFilter,
|
|
20
|
+
import type { Association, AuthorityAssociation, DataAssociation, GrantGrantee, JournalQuery, QuerySort, RecordFilter, RelationshipTarget, StackCapabilities } from './types.js';
|
|
21
21
|
/**
|
|
22
22
|
* Fail loud rather than silently widen: a filter the adapter can't honor
|
|
23
23
|
* would otherwise be dropped, returning an unfiltered superset presented
|
|
@@ -25,7 +25,7 @@ import type { Association, AuthorityAssociation, DataAssociation, JournalQuery,
|
|
|
25
25
|
* APIAdapter.queryRecords(). See docs/spec/data-model.md
|
|
26
26
|
* § Capability-gated filters.
|
|
27
27
|
*/
|
|
28
|
-
export declare function assertQueryCapabilities(filter: RecordFilter | undefined, capabilities: Pick<
|
|
28
|
+
export declare function assertQueryCapabilities(filter: RecordFilter | undefined, capabilities: Pick<StackCapabilities, 'filter'>): void;
|
|
29
29
|
/**
|
|
30
30
|
* Whether a single-segment content filter can be pushed down to the
|
|
31
31
|
* adapter. Callers that read a content field pair this with an in-memory
|
|
@@ -33,7 +33,7 @@ export declare function assertQueryCapabilities(filter: RecordFilter | undefined
|
|
|
33
33
|
* adapter that reaches no content at all — the rung comparison lives here
|
|
34
34
|
* rather than at each of them.
|
|
35
35
|
*/
|
|
36
|
-
export declare function filtersContent(features: Pick<
|
|
36
|
+
export declare function filtersContent(features: Pick<StackCapabilities, 'filter'>): boolean;
|
|
37
37
|
/**
|
|
38
38
|
* Split a content filter key into path segments. Write-time validation
|
|
39
39
|
* keeps stored field names free of the path metacharacters, but a filter
|
|
@@ -60,14 +60,31 @@ export declare function assertValidSort(sort: QuerySort | undefined): void;
|
|
|
60
60
|
* assertQueryCapabilities(), split from it because a sort is not a filter
|
|
61
61
|
* — see docs/spec/data-model.md § Capability-gated filters.
|
|
62
62
|
*/
|
|
63
|
-
export declare function assertSortCapability(sort: QuerySort | undefined, capabilities: Pick<
|
|
63
|
+
export declare function assertSortCapability(sort: QuerySort | undefined, capabilities: Pick<StackCapabilities, 'sort'>): void;
|
|
64
|
+
/** Every key each relationship target arm defines. */
|
|
65
|
+
export declare const TARGET_KEYS: Record<RelationshipTarget['kind'], readonly string[]>;
|
|
66
|
+
/** Every key each grantee arm defines, the default tier included. */
|
|
67
|
+
export declare const GRANTEE_KEYS: Record<GrantGrantee['kind'], readonly string[]>;
|
|
68
|
+
/**
|
|
69
|
+
* The keys of `value` its arm does not define. An element carrying one is
|
|
70
|
+
* refused rather than stored: an adapter keeps only the keys it has
|
|
71
|
+
* columns for, so the rest would answer 200 and then vanish.
|
|
72
|
+
* See docs/spec/data-model.md § Associations.
|
|
73
|
+
*/
|
|
74
|
+
export declare function unknownKeys(value: object, keys: readonly string[]): string[];
|
|
75
|
+
/** unknownKeys() as a refusal. 400, not 422: the key addresses nothing. */
|
|
76
|
+
export declare function assertKnownKeys(value: object, keys: readonly string[], path: string): void;
|
|
64
77
|
/**
|
|
65
78
|
* Reject a relationship target outside the closed set the types promise.
|
|
66
79
|
* A discriminated union is not a runtime guard — a server mapping a
|
|
67
80
|
* request body onto an association supplies raw JSON — and an
|
|
68
|
-
* unrecognized
|
|
81
|
+
* unrecognized kind would otherwise be stored under the one arm that
|
|
69
82
|
* names a Record in this stack. See docs/spec/data-model.md
|
|
70
83
|
* § Relationship targets.
|
|
84
|
+
*
|
|
85
|
+
* A key the element's kind does not define is thrown as a 400 rather than
|
|
86
|
+
* collected, at every depth: it addresses nothing, the way an unknown key
|
|
87
|
+
* on a request body does. See docs/spec/data-model.md § Associations.
|
|
71
88
|
*/
|
|
72
89
|
export declare function validateAssociation(association: Association, path?: string): ValidationError[];
|
|
73
90
|
/**
|
|
@@ -102,13 +119,13 @@ export declare function assertAuthorityAssociations(permissions: readonly Associ
|
|
|
102
119
|
*/
|
|
103
120
|
export declare function validateAssociations(associations: Association[] | undefined, path?: string): ValidationError[];
|
|
104
121
|
/**
|
|
105
|
-
* Reject
|
|
106
|
-
*
|
|
107
|
-
* always present; without the runtime check a filter
|
|
108
|
-
* request could arrive empty and match every record carrying
|
|
109
|
-
*
|
|
122
|
+
* Reject an association filter that names neither of its halves, or whose
|
|
123
|
+
* relationship target is malformed. `RelatedToFilter` and `AttachmentFilter`
|
|
124
|
+
* promise one half is always present; without the runtime check a filter
|
|
125
|
+
* decoded from a request could arrive empty and match every record carrying
|
|
126
|
+
* any association of that kind. See docs/spec/data-model.md § Filter.
|
|
110
127
|
*/
|
|
111
|
-
export declare function
|
|
128
|
+
export declare function assertValidAssociationFilters(filter: RecordFilter | undefined): void;
|
|
112
129
|
/**
|
|
113
130
|
* Hold a journal window to the shape both adapters can honor identically.
|
|
114
131
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-validation.d.ts","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"query-validation.d.ts","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,OAAO,KAAK,EAEV,WAAW,EAEX,oBAAoB,EACpB,eAAe,EAGf,YAAY,EACZ,YAAY,EAMZ,SAAS,EACT,YAAY,EACZ,kBAAkB,EAElB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,GAAG,SAAS,EAChC,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAC9C,IAAI,CAmCN;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,GAAG,OAAO,CAEnF;AAKD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwB3D;AAYD;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,IAAI,CA6BjE;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,SAAS,GAAG,SAAS,EAC3B,YAAY,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAC5C,IAAI,CAmBN;AAYD,sDAAsD;AACtD,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAI7E,CAAC;AAgBF,qEAAqE;AACrE,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAIxE,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAE5E;AAED,2EAA2E;AAC3E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAM1F;AAwCD;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,IAAI,SAAgB,GACnB,eAAe,EAAE,CAoBnB;AAsED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,YAAY,IAAI,eAAe,EAAE,CAO3C;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,SAAS,WAAW,EAAE,EACnC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,IAAI,oBAAoB,EAAE,CAO/C;AAED,kEAAkE;AAClE;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,WAAW,EAAE,GAAG,SAAS,EACvC,IAAI,SAAiB,GACpB,eAAe,EAAE,CAenB;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAmBpF;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CAW7E"}
|
package/dist/query-validation.js
CHANGED
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* the query — one rule, one answer.
|
|
17
17
|
* See docs/spec/data-model.md § Capability-gated filters.
|
|
18
18
|
*/
|
|
19
|
-
import {
|
|
19
|
+
import { StackBadRequestError } from './errors.js';
|
|
20
20
|
import { associationEqual, isAuthorityAssociation } from './record-changes.js';
|
|
21
21
|
import { CONTENT_SEGMENT_METACHARACTERS, SEGMENT_METACHARACTER_RE } from './validate.js';
|
|
22
22
|
import { NATIVE_SORT_FIELDS } from './types.js';
|
|
@@ -30,7 +30,7 @@ import { NATIVE_SORT_FIELDS } from './types.js';
|
|
|
30
30
|
export function assertQueryCapabilities(filter, capabilities) {
|
|
31
31
|
const { content: reach, contentPresent, search } = capabilities.filter;
|
|
32
32
|
if (filter?.search && !search) {
|
|
33
|
-
throw new
|
|
33
|
+
throw new StackBadRequestError('Query uses filter.search, but this adapter does not declare the filter.search capability.', 'filter.search');
|
|
34
34
|
}
|
|
35
35
|
const present = filter?.contentPresent?.length ? filter.contentPresent : undefined;
|
|
36
36
|
if (!filter?.content && !present)
|
|
@@ -38,16 +38,16 @@ export function assertQueryCapabilities(filter, capabilities) {
|
|
|
38
38
|
if (reach === 'none') {
|
|
39
39
|
// Named as `filter.content` whichever key the query used: the reach
|
|
40
40
|
// is what is absent, and it is the entry to look at in discovery.
|
|
41
|
-
throw new
|
|
41
|
+
throw new StackBadRequestError(`Query uses ${present && !filter?.content ? 'filter.contentPresent' : 'filter.content'}, ` +
|
|
42
42
|
'but this adapter declares filter.content: "none".', 'filter.content');
|
|
43
43
|
}
|
|
44
44
|
if (present && !contentPresent) {
|
|
45
|
-
throw new
|
|
45
|
+
throw new StackBadRequestError('Query uses filter.contentPresent, but this adapter does not declare the ' +
|
|
46
46
|
'filter.contentPresent capability.', 'filter.contentPresent');
|
|
47
47
|
}
|
|
48
48
|
for (const key of [...Object.keys(filter?.content ?? {}), ...(present ?? [])]) {
|
|
49
49
|
if (parseContentFilterKey(key).length > 1 && reach !== 'path') {
|
|
50
|
-
throw new
|
|
50
|
+
throw new StackBadRequestError(`Query uses the nested content path "${key}", but this adapter declares ` +
|
|
51
51
|
`filter.content: "${reach}".`, 'filter.content');
|
|
52
52
|
}
|
|
53
53
|
}
|
|
@@ -76,14 +76,14 @@ export function parseContentFilterKey(key) {
|
|
|
76
76
|
// 64-table join limit, so a path past the cap is one the engine could
|
|
77
77
|
// not execute. See docs/spec/data-model.md § Nested content paths.
|
|
78
78
|
if (segments.length > MAX_CONTENT_PATH_SEGMENTS) {
|
|
79
|
-
throw new
|
|
79
|
+
throw new StackBadRequestError(`Invalid content filter path "${key}": at most ${MAX_CONTENT_PATH_SEGMENTS} segments.`);
|
|
80
80
|
}
|
|
81
81
|
for (const segment of segments) {
|
|
82
82
|
if (segment === '') {
|
|
83
|
-
throw new
|
|
83
|
+
throw new StackBadRequestError(`Invalid content filter path "${key}": a path segment cannot be empty.`);
|
|
84
84
|
}
|
|
85
85
|
if (SEGMENT_METACHARACTER_RE.test(segment)) {
|
|
86
|
-
throw new
|
|
86
|
+
throw new StackBadRequestError(`Invalid content filter path "${key}": a segment cannot contain any of ` +
|
|
87
87
|
`${CONTENT_SEGMENT_METACHARACTERS.join(' ')}.`);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
@@ -113,10 +113,10 @@ export function assertValidSort(sort) {
|
|
|
113
113
|
if (!sort)
|
|
114
114
|
return;
|
|
115
115
|
if (sort.field !== undefined && sort.contentField !== undefined) {
|
|
116
|
-
throw new
|
|
116
|
+
throw new StackBadRequestError('A sort names either a native field or a content field, never both.');
|
|
117
117
|
}
|
|
118
118
|
if (sort.field !== undefined && !VALID_SORT_FIELDS.has(sort.field)) {
|
|
119
|
-
throw new
|
|
119
|
+
throw new StackBadRequestError(`Invalid sort field "${sort.field}": expected one of ${NATIVE_SORT_FIELDS.join(', ')}.`);
|
|
120
120
|
}
|
|
121
121
|
if (sort.contentField !== undefined) {
|
|
122
122
|
// Parsed by the same rule a filter key is, so a name a filter could
|
|
@@ -125,11 +125,11 @@ export function assertValidSort(sort) {
|
|
|
125
125
|
// position to order its record by (docs/spec/data-model.md
|
|
126
126
|
// § Sorting by a content field).
|
|
127
127
|
if (parseContentFilterKey(sort.contentField).length > 1) {
|
|
128
|
-
throw new
|
|
128
|
+
throw new StackBadRequestError(`Invalid sort content field "${sort.contentField}": sorting reaches top-level fields only.`);
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
if (sort.direction !== undefined && !VALID_SORT_DIRECTIONS.has(sort.direction)) {
|
|
132
|
-
throw new
|
|
132
|
+
throw new StackBadRequestError(`Invalid sort direction "${sort.direction}": expected "asc" or "desc".`);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
@@ -144,18 +144,64 @@ export function assertSortCapability(sort, capabilities) {
|
|
|
144
144
|
return;
|
|
145
145
|
if (sort.contentField !== undefined) {
|
|
146
146
|
if (!capabilities.sort.contentField) {
|
|
147
|
-
throw new
|
|
147
|
+
throw new StackBadRequestError('Query uses sort.contentField, but this adapter does not declare the sort.contentField ' +
|
|
148
148
|
'capability.', 'sort.contentField');
|
|
149
149
|
}
|
|
150
150
|
return;
|
|
151
151
|
}
|
|
152
152
|
const field = sort.field ?? 'createdAt';
|
|
153
153
|
if (!capabilities.sort.fields.includes(field)) {
|
|
154
|
-
throw new
|
|
154
|
+
throw new StackBadRequestError(`Query sorts by "${field}", which this adapter does not declare in sort.fields.`, 'sort.fields');
|
|
155
155
|
}
|
|
156
156
|
}
|
|
157
157
|
/** The identifier spaces a relationship target may name. */
|
|
158
|
-
const
|
|
158
|
+
const TARGET_KINDS = new Set(['record', 'entity', 'external']);
|
|
159
|
+
/**
|
|
160
|
+
* The keys of one arm of a union, listed as an object so the compiler
|
|
161
|
+
* holds the list to the type: a field added to the arm fails to compile
|
|
162
|
+
* here until it is listed.
|
|
163
|
+
*/
|
|
164
|
+
const keysOf = (keys) => Object.keys(keys);
|
|
165
|
+
/** Every key each relationship target arm defines. */
|
|
166
|
+
export const TARGET_KEYS = {
|
|
167
|
+
record: keysOf({ kind: true, recordId: true, stackUrl: true }),
|
|
168
|
+
entity: keysOf({ kind: true, entityId: true }),
|
|
169
|
+
external: keysOf({ kind: true, ns: true, id: true }),
|
|
170
|
+
};
|
|
171
|
+
/** Every key each association kind defines. */
|
|
172
|
+
const ASSOCIATION_KEYS = {
|
|
173
|
+
tag: keysOf({ kind: true, label: true }),
|
|
174
|
+
attachment: keysOf({
|
|
175
|
+
kind: true,
|
|
176
|
+
label: true,
|
|
177
|
+
fileId: true,
|
|
178
|
+
attachmentRecordId: true,
|
|
179
|
+
}),
|
|
180
|
+
relationship: keysOf({ kind: true, label: true, target: true }),
|
|
181
|
+
permission: keysOf({ kind: true, label: true, grantee: true }),
|
|
182
|
+
anyone: keysOf({ kind: true, label: true }),
|
|
183
|
+
};
|
|
184
|
+
/** Every key each grantee arm defines, the default tier included. */
|
|
185
|
+
export const GRANTEE_KEYS = {
|
|
186
|
+
entity: keysOf({ kind: true, entityId: true }),
|
|
187
|
+
group: keysOf({ kind: true, groupId: true, role: true }),
|
|
188
|
+
authenticated: keysOf({ kind: true }),
|
|
189
|
+
};
|
|
190
|
+
/**
|
|
191
|
+
* The keys of `value` its arm does not define. An element carrying one is
|
|
192
|
+
* refused rather than stored: an adapter keeps only the keys it has
|
|
193
|
+
* columns for, so the rest would answer 200 and then vanish.
|
|
194
|
+
* See docs/spec/data-model.md § Associations.
|
|
195
|
+
*/
|
|
196
|
+
export function unknownKeys(value, keys) {
|
|
197
|
+
return Object.keys(value).filter((key) => !keys.includes(key));
|
|
198
|
+
}
|
|
199
|
+
/** unknownKeys() as a refusal. 400, not 422: the key addresses nothing. */
|
|
200
|
+
export function assertKnownKeys(value, keys, path) {
|
|
201
|
+
const unknown = unknownKeys(value, keys);
|
|
202
|
+
if (unknown.length > 0)
|
|
203
|
+
throw new StackBadRequestError(`Unknown key${unknown.length > 1 ? 's' : ''} in ${path}: ${unknown.join(', ')}`);
|
|
204
|
+
}
|
|
159
205
|
/**
|
|
160
206
|
* Collect what makes a relationship target malformed. Absence is
|
|
161
207
|
* meaningful on `stackUrl` and an external `id` — this stack, and the
|
|
@@ -167,10 +213,11 @@ function targetErrors(target, path, opts = {}) {
|
|
|
167
213
|
const fail = (message) => [{ path, message }];
|
|
168
214
|
if (!target || typeof target !== 'object')
|
|
169
215
|
return fail('A relationship target must be an object.');
|
|
170
|
-
if (!
|
|
171
|
-
return fail(`Unknown relationship target
|
|
216
|
+
if (!TARGET_KINDS.has(target.kind)) {
|
|
217
|
+
return fail(`Unknown relationship target kind "${target.kind}": expected "record", "entity" or "external".`);
|
|
172
218
|
}
|
|
173
|
-
|
|
219
|
+
assertKnownKeys(target, TARGET_KEYS[target.kind], path);
|
|
220
|
+
if (target.kind === 'record') {
|
|
174
221
|
if (!target.recordId)
|
|
175
222
|
return fail('A record target requires a non-empty recordId.');
|
|
176
223
|
if (target.stackUrl !== undefined && !target.stackUrl) {
|
|
@@ -178,7 +225,7 @@ function targetErrors(target, path, opts = {}) {
|
|
|
178
225
|
}
|
|
179
226
|
return [];
|
|
180
227
|
}
|
|
181
|
-
if (target.
|
|
228
|
+
if (target.kind === 'entity') {
|
|
182
229
|
return target.entityId ? [] : fail('An entity target requires a non-empty entityId.');
|
|
183
230
|
}
|
|
184
231
|
if (!target.ns)
|
|
@@ -192,9 +239,13 @@ function targetErrors(target, path, opts = {}) {
|
|
|
192
239
|
* Reject a relationship target outside the closed set the types promise.
|
|
193
240
|
* A discriminated union is not a runtime guard — a server mapping a
|
|
194
241
|
* request body onto an association supplies raw JSON — and an
|
|
195
|
-
* unrecognized
|
|
242
|
+
* unrecognized kind would otherwise be stored under the one arm that
|
|
196
243
|
* names a Record in this stack. See docs/spec/data-model.md
|
|
197
244
|
* § Relationship targets.
|
|
245
|
+
*
|
|
246
|
+
* A key the element's kind does not define is thrown as a 400 rather than
|
|
247
|
+
* collected, at every depth: it addresses nothing, the way an unknown key
|
|
248
|
+
* on a request body does. See docs/spec/data-model.md § Associations.
|
|
198
249
|
*/
|
|
199
250
|
export function validateAssociation(association, path = 'association') {
|
|
200
251
|
if (!namesKind(association)) {
|
|
@@ -205,6 +256,7 @@ export function validateAssociation(association, path = 'association') {
|
|
|
205
256
|
},
|
|
206
257
|
];
|
|
207
258
|
}
|
|
259
|
+
assertKnownKeys(association, ASSOCIATION_KEYS[association.kind], path);
|
|
208
260
|
if (association.kind === 'permission') {
|
|
209
261
|
return granteeErrors(association, `${path}.grantee`);
|
|
210
262
|
}
|
|
@@ -225,7 +277,7 @@ function granteeSuffix(association) {
|
|
|
225
277
|
if (association.kind !== 'permission')
|
|
226
278
|
return '';
|
|
227
279
|
const g = association.grantee;
|
|
228
|
-
return g.
|
|
280
|
+
return g.kind === 'entity' ? ` for "${g.entityId}"` : ` for ${g.role}s of "${g.groupId}"`;
|
|
229
281
|
}
|
|
230
282
|
/** The kinds an association may name — the closed set every surface reads. */
|
|
231
283
|
const ASSOCIATION_KINDS = new Set(['tag', 'attachment', 'relationship', 'permission', 'anyone']);
|
|
@@ -262,17 +314,19 @@ function granteeErrors(association, path) {
|
|
|
262
314
|
const grantee = association.grantee;
|
|
263
315
|
if (!grantee || typeof grantee !== 'object')
|
|
264
316
|
return fail('A permission requires a grantee.');
|
|
265
|
-
if (grantee.
|
|
317
|
+
if (grantee.kind === 'entity' || grantee.kind === 'group')
|
|
318
|
+
assertKnownKeys(grantee, GRANTEE_KEYS[grantee.kind], path);
|
|
319
|
+
if (grantee.kind === 'entity') {
|
|
266
320
|
return grantee.entityId ? [] : fail('An entity grantee requires a non-empty entityId.');
|
|
267
321
|
}
|
|
268
|
-
if (grantee.
|
|
322
|
+
if (grantee.kind === 'group') {
|
|
269
323
|
if (!grantee.groupId)
|
|
270
324
|
return fail('A group grantee requires a non-empty groupId.');
|
|
271
325
|
return grantee.role === 'member' || grantee.role === 'admin'
|
|
272
326
|
? []
|
|
273
327
|
: fail('A group grantee requires a role of "member" or "admin".');
|
|
274
328
|
}
|
|
275
|
-
return fail(`Unknown permission grantee
|
|
329
|
+
return fail(`Unknown permission grantee kind "${String(grantee.kind)}": expected "entity" or "group".`);
|
|
276
330
|
}
|
|
277
331
|
/**
|
|
278
332
|
* Refuse an authority element reaching the data half of the partition.
|
|
@@ -290,7 +344,7 @@ export function assertDataAssociations(associations, surface) {
|
|
|
290
344
|
const authority = associations.find((a) => namesKind(a) && isAuthorityAssociation(a));
|
|
291
345
|
if (!authority)
|
|
292
346
|
return;
|
|
293
|
-
throw new
|
|
347
|
+
throw new StackBadRequestError(`${surface} does not carry authority: a "${authority.kind}" association belongs to the ` +
|
|
294
348
|
'`permissions` surface — use grantAccess()/revokeAccess(), or the `permissions` change-set key.');
|
|
295
349
|
}
|
|
296
350
|
/**
|
|
@@ -302,7 +356,7 @@ export function assertAuthorityAssociations(permissions, surface) {
|
|
|
302
356
|
const data = permissions.find((a) => namesKind(a) && !isAuthorityAssociation(a));
|
|
303
357
|
if (!data)
|
|
304
358
|
return;
|
|
305
|
-
throw new
|
|
359
|
+
throw new StackBadRequestError(`${surface} carries authority alone: a "${data.kind}" association belongs to the ` +
|
|
306
360
|
'`associations` surface — use associate()/dissociate(), or the `associations` change-set key.');
|
|
307
361
|
}
|
|
308
362
|
/** validateAssociation() over a create's `associations` array. */
|
|
@@ -331,17 +385,22 @@ export function validateAssociations(associations, path = 'associations') {
|
|
|
331
385
|
];
|
|
332
386
|
}
|
|
333
387
|
/**
|
|
334
|
-
* Reject
|
|
335
|
-
*
|
|
336
|
-
* always present; without the runtime check a filter
|
|
337
|
-
* request could arrive empty and match every record carrying
|
|
338
|
-
*
|
|
388
|
+
* Reject an association filter that names neither of its halves, or whose
|
|
389
|
+
* relationship target is malformed. `RelatedToFilter` and `AttachmentFilter`
|
|
390
|
+
* promise one half is always present; without the runtime check a filter
|
|
391
|
+
* decoded from a request could arrive empty and match every record carrying
|
|
392
|
+
* any association of that kind. See docs/spec/data-model.md § Filter.
|
|
339
393
|
*/
|
|
340
|
-
export function
|
|
394
|
+
export function assertValidAssociationFilters(filter) {
|
|
395
|
+
const attachment = filter?.attachment;
|
|
396
|
+
if (attachment && attachment.label === undefined && attachment.fileId === undefined) {
|
|
397
|
+
throw new StackBadRequestError('filter.attachment must name a label, a fileId, or both — "any attachment at all" is not a filter.');
|
|
398
|
+
}
|
|
399
|
+
const relatedTo = filter?.relatedTo;
|
|
341
400
|
if (!relatedTo)
|
|
342
401
|
return;
|
|
343
402
|
if (relatedTo.label === undefined && relatedTo.target === undefined) {
|
|
344
|
-
throw new
|
|
403
|
+
throw new StackBadRequestError('filter.relatedTo must name a label, a target, or both — "any relationship at all" is not a filter.');
|
|
345
404
|
}
|
|
346
405
|
if (relatedTo.target === undefined)
|
|
347
406
|
return;
|
|
@@ -349,7 +408,7 @@ export function assertValidRelatedTo(relatedTo) {
|
|
|
349
408
|
externalIdOptional: true,
|
|
350
409
|
});
|
|
351
410
|
if (errors.length > 0)
|
|
352
|
-
throw new
|
|
411
|
+
throw new StackBadRequestError(errors[0].message);
|
|
353
412
|
}
|
|
354
413
|
/**
|
|
355
414
|
* Hold a journal window to the shape both adapters can honor identically.
|
|
@@ -367,12 +426,12 @@ export function assertValidRelatedTo(relatedTo) {
|
|
|
367
426
|
export function assertValidJournalQuery(query) {
|
|
368
427
|
if (!query)
|
|
369
428
|
return;
|
|
370
|
-
for (const key of ['
|
|
429
|
+
for (const key of ['afterSeq', 'limit']) {
|
|
371
430
|
const value = query[key];
|
|
372
431
|
if (value === undefined)
|
|
373
432
|
continue;
|
|
374
433
|
if (!Number.isInteger(value) || value < 0) {
|
|
375
|
-
throw new
|
|
434
|
+
throw new StackBadRequestError(`Invalid journal ${key} ${String(value)}: expected a non-negative integer.`);
|
|
376
435
|
}
|
|
377
436
|
}
|
|
378
437
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-validation.js","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"query-validation.js","sourceRoot":"","sources":["../src/query-validation.ts"],"names":[],"mappings":"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"}
|
package/dist/record-changes.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* See docs/spec/events.md § The event shape and docs/spec/versioning.md
|
|
13
13
|
* § The tombstone is literal.
|
|
14
14
|
*/
|
|
15
|
-
import type { Association, AssociationChange, AuthorityAssociation, ChangeOp, DataAssociation, EntityId,
|
|
15
|
+
import type { Association, AssociationChange, AuthorityAssociation, ChangeOp, DataAssociation, EntityId, Grantee, RecordChangeSet, RecordJournalEntry, RelationshipTarget, StackRecord } from './types.js';
|
|
16
16
|
/**
|
|
17
17
|
* Association identity — what dissociate() matches and a second associate()
|
|
18
18
|
* of the same reference is a repeat of. Matches the SQLite adapter's
|
|
@@ -28,7 +28,7 @@ export declare function associationEqual(a: Association, b: Association): boolea
|
|
|
28
28
|
* Structural equality per grantee arm. `role` is required, so there is no
|
|
29
29
|
* absent-means-any spelling to normalize.
|
|
30
30
|
*/
|
|
31
|
-
export declare function granteeEqual(a:
|
|
31
|
+
export declare function granteeEqual(a: Grantee, b: Grantee): boolean;
|
|
32
32
|
/**
|
|
33
33
|
* Whether an association carries authority rather than data — the partition
|
|
34
34
|
* `StackRecord.permissions` and `StackRecord.associations` project, and the
|
|
@@ -76,11 +76,12 @@ export declare function associationDelta(before: Association[], after: Associati
|
|
|
76
76
|
* The two flat lists a change frame carries, derived from the tagged list.
|
|
77
77
|
* The feed reports what is true now, so a `repoint` appears only under its
|
|
78
78
|
* new value and a `remove` by identity alone — the prior state the journal
|
|
79
|
-
* keeps has no place on a notification.
|
|
79
|
+
* keeps has no place on a notification. The data half alone: `reshare` is
|
|
80
|
+
* what announces an ACL move. See docs/spec/events.md § The event shape.
|
|
80
81
|
*/
|
|
81
82
|
export declare function feedAssociationDelta(changes: AssociationChange[]): {
|
|
82
|
-
added:
|
|
83
|
-
removed:
|
|
83
|
+
added: DataAssociation[];
|
|
84
|
+
removed: DataAssociation[];
|
|
84
85
|
};
|
|
85
86
|
/** Structural equality per target arm — what dissociate() matches on. */
|
|
86
87
|
export declare function targetEqual(a: RelationshipTarget, b: RelationshipTarget): boolean;
|
|
@@ -91,14 +92,14 @@ export declare function targetEqual(a: RelationshipTarget, b: RelationshipTarget
|
|
|
91
92
|
* typically a conditional that built an empty object.
|
|
92
93
|
* See docs/spec/data-model.md § Mutations.
|
|
93
94
|
*/
|
|
94
|
-
export declare function assertNonEmptyChangeSet(changes:
|
|
95
|
+
export declare function assertNonEmptyChangeSet(changes: RecordChangeSet): void;
|
|
95
96
|
/**
|
|
96
97
|
* Which aspects a change set actually moves, against the record as it
|
|
97
98
|
* stands. A key naming the value a record already holds contributes
|
|
98
99
|
* nothing. `merged` is the content the patch produces, computed once by the
|
|
99
100
|
* caller that had to validate it anyway.
|
|
100
101
|
*/
|
|
101
|
-
export declare function changeSetOps(existing: StackRecord, changes:
|
|
102
|
+
export declare function changeSetOps(existing: StackRecord, changes: RecordChangeSet, merged: Record<string, unknown> | undefined): ChangeOp[];
|
|
102
103
|
/**
|
|
103
104
|
* Whether a change set's ops advance `version`/`updatedAt` at all. After the
|
|
104
105
|
* no-bump set above, this is `patch` and the whole-record verbs.
|
|
@@ -111,7 +112,7 @@ export declare function bumpsVersion(ops: ChangeOp[]): boolean;
|
|
|
111
112
|
* wrote rather than the ops the set turns out to move, so a stale caller is
|
|
112
113
|
* told its version is stale whatever its patch says.
|
|
113
114
|
*/
|
|
114
|
-
export declare function takesIfVersion(changes:
|
|
115
|
+
export declare function takesIfVersion(changes: RecordChangeSet): boolean;
|
|
115
116
|
/**
|
|
116
117
|
* The change set narrowed to the aspects that actually moved. An adapter is
|
|
117
118
|
* handed this rather than what the caller wrote, so restating an aspect
|
|
@@ -119,7 +120,7 @@ export declare function takesIfVersion(changes: RecordChanges): boolean;
|
|
|
119
120
|
* otherwise drag `unlistedAt` forward with no op reporting it. Every key an
|
|
120
121
|
* adapter receives is one it must write.
|
|
121
122
|
*/
|
|
122
|
-
export declare function effectiveChanges(changes:
|
|
123
|
+
export declare function effectiveChanges(changes: RecordChangeSet, ops: ChangeOp[]): RecordChangeSet;
|
|
123
124
|
/**
|
|
124
125
|
* Whether a merge patch produced the content the record already held.
|
|
125
126
|
* Compared by serialization: content is JSON by construction and a patch
|
|
@@ -153,7 +154,7 @@ export declare const presentDeleted: (record: StackRecord) => StackRecord;
|
|
|
153
154
|
export declare function movesAuthority(change: AssociationChange): boolean;
|
|
154
155
|
/**
|
|
155
156
|
* A journal entry as a reader who cannot reshare sees it: the authority
|
|
156
|
-
* half of its delta dropped, the `
|
|
157
|
+
* half of its delta dropped, the `reshare` op left standing, so the
|
|
157
158
|
* entry still names *that* the ACL moved. Passing the mutate-surface gate
|
|
158
159
|
* buys the record's content history, which is not a route to its sharing
|
|
159
160
|
* graph. See docs/spec/journal.md § Reading it.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record-changes.d.ts","sourceRoot":"","sources":["../src/record-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,
|
|
1
|
+
{"version":3,"file":"record-changes.d.ts","sourceRoot":"","sources":["../src/record-changes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,oBAAoB,EACpB,QAAQ,EACR,eAAe,EACf,QAAQ,EACR,OAAO,EACP,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAaxE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAQ5D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,WAAW,GAAG,CAAC,IAAI,oBAAoB,CAEhF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG;IAClE,YAAY,EAAE,eAAe,EAAE,CAAC;IAChC,WAAW,EAAE,oBAAoB,EAAE,CAAC;CACrC,CAKA;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAM5E;AAED;;;;;;;GAOG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,GAAG,WAAW,CAIhF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,iBAAiB,EAAE,CAcjG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG;IAClE,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B,CAYA;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAQjF;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAOtE;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC1C,QAAQ,EAAE,CA2BZ;AAiBD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,OAAO,CAErD;AAcD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAIhE;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,eAAe,CAU3F;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAE5F;AAED,iEAAiE;AACjE,wBAAgB,eAAe,CAC7B,YAAY,EAAE,eAAe,EAAE,GAAG,SAAS,EAC3C,OAAO,EAAE,QAAQ,GAChB,eAAe,EAAE,CAcnB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAY5D;AAED,iFAAiF;AACjF,eAAO,MAAM,cAAc,GAAI,QAAQ,WAAW,KAAG,WACJ,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAEjE;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,kBAAkB,CAKrF"}
|