Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Dec 03 11:56
    Emad-salah commented #1170
  • Dec 03 11:50
    Emad-salah synchronize #1170
  • Dec 03 03:20
    aethiop closed #1163
  • Dec 03 02:39
    amark commented #1167
  • Dec 03 02:39

    amark on master

    make change to lib/unset.js (#1… (compare)

  • Dec 03 02:39
    amark closed #1167
  • Dec 03 02:37
    amark commented #1163
  • Dec 03 02:35
    amark commented #1167
  • Dec 03 02:20
    amark commented #1170
  • Dec 02 16:48
    u007 commented #1173
  • Dec 02 16:47
    u007 commented #1173
  • Dec 02 16:47
    u007 closed #1173
  • Dec 02 16:44
    u007 commented #1173
  • Dec 02 16:29
    u007 opened #1173
  • Dec 02 12:39
    fsvieira opened #1172
  • Dec 01 23:00
    amark commented #1167
  • Dec 01 21:21
    Oxey405 opened #1171
  • Nov 30 15:07
    Emad-salah opened #1170
  • Nov 29 22:49
    fsvieira edited #1168
  • Nov 29 22:47
    fsvieira commented #1168
Jabis Sevon
@jabis
no 2021/05 in the hoods
also with "*" prefixed it's returning correctly only 2021/06
why don't you try it yourself
not many requirements
const fs = require('fs');
const tape = require('tape');
const _test = require('tape-promise').default // <---- notice 'default'
const test = _test(tape) // decorate tape
const Gun = require('../gun')
const SEA = require('../gun/sea')
require('../gun/lib/then.js')
require('../gun/lib/promise.js')
const RAD = require('../gun/lib/radisk.js')
const mkdirp = require('mkdirp');
const { Random } = require('random-js');
const random = new Random();
const _ = require('lodash');
const sleep = (milliseconds) => {
  return new Promise(resolve => setTimeout(resolve, milliseconds))
}
Gun.log.once=function(...args){ console.log(...args)}
tape tape-promise random-js mkdirp and lodash
tho I'm not really sure all of those are even required, maybe they were - long ass time since I used it since now :D
Wasis Haryo Sasoko
@yokowasis
ok, it works. it's the bug acting up. @jabis some callback is refused to fired.
it's frustating. Any idea what caused it ?
my complete html
<!DOCTYPE html>
<html lang="en" translate="no">
  <head>
    <title>PEERJS TS</title>

    <script src="https://cdn.jsdelivr.net/npm/gun/gun.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/gun/sea.js"></script>    
    <script src="https://cdn.jsdelivr.net/npm/gun/lib/radix.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/gun/lib/radisk.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/gun/lib/store.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/gun/lib/rindexed.js"></script>    
    <script src="https://unpkg.com/peerjs@1.3.1/dist/peerjs.min.js"></script>
    <script>
        var peer = new Peer(); 
        peer.on('open',(s)=>{
            console.log (s);
        })
        peer.on('connection', function(conn) {
            conn.on('data', function(data){
                // Will print 'hi!'
                console.log(data);
            });
        });        

        const gun = Gun({
                    localStorage : false,
                    axe : false,
                    file : "test",
                })
        const gunHeroku = Gun({
                    localStorage : false,
                    axe : false,
                    file : "test",
                    peers : [
                        "https://fire-gun.herokuapp.com/gun"
                    ]
                })
    </script>

  </head>
  <body>
      PEERJS TEST
  </body>
</html>
Jabis Sevon
@jabis
one thing in your constructor invalid peer it should be peers
Wasis Haryo Sasoko
@yokowasis

for some unknown reason after I commenting out the put the once callback only fired 1 out of 7

@jabis thanks. Fixed it. but still the same. Tried with peers and local, same result.

@jabis can you connect to peers https://fire-gun.herokuapp.com/gun and run this command
gunHeroku.get('chat2').get({'.': {'*': '2021/06'}}).map().once(s=>{
  console.log (s);
})
Jabis Sevon
@jabis

@jabis can you connect to peers https://fire-gun.herokuapp.com/gun and run this command

gunHeroku.get('chat2').get({'.': {'*': '2021/06'}}).map().once(s=>{
  console.log (s);
})

Well, I expected undefined and got undefined lol

writing to ./testdb/ef9oOX406VUVK0IE.json
testing get {'.': {'*': '2021/06'}} expecting output
data undefined
ok 1 s was undefined
# force test to end
ok 2 forcing test to end with process.exit

1..2
# tests 2
# pass  2

# ok
Wasis Haryo Sasoko
@yokowasis
@jabis try it again
gun only allocated i think 30ms to fetch the data before returning undefined.
Jabis Sevon
@jabis
Ok this works, first fetching the parent object
console.log("testing get {'.': {'*': '2021/06'}} expecting output")
  await gun.get('chat2').then();  
  await gun.get('chat2').get({'.': {'>': '2021/06'}}).map().once(s=>{
    console.log ("data",s);
    t.notEqual(s,undefined,"s was not undefined");
  }).then()
I think that was a known bug
testing get {'.': {'*': '2021/06'}} expecting output
data { _: { '#': 'chat2/2021/06/25 01:30:00' } }
ok 1 s was not undefined
data { _: { '#': 'chat2/2021/06/31 01:00:00' } }
ok 2 s was not undefined
data { _: { '#': 'chat2/2021/06/31 01:30:00' } }
ok 3 s was not undefined
data { _: { '#': 'chat2/2021/06' } }
ok 4 s was not undefined
data { _: { '#': 'chat2/2021/06/22 01:00:00' } }
ok 5 s was not undefined
data { _: { '#': 'chat2/2021/06/23 01:30:00' } }
ok 6 s was not undefined
data { _: { '#': 'chat2/2021/06/24 01:00:00' } }
ok 7 s was not undefined
# force test to end
ok 8 forcing test to end with process.exit

1..8
# tests 8
# pass  8

# ok
Wasis Haryo Sasoko
@yokowasis
@jabis does that mean you have to fetch all the data first ? if possible I want to fetch only the data I need.
Jabis Sevon
@jabis
I'd say you only need to trigger a query first
fetching the parent "chat" -object once won't fetch all data I think, only one level
Wasis Haryo Sasoko
@yokowasis
if this is a chat app, 1 level can easily have 1000 entries.
Jabis Sevon
@jabis
add some metadata node that doesn't have anything interesting
Gessic
@gessicapps_twitter
Hi, how do I set something to null? everytime I try, it just adds a new entry/node:
feedProviders.get(providerAddress.Algaddress).set(null);
image.png
Wasis Haryo Sasoko
@yokowasis
@gunar put(null)
@gessicapps_twitter put(null)
Gessic
@gessicapps_twitter
Perfect, thanks @yokowasis
Gessic
@gessicapps_twitter
how can I return the values from .once() without using a callback? It doesnt seem to be an async function...
Jabis Sevon
@jabis
include gun/lib/then.js or gun/lib/promise.js
4 replies
@gessicapps_twitter ^
Jabis Sevon
@jabis
image.png
for example
David Dahl
@daviddahl
@amark No worries. My ignorance of AXE was the issue. I have watched the talk you gave on it... Exciting stuff man. And yes, I get it ,making shit just WORK is important. Now that I think about it, Libp2p and IPFS do that too :)
There are a lot of onion skins for me to pull back yet with GUN.
David Dahl
@daviddahl
@amark was that talk yesterday recorded? I am curious about your concept - I have been talking about UX and crypto for some time - Search & privacy sounds interesting...
aaronsantiago
@aaronsantiago

