Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 5x 5x 5x 5x 5x 5x 3x 3x | import { bytesToHex, getGlobalObject } from 'micro-stacks/common';
import { IS_BROWSER } from './constants';
import { getPublicKey } from 'micro-stacks/crypto';
const _localStorage = getGlobalObject('localStorage', { returnEmptyObject: true });
type Unsubscribe = () => void;
export interface StorageAdapter<Value> {
setItem(key: string, value: Value): void;
getItem(key: string): Value | null | undefined;
removeItem(key: string): void;
subscribe?: (key: string, callback: (value: Value) => void) => Unsubscribe;
}
export interface AsyncStorageAdapter<Value> {
setItem(key: string, value: Value): Promise<void>;
getItem(key: string): Promise<Value | null | undefined>;
removeItem(key: string): Promise<void>;
subscribe?: (key: string, callback: (value: Value) => void) => Unsubscribe;
}
export const defaultStorageAdapter: StorageAdapter<string> = {
setItem: (key: string, value: string) => {
Iif (IS_BROWSER) return _localStorage?.setItem(key, value);
},
getItem: (key: string) => {
Iif (IS_BROWSER) {
const storedValue = _localStorage?.getItem(key);
Iif (storedValue === null) throw new Error('defaultStorageAdapter: no value stored');
return storedValue;
}
},
removeItem: (key: string) => {
Iif (IS_BROWSER) return _localStorage?.removeItem(key);
},
};
export const safeGetPublicKey = (privateKey?: string) => {
Iif (!privateKey) return null;
return bytesToHex(getPublicKey(privateKey, true));
};
|