JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 121
  • Score
    100M100P100Q75981F
  • License ISC

Socket IO Module for Strapi

Package Exports

  • strapio

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (strapio) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

StrapIO

module for working with socket.io with predefined rules. StrapIO will look at Role permission on each action.

Installation

npm i strapio

config/functions/bootstrap.js

process.nextTick(() => {
strapi.StrapIO = new (require('strapio'))(strapi);
  });

Usage

server

api/<content-type>/controllers/<content-type.js

module.exports = {
  async create(ctx) {
    let entity;
    if (ctx.is("multipart")) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.CONTENTTYPE.create(data, { files });
    } else {
      entity = await strapi.services.CONTENTTYPE.create(ctx.request.body);
    }
    strapi.StrapIO.emit(this, ctx,'create', entity, 'contenttype');

    return sanitizeEntity(entity, { model: strapi.models.CONTENTTYPE });
  }

  async update(ctx) {
    const { id } = ctx.params;

    let entity;
    if (ctx.is("multipart")) {
      const { data, files } = parseMultipartData(ctx);
      entity = await strapi.services.CONTENTTYPE.update({ id }, data, {
        files,
      });
    } else {
      entity = await strapi.services.CONTENTTYPE.update({ id }, ctx.request.body);
    }
    strapi.StrapIO.emit(this, ctx,'update', entity, 'contenttype');

    return sanitizeEntity(entity, { model: strapi.models.CONTENTTYPE });
  },

Client

const io = require('socket.io-client');

// Handshake required, token will be verified against strapi
const socket = io.connect(API_URL, {
    query: { token }
});

socket.on('create', data => {
    //do something
});
socket.on('update', data => {
    // do something
});

Test

Currently tested with:

{
    "strapi": "3.1.6",
    "strapi-plugin-users-permissions": "3.1.6"
}

Middleware ...coming

Currently im working on an middleware wrapper for StrapIO. Im not currently sure how. :)

Contribute

just do it over github or chat with me @Discord

TODO

  1. validation
  2. Error handling