{"version":3,"file":"drizzle-sqlite.adapter.mjs","sources":["../../../../src/adapters/drizzle-sqlite.adapter.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\nimport {SessionStorage} from '@shopify/shopify-app-session-storage';\nimport {\n  InferInsertModel,\n  InferSelectModel,\n  desc,\n  eq,\n  inArray,\n} from 'drizzle-orm';\nimport {BaseSQLiteDatabase} from 'drizzle-orm/sqlite-core';\n\nimport {SQLiteSessionTable} from '../schemas/sqlite.schema';\n\nexport class DrizzleSessionStorageSQLite implements SessionStorage {\n  constructor(\n    private readonly db: BaseSQLiteDatabase<'sync' | 'async', any, any>,\n    private readonly sessionTable: SQLiteSessionTable,\n  ) {}\n\n  public async storeSession(session: Session): Promise<boolean> {\n    const row = this.sessionToRow(session);\n\n    await this.db\n      .insert(this.sessionTable)\n      .values({...row})\n      .onConflictDoUpdate({\n        target: this.sessionTable.id,\n        set: {...row},\n      });\n\n    return true;\n  }\n\n  public async loadSession(id: string): Promise<Session | undefined> {\n    try {\n      const row = await this.db\n        .select()\n        .from(this.sessionTable)\n        .where(eq(this.sessionTable.id, id));\n\n      if (!row[0]) {\n        return undefined;\n      }\n\n      return this.rowToSession(row[0]);\n    } catch (error) {\n      console.error(error);\n\n      return undefined;\n    }\n  }\n\n  public async deleteSession(id: string): Promise<boolean> {\n    try {\n      await this.db\n        .delete(this.sessionTable)\n        .where(eq(this.sessionTable.id, id));\n    } catch (error) {\n      console.error(error);\n\n      return false;\n    }\n\n    return true;\n  }\n\n  public async deleteSessions(ids: string[]): Promise<boolean> {\n    try {\n      await this.db\n        .delete(this.sessionTable)\n        .where(inArray(this.sessionTable.id, ids));\n\n      return true;\n    } catch (error) {\n      console.error(error);\n\n      return false;\n    }\n  }\n\n  public async findSessionsByShop(shop: string): Promise<Session[]> {\n    const sessions = await this.db\n      .select()\n      .from(this.sessionTable)\n      .where(eq(this.sessionTable.shop, shop))\n      .orderBy(desc(this.sessionTable.expires));\n\n    return sessions.map((session) => this.rowToSession(session));\n  }\n\n  private sessionToRow(session: Session): InferInsertModel<SQLiteSessionTable> {\n    const sessionParams = session.toObject();\n\n    return {\n      id: session.id,\n      shop: session.shop,\n      state: session.state,\n      isOnline: session.isOnline,\n      scope: session.scope || null,\n      expires: session.expires ? session.expires.toISOString() : null,\n      accessToken: session.accessToken || '',\n      userId:\n        (sessionParams.onlineAccessInfo?.associated_user\n          .id as unknown as bigint) || null,\n      firstName:\n        sessionParams.onlineAccessInfo?.associated_user.first_name || null,\n      lastName:\n        sessionParams.onlineAccessInfo?.associated_user.last_name || null,\n      email: sessionParams.onlineAccessInfo?.associated_user.email || null,\n      accountOwner:\n        sessionParams.onlineAccessInfo?.associated_user.account_owner ?? null,\n      locale: sessionParams.onlineAccessInfo?.associated_user.locale || null,\n      collaborator:\n        sessionParams.onlineAccessInfo?.associated_user.collaborator ?? null,\n      emailVerified:\n        sessionParams.onlineAccessInfo?.associated_user.email_verified ?? null,\n      refreshToken: sessionParams.refreshToken || null,\n      refreshTokenExpires: sessionParams.refreshTokenExpires\n        ? sessionParams.refreshTokenExpires.toISOString()\n        : null,\n    };\n  }\n\n  private rowToSession(row: InferSelectModel<SQLiteSessionTable>): Session {\n    const sessionParams: Record<string, boolean | string | number> = {\n      id: row.id,\n      shop: row.shop,\n      state: row.state,\n      isOnline: row.isOnline,\n    };\n\n    if (row.userId !== null && row.userId !== undefined) {\n      sessionParams.userId = String(row.userId);\n    }\n\n    if (row.firstName !== null && row.firstName !== undefined) {\n      sessionParams.firstName = String(row.firstName);\n    }\n\n    if (row.lastName !== null && row.lastName !== undefined) {\n      sessionParams.lastName = String(row.lastName);\n    }\n\n    if (row.email !== null && row.email !== undefined) {\n      sessionParams.email = String(row.email);\n    }\n\n    if (row.locale !== null && row.locale !== undefined) {\n      sessionParams.locale = String(row.locale);\n    }\n\n    if (row.accountOwner !== null) {\n      sessionParams.accountOwner = row.accountOwner;\n    }\n\n    if (row.collaborator !== null) {\n      sessionParams.collaborator = row.collaborator;\n    }\n\n    if (row.emailVerified !== null) {\n      sessionParams.emailVerified = row.emailVerified;\n    }\n\n    if (row.expires) {\n      sessionParams.expires = new Date(row.expires).getTime();\n    }\n\n    if (row.scope) {\n      sessionParams.scope = row.scope;\n    }\n\n    if (row.accessToken) {\n      sessionParams.accessToken = row.accessToken;\n    }\n\n    if (row.refreshToken) {\n      sessionParams.refreshToken = row.refreshToken;\n    }\n\n    if (row.refreshTokenExpires) {\n      sessionParams.refreshTokenExpires = new Date(\n        row.refreshTokenExpires,\n      ).getTime();\n    }\n\n    return Session.fromPropertyArray(Object.entries(sessionParams), true);\n  }\n}\n"],"names":[],"mappings":"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"}