@hatk/hatk 0.0.1-alpha.44 → 0.0.1-alpha.45

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/cli.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { mkdirSync, writeFileSync, existsSync, unlinkSync, readdirSync, readFileSync, cpSync } from 'node:fs';
2
+ import { mkdirSync, writeFileSync, existsSync, unlinkSync, readdirSync, readFileSync } from 'node:fs';
3
3
  import { resolve, join } from 'node:path';
4
4
  import { execSync, spawn } from 'node:child_process';
5
5
  import { loadLexicons } from "./database/schema.js";
@@ -69,9 +69,6 @@ function usage() {
69
69
  console.log(`
70
70
  Usage: hatk <command> [options]
71
71
 
72
- Getting Started
73
- new <name> [--svelte] [--duckdb] [--template <t>] Create a new hatk project
74
-
75
72
  Running
76
73
  start Start the hatk server
77
74
  dev Start PDS, seed, and run hatk
@@ -192,493 +189,12 @@ const dirs = {
192
189
  };
193
190
  // --- Commands ---
194
191
  if (command === 'new') {
195
- const name = args[1];
196
- if (!name) {
197
- console.error('Usage: hatk new <name> [--svelte] [--duckdb] [--template <template-name>]');
198
- process.exit(1);
199
- }
200
- const templateIdx = args.indexOf('--template');
201
- const templateName = templateIdx !== -1 ? args[templateIdx + 1] : null;
202
- if (templateIdx !== -1 && !templateName) {
203
- console.error('Usage: hatk new <name> --template <template-name>');
204
- process.exit(1);
205
- }
206
- const dir = resolve(name);
207
- if (existsSync(dir)) {
208
- console.error(`Directory ${name} already exists`);
209
- process.exit(1);
210
- }
211
- if (templateName) {
212
- const repo = `https://github.com/hatk-dev/hatk-template-${templateName}.git`;
213
- console.log(`Cloning template ${templateName}...`);
214
- try {
215
- execSync(`git clone --depth 1 ${repo} ${dir}`, { stdio: 'inherit' });
216
- }
217
- catch {
218
- console.error(`Failed to clone template: ${repo}`);
219
- process.exit(1);
220
- }
221
- execSync(`rm -rf ${join(dir, '.git')}`);
222
- const pkgPath = join(dir, 'package.json');
223
- if (existsSync(pkgPath)) {
224
- const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
225
- pkg.name = name;
226
- writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
227
- }
228
- console.log(`\nCreated ${name}/ from template ${templateName}`);
229
- console.log(`\n cd ${name}`);
230
- console.log(` npm install`);
231
- console.log(` hatk dev`);
232
- process.exit(0);
233
- }
234
- const withSvelte = args.includes('--svelte');
235
- const withDuckdb = args.includes('--duckdb');
236
- const dbEngine = withDuckdb ? 'duckdb' : 'sqlite';
237
- mkdirSync(dir);
238
- const subs = [
239
- 'lexicons',
240
- 'server',
241
- 'seeds',
242
- 'public',
243
- 'test',
244
- 'test/server',
245
- 'test/integration',
246
- 'test/browser',
247
- 'test/fixtures',
248
- ];
249
- if (withSvelte)
250
- subs.push('src', 'src/routes', 'src/lib');
251
- for (const sub of subs) {
252
- mkdirSync(join(dir, sub));
253
- }
254
- writeFileSync(join(dir, 'hatk.config.ts'), `import { defineConfig } from '@hatk/hatk/config'
255
-
256
- export default defineConfig({
257
- relay: 'ws://localhost:2583',
258
- plc: 'http://localhost:2582',
259
- port: 3000,
260
- databaseEngine: '${dbEngine}',
261
- database: 'data/hatk.db',
262
- admins: [],
263
- backfill: {
264
- parallelism: 10,
265
- },
266
- })
267
- `);
268
- writeFileSync(join(dir, 'public', 'index.html'), `<!DOCTYPE html>
269
- <html><head><title>${name}</title></head>
270
- <body><h1>${name}</h1></body></html>
271
- `);
272
- // Copy core framework lexicons (dev.hatk.* and dependencies like com.atproto.repo.strongRef)
273
- const builtinLexDir = join(import.meta.dirname, 'lexicons');
274
- cpSync(builtinLexDir, join(dir, 'lexicons'), { recursive: true });
275
- writeFileSync(join(dir, 'seeds', 'seed.ts'), loadTemplate('seed.tpl', ''));
276
- writeFileSync(join(dir, 'docker-compose.yml'), `services:
277
- plc:
278
- build:
279
- context: https://github.com/did-method-plc/did-method-plc.git
280
- dockerfile: packages/server/Dockerfile
281
- ports:
282
- - '2582:2582'
283
- environment:
284
- - DATABASE_URL=postgres://plc:plc@postgres:5432/plc
285
- - PORT=2582
286
- command: ['dumb-init', 'node', '--enable-source-maps', '../dist/bin.js']
287
- depends_on:
288
- postgres:
289
- condition: service_healthy
290
- healthcheck:
291
- test: ['CMD-SHELL', 'wget -q --spider http://localhost:2582/_health || exit 1']
292
- interval: 2s
293
- timeout: 5s
294
- retries: 15
295
-
296
- pds:
297
- image: ghcr.io/bluesky-social/pds:latest
298
- ports:
299
- - '2583:2583'
300
- environment:
301
- - PDS_HOSTNAME=localhost
302
- - PDS_PORT=2583
303
- - PDS_DID_PLC_URL=http://plc:2582
304
- - PDS_DATA_DIRECTORY=/pds
305
- - PDS_BLOBSTORE_DISK_LOCATION=/pds/blobs
306
- - PDS_JWT_SECRET=dev-jwt-secret
307
- - PDS_ADMIN_PASSWORD=dev-admin
308
- - PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
309
- - PDS_INVITE_REQUIRED=false
310
- - PDS_DEV_MODE=true
311
- - LOG_ENABLED=true
312
- volumes:
313
- - pds_data:/pds
314
- depends_on:
315
- plc:
316
- condition: service_healthy
317
- healthcheck:
318
- test: ['CMD-SHELL', 'wget -q --spider http://localhost:2583/xrpc/_health || exit 1']
319
- interval: 2s
320
- timeout: 5s
321
- retries: 15
322
-
323
- postgres:
324
- image: postgres:16-alpine
325
- environment:
326
- - POSTGRES_USER=plc
327
- - POSTGRES_PASSWORD=plc
328
- - POSTGRES_DB=plc
329
- volumes:
330
- - plc_data:/var/lib/postgresql/data
331
- healthcheck:
332
- test: ['CMD-SHELL', 'pg_isready -U plc']
333
- interval: 2s
334
- timeout: 5s
335
- retries: 10
336
-
337
- volumes:
338
- pds_data:
339
- plc_data:
340
- `);
341
- writeFileSync(join(dir, '.dockerignore'), `node_modules
342
- data
343
- .svelte-kit
344
- public
345
- `);
346
- writeFileSync(join(dir, 'Dockerfile'), `FROM node:25-slim
347
- WORKDIR /app
348
- COPY package.json package-lock.json ./
349
- RUN npm ci
350
- COPY . .
351
- RUN node_modules/.bin/hatk build
352
- RUN npm prune --omit=dev
353
- EXPOSE 3000
354
- CMD ["node", "--experimental-strip-types", "--max-old-space-size=512", "node_modules/@hatk/hatk/dist/main.js", "hatk.config.ts"]
355
- `);
356
- const pkgDeps = { '@hatk/oauth-client': '*', hatk: '*' };
357
- if (!withDuckdb) {
358
- pkgDeps['better-sqlite3'] = '^11';
359
- }
360
- const pkgDevDeps = {
361
- '@playwright/test': '^1',
362
- oxfmt: '^0.35.0',
363
- oxlint: '^1',
364
- typescript: '^5',
365
- vite: '^6',
366
- vitest: '^4',
367
- '@types/node': '^22',
368
- };
369
- if (withSvelte) {
370
- pkgDevDeps['@sveltejs/adapter-static'] = '^3';
371
- pkgDevDeps['@sveltejs/kit'] = '^2';
372
- pkgDevDeps['@sveltejs/vite-plugin-svelte'] = '^5';
373
- pkgDevDeps['svelte'] = '^5';
374
- pkgDevDeps['svelte-check'] = '^4';
375
- }
376
- writeFileSync(join(dir, 'package.json'), JSON.stringify({
377
- name,
378
- private: true,
379
- type: 'module',
380
- scripts: {
381
- start: 'hatk start',
382
- dev: 'hatk dev',
383
- build: 'hatk build',
384
- check: 'hatk check',
385
- format: 'hatk format',
386
- },
387
- dependencies: pkgDeps,
388
- devDependencies: pkgDevDeps,
389
- }, null, 2) + '\n');
390
- writeFileSync(join(dir, 'tsconfig.server.json'), JSON.stringify({
391
- compilerOptions: {
392
- target: 'ES2022',
393
- module: 'Node16',
394
- moduleResolution: 'Node16',
395
- strict: true,
396
- esModuleInterop: true,
397
- skipLibCheck: true,
398
- noEmit: true,
399
- allowImportingTsExtensions: true,
400
- resolveJsonModule: true,
401
- },
402
- include: ['server', 'seeds', 'hatk.generated.ts', 'hatk.config.ts'],
403
- }, null, 2) + '\n');
404
- writeFileSync(join(dir, 'playwright.config.ts'), `import { defineConfig } from '@playwright/test'
405
-
406
- export default defineConfig({
407
- testDir: 'test/browser',
408
- use: { baseURL: 'http://127.0.0.1:3000' },
409
- globalSetup: './test/browser/global-setup.ts',
410
- })
411
- `);
412
- writeFileSync(join(dir, 'test/browser/global-setup.ts'), `import { execSync } from 'node:child_process'
413
- import { existsSync } from 'node:fs'
414
-
415
- export default function globalSetup() {
416
- if (existsSync('src/app.html')) {
417
- execSync('npx vite build', { stdio: 'inherit' })
418
- }
419
- }
420
- `);
421
- writeFileSync(join(dir, '.gitignore'), `node_modules/
422
- *.db
423
- data/
424
- test-results/
425
- .svelte-kit/
426
- .DS_Store
427
- public/
428
- `);
429
- writeFileSync(join(dir, '.oxlintrc.json'), `{
430
- "ignorePatterns": ["public", "data", ".svelte-kit", "hatk.generated.ts"]
431
- }
432
- `);
433
- writeFileSync(join(dir, '.oxfmtrc.json'), `{
434
- "semi": false,
435
- "singleQuote": true,
436
- "trailingComma": "all",
437
- "printWidth": 120,
438
- "tabWidth": 2,
439
- "ignorePatterns": ["public", "data", ".svelte-kit", "hatk.generated.ts"]
440
- }
441
- `);
442
- if (withSvelte) {
443
- writeFileSync(join(dir, 'svelte.config.js'), `import adapter from '@sveltejs/adapter-static'
444
-
445
- export default {
446
- kit: {
447
- adapter: adapter({
448
- pages: 'public',
449
- assets: 'public',
450
- fallback: 'index.html',
451
- }),
452
- paths: { base: '' },
453
- alias: {
454
- $hatk: './hatk.generated.ts',
455
- },
456
- },
457
- }
458
- `);
459
- writeFileSync(join(dir, 'vite.config.ts'), `import { sveltekit } from '@sveltejs/kit/vite'
460
- import { hatk } from '@hatk/hatk/vite-plugin'
461
- import { defineConfig } from 'vite'
462
-
463
- export default defineConfig({
464
- plugins: [sveltekit(), hatk()],
465
- })
466
- `);
467
- writeFileSync(join(dir, 'tsconfig.json'), JSON.stringify({
468
- extends: './.svelte-kit/tsconfig.json',
469
- compilerOptions: {
470
- allowJs: true,
471
- checkJs: false,
472
- esModuleInterop: true,
473
- forceConsistentCasingInFileNames: true,
474
- resolveJsonModule: true,
475
- skipLibCheck: true,
476
- sourceMap: true,
477
- strict: true,
478
- moduleResolution: 'bundler',
479
- allowImportingTsExtensions: true,
480
- },
481
- }, null, 2) + '\n');
482
- writeFileSync(join(dir, 'src/app.html'), `<!doctype html>
483
- <html lang="en">
484
- <head>
485
- <meta charset="utf-8" />
486
- <meta name="viewport" content="width=device-width, initial-scale=1" />
487
- <meta name="description" content="${name}" />
488
- <title>${name}</title>
489
- %sveltekit.head%
490
- </head>
491
- <body data-sveltekit-preload-data="hover">
492
- <div style="display: contents">%sveltekit.body%</div>
493
- </body>
494
- </html>
495
- `);
496
- writeFileSync(join(dir, 'src/app.css'), `*,
497
- *::before,
498
- *::after {
499
- box-sizing: border-box;
500
- margin: 0;
501
- padding: 0;
502
- }
503
-
504
- :root {
505
- --bg-root: #080b12;
506
- --bg-surface: #0f1419;
507
- --bg-elevated: #161d27;
508
- --bg-hover: #1c2633;
509
- --border: #1e293b;
510
- --teal: #14b8a6;
511
- --text-primary: #e2e8f0;
512
- --text-secondary: #94a3b8;
513
- --text-muted: #64748b;
514
- }
515
-
516
- html {
517
- background: var(--bg-root);
518
- color: var(--text-primary);
519
- }
520
-
521
- body {
522
- font-family: -apple-system, system-ui, sans-serif;
523
- font-size: 15px;
524
- line-height: 1.5;
525
- min-height: 100vh;
526
- }
527
-
528
- a {
529
- color: inherit;
530
- text-decoration: none;
531
- }
532
- `);
533
- writeFileSync(join(dir, 'src/routes/+layout.svelte'), `<script lang="ts">
534
- import type { Snippet } from 'svelte'
535
- import '../app.css'
536
-
537
- let { children }: { children: Snippet } = $props()
538
- </script>
539
-
540
- {@render children()}
541
- `);
542
- writeFileSync(join(dir, 'src/routes/+page.svelte'), `<h1>${name}</h1>
543
- <p>Your hatk server is running.</p>
544
- `);
545
- writeFileSync(join(dir, 'src/error.html'), `<!doctype html>
546
- <html lang="en">
547
- <head>
548
- <meta charset="utf-8" />
549
- <meta name="viewport" content="width=device-width, initial-scale=1" />
550
- <title>%sveltekit.error.message% — ${name}</title>
551
- <style>
552
- * { box-sizing: border-box; margin: 0; padding: 0; }
553
- body {
554
- font-family: -apple-system, system-ui, sans-serif;
555
- background: #080b12; color: #e2e8f0;
556
- min-height: 100vh; display: flex; align-items: center; justify-content: center;
557
- }
558
- .error-page { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 8px; padding: 24px; }
559
- .error-code { font-size: 72px; font-weight: 800; color: #14b8a6; line-height: 1; }
560
- .error-title { font-size: 24px; font-weight: 800; }
561
- .error-link {
562
- margin-top: 16px; padding: 10px 24px; background: #14b8a6; color: #000;
563
- border-radius: 20px; font-weight: 600; font-size: 14px; text-decoration: none;
564
- }
565
- </style>
566
- </head>
567
- <body>
568
- <div class="error-page">
569
- <span class="error-code">%sveltekit.status%</span>
570
- <h1 class="error-title">%sveltekit.error.message%</h1>
571
- <a href="/" class="error-link">Back to home</a>
572
- </div>
573
- </body>
574
- </html>
575
- `);
576
- writeFileSync(join(dir, 'src/routes/+error.svelte'), `<script lang="ts">
577
- import { page } from '$app/state'
578
- </script>
579
-
580
- <div style="display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: 80vh; gap: 8px;">
581
- <span style="font-size: 72px; font-weight: 800; color: var(--teal);">{page.status}</span>
582
- <h1 style="font-size: 24px; font-weight: 800;">{page.error?.message}</h1>
583
- <a href="/" style="margin-top: 16px; padding: 10px 24px; background: var(--teal); color: #000; border-radius: 20px; font-weight: 600; font-size: 14px;">Back to home</a>
584
- </div>
585
- `);
586
- }
587
- let agentsMd = `# hatk project
588
-
589
- This is an AT Protocol application built with [hatk](https://github.com/hatk-dev/hatk).
590
- Read the project's lexicons in \`lexicons/\` to understand the data model.
591
- Types are generated from lexicons into \`hatk.generated.ts\` — never edit this file directly.
592
-
593
- ## Project structure
594
-
595
- | Directory | Purpose |
596
- |-------------|------------------------------------------------------|
597
- | \`lexicons/\` | AT Protocol lexicon schemas (JSON). Defines collections and XRPC methods |
598
- | \`server/\` | All server-side code: feeds, XRPC handlers, hooks, labels, OG routes, setup scripts |
599
- | \`seeds/\` | Test data seeding scripts for local development |
600
- | \`test/\` | Test files (vitest). Run with \`vp test\` |
601
- | \`public/\` | Static files served at the root |
602
- `;
603
- if (withSvelte) {
604
- agentsMd += `| \`src/\` | SvelteKit frontend (routes, components, styles) |
605
-
606
- `;
607
- }
608
- else {
609
- agentsMd += `
610
- `;
611
- }
612
- agentsMd += `## Key files
613
-
614
- - \`hatk.config.ts\` — project configuration (see \`defineConfig\` for type info)
615
- - \`hatk.generated.ts\` — auto-generated server types and helpers. Regenerate with \`hatk generate types\`
616
- - \`hatk.generated.client.ts\` — auto-generated client-safe types and \`callXrpc\`. Never import \`hatk.generated.ts\` from frontend code
617
-
618
- ## The \`$hatk\` alias
619
-
620
- Server files in \`server/\` import from \`$hatk\`:
621
- \`\`\`ts
622
- import { defineFeed, views, type Status } from "$hatk"
623
- \`\`\`
624
- `;
625
- if (withSvelte) {
626
- agentsMd += `
627
- SvelteKit routes and components import from \`$hatk/client\`:
628
- \`\`\`ts
629
- import { callXrpc, getViewer } from "$hatk/client"
630
- \`\`\`
631
-
632
- \`$hatk\` resolves to \`hatk.generated.ts\` and \`$hatk/client\` to \`hatk.generated.client.ts\`.
633
- The Vite plugin handles this in dev/build. In tests and production, a Node.js module resolve hook handles it.
634
- `;
635
- }
636
- else {
637
- agentsMd += `
638
- \`$hatk\` resolves to \`hatk.generated.ts\`. The Vite plugin handles this in dev/build.
639
- In tests and production, a Node.js module resolve hook handles it.
640
- `;
641
- }
642
- agentsMd += `
643
- ## Commands
644
-
645
- Run \`npx hatk --help\` for the full list of commands.
646
-
647
- Use \`npx hatk generate\` to scaffold new feeds, xrpc handlers, labels, and lexicons
648
- rather than creating files manually. These generate files with the correct imports.
649
-
650
- After modifying lexicons, always run \`npx hatk generate types\` to update the generated types.
651
- `;
652
- if (withSvelte) {
653
- agentsMd += `
654
- ## Running
655
-
656
- - \`vp dev\` — start dev server (hatk + SvelteKit + PDS)
657
- - \`vp build\` — build for production (SvelteKit outputs to \`build/\`)
658
- - \`hatk start\` — start production server (hatk + SvelteKit via \`build/handler.js\`)
659
- - \`vp test\` — run tests
660
- `;
661
- }
662
- writeFileSync(join(dir, 'AGENTS.md'), agentsMd);
663
- console.log(`Created ${name}/`);
664
- console.log(` hatk.config.ts`);
665
- console.log(` lexicons/ — lexicon JSON files (core + your own)`);
666
- console.log(` server/ — feeds, XRPC handlers, hooks, labels, OG routes, setup`);
667
- console.log(` seeds/ — seed fixture data (hatk seed)`);
668
- console.log(` test/ — test files (hatk test)`);
669
- console.log(` public/ — static files`);
670
- console.log(` docker-compose.yml — local PDS for development`);
671
- console.log(` Dockerfile — production container`);
672
- if (withSvelte) {
673
- console.log(` src/ — SvelteKit frontend`);
674
- console.log(` svelte.config.js`);
675
- console.log(` vite.config.ts`);
676
- }
677
- // Generate types so the project is ready to go
678
- execSync('npx hatk generate types', { stdio: 'inherit', cwd: dir });
679
- if (withSvelte) {
680
- execSync('npx svelte-kit sync', { stdio: 'inherit', cwd: dir });
681
- }
192
+ console.error('`hatk new` has been removed. Create a new project with:');
193
+ console.error('');
194
+ console.error(' vp create github:hatk-dev/hatk-template-starter');
195
+ console.error('');
196
+ console.error('Install vp first: curl -fsSL https://vite.plus | bash');
197
+ process.exit(1);
682
198
  }
