diff --git a/source/storage/common.ts b/source/storage/common.ts new file mode 100644 index 0000000..581f122 --- /dev/null +++ b/source/storage/common.ts @@ -0,0 +1,33 @@ +import browser from "webextension-polyfill"; +import {createValue} from "@holllo/webextension-storage"; + +export enum StorageKey { + IntroductionUnderstood = "introduction-understood", + ToursCompleted = "tours-completed", +} + +export async function createIntroductionUnderstood() { + return createValue({ + deserialize: (input) => input === "true", + serialize: (input) => JSON.stringify(input), + key: StorageKey.IntroductionUnderstood, + storage: browser.storage.local, + value: false, + }); +} + +export async function createToursCompleted() { + return createValue>({ + deserialize: (input) => new Set(JSON.parse(input) as TourId[]), + serialize: (input) => JSON.stringify(Array.from(input)), + key: StorageKey.ToursCompleted, + storage: browser.storage.local, + value: new Set([]), + }); +} + +export async function addCompletedTour(tourId: TourId): Promise { + const toursCompleted = await createToursCompleted(); + toursCompleted.value.add(tourId); + await toursCompleted.save(); +}