Git Product home page Git Product logo

Comments (8)

ulope avatar ulope commented on July 29, 2024 1

Ah indeed, I've been using node 20.5.
Looks like it's broken on <19.

Possibly it's an issue with the wasm wrapper we're using.
I'll investigate and ping back.

from rolling-shutter.

wa0x6e avatar wa0x6e commented on July 29, 2024 1

Thanks, confirm that it's working now

from rolling-shutter.

ulope avatar ulope commented on July 29, 2024

I can't reproduce the issue here.

I've pushed a sample project: https://github.com/shutter-network/shutter-wasm-js-test

One thing to note: Make sure you're using @shutter-network/shutter-crypto@beta. The previous version doesn't work correctly.

We'll make a proper (non-beta) release soon.

from rolling-shutter.

wa0x6e avatar wa0x6e commented on July 29, 2024

Sorry, missing a step:

Shutter.init()

from rolling-shutter.

ulope avatar ulope commented on July 29, 2024

Hm, still can't reproduce.

I added a call to Shutter.init() to the example repo.

from rolling-shutter.

wa0x6e avatar wa0x6e commented on July 29, 2024
  • downloaded your repo
  • run yarn
  • run node index.js

It prints the error:

before sentry
/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@shutter-network/shutter-crypto/dist/shutter-crypto.js:1
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.shutterCrypto=t():e.shutterCrypto=t()}(this,(()=>(()=>{var e={910:(e,t,s)=>{e=s.nmd(e),(()=>{if(void 0!==s.g);else if("undefined"!=typeof window)window.global=window;else{if("undefined"==typeof self)throw new Error("cannot export Go (neither global, window nor self is defined)");self.global=self}s.g.require||(s.g.require=s(277)),!s.g.fs&&s.g.require&&(s.g.fs=s(507));const t=()=>{const e=new Error("not implemented");return e.code="ENOSYS",e};if(!s.g.fs){let e="";s.g.fs={constants:{O_WRONLY:-1,O_RDWR:-1,O_CREAT:-1,O_TRUNC:-1,O_APPEND:-1,O_EXCL:-1},writeSync(t,s){e+=r.decode(s);const n=e.lastIndexOf("\n");return-1!=n&&(console.log(e.substr(0,n)),e=e.substr(n+1)),s.length},write(e,s,n,r,o,i){0===n&&r===s.length&&null===o?i(null,this.writeSync(e,s)):i(t())},chmod(e,s,n){n(t())},chown(e,s,n,r){r(t())},close(e,s){s(t())},fchmod(e,s,n){n(t())},fchown(e,s,n,r){r(t())},fstat(e,s){s(t())},fsync(e,t){t(null)},ftruncate(e,s,n){n(t())},lchown(e,s,n,r){r(t())},link(e,s,n){n(t())},lstat(e,s){s(t())},mkdir(e,s,n){n(t())},open(e,s,n,r){r(t())},read(e,s,n,r,o,i){i(t())},readdir(e,s){s(t())},readlink(e,s){s(t())},rename(e,s,n){n(t())},rmdir(e,s){s(t())},stat(e,s){s(t())},symlink(e,s,n){n(t())},truncate(e,s,n){n(t())},unlink(e,s){s(t())},utimes(e,s,n,r){r(t())}}}if(s.g.process||(s.g.process={getuid:()=>-1,getgid:()=>-1,geteuid:()=>-1,getegid:()=>-1,getgroups(){throw t()},pid:-1,ppid:-1,umask(){throw t()},cwd(){throw t()},chdir(){throw t()}}),!s.g.crypto){const e=s(906);s.g.crypto={getRandomValues(t){e.randomFillSync(t)}}}s.g.performance||(s.g.performance={now(){const[e,t]=process.hrtime();return 1e3*e+t/1e6}}),s.g.TextEncoder||(s.g.TextEncoder=s(10).TextEncoder),s.g.TextDecoder||(s.g.TextDecoder=s(10).TextDecoder);const n=new TextEncoder("utf-8"),r=new TextDecoder("utf-8");var o=[];if(s.g.Go=class{constructor(){this._callbackTimeouts=new Map,this._nextCallbackTimeoutID=1;const e=()=>new DataView(this._inst.exports.memory.buffer),t=(t,s)=>{e().setUint32(t+0,s,!0),e().setUint32(t+4,Math.floor(s/4294967296),!0)},i=t=>{const s=e().getFloat64(t,!0);if(0===s)return;if(!isNaN(s))return s;const n=e().getUint32(t,!0);return this._values[n]},a=(t,s)=>{const n=2146959360;if("number"==typeof s)return isNaN(s)?(e().setUint32(t+4,n,!0),void e().setUint32(t,0,!0)):0===s?(e().setUint32(t+4,n,!0),void e().setUint32(t,1,!0)):void e().setFloat64(t,s,!0);switch(s){case void 0:return void e().setFloat64(t,0,!0);case null:return e().setUint32(t+4,n,!0),void e().setUint32(t,2,!0);case!0:return e().setUint32(t+4,n,!0),void e().setUint32(t,3,!0);case!1:return e().setUint32(t+4,n,!0),void e().setUint32(t,4,!0)}let r=this._ids.get(s);void 0===r&&(r=this._idPool.pop(),void 0===r&&(r=this._values.length),this._values[r]=s,this._goRefCounts[r]=0,this._ids.set(s,r)),this._goRefCounts[r]++;let o=1;switch(typeof s){case"string":o=2;break;case"symbol":o=3;break;case"function":o=4}e().setUint32(t+4,n|o,!0),e().setUint32(t,r,!0)},c=(e,t,s)=>new Uint8Array(this._inst.exports.memory.buffer,e,t),l=(e,t,s)=>{const n=new Array(t);for(let s=0;s<t;s++)n[s]=i(e+8*s);return n},d=(e,t)=>r.decode(new DataView(this._inst.exports.memory.buffer,e,t)),u=Date.now()-performance.now();this.importObject={wasi_snapshot_preview1:{fd_write:function(t,s,n,i){let a=0;if(1==t)for(let t=0;t<n;t++){let n=s+8*t,i=e().getUint32(n+0,!0),c=e().getUint32(n+4,!0);a+=c;for(let t=0;t<c;t++){let s=e().getUint8(i+t);if(13==s);else if(10==s){let e=r.decode(new Uint8Array(o));o=[],console.log(e)}else o.push(s)}}else console.error("invalid file descriptor:",t);return e().setUint32(i,a,!0),0},fd_close:()=>0,fd_fdstat_get:()=>0,fd_seek:()=>0,proc_exit:e=>{if(!s.g.process)throw"trying to exit with code "+e;process.exit(e)},random_get:(e,t)=>(crypto.getRandomValues(c(e,t)),0)},env:{"runtime.ticks":()=>u+performance.now(),"runtime.sleepTicks":e=>{setTimeout(this._inst.exports.go_scheduler,e)},"syscall/js.finalizeRef":e=>{console.error("syscall/js.finalizeRef not implemented")},"syscall/js.stringVal":(e,t,s)=>{const n=d(t,s);a(e,n)},"syscall/js.valueGet":(e,t,s,n)=>{let r=d(s,n),o=i(t),c=Reflect.get(o,r);a(e,c)},"syscall/js.valueSet":(e,t,s,n)=>{const r=i(e),o=d(t,s),a=i(n);Reflect.set(r,o,a)},"syscall/js.valueDelete":(e,t,s)=>{const n=i(e),r=d(t,s);Reflect.deleteProperty(n,r)},"syscall/js.valueIndex":(e,t,s)=>{a(e,Reflect.get(i(t),s))},"syscall/js.valueSetIndex":(e,t,s)=>{Reflect.set(i(e),t,i(s))},"syscall/js.valueCall":(t,s,n,r,o,c,u)=>{const f=i(s),p=d(n,r),y=l(o,c);try{const s=Reflect.get(f,p);a(t,Reflect.apply(s,f,y)),e().setUint8(t+8,1)}catch(s){a(t,s),e().setUint8(t+8,0)}},"syscall/js.valueInvoke":(t,s,n,r,o)=>{try{const o=i(s),c=l(n,r);a(t,Reflect.apply(o,void 0,c)),e().setUint8(t+8,1)}catch(s){a(t,s),e().setUint8(t+8,0)}},"syscall/js.valueNew":(t,s,n,r,o)=>{const c=i(s),d=l(n,r);try{a(t,Reflect.construct(c,d)),e().setUint8(t+8,1)}catch(s){a(t,s),e().setUint8(t+8,0)}},"syscall/js.valueLength":e=>i(e).length,"syscall/js.valuePrepareString":(e,s)=>{const r=String(i(s)),o=n.encode(r);a(e,o),t(e+8,o.length)},"syscall/js.valueLoadString":(e,t,s,n)=>{const r=i(e);c(t,s).set(r)},"syscall/js.valueInstanceOf":(e,t)=>i(e)instanceof i(t),"syscall/js.copyBytesToGo":(s,n,r,o,a)=>{let l=s,d=s+4;const u=c(n,r),f=i(a);if(!(f instanceof Uint8Array||f instanceof Uint8ClampedArray))return void e().setUint8(d,0);const p=f.subarray(0,u.length);u.set(p),t(l,p.length),e().setUint8(d,1)},"syscall/js.copyBytesToJS":(s,n,r,o,a)=>{let l=s,d=s+4;const u=i(n),f=c(r,o);if(!(u instanceof Uint8Array||u instanceof Uint8ClampedArray))return void e().setUint8(d,0);const p=f.subarray(0,u.length);u.set(p),t(l,p.length),e().setUint8(d,1)}}}}async run(e){for(this._inst=e,this._values=[NaN,0,null,!0,!1,s.g,this],this._goRefCounts=[],this._ids=new Map,this._idPool=[],this.exited=!1,new DataView(this._inst.exports.memory.buffer);;){const e=new Promise((e=>{this._resolveCallbackPromise=()=>{if(this.exited)throw new Error("bad callback: Go program has already exited");setTimeout(e,0)}}));if(this._inst.exports._start(),this.exited)break;await e}}_resume(){if(this.exited)throw new Error("Go program has already exited");this._inst.exports.resume(),this.exited&&this._resolveExitPromise()}_makeFuncWrapper(e){const t=this;return function(){const s={id:e,this:this,args:arguments};return t._pendingEvent=s,t._resume(),s.result}}},s.g.require&&s.g.require.main===e&&s.g.process&&s.g.process.versions&&!s.g.process.versions.electron){3!=process.argv.length&&(console.error("usage: go_js_wasm_exec [wasm binary] [arguments]"),process.exit(1));const e=new Go;WebAssembly.instantiate(fs.readFileSync(process.argv[2]),e.importObject).then((t=>e.run(t.instance))).catch((e=>{console.error(e),process.exit(1)}))}})()},277:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=277,e.exports=t},818:(e,t)=>{"use strict";var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n="undefined"!=typeof window&&void 0!==window.document,r="undefined"!=typeof process&&null!=process.versions&&null!=process.versions.node;"object"===("undefined"==typeof self?"undefined":s(self))&&self.constructor&&self.constructor.name,"undefined"!=typeof window&&"nodejs"===window.name||"undefined"!=typeof navigator&&(navigator.userAgent.includes("Node.js")||navigator.userAgent.includes("jsdom")),"undefined"!=typeof Deno&&Deno.core;t.jU=n,t.UG=r},906:()=>{},507:()=>{},10:()=>{}},t={};function s(n){var r=t[n];if(void 0!==r)return r.exports;var o=t[n]={id:n,loaded:!1,exports:{}};return e[n](o,o.exports,s),o.loaded=!0,o.exports}s.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return s.d(t,{a:t}),t},s.d=(e,t)=>{for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),s.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.nmd=e=>(e.paths=[],e.children||(e.children=[]),e);var n={};return(()=>{"use strict";s.r(n),s.d(n,{decrypt:()=>d,encrypt:()=>l,init:()=>o,verifyDecryptionKey:()=>u}),s(910);var e=s(818);const t=s.g||window||self;void 0===t.__wasm_bridge__&&(t.__wasm_bridge__={});const r=new Promise((e=>{t.__wasm_bridge__._initialized=e}));async function o(t){let s;const n=new Go;if(e.jU)if("instantiateStreaming"in WebAssembly)s=(await WebAssembly.instantiateStreaming(fetch(t),n.importObject)).instance,n.run(s);else{const e=await fetch(t),o=await e.arrayBuffer();s=WebAssembly.instantiate(o,n.importObject).instance,n.run(s),await r}else{if(!e.UG)throw"Neither Browser nor Node; not supported.";{const e=require("fs"),o=require("path");void 0===t&&(t=o.join(__dirname,"shutter-crypto.wasm")),s=(await WebAssembly.instantiate(e.readFileSync(t),n.importObject)).instance,n.run(s),await r}}}function i(){if(void 0===t.__wasm_bridge__.encrypt)throw"You need to consume the 'shutterCrypto.init()' promise before using the module functions."}function a(e){if(e.startsWith("Error:"))throw e}function c(e){e.startsWith("0x")&&(e=e.slice(2)),e.length%2!=0&&(e="0"+e);let t=[];for(let s=0;s<e.length;s+=2)t.push(parseInt(e.substring(s,s+2),16));return Uint8Array.from(t)}async function l(e,s,n,r){i();const o=await t.__wasm_bridge__.encrypt(e,s,n,r);return a(o),c(o)}async function d(e,s){i();const n=await t.__wasm_bridge__.decrypt(e,s);return a(n),c(n)}async function u(e,s,n){i();const r=await t.__wasm_bridge__.verifyDecryptionKey(e,s,n);return a(r),r}})(),n})()));


