# sharedb-server-query

> ShareDB server-query plugin

Latest version **0.1.0** (published 2018-04-13) · MIT license · 0 weekly downloads

## Install

```sh
npm install sharedb-server-query
pnpm add sharedb-server-query
yarn add sharedb-server-query
bun add sharedb-server-query
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2018-04-13 |
| First published | 2018-04-13 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Unpacked size | 7.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 1 |
| Author | Alexey Balekhov |
| Maintainers | balek |
| Keywords | sharedb, plugin |

## Links

- npm: https://www.npmjs.com/package/sharedb-server-query
- Repository: https://github.com/balek/sharedb-server-query
- Issues: https://github.com/balek/sharedb-server-query/issues
- npm.io page: https://npm.io/package/sharedb-server-query

## Recent versions

- 0.1.0 (latest) — 2018-04-13

## README

## sharedb-server-query

ShareDB server-query plugin. It allows to subscribe to named server-defined queries. It does not deny arbitrary client queries, so use additional middleware to restrict access.


### Install

With [npm](https://npmjs.org) do:

```
npm install sharedb-server-query
```


### Usage

On the server:
```js
require('sharedb-server-query')(backend);

// Add server queries  

// function addServerQuery accept
// 'collection' - collection name
// 'queryName'  - name of query
// 'cb' - function that accepts 'params' and runned in 'req' context
// and returns a query-object or throws error

backend.addServerQuery('items', 'main', function(params) {
    return { type: 'public' };
});

backend.addServerQuery('items', 'myItems', function(params) {
    return { ownerId: this.agent.userId };
});

backend.addServerQuery('items', 'byType', function(params) {

// ++++++++++++++++++++++++++++
// Should check params here!!!!
// it's a security issue
// ++++++++++++++++++++++++++++

    return { type: params.type };
});

```

Using queries in derby/racer:

```js
  // function serverQuery accepts 3 arguments:
  // 'collection' - collection name (should match one from addServerQuery)
  // 'queryName' - name of query (should match one from addServerQuery)
  // 'params' - object with query-params

  derby.use(require('sharedb-server-query/racer'));

  //...
  
  var query = model.serverQuery('items', 'byType', {
    type: 'global'
  });

  model.subscribe(query, function(){
    page.render('home');
  });
```

What is still allowed:
```js

// You still can use one-item fetch/subscriptions
var itemId = params.itemId

var item = model.at('items.'+itemId);

model.subscribe(item,  function(){
  //...
});

// Or just
model.subscribe('items.' + itemId,  function(){
  //...
});
```

---
_Source: https://npm.io/package/sharedb-server-query · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
