diff --git a/packages/web3-providers/src/index.ts b/packages/web3-providers/src/index.ts index 1751fa75f898..d164b0078261 100644 --- a/packages/web3-providers/src/index.ts +++ b/packages/web3-providers/src/index.ts @@ -4,6 +4,7 @@ import { RaribleAPI } from './rarible' import { NFTScanAPI } from './NFTScan' import { NativeExplorerAPI } from './explorer' import { RSS3API } from './rss3' +import { KeyValueAPI } from './kv' export * from './types' export * from './opensea/utils' @@ -14,6 +15,7 @@ export const NFTScan = new NFTScanAPI() export const CoinGecko = new CoinGeckoAPI() export const Explorer = new NativeExplorerAPI() export const RSS3 = new RSS3API() +export const KeyValue = new KeyValueAPI() // Method for provider proxy export { getOpenSeaNFTList, getOpenSeaCollectionList } from './opensea' diff --git a/packages/web3-providers/src/kv/README.md b/packages/web3-providers/src/kv/README.md new file mode 100644 index 000000000000..03808ce1df4a --- /dev/null +++ b/packages/web3-providers/src/kv/README.md @@ -0,0 +1,16 @@ +# Key-Value storage + +```typescript +// create a JSON storage +const storage = KeyValue.createJSON_Storage('hello_world') + +// set value +await storage.set('foo', { + key: 'value', +}) + +// get value +const response = await storage.get('foo') + +console.assert(response?.key === 'value', 'ASSERTION FAILED') +``` diff --git a/packages/web3-providers/src/kv/index.ts b/packages/web3-providers/src/kv/index.ts index 257ed50630f8..a5ab360ec6f7 100644 --- a/packages/web3-providers/src/kv/index.ts +++ b/packages/web3-providers/src/kv/index.ts @@ -7,51 +7,42 @@ export class JSON_Storage implements StorageAPI.Storage { constructor(private prefix: string) {} async set(key: string, value: T) { - return fetchJSON( + await fetch( urlcat(KV_ROOT_URL, 'api/:name', { name: `${this.prefix}_${key}`, }), { method: 'PUT', mode: 'cors', - credentials: 'omit', + headers: { + 'Content-Type': 'application/json', + }, body: JSON.stringify(value), }, ) } async get(key: string) { - const response = await fetchJSON( - urlcat(KV_ROOT_URL, 'api/:name', { - name: `${this.prefix}_${key}`, - }), - { - method: 'GET', - mode: 'cors', - credentials: 'omit', - }, - ) try { - return JSON.parse(response) as T + return fetchJSON( + urlcat(KV_ROOT_URL, 'api/:name', { + name: `${this.prefix}_${key}`, + }), + { + method: 'GET', + mode: 'cors', + headers: { + 'Content-Type': 'application/json', + }, + }, + ) } catch { return } } - async delete(key: string) { - await fetchJSON( - urlcat(KV_ROOT_URL, 'api/:name', { - name: `${this.prefix}_${key}`, - }), - { - method: 'DELETE', - mode: 'cors', - credentials: 'omit', - }, - ) - } } export class KeyValueAPI implements StorageAPI.Provider { - createStorage(key: string): StorageAPI.Storage { + createJSON_Storage(key: string): StorageAPI.Storage { return new JSON_Storage(key) } } diff --git a/packages/web3-providers/src/types.ts b/packages/web3-providers/src/types.ts index 8ab37d7c6362..1c29b698bb38 100644 --- a/packages/web3-providers/src/types.ts +++ b/packages/web3-providers/src/types.ts @@ -292,10 +292,11 @@ export namespace StorageAPI { export interface Storage { set(key: string, value: T): Promise get(key: string): Promise - delete(key: string): Promise + delete?: (key: string) => Promise } export interface Provider { - createStorage(key: string): Storage + createJSON_Storage?: (key: string) => Storage + createBinaryStorage?: (key: string) => Storage } }