1.0.0 • Published 4 months ago

locker-client-service v1.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
4 months ago

Locker Desktop Service Supporter for Web and Extension

Installation

Install from npm:

npm install -S locker-client-service

Install from yarn:

yarn add locker-client-service

Usages

import { WebService, StorageService } from 'locker-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',
  '...'
]
1.0.0

4 months ago

0.2.7

4 months ago

0.2.6

4 months ago

0.2.5

4 months ago

0.2.4

4 months ago

0.2.3

4 months ago

0.2.2

4 months ago

0.2.1

5 months ago

0.2.0

5 months ago

0.1.9

5 months ago

0.1.8

5 months ago

0.1.7

5 months ago

0.1.6

5 months ago

0.1.5

5 months ago

0.1.2

5 months ago

0.1.1

5 months ago

0.1.4

5 months ago

0.1.3

5 months ago

0.1.0

5 months ago

0.0.15

5 months ago

0.0.14

5 months ago

0.0.13

5 months ago

0.0.12

5 months ago

0.0.11

5 months ago