SpaceFace
SpaceFace

Reputation: 53

How to access SEA module in GUNJS without using dynamic require in React Native expo

So I've started this new project using React Native(Expo), and I've imported all packages including GunJS and SEA, however, when I run the app, I get the error that dynamic require is not supported by Metro. I checked the sea.js file and found that the devs use require(arg), which is not supported by React Native. This is a huge bummer and I haven't found any workaround. Is there any other way to access SEA?

    import GUN from "gun";
    import "gun/sea";
    import { userContext } from "../global";

    export const gun = GUN();

The below snippet is the sea.js file, which uses dynamic require.


    /* UNBUILD */
      function USE(arg, req){
        return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){
          arg(mod = {exports: {}});
          USE[R(path)] = mod.exports;
        }

Upvotes: 0

Views: 581

Answers (3)

Jack Kranz
Jack Kranz

Reputation: 13

put import shim from "gun/lib/mobile" at the top of your file. (before the SEA import) :D !

import shim from "gun/lib/mobile"
import SEA from 'gun/sea'

Upvotes: 0

Joshua mbavazi
Joshua mbavazi

Reputation: 19

if you need to use SEA in react-native now without wait the gun community to fix this problem do this build API with nodejs and install gun in after going in your react-native app call this API see ex:

//nodejs that manage sea so in my case I use auth feature  sea 

const fastify = require("fastify")();
const Gun = require('gun'); // in NodeJS 
require('./sea/sae');

const gun = new Gun ({
    peers: ['https://gun-serve.herokuapp.com/gun'],
     
   })  

const user = gun.user()
const ADDRESS = "0.0.0.0";
const PORT = process.env.PORT || 3000;
fastify.get("/", function (req, reply) {
   reply.send("wellcome");
});

fastify.post('/userregist', async (request, reply) => {
  try {
  user.create(`${request.body.user}`,`${request.body.password}`, ({ err , pub}) => {
      if (err) {
         
   
        return reply.code(200).send({ "err": `${err}`})
      } else {
      
        
          return reply.code(200).send({"pub": `${pub}`})
      
      }
      });
    } catch (error) {
      request.log.error(error);
      return reply.send(500);
  }
      

})
    
fastify.post('/userlogin', async (request, reply) => {
  try{
  user.auth(`${request.body.user}`,`${request.body.password}`, ({ err, get,  }) => {
    if (err) {
     
       return reply.code(200).send({ "err": `${err}`})
    } else {
    
        console.log('joshau get', get)
       
       
        return reply.code(200).send({"pub": `${get}`})
     
    }
    });
  } catch (error) {
    request.log.error(error);
    return reply.send(500);
}

})

fastify.listen(PORT, ADDRESS, (err, address) => {
  if (err) {
     console.log(err);
     process.exit(1);
  }
});

so i call api my app like that:

//my call api 
const loginRequest = async (email, password) => {
  try {
    return await fetch('https://locahost:3000/userlogin', {
      mode: 'no-cors', method: 'POST',
      headers: {
        'Content-type': 'application/json',
        'Accept': ' application/json'
      },
      body: JSON.stringify({
            user: email,
            password: password,
            
      }),
    })
  } catch (error) {
    return error;
  }
};
// here is way i call it i comp
LoginRequest(email, password)
      .then((res)=> {
       
        res.json().then(function (text) {

          if(text.err){
             LOADING_STOP()
           
            alert(`${text.err}`)
            
            console.log('error message',text.err)
          }else{

            console.log('public key',text.pub)
          
           
            LOADING_STOP()
           
            navigation.replace("Dashboard");
          }
            
      }).catch((e)=> {
         LOADING_STOP()
       
        alert(e)
      })

Upvotes: 0

marknadal
marknadal

Reputation: 7624

We got this fixed in the latest GitHub main (hopefully published soon).

Thanks to Aethiop! Who also wrote a great tutorial on this:

https://github.com/aethiop/jot

Upvotes: 0

Related Questions