@haverstack/core 0.40.0 → 0.42.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 +121 -59
- package/dist/access.d.ts +34 -36
- package/dist/access.d.ts.map +1 -1
- package/dist/access.js +65 -42
- package/dist/access.js.map +1 -1
- package/dist/{combine.d.ts → adapter/combine.d.ts} +8 -1
- package/dist/adapter/combine.d.ts.map +1 -0
- package/dist/{combine.js → adapter/combine.js} +7 -0
- package/dist/adapter/combine.js.map +1 -0
- package/dist/{adapter-entry.d.ts → adapter/index.d.ts} +6 -5
- package/dist/adapter/index.d.ts.map +1 -0
- package/dist/{adapter-entry.js → adapter/index.js} +5 -4
- package/dist/adapter/index.js.map +1 -0
- package/dist/{sort.d.ts → adapter/sort.d.ts} +20 -20
- package/dist/adapter/sort.d.ts.map +1 -0
- package/dist/{sort.js → adapter/sort.js} +37 -27
- package/dist/adapter/sort.js.map +1 -0
- package/dist/associations/identity.d.ts +93 -0
- package/dist/associations/identity.d.ts.map +1 -0
- package/dist/associations/identity.js +198 -0
- package/dist/associations/identity.js.map +1 -0
- package/dist/associations/validation.d.ts +90 -0
- package/dist/associations/validation.d.ts.map +1 -0
- package/dist/associations/validation.js +339 -0
- package/dist/associations/validation.js.map +1 -0
- package/dist/attachment-records.d.ts +48 -0
- package/dist/attachment-records.d.ts.map +1 -0
- package/dist/attachment-records.js +52 -0
- package/dist/attachment-records.js.map +1 -0
- package/dist/collection.d.ts +182 -0
- package/dist/collection.d.ts.map +1 -0
- package/dist/collection.js +407 -0
- package/dist/collection.js.map +1 -0
- package/dist/content-match.d.ts +25 -0
- package/dist/content-match.d.ts.map +1 -0
- package/dist/content-match.js +51 -0
- package/dist/content-match.js.map +1 -0
- package/dist/content-translation.d.ts +42 -0
- package/dist/content-translation.d.ts.map +1 -0
- package/dist/content-translation.js +108 -0
- package/dist/content-translation.js.map +1 -0
- package/dist/did/did.d.ts.map +1 -0
- package/dist/{did.js → did/did.js} +3 -4
- package/dist/did/did.js.map +1 -0
- package/dist/{did-entry.d.ts → did/index.d.ts} +1 -1
- package/dist/did/index.d.ts.map +1 -0
- package/dist/{did-entry.js → did/index.js} +3 -3
- package/dist/did/index.js.map +1 -0
- package/dist/errors.d.ts +36 -63
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +35 -58
- package/dist/errors.js.map +1 -1
- package/dist/grants.d.ts +20 -43
- package/dist/grants.d.ts.map +1 -1
- package/dist/grants.js +71 -134
- package/dist/grants.js.map +1 -1
- package/dist/id.d.ts +13 -31
- package/dist/id.d.ts.map +1 -1
- package/dist/id.js +13 -31
- package/dist/id.js.map +1 -1
- package/dist/index.d.ts +14 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/install.d.ts +141 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +219 -0
- package/dist/install.js.map +1 -0
- package/dist/merge.d.ts.map +1 -1
- package/dist/merge.js +5 -11
- package/dist/merge.js.map +1 -1
- package/dist/migration-steps.d.ts +102 -0
- package/dist/migration-steps.d.ts.map +1 -0
- package/dist/migration-steps.js +293 -0
- package/dist/migration-steps.js.map +1 -0
- package/dist/query-validation.d.ts +28 -94
- package/dist/query-validation.d.ts.map +1 -1
- package/dist/query-validation.js +156 -336
- package/dist/query-validation.js.map +1 -1
- package/dist/record-changes.d.ts +2 -117
- package/dist/record-changes.d.ts.map +1 -1
- package/dist/record-changes.js +10 -212
- package/dist/record-changes.js.map +1 -1
- package/dist/schema.d.ts +18 -7
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +59 -30
- package/dist/schema.js.map +1 -1
- package/dist/scoped-stack/authority.d.ts +156 -0
- package/dist/scoped-stack/authority.d.ts.map +1 -0
- package/dist/scoped-stack/authority.js +384 -0
- package/dist/scoped-stack/authority.js.map +1 -0
- package/dist/scoped-stack/scoped-stack.d.ts +338 -0
- package/dist/scoped-stack/scoped-stack.d.ts.map +1 -0
- package/dist/scoped-stack/scoped-stack.js +776 -0
- package/dist/scoped-stack/scoped-stack.js.map +1 -0
- package/dist/scoped-stack/subscription.d.ts +55 -0
- package/dist/scoped-stack/subscription.d.ts.map +1 -0
- package/dist/scoped-stack/subscription.js +110 -0
- package/dist/scoped-stack/subscription.js.map +1 -0
- package/dist/stack/attachments.d.ts +24 -0
- package/dist/stack/attachments.d.ts.map +1 -0
- package/dist/stack/attachments.js +113 -0
- package/dist/stack/attachments.js.map +1 -0
- package/dist/{changes.d.ts → stack/changes.d.ts} +29 -65
- package/dist/stack/changes.d.ts.map +1 -0
- package/dist/{changes.js → stack/changes.js} +32 -66
- package/dist/stack/changes.js.map +1 -0
- package/dist/stack/client.d.ts +271 -0
- package/dist/stack/client.d.ts.map +1 -0
- package/dist/stack/client.js +9 -0
- package/dist/stack/client.js.map +1 -0
- package/dist/stack/identity-bindings.d.ts.map +1 -0
- package/dist/{identity-bindings.js → stack/identity-bindings.js} +8 -14
- package/dist/stack/identity-bindings.js.map +1 -0
- package/dist/stack/install-app.d.ts +22 -0
- package/dist/stack/install-app.d.ts.map +1 -0
- package/dist/stack/install-app.js +260 -0
- package/dist/stack/install-app.js.map +1 -0
- package/dist/stack/integrity.d.ts +94 -0
- package/dist/stack/integrity.d.ts.map +1 -0
- package/dist/stack/integrity.js +268 -0
- package/dist/stack/integrity.js.map +1 -0
- package/dist/{limits.d.ts → stack/limits.d.ts} +2 -5
- package/dist/stack/limits.d.ts.map +1 -0
- package/dist/{limits.js → stack/limits.js} +3 -6
- package/dist/stack/limits.js.map +1 -0
- package/dist/stack/migrations.d.ts +59 -0
- package/dist/stack/migrations.d.ts.map +1 -0
- package/dist/stack/migrations.js +141 -0
- package/dist/stack/migrations.js.map +1 -0
- package/dist/{stack-reads.d.ts → stack/reads.d.ts} +33 -6
- package/dist/stack/reads.d.ts.map +1 -0
- package/dist/{stack-reads.js → stack/reads.js} +49 -7
- package/dist/stack/reads.js.map +1 -0
- package/dist/stack/record-id.d.ts +35 -0
- package/dist/stack/record-id.d.ts.map +1 -0
- package/dist/stack/record-id.js +82 -0
- package/dist/stack/record-id.js.map +1 -0
- package/dist/stack/stack.d.ts +438 -0
- package/dist/stack/stack.d.ts.map +1 -0
- package/dist/stack/stack.js +1366 -0
- package/dist/stack/stack.js.map +1 -0
- package/dist/stack/system-types.d.ts +16 -0
- package/dist/stack/system-types.d.ts.map +1 -0
- package/dist/stack/system-types.js +111 -0
- package/dist/stack/system-types.js.map +1 -0
- package/dist/stack/type-grants.d.ts +20 -0
- package/dist/stack/type-grants.d.ts.map +1 -0
- package/dist/stack/type-grants.js +69 -0
- package/dist/stack/type-grants.js.map +1 -0
- package/dist/stack/write-expectation.d.ts +78 -0
- package/dist/stack/write-expectation.d.ts.map +1 -0
- package/dist/stack/write-expectation.js +71 -0
- package/dist/stack/write-expectation.js.map +1 -0
- package/dist/testing.d.ts +21 -26
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +50 -70
- package/dist/testing.js.map +1 -1
- package/dist/type-handle.d.ts +67 -78
- package/dist/type-handle.d.ts.map +1 -1
- package/dist/type-handle.js +44 -111
- package/dist/type-handle.js.map +1 -1
- package/dist/types/adapter.d.ts +223 -0
- package/dist/types/adapter.d.ts.map +1 -0
- package/dist/types/adapter.js +5 -0
- package/dist/types/adapter.js.map +1 -0
- package/dist/types/associations.d.ts +156 -0
- package/dist/types/associations.d.ts.map +1 -0
- package/dist/types/associations.js +13 -0
- package/dist/types/associations.js.map +1 -0
- package/dist/types/capabilities.d.ts +89 -0
- package/dist/types/capabilities.d.ts.map +1 -0
- package/dist/types/capabilities.js +5 -0
- package/dist/types/capabilities.js.map +1 -0
- package/dist/types/events.d.ts +155 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +5 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/ids.d.ts +43 -0
- package/dist/types/ids.d.ts.map +1 -0
- package/dist/types/ids.js +5 -0
- package/dist/types/ids.js.map +1 -0
- package/dist/types/index.d.ts +19 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/journal.d.ts +47 -0
- package/dist/types/journal.d.ts.map +1 -0
- package/dist/types/journal.js +5 -0
- package/dist/types/journal.js.map +1 -0
- package/dist/types/query.d.ts +185 -0
- package/dist/types/query.d.ts.map +1 -0
- package/dist/types/query.js +10 -0
- package/dist/types/query.js.map +1 -0
- package/dist/types/records.d.ts +76 -0
- package/dist/types/records.d.ts.map +1 -0
- package/dist/types/records.js +5 -0
- package/dist/types/records.js.map +1 -0
- package/dist/types/schema.d.ts +74 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +5 -0
- package/dist/types/schema.js.map +1 -0
- package/dist/types/system.d.ts +161 -0
- package/dist/types/system.d.ts.map +1 -0
- package/dist/types/system.js +32 -0
- package/dist/types/system.js.map +1 -0
- package/dist/types/tokens.d.ts +39 -0
- package/dist/types/tokens.d.ts.map +1 -0
- package/dist/types/tokens.js +5 -0
- package/dist/types/tokens.js.map +1 -0
- package/dist/validate.d.ts +29 -70
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +65 -97
- package/dist/validate.js.map +1 -1
- package/dist/{attachment-download.d.ts → wire/attachment-download.d.ts} +0 -57
- package/dist/wire/attachment-download.d.ts.map +1 -0
- package/dist/{attachment-download.js → wire/attachment-download.js} +0 -61
- package/dist/wire/attachment-download.js.map +1 -0
- package/dist/{auth.d.ts → wire/auth.d.ts} +5 -8
- package/dist/wire/auth.d.ts.map +1 -0
- package/dist/{auth.js → wire/auth.js} +5 -8
- package/dist/wire/auth.js.map +1 -0
- package/dist/{wire-body.d.ts → wire/body.d.ts} +13 -5
- package/dist/wire/body.d.ts.map +1 -0
- package/dist/{wire-body.js → wire/body.js} +65 -7
- package/dist/wire/body.js.map +1 -0
- package/dist/{wire-entry.d.ts → wire/index.d.ts} +12 -12
- package/dist/wire/index.d.ts.map +1 -0
- package/dist/{wire-entry.js → wire/index.js} +13 -17
- package/dist/wire/index.js.map +1 -0
- package/dist/{wire-record.d.ts → wire/record.d.ts} +10 -22
- package/dist/wire/record.d.ts.map +1 -0
- package/dist/{wire-record.js → wire/record.js} +12 -24
- package/dist/wire/record.js.map +1 -0
- package/dist/{wire-request.d.ts → wire/request.d.ts} +20 -37
- package/dist/wire/request.d.ts.map +1 -0
- package/dist/{wire-request.js → wire/request.js} +79 -54
- package/dist/wire/request.js.map +1 -0
- package/package.json +7 -7
- package/dist/adapter-entry.d.ts.map +0 -1
- package/dist/adapter-entry.js.map +0 -1
- package/dist/attachment-download.d.ts.map +0 -1
- package/dist/attachment-download.js.map +0 -1
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js.map +0 -1
- package/dist/changes.d.ts.map +0 -1
- package/dist/changes.js.map +0 -1
- package/dist/combine.d.ts.map +0 -1
- package/dist/combine.js.map +0 -1
- package/dist/did-entry.d.ts.map +0 -1
- package/dist/did-entry.js.map +0 -1
- package/dist/did.d.ts.map +0 -1
- package/dist/did.js.map +0 -1
- package/dist/identity-bindings.d.ts.map +0 -1
- package/dist/identity-bindings.js.map +0 -1
- package/dist/limits.d.ts.map +0 -1
- package/dist/limits.js.map +0 -1
- package/dist/record-id.d.ts +0 -70
- package/dist/record-id.d.ts.map +0 -1
- package/dist/record-id.js +0 -127
- package/dist/record-id.js.map +0 -1
- package/dist/scoped-stack.d.ts +0 -532
- package/dist/scoped-stack.d.ts.map +0 -1
- package/dist/scoped-stack.js +0 -1219
- package/dist/scoped-stack.js.map +0 -1
- package/dist/sort.d.ts.map +0 -1
- package/dist/sort.js.map +0 -1
- package/dist/stack-reads.d.ts.map +0 -1
- package/dist/stack-reads.js.map +0 -1
- package/dist/stack.d.ts +0 -971
- package/dist/stack.d.ts.map +0 -1
- package/dist/stack.js +0 -2012
- package/dist/stack.js.map +0 -1
- package/dist/types.d.ts +0 -1250
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -49
- package/dist/types.js.map +0 -1
- package/dist/wire-body.d.ts.map +0 -1
- package/dist/wire-body.js.map +0 -1
- package/dist/wire-entry.d.ts.map +0 -1
- package/dist/wire-entry.js.map +0 -1
- package/dist/wire-record.d.ts.map +0 -1
- package/dist/wire-record.js.map +0 -1
- package/dist/wire-request.d.ts.map +0 -1
- package/dist/wire-request.js.map +0 -1
- /package/dist/{did.d.ts → did/did.d.ts} +0 -0
- /package/dist/{identity-bindings.d.ts → stack/identity-bindings.d.ts} +0 -0
package/dist/validate.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Stack — Content Validation
|
|
2
|
+
* Stack — Content and Schema Validation
|
|
3
3
|
* -------------------------------------------------------
|
|
4
|
-
* Validates a Record's content object against a TypeSchema
|
|
5
|
-
*
|
|
4
|
+
* Validates a Record's content object against a TypeSchema, and a
|
|
5
|
+
* TypeSchema itself before it is defined — including the field-name rules
|
|
6
|
+
* both share, so no stored name is one a content filter cannot address.
|
|
7
|
+
* Every check returns a list of validation errors — empty means valid.
|
|
6
8
|
*
|
|
7
9
|
* Validates recursively for array and object field kinds.
|
|
8
10
|
* Coercion is never performed — types must match exactly.
|
|
@@ -20,12 +22,15 @@ const ISO_8601_RE = /^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\
|
|
|
20
22
|
// -------------------------------------------------------
|
|
21
23
|
// Internal helpers
|
|
22
24
|
// -------------------------------------------------------
|
|
25
|
+
/** Shared by the 422 for a value outside the list and the 409 for removed values. */
|
|
26
|
+
export const formatEnumValues = (values) => values.map((v) => JSON.stringify(v)).join(', ');
|
|
23
27
|
const jsTypeForScalar = (kind) => {
|
|
24
28
|
switch (kind) {
|
|
25
29
|
case 'string':
|
|
26
30
|
case 'text':
|
|
27
31
|
case 'record-ref':
|
|
28
32
|
case 'file-ref':
|
|
33
|
+
case 'enum':
|
|
29
34
|
return 'string';
|
|
30
35
|
case 'number':
|
|
31
36
|
return 'number';
|
|
@@ -43,9 +48,18 @@ const isPlainJsonObject = (value) => {
|
|
|
43
48
|
/**
|
|
44
49
|
* Content is plain JSON at every depth, including inside `open` containers,
|
|
45
50
|
* so adapters that store the value as given and adapters that serialize it
|
|
46
|
-
* read back the same thing.
|
|
51
|
+
* read back the same thing. Nesting is held to the cap declared fields
|
|
52
|
+
* already meet, so an open value cannot buy an unbounded walk.
|
|
53
|
+
* See docs/spec/data-model.md § Types.
|
|
47
54
|
*/
|
|
48
|
-
const validateJsonValue = (value, path, errors, ancestors = []) => {
|
|
55
|
+
const validateJsonValue = (value, path, errors, depth, ancestors = []) => {
|
|
56
|
+
if (depth > MAX_VALIDATION_DEPTH) {
|
|
57
|
+
errors.push({
|
|
58
|
+
path,
|
|
59
|
+
message: `Content nesting exceeds maximum depth of ${MAX_VALIDATION_DEPTH}`,
|
|
60
|
+
});
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
49
63
|
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
50
64
|
return;
|
|
51
65
|
if (typeof value === 'number') {
|
|
@@ -65,11 +79,11 @@ const validateJsonValue = (value, path, errors, ancestors = []) => {
|
|
|
65
79
|
}
|
|
66
80
|
const next = [...ancestors, value];
|
|
67
81
|
if (isArray) {
|
|
68
|
-
value.forEach((item, i) => validateJsonValue(item, `${path}[${i}]`, errors, next));
|
|
82
|
+
value.forEach((item, i) => validateJsonValue(item, `${path}[${i}]`, errors, depth + 1, next));
|
|
69
83
|
return;
|
|
70
84
|
}
|
|
71
85
|
for (const [key, child] of Object.entries(value)) {
|
|
72
|
-
validateJsonValue(child, `${path}.${key}`, errors, next);
|
|
86
|
+
validateJsonValue(child, `${path}.${key}`, errors, depth + 1, next);
|
|
73
87
|
}
|
|
74
88
|
};
|
|
75
89
|
const validateField = (value, def, path, errors, depth = 0) => {
|
|
@@ -88,7 +102,7 @@ const validateField = (value, def, path, errors, depth = 0) => {
|
|
|
88
102
|
// An open array is the list-shaped counterpart of an open object: the
|
|
89
103
|
// schema places a list here and says nothing about what it holds.
|
|
90
104
|
if (def.open) {
|
|
91
|
-
validateJsonValue(value, path, errors);
|
|
105
|
+
validateJsonValue(value, path, errors, depth);
|
|
92
106
|
return;
|
|
93
107
|
}
|
|
94
108
|
const items = def.items;
|
|
@@ -106,7 +120,7 @@ const validateField = (value, def, path, errors, depth = 0) => {
|
|
|
106
120
|
// An open object says "an object lives here" and nothing about its
|
|
107
121
|
// interior, so there is no set of declared keys to hold it to.
|
|
108
122
|
if (def.open) {
|
|
109
|
-
validateJsonValue(value, path, errors);
|
|
123
|
+
validateJsonValue(value, path, errors, depth);
|
|
110
124
|
return;
|
|
111
125
|
}
|
|
112
126
|
validateContent(value, def.properties, path, errors, depth + 1);
|
|
@@ -149,10 +163,10 @@ const validateField = (value, def, path, errors, depth = 0) => {
|
|
|
149
163
|
else if (typeof value === 'number' && !Number.isFinite(value)) {
|
|
150
164
|
errors.push({ path, message: `Expected a finite number, got ${value}` });
|
|
151
165
|
}
|
|
152
|
-
else if (def.kind === '
|
|
166
|
+
else if (def.kind === 'enum' && !def.values.includes(value)) {
|
|
153
167
|
errors.push({
|
|
154
168
|
path,
|
|
155
|
-
message: `Expected one of ${def.
|
|
169
|
+
message: `Expected one of ${formatEnumValues(def.values)}, got ${JSON.stringify(value)}`,
|
|
156
170
|
});
|
|
157
171
|
}
|
|
158
172
|
};
|
|
@@ -174,11 +188,10 @@ export const validateContent = (content, schema, prefix = '', errors = [], depth
|
|
|
174
188
|
});
|
|
175
189
|
return errors;
|
|
176
190
|
}
|
|
177
|
-
//
|
|
178
|
-
//
|
|
179
|
-
//
|
|
180
|
-
//
|
|
181
|
-
// an `object` field `open` for a shape a schema cannot describe.
|
|
191
|
+
// An undeclared field is refused rather than stored: a key outside the
|
|
192
|
+
// schema is a typo, a stale writer or not content at all, and storing it
|
|
193
|
+
// makes each look like a write that worked. An `open` object field holds
|
|
194
|
+
// what a schema cannot describe.
|
|
182
195
|
// See docs/spec/data-model.md § Undeclared content fields.
|
|
183
196
|
for (const key of Object.keys(content)) {
|
|
184
197
|
if (Object.hasOwn(schema, key))
|
|
@@ -229,23 +242,11 @@ const dropAbsentValue = (value, def, depth) => {
|
|
|
229
242
|
return value;
|
|
230
243
|
};
|
|
231
244
|
/**
|
|
232
|
-
* Content keys
|
|
233
|
-
*
|
|
234
|
-
*
|
|
235
|
-
*
|
|
236
|
-
*
|
|
237
|
-
* That is not a prototype-pollution gadget today: JSON.stringify writes
|
|
238
|
-
* only own-enumerable properties, so a reassigned prototype never reaches
|
|
239
|
-
* storage, and JSON.parse recreates `__proto__` as an own property rather
|
|
240
|
-
* than invoking the setter, so a stored one round-trips inertly. The
|
|
241
|
-
* defect is that the two write paths disagree — a merge patch to
|
|
242
|
-
* `__proto__` silently vanishes, while the same key through create()
|
|
243
|
-
* stores as an ordinary field — and that a future refactor deepening the
|
|
244
|
-
* shallow merge would turn a quiet inconsistency into a real one.
|
|
245
|
-
*
|
|
246
|
-
* Rejecting is more honest than skipping: a caller who sends one of these
|
|
247
|
-
* finds out, rather than watching a write appear to succeed and do
|
|
248
|
-
* nothing. See docs/spec/data-model.md § Reserved content keys.
|
|
245
|
+
* Content keys naming JavaScript's object machinery rather than a field.
|
|
246
|
+
* Whether one survives a write would depend on how the code setting it was
|
|
247
|
+
* written — assignment drops `__proto__`, JSON.parse keeps it — so all
|
|
248
|
+
* three are refused at the write, and the caller finds out.
|
|
249
|
+
* See docs/spec/data-model.md § Reserved content keys.
|
|
249
250
|
*/
|
|
250
251
|
export const RESERVED_CONTENT_KEYS = ['__proto__', 'constructor', 'prototype'];
|
|
251
252
|
/**
|
|
@@ -268,20 +269,21 @@ const SCALAR_KINDS = {
|
|
|
268
269
|
text: true,
|
|
269
270
|
'record-ref': true,
|
|
270
271
|
'file-ref': true,
|
|
272
|
+
enum: true,
|
|
271
273
|
};
|
|
272
|
-
const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
273
|
-
const
|
|
274
|
+
export const isPlainObject = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
275
|
+
const validateEnumValuesShape = (list, path, errors) => {
|
|
274
276
|
if (!Array.isArray(list) || list.length === 0) {
|
|
275
|
-
errors.push({ path, message: '
|
|
277
|
+
errors.push({ path, message: 'An enum must declare "values", a non-empty array of strings' });
|
|
276
278
|
return;
|
|
277
279
|
}
|
|
278
280
|
const seen = new Set();
|
|
279
281
|
for (const entry of list) {
|
|
280
282
|
if (typeof entry !== 'string') {
|
|
281
|
-
errors.push({ path, message: `"
|
|
283
|
+
errors.push({ path, message: `"values" entries must be strings, got ${typeName(entry)}` });
|
|
282
284
|
}
|
|
283
285
|
else if (seen.has(entry)) {
|
|
284
|
-
errors.push({ path, message: `"
|
|
286
|
+
errors.push({ path, message: `"values" lists ${JSON.stringify(entry)} more than once` });
|
|
285
287
|
}
|
|
286
288
|
seen.add(entry);
|
|
287
289
|
}
|
|
@@ -302,8 +304,14 @@ const validateFieldDefShape = (def, path, errors, depth) => {
|
|
|
302
304
|
errors.push({ path, message: 'A field definition must name a "kind"' });
|
|
303
305
|
return;
|
|
304
306
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
+
const knownKind = def.kind === 'array' || def.kind === 'object' || Object.hasOwn(SCALAR_KINDS, def.kind);
|
|
308
|
+
if (def.values !== undefined && knownKind && def.kind !== 'enum') {
|
|
309
|
+
errors.push({ path, message: `"values" is only allowed on an enum field, not "${def.kind}"` });
|
|
310
|
+
}
|
|
311
|
+
// Unknown keys are otherwise ignored, but `enum` names a kind: as a key it
|
|
312
|
+
// would read as a constraint that nothing enforces.
|
|
313
|
+
if (def.enum !== undefined) {
|
|
314
|
+
errors.push({ path, message: '"enum" is a field kind, not a field key' });
|
|
307
315
|
}
|
|
308
316
|
if (def.kind === 'array') {
|
|
309
317
|
if (isOpen) {
|
|
@@ -346,28 +354,14 @@ const validateFieldDefShape = (def, path, errors, depth) => {
|
|
|
346
354
|
});
|
|
347
355
|
return;
|
|
348
356
|
}
|
|
349
|
-
if (def.
|
|
350
|
-
|
|
351
|
-
errors.push({ path, message: `"enum" is only allowed on a string field, not "${def.kind}"` });
|
|
352
|
-
}
|
|
353
|
-
else {
|
|
354
|
-
validateEnumShape(def.enum, path, errors);
|
|
355
|
-
}
|
|
356
|
-
}
|
|
357
|
+
if (def.kind === 'enum')
|
|
358
|
+
validateEnumValuesShape(def.values, path, errors);
|
|
357
359
|
};
|
|
358
360
|
/**
|
|
359
|
-
* Check that a schema is
|
|
360
|
-
*
|
|
361
|
-
*
|
|
362
|
-
*
|
|
363
|
-
* out of hashSchema() rather than reporting anything, and a definition with
|
|
364
|
-
* an unknown `kind` — or none — defines a field whose every write fails
|
|
365
|
-
* against an expectation the schema never actually stated, sending the
|
|
366
|
-
* caller looking through their content for a bug that is in their type.
|
|
367
|
-
*
|
|
368
|
-
* Refused at definition time for the reason a field name no filter could
|
|
369
|
-
* address is: a schema is a promise, and one nothing can satisfy is worth
|
|
370
|
-
* catching where it is written. See docs/spec/data-model.md § Types.
|
|
361
|
+
* Check that a schema is a schema before anything reads it as one: off the
|
|
362
|
+
* wire it is JSON TypeScript never saw. A container declaring neither its
|
|
363
|
+
* interior nor `open` would throw out of hashSchema(), and an unknown `kind`
|
|
364
|
+
* would define a field every write fails. See docs/spec/data-model.md § Types.
|
|
371
365
|
*/
|
|
372
366
|
export const validateSchemaShape = (schema, prefix = '', errors = [], depth = 0) => {
|
|
373
367
|
if (depth > MAX_VALIDATION_DEPTH) {
|
|
@@ -390,30 +384,19 @@ export const validateSchemaShape = (schema, prefix = '', errors = [], depth = 0)
|
|
|
390
384
|
return errors;
|
|
391
385
|
};
|
|
392
386
|
/**
|
|
393
|
-
* The same
|
|
394
|
-
*
|
|
395
|
-
*
|
|
396
|
-
*
|
|
397
|
-
*
|
|
398
|
-
* A declaration cannot license what the content rule refuses, so accepting
|
|
399
|
-
* one would define a field no record could ever hold — and, where the
|
|
400
|
-
* declaration is `required`, a type no record could satisfy at all: supply
|
|
401
|
-
* the field and the write is refused as a reserved key, omit it and the
|
|
402
|
-
* write is refused as a missing required field. Refused at definition time
|
|
403
|
-
* for the reason a field name no filter could address is
|
|
404
|
-
* (validateSchemaFieldNames): a schema is a promise that a field is
|
|
405
|
-
* meaningful. See docs/spec/data-model.md § Reserved content keys.
|
|
387
|
+
* The same names, refused where a schema declares them, top-level only like
|
|
388
|
+
* the content rule. A declaration cannot license what that rule refuses, so
|
|
389
|
+
* it would define a field no record could hold — and if `required`, a type
|
|
390
|
+
* no record could satisfy. See docs/spec/data-model.md § Reserved content keys.
|
|
406
391
|
*/
|
|
407
392
|
export const validateSchemaReservedNames = (schema) => RESERVED_CONTENT_KEYS.filter((key) => Object.hasOwn(schema, key)).map((key) => ({
|
|
408
393
|
path: key,
|
|
409
394
|
message: `"${key}" is a reserved content key and cannot be declared as a field name`,
|
|
410
395
|
}));
|
|
411
396
|
/**
|
|
412
|
-
* `undefined` is not a value a merge patch can carry: `null`
|
|
413
|
-
*
|
|
414
|
-
*
|
|
415
|
-
* field it names. Top-level only, matching the shallow merge — a nested
|
|
416
|
-
* one is part of a value being replaced wholesale.
|
|
397
|
+
* `undefined` is not a value a merge patch can carry: `null` deletes, JSON
|
|
398
|
+
* drops the key, and the presence checks read the key as a claim on its
|
|
399
|
+
* field. Top-level only, matching the shallow merge.
|
|
417
400
|
* See docs/spec/data-model.md § Undefined values in a patch.
|
|
418
401
|
*/
|
|
419
402
|
export const validatePatchValues = (patch) => Object.keys(patch)
|
|
@@ -423,20 +406,10 @@ export const validatePatchValues = (patch) => Object.keys(patch)
|
|
|
423
406
|
message: `"${key}" is undefined; omit it to leave the field unchanged, or use null to remove it`,
|
|
424
407
|
}));
|
|
425
408
|
/**
|
|
426
|
-
* Characters a
|
|
427
|
-
*
|
|
428
|
-
*
|
|
429
|
-
*
|
|
430
|
-
* removed from the write side — where it is a validation error a caller
|
|
431
|
-
* can act on — rather than from the query side, where it would need an
|
|
432
|
-
* escape convention that silently misreads when a caller forgets it.
|
|
433
|
-
*
|
|
434
|
-
* Wider than what SQLite's JSON path grammar treats as syntax today (`.`,
|
|
435
|
-
* `[`, `]`, `$`, `"`): `*` and `#` are reserved against a path grammar
|
|
436
|
-
* that grows a wildcard or a last-element form. Narrowing a legal charset
|
|
437
|
-
* is a one-way door, so the cost of reserving a character now is nothing
|
|
438
|
-
* and the cost of reserving it later is every stored record.
|
|
439
|
-
*
|
|
409
|
+
* Characters a field name may not contain: a filter key is a dot-separated
|
|
410
|
+
* path, so a field named `emails.value` would make one filter mean two
|
|
411
|
+
* things. `*` and `#` are reserved ahead of the path grammar, as narrowing
|
|
412
|
+
* a legal charset later costs every stored record.
|
|
440
413
|
* See docs/spec/data-model.md § Content field names.
|
|
441
414
|
*/
|
|
442
415
|
export const CONTENT_KEY_PATH_METACHARACTERS = ['.', '[', ']', '$', '"', '*', '#'];
|
|
@@ -510,9 +483,4 @@ export const validateSchemaFieldNames = (schema, prefix = '', errors = [], depth
|
|
|
510
483
|
}
|
|
511
484
|
return errors;
|
|
512
485
|
};
|
|
513
|
-
/**
|
|
514
|
-
* Returns true if the content is valid against the schema.
|
|
515
|
-
* Use validateContent() directly to get error details.
|
|
516
|
-
*/
|
|
517
|
-
export const isValid = (content, schema) => validateContent(content, schema).length === 0;
|
|
518
486
|
//# sourceMappingURL=validate.js.map
|
package/dist/validate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,63 +34,6 @@ export declare const NOSNIFF_HEADER_VALUE = "nosniff";
|
|
|
34
34
|
export declare function isSafeAttachmentContentType(mimeType: string): boolean;
|
|
35
35
|
/** Infers a candidate MIME type from a filename's extension. Returns undefined for no extension or an unrecognized one — the caller falls through to the next source. */
|
|
36
36
|
export declare function inferContentTypeFromFilename(filename: string): string | undefined;
|
|
37
|
-
/**
|
|
38
|
-
* Which `_attachment@1` record establishes a fileId's mimeType — the
|
|
39
|
-
* "first-recorded" rule of docs/spec/attachments.md, as a total order:
|
|
40
|
-
* earliest `createdAt`, ties broken by the lower `id`.
|
|
41
|
-
*
|
|
42
|
-
* The tiebreak is what makes it a rule rather than a coincidence of scan
|
|
43
|
-
* order. Rejecting a conflicting mimeType at write time is check-then-act
|
|
44
|
-
* with no storage-level uniqueness behind it, so two racing first uploads
|
|
45
|
-
* of the same bytes can both land on a concurrent server. Determinism
|
|
46
|
-
* doesn't depend on that never happening — it depends on every reader
|
|
47
|
-
* ordering the records the same way, which is why core's write-time
|
|
48
|
-
* conflict check and a server's serving choice both come through here.
|
|
49
|
-
*
|
|
50
|
-
* Generic over the record shape so a server can pass its own row type.
|
|
51
|
-
* Records for other fileIds must be filtered out by the caller.
|
|
52
|
-
*/
|
|
53
|
-
export declare function firstRecordedAttachment<T extends {
|
|
54
|
-
id: string;
|
|
55
|
-
createdAt: Date;
|
|
56
|
-
}>(records: readonly T[]): T | undefined;
|
|
57
|
-
/**
|
|
58
|
-
* The same total order as a comparator, for a caller handing back the whole
|
|
59
|
-
* candidate set rather than the winner — sorted this way, the winner is
|
|
60
|
-
* element zero. Package-internal: `core/wire` exports the selection, since
|
|
61
|
-
* the ordering is only useful to something that already has every record.
|
|
62
|
-
*/
|
|
63
|
-
export declare function compareRecordedAttachments<T extends {
|
|
64
|
-
id: string;
|
|
65
|
-
createdAt: Date;
|
|
66
|
-
}>(a: T, b: T): number;
|
|
67
|
-
/**
|
|
68
|
-
* Which `_attachment` record describes a *reference* to a fileId, as
|
|
69
|
-
* opposed to the fileId itself: the association's own
|
|
70
|
-
* `attachmentRecordId`, else the requester's own upload, else the
|
|
71
|
-
* first-recorded record. Where `filename` comes from on a download when
|
|
72
|
-
* `?filename` is not given, and the name a consumer shows for an
|
|
73
|
-
* attachment association. See docs/spec/attachments.md § Naming the upload
|
|
74
|
-
* a reference came from.
|
|
75
|
-
*
|
|
76
|
-
* Every step falls back rather than failing: a pointer at a record that is
|
|
77
|
-
* gone, or at nothing this caller collected, lands on the same answer a
|
|
78
|
-
* reference with no pointer at all gets.
|
|
79
|
-
*
|
|
80
|
-
* Generic over the record shape, like firstRecordedAttachment(), so a
|
|
81
|
-
* server can pass its own row type. Records for other fileIds must be
|
|
82
|
-
* filtered out by the caller.
|
|
83
|
-
*/
|
|
84
|
-
export declare function resolveReferencedAttachment<T extends {
|
|
85
|
-
id: string;
|
|
86
|
-
createdAt: Date;
|
|
87
|
-
createdBy?: {
|
|
88
|
-
subjectId: string;
|
|
89
|
-
};
|
|
90
|
-
}>(records: readonly T[], opts?: {
|
|
91
|
-
attachmentRecordId?: string;
|
|
92
|
-
requesterEntityId?: string;
|
|
93
|
-
}): T | undefined;
|
|
94
37
|
export type AttachmentDownloadContentType = {
|
|
95
38
|
/** The Content-Type header value to serve. */
|
|
96
39
|
contentType: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-download.d.ts","sourceRoot":"","sources":["../../src/wire/attachment-download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAcH,4EAA4E;AAC5E,eAAO,MAAM,mBAAmB,6BAA6B,CAAC;AAE9D,eAAO,MAAM,mBAAmB,2BAA2B,CAAC;AAC5D,eAAO,MAAM,oBAAoB,YAAY,CAAC;AAqB9C;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAMrE;AAmCD,yKAAyK;AACzK,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjF;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC1C,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB;;;;;;OAMG;IACH,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,oCAAoC,CAAC,KAAK,EAAE;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,6BAA6B,CAUhC"}
|
|
@@ -101,67 +101,6 @@ export function inferContentTypeFromFilename(filename) {
|
|
|
101
101
|
const match = /\.([a-z0-9]+)$/i.exec(filename);
|
|
102
102
|
return match ? EXTENSION_MIME_TYPES[match[1].toLowerCase()] : undefined;
|
|
103
103
|
}
|
|
104
|
-
/**
|
|
105
|
-
* Which `_attachment@1` record establishes a fileId's mimeType — the
|
|
106
|
-
* "first-recorded" rule of docs/spec/attachments.md, as a total order:
|
|
107
|
-
* earliest `createdAt`, ties broken by the lower `id`.
|
|
108
|
-
*
|
|
109
|
-
* The tiebreak is what makes it a rule rather than a coincidence of scan
|
|
110
|
-
* order. Rejecting a conflicting mimeType at write time is check-then-act
|
|
111
|
-
* with no storage-level uniqueness behind it, so two racing first uploads
|
|
112
|
-
* of the same bytes can both land on a concurrent server. Determinism
|
|
113
|
-
* doesn't depend on that never happening — it depends on every reader
|
|
114
|
-
* ordering the records the same way, which is why core's write-time
|
|
115
|
-
* conflict check and a server's serving choice both come through here.
|
|
116
|
-
*
|
|
117
|
-
* Generic over the record shape so a server can pass its own row type.
|
|
118
|
-
* Records for other fileIds must be filtered out by the caller.
|
|
119
|
-
*/
|
|
120
|
-
export function firstRecordedAttachment(records) {
|
|
121
|
-
return records.reduce((first, record) => (!first || compareRecordedAttachments(record, first) < 0 ? record : first), undefined);
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* The same total order as a comparator, for a caller handing back the whole
|
|
125
|
-
* candidate set rather than the winner — sorted this way, the winner is
|
|
126
|
-
* element zero. Package-internal: `core/wire` exports the selection, since
|
|
127
|
-
* the ordering is only useful to something that already has every record.
|
|
128
|
-
*/
|
|
129
|
-
export function compareRecordedAttachments(a, b) {
|
|
130
|
-
const delta = a.createdAt.getTime() - b.createdAt.getTime();
|
|
131
|
-
if (delta !== 0)
|
|
132
|
-
return delta;
|
|
133
|
-
return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Which `_attachment` record describes a *reference* to a fileId, as
|
|
137
|
-
* opposed to the fileId itself: the association's own
|
|
138
|
-
* `attachmentRecordId`, else the requester's own upload, else the
|
|
139
|
-
* first-recorded record. Where `filename` comes from on a download when
|
|
140
|
-
* `?filename` is not given, and the name a consumer shows for an
|
|
141
|
-
* attachment association. See docs/spec/attachments.md § Naming the upload
|
|
142
|
-
* a reference came from.
|
|
143
|
-
*
|
|
144
|
-
* Every step falls back rather than failing: a pointer at a record that is
|
|
145
|
-
* gone, or at nothing this caller collected, lands on the same answer a
|
|
146
|
-
* reference with no pointer at all gets.
|
|
147
|
-
*
|
|
148
|
-
* Generic over the record shape, like firstRecordedAttachment(), so a
|
|
149
|
-
* server can pass its own row type. Records for other fileIds must be
|
|
150
|
-
* filtered out by the caller.
|
|
151
|
-
*/
|
|
152
|
-
export function resolveReferencedAttachment(records, opts = {}) {
|
|
153
|
-
if (opts.attachmentRecordId) {
|
|
154
|
-
const named = records.find((record) => record.id === opts.attachmentRecordId);
|
|
155
|
-
if (named)
|
|
156
|
-
return named;
|
|
157
|
-
}
|
|
158
|
-
if (opts.requesterEntityId) {
|
|
159
|
-
const own = records.filter((record) => record.createdBy?.subjectId === opts.requesterEntityId);
|
|
160
|
-
if (own.length > 0)
|
|
161
|
-
return firstRecordedAttachment(own);
|
|
162
|
-
}
|
|
163
|
-
return firstRecordedAttachment(records);
|
|
164
|
-
}
|
|
165
104
|
/**
|
|
166
105
|
* Resolve the Content-Type served for `GET /attachments/:fileId`
|
|
167
106
|
* (docs/spec/wire-format.md § Download): `?contentType` wins, else
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-download.js","sourceRoot":"","sources":["../../src/wire/attachment-download.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* Core verifies signatures; it does not run a server. Nonce storage,
|
|
17
17
|
* single-use enforcement and token issuance are the server's.
|
|
18
18
|
*/
|
|
19
|
-
import { type DidKeypair } from '
|
|
19
|
+
import { type DidKeypair } from '../did/did.js';
|
|
20
20
|
/**
|
|
21
21
|
* Malformed input to a handshake primitive — a bad origin, DID, or nonce,
|
|
22
22
|
* caught locally before anything is signed or verified. Outside the
|
|
@@ -49,13 +49,10 @@ export type AuthChallenge = {
|
|
|
49
49
|
*/
|
|
50
50
|
export declare const authOriginFromUrl: (url: string) => string;
|
|
51
51
|
/**
|
|
52
|
-
* Build the exact bytes a client signs and a server verifies.
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
* challenge from the client's real stack, pass that nonce along, and
|
|
57
|
-
* redeem the returned signature as a token. Signing the origin the client
|
|
58
|
-
* believes it is talking to makes such a signature verify nowhere else.
|
|
52
|
+
* Build the exact bytes a client signs and a server verifies. The origin is
|
|
53
|
+
* signed because a nonce alone doesn't scope a signature: a server a client
|
|
54
|
+
* connects to could relay a challenge from the client's real stack and
|
|
55
|
+
* redeem the signature there.
|
|
59
56
|
*/
|
|
60
57
|
export declare const buildAuthChallengePayload: (challenge: AuthChallenge) => Uint8Array;
|
|
61
58
|
/** Sign a challenge with the private key behind its DID. */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/wire/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAA+C,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAM7F;;;;;;GAMG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,OAAO,SAAK;CAIzB;AAMD;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AASvD,MAAM,MAAM,aAAa,GAAG;IAC1B,wEAAwE;IACxE,MAAM,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,KAAG,MAa/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,WAAW,aAAa,KAAG,UAapE,CAAC;AAMF,4DAA4D;AAC5D,eAAO,MAAM,iBAAiB,GAC5B,YAAY,SAAS,EACrB,WAAW,aAAa,KACvB,OAAO,CAAC,UAAU,CAAkE,CAAC;AAExF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,WAAW,aAAa,EACxB,WAAW,UAAU,KACpB,OAAO,CAAC,OAAO,CASjB,CAAC;AAMF;;;;;GAKG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,OAAO,EAAE,UAAU,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;CACpD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS,UAAU,KAAG,aAG7D,CAAC;AAMH,eAAO,MAAM,eAAe,GAAI,OAAO,UAAU,KAAG,MAInD,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,KAAG,UAYjD,CAAC"}
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
* Core verifies signatures; it does not run a server. Nonce storage,
|
|
17
17
|
* single-use enforcement and token issuance are the server's.
|
|
18
18
|
*/
|
|
19
|
-
import { isValidDid, signWithDid, verifyDidSignature } from '
|
|
19
|
+
import { isValidDid, signWithDid, verifyDidSignature } from '../did/did.js';
|
|
20
20
|
// -------------------------------------------------------
|
|
21
21
|
// Errors
|
|
22
22
|
// -------------------------------------------------------
|
|
@@ -70,13 +70,10 @@ export const authOriginFromUrl = (url) => {
|
|
|
70
70
|
return parsed.origin;
|
|
71
71
|
};
|
|
72
72
|
/**
|
|
73
|
-
* Build the exact bytes a client signs and a server verifies.
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* challenge from the client's real stack, pass that nonce along, and
|
|
78
|
-
* redeem the returned signature as a token. Signing the origin the client
|
|
79
|
-
* believes it is talking to makes such a signature verify nowhere else.
|
|
73
|
+
* Build the exact bytes a client signs and a server verifies. The origin is
|
|
74
|
+
* signed because a nonce alone doesn't scope a signature: a server a client
|
|
75
|
+
* connects to could relay a challenge from the client's real stack and
|
|
76
|
+
* redeem the signature there.
|
|
80
77
|
*/
|
|
81
78
|
export const buildAuthChallengePayload = (challenge) => {
|
|
82
79
|
const origin = authOriginFromUrl(challenge.origin);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/wire/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
* Stack — Wire Request Bodies
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* The JSON bodies of the endpoints core specifies but runs no server for:
|
|
5
|
-
* the auth handshake, `PATCH /entity`, `POST /types
|
|
6
|
-
* `POST /records/:id/migrate`. Each parser names every key its endpoint
|
|
5
|
+
* the auth handshake, `PATCH /entity`, `POST /types`,
|
|
6
|
+
* `POST /records/:id/migrate` and `POST /installs`. Each parser names every key its endpoint
|
|
7
7
|
* defines, so a server refuses the rest without keeping its own copy of
|
|
8
8
|
* the list — a copy that drifts the first time core adds a field.
|
|
9
9
|
*
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
* DID's form — so judging them here would let two answers drift.
|
|
17
17
|
* See docs/spec/wire-format.md § Unrecognized input.
|
|
18
18
|
*/
|
|
19
|
-
import type { DefineTypeOptions } from '
|
|
20
|
-
import type {
|
|
19
|
+
import type { DefineTypeOptions } from '../stack/client.js';
|
|
20
|
+
import type { AppManifest } from '../install.js';
|
|
21
|
+
import type { AssociationEdit, TypeId } from '../types/index.js';
|
|
21
22
|
export declare function requireBody(body: unknown, label: string): Record<string, unknown>;
|
|
22
23
|
/**
|
|
23
24
|
* The refusal a present field earns when its value is the wrong shape.
|
|
@@ -76,4 +77,11 @@ export type WireMigrationRequest = {
|
|
|
76
77
|
* `toTypeId`'s schema. See docs/spec/wire-format.md § Migration commit.
|
|
77
78
|
*/
|
|
78
79
|
export declare function parseMigrationBody(body: unknown): WireMigrationRequest;
|
|
79
|
-
|
|
80
|
+
/**
|
|
81
|
+
* Parse a `POST /installs` body, `{ manifest }`, into the manifest
|
|
82
|
+
* `planInstall()` takes. Each type is read as a `POST /types` body is.
|
|
83
|
+
* Which families a manifest may define, and which requests the grant rules
|
|
84
|
+
* allow, are `planInstall()`'s to judge. See docs/spec/wire-format.md § Installs.
|
|
85
|
+
*/
|
|
86
|
+
export declare function parseInstallBody(body: unknown): AppManifest;
|
|
87
|
+
//# sourceMappingURL=body.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"body.d.ts","sourceRoot":"","sources":["../../src/wire/body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EACV,eAAe,EAGf,MAAM,EAEP,MAAM,mBAAmB,CAAC;AAE3B,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAIjF;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,KAAK,CAE/D;AAwCD,MAAM,MAAM,wBAAwB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,GAAG,wBAAwB,CAI9E;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAQtE;AAMD,iFAAiF;AACjF,MAAM,MAAM,eAAe,GAAG;IAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAE/E,2EAA2E;AAC3E,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,CAInE;AAMD;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,OAAO,GAAG,eAAe,EAAE,CA2B1E;AAsBD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,iBAAiB,CAc9D;AAMD,uEAAuE;AACvE,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE1F;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,CAOtE;AAMD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CAiC3D"}
|