kutaisan-react-native-mmkv-storage
Version:
This library aims to provide a fast & reliable solution for you data storage needs in react-native apps. It uses [MMKV](https://github.com/Tencent/MMKV) by Tencent under the hood on Android and iOS both that is used by their WeChat app(more than 1 Billion
79 lines (67 loc) • 1.94 kB
JavaScript
import generatePassword from "./keygen";
import API from "./api";
import { stringToHex, ACCESSIBLE, MODES, options } from "./utils";
import { currentInstancesStatus } from "./initializer";
import { handleAction } from "./handlers";
export default class Loader {
constructor() {
this.options = {
instanceID: "default",
initWithEncryption: false,
secureKeyStorage: false,
accessibleMode: ACCESSIBLE.WHEN_UNLOCKED,
processingMode: MODES.SINGLE_PROCESS,
aliasPrefix: "com.MMKV.",
alias: null,
key: null,
initialized: false,
};
}
withInstanceID(id) {
this.options.instanceID = id;
return this;
}
withEncryption() {
this.options.initWithEncryption = true;
this.options.key = generatePassword();
this.options.alias = stringToHex(
this.options.aliasPrefix + this.options.instanceID
);
this.options.secureKeyStorage = true;
return this;
}
setAccessibleIOS(accessible) {
this.options.accessibleMode = accessible;
return this;
}
encryptWithCustomKey(key, secureKeyStorage, alias) {
this.options.key = key;
this.options.secureKeyStorage = false;
if (secureKeyStorage) {
this.options.secureKeyStorage = true;
if (alias) {
this.options.alias = stringToHex(this.options.aliasPrefix + alias);
} else {
this.options.alias = stringToHex(
this.options.aliasPrefix + this.options.instanceID
);
}
}
return this;
}
setProcessingMode(mode) {
this.options.processingMode = mode;
return this;
}
initialize() {
currentInstancesStatus[this.options.instanceID] = false;
options[this.options.instanceID] = this.options;
let instance = new API(this.options.instanceID);
handleAction(null, this.options.instanceID);
return instance;
}
generateKey() {
this.options.key = generatePassword();
return this;
}
}