683
199
  else if (command === 'generate') {
684
200
  const type = args[1];
@@ -25,6 +25,8 @@ export declare function setRepoStatus(did: string, status: string, rev?: string,
25
25
  retryAfter?: number;
26
26
  handle?: string | null;
27
27
  }): Promise<void>;
28
+ /** Update the handle for a DID if it exists in _repos. */
29
+ export declare function updateRepoHandle(did: string, handle: string): Promise<void>;
28
30
  export declare function getRepoRev(did: string): Promise<string | null>;
29
31
  export declare function getRepoRetryInfo(did: string): Promise<{
30
32
  retryCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAkB,MAAM,aAAa,CAAA;AAC9D,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAI1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,EAAc,KAAK,UAAU,EAAE,MAAM,cAAc,CAAA;AAM1D,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AACD,wBAAgB,aAAa,IAAI,UAAU,CAE1C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC;AAMD,wBAAsB,QAAQ,CAAC,UAAU,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAcnG;AAMD,wBAAsB,YAAY,CAChC,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,WAAW,EAAE,EAC3B,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CAAC,IAAI,CAAC,CA0Gf;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAA;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAoED,wBAAsB,aAAa,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CA6F3F;AA0CD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGnE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGvE;AAED,wBAAsB,aAAa,CACjC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,CAAC,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC1E,OAAO,CAAC,IAAI,CAAC,CA0Bf;AAED,0DAA0D;AAC1D,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEjF;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGpE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAI9G;AAED,wBAAsB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOlF;AAED,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG1D;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAG5D;AAED,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3D;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAGvE;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAE3F;AAED,wBAAsB,kBAAkB,CACtC,IAAI,GAAE;IACJ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,CAAC,CAAC,EAAE,MAAM,CAAA;CACN,GACL,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B1C;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAO3E;AAED,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAK3E;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAcvE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI/D;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAQxF;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CAiCrD;AAED,wBAAgB,aAAa,CAC3B,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE,CA+BhC;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,IAAI,CAAC,CAqGf;AAWD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAED,wBAAsB,YAAY,CAChC,MAAM,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAClG,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EAAE,GACb,OAAO,CACR,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAAC,CAC7G,CAqBA;AAED,MAAM,WAAW,UAAU;IACzB,UAAU,EAAE,MAAM,CAAA;IAClB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAC5B;AAED,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAqN9E;AAuCD,UAAU,SAAS;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAA;CACvB;AAED,wBAAsB,YAAY,CAChC,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,SAAc,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAoF9C;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAgCrE;AAED,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAqCzF;AAED,qEAAqE;AACrE,wBAAsB,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CASjH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9D,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA2H9C;AAGD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAEtF;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,OAAO,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/E;AAED,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EAAE,EACjB,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,QAAQ,GAAG,SAAS,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAClE,OAAO,CAAC,OAAO,YAAY,EAAE,YAAY,CAAC,CAE5C;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAErE;AAED,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAKpG;AAED,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAc9B;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAKvG;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CA6B7B;AAED,wBAAsB,kBAAkB,CACtC,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CASpC;AAED,wBAAsB,eAAe,CACnC,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,GAC7C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxB;AAKD,wBAAgB,cAAc,CAAC,CAAC,EAAE,GAAG,GAAG,GAAG,CAI1C;AAED,wBAAsB,YAAY,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAW5G;AAED,wBAAgB,UAAU,CACxB,GAAG,EAAE,GAAG,EACR,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAC3C,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GACvD,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,CAiGrB;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhE;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CASpF;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAIlE;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAKtF;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAOxE;AAED,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAO3E;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGlE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAW9E;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvF;AAED,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAK9E;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE;IACzC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC,CAO1B;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CA8B7C;AAED,wBAAsB,aAAa,CACjC,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,UAAU,GAAG,WAAW,EAChC,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAevD;AAED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,CAAC,CAK1D"}
@@ -354,6 +354,10 @@ export async function setRepoStatus(did, status, rev, opts) {
354
354
  await run(`INSERT OR IGNORE INTO _repos (did, status) VALUES ($1, $2)`, [did, status]);
355
355
  }
356
356
  }
