Skip to content

Commit a10baa8

Browse files
authored
Merge pull request #27 from datapartyjs/tingodb-support
initial tingodb party support
2 parents 8934bf5 + 1132236 commit a10baa8

54 files changed

Lines changed: 2201 additions & 510 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

examples/test-local-lokidb.js

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
const fs = require('fs/promises')
2+
const debug = require('debug')('example.loki-db')
3+
const BouncerModel = require('@dataparty/bouncer-model/dist/bouncer-model.json')
4+
const Dataparty = require('../src/index.js')
5+
6+
7+
let local=null
8+
9+
async function getUser(name) {
10+
return (await local.find()
11+
.type('user')
12+
.where('name').equals(name)
13+
.exec())[0]
14+
}
15+
16+
17+
async function main(){
18+
const dbPath = (await fs.mkdtemp('/tmp/loki-party')) + '/loki.db'
19+
20+
debug('db location', dbPath)
21+
22+
local = new Dataparty.LokiParty({
23+
path: dbPath,
24+
model: BouncerModel,
25+
config: new Dataparty.Config.MemoryConfig()
26+
})
27+
28+
29+
await local.start()
30+
31+
let user = await getUser('tester')
32+
33+
34+
if(!user){
35+
debug('creating document')
36+
user = await local.createDocument('user', {name: 'tester', created: (new Date()).toISOString() })
37+
}
38+
else{
39+
debug('loaded document')
40+
}
41+
42+
console.log(user.data)
43+
44+
45+
user.data.name = 'renamed-tester'
46+
//user.data.invalideField = true
47+
await user.save()
48+
49+
console.log(user.data)
50+
51+
let userFind = await getUser('renamed-tester')
52+
53+
console.log(userFind)
54+
55+
56+
console.log(dbPath)
57+
58+
59+
await user.remove()
60+
61+
console.log(await getUser('renamed-tester'))
62+
63+
}
64+
65+
66+
main().catch(err=>{
67+
console.error(err)
68+
})

examples/test-local-tingodb.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
const fs = require('fs/promises')
2+
const debug = require('debug')('example.tingo-db')
3+
const BouncerModel = require('@dataparty/bouncer-model/dist/bouncer-model.json')
4+
const Dataparty = require('../src/index.js')
5+
6+
let local=null
7+
8+
async function getUser(name) {
9+
return (await local.find()
10+
.type('user')
11+
.where('name').equals(name)
12+
.exec())[0]
13+
}
14+
15+
16+
async function main(){
17+
const dbPath = await fs.mkdtemp('/tmp/tingo-party')
18+
19+
debug('db location', dbPath)
20+
21+
local = new Dataparty.TingoParty({
22+
path: dbPath,
23+
model: BouncerModel,
24+
config: new Dataparty.Config.MemoryConfig()
25+
})
26+
27+
28+
await local.start()
29+
30+
let user = await getUser('tester')
31+
32+
33+
if(!user){
34+
debug('creating document')
35+
user = await local.createDocument('user', {name: 'tester', created: (new Date()).toISOString() })
36+
}
37+
else{
38+
debug('loaded document')
39+
}
40+
41+
console.log('before', user.data)
42+
43+
user.data.name = 'renamed-tester'
44+
//user.data.invalideField = true
45+
await user.save()
46+
47+
console.log('after', user.data)
48+
49+
let userFind = await getUser('renamed-tester')
50+
51+
console.log(userFind.data)
52+
53+
process.exit()
54+
55+
56+
await user.remove()
57+
58+
console.log(await getUser('renamed-tester'))
59+
60+
}
61+
62+
63+
main().catch(err=>{
64+
console.error(err)
65+
})

