
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

heliosRX is a front-end ORM (Object-Relational Mapping) layer for reactive real-time web applications using Firebase Realtime Database and Vue.
The basic idea behind heliosRX is:
Describe your data structures by providing a schema. Based on that schema heliosRX will generate a client (with automatic client-side validation) and a server ( = security rules).
If you're using Firebase as your backend and if you're building something that is a little bit more complex then just a simple to-do list, then heliosRX is probably very useful for you. Some reasons why you might chose heliosRX over just Firebase Client API are:
heliosRX will likely support other backends in the future.
You can read more about it in the announcement post.
npm install --save heliosrx
yarn add heliosrx
heliosRX comes with a CLI:
npm install -g heliosrx-cli
# - or -
yarn global add heliosrxc-cli
heliosRX requires bolt-compiler as a peer dependency, so please run:
npm install -g bolt-compiler
# - or -
yarn add -g bolt-compiler
Before you can start using heliosRX, you have to configure Firebase and heliosRX. Usually, this should be pretty straight forward. You can read more in the documentation.
There is a few ways how you can configure firebase. One way to do it, is to get
your Firebase configuration and put it in a new file in src/firebase.js that
looks something like this:
// file: src/firebase.js
// Firebase App (the core Firebase SDK) is always required and must be listed first
import * as firebase from "firebase/app";
// Add the Firebase products that you want to use
import "firebase/auth";
import "firebase/database";
// TODO: Replace the following with your app's Firebase project configuration
const firebaseConfig = {
apiKey: "<YOUR API KEY>",
authDomain: "<YOUR AUTH DOMAIN>",
databaseURL: "<YOUR DATABASE URL>",
projectId: "<YOUR PROJECT ID>",
storageBucket: "<YOUR STORAGE BUCKET>",
messagingSenderId: "<YOUR MESSAING SENDER ID>",
appId: "<YOUR APP ID>"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
// Initialize Realtime DB
export const rtdb = firebase.database(); // < Export a database instance here!
Please feel free to do this in a way that suits your needs best.
The important thing here is that we need to import rtdb later on,
which is why we're exporting it here.
Next, create the following folder structure:
├── rules - Used for database access rules
│ └── rules.bolt - Default access rules
└── src
└── models - New models are defined here
├── example/* - Model definition for 'example'
└── config.js - Models are assigned to DB paths here
(Models we export here, can be accessed through this.$models)
by running
helios init
which will create these files and folders automatically.
heliosRX can be used as a Vue-Plugin:
import Vue from 'vue'
import heliosRX from 'heliosRX'
import { rtdb } from './firebase' // Import realtime database
import models from '@/models'
Vue.use(heliosRX, {
userModels: models, // 'src/models',
firebaseDb: rtdb
devMode: true,
})
...
new Vue({
render: h => h(App)
}).$mount('#app');
now models are available as this.$models.
This is an example of a simple To-Do app:
const taskModelDefinition = {
schema: {
fields: {
title: { type: 'String', required: true },
createdAt: { type: 'ServerTimestamp' },
isDone: { type: 'Boolean' },
}
}
};
export const task = new GenericStore( '/user/{userId}/task/*', taskModelDefinition );
<template>
<!-- Example: Simple To-Do App -->
<ul>
<li v-for="task in tasks.items" :key="task.$key">
<input type="checkbox" @input="onCheckTask( task )">
{{task.title}}
<a href="#" @click.prevent="onDeleteTask( task )">del</a>
</li>
<input v-model="title" />
<button @click="onAddTask">add</button>
</ul>
</template>
<script>
export default {
data() {
return {
title: ""
}
},
computed: {
tasks() {
return this.$models.task.subscribeList(); // "connect" tasks to realtime database
}
},
methods: {
onCheckTask( task ) {
task = task.clone()
task.isDone = !task.isDone;
task.write();
// or: this.$models.task.update( task.$id, { isDone: !task.isDone } )
},
onAddTask() {
this.$models.task.add({
title: this.title
});
},
onDeleteTask( task ) {
task.remove();
// or: this.$models.task.remove( task.$id );
}
}
}
</script>
> helios rules --write <output-file>
type Task {
title: String
createdAt: ServerTimestamp | Null
isDone: Boolean | Null
}
...
See CHANGELOG.md.
See ROADMAP.md.
I'd be happy to review any pull requests that may better the heliosRX project, in particular, if you have a bug fix or enhancement. Before doing so, please first make sure that all of the tests pass (yarn test).
Copyright (c) 2019-present, Thomas Weustenfeld
FAQs
heliosRX
The npm package heliosrx receives a total of 2 weekly downloads. As such, heliosrx popularity was classified as not popular.
We found that heliosrx demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.