@lockerpm/client-service
v1.2.4
Published
## Installation
Downloads
24
Readme
Locker Desktop Service Supporter for Web and Extension
Installation
Install from npm:
npm install -S @lockerpm/client-service
Install from yarn:
yarn add @lockerpm/client-service
Usages
import { WebService, StorageService } from '@lockerpm/client-service'
// Mock secure storage using browser's sessionStorage, you can keep it in others secure storages
// or simply keep it in memory
class WebStorageService implements StorageService {
secureStorage: {
[key: string]: any
}
constructor() {
this.secureStorage = {}
}
get(key: string) {
try {
return Promise.resolve(JSON.parse(sessionStorage.getItem(key) || '') || null)
} catch (error) {
return Promise.resolve(null)
}
}
set(key: string, data: any) {
sessionStorage.setItem(key, JSON.stringify(data))
return Promise.resolve()
}
delete(key: string) {
sessionStorage.removeItem(key)
return Promise.resolve()
}
getSecure(key: string) {
// Web client should only keep in memory
// return Promise.resolve(this.secureStorage[key] || null);
try {
return Promise.resolve(JSON.parse(sessionStorage.getItem(`secure___${key}`) || '') || null)
} catch (error) {
return Promise.resolve(null)
}
}
setSecure(key: string, data: any) {
// Web client should only keep in memory
// this.secureStorage[key] = data;
sessionStorage.setItem(`secure___${key}`, JSON.stringify(data))
return Promise.resolve()
}
deleteSecure(key: string) {
// Web client should only keep in memory
// this.secureStorage[key] = undefined;
sessionStorage.removeItem(`secure___${key}`)
return Promise.resolve()
}
}
const webStorageService = new WebStorageService()
const service = new WebService({
storageService: webStorageService,
logLevel: 2, // 1 for error, 2 for debug
baseApiUrl: 'https://api.cystack.org/v3',
clientType: 'web', // or 'extension'
domain: 'localhost', // current domain, used for passkey setup
serviceAlias: '' // optional, alias of background service
})
// Setup listners
service.on('<event-name>', callback)
Development
Install required packages.
npm install
Run tests
Create a .env file with required access keys (refer to .env.example
)
To run all tests, use:
npm test
Testing environment is Node.js, not browser, so window
is not working -> some services start with this
// src/services/core-crypto.service.ts
// TEST CONFIG
// import c from 'crypto'
// const crypto = c.webcrypto
// PROD CONFIG
const crypto = window.crypto
You have to uncomment all code bellow // TEST CONFIG
and comment all code bellow // PROD CONFIG
. Do the oposite when build. You will see error logs of incorrect config.
Run some tests only, please update mocharc.js
:
ignore: [
// './tests/index.spec.ts', // Comment the file you want to test
'./tests/crypto.spec.ts',
'...'
]