@rankmyseo/storage 0.1.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts","../src/factory.ts","../src/sqlite-store.ts","../src/schema/sqlite.ts"],"sourcesContent":["import \"server-only\";\n\nexport { createStore } from \"./factory.js\";\nexport { createSqliteStore } from \"./sqlite-store.js\";\n","import \"server-only\";\n\nimport { createSqliteStore } from \"./sqlite-store.js\";\n\nexport function createStore(databaseUrl: string) {\n if (\n databaseUrl.startsWith(\"postgres\") ||\n databaseUrl.startsWith(\"mysql\")\n ) {\n throw new Error(\n \"Postgres and MySQL adapters are not implemented in M0. Use sqlite:// or :memory:\",\n );\n }\n\n const path = databaseUrl.startsWith(\"sqlite://\")\n ? databaseUrl.slice(\"sqlite://\".length)\n : databaseUrl;\n\n return createSqliteStore(path);\n}\n","import \"server-only\";\n\nimport { randomUUID } from \"node:crypto\";\nimport Database from \"better-sqlite3\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport { and, eq, gte, lte } from \"drizzle-orm\";\nimport type {\n Audit,\n AuditCheckResult,\n BlogPost,\n CreateKeywordInput,\n CreateRankSnapshotInput,\n DashboardConfig,\n Keyword,\n KeywordIntent,\n Project,\n RankSnapshot,\n RankStore,\n Report,\n ReportSummary,\n SnapshotRangeQuery,\n TenantScope,\n} from \"@rankmyseo/core\";\nimport {\n audits,\n blogPosts,\n dashboardConfigs,\n keywords,\n projects,\n rankSnapshots,\n reports,\n sqliteSchema,\n} from \"./schema/sqlite.js\";\n\nfunction mapBlogRow(row: {\n id: string;\n tenantId: string;\n projectId: string;\n title: string;\n slug: string;\n content: string;\n targetKeyword: string;\n intent: string;\n metaTitle: string;\n metaDescription: string;\n status: string;\n createdAt: Date;\n updatedAt: Date;\n}): BlogPost {\n return {\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n title: row.title,\n slug: row.slug,\n content: row.content,\n targetKeyword: row.targetKeyword,\n intent: row.intent as KeywordIntent,\n metaTitle: row.metaTitle,\n metaDescription: row.metaDescription,\n status: row.status as BlogPost[\"status\"],\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n}\n\nfunction parseChecks(raw: string | null | undefined): AuditCheckResult[] {\n if (!raw) return [];\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? (parsed as AuditCheckResult[]) : [];\n } catch {\n return [];\n }\n}\n\nfunction parseSummary(raw: string | null | undefined): ReportSummary | undefined {\n if (!raw) return undefined;\n try {\n return JSON.parse(raw) as ReportSummary;\n } catch {\n return undefined;\n }\n}\n\nfunction mapAuditRow(row: {\n id: string;\n tenantId: string;\n projectId: string;\n url: string;\n score: number;\n checks: string | null;\n createdAt: Date;\n}): Audit {\n return {\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n url: row.url,\n score: row.score,\n checks: parseChecks(row.checks),\n createdAt: row.createdAt,\n };\n}\n\nfunction mapReportRow(row: {\n id: string;\n tenantId: string;\n projectId: string;\n title: string;\n from: Date;\n to: Date;\n summary: string | null;\n createdAt: Date;\n}): Report {\n return {\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n title: row.title,\n from: row.from,\n to: row.to,\n summary: parseSummary(row.summary),\n createdAt: row.createdAt,\n };\n}\n\nfunction parseTags(raw: string): string[] {\n try {\n const parsed: unknown = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed.filter((t): t is string => typeof t === \"string\") : [];\n } catch {\n return [];\n }\n}\n\nfunction migrate(sqlite: Database.Database) {\n sqlite.exec(`\n CREATE TABLE IF NOT EXISTS rms_projects (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n name TEXT NOT NULL,\n domain TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n CREATE TABLE IF NOT EXISTS rms_keywords (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n text TEXT NOT NULL,\n country TEXT NOT NULL,\n device TEXT NOT NULL,\n tags TEXT NOT NULL,\n created_at INTEGER NOT NULL\n );\n CREATE TABLE IF NOT EXISTS rms_rank_snapshots (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n keyword_id TEXT NOT NULL,\n position INTEGER,\n url TEXT,\n source TEXT NOT NULL,\n device TEXT NOT NULL,\n country TEXT NOT NULL,\n captured_at INTEGER NOT NULL,\n serp_features TEXT\n );\n CREATE TABLE IF NOT EXISTS rms_audits (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n url TEXT NOT NULL,\n score INTEGER NOT NULL,\n checks TEXT NOT NULL DEFAULT '[]',\n created_at INTEGER NOT NULL\n );\n CREATE TABLE IF NOT EXISTS rms_reports (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n title TEXT NOT NULL,\n \"from\" INTEGER NOT NULL,\n \"to\" INTEGER NOT NULL,\n summary TEXT,\n created_at INTEGER NOT NULL\n );\n CREATE TABLE IF NOT EXISTS rms_dashboard_configs (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n widgets TEXT NOT NULL,\n updated_at INTEGER NOT NULL\n );\n CREATE TABLE IF NOT EXISTS rms_blog_posts (\n id TEXT PRIMARY KEY,\n tenant_id TEXT NOT NULL,\n project_id TEXT NOT NULL,\n title TEXT NOT NULL,\n slug TEXT NOT NULL,\n content TEXT NOT NULL DEFAULT '',\n target_keyword TEXT NOT NULL DEFAULT '',\n intent TEXT NOT NULL DEFAULT 'informational',\n meta_title TEXT NOT NULL DEFAULT '',\n meta_description TEXT NOT NULL DEFAULT '',\n status TEXT NOT NULL DEFAULT 'draft',\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `);\n try {\n sqlite.exec(`ALTER TABLE rms_audits ADD COLUMN checks TEXT NOT NULL DEFAULT '[]'`);\n } catch {\n /* column exists */\n }\n try {\n sqlite.exec(`ALTER TABLE rms_reports ADD COLUMN summary TEXT`);\n } catch {\n /* column exists */\n }\n}\n\nexport function createSqliteStore(databasePath: string): RankStore {\n const sqlite = new Database(databasePath);\n migrate(sqlite);\n const db = drizzle(sqlite, { schema: sqliteSchema });\n\n const keywordScopeWhere = (scope: TenantScope) =>\n and(\n eq(keywords.tenantId, scope.tenantId),\n eq(keywords.projectId, scope.projectId),\n );\n\n return {\n projects: {\n async create(input) {\n const now = new Date();\n const row: Project = {\n ...input,\n createdAt: now,\n updatedAt: now,\n };\n db.insert(projects)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n name: row.name,\n domain: row.domain,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n })\n .run();\n return row;\n },\n async getById(scope, id) {\n const rows = db\n .select()\n .from(projects)\n .where(and(eq(projects.tenantId, scope.tenantId), eq(projects.id, id)))\n .all();\n const row = rows[0];\n if (!row) return undefined;\n return {\n id: row.id,\n tenantId: row.tenantId,\n name: row.name,\n domain: row.domain,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n };\n },\n async list(scope) {\n return db\n .select()\n .from(projects)\n .where(eq(projects.tenantId, scope.tenantId))\n .all()\n .map((row) => ({\n id: row.id,\n tenantId: row.tenantId,\n name: row.name,\n domain: row.domain,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n }));\n },\n },\n\n keywords: {\n async create(input: CreateKeywordInput) {\n const row: Keyword = {\n id: randomUUID(),\n ...input,\n createdAt: new Date(),\n };\n db.insert(keywords)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n text: row.text,\n country: row.country,\n device: row.device,\n tags: JSON.stringify(row.tags),\n createdAt: row.createdAt,\n })\n .run();\n return row;\n },\n async getById(scope, id) {\n const rows = db\n .select()\n .from(keywords)\n .where(and(keywordScopeWhere(scope), eq(keywords.id, id)))\n .all();\n const row = rows[0];\n if (!row) return undefined;\n return {\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n text: row.text,\n country: row.country,\n device: row.device as Keyword[\"device\"],\n tags: parseTags(row.tags),\n createdAt: row.createdAt,\n };\n },\n async list(scope) {\n return db\n .select()\n .from(keywords)\n .where(keywordScopeWhere(scope))\n .all()\n .map((row) => ({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n text: row.text,\n country: row.country,\n device: row.device as Keyword[\"device\"],\n tags: parseTags(row.tags),\n createdAt: row.createdAt,\n }));\n },\n async delete(scope, id) {\n const result = db\n .delete(keywords)\n .where(and(keywordScopeWhere(scope), eq(keywords.id, id)))\n .run();\n return result.changes > 0;\n },\n },\n\n snapshots: {\n async append(input: CreateRankSnapshotInput) {\n const row: RankSnapshot = {\n id: randomUUID(),\n ...input,\n };\n db.insert(rankSnapshots)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n keywordId: row.keywordId,\n position: row.position,\n url: row.url,\n source: row.source,\n device: row.device,\n country: row.country,\n capturedAt: row.capturedAt,\n serpFeatures: row.serpFeatures\n ? JSON.stringify(row.serpFeatures)\n : null,\n })\n .run();\n return row;\n },\n async listByRange(query: SnapshotRangeQuery) {\n const conditions = [\n eq(rankSnapshots.tenantId, query.tenantId),\n eq(rankSnapshots.projectId, query.projectId),\n gte(rankSnapshots.capturedAt, query.from),\n lte(rankSnapshots.capturedAt, query.to),\n ];\n if (query.keywordId) {\n conditions.push(eq(rankSnapshots.keywordId, query.keywordId));\n }\n\n return db\n .select()\n .from(rankSnapshots)\n .where(and(...conditions))\n .all()\n .map((row) => ({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n keywordId: row.keywordId,\n position: row.position,\n url: row.url,\n source: row.source,\n device: row.device as RankSnapshot[\"device\"],\n country: row.country,\n capturedAt: row.capturedAt,\n serpFeatures: row.serpFeatures\n ? (JSON.parse(row.serpFeatures) as Record<string, unknown>)\n : undefined,\n }));\n },\n },\n\n audits: {\n async create(input) {\n const row: Audit = { ...input, checks: input.checks ?? [], createdAt: new Date() };\n db.insert(audits)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n url: row.url,\n score: row.score,\n checks: JSON.stringify(row.checks),\n createdAt: row.createdAt,\n })\n .run();\n return row;\n },\n async getById(scope, id) {\n const rows = db\n .select()\n .from(audits)\n .where(\n and(\n eq(audits.tenantId, scope.tenantId),\n eq(audits.projectId, scope.projectId),\n eq(audits.id, id),\n ),\n )\n .all();\n const row = rows[0];\n if (!row) return undefined;\n return mapAuditRow(row);\n },\n async list(scope) {\n return db\n .select()\n .from(audits)\n .where(\n and(\n eq(audits.tenantId, scope.tenantId),\n eq(audits.projectId, scope.projectId),\n ),\n )\n .all()\n .map(mapAuditRow);\n },\n },\n\n reports: {\n async create(input) {\n const row: Report = { ...input, createdAt: new Date() };\n db.insert(reports)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n title: row.title,\n from: row.from,\n to: row.to,\n summary: row.summary ? JSON.stringify(row.summary) : null,\n createdAt: row.createdAt,\n })\n .run();\n return row;\n },\n async getById(scope, id) {\n const rows = db\n .select()\n .from(reports)\n .where(\n and(\n eq(reports.tenantId, scope.tenantId),\n eq(reports.projectId, scope.projectId),\n eq(reports.id, id),\n ),\n )\n .all();\n const row = rows[0];\n if (!row) return undefined;\n return mapReportRow(row);\n },\n async list(scope) {\n return db\n .select()\n .from(reports)\n .where(\n and(\n eq(reports.tenantId, scope.tenantId),\n eq(reports.projectId, scope.projectId),\n ),\n )\n .all()\n .map(mapReportRow);\n },\n },\n\n dashboard: {\n async get(scope) {\n const rows = db\n .select()\n .from(dashboardConfigs)\n .where(\n and(\n eq(dashboardConfigs.tenantId, scope.tenantId),\n eq(dashboardConfigs.projectId, scope.projectId),\n ),\n )\n .all();\n const row = rows[0];\n if (!row) return undefined;\n return {\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n widgets: JSON.parse(row.widgets) as DashboardConfig[\"widgets\"],\n updatedAt: row.updatedAt,\n };\n },\n async upsert(config) {\n db.insert(dashboardConfigs)\n .values({\n id: config.id,\n tenantId: config.tenantId,\n projectId: config.projectId,\n widgets: JSON.stringify(config.widgets),\n updatedAt: config.updatedAt,\n })\n .onConflictDoUpdate({\n target: dashboardConfigs.id,\n set: {\n widgets: JSON.stringify(config.widgets),\n updatedAt: config.updatedAt,\n },\n })\n .run();\n return config;\n },\n },\n\n blog: {\n async create(input) {\n const now = new Date();\n const row: BlogPost = { ...input, createdAt: now, updatedAt: now };\n db.insert(blogPosts)\n .values({\n id: row.id,\n tenantId: row.tenantId,\n projectId: row.projectId,\n title: row.title,\n slug: row.slug,\n content: row.content,\n targetKeyword: row.targetKeyword,\n intent: row.intent,\n metaTitle: row.metaTitle,\n metaDescription: row.metaDescription,\n status: row.status,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n })\n .run();\n return row;\n },\n async getById(scope, id) {\n const rows = db\n .select()\n .from(blogPosts)\n .where(\n and(\n eq(blogPosts.tenantId, scope.tenantId),\n eq(blogPosts.projectId, scope.projectId),\n eq(blogPosts.id, id),\n ),\n )\n .all();\n const row = rows[0];\n return row ? mapBlogRow(row) : undefined;\n },\n async list(scope) {\n return db\n .select()\n .from(blogPosts)\n .where(\n and(\n eq(blogPosts.tenantId, scope.tenantId),\n eq(blogPosts.projectId, scope.projectId),\n ),\n )\n .all()\n .map(mapBlogRow);\n },\n async update(scope, id, patch) {\n const rows = db\n .select()\n .from(blogPosts)\n .where(\n and(\n eq(blogPosts.tenantId, scope.tenantId),\n eq(blogPosts.projectId, scope.projectId),\n eq(blogPosts.id, id),\n ),\n )\n .all();\n const existing = rows[0];\n if (!existing) return undefined;\n\n const merged = mapBlogRow(existing);\n const next: BlogPost = {\n ...merged,\n ...patch,\n updatedAt: new Date(),\n };\n\n db.update(blogPosts)\n .set({\n title: next.title,\n slug: next.slug,\n content: next.content,\n targetKeyword: next.targetKeyword,\n intent: next.intent,\n metaTitle: next.metaTitle,\n metaDescription: next.metaDescription,\n status: next.status,\n updatedAt: next.updatedAt,\n })\n .where(\n and(\n eq(blogPosts.tenantId, scope.tenantId),\n eq(blogPosts.projectId, scope.projectId),\n eq(blogPosts.id, id),\n ),\n )\n .run();\n\n return next;\n },\n async delete(scope, id) {\n const result = db\n .delete(blogPosts)\n .where(\n and(\n eq(blogPosts.tenantId, scope.tenantId),\n eq(blogPosts.projectId, scope.projectId),\n eq(blogPosts.id, id),\n ),\n )\n .run();\n return result.changes > 0;\n },\n },\n };\n}\n","import { sqliteTable, text, integer } from \"drizzle-orm/sqlite-core\";\n\nexport const projects = sqliteTable(\"rms_projects\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n name: text(\"name\").notNull(),\n domain: text(\"domain\").notNull(),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }).notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const keywords = sqliteTable(\"rms_keywords\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n text: text(\"text\").notNull(),\n country: text(\"country\").notNull(),\n device: text(\"device\").notNull(),\n tags: text(\"tags\").notNull(),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const rankSnapshots = sqliteTable(\"rms_rank_snapshots\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n keywordId: text(\"keyword_id\").notNull(),\n position: integer(\"position\"),\n url: text(\"url\"),\n source: text(\"source\").notNull(),\n device: text(\"device\").notNull(),\n country: text(\"country\").notNull(),\n capturedAt: integer(\"captured_at\", { mode: \"timestamp_ms\" }).notNull(),\n serpFeatures: text(\"serp_features\"),\n});\n\nexport const audits = sqliteTable(\"rms_audits\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n url: text(\"url\").notNull(),\n score: integer(\"score\").notNull(),\n checks: text(\"checks\").notNull().default(\"[]\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const reports = sqliteTable(\"rms_reports\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n title: text(\"title\").notNull(),\n from: integer(\"from\", { mode: \"timestamp_ms\" }).notNull(),\n to: integer(\"to\", { mode: \"timestamp_ms\" }).notNull(),\n summary: text(\"summary\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const dashboardConfigs = sqliteTable(\"rms_dashboard_configs\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n widgets: text(\"widgets\").notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const blogPosts = sqliteTable(\"rms_blog_posts\", {\n id: text(\"id\").primaryKey(),\n tenantId: text(\"tenant_id\").notNull(),\n projectId: text(\"project_id\").notNull(),\n title: text(\"title\").notNull(),\n slug: text(\"slug\").notNull(),\n content: text(\"content\").notNull().default(\"\"),\n targetKeyword: text(\"target_keyword\").notNull().default(\"\"),\n intent: text(\"intent\").notNull().default(\"informational\"),\n metaTitle: text(\"meta_title\").notNull().default(\"\"),\n metaDescription: text(\"meta_description\").notNull().default(\"\"),\n status: text(\"status\").notNull().default(\"draft\"),\n createdAt: integer(\"created_at\", { mode: \"timestamp_ms\" }).notNull(),\n updatedAt: integer(\"updated_at\", { mode: \"timestamp_ms\" }).notNull(),\n});\n\nexport const sqliteSchema = {\n projects,\n keywords,\n rankSnapshots,\n audits,\n reports,\n dashboardConfigs,\n blogPosts,\n};\n"],"mappings":"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","names":["import_server_only","import_server_only","import_better_sqlite3","Database"]}
@@ -0,0 +1,8 @@
1
+ import * as _rankmyseo_core from '@rankmyseo/core';
2
+ import { RankStore } from '@rankmyseo/core';
3
+
4
+ declare function createStore(databaseUrl: string): _rankmyseo_core.RankStore;
5
+
6
+ declare function createSqliteStore(databasePath: string): RankStore;
7
+
8
+ export { createSqliteStore, createStore };
@@ -0,0 +1,8 @@
1
+ import * as _rankmyseo_core from '@rankmyseo/core';
2
+ import { RankStore } from '@rankmyseo/core';
3
+
4
+ declare function createStore(databaseUrl: string): _rankmyseo_core.RankStore;
5
+
6
+ declare function createSqliteStore(databasePath: string): RankStore;
7
+
8
+ export { createSqliteStore, createStore };