From fb912bb324d405379661d172f65810e24f2788b7 Mon Sep 17 00:00:00 2001 From: Params10 Date: Wed, 8 Mar 2023 10:34:08 +0530 Subject: [PATCH 01/10] fix(in Progress): issues #589 #590 additionally added rabbitmq upload to the filebase exchange --- contracts/package.json | 4 +- contracts/scripts/policyUpdate.ts | 117 ++++++++++++++++++++++++++++++ 2 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 contracts/scripts/policyUpdate.ts diff --git a/contracts/package.json b/contracts/package.json index 70673fe2c..cbfa54fd6 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -69,6 +69,8 @@ "typescript": "^4.6.4" }, "dependencies": { - "@kleros/vea-contracts": "^0.1.12" + "@kleros/vea-contracts": "^0.1.12", + "aws-sdk": "^2.1329.0", + "uuid": "^9.0.0" } } diff --git a/contracts/scripts/policyUpdate.ts b/contracts/scripts/policyUpdate.ts new file mode 100644 index 000000000..a4244d114 --- /dev/null +++ b/contracts/scripts/policyUpdate.ts @@ -0,0 +1,117 @@ +import { deployments, getNamedAccounts, getChainId, ethers } from "hardhat"; +import { PolicyRegistry } from "../typechain-types"; +import fs from "fs"; +const AWS = require("aws-sdk"); +const { v4: uuidv4 } = require("uuid"); +const id = uuidv4(); +const currentDate = new Date(); +const formattedDate = `${currentDate.getFullYear()}/${(currentDate.getMonth() + 1) + .toString() + .padStart(2, "0")}/${currentDate.getDate().toString().padStart(2, "0")}`; +const S3_PATH = formattedDate + "/" + id + "/"; + +const s3 = new AWS.S3({ + endpoint: "https://s3.filebase.com", + region: "us-east-1", + signatureVersion: "v4", + accessKeyId: process.env.FILEBASE_ACCESS_KEY, + secretAccessKey: process.env.FILEBASE_SECRET_KEY, +}); +enum HomeChains { + ARBITRUM_ONE = 42161, + ARBITRUM_RINKEBY = 421611, + ARBITRUM_GOERLI = 421613, + HARDHAT = 31337, +} +async function main(filePath: string) { + let courtsV1; + fs.readFile(filePath, "utf8", (err, jsonString) => { + if (err) { + console.log("File read failed:", err); + return; + } + const json = JSON.parse(jsonString); + courtsV1 = json.map((courtDetails) => ({ + ...courtDetails, + name: courtDetails.name, + description: courtDetails.description, + summary: courtDetails.summary, + court: courtDetails.court, + uri: courtDetails.uri, + })); + }); + + // fallback to hardhat node signers on local network + // const governor = (await getNamedAccounts()).governor ?? (await ethers.getSigners())[0].address; + const governor = (await ethers.getSigners())[0]; + const chainId = Number(await getChainId()); + if (!HomeChains[chainId]) { + console.error(`Aborting: script is not compatible with ${chainId}`); + return; + } else { + console.log("deploying to %s with deployer %s", HomeChains[chainId], governor); + } + + //--------uncomment once configuration is set in deployments------ + // const policyRegistryDeployment = await deployments.get("PolicyRegistry"); + const policyRegistry = (await ethers.getContractAt( + "PolicyRegistry", + "0xAF0F49Fe110b48bd512F00d51D141F023c9a9106" // arbitrumgoerli contract address + // policyRegistryDeployment.address + )) as PolicyRegistry; + for (const courtObject of courtsV1) { + var courtV2 = courtObject.court + 1; + var filename = courtObject.name.replace(" ", "-").concat(".json"); + const data = { name: courtObject.name, description: courtObject.description, summary: courtObject.summary }; + let response = await uploadFormDataToIPFS(data, filename); + console.log(response); + + if (response && response.statusCode === 200) { + try { + console.log(courtV2, courtObject.name); + const data = await JSON.parse(response.body); + const cid = "/ipfs/" + data.message.Metadata.cid; + console.log(cid, "cid"); + await policyRegistry.connect(governor).setPolicy(courtV2, courtObject.name, cid); + } catch (error) { + console.log(error); + } + } + } +} + +const uploadFormDataToIPFS = async (data, filename) => { + try { + const params = { + Bucket: process.env.FILEBASE_BUCKET_NAME, + Key: S3_PATH + filename, + ContentType: "application/json", + Body: Buffer.from(JSON.stringify(data)), + }; + const request = await s3.upload(params).promise(); + + const head_params = { + Bucket: process.env.FILEBASE_BUCKET_NAME, + Key: request.key, + }; + const head = await s3.headObject(head_params).promise(); + + return { + statusCode: 200, + body: JSON.stringify({ message: head }), + }; + } catch (error) { + console.log(error); + + return { + statusCode: 500, + body: JSON.stringify({ message: error }), + }; + } +}; +main("./config/policies.v1.mainnet.json") + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); From 564159be50ee01d375c3aac647aeb490872de135 Mon Sep 17 00:00:00 2001 From: Params10 Date: Wed, 8 Mar 2023 10:37:16 +0530 Subject: [PATCH 02/10] fix(in progress): changed upload to ipfs netlify function to support filebase --- web/netlify/functions/uploadToIPFS.ts | 68 +++++++++++++++++++-------- 1 file changed, 48 insertions(+), 20 deletions(-) diff --git a/web/netlify/functions/uploadToIPFS.ts b/web/netlify/functions/uploadToIPFS.ts index dba1562fb..3720157b6 100644 --- a/web/netlify/functions/uploadToIPFS.ts +++ b/web/netlify/functions/uploadToIPFS.ts @@ -1,27 +1,41 @@ -import { Handler } from "@netlify/functions"; -import fetch from "node-fetch"; +const AWS = require("aws-sdk"); +const { v4: uuidv4 } = require("uuid"); +const id = uuidv4(); +const currentDate = new Date(); +const formattedDate = `${currentDate.getFullYear()}/${( + currentDate.getMonth() + 1 +) + .toString() + .padStart(2, "0")}/${currentDate.getDate().toString().padStart(2, "0")}`; +const S3_PATH = formattedDate + "/" + id + "/"; +const amqp = require("amqplib"); -const ESTUARI_API_KEY = process.env["ESTUARY_API_KEY"]; -const ESTUARI_URL = process.env["ESTUARY_GATEWAY"]; +const s3 = new AWS.S3({ + endpoint: "https://s3.filebase.com", + region: "us-east-1", + signatureVersion: "v4", + accessKeyId: process.env.FILEBASE_ACCESS_KEY, + secretAccessKey: process.env.FILEBASE_SECRET_KEY, +}); -export const handler: Handler = async (event, context) => { - context.callbackWaitsForEmptyEventLoop = false; +export const handler = async function (event: any, context: any) { if (event.body) { - const newHeaders = event.headers; - delete newHeaders.host; - const response = await fetch(ESTUARI_URL, { - method: "POST", - headers: { - Authorization: `Bearer ${ESTUARI_API_KEY}`, - ...newHeaders, - }, - body: Buffer.from(event.body, "base64"), - }); - - const parsedResponse = await response.json(); + const params = { + Bucket: process.env.FILEBASE_BUCKET_NAME, + Key: S3_PATH + event.headers["file-name"], + ContentType: "text/plain", + Body: event["body"], + }; + const request = await s3.upload(params).promise(); + const head_params = { + Bucket: process.env.FILEBASE_BUCKET_NAME, + Key: request.key, + }; + const head = await s3.headObject(head_params).promise(); + await rabbitMQUpload(head.Metadata.cid); return { - statusCode: response.status, - body: JSON.stringify(parsedResponse), + statusCode: 200, + body: JSON.stringify({ message: head.Metadata.cid }), }; } return { @@ -29,3 +43,17 @@ export const handler: Handler = async (event, context) => { body: JSON.stringify({ message: "Invalid body format" }), }; }; + +const rabbitMQUpload = async (cid: any) => { + // Connect to RabbitMQ + const conn = await amqp.connect(process.env.RABBITMQ_URL); + const channel = await conn.createChannel(); + const exchange = "filebase"; + await channel.assertExchange(exchange, "fanout", { durable: true }); + // Publish the IPFS CID to the exchange + channel.publish(exchange, "", Buffer.from(cid)); + console.log(`Sent IPFS CID ${cid} to exchange ${exchange}`); + // Close the connection and return success + await channel.close(); + await conn.close(); +}; From 15c8b09ccd9b6c5bac4d2f4c43fc9d19fa5c96b8 Mon Sep 17 00:00:00 2001 From: alcercu <333aleix333@gmail.com> Date: Thu, 9 Mar 2023 17:46:48 +0100 Subject: [PATCH 03/10] chore(web/dependencies): add amqplib and typing libraries --- web/package.json | 3 + yarn.lock | 215 ++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 198 insertions(+), 20 deletions(-) diff --git a/web/package.json b/web/package.json index 05283dabd..4052a74f3 100644 --- a/web/package.json +++ b/web/package.json @@ -35,9 +35,11 @@ "@netlify/functions": "^1.4.0", "@parcel/transformer-svg-react": "~2.7.0", "@parcel/watcher": "~2.0.0", + "@types/amqplib": "^0.10.1", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", "@types/styled-components": "^5.1.26", + "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.53.0", "@typescript-eslint/parser": "^5.53.0", "@typescript-eslint/utils": "^5.53.0", @@ -66,6 +68,7 @@ "@web3-react/core": "^6.1.9", "@web3-react/injected-connector": "^6.0.7", "@web3-react/types": "^6.0.7", + "amqplib": "^0.10.3", "chart.js": "^3.9.1", "chartjs-adapter-moment": "^1.0.0", "core-js": "^3.21.1", diff --git a/yarn.lock b/yarn.lock index 84ce08a48..94bc16665 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,6 +5,17 @@ __metadata: version: 6 cacheKey: 8 +"@acuminous/bitsyntax@npm:^0.1.2": + version: 0.1.2 + resolution: "@acuminous/bitsyntax@npm:0.1.2" + dependencies: + buffer-more-ints: ~1.0.0 + debug: ^4.3.4 + safe-buffer: ~5.1.2 + checksum: d2f9f30dfc8ddb10673e4780fa997fbe43fe3b6cd996b9930803d1b3c5db42fd964f9dab225f9e1cc06a2a22832b5a04e37076f2d283365768c7bd9718642db4 + languageName: node + linkType: hard + "@ampproject/remapping@npm:^2.1.0": version: 2.2.0 resolution: "@ampproject/remapping@npm:2.2.0" @@ -3683,6 +3694,7 @@ __metadata: "@types/node": ^16 "@typescript-eslint/eslint-plugin": ^5.53.0 "@typescript-eslint/parser": ^5.53.0 + aws-sdk: ^2.1329.0 chai: ^4.3.6 chai-ethers: ^0.0.1 dotenv: ^16.0.3 @@ -3709,6 +3721,7 @@ __metadata: ts-node: ^10.8.0 typechain: ^8.1.1 typescript: ^4.6.4 + uuid: ^9.0.0 languageName: unknown linkType: soft @@ -3735,16 +3748,19 @@ __metadata: "@parcel/watcher": ~2.0.0 "@sentry/react": ^7.37.2 "@sentry/tracing": ^7.37.2 + "@types/amqplib": ^0.10.1 "@types/react": ^18.0.25 "@types/react-dom": ^18.0.9 "@types/react-modal": ^3.13.1 "@types/styled-components": ^5.1.26 + "@types/uuid": ^9.0.1 "@typescript-eslint/eslint-plugin": ^5.53.0 "@typescript-eslint/parser": ^5.53.0 "@typescript-eslint/utils": ^5.53.0 "@web3-react/core": ^6.1.9 "@web3-react/injected-connector": ^6.0.7 "@web3-react/types": ^6.0.7 + amqplib: ^0.10.3 chart.js: ^3.9.1 chartjs-adapter-moment: ^1.0.0 core-js: ^3.21.1 @@ -6067,6 +6083,15 @@ __metadata: languageName: node linkType: hard +"@types/amqplib@npm:^0.10.1": + version: 0.10.1 + resolution: "@types/amqplib@npm:0.10.1" + dependencies: + "@types/node": "*" + checksum: 9f7dd964d15df82f73c26e84f028a5fe91ee96878e34625cf09d0153079007d3d506fcf9d327463227e6e30a357e0220bfb0848fb40c121ccd795154004d3733 + languageName: node + linkType: hard + "@types/async-eventemitter@npm:^0.2.1": version: 0.2.1 resolution: "@types/async-eventemitter@npm:0.2.1" @@ -6806,6 +6831,13 @@ __metadata: languageName: node linkType: hard +"@types/uuid@npm:^9.0.1": + version: 9.0.1 + resolution: "@types/uuid@npm:9.0.1" + checksum: c472b8a77cbeded4bc529220b8611afa39bd64677f507838f8083d8aac8033b1f88cb9ddaa2f8589e0dcd2317291d0f6e1379f82d5ceebd6f74f3b4825288e00 + languageName: node + linkType: hard + "@types/web3@npm:1.0.19": version: 1.0.19 resolution: "@types/web3@npm:1.0.19" @@ -7909,6 +7941,18 @@ __metadata: languageName: node linkType: hard +"amqplib@npm:^0.10.3": + version: 0.10.3 + resolution: "amqplib@npm:0.10.3" + dependencies: + "@acuminous/bitsyntax": ^0.1.2 + buffer-more-ints: ~1.0.0 + readable-stream: 1.x >=1.1.9 + url-parse: ~1.5.10 + checksum: 999f0fae748fd29d4d4ec1067c389ecb8cb03f9c060f854a4cab757e911e9690da643419553b0291ec45693996a959b87ec87ae7e72268b818be0e284e60da7a + languageName: node + linkType: hard + "ansi-colors@npm:3.2.3": version: 3.2.3 resolution: "ansi-colors@npm:3.2.3" @@ -8540,6 +8584,24 @@ __metadata: languageName: node linkType: hard +"aws-sdk@npm:^2.1329.0": + version: 2.1331.0 + resolution: "aws-sdk@npm:2.1331.0" + dependencies: + buffer: 4.9.2 + events: 1.1.1 + ieee754: 1.1.13 + jmespath: 0.16.0 + querystring: 0.2.0 + sax: 1.2.1 + url: 0.10.3 + util: ^0.12.4 + uuid: 8.0.0 + xml2js: 0.4.19 + checksum: 19547d3f76a32dbf7a2b03c3551eb24cc286cfbdab168aa328e05a5217998040c179f3e6952ef524077a2eadd757cdbbe0ded01c2abe9ab082998e253707cda1 + languageName: node + linkType: hard + "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" @@ -9494,7 +9556,7 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": +"base64-js@npm:^1.0.2, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 @@ -10015,6 +10077,13 @@ __metadata: languageName: node linkType: hard +"buffer-more-ints@npm:~1.0.0": + version: 1.0.0 + resolution: "buffer-more-ints@npm:1.0.0" + checksum: f6e88dade08a6d36f32d5f3ece141583a4f61d6c36970b16f4699bd00cfe95d4015525c2a741cf46eb918acfd61cac95683fb995189fd65c13b14949c90bfe75 + languageName: node + linkType: hard + "buffer-to-arraybuffer@npm:^0.0.5": version: 0.0.5 resolution: "buffer-to-arraybuffer@npm:0.0.5" @@ -10038,6 +10107,17 @@ __metadata: languageName: node linkType: hard +"buffer@npm:4.9.2": + version: 4.9.2 + resolution: "buffer@npm:4.9.2" + dependencies: + base64-js: ^1.0.2 + ieee754: ^1.1.4 + isarray: ^1.0.0 + checksum: 8801bc1ba08539f3be70eee307a8b9db3d40f6afbfd3cf623ab7ef41dffff1d0a31de0addbe1e66e0ca5f7193eeb667bfb1ecad3647f8f1b0750de07c13295c3 + languageName: node + linkType: hard + "buffer@npm:^5.0.5, buffer@npm:^5.2.1, buffer@npm:^5.4.2, buffer@npm:^5.4.3, buffer@npm:^5.5.0, buffer@npm:^5.6.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -14802,6 +14882,13 @@ __metadata: languageName: node linkType: hard +"events@npm:1.1.1": + version: 1.1.1 + resolution: "events@npm:1.1.1" + checksum: 40431eb005cc4c57861b93d44c2981a49e7feb99df84cf551baed299ceea4444edf7744733f6a6667e942af687359b1f4a87ec1ec4f21d5127dac48a782039b9 + languageName: node + linkType: hard + "events@npm:^3.0.0, events@npm:^3.2.0": version: 3.3.0 resolution: "events@npm:3.3.0" @@ -17451,7 +17538,14 @@ __metadata: languageName: node linkType: hard -"ieee754@npm:^1.1.13, ieee754@npm:^1.2.1": +"ieee754@npm:1.1.13": + version: 1.1.13 + resolution: "ieee754@npm:1.1.13" + checksum: 102df1ba662e316e6160f7ce29c7c7fa3e04f2014c288336c5a9ff40bbcc2a27d209fa2a81ebfb33f28b1941021343d30e9ad8ee85a2d61f79f5936c35edc33d + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13, ieee754@npm:^1.1.4, ieee754@npm:^1.2.1": version: 1.2.1 resolution: "ieee754@npm:1.2.1" checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e @@ -18184,6 +18278,15 @@ __metadata: languageName: node linkType: hard +"is-generator-function@npm:^1.0.7": + version: 1.0.10 + resolution: "is-generator-function@npm:1.0.10" + dependencies: + has-tostringtag: ^1.0.0 + checksum: d54644e7dbaccef15ceb1e5d91d680eb5068c9ee9f9eb0a9e04173eb5542c9b51b5ab52c5537f5703e48d5fddfd376817c1ca07a84a407b7115b769d4bdde72b + languageName: node + linkType: hard + "is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -18514,7 +18617,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": +"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.3, is-typed-array@npm:^1.1.9": version: 1.1.10 resolution: "is-typed-array@npm:1.1.10" dependencies: @@ -18622,7 +18725,7 @@ __metadata: languageName: node linkType: hard -"isarray@npm:1.0.0, isarray@npm:~1.0.0": +"isarray@npm:1.0.0, isarray@npm:^1.0.0, isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" checksum: f032df8e02dce8ec565cf2eb605ea939bdccea528dbcf565cdf92bfa2da9110461159d86a537388ef1acef8815a330642d7885b29010e8f7eac967c9993b65ab @@ -19404,6 +19507,13 @@ __metadata: languageName: node linkType: hard +"jmespath@npm:0.16.0": + version: 0.16.0 + resolution: "jmespath@npm:0.16.0" + checksum: 2d602493a1e4addfd1350ac8c9d54b1b03ed09e305fd863bab84a4ee1f52868cf939dd1a08c5cdea29ce9ba8f86875ebb458b6ed45dab3e1c3f2694503fb2fd9 + languageName: node + linkType: hard + "js-cookie@npm:^2.2.1": version: 2.2.1 resolution: "js-cookie@npm:2.2.1" @@ -25942,18 +26052,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.1, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.0 - resolution: "readable-stream@npm:3.6.0" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 - languageName: node - linkType: hard - -"readable-stream@npm:^1.0.33": +"readable-stream@npm:1.x >=1.1.9, readable-stream@npm:^1.0.33": version: 1.1.14 resolution: "readable-stream@npm:1.1.14" dependencies: @@ -25965,6 +26064,17 @@ __metadata: languageName: node linkType: hard +"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.0, readable-stream@npm:^3.0.1, readable-stream@npm:^3.0.2, readable-stream@npm:^3.0.6, readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": + version: 3.6.0 + resolution: "readable-stream@npm:3.6.0" + dependencies: + inherits: ^2.0.3 + string_decoder: ^1.1.1 + util-deprecate: ^1.0.1 + checksum: d4ea81502d3799439bb955a3a5d1d808592cf3133350ed352aeaa499647858b27b1c4013984900238b0873ec8d0d8defce72469fb7a83e61d53f5ad61cb80dc8 + languageName: node + linkType: hard + "readable-stream@npm:^2.0.0, readable-stream@npm:^2.0.1, readable-stream@npm:^2.0.5, readable-stream@npm:^2.2.2, readable-stream@npm:^2.2.8, readable-stream@npm:^2.2.9, readable-stream@npm:^2.3.0, readable-stream@npm:^2.3.5, readable-stream@npm:^2.3.6, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" @@ -26851,7 +26961,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1": +"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1, safe-buffer@npm:~5.1.2": version: 5.1.2 resolution: "safe-buffer@npm:5.1.2" checksum: f2f1f7943ca44a594893a852894055cf619c1fbcb611237fc39e461ae751187e7baf4dc391a72125e0ac4fb2d8c5c0b3c71529622e6a58f46b960211e704903c @@ -26955,7 +27065,14 @@ __metadata: languageName: node linkType: hard -"sax@npm:~1.2.4": +"sax@npm:1.2.1": + version: 1.2.1 + resolution: "sax@npm:1.2.1" + checksum: 8dca7d5e1cd7d612f98ac50bdf0b9f63fbc964b85f0c4e2eb271f8b9b47fd3bf344c4d6a592e69ecf726d1485ca62cd8a52e603bbc332d18a66af25a9a1045ad + languageName: node + linkType: hard + +"sax@npm:>=0.6.0, sax@npm:~1.2.4": version: 1.2.4 resolution: "sax@npm:1.2.4" checksum: d3df7d32b897a2c2f28e941f732c71ba90e27c24f62ee918bd4d9a8cfb3553f2f81e5493c7f0be94a11c1911b643a9108f231dd6f60df3fa9586b5d2e3e9e1fe @@ -30247,7 +30364,7 @@ __metadata: languageName: node linkType: hard -"url-parse@npm:^1.5.3": +"url-parse@npm:^1.5.3, url-parse@npm:~1.5.10": version: 1.5.10 resolution: "url-parse@npm:1.5.10" dependencies: @@ -30264,6 +30381,16 @@ __metadata: languageName: node linkType: hard +"url@npm:0.10.3": + version: 0.10.3 + resolution: "url@npm:0.10.3" + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + checksum: 7b83ddb106c27bf9bde8629ccbe8d26e9db789c8cda5aa7db72ca2c6f9b8a88a5adf206f3e10db78e6e2d042b327c45db34c7010c1bf0d9908936a17a2b57d05 + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.0 resolution: "url@npm:0.11.0" @@ -30350,6 +30477,19 @@ __metadata: languageName: node linkType: hard +"util@npm:^0.12.4": + version: 0.12.5 + resolution: "util@npm:0.12.5" + dependencies: + inherits: ^2.0.3 + is-arguments: ^1.0.4 + is-generator-function: ^1.0.7 + is-typed-array: ^1.1.3 + which-typed-array: ^1.1.2 + checksum: 705e51f0de5b446f4edec10739752ac25856541e0254ea1e7e45e5b9f9b0cb105bc4bd415736a6210edc68245a7f903bf085ffb08dd7deb8a0e847f60538a38a + languageName: node + linkType: hard + "utila@npm:~0.4": version: 0.4.0 resolution: "utila@npm:0.4.0" @@ -30387,6 +30527,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:8.0.0": + version: 8.0.0 + resolution: "uuid@npm:8.0.0" + bin: + uuid: dist/bin/uuid + checksum: 56d4e23aa7ac26fa2db6bd1778db34cb8c9f5a10df1770a27167874bf6705fc8f14a4ac414af58a0d96c7653b2bd4848510b29d1c2ef8c91ccb17429c1872b5e + languageName: node + linkType: hard + "uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -30405,6 +30554,15 @@ __metadata: languageName: node linkType: hard +"uuid@npm:^9.0.0": + version: 9.0.0 + resolution: "uuid@npm:9.0.0" + bin: + uuid: dist/bin/uuid + checksum: 8dd2c83c43ddc7e1c71e36b60aea40030a6505139af6bee0f382ebcd1a56f6cd3028f7f06ffb07f8cf6ced320b76aea275284b224b002b289f89fe89c389b028 + languageName: node + linkType: hard + "uvu@npm:^0.5.0": version: 0.5.6 resolution: "uvu@npm:0.5.6" @@ -31337,7 +31495,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.9": +"which-typed-array@npm:^1.1.2, which-typed-array@npm:^1.1.9": version: 1.1.9 resolution: "which-typed-array@npm:1.1.9" dependencies: @@ -31856,6 +32014,23 @@ __metadata: languageName: node linkType: hard +"xml2js@npm:0.4.19": + version: 0.4.19 + resolution: "xml2js@npm:0.4.19" + dependencies: + sax: ">=0.6.0" + xmlbuilder: ~9.0.1 + checksum: ca8b2fee430d450a18947786bfd7cd1a353ee00fc6fd550acbc8a8e65f1b4df5e9786fcb2990c1a5514ecd554d445fb74e1d716b3a4fcfffc10554aeb5db482b + languageName: node + linkType: hard + +"xmlbuilder@npm:~9.0.1": + version: 9.0.7 + resolution: "xmlbuilder@npm:9.0.7" + checksum: 8193bb323806a002764f013bea0c6e9ff2dc26fd29109408761b16b59a8ad2214c2abe8e691755fd8b525586e3a0e1efeb92335947d7b0899032b779f1705a53 + languageName: node + linkType: hard + "xmlchars@npm:^2.2.0": version: 2.2.0 resolution: "xmlchars@npm:2.2.0" From fd1ba33d06a3d7fd692505c19ab4a4e3b182fc5f Mon Sep 17 00:00:00 2001 From: alcercu <333aleix333@gmail.com> Date: Thu, 9 Mar 2023 17:59:04 +0100 Subject: [PATCH 04/10] refactor(web/style): netlify upload function --- web/netlify/functions/uploadToIPFS.ts | 105 +++++++++++++++++--------- web/src/utils/uploadFormDataToIPFS.ts | 2 +- 2 files changed, 70 insertions(+), 37 deletions(-) diff --git a/web/netlify/functions/uploadToIPFS.ts b/web/netlify/functions/uploadToIPFS.ts index 3720157b6..27f9973a1 100644 --- a/web/netlify/functions/uploadToIPFS.ts +++ b/web/netlify/functions/uploadToIPFS.ts @@ -1,59 +1,92 @@ -const AWS = require("aws-sdk"); -const { v4: uuidv4 } = require("uuid"); -const id = uuidv4(); -const currentDate = new Date(); -const formattedDate = `${currentDate.getFullYear()}/${( - currentDate.getMonth() + 1 -) - .toString() - .padStart(2, "0")}/${currentDate.getDate().toString().padStart(2, "0")}`; -const S3_PATH = formattedDate + "/" + id + "/"; -const amqp = require("amqplib"); +import { Handler } from "@netlify/functions"; +import AWS from "aws-sdk"; +import { v4 as uuidv4 } from "uuid"; +import amqp from "amqplib"; + +const envVariables = { + accessKey: process.env.FILEBASE_ACCESS_KEY, + secretKey: process.env.FILEBASE_SECRET_KEY, + bucketName: process.env.FILEBASE_BUCKET_NAME, + rabbitMQURL: process.env.RABBITMQ_URL, +}; const s3 = new AWS.S3({ endpoint: "https://s3.filebase.com", region: "us-east-1", signatureVersion: "v4", - accessKeyId: process.env.FILEBASE_ACCESS_KEY, - secretAccessKey: process.env.FILEBASE_SECRET_KEY, + accessKeyId: envVariables.accessKey, + secretAccessKey: envVariables.secretKey, }); -export const handler = async function (event: any, context: any) { - if (event.body) { - const params = { - Bucket: process.env.FILEBASE_BUCKET_NAME, - Key: S3_PATH + event.headers["file-name"], - ContentType: "text/plain", - Body: event["body"], - }; - const request = await s3.upload(params).promise(); - const head_params = { - Bucket: process.env.FILEBASE_BUCKET_NAME, - Key: request.key, +export const handler: Handler = async function (event) { + if (!validEnvVariables()) { + return { + statusCode: 500, + body: JSON.stringify({ message: "Env variables missing" }), }; - const head = await s3.headObject(head_params).promise(); - await rabbitMQUpload(head.Metadata.cid); + } + if (!event.body || typeof event.headers["file-name"] === "undefined") { return { - statusCode: 200, - body: JSON.stringify({ message: head.Metadata.cid }), + statusCode: 500, + body: JSON.stringify({ message: "Invalid body format" }), }; } + + const s3Key = await uploadToS3(event.headers["file-name"]!, event.body).then( + (result) => result.Key + ); + const cid = await getCID(s3Key); + await rabbitMQUpload(cid); + return { - statusCode: 500, - body: JSON.stringify({ message: "Invalid body format" }), + statusCode: 200, + body: JSON.stringify({ message: cid }), + }; +}; + +const validEnvVariables = (): boolean => { + return Object.values(envVariables).reduce( + (acc, current) => acc && typeof current !== "undefined", + true + ); +}; + +const uploadToS3 = (fileName: string, body: string) => { + const params: AWS.S3.PutObjectRequest = { + Bucket: envVariables.bucketName!, + Key: generateS3Path() + fileName, + ContentType: "text/plain", + Body: body, }; + return s3.upload(params).promise(); +}; + +const getCID = async (key: string) => { + const headParams: AWS.S3.HeadObjectRequest = { + Bucket: envVariables.bucketName!, + Key: key, + }; + const head = await s3.headObject(headParams).promise(); + + return head.Metadata?.cid; +}; + +const generateS3Path = (): string => { + const currentDate = new Date(); + const formattedDate = currentDate + .toISOString() + .slice(0, 10) + .replace(/-/g, "/"); + const id = uuidv4(); + return `${formattedDate}/${id}/`; }; const rabbitMQUpload = async (cid: any) => { - // Connect to RabbitMQ - const conn = await amqp.connect(process.env.RABBITMQ_URL); + const conn = await amqp.connect(envVariables.rabbitMQURL!); const channel = await conn.createChannel(); const exchange = "filebase"; await channel.assertExchange(exchange, "fanout", { durable: true }); - // Publish the IPFS CID to the exchange channel.publish(exchange, "", Buffer.from(cid)); - console.log(`Sent IPFS CID ${cid} to exchange ${exchange}`); - // Close the connection and return success await channel.close(); await conn.close(); }; diff --git a/web/src/utils/uploadFormDataToIPFS.ts b/web/src/utils/uploadFormDataToIPFS.ts index 9432bfa26..2ad294650 100644 --- a/web/src/utils/uploadFormDataToIPFS.ts +++ b/web/src/utils/uploadFormDataToIPFS.ts @@ -15,7 +15,7 @@ export function uploadFormDataToIPFS(formData: FormData): Promise { }).then(async (response) => response.status === 200 ? resolve(response) - : reject({ message: (await response.json()).error.reason }) + : reject({ message: (await response.json()).message }) ) ), { From 7c301002206efb406dd95eb1cc1d1097f17765f1 Mon Sep 17 00:00:00 2001 From: alcercu <333aleix333@gmail.com> Date: Fri, 10 Mar 2023 17:35:21 +0100 Subject: [PATCH 05/10] fix(web): correctly upload files to ipfs --- web/netlify/functions/uploadToIPFS.ts | 81 ++++++++++++++++--- web/package.json | 2 + .../Evidence/SubmitEvidenceModal.tsx | 2 +- yarn.lock | 11 +++ 4 files changed, 84 insertions(+), 12 deletions(-) diff --git a/web/netlify/functions/uploadToIPFS.ts b/web/netlify/functions/uploadToIPFS.ts index 27f9973a1..853ab6a26 100644 --- a/web/netlify/functions/uploadToIPFS.ts +++ b/web/netlify/functions/uploadToIPFS.ts @@ -1,7 +1,8 @@ -import { Handler } from "@netlify/functions"; +import { Handler, HandlerEvent } from "@netlify/functions"; import AWS from "aws-sdk"; import { v4 as uuidv4 } from "uuid"; import amqp from "amqplib"; +import busboy from "busboy"; const envVariables = { accessKey: process.env.FILEBASE_ACCESS_KEY, @@ -25,16 +26,15 @@ export const handler: Handler = async function (event) { body: JSON.stringify({ message: "Env variables missing" }), }; } - if (!event.body || typeof event.headers["file-name"] === "undefined") { + if (!event.body) { return { statusCode: 500, body: JSON.stringify({ message: "Invalid body format" }), }; } - const s3Key = await uploadToS3(event.headers["file-name"]!, event.body).then( - (result) => result.Key - ); + const file = parseMultiPartData(event.body, event.headers); + const s3Key = await uploadToS3(file["name"], file["parts"]); const cid = await getCID(s3Key); await rabbitMQUpload(cid); @@ -44,6 +44,34 @@ export const handler: Handler = async function (event) { }; }; +interface IFile { + name: string; + parts: Buffer[]; +} + +const parseMultiPartData = ( + body: string, + headers: HandlerEvent["headers"] +): IFile => { + const file: IFile = { + name: "", + parts: [], + }; + + const bb = busboy({ headers }); + + bb.on("file", (_, filestream, metadata) => { + file.name = metadata.filename; + filestream.on("data", (data) => { + file.parts.push(data); + }); + }); + + bb.write(Buffer.from(body, "base64").toString("utf8")); + + return file; +}; + const validEnvVariables = (): boolean => { return Object.values(envVariables).reduce( (acc, current) => acc && typeof current !== "undefined", @@ -51,14 +79,45 @@ const validEnvVariables = (): boolean => { ); }; -const uploadToS3 = (fileName: string, body: string) => { - const params: AWS.S3.PutObjectRequest = { +interface IUploadedPart { + ETag: string; + PartNumber: number; +} + +const uploadToS3 = async (name: string, parts: Buffer[]) => { + const multipartInfo: AWS.S3.CreateMultipartUploadRequest = { Bucket: envVariables.bucketName!, - Key: generateS3Path() + fileName, - ContentType: "text/plain", - Body: body, + Key: generateS3Path() + name, }; - return s3.upload(params).promise(); + const uploadID = await s3 + .createMultipartUpload(multipartInfo) + .promise() + .then((result) => result.UploadId); + const uploadedParts: IUploadedPart[] = []; + for (const [i, part] of parts.entries()) { + const partNumber = i + 1; + const partInfo: AWS.S3.UploadPartRequest = { + ...multipartInfo, + UploadId: uploadID!, + Body: part, + PartNumber: partNumber, + }; + const test = await s3.uploadPart(partInfo).promise(); + uploadedParts.push({ + ETag: test.ETag!, + PartNumber: partNumber, + }); + } + const completeMultipartUploadParams: AWS.S3.CompleteMultipartUploadRequest = { + ...multipartInfo, + MultipartUpload: { + Parts: uploadedParts, + }, + UploadId: uploadID!, + }; + await s3.completeMultipartUpload(completeMultipartUploadParams).promise(); + + return multipartInfo.Key; }; const getCID = async (key: string) => { diff --git a/web/package.json b/web/package.json index 4052a74f3..2610d05ac 100644 --- a/web/package.json +++ b/web/package.json @@ -64,11 +64,13 @@ "@kleros/ui-components-library": "^1.9.2", "@sentry/react": "^7.37.2", "@sentry/tracing": "^7.37.2", + "@types/busboy": "^1.5.0", "@types/react-modal": "^3.13.1", "@web3-react/core": "^6.1.9", "@web3-react/injected-connector": "^6.0.7", "@web3-react/types": "^6.0.7", "amqplib": "^0.10.3", + "busboy": "^1.6.0", "chart.js": "^3.9.1", "chartjs-adapter-moment": "^1.0.0", "core-js": "^3.21.1", diff --git a/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx b/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx index 64b22a583..e67e1d61a 100644 --- a/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx +++ b/web/src/pages/Cases/CaseDetails/Evidence/SubmitEvidenceModal.tsx @@ -43,7 +43,7 @@ const SubmitEvidenceModal: React.FC<{ .then(async (res) => { const response = await res.json(); if (res.status === 200) { - const cid = "/ipfs/" + response["cid"]; + const cid = "/ipfs/" + response["message"]; await wrapWithToast( disputeKit.submitEvidence(evidenceGroup, cid) ).then(() => { diff --git a/yarn.lock b/yarn.lock index 94bc16665..a5f6f345f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3749,6 +3749,7 @@ __metadata: "@sentry/react": ^7.37.2 "@sentry/tracing": ^7.37.2 "@types/amqplib": ^0.10.1 + "@types/busboy": ^1.5.0 "@types/react": ^18.0.25 "@types/react-dom": ^18.0.9 "@types/react-modal": ^3.13.1 @@ -3761,6 +3762,7 @@ __metadata: "@web3-react/injected-connector": ^6.0.7 "@web3-react/types": ^6.0.7 amqplib: ^0.10.3 + busboy: ^1.6.0 chart.js: ^3.9.1 chartjs-adapter-moment: ^1.0.0 core-js: ^3.21.1 @@ -6177,6 +6179,15 @@ __metadata: languageName: node linkType: hard +"@types/busboy@npm:^1.5.0": + version: 1.5.0 + resolution: "@types/busboy@npm:1.5.0" + dependencies: + "@types/node": "*" + checksum: ffa7bf25c0395f6927526b7d97e70cd2df789e4ca0d231e41855fb08542fa236891ce457d83cc50cac6e5cef6be092ab80597070dcf1413f736462690a23e987 + languageName: node + linkType: hard + "@types/cacheable-request@npm:^6.0.1": version: 6.0.3 resolution: "@types/cacheable-request@npm:6.0.3" From 3f25c4a89b6c6f73392ad29244dd831acdfc0865 Mon Sep 17 00:00:00 2001 From: alcercu <333aleix333@gmail.com> Date: Fri, 17 Mar 2023 12:55:58 +0100 Subject: [PATCH 06/10] fix(web): convert to expected type --- web/netlify/functions/uploadToIPFS.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web/netlify/functions/uploadToIPFS.ts b/web/netlify/functions/uploadToIPFS.ts index 853ab6a26..66621ac08 100644 --- a/web/netlify/functions/uploadToIPFS.ts +++ b/web/netlify/functions/uploadToIPFS.ts @@ -36,6 +36,7 @@ export const handler: Handler = async function (event) { const file = parseMultiPartData(event.body, event.headers); const s3Key = await uploadToS3(file["name"], file["parts"]); const cid = await getCID(s3Key); + console.log(cid); await rabbitMQUpload(cid); return { @@ -67,7 +68,7 @@ const parseMultiPartData = ( }); }); - bb.write(Buffer.from(body, "base64").toString("utf8")); + bb.write(Buffer.from(body, "base64")); return file; }; From d4ef49812640b2e6a578e056c20275abc4b117a2 Mon Sep 17 00:00:00 2001 From: Params10 Date: Mon, 20 Mar 2023 17:10:42 +0530 Subject: [PATCH 07/10] fix: updated code according to requested changes --- contracts/scripts/policyUpdate.ts | 37 ++++++++++++------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/contracts/scripts/policyUpdate.ts b/contracts/scripts/policyUpdate.ts index a4244d114..ff22d962d 100644 --- a/contracts/scripts/policyUpdate.ts +++ b/contracts/scripts/policyUpdate.ts @@ -1,14 +1,8 @@ import { deployments, getNamedAccounts, getChainId, ethers } from "hardhat"; import { PolicyRegistry } from "../typechain-types"; import fs from "fs"; -const AWS = require("aws-sdk"); -const { v4: uuidv4 } = require("uuid"); -const id = uuidv4(); -const currentDate = new Date(); -const formattedDate = `${currentDate.getFullYear()}/${(currentDate.getMonth() + 1) - .toString() - .padStart(2, "0")}/${currentDate.getDate().toString().padStart(2, "0")}`; -const S3_PATH = formattedDate + "/" + id + "/"; +import AWS from "aws-sdk"; +import { v4 as uuidv4 } from "uuid"; const s3 = new AWS.S3({ endpoint: "https://s3.filebase.com", @@ -30,15 +24,7 @@ async function main(filePath: string) { console.log("File read failed:", err); return; } - const json = JSON.parse(jsonString); - courtsV1 = json.map((courtDetails) => ({ - ...courtDetails, - name: courtDetails.name, - description: courtDetails.description, - summary: courtDetails.summary, - court: courtDetails.court, - uri: courtDetails.uri, - })); + courtsV1 = JSON.parse(jsonString); }); // fallback to hardhat node signers on local network @@ -63,16 +49,15 @@ async function main(filePath: string) { var courtV2 = courtObject.court + 1; var filename = courtObject.name.replace(" ", "-").concat(".json"); const data = { name: courtObject.name, description: courtObject.description, summary: courtObject.summary }; - let response = await uploadFormDataToIPFS(data, filename); + let response = await uploadDataToIPFS(data, filename); console.log(response); if (response && response.statusCode === 200) { try { console.log(courtV2, courtObject.name); const data = await JSON.parse(response.body); - const cid = "/ipfs/" + data.message.Metadata.cid; - console.log(cid, "cid"); - await policyRegistry.connect(governor).setPolicy(courtV2, courtObject.name, cid); + const ipfsPath = "/ipfs/" + data.message.Metadata.cid; + await policyRegistry.connect(governor).setPolicy(courtV2, courtObject.name, ipfsPath); } catch (error) { console.log(error); } @@ -80,11 +65,11 @@ async function main(filePath: string) { } } -const uploadFormDataToIPFS = async (data, filename) => { +const uploadDataToIPFS = async (data, filename) => { try { const params = { Bucket: process.env.FILEBASE_BUCKET_NAME, - Key: S3_PATH + filename, + Key: generateS3Path() + filename, ContentType: "application/json", Body: Buffer.from(JSON.stringify(data)), }; @@ -109,6 +94,12 @@ const uploadFormDataToIPFS = async (data, filename) => { }; } }; +const generateS3Path = (): string => { + const currentDate = new Date(); + const formattedDate = currentDate.toISOString().slice(0, 10).replace(/-/g, "/"); + const id = uuidv4(); + return `${formattedDate}/${id}/`; +}; main("./config/policies.v1.mainnet.json") .then(() => process.exit(0)) .catch((error) => { From fd9679ca3d39e154694797a47c40acfd9cd6012a Mon Sep 17 00:00:00 2001 From: Params10 Date: Mon, 20 Mar 2023 17:27:15 +0530 Subject: [PATCH 08/10] fix: deployments usage for policy update --- contracts/scripts/policyUpdate.ts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/contracts/scripts/policyUpdate.ts b/contracts/scripts/policyUpdate.ts index ff22d962d..1adbfffc4 100644 --- a/contracts/scripts/policyUpdate.ts +++ b/contracts/scripts/policyUpdate.ts @@ -37,13 +37,10 @@ async function main(filePath: string) { } else { console.log("deploying to %s with deployer %s", HomeChains[chainId], governor); } - - //--------uncomment once configuration is set in deployments------ - // const policyRegistryDeployment = await deployments.get("PolicyRegistry"); + const policyRegistryDeployment = await deployments.get("PolicyRegistry"); const policyRegistry = (await ethers.getContractAt( "PolicyRegistry", - "0xAF0F49Fe110b48bd512F00d51D141F023c9a9106" // arbitrumgoerli contract address - // policyRegistryDeployment.address + policyRegistryDeployment.address )) as PolicyRegistry; for (const courtObject of courtsV1) { var courtV2 = courtObject.court + 1; From 1bc717635676be4da0ec24398bbfde3194d9d4b3 Mon Sep 17 00:00:00 2001 From: Params10 Date: Mon, 20 Mar 2023 17:40:19 +0530 Subject: [PATCH 09/10] refactor: updated styling changes --- contracts/scripts/policyUpdate.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contracts/scripts/policyUpdate.ts b/contracts/scripts/policyUpdate.ts index 1adbfffc4..004ae3f14 100644 --- a/contracts/scripts/policyUpdate.ts +++ b/contracts/scripts/policyUpdate.ts @@ -43,17 +43,17 @@ async function main(filePath: string) { policyRegistryDeployment.address )) as PolicyRegistry; for (const courtObject of courtsV1) { - var courtV2 = courtObject.court + 1; - var filename = courtObject.name.replace(" ", "-").concat(".json"); + const courtV2 = courtObject.court + 1; + const filename = courtObject.name.replace(" ", "-").concat(".json"); const data = { name: courtObject.name, description: courtObject.description, summary: courtObject.summary }; - let response = await uploadDataToIPFS(data, filename); + const response = await uploadDataToIPFS(data, filename); console.log(response); if (response && response.statusCode === 200) { try { console.log(courtV2, courtObject.name); - const data = await JSON.parse(response.body); - const ipfsPath = "/ipfs/" + data.message.Metadata.cid; + const responseData = await JSON.parse(response.body); + const ipfsPath = "/ipfs/" + responseData.message.Metadata.cid; await policyRegistry.connect(governor).setPolicy(courtV2, courtObject.name, ipfsPath); } catch (error) { console.log(error); From 3f8ad187eb795a559425d04ce73e1098611fdac7 Mon Sep 17 00:00:00 2001 From: jaybuidl Date: Wed, 14 Jun 2023 22:49:01 +0100 Subject: [PATCH 10/10] chore: moved some dependencies to dev deps --- contracts/package.json | 8 ++++---- web/package.json | 4 ++-- yarn.lock | 30 +++++++++++++++--------------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/contracts/package.json b/contracts/package.json index cbfa54fd6..c144291f6 100644 --- a/contracts/package.json +++ b/contracts/package.json @@ -41,6 +41,7 @@ "@types/node": "^16", "@typescript-eslint/eslint-plugin": "^5.53.0", "@typescript-eslint/parser": "^5.53.0", + "aws-sdk": "^2.1331.0", "chai": "^4.3.6", "chai-ethers": "^0.0.1", "dotenv": "^16.0.3", @@ -66,11 +67,10 @@ "solidity-coverage": "^0.8.2", "ts-node": "^10.8.0", "typechain": "^8.1.1", - "typescript": "^4.6.4" + "typescript": "^4.6.4", + "uuid": "^9.0.0" }, "dependencies": { - "@kleros/vea-contracts": "^0.1.12", - "aws-sdk": "^2.1329.0", - "uuid": "^9.0.0" + "@kleros/vea-contracts": "^0.1.12" } } diff --git a/web/package.json b/web/package.json index 2610d05ac..171da49ba 100644 --- a/web/package.json +++ b/web/package.json @@ -36,8 +36,10 @@ "@parcel/transformer-svg-react": "~2.7.0", "@parcel/watcher": "~2.0.0", "@types/amqplib": "^0.10.1", + "@types/busboy": "^1.5.0", "@types/react": "^18.0.25", "@types/react-dom": "^18.0.9", + "@types/react-modal": "^3.13.1", "@types/styled-components": "^5.1.26", "@types/uuid": "^9.0.1", "@typescript-eslint/eslint-plugin": "^5.53.0", @@ -64,8 +66,6 @@ "@kleros/ui-components-library": "^1.9.2", "@sentry/react": "^7.37.2", "@sentry/tracing": "^7.37.2", - "@types/busboy": "^1.5.0", - "@types/react-modal": "^3.13.1", "@web3-react/core": "^6.1.9", "@web3-react/injected-connector": "^6.0.7", "@web3-react/types": "^6.0.7", diff --git a/yarn.lock b/yarn.lock index a5f6f345f..6178686e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3694,7 +3694,7 @@ __metadata: "@types/node": ^16 "@typescript-eslint/eslint-plugin": ^5.53.0 "@typescript-eslint/parser": ^5.53.0 - aws-sdk: ^2.1329.0 + aws-sdk: ^2.1331.0 chai: ^4.3.6 chai-ethers: ^0.0.1 dotenv: ^16.0.3 @@ -8595,9 +8595,9 @@ __metadata: languageName: node linkType: hard -"aws-sdk@npm:^2.1329.0": - version: 2.1331.0 - resolution: "aws-sdk@npm:2.1331.0" +"aws-sdk@npm:^2.1331.0": + version: 2.1397.0 + resolution: "aws-sdk@npm:2.1397.0" dependencies: buffer: 4.9.2 events: 1.1.1 @@ -8608,8 +8608,8 @@ __metadata: url: 0.10.3 util: ^0.12.4 uuid: 8.0.0 - xml2js: 0.4.19 - checksum: 19547d3f76a32dbf7a2b03c3551eb24cc286cfbdab168aa328e05a5217998040c179f3e6952ef524077a2eadd757cdbbe0ded01c2abe9ab082998e253707cda1 + xml2js: 0.5.0 + checksum: 52d9e57198c4506c6e36d821039a2257c0e935e65c2ee40899156cbdc7c96e4449ae2b4693a74e7d0560466c5db672724a374428eddf80859dc6ebd080f53205 languageName: node linkType: hard @@ -32025,20 +32025,20 @@ __metadata: languageName: node linkType: hard -"xml2js@npm:0.4.19": - version: 0.4.19 - resolution: "xml2js@npm:0.4.19" +"xml2js@npm:0.5.0": + version: 0.5.0 + resolution: "xml2js@npm:0.5.0" dependencies: sax: ">=0.6.0" - xmlbuilder: ~9.0.1 - checksum: ca8b2fee430d450a18947786bfd7cd1a353ee00fc6fd550acbc8a8e65f1b4df5e9786fcb2990c1a5514ecd554d445fb74e1d716b3a4fcfffc10554aeb5db482b + xmlbuilder: ~11.0.0 + checksum: 1aa71d62e5bc2d89138e3929b9ea46459157727759cbc62ef99484b778641c0cd21fb637696c052d901a22f82d092a3e740a16b4ce218e81ac59b933535124ea languageName: node linkType: hard -"xmlbuilder@npm:~9.0.1": - version: 9.0.7 - resolution: "xmlbuilder@npm:9.0.7" - checksum: 8193bb323806a002764f013bea0c6e9ff2dc26fd29109408761b16b59a8ad2214c2abe8e691755fd8b525586e3a0e1efeb92335947d7b0899032b779f1705a53 +"xmlbuilder@npm:~11.0.0": + version: 11.0.1 + resolution: "xmlbuilder@npm:11.0.1" + checksum: 7152695e16f1a9976658215abab27e55d08b1b97bca901d58b048d2b6e106b5af31efccbdecf9b07af37c8377d8e7e821b494af10b3a68b0ff4ae60331b415b0 languageName: node linkType: hard