357
+ /** Update the handle for a DID if it exists in _repos. */
358
+ export async function updateRepoHandle(did, handle) {
359
+ await run(`UPDATE _repos SET handle = $1 WHERE did = $2`, [handle, did]);
360
+ }
357
361
  export async function getRepoRev(did) {
358
362
  const rows = await all(`SELECT rev FROM _repos WHERE did = $1`, [did]);
359
363
  return rows[0]?.rev ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAwJA;;;;;;;GAOG;AACH,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EjF;AAED,8CAA8C;AAC9C,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAyBD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAmDxE"}
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../src/indexer.ts"],"names":[],"mappings":"AAyJA;;;;;;;GAOG;AACH,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxD;AAED,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CA4EjF;AAED,8CAA8C;AAC9C,UAAU,WAAW;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACxB,iBAAiB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC/B,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,YAAY,EAAE,MAAM,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAyBD;;;;;;;;;GASG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,CAmDxE"}
package/dist/indexer.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { cborDecode } from "./cbor.js";
2
2
  import { parseCarFrame } from "./car.js";
3
- import { insertRecord, deleteRecord, setCursor, setRepoStatus, getRepoRetryInfo, listAllRepoStatuses, getDatabasePort, } from "./database/db.js";
3
+ import { insertRecord, deleteRecord, setCursor, setRepoStatus, getRepoRetryInfo, listAllRepoStatuses, getDatabasePort, updateRepoHandle, } from "./database/db.js";
4
4
  import { backfillRepo } from "./backfill.js";
5
5
  import { rebuildAllIndexes } from "./database/fts.js";
6
6
  import { log, emit, timer } from "./logger.js";
@@ -260,7 +260,7 @@ export async function startIndexer(opts) {
260
260
  }
261
261
  log(`[indexer] Warmed repo status cache with ${statuses.length} entries`);
262
262
  }
