{"_id":"@feathersjs-offline/client","_rev":"31-c4bef61b9d55ccfa9d2d2dad992039fc","name":"@feathersjs-offline/client","dist-tags":{"latest":"2.0.7"},"versions":{"0.1.0-alpha.1":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.1","description":"The full collection of the feathersjs-offline utilities.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Michael Hillerstroem","email":"michael(at)hillerstrom.name","url":"at"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"0bd94fa904e679eaace62c12fd589a97e02b12c4","_id":"@feathersjs-offline/client@0.1.0-alpha.1","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-+bFjKS7NAaPKDqf8M1mkKuoCRqTsxTTr0S92tl1yMFHDJqi99VPg/u28JOCK4jlrIofLLpmpqeKgKAq6cHzyJA==","shasum":"bbd273e45b4f51a1628d1ece20be571927f55aad","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.1.tgz","fileCount":722,"unpackedSize":1041670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzkYLCRA9TVsSAnZWagAAT1gQAI25YyKzoY9ykGk7OEay\nIJzuzzpEOZie4BFXr+kWUhxUQr65o1U1c+hy4OcBhjNDGWdZQilpxr2TQwwh\n3R8UyYWFMSm3a059C+eFQBxWxNZF9QN0p3J3bQTkP8BzoCu7mOjwa7ZCuxTb\nv3E92sIV9d9ZZPLe0kKtxNX+uyIBiOiIgcVv/aEHJEZ/v4I7Ed7xpLHgdUlH\n9F/bQ55FrufXvlzYGh1ZxSqNIRzb/oPs3uit5BeVhBdBM4pDZX+B5EC7sC6x\nS9MbcojmxNMKOWNUlBbI2OCV1vBKZ/PBuFBTV+dZH/DPojcW9ebxtBh6z84Q\nWBSYEqYgXpnIvGtjZX5h+BqM2hrMDa+Af+AiyFwayTr9en3kpwG9xoPOipgH\nfeMqgflJOMiU8h8brPZWdjsPupD+yvZ4ZOK15iCa9gw8vuXhtfduVufNZMBj\nMrWWk4Aj0GdrCzG3R6XUsA0MhoTbD1Tvl2OZntykQE6+1xzNplw3cZ8Eb0Tg\nzDNR7k/tRLPvQz3+qaFY/kwMuzDSBpNggriDRj0nRTXmkP4gjQhkUmYB9ff1\nNNPm0ES4kzkbAAns5OSFxXOptogs3Q1yBwS0w4ADVumdXUoyxP3m9xDUy/vy\ndOjreCioSpdLoPyI/C3HxF5Hl4c84JwWLqZW7YxAPtE4K2EZ3LFYWerXnSre\n5611\r\n=TazK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLQt4AmPNG6+WJhKuvI4tsl2WQBYgVhT7OY6xe0/lbwQIgB4JxRHeq48ezLmxB36cOOEau5CJVYa1UYYrH0dkkoHU="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.1_1607353867354_0.26299073129392836"},"_hasShrinkwrap":false},"0.1.0-alpha.2":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.2","description":"The full collection of the feathersjs-offline utilities.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Michael Hillerstroem","email":"michael(at)hillerstrom.name","url":"at"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"3432b4d2c1484edfd0ce443ae582820d69b925eb","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js(2,6,10})\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js{7,17-22}\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js{2,6,10}\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js{7,17-22}\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.2","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-V0g/T+C5RoeGIjP2xH7ilEiMu+0OsFiodIq5jurPxgN1nlsuItGrdMOWsMblDUEqzxqLQK1nucBXgBLfPv8VxQ==","shasum":"5ce347b53b348b32ab9a13007c184156bdd3edd3","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.2.tgz","fileCount":722,"unpackedSize":1041670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzkcbCRA9TVsSAnZWagAAHiAP/i/UtOi739wyn5CYtp9Z\nEo96QlWJg29mEPRwUTk+tiTNaS/hycCc4Nmwne3InKqaI6z2T2YVnnxFdc0V\n+szFJeMRAvRm3GpctCNw7JxE79B6ZauiXYnCY5uGw9wyKIjjt4G+YnDbWIK/\nYZP9HJicC3b10GzyHjDXqF7cqYjjhCHwb4I4pZusIddoYqKL7ca4aEI8WLQE\nEzbBIftda4dvq0E4U7/63GU/c4Rv8vvaNnV5hoay7wB7tto8LTKOJgFFnt7x\nqeMDri6SmOENEkxBg6JeSDs00rO1M6CDNxpXJBZd7H4J13wdryYdl3mD+b6O\n/FUSTIT8xKBp+wymUppHSB966K+kDGccBwyJgp13d+cJCSDkvdNa3vb9uUvT\nIJ8Cz70KU9nUuwiWm2VqKfU8VBpWruAuWsVqYR4yCDo+Y4QvEcJ15ZyZUsFu\n2BJ+wDIUn0xyQzY/D2w5jioodQ5kKNqP6MIA1a9BgT0zreGB40TplhjYiyRO\n+pgeehNxRLbwPEzJpAQAsddZWEtp9AI1SG6pQ6PFvVLWbSjRvh3LtWW3ytB1\n/ShPHQA1f96b9NQ9DZuAvkURQt0j8gtJAKNBvU82TylZ/TzmyR2UZ5PeiPhu\nq2M5DsjTbQr0xOb6o5DvnE1aoNr8DhTGaLz0dZV3lhAosUwpJdh6NesNBhSl\nC+r5\r\n=9lXu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD/1fbf4Z+JqTKq1hX+uveYR4REZDFWP8t5TJzK8BESzwIgXuBIBeZKHKhA3s0ZE88wnCuRONke4lDepaSH39le4WQ="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.2_1607354130880_0.9733294809647108"},"_hasShrinkwrap":false},"0.1.0-alpha.3":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.3","description":"The full collection of the feathersjs-offline utilities.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Michael Hillerstroem","email":"michael(at)hillerstrom.name","url":"at"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"4fd7cc8a64ca8fdbe1c80d5964beb5ee74409982","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js(2,6,10})\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js{7,17-22}\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js{2,6,10}\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js{7,17-22}\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.3","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-OZdnA4U3+P1ASPoHgGHLYav74C6n0scyqxSaW+NxHO/RY3C6c4s3mxRJbRAYlr7WKxQAFiNzuqZTvBZrx7L1gA==","shasum":"885ff72993a071af056a771532458b90ecea0109","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.3.tgz","fileCount":722,"unpackedSize":1041670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzkd8CRA9TVsSAnZWagAAoxMQAJUxCYM7b9fu2BPrZmBX\nfZ9sjZVyU+ogsqu1tnxLvSiVuSBSchUmXSRvXwqAOqHGwIoDZ9uXjvgHuS4u\nBxQfD4/F64eo6Ssr3HtzHp01JbeWiNc5DSFC9ZdVOBnao9jb6W5gPcd2/R62\n0y230ZlwPdNSviz2WpJ6+mlYia4aePuQtuuv5YDY8Fl/37tolKo1GiSQqjug\nQFJkOePz0SJSrS3S9815lzz5kdkVSzM5Fs/GBu/93y7N+LHhQKKQnLQBrLJA\nhw+PSTsu+DAvhc0d7iUZofxvLY26VVPn1Fx4DXF9FU28iOM/lkOlyNWaSmub\nsipX5cCeKPOB7aBqvYZBrY8jyKDCF5t8wwLmVuvUOlPB9TRwG5R0/vBwrD4A\nG1ZvCFhjRLXGbIgsPov9dM5p3nkPbCn0PT4IUMBoYIcvwsxGBSHAprKo/I+6\n2oEDB9cSKRGnL6p5JPBRuEZNmQhycoUXXZgvmDRcAvEktsLbx2nk4ik++tkK\n0BIb+gw6Pp+r+mrWcNJ3xURk/mZKP7g54BWaJAIPNuSOY7w3IfDERbrnAlJk\nqZTBH7Hgm9+blracsi3N5Zzct4uNznFzdqzlq6rcVr04I+1DsKn0/xP3q1zv\n03Aeu5EhXGoPivmg7NPiCwKxKQYWqgx1SLTqDAjaAayaasQWTjHYr3QohW0N\nSdCj\r\n=68xk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDUQMKVksdqP+ZiJYZFDhxfMUCCMjRmZODY6GL40VqLCQIhAN3ECOMirMWb7t06VONWs99uk82FB+RyHF+zJfZ+IYB/"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.3_1607354236152_0.2748536827587216"},"_hasShrinkwrap":false},"0.1.0-alpha.8":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.8","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"c00d99c7f81e0afbb52ee5c1b27ed46a168c4292","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.8","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-GEO2sEarMDaET5uXg2nq+ozlib3twFTEHyPIS+OIAt0ARi5V8xU2LSf2LLkVSgggZjEpVprTtvccoTYzWcxq8A==","shasum":"e840371dcc7898adbd701a42a503153b98ad9df7","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.8.tgz","fileCount":722,"unpackedSize":1041767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzlh6CRA9TVsSAnZWagAA8HUP/3tbmTs0lmP5L/ykuvN9\nF0ewmc/Ovc3uN4VGQtQUeNSFxZNYkNGuS1fqbUN01G1wVX1nporcaTWkDOus\n6S2esxQh//vbPB5LD5lPy/g3EI4CNGryav3eENI+ndZIhSIV16os/TFBARSB\nNQTu6+s9mPHSmjGEc6I1wgTjovwGMdpbS87erwFWKYEfA9tO/CRkUWlVGN7m\ndpzbNkjhPEKnhhweM+EslNBu4Nd3zO2SVsAcW7efOLy+XFbktOT45j+55ARV\n3uFNo84rVTv5HBa8EXFGaTrzuJqDWW6LWvLo0QeNP9DbH/U8aQZFag2GJ9JY\noPsSZ7m9dVT5vcGdhHTMc/QiVUcHD4wnwDhegTcHj4G0wuvFZ3SF45BMH3gW\nLJ/djvMZFSdrg4hYB/A/h8Sn9BkJIBleZNYaN0AVIf6mSLHKpA8WO4oLepy+\ngvHNDPUrWsgAhi2sEY1mls8k+Vjpk1vb9i5nfpOTuFjUd/giPiqUsR5OIuWb\n+EW02jM/TJaxyagziKEzaxBCuwr7xXQN7YCOmrPmZrewWtZJJT5IDIpoOj/c\nGsFJ5JKrzPk4xtVxdwDsTI2gu2HHNEN9lysSSi/EpWdWN+H0C8cjkzMYCdtM\njc3cyD+uEjLWo8FDP2+cFr/QjVETosOj/CRWTnvc04bcgKoTGIyJYWm3OBXc\nvBvY\r\n=mMEl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB2oSCgEE0VJs24kbYsJTjMKhEtTKnteDkX8fF7pAyUOAiEAvglk3IeK0H0p67bsTBEc3pZeNL3ghY5IVe2aOlnQNL8="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.8_1607358585594_0.6486073026933983"},"_hasShrinkwrap":false},"0.1.0-alpha.9":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.9","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"fc2c1658f5c1300ddb1e6a59837d4fce3a35e33c","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.9","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-5blwQQfgnXy4rrG6mqBAB46glEVsnORUm7HGqjZdfXr3Zx1HhxXKB92rGkfyBvZOE4tY5Xt5bueFOxfOOWViaw==","shasum":"2639d2d991db6160adac381584c9127dc7ab80b8","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.9.tgz","fileCount":722,"unpackedSize":1041767,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzljgCRA9TVsSAnZWagAAGOIP/0Jjb6SX0PADRjhDx7LA\nhZZcMoKC1hFYGcYVR8QEju2AjmJz95IBdFN3YN0QdjrHwXr9RZyhpKdATj4g\ng+/4HdZaWbvwQQQQknvpM37Nae43YEWziOGVecPb4u46tpevdyJLBqddsBns\nv9EM+p9nqkckw3E96kDIuyVQSaL5vumNlPpxh+HNj4TGjJAe4AJ9eMCvkud1\nwUNA/CGcclKT6A9GPhHBufq3wrvdk4AlbOWQu+vuhMQSkvrUW2YNA0ySgnBN\nljx70H1Ruh8kropyTss5CvInq6xuL3rRVqcicH3IJTdmLyBvu9Gy1A2rq7yH\nnyKB7CcXZPCuUsztwFZnu6HwAfqO1NBVRsCqxiOKzTzjd+SjtU5p/XVCyyuZ\nj4v+qgc05vhLZH5SRrbRcZxpH7UlMkwuFGJMbeT/NTrPCd093bKUm3GyiMHH\n+wpHKajAj65HcstWFYArp46VX1LVP4bAhzkaQoRmgigMYCAYa7B7AIdwjsOR\nsuWS3QdaSa17hwaoAt1uqgywdEAkuv4hQsvT0GdOy3SymKF7rt6XavrlVUhS\nKNm+560UxTIhiYnb6D6OAqp+h/KvBBeySmLd3ZLaOGZc9FjwhyAxnU/FvwDL\nOuoAc88XqDgQmkDnNPEFf6Eqvvh9dEM8qkdcQg5KtvkLMB5dRdGFC0YZs4I+\nWORW\r\n=W7kC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCHwnR74q7Lz1peFR3zzpABPIgMx2+/vJ++uWO5hhGhjcCIQC8zkqjbT28TmXqQ+FaaDisHM2ipZ8kdzbv5HMrWmfcDQ=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.9_1607358687942_0.6078355966666424"},"_hasShrinkwrap":false},"0.1.0-alpha.10":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.10","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"07c93e30ae0464812aaf8ab59113d4ae9d868cdc","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.10","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-nBxlh63cqZrkg2lnmKfKbT3n1T1xxkERTQhYVgWvOxUva+9jMVLkllwlns9NeNBWCXEcjhCRHtaY0PJJqVKqfA==","shasum":"ff834c5430bb358ae49a4aaebf51633980622277","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.10.tgz","fileCount":722,"unpackedSize":1041768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzlksCRA9TVsSAnZWagAAE5AP/j4bZPFpdLL8ctWc66dW\nI1lzZaAbXWeOZ/JeG1GAGps7pdiuYl5WNFt4iV1L06nRVAcIEicXLA9gTZll\n/uOu+idffyZUS/5Wars9ONd7E47hx510/4fX2tt0b2/gS/dDOJ0dusgAcuVh\nB3RnzG4dN+DQublOAW8sbNiWG2Nn9r0SYjvzJBmJLck7EvsPLugS2k7cro8x\nyv1rrsYFE2kCiKXHJG5ZoWDe+1pGecNjSuizQLH0aSiblnToCfAd7a5JYk4d\nrK4KJFo9q5/wVKrWmHljMBgiLHXip3qcTiWsD+m1+eHg6YAvWlKss/PeVGpc\nq4OadrlzC0xz1x+F/4wN+DtQNK392VKRKoPa3xyvh4M3RY6Qe/dh9ysTRVDm\nbZY1o47hijx/gOmX+sVINJ/I4m/wkA+KFOdj3vsrggTcEwwbG/FaCTWCC8BR\nzb5NdL3o3evgh8wGTMGOkme4dkllD2XQef41cZTaKt0Dq1/8Y0pSXNrC1QAi\nFov6ybt6qaerYHr0/BQEdk9li/tkofteoEMBu9vuwJiV6zH6xICywdCzZScA\nWYw9Hidwq7eBD0wlJGYV5DyRKD1mNATLNkgiwCp+HPYDAa2FyFuoj0GMYR/n\nEne51pD/5aG6fJJkGMyrFbUdL8R92+l1PFZSF6vdigVut6jimIDHbjaoRR4F\nE6Yb\r\n=ll5k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD2QQamGL4wcS2MOXygQGtaCcYvl10u+u45A8VZKzqnjwIhAIA8JbYf6nfCe4oQ0/6S9GLwcO6c5xUcHfuKJppFo9t4"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.10_1607358764340_0.05683378250500892"},"_hasShrinkwrap":false},"0.1.0-alpha.0":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.0","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"9e4ea77b66c2b9602feb4bd35b303a629eaff131","readme":"# @feathersjs-offline/client\n\n[![Build Status](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client.png?branch=master)](https://travis-ci.org/feathersjs-offline/feathersjs-offline-client)\n[![Code Climate](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/gpa.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client)\n[![Test Coverage](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/badges/coverage.svg)](https://codeclimate.com/github/feathersjs-offline/feathersjs-offline-client/coverage)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/feathersjs-offline-client.svg?style=flat-square)](https://david-dm.org/feathersjs-offline/feathersjs-offline-client)\n[![Download Status](https://img.shields.io/npm/dm/feathersjs-offline-client.svg?style=flat-square)](https://www.npmjs.com/package/feathersjs-offline-client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid`, and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid`, `updatedAt`, `onServerAt`, and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper`, `ownnetWrapper`, and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.1.0-alpha.0","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-yJSIAk7jw/EkmUi2yik5g10H/U78ZXfyMrK143+ju9zQE050OLKCKpnGQjvCa2BNYgyHto+iyNo17fSOQQxbIw==","shasum":"63bf84f63bcba76984dabfec4904237e139ecf37","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.0.tgz","fileCount":39,"unpackedSize":153798,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfznzKCRA9TVsSAnZWagAAoVcP/j22tIZ0fCf8T9R1/h5k\nXKWbU2Ic93Qh9bFfuvlLF2kcYbbmAYCkke/8lP8RwV9sl8HV0irV2iEUqMMk\n8M+AXaLfR+hAne38hia2s06GhdfRFSn2D205XykazDEIcc4lFG3cfC4+3pCR\nVMOZKW6ySCPw9uLjjZsFmdUa2tSYwJmwfw31cBkag2Gt4LAtYoDH+uqAV1bH\nDZoQoFOWLKp9LC3rcbgjsSH9uAxlEGocXs/v8LgQrzFYccPsjsoOpHQ0QnzR\nJWWEocYYb/u2Y1nl+Cjz++s5HqxBZQIH1LaVczBLiAsqWfMsDNbIbqONyP/p\nBCDbaQEMvW/VdNgDDZyTIYb8Kav7kSkQ9AL+Xdf5vFAFGlzdU7otmd581clC\naHBWFcUgZ6f81FzEliztmY0BBEv8Ja2S2a0uM+JqgGs+QNFjuLCzHrqF+W/h\neQ7A5UxaNOt+gwAGZmBrFJs21V4CQkFXIO+xpWtbM1x2C4lYP6o70uuBuOdb\n+NGHE6jQ95GLMSAOQ+bEuXkZYRErDagw1bl9cF48e1rIgIPaWhaIg/9do0Dv\ns2Cxk7PoGjrBkvXwD+4uabgrGC/lcdMHm4WRbbBnEuaK8+JdS/kn04EwT6Pq\nhrGw/1guE2qe8N2bstNpARoWhBH4ye6GSarFkimqEZGMIR629pFNcTr3WhUv\n7asa\r\n=clla\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCu1WQjfPYNLwdgCk/I8s4L829TTAmuSVrceg00zzJb4AIgUIL675LNRLTAQugbkN+DjRvIjkRmXEuzz4uWZOufUXE="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.0_1607367881813_0.8023639524967563"},"_hasShrinkwrap":false},"0.1.0-alpha.13":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.13","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"af7908e3726783b2baf846671480f4def870f746","_id":"@feathersjs-offline/client@0.1.0-alpha.13","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-mo7OXkIdhpGd4OnVDzmMHSNGbSupoDD2oOQymtq9usYQWJsBwFWTEfCo/dTgn4XXKP/UuYR4ayT7eduqr4aq5w==","shasum":"fa5424fa0aa4c07b0eb97534f5e7a275f9259b1c","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.13.tgz","fileCount":39,"unpackedSize":154007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzn+3CRA9TVsSAnZWagAAntAP/izEp9nOjDu4NJSgAQA8\nINAVJRWDs+GPSrzdAgGuCOiraW6gnhXEMZikRO5b1XuqkgFPi+xHyl1L3sLp\neC5polXMVsj6ITRvyMbAa5vP8XMCpyb70IITBOSHWvog1m4VuBvnECMJGhpb\ncXnzmCaajQvyLZ6Moe4BP9FitvzjScekHFqVjXiLNMq4Wq3kO7Kkd8os6mlw\nPCminWxm4Xu/GNlnEsUHqJGkWkX6gmdDSeyqWB1detYU2pyMCm02Ki/v4E4i\nRzZM6rM7y0GyNqCiiYWV2i11/PpcmTsLP0qRuF7bcYuFse0f+f5cKAqoRXCO\n1dVlB0KEP2S5J02rC5RUmYALHNwc0NYRg2Rc1hejQfIeOZf5xXqP8gMwnMtE\nVU3m+EauI99sKIqraoB6Mse8G9Pen9TLzn1qQsbRIS+Bsu59i1QANYMHPZkK\n24eICt/Bs9kd4ikGB+R6o+vY+Q9UA/vvU2iSn4N4GgxAZBpFYbAiU6pwUxQW\nY656YUaMDptOU1/dXaHLITEUglh9/9nu1KRZ4rF6jrm+wZOLH3I9MYN7fc/+\nmPOdSI07y4wUaSsoiiUCn62x+FTpTcH1O5Du3cTehfMX/WNPgI3UDqj86Rb6\nev4QRcHF0EwNmukj68GTiomwl1L08T/mc9TsHomjIZrrjyPLozVa/cJhnYGU\nJ6YU\r\n=BEJS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAesFRDwJkxwXxhXTpVpn9VBXP0zdhSuSDRflMLZj3CvAiAUrmnEmzKhV+Zihth9O+6ya6Y8Z96t1KdZrzNDuu+BAg=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.13_1607368630638_0.40291835106978446"},"_hasShrinkwrap":false},"0.1.0-alpha.14":{"name":"@feathersjs-offline/client","version":"0.1.0-alpha.14","description":"Client part of the own-data / own-net principles implementation for Feathers offline-first functionality for (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline/owndata-ownnet/packages/client"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/owndata-ownnet/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"1a5a5d9ab49459cb2a6406d21a134872fa2682d4","_id":"@feathersjs-offline/client@0.1.0-alpha.14","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-DUIJpHOOVoPigrIP50uAAkqupf6MdJB5qGlp0aagRHcqvdc6DqwLKq67h9udnywnB3Sy9W//G1fU4/Hl+4XnVQ==","shasum":"c3dddcaf1de8681d88a9eaf8f874335975c07119","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.1.0-alpha.14.tgz","fileCount":39,"unpackedSize":154251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzrkeCRA9TVsSAnZWagAA5wAP/jdKHr/GKybU5cn9FhH5\n4y2ZtE1JA6zAbvSFpDo3w4j0DRxJ7UOArna53jLfU52Yl0xlbLeqEetL2MWd\n5V10Xaz7g4eoDaxV+yJg0XTXe4i+7LDt1Ww7vyegzSqVYKRrH++OLU8aTYtv\npEbg2d/q9CU+Dp1c7DHvLqGv57A+J6eJF9CHZKekA+NgyBmh2CSpM2wVKAdf\nOTLKmh8yLTBNIc4kxW9uomDxBFv2jNQfcCw1PmLn/buHrZvsPRocsoDoQlso\nZKIdun7wYNvnff9Ni2JGYs2X1LoOKwSFPAJ1XUM08TG86Tj1z33aST6lNBnj\n22k9tumqLBJV68EEyDRTgVjtkxHzda3H7S+tw81s26Lv+SWD4jCg/kC5gT/w\nLInpJohVBq2IIxDJ3OOVGbnVrwJKIbcGM+L+gAEfZ5w7V2BGfqRgWKcIRCTp\nDZZ1RCWCAIrOgkF67J/1cDKQpTCppxI5J4B72+2CHIvI87UHyf3PawPIkkRe\nvs/fZvRzZ7nOj+IBeFujF1iLiTMhDko3WnMLwZoTSnk3p1RB4rhQwY/1ZILU\n+4kUU1hi7weWug7BTeKt8w3HHUsqU/POTn3gvQdNTABHANZaCIMwI9oWEm0q\navNTMNggsccpWTiX0gaR6+fLYsPyuFAcuy5rV6DBExK2lbtgSXpMtHnOsNO9\nJRuC\r\n=ZtWE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCmnCN6W8vqY5miDBhbzTvr/FWHPiRFDcAND7/+PmE5cwIgb6hzZ7r2ajdSJF1KXEHDM99h15lVmvx+xEg4EIuO1Jc="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.1.0-alpha.14_1607383326016_0.0718485351217899"},"_hasShrinkwrap":false},"0.2.0-alpha.1":{"name":"@feathersjs-offline/client","version":"0.2.0-alpha.1","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"b67ec355552f17d2fd8e20574a81692b756b30ec","readme":"# @feathersjs-offline/client\n\n[![Maintainability](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/maintainability)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/test_coverage)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/test_coverage)\n[![Build Status](https://travis-ci.com/feathersjs-offline/owndata-ownnet.svg?branch=main)](https://travis-ci.com/feathersjs-offline/owndata-ownnet)\n[![Dependency Status](https://david-dm.org/feathersjs-offline/owndata-ownnet.svg?style=flat-square&path=packages/client/)](https://david-dm.org/feathersjs-offline/owndata-ownnet/tree/main/packages/client)\n[![Download Status](https://img.shields.io/npm/dm/@feathersjs-offline/client.svg?style=flat-square)](https://www.npmjs.com/package/@feathersjs-offline/client)\n\n[![Known Vulnerabilities](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet/badge.svg)](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid` and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first/readme.html). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid,` `updatedAt,` `onServerAt,` and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include a user identification (e.g. '`_id`' of `users`) and an appropriate query should be set in the `query` parameter when registering the replicator (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper,` `ownnetWrapper,` and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.2.0-alpha.1","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-FIhJ9sqFzqhgYVVKF2zCi4RSwA90mlEXYToT+AYW6Jl5+SuhRwTIBmT6iv4Tt6kQOYOKDhYTiSrtwK8tS03rBw==","shasum":"fea1accd170ec31291e89a0ee0fd0347141eb048","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.2.0-alpha.1.tgz","fileCount":42,"unpackedSize":1512445,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0PKxCRA9TVsSAnZWagAABVQP/RWIuU+d8RIsvPwW8L37\naoymRhRMje9Sxyb2J4HepaiEUPdzmWLWKX+U+5YQUxmcLFGq5UajhNNyPvVE\nAJwJCoI6FFbaFu0XPR8XnD8Xw18gdiktiCC+jM0i8DejcNWVC39lB8vevSqg\noLsrbbTXoiFMvQiY9/xBaO076CLYg8nHs/ZDAWaEaRUmga2ASsAJYEuRgmPT\nZrm8X3TQr9KBni7kLvlaNugfEJ6n06iBilv7+4y7WCM/uhGt/k6sak3Hnxlh\nw7h7wWf06+8U+hQlBDLCpUoLmi14oCqL6o5zJwU1G6V4OOF3OCYT/z56C7PS\nRDOI9PkNleI5mdB/XiN3B3giEPV4OsU4shYNR0zBoC+YBjWC17FUuOvvnAt+\njlhMzr43qMdPB5lBkaIIvsVnzeYLVVn/JnPwfYKv/gFGZipaAfttBBk4GO7R\nyOvnRBqATtaKcYWH4XfUW06454GASCRQI5DIvspemoBPy4eMoFnSzMNbxyiS\n/HGo5yjqNdhWUBbtL2W37s5humwSnt86dRyNZlg1hrimbW5CZq4iPBAFvb4k\n0Bwm31hG1AK9M6DfKzzDZ/lSN2089498OVNwMidzkeR0MgdK9CJpHx3uAVu2\nQYUYrvU4gGFvNvuVWDVv3Cv15JHrQFKdJr9dcFzSrd47VLSvMMg1h8iYpIEo\nwXrG\r\n=XwJh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAsxt70h5kCuOAcZ7eaHL3OyOmVC0CuCnY6qmywegRiHAiAIT+dz+k/Zd2RfrBE4i6SmLXFibUSb41BzD225xJI9WA=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.2.0-alpha.1_1607529137211_0.3839616539954882"},"_hasShrinkwrap":false},"0.2.0-alpha.3":{"name":"@feathersjs-offline/client","version":"0.2.0-alpha.3","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.7","@feathersjs/commons":"^4.5.9","debug":"^4.2.0","feathers-localstorage":"^5.1.1","feathers-mongoose":"^8.3.1","node-localstorage":"^2.1.6"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.4","@feathersjs/express":"^4.5.9","@feathersjs/feathers":"^4.5.9","@feathersjs/socketio":"^4.5.9","@feathersjs/socketio-client":"^4.5.9","@types/debug":"^4.1.5","@types/mocha":"^8.0.3","@types/node":"^14.14.6","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","md5":"2.3.0","mocha":"^8.2.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.3.5","ts-node":"^9.0.0","typescript":"^4.0.5","uuid":"3.1.0"},"gitHead":"f9a3d3799fdb7e51c2a3323a06d58199cace552d","readme":"# @feathersjs-offline/client\n\n[![Maintainability](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/maintainability)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/test_coverage)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/test_coverage)\n[![Build Status](https://travis-ci.com/feathersjs-offline/owndata-ownnet.svg?branch=main)](https://travis-ci.com/feathersjs-offline/owndata-ownnet)\n[![Dependency Status](https://david-dm.org/feathersjs-offline/owndata-ownnet.svg?style=flat-square&path=packages/client/)](https://david-dm.org/feathersjs-offline/owndata-ownnet/tree/main/packages/client)\n[![Download Status](https://img.shields.io/npm/dm/@feathersjs-offline/client.svg?style=flat-square)](https://www.npmjs.com/package/@feathersjs-offline/client)\n![jsDelivr hits (npm)](https://img.shields.io/jsdelivr/npm/hm/feathersjs-offline-client)\n\n[![Known Vulnerabilities](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet/badge.svg)](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n\n### Own-data\n\n``` js\nOwndata([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Owndata } from '@feathersjs-offline/client');\n\napp.use('/messages', Owndata());\napp.use('/messages', Owndata({ id, events, paginate }));\n````\n\nor\n\n``` js\nowndataWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { owndataWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-data\napp.use('/messages', memory());\nowndataWrapper(app, 'messages');\n\n// Wrap local db with own-data (and special options)\napp.use('/messages', memory());\nowndataWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nowndataWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: `id`) - The name of the id field property.\n- `store` (optional) - An object used for initializing the storage (see `feathers-memory`).\n- `storage` (optional, default: `localStorage`) - Decides where data will be stored locally. You can choose between `localStorage` and `sessionStorage` on the client, but only `localStorage` on a NodeJS app.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s (sufficient for most applications). If `false` long `uuid`s are generated. This option should match whatever you choose on the server side.\n- `trackMutations` (optional, default `true`) - Should we track mutations à la the `feathers-realtime-offline` way. Today the preferred way is to register a listener on the service on the relevant message (`created`, `updated`, `patched`, or `removed`). We have three services: two on the client (`app.service('mypath').local` and `app.service('mypath').queue`) and one on the \"server\" (`app.service('mypath').remote`). The \"server\" can be the client, but it's hard to imagine the real world usefulness of this...\n- `publication` (optional, default `null`) - \n- `subscriber` (optional, default `() => {}`) - \n- `fixedName` (optional, default `false`) - \n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses results containing `uuid`, `updatedAt`, `deletedAt`, and `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages in-memory service that supports pagination:\n\n```bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Owndata } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Owndata({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example see package `@feathersjs-offline/example`.\n\n### Own-net\n\n``` js\nOwnnet([options])\n```\nReturns a new service instance initialized with the given options.\n\n``` js\nimport { Ownnet } from '@feathersjs-offline/client');\n\napp.use('/messages', Ownnet());\napp.use('/messages', Ownnet({ id, events, paginate }));\n````\n\nor\n\n``` js\nownnetWrapper(app, path, [options])\n```\nReturns a new wrapped service instance initialized with the given options.\n\n``` js\nimport memory from 'feathers-memory');\nimport { ownnetWrapper } from '@feathersjs-offline/client');\n\n// Wrap local db with own-net\napp.use('/messages', memory());\nownnetWrapper(app, 'messages');\n\n// Wrap local db with own-net (and special options)\napp.use('/messages', memory());\nownnetWrapper(app, 'messages', { id, events, paginate }));\n\n// Wrap server path `snippets`. (No prior `app.use('snippets', ...);` )\nownnetWrapper(app, 'snippets');\n````\n\n### Options:\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (optional, default: 'id') - The name of the id field property.\n- `events` (optional) - A list of custom service events sent by this service.\n- `paginate` (optional) - A pagination object containing a default and max page size.\n- `whitelist` (optional) - A list of additional query parameters to allow.\n- `multi` (optional) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. [ 'remove', 'create' ]).\n- `useShortUuid` (optional, default `true`) - Generate short `uuid`s. If `false` long `uuid`s are generated. This option should match whatever you choose on the client.\n- `adapterTest` (optional, default `false`) - This is usually only used for running adapter tests as it suppresses the generation of `uuid` and updating of `onServerAt`.\n\n### Example\nHere is an example of a FeathersJS client with a messages own-net service that supports pagination:\n\n``` bash\n$ npm install @feathersjs/feathers @feathersjs/express @feathersjs/socketio @feathersjs/errors feathers-memory @feathersjs-offline/client\n```\n\nIn app.js:\n\n``` js\nconst feathers = require('@feathersjs/feathers');\nconst io = require('socket.io-client');\nconst port = 3030;\nconst socket = io(`http://localhost:${port}`);\nconst socketio = require('@feathersjs/socketio-client');\nconst io = require('@feathersjs/socketio');\nconst { Ownnet } = require('@feathersjs-offline/client');\n\n// Create an Express compatible Feathers application instance.\nconst app = feathers();\n\n// Configure socketio \napp.configure(socketio(socket));\n\n// Create an own-net FeathersJS service with a default page size of 2 items\n// and a maximum size of 4\napp.use('/messages', Ownnet({\n  paginate: {\n    default: 2,\n    max: 4\n  }\n}));\n\n// Create a silly Message\napp.service('messages').create({\n  text: 'Message created on client'\n}).then(message => console.log('Created message', message));\n```\n\nRun the example together with the example in `@feathersjs-offline/server` and you should see two messages displayed - one from this client and one from the server.\n\nFor at more useful example [see this](https://github.com/feathersjs-offline/owndata-ownnet/example/).\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first/readme.html). The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n>\n> `own-data`/ `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service until the device have connection to the server, but to the user the CRUD events are executed immediately using optimistic mutation strategy.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued event to the server. If a record (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only 'net' changes.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid,` `updatedAt,` `onServerAt,` and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include an user identification (e.g. '`_id`' of `users`) and the servers CRUD methods should be appropriately be guarded with a query (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper,` `ownnetWrapper,` and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md","_id":"@feathersjs-offline/client@0.2.0-alpha.3","_nodeVersion":"11.10.1","_npmVersion":"lerna/3.22.1/node@v11.10.1+x64 (darwin)","dist":{"integrity":"sha512-P+BC0yTmsnSl/1D51pqpC91jZQRBPfgvJ0HNK2BT7fBLQrsE93R6ySVkMyGBe2hUG5xBR4dYRZsRFKWJVIMh4g==","shasum":"6e234f6be61b0d172cc5c8d642cd075ad6cbf46c","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.2.0-alpha.3.tgz","fileCount":42,"unpackedSize":1512609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0UsbCRA9TVsSAnZWagAAJjEP/itW8D/aIY3rn1ZoyFdd\nNiuuT1kyT+jKnwiFozE2/0NrM9HEdCPkUYPvCrIXqeGxDwZDIFkiNkCo3fgy\nnvdjPJFQ5GPRt+TUEOxkxcfXOAySXJ8dyiZq+0qtJnaiSkBhM5r5MNb98fzx\n43hr5xw5xZrOt+0rjoRxCMpjmgPYO01fslo5hXCXUeZHGOy1ZPG4F5TPkGMQ\n4xkm4NzfsjbYUOp+aAp/S+vVW0DA88gzewe08gPLTODmYIm5WbpdogOARjD4\nCyjZuwwGEBoegG2YvEYMPX1jTt9xMZQCrs4Oy91UyTP3rMRB8ZqqT/DocrsE\nE7E4CHhJT8KI9sTrpiqPGpJjTvp5uih9wn1SJSdbkZtMInKT7RHwqnnpf168\n0qbXRoiInE4tg4q4ODhIIcmKhTmhvp37k1X7LhCM3C7qZSqU5tfzZoYgUfNQ\nOj9FoCfzfUidTcCdhvgHorISmJo/s0ArD4gWuTYOa+3ESM+pIWbHwJV6PzrQ\nsIQjr0YRT+huJ11Rv/XYjxDI2tfqLsOBwKibxhpB6FiWdEkTS84IyWGmB55a\naBAiXez4s6osG7A4HalZANFce9rxbJ33dh4aUCUXR33H3sMbylv9AUvaygrf\n3hPvgfFsNWcGiZuCnaxNpE7oJzEE1RI2smAFKEniyALASi/O8ubKB/JO+FN5\nPUQV\r\n=XXBw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUmJi94iX5IhAR5u9OO/CPFaOxjCsmi62XYFoJMXQn+wIgSNo7+kd3AQ4l9e0paNji8dwoC1NX6LuuJnAYyntFap8="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.2.0-alpha.3_1607551771312_0.10602891470421594"},"_hasShrinkwrap":false},"0.4.0":{"name":"@feathersjs-offline/client","version":"0.4.0","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"homepage":"https://github.com/mhillerstrom/feathersjs-offline/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 10"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/mhillerstrom"},"contributors":[],"bugs":{"url":"https://github.com/mhillerstrom/feathersjs-offline/issues"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@0.4.0","_nodeVersion":"11.10.0","_npmVersion":"lerna/3.22.1/node@v11.10.0+x64 (darwin)","dist":{"integrity":"sha512-baweMDEA/FrbcrGojk3YdKUiwRnvHwdZQ7Duul8c/cpHCnWIB0H6qayidgyHsFZmXyYoNlyD4OlqulYnEx2Ufw==","shasum":"3ec50d141a106f41c3e9c4c9c27a4b51b7b38149","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-0.4.0.tgz","fileCount":43,"unpackedSize":995188,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf0oleCRA9TVsSAnZWagAAnOsP/3HX/7uIkoAJItGv+j8A\nKfo8SCgv3ILk6TZb8+yxrlOoop7UG7NN3lPq77MFggFjPTK8kNJmr1a167/I\nSfZ5xW2OuY0HSyRVUMpJlAD0Gb96WOFOFWveQD2DvGQXuJpcbI7rZdd4PQ5Q\n7FgmgBk/yKUXWmjFFz7xozpHHxE1JhD/CIdvByG6xvsaJHwJ1GiRn7OQlukd\ni4mB8eT3pvq8o0UpJXorhuU1bPWe8yNh5iAXVI50B2lVbiMIgRSLE5bIkFQI\nj+lWHr4HRW5dYlcE0YoCE2JaeUUg5ATqAF/DTEZOBppdNJbjwcejOoqZmFXJ\n1HawPeuDjjGyNPlgcUlSkR/sghNicXcSFJ/X+o4Tpaty63iUMRE55bSaehFu\n1y4GxR2AfHcRQv7MERtjQ81ljZIM4VS3+AfSiY/COx4ghEAPnrxyvBg+yN3o\nTiEtIaIDt+cPE9dlv1cWi8ODiM7e96XBSuSQ3cRAeCgw4HQkpvan/gO+ZjB8\nTAYYp72fSumDTwxz4evKjwpVN9uJL0gH5Uzp40kqnwUY5Vne9pjwWNnS7uqe\nMfKu5D2+7P7Iu8eyZ14Tzl7QJfNu30yHs1rziUScnfB9HF4mt6q1MLEQ/rXz\nzW6I+SruYCr3oAiY2rt+ijUiwVeMlIe2K46H8sIht1pGujEp7R7QKIOj9BO8\nmJc+\r\n=a+dd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGJhuHmmIgWj5H76oMqOpHng+IEu8M0YevOcYA74GGiLAiALbX30VOGCX/aQzR6nweMTGjktH5nvzGA6YTz31mCH6A=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_0.4.0_1607633245958_0.9388677984574099"},"_hasShrinkwrap":false},"1.0.1":{"name":"@feathersjs-offline/client","version":"1.0.1","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.1","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-azl/JPVpi+k0HdP1SIPbrJvYxIqaFWF1AH4VZa5f06p6JbepnMub4n6tEKRa9lW7Mg2QuTuG4Pe37VsuqqnZzA==","shasum":"d731b6fe936ed56e49a5470fba0d7ce7c22d61c2","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.1.tgz","fileCount":30,"unpackedSize":951635,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf05ZpCRA9TVsSAnZWagAAnEgP/1vvmcREDXO5hjb19rAd\nRwWHFbviSXQf84fdZAwQ1ZKDdgwHQ05MHfa209gvaoy0VoOyn9Vey2flvOKL\nx5vjra5cw8yJvz3XpJR9qQgbP12ITbJqBQe1Cu2Dkmjz694P3KXLg6nBiflv\nKB5rjF2wGEASW6xmKiVSIZmWQe8DTbLbkYFzJaaqTEJQ8c2zxhx4UJHxUp3K\nmg45UudOO+S1kyFybnp6c133uChtgKPhQb/HqGs9irw0h+HcG5AqW4ZAfCUf\nwrnpvxWrAH/S4oAHfAbWJTBtlbTqCzmeML81TkcPjzKHVc48lANTayhIlYx0\nMQ1XL6y5zhcYgATzO5S/CPHz489lBauOELcgxd92fSAiLdRu1qUdcEANy0pU\nqsBxTVSYstfwu7ZmGGDTyqR7DTbOd7uuSaJfUIvJ5Bbg464FPiA2krdtmZ4o\n0LYZoD3C11U1BEnhaHMTwPnek3waun67vJV1ocBcIuc8cDemx1SpQt368gK8\nniuibmsK6cpLWRFnMCSdSqYstfFYa/XF2LgGSuiWrt65cdRqvTYRQ94z9jrC\noUQE8De1r+QQT964d+JnzwFCCKYhShbTj/UukvgxE2oQYNWNtaI4dOhdDVRU\n3innowC7lmDkQIItgqRo9mJbiwVrt4TvoR8gGOXYRZmcK8r/PCMLpPbV0O0B\nWls4\r\n=qAnP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMPDHpPN1PeCWo4yVK5zQK0jDiz68GUevu1svdWzTBQAiA5xisv/kOURU2Mch9aU32axmqW/D9zHWg1BT8YEP+/YA=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.1_1607702120993_0.31018169346409485"},"_hasShrinkwrap":false},"1.0.2":{"name":"@feathersjs-offline/client","version":"1.0.2","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.2","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-74c9TRAOTUEpz4XnInRT0jtZwfSrf74D5RQXMS1Lap2y4YJb2VdZTM88K1kUN8OXkdwTz0brCYS1nRegP/yl6Q==","shasum":"ce07166788d1eea5140f7e398a9a33ed5dd60498","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.2.tgz","fileCount":30,"unpackedSize":950110,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf1NB+CRA9TVsSAnZWagAA0AsP/1oiYxLi+mdvSikdMT2H\nFurybJQL6vKTTu6JCITz9Jg8RRG7eo55mOkeIOEzpMNaeBrLZy3PCcPRWQod\nY5HffhHVQRuYeTeTg6q2CYm1h/YjlCCg4UB/SsJFaRzB0KBqfhlNhfFQxCQV\nShl5praZFTsf6EeKG7yxpCBXgITpdrESAwnSr+Ge3r4Yv5yzbnt1MnW44Uym\nzMXdOtQGeGxjpUVKQ/WVvLTuKbl4Nl9N4zxvyGqe2uQbykmMqRUkI3ZWH0Cy\n5Y7DGtS8MN27r0kuR9L+R7uijUlGlvrTmb3NXtohjV7CnUE8n9TZ69l6IWq0\nNSjcJbZQd0IExpT3FYtXnsiqUPOxrdLaDCw9b89PpoAsYEpLECShTni4xvkl\nGK2G+GkeaOk36KHBVjqTQsmJAfO+5eKA1AK73raYj5QXA4whHq1AQSih75GE\nGXOVUeyV2rA+/Az8f5MDFhj6bQA6qpwaebeq0tWxhDFMEhaDTXidEqVFBbIB\nBKIhu4nMGd9hLL+qEUXdENx6+Wk96m+BRI8yUnSRRZ3ywDNBe0PUs20JzPHb\nGYl9upm6yk6zPrjhwOMFF5ZbTNxJojKxOiUba9EqrzKDfvecGLBD6S4alD8N\nbWEZHsJ1SkgUGZR8yES/wqyl84mCkNUekkfVWrTwq1l73Ln0kcRwL/GWKT19\nAOsJ\r\n=A+k/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDEFIwQQ/KHbPbDB/XL4prWaQZNazQ7rzLfelwifKE/GQIhAIvDcmZwEVIRgub9MJ1DEIeXo5H6NL1xP+n0dwhogwdN"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.2_1607782525524_0.4992239323806873"},"_hasShrinkwrap":false},"1.0.3":{"name":"@feathersjs-offline/client","version":"1.0.3","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.3","_nodeVersion":"11.10.1","_npmVersion":"6.12.0","dist":{"integrity":"sha512-10pVpAZSWW5JrQi2eiIlvd4OFYWLSlCHa5if+XsfFNVSFlZsiYzCaw6zguuOh7h5g6BFAQ2amgXf7+YEM5bJrw==","shasum":"df72b3567076748c99ddb6e7fac5cb833b4c70a5","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.3.tgz","fileCount":30,"unpackedSize":951304,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf3febCRA9TVsSAnZWagAAd9oP/0xpOz8NZ5AemIjrxlyQ\nhbrFeMeNO/7v0CSrebH27cdOxFT8DgmxiM3Q30H4bfd7zmVAxyYy3lvYC8Vi\nZHndUW+7Hm44arTtUK0LwNx87JGjSITSFezoaBwLTyV/af5e+mXD85PaoFs1\nlTk6D2PQYKL72ZZI9l4q9IgBQl9frGSv33mQ0ivmKFszyW3Hdr7KoDV3k5pd\nO57PaK9e4VR3XUi8O6UaQyveqWQc5QehTMju69QXtPhgqfi4QToIZphLthVv\nLFCgBg01ScopHh2CWYPKmbrs455Z4g+ktUqa4OBNNQ27o3llolvz9D5IQTNd\nVhPIxenX56TF9rSl527Y+CZiwYGDVoq6p8bXk/JXhii6wReRJQeTm+fjM412\n2dvJzCJDJMl4foA0yn5P0Z8K7kchG0A3r+Eo3yV9W1KI/fzIyNi62AKimxkZ\nkSmB+cnthzccC9/ic3ZmQdNd7D84e0UAzZAy6y0GjVSA6oruI83bK+PhKMY4\nzYCMXugTTbr4temfyJTmlrj02H5I0argEY81F//0e6hQN8DvVZF8bvx4pzAZ\nS6ss8IWatTsH/FKR3Qp7AZlwOR1U2JdryzhhEApDuqMkXpK6MeFi+dFiKU2e\nZNC00bG9tJj2MbGeQO8QxmRoqgR21wJGtHxf1lCETKKG8ugLxALt2sE8TkYz\nBvMu\r\n=70rD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCI0lS5ZkdxTmzTWnWKw2X5/zHDOaGbforw5apnU17T1QIhALCPaPbc18VnJWnlkbwu9CmvC80+LOfHZycRUv017YOb"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.3_1608382363058_0.39090561132422863"},"_hasShrinkwrap":false},"1.0.4":{"name":"@feathersjs-offline/client","version":"1.0.4","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.4","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-sf5UOSx/exwpVCYCSXJzXrc3kiWvXjxK7iyEGiSp3V3Bxo+s/7gtyQb/YNjhvpVQZOv1VZVbr6gEw3CccKyxog==","shasum":"93f42918802d325736981c490e392004e044c9c6","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.4.tgz","fileCount":30,"unpackedSize":951135,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf4z0iCRA9TVsSAnZWagAAkcwP/1rk0gZ4kAmkIhU/+Tnr\nhX8HSo0w5manfhvMD85bs4XwujFrw/Xy4z/LL5pXpHUvgbOQb080KN3KASRM\nI98mxLgeqnfJEtg/PTRfvqw+s72PBCJBpQrgSfbIqrFBCD2nCQEoyZyvoMzk\njsPBQEGZK1DA6kZ8tWI1F77+xRLUbp8x/SsO9k3AH2xzX2lxpKQD4DOHVTuM\n1EMD39nGt2XKpmiw1BsluUrFxnPGytPqWo6yPJQEiP8Ht7c3BghdJvNpgG+8\nDxJEZfI+IPzodmAhvJY009wE1JvylT4GRPvK3AZGxZBcpN+UEvdtc2VeHrNC\noN4qbHvvfLrzLc6o/Db2EIOAP+qsfcgZKnc79VDiIOEgpat9oPHPtvLspMmE\nrxIRoXK778CF9uSGxZ0xBbM0dTs1y1jInj5Y7DxPikeV/nc6LEMIJ6bKoVfi\nGeriFwOXU4bp3u+/gimrVS3jGST8xhdNtmUeGZVEbZRbqGnJIUCd4ip7W4zr\nFd/PtQf+Kfnv/mpONFGMvns5+uw18SLjMVuqcQSAwrKTArIFLmuy/45Clxyd\nAXZ8yRcxY7DJtChvDs0T1ogNXq5FK/2sf0nAWv+vKs5+rCU1kpD4uj5VazDG\ndjVZiGRQPmQUBgk1Bkx82RpdXrRirk17nJSjELOrqrftuEv1SnzIwkAPWvK9\niqqa\r\n=1Tr1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDyldIl0m5vGeNWRCmPGLxsHTNt91IWVkgnGxK9BM8kgAiEAuzuOZIwIrgdoYMU3WC6kE4hg5z4AM7bcnnuVikOlsQg="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.4_1608727842245_0.1356531965587653"},"_hasShrinkwrap":false},"1.0.6":{"name":"@feathersjs-offline/client","version":"1.0.6","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^14.14.12","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.6","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-HGW6agFOER2xYRW56t3CaZXyLm/WJzhqh1cptEf2674wtkFAZ3Q46/jOiizH/+87t7JN0Uhwwbrv5sM3+E3NYQ==","shasum":"b5473c85498e0291419b422bc7f0d821a5d71871","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.6.tgz","fileCount":30,"unpackedSize":951607,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf5G9kCRA9TVsSAnZWagAA7o4P/0D9ocnGBaIZdeNQEk/r\nDKj+6Cr4SbNDPXIdCqw/I6B+jHl+OMjtKNHQjQekOt44kfnSJWb5E+8GvzEm\noPds6HeKNWrsvFjq5sWpzb4ef3TIQeIGfwRbr/U+Fa6CJ9biv12aLISqZUCH\nqhzGivOBRJprcJPSKAo0bZeP7xmTUHB4jVBkZ4LF3Zn7MRAQYk/6pmP3D6Xp\ngYUGMJbnyuB1o/oKd6T9CWLg+XfE8BujzYHYyW06FHuEShr2QPtK6K1p/a1h\ns8VH9mIbrwCbOVoj3JzzsUJREgIIsnA4QumQx4P+mlrPeC8cK/V5dPMo3Im2\nz+Se/IdN/4Iesbm3M96wkLKpU6nPxCknAb93xWqfuz6Er+zPr9zPQSR10+TS\nOtcT7BEofU+fZP3laJe+Yp0oPA4NcZ80oVzPrcFbenYnTnshyAc7RcacZTTD\njFxJhnqqpVq2c/4o1WthZ8EYALZw+vZc3pzxmIkEbV5CTIIReJ6afxuTCOOw\nN9RdhnaKTPjHk5jtB0YTupye2F3N4+QyxWTT/MYLYgN0hbVM8i/gqLJ4mLDx\n4TBuZDDd1JL6OXwvtM5zTzH8VUg5nOdWAWoOHDz/lN2JKLp4jDVrJRsRQROJ\nTdgnA24xB8RQQrTqvPIfIqY/74PBfb2SZv60K2J8SEL+a5n4NZx39+emrOAn\noiae\r\n=zNZr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDFAD2S5gT0CjD5rnqOh0dsYfRbh5PxDQXuXq7meQU1ywIhANhbl4dr0lSQTUD0da7ZwzElpfQCE91E75tkDZ3NQGOv"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.6_1608806243940_0.028882788811991578"},"_hasShrinkwrap":false},"1.0.7":{"name":"@feathersjs-offline/client","version":"1.0.7","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^15.0.0","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.7","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-V8VJ5bRCo/fytkv9bkFYYRiTdsYbKHZhzaxUG6kBR4FngO7pV6/prZpkt2I3Sk1IVIzIFcA4O6+cL/QnYm1RLw==","shasum":"994bca2a6ac78c9982e91e67a0c68ad635276105","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.7.tgz","fileCount":30,"unpackedSize":951776,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiQAQCRA9TVsSAnZWagAA/g4P+weCkj5uxDExR3M2ixn7\nSRfuljecFGKbn2XXVLFC2NJMjtHdqR0G7Hj0qUESE00qkYBhzE/7cbChlssC\nBPjGzAd1d2DGuWh5xg102UFiNb9IbjFGINXTfX7t43DaJoW3Q/3ZU34IttWY\nIEgLtTKsBHLdQL1NET1NfzJLa4cBI/r/L9NG2UsZy1nsf2PyczTXMtUecsN4\ntifm6sYI96+6bV2ClQFvCsHcYWrec2WxEUtrmYqT6K56KtXgLPHJh1nmTPvz\nqW36i6KLLq4g0fw6Wo2Wsdrf3YeW6sKOU/poZYJYeDovPnoYZXFNKkLXznAO\n+IcpMR4PoXihmyX2C0S3FPJLYOBsVMgdWrGr/jm1oHaqLE6iK1FbcaQzGBVW\ne8yyPc75O78vike91elbIkrX3hqguwyCOIP/C5reNG9o6fGNGLbwWwMcntGJ\nLPSX3W0B1ab885HvGyUiReF4DGm3zftoC1ITYTr00Ob2VuZ/XgUgz5xqaTG7\n8BVGUNm9A6TA3s8StpmXexRgAV7sZPOMNMW0NNRFAq4mpSnTuPvZwTg+CSXV\nt8OpzxL5rS14EjF7jJOERL4grzmkmWysenevXp5E5XO9HqY7Q8Uam8oLVqis\n1sWBgim4yfpLeABdO4i6tAac4aPSAPz4NFGdofCbIGkTgR8y7Oh4fu5f0rhE\naADD\r\n=RTLk\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJyye+Dx4f92qcoKae1X2TTgTi1DkYLs3iQDiUOG8uCAiBNqmCSjJiyd5rzxint0hG+k60EZi9lIov3Tskc1ODxxA=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.7_1619591183642_0.0782750278517903"},"_hasShrinkwrap":false},"1.0.8":{"name":"@feathersjs-offline/client","version":"1.0.8","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^8.2.0","@types/node":"^15.0.0","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^8.2.1","shortid":"2.2.16","shx":"^0.3.3","sift":"^13.4.0","ts-node":"^9.1.1","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.0.8","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-7s4KjmJ4LZLuTUWmwn6WhVyFfY0JRSwHk5THys/mrGq9gF0nA0Kbc/4dyrrcP7niifwY5o13amIr7SRuBjrTZA==","shasum":"2d15242d316228af00492ae9d29435d94a8e6bda","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.0.8.tgz","fileCount":30,"unpackedSize":952199,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJg8umPCRA9TVsSAnZWagAAFDMP/2I87Qv2iVsMKoTDaW0Y\nOKK5xAtQwlxhG2XkFS9KFGtfRC0lsOvMVfmRSD9S2xSWt4G0kV0TVNc4DZVB\nPdCQWeszaeu4zvLRQMHC/lNAtA7nA4/JfJ7p1RJC5iulG+0DY/VFqbj7ZY5x\neqX4D0Ij8muoMiKBhU7gHIpQ/J0fthx0Z/LSap9i7Ip3GGQuF7tTcjx74BMB\nE4P7RPnWex09cE1ihiWrpTpVVkFAphqS6WqT4F3M+OyauGLijMjtvp+JdyZk\nE/Cbs7jxeHxcVeRYl0LwbvqJBRbWLzq0IfcibjYcctfjpZovHyKe2Dqyol9c\nepPellFYSNxJd7EfibKThAnSgjn9s9OlZTwbBU46WH1lfr7lfw9bsQkSCaVP\ncv9wcy55ZRhEAChctdGs4fecARdtymWQkjA3qti+93ifnpoa0eyWm+lRg3U/\naU/o8JGkUvBDm2Bo/yHXiUbQbUpqFGNqSpIDlRU0Z3RJp7EDjy6lZ1STGCZy\nB9DbZYrp6Wyp7sE1gfAIdFEdHCWjX3iC2vv5HXoPLBXb/2fnunp6WwWmB44/\n5/EkWnOKEuwSCS2Sw1YdIz7l+fhWq+0XZQWc4VAkNFme3ga4AshVZ38jVe9d\nFRYJn367w7OyrAl9wz0O1mz85fEy9CEmNfPHkRAhyNEDOc5jejVl6RIWDbiC\n4mjF\r\n=KxI2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB8acwf4RdxI2aGLStePx3WR81Im9Pa1OH7xQKLJBCEcAiEA7YvV7nb1Tqb+BWL9LU63/D/zhyEcT/IVupmfarzxCJY="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.0.8_1626532239551_0.9141479627973716"},"_hasShrinkwrap":false},"1.1.0":{"name":"@feathersjs-offline/client","version":"1.1.0","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^14.0.2","ts-node":"^10.0.0","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.1.0","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-4GdSSU4HHjGzTovtWZIJPbFw1oW4fpiSt+I3hmyfF4dp2gZ502RA76nFhoMDLtRBRINWKeFuOqjkinEQVejukA==","shasum":"4eb9732b63b00bcc0256271c494d3160d8cf6ae9","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.1.0.tgz","fileCount":30,"unpackedSize":792461,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBA+5CRA9TVsSAnZWagAABa8P/Awv6bMgxuDTgCSTqVGz\nuxbfX41DS6x/nF1IOg4OfFqDZW3M3Yat13Gvf8IpwNbD8xMF3iVGRUKUxf09\nQTL99V2Z40PQUDwchIRzS8bysb0oPHwCe5W/o7YPEy+W88duvD6OymFzvD7h\n+sSnRYPLHcV80sY1GOpamVWvKhGD//gVn0tKIM3EeEvDhNofvRK5DVkWIxQZ\nmhXYn7BbqRbF1zn0h4/cHKMXvaEBIcjHBzWIjTR0euBo4wBaH6QkPStWj0Xw\n8UchkxwnI8x/SiJ85buLa+QPAftFUPCtx/mptLxitlTGkvw2UTS95pCUhfXg\nYj/iUGT4A6uyD5uQrfYUBCX2TLwlwODV3RQC/3E0MECZyCy06cw7aU3KC7t5\nTdGRVtESdfbRp2Qoimt+E86feiEz5DmfAEXwvy7aqf6hykoztJ37PhbF1rSL\n0so27/ZKPVEKMX11mfjmt/7VfB6l6Zy8CQstNREA52FX39tIwiyu2uoFWKqo\ng20pf/AX5DbDBHja64tZT0b1wvSKLLn/Ke0iO/sd2gqKdVozn94zJ9c0WMgh\ndyp/ObVFGzvLWEfPjTewdXktFjonbLB6qIucLsBSEdGGgvlY0BjIctUxnBqH\nOjOLtz0mZhnrzE2BV112nSij7QCAWns89FKVEeMufuPHzh4HmH1xKulcInZP\n31Oa\r\n=EgqL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEcnkVqShaTad0It1oebx+5oZ1rW3uEfYkIqCOqYhH1kAiEA2fl2xiO6lCto32q+18NDVCiwffzDQn1kXNkzGeXM2X4="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.1.0_1627656121088_0.6690321754972544"},"_hasShrinkwrap":false},"1.1.1":{"name":"@feathersjs-offline/client","version":"1.1.1","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 11"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"rm -rf ./.scratch; nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","node-localstorage":"^2.1.6","shortid":"^2.2.16","uuid":"^8.3.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","@types/uuid":"^8.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shortid":"2.2.16","shx":"^0.3.3","sift":"^14.0.2","ts-node":"^10.0.0","typescript":"^4.1.2","uuid":"8.3.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@1.1.1","_nodeVersion":"11.10.0","_npmVersion":"6.7.0","dist":{"integrity":"sha512-pG5CjAt9AhY5prZqyLc/i01XLTqnzm9WksU3l4uGy9h12+pTiRt2WnwreY57RpM5bnnN2NLKVdcMYylVdjR2Dg==","shasum":"f7a684a27763873ee5b2dee5132e94f56ad64e1d","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-1.1.1.tgz","fileCount":30,"unpackedSize":794816,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhBr/1CRA9TVsSAnZWagAA4NEP/RHAtFPBKcz5wVkWuHmq\nOAmZ+6tZI4b+CPQy7fH3nEEBPAfP+LtYEDwwuv2ECcggZt76AHcUJVP8GkXK\n+Z4CBYyeEbe/MSX5+Tg9A62gZQueGmaqpUk8lsw9bU5UNlLS3deSWQfFFW4a\neSw1fGrzfQG1iQZrJGZxU7BjS3Qap6zcBWPZDY8rT1Lpq6AZCZzHcn3HGuVp\nVUds1bqBHZ4NW44Gp4szFhuIVuU7tPuwWbzenGSB6TUFhSkKNaiE+2b0/D4a\nBpg/wVbcIQUu4OtHx322OClziHUIq2mgZU3r55Pgzq1a5heAYKgDp1BU6n9U\ne5nSlaR0qYpH2NexXkbvS9oXA3x/F9mNM6ssOobMEsjHYUV2Snr8Hb6VJTsa\nweo3GGIpYfhhnoozS8yv1aIQw4KPlLyrL/yegnf3/N9CSbMDwZ9cWxdbSGED\n/3LH4XZWTsE2F1MbDvFS02RAE/eTbzxW1Bd8Ky4hFVHYrhyVLL8cuOlbHUOE\nbQDGKunL2xpz/Wb7xeKIX2aoPeflQJAFRW+ajU9z+fng2p8+LUx5TBIxoYqu\nklrCeEiCyLl301On7TOC0t8KraZPn+XF9fn7LPjTcxv0g13JSM9NFnqMrdEj\nVI7hw6+fK23yEObg6RqQ/YNZEzuV8vYMBKQtlnlbjrAr8W9NW/Suhn6v2gJ3\ngnTd\r\n=utoC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGvlkzW7CJeiLTdP2Mva69/qQliMtgPvXd3j0/0JJV9rAiA3mgZSofgfumvwEqnwWsYpI39HRNWdRMr5t5nZfIGp4g=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_1.1.1_1627832309477_0.7416741198572461"},"_hasShrinkwrap":false},"2.0.0":{"name":"@feathersjs-offline/client","version":"2.0.0","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^14.0.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.0","_nodeVersion":"13.14.0","_npmVersion":"6.14.4","dist":{"integrity":"sha512-eHOdb4Rg1REDdBVJvuIkldB6rHtGXyRyqohEhqKWY1mztdzgJU1J+LYtogZuf1Jgv6Op0fseuj2yL0JrsS28QA==","shasum":"ea4ed8729f07316456647ed8be71e92eb955eefc","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.0.tgz","fileCount":28,"unpackedSize":131064,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQuCXupsKhBoL/2FA5X3/HFKsJ+kJCnIAbN7X5v0bvTQIhAMuVQBTqAbrSikrVRsZ9OgNY5k4i+w+7I3BoQNz+Yz/I"}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.0_1635460224073_0.06718050518484375"},"_hasShrinkwrap":false},"2.0.1":{"name":"@feathersjs-offline/client","version":"2.0.1","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet/packages/client.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^14.0.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.1","_nodeVersion":"12.22.7","_npmVersion":"6.14.15","dist":{"integrity":"sha512-YU4Iw2xbxLgcsbbdnhg3lVSB9H9CVKAur3BbDB+LrKSomm//tVVd+WQl87Dt3QHj+zIcfNrh7x76YQra+fSF2g==","shasum":"4974d34a419a3b5e3363e5e69755eaf37501ea02","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.1.tgz","fileCount":32,"unpackedSize":1053321,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFaJgLhLkaJd7cS8l2YjDmHcp9TLicGkB7niK4+7P+zOAiA60l7fgULFWfOHx00CjnE2DSxteEPMhAVpKgA9xqpgTg=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.1_1635519044936_0.5535494557575642"},"_hasShrinkwrap":false},"2.0.2":{"name":"@feathersjs-offline/client","version":"2.0.2","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^14.0.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.2","_nodeVersion":"12.22.7","_npmVersion":"6.14.15","dist":{"integrity":"sha512-gQ7SclMBW2YY6ZPyJVlOTw74rdRUaR9gqfkACbRd6DQQiJfu4BaaP7EpR1nffTOYiMIlobYhMRmj2UZX4Zmafg==","shasum":"3206c4fc660085d6cc72b7848004195fe3665961","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.2.tgz","fileCount":32,"unpackedSize":1053301,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDHdj+LykECHEh4pu3Tb3uCQ47rMFxFH3qyLG7KAVFbIAiAajIHo4TdvSxQ9d0/gkA0LJOe1/XZWdRTd3SHyfTAqSw=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.2_1635586501728_0.3131234195998511"},"_hasShrinkwrap":false},"2.0.3":{"name":"@feathersjs-offline/client","version":"2.0.3","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^14.0.2"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^16.3.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.3","_nodeVersion":"12.22.7","_npmVersion":"6.14.15","dist":{"integrity":"sha512-dapfevMsxw6MsN96Fj5ZRNblxT5GmjdwxGYW8oPiUzPfDVGkUs2eVY7DMPv0zAlKrH24dUtBfCjVWQ2tMznV9Q==","shasum":"8ab39fe6da201afc02bfc44524806a1e13b0e1e8","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.3.tgz","fileCount":32,"unpackedSize":1053301,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsJWgywp+D1ZKu27VKbPVgGFTMfJzXuocsPi7bEswLTAiEA7rD/yZiQPBHJy0wFYWKpdhA9tip7yeFsC+ghgBrrin0="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.3_1635588241384_0.36333792155932465"},"_hasShrinkwrap":false},"2.0.6":{"name":"@feathersjs-offline/client","version":"2.0.6","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^15.1.0"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^17.0.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.6","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-Lp95ewurRbbVrOM4bE8Jq/GIRLIfb3R1dYja/HmrSm2I4DMtSg6d5BgHuIu7z2P1aoKSeimmNgZ1QzlcNNGVcQ==","shasum":"98288c77e7f6bede0a28292a5fcb686071e79142","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.6.tgz","fileCount":31,"unpackedSize":1144545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhyt29CRA9TVsSAnZWagAAmlEP/0KucoYYoQT4ODPXGUKN\n13vQz9ZPf738Pex7ZRsuPVaZD9IyYmeoF5QVUjzI3wLppX5FFgXHEO9lJNVL\nzhYHoazmnXN8qwxFgb/x6bU/ZL3JPlfkR+BzNeu75cKIjBvU/Al7gEz27U35\nauo9eMphSmbyPJLRidcdhNMXDIpa1b9bZ7awK20Cveqef6sN5wpubVVlMprl\nif1NfwyzJkk/Bxn47WvtvK36kCTF+Npdnubf6UyZlVhB8O4gaqH0bpJlRI50\nMWwDNS08ZZa+QU+yMUJ44cjIWkDNpUamm3UN20uosDuA49ca4eY0yN2hZbgZ\nqbC5EtUg4chZZ0XZnrcSQ6QV8QnR7pby9qCjt4EnpQ1ogQGdSz/EG4T1sOER\nB1fpW7d5qy4HxtWRCKWFW0C4BaoAIe662t6022pWRvjnoxrZ/uoxVxcHy8ap\nRgnnE92JlclO83ZhA3SF6o5g8RALNbsuOH6I9EI2jJ9yKVhZJSUggUdQDK75\nyQFzXc+0L1XKpszpFMrTk5li7cUYTT00RDAUGOnHL6EQECrdEYL+jUJJLqqZ\nfZesgTJf+4MksA76TZiHarjyF0DOc3bXcosmJ/JsrOo5Ng/JNtRqWvTr+1aQ\nZ8EQgZvZ2mef0t7HJ6CpVMtaHW007GMKA2Ek4QwvhsGA5Ff+oPvgtaY7T4Ke\nSpdu\r\n=aFzx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIADERgVVN6Lm/O7CZhf//Kt/8qa98MdH7aSCqX7iO5HgAiAeqekQO1xJTz8KhDaTBdZcGcH6Fa3ShpPHPsiqQQp7Wg=="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.6_1640684989005_0.5647015627688152"},"_hasShrinkwrap":false},"2.0.7":{"name":"@feathersjs-offline/client","version":"2.0.7","description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","keywords":["feathers","offline","realtime","mobile.first"],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"contributors":[],"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","license":"MIT","main":"lib/index.js","types":"lib/","directories":{"lib":"lib","test":"test"},"publishConfig":{"access":"public"},"funding":{"type":"opencollective","url":"https://opencollective.com/feathers"},"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet.git"},"engines":{"node":">= 12"},"scripts":{"prepublish":"npm run compile","compile":"shx rm -rf lib/ && tsc","unit":"npm run mocha","test":"npm run compile && npm run mocha","mocha":"nyc mocha --config ../../.mocharc.ts.json  test/*.test.js"},"dependencies":{"@feathersjs/adapter-commons":"^4.5.11","@feathersjs/commons":"^4.5.11","@feathersjs-offline/localforage":"^1.0.3","debug":"^4.3.1","feathers-localstorage":"^5.2.0","feathers-mongoose":"^8.3.1","md5":"^2.3.0","nanoid":"^3.1.30","sift":"^15.1.0"},"devDependencies":{"@feathersjs/adapter-tests":"^4.5.11","@feathersjs/express":"^4.5.11","@feathersjs/feathers":"^4.5.11","@feathersjs/socketio":"^4.5.11","@feathersjs/socketio-client":"^4.5.11","@types/debug":"^4.1.5","@types/mocha":"^9.0.0","@types/node":"^17.0.0","chai":"^4.2.0","feathers-hooks-common":"^5.0.4","feathers-memory":"^4.1.0","mocha":"^9.0.0","shx":"^0.3.3","ts-node":"^10.0.0","typescript":"^4.1.2"},"gitHead":"d9545d6360d31078e010de7dbac1353175e4eb76","_id":"@feathersjs-offline/client@2.0.7","_nodeVersion":"14.18.2","_npmVersion":"6.14.15","dist":{"integrity":"sha512-mvPuBcRZByG+dBvRdel5umfJfLu7iKEPEwrOD1XMhO03xQ+kRfyMpBsa8Odv6IbaikFHo6A1SZOJ21e+9zDuxA==","shasum":"2aa9d937a966f93bbcbeb78bd6ba577273c28775","tarball":"https://registry.npmjs.org/@feathersjs-offline/client/-/client-2.0.7.tgz","fileCount":31,"unpackedSize":1145150,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhyun6CRA9TVsSAnZWagAAuLsP/iCQ5CWQCDc1uBoED4Ut\n3gZOLxxA0QwL00tZjZbsN0vfJ5xq6UCqlJuPpK2WI3zhOm7noQ9PISmG6c/U\nVudXXeVDQdAgQ2xBLtVztJP8z5y1PGHdpChDxAsu5akoTmFSWCLus79pI/hA\nxBGDqnbkFxpnTt/Zcq+DE+1NhUkWszYlHrNsB+8wUIZKgh4tyeYiGkEpBp6b\nBSd5/6zT1fOVpUULAyalkirOqA3Ax/DF42mYhfpeScl26IHO8ChcBGAajUfC\nkBKFKcDXoaqR3L+9nZ/ks6CalWQnCzQq0OpoYXk0yj+vQVInJFhnIyOkWABn\nt1tIoQSJDGxfYczFpT/ZNg7QHn9VM1jH3nyF/zdH1m5p9Iu+owltbmYc3Ze4\n/aJ1+2Cfu5nL1ZzLtsB3OPb2oNAETFXolP5ebFyLpWqqUJf/uZPCFY11XtNz\njBXXtTGFEvjdk0/YAzGVC1rznngA/YRYBRFkMMwOqdm3YCmukNxNmJFzQqT6\naJgQgfovXe7fMmdFT6CitPPesc/s3psmEKG/kB5ES/gHAhjDQ0+z7PQySctr\nxuFpvMcWYkuIFutJHvBxq1TBhjXaLaC8vqcC0rHIJRCjHivLH1HKPeQCbSrk\n4zuIM912cIjtS8IJwSq78YOe10Cy99ZwQbWW8W/cV63dzJmDeXQyGdvRrxtP\nATgP\r\n=Ymth\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBFofs0CRfhcIOnDMbRSmSkL440e9JaMHJ4mWb0+MTdPAiEAtFJURSRc5oRL2SsZIZUcWiqaOkF5xsClnALDKw2l018="}]},"_npmUser":{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/client_2.0.7_1640688122185_0.09655133259909121"},"_hasShrinkwrap":false}},"time":{"created":"2020-12-07T15:11:07.301Z","0.1.0-alpha.1":"2020-12-07T15:11:07.599Z","modified":"2022-04-05T10:25:59.533Z","0.1.0-alpha.2":"2020-12-07T15:15:38.772Z","0.1.0-alpha.3":"2020-12-07T15:17:16.390Z","0.1.0-alpha.8":"2020-12-07T16:29:45.812Z","0.1.0-alpha.9":"2020-12-07T16:31:28.283Z","0.1.0-alpha.10":"2020-12-07T16:32:44.582Z","0.1.0-alpha.0":"2020-12-07T19:04:41.987Z","0.1.0-alpha.13":"2020-12-07T19:17:10.773Z","0.1.0-alpha.14":"2020-12-07T23:22:06.136Z","0.2.0-alpha.1":"2020-12-09T15:52:17.569Z","0.2.0-alpha.3":"2020-12-09T22:09:31.467Z","0.2.0-alpha.5":"2020-12-09T22:17:31.973Z","0.4.0":"2020-12-10T20:47:26.082Z","1.0.0":"2020-12-11T15:34:02.011Z","1.0.1":"2020-12-11T15:55:21.173Z","1.0.2":"2020-12-12T14:15:25.710Z","1.0.3":"2020-12-19T12:52:43.247Z","1.0.4":"2020-12-23T12:50:42.541Z","1.0.6":"2020-12-24T10:37:24.126Z","1.0.7":"2021-04-28T06:26:23.805Z","1.0.8":"2021-07-17T14:30:39.693Z","1.1.0":"2021-07-30T14:42:01.291Z","1.1.1":"2021-08-01T15:38:29.707Z","2.0.0":"2021-10-28T22:30:24.240Z","2.0.1":"2021-10-29T14:50:45.124Z","2.0.2":"2021-10-30T09:35:01.966Z","2.0.3":"2021-10-30T10:04:01.567Z","2.0.6":"2021-12-28T09:49:49.178Z","2.0.7":"2021-12-28T10:42:02.369Z"},"maintainers":[{"name":"feathersjs-offline","email":"feathersjs-offline@hillerstrom.name"}],"description":"Client part of implementation of the own-data / own-net principles for supporting offline-first functionality for Feathers (mobile) applications.","homepage":"https://github.com/feathersjs-offline/owndata-ownnet/tree/master/packages/client#readme","keywords":["feathers","offline","realtime","mobile.first"],"repository":{"type":"git","url":"git+https://github.com/feathersjs-offline/owndata-ownnet.git"},"contributors":[],"author":{"name":"Feathersjs-offline contributors","email":"feathersjs-offline@hillerstrom.name","url":"https://github.com/feathersjs-offline"},"bugs":{"url":"https://github.com/feathersjs-offline/issues"},"license":"MIT","readme":"\n# @feathersjs-offline/client\n\n[![npm version](https://img.shields.io/npm/v/@feathersjs-offline/client.svg)](https://www.npmjs.com/package/@feathersjs-offline/client)\n[![Build Status](https://img.shields.io/github/workflow/status/feathersjs-offline/owndata-ownnet/CI)](https://github.com/feathersjs-offline/owndata-ownnet/actions)\n[![Known Vulnerabilities](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet/badge.svg)](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet)\n[![Maintainability](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/maintainability)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/22509121003eefaf32c5/test_coverage)](https://codeclimate.com/github/feathersjs-offline/owndata-ownnet/test_coverage)\n[![Download Status](https://img.shields.io/npm/dm/@feathersjs-offline/client)](https://www.npmjs.com/package/@feathersjs-offline/client)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n\n> The client-part of Feathers Offline-first replication with optimistic updates (own-data / own-net).\n\n[@feathersjs-offline/client](https://github.com/feathersjs-offline/offline-first/tree/main/owndata-ownnet/client) is a database service adapter enabling the ordinary Feathers DB functions for `WebSQL`, `IndexedDB`, and `LocalStorage` by extending the `localForage` package as described in [localForage](https://localforage.github.io/localForage) by using [@feathersjs-offline/localforage](https://github.com/feathersjs-offline/localforage).\n\n\n## Installation\n\n``` bash\nnpm install @feathersjs-offline/client --save\n```\n\nThis module delivers all client parts necessary to utilize the FeathersJS Offline-first functionality.\n\n## API\n##  own-data\n\n<br>\n\n[![npm version](https://img.shields.io/npm/v/@feathersjs-offline/client.svg?style=flat-square)](https://www.npmjs.com/package/@feathersjs-offline/client)\n[![Build Status](https://img.shields.io/github/workflow/status/feathersjs-offline/owndata-ownnet/CI)](https://github.com/feathersjs-offline/owndata-ownnet/actions)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/owndata-ownnet?path=packages%2Fclient&style=flat-square)](https://david-dm.org/@feathersjs-offline/client)\n[![Known Vulnerabilities](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet/badge.svg)](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet)\n[![Download Status](https://img.shields.io/npm/dm/@feathersjs-offline/client)](https://www.npmjs.com/package/@feathersjs-offline/client)\n\nThe `owndataWrapper` (and `Owndata`) of [@feathersjs-offline/client](https://github.com/feathersjs-offline/owndata-ownnet/tree/main/packages/client) is a database service adapter that wraps and extends any Feathers CRUD database adapter and behind the scenes locally stores data in [localStorage](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage) in the browser or [AsyncStorage](https://facebook.github.io/react-native/docs/asyncstorage.html) in React Native.\n\n__Options:__\n\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (*optional*, default: `'id'`) - The name of the id field property. Preferably, for `own-data` it ought to be `uuid.`\n- `storage` (*optional*, default `['INDEXEDDB','WEBSQL','LOCALSTORAGE']`): - Determines which storage backend to use. If given an array (like in the default) the driver will use the first found backend, otherwise it will use the one given or fall-back to `'LOCALSTORAGE'`.\n- `store` (*optional*, default `null`) - An object with id to item assignments to pre-initialize the data store.\n- `paginate` (*optional*, default `false`) - A pagination object containing a default and max page size.\n- `multi` (*optional*) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. `[ 'remove', 'create' ]`).\n- `timedSync` (*optional*, default: `86400000` ms) - Determines the frequency of forced synchronization with the server. Default is 24 hours. 0 means never. You can always call `service.sync()` to perform a synchronization. Any ad hoc synchronizations does not affect any timed synchronizations.\n- `fixedName` (*optional*, default: `null`) - Force the prefix name of the local DB and queue DB. This is useful when several apps on the same device use `@feathersjs-offline` and the same service name (e.g. `'/messages'`).\n- `useShortUuid` (*optional*, default `true`) - Generate short `uuid`'s. If false long `uuid`'s are generated. This option should match whatever you choose on the server.\n- `dates` (*optional*, default `false`) - Generate short `uuid`'s. If false long `uuid`'s are generated. This option should match whatever you choose on the server.\n- `adapterTest` (*optional*, default `false`) - This is usually only used for running adapter tests as it suppresses returning the control attributes - `updatedAt,` `onServerAt,` `deletedAt,` and `uuid` (or what ever you chose to call them) in results.\n- `myUuid` (*optional*, default `'uuid'`) - Rename control attribute `uuid` to suit your model.\n- `myUpdatedAt` (*optional*, default `'updatedAt'`) - Rename control attribute `updatedAt` to suit your model.\n- `myOnServerAt` (*optional*, default `'onServerAt'`) - Rename control attribute `onServerAt` to suit your model.\n- `myDeletedAt` (*optional*, default `'deletedAt'`) - Rename control attribute `deletedAt` to suit your model.\n\n> Please note, when renaming control attributes ***you must*** do it on both the client and the server side.\n### Methods\n\nThe services under `owndataWrapper` control all implement the standard service methods as described in Services. In addition to this there are a couple of other methods to be used at your discretion.\n\n#### .getEntries(params)\n\n`service.getEntries(params) -> Promise` - Retrieves a list of all resources from the service. params.query can be used to filter and limit the returned data.\n\n``` js\nasync app.service('/messages').getEntries(params)\n  .then(result => {\n    console.log(`entries = ${JSON.stringify(result)}`);\n  });\n```\n\nNote: `getEntries` retrieves all resources (fulfilling the criteria of `params.query`) and always return an array.\n\n#### .sync(bAll)\n\n`service.sync(bAll) -> Promise` - Synchronize local data with server. if `bAll` is `true` synchronization is done beginning from BOT (Beginning Of Time). If `bAll` is `false` synchronization will be done from the newest possible timestamp (determined from resources in local DB). Synchronization will only be performed if no active operations involving the server are running.\n\n``` js\nasync app.service('/messages').getEntries(params)\n  .then(result => {\n    console.log(`entries = ${JSON.stringify(result)}`);\n  });\n```\n\n#### Internal service handles\n\nInternal service handles are useful for receiving messages whenever a CRUD operation have been successfully performed. To receive a message you first have to register a message handler for the relevant service handle. You can register message handlers for the messages `created,` `updated,` `patched,` and `removed`. The available service handles are:\n\nHandle | Comment\n| --- | ---\nservice.local   | The local database holding the relevant service resources\nservice.queue   | The queue database holding all unfinished requests/operations\nservice.remote  | The server database (i.e. equivalent to app.service('/message') for non-wrapped services)\n\nService handles are read-only.\n\nSee an example using service handles and showing the inner workings of offline-first wrappers [here](https://github.com/feathersjs-offline/simple-example).\n\nIn addition, the service emits a `synced` message every time a synchronization has been attempted. It returns a value of `true` if the synchronization was successful and `false` otherwise.\n\n### Example\n\nSee the [clients](https://docs.feathersjs.com/api/client.html) chapter for more information about using Feathers in the browser and React Native.\n\n### Browser\n\n``` html{16,21}\n<html lang=\"en\">\n  <head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <meta name=\"viewport\"\n      content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\" />\n    <title>FeathersJS chat</title>\n    <link rel=\"shortcut icon\" href=\"favicon.ico\">\n    <link rel=\"stylesheet\" href=\"//unpkg.com/feathers-chat@4.0.0/public/base.css\">\n    <link rel=\"stylesheet\" href=\"//unpkg.com/feathers-chat@4.0.0/public/chat.css\">\n  </head>\n  <body>\n    <div id=\"app\" class=\"flex flex-column\"></div>\n    <script src=\"//unpkg.com/@feathersjs/client@^4.3.0/dist/feathers.js\"></script>\n    <script src=\"/socket.io/socket.io.js\"></script>\n    <script src=\"//unpkg.com/@feathersjs-offline/client@^2.0/dist/feathersjs-offline-client.min.js\"></script>\n    <script type=\"text/javascript\">\n      var service = feathers.localstorage({\n        storage: window.localStorage\n      });\n      var app = feathers().use('/messages', service);\n      feathersOfflineClient.owndataWrapper(app, '/messages', {});\n\n      var messages = app.service('messages');\n\n      messages.on('created', function(message) {\n        console.log('Someone created a message', message);\n      });\n\n      messages.create({\n        text: 'Message created in browser'\n  });\n    </script>\n  </body>\n</html>\n</script>\n```\n\n### React Native\n\n``` sh\n$ npm install @feathersjs/feathers feathers-localstorage @feathersjs-offline/owndata --save\n```\n\n``` js\nimport React from 'react-native';\nimport feathers from '@feathersjs/feathers';\nimport localstorage from 'feathers-localstorage';\nimport { owndataWrapper } from '@feathersjs-offline/client';\n\nconst { AsyncStorage } = React;\n\nconst app = feathers()\n  .use('/messages', localstorage({ storage: AsyncStorage }));\nowndataWrapper(app, '/messages', {});\n\nconst messages = app.service('messages');\n\nmessages.on('created', function(message) {\n  console.log('Someone created a message', message);\n});\n\nmessages.create({\n  text: 'Message from React Native'\n});\n```\n\n## own-net\n\n<br>\n\n[![npm version](https://img.shields.io/npm/v/@feathersjs-offline/client.svg?style=flat-square)](https://www.npmjs.com/package/@feathersjs-offline/client)\n[![Build Status](https://img.shields.io/github/workflow/status/feathersjs-offline/owndata-ownnet/CI)](https://github.com/feathersjs-offline/owndata-ownnet/actions)\n[![Dependency Status](https://img.shields.io/david/feathersjs-offline/owndata-ownnet?path=packages%2Fclient&style=flat-square)](https://david-dm.org/@feathersjs-offline/client)\n[![Known Vulnerabilities](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet/badge.svg)](https://snyk.io/test/github/feathersjs-offline/owndata-ownnet)\n[![Download Status](https://img.shields.io/npm/dm/@feathersjs-offline/client)](https://www.npmjs.com/package/@feathersjs-offline/client)\n\n\nThe `ownnetWrapper` (and `Ownnet`) of [@feathersjs-offline/client](https://github.com/feathersjs-offline/owndata-ownnet/client) is a database service adapter that wraps and extends any Feathers CRUD database adapter and behind the scenes locally stores data in [localStorage](https://developer.mozilla.org/en/docs/Web/API/Window/localStorage) in the browser or [AsyncStorage](https://facebook.github.io/react-native/docs/asyncstorage.html) in React Native.\n\n__Options:__\n\nAll options available for the wrapped adapter can be used in addition to:\n\n- `id` (*optional*, default: `'id'`) - The name of the id field property. Preferably, for `own-data` it ought to be `uuid.`\n- `storage` (*optional*, default `['INDEXEDDB','WEBSQL','LOCALSTORAGE']`): - Determines which storage backend to use. If given an array (like in the default) the driver will use the first found backend, otherwise it will use the one given or fall-back to `'LOCALSTORAGE'`.\n- `store` (*optional*, default `null`) - An object with id to item assignments to pre-initialize the data store.\n- `paginate` (*optional*, default `false`) - A pagination object containing a default and max page size.\n- `multi` (*optional*) - Allow create with arrays and update and remove with id null to change multiple items. Can be true for all methods or an array of allowed methods (e.g. `[ 'remove', 'create' ]`).\n- `timedSync` (*optional*, default: `86400000` ms) - Determines the frequency of forced synchronization with the server. Default is 24 hours. 0 means never. You can always call `service.sync()` to perform a synchronization. Any ad hoc synchronizations does not affect any timed synchronizations.\n- `fixedName` (*optional*, default: `null`) - Force the prefix name of the local DB and queue DB. This is useful when several apps on the same device use `@feathersjs-offline` and the same service name (e.g. '/messages').\n- `dates` (*optional*, default `false`) - Generate short `uuid`'s. If false long `uuid`'s are generated. This option should match whatever you choose on the server.\n- `useShortUuid` (*optional*, default `true`) - Generate short `uuid`'s. If false long `uuid`'s are generated. This option should match whatever you choose on the server.\n- `adapterTest` (*optional*, default `false`) - This is usually only used for running adapter tests as it suppresses returning `updatedAt,` `onServerAt,` `deletedAt,` and `uuid` in results.\n\n### Methods\n\nThe services under `ownnetWrapper` control all implement the standard service methods as described in Services. In addition to this there are a couple of other methods to be used at your discretion.\n\n### .getEntries(params)\n\n`service.getEntries(params) -> Promise` - Retrieves a list of all resources from the service. `params.query` can be used to filter and limit the returned data.\n\n``` js\nasync app.service('/messages').getEntries(params)\n  .then(result => {\n    console.log(`entries = ${JSON.stringify(result)}`);\n  });\n```\n\nNote: `getEntries` retrieves all resources (fulfilling the criteria of `params.query`) and always return an array.\n\n### .sync(bAll)\n\n`service.sync(bAll) -> Promise` - Synchronize local data with server. if `bAll` is `true` synchronization is done beginning from BOT (Beginning Of Time). If `bAll` is `false` synchronization will be done from the newest possible timestamp (determined from resources in local DB). Synchronization will only be performed if no active operations involving the server are running.\n\n``` js\nasync app.service('/messages').getEntries(params)\n  .then(result => {\n    console.log(`entries = ${JSON.stringify(result)}`);\n  });\n```\n\n### Internal service handles\n\nInternal service handles are useful for receiving messages whenever a CRUD operation have been successfully performed. To receive a message tou first have to register a message handler for the relevant service handle. You can register message handlers for the messages `created,` `updated,` `patched,` and `removed.` The available service handles are\n\nHandle | Comment\n| ---- | ---- |\nservice.local   | The local database holding the relevant service resources\nservice.queue   | The queue database holding all unfinished requests/operations\nservice.remote  | The server database (i.e. equivalent to app.service('/messages') for non-wrapped services)\n\nService handles are read-only.\n\nSee an example using service handles and showing the inner workings of offline-first wrappers [here](https://github.com/feathersjs-offline/simple-example).\n\nIn addition, the service emits a `synced` message every time a synchronization has been attempted. It returns a value of `true` if the synchronization was successful and `false` otherwise.\n\n### Example\n\nSee the [clients](https://docs.feathersjs.com/api/client.html) chapter for more information about using Feathers in the browser and React Native.\n\n### Browser\n\n``` html{16,21}\n<html lang=\"en\">\n  <head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n    <meta name=\"viewport\"\n      content=\"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=0\" />\n    <title>FeathersJS chat</title>\n    <link rel=\"shortcut icon\" href=\"favicon.ico\">\n    <link rel=\"stylesheet\" href=\"//unpkg.com/feathers-chat@4.0.0/public/base.css\">\n    <link rel=\"stylesheet\" href=\"//unpkg.com/feathers-chat@4.0.0/public/chat.css\">\n  </head>\n  <body>\n    <div id=\"app\" class=\"flex flex-column\"></div>\n    <script src=\"//unpkg.com/@feathersjs/client@^4.3.0/dist/feathers.js\"></script>\n    <script src=\"/socket.io/socket.io.js\"></script>\n    <script src=\"//unpkg.com/@feathersjs-offline/client@^2.0/dist/feathersjs-offline-client.min.js\"></script>\n    <script type=\"text/javascript\">\n      var service = feathers.localstorage({\n        storage: window.localStorage\n      });\n      var app = feathers().use('/messages', service);\n      feathersOfflineClient.ownnetWrapper(app, '/messages', {});\n\n      var messages = app.service('messages');\n\n      messages.on('created', function(message) {\n        console.log('Someone created a message', message);\n      });\n\n      messages.create({\n        text: 'Message created in browser'\n  });\n    </script>\n  </body>\n</html>\n</script>\n```\n\n#### React Native\n\n``` sh\n$ npm install @feathersjs/feathers feathers-localstorage @feathersjs-offline/ownnet --save\n```\n\n``` js\nimport React from 'react-native';\nimport feathers from '@feathersjs/feathers';\nimport localstorage from 'feathers-localstorage';\nimport { ownnetWrapper } from '@feathersjs-offline/ownnet';\n\nconst { AsyncStorage } = React;\n\nconst app = feathers()\n  .use('/messages', localstorage({ storage: AsyncStorage }));\nownnetWrapper(app, '/messages', {});\n\nconst messages = app.service('messages');\n\nmessages.on('created', function(message) {\n  console.log('Someone created a message', message);\n});\n\nmessages.create({\n  text: 'Message from React Native'\n});\n```\n\n## Documentation\n\nYou can read the original docs [here](https://auk.docs.feathersjs.com/guides/offline-first/readme.html) discussing the theories behind it all. The new and updated documentation is available [here](https://feathersjs-offline.github.io/docs).\n\n> _Summary:_\n> \n> `own-data` / `own-net` are two related strategies implemented in Feathers Offline-first. Both strategies queues CRUD events for a wrapped service locally until the device have connection to the server, but to the user the CRUD events are executed immediately using optimistic mutation strategy.\n>\n> `own-data` will re-play all queued event to the server in the order they were performed in offline mode. This allows the the server to react on each event (mutation). It may, for example, run hooks which send emails on certain mutations.\n>\n> `own-net` on the other hand will only play the end result of all queued events for a given item (ie. row or document) to the server. If an item (document) is mutated 5 times only the result will reach the server when connection is established. If a record is patched and finally removed while still offline, the server will never see the mutations. The server may still react on each event (mutation), but bear in mind the changes are possibly only _net_ changes. `own-net` usually results in much shorter synchronization times and reduced traffic between client and server.\n\nFor `own-data` / `onw-net` implementations you must assure that the table (or collection) under control *must* implement attributes `uuid,` `updatedAt,` `onServerAt,` and `deletedAt`.\n\n> **Pro tip:** If your key is not `uuid` then you have to manually set the key on the client *before* calling `create` as you have no guarantee that the backend answers. You set your key with the `id` parameter.\n\n> **Pro tip:** If you want the back-end to hold all users' data in one table (or collection), then all rows (or documents) must include an user identification (e.g. '`_id`' of `users`) and the servers CRUD methods should be appropriately be guarded with a query (e.g. `{query: {userId: <whatever-the-value-is>}}`).\n\nAlso, updates to the client from a requested sync will not execute any hooks on the client but any queued events on the device will trigger hooks on the server (both on back-end and possibly on any other devices depending on your channels set-up).\n\nThis wrapper works properly only in conjunction with the server counterpart `import { realtimeWrapper } from '@feathersjs-offline/server';` configured correctly on the servers service.\n\n> **Pro tip:** `owndataWrapper,` `ownnetWrapper,` and `realtimeWrapper` works on both a Feathers client and a Feathers server.\n\n## License\n\nCopyright (c) 2020\n\nLicensed under the [MIT license](LICENSE).\n","readmeFilename":"README.md"}