TypeError: e.randomFillSync is not a function
    at Object.getRandomValues (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@shutter-network/shutter-crypto/dist/shutter-crypto.js:1:1675)
    at /Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/utils/cjs/misc.js:21:53
    at /Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/utils/cjs/misc.js:27:15
    at String.replace (<anonymous>)
    at Object.uuid4 (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/utils/cjs/misc.js:25:46)
    at generatePropagationContext (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/core/cjs/scope.js:588:20)
    at new Scope (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/core/cjs/scope.js:67:32)
    at new Hub (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/core/cjs/hub.js:40:34)
    at getGlobalHub (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/core/cjs/hub.js:484:31)
    at Object.getCurrentHub (/Users/wan/Downloads/shutter-wasm-js-test-main/node_modules/@sentry/core/cjs/hub.js:478:10)

Node.js v18.16.0

from rolling-shutter.

wa0x6e avatar wa0x6e commented on July 29, 2024

Just tested on more node versions, the issues are on all node < 20

from rolling-shutter.

ulope avatar ulope commented on July 29, 2024

Fixed in v1.0.0

node 18.17.0
before sentry
after sentry / before shutter
after shutter
------
node 19.9.0
before sentry
after sentry / before shutter
after shutter
------
node 20.5.0
before sentry
after sentry / before shutter
after shutter
------

from rolling-shutter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.