@opendatalabs/personal-server-ts-core 1.5.0 → 1.6.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/dist/api/index.d.ts +33 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +124 -67
- package/dist/api/index.js.map +1 -1
- package/dist/contracts/binary.d.ts +12 -0
- package/dist/contracts/binary.d.ts.map +1 -1
- package/dist/contracts/binary.js +31 -0
- package/dist/contracts/binary.js.map +1 -1
- package/dist/contracts/data.d.ts +21 -0
- package/dist/contracts/data.d.ts.map +1 -1
- package/dist/contracts/data.js +45 -4
- package/dist/contracts/data.js.map +1 -1
- package/dist/contracts/index.d.ts +1 -1
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +1 -1
- package/dist/contracts/index.js.map +1 -1
- package/dist/logging/access-log.d.ts +1 -1
- package/dist/logging/access-log.d.ts.map +1 -1
- package/dist/policy/data-read.d.ts +8 -0
- package/dist/policy/data-read.d.ts.map +1 -1
- package/dist/policy/data-read.js +9 -2
- package/dist/policy/data-read.js.map +1 -1
- package/dist/policy/data-write.d.ts +69 -0
- package/dist/policy/data-write.d.ts.map +1 -0
- package/dist/policy/data-write.js +131 -0
- package/dist/policy/data-write.js.map +1 -0
- package/dist/policy/index.d.ts +2 -1
- package/dist/policy/index.d.ts.map +1 -1
- package/dist/policy/index.js +2 -1
- package/dist/policy/index.js.map +1 -1
- package/dist/write/attribution.d.ts +165 -0
- package/dist/write/attribution.d.ts.map +1 -0
- package/dist/write/attribution.js +277 -0
- package/dist/write/attribution.js.map +1 -0
- package/dist/write/index.d.ts +3 -0
- package/dist/write/index.d.ts.map +1 -0
- package/dist/write/index.js +3 -0
- package/dist/write/index.js.map +1 -0
- package/dist/write/session.d.ts +96 -0
- package/dist/write/session.d.ts.map +1 -0
- package/dist/write/session.js +136 -0
- package/dist/write/session.js.map +1 -0
- package/package.json +5 -1
package/dist/contracts/data.js
CHANGED
|
@@ -1,6 +1,31 @@
|
|
|
1
1
|
import { createDataFileEnvelope, ScopeSchema, } from "@opendatalabs/vana-sdk/browser";
|
|
2
2
|
import { buildBinaryEnvelopeData, sha256Hex } from "./binary.js";
|
|
3
3
|
import { buildDataBlocksAsync } from "../storage/blocks/build.js";
|
|
4
|
+
import { hasReservedWriterKey, stampWriterAttribution, } from "../write/attribution.js";
|
|
5
|
+
/**
|
|
6
|
+
* Thrown by the ingest contracts when the envelope was already written to
|
|
7
|
+
* storage but a later step (indexing) failed. The record is on disk and a
|
|
8
|
+
* re-index can surface it, so callers must treat the write as persisted:
|
|
9
|
+
* never retry it under the same proof, never release a replay reservation.
|
|
10
|
+
*/
|
|
11
|
+
export class IngestPersistedError extends Error {
|
|
12
|
+
relativePath;
|
|
13
|
+
cause;
|
|
14
|
+
constructor(relativePath, cause) {
|
|
15
|
+
super(`Envelope written to ${relativePath} but indexing failed: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
16
|
+
this.relativePath = relativePath;
|
|
17
|
+
this.cause = cause;
|
|
18
|
+
this.name = "IngestPersistedError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
async function indexWrittenEnvelope(storage, entry) {
|
|
22
|
+
try {
|
|
23
|
+
await storage.insertEntry(entry);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
throw new IngestPersistedError(entry.path, err);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
4
29
|
function invalidScope(message) {
|
|
5
30
|
return {
|
|
6
31
|
ok: false,
|
|
@@ -129,7 +154,23 @@ export async function ingestDataContract(input) {
|
|
|
129
154
|
},
|
|
130
155
|
};
|
|
131
156
|
}
|
|
132
|
-
|
|
157
|
+
// The attribution key is server-stamped, never caller-supplied: a payload
|
|
158
|
+
// that carries it could forge (or shadow) an attribution. That holds for
|
|
159
|
+
// every JSON ingest, owner writes included, so consumers can trust that a
|
|
160
|
+
// stored $writtenBy was always produced by the server.
|
|
161
|
+
if (hasReservedWriterKey(input.body)) {
|
|
162
|
+
return {
|
|
163
|
+
ok: false,
|
|
164
|
+
status: 400,
|
|
165
|
+
body: {
|
|
166
|
+
error: "INVALID_BODY",
|
|
167
|
+
message: "Request body must not contain the reserved $writtenBy key",
|
|
168
|
+
},
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
const envelope = createDataFileEnvelope(scopeResult.scope, input.collectedAt, input.attribution
|
|
172
|
+
? stampWriterAttribution(input.body, input.attribution)
|
|
173
|
+
: input.body);
|
|
133
174
|
const writeResult = await input.storage.writeEnvelope(envelope);
|
|
134
175
|
try {
|
|
135
176
|
await writeBlockSidecars(input.storage, envelope);
|
|
@@ -137,7 +178,7 @@ export async function ingestDataContract(input) {
|
|
|
137
178
|
catch {
|
|
138
179
|
// Best-effort bounded sidecars: raw envelope storage remains the source of truth.
|
|
139
180
|
}
|
|
140
|
-
await input.storage
|
|
181
|
+
await indexWrittenEnvelope(input.storage, {
|
|
141
182
|
fileId: null,
|
|
142
183
|
schemaId: null,
|
|
143
184
|
path: writeResult.relativePath,
|
|
@@ -186,7 +227,7 @@ export async function ingestBinaryDataContract(input) {
|
|
|
186
227
|
contentHash,
|
|
187
228
|
metadata: input.metadata,
|
|
188
229
|
});
|
|
189
|
-
const envelope = createDataFileEnvelope(scopeResult.scope, input.collectedAt, data);
|
|
230
|
+
const envelope = createDataFileEnvelope(scopeResult.scope, input.collectedAt, input.attribution ? stampWriterAttribution(data, input.attribution) : data);
|
|
190
231
|
const writeResult = await input.storage.writeEnvelope(envelope);
|
|
191
232
|
try {
|
|
192
233
|
await writeBlockSidecars(input.storage, envelope);
|
|
@@ -194,7 +235,7 @@ export async function ingestBinaryDataContract(input) {
|
|
|
194
235
|
catch {
|
|
195
236
|
// Best-effort bounded sidecars: raw envelope storage remains the source of truth.
|
|
196
237
|
}
|
|
197
|
-
await input.storage
|
|
238
|
+
await indexWrittenEnvelope(input.storage, {
|
|
198
239
|
fileId: null,
|
|
199
240
|
schemaId: null,
|
|
200
241
|
path: writeResult.relativePath,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/contracts/data.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EACtB,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/contracts/data.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { deleteDataScopeContract, ingestDataContract, ingestBinaryDataContract, listDataScopesContract, listDataVersionsContract, parseDataScopeContract, readDataContract, } from "./data.js";
|
|
1
|
+
export { deleteDataScopeContract, IngestPersistedError, ingestDataContract, ingestBinaryDataContract, listDataScopesContract, listDataVersionsContract, parseDataScopeContract, readDataContract, } from "./data.js";
|
|
2
2
|
export { BINARY_MARKER, BINARY_ENCODING, buildBinaryEnvelopeData, decodeBinaryEnvelope, isBinaryEnvelope, sha256Hex, bytesToBase64, base64ToBytes, parseMetadataHeader, stringifyMetadataHeader, } from "./binary.js";
|
|
3
3
|
export type { BinaryEnvelopeData, DecodedBinary } from "./binary.js";
|
|
4
4
|
export { configReadErrorContract, configWriteErrorContract, validateServerConfigContract, } from "./config.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,4BAA4B,EAC5B,6BAA6B,EAC7B,uBAAuB,EACvB,wBAAwB,EACxB,6BAA6B,EAC7B,2BAA2B,EAC3B,4BAA4B,EAC5B,6BAA6B,EAC7B,8BAA8B,EAC9B,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,YAAY,EACV,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,kBAAkB,EAClB,wBAAwB,EACxB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,YAAY,CAAC"}
|
package/dist/contracts/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { deleteDataScopeContract, ingestDataContract, ingestBinaryDataContract, listDataScopesContract, listDataVersionsContract, parseDataScopeContract, readDataContract, } from "./data.js";
|
|
1
|
+
export { deleteDataScopeContract, IngestPersistedError, ingestDataContract, ingestBinaryDataContract, listDataScopesContract, listDataVersionsContract, parseDataScopeContract, readDataContract, } from "./data.js";
|
|
2
2
|
export { BINARY_MARKER, BINARY_ENCODING, buildBinaryEnvelopeData, decodeBinaryEnvelope, isBinaryEnvelope, sha256Hex, bytesToBase64, base64ToBytes, parseMetadataHeader, stringifyMetadataHeader, } from "./binary.js";
|
|
3
3
|
export { configReadErrorContract, configWriteErrorContract, validateServerConfigContract, } from "./config.js";
|
|
4
4
|
export { approveDeviceSessionContract, createMemoryDeviceSessionStore, DEVICE_POLL_INTERVAL_MS, DEVICE_SESSION_TTL_MS, initiateDeviceSessionContract, pollDeviceSessionContract, provisionDeviceTokenContract, revokeDeviceTokenContract, } from "./auth-device.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,aAAa,EACb,eAAe,EACf,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,SAAS,EACT,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EACvB,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,4BAA4B,EAC5B,8BAA8B,EAC9B,uBAAuB,EACvB,qBAAqB,EACrB,6BAA6B,EAC7B,yBAAyB,EACzB,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,aAAa,EACb,UAAU,EACV,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,EAC9B,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,WAAW,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"access-log.d.ts","sourceRoot":"","sources":["../../src/logging/access-log.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C"}
|
|
@@ -18,5 +18,13 @@ export interface DataReadPolicyPorts {
|
|
|
18
18
|
grantVerifier: GrantVerifierPort;
|
|
19
19
|
runtimeAvailability?: RuntimeAvailabilityPort;
|
|
20
20
|
}
|
|
21
|
+
/**
|
|
22
|
+
* Parse a grant's `expiresAt` into unix seconds. Accepts the legacy
|
|
23
|
+
* uint256-seconds string, a numeric value, or the current gateway ISO
|
|
24
|
+
* timestamp. Returns 0 for "perpetual" encodings (null/undefined/"0") and
|
|
25
|
+
* null for unparseable input. Shared by the read and write policies so both
|
|
26
|
+
* stay aligned with the gateway response shape.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseGrantExpiresAtSeconds(value: unknown): number | null;
|
|
21
29
|
export declare function verifyDataReadPolicy(input: DataReadPolicyInput, ports: DataReadPolicyPorts): Promise<GatewayGrantResponse>;
|
|
22
30
|
//# sourceMappingURL=data-read.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-read.d.ts","sourceRoot":"","sources":["../../src/policy/data-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAa3E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IAGvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IAKjC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;
|
|
1
|
+
{"version":3,"file":"data-read.d.ts","sourceRoot":"","sources":["../../src/policy/data-read.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAa3E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IAGvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IAKjC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;CAC/C;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAUxE;AAED,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,mBAAmB,EAC1B,KAAK,EAAE,mBAAmB,GACzB,OAAO,CAAC,oBAAoB,CAAC,CAmG/B"}
|
package/dist/policy/data-read.js
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
1
|
import { scopeCoveredByGrant } from "@opendatalabs/vana-sdk/browser";
|
|
2
2
|
import { GrantExpiredError, GrantOwnerMismatchError, GrantRequiredError, GrantRevokedError, InvalidSignatureError, PsUnavailableError, ScopeMismatchError, ServerNotConfiguredError, UnregisteredBuilderError, } from "../errors/catalog.js";
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Parse a grant's `expiresAt` into unix seconds. Accepts the legacy
|
|
5
|
+
* uint256-seconds string, a numeric value, or the current gateway ISO
|
|
6
|
+
* timestamp. Returns 0 for "perpetual" encodings (null/undefined/"0") and
|
|
7
|
+
* null for unparseable input. Shared by the read and write policies so both
|
|
8
|
+
* stay aligned with the gateway response shape.
|
|
9
|
+
*/
|
|
10
|
+
export function parseGrantExpiresAtSeconds(value) {
|
|
4
11
|
if (value === null || value === undefined || value === "0")
|
|
5
12
|
return 0;
|
|
6
13
|
if (typeof value === "number")
|
|
@@ -50,7 +57,7 @@ export async function verifyDataReadPolicy(input, ports) {
|
|
|
50
57
|
// DPv2 may surface either the legacy uint256-seconds string or the
|
|
51
58
|
// current gateway ISO timestamp. Parse both so the policy stays aligned
|
|
52
59
|
// with the gateway response shape.
|
|
53
|
-
const expiresAtSec =
|
|
60
|
+
const expiresAtSec = parseGrantExpiresAtSeconds(grant.expiresAt);
|
|
54
61
|
if (expiresAtSec === null) {
|
|
55
62
|
throw new ScopeMismatchError({
|
|
56
63
|
requestedScope: input.requestedScope,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-read.js","sourceRoot":"","sources":["../../src/policy/data-read.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAiC9B,
|
|
1
|
+
{"version":3,"file":"data-read.js","sourceRoot":"","sources":["../../src/policy/data-read.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { GatewayGrantResponse } from "@opendatalabs/vana-sdk/browser";
|
|
2
|
+
import { type AuthSessionVerifierPort, type GrantVerifierPort, type RuntimeAvailabilityPort } from "../ports/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* Write-grant encoding: a grant scope entry prefixed with `write:` authorizes
|
|
5
|
+
* the grantee to WRITE into the scope it names (e.g. `write:notes.entries`,
|
|
6
|
+
* `write:notes.*`). The suffix uses the same pattern grammar as read scopes
|
|
7
|
+
* (`*` / `{prefix}.*` / exact), evaluated with the SDK's scopeMatchesPattern.
|
|
8
|
+
*
|
|
9
|
+
* Why a scope-entry prefix and not a new grant field: the gateway's grant
|
|
10
|
+
* shape (GatewayGrantResponse) has no permission axis — `scopes` is its only
|
|
11
|
+
* capability carrier — and the gateway validates scope entries as opaque
|
|
12
|
+
* non-empty strings, so `write:`-prefixed entries flow through createGrant /
|
|
13
|
+
* getGrant / the EIP-712 GrantRegistration signature unchanged. The Personal
|
|
14
|
+
* Server is the sole interpreter.
|
|
15
|
+
*
|
|
16
|
+
* Separation of powers falls out of the encoding:
|
|
17
|
+
* - read policy matches the REQUESTED scope against grant entries verbatim
|
|
18
|
+
* (scopeCoveredByGrant), and a requested scope never carries the prefix,
|
|
19
|
+
* so `write:x` entries can never satisfy a read;
|
|
20
|
+
* - write policy (below) only honors `write:`-prefixed entries, so plain
|
|
21
|
+
* read entries can never satisfy a write.
|
|
22
|
+
*/
|
|
23
|
+
export declare const WRITE_SCOPE_PREFIX = "write:";
|
|
24
|
+
export declare function isWriteScopeEntry(entry: string): boolean;
|
|
25
|
+
/** The scope patterns a grant authorizes for writing (prefix stripped). */
|
|
26
|
+
export declare function writeScopePatterns(grantScopes: readonly string[]): string[];
|
|
27
|
+
export declare function scopeCoveredByWriteGrant(requestedScope: string, grantScopes: readonly string[]): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Fee seam for builder writes. Write fee mechanics are undecided — the
|
|
30
|
+
* default (no port wired) is FREE. When a fee model lands (x402-style like
|
|
31
|
+
* reads, or something else), implement this port and wire it into
|
|
32
|
+
* DataWritePolicyPorts; the policy calls it after all authorization
|
|
33
|
+
* invariants pass, so a fee rejection never masks an auth failure.
|
|
34
|
+
*/
|
|
35
|
+
export interface WriteFeeVerifierPort {
|
|
36
|
+
assertWriteAllowed(input: {
|
|
37
|
+
builder: `0x${string}`;
|
|
38
|
+
grant: GatewayGrantResponse;
|
|
39
|
+
scope: string;
|
|
40
|
+
}): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export interface DataWritePolicyInput {
|
|
43
|
+
signer: `0x${string}`;
|
|
44
|
+
grantId?: string;
|
|
45
|
+
requestedScope: string;
|
|
46
|
+
/**
|
|
47
|
+
* This server's owner address. The grant's grantor MUST equal it — a grant
|
|
48
|
+
* issued by a different owner is rejected. Required (not optional) so that
|
|
49
|
+
* TypeScript flags any caller that fails to bind the write to the server
|
|
50
|
+
* owner; the check also fails closed at runtime for untyped/JS callers.
|
|
51
|
+
*/
|
|
52
|
+
serverOwner: `0x${string}`;
|
|
53
|
+
}
|
|
54
|
+
export interface DataWritePolicyPorts {
|
|
55
|
+
authSessionVerifier: AuthSessionVerifierPort;
|
|
56
|
+
grantVerifier: GrantVerifierPort;
|
|
57
|
+
runtimeAvailability?: RuntimeAvailabilityPort;
|
|
58
|
+
/** Absent = writes are free (see WriteFeeVerifierPort). */
|
|
59
|
+
writeFeeVerifier?: WriteFeeVerifierPort;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Authorize one builder write against a write-grant. Mirrors
|
|
63
|
+
* verifyDataReadPolicy invariant-for-invariant (builder registered, grant
|
|
64
|
+
* present / not revoked / not expired, scope coverage, grantee binding,
|
|
65
|
+
* owner binding) — but scope coverage only honors `write:`-prefixed grant
|
|
66
|
+
* entries, so a read-grant never confers write access.
|
|
67
|
+
*/
|
|
68
|
+
export declare function verifyDataWritePolicy(input: DataWritePolicyInput, ports: DataWritePolicyPorts): Promise<GatewayGrantResponse>;
|
|
69
|
+
//# sourceMappingURL=data-write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-write.d.ts","sourceRoot":"","sources":["../../src/policy/data-write.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAa3E,OAAO,EACL,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,uBAAuB,EAC7B,MAAM,mBAAmB,CAAC;AAG3B;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAK3E;AAED,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,SAAS,MAAM,EAAE,GAC7B,OAAO,CAIT;AAED;;;;;;GAMG;AACH,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,CAAC,KAAK,EAAE;QACxB,OAAO,EAAE,KAAK,MAAM,EAAE,CAAC;QACvB,KAAK,EAAE,oBAAoB,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,KAAK,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,uBAAuB,CAAC;IAC7C,aAAa,EAAE,iBAAiB,CAAC;IACjC,mBAAmB,CAAC,EAAE,uBAAuB,CAAC;IAC9C,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,oBAAoB,CAAC;CACzC;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,oBAAoB,EAC3B,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAkG/B"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { scopeMatchesPattern } from "@opendatalabs/vana-sdk/browser";
|
|
2
|
+
import { GrantExpiredError, GrantOwnerMismatchError, GrantRequiredError, GrantRevokedError, InvalidSignatureError, PsUnavailableError, ScopeMismatchError, ServerNotConfiguredError, UnregisteredBuilderError, } from "../errors/catalog.js";
|
|
3
|
+
import { parseGrantExpiresAtSeconds } from "./data-read.js";
|
|
4
|
+
/**
|
|
5
|
+
* Write-grant encoding: a grant scope entry prefixed with `write:` authorizes
|
|
6
|
+
* the grantee to WRITE into the scope it names (e.g. `write:notes.entries`,
|
|
7
|
+
* `write:notes.*`). The suffix uses the same pattern grammar as read scopes
|
|
8
|
+
* (`*` / `{prefix}.*` / exact), evaluated with the SDK's scopeMatchesPattern.
|
|
9
|
+
*
|
|
10
|
+
* Why a scope-entry prefix and not a new grant field: the gateway's grant
|
|
11
|
+
* shape (GatewayGrantResponse) has no permission axis — `scopes` is its only
|
|
12
|
+
* capability carrier — and the gateway validates scope entries as opaque
|
|
13
|
+
* non-empty strings, so `write:`-prefixed entries flow through createGrant /
|
|
14
|
+
* getGrant / the EIP-712 GrantRegistration signature unchanged. The Personal
|
|
15
|
+
* Server is the sole interpreter.
|
|
16
|
+
*
|
|
17
|
+
* Separation of powers falls out of the encoding:
|
|
18
|
+
* - read policy matches the REQUESTED scope against grant entries verbatim
|
|
19
|
+
* (scopeCoveredByGrant), and a requested scope never carries the prefix,
|
|
20
|
+
* so `write:x` entries can never satisfy a read;
|
|
21
|
+
* - write policy (below) only honors `write:`-prefixed entries, so plain
|
|
22
|
+
* read entries can never satisfy a write.
|
|
23
|
+
*/
|
|
24
|
+
export const WRITE_SCOPE_PREFIX = "write:";
|
|
25
|
+
export function isWriteScopeEntry(entry) {
|
|
26
|
+
return entry.startsWith(WRITE_SCOPE_PREFIX);
|
|
27
|
+
}
|
|
28
|
+
/** The scope patterns a grant authorizes for writing (prefix stripped). */
|
|
29
|
+
export function writeScopePatterns(grantScopes) {
|
|
30
|
+
return grantScopes
|
|
31
|
+
.filter(isWriteScopeEntry)
|
|
32
|
+
.map((entry) => entry.slice(WRITE_SCOPE_PREFIX.length))
|
|
33
|
+
.filter((pattern) => pattern.length > 0);
|
|
34
|
+
}
|
|
35
|
+
export function scopeCoveredByWriteGrant(requestedScope, grantScopes) {
|
|
36
|
+
return writeScopePatterns(grantScopes).some((pattern) => scopeMatchesPattern(requestedScope, pattern));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Authorize one builder write against a write-grant. Mirrors
|
|
40
|
+
* verifyDataReadPolicy invariant-for-invariant (builder registered, grant
|
|
41
|
+
* present / not revoked / not expired, scope coverage, grantee binding,
|
|
42
|
+
* owner binding) — but scope coverage only honors `write:`-prefixed grant
|
|
43
|
+
* entries, so a read-grant never confers write access.
|
|
44
|
+
*/
|
|
45
|
+
export async function verifyDataWritePolicy(input, ports) {
|
|
46
|
+
const available = await ports.runtimeAvailability?.isAvailable();
|
|
47
|
+
if (available === false) {
|
|
48
|
+
throw new PsUnavailableError();
|
|
49
|
+
}
|
|
50
|
+
const builder = await ports.authSessionVerifier.getBuilder(input.signer);
|
|
51
|
+
if (!builder) {
|
|
52
|
+
throw new UnregisteredBuilderError();
|
|
53
|
+
}
|
|
54
|
+
if (!input.grantId) {
|
|
55
|
+
throw new GrantRequiredError({
|
|
56
|
+
reason: "No grantId bound to the write session",
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
const grant = await ports.grantVerifier.getGrant(input.grantId);
|
|
60
|
+
if (!grant) {
|
|
61
|
+
throw new GrantRequiredError({
|
|
62
|
+
reason: "Grant not found",
|
|
63
|
+
grantId: input.grantId,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
if (grant.revokedAt !== null) {
|
|
67
|
+
throw new GrantRevokedError({ grantId: grant.id });
|
|
68
|
+
}
|
|
69
|
+
if (!grant.scopes || writeScopePatterns(grant.scopes).length === 0) {
|
|
70
|
+
throw new ScopeMismatchError({
|
|
71
|
+
requestedScope: input.requestedScope,
|
|
72
|
+
reason: "Grant has no write scopes",
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
if (grant.expiresAt !== null && grant.expiresAt !== undefined) {
|
|
76
|
+
const expiresAtSec = parseGrantExpiresAtSeconds(grant.expiresAt);
|
|
77
|
+
if (expiresAtSec === null) {
|
|
78
|
+
throw new ScopeMismatchError({
|
|
79
|
+
requestedScope: input.requestedScope,
|
|
80
|
+
reason: "Grant expiry is invalid",
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (expiresAtSec > 0) {
|
|
84
|
+
const nowSec = Math.floor(Date.now() / 1000);
|
|
85
|
+
if (expiresAtSec < nowSec) {
|
|
86
|
+
throw new GrantExpiredError({
|
|
87
|
+
expiresAt: expiresAtSec,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
if (!scopeCoveredByWriteGrant(input.requestedScope, grant.scopes)) {
|
|
93
|
+
throw new ScopeMismatchError({
|
|
94
|
+
requestedScope: input.requestedScope,
|
|
95
|
+
grantedScopes: grant.scopes,
|
|
96
|
+
reason: "Grant does not authorize writing to this scope",
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
if (builder.id.toLowerCase() !== grant.granteeId.toLowerCase()) {
|
|
100
|
+
throw new InvalidSignatureError({
|
|
101
|
+
reason: "Write signer is not the grant builder",
|
|
102
|
+
expected: grant.granteeId,
|
|
103
|
+
actual: input.signer,
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
// Ownership binding — the grant MUST have been issued by THIS server's
|
|
107
|
+
// owner (same fail-closed rules as verifyDataReadPolicy: a missing
|
|
108
|
+
// serverOwner or a grantor-less gateway response rejects, never skips).
|
|
109
|
+
if (!input.serverOwner) {
|
|
110
|
+
throw new ServerNotConfiguredError({
|
|
111
|
+
reason: "serverOwner is required to verify grant ownership",
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
if (!grant.grantorAddress ||
|
|
115
|
+
grant.grantorAddress.toLowerCase() !== input.serverOwner.toLowerCase()) {
|
|
116
|
+
throw new GrantOwnerMismatchError({
|
|
117
|
+
grantId: grant.id,
|
|
118
|
+
expected: input.serverOwner,
|
|
119
|
+
actual: grant.grantorAddress ?? null,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
// All authorization invariants passed — apply the fee seam last (default
|
|
123
|
+
// free; see WriteFeeVerifierPort).
|
|
124
|
+
await ports.writeFeeVerifier?.assertWriteAllowed({
|
|
125
|
+
builder: input.signer,
|
|
126
|
+
grant,
|
|
127
|
+
scope: input.requestedScope,
|
|
128
|
+
});
|
|
129
|
+
return grant;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=data-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"data-write.js","sourceRoot":"","sources":["../../src/policy/data-write.ts"],"names":[],"mappings":"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"}
|
package/dist/policy/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { verifyDataReadPolicy, type DataReadPolicyInput, type DataReadPolicyPorts, } from "./data-read.js";
|
|
1
|
+
export { verifyDataReadPolicy, parseGrantExpiresAtSeconds, type DataReadPolicyInput, type DataReadPolicyPorts, } from "./data-read.js";
|
|
2
|
+
export { WRITE_SCOPE_PREFIX, isWriteScopeEntry, writeScopePatterns, scopeCoveredByWriteGrant, verifyDataWritePolicy, type DataWritePolicyInput, type DataWritePolicyPorts, type WriteFeeVerifierPort, } from "./data-write.js";
|
|
2
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,EAC1B,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC"}
|
package/dist/policy/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { verifyDataReadPolicy, } from "./data-read.js";
|
|
1
|
+
export { verifyDataReadPolicy, parseGrantExpiresAtSeconds, } from "./data-read.js";
|
|
2
|
+
export { WRITE_SCOPE_PREFIX, isWriteScopeEntry, writeScopePatterns, scopeCoveredByWriteGrant, verifyDataWritePolicy, } from "./data-write.js";
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/dist/policy/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/policy/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,0BAA0B,GAG3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,GAItB,MAAM,iBAAiB,CAAC"}
|