@almadar/server 1.0.12 → 1.0.14

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/stores/firestoreFormat.ts","../../src/lib/env.ts","../../src/lib/db.ts","../../src/stores/SchemaProtectionService.ts","../../src/stores/SchemaStore.ts","../../src/stores/SnapshotStore.ts","../../src/stores/ChangeSetStore.ts","../../src/stores/ValidationStore.ts"],"names":["db"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Firestore Serialization Utilities\n *\n * Handles the Firestore 20-level depth limit by serializing deeply nested\n * OrbitalSchema fields (orbitals, traits, services) to JSON strings.\n */\n\nimport type { OrbitalSchema } from '@almadar/core';\n\n/**\n * Convert OrbitalSchema to Firestore-safe format.\n *\n * Serializes orbitals, traits, and services to JSON strings to avoid\n * Firestore's 20-level nesting limit.\n */\nexport function toFirestoreFormat(schema: OrbitalSchema): Record<string, unknown> {\n const data = { ...(schema as unknown as Record<string, unknown>) };\n\n // Serialize orbitals array to JSON string\n if (schema.orbitals) {\n data._orbitalsJson = JSON.stringify(schema.orbitals);\n data.orbitalCount = schema.orbitals.length;\n delete data.orbitals;\n }\n\n // Serialize traits array to JSON string (if present at schema level)\n if (data.traits) {\n const traits = data.traits as unknown[];\n data._traitsJson = JSON.stringify(traits);\n data.traitCount = traits.length;\n delete data.traits;\n }\n\n // Serialize services array to JSON string\n if (schema.services) {\n data._servicesJson = JSON.stringify(schema.services);\n data.serviceCount = schema.services.length;\n delete data.services;\n }\n\n return data;\n}\n\n/**\n * Convert Firestore document back to OrbitalSchema.\n *\n * Deserializes JSON strings back to arrays.\n */\nexport function fromFirestoreFormat(data: Record<string, unknown>): OrbitalSchema {\n const result = { ...data };\n\n // Restore orbitals from _orbitalsJson\n if (result._orbitalsJson && typeof result._orbitalsJson === 'string') {\n try {\n result.orbitals = JSON.parse(result._orbitalsJson);\n delete result._orbitalsJson;\n delete result.orbitalCount;\n } catch (e) {\n console.warn('[OrbitalStore] Failed to parse _orbitalsJson:', e);\n result.orbitals = [];\n }\n }\n\n // Restore traits from _traitsJson\n if (result._traitsJson && typeof result._traitsJson === 'string') {\n try {\n result.traits = JSON.parse(result._traitsJson);\n delete result._traitsJson;\n delete result.traitCount;\n } catch (e) {\n console.warn('[OrbitalStore] Failed to parse _traitsJson:', e);\n }\n }\n\n // Restore services from _servicesJson\n if (result._servicesJson && typeof result._servicesJson === 'string') {\n try {\n result.services = JSON.parse(result._servicesJson);\n delete result._servicesJson;\n delete result.serviceCount;\n } catch (e) {\n console.warn('[OrbitalStore] Failed to parse _servicesJson:', e);\n }\n }\n\n return result as unknown as OrbitalSchema;\n}\n","import { z } from 'zod';\nimport dotenv from 'dotenv';\n\n// Load environment variables\ndotenv.config();\n\nconst envSchema = z.object({\n NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),\n PORT: z\n .string()\n .default('3030')\n .transform((val) => parseInt(val, 10)),\n CORS_ORIGIN: z\n .string()\n .default('http://localhost:5173')\n .transform((val) => (val.includes(',') ? val.split(',').map((s) => s.trim()) : val)),\n \n // Database (Prisma/SQL) - optional\n DATABASE_URL: z.string().optional(),\n \n // Firebase/Firestore configuration\n FIREBASE_PROJECT_ID: z.string().optional(),\n FIREBASE_CLIENT_EMAIL: z.string().optional(),\n FIREBASE_PRIVATE_KEY: z.string().optional(),\n FIREBASE_SERVICE_ACCOUNT_PATH: z.string().optional(),\n FIRESTORE_EMULATOR_HOST: z.string().optional(),\n FIREBASE_AUTH_EMULATOR_HOST: z.string().optional(),\n \n // API configuration\n API_PREFIX: z.string().default('/api'),\n\n // Mock data configuration\n USE_MOCK_DATA: z.string().default('true').transform((v) => v === 'true'),\n MOCK_SEED: z\n .string()\n .optional()\n .transform((v) => (v ? parseInt(v, 10) : undefined)),\n});\n\nconst parsed = envSchema.safeParse(process.env);\n\nif (!parsed.success) {\n console.error('❌ Invalid environment variables:', parsed.error.flatten().fieldErrors);\n throw new Error('Invalid environment variables');\n}\n\nexport const env = parsed.data;\n","/**\n * Database Configuration\n * \n * Supports both Prisma (SQL) and Firebase Admin (Firestore)\n * Generated apps can use either depending on the database option\n */\n\nimport admin from 'firebase-admin';\nimport { env } from './env.js';\n\n// ============ Firebase Admin / Firestore ============\n\nlet firebaseApp: admin.app.App | null = null;\n\n/**\n * Initialize Firebase Admin SDK\n */\nfunction initializeFirebase(): admin.app.App {\n if (firebaseApp) {\n return firebaseApp;\n }\n\n // Check if already initialized\n if (admin.apps.length > 0) {\n firebaseApp = admin.apps[0]!;\n return firebaseApp;\n }\n\n // Check for emulator mode FIRST (no credentials needed)\n if (env.FIRESTORE_EMULATOR_HOST) {\n // Emulator mode - no credentials needed\n firebaseApp = admin.initializeApp({\n projectId: env.FIREBASE_PROJECT_ID || 'demo-project',\n });\n console.log(`🔧 Firebase Admin initialized for emulator: ${env.FIRESTORE_EMULATOR_HOST}`);\n return firebaseApp;\n }\n\n // Production mode - need credentials\n const serviceAccountPath = env.FIREBASE_SERVICE_ACCOUNT_PATH;\n \n if (serviceAccountPath) {\n // Use service account file\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const serviceAccount = require(serviceAccountPath);\n firebaseApp = admin.initializeApp({\n credential: admin.credential.cert(serviceAccount),\n projectId: env.FIREBASE_PROJECT_ID,\n });\n } else if (env.FIREBASE_PROJECT_ID && env.FIREBASE_CLIENT_EMAIL && env.FIREBASE_PRIVATE_KEY) {\n // Use inline service account credentials\n firebaseApp = admin.initializeApp({\n credential: admin.credential.cert({\n projectId: env.FIREBASE_PROJECT_ID,\n clientEmail: env.FIREBASE_CLIENT_EMAIL,\n privateKey: env.FIREBASE_PRIVATE_KEY.replace(/\\\\n/g, '\\n'),\n }),\n projectId: env.FIREBASE_PROJECT_ID,\n });\n } else if (env.FIREBASE_PROJECT_ID) {\n // Use application default credentials (for Cloud Run, etc.)\n firebaseApp = admin.initializeApp({\n credential: admin.credential.applicationDefault(),\n projectId: env.FIREBASE_PROJECT_ID,\n });\n } else {\n // Emulator mode - use default credentials\n firebaseApp = admin.initializeApp({\n projectId: 'demo-project',\n });\n }\n\n return firebaseApp;\n}\n\n/**\n * Get Firestore instance\n */\nexport function getFirestore(): admin.firestore.Firestore {\n const app = initializeFirebase();\n const db = app.firestore();\n \n // Connect to emulator if configured\n if (env.FIRESTORE_EMULATOR_HOST) {\n db.settings({\n host: env.FIRESTORE_EMULATOR_HOST,\n ssl: false,\n });\n }\n \n return db;\n}\n\n/**\n * Get Firebase Auth instance\n */\nexport function getAuth(): admin.auth.Auth {\n const app = initializeFirebase();\n return app.auth();\n}\n\n// ============ Prisma (Optional - for SQL databases) ============\n\n// Uncomment if using Prisma with SQL database\n/*\nimport { PrismaClient } from '@prisma/client';\n\ndeclare global {\n // eslint-disable-next-line no-var\n var __db: PrismaClient | undefined;\n}\n\nconst createPrismaClient = () => {\n return new PrismaClient({\n log: env.NODE_ENV === 'development' ? ['query', 'error', 'warn'] : ['error'],\n });\n};\n\nexport const db = globalThis.__db ?? createPrismaClient();\n\nif (env.NODE_ENV !== 'production') {\n globalThis.__db = db;\n}\n*/\n\n// Re-export admin for convenience\nexport { admin };\n\n// Export db instance for handler convenience\nexport const db = getFirestore();\n","/**\n * SchemaProtectionService - Detects destructive schema changes\n *\n * Uses real diff functions from @almadar/core to detect and categorize\n * removals, page content reductions, and other destructive changes.\n */\n\nimport type { OrbitalSchema, CategorizedRemovals, PageContentReduction } from '@almadar/core';\nimport {\n diffSchemas,\n isDestructiveChange,\n categorizeRemovals,\n requiresConfirmation,\n detectPageContentReduction,\n hasSignificantPageReduction,\n} from '@almadar/core';\n\nexport class SchemaProtectionService {\n /**\n * Compare two schemas and detect destructive changes.\n *\n * Returns categorized removals including page content reductions.\n */\n compareSchemas(\n before: OrbitalSchema,\n after: OrbitalSchema,\n ): {\n isDestructive: boolean;\n removals: CategorizedRemovals;\n } {\n const changeSet = diffSchemas(before, after);\n const removals = categorizeRemovals(changeSet);\n\n // Detect page content reductions (implicit removals)\n const beforePages = before.orbitals?.flatMap((o) => o.pages || []) || [];\n const afterPages = after.orbitals?.flatMap((o) => o.pages || []) || [];\n const pageContentReductions = detectPageContentReduction(beforePages, afterPages);\n removals.pageContentReductions = pageContentReductions;\n\n const isDestructive =\n isDestructiveChange(changeSet) ||\n hasSignificantPageReduction(pageContentReductions);\n\n return { isDestructive, removals };\n }\n\n /** Check if critical removals require confirmation */\n requiresConfirmation(removals: CategorizedRemovals): boolean {\n return requiresConfirmation(removals);\n }\n\n /** Check for significant page content reductions */\n hasSignificantContentReduction(reductions: PageContentReduction[]): boolean {\n return hasSignificantPageReduction(reductions);\n }\n}\n","/**\n * SchemaStore - Firestore CRUD for OrbitalSchema documents\n *\n * Handles schema get/save/create/delete/list with caching\n * and Firestore serialization.\n */\n\nimport type { OrbitalSchema, StatsView, AppSummary, SaveOptions, SaveResult } from '@almadar/core';\nimport { getFirestore } from '../lib/db.js';\nimport { toFirestoreFormat, fromFirestoreFormat } from './firestoreFormat.js';\nimport { SchemaProtectionService } from './SchemaProtectionService.js';\nimport type { SnapshotStore } from './SnapshotStore.js';\n\nconst SCHEMA_CACHE_TTL_MS = 60_000;\nconst LIST_CACHE_TTL_MS = 30_000;\n\nexport class SchemaStore {\n private appsCollection: string;\n private schemaCache = new Map<string, { schema: OrbitalSchema; timestamp: number }>();\n private listCache = new Map<string, { apps: AppSummary[]; timestamp: number }>();\n private protectionService = new SchemaProtectionService();\n private snapshotStore: SnapshotStore | null = null;\n\n constructor(appsCollection = 'apps') {\n this.appsCollection = appsCollection;\n }\n\n /** Set snapshot store for auto-snapshot on destructive saves */\n setSnapshotStore(store: SnapshotStore): void {\n this.snapshotStore = store;\n }\n\n /** Get a schema by app ID */\n async get(uid: string, appId: string): Promise<OrbitalSchema | null> {\n const cacheKey = `${uid}:${appId}`;\n const cached = this.schemaCache.get(cacheKey);\n if (cached && Date.now() - cached.timestamp < SCHEMA_CACHE_TTL_MS) {\n return cached.schema;\n }\n\n try {\n const db = getFirestore();\n const appDoc = await db.doc(`users/${uid}/${this.appsCollection}/${appId}`).get();\n\n if (!appDoc.exists) return null;\n\n const data = appDoc.data() as Record<string, unknown>;\n const hasOrbitals = data.orbitals || data._orbitalsJson;\n if (!data.name || !hasOrbitals) return null;\n\n const schema = fromFirestoreFormat(data);\n this.schemaCache.set(cacheKey, { schema, timestamp: Date.now() });\n return schema;\n } catch (error) {\n console.error('[SchemaStore] Error fetching schema:', error);\n return null;\n }\n }\n\n /**\n * Save a schema (create or full replace).\n *\n * Features:\n * - Detects destructive changes (removals)\n * - Requires confirmation for critical removals\n * - Auto-creates snapshots before destructive changes (if SnapshotStore attached)\n */\n async save(\n uid: string,\n appId: string,\n schema: OrbitalSchema,\n options: SaveOptions = {},\n ): Promise<SaveResult> {\n try {\n const existingSchema = await this.get(uid, appId);\n let snapshotId: string | undefined;\n\n // Create snapshot if snapshotReason provided\n if (existingSchema && options.snapshotReason && this.snapshotStore) {\n snapshotId = await this.snapshotStore.create(uid, appId, existingSchema, options.snapshotReason);\n }\n\n // Check for destructive changes (unless skipProtection)\n if (existingSchema && !options.skipProtection) {\n const comparison = this.protectionService.compareSchemas(existingSchema, schema);\n\n if (comparison.isDestructive) {\n const { removals } = comparison;\n const hasCriticalRemovals = this.protectionService.requiresConfirmation(removals);\n const hasContentReductions = this.protectionService.hasSignificantContentReduction(\n removals.pageContentReductions,\n );\n\n if ((hasCriticalRemovals || hasContentReductions) && !options.confirmRemovals) {\n return {\n success: false,\n requiresConfirmation: true,\n removals: comparison.removals,\n error: hasContentReductions\n ? 'Page content reduction detected - confirmation required'\n : 'Confirmation required for critical removals',\n };\n }\n\n // Auto-snapshot before destructive change\n if (\n !snapshotId &&\n this.snapshotStore &&\n (removals.critical.length > 0 || removals.pageContentReductions.length > 0)\n ) {\n snapshotId = await this.snapshotStore.create(\n uid,\n appId,\n existingSchema,\n `auto_before_removal_${Date.now()}`,\n );\n }\n }\n }\n\n const firestoreData = toFirestoreFormat(schema);\n const now = Date.now();\n const docData = {\n ...firestoreData,\n _metadata: {\n version: options.expectedVersion ? options.expectedVersion + 1 : 1,\n updatedAt: now,\n createdAt: existingSchema ? undefined : now,\n source: options.source || 'manual',\n },\n };\n\n const db = getFirestore();\n await db.doc(`users/${uid}/${this.appsCollection}/${appId}`).set(docData, { merge: true });\n\n this.invalidateCache(uid, appId);\n return { success: true, snapshotId };\n } catch (error) {\n console.error('[SchemaStore] Error saving schema:', error);\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n };\n }\n }\n\n /** Create a new app with initial schema */\n async create(\n uid: string,\n metadata: { name: string; description?: string },\n ): Promise<{ appId: string; schema: OrbitalSchema }> {\n const appId = `app-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const now = Date.now();\n\n const schema: OrbitalSchema = {\n name: metadata.name,\n description: metadata.description,\n orbitals: [],\n };\n\n const firestoreData = toFirestoreFormat(schema);\n const docData = {\n ...firestoreData,\n _metadata: { version: 1, createdAt: now, updatedAt: now, source: 'manual' as const },\n };\n\n const db = getFirestore();\n await db.doc(`users/${uid}/${this.appsCollection}/${appId}`).set(docData);\n this.listCache.delete(uid);\n\n return { appId, schema };\n }\n\n /** Delete an app */\n async delete(uid: string, appId: string): Promise<boolean> {\n try {\n const db = getFirestore();\n const ref = db.doc(`users/${uid}/${this.appsCollection}/${appId}`);\n const doc = await ref.get();\n if (!doc.exists) return false;\n\n await ref.delete();\n this.invalidateCache(uid, appId);\n return true;\n } catch (error) {\n console.error('[SchemaStore] Error deleting app:', error);\n return false;\n }\n }\n\n /** List all apps for a user */\n async list(uid: string): Promise<AppSummary[]> {\n const cached = this.listCache.get(uid);\n if (cached && Date.now() - cached.timestamp < LIST_CACHE_TTL_MS) {\n return cached.apps;\n }\n\n try {\n const db = getFirestore();\n const snapshot = await db\n .collection(`users/${uid}/${this.appsCollection}`)\n .select('name', 'description', 'domainContext', '_metadata', 'orbitalCount', 'traitCount')\n .orderBy('_metadata.updatedAt', 'desc')\n .get();\n\n const apps: AppSummary[] = snapshot.docs.map((doc) => {\n const data = doc.data();\n const metadata = data._metadata as { version?: number; createdAt?: number; updatedAt?: number } | undefined;\n const orbitalCount = data.orbitalCount as number | undefined;\n\n return {\n id: doc.id,\n name: (data.name as string) || 'Untitled',\n description: data.description as string | undefined,\n updatedAt: metadata?.updatedAt || Date.now(),\n createdAt: metadata?.createdAt || Date.now(),\n stats: { entities: orbitalCount ?? 0, pages: 0, states: 0, events: 0, transitions: 0 },\n domainContext: data.domainContext as string | undefined,\n hasValidationErrors: false,\n };\n });\n\n this.listCache.set(uid, { apps, timestamp: Date.now() });\n return apps;\n } catch (error) {\n console.error('[SchemaStore] Error listing apps:', error);\n return [];\n }\n }\n\n /** Compute stats from OrbitalSchema */\n computeStats(schema: OrbitalSchema): StatsView {\n const orbitals = schema.orbitals || [];\n const entities = orbitals.length;\n const pages = orbitals.reduce((n, o) => n + (o.pages?.length || 0), 0);\n\n const allTraits = [\n ...((schema as unknown as Record<string, unknown>).traits as unknown[] || []),\n ...orbitals.flatMap((o) =>\n (o.traits || []).filter((t) => typeof t !== 'string' && 'stateMachine' in t),\n ),\n ] as Array<{ stateMachine?: { states?: unknown[]; events?: unknown[]; transitions?: unknown[] } }>;\n\n return {\n states: allTraits.flatMap((t) => t.stateMachine?.states || []).length,\n events: allTraits.flatMap((t) => t.stateMachine?.events || []).length,\n pages,\n entities,\n transitions: allTraits.flatMap((t) => t.stateMachine?.transitions || []).length,\n };\n }\n\n /** Invalidate caches for a specific app */\n invalidateCache(uid: string, appId: string): void {\n this.schemaCache.delete(`${uid}:${appId}`);\n this.listCache.delete(uid);\n }\n\n /** Clear all caches */\n clearCaches(): void {\n this.schemaCache.clear();\n this.listCache.clear();\n }\n\n /** Get the collection path for an app */\n getAppDocPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}`;\n }\n\n /** Expose apps collection name for subcollection stores */\n getAppsCollection(): string {\n return this.appsCollection;\n }\n}\n","/**\n * SnapshotStore - Firestore CRUD for schema snapshots\n *\n * Snapshots are full copies of the schema at a point in time,\n * stored in subcollection: users/{uid}/apps/{appId}/snapshots/{snapshotId}\n */\n\nimport type { OrbitalSchema, SnapshotDocument, HistoryMeta } from '@almadar/core';\nimport { getFirestore } from '../lib/db.js';\nimport { toFirestoreFormat, fromFirestoreFormat } from './firestoreFormat.js';\n\nconst SNAPSHOTS_COLLECTION = 'snapshots';\n\nexport class SnapshotStore {\n private appsCollection: string;\n\n constructor(appsCollection = 'apps') {\n this.appsCollection = appsCollection;\n }\n\n private getCollectionPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}/${SNAPSHOTS_COLLECTION}`;\n }\n\n private getAppDocPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}`;\n }\n\n /** Create a snapshot of the current schema */\n async create(\n uid: string,\n appId: string,\n schema: OrbitalSchema,\n reason: string,\n ): Promise<string> {\n const db = getFirestore();\n const snapshotId = `snapshot_${Date.now()}`;\n\n const snapshotDoc: SnapshotDocument = {\n id: snapshotId,\n timestamp: Date.now(),\n schema: toFirestoreFormat(schema),\n reason,\n };\n\n await db.doc(`${this.getCollectionPath(uid, appId)}/${snapshotId}`).set(snapshotDoc);\n\n // Update history metadata\n const appDocRef = db.doc(this.getAppDocPath(uid, appId));\n const appDoc = await appDocRef.get();\n const currentMeta = appDoc.data()?._historyMeta as HistoryMeta | undefined;\n\n const updatedMeta: HistoryMeta = {\n latestSnapshotId: snapshotId,\n latestChangeSetId: currentMeta?.latestChangeSetId,\n snapshotCount: (currentMeta?.snapshotCount || 0) + 1,\n changeSetCount: currentMeta?.changeSetCount || 0,\n };\n\n await appDocRef.set({ _historyMeta: updatedMeta }, { merge: true });\n return snapshotId;\n }\n\n /** Get all snapshots for an app (ordered by timestamp desc) */\n async getAll(uid: string, appId: string): Promise<SnapshotDocument[]> {\n const db = getFirestore();\n const query = await db\n .collection(this.getCollectionPath(uid, appId))\n .orderBy('timestamp', 'desc')\n .get();\n\n return query.docs.map((doc) => doc.data() as SnapshotDocument);\n }\n\n /** Get a specific snapshot by ID */\n async get(uid: string, appId: string, snapshotId: string): Promise<SnapshotDocument | null> {\n const db = getFirestore();\n const doc = await db.doc(`${this.getCollectionPath(uid, appId)}/${snapshotId}`).get();\n if (!doc.exists) return null;\n return doc.data() as SnapshotDocument;\n }\n\n /** Delete a snapshot */\n async delete(uid: string, appId: string, snapshotId: string): Promise<boolean> {\n const db = getFirestore();\n const ref = db.doc(`${this.getCollectionPath(uid, appId)}/${snapshotId}`);\n const doc = await ref.get();\n if (!doc.exists) return false;\n\n await ref.delete();\n\n // Update history metadata\n const appDocRef = db.doc(this.getAppDocPath(uid, appId));\n const appDoc = await appDocRef.get();\n const currentMeta = appDoc.data()?._historyMeta as HistoryMeta | undefined;\n\n if (currentMeta) {\n const updatedMeta: HistoryMeta = {\n ...currentMeta,\n snapshotCount: Math.max(0, (currentMeta.snapshotCount || 1) - 1),\n latestSnapshotId:\n currentMeta.latestSnapshotId === snapshotId ? undefined : currentMeta.latestSnapshotId,\n };\n await appDocRef.set({ _historyMeta: updatedMeta }, { merge: true });\n }\n\n return true;\n }\n\n /** Get schema snapshot at a specific version */\n async getByVersion(uid: string, appId: string, version: number): Promise<OrbitalSchema | null> {\n const db = getFirestore();\n const query = await db\n .collection(this.getCollectionPath(uid, appId))\n .where('version', '==', version)\n .limit(1)\n .get();\n\n if (query.empty) return null;\n const snapshot = query.docs[0].data() as SnapshotDocument;\n return fromFirestoreFormat(snapshot.schema as Record<string, unknown>);\n }\n\n /** Get the schema from a snapshot (deserialized) */\n getSchemaFromSnapshot(snapshot: SnapshotDocument): OrbitalSchema {\n return fromFirestoreFormat(snapshot.schema as Record<string, unknown>);\n }\n}\n","/**\n * ChangeSetStore - Firestore CRUD for schema changesets\n *\n * Changesets track changes made to the schema over time,\n * stored in subcollection: users/{uid}/apps/{appId}/changesets/{changeSetId}\n */\n\nimport type { ChangeSetDocument, HistoryMeta } from '@almadar/core';\nimport { getFirestore } from '../lib/db.js';\n\nconst CHANGESETS_COLLECTION = 'changesets';\n\nexport class ChangeSetStore {\n private appsCollection: string;\n\n constructor(appsCollection = 'apps') {\n this.appsCollection = appsCollection;\n }\n\n private getCollectionPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}/${CHANGESETS_COLLECTION}`;\n }\n\n private getAppDocPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}`;\n }\n\n /** Append a changeset to history */\n async append(uid: string, appId: string, changeSet: ChangeSetDocument): Promise<void> {\n const db = getFirestore();\n\n await db.doc(`${this.getCollectionPath(uid, appId)}/${changeSet.id}`).set(changeSet);\n\n // Update history metadata\n const appDocRef = db.doc(this.getAppDocPath(uid, appId));\n const appDoc = await appDocRef.get();\n const currentMeta = appDoc.data()?._historyMeta as HistoryMeta | undefined;\n\n const updatedMeta: HistoryMeta = {\n latestSnapshotId: currentMeta?.latestSnapshotId,\n latestChangeSetId: changeSet.id,\n snapshotCount: currentMeta?.snapshotCount || 0,\n changeSetCount: (currentMeta?.changeSetCount || 0) + 1,\n };\n\n await appDocRef.set({ _historyMeta: updatedMeta }, { merge: true });\n }\n\n /** Get change history for an app (ordered by version desc) */\n async getHistory(uid: string, appId: string): Promise<ChangeSetDocument[]> {\n try {\n const db = getFirestore();\n const query = await db\n .collection(this.getCollectionPath(uid, appId))\n .orderBy('version', 'desc')\n .get();\n\n return query.docs.map((doc) => doc.data() as ChangeSetDocument);\n } catch (error) {\n console.error('[ChangeSetStore] Error getting change history:', error);\n return [];\n }\n }\n\n /** Get a specific changeset by ID */\n async get(uid: string, appId: string, changeSetId: string): Promise<ChangeSetDocument | null> {\n const db = getFirestore();\n const doc = await db.doc(`${this.getCollectionPath(uid, appId)}/${changeSetId}`).get();\n if (!doc.exists) return null;\n return doc.data() as ChangeSetDocument;\n }\n\n /** Update a changeset's status */\n async updateStatus(\n uid: string,\n appId: string,\n changeSetId: string,\n status: 'applied' | 'reverted' | 'pending',\n ): Promise<void> {\n const db = getFirestore();\n const ref = db.doc(`${this.getCollectionPath(uid, appId)}/${changeSetId}`);\n const doc = await ref.get();\n if (!doc.exists) return;\n await ref.update({ status });\n }\n\n /** Delete a changeset */\n async delete(uid: string, appId: string, changeSetId: string): Promise<boolean> {\n const db = getFirestore();\n const ref = db.doc(`${this.getCollectionPath(uid, appId)}/${changeSetId}`);\n const doc = await ref.get();\n if (!doc.exists) return false;\n\n await ref.delete();\n\n // Update history metadata\n const appDocRef = db.doc(this.getAppDocPath(uid, appId));\n const appDoc = await appDocRef.get();\n const currentMeta = appDoc.data()?._historyMeta as HistoryMeta | undefined;\n\n if (currentMeta) {\n const updatedMeta: HistoryMeta = {\n ...currentMeta,\n changeSetCount: Math.max(0, (currentMeta.changeSetCount || 1) - 1),\n latestChangeSetId:\n currentMeta.latestChangeSetId === changeSetId ? undefined : currentMeta.latestChangeSetId,\n };\n await appDocRef.set({ _historyMeta: updatedMeta }, { merge: true });\n }\n\n return true;\n }\n}\n","/**\n * ValidationStore - Firestore CRUD for validation results\n *\n * Validation results stored at: users/{uid}/apps/{appId}/validation/current\n */\n\nimport type { ValidationResults, ValidationMeta } from '@almadar/core';\nimport { getFirestore } from '../lib/db.js';\n\nconst VALIDATION_COLLECTION = 'validation';\nconst VALIDATION_DOC_ID = 'current';\n\nexport class ValidationStore {\n private appsCollection: string;\n\n constructor(appsCollection = 'apps') {\n this.appsCollection = appsCollection;\n }\n\n private getDocPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}/${VALIDATION_COLLECTION}/${VALIDATION_DOC_ID}`;\n }\n\n private getAppDocPath(uid: string, appId: string): string {\n return `users/${uid}/${this.appsCollection}/${appId}`;\n }\n\n /** Save validation results */\n async save(uid: string, appId: string, results: ValidationResults): Promise<void> {\n const db = getFirestore();\n\n await db.doc(this.getDocPath(uid, appId)).set(results);\n\n // Update validation metadata in main document\n const validationMeta: ValidationMeta = {\n errorCount: results.errors?.length || 0,\n warningCount: results.warnings?.length || 0,\n validatedAt: results.validatedAt,\n };\n\n await db.doc(this.getAppDocPath(uid, appId)).set(\n { _operational: { validationMeta } },\n { merge: true },\n );\n }\n\n /** Get validation results */\n async get(uid: string, appId: string): Promise<ValidationResults | null> {\n try {\n const db = getFirestore();\n const doc = await db.doc(this.getDocPath(uid, appId)).get();\n if (!doc.exists) return null;\n return doc.data() as ValidationResults;\n } catch (error) {\n console.error('[ValidationStore] Error getting validation results:', error);\n return null;\n }\n }\n\n /** Clear validation results */\n async clear(uid: string, appId: string): Promise<void> {\n const db = getFirestore();\n const { FieldValue } = await import('firebase-admin/firestore');\n\n await db.doc(this.getDocPath(uid, appId)).delete();\n\n await db.doc(this.getAppDocPath(uid, appId)).update({\n '_operational.validationMeta': FieldValue.delete(),\n });\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@almadar/server",
3
- "version": "1.0.12",
3
+ "version": "1.0.14",
4
4
  "description": "Shared server infrastructure for Almadar applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,6 +23,10 @@
