@vibes.diy/api-svc 6.2.4 → 6.2.6
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/cf-serve.js +8 -0
- package/cf-serve.js.map +1 -1
- package/create-handler.js +1 -1
- package/create-handler.js.map +1 -1
- package/intern/backend-db-callback.js +17 -6
- package/intern/backend-db-callback.js.map +1 -1
- package/intern/prompt-assembly.js +7 -7
- package/intern/prompt-assembly.js.map +1 -1
- package/intern/read-anonymous-seed-docs.js +10 -1
- package/intern/read-anonymous-seed-docs.js.map +1 -1
- package/package.json +11 -11
- package/public/access-binding-resolver.js +6 -0
- package/public/access-binding-resolver.js.map +1 -1
- package/public/access-function.js +6 -2
- package/public/access-function.js.map +1 -1
- package/public/app-documents-read-eventos.js +83 -15
- package/public/app-documents-read-eventos.js.map +1 -1
- package/public/app-documents-write-eventos.js +13 -7
- package/public/app-documents-write-eventos.js.map +1 -1
- package/public/app-setting-items.js +35 -5
- package/public/app-setting-items.js.map +1 -1
- package/public/audience-channels.d.ts +17 -0
- package/public/audience-channels.js +32 -0
- package/public/audience-channels.js.map +1 -1
- package/public/channel-read-filter.js +6 -2
- package/public/channel-read-filter.js.map +1 -1
- package/public/inherit-read-resolver.d.ts +18 -0
- package/public/inherit-read-resolver.js +155 -0
- package/public/inherit-read-resolver.js.map +1 -0
- package/public/media-access-fn.d.ts +2 -0
- package/public/media-access-fn.js +22 -0
- package/public/media-access-fn.js.map +1 -0
|
@@ -3,6 +3,23 @@ export declare const RESERVED_CHANNEL_PREFIX = "~";
|
|
|
3
3
|
export declare function isReservedChannelId(ch: string): boolean;
|
|
4
4
|
export declare function presentSubject(s: string | undefined): s is string;
|
|
5
5
|
export declare function stripForeignAudience(desc: AccessDescriptor, actingHandle: string | null): AccessDescriptor;
|
|
6
|
+
export declare const INHERIT_CHANNEL_PREFIX = "~inherit:";
|
|
7
|
+
export declare const INHERIT_CAPABILITY_CHANNEL = "~inherit";
|
|
8
|
+
export declare function inheritChannelKey(db: string, docId: string): string;
|
|
9
|
+
export declare function hasInheritChannel(channels: readonly string[]): boolean;
|
|
10
|
+
export declare function presentInheritRead(ir: unknown): ir is {
|
|
11
|
+
db: string;
|
|
12
|
+
docId: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function inheritChannelOf(desc: {
|
|
15
|
+
inheritRead?: unknown;
|
|
16
|
+
}): string[];
|
|
17
|
+
export declare function inheritRefsOf(descriptors: {
|
|
18
|
+
inheritRead?: unknown;
|
|
19
|
+
}[]): {
|
|
20
|
+
db: string;
|
|
21
|
+
docId: string;
|
|
22
|
+
}[];
|
|
6
23
|
export declare function audienceChannelsOf(desc: Pick<AccessDescriptor, "audience">): string[];
|
|
7
24
|
export declare function hasReservedChannel(desc: Pick<AccessDescriptor, "channels" | "grant">): boolean;
|
|
8
25
|
export declare function hasReservedRoleMint(desc: Pick<AccessDescriptor, "members">): boolean;
|
|
@@ -15,6 +15,38 @@ export function stripForeignAudience(desc, actingHandle) {
|
|
|
15
15
|
return desc;
|
|
16
16
|
return { ...desc, audience: undefined };
|
|
17
17
|
}
|
|
18
|
+
export const INHERIT_CHANNEL_PREFIX = "~inherit:";
|
|
19
|
+
export const INHERIT_CAPABILITY_CHANNEL = "~inherit";
|
|
20
|
+
export function inheritChannelKey(db, docId) {
|
|
21
|
+
return `${INHERIT_CHANNEL_PREFIX}${JSON.stringify([db, docId])}`;
|
|
22
|
+
}
|
|
23
|
+
export function hasInheritChannel(channels) {
|
|
24
|
+
return channels.some((ch) => ch.startsWith(INHERIT_CHANNEL_PREFIX));
|
|
25
|
+
}
|
|
26
|
+
export function presentInheritRead(ir) {
|
|
27
|
+
return (typeof ir === "object" &&
|
|
28
|
+
ir !== null &&
|
|
29
|
+
"db" in ir &&
|
|
30
|
+
"docId" in ir &&
|
|
31
|
+
typeof ir.db === "string" &&
|
|
32
|
+
ir.db.trim().length > 0 &&
|
|
33
|
+
typeof ir.docId === "string" &&
|
|
34
|
+
ir.docId.trim().length > 0);
|
|
35
|
+
}
|
|
36
|
+
export function inheritChannelOf(desc) {
|
|
37
|
+
return presentInheritRead(desc.inheritRead) ? [inheritChannelKey(desc.inheritRead.db, desc.inheritRead.docId)] : [];
|
|
38
|
+
}
|
|
39
|
+
export function inheritRefsOf(descriptors) {
|
|
40
|
+
const seen = new Map();
|
|
41
|
+
for (const d of descriptors) {
|
|
42
|
+
if (presentInheritRead(d.inheritRead)) {
|
|
43
|
+
const key = inheritChannelKey(d.inheritRead.db, d.inheritRead.docId);
|
|
44
|
+
if (seen.has(key) === false)
|
|
45
|
+
seen.set(key, { db: d.inheritRead.db, docId: d.inheritRead.docId });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return [...seen.values()];
|
|
49
|
+
}
|
|
18
50
|
export function audienceChannelsOf(desc) {
|
|
19
51
|
const out = [];
|
|
20
52
|
if (presentSubject(desc.audience?.followersOf))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audience-channels.js","sourceRoot":"","sources":["../../jsr/public/audience-channels.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"audience-channels.js","sourceRoot":"","sources":["../../jsr/public/audience-channels.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { audienceChannelsOf } from "./audience-channels.js";
|
|
1
|
+
import { audienceChannelsOf, inheritChannelOf } from "./audience-channels.js";
|
|
2
2
|
export function filterDocsByChannel(docs, outputRows, userHandle, effectiveChannels, publicChannels, adminOverride = false, requireOutput = false) {
|
|
3
3
|
if (adminOverride && !requireOutput)
|
|
4
4
|
return docs;
|
|
@@ -7,7 +7,11 @@ export function filterDocsByChannel(docs, outputRows, userHandle, effectiveChann
|
|
|
7
7
|
const docChannels = new Map();
|
|
8
8
|
for (const row of outputRows) {
|
|
9
9
|
const parsed = JSON.parse(row.output);
|
|
10
|
-
const channels = [
|
|
10
|
+
const channels = [
|
|
11
|
+
...(Array.isArray(parsed.channels) ? parsed.channels : []),
|
|
12
|
+
...audienceChannelsOf(parsed),
|
|
13
|
+
...inheritChannelOf(parsed),
|
|
14
|
+
];
|
|
11
15
|
if (channels.length > 0) {
|
|
12
16
|
docChannels.set(row.docId, channels);
|
|
13
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel-read-filter.js","sourceRoot":"","sources":["../../jsr/public/channel-read-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"channel-read-filter.js","sourceRoot":"","sources":["../../jsr/public/channel-read-filter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAS9E,MAAM,UAAU,mBAAmB,CACjC,IAAW,EACX,UAAuB,EACvB,UAAyB,EACzB,iBAA8B,EAC9B,cAA2B,EAC3B,aAAa,GAAG,KAAK,EAKrB,aAAa,GAAG,KAAK;IAErB,IAAI,aAAa,IAAI,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IAQjD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEvC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAInC,CAAC;QASF,MAAM,QAAQ,GAAG;YACf,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,kBAAkB,CAAC,MAAM,CAAC;YAC7B,GAAG,gBAAgB,CAAC,MAAM,CAAC;SAC5B,CAAC;QACF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,KAAK,CAAC;QACzC,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;YAC1B,IAAI,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QACvE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { VibesApiSQLCtx } from "../types.js";
|
|
2
|
+
import type { DocAccessLevel } from "./access-helpers.js";
|
|
3
|
+
import type { AccessDescriptor } from "./access-function.js";
|
|
4
|
+
interface OutputRow {
|
|
5
|
+
docId: string;
|
|
6
|
+
output: string;
|
|
7
|
+
}
|
|
8
|
+
interface ResolveArgs {
|
|
9
|
+
ownerHandle: string;
|
|
10
|
+
appSlug: string;
|
|
11
|
+
outputs: OutputRow[];
|
|
12
|
+
userHandle: string | null;
|
|
13
|
+
access: DocAccessLevel;
|
|
14
|
+
devHandles: string[];
|
|
15
|
+
}
|
|
16
|
+
export declare function safeParseDescriptor(output: string): AccessDescriptor | undefined;
|
|
17
|
+
export declare function resolveInheritReadChannels(vctx: VibesApiSQLCtx, args: ResolveArgs): Promise<Set<string>>;
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
import { exception2Result } from "@adviser/cement";
|
|
2
|
+
import { type } from "arktype";
|
|
3
|
+
import { and, eq, inArray } from "drizzle-orm";
|
|
4
|
+
import { filterDocsByChannel } from "./channel-read-filter.js";
|
|
5
|
+
import { extractContribution, newSeededReduce } from "./grant-reduce.js";
|
|
6
|
+
import { audienceChannelsForReader, collectAudienceSubjects, inheritChannelKey, presentInheritRead } from "./audience-channels.js";
|
|
7
|
+
import { resolveAudienceMembershipFailClosed } from "./social-store.js";
|
|
8
|
+
import { resolveDbAcl } from "./db-acl-resolver.js";
|
|
9
|
+
import { readAllowed } from "./app-documents-shared.js";
|
|
10
|
+
const MAX_INHERIT_HOST_DBS = 32;
|
|
11
|
+
const MAX_INHERIT_REFS = 1024;
|
|
12
|
+
const HOST_DB_CONCURRENCY = 4;
|
|
13
|
+
const INHERIT_IN_CHUNK = 200;
|
|
14
|
+
const MAX_HOST_GRANT_ROWS = 5000;
|
|
15
|
+
const descChannels = type("string[]");
|
|
16
|
+
const descAudience = type({ "followersOf?": "string", "mutualsOf?": "string" });
|
|
17
|
+
const descGrant = type({
|
|
18
|
+
"users?": { "[string]": "string[]" },
|
|
19
|
+
"roles?": { "[string]": "string[]" },
|
|
20
|
+
"public?": "string[]",
|
|
21
|
+
});
|
|
22
|
+
const descMembers = type({ "[string]": "string[]" });
|
|
23
|
+
const descExpiry = type("string | number | null");
|
|
24
|
+
function isRecord(v) {
|
|
25
|
+
return typeof v === "object" && v !== null && !Array.isArray(v);
|
|
26
|
+
}
|
|
27
|
+
export function safeParseDescriptor(output) {
|
|
28
|
+
const r = exception2Result(() => JSON.parse(output));
|
|
29
|
+
if (r.isErr())
|
|
30
|
+
return undefined;
|
|
31
|
+
const value = r.Ok();
|
|
32
|
+
if (!isRecord(value))
|
|
33
|
+
return undefined;
|
|
34
|
+
const out = {};
|
|
35
|
+
const channels = descChannels(value.channels);
|
|
36
|
+
if (!(channels instanceof type.errors))
|
|
37
|
+
out.channels = channels;
|
|
38
|
+
const audience = descAudience(value.audience);
|
|
39
|
+
if (!(audience instanceof type.errors))
|
|
40
|
+
out.audience = audience;
|
|
41
|
+
const grant = descGrant(value.grant);
|
|
42
|
+
if (!(grant instanceof type.errors))
|
|
43
|
+
out.grant = grant;
|
|
44
|
+
const members = descMembers(value.members);
|
|
45
|
+
if (!(members instanceof type.errors))
|
|
46
|
+
out.members = members;
|
|
47
|
+
const expiry = descExpiry(value.expiry);
|
|
48
|
+
if (!(expiry instanceof type.errors))
|
|
49
|
+
out.expiry = expiry;
|
|
50
|
+
if (typeof value.allowAnonymous === "boolean")
|
|
51
|
+
out.allowAnonymous = value.allowAnonymous;
|
|
52
|
+
if (presentInheritRead(value.inheritRead))
|
|
53
|
+
out.inheritRead = value.inheritRead;
|
|
54
|
+
return out;
|
|
55
|
+
}
|
|
56
|
+
export async function resolveInheritReadChannels(vctx, args) {
|
|
57
|
+
const { ownerHandle, appSlug, outputs, userHandle, access, devHandles } = args;
|
|
58
|
+
const byDb = new Map();
|
|
59
|
+
let refCount = 0;
|
|
60
|
+
for (const row of outputs) {
|
|
61
|
+
if (refCount >= MAX_INHERIT_REFS)
|
|
62
|
+
break;
|
|
63
|
+
const parsed = safeParseDescriptor(row.output);
|
|
64
|
+
if (parsed === undefined || !presentInheritRead(parsed.inheritRead))
|
|
65
|
+
continue;
|
|
66
|
+
const { db, docId } = parsed.inheritRead;
|
|
67
|
+
let set = byDb.get(db);
|
|
68
|
+
if (set === undefined) {
|
|
69
|
+
if (byDb.size >= MAX_INHERIT_HOST_DBS)
|
|
70
|
+
continue;
|
|
71
|
+
set = new Set();
|
|
72
|
+
byDb.set(db, set);
|
|
73
|
+
}
|
|
74
|
+
if (set.has(docId) === false) {
|
|
75
|
+
set.add(docId);
|
|
76
|
+
refCount++;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (byDb.size === 0)
|
|
80
|
+
return new Set();
|
|
81
|
+
const result = new Set();
|
|
82
|
+
const entries = [...byDb];
|
|
83
|
+
for (let i = 0; i < entries.length; i += HOST_DB_CONCURRENCY) {
|
|
84
|
+
const batch = entries.slice(i, i + HOST_DB_CONCURRENCY);
|
|
85
|
+
const batchKeys = await Promise.all(batch.map(([hostDb, ids]) => resolveHostDb(hostDb, [...ids])));
|
|
86
|
+
for (const keys of batchKeys) {
|
|
87
|
+
for (const key of keys)
|
|
88
|
+
result.add(key);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return result;
|
|
92
|
+
async function resolveHostDb(hostDb, hostDocIds) {
|
|
93
|
+
const tOut = vctx.sql.tables.accessFnOutputs;
|
|
94
|
+
const rAcl = await resolveDbAcl(vctx, ownerHandle, appSlug, hostDb);
|
|
95
|
+
if (rAcl.isErr())
|
|
96
|
+
return [];
|
|
97
|
+
if ((await readAllowed(vctx, rAcl.Ok(), access, appSlug, ownerHandle)) === false)
|
|
98
|
+
return [];
|
|
99
|
+
const grantRows = await vctx.sql.db
|
|
100
|
+
.select({ docId: tOut.docId, output: tOut.output })
|
|
101
|
+
.from(tOut)
|
|
102
|
+
.where(and(eq(tOut.ownerHandle, ownerHandle), eq(tOut.appSlug, appSlug), eq(tOut.dbName, hostDb), eq(tOut.hasGrants, 1)))
|
|
103
|
+
.limit(MAX_HOST_GRANT_ROWS + 1);
|
|
104
|
+
if (grantRows.length > MAX_HOST_GRANT_ROWS) {
|
|
105
|
+
console.error(`inherit-read: host db ${ownerHandle}/${appSlug}/${hostDb} has >${MAX_HOST_GRANT_ROWS} grant rows — failing closed (partial grant reduce could mis-compute readability)`);
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
const refRows = [];
|
|
109
|
+
for (let j = 0; j < hostDocIds.length; j += INHERIT_IN_CHUNK) {
|
|
110
|
+
const chunk = hostDocIds.slice(j, j + INHERIT_IN_CHUNK);
|
|
111
|
+
const rows = await vctx.sql.db
|
|
112
|
+
.select({ docId: tOut.docId, output: tOut.output })
|
|
113
|
+
.from(tOut)
|
|
114
|
+
.where(and(eq(tOut.ownerHandle, ownerHandle), eq(tOut.appSlug, appSlug), eq(tOut.dbName, hostDb), inArray(tOut.docId, chunk)));
|
|
115
|
+
for (const r of rows)
|
|
116
|
+
refRows.push(r);
|
|
117
|
+
}
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
const hostOutputRows = [];
|
|
120
|
+
const parsedRows = [];
|
|
121
|
+
const grantDocIds = new Set(grantRows.map((r) => r.docId));
|
|
122
|
+
for (const r of [...grantRows, ...refRows]) {
|
|
123
|
+
if (seen.has(r.docId))
|
|
124
|
+
continue;
|
|
125
|
+
seen.add(r.docId);
|
|
126
|
+
const desc = safeParseDescriptor(r.output);
|
|
127
|
+
if (desc === undefined)
|
|
128
|
+
continue;
|
|
129
|
+
hostOutputRows.push({ docId: r.docId, output: r.output });
|
|
130
|
+
parsedRows.push({ docId: r.docId, desc });
|
|
131
|
+
}
|
|
132
|
+
const reduce = newSeededReduce(ownerHandle, devHandles);
|
|
133
|
+
for (const p of parsedRows) {
|
|
134
|
+
if (grantDocIds.has(p.docId))
|
|
135
|
+
reduce.addDoc(p.docId, extractContribution(p.desc));
|
|
136
|
+
}
|
|
137
|
+
const hostEffective = userHandle !== null ? reduce.resolveEffectiveChannels(userHandle) : new Set();
|
|
138
|
+
if (userHandle !== null) {
|
|
139
|
+
const subjects = collectAudienceSubjects(parsedRows.map((p) => p.desc));
|
|
140
|
+
if (subjects.length > 0) {
|
|
141
|
+
const membership = await resolveAudienceMembershipFailClosed(vctx, {
|
|
142
|
+
handle: userHandle,
|
|
143
|
+
subjects,
|
|
144
|
+
ownerHandle,
|
|
145
|
+
appSlug,
|
|
146
|
+
});
|
|
147
|
+
for (const ch of audienceChannelsForReader(membership))
|
|
148
|
+
hostEffective.add(ch);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
const survivors = filterDocsByChannel(hostDocIds.map((id) => ({ _id: id })), hostOutputRows, userHandle, hostEffective, reduce.publicChannels);
|
|
152
|
+
return survivors.map((d) => inheritChannelKey(hostDb, d._id));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=inherit-read-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inherit-read-resolver.js","sourceRoot":"","sources":["../../jsr/public/inherit-read-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const MEDIA_BUILTIN_SOURCE = "export function media(doc, oldDoc, user, ctx) {\n if (user === null || user === undefined) return { forbidden: \"authentication required\" };\n if (oldDoc !== null && oldDoc !== undefined) {\n if (oldDoc.authorHandle !== user.userHandle) return { forbidden: \"not author\" };\n if (oldDoc.type === \"version\") return { forbidden: \"version docs are append-only\" };\n if (doc === null || doc === undefined || doc.authorHandle !== oldDoc.authorHandle) {\n return { forbidden: \"authorHandle is immutable\" };\n }\n return READ;\n }\n if (doc === null || doc === undefined || doc.authorHandle !== user.userHandle) {\n return { forbidden: \"author must be the caller\" };\n }\n return READ;\n}\nconst READ = { channels: [\"media\"], grant: { public: [\"media\"] } };\n";
|
|
2
|
+
export declare const MEDIA_BUILTIN_CID: string;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
2
|
+
import { utf8ToBytes } from "@noble/hashes/utils.js";
|
|
3
|
+
import { base58btc } from "multiformats/bases/base58";
|
|
4
|
+
export const MEDIA_BUILTIN_SOURCE = `export function media(doc, oldDoc, user, ctx) {
|
|
5
|
+
if (user === null || user === undefined) return { forbidden: "authentication required" };
|
|
6
|
+
if (oldDoc !== null && oldDoc !== undefined) {
|
|
7
|
+
if (oldDoc.authorHandle !== user.userHandle) return { forbidden: "not author" };
|
|
8
|
+
if (oldDoc.type === "version") return { forbidden: "version docs are append-only" };
|
|
9
|
+
if (doc === null || doc === undefined || doc.authorHandle !== oldDoc.authorHandle) {
|
|
10
|
+
return { forbidden: "authorHandle is immutable" };
|
|
11
|
+
}
|
|
12
|
+
return READ;
|
|
13
|
+
}
|
|
14
|
+
if (doc === null || doc === undefined || doc.authorHandle !== user.userHandle) {
|
|
15
|
+
return { forbidden: "author must be the caller" };
|
|
16
|
+
}
|
|
17
|
+
return READ;
|
|
18
|
+
}
|
|
19
|
+
const READ = { channels: ["media"], grant: { public: ["media"] } };
|
|
20
|
+
`;
|
|
21
|
+
export const MEDIA_BUILTIN_CID = base58btc.encode(sha256(utf8ToBytes(MEDIA_BUILTIN_SOURCE)));
|
|
22
|
+
//# sourceMappingURL=media-access-fn.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-access-fn.js","sourceRoot":"","sources":["../../jsr/public/media-access-fn.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAWtD,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;CAgBnC,CAAC;AAMF,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC"}
|