I'm using gun to update a react page with a lot of user-editable elements that are synced across devices, and I'm noticing that it can sometimes take a while (30 - 90 seconds) to get to the latest version (it seems like it runs through a lot of the history). I would think that gun would locally cache calls to .get()?

Also would using .set() instead alleviate some of these issues? There are a lot of entries in there that are nulled or marked as deleted and it has to download the non-nulled versions first before deleting them making for a poor UX

Adam
@adam-12:matrix.org
[m]
@aaronsantiago might benefit from using the option change: true when using once().
Hmm maybe not if the change is null
aaronsantiago
@aaronsantiago
Seems like I'm hitting quota exceeded well before the 5mb localstorage limit as well--perhaps I'm misunderstanding some part of that. I can switch to RAD/indexedDB I believe since that works in the browser
Alexander Quine
@alxndr
is there a recommended way of visualizing the db?
jakethejab
@jakethejab

I am trying to wrap my head around Lex, but the documentation does not describe what some of the characters used in the examples actually do, specifically #, +, and ..

Here are some Lex examples pulled from the SEA certify docs, could someone please describe what the #, +, and . characters do in this context?

{"*": "notifications", "+": "*"} // Path must start with "notifications", then Path or Key must contain Certificant's Pub (it's just (path||key).indexOf(pub)!=-1)

{"#": {"*": "inbox"}} // Path must start with "inbox". "get('inbox').get('Alice').get('secret').put('abc', null, cert)" and "get('inbox').get('Bob').get('sensitive').put('something', null, cert)" ARE ALL OK.

{"#": {"*": "project"}, ".": {"*": "Bob"}, {"+": "*"}} // Path must start with "project" and Key must start with "Bob", then Path or Key must contain Certificant's Pub.

"inbox/Bob" // Path must equal "inbox/Bob", it is a LEX exact match {"=":"inbox/Bob"}

["inbox", {"*":"projects", "+": "*"}, {"*":"employees"}] // an Array of rules. If any matches, continue.
Bradley Matusiak
@bmatusiak
lamo,, google failed because they didnt have gun, https://www.youtube.com/watch?v=v_UyVmITiYQ
rococtz
@rococtz:matrix.org
[m]
@aaronsantiago: If you deleted something, it will still show as null. The solution to get rid of this is to use map(); if the value is null just manually returned undefined so the callback is not triggered anymore. About the local storage, the 5MB limit is annoying, but IndexedDB is much much slower
3 replies
@alxndr: there are plenty of ways https://gun.eco/docs/Awesome-GUN#plugins-helpers
1 reply
rococtz
@rococtz:matrix.org
[m]
This one is the first that I clicked and it doesn't give 404. It even has a youtube video on the README page and the creator is active in chat @Dletta
1 reply