+21
-11
hosting-service/src/lib/firehose.ts
+21
-11
hosting-service/src/lib/firehose.ts
······+private async handleCreateOrUpdate(did: string, site: string, record: any, eventCid?: string) {···-const recordUrl = `${pdsEndpoint}/xrpc/com.atproto.repo.getRecord?repo=${encodeURIComponent(did)}&collection=place.wisp.fs&rkey=${encodeURIComponent(site)}`;···
+7
-4
hosting-service/src/lib/html-rewriter.ts
+7
-4
hosting-service/src/lib/html-rewriter.ts
······
+73
-5
hosting-service/src/lib/utils.ts
+73
-5
hosting-service/src/lib/utils.ts
······-export async function fetchSiteRecord(did: string, rkey: string): Promise<WispFsRecord | null> {+export async function fetchSiteRecord(did: string, rkey: string): Promise<{ record: WispFsRecord; cid: string } | null> {const url = `${pdsEndpoint}/xrpc/com.atproto.repo.getRecord?repo=${encodeURIComponent(did)}&collection=place.wisp.fs&rkey=${encodeURIComponent(rkey)}`;···-export async function downloadAndCacheSite(did: string, rkey: string, record: WispFsRecord, pdsEndpoint: string): Promise<void> {+export async function downloadAndCacheSite(did: string, rkey: string, record: WispFsRecord, pdsEndpoint: string, recordCid: string): Promise<void> {······+async function saveCacheMetadata(did: string, rkey: string, recordCid: string): Promise<void> {+export async function isCacheValid(did: string, rkey: string, currentRecordCid?: string): Promise<boolean> {+console.log('[Cache] CID mismatch for', did, rkey, 'cached:', metadata.recordCid, 'current:', currentRecordCid);
+42
-1
src/index.ts
+42
-1
src/index.ts
······
+136
-16
src/lib/db.ts
+136
-16
src/lib/db.ts
······+await db`ALTER TABLE oauth_sessions ADD COLUMN IF NOT EXISTS expires_at BIGINT NOT NULL DEFAULT EXTRACT(EPOCH FROM NOW()) + 2592000`;+await db`ALTER TABLE oauth_keys ADD COLUMN IF NOT EXISTS created_at BIGINT DEFAULT EXTRACT(EPOCH FROM NOW())`;+await db`ALTER TABLE oauth_states ADD COLUMN IF NOT EXISTS expires_at BIGINT DEFAULT EXTRACT(EPOCH FROM NOW()) + 3600`;·········+console.log(`[Cleanup] Deleted ${sessionsDeleted.length} expired sessions and ${statesDeleted.length} expired states`);export const createClientMetadata = (config: { domain: `https://${string}`, clientName: string }): ClientMetadata => ({······+console.log(`[KeyRotation] Found ${oldKeys.length} key(s) older than 30 days, rotating oldest key`);export const getOAuthClient = async (config: { domain: `https://${string}`, clientName: string }) => {
+37
src/lib/logger.ts
+37
src/lib/logger.ts
···
+115
-14
src/lib/oauth-client.ts
+115
-14
src/lib/oauth-client.ts
·········+logger.info(`[Cleanup] Deleted ${sessionsDeleted.length} expired sessions and ${statesDeleted.length} expired states`);export const createClientMetadata = (config: { domain: `https://${string}`, clientName: string }): ClientMetadata => {·········+logger.info(`[KeyRotation] Found ${oldKeys.length} key(s) older than 30 days, rotating oldest key`);export const getOAuthClient = async (config: { domain: `https://${string}`, clientName: string }) => {
+2
-1
src/lib/wisp-auth.ts
+2
-1
src/lib/wisp-auth.ts
······
+12
-11
src/routes/auth.ts
+12
-11
src/routes/auth.ts
·····················
+11
-10
src/routes/domain.ts
+11
-10
src/routes/domain.ts
············throw new Error(`Failed to claim: ${err instanceof Error ? err.message : 'Unknown error'}`);···throw new Error(`Failed to update: ${err instanceof Error ? err.message : 'Unknown error'}`);···throw new Error(`Failed to add domain: ${err instanceof Error ? err.message : 'Unknown error'}`);······throw new Error(`Failed to verify domain: ${err instanceof Error ? err.message : 'Unknown error'}`);···throw new Error(`Failed to delete domain: ${err instanceof Error ? err.message : 'Unknown error'}`);···throw new Error(`Failed to map site: ${err instanceof Error ? err.message : 'Unknown error'}`);···throw new Error(`Failed to map site: ${err instanceof Error ? err.message : 'Unknown error'}`);
+8
-7
src/routes/user.ts
+8
-7
src/routes/user.ts
···import { getSitesByDid, getDomainByDid, getCustomDomainsByDid, getWispDomainInfo } from '../lib/db'··················
+8
-15
src/routes/wisp.ts
+8
-15
src/routes/wisp.ts
············throw new Error(`Failed to upload files: ${error instanceof Error ? error.message : 'Unknown error'}`);