@haverstack/core 0.36.0 → 0.38.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 +15 -24
- package/dist/grants.d.ts.map +1 -1
- package/dist/grants.js +14 -13
- 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 +11 -11
- package/dist/query-validation.d.ts.map +1 -1
- package/dist/query-validation.js +41 -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 +78 -33
- package/dist/scoped-stack.d.ts.map +1 -1
- package/dist/scoped-stack.js +119 -89
- 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 +162 -154
- package/dist/stack.d.ts.map +1 -1
- package/dist/stack.js +307 -290
- 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-entry.d.ts +5 -6
- package/dist/wire-entry.d.ts.map +1 -1
- package/dist/wire-entry.js +5 -11
- 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 +10 -10
- package/dist/wire-record.js.map +1 -1
- package/dist/wire-request.d.ts +2 -2
- package/dist/wire-request.d.ts.map +1 -1
- package/dist/wire-request.js +103 -61
- package/dist/wire-request.js.map +1 -1
- package/package.json +1 -1
package/dist/combine.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Use this when you want different backends for records and blobs, e.g.:
|
|
4
4
|
*
|
|
5
5
|
* const adapter = combineAdapters({ record: sqliteAdapter, blob: s3Adapter });
|
|
6
|
-
* const stack = await Stack.
|
|
6
|
+
* const stack = await Stack.open(adapter);
|
|
7
7
|
*/
|
|
8
8
|
export function combineAdapters(parts) {
|
|
9
9
|
return {
|
|
@@ -50,11 +50,11 @@ export function combineAdapters(parts) {
|
|
|
50
50
|
// synthesized here: glued backends have no shared transaction to honor
|
|
51
51
|
// its atomicity promise (docs/spec/adapters.md § Interface split).
|
|
52
52
|
// Stack.putAttachment() falls back to bytes-then-create().
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
...(parts.blob.
|
|
57
|
-
|
|
53
|
+
putBlob: (data) => parts.blob.putBlob(data),
|
|
54
|
+
getBlob: (id) => parts.blob.getBlob(id),
|
|
55
|
+
deleteBlob: (id) => parts.blob.deleteBlob(id),
|
|
56
|
+
...(parts.blob.listBlobs && {
|
|
57
|
+
listBlobs: () => parts.blob.listBlobs(),
|
|
58
58
|
}),
|
|
59
59
|
async flush() {
|
|
60
60
|
await parts.record.flush?.();
|
package/dist/combine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combine.js","sourceRoot":"","sources":["../src/combine.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"combine.js","sourceRoot":"","sources":["../src/combine.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -6,11 +6,14 @@
|
|
|
6
6
|
* `instanceof StackError` — before serializing a wire body, and each
|
|
7
7
|
* subclass carries its wire discriminator as an instance `code`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* InvalidDidError): they report a local
|
|
12
|
-
* topology, not a state a request can be
|
|
13
|
-
* with one.
|
|
9
|
+
* Several errors sit deliberately outside that root (UseAfterCloseError,
|
|
10
|
+
* InvalidAdapterError, RelayScopeError, and — in their own
|
|
11
|
+
* modules — IdGenerationError and InvalidDidError): they report a local
|
|
12
|
+
* programming error or an assembled topology, not a state a request can be
|
|
13
|
+
* in, so no server ever responds with one.
|
|
14
|
+
*
|
|
15
|
+
* The `Stack` prefix is reserved for the taxonomy: a class named
|
|
16
|
+
* `Stack…Error` extends StackError, and nothing else carries the prefix.
|
|
14
17
|
*/
|
|
15
18
|
import type { SchemaDriftViolation } from './schema.js';
|
|
16
19
|
import type { ValidationError } from './validate.js';
|
|
@@ -25,8 +28,8 @@ export type StackErrorCode = 'bad_request' | 'permission' | 'not_found' | 'confl
|
|
|
25
28
|
/**
|
|
26
29
|
* Root of the Stack error taxonomy. A single `instanceof StackError` answers
|
|
27
30
|
* "is this a Stack-domain error or a bug?" — the question a server's error
|
|
28
|
-
* middleware asks before serializing a wire body, and one
|
|
29
|
-
*
|
|
31
|
+
* middleware asks before serializing a wire body, and one an instanceof
|
|
32
|
+
* ladder answers only by exhaustion. Every subclass carries its
|
|
30
33
|
* discriminator as an instance `code`, so serialization is a lookup rather
|
|
31
34
|
* than a chain of class tests.
|
|
32
35
|
*
|
|
@@ -96,7 +99,7 @@ export declare class StackVersionConflictError extends StackError {
|
|
|
96
99
|
* request whose *type* is undefined never addressed a record, so answering
|
|
97
100
|
* 404 would say a record was missing when none was asked for.
|
|
98
101
|
*/
|
|
99
|
-
export declare class
|
|
102
|
+
export declare class StackBadRequestError extends StackError {
|
|
100
103
|
/**
|
|
101
104
|
* Which declared capability the query asked for and the adapter lacks,
|
|
102
105
|
* or undefined when the query's own shape is what was wrong — a
|
|
@@ -140,7 +143,7 @@ export declare class StackPayloadTooLargeError extends StackError {
|
|
|
140
143
|
* there is nothing to interrupt from inside the call. It exists so a
|
|
141
144
|
* server that bounds query time has a class to serialize, and so the app
|
|
142
145
|
* catching it can tell "too expensive, narrow it and retry" from
|
|
143
|
-
*
|
|
146
|
+
* StackBadRequestError's "malformed, don't bother retrying" — the distinction
|
|
144
147
|
* that would be lost if a timeout reused `bad_request`.
|
|
145
148
|
*/
|
|
146
149
|
export declare class StackTimeoutError extends StackError {
|
|
@@ -168,13 +171,22 @@ export declare class StackSchemaDriftError extends StackError {
|
|
|
168
171
|
* error with no wire representation — no server ever responds with it.
|
|
169
172
|
* See docs/spec/adapters.md § Lifecycle.
|
|
170
173
|
*/
|
|
171
|
-
export declare class
|
|
174
|
+
export declare class UseAfterCloseError extends Error {
|
|
172
175
|
constructor(message?: string);
|
|
173
176
|
}
|
|
177
|
+
/**
|
|
178
|
+
* Thrown when Stack.open() is handed an adapter that cannot back a stack.
|
|
179
|
+
* Outside the StackError taxonomy for the same reason UseAfterCloseError is:
|
|
180
|
+
* it reports a local setup mistake, not a state a request can be in.
|
|
181
|
+
* See docs/spec.md § Stack initialization.
|
|
182
|
+
*/
|
|
183
|
+
export declare class InvalidAdapterError extends Error {
|
|
184
|
+
constructor(message: string);
|
|
185
|
+
}
|
|
174
186
|
/**
|
|
175
187
|
* Thrown when a scoped view is asked to observe a stack whose adapter
|
|
176
188
|
* relays a remote feed. Outside the StackError taxonomy for the same
|
|
177
|
-
* reason
|
|
189
|
+
* reason UseAfterCloseError is: it reports a topology the caller assembled,
|
|
178
190
|
* not a state a request can be in.
|
|
179
191
|
*
|
|
180
192
|
* A relayed frame is scoped by the authority that opened the feed, and a
|
|
@@ -185,7 +197,7 @@ export declare class StackClosedError extends Error {
|
|
|
185
197
|
* failure that looks fine in testing. So it refuses.
|
|
186
198
|
* See docs/spec/events.md § Permission scoping.
|
|
187
199
|
*/
|
|
188
|
-
export declare class
|
|
200
|
+
export declare class RelayScopeError extends Error {
|
|
189
201
|
constructor(message: string);
|
|
190
202
|
}
|
|
191
203
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.js
CHANGED
|
@@ -6,18 +6,21 @@
|
|
|
6
6
|
* `instanceof StackError` — before serializing a wire body, and each
|
|
7
7
|
* subclass carries its wire discriminator as an instance `code`.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* InvalidDidError): they report a local
|
|
12
|
-
* topology, not a state a request can be
|
|
13
|
-
* with one.
|
|
9
|
+
* Several errors sit deliberately outside that root (UseAfterCloseError,
|
|
10
|
+
* InvalidAdapterError, RelayScopeError, and — in their own
|
|
11
|
+
* modules — IdGenerationError and InvalidDidError): they report a local
|
|
12
|
+
* programming error or an assembled topology, not a state a request can be
|
|
13
|
+
* in, so no server ever responds with one.
|
|
14
|
+
*
|
|
15
|
+
* The `Stack` prefix is reserved for the taxonomy: a class named
|
|
16
|
+
* `Stack…Error` extends StackError, and nothing else carries the prefix.
|
|
14
17
|
*/
|
|
15
18
|
import { baseIdOf, parseTypeId } from './schema.js';
|
|
16
19
|
/**
|
|
17
20
|
* Root of the Stack error taxonomy. A single `instanceof StackError` answers
|
|
18
21
|
* "is this a Stack-domain error or a bug?" — the question a server's error
|
|
19
|
-
* middleware asks before serializing a wire body, and one
|
|
20
|
-
*
|
|
22
|
+
* middleware asks before serializing a wire body, and one an instanceof
|
|
23
|
+
* ladder answers only by exhaustion. Every subclass carries its
|
|
21
24
|
* discriminator as an instance `code`, so serialization is a lookup rather
|
|
22
25
|
* than a chain of class tests.
|
|
23
26
|
*
|
|
@@ -108,10 +111,10 @@ export class StackVersionConflictError extends StackError {
|
|
|
108
111
|
* request whose *type* is undefined never addressed a record, so answering
|
|
109
112
|
* 404 would say a record was missing when none was asked for.
|
|
110
113
|
*/
|
|
111
|
-
export class
|
|
114
|
+
export class StackBadRequestError extends StackError {
|
|
112
115
|
capability;
|
|
113
116
|
static code = 'bad_request';
|
|
114
|
-
code =
|
|
117
|
+
code = StackBadRequestError.code;
|
|
115
118
|
constructor(message,
|
|
116
119
|
/**
|
|
117
120
|
* Which declared capability the query asked for and the adapter lacks,
|
|
@@ -124,7 +127,7 @@ export class StackQueryError extends StackError {
|
|
|
124
127
|
capability) {
|
|
125
128
|
super(message);
|
|
126
129
|
this.capability = capability;
|
|
127
|
-
this.name = '
|
|
130
|
+
this.name = 'StackBadRequestError';
|
|
128
131
|
}
|
|
129
132
|
}
|
|
130
133
|
/**
|
|
@@ -151,7 +154,7 @@ export class StackPayloadTooLargeError extends StackError {
|
|
|
151
154
|
* there is nothing to interrupt from inside the call. It exists so a
|
|
152
155
|
* server that bounds query time has a class to serialize, and so the app
|
|
153
156
|
* catching it can tell "too expensive, narrow it and retry" from
|
|
154
|
-
*
|
|
157
|
+
* StackBadRequestError's "malformed, don't bother retrying" — the distinction
|
|
155
158
|
* that would be lost if a timeout reused `bad_request`.
|
|
156
159
|
*/
|
|
157
160
|
export class StackTimeoutError extends StackError {
|
|
@@ -176,7 +179,7 @@ export class StackSchemaDriftError extends StackError {
|
|
|
176
179
|
constructor(typeId, violations) {
|
|
177
180
|
super(`Schema drift detected for type "${typeId}": the stored schema and the new definition ` +
|
|
178
181
|
`differ beyond additive evolution (new optional fields only). Bump the version instead ` +
|
|
179
|
-
`of redefining "${typeId}" in place — e.g. defineType(\`${baseIdOf(typeId)}@${(parseTypeId(typeId)?.version ?? 0) + 1}\`, ...) plus registerMigration().\n` +
|
|
182
|
+
`of redefining "${typeId}" in place — e.g. defineType({ id: \`${baseIdOf(typeId)}@${(parseTypeId(typeId)?.version ?? 0) + 1}\`, ... }) plus registerMigration().\n` +
|
|
180
183
|
violations.map((v) => ` ${v.path || '(root)'}: ${v.message}`).join('\n'));
|
|
181
184
|
this.typeId = typeId;
|
|
182
185
|
this.violations = violations;
|
|
@@ -190,16 +193,28 @@ export class StackSchemaDriftError extends StackError {
|
|
|
190
193
|
* error with no wire representation — no server ever responds with it.
|
|
191
194
|
* See docs/spec/adapters.md § Lifecycle.
|
|
192
195
|
*/
|
|
193
|
-
export class
|
|
196
|
+
export class UseAfterCloseError extends Error {
|
|
194
197
|
constructor(message = 'This Stack has been closed.') {
|
|
195
198
|
super(message);
|
|
196
|
-
this.name = '
|
|
199
|
+
this.name = 'UseAfterCloseError';
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Thrown when Stack.open() is handed an adapter that cannot back a stack.
|
|
204
|
+
* Outside the StackError taxonomy for the same reason UseAfterCloseError is:
|
|
205
|
+
* it reports a local setup mistake, not a state a request can be in.
|
|
206
|
+
* See docs/spec.md § Stack initialization.
|
|
207
|
+
*/
|
|
208
|
+
export class InvalidAdapterError extends Error {
|
|
209
|
+
constructor(message) {
|
|
210
|
+
super(message);
|
|
211
|
+
this.name = 'InvalidAdapterError';
|
|
197
212
|
}
|
|
198
213
|
}
|
|
199
214
|
/**
|
|
200
215
|
* Thrown when a scoped view is asked to observe a stack whose adapter
|
|
201
216
|
* relays a remote feed. Outside the StackError taxonomy for the same
|
|
202
|
-
* reason
|
|
217
|
+
* reason UseAfterCloseError is: it reports a topology the caller assembled,
|
|
203
218
|
* not a state a request can be in.
|
|
204
219
|
*
|
|
205
220
|
* A relayed frame is scoped by the authority that opened the feed, and a
|
|
@@ -210,10 +225,10 @@ export class StackClosedError extends Error {
|
|
|
210
225
|
* failure that looks fine in testing. So it refuses.
|
|
211
226
|
* See docs/spec/events.md § Permission scoping.
|
|
212
227
|
*/
|
|
213
|
-
export class
|
|
228
|
+
export class RelayScopeError extends Error {
|
|
214
229
|
constructor(message) {
|
|
215
230
|
super(message);
|
|
216
|
-
this.name = '
|
|
231
|
+
this.name = 'RelayScopeError';
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
234
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
|
package/dist/grants.d.ts
CHANGED
|
@@ -3,16 +3,15 @@
|
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* What a `_grant` Record says, and who it says it about. The coverage
|
|
5
5
|
* question — does this grant reach this grantee — is answered here rather
|
|
6
|
-
* than at each call site so that the access checks and
|
|
6
|
+
* than at each call site so that the access checks and listTypeGrants() cannot
|
|
7
7
|
* drift apart about it.
|
|
8
8
|
*
|
|
9
9
|
* See docs/spec/access-control.md § Type-level grants.
|
|
10
10
|
*/
|
|
11
|
-
import type { GroupRole } from './
|
|
12
|
-
import type { EntityId, GrantAction, GrantContent, GrantGrantee, QueryResult, RecordId, StackQuery, StackRecord, TypeId } from './types.js';
|
|
11
|
+
import type { EntityId, GrantAction, GrantContent, GrantGrantee, GroupRole, QueryResult, RecordId, StackQuery, StackRecord, TypeId } from './types.js';
|
|
13
12
|
import type { ValidationError } from './validate.js';
|
|
14
13
|
/**
|
|
15
|
-
* Valid GrantAction values, for runtime validation in Stack.
|
|
14
|
+
* Valid GrantAction values, for runtime validation in Stack.grantType(). Built
|
|
16
15
|
* from GRANT_ACTIONS, which GrantAction itself derives from, so the set and
|
|
17
16
|
* the type cannot drift.
|
|
18
17
|
*/
|
|
@@ -51,30 +50,20 @@ export declare function grantReach(content: unknown): {
|
|
|
51
50
|
actions: GrantAction[];
|
|
52
51
|
} | null;
|
|
53
52
|
/**
|
|
54
|
-
*
|
|
55
|
-
* stored grant carries, so a target is the grantee it writes.
|
|
56
|
-
* `{ kind: 'authenticated' }` is the default grant, and the default-only
|
|
57
|
-
* listing.
|
|
58
|
-
*/
|
|
59
|
-
export type GrantTarget = GrantGrantee;
|
|
60
|
-
/**
|
|
61
|
-
* What listGrants() accepts: a GrantTarget, widened so a group listing can
|
|
53
|
+
* What listTypeGrants() accepts: a GrantGrantee, widened so a group listing can
|
|
62
54
|
* ask for every role at once. `role: 'any'` is not a role an entity can
|
|
63
55
|
* hold and never reaches storage — a query can say it, a grantee cannot.
|
|
64
56
|
*/
|
|
65
|
-
export type GrantQuery = {
|
|
66
|
-
kind: '
|
|
67
|
-
|
|
68
|
-
} | {
|
|
57
|
+
export type GrantQuery = Exclude<GrantGrantee, {
|
|
58
|
+
kind: 'group';
|
|
59
|
+
}> | {
|
|
69
60
|
kind: 'group';
|
|
70
61
|
groupId: RecordId;
|
|
71
|
-
role:
|
|
72
|
-
} | {
|
|
73
|
-
kind: 'authenticated';
|
|
62
|
+
role: GroupRole | 'any';
|
|
74
63
|
};
|
|
75
64
|
/**
|
|
76
65
|
* Direct (non-roster) match between a stored _grant's content and a target:
|
|
77
|
-
* the whole grantee, `role` included. A target is the identity
|
|
66
|
+
* the whole grantee, `role` included. A target is the identity grantType()
|
|
78
67
|
* wrote, so a revoke aimed at a group's admins leaves the members' grant
|
|
79
68
|
* standing. A query's `role: 'any'` is the one widening, and it is spelled.
|
|
80
69
|
*/
|
|
@@ -85,7 +74,7 @@ export declare function matchesGrantTarget(content: GrantContent, target: GrantQ
|
|
|
85
74
|
* grant that can only ever deny while looking like a share that worked.
|
|
86
75
|
* Read as data, not as the type: a target reaching Stack from a request
|
|
87
76
|
* body or an import has whatever shape it arrived with. `allowAny` admits
|
|
88
|
-
* the listing-only `role: 'any'`, which
|
|
77
|
+
* the listing-only `role: 'any'`, which grantType() and revokeType() refuse.
|
|
89
78
|
*/
|
|
90
79
|
export declare function validateGrantTarget(target: GrantQuery, allowAny?: boolean): void;
|
|
91
80
|
/**
|
|
@@ -109,7 +98,7 @@ export declare function grantCoversGrantee(c: GrantContent, grantee: EntityId, o
|
|
|
109
98
|
resolveRecord: (id: RecordId) => Promise<StackRecord | null>;
|
|
110
99
|
}): Promise<boolean>;
|
|
111
100
|
/**
|
|
112
|
-
* System type families
|
|
101
|
+
* System type families grantType() refuses to target: a grant on any of them
|
|
113
102
|
* would let the grantee mint their own grants, touch stack config, or
|
|
114
103
|
* register an app card claiming a DID that isn't theirs — the last of which
|
|
115
104
|
* is what verified app attribution rests on.
|
|
@@ -122,8 +111,10 @@ export declare const UNGRANTABLE_SYSTEM_TYPES: ReadonlySet<string>;
|
|
|
122
111
|
*
|
|
123
112
|
* `includeUnlisted`, because withholding a Record from enumeration decides
|
|
124
113
|
* nothing about what it confers. Deleted grants are excluded on the
|
|
125
|
-
* opposite grounds — a soft delete is how
|
|
114
|
+
* opposite grounds — a soft delete is how revokeType() withdraws one.
|
|
126
115
|
* See docs/spec/unlisted.md.
|
|
127
116
|
*/
|
|
128
|
-
export declare function loadGrantRecords(query: (q: StackQuery) => Promise<QueryResult>): Promise<StackRecord
|
|
117
|
+
export declare function loadGrantRecords(query: (q: StackQuery) => Promise<QueryResult>): Promise<(StackRecord & {
|
|
118
|
+
content: GrantContent;
|
|
119
|
+
})[]>;
|
|
129
120
|
//# sourceMappingURL=grants.d.ts.map
|
package/dist/grants.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../src/grants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"grants.d.ts","sourceRoot":"","sources":["../src/grants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,OAAO,KAAK,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,MAAM,EACP,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,WAAW,CAA0B,CAAC;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,WAAW,EAAE,CAK3E,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,EAAE,WAAW,GAAG,OAAO,CAI1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,GAAG,IAAI,CAShG;AAED;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB,OAAO,CAAC,YAAY,EAAE;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,GACxC;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAAA;CAAE,CAAC;AAElE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CASrF;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,UAAQ,GAAG,IAAI,CA6B9E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,eAAe,EAAE,CA0CnF;AAED;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,CAAC,EAAE,YAAY,EACf,OAAO,EAAE,QAAQ,EACjB,IAAI,EAAE;IACJ,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAAC,CAAC;IAC1C,aAAa,EAAE,CAAC,EAAE,EAAE,QAAQ,KAAK,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CAC9D,GACA,OAAO,CAAC,OAAO,CAAC,CAuBlB;AAwBD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,WAAW,CAAC,MAAM,CAIvD,CAAC;AAEH;;;;;;;;;GASG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,GAC7C,OAAO,CAAC,CAAC,WAAW,GAAG;IAAE,OAAO,EAAE,YAAY,CAAA;CAAE,CAAC,EAAE,CAAC,CAKtD"}
|
package/dist/grants.js
CHANGED
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
* -------------------------------------------------------
|
|
4
4
|
* What a `_grant` Record says, and who it says it about. The coverage
|
|
5
5
|
* question — does this grant reach this grantee — is answered here rather
|
|
6
|
-
* than at each call site so that the access checks and
|
|
6
|
+
* than at each call site so that the access checks and listTypeGrants() cannot
|
|
7
7
|
* drift apart about it.
|
|
8
8
|
*
|
|
9
9
|
* See docs/spec/access-control.md § Type-level grants.
|
|
10
10
|
*/
|
|
11
11
|
import { baseIdOf } from './schema.js';
|
|
12
|
-
import {
|
|
12
|
+
import { StackBadRequestError } from './errors.js';
|
|
13
13
|
import { SYSTEM_TYPES, GRANT_ACTIONS } from './types.js';
|
|
14
14
|
import { carriesRoster, groupRoleFromAssociations } from './access.js';
|
|
15
15
|
import { queryAllPages } from './stack-reads.js';
|
|
16
16
|
/**
|
|
17
|
-
* Valid GrantAction values, for runtime validation in Stack.
|
|
17
|
+
* Valid GrantAction values, for runtime validation in Stack.grantType(). Built
|
|
18
18
|
* from GRANT_ACTIONS, which GrantAction itself derives from, so the set and
|
|
19
19
|
* the type cannot drift.
|
|
20
20
|
*/
|
|
@@ -73,7 +73,7 @@ export function grantReach(content) {
|
|
|
73
73
|
}
|
|
74
74
|
/**
|
|
75
75
|
* Direct (non-roster) match between a stored _grant's content and a target:
|
|
76
|
-
* the whole grantee, `role` included. A target is the identity
|
|
76
|
+
* the whole grantee, `role` included. A target is the identity grantType()
|
|
77
77
|
* wrote, so a revoke aimed at a group's admins leaves the members' grant
|
|
78
78
|
* standing. A query's `role: 'any'` is the one widening, and it is spelled.
|
|
79
79
|
*/
|
|
@@ -95,7 +95,7 @@ export function matchesGrantTarget(content, target) {
|
|
|
95
95
|
* grant that can only ever deny while looking like a share that worked.
|
|
96
96
|
* Read as data, not as the type: a target reaching Stack from a request
|
|
97
97
|
* body or an import has whatever shape it arrived with. `allowAny` admits
|
|
98
|
-
* the listing-only `role: 'any'`, which
|
|
98
|
+
* the listing-only `role: 'any'`, which grantType() and revokeType() refuse.
|
|
99
99
|
*/
|
|
100
100
|
export function validateGrantTarget(target, allowAny = false) {
|
|
101
101
|
const t = target;
|
|
@@ -104,15 +104,15 @@ export function validateGrantTarget(target, allowAny = false) {
|
|
|
104
104
|
return;
|
|
105
105
|
case 'entity':
|
|
106
106
|
if (typeof t.entityId !== 'string' || t.entityId.length === 0) {
|
|
107
|
-
throw new
|
|
107
|
+
throw new StackBadRequestError('An entity grant target requires a non-empty entityId.');
|
|
108
108
|
}
|
|
109
109
|
return;
|
|
110
110
|
case 'group':
|
|
111
111
|
if (typeof t.groupId !== 'string' || t.groupId.length === 0) {
|
|
112
|
-
throw new
|
|
112
|
+
throw new StackBadRequestError('A group grant target requires a non-empty groupId.');
|
|
113
113
|
}
|
|
114
114
|
if (t.role !== 'member' && t.role !== 'admin' && !(allowAny && t.role === 'any')) {
|
|
115
|
-
throw new
|
|
115
|
+
throw new StackBadRequestError(allowAny
|
|
116
116
|
? "A group grant target requires role 'member', 'admin' or 'any'."
|
|
117
117
|
: "A group grant target requires role 'member' or 'admin'.");
|
|
118
118
|
}
|
|
@@ -120,7 +120,7 @@ export function validateGrantTarget(target, allowAny = false) {
|
|
|
120
120
|
// association's recordId. One that resolves to nothing simply denies.
|
|
121
121
|
return;
|
|
122
122
|
default:
|
|
123
|
-
throw new
|
|
123
|
+
throw new StackBadRequestError("A grant target must name its tier: { kind: 'entity' }, { kind: 'group' } or { kind: 'authenticated' }.");
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
@@ -221,7 +221,7 @@ async function resolveGroupRoleMemoized(groupId, entityId, groupRoles, resolveRe
|
|
|
221
221
|
return role;
|
|
222
222
|
}
|
|
223
223
|
/**
|
|
224
|
-
* System type families
|
|
224
|
+
* System type families grantType() refuses to target: a grant on any of them
|
|
225
225
|
* would let the grantee mint their own grants, touch stack config, or
|
|
226
226
|
* register an app card claiming a DID that isn't theirs — the last of which
|
|
227
227
|
* is what verified app attribution rests on.
|
|
@@ -238,12 +238,13 @@ export const UNGRANTABLE_SYSTEM_TYPES = new Set([
|
|
|
238
238
|
*
|
|
239
239
|
* `includeUnlisted`, because withholding a Record from enumeration decides
|
|
240
240
|
* nothing about what it confers. Deleted grants are excluded on the
|
|
241
|
-
* opposite grounds — a soft delete is how
|
|
241
|
+
* opposite grounds — a soft delete is how revokeType() withdraws one.
|
|
242
242
|
* See docs/spec/unlisted.md.
|
|
243
243
|
*/
|
|
244
|
-
export function loadGrantRecords(query) {
|
|
245
|
-
|
|
244
|
+
export async function loadGrantRecords(query) {
|
|
245
|
+
const records = await queryAllPages(query, {
|
|
246
246
|
filter: { typeId: `${SYSTEM_TYPES.GRANT}@1`, includeUnlisted: true },
|
|
247
247
|
});
|
|
248
|
+
return records;
|
|
248
249
|
}
|
|
249
250
|
//# sourceMappingURL=grants.js.map
|
package/dist/grants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grants.js","sourceRoot":"","sources":["../src/grants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"grants.js","sourceRoot":"","sources":["../src/grants.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,8 +20,8 @@ const BINDING_FIELDS = new Map([
|
|
|
20
20
|
]);
|
|
21
21
|
/**
|
|
22
22
|
* The subset that is additionally unique per stack: the fields something
|
|
23
|
-
* resolves *by*.
|
|
24
|
-
* its `
|
|
23
|
+
* resolves *by*. An Actor's `principalId` finds its card by `_app.did` and
|
|
24
|
+
* its `subjectId` by `_entity.did`, so a second card claiming either leaves
|
|
25
25
|
* that lookup without a single answer — and ambiguity is all an
|
|
26
26
|
* impersonating card needs.
|
|
27
27
|
*
|
package/dist/index.d.ts
CHANGED
|
@@ -5,21 +5,25 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Exports the Stack class, the app/plugin-facing data types, and the
|
|
7
7
|
* general-purpose utilities every caller needs. Audience-specific surfaces
|
|
8
|
-
* live behind their own subpaths,
|
|
8
|
+
* live behind their own subpaths, and every export has exactly one home —
|
|
9
|
+
* nothing here is repeated in a subpath, or the reverse:
|
|
9
10
|
* ./did — key generation, custody and signing (did:key)
|
|
10
|
-
* ./wire — the auth handshake
|
|
11
|
-
* by both sides of a
|
|
11
|
+
* ./wire — the request encoding, auth handshake, token store and
|
|
12
|
+
* attachment-download policy shared by both sides of a
|
|
13
|
+
* client/server connection
|
|
12
14
|
* ./adapter — the interfaces a storage adapter implements
|
|
13
15
|
* ./testing — the in-memory MemoryAdapter for tests
|
|
14
|
-
* Storage adapters are published as separate packages
|
|
15
|
-
*
|
|
16
|
+
* Storage adapters are published as separate packages — adapter-local,
|
|
17
|
+
* adapter-api, record-adapter-sqlite, record-adapter-do-sqlite,
|
|
18
|
+
* blob-adapter-disk and blob-adapter-s3, all under @haverstack/.
|
|
16
19
|
*/
|
|
17
20
|
export { Stack } from './stack.js';
|
|
18
21
|
export { ScopedStack } from './scoped-stack.js';
|
|
19
|
-
export type { StackClient, CreateRecordOptions, BackdatableCreateRecordOptions, StackOptions, GetRecordOptions, DeleteRecordOptions, DeleteResult,
|
|
20
|
-
export { StackError, StackValidationError, StackMigrationError, StackPermissionError, StackNotFoundError, StackConflictError, StackVersionConflictError,
|
|
22
|
+
export type { StackClient, CreateRecordOptions, BackdatableCreateRecordOptions, StackOptions, DefineTypeOptions, GetRecordOptions, DeleteRecordOptions, DeleteResult, DeleteAndReturnResult, CollectAttachmentGarbageOptions, CollectAttachmentGarbageResult, } from './stack.js';
|
|
23
|
+
export { StackError, StackValidationError, StackMigrationError, StackPermissionError, StackNotFoundError, StackConflictError, StackVersionConflictError, StackBadRequestError, StackSchemaDriftError, StackPayloadTooLargeError, StackTimeoutError, } from './errors.js';
|
|
24
|
+
export { UseAfterCloseError, InvalidAdapterError, RelayScopeError } from './errors.js';
|
|
21
25
|
export type { StackErrorCode } from './errors.js';
|
|
22
|
-
export type { RecordId, TypeId, FileId, EntityId, AttachmentContent, StackRecord,
|
|
26
|
+
export type { RecordId, TypeId, BaseId, FileId, EntityId, AppId, AttachmentContent, StackRecord, RecordChangeSet, RecordVersion, RecordJournalEntry, JournalQuery, Actor, ActorOptions, ChangeKind, ChangeOp, ChangeActor, RecordChange, ChangeFilter, SubscribeOptions, Unsubscribe, StackType, TypeSchema, FieldDef, ScalarFieldDef, ArrayFieldDef, ObjectFieldDef, ScalarFieldKind, Association, TagAssociation, AttachmentAssociation, RelationshipAssociation, PermissionAssociation, Grantee, GroupRole, AnyoneAssociation, AuthorityAssociation, DataAssociation, AssociationChange, RelationshipTarget, RecordTarget, EntityTarget, ExternalTarget, StackQuery, RecordFilter, RelatedToFilter, AttachmentFilter, RelationshipTargetPattern, QuerySort, NativeSortField, QueryResult, DateRange, Migration, MigrationFn, StackCapabilities, ContentFilterReach, MissingCapability, IfVersionOptions, EntityContent, AppContent, GroupContent, GrantAction, GrantContent, GrantGrantee, TypeGrant, PutAttachmentOptions, ConfigContent, } from './types.js';
|
|
23
27
|
export type { GrantQuery } from './grants.js';
|
|
24
28
|
export { SYSTEM_TYPES, NATIVE_SORT_FIELDS } from './types.js';
|
|
25
29
|
export { generateId } from './id.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,WAAW,EACX,mBAAmB,EACnB,8BAA8B,EAC9B,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,qBAAqB,EACrB,+BAA+B,EAC/B,8BAA8B,GAC/B,MAAM,YAAY,CAAC;AAGpB,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;AAGrB,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvF,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,YAAY,EACV,QAAQ,EACR,MAAM,EACN,MAAM,EACN,MAAM,EACN,QAAQ,EACR,KAAK,EACL,iBAAiB,EACjB,WAAW,EACX,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,KAAK,EACL,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,cAAc,EACd,aAAa,EACb,cAAc,EACd,eAAe,EACf,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,OAAO,EACP,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,UAAU,EACV,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,SAAS,EACT,eAAe,EACf,WAAW,EACX,SAAS,EACT,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,oBAAoB,EACpB,aAAa,GACd,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAM9D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,20 +5,26 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Exports the Stack class, the app/plugin-facing data types, and the
|
|
7
7
|
* general-purpose utilities every caller needs. Audience-specific surfaces
|
|
8
|
-
* live behind their own subpaths,
|
|
8
|
+
* live behind their own subpaths, and every export has exactly one home —
|
|
9
|
+
* nothing here is repeated in a subpath, or the reverse:
|
|
9
10
|
* ./did — key generation, custody and signing (did:key)
|
|
10
|
-
* ./wire — the auth handshake
|
|
11
|
-
* by both sides of a
|
|
11
|
+
* ./wire — the request encoding, auth handshake, token store and
|
|
12
|
+
* attachment-download policy shared by both sides of a
|
|
13
|
+
* client/server connection
|
|
12
14
|
* ./adapter — the interfaces a storage adapter implements
|
|
13
15
|
* ./testing — the in-memory MemoryAdapter for tests
|
|
14
|
-
* Storage adapters are published as separate packages
|
|
15
|
-
*
|
|
16
|
+
* Storage adapters are published as separate packages — adapter-local,
|
|
17
|
+
* adapter-api, record-adapter-sqlite, record-adapter-do-sqlite,
|
|
18
|
+
* blob-adapter-disk and blob-adapter-s3, all under @haverstack/.
|
|
16
19
|
*/
|
|
17
20
|
// Core class and client interface
|
|
18
21
|
export { Stack } from './stack.js';
|
|
19
22
|
export { ScopedStack } from './scoped-stack.js';
|
|
20
23
|
// The error taxonomy
|
|
21
|
-
export { StackError, StackValidationError, StackMigrationError, StackPermissionError, StackNotFoundError, StackConflictError, StackVersionConflictError,
|
|
24
|
+
export { StackError, StackValidationError, StackMigrationError, StackPermissionError, StackNotFoundError, StackConflictError, StackVersionConflictError, StackBadRequestError, StackSchemaDriftError, StackPayloadTooLargeError, StackTimeoutError, } from './errors.js';
|
|
25
|
+
// Local errors outside the taxonomy — no wire representation, and no
|
|
26
|
+
// `Stack` prefix. See docs/spec/wire-format.md § The taxonomy root.
|
|
27
|
+
export { UseAfterCloseError, InvalidAdapterError, RelayScopeError } from './errors.js';
|
|
22
28
|
export { SYSTEM_TYPES, NATIVE_SORT_FIELDS } from './types.js';
|
|
23
29
|
// Utilities
|
|
24
30
|
// No in-repo caller: client-minted IDs are the default per spec, and an app
|
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"}
|