UNPKG

@shopify/shopify-app-session-storage-kv

Version:
1 lines 4.88 kB
{"version":3,"file":"kv.mjs","sources":["../../../src/kv.ts"],"sourcesContent":["import {Session} from '@shopify/shopify-api';\nimport {SessionStorage} from '@shopify/shopify-app-session-storage';\n\nexport class KVSessionStorage implements SessionStorage {\n private namespace: KVNamespace;\n\n constructor(namespace?: KVNamespace | undefined) {\n if (namespace) {\n this.setNamespace(namespace);\n }\n }\n\n public setNamespace(namespace: KVNamespace) {\n this.namespace = namespace;\n }\n\n public async storeSession(session: Session): Promise<boolean> {\n await this.namespace.put(\n session.id,\n JSON.stringify(session.toPropertyArray(true)),\n );\n await this.addShopIds(session.shop, [session.id]);\n return true;\n }\n\n public async loadSession(id: string): Promise<Session | undefined> {\n const sessionData = await this.namespace.get<[string, string | number][]>(\n id,\n 'json',\n );\n return sessionData\n ? Session.fromPropertyArray(sessionData, true)\n : undefined;\n }\n\n public async deleteSession(id: string): Promise<boolean> {\n const session = await this.loadSession(id);\n if (!session) {\n return true;\n }\n\n await this.namespace.delete(id);\n await this.removeShopIds(session.shop, [session.id]);\n return true;\n }\n\n public async deleteSessions(ids: string[]): Promise<boolean> {\n let result = true;\n for (const id of ids) {\n result = result && (await this.deleteSession(id));\n }\n\n return result;\n }\n\n public async findSessionsByShop(shop: string): Promise<Session[]> {\n const sessionIds = await this.namespace.get<string[]>(\n this.getShopSessionIdsKey(shop),\n {type: 'json'},\n );\n\n if (!sessionIds) {\n return [];\n }\n\n return Promise.all(\n sessionIds.map(async (id) => (await this.loadSession(id))!),\n );\n }\n\n private getShopSessionIdsKey(shop: string): string {\n return `shop:${shop}`;\n }\n\n private async addShopIds(shop: string, ids: string[]) {\n const key = this.getShopSessionIdsKey(shop);\n const shopIds = (await this.namespace.get<string[]>(key, 'json')) ?? [];\n await this.namespace.put(key, JSON.stringify([...shopIds, ...ids]));\n }\n\n private async removeShopIds(shop: string, ids: string[]) {\n const key = this.getShopSessionIdsKey(shop);\n const shopIds = (await this.namespace.get<string[]>(key, 'json')) ?? [];\n await this.namespace.put(\n key,\n JSON.stringify(shopIds.filter((id) => !ids.includes(id))),\n );\n }\n}\n"],"names":[],"mappings":"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"}