@shopify/shopify-app-session-storage-drizzle
TypeScript icon, indicating that this package has built-in type declarations

1.1.2 • Public • Published

Session Storage Adapters for Drizzle

This package implements the SessionStorage interface that works with an instance of Drizzle.

There are 3 adapters for Drizzle: DrizzleSessionStoragePostgres, DrizzleSessionStorageSQLite and DrizzleSessionStorageMySQL.

Session storage for Drizzle requires a schema.ts with a session table with at-least the columns as in the example. Make sure to create session table and apply changes to the database before using this pakacge.

Example with PostgreSQL

import {bigint, boolean, pgTable, text, timestamp} from 'drizzle-orm/pg-core';

export const sessionTable = pgTable('session', {
  id: text('id').primaryKey(),
  shop: text('shop').notNull(),
  state: text('state').notNull(),
  isOnline: boolean('isOnline').default(false).notNull(),
  scope: text('scope'),
  expires: timestamp('expires', {mode: 'date'}),
  accessToken: text('accessToken'),
  userId: bigint('userId', {mode: 'number'}),
});

You can then instantiate and use DrizzleSessionStoragePostgres like so:

import {shopifyApp} from '@shopify/shopify-app-express';
import {DrizzleSessionStoragePostgres} from '@shopify/shopify-app-session-storage-drizzle';

import {db} from './db.server';
import {sessionTable} from './schema';

const storage = new DrizzleSessionStoragePostgres(db, sessionTable);

const shopify = shopifyApp({
  sessionStorage: storage,
  // ...
});

Example with MySQL

import {
  bigint,
  boolean,
  mysqlTable,
  text,
  timestamp,
  varchar,
} from 'drizzle-orm/mysql-core';

export const sessionTable = mysqlTable('session', {
  id: varchar('id', {length: 255}).primaryKey(),
  shop: text('shop').notNull(),
  state: text('state').notNull(),
  isOnline: boolean('isOnline').default(false).notNull(),
  scope: text('scope'),
  expires: timestamp('expires', {mode: 'date'}),
  accessToken: text('accessToken'),
  userId: bigint('userId', {mode: 'number'}),
});

You can then instantiate and use DrizzleSessionStorageMySQL like so:

import {shopifyApp} from '@shopify/shopify-app-express';
import {DrizzleSessionStorageMySQL} from '@shopify/shopify-app-session-storage-drizzle';

import {db} from './db.server';
import {sessionTable} from './schema';

const storage = new DrizzleSessionStorageMySQL(db, sessionTable);

const shopify = shopifyApp({
  sessionStorage: storage,
  // ...
});

Example with SQLite

import {sqliteTable, text, integer, blob} from 'drizzle-orm/sqlite-core';

export const sessionTable = sqliteTable('session', {
  id: text('id').primaryKey(),
  shop: text('shop').notNull(),
  state: text('state').notNull(),
  isOnline: integer('isOnline', {mode: 'boolean'}).notNull().default(false),
  scope: text('scope'),
  expires: text('expires'),
  accessToken: text('accessToken'),
  userId: blob('userId', {mode: 'bigint'}),
});

You can then instantiate and use DrizzleSessionStorageSQLite like so:

import {shopifyApp} from '@shopify/shopify-app-express';
import {DrizzleSessionStorageSQLite} from '@shopify/shopify-app-session-storage-drizzle';

import {db} from './db.server';
import {sessionTable} from './schema';

const storage = new DrizzleSessionStorageSQLite(db, sessionTable);

const shopify = shopifyApp({
  sessionStorage: storage,
  // ...
});

Drizzle Setup

In the example above the file db.server.ts should import your database client, drizzle schema and export db that you can pass to the storage adapter:

import {drizzle} from 'drizzle-orm/libsql';
import {createClient} from '@libsql/client';

import * as schema from './schema';

export const client = createClient({
  url: 'file:./dev.db',
});

export const db = drizzle(client, {schema});

Follow the Drizzle documentation for PostgreSQL setup, MySQL setup and SQLite setup.

Package Sidebar

Install

npm i @shopify/shopify-app-session-storage-drizzle

Weekly Downloads

58

Version

1.1.2

License

MIT

Unpacked Size

188 kB

Total Files

34

Last publish

Collaborators

  • jaimie.rockburn
  • blittle
  • shopify-admin
  • maryharte
  • crisfmb
  • pmoloney89
  • netlohan
  • st999999
  • justin-irl
  • megswim
  • wcandillon
  • nathanpjf
  • shopify-dep
  • goodforonefare
  • lemonmade
  • vsumner
  • wizardlyhel
  • antoine.grant
  • tsov
  • andyw8-shopify
  • henrytao
  • hannachen
  • vividviolet
  • bpscott