263
- startMemoryDiagnostics();
263
+ // startMemoryDiagnostics()
264
264
  let wsUrl = `${relayUrl}/xrpc/com.atproto.sync.subscribeRepos`;
265
265
  if (cursor) {
266
266
  wsUrl += `?cursor=${cursor}`;
@@ -297,6 +297,15 @@ export async function startIndexer(opts) {
297
297
  function processMessage(bytes, collections) {
298
298
  const header = cborDecode(bytes, 0);
299
299
  const body = cborDecode(bytes, header.offset);
300
+ // Handle identity events (handle changes)
301
+ if (header.value.t === '#identity') {
302
+ const did = body.value.did;
303
+ const handle = body.value.handle;
304
+ if (did && handle && repoStatusCache.has(did)) {
305
+ updateRepoHandle(did, handle).catch(() => { });
306
+ }
307
+ return;
308
+ }
300
309
  if (header.value.op !== 1 || header.value.t !== '#commit')
301
310
  return;
302
311
  if (!body.value.blocks || !body.value.ops)
package/dist/main.js CHANGED
@@ -34,14 +34,9 @@ import { parseSessionCookie, getSessionCookieName } from "./oauth/session.js";
34
34
  import { loadOnLoginHook } from "./hooks.js";
35
35
  import { initSetup } from "./setup.js";
36
36
  import { initServer } from "./server-init.js";
37
- function logMemory(phase) {
38
- const mem = process.memoryUsage();
39
- log(`[mem] ${phase}: heap=${Math.round(mem.heapUsed / 1024 / 1024)}MB rss=${Math.round(mem.rss / 1024 / 1024)}MB external=${Math.round(mem.external / 1024 / 1024)}MB arrayBuffers=${Math.round(mem.arrayBuffers / 1024 / 1024)}MB`);
40
- }
41
37
  const configPath = process.argv[2] || 'hatk.config.ts';
42
38
  const configDir = dirname(resolve(configPath));
43
39
  registerHatkResolveHook();
44
- logMemory('startup');
45
40
  // 1. Load config
46
41
  const config = await loadConfig(configPath);
47
42
  configureRelay(config.relay);
@@ -82,7 +77,6 @@ if (config.database !== ':memory:') {
82
77
  const { adapter, searchPort } = await createAdapter(config.databaseEngine);
83
78
  setSearchPort(searchPort);
84
79
  await initDatabase(adapter, config.database, schemas, ddlStatements);
85
- logMemory('after-db-init');
86
80
  log(`[main] Database initialized (${config.databaseEngine}, ${config.database === ':memory:' ? 'in-memory' : config.database})`);
87
81
  // Auto-migrate schema if lexicons changed
88
82
  const migrationChanges = await migrateSchema(schemas);
@@ -138,7 +132,6 @@ if (config.oauth) {
138
132
  await initOAuth(config.oauth, config.plc, config.relay);
139
133
  log(`[main] OAuth initialized (issuer: ${config.oauth.issuer})`);
140
134
  }
141
- logMemory('before-server');
142
135
  // 5. Start server immediately (don't wait for backfill)
143
136
  const collectionSet = new Set(collections);
144
137
  const backfillOpts = {
@@ -157,7 +150,6 @@ function runBackfillAndRestart() {
157
150
  })
158
151
  .then((recordCount) => {
159
152
  if (recordCount > 0 && !process.env.DEV_MODE) {
160
- logMemory('after-backfill');
161
153
  log('[main] Restarting to reclaim memory...');
162
154
  process.exit(1);
163
155
  }
@@ -193,7 +185,6 @@ log(` Collections: ${collections.join(', ')}`);
193
185
  log(` Feeds: ${listFeeds()
194
186
  .map((f) => f.name)
195
187
  .join(', ')}`);
196
- logMemory('after-server');
197
188
  // 6. Start indexer with cursor
198
189
  const cursor = await getCursor('relay');
199
190
  startIndexer({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatk/hatk",
3
- "version": "0.0.1-alpha.44",
3
+ "version": "0.0.1-alpha.45",
4
4
  "license": "MIT",
5
5
  "bin": {
6
6
  "hatk": "dist/cli.js"