23
23
  "import": "./dist/services/index.js",
24
24
  "types": "./dist/services/index.d.ts"
25
25
  },
26
+ "./stores": {
27
+ "import": "./dist/stores/index.js",
28
+ "types": "./dist/stores/index.d.ts"
29
+ },
26
30
  "./utils": {
27
31
  "import": "./dist/utils/index.js",
28
32
  "types": "./dist/utils/index.d.ts"
@@ -34,21 +38,14 @@
34
38
  "publishConfig": {
35
39
  "access": "public"
36
40
  },
37
- "scripts": {
38
- "build": "tsup",
39
- "build:watch": "tsup --watch",
40
- "lint": "eslint src/",
41
- "typecheck": "tsc --noEmit",
42
- "test": "vitest --run --passWithNoTests",
43
- "prepublishOnly": "pnpm run build"
44
- },
45
41
  "dependencies": {
46
42
  "@faker-js/faker": "^9.3.0",
47
43
  "cors": "^2.8.5",
48
44
  "dotenv": "^16.4.0",
49
45
  "helmet": "^8.0.0",
50
46
  "ws": "^8.18.0",
51
- "zod": "^3.24.0"
47
+ "zod": "^3.24.0",
48
+ "@almadar/core": "1.0.14"
52
49
  },
53
50
  "peerDependencies": {
54
51
  "express": "^4.0.0",
@@ -81,5 +78,12 @@
81
78
  "server",
82
79
  "express",
83
80
  "middleware"
84
- ]
81
+ ],
82
+ "scripts": {
83
+ "build": "tsup",
84
+ "build:watch": "tsup --watch",
85
+ "lint": "eslint src/",
86
+ "typecheck": "tsc --noEmit",
87
+ "test": "vitest --run --passWithNoTests"
88
+ }
85
89
  }