examples/test-loopback-party.js

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
const fs = require('fs/promises')
2+
const debug = require('debug')('test.local-db')
3+
const WRTC = require('wrtc')
4+
const BouncerModel = require('@dataparty/bouncer-model/dist/bouncer-model.json')
5+
const Dataparty = require('../src')
6+
7+
async function main(){
8+
const dbPath = await fs.mkdtemp('/tmp/tingo-party')
9+
const configPath = await fs.mkdtemp('/tmp/tingo-party-config')
10+
11+
debug('db location', dbPath)
12+
13+
let config = new Dataparty.Config.JsonFileConfig({basePath: configPath})
14+
15+
let hostLocal = new Dataparty.TingoParty({
16+
path: dbPath,
17+
model: BouncerModel,
18+
config
19+
})
20+
21+
let loopback = new Dataparty.Comms.LoopbackChannel()
22+
23+
let comms1 = new Dataparty.Comms.LoopbackComms({
24+
host: true,
25+
channel: loopback.peer1
26+
})
27+
28+
let peer1 = new Dataparty.PeerParty({
29+
comms: comms1,
30+
hostParty: hostLocal,
31+
model: BouncerModel,
32+
config
33+
})
34+
35+
36+
let comms2 = new Dataparty.Comms.LoopbackComms({ channel: loopback.peer2 })
37+
38+
let peer2 = new Dataparty.PeerParty({
39+
comms: comms2,
40+
model: BouncerModel,
41+
config: new Dataparty.Config.MemoryConfig()
42+
})
43+
44+
45+
await config.start()
46+
47+
48+
await peer1.loadIdentity()
49+
await peer2.loadIdentity()
50+
51+
peer1.comms.remoteIdentity = peer2.identity
52+
peer2.comms.remoteIdentity = peer1.identity
53+
54+
await peer1.start()
55+
await peer2.start()
56+
57+
58+
debug('waiting for auth')
59+
await Promise.all([
60+
peer1.comms.authorized(),
61+
peer2.comms.authorized()
62+
])
63+
64+
debug('authed')
65+
66+
67+
let user = (await peer2.find()
68+
.type('user')
69+
.where('name').equals('tester')
70+
.exec())[0]
71+
72+
73+
if(!user){
74+
debug('creating document')
75+
user = await peer2.createDocument('user', {name: 'tester', created: (new Date()).toISOString() })
76+
}
77+
else{
78+
debug('loaded document')
79+
}
80+
81+
82+
console.log(user.data)
83+
process.exit()
84+
}
85+
86+
87+
try{
88+
89+
main().catch(err=>{
90+
console.error(err)
91+
})
92+
93+
}
94+
catch(err){
95+
console.log('crash')
96+
console.log(err)
97+
}
Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,29 @@ async function main(){
88

99
debug('db location', dbPath)
1010

11-
let hostLocal = new Dataparty.LocalParty({
11+
let hostLocal = new Dataparty.LokiParty({
1212
path: dbPath,
1313
model: BouncerModel,
1414
config: new Dataparty.Config.MemoryConfig()
1515
})
1616

1717
let peer1 = new Dataparty.PeerParty({
18-
host: true,
18+
comms: new Dataparty.Comms.RTCSocketComms({
19+
host: true,
20+
wrtc: WRTC,
21+
trickle: true
22+
}),
1923
hostParty: hostLocal,
20-
wrtc: WRTC,
2124
model: BouncerModel,
2225
config: new Dataparty.Config.MemoryConfig()
2326
})
2427

28+
2529
let peer2 = new Dataparty.PeerParty({
26-
wrtc: WRTC,
30+
comms: new Dataparty.Comms.RTCSocketComms({
31+
wrtc: WRTC,
32+
trickle: true
33+
}),
2734
model: BouncerModel,
2835
config: new Dataparty.Config.MemoryConfig()
2936
})
@@ -65,9 +72,12 @@ async function main(){
6572

6673

6774
if(!user){
68-
user = await peer2.createDocument('user', {name: 'tester'})
75+
debug('creating document')
76+
user = await peer2.createDocument('user', {name: 'tester', created: (new Date()).toISOString() })
77+
}
78+
else{
79+
debug('loaded document')
6980
}
70-
7181

7282
console.log(user.data)
7383
process.exit()
File renamed without changes.

package.json

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,37 @@
11
{
22
"name": "@dataparty/api",
33
"private": false,
4-
"version": "1.2.1",
5-
"main": "src/index.js",
4+
"version": "1.2.9",
5+
"main": "dist/dataparty.js",
66
"browser": "src/index-browser.js",
7+
"source": "src/index.js",
8+
"frontend": "dist/dataparty-browser.js",
9+
"backend": "dist/dataparty.js",
10+
"targets": {
11+
"frontend": {
12+
"context": "browser",
13+
"source": "src/index-browser.js",
14+
"engines": {
15+
"browsers": "Chrome 80"
16+
}
17+
},
18+
"backend": {
19+
"context": "node",
20+
"source": "src/index.js",
21+
"engines": {
22+
"node": ">= 12"
23+
}
24+
}
25+
},
726
"files": [
827
"dist",
928
"src/*"
1029
],
1130
"scripts": {
12-
"test": "./node_modules/.bin/eslint ./",
13-
"build": "webpack",
14-
"prepare": "yarn build",
15-
"watch": "webpack --watch",
31+
"test": "npx lab",
32+
"build": "parcel build --no-scope-hoist",
33+
"prepare": "npm run build",
34+
"watch": "parcel watch",
1635
"watch-test": "DEBUG=* nodemon --ignore service test/test-service-compile.js",
1736
"build-docs": "npx jsdoc -c jsdoc.json"
1837
},
@@ -23,6 +42,7 @@
2342
"@zeit/ncc": "^0.22.3",
2443
"ajv": "6.9.1",
2544
"body-parser": "^1.19.0",
45+
"bson": "^4.6.1",
2646
"bson-objectid": "^1.3.0",
2747
"colors": "1.3.1",
2848
"cors": "^2.8.5",
@@ -43,37 +63,43 @@
4363
"nodemon-webpack-plugin": "^3.0.1",
4464
"origin-router": "^1.6.4",
4565
"parse-url": "^5.0.1",
66+
"promisfy": "^1.2.0",
4667
"prompt": "^1.0.0",
4768
"roslib": "^0.20.0",
4869
"sanitize-filename": "^1.6.3",
4970
"simple-peer": "^9.7.2",
5071
"source-map": "^0.7.3",
5172
"store-js": "^2.0.4",
73+
"tingodb": "^0.6.1",
5274
"touch": "^3.1.0",
5375
"url-parse": "^1.4.7",
5476
"uuid": "^3.2.1",
77+
"uuidv4": "^6.2.12",
5578
"vm2": "^3.9.2",
5679
"websocket": "^1.0.26",
57-
"wreck": "14.0.2",
58-
"wrtc": "^0.4.4"
80+
"wreck": "14.0.2"
5981
},
6082
"devDependencies": {
6183
"@dataparty/bouncer-model": "1.4.3",
84+
"@hapi/code": "^9.0.1",
85+
"@hapi/lab": "^25.0.1",
6286
"better-docs": "^1.1.6",
6387
"compression-webpack-plugin": "^2.0.0",
6488
"docdash": "^1.1.1",
6589
"jsdoc": "^3.6.2",
6690
"minami": "^1.2.3",
91+
"parcel": "^2.3.1",
6792
"tmp": "^0.2.1",
6893
"webpack": "^4.17.2",
6994
"webpack-bundle-analyzer": "^3.8.0",
7095
"webpack-cli": "^3.1.0",
71-
"webpack-node-externals": "^1.7.2"
96+
"webpack-node-externals": "^1.7.2",
97+
"wrtc": "^0.4.7"
7298
},
7399
"repository": {
74100
"type": "git",
75101
"url": "https://github.com/datapartyjs/dataparty-api.git"
76102
},
77-
"author": "RosHub Inc. <code@roshub.io>",
103+
"author": "dataparty <code@dataparty.xyz>",
78104
"license": "Apache-2.0"
79105
}

0 commit comments

Comments
 (0)