@hatk/hatk 0.0.1-alpha.5 → 0.0.1-alpha.50
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/adapter.d.ts +19 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +107 -0
- package/dist/backfill.d.ts +60 -1
- package/dist/backfill.d.ts.map +1 -1
- package/dist/backfill.js +167 -33
- package/dist/car.d.ts +59 -1
- package/dist/car.d.ts.map +1 -1
- package/dist/car.js +179 -7
- package/dist/cbor.d.ts +37 -0
- package/dist/cbor.d.ts.map +1 -1
- package/dist/cbor.js +36 -3
- package/dist/cid.d.ts +37 -0
- package/dist/cid.d.ts.map +1 -1
- package/dist/cid.js +38 -3
- package/dist/cli.js +243 -996
- package/dist/config.d.ts +12 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +36 -9
- package/dist/database/adapter-factory.d.ts +6 -0
- package/dist/database/adapter-factory.d.ts.map +1 -0
- package/dist/database/adapter-factory.js +20 -0
- package/dist/database/adapters/duckdb-search.d.ts +12 -0
- package/dist/database/adapters/duckdb-search.d.ts.map +1 -0
- package/dist/database/adapters/duckdb-search.js +27 -0
- package/dist/database/adapters/duckdb.d.ts +25 -0
- package/dist/database/adapters/duckdb.d.ts.map +1 -0
- package/dist/database/adapters/duckdb.js +161 -0
- package/dist/database/adapters/sqlite-search.d.ts +23 -0
- package/dist/database/adapters/sqlite-search.d.ts.map +1 -0
- package/dist/database/adapters/sqlite-search.js +74 -0
- package/dist/database/adapters/sqlite.d.ts +18 -0
- package/dist/database/adapters/sqlite.d.ts.map +1 -0
- package/dist/database/adapters/sqlite.js +88 -0
- package/dist/{db.d.ts → database/db.d.ts} +56 -6
- package/dist/database/db.d.ts.map +1 -0
- package/dist/{db.js → database/db.js} +719 -549
- package/dist/database/dialect.d.ts +45 -0
- package/dist/database/dialect.d.ts.map +1 -0
- package/dist/database/dialect.js +72 -0
- package/dist/{fts.d.ts → database/fts.d.ts} +7 -0
- package/dist/database/fts.d.ts.map +1 -0
- package/dist/{fts.js → database/fts.js} +116 -32
- package/dist/database/index.d.ts +7 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +6 -0
- package/dist/database/ports.d.ts +50 -0
- package/dist/database/ports.d.ts.map +1 -0
- package/dist/database/ports.js +1 -0
- package/dist/{schema.d.ts → database/schema.d.ts} +14 -3
- package/dist/database/schema.d.ts.map +1 -0
- package/dist/{schema.js → database/schema.js} +81 -41
- package/dist/dev-entry.d.ts +8 -0
- package/dist/dev-entry.d.ts.map +1 -0
- package/dist/dev-entry.js +111 -0
- package/dist/feeds.d.ts +12 -8
- package/dist/feeds.d.ts.map +1 -1
- package/dist/feeds.js +45 -6
- package/dist/hooks.d.ts +43 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +102 -0
- package/dist/hydrate.d.ts +6 -5
- package/dist/hydrate.d.ts.map +1 -1
- package/dist/hydrate.js +4 -16
- package/dist/indexer.d.ts +22 -0
- package/dist/indexer.d.ts.map +1 -1
- package/dist/indexer.js +80 -8
- package/dist/labels.d.ts +36 -0
- package/dist/labels.d.ts.map +1 -1
- package/dist/labels.js +71 -6
- package/dist/lexicon-resolve.d.ts.map +1 -1
- package/dist/lexicon-resolve.js +27 -112
- package/dist/lexicons/com/atproto/label/defs.json +75 -0
- package/dist/lexicons/com/atproto/moderation/defs.json +30 -0
- package/dist/lexicons/com/atproto/repo/strongRef.json +24 -0
- package/dist/lexicons/dev/hatk/createRecord.json +40 -0
- package/dist/lexicons/dev/hatk/createReport.json +48 -0
- package/dist/lexicons/dev/hatk/deleteRecord.json +25 -0
- package/dist/lexicons/dev/hatk/describeCollections.json +41 -0
- package/dist/lexicons/dev/hatk/describeFeeds.json +29 -0
- package/dist/lexicons/dev/hatk/describeLabels.json +45 -0
- package/dist/lexicons/dev/hatk/getFeed.json +30 -0
- package/dist/lexicons/dev/hatk/getPreferences.json +19 -0
- package/dist/lexicons/dev/hatk/getRecord.json +26 -0
- package/dist/lexicons/dev/hatk/getRecords.json +32 -0
- package/dist/lexicons/dev/hatk/putPreference.json +28 -0
- package/dist/lexicons/dev/hatk/putRecord.json +41 -0
- package/dist/lexicons/dev/hatk/searchRecords.json +32 -0
- package/dist/lexicons/dev/hatk/uploadBlob.json +23 -0
- package/dist/logger.d.ts +29 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +29 -0
- package/dist/main.js +126 -67
- package/dist/mst.d.ts +18 -1
- package/dist/mst.d.ts.map +1 -1
- package/dist/mst.js +19 -8
- package/dist/oauth/db.d.ts +3 -1
- package/dist/oauth/db.d.ts.map +1 -1
- package/dist/oauth/db.js +48 -19
- package/dist/oauth/server.d.ts +24 -0
- package/dist/oauth/server.d.ts.map +1 -1
- package/dist/oauth/server.js +198 -22
- package/dist/oauth/session.d.ts +11 -0
- package/dist/oauth/session.d.ts.map +1 -0
- package/dist/oauth/session.js +65 -0
- package/dist/opengraph.d.ts +10 -0
- package/dist/opengraph.d.ts.map +1 -1
- package/dist/opengraph.js +73 -39
- package/dist/pds-proxy.d.ts +42 -0
- package/dist/pds-proxy.d.ts.map +1 -0
- package/dist/pds-proxy.js +207 -0
- package/dist/renderer.d.ts +27 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +46 -0
- package/dist/resolve-hatk.d.ts +6 -0
- package/dist/resolve-hatk.d.ts.map +1 -0
- package/dist/resolve-hatk.js +20 -0
- package/dist/response.d.ts +16 -0
- package/dist/response.d.ts.map +1 -0
- package/dist/response.js +69 -0
- package/dist/scanner.d.ts +21 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +88 -0
- package/dist/seed.d.ts +19 -0
- package/dist/seed.d.ts.map +1 -1
- package/dist/seed.js +43 -4
- package/dist/server-init.d.ts +8 -0
- package/dist/server-init.d.ts.map +1 -0
- package/dist/server-init.js +62 -0
- package/dist/server.d.ts +26 -3
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +601 -635
- package/dist/setup.d.ts +28 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +50 -3
- package/dist/templates/feed.tpl +14 -0
- package/dist/templates/hook.tpl +5 -0
- package/dist/templates/label.tpl +15 -0
- package/dist/templates/og.tpl +17 -0
- package/dist/templates/seed.tpl +11 -0
- package/dist/templates/setup.tpl +5 -0
- package/dist/templates/test-feed.tpl +19 -0
- package/dist/templates/test-xrpc.tpl +19 -0
- package/dist/templates/xrpc.tpl +41 -0
- package/dist/test.d.ts +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +38 -32
- package/dist/views.js +1 -1
- package/dist/vite-plugin.d.ts +1 -1
- package/dist/vite-plugin.d.ts.map +1 -1
- package/dist/vite-plugin.js +254 -66
- package/dist/xrpc.d.ts +60 -10
- package/dist/xrpc.d.ts.map +1 -1
- package/dist/xrpc.js +155 -39
- package/package.json +15 -7
- package/public/admin.html +133 -54
- package/dist/db.d.ts.map +0 -1
- package/dist/fts.d.ts.map +0 -1
- package/dist/oauth/hooks.d.ts +0 -10
- package/dist/oauth/hooks.d.ts.map +0 -1
- package/dist/oauth/hooks.js +0 -40
- package/dist/schema.d.ts.map +0 -1
- package/dist/test-browser.d.ts +0 -14
- package/dist/test-browser.d.ts.map +0 -1
- package/dist/test-browser.js +0 -26
package/dist/lexicon-resolve.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// Lexicon resolver — fetches lexicons from the AT Protocol registry via DNS → DID → PDS chain
|
|
2
2
|
// and recursively resolves all $ref dependencies.
|
|
3
3
|
import { isValidDid } from '@bigmoves/lexicon';
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs';
|
|
4
6
|
// --- Authority ---
|
|
5
7
|
function nsidToDomain(nsid) {
|
|
6
8
|
const parts = nsid.split('.');
|
|
@@ -71,118 +73,31 @@ async function resolveDid(did, opts = {}) {
|
|
|
71
73
|
return null;
|
|
72
74
|
}
|
|
73
75
|
}
|
|
74
|
-
// --- Built-in core schemas (
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
uri: { type: 'string', format: 'uri' },
|
|
100
|
-
cid: { type: 'string', format: 'cid' },
|
|
101
|
-
val: { type: 'string', maxLength: 128 },
|
|
102
|
-
neg: { type: 'boolean' },
|
|
103
|
-
cts: { type: 'string', format: 'datetime' },
|
|
104
|
-
exp: { type: 'string', format: 'datetime' },
|
|
105
|
-
sig: { type: 'bytes' },
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
selfLabels: {
|
|
109
|
-
type: 'object',
|
|
110
|
-
description: 'Metadata tags on an atproto record, published by the author within the record.',
|
|
111
|
-
required: ['values'],
|
|
112
|
-
properties: { values: { type: 'array', items: { type: 'ref', ref: '#selfLabel' }, maxLength: 10 } },
|
|
113
|
-
},
|
|
114
|
-
selfLabel: { type: 'object', required: ['val'], properties: { val: { type: 'string', maxLength: 128 } } },
|
|
115
|
-
labelValueDefinition: {
|
|
116
|
-
type: 'object',
|
|
117
|
-
description: 'Declares a label value and its expected interpretations and behaviors.',
|
|
118
|
-
required: ['identifier', 'severity', 'blurs', 'locales'],
|
|
119
|
-
properties: {
|
|
120
|
-
identifier: { type: 'string', maxLength: 100 },
|
|
121
|
-
severity: { type: 'string', knownValues: ['inform', 'alert', 'none'] },
|
|
122
|
-
blurs: { type: 'string', knownValues: ['content', 'media', 'none'] },
|
|
123
|
-
defaultSetting: { type: 'string', knownValues: ['ignore', 'warn', 'hide'] },
|
|
124
|
-
adultOnly: { type: 'boolean' },
|
|
125
|
-
locales: { type: 'array', items: { type: 'ref', ref: '#labelValueDefinitionStrings' } },
|
|
126
|
-
},
|
|
127
|
-
},
|
|
128
|
-
labelValueDefinitionStrings: {
|
|
129
|
-
type: 'object',
|
|
130
|
-
required: ['lang', 'name', 'description'],
|
|
131
|
-
properties: {
|
|
132
|
-
lang: { type: 'string', format: 'language' },
|
|
133
|
-
name: { type: 'string', maxLength: 640 },
|
|
134
|
-
description: { type: 'string', maxLength: 100000 },
|
|
135
|
-
},
|
|
136
|
-
},
|
|
137
|
-
labelValue: {
|
|
138
|
-
type: 'string',
|
|
139
|
-
knownValues: [
|
|
140
|
-
'!hide',
|
|
141
|
-
'!no-promote',
|
|
142
|
-
'!warn',
|
|
143
|
-
'!no-unauthenticated',
|
|
144
|
-
'dmca-violation',
|
|
145
|
-
'doxxing',
|
|
146
|
-
'porn',
|
|
147
|
-
'sexual',
|
|
148
|
-
'nudity',
|
|
149
|
-
'nsfl',
|
|
150
|
-
'gore',
|
|
151
|
-
],
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
'com.atproto.moderation.defs': {
|
|
156
|
-
lexicon: 1,
|
|
157
|
-
id: 'com.atproto.moderation.defs',
|
|
158
|
-
defs: {
|
|
159
|
-
reasonType: {
|
|
160
|
-
type: 'string',
|
|
161
|
-
knownValues: [
|
|
162
|
-
'com.atproto.moderation.defs#reasonSpam',
|
|
163
|
-
'com.atproto.moderation.defs#reasonViolation',
|
|
164
|
-
'com.atproto.moderation.defs#reasonMisleading',
|
|
165
|
-
'com.atproto.moderation.defs#reasonSexual',
|
|
166
|
-
'com.atproto.moderation.defs#reasonRude',
|
|
167
|
-
'com.atproto.moderation.defs#reasonOther',
|
|
168
|
-
'com.atproto.moderation.defs#reasonAppeal',
|
|
169
|
-
],
|
|
170
|
-
},
|
|
171
|
-
reasonSpam: { type: 'token', description: 'Spam: frequent unwanted promotion, replies, mentions.' },
|
|
172
|
-
reasonViolation: { type: 'token', description: 'Direct violation of server rules, laws, terms of service.' },
|
|
173
|
-
reasonMisleading: { type: 'token', description: 'Misleading identity, affiliation, or content.' },
|
|
174
|
-
reasonSexual: { type: 'token', description: 'Unwanted or mislabeled sexual content.' },
|
|
175
|
-
reasonRude: { type: 'token', description: 'Rude, harassing, explicit, or otherwise unwelcoming behavior.' },
|
|
176
|
-
reasonOther: { type: 'token', description: 'Reports not falling under another report category.' },
|
|
177
|
-
reasonAppeal: { type: 'token', description: 'Appeal a previously taken moderation action.' },
|
|
178
|
-
subjectType: {
|
|
179
|
-
type: 'string',
|
|
180
|
-
description: 'Tag describing a type of subject that might be reported.',
|
|
181
|
-
knownValues: ['account', 'record', 'chat'],
|
|
182
|
-
},
|
|
183
|
-
},
|
|
184
|
-
},
|
|
185
|
-
};
|
|
76
|
+
// --- Built-in core schemas (loaded from src/lexicons/) ---
|
|
77
|
+
function loadCoreSchemas() {
|
|
78
|
+
const schemas = {};
|
|
79
|
+
const lexDir = join(import.meta.dirname, 'lexicons');
|
|
80
|
+
function walk(dir) {
|
|
81
|
+
for (const entry of readdirSync(dir)) {
|
|
82
|
+
const full = join(dir, entry);
|
|
83
|
+
if (statSync(full).isDirectory()) {
|
|
84
|
+
walk(full);
|
|
85
|
+
}
|
|
86
|
+
else if (entry.endsWith('.json')) {
|
|
87
|
+
const lexicon = JSON.parse(readFileSync(full, 'utf-8'));
|
|
88
|
+
if (lexicon.id)
|
|
89
|
+
schemas[lexicon.id] = lexicon;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
try {
|
|
94
|
+
walk(lexDir);
|
|
95
|
+
}
|
|
96
|
+
catch { }
|
|
97
|
+
return schemas;
|
|
98
|
+
}
|
|
99
|
+
const coreSchemas = loadCoreSchemas();
|
|
100
|
+
// --- Resolver ---
|
|
186
101
|
function refToNsid(ref) {
|
|
187
102
|
let nsid = ref.startsWith('lex:') ? ref.slice(4) : ref;
|
|
188
103
|
const hashIndex = nsid.indexOf('#');
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "com.atproto.label.defs",
|
|
4
|
+
"defs": {
|
|
5
|
+
"label": {
|
|
6
|
+
"type": "object",
|
|
7
|
+
"description": "Metadata tag on an atproto resource (eg, repo or record).",
|
|
8
|
+
"required": ["src", "uri", "val", "cts"],
|
|
9
|
+
"properties": {
|
|
10
|
+
"ver": { "type": "integer" },
|
|
11
|
+
"src": { "type": "string", "format": "did" },
|
|
12
|
+
"uri": { "type": "string", "format": "uri" },
|
|
13
|
+
"cid": { "type": "string", "format": "cid" },
|
|
14
|
+
"val": { "type": "string", "maxLength": 128 },
|
|
15
|
+
"neg": { "type": "boolean" },
|
|
16
|
+
"cts": { "type": "string", "format": "datetime" },
|
|
17
|
+
"exp": { "type": "string", "format": "datetime" },
|
|
18
|
+
"sig": { "type": "bytes" }
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"selfLabels": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"description": "Metadata tags on an atproto record, published by the author within the record.",
|
|
24
|
+
"required": ["values"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"values": { "type": "array", "items": { "type": "ref", "ref": "#selfLabel" }, "maxLength": 10 }
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"selfLabel": {
|
|
30
|
+
"type": "object",
|
|
31
|
+
"required": ["val"],
|
|
32
|
+
"properties": {
|
|
33
|
+
"val": { "type": "string", "maxLength": 128 }
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
"labelValueDefinition": {
|
|
37
|
+
"type": "object",
|
|
38
|
+
"description": "Declares a label value and its expected interpretations and behaviors.",
|
|
39
|
+
"required": ["identifier", "severity", "blurs", "locales"],
|
|
40
|
+
"properties": {
|
|
41
|
+
"identifier": { "type": "string", "maxLength": 100 },
|
|
42
|
+
"severity": { "type": "string", "knownValues": ["inform", "alert", "none"] },
|
|
43
|
+
"blurs": { "type": "string", "knownValues": ["content", "media", "none"] },
|
|
44
|
+
"defaultSetting": { "type": "string", "knownValues": ["ignore", "warn", "hide"] },
|
|
45
|
+
"adultOnly": { "type": "boolean" },
|
|
46
|
+
"locales": { "type": "array", "items": { "type": "ref", "ref": "#labelValueDefinitionStrings" } }
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"labelValueDefinitionStrings": {
|
|
50
|
+
"type": "object",
|
|
51
|
+
"required": ["lang", "name", "description"],
|
|
52
|
+
"properties": {
|
|
53
|
+
"lang": { "type": "string", "format": "language" },
|
|
54
|
+
"name": { "type": "string", "maxLength": 640 },
|
|
55
|
+
"description": { "type": "string", "maxLength": 100000 }
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"labelValue": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"knownValues": [
|
|
61
|
+
"!hide",
|
|
62
|
+
"!no-promote",
|
|
63
|
+
"!warn",
|
|
64
|
+
"!no-unauthenticated",
|
|
65
|
+
"dmca-violation",
|
|
66
|
+
"doxxing",
|
|
67
|
+
"porn",
|
|
68
|
+
"sexual",
|
|
69
|
+
"nudity",
|
|
70
|
+
"nsfl",
|
|
71
|
+
"gore"
|
|
72
|
+
]
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "com.atproto.moderation.defs",
|
|
4
|
+
"defs": {
|
|
5
|
+
"reasonType": {
|
|
6
|
+
"type": "string",
|
|
7
|
+
"knownValues": [
|
|
8
|
+
"com.atproto.moderation.defs#reasonSpam",
|
|
9
|
+
"com.atproto.moderation.defs#reasonViolation",
|
|
10
|
+
"com.atproto.moderation.defs#reasonMisleading",
|
|
11
|
+
"com.atproto.moderation.defs#reasonSexual",
|
|
12
|
+
"com.atproto.moderation.defs#reasonRude",
|
|
13
|
+
"com.atproto.moderation.defs#reasonOther",
|
|
14
|
+
"com.atproto.moderation.defs#reasonAppeal"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"reasonSpam": { "type": "token", "description": "Spam: frequent unwanted promotion, replies, mentions." },
|
|
18
|
+
"reasonViolation": { "type": "token", "description": "Direct violation of server rules, laws, terms of service." },
|
|
19
|
+
"reasonMisleading": { "type": "token", "description": "Misleading identity, affiliation, or content." },
|
|
20
|
+
"reasonSexual": { "type": "token", "description": "Unwanted or mislabeled sexual content." },
|
|
21
|
+
"reasonRude": { "type": "token", "description": "Rude, harassing, explicit, or otherwise unwelcoming behavior." },
|
|
22
|
+
"reasonOther": { "type": "token", "description": "Reports not falling under another report category." },
|
|
23
|
+
"reasonAppeal": { "type": "token", "description": "Appeal a previously taken moderation action." },
|
|
24
|
+
"subjectType": {
|
|
25
|
+
"type": "string",
|
|
26
|
+
"description": "Tag describing a type of subject that might be reported.",
|
|
27
|
+
"knownValues": ["account", "record", "chat"]
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "com.atproto.repo.strongRef",
|
|
4
|
+
"description": "A URI with a content-hash fingerprint.",
|
|
5
|
+
"defs": {
|
|
6
|
+
"main": {
|
|
7
|
+
"type": "object",
|
|
8
|
+
"required": [
|
|
9
|
+
"uri",
|
|
10
|
+
"cid"
|
|
11
|
+
],
|
|
12
|
+
"properties": {
|
|
13
|
+
"uri": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"format": "at-uri"
|
|
16
|
+
},
|
|
17
|
+
"cid": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"format": "cid"
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.createRecord",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "procedure",
|
|
7
|
+
"description": "Create a record via the user's PDS.",
|
|
8
|
+
"input": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["collection", "repo", "record"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"collection": { "type": "string" },
|
|
15
|
+
"repo": { "type": "string", "format": "did" },
|
|
16
|
+
"record": { "type": "unknown" }
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"output": {
|
|
21
|
+
"encoding": "application/json",
|
|
22
|
+
"schema": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"properties": {
|
|
25
|
+
"uri": { "type": "string", "format": "at-uri" },
|
|
26
|
+
"cid": { "type": "string", "format": "cid" },
|
|
27
|
+
"commit": {
|
|
28
|
+
"type": "object",
|
|
29
|
+
"properties": {
|
|
30
|
+
"cid": { "type": "string", "format": "cid" },
|
|
31
|
+
"rev": { "type": "string" }
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"validationStatus": { "type": "string" }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.createReport",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "procedure",
|
|
7
|
+
"description": "Report an account or record for moderation review.",
|
|
8
|
+
"input": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["subject", "label"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"subject": {
|
|
15
|
+
"type": "union",
|
|
16
|
+
"description": "The account or record being reported.",
|
|
17
|
+
"refs": ["#repoRef", "com.atproto.repo.strongRef"]
|
|
18
|
+
},
|
|
19
|
+
"label": { "type": "string", "description": "Label identifier for the report reason." },
|
|
20
|
+
"reason": { "type": "string", "maxLength": 2000, "description": "Optional free-text explanation." }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"output": {
|
|
25
|
+
"encoding": "application/json",
|
|
26
|
+
"schema": {
|
|
27
|
+
"type": "object",
|
|
28
|
+
"required": ["id", "subject", "label", "reportedBy", "createdAt"],
|
|
29
|
+
"properties": {
|
|
30
|
+
"id": { "type": "integer" },
|
|
31
|
+
"subject": { "type": "unknown" },
|
|
32
|
+
"label": { "type": "string" },
|
|
33
|
+
"reason": { "type": "string" },
|
|
34
|
+
"reportedBy": { "type": "string", "format": "did" },
|
|
35
|
+
"createdAt": { "type": "string", "format": "datetime" }
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"repoRef": {
|
|
41
|
+
"type": "object",
|
|
42
|
+
"required": ["did"],
|
|
43
|
+
"properties": {
|
|
44
|
+
"did": { "type": "string", "format": "did" }
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.deleteRecord",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "procedure",
|
|
7
|
+
"description": "Delete a record via the user's PDS.",
|
|
8
|
+
"input": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["collection", "rkey"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"collection": { "type": "string" },
|
|
15
|
+
"rkey": { "type": "string" }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"output": {
|
|
20
|
+
"encoding": "application/json",
|
|
21
|
+
"schema": { "type": "object", "properties": {} }
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.describeCollections",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "List indexed collections and their schemas.",
|
|
8
|
+
"output": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"collections": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["collection"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"collection": { "type": "string" },
|
|
20
|
+
"columns": {
|
|
21
|
+
"type": "array",
|
|
22
|
+
"items": {
|
|
23
|
+
"type": "object",
|
|
24
|
+
"required": ["name", "originalName", "type", "required"],
|
|
25
|
+
"properties": {
|
|
26
|
+
"name": { "type": "string" },
|
|
27
|
+
"originalName": { "type": "string" },
|
|
28
|
+
"type": { "type": "string" },
|
|
29
|
+
"required": { "type": "boolean" }
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.describeFeeds",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "List available feeds.",
|
|
8
|
+
"output": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"feeds": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": {
|
|
16
|
+
"type": "object",
|
|
17
|
+
"required": ["name", "label"],
|
|
18
|
+
"properties": {
|
|
19
|
+
"name": { "type": "string" },
|
|
20
|
+
"label": { "type": "string" }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.describeLabels",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "List available label definitions.",
|
|
8
|
+
"output": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"definitions": {
|
|
14
|
+
"type": "array",
|
|
15
|
+
"items": { "type": "ref", "ref": "#labelDefinition" }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"labelDefinition": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": ["identifier", "severity", "blurs", "defaultSetting"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"identifier": { "type": "string" },
|
|
26
|
+
"severity": { "type": "string" },
|
|
27
|
+
"blurs": { "type": "string" },
|
|
28
|
+
"defaultSetting": { "type": "string" },
|
|
29
|
+
"locales": {
|
|
30
|
+
"type": "array",
|
|
31
|
+
"items": { "type": "ref", "ref": "#labelLocale" }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"labelLocale": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"required": ["lang", "name", "description"],
|
|
38
|
+
"properties": {
|
|
39
|
+
"lang": { "type": "string" },
|
|
40
|
+
"name": { "type": "string" },
|
|
41
|
+
"description": { "type": "string" }
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.getFeed",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "Retrieve a named feed of items.",
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "params",
|
|
10
|
+
"required": ["feed"],
|
|
11
|
+
"properties": {
|
|
12
|
+
"feed": { "type": "string", "description": "Feed name" },
|
|
13
|
+
"limit": { "type": "integer", "minimum": 1, "maximum": 100, "default": 30 },
|
|
14
|
+
"cursor": { "type": "string" }
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"output": {
|
|
18
|
+
"encoding": "application/json",
|
|
19
|
+
"schema": {
|
|
20
|
+
"type": "object",
|
|
21
|
+
"required": ["items"],
|
|
22
|
+
"properties": {
|
|
23
|
+
"items": { "type": "array", "items": { "type": "unknown" } },
|
|
24
|
+
"cursor": { "type": "string" }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.getPreferences",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "Get all preferences for the authenticated user.",
|
|
8
|
+
"output": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"properties": {
|
|
13
|
+
"preferences": { "type": "unknown" }
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.getRecord",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "Fetch a single record by AT URI.",
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "params",
|
|
10
|
+
"required": ["uri"],
|
|
11
|
+
"properties": {
|
|
12
|
+
"uri": { "type": "string", "format": "at-uri" }
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"output": {
|
|
16
|
+
"encoding": "application/json",
|
|
17
|
+
"schema": {
|
|
18
|
+
"type": "object",
|
|
19
|
+
"properties": {
|
|
20
|
+
"record": { "type": "unknown" }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.getRecords",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "query",
|
|
7
|
+
"description": "List records from a collection with optional filters.",
|
|
8
|
+
"parameters": {
|
|
9
|
+
"type": "params",
|
|
10
|
+
"required": ["collection"],
|
|
11
|
+
"properties": {
|
|
12
|
+
"collection": { "type": "string" },
|
|
13
|
+
"limit": { "type": "integer", "minimum": 1, "maximum": 100, "default": 20 },
|
|
14
|
+
"cursor": { "type": "string" },
|
|
15
|
+
"sort": { "type": "string" },
|
|
16
|
+
"order": { "type": "string" }
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"output": {
|
|
20
|
+
"encoding": "application/json",
|
|
21
|
+
"schema": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"required": ["items"],
|
|
24
|
+
"properties": {
|
|
25
|
+
"items": { "type": "array", "items": { "type": "unknown" } },
|
|
26
|
+
"cursor": { "type": "string" }
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"lexicon": 1,
|
|
3
|
+
"id": "dev.hatk.putPreference",
|
|
4
|
+
"defs": {
|
|
5
|
+
"main": {
|
|
6
|
+
"type": "procedure",
|
|
7
|
+
"description": "Set a single preference by key.",
|
|
8
|
+
"input": {
|
|
9
|
+
"encoding": "application/json",
|
|
10
|
+
"schema": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"required": ["key", "value"],
|
|
13
|
+
"properties": {
|
|
14
|
+
"key": { "type": "string" },
|
|
15
|
+
"value": { "type": "unknown" }
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"output": {
|
|
20
|
+
"encoding": "application/json",
|
|
21
|
+
"schema": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"properties": {}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|