toncenter/tonweb

crypto polyfill not working

rmchrkv opened this issue · 0 comments

Hello, so I need to convert user-friendly to raw via BigQuery function. I've created a webpack build to load it into BigQuery UDF via GCP bucket.

  • webpack.config.js
const path = require('path');
const webpack = require('webpack');

module.exports = {
    entry: './src/index.js',
    optimization: {
        minimize: true,
        mangleExports: true,
        mergeDuplicateChunks: true,
    },
    output: {
        filename: 'tonweb.js',
        path: path.resolve(__dirname, 'dist'),
        library: 'tonweb',
        },
    mode: 'none',
    resolve: {
        fallback: {
            buffer: require.resolve('buffer/'),
            url: require.resolve('url'),
            fs: require.resolve('fs'),
            assert: require.resolve('assert'),
            crypto: require.resolve('crypto-browserify'),
            http: require.resolve('stream-http'),
            https: require.resolve('https-browserify'),
            os: require.resolve('os-browserify/browser'),
            stream: require.resolve('stream-browserify'),
        },
    },
    plugins: [
        new webpack.ProvidePlugin({
            Buffer: ['buffer', 'Buffer'],
        }),
    ],
};
  • package.json
{
  "name": "tonweb",
  "version": "0.0.60",
  "description": "TonWeb - JavaScript API for TON blockchain",
  "main": "src/index.js",
  "types": "dist/types/index.d.ts",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "npx webpack --mode=none"
  },
  "keywords": [
    "TON",
    "Blockchain",
    "API"
  ],
  "authors": [
    {
      "name": "rulon"
    },
    {
      "name": "tolya-yanot"
    }
  ],
  "license": "GPL-3.0",
  "bugs": {
    "url": "https://github.com/toncenter/tonweb/issues"
  },
  "homepage": "https://github.com/toncenter/tonweb#readme",
  "repository": "https://github.com/toncenter/tonweb",
  "dependencies": {
    "@babel/core": "^7.22.5",
    "@babel/plugin-proposal-decorators": "^7.22.5",
    "@babel/preset-env": "^7.22.5",
    "@ledgerhq/hw-transport-web-ble": "5.48.0",
    "@ledgerhq/hw-transport-webhid": "5.48.0",
    "@ledgerhq/hw-transport-webusb": "5.48.0",
    "bn.js": "5.1.1",
    "crypto-browserify": "^3.12.0",
    "ethjs-unit": "0.1.6",
    "https-browserify": "^1.0.0",
    "isomorphic-webcrypto": "2.3.8",
    "node-fetch": "2.6.7",
    "os-browserify": "^0.3.0",
    "stream-browserify": "^3.0.0",
    "stream-http": "^3.2.0",
    "tweetnacl": "1.0.3",
    "webpack-node-externals": "^3.0.0"
  },
  "devDependencies": {
    "@sinonjs/fake-timers": "^9.1.1",
    "buffer": "6.0.3",
    "webpack": "^5.86.0",
    "webpack-cli": "^4.10.0"
  },
  "browser": {
    "node-fetch": false
  }
}

When I try to use any TonWeb function via UDF in BigQuery (loaded from GCP bucket), it throws me an error
TypeError: Cannot read properties of undefined (reading 'crypto') at gs://npm_js_packages/tonweb.js line 2, <...>

What could be the solution?