@hatk/hatk 0.0.1-alpha.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/backfill.d.ts +11 -0
- package/dist/backfill.d.ts.map +1 -0
- package/dist/backfill.js +328 -0
- package/dist/car.d.ts +5 -0
- package/dist/car.d.ts.map +1 -0
- package/dist/car.js +52 -0
- package/dist/cbor.d.ts +7 -0
- package/dist/cbor.d.ts.map +1 -0
- package/dist/cbor.js +89 -0
- package/dist/cid.d.ts +4 -0
- package/dist/cid.d.ts.map +1 -0
- package/dist/cid.js +39 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +1663 -0
- package/dist/config.d.ts +47 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +43 -0
- package/dist/db.d.ts +134 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +1361 -0
- package/dist/feeds.d.ts +95 -0
- package/dist/feeds.d.ts.map +1 -0
- package/dist/feeds.js +144 -0
- package/dist/fts.d.ts +20 -0
- package/dist/fts.d.ts.map +1 -0
- package/dist/fts.js +762 -0
- package/dist/hydrate.d.ts +23 -0
- package/dist/hydrate.d.ts.map +1 -0
- package/dist/hydrate.js +75 -0
- package/dist/indexer.d.ts +14 -0
- package/dist/indexer.d.ts.map +1 -0
- package/dist/indexer.js +316 -0
- package/dist/labels.d.ts +29 -0
- package/dist/labels.d.ts.map +1 -0
- package/dist/labels.js +111 -0
- package/dist/lex-types.d.ts +401 -0
- package/dist/lex-types.d.ts.map +1 -0
- package/dist/lex-types.js +4 -0
- package/dist/lexicon-resolve.d.ts +14 -0
- package/dist/lexicon-resolve.d.ts.map +1 -0
- package/dist/lexicon-resolve.js +280 -0
- package/dist/logger.d.ts +4 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +23 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +148 -0
- package/dist/mst.d.ts +6 -0
- package/dist/mst.d.ts.map +1 -0
- package/dist/mst.js +30 -0
- package/dist/oauth/client.d.ts +16 -0
- package/dist/oauth/client.d.ts.map +1 -0
- package/dist/oauth/client.js +54 -0
- package/dist/oauth/crypto.d.ts +28 -0
- package/dist/oauth/crypto.d.ts.map +1 -0
- package/dist/oauth/crypto.js +101 -0
- package/dist/oauth/db.d.ts +47 -0
- package/dist/oauth/db.d.ts.map +1 -0
- package/dist/oauth/db.js +139 -0
- package/dist/oauth/discovery.d.ts +22 -0
- package/dist/oauth/discovery.d.ts.map +1 -0
- package/dist/oauth/discovery.js +50 -0
- package/dist/oauth/dpop.d.ts +11 -0
- package/dist/oauth/dpop.d.ts.map +1 -0
- package/dist/oauth/dpop.js +56 -0
- package/dist/oauth/hooks.d.ts +10 -0
- package/dist/oauth/hooks.d.ts.map +1 -0
- package/dist/oauth/hooks.js +40 -0
- package/dist/oauth/server.d.ts +86 -0
- package/dist/oauth/server.d.ts.map +1 -0
- package/dist/oauth/server.js +572 -0
- package/dist/opengraph.d.ts +34 -0
- package/dist/opengraph.d.ts.map +1 -0
- package/dist/opengraph.js +198 -0
- package/dist/schema.d.ts +51 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +358 -0
- package/dist/seed.d.ts +29 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +86 -0
- package/dist/server.d.ts +6 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +1024 -0
- package/dist/setup.d.ts +8 -0
- package/dist/setup.d.ts.map +1 -0
- package/dist/setup.js +48 -0
- package/dist/test-browser.d.ts +14 -0
- package/dist/test-browser.d.ts.map +1 -0
- package/dist/test-browser.js +26 -0
- package/dist/test.d.ts +47 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +256 -0
- package/dist/views.d.ts +40 -0
- package/dist/views.d.ts.map +1 -0
- package/dist/views.js +178 -0
- package/dist/vite-plugin.d.ts +5 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +86 -0
- package/dist/xrpc-client.d.ts +18 -0
- package/dist/xrpc-client.d.ts.map +1 -0
- package/dist/xrpc-client.js +54 -0
- package/dist/xrpc.d.ts +53 -0
- package/dist/xrpc.d.ts.map +1 -0
- package/dist/xrpc.js +139 -0
- package/fonts/Inter-Regular.woff +0 -0
- package/package.json +41 -0
- package/public/admin-auth.js +320 -0
- package/public/admin.html +2166 -0
package/dist/seed.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { loadLexicons } from "./schema.js";
|
|
2
|
+
import { validateRecord } from '@bigmoves/lexicon';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
import { readFileSync } from 'node:fs';
|
|
5
|
+
export function seed(opts) {
|
|
6
|
+
const pdsUrl = opts?.pds || process.env.PDS_URL || 'http://localhost:2583';
|
|
7
|
+
const password = opts?.password || process.env.SEED_PASSWORD || 'password';
|
|
8
|
+
const lexiconsDir = resolve(opts?.lexicons || 'lexicons');
|
|
9
|
+
const lexiconArray = [...loadLexicons(lexiconsDir).values()];
|
|
10
|
+
async function createAccount(handle) {
|
|
11
|
+
const res = await fetch(`${pdsUrl}/xrpc/com.atproto.server.createAccount`, {
|
|
12
|
+
method: 'POST',
|
|
13
|
+
headers: { 'Content-Type': 'application/json' },
|
|
14
|
+
body: JSON.stringify({ handle, password, email: `${handle.split('.')[0]}@test.invalid` }),
|
|
15
|
+
});
|
|
16
|
+
if (res.ok) {
|
|
17
|
+
console.log(`[seed] created account: ${handle}`);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
const text = await res.text();
|
|
21
|
+
if (!text.includes('already') && !text.includes('taken')) {
|
|
22
|
+
throw new Error(`Failed to create account ${handle}: ${text}`);
|
|
23
|
+
}
|
|
24
|
+
console.log(`[seed] account exists: ${handle}`);
|
|
25
|
+
}
|
|
26
|
+
const sessionRes = await fetch(`${pdsUrl}/xrpc/com.atproto.server.createSession`, {
|
|
27
|
+
method: 'POST',
|
|
28
|
+
headers: { 'Content-Type': 'application/json' },
|
|
29
|
+
body: JSON.stringify({ identifier: handle, password }),
|
|
30
|
+
});
|
|
31
|
+
if (!sessionRes.ok) {
|
|
32
|
+
throw new Error(`Failed to create session for ${handle}: ${await sessionRes.text()}`);
|
|
33
|
+
}
|
|
34
|
+
const session = (await sessionRes.json());
|
|
35
|
+
return { ...session, handle };
|
|
36
|
+
}
|
|
37
|
+
async function createRecord(session, collection, record, opts) {
|
|
38
|
+
const error = validateRecord(lexiconArray, collection, record);
|
|
39
|
+
if (error) {
|
|
40
|
+
throw new Error(`[seed] validation error in ${collection}: ${error.path ? error.path + ': ' : ''}${error.message}`);
|
|
41
|
+
}
|
|
42
|
+
const body = {
|
|
43
|
+
repo: session.did,
|
|
44
|
+
collection,
|
|
45
|
+
rkey: opts.rkey,
|
|
46
|
+
record: { $type: collection, ...record },
|
|
47
|
+
};
|
|
48
|
+
const res = await fetch(`${pdsUrl}/xrpc/com.atproto.repo.putRecord`, {
|
|
49
|
+
method: 'POST',
|
|
50
|
+
headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${session.accessJwt}` },
|
|
51
|
+
body: JSON.stringify(body),
|
|
52
|
+
});
|
|
53
|
+
if (!res.ok) {
|
|
54
|
+
throw new Error(`[seed] [${session.handle}] failed to create ${collection}: ${await res.text()}`);
|
|
55
|
+
}
|
|
56
|
+
const { uri, cid } = (await res.json());
|
|
57
|
+
console.log(`[seed] [${session.handle}] ${collection} → ${uri}`);
|
|
58
|
+
return { uri, cid };
|
|
59
|
+
}
|
|
60
|
+
async function uploadBlob(session, filePath) {
|
|
61
|
+
const data = readFileSync(resolve(filePath));
|
|
62
|
+
const ext = filePath.split('.').pop()?.toLowerCase() || '';
|
|
63
|
+
const mimeTypes = {
|
|
64
|
+
png: 'image/png',
|
|
65
|
+
jpg: 'image/jpeg',
|
|
66
|
+
jpeg: 'image/jpeg',
|
|
67
|
+
gif: 'image/gif',
|
|
68
|
+
webp: 'image/webp',
|
|
69
|
+
mp3: 'audio/mpeg',
|
|
70
|
+
mp4: 'video/mp4',
|
|
71
|
+
};
|
|
72
|
+
const mimeType = mimeTypes[ext] || 'application/octet-stream';
|
|
73
|
+
const res = await fetch(`${pdsUrl}/xrpc/com.atproto.repo.uploadBlob`, {
|
|
74
|
+
method: 'POST',
|
|
75
|
+
headers: { 'Content-Type': mimeType, Authorization: `Bearer ${session.accessJwt}` },
|
|
76
|
+
body: data,
|
|
77
|
+
});
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
throw new Error(`[seed] failed to upload blob ${filePath}: ${await res.text()}`);
|
|
80
|
+
}
|
|
81
|
+
const { blob } = (await res.json());
|
|
82
|
+
console.log(`[seed] [${session.handle}] uploaded ${filePath} (${data.length} bytes)`);
|
|
83
|
+
return blob;
|
|
84
|
+
}
|
|
85
|
+
return { createAccount, createRecord, uploadBlob };
|
|
86
|
+
}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Server, type IncomingMessage } from 'node:http';
|
|
2
|
+
import type { OAuthConfig } from './config.ts';
|
|
3
|
+
export declare function startServer(port: number, collections: string[], publicDir: string | null, oauth: OAuthConfig | null, admins?: string[], resolveViewer?: (req: IncomingMessage) => {
|
|
4
|
+
did: string;
|
|
5
|
+
} | null): Server;
|
|
6
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,KAAK,eAAe,EAAE,MAAM,WAAW,CAAA;AAiD3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AA2B9C,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,GAAG,IAAI,EACxB,KAAK,EAAE,WAAW,GAAG,IAAI,EACzB,MAAM,GAAE,MAAM,EAAO,EACrB,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC/D,MAAM,CAm7BR"}
|