npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vuex-cognito-sync

v1.0.5

Published

A Vue.js Vuex module for AWS Cognito Sync

Downloads

6

Readme

vuex-cognito-sync

CircleCI Coveralls npm npm

A Vuex wrapper for Amazon Cognito Sync Manager.

Installation

Install via Yarn or npm:

$ yarn add vuex-cognito-sync
# or...
$ npm install --save vuex-cognito-sync

Usage

vuex-cognito-sync is a namespaced module. Your app can have multiple Cognito Sync datasets, and synchronize them with Cognito independently.

Create a config file:

// cognito.config.json
{
  "IdentityPoolId": "us-east-1:********-****-****-****-************"
}

Add module to your Vuex store:

import Vue from 'vue'
import Vuex from 'vuex'
import CognitoSync from 'vuex-cognito-sync'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    myNamespace: new CognitoSync('datasetName')
  }
})

Call init method when bootstrapping your app:

import CognitoSync from 'vuex-cognito-sync'
import config from './cognito.config.json'

// optional Cognito login tokens
let logins = {
  'graph.facebook.com': '** token **'
}

CognitoSync.init(config, logins)
  .then(() => {
    // do stuff
  })
  .catch((err) => {
    if (err.code === 'NotAuthorizedException') {
      // login token is probably expired
    }
  })

Initialize a datastore and perform initial sync:

this.$store.dispatch('myNamespace/init')
  .then(() => {
    return this.$store.dispatch('myNamespace/sync')
  })

Actions

init

Initialize this module's dataset. Must be dispatched before any other actions.

this.$store.dispatch('myNamespace/init')
  .then((dataset) => {
    // do stuff
  })

put

this.$store.dispatch('myNamespace/put', {
    key: 'someKey',
    value: 'someValue'
  })
  .then(() => {
    // do stuff
  })

remove

this.$store.dispatch('myNamespace/remove', {
    key: 'someKey'
  })
  .then(() => {
    // do stuff
  })

sync

Tell the dataset to synchronize with the Cognito Sync server, and then update the state in Vuex.

this.$store.dispatch('myNamespace/sync')
  .then(() => {
    // do stuff
  })

What's with the put & remove actions?

It would seem cleaner to use a plugin to update the local Cognito dataset when the Vuex store changes.

But unfortunately, Amazon Cognito Sync Manager performs all operations asynchronously... Even when making localStorage changes. This means a plugin would go against Vuex's rule that mutations must be synchronous, potentially causing race conditions if you make state changes and then dispatch the sync action right away.

If if you have a better idea of how to deal with this, please open an issue and let me know!

TODO

  • [ ] Configurable conflict resolution logic (currently always resolves with remote record)
  • [ ] Add dataset deleted handling
  • [ ] Add datasets merged handling